From 2159ec753959a5bc5f0cc81e594ca90842814da7 Mon Sep 17 00:00:00 2001 From: hongshuqing Date: Thu, 18 Apr 2024 14:52:08 +0800 Subject: [PATCH 001/365] fix(h2): modify wrong lslp drvb config --- .../esp_hw_support/port/esp32h2/private_include/pmu_param.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/components/esp_hw_support/port/esp32h2/private_include/pmu_param.h b/components/esp_hw_support/port/esp32h2/private_include/pmu_param.h index 58fbf97ff48b..52ad70fa2135 100644 --- a/components/esp_hw_support/port/esp32h2/private_include/pmu_param.h +++ b/components/esp_hw_support/port/esp32h2/private_include/pmu_param.h @@ -340,7 +340,7 @@ typedef struct { }, \ .lp_sys[PMU_MODE_LP_SLEEP] = { \ .analog = { \ - .drv_b = PMU_LP_DRVB_DEEPSLEEP, \ + .drv_b = PMU_LP_DRVB_LIGHTSLEEP, \ .pd_cur = PMU_PD_CUR_SLEEP_DEFAULT, \ .bias_sleep = PMU_BIASSLP_SLEEP_DEFAULT, \ .slp_xpd = PMU_LP_SLP_XPD_SLEEP_DEFAULT, \ @@ -407,7 +407,7 @@ typedef struct { typedef struct pmu_sleep_machine_constant { struct { - uint16_t min_slp_time_us; /* Mininum sleep protection time (unit: microsecond) */ + uint16_t min_slp_time_us; /* Minimum sleep protection time (unit: microsecond) */ uint8_t reserved0; uint16_t reserved1; uint16_t analog_wait_time_us; /* LP LDO power up wait time (unit: microsecond) */ @@ -418,7 +418,7 @@ typedef struct pmu_sleep_machine_constant { uint16_t power_up_wait_time_us; /* (unit: microsecond) */ } lp; struct { - uint16_t min_slp_time_us; /* Mininum sleep protection time (unit: microsecond) */ + uint16_t min_slp_time_us; /* Minimum sleep protection time (unit: microsecond) */ uint16_t analog_wait_time_us; /* HP LDO power up wait time (unit: microsecond) */ uint16_t power_supply_wait_time_us; /* (unit: microsecond) */ uint16_t power_up_wait_time_us; /* (unit: microsecond) */ From 04a231f29769e553e9ac43869692156bcbfa0614 Mon Sep 17 00:00:00 2001 From: morris Date: Tue, 30 Jul 2024 14:38:28 +0800 Subject: [PATCH 002/365] feat(blink): support esp32 p4 core board --- examples/get-started/blink/sdkconfig.defaults.esp32p4 | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 examples/get-started/blink/sdkconfig.defaults.esp32p4 diff --git a/examples/get-started/blink/sdkconfig.defaults.esp32p4 b/examples/get-started/blink/sdkconfig.defaults.esp32p4 new file mode 100644 index 000000000000..cc80f60a684e --- /dev/null +++ b/examples/get-started/blink/sdkconfig.defaults.esp32p4 @@ -0,0 +1,2 @@ +CONFIG_BLINK_GPIO=44 +CONFIG_BLINK_LED_STRIP=y From 30c13225ca1025b69dd131c12f656bcf6912f93e Mon Sep 17 00:00:00 2001 From: David Cermak Date: Fri, 30 Aug 2024 08:33:06 +0200 Subject: [PATCH 003/365] fix(examples): esp_hosted as default for Wi-Fi connect on P4 --- examples/protocols/mqtt/tcp/README.md | 153 +++++++++++++++++- .../protocols/mqtt/tcp/sdkconfig.ci.p4_eppp | 5 + .../protocols/mqtt/tcp/sdkconfig.ci.p4_wifi | 3 +- 3 files changed, 154 insertions(+), 7 deletions(-) create mode 100644 examples/protocols/mqtt/tcp/sdkconfig.ci.p4_eppp diff --git a/examples/protocols/mqtt/tcp/README.md b/examples/protocols/mqtt/tcp/README.md index 26a7fd78ec54..205b559f483b 100644 --- a/examples/protocols/mqtt/tcp/README.md +++ b/examples/protocols/mqtt/tcp/README.md @@ -64,7 +64,150 @@ DATA=data It is possible to use Wi-Fi connection on targets that do not support native Wi-Fi peripheral. This example demonstrates using `esp_wifi_remote` on ESP32P4 in the test configuration defined as `sdkconfig.ci.p4_wifi`. This configuration requires another ESP target with native Wi-Fi support physically connected to the ESP32-P4. -### Configure master-slave verification +This uses [esp_hosted](https://components.espressif.com/components/espressif/esp_hosted) project by default, please refer to its documentation for more details. +Note, that `esp_hosted` library currently transmits Wi-Fi credentials in plain text. In case this is a concern, please choose the `eppp` option in `esp_wifi_remote` configuration menu (`CONFIG_ESP_WIFI_REMOTE_LIBRARY_EPPP=y`) and setup master-slave verification (please see [eppp: Configure master-slave verification](#eppp)). + +### esp-hosted: Configure the slave project + +You first need to build and flash the slave project. It's possible to perform this action directly from the host project, these commands can be used to set the slave target device (for example ESP32C6), build and flash the slave project. You will have to hold the RST button to keep the host device (ESP32-P4) in reset while flashing the slave device. +``` +idf.py -C managed_components/espressif__esp_hosted/slave/ -B build_slave set-target esp32c6 +idf.py -C managed_components/espressif__esp_hosted/slave/ -B build_slave build flash monitor +``` + +### esp-hosted: Example Output of the slave device + +``` +I (348) cpu_start: Unicore app +I (357) cpu_start: Pro cpu start user code +I (357) cpu_start: cpu freq: 160000000 Hz +I (357) app_init: Application information: +I (360) app_init: Project name: network_adapter +I (365) app_init: App version: qa-test-full-master-esp32c5-202 +I (372) app_init: Compile time: Aug 30 2024 08:10:15 +I (378) app_init: ELF file SHA256: 6220fafe8... +I (383) app_init: ESP-IDF: v5.4-dev-2600-g1157a27964c-dirt +I (390) efuse_init: Min chip rev: v0.0 +I (395) efuse_init: Max chip rev: v0.99 +I (400) efuse_init: Chip rev: v0.1 +I (405) heap_init: Initializing. RAM available for dynamic allocation: +I (412) heap_init: At 4082FCD0 len 0004C940 (306 KiB): RAM +I (418) heap_init: At 4087C610 len 00002F54 (11 KiB): RAM +I (424) heap_init: At 50000000 len 00003FE8 (15 KiB): RTCRAM +I (432) spi_flash: detected chip: generic +I (435) spi_flash: flash io: dio +I (440) sleep_gpio: Configure to isolate all GPIO pins in sleep state +I (447) sleep_gpio: Enable automatic switching of GPIO sleep configuration +I (454) coexist: coex firmware version: 8da3f50af +I (481) coexist: coexist rom version 5b8dcfa +I (481) main_task: Started on CPU0 +I (481) main_task: Calling app_main() +I (482) fg_mcu_slave: ********************************************************************* +I (491) fg_mcu_slave: ESP-Hosted-MCU Slave FW version :: 0.0.6 +I (501) fg_mcu_slave: Transport used :: SDIO only +I (510) fg_mcu_slave: ********************************************************************* +I (519) fg_mcu_slave: Supported features are: +I (524) fg_mcu_slave: - WLAN over SDIO +I (528) h_bt: - BT/BLE +I (531) h_bt: - HCI Over SDIO +I (535) h_bt: - BLE only +I (539) fg_mcu_slave: capabilities: 0xd +I (543) fg_mcu_slave: Supported extended features are: +I (549) h_bt: - BT/BLE (extended) +I (553) fg_mcu_slave: extended capabilities: 0x0 +I (563) h_bt: ESP Bluetooth MAC addr: 40:4c:ca:5b:a0:8a +I (564) BLE_INIT: Using main XTAL as clock source +I (574) BLE_INIT: ble controller commit:[7491a85] +I (575) BLE_INIT: Bluetooth MAC: 40:4c:ca:5b:a0:8a +I (581) phy_init: phy_version 310,dde1ba9,Jun 4 2024,16:38:11 +I (641) phy: libbtbb version: 04952fd, Jun 4 2024, 16:38:26 +I (642) SDIO_SLAVE: Using SDIO interface +I (642) SDIO_SLAVE: sdio_init: sending mode: SDIO_SLAVE_SEND_STREAM +I (648) SDIO_SLAVE: sdio_init: ESP32-C6 SDIO RxQ[20] timing[0] + +I (1155) fg_mcu_slave: Start Data Path +I (1165) fg_mcu_slave: Initial set up done +I (1165) slave_ctrl: event ESPInit +``` + +### esp_hosted: Example Output of the master device (ESP32-P4) + +``` +I (1833) sdio_wrapper: Function 0 Blocksize: 512 +I (1843) sdio_wrapper: Function 1 Blocksize: 512 +I (1843) H_SDIO_DRV: SDIO Host operating in STREAMING MODE +I (1853) H_SDIO_DRV: generate slave intr +I (1863) transport: Received INIT event from ESP32 peripheral +I (1873) transport: EVENT: 12 +I (1873) transport: EVENT: 11 +I (1873) transport: capabilities: 0xd +I (1873) transport: Features supported are: +I (1883) transport: * WLAN +I (1883) transport: - HCI over SDIO +I (1893) transport: - BLE only +I (1893) transport: EVENT: 13 +I (1893) transport: ESP board type is : 13 + +I (1903) transport: Base transport is set-up + +I (1903) transport: Slave chip Id[12] +I (1913) hci_stub_drv: Host BT Support: Disabled +I (1913) H_SDIO_DRV: Received INIT event +I (1923) rpc_evt: EVENT: ESP INIT + +I (1923) rpc_wrap: Received Slave ESP Init +I (2703) rpc_core: <-- RPC_Req [0x116], uid 1 +I (2823) rpc_rsp: --> RPC_Resp [0x216], uid 1 +I (2823) rpc_core: <-- RPC_Req [0x139], uid 2 +I (2833) rpc_rsp: --> RPC_Resp [0x239], uid 2 +I (2833) rpc_core: <-- RPC_Req [0x104], uid 3 +I (2843) rpc_rsp: --> RPC_Resp [0x204], uid 3 +I (2843) rpc_core: <-- RPC_Req [0x118], uid 4 +I (2933) rpc_rsp: --> RPC_Resp [0x218], uid 4 +I (2933) example_connect: Connecting to Cermakowifi... +I (2933) rpc_core: <-- RPC_Req [0x11c], uid 5 +I (2943) rpc_evt: Event [0x2b] received +I (2943) rpc_evt: Event [0x2] received +I (2953) rpc_evt: EVT rcvd: Wi-Fi Start +I (2953) rpc_core: <-- RPC_Req [0x101], uid 6 +I (2973) rpc_rsp: --> RPC_Resp [0x21c], uid 5 +I (2973) H_API: esp_wifi_remote_connect +I (2973) rpc_core: <-- RPC_Req [0x11a], uid 7 +I (2983) rpc_rsp: --> RPC_Resp [0x201], uid 6 +I (3003) rpc_rsp: --> RPC_Resp [0x21a], uid 7 +I (3003) example_connect: Waiting for IP(s) +I (5723) rpc_evt: Event [0x2b] received +I (5943) esp_wifi_remote: esp_wifi_internal_reg_rxcb: sta: 0x400309fe +0x400309fe: wifi_sta_receive at /home/david/esp/idf/components/esp_wifi/src/wifi_netif.c:38 + +I (7573) example_connect: Got IPv6 event: Interface "example_netif_sta" address: fe80:0000:0000:0000:424c:caff:fe5b:a088, type: ESP_IP6_ADDR_IS_LINK_LOCAL +I (9943) esp_netif_handlers: example_netif_sta ip: 192.168.0.29, mask: 255.255.255.0, gw: 192.168.0.1 +I (9943) example_connect: Got IPv4 event: Interface "example_netif_sta" address: 192.168.0.29 +I (9943) example_common: Connected to example_netif_sta +I (9953) example_common: - IPv4 address: 192.168.0.29, +I (9963) example_common: - IPv6 address: fe80:0000:0000:0000:424c:caff:fe5b:a088, type: ESP_IP6_ADDR_IS_LINK_LOCAL +I (9973) mqtt_example: Other event id:7 +I (9973) main_task: Returned from app_main() +I (10253) mqtt_example: MQTT_EVENT_CONNECTED +I (10253) mqtt_example: sent publish successful, msg_id=45053 +I (10253) mqtt_example: sent subscribe successful, msg_id=34643 +I (10263) mqtt_example: sent subscribe successful, msg_id=2358 +I (10263) mqtt_example: sent unsubscribe successful, msg_id=57769 +I (10453) mqtt_example: MQTT_EVENT_PUBLISHED, msg_id=45053 +I (10603) mqtt_example: MQTT_EVENT_SUBSCRIBED, msg_id=34643 +I (10603) mqtt_example: sent publish successful, msg_id=0 +I (10603) mqtt_example: MQTT_EVENT_SUBSCRIBED, msg_id=2358 +I (10613) mqtt_example: sent publish successful, msg_id=0 +I (10613) mqtt_example: MQTT_EVENT_UNSUBSCRIBED, msg_id=57769 +I (10713) mqtt_example: MQTT_EVENT_DATA +TOPIC=/topic/qos0 +DATA=data +I (10863) mqtt_example: MQTT_EVENT_DATA +TOPIC=/topic/qos0 +DATA=data +``` + +### eppp: Configure master-slave verification In order to secure the physical connection between the ESP32-P4 (master) and the slave device, it is necessary to set certificates and keys for each side. To bootstrap this step, you can use one-time generated self-signed RSA keys and certificates running: @@ -72,7 +215,7 @@ To bootstrap this step, you can use one-time generated self-signed RSA keys and ./managed_components/espressif__esp_wifi_remote/examples/test_certs/generate_test_certs.sh espressif.local ``` -### Configure the slave project +#### eppp: Configure the slave project It is recommended to create a new project from `esp_wifi_remote` component's example with ``` @@ -91,7 +234,7 @@ Please follow these steps to setup the slave application: - `CONFIG_ESP_WIFI_REMOTE_EPPP_SERVER_KEY` -- slave's private key * `idf.py build flash monitor` -### Configure the master project (ESP32-P4) +#### eppp: Configure the master project (ESP32-P4) similarly to the slave project, we have to configure * the physical connection @@ -105,7 +248,7 @@ After project configuration, you build and flash the board with idf.py build flash monitor ``` -### Example Output of the slave device +### eppp: Example Output of the slave device ``` I (7982) main_task: Returned from app_main() @@ -183,7 +326,7 @@ I (15682) rpc_server: Main DNS:185.162.24.55 I (15682) rpc_server: IP address:192.168.0.33 ``` -### Example Output of the master device (ESP32-P4) +### eppp: Example Output of the master device (ESP32-P4) ``` I (445) example_connect: Start example_connect. diff --git a/examples/protocols/mqtt/tcp/sdkconfig.ci.p4_eppp b/examples/protocols/mqtt/tcp/sdkconfig.ci.p4_eppp new file mode 100644 index 000000000000..8d423df47066 --- /dev/null +++ b/examples/protocols/mqtt/tcp/sdkconfig.ci.p4_eppp @@ -0,0 +1,5 @@ +CONFIG_IDF_TARGET="esp32p4" +CONFIG_EXAMPLE_CONNECT_WIFI=y +CONFIG_ESP_WIFI_REMOTE_LIBRARY_EPPP=y +CONFIG_ESP_WIFI_REMOTE_EPPP_UART_TX_PIN=17 +CONFIG_ESP_WIFI_REMOTE_EPPP_UART_RX_PIN=16 diff --git a/examples/protocols/mqtt/tcp/sdkconfig.ci.p4_wifi b/examples/protocols/mqtt/tcp/sdkconfig.ci.p4_wifi index 7a5574c7f3aa..a2ea93a35971 100644 --- a/examples/protocols/mqtt/tcp/sdkconfig.ci.p4_wifi +++ b/examples/protocols/mqtt/tcp/sdkconfig.ci.p4_wifi @@ -1,4 +1,3 @@ CONFIG_IDF_TARGET="esp32p4" CONFIG_EXAMPLE_CONNECT_WIFI=y -CONFIG_ESP_WIFI_REMOTE_EPPP_UART_TX_PIN=17 -CONFIG_ESP_WIFI_REMOTE_EPPP_UART_RX_PIN=16 +CONFIG_ESP_WIFI_REMOTE_LIBRARY_HOSTED=y From 4a185b824dfad3b33cc7c29695848965408561e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Rohl=C3=ADnek?= Date: Wed, 4 Sep 2024 12:11:43 +0200 Subject: [PATCH 004/365] fix(storage/vfs): fix incorrect test case configuration --- .../spiffs/host_test/main/host_test_spiffs.c | 40 +++++++++---------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/components/spiffs/host_test/main/host_test_spiffs.c b/components/spiffs/host_test/main/host_test_spiffs.c index 4fcfce13c1f9..8a63c1316acf 100644 --- a/components/spiffs/host_test/main/host_test_spiffs.c +++ b/components/spiffs/host_test/main/host_test_spiffs.c @@ -281,29 +281,27 @@ TEST(spiffs, erase_check) init_spiffs(&fs, 5); - for (int boot_iter = 0; boot_iter <= 10000; ++boot_iter) { - for (int write_iter = 0; write_iter < 1000; ++write_iter) { - spiffs_file f = SPIFFS_open(&fs, "/test", SPIFFS_CREAT | SPIFFS_TRUNC | SPIFFS_RDWR, 0); - if (f < 0) { - fprintf(stderr, "Failed to open file\n"); + for (int write_iter = 0; write_iter < 100; ++write_iter) { + spiffs_file f = SPIFFS_open(&fs, "/test", SPIFFS_CREAT | SPIFFS_TRUNC | SPIFFS_RDWR, 0); + if (f < 0) { + fprintf(stderr, "Failed to open file\n"); #if !CONFIG_ESP_PARTITION_ERASE_CHECK - TEST_FAIL(); + TEST_FAIL(); #endif - return; - } - const int data_sz = 7 * 1024; - char data[data_sz]; - memset(data, 0x55, data_sz); - int cb = SPIFFS_write(&fs, f, data, data_sz); - if (cb != data_sz) { - fprintf(stderr, "Failed to write file\n"); - TEST_FAIL(); - } - int rc = SPIFFS_close(&fs, f); - if (rc < 0) { - fprintf(stderr, "Failed to close file\n"); - TEST_FAIL(); - } + return; + } + const int data_sz = 7 * 1024; + char data[data_sz]; + memset(data, 0x55, data_sz); + int cb = SPIFFS_write(&fs, f, data, data_sz); + if (cb != data_sz) { + fprintf(stderr, "Failed to write file\n"); + TEST_FAIL(); + } + int rc = SPIFFS_close(&fs, f); + if (rc < 0) { + fprintf(stderr, "Failed to close file\n"); + TEST_FAIL(); } } From 1f0763b9322702c033bd68a76ba8074e44cabbad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Rohl=C3=ADnek?= Date: Thu, 1 Aug 2024 11:38:21 +0200 Subject: [PATCH 005/365] fix(storage/example): correct alloc function --- .../perf_benchmark/main/perf_benchmark_example_tests.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/examples/storage/perf_benchmark/main/perf_benchmark_example_tests.c b/examples/storage/perf_benchmark/main/perf_benchmark_example_tests.c index 1e40685f15cd..789e6ce305bc 100644 --- a/examples/storage/perf_benchmark/main/perf_benchmark_example_tests.c +++ b/examples/storage/perf_benchmark/main/perf_benchmark_example_tests.c @@ -50,7 +50,7 @@ static void print_results(const char *name, double time, size_t size, int repeat void spiflash_speed_test_raw_run(size_t repeat_count) { const size_t buf_size = CONFIG_EXAMPLE_TARGET_RW_SIZE; - uint32_t* buf = (uint32_t*) calloc(1, buf_size); + uint32_t* buf = (uint32_t*) heap_caps_calloc(1, buf_size, MALLOC_CAP_INTERNAL | MALLOC_CAP_CACHE_ALIGNED | MALLOC_CAP_DMA); assert(buf != NULL); esp_fill_random(buf, buf_size); @@ -159,7 +159,7 @@ static void run_fs_tests(const char *base_path, const char *type, bool new_file, assert(tiny_size < less_than_target_size); const size_t buf_size = more_than_target_size; - uint32_t* buf = (uint32_t*) calloc(1, buf_size); + uint32_t* buf = (uint32_t*) heap_caps_calloc(1, buf_size, MALLOC_CAP_INTERNAL | MALLOC_CAP_CACHE_ALIGNED | MALLOC_CAP_DMA); assert(buf != NULL); esp_fill_random(buf, buf_size); @@ -219,7 +219,8 @@ void sdcard_speed_test_raw_run(sdmmc_card_t *card, size_t repeat_count) size_t sector_count = CONFIG_EXAMPLE_TARGET_RW_SIZE / sector_size; size_t subsection_sector_count = sector_count / 4; - char *buf = (char *) calloc(1, sector_count * sector_size); + // Best performance is achieved when the buffer is internal (not PSRAM) and aligned to RAM line size + char *buf = (char *) heap_caps_calloc(1, sector_count * sector_size, MALLOC_CAP_INTERNAL | MALLOC_CAP_CACHE_ALIGNED | MALLOC_CAP_DMA); assert(buf != NULL); struct timeval tv_start; From 4e76f8bdc19d3faf49f1ecfa2b0586c470b49b0d Mon Sep 17 00:00:00 2001 From: gaoxu Date: Wed, 18 Sep 2024 15:05:56 +0800 Subject: [PATCH 006/365] docs(adc): update adc oneshot/continuous docs on P4 --- docs/docs_not_updated/esp32p4.txt | 2 - .../peripherals/adc_continuous.rst | 46 ++++++------------- .../api-reference/peripherals/adc_oneshot.rst | 42 +++++------------ .../peripherals/adc_continuous.rst | 46 ++++++------------- .../api-reference/peripherals/adc_oneshot.rst | 42 +++++------------ 5 files changed, 50 insertions(+), 128 deletions(-) diff --git a/docs/docs_not_updated/esp32p4.txt b/docs/docs_not_updated/esp32p4.txt index e11054ce4e55..158999f510af 100644 --- a/docs/docs_not_updated/esp32p4.txt +++ b/docs/docs_not_updated/esp32p4.txt @@ -6,8 +6,6 @@ api-guides/usb-otg-console.rst api-guides/esp-wifi-mesh.rst api-guides/dfu.rst api-guides/wifi-security.rst -api-reference/peripherals/adc_continuous.rst -api-reference/peripherals/adc_oneshot.rst api-reference/peripherals/touch_element.rst api-reference/peripherals/touch_pad.rst api-reference/peripherals/adc_calibration.rst diff --git a/docs/en/api-reference/peripherals/adc_continuous.rst b/docs/en/api-reference/peripherals/adc_continuous.rst index 32dc9b5c7bf1..853f82314d35 100644 --- a/docs/en/api-reference/peripherals/adc_continuous.rst +++ b/docs/en/api-reference/peripherals/adc_continuous.rst @@ -290,39 +290,19 @@ To do further calibration to convert the ADC raw result to voltage in mV, please Hardware Limitations ^^^^^^^^^^^^^^^^^^^^ -- A specific ADC unit can only work under one operating mode at any one time, either continuous mode or one-shot mode. :cpp:func:`adc_continuous_start` has provided the protection. - -- Random Number Generator (RNG) uses ADC as an input source. When ADC continuous mode driver works, the random number generated from RNG will be less random. - -.. only:: esp32 or esp32s2 - - - ADC2 is also used by Wi-Fi. :cpp:func:`adc_continuous_start` has provided the protection between Wi-Fi driver and ADC continuous mode driver. - -.. only:: esp32 - - - ADC continuous mode driver uses I2S0 peripheral as hardware DMA FIFO. Therefore, if I2S0 is in use already, the :cpp:func:`adc_continuous_new_handle` will return :c:macro:`ESP_ERR_NOT_FOUND`. - - - ESP32 DevKitC: GPIO 0 cannot be used due to external auto program circuits. - - - ESP-WROVER-KIT: GPIO 0, 2, 4, and 15 cannot be used due to external connections for different purposes. - -.. only:: esp32s2 - - - ADC continuous mode driver uses SPI3 peripheral as hardware DMA FIFO. Therefore, if SPI3 is in use already, the :cpp:func:`adc_continuous_new_handle` will return :c:macro:`ESP_ERR_NOT_FOUND`. - -.. only:: esp32c3 - - - ADC2 DMA functionality is no longer supported to retrieve ADC conversion results due to hardware limitations, as unstable results have been observed. This issue can be found in `ESP32C3 Errata `_. For compatibility, you can enable :ref:`CONFIG_ADC_CONTINUOUS_FORCE_USE_ADC2_ON_C3_S3` to force use ADC2. - -.. only:: esp32s3 - - - ADC2 DMA functionality is no longer supported to retrieve ADC conversion results due to hardware limitations, as unstable results have been observed. This issue can be found in `ESP32S3 Errata `_. For compatibility, you can enable :ref:`CONFIG_ADC_CONTINUOUS_FORCE_USE_ADC2_ON_C3_S3` to force use ADC2. - - .. _adc-continuous-power-management: - -.. only:: not esp32s3 - - .. _adc-continuous-power-management: +.. list:: + + - A specific ADC unit can only work under one operating mode at any one time, either continuous mode or one-shot mode. :cpp:func:`adc_continuous_start` has provided the protection. + - Random Number Generator (RNG) uses ADC as an input source. When ADC continuous mode driver works, the random number generated from RNG will be less random. + :esp32 or esp32s2: - ADC2 is also used by Wi-Fi. :cpp:func:`adc_continuous_start` has provided the protection between Wi-Fi driver and ADC continuous mode driver. + :esp32: - ADC continuous mode driver uses I2S0 peripheral as hardware DMA FIFO. Therefore, if I2S0 is in use already, the :cpp:func:`adc_continuous_new_handle` will return :c:macro:`ESP_ERR_NOT_FOUND`. + :esp32: - ESP32 DevKitC: GPIO 0 cannot be used due to external auto program circuits. + :esp32: - ESP-WROVER-KIT: GPIO 0, 2, 4, and 15 cannot be used due to external connections for different purposes. + :esp32s2: - ADC continuous mode driver uses SPI3 peripheral as hardware DMA FIFO. Therefore, if SPI3 is in use already, the :cpp:func:`adc_continuous_new_handle` will return :c:macro:`ESP_ERR_NOT_FOUND`. + :esp32c3: - ADC2 DMA functionality is no longer supported to retrieve ADC conversion results due to hardware limitations, as unstable results have been observed. This issue can be found in `ESP32C3 Errata `_. For compatibility, you can enable :ref:`CONFIG_ADC_CONTINUOUS_FORCE_USE_ADC2_ON_C3_S3` to force use ADC2. + :esp32s3: - ADC2 DMA functionality is no longer supported to retrieve ADC conversion results due to hardware limitations, as unstable results have been observed. This issue can be found in `ESP32S3 Errata `_. For compatibility, you can enable :ref:`CONFIG_ADC_CONTINUOUS_FORCE_USE_ADC2_ON_C3_S3` to force use ADC2. + +.. _adc-continuous-power-management: Power Management ^^^^^^^^^^^^^^^^ diff --git a/docs/en/api-reference/peripherals/adc_oneshot.rst b/docs/en/api-reference/peripherals/adc_oneshot.rst index c7dfec41d001..24fee32be510 100644 --- a/docs/en/api-reference/peripherals/adc_oneshot.rst +++ b/docs/en/api-reference/peripherals/adc_oneshot.rst @@ -3,20 +3,17 @@ Analog to Digital Converter (ADC) Oneshot Mode Driver :link_to_translation:`zh_CN:[中文]` -{IDF_TARGET_ADC_NUM:default="two", esp32c2="one", esp32c6="one", esp32h2="one", esp32c5="one"} - Introduction ------------ The Analog to Digital Converter is integrated on the chip and is capable of measuring analog signals from specific analog IO pins. -{IDF_TARGET_NAME} has {IDF_TARGET_ADC_NUM} ADC unit(s), which can be used in scenario(s) like: - -- Generate one-shot ADC conversion result +{IDF_TARGET_NAME} has {SOC_ADC_PERIPH_NUM} ADC unit(s), which can be used in scenario(s) like: -.. only:: SOC_ADC_DMA_SUPPORTED +.. list:: - - Generate continuous ADC conversion results + - Generate one-shot ADC conversion result + :SOC_ADC_DMA_SUPPORTED: - Generate continuous ADC conversion results This guide introduces ADC oneshot mode conversion. @@ -164,31 +161,16 @@ Read Raw Result Hardware Limitations ^^^^^^^^^^^^^^^^^^^^ -- Random Number Generator (RNG) uses ADC as an input source. When ADC :cpp:func:`adc_oneshot_read` works, the random number generated from RNG will be less random. - -.. only:: SOC_ADC_DMA_SUPPORTED - - - A specific ADC unit can only work under one operating mode at any one time, either continuous mode or oneshot mode. :cpp:func:`adc_oneshot_read` has provided the protection. - -.. only:: esp32 or esp32s2 or esp32s3 - - - ADC2 is also used by Wi-Fi. :cpp:func:`adc_oneshot_read` has provided protection between the Wi-Fi driver and ADC oneshot mode driver. - -.. only:: esp32c3 - - - ADC2 oneshot mode is no longer supported, due to hardware limitations. The results are not stable. This issue can be found in `ESP32-C3 Series SoC Errata `_. For compatibility, you can enable :ref:`CONFIG_ADC_ONESHOT_FORCE_USE_ADC2_ON_C3` to force use ADC2. - -.. only:: esp32 - - - ESP32-DevKitC: GPIO0 cannot be used in oneshot mode, because the DevKit has used it for auto-flash. - - - ESP-WROVER-KIT: GPIO 0, 2, 4, and 15 cannot be used due to external connections for different purposes. - - .. _adc-oneshot-power-management: +.. list:: -.. only:: not esp32 + - Random Number Generator (RNG) uses ADC as an input source. When ADC :cpp:func:`adc_oneshot_read` works, the random number generated from RNG will be less random. + :SOC_ADC_DMA_SUPPORTED: - A specific ADC unit can only work under one operating mode at any one time, either continuous mode or oneshot mode. :cpp:func:`adc_oneshot_read` has provided the protection. + :esp32 or esp32s2 or esp32s3: - ADC2 is also used by Wi-Fi. :cpp:func:`adc_oneshot_read` has provided protection between the Wi-Fi driver and ADC oneshot mode driver. + :esp32c3: - ADC2 oneshot mode is no longer supported, due to hardware limitations. The results are not stable. This issue can be found in `ESP32-C3 Series SoC Errata `_. For compatibility, you can enable :ref:`CONFIG_ADC_ONESHOT_FORCE_USE_ADC2_ON_C3` to force use ADC2. + :esp32: - ESP32-DevKitC: GPIO0 cannot be used in oneshot mode, because the DevKit has used it for auto-flash. + :esp32: - ESP-WROVER-KIT: GPIO 0, 2, 4, and 15 cannot be used due to external connections for different purposes. - .. _adc-oneshot-power-management: +.. _adc-oneshot-power-management: Power Management ^^^^^^^^^^^^^^^^ diff --git a/docs/zh_CN/api-reference/peripherals/adc_continuous.rst b/docs/zh_CN/api-reference/peripherals/adc_continuous.rst index e1f33caf5564..5ebd83dabad4 100644 --- a/docs/zh_CN/api-reference/peripherals/adc_continuous.rst +++ b/docs/zh_CN/api-reference/peripherals/adc_continuous.rst @@ -290,39 +290,19 @@ ADC 连续转换模式驱动使用内部缓冲池保存转换结果,缓冲池 硬件限制 ^^^^^^^^^^^^^^^^^^^^ -- 一个 ADC 单元一次只能运行一种操作模式,即连续模式或单次模式。:cpp:func:`adc_continuous_start` 提供了保护措施。 - -- 随机数生成器 (RNG) 以 ADC 为输入源。使用 ADC 连续转换模式驱动从 RNG 生成随机数时,随机性会减弱。 - -.. only:: esp32 or esp32s2 - - - Wi-Fi 也使用 ADC2,:cpp:func:`adc_continuous_start` 提供了 Wi-Fi 驱动和 ADC 连续转换模式驱动之间的保护。 - -.. only:: esp32 - - - ADC 连续转换模式驱动使用 I2S0 外设作为硬件 DMA FIFO。因此,如果 I2S0 已在使用中,:cpp:func:`adc_continuous_new_handle` 将返回 :c:macro:`ESP_ERR_NOT_FOUND`。 - - - ESP32 DevKitC:由于存在外部自动烧录电路,GPIO 0 不能用于 ADC 连续转换模式。 - - - ESP-WROVER-KIT:由于部分 GPIO 管脚可能已经用于其他目的,GPIO 0、2、4 和 15 不能用于 ADC 连续转换模式。 - -.. only:: esp32s2 - - - ADC 连续转换模式驱动使用 SPI3 外设作为硬件 DMA FIFO。因此,如果 SPI3 已在使用中,:cpp:func:`adc_continuous_new_handle` 将返回 :c:macro:`ESP_ERR_NOT_FOUND`。 - -.. only:: esp32c3 - - - 由于硬件限制,现已不再支持使用 ADC2 DMA 功能获取 ADC 转换结果。使用 ADC2 连续转换的结果可能不稳定,具体可参考 `ESP32-C3 系列芯片勘误表 `__。出于兼容性考虑,可以启用 :ref:`CONFIG_ADC_CONTINUOUS_FORCE_USE_ADC2_ON_C3_S3`,强制使用 ADC2。 - -.. only:: esp32s3 - - - 由于硬件限制,现已不再支持使用 ADC2 DMA 功能获取 ADC 转换结果。使用 ADC2 连续转换的结果可能不稳定,具体可参考 `ESP32-S3 系列芯片勘误表 `__。出于兼容性考虑,可以启用 :ref:`CONFIG_ADC_CONTINUOUS_FORCE_USE_ADC2_ON_C3_S3`,强制使用 ADC2。 - - .. _adc-continuous-power-management: - -.. only:: not esp32s3 - - .. _adc-continuous-power-management: +.. list:: + + - 一个 ADC 单元一次只能运行一种操作模式,即连续模式或单次模式。:cpp:func:`adc_continuous_start` 提供了保护措施。 + - 随机数生成器 (RNG) 以 ADC 为输入源。使用 ADC 连续转换模式驱动从 RNG 生成随机数时,随机性会减弱。 + :esp32 or esp32s2: - Wi-Fi 也使用 ADC2,:cpp:func:`adc_continuous_start` 提供了 Wi-Fi 驱动和 ADC 连续转换模式驱动之间的保护。 + :esp32: - ADC 连续转换模式驱动使用 I2S0 外设作为硬件 DMA FIFO。因此,如果 I2S0 已在使用中,:cpp:func:`adc_continuous_new_handle` 将返回 :c:macro:`ESP_ERR_NOT_FOUND`。 + :esp32: - ESP32 DevKitC:由于存在外部自动烧录电路,GPIO 0 不能用于 ADC 连续转换模式。 + :esp32: - ESP-WROVER-KIT:由于部分 GPIO 管脚可能已经用于其他目的,GPIO 0、2、4 和 15 不能用于 ADC 连续转换模式。 + :esp32s2: - ADC 连续转换模式驱动使用 SPI3 外设作为硬件 DMA FIFO。因此,如果 SPI3 已在使用中,:cpp:func:`adc_continuous_new_handle` 将返回 :c:macro:`ESP_ERR_NOT_FOUND`。 + :esp32c3: - 由于硬件限制,现已不再支持使用 ADC2 DMA 功能获取 ADC 转换结果。使用 ADC2 连续转换的结果可能不稳定,具体可参考 `ESP32-C3 系列芯片勘误表 `__。出于兼容性考虑,可以启用 :ref:`CONFIG_ADC_CONTINUOUS_FORCE_USE_ADC2_ON_C3_S3`,强制使用 ADC2。 + :esp32s3: - 由于硬件限制,现已不再支持使用 ADC2 DMA 功能获取 ADC 转换结果。使用 ADC2 连续转换的结果可能不稳定,具体可参考 `ESP32-S3 系列芯片勘误表 `__。出于兼容性考虑,可以启用 :ref:`CONFIG_ADC_CONTINUOUS_FORCE_USE_ADC2_ON_C3_S3`,强制使用 ADC2。 + +.. _adc-continuous-power-management: 电源管理 ^^^^^^^^^^^^^^^^ diff --git a/docs/zh_CN/api-reference/peripherals/adc_oneshot.rst b/docs/zh_CN/api-reference/peripherals/adc_oneshot.rst index 0f7a2bfbb030..8365bb49e99c 100644 --- a/docs/zh_CN/api-reference/peripherals/adc_oneshot.rst +++ b/docs/zh_CN/api-reference/peripherals/adc_oneshot.rst @@ -3,20 +3,17 @@ :link_to_translation:`en:[English]` -{IDF_TARGET_ADC_NUM:default="两", esp32c2="一", esp32c6="一", esp32h2="一", esp32c5="一"} - 简介 ---- 模数转换器集成于芯片,支持测量特定模拟 IO 管脚的模拟信号。 -{IDF_TARGET_NAME} 有 {IDF_TARGET_ADC_NUM} 个 ADC 单元,可以在以下场景使用: - -- 生成 ADC 单次转换结果 +{IDF_TARGET_NAME} 有 {SOC_ADC_PERIPH_NUM} 个 ADC 单元,可以在以下场景使用: -.. only:: SOC_ADC_DMA_SUPPORTED +.. list:: - - 生成连续 ADC 转换结果 + - 生成 ADC 单次转换结果 + :SOC_ADC_DMA_SUPPORTED: - 生成连续 ADC 转换结果 本指南介绍了 ADC 单次转换模式。 @@ -164,31 +161,16 @@ ADC 单次转换模式驱动基于 {IDF_TARGET_NAME} SAR ADC 模块实现,不 硬件限制 ^^^^^^^^^^^^^^^^^^^^ -- 随机数生成器 (RNG) 以 ADC 为输入源。使用 ADC 单次转换模式驱动从 RNG 生成随机数时,随机性会减弱。 - -.. only:: SOC_ADC_DMA_SUPPORTED - - - 一个 ADC 单元每次只能在一种操作模式下运行,可以是连续模式或单次模式。:cpp:func:`adc_oneshot_start` 提供了保护措施。 - -.. only:: esp32 or esp32s2 or esp32s3 - - - Wi-Fi 也使用 ADC2,:cpp:func:`adc_oneshot_read` 提供了 Wi-Fi 驱动与 ADC 单次转换模式驱动间的保护。 - -.. only:: esp32c3 - - - 由于硬件限制,现已不再支持使用 ADC2 DMA 功能获取 ADC 转换结果。使用 ADC2 单次转换的结果可能不稳定,具体可参考 `ESP32-C3 系列芯片勘误表 `__。出于兼容性考虑,可以启用 :ref:`CONFIG_ADC_ONESHOT_FORCE_USE_ADC2_ON_C3`,强制使用 ADC2。 - -.. only:: esp32 - - - ESP32-DevKitC:GPIO0 已用于自动烧录功能,不能用于 ADC 单次转换模式。 - - - ESP-WROVER-KIT:GPIO0、GPIO2、GPIO4 和 GPIO15 已有其他用途,不能用于 ADC 单次转换模式。 - - .. _adc-oneshot-power-management: +.. list:: -.. only:: not esp32 + - 随机数生成器 (RNG) 以 ADC 为输入源。使用 ADC 单次转换模式驱动从 RNG 生成随机数时,随机性会减弱。 + :SOC_ADC_DMA_SUPPORTED: - 一个 ADC 单元每次只能在一种操作模式下运行,可以是连续模式或单次模式。:cpp:func:`adc_oneshot_start` 提供了保护措施。 + :esp32 or esp32s2 or esp32s3: - Wi-Fi 也使用 ADC2,:cpp:func:`adc_oneshot_read` 提供了 Wi-Fi 驱动与 ADC 单次转换模式驱动间的保护。 + :esp32c3: - 由于硬件限制,现已不再支持使用 ADC2 DMA 功能获取 ADC 转换结果。使用 ADC2 单次转换的结果可能不稳定,具体可参考 `ESP32-C3 系列芯片勘误表 `__。出于兼容性考虑,可以启用 :ref:`CONFIG_ADC_ONESHOT_FORCE_USE_ADC2_ON_C3`,强制使用 ADC2。 + :esp32: - ESP32-DevKitC:GPIO0 已用于自动烧录功能,不能用于 ADC 单次转换模式。 + :esp32: - ESP-WROVER-KIT:GPIO0、GPIO2、GPIO4 和 GPIO15 已有其他用途,不能用于 ADC 单次转换模式。 - .. _adc-oneshot-power-management: +.. _adc-oneshot-power-management: 电源管理 ^^^^^^^^ From ff83d87bcebdf2fbe23491f18f646bd20c2aedd5 Mon Sep 17 00:00:00 2001 From: xiongweichao Date: Wed, 28 Aug 2024 10:35:22 +0800 Subject: [PATCH 007/365] feat(ble): Support using 32k oscillator as Bluetooth sleep clock --- components/bt/controller/esp32/Kconfig.in | 6 +++--- components/bt/controller/esp32c3/Kconfig.in | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/components/bt/controller/esp32/Kconfig.in b/components/bt/controller/esp32/Kconfig.in index 191738d0d227..a1bc0270bd35 100644 --- a/components/bt/controller/esp32/Kconfig.in +++ b/components/bt/controller/esp32/Kconfig.in @@ -300,10 +300,10 @@ menu "MODEM SLEEP Options" the bluetooth low power clock source. config BTDM_CTRL_LPCLK_SEL_EXT_32K_XTAL - bool "External 32kHz crystal" - depends on RTC_CLK_SRC_EXT_CRYS + bool "External 32kHz crystal/oscillator" + depends on RTC_CLK_SRC_EXT_CRYS || RTC_CLK_SRC_EXT_OSC help - External 32kHz crystal has a nominal frequency of 32.768kHz and provides good frequency + External 32kHz crystal/oscillator has a nominal frequency of 32.768kHz and provides good frequency stability. If used as Bluetooth low power clock, External 32kHz can support Bluetooth modem sleep to be used with both DFS and light sleep. endchoice diff --git a/components/bt/controller/esp32c3/Kconfig.in b/components/bt/controller/esp32c3/Kconfig.in index 5178ef860210..77173951533a 100644 --- a/components/bt/controller/esp32c3/Kconfig.in +++ b/components/bt/controller/esp32c3/Kconfig.in @@ -402,10 +402,10 @@ menu "MODEM SLEEP Options" bluetooth can work under light sleep enabled. Main crystal has a relatively better performance than other bluetooth low power clock sources. config BT_CTRL_LPCLK_SEL_EXT_32K_XTAL - bool "External 32kHz crystal" - depends on RTC_CLK_SRC_EXT_CRYS + bool "External 32kHz crystal/oscillator" + depends on RTC_CLK_SRC_EXT_CRYS || RTC_CLK_SRC_EXT_OSC help - External 32kHz crystal has a nominal frequency of 32.768kHz and provides good frequency + External 32kHz crystal/oscillator has a nominal frequency of 32.768kHz and provides good frequency stability. If used as Bluetooth low power clock, External 32kHz can support Bluetooth modem sleep to be used with both DFS and light sleep. From 31dc7b6f07a2063c9b74bebcc0eea82eb135274b Mon Sep 17 00:00:00 2001 From: Peter Dragun Date: Tue, 3 Sep 2024 14:58:51 +0200 Subject: [PATCH 008/365] docs: Move monitor configuration documentation to its own repository --- docs/en/api-guides/tools/idf-monitor.rst | 166 +------------------ docs/zh_CN/api-guides/tools/idf-monitor.rst | 168 +------------------- 2 files changed, 9 insertions(+), 325 deletions(-) diff --git a/docs/en/api-guides/tools/idf-monitor.rst b/docs/en/api-guides/tools/idf-monitor.rst index 5c4408209ded..9505a76210df 100644 --- a/docs/en/api-guides/tools/idf-monitor.rst +++ b/docs/en/api-guides/tools/idf-monitor.rst @@ -252,63 +252,7 @@ Custom Reset Sequence For more advanced users or specific use cases, IDF Monitor supports the configuration of a custom reset sequence using :ref:`configuration-file`. This is particularly useful in extreme edge cases where the default sequence may not suffice. -The sequence is defined with a string in the following format: - -- Consists of individual commands divided by ``|`` (e.g. ``R0|D1|W0.5``). -- Commands (e.g. ``R0``) are defined by a code (``R``) and an argument (``0``). - -.. list-table:: - :header-rows: 1 - :widths: 15 50 35 - :align: center - - * - Code - - Action - - Argument - * - D - - Set DTR control line - - ``1``/``0`` - * - R - - Set RTS control line - - ``1``/``0`` - * - U - - Set DTR and RTS control lines at the same time (Unix-like systems only) - - ``0,0``/``0,1``/``1,0``/``1,1`` - * - W - - Wait for ``N`` seconds (where ``N`` is a float) - - N - -Example: - -.. code-block:: ini - - [esp-idf-monitor] - custom_reset_sequence = U0,1|W0.1|D1|R0|W0.5|D0 - -Refer to `custom reset sequence`_ from Esptool documentation for further details. Please note that ``custom_reset_sequence`` is the only used value from the Esptool configuration, and others will be ignored in IDF Monitor. - -Share Configuration Across Tools --------------------------------- - -The configuration for the custom reset sequence can be specified in a shared configuration file between IDF Monitor and Esptool. In this case, your configuration file name should be either ``setup.cfg`` or ``tox.ini`` so it would be recognized by both tools. - -Example of a shared configuration file: - -.. code-block:: ini - - [esp-idf-monitor] - menu_key = T - skip_menu_key = True - - [esptool] - custom_reset_sequence = U0,1|W0.1|D1|R0|W0.5|D0 - -.. note:: - - When using the ``custom_reset_sequence`` parameter in both the ``[esp-idf-monitor]`` section and the ``[esptool]`` section, the configuration from the ``[esp-idf-monitor]`` section will take precedence in IDF Monitor. Any conflicting configuration in the ``[esptool]`` section will be ignored. - - This precedence rule also applies when the configuration is spread across multiple files. The global esp-idf-monitor configuration will take precedence over the local esptool configuration. - +If you would like to use a custom reset sequence, take a look at the `IDF Monitor documentation`_ for more details. Launching GDB with GDBStub ~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -397,107 +341,9 @@ The options ``--print_filter="light_driver:D esp_image:N boot:N cpu_start:N vfs: Configuration File ================== -``esp-idf-monitor`` is using `C0 control codes`_ to interact with the console. Characters from the config file are converted to their C0 control codes. Available characters include the English alphabet (A-Z) and special symbols: ``[``, ``]``, ``\``, ``^``, ``_``. - -.. warning:: +``esp-idf-monitor`` offers option to change its default behavior with configuration file. This file can be used for example to set custom key bindings, or set a custom reset sequence for resetting the chip into bootloader mode. - Please note that some characters may not work on all platforms or can be already reserved as a shortcut for something else. Use this feature with caution! - - -File Location -~~~~~~~~~~~~~ - -The default name for a configuration file is ``esp-idf-monitor.cfg``. First, the same directory ``esp-idf-monitor`` is being run if is inspected. - -If a configuration file is not found here, the current user's OS configuration directory is inspected next: - - - Linux: ``/home//.config/esp-idf-monitor/`` - - MacOS ``/Users//.config/esp-idf-monitor/`` - - Windows: ``c:\Users\\AppData\Local\esp-idf-monitor\`` - -If a configuration file is still not found, the last inspected location is the home directory: - - - Linux: ``/home//`` - - MacOS ``/Users//`` - - Windows: ``c:\Users\\`` - -On Windows, the home directory can be set with the ``HOME`` or ``USERPROFILE`` environment variables. Therefore, the Windows configuration directory location also depends on these. - -A different location for the configuration file can be specified with the ``ESP_IDF_MONITOR_CFGFILE`` environment variable, e.g., ``ESP_IDF_MONITOR_CFGFILE = ~/custom_config.cfg``. This overrides the search priorities described above. - -``esp-idf-monitor`` will read settings from other usual configuration files if no other configuration file is used. It automatically reads from ``setup.cfg`` or ``tox.ini`` if they exist. - -Configuration Options -~~~~~~~~~~~~~~~~~~~~~ - -Below is a table listing the available configuration options: - -.. list-table:: - :header-rows: 1 - :widths: 30 50 20 - :align: center - - * - Option Name - - Description - - Default Value - * - menu_key - - Key to access the main menu. - - ``T`` - * - exit_key - - Key to exit the monitor. - - ``]`` - * - chip_reset_key - - Key to initiate a chip reset. - - ``R`` - * - recompile_upload_key - - Key to recompile and upload. - - ``F`` - * - recompile_upload_app_key - - Key to recompile and upload just the application. - - ``A`` - * - toggle_output_key - - Key to toggle the output display. - - ``Y`` - * - toggle_log_key - - Key to toggle the logging feature. - - ``L`` - * - toggle_timestamp_key - - Key to toggle timestamp display. - - ``I`` - * - chip_reset_bootloader_key - - Key to reset the chip to bootloader mode. - - ``P`` - * - exit_menu_key - - Key to exit the monitor from the menu. - - ``X`` - * - skip_menu_key - - Pressing the menu key can be skipped for menu commands. - - ``False`` - * - custom_reset_sequence - - Custom reset sequence for resetting into the bootloader. - - N/A - - -Syntax -~~~~~~ - -The configuration file is in .ini file format: it must be introduced by an ``[esp-idf-monitor]`` header to be recognized as valid. This section then contains name = value entries. Lines beginning with ``#`` or ``;`` are ignored as comments. - -.. code-block:: ini - - # esp-idf-monitor.cfg file to configure internal settings of esp-idf-monitor - [esp-idf-monitor] - menu_key = T - exit_key = ] - chip_reset_key = R - recompile_upload_key = F - recompile_upload_app_key = A - toggle_output_key = Y - toggle_log_key = L - toggle_timestamp_key = I - chip_reset_bootloader_key = P - exit_menu_key = X - skip_menu_key = False +For more details on the configuration file, see the `IDF Monitor documentation`_. Known Issues with IDF Monitor @@ -505,10 +351,6 @@ Known Issues with IDF Monitor If you encounter any issues while using IDF Monitor, check our `GitHub repository `_ for a list of known issues and their current status. If you come across a problem that hasn't been documented yet, we encourage you to create a new issue report. -.. _addr2line: https://sourceware.org/binutils/docs/binutils/addr2line.html .. _esp-idf-monitor: https://github.com/espressif/esp-idf-monitor +.. _IDF Monitor documentation: https://github.com/espressif/esp-idf-monitor/blob/v1.5.0/README.md#documentation .. _gdb: https://sourceware.org/gdb/download/onlinedocs/ -.. _pySerial: https://github.com/pyserial/pyserial -.. _miniterm: https://pyserial.readthedocs.org/en/latest/tools.html#module-serial.tools.miniterm -.. _C0 control codes: https://en.wikipedia.org/wiki/C0_and_C1_control_codes#C0_controls -.. _custom reset sequence: https://docs.espressif.com/projects/esptool/en/latest/{IDF_TARGET_PATH_NAME}/esptool/configuration-file.html#custom-reset-sequence diff --git a/docs/zh_CN/api-guides/tools/idf-monitor.rst b/docs/zh_CN/api-guides/tools/idf-monitor.rst index 7e38c5a187c1..8c186f6539f6 100644 --- a/docs/zh_CN/api-guides/tools/idf-monitor.rst +++ b/docs/zh_CN/api-guides/tools/idf-monitor.rst @@ -252,63 +252,7 @@ IDF 监视器的默认复位序列可在大多数环境中使用。使用默认 对于高级用户或特定用例,IDF 监视器支持使用 :ref:`configuration-file` 配置自定义复位序列。这在默认序列可能不足的极端情况下特别有用。 -复位序列可通过以下格式的字符串定义: - -- 各个命令由 ``|`` 分隔(例如 ``R0|D1|W0.5``)。 -- 命令(例如 ``R0``)由代码(``R``)和参数(``0``)定义。 - -.. list-table:: - :header-rows: 1 - :widths: 15 50 35 - :align: center - - * - 代码 - - 操作 - - 参数 - * - D - - 设置 DTR 控制线 - - ``1``/``0`` - * - R - - 设置 RTS 控制线 - - ``1``/``0`` - * - U - - 同时设置 DTR 和 RTS 控制线(仅适用于类 Unix 系统) - - ``0,0``/``0,1``/``1,0``/``1,1`` - * - W - - 等待 ``N`` 秒(其中 ``N`` 为浮点数) - - N - -示例: - -.. code-block:: ini - - [esp-idf-monitor] - custom_reset_sequence = U0,1|W0.1|D1|R0|W0.5|D0 - -有关更多详细信息,请参阅 Esptool 文档中 `custom reset sequence`_ 章节。请注意,IDF 监视器只使用了 Esptool 配置中的 ``custom_reset_sequence`` 值,其他值会被 IDF 监视器忽略。 - -IDF 监视器和 Esptool 之间共享配置 ----------------------------------------------- - -自定义复位序列的配置可以在 IDF 监视器和 Esptool 之间的共享配置文件中指定。在这种情况下,为了使两个工具都能识别配置文件,其名称应为 ``setup.cfg`` 或 ``tox.ini``。 - -共享配置文件的示例: - -.. code-block:: ini - - [esp-idf-monitor] - menu_key = T - skip_menu_key = True - - [esptool] - custom_reset_sequence = U0,1|W0.1|D1|R0|W0.5|D0 - -.. note:: - - 当在 ``[esp-idf-monitor]`` 部分和 ``[esptool]`` 部分都使用 ``custom_reset_sequence`` 参数时,IDF 监视器会优先使用 ``[esp-idf-monitor]`` 部分的配置。``[esptool]`` 部分中任何与之冲突的配置都将被忽略。 - - 当配置分散在多个文件中时,此优先规则也适用。全局 esp-idf-monitor 配置将优先于本地 esptool 配置。 - +如需使用自定义复位序列,请参阅 `IDF 监视器文档`_ 获取更多详细信息。 配置 GDBStub 以启用 GDB ~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -397,118 +341,16 @@ GDBStub 支持在运行时进行调试。GDBStub 在目标上运行,并通过 配置文件 ======== -``esp-idf-monitor`` 使用 `C0 控制字符`_ 与控制台进行交互。配置文件中的字符会被转换为对应的 C0 控制代码。可用字符包括英文字母 (A-Z) 和特殊符号:``[``、``]``、``\``、``^``、和 ``_``. - -.. warning:: - - 注意,一些字符可能无法在所有平台通用,或被保留作为其他用途的快捷键。请谨慎使用此功能。 - - -文件位置 -~~~~~~~~~~ - -配置文件的默认名称为 ``esp-idf-monitor.cfg``。首先,在 ``esp-idf-monitor`` 路径中检测配置文件并运行。 - -如果此目录中没有检测到配置文件,则检查当前用户操作系统的配置目录: - - - Linux: ``/home//.config/esp-idf-monitor/`` - - MacOS ``/Users//.config/esp-idf-monitor/`` - - Windows: ``c:\Users\\AppData\Local\esp-idf-monitor\`` +``esp-idf-monitor`` 支持通过配置文件更改其默认行为。该配置文件可用于设置自定义快捷键,或设置自定义复位序列以重置芯片进入引导加载程序。 -如仍未检测到配置文件,会最后再检查主目录: - - - Linux: ``/home//`` - - MacOS ``/Users//`` - - Windows: ``c:\Users\\`` - -在 Windows 中,可以使用 ``HOME`` 或 ``USERPROFILE`` 环境变量设置主目录,因此,Windows 配置目录的位置也取决于这些变量。 - -还可以使用 ``ESP_IDF_MONITOR_CFGFILE`` 环境变量为配置文件指定一个不同的位置,例如 ``ESP_IDF_MONITOR_CFGFILE = ~/custom_config.cfg``。这一设置的检测优先级高于上述所有位置检测的优先级。 - -如果没有使用其他配置文件,``esp-idf-monitor`` 会从其他常用的配置文件中读取设置。如果存在 ``setup.cfg`` 或 ``tox.ini`` 文件,``esp-idf-monitor`` 会自动从这些文件中读取设置。 - -配置选项 -~~~~~~~~~~ - -下表列出了可用的配置选项: - -.. list-table:: - :header-rows: 1 - :widths: 30 50 20 - :align: center - - * - 选项名称 - - 描述 - - 默认值 - * - menu_key - - 访问主菜单 - - ``T`` - * - exit_key - - 退出监视器 - - ``]`` - * - chip_reset_key - - 初始化芯片重置 - - ``R`` - * - recompile_upload_key - - 重新编译并上传 - - ``F`` - * - recompile_upload_app_key - - 仅重新编译并上传应用程序 - - ``A`` - * - toggle_output_key - - 切换输出显示 - - ``Y`` - * - toggle_log_key - - 切换日志功能 - - ``L`` - * - toggle_timestamp_key - - 切换时间戳显示 - - ``I`` - * - chip_reset_bootloader_key - - 将芯片重置为引导加载模式 - - ``P`` - * - exit_menu_key - - 从菜单中退出监视器 - - ``X`` - * - skip_menu_key - - 设置使用菜单命令时无需按下主菜单键 - - ``False`` - * - custom_reset_sequence - - 复位目标到引导加载程序的自定义复位序列 - - 无默认值 - - -语法 -~~~~ - -配置文件为 .ini 文件格式,必须以 ``[esp-idf-monitor]`` 标头引入才能被识别为有效文件。以下语法以“配置名称 = 配置值”形式列出。以 ``#`` 或 ``;`` 开头的行是注释,将被忽略。 - -.. code-block:: ini - - # esp-idf-monitor.cfg file to configure internal settings of esp-idf-monitor - [esp-idf-monitor] - menu_key = T - exit_key = ] - chip_reset_key = R - recompile_upload_key = F - recompile_upload_app_key = A - toggle_output_key = Y - toggle_log_key = L - toggle_timestamp_key = I - chip_reset_bootloader_key = P - exit_menu_key = X - skip_menu_key = False +有关配置文件的更多详细信息,请参阅 `IDF 监视器文档`_。 IDF 监视器已知问题 ================================= -如果在使用 IDF 监视器过程中遇到任何问题,请查看我们的 `GitHub 仓库 `_ 以获取已知问题列表及其当前状态。如果遇到的问题没有相关记录,请创建一个新的问题报告。 +如果在使用 IDF 监视器过程中遇到任何问题,请查看 `GitHub 仓库 `_ 以获取已知问题列表及其当前状态。如果遇到的问题没有相关记录,请创建一个新的问题报告。 -.. _addr2line: https://sourceware.org/binutils/docs/binutils/addr2line.html .. _esp-idf-monitor: https://github.com/espressif/esp-idf-monitor +.. _IDF 监视器文档: https://github.com/espressif/esp-idf-monitor/blob/v1.5.0/README.md#documentation .. _gdb: https://sourceware.org/gdb/download/onlinedocs/ -.. _pySerial: https://github.com/pyserial/pyserial -.. _miniterm: https://pyserial.readthedocs.org/en/latest/tools.html#module-serial.tools.miniterm -.. _C0 控制字符: https://zh.wikipedia.org/wiki/C0%E4%B8%8EC1%E6%8E%A7%E5%88%B6%E5%AD%97%E7%AC%A6#C0_(ASCII%E5%8F%8A%E5%85%B6%E6%B4%BE%E7%94%9F) -.. _custom reset sequence: https://docs.espressif.com/projects/esptool/en/latest/{IDF_TARGET_PATH_NAME}/esptool/configuration-file.html#custom-reset-sequence From 2a02d45bdee9a5d1f089af733d3fae095110b297 Mon Sep 17 00:00:00 2001 From: Alexey Lapshin Date: Fri, 23 Aug 2024 16:57:42 +0700 Subject: [PATCH 009/365] fix(cxx): fix TLS classes destructor call Closes https://github.com/espressif/esp-idf/issues/14360 --- CMakeLists.txt | 4 ++- components/cxx/cxx_guards.cpp | 8 ++++- .../general/main/test_cxx_general.cpp | 33 ++++++++++++++++++- 3 files changed, 42 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 20ef5b96896c..b4dbce1bc235 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -251,7 +251,9 @@ if(CMAKE_C_COMPILER_ID MATCHES "GNU") endif() if(CMAKE_C_COMPILER_ID MATCHES "Clang") - list(APPEND compile_options "-fno-use-cxa-atexit") + list(APPEND compile_options "-fno-use-cxa-atexit") # TODO IDF-10934 +else() + list(APPEND cxx_compile_options "-fuse-cxa-atexit") endif() if(COMPILER_RT_LIB_NAME) diff --git a/components/cxx/cxx_guards.cpp b/components/cxx/cxx_guards.cpp index 0a76173769ef..e4f9f905a66e 100644 --- a/components/cxx/cxx_guards.cpp +++ b/components/cxx/cxx_guards.cpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2015-2021 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -210,6 +210,12 @@ extern "C" void __cxa_guard_abort(__guard* pg) throw() } } +/* Originally, this should come with crtbegin.o from the toolchain (if GCC is configured with --enable-__cxa_atexit). + Since we do not link with crtbegin.o and have not configured GCC with --enable-__cxa_atexit, it is declared here. + Note: It should have a unique value in every shared object; in the main program its value is zero. */ +extern "C" void *__dso_handle __attribute__((__visibility__("hidden"))); +void *__dso_handle = 0; + /** * Dummy function used to force linking this file instead of the same one in libstdc++. * This works via -u __cxa_guard_dummy flag in component.mk diff --git a/components/cxx/test_apps/general/main/test_cxx_general.cpp b/components/cxx/test_apps/general/main/test_cxx_general.cpp index 0e483ab655af..858b16bc16aa 100644 --- a/components/cxx/test_apps/general/main/test_cxx_general.cpp +++ b/components/cxx/test_apps/general/main/test_cxx_general.cpp @@ -197,7 +197,7 @@ struct PriorityInitTest { int PriorityInitTest::order = 0; -// init_priority objects are initialized from the lowest to the heighest priority number +// init_priority objects are initialized from the lowest to the highest priority number // Default init_priority is always the lowest (highest priority number) PriorityInitTest g_static_init_priority_test2; PriorityInitTest g_static_init_priority_test1 __attribute__((init_priority(1000))); @@ -243,6 +243,36 @@ TEST_CASE("can use std::vector", "[misc]") TEST_ASSERT_EQUAL(51, std::accumulate(std::begin(v), std::end(v), 0)); } +static volatile bool is_tls_class_destructor_called; +struct TestTLS { + TestTLS() { } + ~TestTLS() + { + is_tls_class_destructor_called = true; + } + void foo() { } +}; + +thread_local TestTLS s_testTLS; + +void test_thread_local_destructors(void * arg) +{ + s_testTLS.foo(); + xSemaphoreGive(s_slow_init_sem); + vTaskDelete(NULL); +} + +TEST_CASE("call destructors for thread_local classes CXX", "[misc]") +{ + is_tls_class_destructor_called = false; + s_slow_init_sem = xSemaphoreCreateCounting(1, 0); + xTaskCreate(test_thread_local_destructors, "test_thread_local_destructors", 2048, NULL, 10, NULL); + vTaskDelay(1); /* Triggers IDLE task to call prvCheckTasksWaitingTermination() which cleans task-specific data */ + TEST_ASSERT_TRUE(xSemaphoreTake(s_slow_init_sem, 500 / portTICK_PERIOD_MS)); + vSemaphoreDelete(s_slow_init_sem); + TEST_ASSERT_TRUE(is_tls_class_destructor_called); +} + /* These test cases pull a lot of code from libstdc++ and are disabled for now */ #if 0 @@ -291,6 +321,7 @@ TEST_CASE("stack smashing protection CXX", "[stack_smash]") extern "C" void app_main(void) { + s_testTLS.foo(); /* allocates memory that will be reused */ printf("CXX GENERAL TEST\n"); unity_run_menu(); } From d77d1f5a9578e8c3ff24da0e9068b6bc9a128ac4 Mon Sep 17 00:00:00 2001 From: Jan Beran Date: Mon, 23 Sep 2024 15:48:59 +0200 Subject: [PATCH 010/365] fix(uf2): Ignore ESPBAUD, ESPPORT when calling idf.py uf2[-app] --- components/esptool_py/project_include.cmake | 25 ---------------- tools/cmake/project.cmake | 27 +++++++++++++++++ tools/cmake/run_uf2_cmds.cmake | 27 +++++++++++++++++ tools/test_idf_py/test_idf_py.py | 33 +++++++++++++++++++++ 4 files changed, 87 insertions(+), 25 deletions(-) create mode 100644 tools/cmake/run_uf2_cmds.cmake diff --git a/components/esptool_py/project_include.cmake b/components/esptool_py/project_include.cmake index aee227580275..9f051b2359cf 100644 --- a/components/esptool_py/project_include.cmake +++ b/components/esptool_py/project_include.cmake @@ -12,7 +12,6 @@ set(ESPTOOLPY ${python} "$ENV{ESPTOOL_WRAPPER}" "${CMAKE_CURRENT_LIST_DIR}/espto set(ESPSECUREPY ${python} "${CMAKE_CURRENT_LIST_DIR}/esptool/espsecure.py") set(ESPEFUSEPY ${python} "${CMAKE_CURRENT_LIST_DIR}/esptool/espefuse.py") set(ESPMONITOR ${python} -m esp_idf_monitor) -set(ESPMKUF2 ${python} "${idf_path}/tools/mkuf2.py" write --chip ${chip_model}) set(ESPTOOLPY_CHIP "${chip_model}") if(NOT CONFIG_APP_BUILD_TYPE_RAM AND CONFIG_APP_BUILD_GENERATE_BINARIES) @@ -197,30 +196,6 @@ add_custom_target(erase_flash VERBATIM ) -set(UF2_ARGS --json "${CMAKE_CURRENT_BINARY_DIR}/flasher_args.json") - -add_custom_target(uf2 - COMMAND ${CMAKE_COMMAND} - -D "IDF_PATH=${idf_path}" - -D "SERIAL_TOOL=${ESPMKUF2}" - -D "SERIAL_TOOL_ARGS=${UF2_ARGS};-o;${CMAKE_CURRENT_BINARY_DIR}/uf2.bin" - -P run_serial_tool.cmake - WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} - USES_TERMINAL - VERBATIM - ) - -add_custom_target(uf2-app - COMMAND ${CMAKE_COMMAND} - -D "IDF_PATH=${idf_path}" - -D "SERIAL_TOOL=${ESPMKUF2}" - -D "SERIAL_TOOL_ARGS=${UF2_ARGS};-o;${CMAKE_CURRENT_BINARY_DIR}/uf2-app.bin;--bin;app" - -P run_serial_tool.cmake - WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} - USES_TERMINAL - VERBATIM - ) - set(MERGE_BIN_ARGS merge_bin) if(DEFINED ENV{ESP_MERGE_BIN_OUTPUT}) list(APPEND MERGE_BIN_ARGS "-o" "$ENV{ESP_MERGE_BIN_OUTPUT}") diff --git a/tools/cmake/project.cmake b/tools/cmake/project.cmake index cb70e61e77c1..da79ba2f738a 100644 --- a/tools/cmake/project.cmake +++ b/tools/cmake/project.cmake @@ -884,6 +884,33 @@ macro(project project_name) # Add DFU build and flash targets __add_dfu_targets() + # Add uf2 related targets + idf_build_get_property(idf_path IDF_PATH) + idf_build_get_property(python PYTHON) + + set(UF2_ARGS --json "${CMAKE_CURRENT_BINARY_DIR}/flasher_args.json") + set(UF2_CMD ${python} "${idf_path}/tools/mkuf2.py" write --chip ${chip_model}) + + add_custom_target(uf2 + COMMAND ${CMAKE_COMMAND} + -D "IDF_PATH=${idf_path}" + -D "UF2_CMD=${UF2_CMD}" + -D "UF2_ARGS=${UF2_ARGS};-o;${CMAKE_CURRENT_BINARY_DIR}/uf2.bin" + -P "${idf_path}/tools/cmake/run_uf2_cmds.cmake" + USES_TERMINAL + VERBATIM + ) + + add_custom_target(uf2-app + COMMAND ${CMAKE_COMMAND} + -D "IDF_PATH=${idf_path}" + -D "UF2_CMD=${UF2_CMD}" + -D "UF2_ARGS=${UF2_ARGS};-o;${CMAKE_CURRENT_BINARY_DIR}/uf2-app.bin;--bin;app" + -P "${idf_path}/tools/cmake/run_uf2_cmds.cmake" + USES_TERMINAL + VERBATIM + ) + idf_build_executable(${project_elf}) __project_info("${test_components}") diff --git a/tools/cmake/run_uf2_cmds.cmake b/tools/cmake/run_uf2_cmds.cmake new file mode 100644 index 000000000000..1ed4d5c0fc5f --- /dev/null +++ b/tools/cmake/run_uf2_cmds.cmake @@ -0,0 +1,27 @@ +# A CMake script to run dfu-util from within ninja or make +# or another cmake-based build runner +# +# It is recommended to NOT USE this CMake script directly + +cmake_minimum_required(VERSION 3.16) + +set(UF2_CMD "${UF2_CMD}") +set(UF2_ARGS "${UF2_ARGS}") + +if(NOT UF2_CMD) + message(FATAL_ERROR "UF2_CMD must be specified on the CMake command line.") +endif() + +if(NOT UF2_ARGS) + message(FATAL_ERROR "UF2_ARGS must be specified on the CMake command line.") +endif() + +set(uf2_cmd_with_args ${UF2_CMD}) +list(APPEND uf2_cmd_with_args ${UF2_ARGS}) + +execute_process(COMMAND ${uf2_cmd_with_args} + RESULT_VARIABLE result) + +if(${result}) + message(FATAL_ERROR "${UF2_CMD} failed") +endif() diff --git a/tools/test_idf_py/test_idf_py.py b/tools/test_idf_py/test_idf_py.py index 9ccdfe09242a..9daac230c33c 100755 --- a/tools/test_idf_py/test_idf_py.py +++ b/tools/test_idf_py/test_idf_py.py @@ -549,5 +549,38 @@ def test_merge_bin(self): self.assertIn(f'Merged binary {merged_binary_name} will be created in the build directory...', output) +class TestUF2Commands(TestWrapperCommands): + """ + Test if uf2 commands are invoked as expected. + This test is not testing the functionality of mkuf2.py/idf.py uf2, but the invocation of the command from idf.py. + """ + + def test_uf2(self): + uf2_command = [sys.executable, idf_py_path, 'uf2'] + output = self.call_command(uf2_command) + self.assertIn('Executing:', output) + + def test_uf2_with_envvars(self): + # Values do not really matter, they should not be used. + os.environ['ESPBAUD'] = '115200' + os.environ['ESPPORT'] = '/dev/ttyUSB0' + self.test_uf2() + os.environ.pop('ESPBAUD') + os.environ.pop('ESPPORT') + + def test_uf2_app(self): + uf2_app_command = [sys.executable, idf_py_path, 'uf2-app'] + output = self.call_command(uf2_app_command) + self.assertIn('Executing:', output) + + def test_uf2_app_with_envvars(self): + # Values do not really matter, they should not be used. + os.environ['ESPBAUD'] = '115200' + os.environ['ESPPORT'] = '/dev/ttyUSB0' + self.test_uf2_app() + os.environ.pop('ESPBAUD') + os.environ.pop('ESPPORT') + + if __name__ == '__main__': main() From 69f74c34a262485490cced31dc0875ceb7d2a81b Mon Sep 17 00:00:00 2001 From: Ivan Grokhotkov Date: Wed, 25 Sep 2024 12:50:23 +0200 Subject: [PATCH 011/365] fix(examples): remove stray EXTRA_COMPONENT_DIRS, fix check --- examples/storage/sd_card/sdspi/CMakeLists.txt | 1 - examples/storage/sd_card/sdspi/main/idf_component.yml | 3 +++ tools/ci/check_examples_extra_component_dirs.sh | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 examples/storage/sd_card/sdspi/main/idf_component.yml diff --git a/examples/storage/sd_card/sdspi/CMakeLists.txt b/examples/storage/sd_card/sdspi/CMakeLists.txt index d41a683007d3..e140d486250e 100644 --- a/examples/storage/sd_card/sdspi/CMakeLists.txt +++ b/examples/storage/sd_card/sdspi/CMakeLists.txt @@ -2,7 +2,6 @@ # in this exact order for cmake to work correctly cmake_minimum_required(VERSION 3.16) -list(APPEND EXTRA_COMPONENT_DIRS "$ENV{IDF_PATH}/examples/storage/sd_card/sdmmc/components/sd_card") set(COMPONENTS main) include($ENV{IDF_PATH}/tools/cmake/project.cmake) diff --git a/examples/storage/sd_card/sdspi/main/idf_component.yml b/examples/storage/sd_card/sdspi/main/idf_component.yml new file mode 100644 index 000000000000..b755a62b1472 --- /dev/null +++ b/examples/storage/sd_card/sdspi/main/idf_component.yml @@ -0,0 +1,3 @@ +dependencies: + sd_card: + path: ${IDF_PATH}/examples/storage/sd_card/sdmmc/components/sd_card diff --git a/tools/ci/check_examples_extra_component_dirs.sh b/tools/ci/check_examples_extra_component_dirs.sh index 207efff7f4d8..ac71e5975a55 100755 --- a/tools/ci/check_examples_extra_component_dirs.sh +++ b/tools/ci/check_examples_extra_component_dirs.sh @@ -5,7 +5,7 @@ set -uo pipefail # Examples shouldn't use EXTRA_COMPONENT_DIRS, instead the dependencies should be specified in idf_component.yml files output=$(find ${IDF_PATH}/examples -name "CMakeLists.txt" -not -path "**/managed_components/**" -not -path "**/build/**") -files=$(egrep "set\(EXTRA_COMPONENT_DIRS" ${output} | cut -d ":" -f 1) +files=$(egrep "EXTRA_COMPONENT_DIRS" ${output} | cut -d ":" -f 1) found_issues=0 for file in ${files} do From 1c75f46fb9ccdb38a733231732a16a6db820618b Mon Sep 17 00:00:00 2001 From: Xu Si Yu Date: Tue, 24 Sep 2024 10:35:54 +0800 Subject: [PATCH 012/365] feat(openthread): support vendor hook for rcp spi --- components/openthread/CMakeLists.txt | 7 ++++ .../openthread/src/ncp/esp_openthread_ncp.cpp | 5 +-- .../src/ncp/esp_openthread_ncp_hdlc.cpp | 6 +--- .../src/ncp/esp_openthread_ncp_spi.cpp | 29 +++++++++++++++ examples/openthread/.build-test-rules.yml | 4 +-- examples/openthread/ot_br/sdkconfig.ci.br_spi | 1 + examples/openthread/ot_cli/sdkconfig.ci.cli | 0 .../openthread/ot_cli/sdkconfig.ci.cli_c6 | 2 -- .../openthread/ot_cli/sdkconfig.ci.cli_h2 | 2 -- .../ot_cli/sdkconfig.ci.disable_cli | 2 -- .../openthread/ot_rcp/sdkconfig.ci.rcp_spi | 1 + ...sdkconfig.ci.rcp => sdkconfig.ci.rcp_uart} | 0 ...onfig.ci.sleepy_c6 => sdkconfig.ci.sleepy} | 2 -- .../light_sleep/sdkconfig.ci.sleepy_h2 | 7 ---- .../light_sleep/sdkconfig.defaults.esp32c6 | 2 -- .../light_sleep/sdkconfig.defaults.esp32h2 | 1 - examples/openthread/pytest_otbr.py | 35 +++++++++++-------- 17 files changed, 62 insertions(+), 44 deletions(-) create mode 100644 components/openthread/src/ncp/esp_openthread_ncp_spi.cpp create mode 100644 examples/openthread/ot_br/sdkconfig.ci.br_spi create mode 100644 examples/openthread/ot_cli/sdkconfig.ci.cli delete mode 100644 examples/openthread/ot_cli/sdkconfig.ci.cli_c6 delete mode 100644 examples/openthread/ot_cli/sdkconfig.ci.cli_h2 create mode 100644 examples/openthread/ot_rcp/sdkconfig.ci.rcp_spi rename examples/openthread/ot_rcp/{sdkconfig.ci.rcp => sdkconfig.ci.rcp_uart} (100%) rename examples/openthread/ot_sleepy_device/light_sleep/{sdkconfig.ci.sleepy_c6 => sdkconfig.ci.sleepy} (78%) delete mode 100644 examples/openthread/ot_sleepy_device/light_sleep/sdkconfig.ci.sleepy_h2 delete mode 100644 examples/openthread/ot_sleepy_device/light_sleep/sdkconfig.defaults.esp32h2 diff --git a/components/openthread/CMakeLists.txt b/components/openthread/CMakeLists.txt index 06e0b5e19d33..51b66bb4489a 100644 --- a/components/openthread/CMakeLists.txt +++ b/components/openthread/CMakeLists.txt @@ -156,6 +156,13 @@ if(CONFIG_OPENTHREAD_ENABLED) if(CONFIG_OPENTHREAD_NCP_VENDOR_HOOK) list(APPEND src_dirs "src/ncp") + if(CONFIG_OPENTHREAD_RCP_UART) + list(APPEND exclude_srcs + "src/ncp/esp_openthread_ncp_spi.cpp") + elseif(CONFIG_OPENTHREAD_RCP_SPI) + list(APPEND exclude_srcs + "src/ncp/esp_openthread_ncp_hdlc.cpp") + endif() endif() if(NOT CONFIG_OPENTHREAD_DNS64_CLIENT) diff --git a/components/openthread/src/ncp/esp_openthread_ncp.cpp b/components/openthread/src/ncp/esp_openthread_ncp.cpp index 7e5127f869c8..eefeda501713 100644 --- a/components/openthread/src/ncp/esp_openthread_ncp.cpp +++ b/components/openthread/src/ncp/esp_openthread_ncp.cpp @@ -4,12 +4,11 @@ * SPDX-License-Identifier: Apache-2.0 */ +#include "sdkconfig.h" #include "esp_ieee802154.h" #include "esp_openthread_ncp.h" #include "ncp_base.hpp" -#if OPENTHREAD_ENABLE_NCP_VENDOR_HOOK - #if CONFIG_OPENTHREAD_RCP_UART #include "utils/uart.h" #endif @@ -107,5 +106,3 @@ otError NcpBase::VendorSetPropertyHandler(spinel_prop_key_t aPropKey) } // namespace Ncp } // namespace ot - -#endif // #if OPENTHREAD_ENABLE_NCP_VENDOR_HOOK diff --git a/components/openthread/src/ncp/esp_openthread_ncp_hdlc.cpp b/components/openthread/src/ncp/esp_openthread_ncp_hdlc.cpp index 0e8a3dbb8883..6b86b6d9359b 100644 --- a/components/openthread/src/ncp/esp_openthread_ncp_hdlc.cpp +++ b/components/openthread/src/ncp/esp_openthread_ncp_hdlc.cpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -7,8 +7,6 @@ #include "common/new.hpp" #include "ncp_hdlc.hpp" -#if OPENTHREAD_ENABLE_NCP_VENDOR_HOOK - namespace ot { namespace Ncp { @@ -29,5 +27,3 @@ extern "C" void otNcpHdlcInit(otInstance *aInstance, otNcpHdlcSendCallback aSend } // namespace Ncp } // namespace ot - -#endif // #if OPENTHREAD_ENABLE_NCP_VENDOR_HOOK diff --git a/components/openthread/src/ncp/esp_openthread_ncp_spi.cpp b/components/openthread/src/ncp/esp_openthread_ncp_spi.cpp new file mode 100644 index 000000000000..d85c918aad86 --- /dev/null +++ b/components/openthread/src/ncp/esp_openthread_ncp_spi.cpp @@ -0,0 +1,29 @@ +/* + * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include "common/new.hpp" +#include "ncp_spi.hpp" + +namespace ot { +namespace Ncp { + +static OT_DEFINE_ALIGNED_VAR(sNcpRaw, sizeof(NcpSpi), uint64_t); + +extern "C" void otNcpSpiInit(otInstance *aInstance) +{ + NcpSpi *ncpSpi = nullptr; + Instance *instance = static_cast(aInstance); + + ncpSpi = new (&sNcpRaw) NcpSpi(instance); + + if (ncpSpi == nullptr || ncpSpi != NcpBase::GetNcpInstance()) + { + OT_ASSERT(false); + } +} + +} // namespace Ncp +} // namespace ot diff --git a/examples/openthread/.build-test-rules.yml b/examples/openthread/.build-test-rules.yml index 7518ec1873d0..ddd95daa3892 100644 --- a/examples/openthread/.build-test-rules.yml +++ b/examples/openthread/.build-test-rules.yml @@ -38,8 +38,8 @@ examples/openthread/ot_rcp: enable: - if: SOC_IEEE802154_SUPPORTED == 1 disable_test: - - if: IDF_TARGET not in ["esp32c6"] - reason: only test on esp32c6 + - if: IDF_TARGET not in ["esp32h2", "esp32c6"] + reason: only test on esp32h2 and esp32c6 <<: *openthread_dependencies examples/openthread/ot_sleepy_device/deep_sleep: diff --git a/examples/openthread/ot_br/sdkconfig.ci.br_spi b/examples/openthread/ot_br/sdkconfig.ci.br_spi new file mode 100644 index 000000000000..1778799eb74b --- /dev/null +++ b/examples/openthread/ot_br/sdkconfig.ci.br_spi @@ -0,0 +1 @@ +CONFIG_OPENTHREAD_RADIO_SPINEL_SPI=y diff --git a/examples/openthread/ot_cli/sdkconfig.ci.cli b/examples/openthread/ot_cli/sdkconfig.ci.cli new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/examples/openthread/ot_cli/sdkconfig.ci.cli_c6 b/examples/openthread/ot_cli/sdkconfig.ci.cli_c6 deleted file mode 100644 index a7f4dfb8225d..000000000000 --- a/examples/openthread/ot_cli/sdkconfig.ci.cli_c6 +++ /dev/null @@ -1,2 +0,0 @@ -CONFIG_IDF_TARGET="esp32c6" -CONFIG_IDF_TARGET_ESP32C6=y diff --git a/examples/openthread/ot_cli/sdkconfig.ci.cli_h2 b/examples/openthread/ot_cli/sdkconfig.ci.cli_h2 deleted file mode 100644 index 485c06eac5e7..000000000000 --- a/examples/openthread/ot_cli/sdkconfig.ci.cli_h2 +++ /dev/null @@ -1,2 +0,0 @@ -CONFIG_IDF_TARGET="esp32h2" -CONFIG_IDF_TARGET_ESP32H2=y diff --git a/examples/openthread/ot_cli/sdkconfig.ci.disable_cli b/examples/openthread/ot_cli/sdkconfig.ci.disable_cli index 51c321da5e26..a281edc22b0b 100644 --- a/examples/openthread/ot_cli/sdkconfig.ci.disable_cli +++ b/examples/openthread/ot_cli/sdkconfig.ci.disable_cli @@ -1,4 +1,2 @@ -CONFIG_IDF_TARGET="esp32h2" -CONFIG_IDF_TARGET_ESP32H2=y CONFIG_OPENTHREAD_CLI=n CONFIG_OPENTHREAD_CLI_ESP_EXTENSION=n diff --git a/examples/openthread/ot_rcp/sdkconfig.ci.rcp_spi b/examples/openthread/ot_rcp/sdkconfig.ci.rcp_spi new file mode 100644 index 000000000000..87b895575be4 --- /dev/null +++ b/examples/openthread/ot_rcp/sdkconfig.ci.rcp_spi @@ -0,0 +1 @@ +CONFIG_OPENTHREAD_RCP_SPI=y diff --git a/examples/openthread/ot_rcp/sdkconfig.ci.rcp b/examples/openthread/ot_rcp/sdkconfig.ci.rcp_uart similarity index 100% rename from examples/openthread/ot_rcp/sdkconfig.ci.rcp rename to examples/openthread/ot_rcp/sdkconfig.ci.rcp_uart diff --git a/examples/openthread/ot_sleepy_device/light_sleep/sdkconfig.ci.sleepy_c6 b/examples/openthread/ot_sleepy_device/light_sleep/sdkconfig.ci.sleepy similarity index 78% rename from examples/openthread/ot_sleepy_device/light_sleep/sdkconfig.ci.sleepy_c6 rename to examples/openthread/ot_sleepy_device/light_sleep/sdkconfig.ci.sleepy index c4abd6d67017..9f3ddc2c93b7 100644 --- a/examples/openthread/ot_sleepy_device/light_sleep/sdkconfig.ci.sleepy_c6 +++ b/examples/openthread/ot_sleepy_device/light_sleep/sdkconfig.ci.sleepy @@ -1,5 +1,3 @@ -CONFIG_IDF_TARGET="esp32c6" -CONFIG_IDF_TARGET_ESP32C6=y CONFIG_OPENTHREAD_NETWORK_CHANNEL=12 CONFIG_OPENTHREAD_NETWORK_MASTERKEY="aabbccddeeff00112233445566778899" CONFIG_ESP_SLEEP_DEBUG=y diff --git a/examples/openthread/ot_sleepy_device/light_sleep/sdkconfig.ci.sleepy_h2 b/examples/openthread/ot_sleepy_device/light_sleep/sdkconfig.ci.sleepy_h2 deleted file mode 100644 index b7fa32376fac..000000000000 --- a/examples/openthread/ot_sleepy_device/light_sleep/sdkconfig.ci.sleepy_h2 +++ /dev/null @@ -1,7 +0,0 @@ -CONFIG_IDF_TARGET="esp32h2" -CONFIG_IDF_TARGET_ESP32H2=y -CONFIG_OPENTHREAD_NETWORK_CHANNEL=12 -CONFIG_OPENTHREAD_NETWORK_MASTERKEY="aabbccddeeff00112233445566778899" -CONFIG_ESP_SLEEP_DEBUG=y -CONFIG_LOG_MAXIMUM_LEVEL_DEBUG=y -CONFIG_ESP_SLEEP_CACHE_SAFE_ASSERTION=y diff --git a/examples/openthread/ot_sleepy_device/light_sleep/sdkconfig.defaults.esp32c6 b/examples/openthread/ot_sleepy_device/light_sleep/sdkconfig.defaults.esp32c6 index 2c90c3e7eeb2..229cb8cc6b28 100644 --- a/examples/openthread/ot_sleepy_device/light_sleep/sdkconfig.defaults.esp32c6 +++ b/examples/openthread/ot_sleepy_device/light_sleep/sdkconfig.defaults.esp32c6 @@ -1,5 +1,3 @@ -CONFIG_IDF_TARGET="esp32c6" - # # Sleep Config # diff --git a/examples/openthread/ot_sleepy_device/light_sleep/sdkconfig.defaults.esp32h2 b/examples/openthread/ot_sleepy_device/light_sleep/sdkconfig.defaults.esp32h2 deleted file mode 100644 index ba2980822cac..000000000000 --- a/examples/openthread/ot_sleepy_device/light_sleep/sdkconfig.defaults.esp32h2 +++ /dev/null @@ -1 +0,0 @@ -CONFIG_IDF_TARGET="esp32h2" diff --git a/examples/openthread/pytest_otbr.py b/examples/openthread/pytest_otbr.py index ea9dc3353db3..604862d8d34f 100644 --- a/examples/openthread/pytest_otbr.py +++ b/examples/openthread/pytest_otbr.py @@ -91,11 +91,16 @@ def fixture_Init_interface() -> bool: @pytest.mark.flaky(reruns=1, reruns_delay=1) @pytest.mark.parametrize( 'config, count, app_path, target', [ - ('rcp|cli_h2|br', 3, + ('rcp_uart|cli|br', 3, f'{os.path.join(os.path.dirname(__file__), "ot_rcp")}' f'|{os.path.join(os.path.dirname(__file__), "ot_cli")}' f'|{os.path.join(os.path.dirname(__file__), "ot_br")}', 'esp32c6|esp32h2|esp32s3'), + ('rcp_spi|cli|br_spi', 3, + f'{os.path.join(os.path.dirname(__file__), "ot_rcp")}' + f'|{os.path.join(os.path.dirname(__file__), "ot_cli")}' + f'|{os.path.join(os.path.dirname(__file__), "ot_br")}', + 'esp32h2|esp32c6|esp32s3'), ], indirect=True, ) @@ -161,7 +166,7 @@ def formBasicWiFiThreadNetwork(br:IdfDut, cli:IdfDut) -> None: @pytest.mark.flaky(reruns=1, reruns_delay=1) @pytest.mark.parametrize( 'config, count, app_path, target', [ - ('rcp|cli_h2|br', 3, + ('rcp_uart|cli|br', 3, f'{os.path.join(os.path.dirname(__file__), "ot_rcp")}' f'|{os.path.join(os.path.dirname(__file__), "ot_cli")}' f'|{os.path.join(os.path.dirname(__file__), "ot_br")}', @@ -210,7 +215,7 @@ def test_Bidirectional_IPv6_connectivity(Init_interface:bool, dut: Tuple[IdfDut, @pytest.mark.flaky(reruns=1, reruns_delay=1) @pytest.mark.parametrize( 'config, count, app_path, target', [ - ('rcp|cli_h2|br', 3, + ('rcp_uart|cli|br', 3, f'{os.path.join(os.path.dirname(__file__), "ot_rcp")}' f'|{os.path.join(os.path.dirname(__file__), "ot_cli")}' f'|{os.path.join(os.path.dirname(__file__), "ot_br")}', @@ -260,7 +265,7 @@ def test_multicast_forwarding_A(Init_interface:bool, dut: Tuple[IdfDut, IdfDut, @pytest.mark.flaky(reruns=1, reruns_delay=1) @pytest.mark.parametrize( 'config, count, app_path, target', [ - ('rcp|cli_h2|br', 3, + ('rcp_uart|cli|br', 3, f'{os.path.join(os.path.dirname(__file__), "ot_rcp")}' f'|{os.path.join(os.path.dirname(__file__), "ot_cli")}' f'|{os.path.join(os.path.dirname(__file__), "ot_br")}', @@ -311,7 +316,7 @@ def test_multicast_forwarding_B(Init_interface:bool, dut: Tuple[IdfDut, IdfDut, @pytest.mark.flaky(reruns=1, reruns_delay=1) @pytest.mark.parametrize( 'config, count, app_path, target', [ - ('rcp|cli_h2|br', 3, + ('rcp_uart|cli|br', 3, f'{os.path.join(os.path.dirname(__file__), "ot_rcp")}' f'|{os.path.join(os.path.dirname(__file__), "ot_cli")}' f'|{os.path.join(os.path.dirname(__file__), "ot_br")}', @@ -367,7 +372,7 @@ def test_service_discovery_of_Thread_device(Init_interface:bool, Init_avahi:bool @pytest.mark.flaky(reruns=1, reruns_delay=1) @pytest.mark.parametrize( 'config, count, app_path, target', [ - ('rcp|cli_h2|br', 3, + ('rcp_uart|cli|br', 3, f'{os.path.join(os.path.dirname(__file__), "ot_rcp")}' f'|{os.path.join(os.path.dirname(__file__), "ot_cli")}' f'|{os.path.join(os.path.dirname(__file__), "ot_br")}', @@ -430,7 +435,7 @@ def test_service_discovery_of_WiFi_device(Init_interface:bool, Init_avahi:bool, @pytest.mark.flaky(reruns=1, reruns_delay=1) @pytest.mark.parametrize( 'config, count, app_path, target', [ - ('rcp|cli_h2|br', 3, + ('rcp_uart|cli|br', 3, f'{os.path.join(os.path.dirname(__file__), "ot_rcp")}' f'|{os.path.join(os.path.dirname(__file__), "ot_cli")}' f'|{os.path.join(os.path.dirname(__file__), "ot_br")}', @@ -465,7 +470,7 @@ def test_ICMP_NAT64(Init_interface:bool, dut: Tuple[IdfDut, IdfDut, IdfDut]) -> @pytest.mark.flaky(reruns=1, reruns_delay=1) @pytest.mark.parametrize( 'config, count, app_path, target', [ - ('rcp|cli_h2|br', 3, + ('rcp_uart|cli|br', 3, f'{os.path.join(os.path.dirname(__file__), "ot_rcp")}' f'|{os.path.join(os.path.dirname(__file__), "ot_cli")}' f'|{os.path.join(os.path.dirname(__file__), "ot_br")}', @@ -518,7 +523,7 @@ def test_UDP_NAT64(Init_interface:bool, dut: Tuple[IdfDut, IdfDut, IdfDut]) -> N @pytest.mark.flaky(reruns=1, reruns_delay=1) @pytest.mark.parametrize( 'config, count, app_path, target', [ - ('rcp|cli_h2|br', 3, + ('rcp_uart|cli|br', 3, f'{os.path.join(os.path.dirname(__file__), "ot_rcp")}' f'|{os.path.join(os.path.dirname(__file__), "ot_cli")}' f'|{os.path.join(os.path.dirname(__file__), "ot_br")}', @@ -575,11 +580,11 @@ def test_TCP_NAT64(Init_interface:bool, dut: Tuple[IdfDut, IdfDut, IdfDut]) -> N @pytest.mark.openthread_sleep @pytest.mark.parametrize( 'config, count, app_path, target', [ - ('cli_h2|sleepy_c6', 2, + ('cli|sleepy', 2, f'{os.path.join(os.path.dirname(__file__), "ot_cli")}' f'|{os.path.join(os.path.dirname(__file__), "ot_sleepy_device/light_sleep")}', 'esp32h2|esp32c6'), - ('cli_c6|sleepy_h2', 2, + ('cli|sleepy', 2, f'{os.path.join(os.path.dirname(__file__), "ot_cli")}' f'|{os.path.join(os.path.dirname(__file__), "ot_sleepy_device/light_sleep")}', 'esp32c6|esp32h2'), @@ -627,7 +632,7 @@ def test_ot_sleepy_device(dut: Tuple[IdfDut, IdfDut]) -> None: @pytest.mark.flaky(reruns=1, reruns_delay=1) @pytest.mark.parametrize( 'config, count, app_path, target', [ - ('rcp|br', 2, + ('rcp_uart|br', 2, f'{os.path.join(os.path.dirname(__file__), "ot_rcp")}' f'|{os.path.join(os.path.dirname(__file__), "ot_br")}', 'esp32c6|esp32s3'), @@ -666,7 +671,7 @@ def test_basic_startup(dut: Tuple[IdfDut, IdfDut]) -> None: @pytest.mark.flaky(reruns=1, reruns_delay=1) @pytest.mark.parametrize( 'config, count, app_path, target', [ - ('rcp|cli_h2|br', 3, + ('rcp_uart|cli|br', 3, f'{os.path.join(os.path.dirname(__file__), "ot_rcp")}' f'|{os.path.join(os.path.dirname(__file__), "ot_cli")}' f'|{os.path.join(os.path.dirname(__file__), "ot_br")}', @@ -703,7 +708,7 @@ def test_NAT64_DNS(Init_interface:bool, dut: Tuple[IdfDut, IdfDut, IdfDut]) -> N @pytest.mark.flaky(reruns=1, reruns_delay=1) @pytest.mark.parametrize( 'config, count, app_path, target', [ - ('rcp|br', 2, + ('rcp_uart|br', 2, f'{os.path.join(os.path.dirname(__file__), "ot_rcp")}' f'|{os.path.join(os.path.dirname(__file__), "ot_br")}', 'esp32c6|esp32s3'), @@ -761,7 +766,7 @@ def test_br_meshcop(Init_interface:bool, Init_avahi:bool, dut: Tuple[IdfDut, Idf @pytest.mark.flaky(reruns=1, reruns_delay=1) @pytest.mark.parametrize( 'config, count, app_path, target', [ - ('rcp|cli_h2|br', 3, + ('rcp_uart|cli|br', 3, f'{os.path.join(os.path.dirname(__file__), "ot_rcp")}' f'|{os.path.join(os.path.dirname(__file__), "ot_cli")}' f'|{os.path.join(os.path.dirname(__file__), "ot_br")}', From 0216236d0c8dfcdf3e6eb47170c398dd652935c1 Mon Sep 17 00:00:00 2001 From: "nilesh.kale" Date: Tue, 3 Sep 2024 16:49:21 +0530 Subject: [PATCH 013/365] feat(mbedtls): updated mbedtls version to 3.6.1 --- components/mbedtls/mbedtls | 2 +- docs/en/api-reference/protocols/mbedtls.rst | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/components/mbedtls/mbedtls b/components/mbedtls/mbedtls index 5d1127602934..f635fed59269 160000 --- a/components/mbedtls/mbedtls +++ b/components/mbedtls/mbedtls @@ -1 +1 @@ -Subproject commit 5d112760293404ca0452bf244aa025079cf2e5af +Subproject commit f635fed59269b1ae14d1a1c50403cd63f78ac094 diff --git a/docs/en/api-reference/protocols/mbedtls.rst b/docs/en/api-reference/protocols/mbedtls.rst index 67d4ee0f1d9c..11a9fb02df3b 100644 --- a/docs/en/api-reference/protocols/mbedtls.rst +++ b/docs/en/api-reference/protocols/mbedtls.rst @@ -75,7 +75,7 @@ Following is a brief list of important config options accessible at ``Component .. note:: - Mbed TLS v3.0.0 and later support only TLS 1.2 and TLS 1.3 (SSL 3.0, TLS 1.0, TLS 1.1, and DTLS 1.0 are not supported). The support for TLS 1.3 is experimental and only supports the client-side. More information about this can be found out `here `__. + Mbed TLS v3.6.0 and later support only TLS 1.2 and TLS 1.3 (SSL 3.0, TLS 1.0, TLS 1.1, and DTLS 1.0 are not supported). More information about this can be found out `here `__. Performance and Memory Tweaks From 02d61c1c5a510b0cb6f94efbe9503b8d2e5380a4 Mon Sep 17 00:00:00 2001 From: Konstantin Kondrashov Date: Wed, 7 Aug 2024 20:05:27 +0300 Subject: [PATCH 014/365] feat(esp_partition): Adds new esp_partition APIs --- .../test_app_update/main/test_switch_ota.c | 20 +-- .../main/partition_api_test.c | 44 ++++++ .../partition_api_test/partition_table.csv | 1 + .../esp_partition/include/esp_partition.h | 37 ++++- components/esp_partition/partition.c | 136 +++++++++++++++--- components/spi_flash/CMakeLists.txt | 1 + components/spi_flash/linux/flash_mmap.c | 12 ++ 7 files changed, 207 insertions(+), 44 deletions(-) create mode 100644 components/spi_flash/linux/flash_mmap.c diff --git a/components/app_update/test_apps/test_app_update/main/test_switch_ota.c b/components/app_update/test_apps/test_app_update/main/test_switch_ota.c index f71276668d66..f38802b7aeec 100644 --- a/components/app_update/test_apps/test_app_update/main/test_switch_ota.c +++ b/components/app_update/test_apps/test_app_update/main/test_switch_ota.c @@ -101,24 +101,6 @@ static void copy_app_partition_with_offset(esp_ota_handle_t update_handle, const ESP_LOGI(TAG, "finish the copy process"); } -#if defined(CONFIG_BOOTLOADER_FACTORY_RESET) || defined(CONFIG_BOOTLOADER_APP_TEST) -/* @brief Copies partition from source partition to destination partition. - * - * Partitions can be of any types and subtypes. - * @param[in] dst_partition - Destination partition - * @param[in] src_partition - Source partition - */ -static void copy_partition(const esp_partition_t *dst_partition, const esp_partition_t *src_partition) -{ - const void *partition_bin = NULL; - esp_partition_mmap_handle_t data_map; - TEST_ESP_OK(esp_partition_mmap(src_partition, 0, src_partition->size, ESP_PARTITION_MMAP_DATA, &partition_bin, &data_map)); - TEST_ESP_OK(esp_partition_erase_range(dst_partition, 0, dst_partition->size)); - TEST_ESP_OK(esp_partition_write(dst_partition, 0, (const void *)partition_bin, dst_partition->size)); - esp_partition_munmap(data_map); -} -#endif - /* @brief Get the next partition of OTA for the update. * * @return The next partition of OTA(OTA0-15). @@ -530,7 +512,7 @@ static void test_flow5(void) ESP_LOGI(TAG, "Factory"); TEST_ASSERT_EQUAL(ESP_PARTITION_SUBTYPE_APP_FACTORY, cur_app->subtype); set_output_pin(CONFIG_BOOTLOADER_NUM_PIN_APP_TEST); - copy_partition(esp_partition_find_first(ESP_PARTITION_TYPE_APP, ESP_PARTITION_SUBTYPE_APP_TEST, NULL), cur_app); + esp_partition_copy(esp_partition_find_first(ESP_PARTITION_TYPE_APP, ESP_PARTITION_SUBTYPE_APP_TEST, NULL), 0, cur_app, 0, cur_app->size); esp_restart(); break; case 3: diff --git a/components/esp_partition/host_test/partition_api_test/main/partition_api_test.c b/components/esp_partition/host_test/partition_api_test/main/partition_api_test.c index ca780fb06a3f..8d57d5d09f1a 100644 --- a/components/esp_partition/host_test/partition_api_test/main/partition_api_test.c +++ b/components/esp_partition/host_test/partition_api_test/main/partition_api_test.c @@ -722,6 +722,48 @@ TEST(partition_api, test_partition_power_off_emulation) free(test_data_ptr); } +TEST(partition_api, test_partition_copy) +{ + const esp_partition_t *factory_part = esp_partition_find_first(ESP_PARTITION_TYPE_APP, ESP_PARTITION_SUBTYPE_APP_FACTORY, NULL); + TEST_ASSERT_NOT_NULL(factory_part); + + const esp_partition_t *ota0_part = esp_partition_find_first(ESP_PARTITION_TYPE_APP, ESP_PARTITION_SUBTYPE_APP_OTA_0, NULL); + TEST_ASSERT_NOT_NULL(ota0_part); + + TEST_ESP_OK(esp_partition_copy(ota0_part, 0, factory_part, 0, factory_part->size)); + TEST_ESP_OK(esp_partition_copy(ota0_part, 0, factory_part, 0, SIZE_MAX)); + + TEST_ESP_ERR(ESP_ERR_INVALID_SIZE, esp_partition_copy(ota0_part, 0x1000000, factory_part, 0, SIZE_MAX)); + TEST_ESP_ERR(ESP_ERR_INVALID_SIZE, esp_partition_copy(ota0_part, 0, factory_part, 0x1000000, SIZE_MAX)); + + TEST_ESP_ERR(ESP_ERR_INVALID_SIZE, esp_partition_copy(ota0_part, 0, factory_part, 0, SIZE_MAX - 1)); + + TEST_ESP_ERR(ESP_ERR_INVALID_SIZE, esp_partition_copy(ota0_part, UINT32_MAX - 1, factory_part, 0, 0x10000)); + TEST_ESP_ERR(ESP_ERR_INVALID_SIZE, esp_partition_copy(ota0_part, 0, factory_part, UINT32_MAX - 1, 0x10000)); + + TEST_ESP_ERR(ESP_ERR_INVALID_SIZE, esp_partition_copy(ota0_part, UINT32_MAX - 1, factory_part, 0, SIZE_MAX)); + TEST_ESP_ERR(ESP_ERR_INVALID_SIZE, esp_partition_copy(ota0_part, 0, factory_part, UINT32_MAX - 1, SIZE_MAX)); +} + +TEST(partition_api, test_partition_register_external) +{ + esp_err_t error; + const esp_partition_t *ota1_part = esp_partition_find_first(ESP_PARTITION_TYPE_APP, ESP_PARTITION_SUBTYPE_APP_OTA_1, NULL); + TEST_ASSERT_NULL(ota1_part); + const esp_partition_t *storage_part = esp_partition_find_first(ESP_PARTITION_TYPE_DATA, ESP_PARTITION_SUBTYPE_DATA_UNDEFINED, NULL); + error = esp_partition_register_external(NULL, + storage_part->address + storage_part->size, // place this new partition after the storage (the last part in the table) + 1 * 1024 * 1024, + "ota_1", + ESP_PARTITION_TYPE_APP, + ESP_PARTITION_SUBTYPE_APP_OTA_1, + &ota1_part); + TEST_ESP_OK(error); + ota1_part = esp_partition_find_first(ESP_PARTITION_TYPE_APP, ESP_PARTITION_SUBTYPE_APP_OTA_1, NULL); + TEST_ASSERT_NOT_NULL(ota1_part); + TEST_ESP_OK(esp_partition_deregister_external(ota1_part)); +} + TEST_GROUP_RUNNER(partition_api) { RUN_TEST_CASE(partition_api, test_partition_find_basic); @@ -741,6 +783,8 @@ TEST_GROUP_RUNNER(partition_api) RUN_TEST_CASE(partition_api, test_partition_mmap_size_too_small); RUN_TEST_CASE(partition_api, test_partition_stats); RUN_TEST_CASE(partition_api, test_partition_power_off_emulation); + RUN_TEST_CASE(partition_api, test_partition_copy); + RUN_TEST_CASE(partition_api, test_partition_register_external); } static void run_all_tests(void) diff --git a/components/esp_partition/host_test/partition_api_test/partition_table.csv b/components/esp_partition/host_test/partition_api_test/partition_table.csv index a70efe6a7544..6ee9489a6271 100644 --- a/components/esp_partition/host_test/partition_api_test/partition_table.csv +++ b/components/esp_partition/host_test/partition_api_test/partition_table.csv @@ -3,4 +3,5 @@ nvs, data, nvs, 0x9000, 0x6000, phy_init, data, phy, 0xf000, 0x1000, factory, app, factory, 0x10000, 1M, +ota_0, app, ota_0, 0x120000, 1M, storage, data, , , 0x40000, diff --git a/components/esp_partition/include/esp_partition.h b/components/esp_partition/include/esp_partition.h index 972fbded9ea9..ea0c42dde131 100644 --- a/components/esp_partition/include/esp_partition.h +++ b/components/esp_partition/include/esp_partition.h @@ -29,8 +29,8 @@ typedef struct esp_flash_t esp_flash_t; * @brief Enumeration which specifies memory space requested in an mmap call */ typedef enum { - ESP_PARTITION_MMAP_DATA, /**< map to data memory (Vaddr0), allows byte-aligned access, 4 MB total */ - ESP_PARTITION_MMAP_INST, /**< map to instruction memory (Vaddr1-3), allows only 4-byte-aligned access, 11 MB total */ + ESP_PARTITION_MMAP_DATA, /**< map to data memory (Vaddr0), allows byte-aligned access, (4 MB total - only for esp32) */ + ESP_PARTITION_MMAP_INST, /**< map to instruction memory (Vaddr1-3), allows only 4-byte-aligned access, (11 MB total - only for esp32) */ } esp_partition_mmap_memory_t; /** @@ -50,6 +50,8 @@ typedef uint32_t esp_partition_mmap_handle_t; typedef enum { ESP_PARTITION_TYPE_APP = 0x00, //!< Application partition type ESP_PARTITION_TYPE_DATA = 0x01, //!< Data partition type + ESP_PARTITION_TYPE_BOOTLOADER = 0x02, //!< Bootloader partition type + ESP_PARTITION_TYPE_PARTITION_TABLE = 0x03, //!< Partition table type ESP_PARTITION_TYPE_ANY = 0xff, //!< Used to search for partitions with any type } esp_partition_type_t; @@ -429,7 +431,7 @@ bool esp_partition_check_identity(const esp_partition_t* partition_1, const esp_ * This API allows designating certain areas of external flash chips (identified by the esp_flash_t structure) * as partitions. This allows using them with components which access SPI flash through the esp_partition API. * - * @param flash_chip Pointer to the structure identifying the flash chip + * @param flash_chip Pointer to the structure identifying the flash chip. If NULL then the internal flash chip is used (esp_flash_default_chip). * @param offset Address in bytes, where the partition starts * @param size Size of the partition in bytes * @param label Partition name @@ -472,6 +474,35 @@ void esp_partition_unload_all(void); */ uint32_t esp_partition_get_main_flash_sector_size(void); +/** + * @brief Copy data from a source partition at a specific offset to a destination partition at a specific offset. + * + * The destination offset must be aligned to the flash sector size (SPI_FLASH_SEC_SIZE = 0x1000). + * If "size" is SIZE_MAX, the entire destination partition (from dest_offset onward) will be erased, + * and the function will copy all of the source partition starting from src_offset into the destination. + * The function ensures that the destination partition is erased on sector boundaries (erase size is aligned up SPI_FLASH_SEC_SIZE). + * + * This function does the following: + * - erases the destination partition from dest_offset to the specified size (or the whole partition if "size" == SIZE_MAX), + * - maps data from the source partition in chunks, + * - writes the source data into the destination partition in corresponding chunks. + * + * @param dest_part Pointer to a destination partition. + * @param dest_offset Offset in the destination partition where the data should be written (must be aligned to SPI_FLASH_SEC_SIZE = 0x1000). + * @param src_part Pointer to a source partition (must be located on internal flash). + * @param src_offset Offset in the source partition where the data should be read from. + * @param size Number of bytes to copy from the source partition to the destination partition. If "size" is SIZE_MAX, + * the function copies from src_offset to the end of the source partition and erases + * the entire destination partition (from dest_offset onward). + * + * @return ESP_OK, if the source partition was copied successfully to the destination partition; + * ESP_ERR_INVALID_ARG, if src_part or dest_part are incorrect, or if dest_offset is not sector aligned; + * ESP_ERR_INVALID_SIZE, if the copy would go out of bounds of the source or destination partition; + * ESP_ERR_NOT_ALLOWED, if the destination partition is read-only; + * or one of the error codes from the lower-level flash driver. + */ +esp_err_t esp_partition_copy(const esp_partition_t* dest_part, uint32_t dest_offset, const esp_partition_t* src_part, uint32_t src_offset, size_t size); + #ifdef __cplusplus } #endif diff --git a/components/esp_partition/partition.c b/components/esp_partition/partition.c index bb61203e61ea..d1ab54c08637 100644 --- a/components/esp_partition/partition.c +++ b/components/esp_partition/partition.c @@ -9,6 +9,7 @@ #include #include #include +#include /* interim to enable test_wl_host and test_fatfs_on_host compilation (both use IDF_TARGET_ESP32) * should go back to #include "sys/queue.h" once the tests are switched to CMake @@ -24,11 +25,11 @@ #include "esp_flash_partitions.h" #include "esp_attr.h" #include "esp_partition.h" -#if !CONFIG_IDF_TARGET_LINUX #include "esp_flash.h" +#if !CONFIG_IDF_TARGET_LINUX #include "esp_flash_encrypt.h" -#include "spi_flash_mmap.h" #endif +#include "spi_flash_mmap.h" #include "esp_log.h" #include "esp_rom_md5.h" #include "bootloader_util.h" @@ -49,6 +50,8 @@ #define INVARIANTS #endif +#define ALIGN_UP(num, align) (((num) + ((align) - 1)) & ~((align) - 1)) + typedef struct partition_list_item_ { esp_partition_t info; bool user_registered; @@ -68,6 +71,31 @@ static _lock_t s_partition_list_lock; static const char *TAG = "partition"; +static bool is_partition_encrypted(bool encryption_config, esp_partition_type_t type, esp_partition_subtype_t subtype) +{ +#if CONFIG_IDF_TARGET_LINUX + (void) type; + (void) subtype; + (void) encryption_config; + return false; +#else + bool ret_encrypted = encryption_config; + if (!esp_flash_encryption_enabled()) { + /* If flash encryption is not turned on, no partitions should be treated as encrypted */ + ret_encrypted = false; + } else if (type == ESP_PARTITION_TYPE_APP + || (type == ESP_PARTITION_TYPE_BOOTLOADER) + || (type == ESP_PARTITION_TYPE_PARTITION_TABLE) + || (type == ESP_PARTITION_TYPE_DATA && subtype == ESP_PARTITION_SUBTYPE_DATA_OTA) + || (type == ESP_PARTITION_TYPE_DATA && subtype == ESP_PARTITION_SUBTYPE_DATA_NVS_KEYS)) { + /* If encryption is turned on, all app partitions and OTA data + are always encrypted */ + ret_encrypted = true; + } + return ret_encrypted; +#endif +} + // Create linked list of partition_list_item_t structures. // This function is called only once, with s_partition_list_lock taken. static esp_err_t load_partitions(void) @@ -151,25 +179,10 @@ static esp_err_t load_partitions(void) #endif item->info.type = entry.type; item->info.subtype = entry.subtype; - item->info.encrypted = entry.flags & PART_FLAG_ENCRYPTED; + item->info.encrypted = is_partition_encrypted(entry.flags & PART_FLAG_ENCRYPTED, entry.type, entry.subtype); item->info.readonly = entry.flags & PART_FLAG_READONLY; item->user_registered = false; -#if CONFIG_IDF_TARGET_LINUX - item->info.encrypted = false; -#else - if (!esp_flash_encryption_enabled()) { - /* If flash encryption is not turned on, no partitions should be treated as encrypted */ - item->info.encrypted = false; - } else if (entry.type == ESP_PARTITION_TYPE_APP - || (entry.type == ESP_PARTITION_TYPE_DATA && entry.subtype == ESP_PARTITION_SUBTYPE_DATA_OTA) - || (entry.type == ESP_PARTITION_TYPE_DATA && entry.subtype == ESP_PARTITION_SUBTYPE_DATA_NVS_KEYS)) { - /* If encryption is turned on, all app partitions and OTA data - are always encrypted */ - item->info.encrypted = true; - } -#endif - #if CONFIG_NVS_COMPATIBLE_PRE_V4_3_ENCRYPTION_FLAG if (entry.type == ESP_PARTITION_TYPE_DATA && entry.subtype == ESP_PARTITION_SUBTYPE_DATA_NVS && @@ -392,10 +405,10 @@ esp_err_t esp_partition_register_external(esp_flash_t *flash_chip, size_t offset *out_partition = NULL; } -#if CONFIG_IDF_TARGET_LINUX - return ESP_ERR_NOT_SUPPORTED; - -#else +#if !CONFIG_IDF_TARGET_LINUX + if (flash_chip == NULL) { + flash_chip = esp_flash_default_chip; + } if (offset + size > flash_chip->size) { return ESP_ERR_INVALID_SIZE; } @@ -415,7 +428,14 @@ esp_err_t esp_partition_register_external(esp_flash_t *flash_chip, size_t offset item->info.size = size; item->info.type = type; item->info.subtype = subtype; +#if CONFIG_IDF_TARGET_LINUX + item->info.erase_size = ESP_PARTITION_EMULATED_SECTOR_SIZE; item->info.encrypted = false; +#else + item->info.erase_size = SPI_FLASH_SEC_SIZE; + item->info.encrypted = (flash_chip == esp_flash_default_chip) ? is_partition_encrypted(false, type, subtype) : false; +#endif // CONFIG_IDF_TARGET_LINUX + item->info.readonly = false; item->user_registered = true; strlcpy(item->info.label, label, sizeof(item->info.label)); @@ -466,3 +486,75 @@ esp_err_t esp_partition_deregister_external(const esp_partition_t *partition) _lock_release(&s_partition_list_lock); return result; } + +esp_err_t esp_partition_copy(const esp_partition_t* dest_part, uint32_t dest_offset, const esp_partition_t* src_part, uint32_t src_offset, size_t size) +{ + if (src_part == NULL || dest_part == NULL || src_part == dest_part) { + return ESP_ERR_INVALID_ARG; + } + + if (src_offset > src_part->size || dest_offset > dest_part->size) { + return ESP_ERR_INVALID_SIZE; + } + + // Check if the source partition is on external flash and return error +#if !CONFIG_IDF_TARGET_LINUX + if (src_part->flash_chip != esp_flash_default_chip) { + ESP_LOGE(TAG, "Source partition is on external flash. Operation not supported."); + return ESP_ERR_NOT_SUPPORTED; + } +#endif + + size_t dest_erase_size = size; + if (size == SIZE_MAX) { + size = src_part->size - src_offset; + dest_erase_size = dest_part->size - dest_offset; // Erase the whole destination partition + } + + uint32_t src_end_offset; + uint32_t dest_end_offset; + if ((__builtin_add_overflow(src_offset, size, &src_end_offset) || (src_end_offset > src_part->size)) + || (__builtin_add_overflow(dest_offset, size, &dest_end_offset) || (dest_end_offset > dest_part->size))) { // with overflow checks + return ESP_ERR_INVALID_SIZE; + } + + esp_err_t error = esp_partition_erase_range(dest_part, dest_offset, ALIGN_UP(dest_erase_size, SPI_FLASH_SEC_SIZE)); + if (error) { + ESP_LOGE(TAG, "Erasing destination partition range failed (err=0x%x)", error); + return error; + } + + uint32_t src_current_offset = src_offset; + uint32_t dest_current_offset = dest_offset; + size_t remaining_size = size; + /* Read the portion that fits in the free MMU pages */ + uint32_t mmu_free_pages_count = spi_flash_mmap_get_free_pages(SPI_FLASH_MMAP_DATA); + int attempts_for_mmap = 0; + while (remaining_size > 0) { + uint32_t chunk_size = MIN(remaining_size, mmu_free_pages_count * SPI_FLASH_MMU_PAGE_SIZE); + esp_partition_mmap_handle_t src_part_map; + const void *src_data = NULL; + error = esp_partition_mmap(src_part, src_current_offset, chunk_size, ESP_PARTITION_MMAP_DATA, &src_data, &src_part_map); + if (error == ESP_OK) { + attempts_for_mmap = 0; + error = esp_partition_write(dest_part, dest_current_offset, src_data, chunk_size); + if (error != ESP_OK) { + ESP_LOGE(TAG, "Writing to destination partition failed (err=0x%x)", error); + esp_partition_munmap(src_part_map); + break; + } + esp_partition_munmap(src_part_map); + } else { + mmu_free_pages_count = spi_flash_mmap_get_free_pages(SPI_FLASH_MMAP_DATA); + chunk_size = 0; + if (++attempts_for_mmap >= 3) { + ESP_LOGE(TAG, "Failed to mmap source partition after a few attempts, mmu_free_pages = %" PRIu32 " (err=0x%x)", mmu_free_pages_count, error); + break; + } + } + src_current_offset += chunk_size; + dest_current_offset += chunk_size; + remaining_size -= chunk_size; + } + return error; +} diff --git a/components/spi_flash/CMakeLists.txt b/components/spi_flash/CMakeLists.txt index 147f01294fd3..b71f6e71cfdd 100644 --- a/components/spi_flash/CMakeLists.txt +++ b/components/spi_flash/CMakeLists.txt @@ -2,6 +2,7 @@ idf_build_get_property(target IDF_TARGET) if(${target} STREQUAL "linux") idf_component_register(SRCS "linux/spi_flash_linux.c" "linux/cache_utils.c" + "linux/flash_mmap.c" INCLUDE_DIRS include PRIV_INCLUDE_DIRS include/spi_flash) return() diff --git a/components/spi_flash/linux/flash_mmap.c b/components/spi_flash/linux/flash_mmap.c new file mode 100644 index 000000000000..4a48b69108db --- /dev/null +++ b/components/spi_flash/linux/flash_mmap.c @@ -0,0 +1,12 @@ +/* + * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ +#include "spi_flash_mmap.h" + +uint32_t spi_flash_mmap_get_free_pages(spi_flash_mmap_memory_t memory) +{ + (void) memory; + return 10; +} From 0d4787fb3aa1d988fd93ea839902ff2d2378d6b8 Mon Sep 17 00:00:00 2001 From: Konstantin Kondrashov Date: Wed, 14 Aug 2024 10:40:05 +0300 Subject: [PATCH 015/365] feat(spi_flash): Adds esp_flash_set_dangerous_write_protection --- .../spi_flash/include/esp_flash_internal.h | 24 +++++++++++++++++-- components/spi_flash/spi_flash_os_func_app.c | 18 +++++++++++++- 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/components/spi_flash/include/esp_flash_internal.h b/components/spi_flash/include/esp_flash_internal.h index e7d35b0dfb2d..d07b3e229007 100644 --- a/components/spi_flash/include/esp_flash_internal.h +++ b/components/spi_flash/include/esp_flash_internal.h @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2015-2022 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -95,7 +95,27 @@ esp_err_t esp_flash_app_enable_os_functions(esp_flash_t* chip); */ esp_err_t esp_flash_app_disable_os_functions(esp_flash_t* chip); - +/** + * @brief Set or clear dangerous write protection check on the flash chip. + * + * This function sets the runtime option to allow or disallow writing to + * dangerous areas such as the bootloader and partition table. If + * CONFIG_SPI_FLASH_DANGEROUS_WRITE_ALLOWED is not set, this function allows + * the caller to toggle the protection for specific areas. + * + * If CONFIG_SPI_FLASH_DANGEROUS_WRITE_ALLOWED is set, there is no protection + * check in the system, and this function does nothing. + * + * @param chip The flash chip on which to set the write protection. Only + * "esp_flash_default_chip" is supported. + * @param protect Set to true to enable protection against writing in dangerous + * areas (bootloader, partition table). Set to false to disable + * the protection. + * @return + * - ESP_OK: Successful operation. + * - ESP_ERR_INVALID_ARG: The chip argument is null. + */ +esp_err_t esp_flash_set_dangerous_write_protection(esp_flash_t *chip, const bool protect); #ifdef __cplusplus } diff --git a/components/spi_flash/spi_flash_os_func_app.c b/components/spi_flash/spi_flash_os_func_app.c index 1cae38728132..51f0671f0992 100644 --- a/components/spi_flash/spi_flash_os_func_app.c +++ b/components/spi_flash/spi_flash_os_func_app.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2015-2023 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -350,6 +350,22 @@ esp_err_t esp_flash_app_enable_os_functions(esp_flash_t* chip) return ESP_OK; } +esp_err_t esp_flash_set_dangerous_write_protection(esp_flash_t *chip, const bool protect) +{ +#if !CONFIG_SPI_FLASH_DANGEROUS_WRITE_ALLOWED + if (chip == NULL) { + return ESP_ERR_INVALID_ARG; + } + if (chip->os_func_data != NULL) { + ((app_func_arg_t*)chip->os_func_data)->no_protect = !protect; + } +#else + (void)chip; + (void)protect; +#endif + return ESP_OK; +} + // The goal of this part is to manually insert one valid task execution interval, if the time since // last valid interval exceed the limitation (CONFIG_SPI_FLASH_ERASE_YIELD_DURATION_MS). // From 2d7807f839d2b970dc48f965698eef85d9cd3213 Mon Sep 17 00:00:00 2001 From: Erhan Kurubas Date: Thu, 26 Sep 2024 10:32:11 +0200 Subject: [PATCH 016/365] fix(esp-coredump): fix build error when mbedtls hardware sha disabled --- components/espcoredump/src/core_dump_sha.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/components/espcoredump/src/core_dump_sha.c b/components/espcoredump/src/core_dump_sha.c index 5de67eaa56f3..fcd81ae978c5 100644 --- a/components/espcoredump/src/core_dump_sha.c +++ b/components/espcoredump/src/core_dump_sha.c @@ -31,7 +31,9 @@ static void core_dump_sha256_start(core_dump_sha_ctx_t *sha_ctx) static void core_dump_sha256_update(core_dump_sha_ctx_t *sha_ctx, const void *data, size_t data_len) { // set software mode of SHA calculation +#if CONFIG_MBEDTLS_HARDWARE_SHA sha_ctx->ctx.mode = ESP_MBEDTLS_SHA256_SOFTWARE; +#endif mbedtls_sha256_update(&sha_ctx->ctx, data, data_len); } From 70f222e5d29df8ffe5da25057601708c8097bcd1 Mon Sep 17 00:00:00 2001 From: Roman Leonov Date: Tue, 18 Jun 2024 12:06:16 +0200 Subject: [PATCH 017/365] feat(ext_port): Added External Port driver Closes https://github.com/espressif/esp-idf/issues/12554 --- Kconfig | 2 + components/usb/CMakeLists.txt | 3 +- components/usb/Kconfig | 45 + components/usb/ext_hub.c | 29 +- components/usb/ext_port.c | 1398 +++++++++++++++++++ components/usb/hub.c | 86 +- components/usb/include/usb/usb_types_ch11.h | 22 + components/usb/private_include/ext_hub.h | 8 +- components/usb/private_include/ext_port.h | 143 ++ components/usb/private_include/hub.h | 15 +- components/usb/usbh.c | 1 - 11 files changed, 1723 insertions(+), 29 deletions(-) create mode 100644 components/usb/ext_port.c create mode 100644 components/usb/private_include/ext_port.h diff --git a/Kconfig b/Kconfig index 028061232e11..13d6c564cbe4 100644 --- a/Kconfig +++ b/Kconfig @@ -678,3 +678,5 @@ mainmenu "Espressif IoT Development Framework Configuration" - CONFIG_BOOTLOADER_CACHE_32BIT_ADDR_QUAD_FLASH - CONFIG_ESP_WIFI_EAP_TLS1_3 - CONFIG_ESP_WIFI_ENABLE_ROAMING_APP + - CONFIG_USB_HOST_EXT_PORT_SUPPORT_LS + - CONFIG_USB_HOST_EXT_PORT_RESET_ATTEMPTS diff --git a/components/usb/CMakeLists.txt b/components/usb/CMakeLists.txt index 8f2ab8dc12ba..f81514661950 100644 --- a/components/usb/CMakeLists.txt +++ b/components/usb/CMakeLists.txt @@ -30,7 +30,8 @@ if(CONFIG_SOC_USB_OTG_SUPPORTED) endif() if(CONFIG_USB_HOST_HUBS_SUPPORTED) - list(APPEND srcs "ext_hub.c") + list(APPEND srcs "ext_hub.c" + "ext_port.c") endif() idf_component_register(SRCS ${srcs} diff --git a/components/usb/Kconfig b/components/usb/Kconfig index 1c333f870b82..a527613c7f5f 100644 --- a/components/usb/Kconfig +++ b/components/usb/Kconfig @@ -112,6 +112,51 @@ menu "USB-OTG" help Enables support for connecting multiple Hubs simultaneously. + menu "Downstream Port configuration" + depends on USB_HOST_HUBS_SUPPORTED + + config USB_HOST_EXT_PORT_SUPPORT_LS + depends on IDF_EXPERIMENTAL_FEATURES + bool "Support LS" + default n + help + Enables support of Low-speed devices, connected through the external Hub. + + config USB_HOST_EXT_PORT_RESET_ATTEMPTS + depends on IDF_EXPERIMENTAL_FEATURES + # Invisible config option + # Todo: IDF-11283 + int + default 1 + help + Amount of attempts to reset the device. + + The default value is 1. + + config USB_HOST_EXT_PORT_CUSTOM_RESET_ENABLE + bool "Custom bPwrOn2PwrGood value" + default n + help + Enables the possibility to configure custom time for the power-on sequence on a port + until power is good on that port. + + When enabled, applies the custom PwrOn2PwrGood delay. + When disabled, applies the PwrOn2PwrGood value from the Hub Descriptor. + + config USB_HOST_EXT_PORT_CUSTOM_RESET_MS + depends on USB_HOST_EXT_PORT_CUSTOM_RESET_ENABLE + int "PwrOn2PwrGood delay in ms" + default 100 + range 0 5000 + help + Custom value of delay from the time the power-on sequence begins on a port + until power is good on that port. + Value 0 is used for a hub with no power switches. + + The default value is 100 ms. + + endmenu #Downstream Port configuration + endmenu #Hub Driver Configuration config USB_HOST_ENABLE_ENUM_FILTER_CALLBACK diff --git a/components/usb/ext_hub.c b/components/usb/ext_hub.c index fb20242f7071..149993070c0c 100644 --- a/components/usb/ext_hub.c +++ b/components/usb/ext_hub.c @@ -5,18 +5,17 @@ */ #include #include +#include "sdkconfig.h" #include "esp_err.h" #include "esp_log.h" #include "esp_heap_caps.h" #include "freertos/FreeRTOS.h" #include "freertos/task.h" -#include "freertos/semphr.h" #include "usb_private.h" #include "ext_hub.h" +#include "ext_port.h" #include "usb/usb_helpers.h" -typedef struct ext_port_s *ext_port_hdl_t; /* This will be implemented during ext_port driver implementation */ - #define EXT_HUB_MAX_STATUS_BYTES_SIZE (sizeof(uint32_t)) #define EXT_HUB_STATUS_CHANGE_FLAG (1 << 0) #define EXT_HUB_STATUS_PORT1_CHANGE_FLAG (1 << 1) @@ -396,8 +395,15 @@ static void device_error(ext_hub_dev_t *ext_hub_dev) static esp_err_t device_port_new(ext_hub_dev_t *ext_hub_dev, uint8_t port_idx) { + ext_port_config_t port_config = { + .ext_hub_hdl = (ext_hub_handle_t) ext_hub_dev, + .parent_dev_hdl = ext_hub_dev->constant.dev_hdl, + .parent_port_num = port_idx + 1, + .port_power_delay_ms = ext_hub_dev->constant.hub_desc->bPwrOn2PwrGood * 2, + }; + assert(p_ext_hub_driver->constant.port_driver); - esp_err_t ret = p_ext_hub_driver->constant.port_driver->new (NULL, (void**) &ext_hub_dev->constant.ports[port_idx]); + esp_err_t ret = p_ext_hub_driver->constant.port_driver->new (&port_config, (void**) &ext_hub_dev->constant.ports[port_idx]); if (ret != ESP_OK) { ESP_LOGE(EXT_HUB_TAG, "[%d:%d] Port allocation error: %s", ext_hub_dev->constant.dev_addr, port_idx + 1, esp_err_to_name(ret)); goto fail; @@ -418,7 +424,7 @@ static esp_err_t device_port_free(ext_hub_dev_t *ext_hub_dev, uint8_t port_idx) assert(ext_hub_dev->single_thread.maxchild != 0); assert(p_ext_hub_driver->constant.port_driver); - esp_err_t ret = p_ext_hub_driver->constant.port_driver->free(ext_hub_dev->constant.ports[port_idx]); + esp_err_t ret = p_ext_hub_driver->constant.port_driver->del(ext_hub_dev->constant.ports[port_idx]); if (ret != ESP_OK) { ESP_LOGE(EXT_HUB_TAG, "[%d:%d] Unable to free port: %s", ext_hub_dev->constant.dev_addr, port_idx + 1, esp_err_to_name(ret)); @@ -1038,6 +1044,7 @@ static void handle_device(ext_hub_dev_t *ext_hub_dev) // FSM for external Hub switch (ext_hub_dev->single_thread.stage) { case EXT_HUB_STAGE_IDLE: + stage_pass = true; break; case EXT_HUB_STAGE_GET_DEVICE_STATUS: case EXT_HUB_STAGE_GET_HUB_DESCRIPTOR: @@ -1118,8 +1125,7 @@ esp_err_t ext_hub_install(const ext_hub_config_t *config) { esp_err_t ret; ext_hub_driver_t *ext_hub_drv = heap_caps_calloc(1, sizeof(ext_hub_driver_t), MALLOC_CAP_DEFAULT); - SemaphoreHandle_t mux_lock = xSemaphoreCreateMutex(); - if (ext_hub_drv == NULL || mux_lock == NULL) { + if (ext_hub_drv == NULL) { ret = ESP_ERR_NO_MEM; goto err; } @@ -1151,9 +1157,6 @@ esp_err_t ext_hub_install(const ext_hub_config_t *config) return ESP_OK; err: - if (mux_lock != NULL) { - vSemaphoreDelete(mux_lock); - } heap_caps_free(ext_hub_drv); return ret; } @@ -1672,7 +1675,7 @@ esp_err_t ext_hub_port_get_speed(ext_hub_handle_t ext_hub_hdl, uint8_t port_num, esp_err_t ext_hub_set_port_feature(ext_hub_handle_t ext_hub_hdl, uint8_t port_num, uint8_t feature) { EXT_HUB_ENTER_CRITICAL(); - EXT_HUB_CHECK_FROM_CRIT(p_ext_hub_driver != NULL, ESP_ERR_INVALID_STATE); + EXT_HUB_CHECK_FROM_CRIT(p_ext_hub_driver != NULL, ESP_ERR_NOT_ALLOWED); EXT_HUB_EXIT_CRITICAL(); esp_err_t ret; @@ -1701,7 +1704,7 @@ esp_err_t ext_hub_set_port_feature(ext_hub_handle_t ext_hub_hdl, uint8_t port_nu esp_err_t ext_hub_clear_port_feature(ext_hub_handle_t ext_hub_hdl, uint8_t port_num, uint8_t feature) { EXT_HUB_ENTER_CRITICAL(); - EXT_HUB_CHECK_FROM_CRIT(p_ext_hub_driver != NULL, ESP_ERR_INVALID_STATE); + EXT_HUB_CHECK_FROM_CRIT(p_ext_hub_driver != NULL, ESP_ERR_NOT_ALLOWED); EXT_HUB_EXIT_CRITICAL(); esp_err_t ret; @@ -1730,7 +1733,7 @@ esp_err_t ext_hub_clear_port_feature(ext_hub_handle_t ext_hub_hdl, uint8_t port_ esp_err_t ext_hub_get_port_status(ext_hub_handle_t ext_hub_hdl, uint8_t port_num) { EXT_HUB_ENTER_CRITICAL(); - EXT_HUB_CHECK_FROM_CRIT(p_ext_hub_driver != NULL, ESP_ERR_INVALID_STATE); + EXT_HUB_CHECK_FROM_CRIT(p_ext_hub_driver != NULL, ESP_ERR_NOT_ALLOWED); EXT_HUB_EXIT_CRITICAL(); esp_err_t ret; diff --git a/components/usb/ext_port.c b/components/usb/ext_port.c new file mode 100644 index 000000000000..541eb60a50a5 --- /dev/null +++ b/components/usb/ext_port.c @@ -0,0 +1,1398 @@ +/* + * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ +#include +#include +#include "sdkconfig.h" +#include "esp_err.h" +#include "esp_log.h" +#include "esp_heap_caps.h" +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "usb_private.h" +#include "usb/usb_types_ch9.h" +#include "usb/usb_types_ch11.h" +#include "usbh.h" +#include "ext_port.h" +#include "usb/usb_helpers.h" + +// Amount of attempts to reset the port with a device in case of a failure +#if (CONFIG_USB_HOST_EXT_PORT_RESET_ATTEMPTS) +#define EXT_PORT_RESET_ATTEMPTS CONFIG_USB_HOST_EXT_PORT_RESET_ATTEMPTS +#else +#define EXT_PORT_RESET_ATTEMPTS 1 +#endif +// Delay in ms after sending the SetFeature() class specific request +#define EXT_PORT_RESET_CUSTOM_DELAY CONFIG_USB_HOST_EXT_PORT_CUSTOM_RESET_ENABLE +#define EXT_PORT_RESET_CUSTOM_DELAY_MS CONFIG_USB_HOST_EXT_PORT_CUSTOM_RESET_MS +#define EXT_PORT_RESET_DEFAULT_DELAY_MS 100 + +/** + * @brief External Port driver action flags + */ +typedef enum { + PORT_ACTION_HANDLE = (1 << 0), /**< Port requires handling */ + PORT_ACTION_DISABLE = (1 << 1), /**< Disable port */ + PORT_ACTION_RECYCLE = (1 << 2), /**< Recycle port */ + PORT_ACTION_RESET = (1 << 3), /**< Reset port */ + PORT_ACTION_GET_STATUS = (1 << 4), /**< Get status request */ +} port_action_t; + +/** + * @brief State of the device, attached to the port + */ +typedef enum { + PORT_DEV_NOT_PRESENT = 0, + PORT_DEV_PRESENT +} port_dev_state_t; + +/** + * @brief Object representing a single External Port + */ +struct ext_port_s { + /**< Single thread members don't require a critical section so long as they are never accessed from multiple threads */ + TAILQ_ENTRY(ext_port_s) tailq_entry; + union { + struct { + uint32_t in_pending_list: 1; /**< Port in pending list */ + uint32_t status_lock: 1; /**< Ports' status lock. Parent Hub processes receiving new status */ + uint32_t status_outdated: 1; /**< Ports' has changed and status is not valid. Get port status is required */ + uint32_t is_gone: 1; /**< Ports' parent Hub is gone */ + uint32_t has_enum_device: 1; /**< Port has an enumerated device */ + uint32_t waiting_recycle: 1; /**< Port is waiting to be recycled */ + uint32_t waiting_free: 1; /**< Port is waiting to be freed */ + uint32_t reserved25: 25; /**< Reserved */ + }; + uint32_t val; /**< Ports' flags value */ + } flags; /**< Ports' flags */ + uint32_t action_flags; /**< Ports' action flags */ + usb_hub_port_state_t state; /**< Ports' state */ + usb_port_status_t status; /**< Ports' status data */ + port_dev_state_t dev_state; /**< Ports' device state */ + uint8_t dev_reset_attempts; /**< Ports' device reset failure */ + + struct { + // Ports' parent info for optimisation and better debug output + usb_device_handle_t parent_dev_hdl; /**< Ports' parent device handle */ + uint8_t parent_dev_addr; /**< Ports' parent device bus address */ + // Port related constant members + ext_hub_handle_t ext_hub_hdl; /**< Ports' parent External Hub handle */ + uint8_t port_num; /**< Ports' parent External Hub Port number */ + int reset_delay_ms; /**< Ports' Power on time to Power Good, ms */ + } constant; /**< Constant members. Do not change after installation thus do not require a critical section or mutex */ +}; + +/** + * @brief Definition of the type for the struct, representing a single External Port + */ +typedef struct ext_port_s ext_port_t; + +/** + * @brief Object representing the External Port Driver + */ +typedef struct { + struct { + TAILQ_HEAD(ext_ports, ext_port_s) pending_tailq; /**< External Ports require handling */ + } single_thread; /**< Single thread members don't require a critical section so long as they are never accessed from multiple threads */ + + struct { + ext_port_cb_t proc_req_cb; /**< External Port process callback */ + void *proc_req_cb_arg; /**< External Port process callback argument */ + ext_port_event_cb_t event_cb; /**< External Port event callback */ + void *event_cb_arg; /**< External Port event callback argument */ + } constant; /**< Constant members. Do not change after installation thus do not require a critical section or mutex */ +} ext_port_driver_t; + +static ext_port_driver_t *p_ext_port_driver = NULL; + +const char *EXT_PORT_TAG = "EXT_PORT"; + +// ----------------------------------------------------------------------------- +// --------------------------- Helpers & Macros -------------------------------- +// ----------------------------------------------------------------------------- + +#define EXT_PORT_CHECK(cond, ret_val) ({ \ + if (!(cond)) { \ + return (ret_val); \ + } \ +}) + +/** + * @brief Port connection status + * + * @param[in] ext_port Port object + * @return + * - true Port has a connection + * - false Port doesn't have a connection + */ +static inline bool port_has_connection(ext_port_t *ext_port) +{ + return ext_port->status.wPortStatus.PORT_CONNECTION ? true : false; +} + +/** + * @brief Port power status + * + * @param[in] ext_port Port object + * @return + * - true Port is powered + * - false Port in not powered + */ +static inline bool port_is_powered(ext_port_t *ext_port) +{ + return ext_port->status.wPortStatus.PORT_POWER ? true : false; +} + +/** + * @brief Port reset status + * + * @param[in] ext_port Port object + * @return + * - true Port is in reset + * - false Port is not in reset + */ +static inline bool port_is_in_reset(ext_port_t *ext_port) +{ + return ext_port->status.wPortStatus.PORT_RESET ? true : false; +} + +/** + * @brief Port enable status + * + * @param[in] ext_port Port object + * @return + * - true Port is enabled + * - false Port is disabled + */ +static inline bool port_is_enabled(ext_port_t *ext_port) +{ + return ext_port->status.wPortStatus.PORT_ENABLE ? true : false; +} + +/** + * @brief Port connection status changed + * + * @param[in] ext_port Port object + * @return + * - true Port connection changed + * - false Port connection not changed + */ +static inline bool port_has_changed_connection(ext_port_t * ext_port) +{ + return ext_port->status.wPortChange.C_PORT_CONNECTION ? true : false; +} + +/** + * @brief Port enabled status changed + * + * @param[in] ext_port Port object + * @return + * - true Port has error state and was disabled + * - false Port operates normally + */ +static inline bool port_has_changed_from_enable(ext_port_t *ext_port) +{ + return ext_port->status.wPortChange.C_PORT_ENABLE ? true : false; +} + +/** + * @brief Port reset status changed + * + * @param[in] ext_port Port object + * @return + * - true Port has finished the reset + * - false Port hasn't finished the reset + */ +static inline bool port_has_finished_reset(ext_port_t *ext_port) +{ + return ext_port->status.wPortChange.C_PORT_RESET ? true : false; +} + +// ----------------------------------------------------------------------------- +// ------------------------ Parent Hub related logic --------------------------- +// ----------------------------------------------------------------------------- + +/** + * @brief Request the port status for the port object + * + * @note This call uses the External Hub Driver API + * + * @param[in] ext_port Port object + * @return + * - ESP_ERR_NOT_ALLOWED: The External Hub Driver has not been installed + * - ESP_ERR_INVALID_ARG: The parent hub handle couldn't be NULL + * - ESP_ERR_INVALID_SIZE: The port number should be in a range: [1, .. , bNbrPort] + * - ESP_ERR_INVALID_STATE: The parent hub device wasn't configured + * - ESP_OK: Status has been requested + */ +static esp_err_t port_request_status(ext_port_t* ext_port) +{ + esp_err_t ret = ext_hub_get_port_status(ext_port->constant.ext_hub_hdl, ext_port->constant.port_num); + if (ret != ESP_OK) { + return ret; + } + // Port is requesting status, lock the status + ext_port->flags.status_lock = 1; + return ret; +} + +/** + * @brief Sets the feature to the port + * + * @note This call uses the External Hub Driver API + * + * @param[in] ext_port Port object + * @param[in] feature Port feature to set + * @return + * - ESP_ERR_NOT_ALLOWED: The External Hub Driver has not been installed + * - ESP_ERR_INVALID_ARG: The parent hub handle couldn't be NULL + * - ESP_ERR_INVALID_SIZE: The port number should be in a range: [1, .. , bNbrPort] + * - ESP_ERR_INVALID_STATE: The parent hub device wasn't configured + * - ESP_OK: SetPortFeature() has been requested + */ +static esp_err_t port_set_feature(ext_port_t *ext_port, const usb_hub_port_feature_t feature) +{ + esp_err_t ret = ext_hub_set_port_feature(ext_port->constant.ext_hub_hdl, + ext_port->constant.port_num, + feature); + if (ret != ESP_OK) { + return ret; + } + // Every set feature requires status update + ext_port->flags.status_outdated = 1; + // PowerOn to PowerGood delay for port + if (feature == USB_FEATURE_PORT_RESET) { + vTaskDelay(pdMS_TO_TICKS(ext_port->constant.reset_delay_ms)); + } + return ret; +} + +/** + * @brief Clears the feature to the port + * + * @note This call uses the External Hub Driver API + * + * @param[in] ext_port Port object + * @param[in] feature Port feature to set + * @return + * - ESP_ERR_NOT_ALLOWED: The External Hub Driver has not been installed + * - ESP_ERR_INVALID_ARG: The parent hub handle couldn't be NULL + * - ESP_ERR_INVALID_SIZE: The port number should be in a range: [1, .. , bNbrPort] + * - ESP_ERR_INVALID_STATE: The parent hub device wasn't configured + * - ESP_OK: ClearPortFeature() has been requested + */ +static esp_err_t port_clear_feature(ext_port_t *ext_port, const usb_hub_port_feature_t feature) +{ + esp_err_t ret = ext_hub_clear_port_feature(ext_port->constant.ext_hub_hdl, + ext_port->constant.port_num, + feature); + if (ret != ESP_OK) { + return ret; + } + // Every clearing feature requires status update + ext_port->flags.status_outdated = 1; + return ret; +} + +// ----------------------------------------------------------------------------- +// ---------------------------- Internal logic --------------------------------- +// ----------------------------------------------------------------------------- +/** + * @brief Port set actions + * + * @note + * - The External Port Driver is a single threaded driver + * - All calls are made from USB Host related task + * - Does not need critical section + * - Always requires processing + * + * @param[in] ext_port Port object + * @param[in] action_flags Action flags (could not be 0) + */ +static void port_set_actions(ext_port_t *ext_port, uint32_t action_flags) +{ + assert(action_flags != 0); // Sanity check + + // Check if port is not in the pending list + if (!ext_port->flags.in_pending_list) { + // Add port to pending list + ext_port->flags.in_pending_list = 1; + TAILQ_INSERT_TAIL(&p_ext_port_driver->single_thread.pending_tailq, ext_port, tailq_entry); + } + + ext_port->action_flags |= action_flags; + p_ext_port_driver->constant.proc_req_cb(p_ext_port_driver->constant.proc_req_cb_arg); +} + +/** + * @brief Stops the handling and remove the port from the pending list + * + * When the ports parent hub device has been removed, the port could be freed immediately + * if it doesn't have an inserted device. + * For this purpose port object should be removed from the pending + * list and the action flags should be dropped. + * + * @note + * - The External Port Driver is a single threaded driver + * - All calls are made from USB Host related task + * - Does not need critical section + * - Does not require processing + * + * @param[in] ext_port Port object + */ +static void port_stop_handling(ext_port_t *ext_port) +{ + // Check if port is in the pending list + if (ext_port->flags.in_pending_list) { + // Add port to pending list + ext_port->flags.in_pending_list = 0; + TAILQ_REMOVE(&p_ext_port_driver->single_thread.pending_tailq, ext_port, tailq_entry); + } + if (ext_port->action_flags) { + // Port should be freed but has actions + ESP_LOGD(EXT_PORT_TAG, "[%d:%d] Port stop handling. Dropped actions 0x%"PRIx32"", + ext_port->constant.parent_dev_addr, + ext_port->constant.port_num, + ext_port->action_flags); + } + ext_port->action_flags = 0; +} + +/** + * @brief Port event propagation + * + * Propagating the following events to the Hub Driver: + * - EXT_PORT_CONNECTED + * - EXT_PORT_RESET_COMPLETED + * - EXT_PORT_DISCONNECTED + * + * Filling all the event data parameters, according to the event. + * + * @param[in] ext_port Port object + * @param[in] event Port event + */ +static void port_event(ext_port_t *ext_port, ext_port_event_t event) +{ + ext_port_event_data_t event_data = { + .event = event, + }; + switch (event) { + case EXT_PORT_CONNECTED: + event_data.connected.ext_hub_hdl = ext_port->constant.ext_hub_hdl; + event_data.connected.parent_dev_hdl = ext_port->constant.parent_dev_hdl; + event_data.connected.parent_port_num = ext_port->constant.port_num; + break; + case EXT_PORT_RESET_COMPLETED: + event_data.reset_completed.parent_dev_hdl = ext_port->constant.parent_dev_hdl; + event_data.reset_completed.parent_port_num = ext_port->constant.port_num; + break; + case EXT_PORT_DISCONNECTED: + event_data.disconnected.parent_dev_hdl = ext_port->constant.parent_dev_hdl; + event_data.disconnected.parent_port_num = ext_port->constant.port_num; + break; + default: + // Should never occur + abort(); + break; + } + + p_ext_port_driver->constant.event_cb(&event_data, p_ext_port_driver->constant.event_cb_arg); +} + +/** + * @brief Returns first port from the pending list + * + * @return + * - Port object pointer. NULL if no ports in pending list. + */ +static ext_port_t *get_port_from_pending_list(void) +{ + ext_port_t *ext_port = NULL; + if (!TAILQ_EMPTY(&p_ext_port_driver->single_thread.pending_tailq)) { + ext_port = TAILQ_FIRST(&p_ext_port_driver->single_thread.pending_tailq); + } + return ext_port; +} + +/** + * @brief Allocates port object + * + * Allocates new por object with following parameters: + * - Port state: USB_PORT_STATE_NOT_CONFIGURED + * - Port device status: PORT_DEV_NOT_PRESENT + * + * @param[in] ext_hub_hdl Ports' parent hub handle + * @param[in] parent_dev_hdl Ports' parent device handle + * @param[in] parent_port_num Ports' parent port number + * @param[in] port_delay_ms Ports' Power on time to Power Good, ms + * @param[out] port_obj Port objects' pointer + * @return + * - ESP_ERR_INVALID_ARG: Unable to allocate the port object: parent hub handle and parent device handle must be not NULL + * - ESP_ERR_NO_MEM: Unable to allocate the port object: no memory + * - ESP_ERR_NOT_FINISHED: Unable to allocate the port object: parent device is not available + * - ESP_OK: Port object created successfully + */ +static esp_err_t port_alloc(ext_hub_handle_t ext_hub_hdl, usb_device_handle_t parent_dev_hdl, uint8_t parent_port_num, uint16_t port_delay_ms, ext_port_t **port_obj) +{ + uint8_t parent_dev_addr = 0; + EXT_PORT_CHECK(ext_hub_hdl != NULL && parent_dev_hdl != NULL, ESP_ERR_INVALID_ARG); + // This is the one exception from the requirement to use only the Ext Hub Driver API. + // TODO: IDF-10023 Move responsibility of parent-child tree building to Hub Driver instead of USBH + EXT_PORT_CHECK(usbh_dev_get_addr(parent_dev_hdl, &parent_dev_addr) == ESP_OK, ESP_ERR_NOT_FINISHED); + + ext_port_t *ext_port = heap_caps_calloc(1, sizeof(ext_port_t), MALLOC_CAP_DEFAULT); + if (ext_port == NULL) { + return ESP_ERR_NO_MEM; + } + + ext_port->constant.parent_dev_hdl = parent_dev_hdl; + ext_port->constant.parent_dev_addr = parent_dev_addr; + ext_port->constant.ext_hub_hdl = ext_hub_hdl; + ext_port->constant.port_num = parent_port_num; +#if (EXT_PORT_RESET_CUSTOM_DELAY) + ext_port->constant.reset_delay_ms = EXT_PORT_RESET_CUSTOM_DELAY_MS; +#else + ext_port->constant.reset_delay_ms = (port_delay_ms == 0) + ? EXT_PORT_RESET_DEFAULT_DELAY_MS + : port_delay_ms; +#endif // EXT_PORT_POWER_ON_CUSTOM + + ext_port->state = USB_PORT_STATE_NOT_CONFIGURED; + ext_port->dev_state = PORT_DEV_NOT_PRESENT; + + ESP_LOGD(EXT_PORT_TAG, "[%d:%d] Port has been added (PwrOn2PwrGood=%d ms)", + ext_port->constant.parent_dev_addr, + ext_port->constant.port_num, + ext_port->constant.reset_delay_ms); + + *port_obj = ext_port; + return ESP_OK; +} + +/** + * @brief Port object handling complete + * + * @note This is the final stage of port object handling. + * After port being handled, the port object: + * - is removed from the pending list + * - is freed, is the port gone or port object waiting to be freed + * + * The final stage is parent notification about port object handling completion to enable the EP IN + * + * @param[in] ext_port Port object + * @return + * - ESP_OK: Port object handle completed + */ +static esp_err_t handle_complete(ext_port_t *ext_port) +{ + bool all_ports_were_handled = true; + bool has_pending_ports = false; + + ESP_LOGD(EXT_PORT_TAG, "[%d:%d] Port is %s", + ext_port->constant.parent_dev_addr, + ext_port->constant.port_num, + ext_port->flags.is_gone ? "gone" : + (ext_port->dev_state == PORT_DEV_PRESENT) ? "active" : "idle"); + + assert(ext_port->flags.is_gone == 0); // Handle complete could be called only on port that is still available + assert(ext_port->flags.waiting_free == 0); // Handle completion could be called only on port that should be freed + assert(ext_port->action_flags == 0); // Port should not have any further actions + assert(ext_port->flags.waiting_recycle == 0); // Port should not await to be recycled + assert(ext_port->flags.in_pending_list == 1); // Port should be in pending list + + // Remove port from it + port_stop_handling(ext_port); + + // Verify, that list has more ports in pending list + if (!TAILQ_EMPTY(&p_ext_port_driver->single_thread.pending_tailq)) { + has_pending_ports = true; + } + + // Port handling complete +#if ENABLE_MULTIPLE_HUBS + // When multiply Hubs are attached, we can have ports in pending list, but for another parent + ext_port_t *port = NULL; + TAILQ_FOREACH(port, &p_ext_port_driver->single_thread.pending_tailq, tailq_entry) { + if (port->constant.ext_hub_hdl == ext_port->constant.ext_hub_hdl) { + // Port with same parent has been found + all_ports_were_handled = false; + break; + } + } +#else + // When only one hub is supported - all ports have the same parent + // all_port_were_handled should be triggered if no more ports in pending list + all_ports_were_handled = !has_pending_ports; +#endif // + + if (all_ports_were_handled) { + // Notify parent to enable Interrupt EP + ext_hub_status_handle_complete(ext_port->constant.ext_hub_hdl); + } + + if (has_pending_ports) { + // Re-trigger the processing if there are more ports in pending list + p_ext_port_driver->constant.proc_req_cb(p_ext_port_driver->constant.proc_req_cb_arg); + } + + return ESP_OK; +} + +/** + * @brief Handles port status + * + * @param[in] ext_port Port object + * @return + * - true: Port has a status, that requires processing + * - false: Port has a status, that doesn't require processing + */ +static bool handle_port_status(ext_port_t *ext_port) +{ + bool need_processing = false; + if (port_is_in_reset(ext_port)) { + ESP_LOGD(EXT_PORT_TAG, "[%d:%d] Port still in reset, wait and repeat get status...", + ext_port->constant.parent_dev_addr, + ext_port->constant.port_num); + // PowerOn to PowerGood delay for port + vTaskDelay(pdMS_TO_TICKS(ext_port->constant.reset_delay_ms)); + port_request_status(ext_port); + need_processing = true; + } + + return need_processing; +} + +/** + * @brief Handles port connection + * + * @param[in] ext_port Port object + */ +static void handle_port_connection(ext_port_t *ext_port) +{ + bool has_device = false; + + switch (ext_port->state) { + case USB_PORT_STATE_POWERED_OFF: + if (!port_is_powered(ext_port)) { + ext_port->state = USB_PORT_STATE_DISCONNECTED; + port_set_feature(ext_port, USB_FEATURE_PORT_POWER); + } + break; + case USB_PORT_STATE_DISCONNECTED: + case USB_PORT_STATE_DISABLED: + if (port_has_connection(ext_port)) { + if (ext_port->dev_state == PORT_DEV_PRESENT) { + ESP_LOGE(EXT_PORT_TAG, "[%d:%d] Mismatch port state and device status", + ext_port->constant.parent_dev_addr, + ext_port->constant.port_num); + has_device = true; + } else { + // New device connected, flush reset attempts + ext_port->dev_reset_attempts = 0; + ext_port->state = USB_PORT_STATE_RESETTING; + // New device has not been enumerated yet, reset the flag + ext_port->flags.has_enum_device = 0; + } + } + break; + case USB_PORT_STATE_RESETTING: + if (!port_has_connection(ext_port)) { + if (ext_port->dev_state == PORT_DEV_PRESENT) { + ESP_LOGE(EXT_PORT_TAG, "[%d:%d] Failed to issue downstream port reset", + ext_port->constant.parent_dev_addr, + ext_port->constant.port_num); + has_device = true; + } else { + ext_port->state = USB_PORT_STATE_DISCONNECTED; + } + } + break; + case USB_PORT_STATE_ENABLED: + // TODO: IDF-10071 Port debounce mechanism + if (ext_port->dev_state == PORT_DEV_PRESENT) { + ext_port->flags.waiting_recycle = 1; + } + break; + + default: + // Should never occur + abort(); + break; + } + + if (has_device) { + ext_port->flags.waiting_recycle = 1; + ext_port->dev_state = PORT_DEV_NOT_PRESENT; + port_event(ext_port, EXT_PORT_DISCONNECTED); + } +} + +/** + * @brief Handles port changes + * + * @param[in] ext_port Port object + * @return + * - true: Port has a change, that requires processing + * - false: Port has no changes and doesn't require processing + */ +static bool handle_port_changes(ext_port_t *ext_port) +{ + bool need_processing = false; + if (port_has_changed_connection(ext_port)) { + handle_port_connection(ext_port); + port_clear_feature(ext_port, USB_FEATURE_C_PORT_CONNECTION); + need_processing = true; + } else if (port_has_changed_from_enable(ext_port)) { + // For more information, refer to section 11.8.1 Port Error of usb_2.0 specification + ESP_LOGE(EXT_PORT_TAG, "[%d:%d] Error on port (state=%d, dev=%d)", + ext_port->constant.parent_dev_addr, + ext_port->constant.port_num, + ext_port->state, + ext_port->dev_state == PORT_DEV_PRESENT); + port_clear_feature(ext_port, USB_FEATURE_C_PORT_ENABLE); + need_processing = true; + } else if (port_has_finished_reset(ext_port)) { + if (port_has_connection(ext_port)) { + ext_port->state = USB_PORT_STATE_ENABLED; + } + port_clear_feature(ext_port, USB_FEATURE_C_PORT_RESET); + need_processing = true; + } + + return need_processing; +} + +/** + * @brief Handles port state + * + * @param[in] ext_port Port object + */ +static void handle_port_state(ext_port_t *ext_port) +{ + bool need_handling = false; + usb_hub_port_state_t curr_state = ext_port->state; + usb_hub_port_state_t new_state = ext_port->state; + + switch (curr_state) { + case USB_PORT_STATE_NOT_CONFIGURED: + new_state = USB_PORT_STATE_POWERED_OFF; + port_request_status(ext_port); + need_handling = true; + break; + case USB_PORT_STATE_POWERED_OFF: + // Port power state depends on the wHubCharacteristics.power_switching + new_state = USB_PORT_STATE_DISCONNECTED; + port_set_feature(ext_port, USB_FEATURE_PORT_POWER); + need_handling = true; + break; + case USB_PORT_STATE_DISCONNECTED: + if (port_has_connection(ext_port)) { + if (ext_port->dev_reset_attempts < EXT_PORT_RESET_ATTEMPTS) { + // Available, it EXT_PORT_RESET_ATTEMPTS > 1 + ext_port->dev_reset_attempts++; + port_set_feature(ext_port, USB_FEATURE_PORT_RESET); + need_handling = true; + } else { + ESP_LOGE(EXT_PORT_TAG, "[%d:%d] Unable to reset the device", + ext_port->constant.parent_dev_addr, + ext_port->constant.port_num); + } + } + break; + case USB_PORT_STATE_DISABLED: + if (port_has_connection(ext_port)) { + // This logic does depend on the moment, when we propagate the EXT_PORT_DISCONNECTED event + // during the port disable. + if (!ext_port->flags.has_enum_device && ext_port->flags.waiting_recycle) { + // Port was disabled before enumeration, so the USBH device object was not created. + // Clean the recycle flag and complete port handling with device attached. + ext_port->flags.waiting_recycle = 0; + } + } + break; + case USB_PORT_STATE_RESETTING: + if (port_has_connection(ext_port)) { + // Port in resetting state and has connection + if (ext_port->dev_state == PORT_DEV_NOT_PRESENT) { + assert(ext_port->dev_reset_attempts == 0); // First reset, attempts always should be 0 + ext_port->dev_reset_attempts++; + port_set_feature(ext_port, USB_FEATURE_PORT_RESET); + } else { + assert(port_is_enabled(ext_port)); // Port should be enabled + port_event(ext_port, EXT_PORT_RESET_COMPLETED); + new_state = USB_PORT_STATE_ENABLED; + } + need_handling = true; + } else { + // Port in resetting state and doesn't have connection + // Error case, could be, when device was removed during port reset + ESP_LOGE(EXT_PORT_TAG, "[%d:%d] Device gone during port reset, recover port", + ext_port->constant.parent_dev_addr, + ext_port->constant.port_num); + new_state = USB_PORT_STATE_DISCONNECTED; + } + break; + case USB_PORT_STATE_ENABLED: + if (port_is_enabled(ext_port)) { + if (port_has_connection(ext_port)) { + if (ext_port->dev_state == PORT_DEV_NOT_PRESENT) { + usb_speed_t dev_speed = USB_SPEED_LOW; + if (ext_port->status.wPortStatus.PORT_LOW_SPEED == 0) { + dev_speed = ext_port->status.wPortStatus.PORT_HIGH_SPEED + ? USB_SPEED_HIGH + : USB_SPEED_FULL; + } + ESP_LOGD(EXT_PORT_TAG, "Device speed %s", (char *[]) { + "Low", "Full", "High" + }[dev_speed]); + ext_port->dev_state = PORT_DEV_PRESENT; + port_event(ext_port, EXT_PORT_CONNECTED); + } else { + // Port enabled, device present, reset completed + ext_port->dev_reset_attempts = 0; + port_event(ext_port, EXT_PORT_RESET_COMPLETED); + } + need_handling = true; + } else { + // TODO: IDF-10071 Port debounce mechanism + ESP_LOGE(EXT_PORT_TAG, "[%d:%d] Enabled, but doesn't have connection", + ext_port->constant.parent_dev_addr, + ext_port->constant.port_num); + } + } else { + // If port was enabled, there should be an active device + if (ext_port->dev_state == PORT_DEV_PRESENT) { + ext_port->dev_state = PORT_DEV_NOT_PRESENT; + port_event(ext_port, EXT_PORT_DISCONNECTED); + ext_port->flags.waiting_recycle = 1; + } else { + // Error state + ESP_LOGE(EXT_PORT_TAG, "[%d:%d] Enabled, but doesn't have a device", + ext_port->constant.parent_dev_addr, + ext_port->constant.port_num); + new_state = USB_PORT_STATE_DISCONNECTED; + } + } + break; + default: + // Should never occur + abort(); + break; + } + + if (curr_state != new_state) { + ESP_LOGD(EXT_PORT_TAG, "New state: %d", new_state); + ext_port->state = new_state; + } + + if (!ext_port->flags.waiting_recycle && !need_handling) { + handle_complete(ext_port); + } +} + +/** + * @brief Port object handling action + * + * @note Handles the port in the following order: + * - Port changes (C_CONNECTION, C_ENABLE, C_RESET) + * - Port status (Port still in RESET state) + * - Port state + * + * When ports' handling has been completed, removes the port object from the pending list. + * + * @param[in] ext_port Port object + */ +static void handle_port(ext_port_t *ext_port) +{ + ESP_LOGD(EXT_PORT_TAG, "[%d:%d] change=0x%04x, status=0x%04x, state=%d", + ext_port->constant.parent_dev_addr, + ext_port->constant.port_num, + ext_port->status.wPortChange.val, + ext_port->status.wPortStatus.val, + ext_port->state); + + if (handle_port_changes(ext_port)) { + return; + } else if (handle_port_status(ext_port)) { + return; + } + handle_port_state(ext_port); +} + +/** + * @brief Port object handling recycle action + * + * @note Port should undergo a recycle procedure when: + * - Device has been detached and freed by all clients (port is present) + * - Parent device been detached (port is gone) + * - Port has run an error during the handling + * + * @param[in] ext_port Port object + */ +static void handle_recycle(ext_port_t *ext_port) +{ + assert(ext_port->flags.waiting_recycle == 1); + + ESP_LOGD(EXT_PORT_TAG, "[%d:%d] Port recycle (state=%d, dev=%d)", + ext_port->constant.parent_dev_addr, + ext_port->constant.port_num, + ext_port->state, + ext_port->dev_state); + + ext_port->flags.waiting_recycle = 0; + + if (ext_port->flags.status_lock) { + // Port is awaiting the status + return; + } + + // Port should not have any changes + assert(ext_port->status.wPortChange.val == 0); + switch (ext_port->state) { + case USB_PORT_STATE_DISABLED: + // We don't need to do anything, as port will be handled after completing USB_FEATURE_PORT_ENABLE + if (ext_port->flags.is_gone) { + handle_complete(ext_port); + } + break; + default: + ext_port->state = USB_PORT_STATE_DISCONNECTED; + if (ext_port->flags.is_gone) { + handle_complete(ext_port); + } else { + handle_port(ext_port); + } + break; + } +} + +/** + * @brief Port object handling disable action + * + * @param[in] ext_port Port object + */ +static void handle_disable(ext_port_t *ext_port) +{ + ESP_LOGD(EXT_PORT_TAG, "[%d:%d] Disable (state=%d, dev=%d)", + ext_port->constant.parent_dev_addr, + ext_port->constant.port_num, + ext_port->state, + ext_port->dev_state); + + assert(ext_port->state != USB_PORT_STATE_POWERED_OFF); + assert(ext_port->state != USB_PORT_STATE_DISCONNECTED); + assert(ext_port->state != USB_PORT_STATE_NOT_CONFIGURED); + + if (ext_port->state == USB_PORT_STATE_ENABLED) { + if (port_has_connection(ext_port)) { + ESP_LOGE(EXT_PORT_TAG, "[%d:%d] Port disabled, reset attempts=%d", + ext_port->constant.parent_dev_addr, + ext_port->constant.port_num, + ext_port->dev_reset_attempts); + + // Do not try to reset port anymore + ext_port->dev_reset_attempts = EXT_PORT_RESET_ATTEMPTS; + + if (ext_port->dev_state == PORT_DEV_PRESENT) { + ext_port->dev_state = PORT_DEV_NOT_PRESENT; + // Propagate device disconnection if device present + port_event(ext_port, EXT_PORT_DISCONNECTED); + ext_port->flags.waiting_recycle = 1; + } + } + } + + ext_port->state = USB_PORT_STATE_DISABLED; + + if (!ext_port->flags.is_gone) { + // Port not gone, disable port + port_clear_feature(ext_port, USB_FEATURE_PORT_ENABLE); + } +} + +// ----------------------------------------------------------------------------- +// ------------------------ External Port API ---------------------------------- +// ----------------------------------------------------------------------------- + +/** + * @brief Creates new port object + * + * @note This function should only be called from the External Hub Driver + * + * @param[in] port_cfg Port configuration + * @param[out] port_hdl Port object handle + * @return + * - ESP_ERR_INVALID_STATE: The External Port Driver has not been installed + * - ESP_ERR_INVALID_ARG: Unable to create the port, arguments couldn't be NULL + * - ESP_ERR_NO_MEM: Unable to allocate the port object: no memory + * - ESP_ERR_NOT_FINISHED: Unable to allocate the port object: parent device is not available + * - ESP_OK: Port has been created and added to the pending list + */ +static esp_err_t port_new(void *port_cfg, void **port_hdl) +{ + EXT_PORT_CHECK(p_ext_port_driver != NULL, ESP_ERR_INVALID_STATE); + EXT_PORT_CHECK(port_cfg != NULL && port_hdl != NULL, ESP_ERR_INVALID_ARG); + + ext_port_t *port = NULL; + ext_port_config_t *config = (ext_port_config_t *)port_cfg; + esp_err_t ret = port_alloc(config->ext_hub_hdl, + config->parent_dev_hdl, + config->parent_port_num, + config->port_power_delay_ms, + &port); + + if (ret != ESP_OK) { + *port_hdl = NULL; + goto exit; + } + + port_set_actions(port, PORT_ACTION_HANDLE); + *port_hdl = (ext_port_hdl_t) port; +exit: + return ret; +} + +/** + * @brief Indicates to the External Port driver that a device's port can be recycled + * + * The device connected to the port has been freed. The External Port driver can now + * recycle the port. + * + * @note This function should only be called from the External Hub Driver + * + * @param[in] port_hdl Port object handle + * @return + * - ESP_ERR_NOT_ALLOWED: The External Port Driver has not been installed + * - ESP_ERR_INVALID_ARG: Unable to recycle the port, port handle couldn't be NULL + * - ESP_OK: + */ +static esp_err_t port_recycle(void *port_hdl) +{ + EXT_PORT_CHECK(p_ext_port_driver != NULL, ESP_ERR_NOT_ALLOWED); + EXT_PORT_CHECK(port_hdl != NULL, ESP_ERR_INVALID_ARG); + ext_port_t *ext_port = (ext_port_t *) port_hdl; + + ESP_LOGD(EXT_PORT_TAG, "Port %d request recycle, state=%d", ext_port->constant.port_num, ext_port->state); + + port_set_actions(ext_port, PORT_ACTION_RECYCLE); + return ESP_OK; +} + +/** + * @brief Indicate to the External Port driver that reset of a device's port is required + * + * @note This function should only be called from the External Hub Driver + * + * @param[in] port_hdl Port object handle + * @return + * - ESP_ERR_NOT_ALLOWED: The External Port Driver has not been installed + * - ESP_ERR_INVALID_ARG: Port handle couldn't be NULL + * - ESP_ERR_INVALID_STATE: Port doesn't have a connection or not enabled + * - ESP_OK: Port reset requested + */ +static esp_err_t port_reset(void *port_hdl) +{ + EXT_PORT_CHECK(p_ext_port_driver != NULL, ESP_ERR_NOT_ALLOWED); + EXT_PORT_CHECK(port_hdl != NULL, ESP_ERR_INVALID_ARG); + ext_port_t *ext_port = (ext_port_t *) port_hdl; + + EXT_PORT_CHECK(port_has_connection(ext_port), ESP_ERR_INVALID_STATE); + + ESP_LOGD(EXT_PORT_TAG, "[%d:%d] Port reset request", + ext_port->constant.parent_dev_addr, + ext_port->constant.port_num); + + // Reset can be triggered only when port is enabled + EXT_PORT_CHECK(ext_port->state == USB_PORT_STATE_ENABLED, ESP_ERR_INVALID_STATE); + + port_set_actions(ext_port, PORT_ACTION_RESET); + return ESP_OK; +} + +/** + * @brief Get the speed of the External Port + * + * The speed of the port is determined by the speed of the device connected to it. + * + * @note This function is only when a device connected to the port and has been reset + * @note This function should only be called from the External Hub Driver + * + * @param[in] port_hdl Port object handle + * @param[out] speed Speed of the port + * @return + * - ESP_ERR_NOT_ALLOWED: The External Port Driver has not been installed + * - ESP_ERR_INVALID_ARG: The port handle can't be NULL, speed pointer can't be NULL + * - ESP_ERR_INVALID_STATE: No valid device connected to the port + * - ESP_OK: Device speed obtained + */ +esp_err_t port_get_speed(void *port_hdl, usb_speed_t *speed) +{ + EXT_PORT_CHECK(p_ext_port_driver != NULL, ESP_ERR_NOT_ALLOWED); + EXT_PORT_CHECK(port_hdl != NULL && speed != NULL, ESP_ERR_INVALID_ARG); + ext_port_t *ext_port = (ext_port_t *) port_hdl; + + usb_speed_t dev_speed = USB_SPEED_LOW; + EXT_PORT_CHECK(port_has_connection(ext_port), ESP_ERR_INVALID_STATE); + // Full-speed or High-speed device attached to this port (determined by bit PORT_HIGH_SPEED). + if (ext_port->status.wPortStatus.PORT_LOW_SPEED == 0) { + dev_speed = ext_port->status.wPortStatus.PORT_HIGH_SPEED + ? USB_SPEED_HIGH + : USB_SPEED_FULL; + } + // Otherwise, Low-speed + *speed = dev_speed; + return ESP_OK; +} + +/** + * @brief Indicate to the External Port Driver that port has an active device + * + * The device: + * - has been enumerated + * - still present + * - is in configured state + * + * @note This function should only be called from the External Hub Driver + * + * @param[in] port_hdl Port object handle + * @return + * - ESP_ERR_NOT_ALLOWED: The External Port Driver has not been installed + * - ESP_ERR_INVALID_ARG: The port handle can't be NULL + * - ESP_OK: Port has a device and the device completed enumeration process + */ +static esp_err_t port_active(void *port_hdl) +{ + EXT_PORT_CHECK(p_ext_port_driver != NULL, ESP_ERR_NOT_ALLOWED); + EXT_PORT_CHECK(port_hdl != NULL, ESP_ERR_INVALID_ARG); + ext_port_t *ext_port = (ext_port_t *) port_hdl; + + ESP_LOGD(EXT_PORT_TAG, "[%d:%d] Port has an enumerated device", + ext_port->constant.parent_dev_addr, + ext_port->constant.port_num); + + ext_port->flags.has_enum_device = 1; + + return handle_complete(ext_port); +} + +/** + * @brief Indicate to the External Port Driver that port should be disabled + * + * @note This function should only be called from the External Hub Driver + * + * @param[in] port_hdl Port object handle + * @return + * - ESP_ERR_NOT_ALLOWED: The External Port Driver has not been installed + * - ESP_ERR_INVALID_ARG: The port handle can't be NULL + * - ESP_ERR_INVALID_STATE: The port is not enabled + * - ESP_OK: Port disable requested + */ +static esp_err_t port_disable(void *port_hdl) +{ + EXT_PORT_CHECK(p_ext_port_driver != NULL, ESP_ERR_NOT_ALLOWED); + EXT_PORT_CHECK(port_hdl != NULL, ESP_ERR_INVALID_ARG); + ext_port_t *ext_port = (ext_port_t *) port_hdl; + + ESP_LOGD(EXT_PORT_TAG, "[%d:%d] Disable", + ext_port->constant.parent_dev_addr, + ext_port->constant.port_num); + + EXT_PORT_CHECK(ext_port->state == USB_PORT_STATE_ENABLED, ESP_ERR_INVALID_STATE); + + port_set_actions(ext_port, PORT_ACTION_DISABLE); + return ESP_OK; +} + +/** + * @brief Deletes the port object + * + * @note This function should only be called from the External Hub Driver + * + * @param[in] port_hdl Port object handle + * @return + * - ESP_ERR_NOT_ALLOWED: The External Port Driver has not been installed + * - ESP_ERR_INVALID_ARG: The port handle can't be NULL + * - ESP_OK: Port object has been freed and deleted + */ +static esp_err_t port_delete(void *port_hdl) +{ + EXT_PORT_CHECK(p_ext_port_driver != NULL, ESP_ERR_NOT_ALLOWED); + EXT_PORT_CHECK(port_hdl != NULL, ESP_ERR_INVALID_ARG); + ext_port_t *ext_port = (ext_port_t *) port_hdl; + // Sanity checks + assert(ext_port->dev_state == PORT_DEV_NOT_PRESENT); // Port should not have a device + assert(ext_port->flags.in_pending_list == 0); // Port should not be in pending list + + ESP_LOGD(EXT_PORT_TAG, "[%d:%d] Freeing", + ext_port->constant.parent_dev_addr, + ext_port->constant.port_num); + + heap_caps_free(ext_port); + + return ESP_OK; +} + +/** + * @brief Marks the Port as gone and initialize process of freeing the Port + * + * @note This function should only be called from the External Hub Driver + * + * @param[in] port_hdl Port object handle + * @return + * - ESP_ERR_NOT_ALLOWED: The External Port Driver has not been installed + * - ESP_ERR_INVALID_ARG: The port handle can't be NULL + * - ESP_ERR_NOT_FINISHED: The port has a device and should be recycled + * - ESP_OK: Port object has been marked as gone and could be freed + */ +static esp_err_t port_gone(void *port_hdl) +{ + EXT_PORT_CHECK(p_ext_port_driver != NULL, ESP_ERR_NOT_ALLOWED); + EXT_PORT_CHECK(port_hdl != NULL, ESP_ERR_INVALID_ARG); + ext_port_t *ext_port = (ext_port_t *)port_hdl; + + ESP_LOGD(EXT_PORT_TAG, "[%d:%d] Port is gone (state=%d, dev=%d)", + ext_port->constant.parent_dev_addr, + ext_port->constant.port_num, + ext_port->state, + ext_port->dev_state); + + bool has_device = false; + + ext_port->flags.is_gone = 1; + ext_port->flags.waiting_free = 1; + + switch (ext_port->state) { + case USB_PORT_STATE_ENABLED: + case USB_PORT_STATE_DISABLED: + case USB_PORT_STATE_RESETTING: + // Port could have a device + if (ext_port->dev_state == PORT_DEV_PRESENT) { + ext_port->dev_state = PORT_DEV_NOT_PRESENT; + ext_port->flags.waiting_recycle = 1; + port_event(ext_port, EXT_PORT_DISCONNECTED); + has_device = true; + } + break; + case USB_PORT_STATE_NOT_CONFIGURED: + // Port has been added, but the Driver has not started the handling yet + case USB_PORT_STATE_POWERED_OFF: + case USB_PORT_STATE_DISCONNECTED: + // Port has been added, but doesn't have a device + // We can remove the port from pending list and could be freed by the External Hub Driver + break; + default: + // Should never occur + abort(); + break; + } + + // If the port is in handling list, stop it + if (ext_port->flags.in_pending_list) { + port_stop_handling(ext_port); + } + + return (has_device) ? ESP_ERR_NOT_FINISHED : ESP_OK; +} + +/** + * @brief Indicate to the External Port Driver that Port request has been finished and the Port requires handling + * + * @note This function should only be called from the External Hub Driver + * + * @param[in] port_hdl Port object handle + * @return + * - ESP_ERR_NOT_ALLOWED: The External Port Driver has not been installed + * - ESP_ERR_INVALID_ARG: The port handle can't be NULL + * - ESP_OK: Port action was requested + */ +static esp_err_t port_get_status(void* port_hdl) +{ + EXT_PORT_CHECK(p_ext_port_driver != NULL, ESP_ERR_NOT_ALLOWED); + EXT_PORT_CHECK(port_hdl != NULL, ESP_ERR_INVALID_ARG); + ext_port_t *ext_port = (ext_port_t *)port_hdl; + + port_set_actions(ext_port, PORT_ACTION_GET_STATUS); + return ESP_OK; +} + +/** + * @brief Indicate to the External Port Driver that the Port has new status + * + * @note This function should only be called from the External Hub Driver + * + * @param[in] port_hdl Port object handle + * @param[in] port_status New status data + * @return + * - ESP_ERR_NOT_ALLOWED: The External Port Driver has not been installed + * - ESP_ERR_INVALID_ARG: The port handle can't be NULL, the status data can't be NULL + * - ESP_OK: Port action was requested + */ +static esp_err_t port_set_status(void* port_hdl, const usb_port_status_t *port_status) +{ + EXT_PORT_CHECK(p_ext_port_driver != NULL, ESP_ERR_NOT_ALLOWED); + EXT_PORT_CHECK(port_hdl != NULL && port_status != NULL, ESP_ERR_INVALID_ARG); + ext_port_t *ext_port = (ext_port_t *)port_hdl; + + // Update status + ext_port->status.wPortChange.val = port_status->wPortChange.val; + ext_port->status.wPortStatus.val = port_status->wPortStatus.val; + // Status valid + ext_port->flags.status_outdated = 0; + // Remove status lock + ext_port->flags.status_lock = 0; + // Request port handling + port_set_actions(ext_port, PORT_ACTION_HANDLE); + return ESP_OK; +} + +/** + * @brief Indicate to the External Port Driver that the Port requires processing + * + * @note This function should only be called from the External Hub Driver + * + * @param[in] port_hdl Port object handle + * @return + * - ESP_ERR_NOT_ALLOWED: The External Port Driver has not been installed + * - ESP_ERR_INVALID_ARG: The port handle can't be NULL + * - ESP_OK: Port action was requested + */ +static esp_err_t port_req_process(void* port_hdl) +{ + EXT_PORT_CHECK(p_ext_port_driver != NULL, ESP_ERR_NOT_ALLOWED); + EXT_PORT_CHECK(port_hdl != NULL, ESP_ERR_INVALID_ARG); + ext_port_t *ext_port = (ext_port_t *)port_hdl; + + if (ext_port->flags.status_outdated) { + port_set_actions(ext_port, PORT_ACTION_GET_STATUS); + } else { + port_set_actions(ext_port, PORT_ACTION_HANDLE); + } + return ESP_OK; +} + +// ----------------------------------------------------------------------------- +// ------------------ External Port Processing Functions ----------------------- +// ----------------------------------------------------------------------------- + +/** + * @brief External Port Driver API + */ +const ext_hub_port_driver_t ext_port_driver = { + .new = port_new, + .reset = port_reset, + .recycle = port_recycle, + .active = port_active, + .disable = port_disable, + .gone = port_gone, + .del = port_delete, + .get_speed = port_get_speed, + .get_status = port_get_status, + .set_status = port_set_status, + .req_process = port_req_process, +}; + +esp_err_t ext_port_install(const ext_port_driver_config_t *config) +{ + EXT_PORT_CHECK(p_ext_port_driver == NULL, ESP_ERR_NOT_ALLOWED); + + ext_port_driver_t *ext_port_drv = heap_caps_calloc(1, sizeof(ext_port_driver_t), MALLOC_CAP_DEFAULT); + EXT_PORT_CHECK(ext_port_drv != NULL, ESP_ERR_NO_MEM); + + // Save callbacks + ext_port_drv->constant.proc_req_cb = config->proc_req_cb; + ext_port_drv->constant.proc_req_cb_arg = config->proc_req_cb_arg; + ext_port_drv->constant.event_cb = config->event_cb; + ext_port_drv->constant.event_cb_arg = config->event_cb_arg; + TAILQ_INIT(&ext_port_drv->single_thread.pending_tailq); + + p_ext_port_driver = ext_port_drv; + + ESP_LOGD(EXT_PORT_TAG, "Driver installed"); + return ESP_OK; +} + +esp_err_t ext_port_uninstall(void) +{ + EXT_PORT_CHECK(p_ext_port_driver != NULL, ESP_ERR_NOT_ALLOWED); + EXT_PORT_CHECK(TAILQ_EMPTY(&p_ext_port_driver->single_thread.pending_tailq), ESP_ERR_INVALID_STATE); + ext_port_driver_t *ext_port_drv = p_ext_port_driver; + p_ext_port_driver = NULL; + + heap_caps_free(ext_port_drv); + ESP_LOGD(EXT_PORT_TAG, "Driver uninstalled"); + return ESP_OK; +} + +esp_err_t ext_port_process(void) +{ + EXT_PORT_CHECK(p_ext_port_driver != NULL, ESP_ERR_NOT_ALLOWED); + + ext_port_t *ext_port = get_port_from_pending_list(); + if (ext_port == NULL) { + // No more ports in list to handle + // NOTE: + // This is possible, when an external Hub detached sooner than being + // configured and handled by the Driver. This is not an error case, + // because the processing requests by the HUB_DRIVER_ACTION_EXT_PORT + // flag in the Hub Driver and there is no way to clean it. + ESP_LOGD(EXT_PORT_TAG, "No more ports to handle"); + return ESP_OK; + } + + uint32_t action_flags = ext_port->action_flags; + ext_port->action_flags = 0; + + while (action_flags) { + // Keep processing until all port's action have been handled + ESP_LOGD(EXT_PORT_TAG, "[%d:%d] Processing actions 0x%"PRIx32"", + ext_port->constant.parent_dev_addr, + ext_port->constant.port_num, + action_flags); + + if (action_flags & PORT_ACTION_HANDLE) { + handle_port(ext_port); + } + if (action_flags & PORT_ACTION_DISABLE) { + handle_disable(ext_port); + } + if (action_flags & PORT_ACTION_RECYCLE) { + handle_recycle(ext_port); + } + + /* + * Feature related actions are mutual exclusive and require: + * - transfer completion callback + * - further request of new port status via get_status(), except PORT_ACTION_GET_STATUS itself + */ + if (action_flags & PORT_ACTION_GET_STATUS) { + port_request_status(ext_port); + } else if (action_flags & PORT_ACTION_RESET) { + if (ext_port->state != USB_PORT_STATE_RESETTING) { + /* + * IMPORTANT NOTE + * This is possible, when the reset is requested via port_reset() + * Port reset is possible only in two states: + * - USB_PORT_STATE_DISCONNECTED (mainly, first reset) + * - USB_PORT_STATE_ENABLED (mainly, second reset) + */ + assert(ext_port->state == USB_PORT_STATE_DISCONNECTED || + ext_port->state == USB_PORT_STATE_ENABLED); + ext_port->state = USB_PORT_STATE_RESETTING; + } + port_set_feature(ext_port, USB_FEATURE_PORT_RESET); + } + + action_flags = ext_port->action_flags; + ext_port->action_flags = 0; + } + + return ESP_OK; +} + +const ext_hub_port_driver_t *ext_port_get_driver(void) +{ + EXT_PORT_CHECK(p_ext_port_driver != NULL, NULL); + return &ext_port_driver; +} diff --git a/components/usb/hub.c b/components/usb/hub.c index 6fa14fa303f6..079a18f351af 100644 --- a/components/usb/hub.c +++ b/components/usb/hub.c @@ -20,7 +20,7 @@ #include "usb/usb_helpers.h" #if ENABLE_USB_HUBS -#include "ext_hub.h" +#include "ext_port.h" #endif // ENABLE_USB_HUBS /* @@ -320,6 +320,72 @@ static bool ext_hub_callback(bool in_isr, void *user_arg) HUB_DRIVER_EXIT_CRITICAL_SAFE(); return p_hub_driver_obj->constant.proc_req_cb(USB_PROC_REQ_SOURCE_HUB, in_isr, p_hub_driver_obj->constant.proc_req_cb_arg); } + +static void ext_port_callback(void *user_arg) +{ + HUB_DRIVER_ENTER_CRITICAL(); + p_hub_driver_obj->dynamic.flags.actions |= HUB_DRIVER_ACTION_EXT_PORT; + HUB_DRIVER_EXIT_CRITICAL(); + p_hub_driver_obj->constant.proc_req_cb(USB_PROC_REQ_SOURCE_HUB, false, p_hub_driver_obj->constant.proc_req_cb_arg); +} + +static void ext_port_event_callback(ext_port_event_data_t *event_data, void *arg) +{ + switch (event_data->event) { + case EXT_PORT_CONNECTED: + // First reset is done by ext_port logic + usb_speed_t port_speed; + + if (ext_hub_port_get_speed(event_data->connected.ext_hub_hdl, + event_data->connected.parent_port_num, + &port_speed) != ESP_OK) { + goto new_ds_dev_err; + } + + // TODO: IDF-10023 Move responsibility of parent-child tree building to Hub Driver instead of USBH + usb_device_info_t parent_dev_info; + ESP_ERROR_CHECK(usbh_dev_get_info(event_data->connected.parent_dev_hdl, &parent_dev_info)); + if (parent_dev_info.speed == USB_SPEED_HIGH) { + if (port_speed != parent_dev_info.speed) { + ESP_LOGE(HUB_DRIVER_TAG, "Connected device is %s, transaction translator (TT) is not supported", + (char *[]) { + "LS", "FS", "HS" + }[port_speed]); + goto new_ds_dev_err; + } + } + +#if (!CONFIG_USB_HOST_EXT_PORT_SUPPORT_LS) + if (port_speed == USB_SPEED_LOW) { + ESP_LOGE(HUB_DRIVER_TAG, "Connected %s-speed device, not supported", + (char *[]) { + "Low", "Full", "High" + }[port_speed]); + goto new_ds_dev_err; + } +#endif // CONFIG_USB_HOST_EXT_PORT_SUPPORT_LS + + if (new_dev_tree_node(event_data->connected.parent_dev_hdl, event_data->connected.parent_port_num, port_speed) != ESP_OK) { + ESP_LOGE(HUB_DRIVER_TAG, "Failed to add new downstream device"); + goto new_ds_dev_err; + } + break; +new_ds_dev_err: + ext_hub_port_disable(event_data->connected.ext_hub_hdl, event_data->connected.parent_port_num); + break; + case EXT_PORT_RESET_COMPLETED: + ESP_ERROR_CHECK(dev_tree_node_reset_completed(event_data->reset_completed.parent_dev_hdl, event_data->reset_completed.parent_port_num)); + break; + case EXT_PORT_DISCONNECTED: + // The node could be freed by now, no need to verify the result here + dev_tree_node_dev_gone(event_data->disconnected.parent_dev_hdl, event_data->disconnected.parent_port_num); + break; + default: + // Should never occur + abort(); + break; + } +} #endif // ENABLE_USB_HUBS // ---------------------- Handlers ------------------------- @@ -479,10 +545,20 @@ esp_err_t hub_install(hub_config_t *hub_config, void **client_ret) } #if ENABLE_USB_HUBS + // Install External Port driver + ext_port_driver_config_t ext_port_config = { + .proc_req_cb = ext_port_callback, + .event_cb = ext_port_event_callback, + }; + ret = ext_port_install(&ext_port_config); + if (ret != ESP_OK) { + goto err_ext_port; + } + // Install External HUB driver ext_hub_config_t ext_hub_config = { .proc_req_cb = ext_hub_callback, - .port_driver = NULL, + .port_driver = ext_port_get_driver(), }; ret = ext_hub_install(&ext_hub_config); if (ret != ESP_OK) { @@ -536,6 +612,8 @@ esp_err_t hub_install(hub_config_t *hub_config, void **client_ret) #if ENABLE_USB_HUBS ext_hub_uninstall(); err_ext_hub: + ext_port_uninstall(); +err_ext_port: #endif // ENABLE_USB_HUBS heap_caps_free(hub_driver_obj); return ret; @@ -552,6 +630,7 @@ esp_err_t hub_uninstall(void) #if ENABLE_USB_HUBS ESP_ERROR_CHECK(ext_hub_uninstall()); + ESP_ERROR_CHECK(ext_port_uninstall()); #endif // ENABLE_USB_HUBS ESP_ERROR_CHECK(hcd_port_deinit(hub_driver_obj->constant.root_port_hdl)); @@ -739,10 +818,7 @@ esp_err_t hub_process(void) while (action_flags) { #if ENABLE_USB_HUBS if (action_flags & HUB_DRIVER_ACTION_EXT_PORT) { - ESP_LOGW(HUB_DRIVER_TAG, "ext_port_process() has not been implemented yet"); - /* ESP_ERROR_CHECK(ext_port_process()); - */ } if (action_flags & HUB_DRIVER_ACTION_EXT_HUB) { ESP_ERROR_CHECK(ext_hub_process()); diff --git a/components/usb/include/usb/usb_types_ch11.h b/components/usb/include/usb/usb_types_ch11.h index a30e9d3919be..f3c9a3d77a46 100644 --- a/components/usb/include/usb/usb_types_ch11.h +++ b/components/usb/include/usb/usb_types_ch11.h @@ -43,6 +43,28 @@ typedef enum { USB_B_REQUEST_HUB_STOP_TT = 0x0B, /**< Stop TT. */ } usb_hub_class_request_t ; +/** + * @brief USB Hub Port state + * + * See USB 2.0 spec, 11.5.1 Downstream Facing Port State Descriptions + */ +typedef enum { + USB_PORT_STATE_NOT_CONFIGURED = 0x00, /**< The hub is not configured. A port transitions to and remains in this state whenever the value of the hub configuration is zero. */ + USB_PORT_STATE_POWERED_OFF, /**< Powered_off: Port requires explicit request to transition. */ + USB_PORT_STATE_DISCONNECTED, /**< In the Disconnected state, the port’s differential transmitter and receiver are disabled and only connection detection is possible.*/ + USB_PORT_STATE_DISABLED, /**< A port in the Disabled state will not propagate signaling in either the upstream or the downstream direction */ + USB_PORT_STATE_RESETTING, /**< The duration of the Resetting state is nominally 10 ms to 20 ms (10 ms is preferred). */ + USB_PORT_STATE_ENABLED, /**< While in this state, the output of the port’s differential receiver is available to the Hub Repeater so that appropriate signaling transitions can establish upstream connectivity*/ + USB_PORT_STATE_TRANSMIT, /**< This state is entered from the Enabled state on the transition of the Hub Repeater to the WFEOPFU state */ + USB_PORT_STATE_TRANSMIT_R, /**< When in this state, the port repeats the resume ‘K’ at the upstream facing port to the downstream facing port. */ + USB_PORT_STATE_SUSPENDED, /**< While a port is in the Suspended state, the port's differential transmitter is disabled. */ + USB_PORT_STATE_RESUMING, /**< While in this state, the hub drives a 'K' on the port. */ + USB_PORT_STATE_SEND_EOR, /**< This state is entered from the Resuming state if the 20 ms timer expires. */ + USB_PORT_STATE_RESTART_S, /**< A port enters the Restart_S state from the Suspended state when an SE0 or ‘K’ is seen at the port and the Receiver is in the Suspended state */ + USB_PORT_STATE_RESTART_E, /**< A port enters the Restart_E state from the Enabled state when an ‘SE0’ or ‘K’ is seen at the port and the Receiver is in the Suspended state. */ + USB_PORT_STATE_TESTING, /**< A port transitions to this state from any state when the port sees SetTest. */ +} usb_hub_port_state_t; + /** * @brief USB Hub Port feature selector codes * diff --git a/components/usb/private_include/ext_hub.h b/components/usb/private_include/ext_hub.h index 396d838be1cd..93432542a7ab 100644 --- a/components/usb/private_include/ext_hub.h +++ b/components/usb/private_include/ext_hub.h @@ -46,7 +46,7 @@ typedef struct { esp_err_t (*active)(void *port_hdl); esp_err_t (*disable)(void *port_hdl); esp_err_t (*gone)(void *port_hdl); - esp_err_t (*free)(void *port_hdl); + esp_err_t (*del)(void *port_hdl); esp_err_t (*get_speed)(void *por_hdl, usb_speed_t *speed); esp_err_t (*get_status)(void *port_hdl); esp_err_t (*set_status)(void *port_hdl, const usb_port_status_t *status); @@ -278,7 +278,7 @@ esp_err_t ext_hub_port_get_speed(ext_hub_handle_t ext_hub_hdl, uint8_t port_num, * * @return * - ESP_OK: Port's feature set successfully - * - ESP_ERR_INVALID_STATE: External Hub driver is not installed; + * - ESP_ERR_NOT_ALLOWED: External Hub driver is not installed * - ESP_ERR_INVALID_ARG: Invalid argument * - ESP_ERR_INVALID_SIZE: External Hub port number out of the hub's range */ @@ -293,7 +293,7 @@ esp_err_t ext_hub_set_port_feature(ext_hub_handle_t ext_hub_hdl, uint8_t port_nu * * @return * - ESP_OK: Port's feature cleared successfully - * - ESP_ERR_INVALID_STATE: External Hub driver is not installed; + * - ESP_ERR_NOT_ALLOWED: External Hub driver is not installed * - ESP_ERR_INVALID_ARG: Invalid argument * - ESP_ERR_INVALID_SIZE: External Hub port number out of the hub's range */ @@ -310,7 +310,7 @@ esp_err_t ext_hub_clear_port_feature(ext_hub_handle_t ext_hub_hdl, uint8_t port_ * * @return * - ESP_OK: Port's status obtained successfully - * - ESP_ERR_INVALID_STATE: External Hub driver is not installed; + * - ESP_ERR_NOT_ALLOWED: External Hub driver is not installed * - ESP_ERR_INVALID_ARG: Invalid argument * - ESP_ERR_INVALID_SIZE: External Hub port number out of the hub's range */ diff --git a/components/usb/private_include/ext_port.h b/components/usb/private_include/ext_port.h new file mode 100644 index 000000000000..5795e41575cc --- /dev/null +++ b/components/usb/private_include/ext_port.h @@ -0,0 +1,143 @@ +/* + * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ +#pragma once + +#include +#include "esp_err.h" +#include "ext_hub.h" +#include "usb/usb_types_stack.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct ext_port_s *ext_port_hdl_t; + +// ------------------------------ Events --------------------------------------- +typedef enum { + EXT_PORT_CONNECTED = 0x01, /**< Port has a device connection event */ + EXT_PORT_RESET_COMPLETED, /**< Port has completed the reset routine */ + EXT_PORT_DISCONNECTED, /**< Port has a device disconnection event */ +} ext_port_event_t; + +/** + * @brief Event data object for External Port driver events + */ +typedef struct { + ext_port_event_t event; + union { + struct { + ext_hub_handle_t ext_hub_hdl; /**< Ports' parent external Hub handle */ + usb_device_handle_t parent_dev_hdl; /**< Ports' parent device handle */ + uint8_t parent_port_num; /**< Ports' parent port number */ + } connected; /**< EXT_PORT_CONNECTED event specific data */ + + struct { + usb_device_handle_t parent_dev_hdl; /**< Ports' parent device handle */ + uint8_t parent_port_num; /**< Ports' parent port number */ + } reset_completed; /**< EXT_PORT_RESET_COMPLETED event specific data */ + + struct { + usb_device_handle_t parent_dev_hdl; /**< Ports' parent device handle */ + uint8_t parent_port_num; /**< Ports' parent port number */ + } disconnected; /**< EXT_PORT_DISCONNECTED event specific data */ + }; +} ext_port_event_data_t; + +// ------------------------------ Callbacks ------------------------------------ +/** + * @brief Callback used to indicate that the External Port Driver requires process callback + * + * @note For the Hub Driver only + */ +typedef void (*ext_port_cb_t)(void *user_arg); + +/** + * @brief Callback used to indicate that the External Port driver has an event + * + * @note For the Hub Driver only + */ +typedef void (*ext_port_event_cb_t)(ext_port_event_data_t *event_data, void *arg); + +// ----------------- External Port Driver configuration ------------------------ + +/** + * @brief External Port driver configuration + */ +typedef struct { + ext_port_cb_t proc_req_cb; /**< External Port process callback */ + void *proc_req_cb_arg; /**< External Port process callback argument */ + ext_port_event_cb_t event_cb; /**< External Port event callback */ + void *event_cb_arg; /**< External Port event callback argument */ +} ext_port_driver_config_t; + +/** + * @brief External Port configuration + * + * Structure is used to create new port + */ +typedef struct { + ext_hub_handle_t ext_hub_hdl; /**< Ports' parent external Hub handle */ + usb_device_handle_t parent_dev_hdl; /**< Ports' parent device handle */ + uint8_t parent_port_num; /**< Ports' parent port number */ + uint16_t port_power_delay_ms; /**< Ports' Power on time to Power Good, ms */ +} ext_port_config_t; + +// -------------------- External Port Processing Functions --------------------- + +/** + * @brief Install the External Port Driver + * + * @note This function should only be called from the Hub Driver + * + * @param[in] config External Port Driver configuration + * @return + * - ESP_ERR_NOT_ALLOWED: The Driver was already installed + * - ESP_ERR_NO_MEM: Unable to install the Driver, no memory + * - ESP_OK: The Driver has been installed successfully + */ +esp_err_t ext_port_install(const ext_port_driver_config_t *config); + +/** + * @brief Uninstall the External Port Driver + * + * @note This function should only be called from the Hub Driver + * + * @return + * - ESP_ERR_NOT_ALLOWED: The Driver was not installed + * - ESP_ERR_INVALID_STATE: The Driver has ports in the pending list and can't be uninstalled + * - ESP_OK: The Driver has been uninstall successfully + */ +esp_err_t ext_port_uninstall(void); + +/** + * @brief External Port Driver's process function + * + * @note This function should only be called from the Hub Driver + * + * External Port Driver process function that must be called repeatedly to process the driver's actions and events. + * If blocking, the caller can block on the notification callback of source USB_PROC_REQ_SOURCE_HUB + * to run this function. + * + * @return + * - ESP_ERR_NOT_ALLOWED: The Driver was not installed + * - ESP_OK: The Driver processed completed + */ +esp_err_t ext_port_process(void); + +/** + * @brief Returns External Port Driver's API + * + * @note This is a specific API for the External Hub Driver to handle the ports. + * @return + * - NULL: The Driver has not been installed + * - not NULL: Pointer to the External Port Driver API + */ +const ext_hub_port_driver_t *ext_port_get_driver(void); + +#ifdef __cplusplus +} +#endif diff --git a/components/usb/private_include/hub.h b/components/usb/private_include/hub.h index a580c458559e..e3efaac9bf8c 100644 --- a/components/usb/private_include/hub.h +++ b/components/usb/private_include/hub.h @@ -134,8 +134,8 @@ esp_err_t hub_root_stop(void); * * @note This function should only be called from the Host Library task * - * @param[in] parent_dev_hdl - * @param[in] parent_port_num + * @param[in] parent_dev_hdl Parent device handle (is used to get the External Hub handle) + * @param[in] parent_port_num Parent number (is used to specify the External Port) * @param[in] dev_uid Device's unique ID * * @return @@ -151,9 +151,8 @@ esp_err_t hub_port_recycle(usb_device_handle_t parent_dev_hdl, uint8_t parent_po * * @note This function should only be called from the Host Library task * - * @param[in] parent_dev_hdl - * @param[in] parent_port_num - * + * @param[in] parent_dev_hdl Parent device handle (is used to get the External Hub handle) + * @param[in] parent_port_num Parent number (is used to specify the External Port) * @return * - ESP_OK: Port reset successful * - ESP_ERR_INVALID_STATE: Hub driver is not installed @@ -198,6 +197,8 @@ esp_err_t hub_port_disable(usb_device_handle_t parent_dev_hdl, uint8_t parent_po * * If device is has a HUB class, then it will be added as External Hub to Hub Driver. * + * @note This function should only be called from the Host Library task + * * @param[in] dev_addr Device bus address * * @return @@ -211,6 +212,8 @@ esp_err_t hub_notify_new_dev(uint8_t dev_addr); * * If the device was an External Hub, then it will be removed from the Hub Driver. * + * @note This function should only be called from the Host Library task + * * @param[in] dev_addr Device bus address * * @return @@ -222,6 +225,8 @@ esp_err_t hub_notify_dev_gone(uint8_t dev_addr); /** * @brief Notify Hub driver that all devices should be freed * + * @note This function should only be called from the Host Library task + * * @return * - ESP_OK: All the devices can be freed * - ESP_ERR_INVALID_STATE: Hub driver is not in a correct state diff --git a/components/usb/usbh.c b/components/usb/usbh.c index 75188f02d9c7..c515fc01ca5c 100644 --- a/components/usb/usbh.c +++ b/components/usb/usbh.c @@ -1050,7 +1050,6 @@ esp_err_t usbh_dev_close(usb_device_handle_t dev_hdl) if (dev_obj->dynamic.open_count == 0) { // Sanity check. assert(dev_obj->dynamic.num_ctrl_xfers_inflight == 0); // There cannot be any control transfer in-flight - assert(!dev_obj->dynamic.flags.waiting_free); // This can only be set when open_count reaches 0 if (dev_obj->dynamic.flags.is_gone || dev_obj->dynamic.flags.waiting_free) { // Device is already gone or is awaiting to be freed. Trigger the USBH process to free the device call_proc_req_cb = _dev_set_actions(dev_obj, DEV_ACTION_FREE); From 13c8c2f1219e61c25feec7c8fbf45e4d50881c9c Mon Sep 17 00:00:00 2001 From: Erhan Kurubas Date: Thu, 26 Sep 2024 13:04:39 +0200 Subject: [PATCH 018/365] test(esp-coredump): add test for the soft sha config --- tools/test_apps/system/panic/pytest_panic.py | 1 + .../system/panic/sdkconfig.ci.coredump_flash_elf_soft_sha | 5 +++++ 2 files changed, 6 insertions(+) create mode 100644 tools/test_apps/system/panic/sdkconfig.ci.coredump_flash_elf_soft_sha diff --git a/tools/test_apps/system/panic/pytest_panic.py b/tools/test_apps/system/panic/pytest_panic.py index 1f2cdccb268e..d75f71224fb7 100644 --- a/tools/test_apps/system/panic/pytest_panic.py +++ b/tools/test_apps/system/panic/pytest_panic.py @@ -50,6 +50,7 @@ CONFIGS = [ pytest.param('coredump_flash_bin_crc', marks=TARGETS_ALL), pytest.param('coredump_flash_elf_sha', marks=TARGETS_ALL), + pytest.param('coredump_flash_elf_soft_sha', marks=TARGETS_ALL), pytest.param('coredump_uart_bin_crc', marks=TARGETS_ALL), pytest.param('coredump_uart_elf_crc', marks=TARGETS_ALL), pytest.param('coredump_flash_custom_stack', marks=TARGETS_RISCV), diff --git a/tools/test_apps/system/panic/sdkconfig.ci.coredump_flash_elf_soft_sha b/tools/test_apps/system/panic/sdkconfig.ci.coredump_flash_elf_soft_sha new file mode 100644 index 000000000000..e426d2e4d1c4 --- /dev/null +++ b/tools/test_apps/system/panic/sdkconfig.ci.coredump_flash_elf_soft_sha @@ -0,0 +1,5 @@ +CONFIG_ESP_COREDUMP_ENABLE_TO_FLASH=y +CONFIG_ESP_COREDUMP_DATA_FORMAT_ELF=y +CONFIG_ESP_COREDUMP_CHECKSUM_SHA256=y +CONFIG_LOG_DEFAULT_LEVEL_INFO=y +CONFIG_MBEDTLS_HARDWARE_SHA=n From f4eec4da48502ce725d6e74f5b5d9c8237aa7abf Mon Sep 17 00:00:00 2001 From: Erhan Kurubas Date: Sun, 9 Jun 2024 16:16:24 +0200 Subject: [PATCH 019/365] feat(esp_system): preload openocd stub binaries and reserve memory for debugging --- components/esp_system/CMakeLists.txt | 4 ++ components/esp_system/Kconfig | 13 ++++++ .../esp_system/ld/esp32c6/sections.ld.in | 15 +++++++ .../esp_system/ld/esp32h2/sections.ld.in | 15 +++++++ .../openocd_stub_bins/CMakeLists.txt | 43 +++++++++++++++++++ .../esp_riscv_stub_tramp.inc | 1 + .../openocd_stub_bins/openocd_stub_flasher.c | 33 ++++++++++++++ .../esp32c6/include/soc/Kconfig.soc_caps.in | 4 ++ components/soc/esp32c6/include/soc/soc_caps.h | 3 ++ .../esp32h2/include/soc/Kconfig.soc_caps.in | 4 ++ components/soc/esp32h2/include/soc/soc_caps.h | 3 ++ docs/en/api-guides/performance/ram-usage.rst | 3 +- .../api-guides/performance/ram-usage.rst | 1 + tools/ci/astyle-rules.yml | 4 ++ 14 files changed, 145 insertions(+), 1 deletion(-) create mode 100644 components/esp_system/openocd_stub_bins/CMakeLists.txt create mode 100644 components/esp_system/openocd_stub_bins/esp_riscv_stub_tramp.inc create mode 100644 components/esp_system/openocd_stub_bins/openocd_stub_flasher.c diff --git a/components/esp_system/CMakeLists.txt b/components/esp_system/CMakeLists.txt index d2f97850eceb..1443e619d4bb 100644 --- a/components/esp_system/CMakeLists.txt +++ b/components/esp_system/CMakeLists.txt @@ -147,3 +147,7 @@ endif() if(CONFIG_SOC_MEM_NON_CONTIGUOUS_SRAM) target_link_options(${COMPONENT_LIB} INTERFACE "-Wl,--enable-non-contiguous-regions") endif() + +if(CONFIG_ESP_DEBUG_INCLUDE_OCD_STUB_BINS) + add_subdirectory(openocd_stub_bins) +endif() diff --git a/components/esp_system/Kconfig b/components/esp_system/Kconfig index e597eac88faa..98a266a7001c 100644 --- a/components/esp_system/Kconfig +++ b/components/esp_system/Kconfig @@ -542,6 +542,19 @@ menu "ESP System Settings" Debug stubs are used by OpenOCD to execute pre-compiled onboard code which does some useful debugging stuff, e.g. GCOV data dump. + config ESP_DEBUG_INCLUDE_OCD_STUB_BINS + bool "Preload OpenOCD stub binaries to speed up debugging. 8K memory will be reserved" + default y + depends on SOC_DEBUG_HAVE_OCD_STUB_BINS + help + OpenOCD uses stub code to access flash during programming or when inserting and removing + SW flash breakpoints. + To execute stub code, OpenOCD allocates memory on the target device, backs up the existing memory, + loads the stub binary, runs the binary, and then restores the original memory. + This process can be time-consuming, especially when using USB serial JTAG. + By enabling this option, 8K of memory in RAM will be preallocated with the stub code, + eliminating the need to back up and restore the memory region. + config ESP_DEBUG_OCDAWARE bool "Make exception and panic handlers JTAG/OCD aware" default y diff --git a/components/esp_system/ld/esp32c6/sections.ld.in b/components/esp_system/ld/esp32c6/sections.ld.in index 98b23613d328..da8a695be4af 100644 --- a/components/esp_system/ld/esp32c6/sections.ld.in +++ b/components/esp_system/ld/esp32c6/sections.ld.in @@ -156,6 +156,21 @@ SECTIONS .iram0.text : { _iram_start = ABSOLUTE(.); + +#if CONFIG_ESP_DEBUG_INCLUDE_OCD_STUB_BINS + /* Do not move this block! OpenOCD expects this to be at the beginning of IRAM. */ + KEEP(*(.ocd_stub.code)); + KEEP(*(.ocd_stub.tramp)); + . = ALIGN(0x800); + KEEP(*(.ocd_stub.data)); + KEEP(*(.ocd_stub.bss)); + KEEP(*(.ocd_stub.stack)); + KEEP(*(.ocd_stub.params)); + . = ALIGN(0x1000); + KEEP(*(.ocd_stub.scratchmem)); + ASSERT(ABSOLUTE(.) == _iram_start + 0x2000, "openocd stub memory must be ended at _iram_start + 0x2000"); +#endif + /* Vectors go to start of IRAM */ ASSERT(ABSOLUTE(.) % 0x100 == 0, "vector address must be 256 byte aligned"); KEEP(*(.exception_vectors_table.text)); diff --git a/components/esp_system/ld/esp32h2/sections.ld.in b/components/esp_system/ld/esp32h2/sections.ld.in index 5ffe1de81d63..5fb84f6b3b0b 100644 --- a/components/esp_system/ld/esp32h2/sections.ld.in +++ b/components/esp_system/ld/esp32h2/sections.ld.in @@ -156,6 +156,21 @@ SECTIONS .iram0.text : { _iram_start = ABSOLUTE(.); + +#if CONFIG_ESP_DEBUG_INCLUDE_OCD_STUB_BINS + /* Do not move this block! OpenOCD expects this to be at the beginning of IRAM. */ + KEEP(*(.ocd_stub.code)); + KEEP(*(.ocd_stub.tramp)); + . = ALIGN(0x800); + KEEP(*(.ocd_stub.data)); + KEEP(*(.ocd_stub.bss)); + KEEP(*(.ocd_stub.stack)); + KEEP(*(.ocd_stub.params)); + . = ALIGN(0x1000); + KEEP(*(.ocd_stub.scratchmem)); + ASSERT(ABSOLUTE(.) == _iram_start + 0x2000, "openocd stub memory must be ended at _iram_start + 0x2000"); +#endif + /* Vectors go to start of IRAM */ ASSERT(ABSOLUTE(.) % 0x100 == 0, "vector address must be 256 byte aligned"); KEEP(*(.exception_vectors_table.text)); diff --git a/components/esp_system/openocd_stub_bins/CMakeLists.txt b/components/esp_system/openocd_stub_bins/CMakeLists.txt new file mode 100644 index 000000000000..175fe71c9979 --- /dev/null +++ b/components/esp_system/openocd_stub_bins/CMakeLists.txt @@ -0,0 +1,43 @@ +idf_build_get_property(target IDF_TARGET) + +# Function to add custom commands for copying stub files +function(add_copy_command src dest) + add_custom_command( + OUTPUT ${dest} + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${src} ${dest} + DEPENDS ${src} + COMMENT "Copying ${src} to ${dest}" + VERBATIM + ) +endfunction() + +set(openocd_path $ENV{OPENOCD_SCRIPTS}) + +if(openocd_path) + set(stub_bin_path ${openocd_path}/../espressif/stub_bins) + if(IS_DIRECTORY ${stub_bin_path} AND IS_DIRECTORY ${stub_bin_path}/${target}) + set(code_bin "${stub_bin_path}/${target}/stub_flash_idf_binary_code.inc") + set(data_bin "${stub_bin_path}/${target}/stub_flash_idf_binary_data.inc") + set(img_header "${stub_bin_path}/${target}/stub_flash_idf_image.h") + if(EXISTS ${code_bin} AND EXISTS ${data_bin} AND EXISTS ${img_header}) + set(dest_dir "${IDF_PATH}/components/esp_system/openocd_stub_bins") + set(output_code_bin "${dest_dir}/stub_flash_idf_binary_code.inc") + set(output_data_bin "${dest_dir}/stub_flash_idf_binary_data.inc") + set(output_img_header "${dest_dir}/stub_flash_idf_image.h") + add_copy_command(${code_bin} ${output_code_bin}) + add_copy_command(${data_bin} ${output_data_bin}) + add_copy_command(${img_header} ${output_img_header}) + add_custom_target(copy_stub_bins ALL + DEPENDS ${output_code_bin} ${output_data_bin} ${output_img_header} + COMMENT "Copying OpenOCD stub binaries and image header" + ) + endif() + endif() + + set(srcs "openocd_stub_flasher.c") + add_prefix(srcs "${CMAKE_CURRENT_LIST_DIR}/" "${srcs}") + target_sources(${COMPONENT_LIB} PRIVATE ${srcs}) + target_include_directories(${COMPONENT_LIB} PUBLIC .) + target_link_libraries(${COMPONENT_LIB} INTERFACE "-u esp_system_include_openocd_stub_binaries") + +endif() diff --git a/components/esp_system/openocd_stub_bins/esp_riscv_stub_tramp.inc b/components/esp_system/openocd_stub_bins/esp_riscv_stub_tramp.inc new file mode 100644 index 000000000000..22c0b530f609 --- /dev/null +++ b/components/esp_system/openocd_stub_bins/esp_riscv_stub_tramp.inc @@ -0,0 +1 @@ + 0x82, 0x98, 0x02, 0x90 diff --git a/components/esp_system/openocd_stub_bins/openocd_stub_flasher.c b/components/esp_system/openocd_stub_bins/openocd_stub_flasher.c new file mode 100644 index 000000000000..52331ec67c19 --- /dev/null +++ b/components/esp_system/openocd_stub_bins/openocd_stub_flasher.c @@ -0,0 +1,33 @@ +/* + * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ +#include + +#include "stub_flash_idf_image.h" + +/* Copied from openocd-esp32/contrib/loaders/flash/espressif/${target}/inc/stub_flash_idf_binary_code.inc */ +static const uint8_t s_flasher_stub_code[] __attribute__((used, section(".ocd_stub.code"))) = { +#include "stub_flash_idf_binary_code.inc" +}; + +/* Copied from openocd-esp32/src/target/espressif/esp_riscv_stub_tramp.inc */ +static const uint8_t s_flasher_stub_tramp[] __attribute__((used, section(".ocd_stub.tramp"))) = { +#include "esp_riscv_stub_tramp.inc" +}; + +/* Copied from openocd-esp32/contrib/loaders/flash/espressif/${target}/inc/stub_flash_idf_binary_data.inc */ +static const uint8_t s_flasher_stub_data[] __attribute__((used, section(".ocd_stub.data"))) = { +#include "stub_flash_idf_binary_data.inc" +}; + +static uint8_t s_flasher_stub_bss[OPENOCD_STUB_BSS_SIZE] __attribute__((used, section(".ocd_stub.bss"))); +static uint8_t s_flasher_stub_stack[OPENOCD_STUB_STACK_SIZE] __attribute__((used, section(".ocd_stub.stack"))); +static uint8_t s_flasher_stub_params[OPENOCD_STUB_PARAM_SIZE] __attribute__((used, section(".ocd_stub.params"))); +static uint8_t s_flasher_stub_bp_sectors[OPENOCD_STUB_BP_SECTOR_SIZE] __attribute__((used, section(".ocd_stub.scratchmem"))); + +// Hook to force the linker to include this file +void esp_system_include_openocd_stub_binaries(void) +{ +} diff --git a/components/soc/esp32c6/include/soc/Kconfig.soc_caps.in b/components/soc/esp32c6/include/soc/Kconfig.soc_caps.in index 47dc43d9d5be..1f6da29da44e 100644 --- a/components/soc/esp32c6/include/soc/Kconfig.soc_caps.in +++ b/components/soc/esp32c6/include/soc/Kconfig.soc_caps.in @@ -1542,3 +1542,7 @@ config SOC_LP_CORE_SINGLE_INTERRUPT_VECTOR config SOC_LP_CORE_SUPPORT_ETM bool default y + +config SOC_DEBUG_HAVE_OCD_STUB_BINS + bool + default y diff --git a/components/soc/esp32c6/include/soc/soc_caps.h b/components/soc/esp32c6/include/soc/soc_caps.h index b997a19b9097..3c6692015c23 100644 --- a/components/soc/esp32c6/include/soc/soc_caps.h +++ b/components/soc/esp32c6/include/soc/soc_caps.h @@ -609,3 +609,6 @@ /*------------------------------------- ULP CAPS -------------------------------------*/ #define SOC_LP_CORE_SINGLE_INTERRUPT_VECTOR (1) /*!< LP Core interrupts all map to a single entry in vector table */ #define SOC_LP_CORE_SUPPORT_ETM (1) /*!< LP Core supports ETM */ + +/*------------------------------------- DEBUG CAPS -------------------------------------*/ +#define SOC_DEBUG_HAVE_OCD_STUB_BINS (1) diff --git a/components/soc/esp32h2/include/soc/Kconfig.soc_caps.in b/components/soc/esp32h2/include/soc/Kconfig.soc_caps.in index f66714fbaea0..3994425d3b67 100644 --- a/components/soc/esp32h2/include/soc/Kconfig.soc_caps.in +++ b/components/soc/esp32h2/include/soc/Kconfig.soc_caps.in @@ -1450,3 +1450,7 @@ config SOC_BLE_MULTI_CONN_OPTIMIZATION config SOC_BLE_PERIODIC_ADV_ENH_SUPPORTED bool default y + +config SOC_DEBUG_HAVE_OCD_STUB_BINS + bool + default y diff --git a/components/soc/esp32h2/include/soc/soc_caps.h b/components/soc/esp32h2/include/soc/soc_caps.h index 8831aa1a3cd7..12ed5a23b5c4 100644 --- a/components/soc/esp32h2/include/soc/soc_caps.h +++ b/components/soc/esp32h2/include/soc/soc_caps.h @@ -570,3 +570,6 @@ #define SOC_BLE_POWER_CONTROL_SUPPORTED (1) /*!< Support Bluetooth Power Control */ #define SOC_BLE_MULTI_CONN_OPTIMIZATION (1) /*!< Support multiple connections optimization */ #define SOC_BLE_PERIODIC_ADV_ENH_SUPPORTED (1) /*!< Support For BLE Periodic Adv Enhancements */ + +/*------------------------------------- DEBUG CAPS -------------------------------------*/ +#define SOC_DEBUG_HAVE_OCD_STUB_BINS (1) diff --git a/docs/en/api-guides/performance/ram-usage.rst b/docs/en/api-guides/performance/ram-usage.rst index b3a0d142cf74..a144005d0818 100644 --- a/docs/en/api-guides/performance/ram-usage.rst +++ b/docs/en/api-guides/performance/ram-usage.rst @@ -192,6 +192,7 @@ The following options will reduce IRAM usage of some ESP-IDF features: - Refer to the sdkconfig menu ``Auto-detect Flash chips``, and you can disable flash drivers which you do not need to save some IRAM. :SOC_GPSPI_SUPPORTED: - Enable :ref:`CONFIG_HEAP_PLACE_FUNCTION_INTO_FLASH`. Provided that :ref:`CONFIG_SPI_MASTER_ISR_IN_IRAM` is not enabled and the heap functions are not incorrectly used from ISRs, this option is safe to enable in all configurations. :esp32c2: - Enable :ref:`CONFIG_BT_RELEASE_IRAM`. Release BT text section and merge BT data, bss & text into a large free heap region when ``esp_bt_mem_release`` is called. This makes Bluetooth unavailable until the next restart, but saving ~22 KB or more of IRAM. + :SOC_DEBUG_HAVE_OCD_STUB_BINS: - Disabling :ref:`CONFIG_ESP_DEBUG_INCLUDE_OCD_STUB_BINS` frees 8 KB IRAM but overall speed of debugging might be impacted due to the added overhead of runtime stub loading especially when using flash breakpoints. .. only:: esp32 @@ -202,7 +203,7 @@ The following options will reduce IRAM usage of some ESP-IDF features: To use this option, ESP-IDF should be able to recognize that the new SRAM1 area is also a valid load address for an image segment. If the software bootloader was compiled before this option existed, then the bootloader will not be able to load the app that has code placed in this new extended IRAM area. This would typically happen if you are doing an OTA update, where only the app would be updated. - If the IRAM section were to be placed in an invalid area, then this would be detected during the boot-up process, and result in a failed boot: + If the IRAM section were to be placed in an invalid area, then this would be detected during the boot up process, and result in a failed boot: .. code-block:: text diff --git a/docs/zh_CN/api-guides/performance/ram-usage.rst b/docs/zh_CN/api-guides/performance/ram-usage.rst index 44839f698ee1..b4a7a89cf8fe 100644 --- a/docs/zh_CN/api-guides/performance/ram-usage.rst +++ b/docs/zh_CN/api-guides/performance/ram-usage.rst @@ -192,6 +192,7 @@ IRAM 优化 - 要禁用不需要的 flash 驱动程序,节省 IRAM 空间,请参阅 sdkconfig 菜单中的 ``Auto-detect Flash chips`` 选项。 :SOC_GPSPI_SUPPORTED: - 启用 :ref:`CONFIG_HEAP_PLACE_FUNCTION_INTO_FLASH`。只要未启用 :ref:`CONFIG_SPI_MASTER_ISR_IN_IRAM` 选项,且没有从 ISR 中错误地调用堆函数,就可以在所有配置中安全启用此选项。 :esp32c2: - 启用 :ref:`CONFIG_BT_RELEASE_IRAM`。 蓝牙所使用的 data,bss 和 text 段已经被分配在连续的RAM区间。当调用 ``esp_bt_mem_release`` 时,这些段都会被添加到 Heap 中。 这将节省约 22 KB 的 RAM。但要再次使用蓝牙功能,需要重启程序。 + :SOC_DEBUG_HAVE_OCD_STUB_BINS: - 禁用 :ref:`CONFIG_ESP_DEBUG_INCLUDE_OCD_STUB_BINS` 选项可以释放 8 KB 的 IRAM, 但由于运行时加载存根的额外开销,特别是在使用 flash 断点时,可能会影响调试的整体速度。 .. only:: esp32 diff --git a/tools/ci/astyle-rules.yml b/tools/ci/astyle-rules.yml index e74f913eb543..12da05ef74e8 100644 --- a/tools/ci/astyle-rules.yml +++ b/tools/ci/astyle-rules.yml @@ -161,6 +161,10 @@ components_not_formatted_permanent: - "/examples/peripherals/dac/dac_continuous/dac_audio/main/audio_example_file.h" # Coredump (generated) - /components/espcoredump/include_core_dump/elf.h + # OpenOCD stub binaries (generated) + - /components/esp_system/openocd_stub_bins/*.inc + - /components/esp_system/openocd_stub_bins/esp32c6/*.inc + - /components/esp_system/openocd_stub_bins/esp32h2/*.inc docs: # Docs directory contains some .inc files, which are not C include files From d78439a5722dc22342a98b798a1d9ae93f687b35 Mon Sep 17 00:00:00 2001 From: Mahavir Jain Date: Thu, 26 Sep 2024 20:48:44 +0530 Subject: [PATCH 020/365] docs: enable qemu doc guide for ESP32-S3 --- docs/conf_common.py | 9 ++++++++- docs/en/api-guides/tools/index.rst | 2 +- docs/zh_CN/api-guides/tools/index.rst | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/docs/conf_common.py b/docs/conf_common.py index 2a9a6fee84bb..c7c26263d858 100644 --- a/docs/conf_common.py +++ b/docs/conf_common.py @@ -218,7 +218,7 @@ 'api-reference/peripherals/touch_pad.rst', 'api-reference/peripherals/sd_pullup_requirements.rst', 'api-guides/RF_calibration.rst', - 'api-guides/phy.rst'] + USB_OTG_DFU_DOCS + USB_OTG_CONSOLE_DOCS + 'api-guides/phy.rst'] + USB_OTG_DFU_DOCS + USB_OTG_CONSOLE_DOCS + QEMU_DOCS # No JTAG docs for this one as it gets gated on SOC_USB_SERIAL_JTAG_SUPPORTED down below. ESP32C3_DOCS = ['hw-reference/esp32c3/**', @@ -379,6 +379,9 @@ idf_build_system = {'doxygen_component_info': True, 'component_info_ignore_file': Path(os.environ['IDF_PATH']) / 'docs' / 'component_info_ignore_file.txt'} +# Please update following list to enable Qemu doc guide (and cross references) for a new target +QEMU_TARGETS = ['esp32', 'esp32c3', 'esp32s3'] + # Callback function for user setup that needs be done after `config-init`-event # config.idf_target is not available at the initial config stage @@ -386,6 +389,10 @@ def conf_setup(app, config): config.add_warnings_content = 'This document is not updated for {} yet, so some of the content may not be correct.'.format(config.idf_target.upper()) add_warnings_file = '{}/../docs_not_updated/{}.txt'.format(app.confdir, config.idf_target) + + if config.idf_target in QEMU_TARGETS: + app.tags.add('TARGET_SUPPORT_QEMU') + try: with open(add_warnings_file) as warning_file: config.add_warnings_pages = warning_file.read().splitlines() diff --git a/docs/en/api-guides/tools/index.rst b/docs/en/api-guides/tools/index.rst index 1b25030209ff..f5d1801ab77c 100644 --- a/docs/en/api-guides/tools/index.rst +++ b/docs/en/api-guides/tools/index.rst @@ -12,4 +12,4 @@ Tools idf-clang-tidy idf-tools idf-size - :esp32 or esp32c3: qemu + :TARGET_SUPPORT_QEMU: qemu diff --git a/docs/zh_CN/api-guides/tools/index.rst b/docs/zh_CN/api-guides/tools/index.rst index 44916de2606e..e6b4d2158fcc 100644 --- a/docs/zh_CN/api-guides/tools/index.rst +++ b/docs/zh_CN/api-guides/tools/index.rst @@ -12,4 +12,4 @@ idf-clang-tidy idf-tools idf-size - :esp32 or esp32c3: qemu + :TARGET_SUPPORT_QEMU: qemu From d6c4cbb53f4713f781f45bc1c2a5d3da8e5f01aa Mon Sep 17 00:00:00 2001 From: Mahavir Jain Date: Thu, 26 Sep 2024 20:49:27 +0530 Subject: [PATCH 021/365] docs: fix typo related to secure boot --- docs/en/api-guides/bootloader.rst | 2 +- docs/zh_CN/api-guides/bootloader.rst | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/api-guides/bootloader.rst b/docs/en/api-guides/bootloader.rst index 58b7d9ee7021..f835b597dc91 100644 --- a/docs/en/api-guides/bootloader.rst +++ b/docs/en/api-guides/bootloader.rst @@ -6,7 +6,7 @@ Bootloader The ESP-IDF Software Bootloader performs the following functions: 1. Minimal initial configuration of internal modules; -2. Initialize :doc:`/security/flash-encryption` and/or :doc:`Secure ` features, if configured; +2. Initialize :doc:`/security/flash-encryption` and/or :doc:`Secure Boot ` features, if configured; 3. Select the application partition to boot, based on the partition table and ota_data (if any); 4. Load this image to RAM (IRAM & DRAM) and transfer management to the image that was just loaded. diff --git a/docs/zh_CN/api-guides/bootloader.rst b/docs/zh_CN/api-guides/bootloader.rst index 29277188a714..a4577c67d915 100644 --- a/docs/zh_CN/api-guides/bootloader.rst +++ b/docs/zh_CN/api-guides/bootloader.rst @@ -6,7 +6,7 @@ ESP-IDF 软件引导加载程序 (Bootloader) 主要执行以下任务: 1. 内部模块的最小化初始配置; -2. 如果配置了 :doc:`/security/flash-encryption` 和/或 :doc:`Secure `,则对其进行初始化。 +2. 如果配置了 :doc:`/security/flash-encryption` 和/或 :doc:`Secure Boot `,则对其进行初始化。 3. 根据分区表和 ota_data(如果存在)选择需要引导的应用程序 (app) 分区; 4. 将此应用程序镜像加载到 RAM(IRAM 和 DRAM)中,最后把控制权转交给此应用程序。 From 1e94096e16eec54aa83e2946adbc9d50614f483d Mon Sep 17 00:00:00 2001 From: Mahavir Jain Date: Thu, 26 Sep 2024 20:50:04 +0530 Subject: [PATCH 022/365] docs: update qemu guide for efuse commands - add mention of qemu guide in security related chapters - also added a note about secure boot v2 config in qemu workflow --- docs/en/api-guides/tools/qemu.rst | 30 +++++++++++++++++-- ...security-features-enablement-workflows.rst | 5 ++++ docs/en/security/security.rst | 6 ++++ 3 files changed, 39 insertions(+), 2 deletions(-) diff --git a/docs/en/api-guides/tools/qemu.rst b/docs/en/api-guides/tools/qemu.rst index 697f45ca7cd4..d5b2649919e7 100644 --- a/docs/en/api-guides/tools/qemu.rst +++ b/docs/en/api-guides/tools/qemu.rst @@ -1,6 +1,8 @@ QEMU Emulator ============= +{IDF_TARGET_CRYPT_CNT:default="SPI_BOOT_CRYPT_CNT",esp32="FLASH_CRYPT_CNT"} + :link_to_translation:`zh_CN:[中文]` Espressif maintains a `fork `_ of the QEMU emulator with support for {IDF_TARGET_NAME}. This fork implements emulation of the CPU, memory, and several peripherals of {IDF_TARGET_NAME}. For more information about QEMU for {IDF_TARGET_NAME}, see the `QEMU README documentation `_. @@ -119,13 +121,37 @@ QEMU supports emulation of eFuses. This can be a convenient way to test security You can use :doc:`idf.py` eFuse-related commands to program eFuses. When you run any of these commands together with ``qemu`` command, the eFuses are programmed in QEMU, and the ``qemu_efuse.bin`` file is updated. For example, +.. only:: not SOC_FLASH_ENCRYPTION_XTS_AES + + .. code-block:: console + + idf.py qemu efuse-burn {IDF_TARGET_CRYPT_CNT} 1 + idf.py qemu efuse-burn-key flash_encryption my_flash_encryption_key.bin + +.. only:: SOC_FLASH_ENCRYPTION_XTS_AES + + .. code-block:: console + + idf.py qemu efuse-burn {IDF_TARGET_CRYPT_CNT} 1 + idf.py qemu efuse-burn-key BLOCK my_flash_encryption_key.bin KEYPURPOSE + + For details regarding the ``BLOCK`` and ``KEYPURPOSE``, please refer to the :doc:`../../security/flash-encryption` guide. + +To dump the eFuse summary, please use the following command: + .. code-block:: console - idf.py qemu efuse-burn FLASH_CRYPT_CNT 1 + idf.py qemu efuse-summary By default, the values of eFuses are read from and written to the ``qemu_efuse.bin`` file in the build directory. You can specify a different file using the ``--efuse-file`` option. For example, .. code-block:: console - idf.py qemu --efuse-file my_efuse.bin efuse-burn FLASH_CRYPT_CNT 1 + idf.py qemu --efuse-file my_efuse.bin efuse-burn {IDF_TARGET_CRYPT_CNT} 1 idf.py qemu --efuse-file my_efuse.bin monitor + +Emulating Secure Boot +~~~~~~~~~~~~~~~~~~~~~ + +QEMU supports emulation of secure boot v2 scheme. Please keep :ref:`CONFIG_SECURE_BOOT_FLASH_BOOTLOADER_DEFAULT` enabled to include signed bootloader image into the qemu image artifact. + diff --git a/docs/en/security/security-features-enablement-workflows.rst b/docs/en/security/security-features-enablement-workflows.rst index 35e36344b837..ecaeea7044b9 100644 --- a/docs/en/security/security-features-enablement-workflows.rst +++ b/docs/en/security/security-features-enablement-workflows.rst @@ -18,6 +18,11 @@ When enabling security features on ESP32 SoCs, it is recommended that power supp This guide describes a set of workflows to enable security features on the device with the assistance of an external host machine. These workflows are broken down into various stages, with each stage generating signing/encryption keys on the host machine. This allows for greater chances of recovery in case of power or other failures. Furthermore, these workflows expedites the overall provisioning process via the use of the host machine (e.g., encrypting firmware on the host is quicker than on the device). +.. only:: TARGET_SUPPORT_QEMU + + .. important:: + + It is possible to try out the security features for {IDF_TARGET_NAME} target SoC under :doc:`../api-guides/tools/qemu` virtually. Once the security workflow is established, you can then proceed to the real hardware. Goals ----- diff --git a/docs/en/security/security.rst b/docs/en/security/security.rst index 07e3ef2b2620..d834e7c9d4b0 100644 --- a/docs/en/security/security.rst +++ b/docs/en/security/security.rst @@ -13,6 +13,12 @@ This guide provides an overview of the overall security features available in va In this guide, most used commands are in the form of ``idf.py secure-``, which is a wrapper around corresponding ``espsecure.py ``. The ``idf.py`` based commands provides more user-friendly experience, although may lack some of the advanced functionality of their ``espsecure.py`` based counterparts. +.. only:: TARGET_SUPPORT_QEMU + + .. important:: + + It is possible to try out the security features for {IDF_TARGET_NAME} target SoC under :doc:`../api-guides/tools/qemu` virtually. Once the security workflow is established, you can then proceed to the real hardware. + Goals ----- From a3810dcd5a1c8ce4161ad3a7f6cb066a7c0145eb Mon Sep 17 00:00:00 2001 From: Mahavir Jain Date: Thu, 26 Sep 2024 20:51:52 +0530 Subject: [PATCH 023/365] ci: add codeowners entry for docs_not_updated directory --- .gitlab/CODEOWNERS | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitlab/CODEOWNERS b/.gitlab/CODEOWNERS index b1ef4019e94b..9c191dabef2a 100644 --- a/.gitlab/CODEOWNERS +++ b/.gitlab/CODEOWNERS @@ -159,6 +159,7 @@ /components/xtensa/ @esp-idf-codeowners/system /docs/ @esp-idf-codeowners/docs +/docs/docs_not_updated/ @esp-idf-codeowners/all-maintainers /docs/**/api-guides/tools/ @esp-idf-codeowners/tools /docs/en/api-guides/core_dump.rst @esp-idf-codeowners/debugging /docs/en/api-guides/jtag-debugging/ @esp-idf-codeowners/debugging From 8a80675b7c05d613b3e9a7126a0049458b589db2 Mon Sep 17 00:00:00 2001 From: zhanghaipeng Date: Sat, 28 Sep 2024 12:14:31 +0800 Subject: [PATCH 024/365] fix(bt): Update bt lib for ESP32-C3 and ESP32-S3(01cc408) - Fixed extended connectable advertising data length check --- components/bt/controller/lib_esp32c3_family | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/bt/controller/lib_esp32c3_family b/components/bt/controller/lib_esp32c3_family index 061e70c31957..73ae8322b2d7 160000 --- a/components/bt/controller/lib_esp32c3_family +++ b/components/bt/controller/lib_esp32c3_family @@ -1 +1 @@ -Subproject commit 061e70c319576bf28b5695f5478dbe01ad18b18d +Subproject commit 73ae8322b2d7c990c195bfe3dca118ff43196f70 From b3778fdb24bfb4bc7a833b85bd741e6442724b83 Mon Sep 17 00:00:00 2001 From: yinqingzhao Date: Wed, 25 Sep 2024 14:07:15 +0800 Subject: [PATCH 025/365] feat(phy): esp32c6 update phy init data --- components/esp_phy/esp32c6/phy_init_data.c | 112 ++++++++++----------- 1 file changed, 56 insertions(+), 56 deletions(-) diff --git a/components/esp_phy/esp32c6/phy_init_data.c b/components/esp_phy/esp32c6/phy_init_data.c index f60ba8f7e398..499b60d6609b 100644 --- a/components/esp_phy/esp32c6/phy_init_data.c +++ b/components/esp_phy/esp32c6/phy_init_data.c @@ -13,8 +13,8 @@ const char __attribute__((section(".rodata"))) phy_init_magic_pre[] = PHY_INIT_M * @brief Structure containing default recommended PHY initialization parameters. */ const esp_phy_init_data_t phy_init_data= { { - 0x01, - 0x00, + 0xa, + 0x0, LIMIT(CONFIG_ESP_PHY_MAX_TX_POWER * 4, 0, 0x54), LIMIT(CONFIG_ESP_PHY_MAX_TX_POWER * 4, 0, 0x54), LIMIT(CONFIG_ESP_PHY_MAX_TX_POWER * 4, 0, 0x50), @@ -29,62 +29,62 @@ const esp_phy_init_data_t phy_init_data= { { LIMIT(CONFIG_ESP_PHY_MAX_TX_POWER * 4, 0, 0x3C), LIMIT(CONFIG_ESP_PHY_MAX_TX_POWER * 4, 0, 0x3C), LIMIT(CONFIG_ESP_PHY_MAX_TX_POWER * 4, 0, 0x3C), + LIMIT(CONFIG_ESP_PHY_MAX_TX_POWER * 4, 0, 0x4c), + LIMIT(CONFIG_ESP_PHY_MAX_TX_POWER * 4, 0, 0x4c), + LIMIT(CONFIG_ESP_PHY_MAX_TX_POWER * 4, 0, 0x4c), + LIMIT(CONFIG_ESP_PHY_MAX_TX_POWER * 4, 0, 0x48), + 0x0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, 0x00, 0x00, 0x00, - 0xff, - 0xff, - 0xff, - 0xff, - 0xff, - 0xff, - 0xff, - 0xff, - 0xff, - 0xff, - 0xff, - 0xff, - 0xff, - 0xff, - 0xff, - 0xff, - 0xff, - 0xff, - 0xff, - 0xff, - 0xff, - 0xff, - 0xff, - 0xff, - 0xff, - 0xff, - 0xff, - 0xff, - 0xff, - 0xff, - 0xff, - 0xff, - 0xff, - 0xff, - 0xff, - 0xff, - 0xff, - 0xff, - 0xff, - 0xff, - 0xff, - 0xff, - 0xff, - 0xff, - 0xff, - 0xff, - 0xff, - 0xff, - 0xff, - 0xff, - 0xff, - 0, - 0, 0, 0, 0, @@ -140,7 +140,7 @@ const esp_phy_init_data_t phy_init_data= { { 0, 0, 0, - 0x70 + 0x51 } }; const char __attribute__((section(".rodata"))) phy_init_magic_post[] = PHY_INIT_MAGIC; From c0f296dafc9cc55602d9c52e34ad5769c8d18122 Mon Sep 17 00:00:00 2001 From: shenmengjing Date: Fri, 2 Aug 2024 10:53:08 +0800 Subject: [PATCH 026/365] docs: Update the CN translation for several docs --- docs/en/api-guides/external-ram.rst | 8 +-- docs/en/api-guides/hlinterrupts.rst | 2 +- docs/en/api-reference/system/ota.rst | 2 +- docs/en/api-reference/system/pthread.rst | 5 +- docs/zh_CN/api-guides/cplusplus.rst | 9 --- docs/zh_CN/api-guides/external-ram.rst | 6 +- docs/zh_CN/api-guides/hlinterrupts.rst | 2 + .../low-power-mode/low-power-mode-wifi.rst | 13 ++-- .../protocols/esp_crt_bundle.rst | 2 +- docs/zh_CN/api-reference/storage/fatfs.rst | 1 + docs/zh_CN/api-reference/system/ota.rst | 4 +- docs/zh_CN/api-reference/system/pthread.rst | 70 +++++++++++++++++-- 12 files changed, 90 insertions(+), 34 deletions(-) diff --git a/docs/en/api-guides/external-ram.rst b/docs/en/api-guides/external-ram.rst index f8cebef14d42..225de5fe9953 100644 --- a/docs/en/api-guides/external-ram.rst +++ b/docs/en/api-guides/external-ram.rst @@ -167,7 +167,7 @@ By applying the macro ``EXT_RAM_NOINIT_ATTR``, data could be moved from the inte The benefits of XiP from PSRAM is: - - PSRAM access speed may be faster than Flash access, so the overall application performance may be better. For example, if the PSRAM is an Octal mode (8-line-PSRAM) and is configured to 80 MHz, then it is faster than a Quad flash (4-line-flash) which is configured to 80 MHz. + - PSRAM access speed may be faster than flash access, so the overall application performance may be better. For example, if the PSRAM is an Octal mode (8-line PSRAM) and is configured to 80 MHz, then it is faster than a Quad flash (4-line flash) which is configured to 80 MHz. - The cache will not be disabled during an SPI1 flash operation, thus optimizing the code execution performance during SPI1 flash operations. For ISRs, ISR callbacks and data which might be accessed during this period, you do not need to place them in internal RAM, thus internal RAM usage can be optimized. This feature is useful for high throughput peripheral involved applications to improve the performance during SPI1 flash operations. @@ -186,11 +186,11 @@ By applying the macro ``EXT_RAM_NOINIT_ATTR``, data could be moved from the inte .. only:: SOC_MMU_PER_EXT_MEM_TARGET - Because {IDF_TARGET_NAME} flash and PSRAM are using two separate SPI buses, moving flash content to PSRAM will actually increase the load of the PSRAM MSPI bus, so the exact impact on performance will be dependent on your app usage of PSRAM. + Since the flash and PSRAM in {IDF_TARGET_NAME} use two separate SPI buses, moving flash content to PSRAM will actually increase the load on the PSRAM MSPI bus. Therefore, the exact impact on performance will be dependent on your app usage of PSRAM. - For example, as the PSRAM bus speed could be faster than flash bus speed (e.g., if the PSRAM is a HEX (16-line-PSRAM on ESP32P4) and is configured to 200 Mhz, then it is much faster than a Quad flash (4-line-flash) which is configured to 80 MHz.). + The PSRAM bus can operate at a higher speed than the flash bus. For example, if the PSRAM is a HEX (16-line PSRAM on ESP32P4) running at 200 MHz, it is significantly faster than a Quad flash (4-line flash) running at 80 MHz. - If the instructions and data that are used to be in flash are not accessed very frequently, you should get better performance with this option enabled. We suggest doing performance profiling to determine how enabling this option will impact your system. + If the instructions and data previously stored in flash are not accessed frequently, then enabling this option could improve performance. It is recommended to conduct performance profiling to evaluate how this option will affect your system. Restrictions ============ diff --git a/docs/en/api-guides/hlinterrupts.rst b/docs/en/api-guides/hlinterrupts.rst index 6655a13ae438..4b0dd29295d5 100644 --- a/docs/en/api-guides/hlinterrupts.rst +++ b/docs/en/api-guides/hlinterrupts.rst @@ -114,7 +114,7 @@ Then, in the component ``CMakeLists.txt``, add this name as an unresolved symbol This will ensure the linker to always includes the file defining ``ld_include_my_isr_file``, so that the ISR is always linked. -- High-priority interrupts can be routed and handled using :cpp:func:`esp_intr_alloc` and associated functions. The handler and handler arguments to :cpp:func:`esp_intr_alloc` must be NULL, however. +- High-priority interrupts can be routed and handled using :cpp:func:`esp_intr_alloc` and associated functions. However, the handler and handler arguments to :cpp:func:`esp_intr_alloc` must be NULL. - In theory, medium priority interrupts could also be handled in this way. ESP-IDF does not support this yet. diff --git a/docs/en/api-reference/system/ota.rst b/docs/en/api-reference/system/ota.rst index e446a5ce88d5..db5e7c812b4a 100644 --- a/docs/en/api-reference/system/ota.rst +++ b/docs/en/api-reference/system/ota.rst @@ -344,7 +344,7 @@ See Also Application Examples -------------------- -- :example:`system/ota/native_ota_example` demonstrates how to use the `app_update` component's APIs for native Over-the-Air (OTA) updates on {IDF_TARGET_NAME}. For the applicable SoCs, please refer to :example_file:`system/ota/native_ota_example/README.md`. +- :example:`system/ota/native_ota_example` demonstrates how to use the `app_update` component's APIs for native over-the-air (OTA) updates on {IDF_TARGET_NAME}. For applicable SoCs, please refer to :example_file:`system/ota/native_ota_example/README.md`. - :example:`system/ota/otatool` demonstrates how to use the OTA tool to perform operations such as reading, writing, and erasing OTA partitions, switching boot partitions, and switching to factory partition. For more information, please refer to :example_file:`system/ota/otatool/README.md`. diff --git a/docs/en/api-reference/system/pthread.rst b/docs/en/api-reference/system/pthread.rst index f78a8fbe6e78..894e1a659efa 100644 --- a/docs/en/api-reference/system/pthread.rst +++ b/docs/en/api-reference/system/pthread.rst @@ -183,6 +183,7 @@ Message Queues ^^^^^^^^^^^^^^ The message queue implementation is based on the `FreeRTOS-Plus-POSIX `_ project. Message queues are not made available in any filesystem on ESP-IDF. Message priorities are not supported. + The following API functions of the POSIX message queue specification are implemented: * `mq_open() `_ @@ -191,7 +192,7 @@ The following API functions of the POSIX message queue specification are impleme - It has to begin with a leading slash. - It has to be no more than 255 + 2 characters long (including the leading slash, excluding the terminating null byte). However, memory for ``name`` is dynamically allocated internally, so the shorter it is, the fewer memory it will consume. - The ``mode`` argument is not implemented and is ignored. - - Supported ``oflags``: ``O_RDWR``, ``O_CREAT``, ``O_EXCL``, and ``O_NONBLOCK`` + - Supported ``oflags``: ``O_RDWR``, ``O_CREAT``, ``O_EXCL``, and ``O_NONBLOCK``. * `mq_close() `_ * `mq_unlink() `_ @@ -218,7 +219,7 @@ The following API functions of the POSIX message queue specification are impleme Building ........ -To use the POSIX message queue API, please add ``rt`` as a requirement in your component's ``CMakeLists.txt`` +To use the POSIX message queue API, please add ``rt`` as a requirement in your component's ``CMakeLists.txt``. .. note:: diff --git a/docs/zh_CN/api-guides/cplusplus.rst b/docs/zh_CN/api-guides/cplusplus.rst index 5968ef272283..ba0c833e9071 100644 --- a/docs/zh_CN/api-guides/cplusplus.rst +++ b/docs/zh_CN/api-guides/cplusplus.rst @@ -193,12 +193,3 @@ ESP-IDF 支持 ``iostream`` 功能,但应注意: ------------- 请勿在 C++ 中使用 ``setjmp``/``longjmp``。``longjmp`` 会在不调用任何析构函数的情况下盲目跳出堆栈,容易引起未定义的行为和内存泄漏。请改用 C++ 异常处理,这类程序可以确保正确调用析构函数。如果无法使用 C++ 异常处理,请使用其他替代方案( ``setjmp``/``longjmp`` 除外),如简单的返回码。 - -应用示例 --------------------- - -- :example:`cxx/pthread` - -- :example:`cxx/exceptions` 演示了如何在 {IDF_TARGET_NAME} 中启用和使用 C++ 异常。该示例声明了一个类,当提供的参数等于 0 时,这个类会在构造函数中抛出异常。 - -- :example:`cxx/rtti` diff --git a/docs/zh_CN/api-guides/external-ram.rst b/docs/zh_CN/api-guides/external-ram.rst index 92bfa9eafcd6..e23be50de1db 100644 --- a/docs/zh_CN/api-guides/external-ram.rst +++ b/docs/zh_CN/api-guides/external-ram.rst @@ -167,7 +167,7 @@ ESP-IDF 启动过程中,片外 RAM 被映射到数据虚拟地址空间,该 在 PSRAM 中直接执行代码的好处包括: - - PSRAM 访问速度可能快于 flash,因此性能更好。例如,如果使用的 PSRAM 是八线的,且被配置为 80 MHz,而 flash 是4线的,且被配置为 80 Mhz,那么 PSRAM 的访问速度是快于 flash 的。 + - PSRAM 的访问速度可能快于 flash,因此性能更好。例如,如果使用的 PSRAM 是八线的,且被配置为 80 MHz,而 flash 是四线的,且被配置为 80 Mhz,那么 PSRAM 的访问速度将快于 flash。 - 在进行 SPI1 flash 操作期间,cache 仍然保持启用状态,这样可以优化代码执行性能。由于无需把中断服务程序 (ISR)、ISR 回调和在此期间可能被访问的数据放置在片上 RAM 中,片上 RAM 可用于其他用途,从而提高了使用效率。这个特性适用于需要处理大量数据的高吞吐量外设应用,能显著提高 SPI1 flash 操作期间的性能。 @@ -188,7 +188,9 @@ ESP-IDF 启动过程中,片外 RAM 被映射到数据虚拟地址空间,该 由于 {IDF_TARGET_NAME} flash 和 PSRAM 使用两个独立的 SPI 总线,将 flash 内容移动到 PSRAM 实际上增加了 PSRAM MSPI 总线的负载, - 例如,PSRAM 的访问速度可能快于 flash (比如在 ESP32-P4 上,选择的 PSRAM 是十六线的并将其配置为 200 MHz, 此时 PSRAM 的访问速度是远快于一颗被配置为 80 MHz 的四线 flash 芯片),如果这些之前在 flash 中被就地执行的指令和数据不是十分频繁地被访问,则使能这个选项会增加系统的性能。建议先进行性能分析以确定启用此选项是否会显著影响应用程序性能。 + PSRAM 的访问速度可能快于 flash。比如在 ESP32-P4 上,选择十六线 PSRAM 并将其配置为 200 MHz,此时 PSRAM 的访问速度远快于被配置为 80 MHz 的四线 flash 芯片。 + + 如果这些之前在 flash 中被就地执行的指令和数据不会被频繁访问,则使能该选项可能会提高系统的性能。建议先进行性能分析,评估启用此选项是否会显著影响应用程序的性能。 片外 RAM 使用限制 =================== diff --git a/docs/zh_CN/api-guides/hlinterrupts.rst b/docs/zh_CN/api-guides/hlinterrupts.rst index 7f78e1a3d9cc..07fec7119e7b 100644 --- a/docs/zh_CN/api-guides/hlinterrupts.rst +++ b/docs/zh_CN/api-guides/hlinterrupts.rst @@ -119,3 +119,5 @@ Xtensa 架构支持 32 个中断处理程序,这些中断分为从 1 到 7 的 - 中等优先级的中断理论上也可以通过上述方式处理,但 ESP-IDF 尚不支持此功能。 - 要检查 Xtensa 指令集架构 (ISA),请参阅 `Xtensa ISA 摘要 `_。 + +:example:`system/nmi_isr` 提供了一个示例,可以在基于 Xtensa 架构的目标平台上实现自定义 NMI 处理程序。 diff --git a/docs/zh_CN/api-guides/low-power-mode/low-power-mode-wifi.rst b/docs/zh_CN/api-guides/low-power-mode/low-power-mode-wifi.rst index ac6af18ba323..06825059f3b9 100644 --- a/docs/zh_CN/api-guides/low-power-mode/low-power-mode-wifi.rst +++ b/docs/zh_CN/api-guides/low-power-mode/low-power-mode-wifi.rst @@ -14,14 +14,13 @@ Wi-Fi 场景下低功耗模式介绍 在介绍具体内容前先给出 Wi-Fi 场景下低功耗模式总结表,以方便用户根据需求快速选择想要了解的内容,选择合适的低功耗模式。 - .. include:: ../sleep-current/{IDF_TARGET_PATH_NAME}_summary.inc .. note:: 上表中所有电流均为平均电流,表中术语在下文均有介绍,用户可根据需求进行查看。 -.. _Wi-Fi 省电的基本原理: +.. _Basic Principles of Wi-Fi Power Saving: Wi-Fi 省电的基本原理 --------------------- @@ -90,9 +89,9 @@ Wi-Fi 省电的基本原理 可以看出影响功耗表现的主要有三点:interval、period 和 base current。 - - **interval** 是 station Wi-Fi 相关模块工作的间隔,既可以由低功耗模式自定义,也可根据 Wi-Fi 协议省电机制(详细内容请见 :ref:`Wi-Fi 省电的基本原理`),由 DTIM 周期决定。可以看出在同等情下,interval 越大,功耗表现会更好,但是响应会更慢,影响通信的及时性。 + - **interval** 是 station Wi-Fi 相关模块工作的间隔,既可以由低功耗模式自定义,也可根据 Wi-Fi 协议省电机制(详细内容请见 :ref:`Basic Principles of Wi-Fi Power Saving`),由 DTIM 周期决定。可以看出在同等情下,interval 越大,功耗表现会更好,但是响应会更慢,影响通信的及时性。 - - **period** 可以看作每次 station Wi-Fi 工作的时间,这段时间的长度也会影响功耗的表现。period 不是一个固定的时长(详细内容请见 :ref:`Wi-Fi 省电的基本原理`),在保证 Wi-Fi 通信正常的情况下,period 持续时间越短,功耗表现越好。但是减少 period 时间,必然会影响通信的可靠性。 + - **period** 可以看作每次 station Wi-Fi 工作的时间,这段时间的长度也会影响功耗的表现。period 不是一个固定的时长(详细内容请见 :ref:`Basic Principles of Wi-Fi Power Saving`),在保证 Wi-Fi 通信正常的情况下,period 持续时间越短,功耗表现越好。但是减少 period 时间,必然会影响通信的可靠性。 - **base current** 是 Wi-Fi 相关模块不工作时芯片的电流,影响其大小的因素很多,不同的功耗模式下休眠策略不同。所以,在满足功能的情况下,优化配置降低该电流大小可以提高功耗表现,但同时关闭其余模块会影响相关功能和芯片的唤醒时间。 @@ -106,7 +105,7 @@ Modem-sleep 模式主要工作原理基于 DTIM 机制,周期性的醒来处 Modem-sleep 模式会在 Wi-Fi 任务结束后自动进入休眠无需调用 API,休眠时仅会关闭 Wi-Fi 相关模块 (PHY),其余模块均处在正常上电状态。 -Modem-sleep 模式默认会根据 DTIM 周期或 listen interval(于 :ref:`Modem-sleep 模式配置` 中介绍)醒来,相当于系统自动设置了一个 Wi-Fi 唤醒源,因此用户无需再配置唤醒源,同时系统主动发包时也可以唤醒。 +Modem-sleep 模式默认会根据 DTIM 周期或 listen interval(于 :ref:`Modem-sleep Mode Configuration` 中介绍)醒来,相当于系统自动设置了一个 Wi-Fi 唤醒源,因此用户无需再配置唤醒源,同时系统主动发包时也可以唤醒。 Modem-sleep 模式是一个开关型的模式,调用 API 开启后一直自动运行,其工作流程十分简单,具体如下图。 @@ -121,7 +120,7 @@ Modem-sleep 模式是一个开关型的模式,调用 API 开启后一直自动 Modem-sleep 模式工作流程图 -根据上文的基本电流图,结合 Modem-sleep 模式的工作原理,以 Min Modem 模式(于 :ref:`Modem-sleep 模式配置` 中介绍)为例可得理想情况下电流变化图。 +根据上文的基本电流图,结合 Modem-sleep 模式的工作原理,以 Min Modem 模式(于 :ref:`Modem-sleep Mode Configuration` 中介绍)为例可得理想情况下电流变化图。 .. code-block:: text @@ -294,7 +293,7 @@ Deep-sleep 模式在 Wi-Fi 场景下与纯系统下基本相同,详情可以 - 丢失 beacon 时睡眠优化 (:ref:`CONFIG_ESP_WIFI_SLP_BEACON_LOST_OPT`) -.. _Modem-sleep 模式配置: +.. _Modem-sleep Mode Configuration: Modem-sleep 模式配置 +++++++++++++++++++++++ diff --git a/docs/zh_CN/api-reference/protocols/esp_crt_bundle.rst b/docs/zh_CN/api-reference/protocols/esp_crt_bundle.rst index a08e012377e5..2fdb0d4c4ad5 100644 --- a/docs/zh_CN/api-reference/protocols/esp_crt_bundle.rst +++ b/docs/zh_CN/api-reference/protocols/esp_crt_bundle.rst @@ -16,7 +16,7 @@ ESP x509 证书包 API 提供了一种简便的方法,帮助你安装自定义 生成证书包时,你需选择: -* 来自 Mozilla 的完整根证书包,包含超过 130 份证书。目前提供的证书包更新于 2024 年 3 月 11 日,星期一,15:25:27 (GMT)。 +* 来自 Mozilla 的完整根证书包,包含超过 130 份证书。目前提供的证书包更新于 2024 年 9 月 24 日,星期二,03:12:04 (GMT)。 * 一组预先筛选的常用根证书。其中仅包含约 41 份证书,但根据 SSL 证书颁发机构统计数据,其绝对使用率约达到 90%,市场覆盖率约达 99%。 此外,还可指定证书文件的路径或包含证书的目录,将其他证书添加到生成的证书包中。 diff --git a/docs/zh_CN/api-reference/storage/fatfs.rst b/docs/zh_CN/api-reference/storage/fatfs.rst index 65f281bd790c..54dfdf27c7b5 100644 --- a/docs/zh_CN/api-reference/storage/fatfs.rst +++ b/docs/zh_CN/api-reference/storage/fatfs.rst @@ -141,6 +141,7 @@ FatFs 分区生成器 相关示例请查看 :example:`storage/fatfsgen`。 + .. _fatfs-partition-analyzer: FatFs 分区分析器 diff --git a/docs/zh_CN/api-reference/system/ota.rst b/docs/zh_CN/api-reference/system/ota.rst index 53d0d1b67233..272f193ec44a 100644 --- a/docs/zh_CN/api-reference/system/ota.rst +++ b/docs/zh_CN/api-reference/system/ota.rst @@ -344,7 +344,9 @@ Python API 应用示例 ------------ -- :example:`system/ota/otatool` 演示了如何使用 OTA 工具执行读取、写入和擦除 OTA 分区、切换启动分区以及切换到出厂分区等操作。有关更多信息,请参考 :example_file:`system/ota/otatool/README.md`。 +- :example:`system/ota/native_ota_example` 演示了如何在 {IDF_TARGET_NAME} 上使用 `app_update` 组件的 API 进行原生空中升级 (OTA)。适用的 SoC 请参阅 :example_file:`system/ota/native_ota_example/README.md`。 + +- :example:`system/ota/otatool` 演示了如何使用 OTA 工具执行读取、写入和擦除 OTA 分区、切换启动分区以及切换到工厂分区等操作。详情请参阅 :example_file:`system/ota/otatool/README.md`。 API 参考 -------- diff --git a/docs/zh_CN/api-reference/system/pthread.rst b/docs/zh_CN/api-reference/system/pthread.rst index 218c647ec214..48af7bf9b891 100644 --- a/docs/zh_CN/api-reference/system/pthread.rst +++ b/docs/zh_CN/api-reference/system/pthread.rst @@ -1,5 +1,5 @@ -POSIX Thread -============ +POSIX 支持(包括 POSIX 线程支持) +================================= :link_to_translation:`en:[English]` @@ -12,7 +12,11 @@ ESP-IDF 基于 FreeRTOS,但提供了一系列与 POSIX 兼容的 API,以便 添加标准 ``pthread.h`` 头文件后可以在 ESP-IDF 中使用 pthread,该头文件已包含在工具链 libc 中。还有另一个专用于 ESP-IDF 的头文件 ``esp_pthread.h``,其中提供了一些额外的非 POSIX API,以便通过 pthread 使用一些 ESP-IDF 功能。 -C++ 标准库中的 ``std::thread``、``std::mutex``、``std::condition_variable`` 等功能也是通过 pthread(利用 GCC libstdc++)实现的。因此,本文档提到的限制条件也同样适用于 C++ 标准库中等效功能。 +除了 POSIX 线程,ESP-IDF 还支持 :ref:`POSIX 消息队列 `。 + +C++ 标准库中的 ``std::thread``、``std::mutex``、``std::condition_variable`` 等功能也是通过 pthread 和其他 POSIX API(利用 GCC libstdc++)实现的。因此,本文档提到的限制条件也同样适用于 C++ 标准库中的等效功能。 + +如果希望 ESP-IDF 支持某个尚未实现的 API,请 `在 GitHub 上发起功能请求 `_ 并提供详细信息。 RTOS 集成 ---------------- @@ -23,6 +27,10 @@ RTOS 集成 如果调用 C 标准库或 C++ sleep 函数,例如在 ``unistd.h`` 中定义的 ``usleep``,那么只有当睡眠时间超过 :ref:`一个 FreeRTOS 滴答周期 ` 时,任务才会阻塞并让出内核。如果时间较短,线程将处于忙等待状态,不会让步给另一个 RTOS 任务。 +.. note:: + + POSIX 的 ``errno`` 由 ESP-IDF 中的 newlib 提供。因此,配置项 ``configUSE_POSIX_ERRNO`` 并未被使用,应该保持禁用状态。 + 默认情况下,所有 pthread 具有相同的 RTOS 优先级,但可以通过调用 :ref:`ESP-IDF 提供的扩展 API ` 对此优先级进行更改。 标准功能 @@ -169,15 +177,65 @@ ESP-IDF 中实现了 POSIX 读写锁规范的以下 API 函数: ESP-IDF 中还有其他的线程本地存储选项,包括性能更高的选项。参见 :doc:`/api-guides/thread-local-storage`。 +.. _posix_message_queues: + +消息队列 +^^^^^^^^ + +消息队列的实现基于 `FreeRTOS-Plus-POSIX `_ 项目,ESP-IDF 的文件系统不提供消息队列,不支持消息优先级。 + +以下 POSIX 消息队列规范中的 API 函数已被实现: + +* `mq_open() `_ + + - 除了要符合 POSIX 规范,``name`` 参数还有以下额外限制: + - 必须以斜杠开头。 + - 长度不得超过 255 + 2 个字符(包括开头的斜杠,除去终止的空字符)。但 ``name`` 的内存是在内部动态分配的,所以名称越短,消耗的内存越少。 + - ``mode`` 参数未实现且被忽略。 + - 支持的 ``oflags``:``O_RDWR``、``O_CREAT``、``O_EXCL`` 和 ``O_NONBLOCK``。 + +* `mq_close() `_ +* `mq_unlink() `_ +* `mq_receive() `_ + + - 不支持消息优先级,因此 ``msg_prio`` 未被使用。 + +* `mq_timedreceive() `_ + + - 不支持消息优先级,因此 ``msg_prio`` 未被使用。 + +* `mq_send() `_ + + - 不支持消息优先级,因此 ``msg_prio`` 无效。 + +* `mq_timedsend() `_ + + - 不支持消息优先级,因此 ``msg_prio`` 无效。 + +* `mq_getattr() `_ + +尚未实现 `mq_notify() `_ 和 `mq_setattr() `_。 + +构建 +.... + +要使用 POSIX 消息队列 API,请在组件的 ``CMakeLists.txt`` 文件中添加 ``rt`` 作为依赖项。 + +.. note:: + + 请注意,如果曾在其他 FreeRTOS 项目中使用过 `FreeRTOS-Plus-POSIX `_,则 IDF 中的包含路径是 POSIX 风格的。因此,应用程序应直接包含 ``mqueue.h``,而不是使用子目录来包含 ``FreeRTOS_POSIX/mqueue.h``。 + 未实现 API --------------- ``pthread.h`` 头文件是一个标准头文件,包含了在 ESP-IDF 中未实现的额外 API 和功能,包括: -* 如果调用 ``pthread_cancel()``,返回 ``ENOSYS``。 -* ``pthread_condattr_init()`` 如果被调用,返回 ``ENOSYS``。 +* 若调用 ``pthread_cancel()``,则返回 ``ENOSYS``。 +* 若调用 ``pthread_condattr_init()``,则返回 ``ENOSYS``。 +* 若调用 `mq_notify() `_,则返回 ``ENOSYS``。 +* 若调用 `mq_setattr() `_,则返回 ``ENOSYS``。 -其他未列出的 pthread 函数未在 ESP-IDF 中实现,如果从 ESP-IDF 应用程序中直接引用,将产生编译器错误或链接器错误。如果希望 ESP-IDF 支持某个尚未实现的 API,请 `在 GitHub 上发起功能请求 `_ 并提供详细信息。 +其他未列出的 pthread 函数未在 ESP-IDF 中实现,如果从 ESP-IDF 应用程序中直接引用,将产生编译器错误或链接器错误。 .. _esp-pthread: From 757fa4d72c3ea7827fcedd1ed2a1724371a037f9 Mon Sep 17 00:00:00 2001 From: renpeiying Date: Fri, 27 Sep 2024 17:16:23 +0800 Subject: [PATCH 027/365] docs: Update Chinese translation for docs --- docs/en/api-guides/tools/qemu.rst | 2 +- docs/zh_CN/api-guides/tools/qemu.rst | 30 +++++++++++++++++-- ...security-features-enablement-workflows.rst | 5 ++++ docs/zh_CN/security/security.rst | 6 ++++ 4 files changed, 40 insertions(+), 3 deletions(-) diff --git a/docs/en/api-guides/tools/qemu.rst b/docs/en/api-guides/tools/qemu.rst index d5b2649919e7..3160bab91b48 100644 --- a/docs/en/api-guides/tools/qemu.rst +++ b/docs/en/api-guides/tools/qemu.rst @@ -153,5 +153,5 @@ By default, the values of eFuses are read from and written to the ``qemu_efuse.b Emulating Secure Boot ~~~~~~~~~~~~~~~~~~~~~ -QEMU supports emulation of secure boot v2 scheme. Please keep :ref:`CONFIG_SECURE_BOOT_FLASH_BOOTLOADER_DEFAULT` enabled to include signed bootloader image into the qemu image artifact. +QEMU supports emulation of secure boot v2 scheme. Please keep :ref:`CONFIG_SECURE_BOOT_FLASH_BOOTLOADER_DEFAULT` enabled to include signed bootloader image into the QEMU image artifact. diff --git a/docs/zh_CN/api-guides/tools/qemu.rst b/docs/zh_CN/api-guides/tools/qemu.rst index 14f962dbcfef..87ba8729a27c 100644 --- a/docs/zh_CN/api-guides/tools/qemu.rst +++ b/docs/zh_CN/api-guides/tools/qemu.rst @@ -1,6 +1,8 @@ QEMU 模拟器 =========== +{IDF_TARGET_CRYPT_CNT:default="SPI_BOOT_CRYPT_CNT",esp32="FLASH_CRYPT_CNT"} + :link_to_translation:`en:[English]` 乐鑫维护了一个 QEMU 模拟器的 `分支 `_,支持 {IDF_TARGET_NAME}。这个分支实现了对 {IDF_TARGET_NAME} 的 CPU、内存和多个外设的模拟。更多有关 {IDF_TARGET_NAME} 的 QEMU 的信息,请参阅 `QEMU README 文档 `_。 @@ -119,13 +121,37 @@ QEMU 支持 eFuse 的仿真,可用来测试安全启动和 flash 加密等与 使用 :doc:`idf.py` eFuse 相关命令来编程 eFuse。当这些命令与 ``qemu`` 命令一起运行时,eFuse 会在 QEMU 中编程,并且 ``qemu_efuse.bin`` 文件会更新。例如, +.. only:: not SOC_FLASH_ENCRYPTION_XTS_AES + + .. code-block:: console + + idf.py qemu efuse-burn {IDF_TARGET_CRYPT_CNT} 1 + idf.py qemu efuse-burn-key flash_encryption my_flash_encryption_key.bin + +.. only:: SOC_FLASH_ENCRYPTION_XTS_AES + + .. code-block:: console + + idf.py qemu efuse-burn {IDF_TARGET_CRYPT_CNT} 1 + idf.py qemu efuse-burn-key BLOCK my_flash_encryption_key.bin KEYPURPOSE + + 有关 ``BLOCK`` 和 ``KEYPURPOSE`` 的详细信息,请参阅 :doc:`../../security/flash-encryption` 指南。 + +如需导出 eFuse 概要,使用以下命令: + .. code-block:: console - idf.py qemu efuse-burn FLASH_CRYPT_CNT 1 + idf.py qemu efuse-summary 默认情况下,eFuse 的值从编译文件夹里的 ``qemu_efuse.bin`` 文件中读取和写入。也可以使用 ``--efuse-file`` 选项指定不同的文件。例如, .. code-block:: console - idf.py qemu --efuse-file my_efuse.bin efuse-burn FLASH_CRYPT_CNT 1 + idf.py qemu --efuse-file my_efuse.bin efuse-burn {IDF_TARGET_CRYPT_CNT} 1 idf.py qemu --efuse-file my_efuse.bin monitor + +模拟安全启动 +~~~~~~~~~~~~~ + +QEMU 支持模拟安全启动 v2 机制。请保持 :ref:`CONFIG_SECURE_BOOT_FLASH_BOOTLOADER_DEFAULT` 处于启用状态,将签名的引导加载程序镜像嵌入到 QEMU 的镜像文件中。 + diff --git a/docs/zh_CN/security/security-features-enablement-workflows.rst b/docs/zh_CN/security/security-features-enablement-workflows.rst index d7f9a8a3ddf4..56a743b4d378 100644 --- a/docs/zh_CN/security/security-features-enablement-workflows.rst +++ b/docs/zh_CN/security/security-features-enablement-workflows.rst @@ -18,6 +18,11 @@ 这份指南介绍了一系列工作流程,从而在外部主机的协助下启用设备的安全功能。这些工作流程分为多个阶段,每个阶段都会在主机上生成签名/加密密钥,从而在发生电力或其他故障时,提高恢复几率。此外,在主机的协助下,这些流程将加快整体配置过程(例如,在主机上加密固件要比在设备上加密更快)。 +.. only:: TARGET_SUPPORT_QEMU + + .. important:: + + 可以在 :doc:`../api-guides/tools/qemu` 中虚拟测试 {IDF_TARGET_NAME} 目标芯片的安全功能。安全工作流程建立后,便可在真实硬件上继续操作。 目标 ---- diff --git a/docs/zh_CN/security/security.rst b/docs/zh_CN/security/security.rst index 455c79723f77..104c38b7fbcb 100644 --- a/docs/zh_CN/security/security.rst +++ b/docs/zh_CN/security/security.rst @@ -13,6 +13,12 @@ 在本指南中,最常用的命令形式为 ``idf.py secure-``,这是对应 ``espsecure.py `` 的封装。基于 ``idf.py`` 的命令能提供更好的用户体验,但与基于 ``espsecure.py`` 的命令相比,可能会损失一部分高级功能。 +.. only:: TARGET_SUPPORT_QEMU + + .. important:: + + 可以在 :doc:`../api-guides/tools/qemu` 中虚拟测试 {IDF_TARGET_NAME} 目标芯片的安全功能。安全工作流程建立后,便可在真实硬件上继续操作。 + 目标 ---- From 397fdb56fb80807a21e2800bc44f356a0ab6de07 Mon Sep 17 00:00:00 2001 From: Aleksei Apaseev Date: Wed, 18 Sep 2024 11:16:04 +0800 Subject: [PATCH 028/365] ci: ensure binary size artifacts are uploaded in Build Stage Child pipeline via artifacts_handler script. - Updated dynamic pipeline to include artifact upload commands for size reports, allowing easier parsing on the CI dashboard. - Each job now handles its own size.json file, ensuring independent access for better CI artifact management. --- .../dynamic_pipelines/scripts/child_pipeline_build_apps.py | 2 +- tools/ci/dynamic_pipelines/templates/.dynamic_jobs.yml | 1 + tools/ci/idf_ci/uploader.py | 7 +++---- tools/ci/idf_pytest/constants.py | 1 + tools/ci/idf_pytest/script.py | 3 ++- 5 files changed, 8 insertions(+), 6 deletions(-) diff --git a/tools/ci/dynamic_pipelines/scripts/child_pipeline_build_apps.py b/tools/ci/dynamic_pipelines/scripts/child_pipeline_build_apps.py index 1f31deb539c3..a76631f70250 100644 --- a/tools/ci/dynamic_pipelines/scripts/child_pipeline_build_apps.py +++ b/tools/ci/dynamic_pipelines/scripts/child_pipeline_build_apps.py @@ -66,7 +66,7 @@ check_app_dependencies=True, parallel_count=args.parallel_count, parallel_index=args.parallel_index, - collect_size_info='size_info_@p.txt', + collect_size_info='size_info.txt', collect_app_info=args.collect_app_info, junitxml=args.junitxml, copy_sdkconfig=True, diff --git a/tools/ci/dynamic_pipelines/templates/.dynamic_jobs.yml b/tools/ci/dynamic_pipelines/templates/.dynamic_jobs.yml index 431664867235..3eff163539f1 100644 --- a/tools/ci/dynamic_pipelines/templates/.dynamic_jobs.yml +++ b/tools/ci/dynamic_pipelines/templates/.dynamic_jobs.yml @@ -37,6 +37,7 @@ --collect-app-info "list_job_${CI_JOB_NAME_SLUG}.txt" --modified-components ${MR_MODIFIED_COMPONENTS} --junitxml "build_summary_${CI_JOB_NAME_SLUG}.xml" + - run_cmd python tools/ci/artifacts_handler.py upload --type size_reports .dynamic_target_test_template: extends: diff --git a/tools/ci/idf_ci/uploader.py b/tools/ci/idf_ci/uploader.py index 8310c3e11a7e..8ecff4ccbcf9 100644 --- a/tools/ci/idf_ci/uploader.py +++ b/tools/ci/idf_ci/uploader.py @@ -16,6 +16,7 @@ from idf_build_apps.utils import rmdir from idf_ci_utils import IDF_PATH from idf_pytest.constants import DEFAULT_BUILD_LOG_FILENAME +from idf_pytest.constants import DEFAULT_SIZE_JSON_FILENAME class AppDownloader: @@ -60,9 +61,6 @@ class AppUploader(AppDownloader): ArtifactType.LOGS: [ DEFAULT_BUILD_LOG_FILENAME, ], - ArtifactType.SIZE_REPORTS: [ - 'size.json', - ], } def __init__(self, pipeline_id: t.Union[str, int, None] = None) -> None: @@ -108,12 +106,13 @@ def upload_app(self, app_build_path: str, artifact_type: t.Optional[ArtifactType else: upload_types = [artifact_type] + # Upload of size.json files is handled by GitLab CI via "artifacts_handler.py" script. print(f'Uploading {app_build_path} {[k.value for k in upload_types]} to minio server') for upload_type in upload_types: uploaded |= self._upload_app(app_build_path, upload_type) if uploaded: - rmdir(app_build_path, exclude_file_patterns=DEFAULT_BUILD_LOG_FILENAME) + rmdir(app_build_path, exclude_file_patterns=[DEFAULT_BUILD_LOG_FILENAME, DEFAULT_SIZE_JSON_FILENAME]) def _download_app(self, app_build_path: str, artifact_type: ArtifactType) -> None: app_path, build_dir = os.path.split(app_build_path) diff --git a/tools/ci/idf_pytest/constants.py b/tools/ci/idf_pytest/constants.py index 5039f615f155..dadb57fd8dcc 100644 --- a/tools/ci/idf_pytest/constants.py +++ b/tools/ci/idf_pytest/constants.py @@ -153,6 +153,7 @@ 'tools/ci/ignore_build_warnings.txt', ] DEFAULT_BUILD_LOG_FILENAME = 'build_log.txt' +DEFAULT_SIZE_JSON_FILENAME = 'size.json' class CollectMode(str, Enum): diff --git a/tools/ci/idf_pytest/script.py b/tools/ci/idf_pytest/script.py index be99053ef66d..0ff8b5e14fe1 100644 --- a/tools/ci/idf_pytest/script.py +++ b/tools/ci/idf_pytest/script.py @@ -25,6 +25,7 @@ from .constants import CollectMode from .constants import DEFAULT_BUILD_LOG_FILENAME from .constants import DEFAULT_CONFIG_RULES_STR +from .constants import DEFAULT_SIZE_JSON_FILENAME from .constants import PytestCase from .plugin import IdfPytestEmbedded @@ -162,7 +163,7 @@ def get_all_apps( build_dir='build_@t_@w', config_rules_str=config_rules_str or DEFAULT_CONFIG_RULES_STR, build_log_filename=DEFAULT_BUILD_LOG_FILENAME, - size_json_filename='size.json', + size_json_filename=DEFAULT_SIZE_JSON_FILENAME, check_warnings=True, manifest_rootpath=IDF_PATH, compare_manifest_sha_filepath=compare_manifest_sha_filepath, From 9ec9071876d9576761b91913ab20fdef6be70d37 Mon Sep 17 00:00:00 2001 From: muhaidong Date: Sun, 29 Sep 2024 19:11:34 +0800 Subject: [PATCH 029/365] fix(wifi): fixed association refused temporarily lead auth timeout issue --- components/esp_wifi/lib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/esp_wifi/lib b/components/esp_wifi/lib index 43c2ddb15a1f..e622b6256d13 160000 --- a/components/esp_wifi/lib +++ b/components/esp_wifi/lib @@ -1 +1 @@ -Subproject commit 43c2ddb15a1f4d026f20f98249ca63885630c813 +Subproject commit e622b6256d1367171556ea2f87aef0e6dd57087c From d918aa3ebd7d18b79d4b7f9a9cfe94ae20b764a3 Mon Sep 17 00:00:00 2001 From: muhaidong Date: Wed, 22 Nov 2023 11:38:37 +0800 Subject: [PATCH 030/365] fix(wifi): fix miss internal wapi deinit issue --- components/wpa_supplicant/esp_supplicant/src/esp_wpa_main.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/components/wpa_supplicant/esp_supplicant/src/esp_wpa_main.c b/components/wpa_supplicant/esp_supplicant/src/esp_wpa_main.c index 067e09705cd6..6de23146428d 100644 --- a/components/wpa_supplicant/esp_supplicant/src/esp_wpa_main.c +++ b/components/wpa_supplicant/esp_supplicant/src/esp_wpa_main.c @@ -504,6 +504,9 @@ int esp_supplicant_deinit(void) esp_supplicant_unset_all_appie(); eloop_destroy(); wpa_cb = NULL; +#if CONFIG_ESP_WIFI_WAPI_PSK + esp_wifi_internal_wapi_deinit(); +#endif return esp_wifi_unregister_wpa_cb_internal(); } From 3169af73412891ceeb5c6346d016ffdda7b0cb92 Mon Sep 17 00:00:00 2001 From: Linda Date: Sun, 29 Sep 2024 14:56:10 +0800 Subject: [PATCH 031/365] docs: update front page for esp32-c5 and esp32-c61 --- docs/docs_not_updated/esp32c5.txt | 20 +------------------- docs/docs_not_updated/esp32c61.txt | 12 +----------- docs/en/about.rst | 12 ++++++++++++ docs/zh_CN/about.rst | 12 ++++++++++++ 4 files changed, 26 insertions(+), 30 deletions(-) diff --git a/docs/docs_not_updated/esp32c5.txt b/docs/docs_not_updated/esp32c5.txt index 0fdd62245da8..78e9f9ee899b 100644 --- a/docs/docs_not_updated/esp32c5.txt +++ b/docs/docs_not_updated/esp32c5.txt @@ -1,11 +1,3 @@ -contribute/esp-idf-tests-with-pytest.rst -contribute/contributor-agreement.rst -contribute/documenting-code.rst -contribute/creating-examples.rst -contribute/style-guide.rst -contribute/copyright-guide.rst -contribute/install-pre-commit-hook.rst -contribute/index.rst api-guides/low-power-mode.rst api-guides/RF_calibration.rst api-guides/deep-sleep-stub.rst @@ -24,14 +16,6 @@ api-guides/esp-ble-mesh/ble-mesh-architecture.rst api-guides/esp-ble-mesh/ble-mesh-faq.rst api-guides/wifi-security.rst api-guides/openthread.rst -third-party-tools/platformio.rst -third-party-tools/clion.rst -third-party-tools/visualgdb.rst -COPYRIGHT.rst -libraries-and-frameworks/libs-frameworks.rst -libraries-and-frameworks/index.rst -libraries-and-frameworks/cloud-frameworks.rst -versions.rst api-reference/template.rst api-reference/storage/vfs.rst api-reference/storage/spiffs.rst @@ -102,8 +86,6 @@ api-reference/bluetooth/classic_bt.rst api-reference/index.rst api-reference/protocols/esp_serial_slave_link.rst api-reference/protocols/esp_crt_bundle.rst -about.rst -resources.rst get-started/establish-serial-connection.rst get-started/linux-macos-setup.rst get-started/linux-macos-start-project.rst @@ -113,4 +95,4 @@ get-started/flashing-troubleshooting.rst get-started/windows-start-project.rst get-started/index.rst get-started/windows-setup-update.rst -index.rst +hw-reference/index.rst diff --git a/docs/docs_not_updated/esp32c61.txt b/docs/docs_not_updated/esp32c61.txt index 9f53a7c93235..444a1b4d36ca 100644 --- a/docs/docs_not_updated/esp32c61.txt +++ b/docs/docs_not_updated/esp32c61.txt @@ -28,14 +28,6 @@ api-guides/esp-ble-mesh/ble-mesh-faq.rst api-guides/wifi-security.rst api-guides/index.rst api-guides/openthread.rst -third-party-tools/platformio.rst -third-party-tools/clion.rst -third-party-tools/visualgdb.rst -COPYRIGHT.rst -libraries-and-frameworks/libs-frameworks.rst -libraries-and-frameworks/index.rst -libraries-and-frameworks/cloud-frameworks.rst -versions.rst api-reference/template.rst api-reference/storage/vfs.rst api-reference/storage/spiffs.rst @@ -176,8 +168,6 @@ api-reference/protocols/modbus.rst api-reference/protocols/mdns.rst api-reference/protocols/index.rst api-reference/protocols/asio.rst -about.rst -resources.rst get-started/establish-serial-connection.rst get-started/linux-macos-setup.rst get-started/linux-macos-start-project.rst @@ -187,4 +177,4 @@ get-started/flashing-troubleshooting.rst get-started/windows-start-project.rst get-started/index.rst get-started/windows-setup-update.rst -index.rst +hw-reference/index.rst diff --git a/docs/en/about.rst b/docs/en/about.rst index 8179b8f2ca98..b51032cb09ee 100644 --- a/docs/en/about.rst +++ b/docs/en/about.rst @@ -30,12 +30,24 @@ About The {IDF_TARGET_NAME} is a 2.4 GHz Wi-Fi Bluetooth Low Energy combo SoC, which integrates a 32-bit RISC-V RV32IMC single-core processor. +.. only:: esp32c5 + + This is documentation of `ESP-IDF `_, the framework to develop applications for {IDF_TARGET_NAME}. + + The {IDF_TARGET_NAME} is a 2.4 & 5 GHz dual-band Wi-Fi, Bluetooth Low Energy, and 802.15.4 Thread/Zigbee combo SoC, which integrates a 32-bit RISC-V RV32IMAC single-core processor. + .. only:: esp32c6 This is documentation of `ESP-IDF `_, the framework to develop applications for {IDF_TARGET_NAME}. The {IDF_TARGET_NAME} is a 2.4 GHz Wi-Fi, Bluetooth Low Energy, and 802.15.4 Thread/Zigbee combo SoC, which integrates a 32-bit RISC-V RV32IMAC single-core processor. +.. only:: esp32c61 + + This is documentation of `ESP-IDF `_, the framework to develop applications for {IDF_TARGET_NAME}. + + The {IDF_TARGET_NAME} is a 2.4 GHz Wi-Fi and Bluetooth Low Energy, which integrates a 32-bit RISC-V RV32IMAC single-core processor. + .. only:: esp32h2 This is documentation of `ESP-IDF `_, the framework to develop applications for {IDF_TARGET_NAME}. diff --git a/docs/zh_CN/about.rst b/docs/zh_CN/about.rst index e9b8aa3a37cc..80d668ed1370 100644 --- a/docs/zh_CN/about.rst +++ b/docs/zh_CN/about.rst @@ -30,12 +30,24 @@ {IDF_TARGET_NAME} 是一款支持 2.4 GHz Wi-Fi 和低功耗蓝牙的芯片,搭载 RISC-V RV32IMAC 32 位单核处理器。 +.. only:: esp32c5 + + 本指南为 {IDF_TARGET_NAME} 官方应用开发框架 `ESP-IDF `_ 的配套文档。 + + {IDF_TARGET_NAME} 是一款支持 2.4 & 5 GHz 双频 Wi-Fi、低功耗蓝牙和 802.15.4 Thread/Zigbee 的芯片,搭载 RISC-V RV32IMAC 32 位单核处理器。 + .. only:: esp32c6 本指南为 {IDF_TARGET_NAME} 官方应用开发框架 `ESP-IDF `_ 的配套文档。 {IDF_TARGET_NAME} 是一款支持 2.4 GHz Wi-Fi, 802.15.4 Thread/Zigbee 和低功耗蓝牙的芯片,搭载 RISC-V RV32IMAC 32 位单核处理器。 +.. only:: esp32c61 + + 本指南为 {IDF_TARGET_NAME} 官方应用开发框架 `ESP-IDF `_ 的配套文档。 + + {IDF_TARGET_NAME} 是一款支持 2.4 GHz Wi-Fi 和低功耗蓝牙的芯片,搭载 RISC-V RV32IMAC 32 位单核处理器。 + .. only:: esp32h2 本指南为 {IDF_TARGET_NAME} 官方应用开发框架 `ESP-IDF `_ 的配套文档。 From d618d1d934e1d54e57adfce0320abcf0e10d6392 Mon Sep 17 00:00:00 2001 From: "wangtao@espressif.com" Date: Fri, 27 Sep 2024 18:39:57 +0800 Subject: [PATCH 032/365] fix(wifi): fix ampdu to normal cause free buffer twice issue --- components/esp_rom/esp32c2/ld/esp32c2.rom.ld | 2 +- components/esp_rom/esp32c3/ld/esp32c3.rom.ld | 2 +- components/esp_rom/esp32c5/ld/esp32c5.rom.pp.ld | 2 +- components/esp_rom/esp32c61/ld/esp32c61.rom.pp.ld | 2 +- components/esp_rom/esp32s3/ld/esp32s3.rom.ld | 2 +- components/esp_wifi/lib | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/components/esp_rom/esp32c2/ld/esp32c2.rom.ld b/components/esp_rom/esp32c2/ld/esp32c2.rom.ld index 166dadf4ee7d..5aad6135888f 100644 --- a/components/esp_rom/esp32c2/ld/esp32c2.rom.ld +++ b/components/esp_rom/esp32c2/ld/esp32c2.rom.ld @@ -1457,7 +1457,7 @@ ppGetTxframe = 0x40001bf8; ppMapTxQueue = 0x40001bfc; ppProcTxSecFrame = 0x40001c00; ppProcessRxPktHdr = 0x40001c04; -ppProcessTxQ = 0x40001c08; +/*ppProcessTxQ = 0x40001c08;*/ ppRecordBarRRC = 0x40001c0c; lmacRequestTxopQueue = 0x40001c10; lmacReleaseTxopQueue = 0x40001c14; diff --git a/components/esp_rom/esp32c3/ld/esp32c3.rom.ld b/components/esp_rom/esp32c3/ld/esp32c3.rom.ld index 793e7d8d9a36..559f5cade6e7 100644 --- a/components/esp_rom/esp32c3/ld/esp32c3.rom.ld +++ b/components/esp_rom/esp32c3/ld/esp32c3.rom.ld @@ -1571,7 +1571,7 @@ ppEnqueueTxDone = 0x400016cc; ppGetTxQFirstAvail_Locked = 0x400016d0; ppGetTxframe = 0x400016d4; ppProcessRxPktHdr = 0x400016e0; -ppProcessTxQ = 0x400016e4; +/*ppProcessTxQ = 0x400016e4;*/ ppRecordBarRRC = 0x400016e8; lmacRequestTxopQueue = 0x400016ec; lmacReleaseTxopQueue = 0x400016f0; diff --git a/components/esp_rom/esp32c5/ld/esp32c5.rom.pp.ld b/components/esp_rom/esp32c5/ld/esp32c5.rom.pp.ld index a72cb8e5b758..605063d1c689 100644 --- a/components/esp_rom/esp32c5/ld/esp32c5.rom.pp.ld +++ b/components/esp_rom/esp32c5/ld/esp32c5.rom.pp.ld @@ -180,7 +180,7 @@ ppGetTxframe = 0x40000e60; ppMapTxQueue = 0x40000e64; ppProcTxSecFrame = 0x40000e68; ppProcessRxPktHdr = 0x40000e6c; -ppProcessTxQ = 0x40000e70; +/*ppProcessTxQ = 0x40000e70;*/ ppRecordBarRRC = 0x40000e74; ppRecycleAmpdu = 0x40000e78; ppRecycleRxPkt = 0x40000e7c; diff --git a/components/esp_rom/esp32c61/ld/esp32c61.rom.pp.ld b/components/esp_rom/esp32c61/ld/esp32c61.rom.pp.ld index f23dfdec23ea..54f0a48c42b3 100644 --- a/components/esp_rom/esp32c61/ld/esp32c61.rom.pp.ld +++ b/components/esp_rom/esp32c61/ld/esp32c61.rom.pp.ld @@ -184,7 +184,7 @@ ppGetTxframe = 0x40000dd8; ppMapTxQueue = 0x40000ddc; ppProcTxSecFrame = 0x40000de0; ppProcessRxPktHdr = 0x40000de4; -ppProcessTxQ = 0x40000de8; +/*ppProcessTxQ = 0x40000de8;*/ ppRecordBarRRC = 0x40000dec; ppRecycleAmpdu = 0x40000df0; ppRecycleRxPkt = 0x40000df4; diff --git a/components/esp_rom/esp32s3/ld/esp32s3.rom.ld b/components/esp_rom/esp32s3/ld/esp32s3.rom.ld index e60065d6b9df..a8818575a66e 100644 --- a/components/esp_rom/esp32s3/ld/esp32s3.rom.ld +++ b/components/esp_rom/esp32s3/ld/esp32s3.rom.ld @@ -1851,7 +1851,7 @@ ppGetTxQFirstAvail_Locked = 0x400055b0; ppGetTxframe = 0x400055bc; /*ppMapTxQueue = 0x400055c8;*/ ppProcessRxPktHdr = 0x400055e0; -ppProcessTxQ = 0x400055ec; +/*ppProcessTxQ = 0x400055ec;*/ ppRecordBarRRC = 0x400055f8; lmacRequestTxopQueue = 0x40005604; lmacReleaseTxopQueue = 0x40005610; diff --git a/components/esp_wifi/lib b/components/esp_wifi/lib index e622b6256d13..dde71a69c525 160000 --- a/components/esp_wifi/lib +++ b/components/esp_wifi/lib @@ -1 +1 @@ -Subproject commit e622b6256d1367171556ea2f87aef0e6dd57087c +Subproject commit dde71a69c525d0a69989eca620557536b2773231 From 5af61242d24d796013109a0f6f4b06e6f6e1a883 Mon Sep 17 00:00:00 2001 From: David Cermak Date: Mon, 10 Jun 2024 10:06:22 +0200 Subject: [PATCH 033/365] feat(wifi): Document WiFi expansion on wifi-less chips --- docs/en/api-guides/index.rst | 1 + docs/en/api-guides/wifi-expansion.rst | 27 +++++++++++++++++++ .../libs-frameworks.rst | 2 ++ docs/zh_CN/api-guides/index.rst | 1 + docs/zh_CN/api-guides/wifi-expansion.rst | 1 + 5 files changed, 32 insertions(+) create mode 100644 docs/en/api-guides/wifi-expansion.rst create mode 100644 docs/zh_CN/api-guides/wifi-expansion.rst diff --git a/docs/en/api-guides/index.rst b/docs/en/api-guides/index.rst index a1d261fa7817..26a46a389ec9 100644 --- a/docs/en/api-guides/index.rst +++ b/docs/en/api-guides/index.rst @@ -47,4 +47,5 @@ API Guides :SOC_USB_SERIAL_JTAG_SUPPORTED: usb-serial-jtag-console :SOC_WIFI_SUPPORTED: wifi :SOC_WIFI_SUPPORTED: wifi-security + wifi-expansion :SOC_WIFI_SUPPORTED or SOC_BT_SUPPORTED or SOC_IEEE802154_SUPPORTED: phy diff --git a/docs/en/api-guides/wifi-expansion.rst b/docs/en/api-guides/wifi-expansion.rst new file mode 100644 index 000000000000..8c11b7704ba5 --- /dev/null +++ b/docs/en/api-guides/wifi-expansion.rst @@ -0,0 +1,27 @@ +Wi-Fi Expansion +=============== + +:link_to_translation:`zh_CN:[中文]` + +.. only:: not SOC_WIFI_SUPPORTED + + {IDF_TARGET_NAME} does not support Wi-Fi functionality natively, but it is possible to use the same Wi-Fi API and features using Wi-Fi expansion. + +.. only:: SOC_WIFI_SUPPORTED + + {IDF_TARGET_NAME} does support Wi-Fi functionality natively, please refer to :doc:`wifi` documentation. Even though Wi-Fi is supported on {IDF_TARGET_NAME}, it is possible to expand it and use another instance of Wi-Fi expansion interfaces using esp_wifi_remote `_ component. + + +The principle of Wi-Fi Expansion operation is to add another ESP32 series, Wi-Fi capable, target connected to the {IDF_TARGET_NAME} in a pre-defined way. Your project could then include the `esp_wifi_remote `_ component using: + +.. code:: bash + + idf.py add-dependency esp_wifi_remote + + +Please follow the instructions described in the `esp_wifi_remote documentation `_. + + +.. only:: not SOC_WIFI_SUPPORTED + + To explore the Wi-Fi Expansion functionality on {IDF_TARGET_NAME}, you can get started with this example: :idf_file:`examples/protocols/mqtt/tcp/README.md` and choose Wi-Fi connection in the project configuration menu. diff --git a/docs/en/libraries-and-frameworks/libs-frameworks.rst b/docs/en/libraries-and-frameworks/libs-frameworks.rst index 5aa8fe3d2c3c..0793fd7726f0 100644 --- a/docs/en/libraries-and-frameworks/libs-frameworks.rst +++ b/docs/en/libraries-and-frameworks/libs-frameworks.rst @@ -96,6 +96,8 @@ ESP-Protocols components: * `asio `_ is a cross-platform C++ library, see https://think-async.com/Asio/. It provides a consistent asynchronous model using a modern C++ approach. See the `asio documentation `_. +* `esp_wifi_remote `_ is a Wi-Fi communication library that provides standard Wi-Fi API and networking of an external, Wi-Fi capable ESP32 chipset connected to the target device via a specified transport interface. See the :doc:`../api-guides/wifi-expansion`. + ESP-BSP ------- diff --git a/docs/zh_CN/api-guides/index.rst b/docs/zh_CN/api-guides/index.rst index c999a822afe0..7dbe29957f22 100644 --- a/docs/zh_CN/api-guides/index.rst +++ b/docs/zh_CN/api-guides/index.rst @@ -47,4 +47,5 @@ API 指南 :SOC_USB_SERIAL_JTAG_SUPPORTED: usb-serial-jtag-console :SOC_WIFI_SUPPORTED: wifi :SOC_WIFI_SUPPORTED: wifi-security + wifi-expansion :SOC_WIFI_SUPPORTED or SOC_BT_SUPPORTED or SOC_IEEE802154_SUPPORTED: phy diff --git a/docs/zh_CN/api-guides/wifi-expansion.rst b/docs/zh_CN/api-guides/wifi-expansion.rst new file mode 100644 index 000000000000..b4430caa4f57 --- /dev/null +++ b/docs/zh_CN/api-guides/wifi-expansion.rst @@ -0,0 +1 @@ +.. include:: ../../en/api-guides/wifi-expansion.rst From 8e532baf1e900b45c37fd909c3c89d3dc829f9a8 Mon Sep 17 00:00:00 2001 From: Erhan Kurubas Date: Fri, 13 Sep 2024 11:37:37 +0300 Subject: [PATCH 034/365] docs(jtag): update OpenOCD related sections --- components/xtensa/trax/test/gdbinit | 2 +- docs/en/api-guides/jtag-debugging/esp32.inc | 2 +- docs/en/api-guides/jtag-debugging/esp32p4.inc | 27 +++++++++++-------- docs/en/api-guides/jtag-debugging/index.rst | 2 ++ .../jtag-debugging/tips-and-quirks.rst | 4 ++- .../zh_CN/api-guides/jtag-debugging/esp32.inc | 2 +- .../api-guides/jtag-debugging/esp32p4.inc | 27 +++++++++++-------- .../zh_CN/api-guides/jtag-debugging/index.rst | 2 ++ .../jtag-debugging/tips-and-quirks.rst | 2 ++ 9 files changed, 44 insertions(+), 26 deletions(-) diff --git a/components/xtensa/trax/test/gdbinit b/components/xtensa/trax/test/gdbinit index 05496f4c6ebf..5f589bdcd563 100644 --- a/components/xtensa/trax/test/gdbinit +++ b/components/xtensa/trax/test/gdbinit @@ -3,7 +3,7 @@ set confirm off # Start OpenOCD and run to the entry function file test.elf -target remote | openocd -c "log_output openocd.log; set ESP_RTOS none; set ESP_FLASH_SIZE 0; set ESP32_ONLYCPU 1" -f board/esp32-ethernet-kit-3.3v.cfg -c "gdb_port pipe; init; reset halt" +target remote | openocd -c "log_output openocd.log; set ESP_RTOS none; set ESP_FLASH_SIZE 0; set ESP_ONLYCPU 1" -f board/esp32-ethernet-kit-3.3v.cfg -c "gdb_port pipe; init; reset halt" thb entry c diff --git a/docs/en/api-guides/jtag-debugging/esp32.inc b/docs/en/api-guides/jtag-debugging/esp32.inc index d8671ea52915..c83adba3b48e 100644 --- a/docs/en/api-guides/jtag-debugging/esp32.inc +++ b/docs/en/api-guides/jtag-debugging/esp32.inc @@ -112,7 +112,7 @@ - Description * - ``ESP32_FLASH_VOLTAGE`` - When using 1.8 V flash ESP32 based modules, set this variable to ``1.8``. Refer to :ref:`jtag-debugging-tip-code-flash-voltage`. - * - ``ESP32_ONLYCPU`` + * - ``ESP_ONLYCPU`` - For multi-core targets, can be set to ``1`` to only enable single core debugging. --- diff --git a/docs/en/api-guides/jtag-debugging/esp32p4.inc b/docs/en/api-guides/jtag-debugging/esp32p4.inc index 88e2a7616c50..ea9b7d8140de 100644 --- a/docs/en/api-guides/jtag-debugging/esp32p4.inc +++ b/docs/en/api-guides/jtag-debugging/esp32p4.inc @@ -29,20 +29,25 @@ Info : only one transport option; autoselecting 'jtag' Info : esp_usb_jtag: VID set to 0x303a and PID to 0x1001 Info : esp_usb_jtag: capabilities descriptor set to 0x2000 - adapter speed: 40000 kHz - Info : esp_usb_jtag: serial (60:55:F9:F8:80:5C) + Info : Listening on port 6666 for tcl connections + Info : Listening on port 4444 for telnet connections + Info : esp_usb_jtag: serial (60:55:F9:F9:04:AD) Info : esp_usb_jtag: Device found. Base speed 24000KHz, div range 1 to 255 Info : clock speed 24000 kHz - Info : JTAG tap: esp32p4.lp.cpu tap/device found: 0x00012c25 (mfg: 0x612 (Espressif Systems), part: 0x0012, ver: 0x0) - Info : JTAG tap: esp32p4.hp.cpu tap/device found: 0x00012c25 (mfg: 0x612 (Espressif Systems), part: 0x0012, ver: 0x0) - Info : [esp32p4.hp.cpu] datacount=1 progbufsize=2 - Info : [esp32p4.hp.cpu] Examined RISC-V core; found 2 harts - Info : [esp32p4.hp.cpu] XLEN=32, misa=0x40901125 - Info : [esp32p4.hp.cpu] Examination succeed - Info : starting gdb server for esp32p4.hp.cpu on 3333 + Info : JTAG tap: esp32p4.tap0 tap/device found: 0x00012c25 (mfg: 0x612 (Espressif Systems), part: 0x0012, ver: 0x0) + Info : JTAG tap: esp32p4.tap1 tap/device found: 0x00012c25 (mfg: 0x612 (Espressif Systems), part: 0x0012, ver: 0x0) + Info : [esp32p4.hp.cpu0] datacount=1 progbufsize=2 + Info : [esp32p4.hp.cpu0] Core 0 made part of halt group 1. + Info : [esp32p4.hp.cpu0] Examined RISC-V core; found 2 harts + Info : [esp32p4.hp.cpu0] XLEN=32, misa=0x40901125 + Info : [esp32p4.hp.cpu0] Examination succeed + Info : [esp32p4.hp.cpu1] datacount=1 progbufsize=2 + Info : [esp32p4.hp.cpu1] Core 1 made part of halt group 1. + Info : [esp32p4.hp.cpu1] Examined RISC-V core; found 2 harts + Info : [esp32p4.hp.cpu1] XLEN=32, misa=0x40901125 + Info : [esp32p4.hp.cpu1] Examination succeed + Info : [esp32p4.hp.cpu0] starting gdb server on 3333 Info : Listening on port 3333 for gdb connections - Info : Listening on port 6666 for tcl connections - Info : Listening on port 4444 for telnet connections .. |run-openocd-cfg-file-err| replace:: ``Can't find board/esp32p4-builtin.cfg`` diff --git a/docs/en/api-guides/jtag-debugging/index.rst b/docs/en/api-guides/jtag-debugging/index.rst index 0ebdfb5dbd9c..f27904209b2d 100644 --- a/docs/en/api-guides/jtag-debugging/index.rst +++ b/docs/en/api-guides/jtag-debugging/index.rst @@ -226,6 +226,8 @@ OpenOCD flashing command ``program_esp`` has the following format: - ``exit`` - Optional. Finally exit OpenOCD. - ``compress`` - Optional. Compress image file before programming. - ``encrypt`` - Optional. Encrypt binary before writing to flash. Same functionality with ``idf.py encrypted-flash`` + - ``no_clock_boost`` - Optional. Disable setting target clock frequency to its maximum possible value before programming. Clock boost is enabled by default. + - ``restore_clock`` - Optional. Restore clock frequency to its initial value after programming. Disabled by default. You are now ready to start application debugging. Follow the steps described in the section below. diff --git a/docs/en/api-guides/jtag-debugging/tips-and-quirks.rst b/docs/en/api-guides/jtag-debugging/tips-and-quirks.rst index 65d5bb08e53c..8037f47cbf9f 100644 --- a/docs/en/api-guides/jtag-debugging/tips-and-quirks.rst +++ b/docs/en/api-guides/jtag-debugging/tips-and-quirks.rst @@ -83,7 +83,7 @@ GDB has a Python extension for FreeRTOS support. ESP-IDF automatically loads thi The MTDI pin of ESP32, being among four pins used for JTAG communication, is also one of ESP32's bootstrapping pins. On power up ESP32 is sampling binary level on MTDI to set it's internal voltage regulator used to supply power to external SPI flash chip. If binary level on MDTI pin on power up is low, the voltage regulator is set to deliver 3.3 V, if it is high, then the voltage is set to 1.8 V. The MTDI pin should have a pull-up or may rely on internal weak pull down resistor (see `ESP32 Series Datasheet `_ for details), depending on the type of SPI chip used. Once JTAG is connected, it overrides the pull-up or pull-down resistor that is supposed to do the bootstrapping. - To handle this issue OpenOCD's board configuration file (e.g. ``board\esp32-wrover-kit-3.3v.cfg`` for ESP-WROVER-KIT board) provides ``ESP32_FLASH_VOLTAGE`` parameter to set the idle state of the ``TDO`` line to a specified binary level, therefore reducing the chance of a bad bootup of application due to incorrect flash voltage. + To handle this issue OpenOCD's board configuration file (e.g. ``board\esp32-wrover-kit-3.3v.cfg`` for ESP-WROVER-KIT board) provides ``ESP32_FLASH_VOLTAGE`` parameter to set the idle state of the ``TDO`` line to a specified binary level, therefore reducing the chance of a bad boot-up of application due to incorrect flash voltage. Check specification of ESP32 module connected to JTAG, what is the power supply voltage of SPI flash chip. Then set ``ESP32_FLASH_VOLTAGE`` accordingly. Most WROOM modules use 3.3 V flash. WROVER earlier than ESP32-WROVER-B use 1.8 V flash, while ESP32-WROVER-B and -E modules use 3.3 V flash. @@ -178,6 +178,8 @@ It is important to set the variable before including the ESP-specific configurat - Set to ``0`` to disable Flash breakpoints support. * - ``ESP_SEMIHOST_BASEDIR`` - Set to the path (on the host) which will be the default directory for semihosting functions. + * - ``ESP_ONLYCPU`` + - For multi-core targets, can be set to ``1`` to only enable single core debugging. .. include:: {IDF_TARGET_PATH_NAME}.inc :start-after: openocd-target-specific-config-vars diff --git a/docs/zh_CN/api-guides/jtag-debugging/esp32.inc b/docs/zh_CN/api-guides/jtag-debugging/esp32.inc index 09ef978a2e1e..44ed93766502 100644 --- a/docs/zh_CN/api-guides/jtag-debugging/esp32.inc +++ b/docs/zh_CN/api-guides/jtag-debugging/esp32.inc @@ -112,7 +112,7 @@ - 描述 * - ``ESP32_FLASH_VOLTAGE`` - 如果 ESP32 模组集成的是 1.8 V 的 flash,将该变量设置为 ``1.8``,详情请参考 :ref:`jtag-debugging-tip-code-flash-voltage` - * - ``ESP32_ONLYCPU`` + * - ``ESP_ONLYCPU`` - 对于多核芯片,将该值设置为 ``1`` 可以仅启用单核调试功能 --- diff --git a/docs/zh_CN/api-guides/jtag-debugging/esp32p4.inc b/docs/zh_CN/api-guides/jtag-debugging/esp32p4.inc index 88e2a7616c50..ea9b7d8140de 100644 --- a/docs/zh_CN/api-guides/jtag-debugging/esp32p4.inc +++ b/docs/zh_CN/api-guides/jtag-debugging/esp32p4.inc @@ -29,20 +29,25 @@ Info : only one transport option; autoselecting 'jtag' Info : esp_usb_jtag: VID set to 0x303a and PID to 0x1001 Info : esp_usb_jtag: capabilities descriptor set to 0x2000 - adapter speed: 40000 kHz - Info : esp_usb_jtag: serial (60:55:F9:F8:80:5C) + Info : Listening on port 6666 for tcl connections + Info : Listening on port 4444 for telnet connections + Info : esp_usb_jtag: serial (60:55:F9:F9:04:AD) Info : esp_usb_jtag: Device found. Base speed 24000KHz, div range 1 to 255 Info : clock speed 24000 kHz - Info : JTAG tap: esp32p4.lp.cpu tap/device found: 0x00012c25 (mfg: 0x612 (Espressif Systems), part: 0x0012, ver: 0x0) - Info : JTAG tap: esp32p4.hp.cpu tap/device found: 0x00012c25 (mfg: 0x612 (Espressif Systems), part: 0x0012, ver: 0x0) - Info : [esp32p4.hp.cpu] datacount=1 progbufsize=2 - Info : [esp32p4.hp.cpu] Examined RISC-V core; found 2 harts - Info : [esp32p4.hp.cpu] XLEN=32, misa=0x40901125 - Info : [esp32p4.hp.cpu] Examination succeed - Info : starting gdb server for esp32p4.hp.cpu on 3333 + Info : JTAG tap: esp32p4.tap0 tap/device found: 0x00012c25 (mfg: 0x612 (Espressif Systems), part: 0x0012, ver: 0x0) + Info : JTAG tap: esp32p4.tap1 tap/device found: 0x00012c25 (mfg: 0x612 (Espressif Systems), part: 0x0012, ver: 0x0) + Info : [esp32p4.hp.cpu0] datacount=1 progbufsize=2 + Info : [esp32p4.hp.cpu0] Core 0 made part of halt group 1. + Info : [esp32p4.hp.cpu0] Examined RISC-V core; found 2 harts + Info : [esp32p4.hp.cpu0] XLEN=32, misa=0x40901125 + Info : [esp32p4.hp.cpu0] Examination succeed + Info : [esp32p4.hp.cpu1] datacount=1 progbufsize=2 + Info : [esp32p4.hp.cpu1] Core 1 made part of halt group 1. + Info : [esp32p4.hp.cpu1] Examined RISC-V core; found 2 harts + Info : [esp32p4.hp.cpu1] XLEN=32, misa=0x40901125 + Info : [esp32p4.hp.cpu1] Examination succeed + Info : [esp32p4.hp.cpu0] starting gdb server on 3333 Info : Listening on port 3333 for gdb connections - Info : Listening on port 6666 for tcl connections - Info : Listening on port 4444 for telnet connections .. |run-openocd-cfg-file-err| replace:: ``Can't find board/esp32p4-builtin.cfg`` diff --git a/docs/zh_CN/api-guides/jtag-debugging/index.rst b/docs/zh_CN/api-guides/jtag-debugging/index.rst index 86e626117de5..c15da0375f4b 100644 --- a/docs/zh_CN/api-guides/jtag-debugging/index.rst +++ b/docs/zh_CN/api-guides/jtag-debugging/index.rst @@ -226,6 +226,8 @@ OpenOCD 安装完成后就可以配置 {IDF_TARGET_NAME} 目标(即带 JTAG - ``exit`` - 烧写完成后退出 OpenOCD(可选) - ``compress`` - 烧写开始前压缩镜像文件(可选) - ``encrypt`` - 烧写到 flash 前加密二进制文件,与 ``idf.py encrypted-flash`` 功能相同(可选) +- ``no_clock_boost`` - 禁用在烧写前将目标时钟频率设置为其最大可能值(可选)。默认情况下禁用该选项,即默认启用时钟提升。 +- ``restore_clock`` - 可选。烧写完成后将时钟频率恢复到初始值。默认情况下不启用。 现在可以调试应用程序了,请按照以下章节中的步骤进行操作。 diff --git a/docs/zh_CN/api-guides/jtag-debugging/tips-and-quirks.rst b/docs/zh_CN/api-guides/jtag-debugging/tips-and-quirks.rst index a42c79c5f16f..ccc150b35cdd 100644 --- a/docs/zh_CN/api-guides/jtag-debugging/tips-and-quirks.rst +++ b/docs/zh_CN/api-guides/jtag-debugging/tips-and-quirks.rst @@ -178,6 +178,8 @@ TCL 语言中为变量赋值的语法是: - 设置成 ``0`` 可以关闭对 flash 断点的支持。 * - ``ESP_SEMIHOST_BASEDIR`` - 设置 semihosting 在主机端的默认目录。 + * - ``ESP_ONLYCPU`` + - 对于多核芯片,将该值设置为 ``1`` 可以仅启用单核调试功能 .. include:: {IDF_TARGET_PATH_NAME}.inc :start-after: openocd-target-specific-config-vars From 6e4d3104b2166421b73534b5f5f96a20245171da Mon Sep 17 00:00:00 2001 From: yinqingzhao Date: Mon, 30 Sep 2024 15:34:37 +0800 Subject: [PATCH 035/365] fix(wifi): fix some macro definition not correct --- examples/wifi/power_save/main/Kconfig.projbuild | 2 +- examples/wifi/power_save/main/power_save.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/wifi/power_save/main/Kconfig.projbuild b/examples/wifi/power_save/main/Kconfig.projbuild index 877fe14b7b26..e06b5874fd30 100644 --- a/examples/wifi/power_save/main/Kconfig.projbuild +++ b/examples/wifi/power_save/main/Kconfig.projbuild @@ -40,7 +40,7 @@ menu "Example Configuration" choice EXAMPLE_WIFI_BAND_MODE prompt "wifi band" default EXAMPLE_WIFI_BAND_MODE_2G - depends on SOC_WIFI_HE_SUPPORT_5G + depends on SOC_WIFI_SUPPORT_5G help WiFi band for the example to use. diff --git a/examples/wifi/power_save/main/power_save.c b/examples/wifi/power_save/main/power_save.c index bb35a5c36233..00224c2f2775 100644 --- a/examples/wifi/power_save/main/power_save.c +++ b/examples/wifi/power_save/main/power_save.c @@ -36,7 +36,7 @@ #define DEFAULT_PS_MODE WIFI_PS_NONE #endif /*CONFIG_POWER_SAVE_MODEM*/ -#if SOC_WIFI_HE_SUPPORT_5G +#if CONFIG_SOC_WIFI_SUPPORT_5G #if CONFIG_EXAMPLE_WIFI_BAND_MODE_2G #define DEFAULT_WIFI_BAND_MODE WIFI_BAND_MODE_2G_ONLY #elif CONFIG_EXAMPLE_WIFI_BAND_MODE_5G @@ -89,7 +89,7 @@ static void wifi_power_save(void) ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA)); ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wifi_config)); ESP_ERROR_CHECK(esp_wifi_start()); -#if SOC_WIFI_HE_SUPPORT_5G +#if CONFIG_SOC_WIFI_SUPPORT_5G ESP_ERROR_CHECK(esp_wifi_set_band_mode(DEFAULT_WIFI_BAND_MODE)); #endif ESP_ERROR_CHECK(esp_wifi_set_inactive_time(WIFI_IF_STA, DEFAULT_BEACON_TIMEOUT)); From 1b770c39312c95814c4f8107aefe2dbe7e2ff486 Mon Sep 17 00:00:00 2001 From: Aditya Patwardhan Date: Thu, 22 Aug 2024 17:43:17 +0530 Subject: [PATCH 036/365] fix(mbedtls): Fix the MBEDTLS_FS_IO dependency on vfs By default MBEDTLS_FS_IO option in mbedtls uses the filesystem supported added by vfs component. If the vfs support is disabled by user then mbedtls raises a warning that the filesystem realted operation shall always fail This commit fixes the behaviour by enabling respective depedency check for the MBEDTLS_FS_IO option Closes https://github.com/espressif/esp-idf/issues/14409 --- components/mbedtls/Kconfig | 10 ++++++++++ components/mbedtls/port/include/mbedtls/esp_config.h | 6 ++++++ 2 files changed, 16 insertions(+) diff --git a/components/mbedtls/Kconfig b/components/mbedtls/Kconfig index 3c924631df72..367ba114eeb3 100644 --- a/components/mbedtls/Kconfig +++ b/components/mbedtls/Kconfig @@ -1192,4 +1192,14 @@ menu "mbedTLS" the flash footprint and hence care must be taken to keep some reserved space for the application binary in flash layout. + config MBEDTLS_FS_IO + bool "Enable functions that use the filesystem" + default y + depends on (VFS_SUPPORT_IO && VFS_SUPPORT_DIR) || IDF_TARGET_LINUX + help + This option enables functions in mbedTLS that use the filesystem. + It uses the default filesystem support for the target, + which is added through vfs component for ESP32 based targets or by + the host system when the target is Linux. + endmenu # mbedTLS diff --git a/components/mbedtls/port/include/mbedtls/esp_config.h b/components/mbedtls/port/include/mbedtls/esp_config.h index b057d09ec4e3..90d90729bb59 100644 --- a/components/mbedtls/port/include/mbedtls/esp_config.h +++ b/components/mbedtls/port/include/mbedtls/esp_config.h @@ -901,7 +901,13 @@ * * Enable functions that use the filesystem. */ +#if CONFIG_MBEDTLS_FS_IO #define MBEDTLS_FS_IO +#else +#undef MBEDTLS_FS_IO +#undef MBEDTLS_PSA_ITS_FILE_C +#undef MBEDTLS_PSA_CRYPTO_STORAGE_C +#endif #ifndef CONFIG_IDF_TARGET_LINUX /** From 0cb4bdc54e045328851857aa24b2fbb438407e61 Mon Sep 17 00:00:00 2001 From: laokaiyao Date: Fri, 13 Sep 2024 21:56:02 +0800 Subject: [PATCH 037/365] feat(i2s): support sleep retention --- components/esp_driver_i2s/i2s_common.c | 64 +++++++++++ components/esp_driver_i2s/i2s_private.h | 7 ++ .../include/driver/i2s_common.h | 4 + .../test_apps/i2s/main/CMakeLists.txt | 6 +- .../test_apps/i2s/main/test_i2s.c | 2 +- .../i2s/main/test_i2s_slp_retention.c | 101 ++++++++++++++++++ .../test_apps/i2s/pytest_i2s.py | 2 +- .../test_apps/i2s/sdkconfig.ci.release | 1 + .../test_apps/i2s/sdkconfig.defaults | 2 + components/soc/esp32/i2s_periph.c | 2 - components/soc/esp32c3/i2s_periph.c | 1 - components/soc/esp32c5/i2s_periph.c | 45 +++++++- .../esp32c5/include/soc/Kconfig.soc_caps.in | 4 + .../include/soc/retention_periph_defs.h | 3 + components/soc/esp32c5/include/soc/soc_caps.h | 1 + components/soc/esp32c6/i2s_periph.c | 47 +++++++- .../esp32c6/include/soc/Kconfig.soc_caps.in | 4 + .../include/soc/retention_periph_defs.h | 3 + components/soc/esp32c6/include/soc/soc_caps.h | 1 + components/soc/esp32h2/i2s_periph.c | 47 +++++++- .../esp32h2/include/soc/Kconfig.soc_caps.in | 4 + .../include/soc/retention_periph_defs.h | 3 + components/soc/esp32h2/include/soc/soc_caps.h | 1 + components/soc/esp32p4/i2s_periph.c | 60 ++++++++++- .../esp32p4/include/soc/Kconfig.soc_caps.in | 4 + .../include/soc/retention_periph_defs.h | 10 ++ components/soc/esp32p4/include/soc/soc_caps.h | 1 + components/soc/esp32s2/i2s_periph.c | 1 - components/soc/esp32s3/i2s_periph.c | 2 - components/soc/include/soc/i2s_periph.h | 19 +++- components/soc/include/soc/regdma.h | 2 + .../api-reference/system/power_management.rst | 2 +- .../api-reference/system/power_management.rst | 4 +- 33 files changed, 437 insertions(+), 23 deletions(-) create mode 100644 components/esp_driver_i2s/test_apps/i2s/main/test_i2s_slp_retention.c diff --git a/components/esp_driver_i2s/i2s_common.c b/components/esp_driver_i2s/i2s_common.c index 8659694466cc..6586c3f1f069 100644 --- a/components/esp_driver_i2s/i2s_common.c +++ b/components/esp_driver_i2s/i2s_common.c @@ -41,6 +41,7 @@ #include "esp_private/i2s_platform.h" #include "esp_private/esp_clk.h" +#include "esp_private/sleep_retention.h" #include "driver/gpio.h" #include "esp_private/gpio.h" @@ -85,6 +86,34 @@ inline void *i2s_dma_calloc(i2s_chan_handle_t handle, size_t num, size_t size) Scope: This file only ----------------------------------------------------------------------------*/ +#if I2S_USE_RETENTION_LINK +static esp_err_t s_i2s_create_sleep_retention_link_cb(void *arg) +{ + i2s_controller_t *i2s_obj = (i2s_controller_t *)arg; + ESP_RETURN_ON_ERROR(sleep_retention_entries_create(i2s_reg_retention_info[i2s_obj->id].entry_array, + i2s_reg_retention_info[i2s_obj->id].array_size, + REGDMA_LINK_PRI_I2S, i2s_obj->slp_retention_mod), + TAG, "create retention link failed"); + return ESP_OK; +} + +static void s_i2s_create_retention_module(i2s_controller_t *i2s_obj) +{ + sleep_retention_module_t module = i2s_obj->slp_retention_mod; + + _lock_acquire(&i2s_obj->mutex); + if (i2s_obj->retention_link_created == false) { + if (sleep_retention_module_allocate(module) != ESP_OK) { + // even though the sleep retention module create failed, I2S driver should still work, so just warning here + ESP_LOGW(TAG, "create retention module failed, power domain can't turn off"); + } else { + i2s_obj->retention_link_created = true; + } + } + _lock_release(&i2s_obj->mutex); +} +#endif // I2S_USE_RETENTION_LINK + static void i2s_tx_channel_start(i2s_chan_handle_t handle) { i2s_hal_tx_reset(&(handle->controller->hal)); @@ -175,6 +204,14 @@ static esp_err_t i2s_destroy_controller_obj(i2s_controller_t **i2s_obj) #if SOC_I2S_HW_VERSION_1 i2s_ll_enable_dma((*i2s_obj)->hal.dev, false); #endif +#if I2S_USE_RETENTION_LINK + if ((*i2s_obj)->slp_retention_mod) { + if ((*i2s_obj)->retention_link_created) { + sleep_retention_module_free((*i2s_obj)->slp_retention_mod); + } + sleep_retention_module_deinit((*i2s_obj)->slp_retention_mod); + } +#endif // I2S_USE_RETENTION_LINK free(*i2s_obj); *i2s_obj = NULL; return i2s_platform_release_occupation(I2S_CTLR_HP, id); @@ -219,6 +256,25 @@ static i2s_controller_t *i2s_acquire_controller_obj(int id) adc_ll_digi_set_data_source(0); } #endif + +#if I2S_USE_RETENTION_LINK + sleep_retention_module_t module = i2s_periph_signal[id].retention_module; + sleep_retention_module_init_param_t init_param = { + .cbs = { + .create = { + .handle = s_i2s_create_sleep_retention_link_cb, + .arg = i2s_obj, + }, + }, + .depends = BIT(SLEEP_RETENTION_MODULE_CLOCK_SYSTEM) + }; + if (sleep_retention_module_init(module, &init_param) == ESP_OK) { + i2s_obj->slp_retention_mod = module; + } else { + // even the sleep retention module init failed, I2S driver should still work, so just warning here + ESP_LOGW(TAG, "init sleep retention failed for I2S%d, power domain may be turned off during sleep", id); + } +#endif // I2S_USE_RETENTION_LINK } else { free(pre_alloc); portENTER_CRITICAL(&g_i2s.spinlock); @@ -879,6 +935,9 @@ esp_err_t i2s_new_channel(const i2s_chan_config_t *chan_cfg, i2s_chan_handle_t * ESP_RETURN_ON_FALSE(chan_cfg->id < SOC_I2S_NUM || chan_cfg->id == I2S_NUM_AUTO, ESP_ERR_INVALID_ARG, TAG, "invalid I2S port id"); ESP_RETURN_ON_FALSE(chan_cfg->dma_desc_num >= 2, ESP_ERR_INVALID_ARG, TAG, "there should be at least 2 DMA buffers"); ESP_RETURN_ON_FALSE(chan_cfg->intr_priority >= 0 && chan_cfg->intr_priority <= 7, ESP_ERR_INVALID_ARG, TAG, "intr_priority should be within 0~7"); +#if !SOC_I2S_SUPPORT_SLEEP_RETENTION + ESP_RETURN_ON_FALSE(!chan_cfg->backup_before_sleep, ESP_ERR_NOT_SUPPORTED, TAG, "register back up is not supported"); +#endif esp_err_t ret = ESP_OK; i2s_controller_t *i2s_obj = NULL; @@ -937,6 +996,11 @@ esp_err_t i2s_new_channel(const i2s_chan_config_t *chan_cfg, i2s_chan_handle_t * if ((tx_handle != NULL) && (rx_handle != NULL)) { i2s_obj->full_duplex = true; } +#if I2S_USE_RETENTION_LINK + if (chan_cfg->backup_before_sleep) { + s_i2s_create_retention_module(i2s_obj); + } +#endif return ESP_OK; /* i2s_obj allocated but register channel failed */ diff --git a/components/esp_driver_i2s/i2s_private.h b/components/esp_driver_i2s/i2s_private.h index 40ff52fce56f..0cfccbaf942c 100644 --- a/components/esp_driver_i2s/i2s_private.h +++ b/components/esp_driver_i2s/i2s_private.h @@ -6,6 +6,7 @@ #pragma once +#include #include "freertos/FreeRTOS.h" #include "freertos/semphr.h" #include "freertos/queue.h" @@ -25,6 +26,7 @@ #endif #include "esp_private/periph_ctrl.h" #include "esp_private/esp_gpio_reserve.h" +#include "esp_private/sleep_retention.h" #include "esp_pm.h" #include "esp_err.h" #include "sdkconfig.h" @@ -56,6 +58,8 @@ extern "C" { #define I2S_RCC_ATOMIC() #endif +#define I2S_USE_RETENTION_LINK (SOC_I2S_SUPPORT_SLEEP_RETENTION && CONFIG_PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP) + #define I2S_NULL_POINTER_CHECK(tag, p) ESP_RETURN_ON_FALSE((p), ESP_ERR_INVALID_ARG, tag, "input parameter '"#p"' is NULL") /** @@ -130,6 +134,9 @@ typedef struct { bool full_duplex; /*!< is full_duplex */ i2s_chan_handle_t tx_chan; /*!< tx channel handler */ i2s_chan_handle_t rx_chan; /*!< rx channel handler */ + _lock_t mutex; /*!< mutex for controller */ + sleep_retention_module_t slp_retention_mod; /*!< Sleep retention module */ + bool retention_link_created; /*!< Whether the retention link is created */ int mclk; /*!< MCK out pin, shared by tx/rx*/ #if CONFIG_IDF_TARGET_ESP32 esp_clock_output_mapping_handle_t mclk_out_hdl; /*!< The handle of MCLK output signal */ diff --git a/components/esp_driver_i2s/include/driver/i2s_common.h b/components/esp_driver_i2s/include/driver/i2s_common.h index eaeb397a0dc7..10c0f5211e78 100644 --- a/components/esp_driver_i2s/include/driver/i2s_common.h +++ b/components/esp_driver_i2s/include/driver/i2s_common.h @@ -26,6 +26,7 @@ extern "C" { .dma_frame_num = 240, \ .auto_clear_after_cb = false, \ .auto_clear_before_cb = false, \ + .backup_before_sleep = false, \ .intr_priority = 0, \ } @@ -73,6 +74,9 @@ typedef struct { bool auto_clear_before_cb; /*!< Set to auto clear DMA TX buffer before `on_sent` callback, I2S will always send zero automatically if no data to send * So that user can access data in the callback that just finished to send. */ + bool backup_before_sleep; /*!< If set, the driver will backup/restore the I2S registers before/after entering/exist sleep mode. + By this approach, the system can power off I2S's power domain. + This can save power, but at the expense of more RAM being consumed */ int intr_priority; /*!< I2S interrupt priority, range [0, 7], if set to 0, the driver will try to allocate an interrupt with a relative low priority (1,2,3) */ } i2s_chan_config_t; diff --git a/components/esp_driver_i2s/test_apps/i2s/main/CMakeLists.txt b/components/esp_driver_i2s/test_apps/i2s/main/CMakeLists.txt index 34b5a6d39f84..63623c66c7e8 100644 --- a/components/esp_driver_i2s/test_apps/i2s/main/CMakeLists.txt +++ b/components/esp_driver_i2s/test_apps/i2s/main/CMakeLists.txt @@ -6,6 +6,10 @@ if(CONFIG_SOC_I2S_SUPPORTS_ETM AND CONFIG_SOC_GPIO_SUPPORT_ETM) set(srcs ${srcs} "test_i2s_etm.c") endif() +if(CONFIG_SOC_I2S_SUPPORT_SLEEP_RETENTION) + list(APPEND srcs "test_i2s_slp_retention.c") +endif() + idf_component_register(SRCS ${srcs} - PRIV_REQUIRES unity esp_driver_pcnt spi_flash esp_driver_gpio esp_driver_i2s + PRIV_REQUIRES unity esp_driver_pcnt spi_flash esp_driver_gpio esp_driver_i2s esp_driver_uart WHOLE_ARCHIVE) diff --git a/components/esp_driver_i2s/test_apps/i2s/main/test_i2s.c b/components/esp_driver_i2s/test_apps/i2s/main/test_i2s.c index bf1172c3c78e..dc86526b16f7 100644 --- a/components/esp_driver_i2s/test_apps/i2s/main/test_i2s.c +++ b/components/esp_driver_i2s/test_apps/i2s/main/test_i2s.c @@ -94,7 +94,7 @@ static void i2s_test_io_config(int mode) } } -static void i2s_read_write_test(i2s_chan_handle_t tx_chan, i2s_chan_handle_t rx_chan) +void i2s_read_write_test(i2s_chan_handle_t tx_chan, i2s_chan_handle_t rx_chan) { #define I2S_SEND_BUF_LEN 100 #define I2S_RECV_BUF_LEN 10000 diff --git a/components/esp_driver_i2s/test_apps/i2s/main/test_i2s_slp_retention.c b/components/esp_driver_i2s/test_apps/i2s/main/test_i2s_slp_retention.c new file mode 100644 index 000000000000..22d94ac7c824 --- /dev/null +++ b/components/esp_driver_i2s/test_apps/i2s/main/test_i2s_slp_retention.c @@ -0,0 +1,101 @@ +/* + * SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ +#include +#include +#include "sdkconfig.h" +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "unity.h" +#include "unity_test_utils.h" +#include "driver/i2s_std.h" +#include "driver/uart.h" +#include "soc/i2s_struct.h" +#include "esp_sleep.h" +#include "esp_private/sleep_cpu.h" +#include "esp_private/esp_sleep_internal.h" +#include "esp_private/esp_pmu.h" +#include "../../test_inc/test_i2s.h" + +#if SOC_I2S_SUPPORT_SLEEP_RETENTION && CONFIG_PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP + +extern void i2s_read_write_test(i2s_chan_handle_t tx_chan, i2s_chan_handle_t rx_chan); + +static void test_i2s_enter_light_sleep(int sec) +{ + esp_sleep_context_t sleep_ctx; + esp_sleep_set_sleep_context(&sleep_ctx); + printf("Entering light sleep for %d seconds\n", sec); +#if ESP_SLEEP_POWER_DOWN_CPU + printf("Enable CPU power down\n"); + TEST_ESP_OK(sleep_cpu_configure(true)); +#endif + uart_wait_tx_idle_polling(CONFIG_ESP_CONSOLE_UART_NUM); + TEST_ESP_OK(esp_sleep_enable_timer_wakeup(sec * 1000 * 1000)); + TEST_ESP_OK(esp_light_sleep_start()); + +#if ESP_SLEEP_POWER_DOWN_CPU + TEST_ESP_OK(sleep_cpu_configure(false)); +#endif + printf("Woke up from light sleep\n"); + + TEST_ASSERT_EQUAL(0, sleep_ctx.sleep_request_result); + TEST_ASSERT_EQUAL(PMU_SLEEP_PD_TOP, sleep_ctx.sleep_flags & PMU_SLEEP_PD_TOP); + esp_sleep_set_sleep_context(NULL); +} + +TEST_CASE("I2S_sleep_retention_test", "[i2s]") +{ + i2s_chan_handle_t tx_handle; + i2s_chan_handle_t rx_handle; + + i2s_chan_config_t chan_cfg = I2S_CHANNEL_DEFAULT_CONFIG(I2S_NUM_0, I2S_ROLE_MASTER); + chan_cfg.backup_before_sleep = true; + i2s_std_config_t std_cfg = { + .clk_cfg = I2S_STD_CLK_DEFAULT_CONFIG(SAMPLE_RATE), + .slot_cfg = I2S_STD_PHILIPS_SLOT_DEFAULT_CONFIG(SAMPLE_BITS, I2S_SLOT_MODE_STEREO), + .gpio_cfg = I2S_TEST_MASTER_DEFAULT_PIN, + }; + std_cfg.gpio_cfg.din = std_cfg.gpio_cfg.dout; + TEST_ESP_OK(i2s_new_channel(&chan_cfg, &tx_handle, &rx_handle)); + TEST_ESP_OK(i2s_channel_init_std_mode(tx_handle, &std_cfg)); + TEST_ESP_OK(i2s_channel_init_std_mode(rx_handle, &std_cfg)); + + /* I2S retention is depended on GDMA retention. + * Only take two registers as sample to check the I2S retention when GDMA retention has not been supported. */ +#if !SOC_GDMA_SUPPORT_SLEEP_RETENTION + i2s_tx_conf_reg_t tx_reg_before_slp = I2S0.tx_conf; + i2s_rx_conf_reg_t rx_reg_before_slp = I2S0.rx_conf; +#endif + + /* Enter light sleep and wake up after 1 second */ + test_i2s_enter_light_sleep(1); + +#if SOC_GDMA_SUPPORT_SLEEP_RETENTION + /* Check whether I2S can work correctly after light sleep */ + TEST_ESP_OK(i2s_channel_enable(tx_handle)); + TEST_ESP_OK(i2s_channel_enable(rx_handle)); + i2s_read_write_test(tx_handle, rx_handle); +#else + /* Only check whether the register values are restored if GDMA retention has not been supported */ + i2s_tx_conf_reg_t tx_reg_after_slp = I2S0.tx_conf; + i2s_rx_conf_reg_t rx_reg_after_slp = I2S0.rx_conf; + + TEST_ASSERT_EQUAL_UINT32(tx_reg_before_slp.val, tx_reg_after_slp.val); + TEST_ASSERT_EQUAL_UINT32(rx_reg_before_slp.val, rx_reg_after_slp.val); + + TEST_ESP_OK(i2s_channel_enable(tx_handle)); + TEST_ESP_OK(i2s_channel_enable(rx_handle)); +#endif + + printf("I2S works as expected after light sleep\n"); + + TEST_ESP_OK(i2s_channel_disable(tx_handle)); + TEST_ESP_OK(i2s_channel_disable(rx_handle)); + TEST_ESP_OK(i2s_del_channel(tx_handle)); + TEST_ESP_OK(i2s_del_channel(rx_handle)); +} + +#endif // SOC_I2S_SUPPORT_SLEEP_RETENTION && CONFIG_PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP diff --git a/components/esp_driver_i2s/test_apps/i2s/pytest_i2s.py b/components/esp_driver_i2s/test_apps/i2s/pytest_i2s.py index eeb7eefaaf97..455fe049da64 100644 --- a/components/esp_driver_i2s/test_apps/i2s/pytest_i2s.py +++ b/components/esp_driver_i2s/test_apps/i2s/pytest_i2s.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD +# SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD # SPDX-License-Identifier: Apache-2.0 import pytest from pytest_embedded import Dut diff --git a/components/esp_driver_i2s/test_apps/i2s/sdkconfig.ci.release b/components/esp_driver_i2s/test_apps/i2s/sdkconfig.ci.release index 91d93f163e62..998cfb51f821 100644 --- a/components/esp_driver_i2s/test_apps/i2s/sdkconfig.ci.release +++ b/components/esp_driver_i2s/test_apps/i2s/sdkconfig.ci.release @@ -3,3 +3,4 @@ CONFIG_FREERTOS_USE_TICKLESS_IDLE=y CONFIG_COMPILER_OPTIMIZATION_SIZE=y CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE=y CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT=y +CONFIG_PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP=y diff --git a/components/esp_driver_i2s/test_apps/i2s/sdkconfig.defaults b/components/esp_driver_i2s/test_apps/i2s/sdkconfig.defaults index b56409727b88..0f8b7b2f540d 100644 --- a/components/esp_driver_i2s/test_apps/i2s/sdkconfig.defaults +++ b/components/esp_driver_i2s/test_apps/i2s/sdkconfig.defaults @@ -1,2 +1,4 @@ CONFIG_I2S_ENABLE_DEBUG_LOG=y CONFIG_ESP_TASK_WDT_EN=n +# primitives for checking sleep internal state +CONFIG_ESP_SLEEP_DEBUG=y diff --git a/components/soc/esp32/i2s_periph.c b/components/soc/esp32/i2s_periph.c index 83c2920af6cf..9f06c85f4039 100644 --- a/components/soc/esp32/i2s_periph.c +++ b/components/soc/esp32/i2s_periph.c @@ -29,7 +29,6 @@ const i2s_signal_conn_t i2s_periph_signal[SOC_I2S_NUM] = { .data_in_sig = I2S0I_DATA_IN15_IDX, .irq = ETS_I2S0_INTR_SOURCE, - .module = PERIPH_I2S0_MODULE, }, { .mck_out_sig = -1, // Unavailable @@ -49,6 +48,5 @@ const i2s_signal_conn_t i2s_periph_signal[SOC_I2S_NUM] = { .data_in_sig = I2S1I_DATA_IN15_IDX, .irq = ETS_I2S1_INTR_SOURCE, - .module = PERIPH_I2S1_MODULE, } }; diff --git a/components/soc/esp32c3/i2s_periph.c b/components/soc/esp32c3/i2s_periph.c index ec14aa72a26d..ff597698b5b1 100644 --- a/components/soc/esp32c3/i2s_periph.c +++ b/components/soc/esp32c3/i2s_periph.c @@ -30,6 +30,5 @@ const i2s_signal_conn_t i2s_periph_signal[SOC_I2S_NUM] = { .data_in_sig = I2SI_SD_IN_IDX, .irq = ETS_I2S1_INTR_SOURCE, - .module = PERIPH_I2S1_MODULE, } }; diff --git a/components/soc/esp32c5/i2s_periph.c b/components/soc/esp32c5/i2s_periph.c index dbd1fdc816b4..ff683a2f8110 100644 --- a/components/soc/esp32c5/i2s_periph.c +++ b/components/soc/esp32c5/i2s_periph.c @@ -5,6 +5,7 @@ */ #include "soc/i2s_periph.h" +#include "soc/i2s_reg.h" #include "soc/gpio_sig_map.h" /* @@ -30,6 +31,48 @@ const i2s_signal_conn_t i2s_periph_signal[SOC_I2S_NUM] = { .data_in_sig = I2SI_SD_IN_IDX, .irq = ETS_I2S1_INTR_SOURCE, - .module = -1, + .retention_module = SLEEP_RETENTION_MODULE_I2S0, } }; + +/** + * I2S Registers to be saved during sleep retention + * - I2S_RX_CONF_REG + * - I2S_TX_CONF_REG + * - I2S_RX_CONF1_REG + * - I2S_TX_CONF1_REG + * - I2S_TX_PCM2PDM_CONF_REG + * - I2S_TX_PCM2PDM_CONF1_REG + * - I2S_RX_TDM_CTRL_REG + * - I2S_TX_TDM_CTRL_REG + * - I2S_RXEOF_NUM_REG + * - I2S_ETM_CONF_REG +*/ +#define I2S_RETENTION_REGS_CNT 10 +#define I2S_RETENTION_REGS_BASE(i) I2S_RX_CONF_REG(i) +static const uint32_t i2s_regs_map[4] = {0x12360f, 0x0, 0x0, 0x0}; +#define I2S_SLEEP_RETENTION_ENTRIES(i2s_port) { \ + [0] = { .config = REGDMA_LINK_ADDR_MAP_INIT( \ + REGDMA_I2S_LINK(0x00), \ + I2S_RETENTION_REGS_BASE(i2s_port), \ + I2S_RETENTION_REGS_BASE(i2s_port), \ + I2S_RETENTION_REGS_CNT, 0, 0, \ + i2s_regs_map[0], i2s_regs_map[1], \ + i2s_regs_map[2], i2s_regs_map[3]), \ + .owner = ENTRY(0) | ENTRY(2)}, \ + [1] = { .config = REGDMA_LINK_WRITE_INIT( \ + REGDMA_I2S_LINK(0x01), I2S_RX_CONF_REG(i2s_port), I2S_RX_UPDATE, I2S_RX_UPDATE_M, 1, 0), \ + .owner = ENTRY(0) | ENTRY(2)}, \ + [2] = { .config = REGDMA_LINK_WRITE_INIT( \ + REGDMA_I2S_LINK(0x02), I2S_TX_CONF_REG(i2s_port), I2S_TX_UPDATE, I2S_TX_UPDATE_M, 1, 0), \ + .owner = ENTRY(0) | ENTRY(2)} \ +}; + +static const regdma_entries_config_t i2s0_regs_retention[] = I2S_SLEEP_RETENTION_ENTRIES(0); + +const i2s_reg_retention_info_t i2s_reg_retention_info[SOC_I2S_NUM] = { + [0] = { + .entry_array = i2s0_regs_retention, + .array_size = ARRAY_SIZE(i2s0_regs_retention) + }, +}; diff --git a/components/soc/esp32c5/include/soc/Kconfig.soc_caps.in b/components/soc/esp32c5/include/soc/Kconfig.soc_caps.in index de44eb10f05b..8943b4f27958 100644 --- a/components/soc/esp32c5/include/soc/Kconfig.soc_caps.in +++ b/components/soc/esp32c5/include/soc/Kconfig.soc_caps.in @@ -675,6 +675,10 @@ config SOC_I2S_TDM_FULL_DATA_WIDTH bool default y +config SOC_I2S_SUPPORT_SLEEP_RETENTION + bool + default y + config SOC_LEDC_SUPPORT_PLL_DIV_CLOCK bool default y diff --git a/components/soc/esp32c5/include/soc/retention_periph_defs.h b/components/soc/esp32c5/include/soc/retention_periph_defs.h index 6fd2cdda6cc9..02002a7d0fe5 100644 --- a/components/soc/esp32c5/include/soc/retention_periph_defs.h +++ b/components/soc/esp32c5/include/soc/retention_periph_defs.h @@ -36,6 +36,7 @@ typedef enum periph_retention_module { SLEEP_RETENTION_MODULE_RMT0 = 13, SLEEP_RETENTION_MODULE_UART0 = 14, SLEEP_RETENTION_MODULE_UART1 = 15, + SLEEP_RETENTION_MODULE_I2S0 = 16, /* modem module, which includes WiFi, BLE and 802.15.4 */ SLEEP_RETENTION_MODULE_WIFI_MAC = 26, @@ -74,6 +75,7 @@ typedef enum periph_retention_module_bitmap { SLEEP_RETENTION_MODULE_BM_RMT0 = BIT(SLEEP_RETENTION_MODULE_RMT0), SLEEP_RETENTION_MODULE_BM_UART0 = BIT(SLEEP_RETENTION_MODULE_UART0), SLEEP_RETENTION_MODULE_BM_UART1 = BIT(SLEEP_RETENTION_MODULE_UART1), + SLEEP_RETENTION_MODULE_BM_I2S0 = BIT(SLEEP_RETENTION_MODULE_I2S0), SLEEP_RETENTION_MODULE_BM_GDMA_CH0 = BIT(SLEEP_RETENTION_MODULE_GDMA_CH0), SLEEP_RETENTION_MODULE_BM_GDMA_CH1 = BIT(SLEEP_RETENTION_MODULE_GDMA_CH1), @@ -94,6 +96,7 @@ typedef enum periph_retention_module_bitmap { | SLEEP_RETENTION_MODULE_BM_RMT0 \ | SLEEP_RETENTION_MODULE_BM_UART0 \ | SLEEP_RETENTION_MODULE_BM_UART1 \ + | SLEEP_RETENTION_MODULE_BM_I2S0 \ ) #ifdef __cplusplus } diff --git a/components/soc/esp32c5/include/soc/soc_caps.h b/components/soc/esp32c5/include/soc/soc_caps.h index 1fde2ac0a32b..5badeefac16a 100644 --- a/components/soc/esp32c5/include/soc/soc_caps.h +++ b/components/soc/esp32c5/include/soc/soc_caps.h @@ -288,6 +288,7 @@ #define SOC_I2S_PDM_MAX_TX_LINES (2) #define SOC_I2S_SUPPORTS_TDM (1) #define SOC_I2S_TDM_FULL_DATA_WIDTH (1) /*!< No limitation to data bit width when using multiple slots */ +#define SOC_I2S_SUPPORT_SLEEP_RETENTION 1 /*!< The sleep retention feature can help back up I2S registers before sleep */ /*-------------------------- LEDC CAPS ---------------------------------------*/ #define SOC_LEDC_SUPPORT_PLL_DIV_CLOCK (1) diff --git a/components/soc/esp32c6/i2s_periph.c b/components/soc/esp32c6/i2s_periph.c index cb0a6a14ff6e..3f3ed3974ab5 100644 --- a/components/soc/esp32c6/i2s_periph.c +++ b/components/soc/esp32c6/i2s_periph.c @@ -1,10 +1,11 @@ /* - * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ #include "soc/i2s_periph.h" +#include "soc/i2s_reg.h" #include "soc/gpio_sig_map.h" /* @@ -30,6 +31,48 @@ const i2s_signal_conn_t i2s_periph_signal[SOC_I2S_NUM] = { .data_in_sig = I2SI_SD_IN_IDX, .irq = ETS_I2S1_INTR_SOURCE, - .module = PERIPH_I2S1_MODULE, + .retention_module = SLEEP_RETENTION_MODULE_I2S0, } }; + +/** + * I2S Registers to be saved during sleep retention + * - I2S_RX_CONF_REG + * - I2S_TX_CONF_REG + * - I2S_RX_CONF1_REG + * - I2S_TX_CONF1_REG + * - I2S_TX_PCM2PDM_CONF_REG + * - I2S_TX_PCM2PDM_CONF1_REG + * - I2S_RX_TDM_CTRL_REG + * - I2S_TX_TDM_CTRL_REG + * - I2S_RXEOF_NUM_REG + * - I2S_ETM_CONF_REG +*/ +#define I2S_RETENTION_REGS_CNT 10 +#define I2S_RETENTION_REGS_BASE(i) I2S_RX_CONF_REG(i) +static const uint32_t i2s_regs_map[4] = {0x12330f, 0x0, 0x0, 0x0}; +#define I2S_SLEEP_RETENTION_ENTRIES(i2s_port) { \ + [0] = { .config = REGDMA_LINK_ADDR_MAP_INIT( \ + REGDMA_I2S_LINK(0x00), \ + I2S_RETENTION_REGS_BASE(i2s_port), \ + I2S_RETENTION_REGS_BASE(i2s_port), \ + I2S_RETENTION_REGS_CNT, 0, 0, \ + i2s_regs_map[0], i2s_regs_map[1], \ + i2s_regs_map[2], i2s_regs_map[3]), \ + .owner = ENTRY(0) | ENTRY(2)}, \ + [1] = { .config = REGDMA_LINK_WRITE_INIT( \ + REGDMA_I2S_LINK(0x01), I2S_RX_CONF_REG(i2s_port), I2S_RX_UPDATE, I2S_RX_UPDATE_M, 1, 0), \ + .owner = ENTRY(0) | ENTRY(2)}, \ + [2] = { .config = REGDMA_LINK_WRITE_INIT( \ + REGDMA_I2S_LINK(0x02), I2S_TX_CONF_REG(i2s_port), I2S_TX_UPDATE, I2S_TX_UPDATE_M, 1, 0), \ + .owner = ENTRY(0) | ENTRY(2)} \ +}; + +static const regdma_entries_config_t i2s0_regs_retention[] = I2S_SLEEP_RETENTION_ENTRIES(0); + +const i2s_reg_retention_info_t i2s_reg_retention_info[SOC_I2S_NUM] = { + [0] = { + .entry_array = i2s0_regs_retention, + .array_size = ARRAY_SIZE(i2s0_regs_retention) + }, +}; diff --git a/components/soc/esp32c6/include/soc/Kconfig.soc_caps.in b/components/soc/esp32c6/include/soc/Kconfig.soc_caps.in index 47dc43d9d5be..9493c491a5dd 100644 --- a/components/soc/esp32c6/include/soc/Kconfig.soc_caps.in +++ b/components/soc/esp32c6/include/soc/Kconfig.soc_caps.in @@ -671,6 +671,10 @@ config SOC_I2S_SUPPORTS_TDM bool default y +config SOC_I2S_SUPPORT_SLEEP_RETENTION + bool + default y + config SOC_LEDC_SUPPORT_PLL_DIV_CLOCK bool default y diff --git a/components/soc/esp32c6/include/soc/retention_periph_defs.h b/components/soc/esp32c6/include/soc/retention_periph_defs.h index a1dee8299ab7..5cdbc108e812 100644 --- a/components/soc/esp32c6/include/soc/retention_periph_defs.h +++ b/components/soc/esp32c6/include/soc/retention_periph_defs.h @@ -36,6 +36,7 @@ typedef enum periph_retention_module { SLEEP_RETENTION_MODULE_RMT0 = 13, SLEEP_RETENTION_MODULE_UART0 = 14, SLEEP_RETENTION_MODULE_UART1 = 15, + SLEEP_RETENTION_MODULE_I2S0 = 16, /* Modem module, which includes WiFi, BLE and 802.15.4 */ SLEEP_RETENTION_MODULE_WIFI_MAC = 26, @@ -68,6 +69,7 @@ typedef enum periph_retention_module_bitmap { SLEEP_RETENTION_MODULE_BM_RMT0 = BIT(SLEEP_RETENTION_MODULE_RMT0), SLEEP_RETENTION_MODULE_BM_UART0 = BIT(SLEEP_RETENTION_MODULE_UART0), SLEEP_RETENTION_MODULE_BM_UART1 = BIT(SLEEP_RETENTION_MODULE_UART1), + SLEEP_RETENTION_MODULE_BM_I2S0 = BIT(SLEEP_RETENTION_MODULE_I2S0), /* modem module, which includes WiFi, BLE and 802.15.4 */ SLEEP_RETENTION_MODULE_BM_WIFI_MAC = BIT(SLEEP_RETENTION_MODULE_WIFI_MAC), SLEEP_RETENTION_MODULE_BM_WIFI_BB = BIT(SLEEP_RETENTION_MODULE_WIFI_BB), @@ -90,6 +92,7 @@ typedef enum periph_retention_module_bitmap { | SLEEP_RETENTION_MODULE_BM_RMT0 \ | SLEEP_RETENTION_MODULE_BM_UART0 \ | SLEEP_RETENTION_MODULE_BM_UART1 \ + | SLEEP_RETENTION_MODULE_BM_I2S0 \ ) #ifdef __cplusplus diff --git a/components/soc/esp32c6/include/soc/soc_caps.h b/components/soc/esp32c6/include/soc/soc_caps.h index b997a19b9097..58463193d0fa 100644 --- a/components/soc/esp32c6/include/soc/soc_caps.h +++ b/components/soc/esp32c6/include/soc/soc_caps.h @@ -273,6 +273,7 @@ #define SOC_I2S_SUPPORTS_PDM_TX (1) #define SOC_I2S_PDM_MAX_TX_LINES (2) #define SOC_I2S_SUPPORTS_TDM (1) +#define SOC_I2S_SUPPORT_SLEEP_RETENTION 1 /*!< The sleep retention feature can help back up I2S registers before sleep */ /*-------------------------- LEDC CAPS ---------------------------------------*/ #define SOC_LEDC_SUPPORT_PLL_DIV_CLOCK (1) diff --git a/components/soc/esp32h2/i2s_periph.c b/components/soc/esp32h2/i2s_periph.c index cf70f2cb946c..582e624c4f8f 100644 --- a/components/soc/esp32h2/i2s_periph.c +++ b/components/soc/esp32h2/i2s_periph.c @@ -1,10 +1,11 @@ /* - * SPDX-FileCopyrightText: 2020-2022 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2020-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ #include "soc/i2s_periph.h" +#include "soc/i2s_reg.h" #include "soc/gpio_sig_map.h" /* @@ -29,6 +30,48 @@ const i2s_signal_conn_t i2s_periph_signal[SOC_I2S_NUM] = { .data_in_sig = I2SI_SD_IN_IDX, .irq = ETS_I2S1_INTR_SOURCE, - .module = PERIPH_I2S1_MODULE, + .retention_module = SLEEP_RETENTION_MODULE_I2S0, } }; + +/** + * I2S Registers to be saved during sleep retention + * - I2S_RX_CONF_REG + * - I2S_TX_CONF_REG + * - I2S_RX_CONF1_REG + * - I2S_TX_CONF1_REG + * - I2S_TX_PCM2PDM_CONF_REG + * - I2S_TX_PCM2PDM_CONF1_REG + * - I2S_RX_TDM_CTRL_REG + * - I2S_TX_TDM_CTRL_REG + * - I2S_RXEOF_NUM_REG + * - I2S_ETM_CONF_REG +*/ +#define I2S_RETENTION_REGS_CNT 10 +#define I2S_RETENTION_REGS_BASE(i) I2S_RX_CONF_REG +static const uint32_t i2s_regs_map[4] = {0x12330f, 0x0, 0x0, 0x0}; +#define I2S_SLEEP_RETENTION_ENTRIES(i2s_port) { \ + [0] = { .config = REGDMA_LINK_ADDR_MAP_INIT( \ + REGDMA_I2S_LINK(0x00), \ + I2S_RETENTION_REGS_BASE(i2s_port), \ + I2S_RETENTION_REGS_BASE(i2s_port), \ + I2S_RETENTION_REGS_CNT, 0, 0, \ + i2s_regs_map[0], i2s_regs_map[1], \ + i2s_regs_map[2], i2s_regs_map[3]), \ + .owner = ENTRY(0) | ENTRY(2)}, \ + [1] = { .config = REGDMA_LINK_WRITE_INIT( \ + REGDMA_I2S_LINK(0x01), I2S_RX_CONF_REG(i2s_port), I2S_RX_UPDATE, I2S_RX_UPDATE_M, 1, 0), \ + .owner = ENTRY(0) | ENTRY(2)}, \ + [2] = { .config = REGDMA_LINK_WRITE_INIT( \ + REGDMA_I2S_LINK(0x02), I2S_TX_CONF_REG(i2s_port), I2S_TX_UPDATE, I2S_TX_UPDATE_M, 1, 0), \ + .owner = ENTRY(0) | ENTRY(2)} \ +}; + +static const regdma_entries_config_t i2s0_regs_retention[] = I2S_SLEEP_RETENTION_ENTRIES(0); + +const i2s_reg_retention_info_t i2s_reg_retention_info[SOC_I2S_NUM] = { + [0] = { + .entry_array = i2s0_regs_retention, + .array_size = ARRAY_SIZE(i2s0_regs_retention) + }, +}; diff --git a/components/soc/esp32h2/include/soc/Kconfig.soc_caps.in b/components/soc/esp32h2/include/soc/Kconfig.soc_caps.in index f66714fbaea0..ab711151065c 100644 --- a/components/soc/esp32h2/include/soc/Kconfig.soc_caps.in +++ b/components/soc/esp32h2/include/soc/Kconfig.soc_caps.in @@ -675,6 +675,10 @@ config SOC_I2S_TDM_FULL_DATA_WIDTH bool default y +config SOC_I2S_SUPPORT_SLEEP_RETENTION + bool + default y + config SOC_LEDC_SUPPORT_PLL_DIV_CLOCK bool default y diff --git a/components/soc/esp32h2/include/soc/retention_periph_defs.h b/components/soc/esp32h2/include/soc/retention_periph_defs.h index 9c8ea0ea0570..819af3a2b354 100644 --- a/components/soc/esp32h2/include/soc/retention_periph_defs.h +++ b/components/soc/esp32h2/include/soc/retention_periph_defs.h @@ -37,6 +37,7 @@ typedef enum periph_retention_module { SLEEP_RETENTION_MODULE_RMT0 = 14, SLEEP_RETENTION_MODULE_UART0 = 15, SLEEP_RETENTION_MODULE_UART1 = 16, + SLEEP_RETENTION_MODULE_I2S0 = 17, /* Modem module, which includes BLE and 802.15.4 */ SLEEP_RETENTION_MODULE_BLE_MAC = 28, @@ -68,6 +69,7 @@ typedef enum periph_retention_module_bitmap { SLEEP_RETENTION_MODULE_BM_RMT0 = BIT(SLEEP_RETENTION_MODULE_RMT0), SLEEP_RETENTION_MODULE_BM_UART0 = BIT(SLEEP_RETENTION_MODULE_UART0), SLEEP_RETENTION_MODULE_BM_UART1 = BIT(SLEEP_RETENTION_MODULE_UART1), + SLEEP_RETENTION_MODULE_BM_I2S0 = BIT(SLEEP_RETENTION_MODULE_I2S0), /* modem module, which includes BLE and 802.15.4 */ SLEEP_RETENTION_MODULE_BM_BLE_MAC = BIT(SLEEP_RETENTION_MODULE_BLE_MAC), SLEEP_RETENTION_MODULE_BM_BT_BB = BIT(SLEEP_RETENTION_MODULE_BT_BB), @@ -89,6 +91,7 @@ typedef enum periph_retention_module_bitmap { | SLEEP_RETENTION_MODULE_BM_RMT0 \ | SLEEP_RETENTION_MODULE_BM_UART0 \ | SLEEP_RETENTION_MODULE_BM_UART1 \ + | SLEEP_RETENTION_MODULE_BM_I2S0 \ ) #ifdef __cplusplus diff --git a/components/soc/esp32h2/include/soc/soc_caps.h b/components/soc/esp32h2/include/soc/soc_caps.h index 8831aa1a3cd7..d5ae0377d192 100644 --- a/components/soc/esp32h2/include/soc/soc_caps.h +++ b/components/soc/esp32h2/include/soc/soc_caps.h @@ -274,6 +274,7 @@ #define SOC_I2S_PDM_MAX_TX_LINES (2) #define SOC_I2S_SUPPORTS_TDM (1) #define SOC_I2S_TDM_FULL_DATA_WIDTH (1) /*!< No limitation to data bit width when using multiple slots */ +#define SOC_I2S_SUPPORT_SLEEP_RETENTION 1 /*!< The sleep retention feature can help back up I2S registers before sleep */ /*-------------------------- LEDC CAPS ---------------------------------------*/ #define SOC_LEDC_SUPPORT_PLL_DIV_CLOCK (1) diff --git a/components/soc/esp32p4/i2s_periph.c b/components/soc/esp32p4/i2s_periph.c index a0208659f1f1..5f623aea5334 100644 --- a/components/soc/esp32p4/i2s_periph.c +++ b/components/soc/esp32p4/i2s_periph.c @@ -5,6 +5,7 @@ */ #include "soc/i2s_periph.h" +#include "soc/i2s_reg.h" #include "soc/gpio_sig_map.h" #include "soc/lp_gpio_sig_map.h" @@ -34,7 +35,7 @@ const i2s_signal_conn_t i2s_periph_signal[SOC_I2S_NUM] = { .data_in_sigs[3] = I2S0_I_SD3_PAD_IN_IDX, .irq = ETS_I2S0_INTR_SOURCE, - .module = PERIPH_I2S0_MODULE, + .retention_module = SLEEP_RETENTION_MODULE_I2S0, }, [1] = { .mck_out_sig = I2S1_MCLK_PAD_OUT_IDX, @@ -58,7 +59,7 @@ const i2s_signal_conn_t i2s_periph_signal[SOC_I2S_NUM] = { .data_in_sigs[3] = -1, .irq = ETS_I2S1_INTR_SOURCE, - .module = PERIPH_I2S1_MODULE, + .retention_module = SLEEP_RETENTION_MODULE_I2S1, }, [2] = { .mck_out_sig = I2S2_MCLK_PAD_OUT_IDX, @@ -82,7 +83,7 @@ const i2s_signal_conn_t i2s_periph_signal[SOC_I2S_NUM] = { .data_in_sigs[3] = -1, .irq = ETS_I2S2_INTR_SOURCE, - .module = PERIPH_I2S2_MODULE, + .retention_module = SLEEP_RETENTION_MODULE_I2S2, }, }; @@ -111,3 +112,56 @@ const i2s_signal_conn_t lp_i2s_periph_signal[SOC_LP_I2S_NUM] = { .irq = ETS_LP_I2S_INTR_SOURCE, }, }; + +/** + * I2S Registers to be saved during sleep retention + * - I2S_RX_CONF_REG + * - I2S_TX_CONF_REG + * - I2S_RX_CONF1_REG + * - I2S_TX_CONF1_REG + * - I2S_TX_PCM2PDM_CONF_REG + * - I2S_TX_PCM2PDM_CONF1_REG + * - I2S_RX_PDM2PCM_CONF_REG + * - I2S_RX_TDM_CTRL_REG + * - I2S_TX_TDM_CTRL_REG + * - I2S_RXEOF_NUM_REG + * - I2S_ETM_CONF_REG +*/ +#define I2S_RETENTION_REGS_CNT 11 +#define I2S_RETENTION_REGS_BASE(i) I2S_RX_CONF_REG(i) +static const uint32_t i2s_regs_map[4] = {0x12370f, 0x0, 0x0, 0x0}; +#define I2S_SLEEP_RETENTION_ENTRIES(i2s_port) { \ + [0] = { .config = REGDMA_LINK_ADDR_MAP_INIT( \ + REGDMA_I2S_LINK(0x00), \ + I2S_RETENTION_REGS_BASE(i2s_port), \ + I2S_RETENTION_REGS_BASE(i2s_port), \ + I2S_RETENTION_REGS_CNT, 0, 0, \ + i2s_regs_map[0], i2s_regs_map[1], \ + i2s_regs_map[2], i2s_regs_map[3]), \ + .owner = ENTRY(0)}, \ + [1] = { .config = REGDMA_LINK_WRITE_INIT( \ + REGDMA_I2S_LINK(0x01), I2S_RX_CONF_REG(i2s_port), I2S_RX_UPDATE, I2S_RX_UPDATE_M, 1, 0), \ + .owner = ENTRY(0) | ENTRY(2)}, \ + [2] = { .config = REGDMA_LINK_WRITE_INIT( \ + REGDMA_I2S_LINK(0x02), I2S_TX_CONF_REG(i2s_port), I2S_TX_UPDATE, I2S_TX_UPDATE_M, 1, 0), \ + .owner = ENTRY(0) | ENTRY(2)} \ +}; + +static const regdma_entries_config_t i2s0_regs_retention[] = I2S_SLEEP_RETENTION_ENTRIES(0); +static const regdma_entries_config_t i2s1_regs_retention[] = I2S_SLEEP_RETENTION_ENTRIES(1); +static const regdma_entries_config_t i2s2_regs_retention[] = I2S_SLEEP_RETENTION_ENTRIES(2); + +const i2s_reg_retention_info_t i2s_reg_retention_info[SOC_I2S_NUM] = { + [0] = { + .entry_array = i2s0_regs_retention, + .array_size = ARRAY_SIZE(i2s0_regs_retention) + }, + [1] = { + .entry_array = i2s1_regs_retention, + .array_size = ARRAY_SIZE(i2s1_regs_retention) + }, + [2] = { + .entry_array = i2s2_regs_retention, + .array_size = ARRAY_SIZE(i2s2_regs_retention) + }, +}; diff --git a/components/soc/esp32p4/include/soc/Kconfig.soc_caps.in b/components/soc/esp32p4/include/soc/Kconfig.soc_caps.in index 32f555421ef1..a883653c744d 100644 --- a/components/soc/esp32p4/include/soc/Kconfig.soc_caps.in +++ b/components/soc/esp32p4/include/soc/Kconfig.soc_caps.in @@ -843,6 +843,10 @@ config SOC_I2S_TDM_FULL_DATA_WIDTH bool default y +config SOC_I2S_SUPPORT_SLEEP_RETENTION + bool + default y + config SOC_LP_I2S_NUM int default 1 diff --git a/components/soc/esp32p4/include/soc/retention_periph_defs.h b/components/soc/esp32p4/include/soc/retention_periph_defs.h index f70293e0f781..b069f7babd2a 100644 --- a/components/soc/esp32p4/include/soc/retention_periph_defs.h +++ b/components/soc/esp32p4/include/soc/retention_periph_defs.h @@ -41,6 +41,10 @@ typedef enum periph_retention_module { SLEEP_RETENTION_MODULE_AXI_DMA_CH1 = 17, SLEEP_RETENTION_MODULE_AXI_DMA_CH2 = 18, + SLEEP_RETENTION_MODULE_I2S0 = 19, + SLEEP_RETENTION_MODULE_I2S1 = 20, + SLEEP_RETENTION_MODULE_I2S2 = 21, + SLEEP_RETENTION_MODULE_MAX = 31 } periph_retention_module_t; @@ -70,6 +74,9 @@ typedef enum periph_retention_module_bitmap { SLEEP_RETENTION_MODULE_BM_UART3 = BIT(SLEEP_RETENTION_MODULE_UART3), SLEEP_RETENTION_MODULE_BM_UART4 = BIT(SLEEP_RETENTION_MODULE_UART4), SLEEP_RETENTION_MODULE_BM_RMT0 = BIT(SLEEP_RETENTION_MODULE_RMT0), + SLEEP_RETENTION_MODULE_BM_I2S0 = BIT(SLEEP_RETENTION_MODULE_I2S0), + SLEEP_RETENTION_MODULE_BM_I2S1 = BIT(SLEEP_RETENTION_MODULE_I2S1), + SLEEP_RETENTION_MODULE_BM_I2S2 = BIT(SLEEP_RETENTION_MODULE_I2S2), SLEEP_RETENTION_MODULE_BM_ALL = (uint32_t)-1 } periph_retention_module_bitmap_t; @@ -91,6 +98,9 @@ typedef enum periph_retention_module_bitmap { | SLEEP_RETENTION_MODULE_BM_UART3 \ | SLEEP_RETENTION_MODULE_BM_UART4 \ | SLEEP_RETENTION_MODULE_BM_RMT0 \ + | SLEEP_RETENTION_MODULE_BM_I2S0 \ + | SLEEP_RETENTION_MODULE_BM_I2S1 \ + | SLEEP_RETENTION_MODULE_BM_I2S2 \ ) #ifdef __cplusplus diff --git a/components/soc/esp32p4/include/soc/soc_caps.h b/components/soc/esp32p4/include/soc/soc_caps.h index 33cf1c070a8f..d7dcd4200f07 100644 --- a/components/soc/esp32p4/include/soc/soc_caps.h +++ b/components/soc/esp32p4/include/soc/soc_caps.h @@ -328,6 +328,7 @@ #define SOC_I2S_PDM_MAX_TX_LINES (2) // On I2S0 #define SOC_I2S_PDM_MAX_RX_LINES (4) // On I2S0 #define SOC_I2S_TDM_FULL_DATA_WIDTH (1) /*!< No limitation to data bit width when using multiple slots */ +#define SOC_I2S_SUPPORT_SLEEP_RETENTION 1 /*!< The sleep retention feature can help back up I2S registers before sleep */ /*-------------------------- LP_I2S CAPS -------------------------------------*/ #define SOC_LP_I2S_NUM (1U) diff --git a/components/soc/esp32s2/i2s_periph.c b/components/soc/esp32s2/i2s_periph.c index 25b4804cb2d2..c13b47926dfb 100644 --- a/components/soc/esp32s2/i2s_periph.c +++ b/components/soc/esp32s2/i2s_periph.c @@ -29,6 +29,5 @@ const i2s_signal_conn_t i2s_periph_signal[SOC_I2S_NUM] = { .data_in_sig = I2S0I_DATA_IN15_IDX, .irq = ETS_I2S0_INTR_SOURCE, - .module = PERIPH_I2S0_MODULE, } }; diff --git a/components/soc/esp32s3/i2s_periph.c b/components/soc/esp32s3/i2s_periph.c index 853541bd9eb2..9d040cfc5451 100644 --- a/components/soc/esp32s3/i2s_periph.c +++ b/components/soc/esp32s3/i2s_periph.c @@ -33,7 +33,6 @@ const i2s_signal_conn_t i2s_periph_signal[SOC_I2S_NUM] = { .data_in_sigs[3] = I2S0I_SD3_IN_IDX, .irq = ETS_I2S0_INTR_SOURCE, - .module = PERIPH_I2S0_MODULE, }, { .mck_out_sig = I2S1_MCLK_OUT_IDX, @@ -57,6 +56,5 @@ const i2s_signal_conn_t i2s_periph_signal[SOC_I2S_NUM] = { .data_in_sigs[3] = -1, .irq = ETS_I2S1_INTR_SOURCE, - .module = PERIPH_I2S1_MODULE, } }; diff --git a/components/soc/include/soc/i2s_periph.h b/components/soc/include/soc/i2s_periph.h index cf2d483f48f6..8100bb9a1810 100644 --- a/components/soc/include/soc/i2s_periph.h +++ b/components/soc/include/soc/i2s_periph.h @@ -1,13 +1,15 @@ /* - * SPDX-FileCopyrightText: 2020-2022 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2020-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ #pragma once #include "soc/soc.h" -#include "soc/periph_defs.h" +#include "soc/retention_periph_defs.h" +#include "soc/interrupts.h" #include "soc/soc_caps.h" +#include "soc/regdma.h" #if SOC_I2S_SUPPORTED #include "soc/i2s_struct.h" @@ -51,7 +53,9 @@ typedef struct { }; const uint8_t irq; - const periph_module_t module; +#if SOC_I2S_SUPPORT_SLEEP_RETENTION + const periph_retention_module_t retention_module; +#endif } i2s_signal_conn_t; extern const i2s_signal_conn_t i2s_periph_signal[SOC_I2S_NUM]; @@ -62,6 +66,15 @@ extern const i2s_signal_conn_t lp_i2s_periph_signal[SOC_LP_I2S_NUM]; #endif // SOC_I2S_SUPPORTED +#if SOC_I2S_SUPPORT_SLEEP_RETENTION +typedef struct { + const regdma_entries_config_t *entry_array; + uint32_t array_size; +} i2s_reg_retention_info_t; + +extern const i2s_reg_retention_info_t i2s_reg_retention_info[SOC_I2S_NUM]; +#endif // SOC_I2S_SUPPORT_SLEEP_RETENTION + #ifdef __cplusplus } #endif diff --git a/components/soc/include/soc/regdma.h b/components/soc/include/soc/regdma.h index c48c66d0ebff..c3c62081f002 100644 --- a/components/soc/include/soc/regdma.h +++ b/components/soc/include/soc/regdma.h @@ -53,6 +53,7 @@ extern "C" { #define REGDMA_TG1_WDT_LINK(_pri) ((0x1B << 8) | _pri) #define REGDMA_TG0_TIMER_LINK(_pri) ((0x1C << 8) | _pri) #define REGDMA_TG1_TIMER_LINK(_pri) ((0x1D << 8) | _pri) +#define REGDMA_I2S_LINK(_pri) ((0x1E << 8) | _pri) #define REGDMA_MODEM_FE_LINK(_pri) ((0xFF << 8) | _pri) #define REGDMA_LINK_PRI_SYS_CLK REGDMA_LINK_PRI_0 @@ -69,6 +70,7 @@ extern "C" { #define REGDMA_LINK_PRI_RMT REGDMA_LINK_PRI_GENERAL_PERIPH #define REGDMA_LINK_PRI_GPTIMER REGDMA_LINK_PRI_GENERAL_PERIPH #define REGDMA_LINK_PRI_I2C REGDMA_LINK_PRI_GENERAL_PERIPH +#define REGDMA_LINK_PRI_I2S REGDMA_LINK_PRI_GENERAL_PERIPH #define REGDMA_LINK_PRI_UART REGDMA_LINK_PRI_GENERAL_PERIPH typedef enum { diff --git a/docs/en/api-reference/system/power_management.rst b/docs/en/api-reference/system/power_management.rst index da52d19b09f8..8a7b9c37ba80 100644 --- a/docs/en/api-reference/system/power_management.rst +++ b/docs/en/api-reference/system/power_management.rst @@ -153,6 +153,7 @@ The following peripheral drivers are not aware of DFS yet. Applications need to - SYSTIMER :SOC_RMT_SUPPORT_SLEEP_RETENTION: - RMT :SOC_I2C_SUPPORT_SLEEP_RETENTION: - I2C + :SOC_I2S_SUPPORT_SLEEP_RETENTION: - I2S :SOC_UART_SUPPORT_SLEEP_RETENTION: - All UARTs The following peripherals are not yet supported: @@ -164,7 +165,6 @@ The following peripheral drivers are not aware of DFS yet. Applications need to - Trace - Crypto: AES/ECC/HMAC/RSA/SHA/DS/XTA_AES/ECDSA - SPI2 - - I2S - PCNT - USB-Serial-JTAG - TWAI diff --git a/docs/zh_CN/api-reference/system/power_management.rst b/docs/zh_CN/api-reference/system/power_management.rst index 3762008505d0..6d1e464abc05 100644 --- a/docs/zh_CN/api-reference/system/power_management.rst +++ b/docs/zh_CN/api-reference/system/power_management.rst @@ -152,7 +152,8 @@ ESP-IDF 中集成的电源管理算法可以根据应用程序组件的需求, - SPI0/1 - SYSTIMER :SOC_RMT_SUPPORT_SLEEP_RETENTION: - RMT - :SOC_I2C_SUPPORT_SLEEP_RETENTION:- I2C + :SOC_I2C_SUPPORT_SLEEP_RETENTION: - I2C + :SOC_I2S_SUPPORT_SLEEP_RETENTION: - I2S :SOC_UART_SUPPORT_SLEEP_RETENTION: - All UARTs 以下外设尚未支持: @@ -164,7 +165,6 @@ ESP-IDF 中集成的电源管理算法可以根据应用程序组件的需求, - Trace - Crypto: AES/ECC/HMAC/RSA/SHA/DS/XTA_AES/ECDSA - SPI2 - - I2S - PCNT - USB-Serial-JTAG - TWAI From ae36f8494520ae2682aa486e2016de8f3fbc363d Mon Sep 17 00:00:00 2001 From: laokaiyao Date: Sat, 14 Sep 2024 18:27:27 +0800 Subject: [PATCH 038/365] feat(i2s): enable i2s test on c5 --- components/esp_driver_i2s/i2s_common.c | 8 +- components/esp_driver_i2s/i2s_private.h | 4 + .../include/driver/i2s_common.h | 9 +- .../test_apps/.build-test-rules.yml | 4 - .../test_apps/i2s/main/CMakeLists.txt | 7 +- .../test_apps/i2s/main/test_i2s.c | 2 +- ...t_i2s_slp_retention.c => test_i2s_sleep.c} | 104 +++++++++++++----- .../test_apps/i2s/pytest_i2s.py | 2 +- components/soc/esp32c5/i2s_periph.c | 5 +- components/soc/esp32c6/i2s_periph.c | 5 +- components/soc/esp32h2/i2s_periph.c | 9 +- components/soc/esp32p4/i2s_periph.c | 9 +- components/soc/include/soc/i2s_periph.h | 8 +- docs/en/api-reference/peripherals/i2s.rst | 9 ++ docs/zh_CN/api-reference/peripherals/i2s.rst | 9 ++ 15 files changed, 134 insertions(+), 60 deletions(-) rename components/esp_driver_i2s/test_apps/i2s/main/{test_i2s_slp_retention.c => test_i2s_sleep.c} (58%) diff --git a/components/esp_driver_i2s/i2s_common.c b/components/esp_driver_i2s/i2s_common.c index 6586c3f1f069..06f4449d2507 100644 --- a/components/esp_driver_i2s/i2s_common.c +++ b/components/esp_driver_i2s/i2s_common.c @@ -41,7 +41,9 @@ #include "esp_private/i2s_platform.h" #include "esp_private/esp_clk.h" +#if SOC_I2S_SUPPORT_SLEEP_RETENTION #include "esp_private/sleep_retention.h" +#endif #include "driver/gpio.h" #include "esp_private/gpio.h" @@ -258,7 +260,7 @@ static i2s_controller_t *i2s_acquire_controller_obj(int id) #endif #if I2S_USE_RETENTION_LINK - sleep_retention_module_t module = i2s_periph_signal[id].retention_module; + sleep_retention_module_t module = i2s_reg_retention_info[id].retention_module; sleep_retention_module_init_param_t init_param = { .cbs = { .create = { @@ -936,7 +938,7 @@ esp_err_t i2s_new_channel(const i2s_chan_config_t *chan_cfg, i2s_chan_handle_t * ESP_RETURN_ON_FALSE(chan_cfg->dma_desc_num >= 2, ESP_ERR_INVALID_ARG, TAG, "there should be at least 2 DMA buffers"); ESP_RETURN_ON_FALSE(chan_cfg->intr_priority >= 0 && chan_cfg->intr_priority <= 7, ESP_ERR_INVALID_ARG, TAG, "intr_priority should be within 0~7"); #if !SOC_I2S_SUPPORT_SLEEP_RETENTION - ESP_RETURN_ON_FALSE(!chan_cfg->backup_before_sleep, ESP_ERR_NOT_SUPPORTED, TAG, "register back up is not supported"); + ESP_RETURN_ON_FALSE(!chan_cfg->allow_pd, ESP_ERR_NOT_SUPPORTED, TAG, "register back up is not supported"); #endif esp_err_t ret = ESP_OK; @@ -997,7 +999,7 @@ esp_err_t i2s_new_channel(const i2s_chan_config_t *chan_cfg, i2s_chan_handle_t * i2s_obj->full_duplex = true; } #if I2S_USE_RETENTION_LINK - if (chan_cfg->backup_before_sleep) { + if (chan_cfg->allow_pd) { s_i2s_create_retention_module(i2s_obj); } #endif diff --git a/components/esp_driver_i2s/i2s_private.h b/components/esp_driver_i2s/i2s_private.h index 0cfccbaf942c..bc2cc1f8b4c7 100644 --- a/components/esp_driver_i2s/i2s_private.h +++ b/components/esp_driver_i2s/i2s_private.h @@ -26,7 +26,9 @@ #endif #include "esp_private/periph_ctrl.h" #include "esp_private/esp_gpio_reserve.h" +#if SOC_I2S_SUPPORT_SLEEP_RETENTION #include "esp_private/sleep_retention.h" +#endif #include "esp_pm.h" #include "esp_err.h" #include "sdkconfig.h" @@ -135,8 +137,10 @@ typedef struct { i2s_chan_handle_t tx_chan; /*!< tx channel handler */ i2s_chan_handle_t rx_chan; /*!< rx channel handler */ _lock_t mutex; /*!< mutex for controller */ +#if SOC_I2S_SUPPORT_SLEEP_RETENTION sleep_retention_module_t slp_retention_mod; /*!< Sleep retention module */ bool retention_link_created; /*!< Whether the retention link is created */ +#endif int mclk; /*!< MCK out pin, shared by tx/rx*/ #if CONFIG_IDF_TARGET_ESP32 esp_clock_output_mapping_handle_t mclk_out_hdl; /*!< The handle of MCLK output signal */ diff --git a/components/esp_driver_i2s/include/driver/i2s_common.h b/components/esp_driver_i2s/include/driver/i2s_common.h index 10c0f5211e78..fd7a249da309 100644 --- a/components/esp_driver_i2s/include/driver/i2s_common.h +++ b/components/esp_driver_i2s/include/driver/i2s_common.h @@ -26,7 +26,7 @@ extern "C" { .dma_frame_num = 240, \ .auto_clear_after_cb = false, \ .auto_clear_before_cb = false, \ - .backup_before_sleep = false, \ + .allow_pd = false, \ .intr_priority = 0, \ } @@ -74,9 +74,10 @@ typedef struct { bool auto_clear_before_cb; /*!< Set to auto clear DMA TX buffer before `on_sent` callback, I2S will always send zero automatically if no data to send * So that user can access data in the callback that just finished to send. */ - bool backup_before_sleep; /*!< If set, the driver will backup/restore the I2S registers before/after entering/exist sleep mode. - By this approach, the system can power off I2S's power domain. - This can save power, but at the expense of more RAM being consumed */ + bool allow_pd; /*!< Set to allow power down. When this flag set, the driver will backup/restore the I2S registers before/after entering/exist sleep mode. + * By this approach, the system can power off I2S's power domain. + * This can save power, but at the expense of more RAM being consumed. + */ int intr_priority; /*!< I2S interrupt priority, range [0, 7], if set to 0, the driver will try to allocate an interrupt with a relative low priority (1,2,3) */ } i2s_chan_config_t; diff --git a/components/esp_driver_i2s/test_apps/.build-test-rules.yml b/components/esp_driver_i2s/test_apps/.build-test-rules.yml index 7ba0e4b61bfd..8ecfb0daeb2f 100644 --- a/components/esp_driver_i2s/test_apps/.build-test-rules.yml +++ b/components/esp_driver_i2s/test_apps/.build-test-rules.yml @@ -3,10 +3,6 @@ components/esp_driver_i2s/test_apps/i2s: disable: - if: SOC_I2S_SUPPORTED != 1 - disable_test: - - if: IDF_TARGET == "esp32c5" - temporary: true - reason: target test failed # TODO [ESP32C5] IDF-10343 depends_components: - esp_driver_i2s - esp_driver_pcnt diff --git a/components/esp_driver_i2s/test_apps/i2s/main/CMakeLists.txt b/components/esp_driver_i2s/test_apps/i2s/main/CMakeLists.txt index 63623c66c7e8..d90f51c9f47e 100644 --- a/components/esp_driver_i2s/test_apps/i2s/main/CMakeLists.txt +++ b/components/esp_driver_i2s/test_apps/i2s/main/CMakeLists.txt @@ -1,15 +1,12 @@ set(srcs "test_app_main.c" "test_i2s.c" - "test_i2s_iram.c") + "test_i2s_iram.c" + "test_i2s_sleep.c") if(CONFIG_SOC_I2S_SUPPORTS_ETM AND CONFIG_SOC_GPIO_SUPPORT_ETM) set(srcs ${srcs} "test_i2s_etm.c") endif() -if(CONFIG_SOC_I2S_SUPPORT_SLEEP_RETENTION) - list(APPEND srcs "test_i2s_slp_retention.c") -endif() - idf_component_register(SRCS ${srcs} PRIV_REQUIRES unity esp_driver_pcnt spi_flash esp_driver_gpio esp_driver_i2s esp_driver_uart WHOLE_ARCHIVE) diff --git a/components/esp_driver_i2s/test_apps/i2s/main/test_i2s.c b/components/esp_driver_i2s/test_apps/i2s/main/test_i2s.c index dc86526b16f7..43b2c705266b 100644 --- a/components/esp_driver_i2s/test_apps/i2s/main/test_i2s.c +++ b/components/esp_driver_i2s/test_apps/i2s/main/test_i2s.c @@ -776,7 +776,7 @@ static void i2s_test_common_sample_rate(i2s_chan_handle_t rx_chan, i2s_std_clk_c printf("[%"PRIu32" Hz] %d pulses, expected %d, err %d\n", test_freq[i], real_pulse, expt_pulse, real_pulse - expt_pulse); TEST_ESP_OK(i2s_channel_disable(rx_chan)); // Check if the error between real pulse number and expected pulse number is within 1% - TEST_ASSERT_INT_WITHIN(expt_pulse * 0.01, expt_pulse, real_pulse); + TEST_ASSERT_INT_WITHIN(expt_pulse * 0.02, expt_pulse, real_pulse); } TEST_ESP_OK(pcnt_del_channel(pcnt_chan)); TEST_ESP_OK(pcnt_unit_stop(pcnt_unit)); diff --git a/components/esp_driver_i2s/test_apps/i2s/main/test_i2s_slp_retention.c b/components/esp_driver_i2s/test_apps/i2s/main/test_i2s_sleep.c similarity index 58% rename from components/esp_driver_i2s/test_apps/i2s/main/test_i2s_slp_retention.c rename to components/esp_driver_i2s/test_apps/i2s/main/test_i2s_sleep.c index 22d94ac7c824..6b5b944f3114 100644 --- a/components/esp_driver_i2s/test_apps/i2s/main/test_i2s_slp_retention.c +++ b/components/esp_driver_i2s/test_apps/i2s/main/test_i2s_sleep.c @@ -19,11 +19,11 @@ #include "esp_private/esp_pmu.h" #include "../../test_inc/test_i2s.h" -#if SOC_I2S_SUPPORT_SLEEP_RETENTION && CONFIG_PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP +#define TEST_I2S_PD_SLEEP (SOC_I2S_SUPPORT_SLEEP_RETENTION && CONFIG_PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP) extern void i2s_read_write_test(i2s_chan_handle_t tx_chan, i2s_chan_handle_t rx_chan); -static void test_i2s_enter_light_sleep(int sec) +static void s_test_i2s_enter_light_sleep(int sec, bool allow_power_down) { esp_sleep_context_t sleep_ctx; esp_sleep_set_sleep_context(&sleep_ctx); @@ -42,43 +42,40 @@ static void test_i2s_enter_light_sleep(int sec) printf("Woke up from light sleep\n"); TEST_ASSERT_EQUAL(0, sleep_ctx.sleep_request_result); - TEST_ASSERT_EQUAL(PMU_SLEEP_PD_TOP, sleep_ctx.sleep_flags & PMU_SLEEP_PD_TOP); +#if SOC_I2S_SUPPORT_SLEEP_RETENTION + // check if the power domain also is powered down + TEST_ASSERT_EQUAL(allow_power_down ? PMU_SLEEP_PD_TOP : 0, (sleep_ctx.sleep_flags) & PMU_SLEEP_PD_TOP); +#endif esp_sleep_set_sleep_context(NULL); } -TEST_CASE("I2S_sleep_retention_test", "[i2s]") +static void s_test_i2s_sleep(i2s_chan_handle_t tx_handle, i2s_chan_handle_t rx_handle, bool allow_power_down) { - i2s_chan_handle_t tx_handle; - i2s_chan_handle_t rx_handle; + /* Enter light sleep before I2S channel enabled and wake up after 1 second */ + s_test_i2s_enter_light_sleep(1, allow_power_down); + /* Check whether I2S can work correctly after light sleep */ + TEST_ESP_OK(i2s_channel_enable(tx_handle)); + TEST_ESP_OK(i2s_channel_enable(rx_handle)); + i2s_read_write_test(tx_handle, rx_handle); +} - i2s_chan_config_t chan_cfg = I2S_CHANNEL_DEFAULT_CONFIG(I2S_NUM_0, I2S_ROLE_MASTER); - chan_cfg.backup_before_sleep = true; - i2s_std_config_t std_cfg = { - .clk_cfg = I2S_STD_CLK_DEFAULT_CONFIG(SAMPLE_RATE), - .slot_cfg = I2S_STD_PHILIPS_SLOT_DEFAULT_CONFIG(SAMPLE_BITS, I2S_SLOT_MODE_STEREO), - .gpio_cfg = I2S_TEST_MASTER_DEFAULT_PIN, - }; - std_cfg.gpio_cfg.din = std_cfg.gpio_cfg.dout; - TEST_ESP_OK(i2s_new_channel(&chan_cfg, &tx_handle, &rx_handle)); - TEST_ESP_OK(i2s_channel_init_std_mode(tx_handle, &std_cfg)); - TEST_ESP_OK(i2s_channel_init_std_mode(rx_handle, &std_cfg)); +static void s_test_i2s_power_on_sleep(i2s_chan_handle_t tx_handle, i2s_chan_handle_t rx_handle) +{ + s_test_i2s_sleep(tx_handle, rx_handle, false); +} +#if TEST_I2S_PD_SLEEP +static void s_test_i2s_power_down_sleep(i2s_chan_handle_t tx_handle, i2s_chan_handle_t rx_handle) +{ +#if SOC_GDMA_SUPPORT_SLEEP_RETENTION + s_test_i2s_sleep(tx_handle, rx_handle, true); +#else /* I2S retention is depended on GDMA retention. * Only take two registers as sample to check the I2S retention when GDMA retention has not been supported. */ -#if !SOC_GDMA_SUPPORT_SLEEP_RETENTION i2s_tx_conf_reg_t tx_reg_before_slp = I2S0.tx_conf; i2s_rx_conf_reg_t rx_reg_before_slp = I2S0.rx_conf; -#endif - - /* Enter light sleep and wake up after 1 second */ - test_i2s_enter_light_sleep(1); - -#if SOC_GDMA_SUPPORT_SLEEP_RETENTION - /* Check whether I2S can work correctly after light sleep */ - TEST_ESP_OK(i2s_channel_enable(tx_handle)); - TEST_ESP_OK(i2s_channel_enable(rx_handle)); - i2s_read_write_test(tx_handle, rx_handle); -#else + /* Enter light sleep before I2S channel enabled and wake up after 1 second */ + s_test_i2s_enter_light_sleep(1, true); /* Only check whether the register values are restored if GDMA retention has not been supported */ i2s_tx_conf_reg_t tx_reg_after_slp = I2S0.tx_conf; i2s_rx_conf_reg_t rx_reg_after_slp = I2S0.rx_conf; @@ -88,6 +85,45 @@ TEST_CASE("I2S_sleep_retention_test", "[i2s]") TEST_ESP_OK(i2s_channel_enable(tx_handle)); TEST_ESP_OK(i2s_channel_enable(rx_handle)); + + tx_reg_before_slp.val = I2S0.tx_conf.val; + rx_reg_before_slp.val = I2S0.rx_conf.val; + /* Enter light sleep before I2S channel enabled and wake up after 1 second */ + s_test_i2s_enter_light_sleep(1, true); + /* Only check whether the register values are restored if GDMA retention has not been supported */ + tx_reg_after_slp.val = I2S0.tx_conf.val; + rx_reg_after_slp.val = I2S0.rx_conf.val; + + TEST_ASSERT_EQUAL_UINT32(tx_reg_before_slp.val, tx_reg_after_slp.val); + TEST_ASSERT_EQUAL_UINT32(rx_reg_before_slp.val, rx_reg_after_slp.val); +#endif // SOC_GDMA_SUPPORT_SLEEP_RETENTION +} +#endif // TEST_I2S_PD_SLEEP + +void test_i2s_sleep_usability(bool allow_power_down) +{ + i2s_chan_handle_t tx_handle; + i2s_chan_handle_t rx_handle; + + i2s_chan_config_t chan_cfg = I2S_CHANNEL_DEFAULT_CONFIG(I2S_NUM_0, I2S_ROLE_MASTER); + chan_cfg.allow_pd = allow_power_down; + i2s_std_config_t std_cfg = { + .clk_cfg = I2S_STD_CLK_DEFAULT_CONFIG(SAMPLE_RATE), + .slot_cfg = I2S_STD_PHILIPS_SLOT_DEFAULT_CONFIG(SAMPLE_BITS, I2S_SLOT_MODE_STEREO), + .gpio_cfg = I2S_TEST_MASTER_DEFAULT_PIN, + }; + std_cfg.gpio_cfg.din = std_cfg.gpio_cfg.dout; + TEST_ESP_OK(i2s_new_channel(&chan_cfg, &tx_handle, &rx_handle)); + TEST_ESP_OK(i2s_channel_init_std_mode(tx_handle, &std_cfg)); + TEST_ESP_OK(i2s_channel_init_std_mode(rx_handle, &std_cfg)); + + if (!allow_power_down) { + s_test_i2s_power_on_sleep(tx_handle, rx_handle); + } +#if TEST_I2S_PD_SLEEP + else { + s_test_i2s_power_down_sleep(tx_handle, rx_handle); + } #endif printf("I2S works as expected after light sleep\n"); @@ -98,4 +134,12 @@ TEST_CASE("I2S_sleep_retention_test", "[i2s]") TEST_ESP_OK(i2s_del_channel(rx_handle)); } -#endif // SOC_I2S_SUPPORT_SLEEP_RETENTION && CONFIG_PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP +TEST_CASE("I2S_light_sleep_usability_test", "[i2s]") +{ + printf("\nTesting I2S power on light sleep...\n"); + test_i2s_sleep_usability(false); +#if TEST_I2S_PD_SLEEP + printf("\nTesting I2S power down light sleep...\n"); + test_i2s_sleep_usability(true); +#endif +} diff --git a/components/esp_driver_i2s/test_apps/i2s/pytest_i2s.py b/components/esp_driver_i2s/test_apps/i2s/pytest_i2s.py index 455fe049da64..a2fa85533b35 100644 --- a/components/esp_driver_i2s/test_apps/i2s/pytest_i2s.py +++ b/components/esp_driver_i2s/test_apps/i2s/pytest_i2s.py @@ -7,7 +7,7 @@ @pytest.mark.esp32 @pytest.mark.esp32s2 @pytest.mark.esp32c3 -# @pytest.mark.esp32c5 # TODO: [ESP32C5] IDF-10343 +@pytest.mark.esp32c5 @pytest.mark.esp32c6 @pytest.mark.esp32s3 @pytest.mark.esp32h2 diff --git a/components/soc/esp32c5/i2s_periph.c b/components/soc/esp32c5/i2s_periph.c index ff683a2f8110..41c41b69d8f7 100644 --- a/components/soc/esp32c5/i2s_periph.c +++ b/components/soc/esp32c5/i2s_periph.c @@ -31,7 +31,6 @@ const i2s_signal_conn_t i2s_periph_signal[SOC_I2S_NUM] = { .data_in_sig = I2SI_SD_IN_IDX, .irq = ETS_I2S1_INTR_SOURCE, - .retention_module = SLEEP_RETENTION_MODULE_I2S0, } }; @@ -52,6 +51,7 @@ const i2s_signal_conn_t i2s_periph_signal[SOC_I2S_NUM] = { #define I2S_RETENTION_REGS_BASE(i) I2S_RX_CONF_REG(i) static const uint32_t i2s_regs_map[4] = {0x12360f, 0x0, 0x0, 0x0}; #define I2S_SLEEP_RETENTION_ENTRIES(i2s_port) { \ + /* Save/restore the register values */ \ [0] = { .config = REGDMA_LINK_ADDR_MAP_INIT( \ REGDMA_I2S_LINK(0x00), \ I2S_RETENTION_REGS_BASE(i2s_port), \ @@ -60,9 +60,11 @@ static const uint32_t i2s_regs_map[4] = {0x12360f, 0x0, 0x0, 0x0}; i2s_regs_map[0], i2s_regs_map[1], \ i2s_regs_map[2], i2s_regs_map[3]), \ .owner = ENTRY(0) | ENTRY(2)}, \ + /* Set the RX_UPDATE after the retention to make sure the RX configurations are synchronized */ \ [1] = { .config = REGDMA_LINK_WRITE_INIT( \ REGDMA_I2S_LINK(0x01), I2S_RX_CONF_REG(i2s_port), I2S_RX_UPDATE, I2S_RX_UPDATE_M, 1, 0), \ .owner = ENTRY(0) | ENTRY(2)}, \ + /* Set the TX_UPDATE after the retention to make sure the TX configurations are synchronized */ \ [2] = { .config = REGDMA_LINK_WRITE_INIT( \ REGDMA_I2S_LINK(0x02), I2S_TX_CONF_REG(i2s_port), I2S_TX_UPDATE, I2S_TX_UPDATE_M, 1, 0), \ .owner = ENTRY(0) | ENTRY(2)} \ @@ -72,6 +74,7 @@ static const regdma_entries_config_t i2s0_regs_retention[] = I2S_SLEEP_RETENTION const i2s_reg_retention_info_t i2s_reg_retention_info[SOC_I2S_NUM] = { [0] = { + .retention_module = SLEEP_RETENTION_MODULE_I2S0, .entry_array = i2s0_regs_retention, .array_size = ARRAY_SIZE(i2s0_regs_retention) }, diff --git a/components/soc/esp32c6/i2s_periph.c b/components/soc/esp32c6/i2s_periph.c index 3f3ed3974ab5..2aebe5e03ded 100644 --- a/components/soc/esp32c6/i2s_periph.c +++ b/components/soc/esp32c6/i2s_periph.c @@ -31,7 +31,6 @@ const i2s_signal_conn_t i2s_periph_signal[SOC_I2S_NUM] = { .data_in_sig = I2SI_SD_IN_IDX, .irq = ETS_I2S1_INTR_SOURCE, - .retention_module = SLEEP_RETENTION_MODULE_I2S0, } }; @@ -52,6 +51,7 @@ const i2s_signal_conn_t i2s_periph_signal[SOC_I2S_NUM] = { #define I2S_RETENTION_REGS_BASE(i) I2S_RX_CONF_REG(i) static const uint32_t i2s_regs_map[4] = {0x12330f, 0x0, 0x0, 0x0}; #define I2S_SLEEP_RETENTION_ENTRIES(i2s_port) { \ + /* Save/restore the register values */ \ [0] = { .config = REGDMA_LINK_ADDR_MAP_INIT( \ REGDMA_I2S_LINK(0x00), \ I2S_RETENTION_REGS_BASE(i2s_port), \ @@ -60,9 +60,11 @@ static const uint32_t i2s_regs_map[4] = {0x12330f, 0x0, 0x0, 0x0}; i2s_regs_map[0], i2s_regs_map[1], \ i2s_regs_map[2], i2s_regs_map[3]), \ .owner = ENTRY(0) | ENTRY(2)}, \ + /* Set the RX_UPDATE after the retention to make sure the RX configurations are synchronized */ \ [1] = { .config = REGDMA_LINK_WRITE_INIT( \ REGDMA_I2S_LINK(0x01), I2S_RX_CONF_REG(i2s_port), I2S_RX_UPDATE, I2S_RX_UPDATE_M, 1, 0), \ .owner = ENTRY(0) | ENTRY(2)}, \ + /* Set the TX_UPDATE after the retention to make sure the TX configurations are synchronized */ \ [2] = { .config = REGDMA_LINK_WRITE_INIT( \ REGDMA_I2S_LINK(0x02), I2S_TX_CONF_REG(i2s_port), I2S_TX_UPDATE, I2S_TX_UPDATE_M, 1, 0), \ .owner = ENTRY(0) | ENTRY(2)} \ @@ -72,6 +74,7 @@ static const regdma_entries_config_t i2s0_regs_retention[] = I2S_SLEEP_RETENTION const i2s_reg_retention_info_t i2s_reg_retention_info[SOC_I2S_NUM] = { [0] = { + .retention_module = SLEEP_RETENTION_MODULE_I2S0, .entry_array = i2s0_regs_retention, .array_size = ARRAY_SIZE(i2s0_regs_retention) }, diff --git a/components/soc/esp32h2/i2s_periph.c b/components/soc/esp32h2/i2s_periph.c index 582e624c4f8f..60a1ee3f094a 100644 --- a/components/soc/esp32h2/i2s_periph.c +++ b/components/soc/esp32h2/i2s_periph.c @@ -30,7 +30,6 @@ const i2s_signal_conn_t i2s_periph_signal[SOC_I2S_NUM] = { .data_in_sig = I2SI_SD_IN_IDX, .irq = ETS_I2S1_INTR_SOURCE, - .retention_module = SLEEP_RETENTION_MODULE_I2S0, } }; @@ -51,6 +50,7 @@ const i2s_signal_conn_t i2s_periph_signal[SOC_I2S_NUM] = { #define I2S_RETENTION_REGS_BASE(i) I2S_RX_CONF_REG static const uint32_t i2s_regs_map[4] = {0x12330f, 0x0, 0x0, 0x0}; #define I2S_SLEEP_RETENTION_ENTRIES(i2s_port) { \ + /* Save/restore the register values */ \ [0] = { .config = REGDMA_LINK_ADDR_MAP_INIT( \ REGDMA_I2S_LINK(0x00), \ I2S_RETENTION_REGS_BASE(i2s_port), \ @@ -59,11 +59,13 @@ static const uint32_t i2s_regs_map[4] = {0x12330f, 0x0, 0x0, 0x0}; i2s_regs_map[0], i2s_regs_map[1], \ i2s_regs_map[2], i2s_regs_map[3]), \ .owner = ENTRY(0) | ENTRY(2)}, \ + /* Set the RX_UPDATE after the retention to make sure the RX configurations are synchronized */ \ [1] = { .config = REGDMA_LINK_WRITE_INIT( \ - REGDMA_I2S_LINK(0x01), I2S_RX_CONF_REG(i2s_port), I2S_RX_UPDATE, I2S_RX_UPDATE_M, 1, 0), \ + REGDMA_I2S_LINK(0x01), I2S_RX_CONF_REG, I2S_RX_UPDATE, I2S_RX_UPDATE_M, 1, 0), \ .owner = ENTRY(0) | ENTRY(2)}, \ + /* Set the TX_UPDATE after the retention to make sure the TX configurations are synchronized */ \ [2] = { .config = REGDMA_LINK_WRITE_INIT( \ - REGDMA_I2S_LINK(0x02), I2S_TX_CONF_REG(i2s_port), I2S_TX_UPDATE, I2S_TX_UPDATE_M, 1, 0), \ + REGDMA_I2S_LINK(0x02), I2S_TX_CONF_REG, I2S_TX_UPDATE, I2S_TX_UPDATE_M, 1, 0), \ .owner = ENTRY(0) | ENTRY(2)} \ }; @@ -71,6 +73,7 @@ static const regdma_entries_config_t i2s0_regs_retention[] = I2S_SLEEP_RETENTION const i2s_reg_retention_info_t i2s_reg_retention_info[SOC_I2S_NUM] = { [0] = { + .retention_module = SLEEP_RETENTION_MODULE_I2S0, .entry_array = i2s0_regs_retention, .array_size = ARRAY_SIZE(i2s0_regs_retention) }, diff --git a/components/soc/esp32p4/i2s_periph.c b/components/soc/esp32p4/i2s_periph.c index 5f623aea5334..b16e26261530 100644 --- a/components/soc/esp32p4/i2s_periph.c +++ b/components/soc/esp32p4/i2s_periph.c @@ -35,7 +35,6 @@ const i2s_signal_conn_t i2s_periph_signal[SOC_I2S_NUM] = { .data_in_sigs[3] = I2S0_I_SD3_PAD_IN_IDX, .irq = ETS_I2S0_INTR_SOURCE, - .retention_module = SLEEP_RETENTION_MODULE_I2S0, }, [1] = { .mck_out_sig = I2S1_MCLK_PAD_OUT_IDX, @@ -59,7 +58,6 @@ const i2s_signal_conn_t i2s_periph_signal[SOC_I2S_NUM] = { .data_in_sigs[3] = -1, .irq = ETS_I2S1_INTR_SOURCE, - .retention_module = SLEEP_RETENTION_MODULE_I2S1, }, [2] = { .mck_out_sig = I2S2_MCLK_PAD_OUT_IDX, @@ -83,7 +81,6 @@ const i2s_signal_conn_t i2s_periph_signal[SOC_I2S_NUM] = { .data_in_sigs[3] = -1, .irq = ETS_I2S2_INTR_SOURCE, - .retention_module = SLEEP_RETENTION_MODULE_I2S2, }, }; @@ -131,6 +128,7 @@ const i2s_signal_conn_t lp_i2s_periph_signal[SOC_LP_I2S_NUM] = { #define I2S_RETENTION_REGS_BASE(i) I2S_RX_CONF_REG(i) static const uint32_t i2s_regs_map[4] = {0x12370f, 0x0, 0x0, 0x0}; #define I2S_SLEEP_RETENTION_ENTRIES(i2s_port) { \ + /* Save/restore the register values */ \ [0] = { .config = REGDMA_LINK_ADDR_MAP_INIT( \ REGDMA_I2S_LINK(0x00), \ I2S_RETENTION_REGS_BASE(i2s_port), \ @@ -139,9 +137,11 @@ static const uint32_t i2s_regs_map[4] = {0x12370f, 0x0, 0x0, 0x0}; i2s_regs_map[0], i2s_regs_map[1], \ i2s_regs_map[2], i2s_regs_map[3]), \ .owner = ENTRY(0)}, \ + /* Set the RX_UPDATE after the retention to make sure the RX configurations are synchronized */ \ [1] = { .config = REGDMA_LINK_WRITE_INIT( \ REGDMA_I2S_LINK(0x01), I2S_RX_CONF_REG(i2s_port), I2S_RX_UPDATE, I2S_RX_UPDATE_M, 1, 0), \ .owner = ENTRY(0) | ENTRY(2)}, \ + /* Set the TX_UPDATE after the retention to make sure the TX configurations are synchronized */ \ [2] = { .config = REGDMA_LINK_WRITE_INIT( \ REGDMA_I2S_LINK(0x02), I2S_TX_CONF_REG(i2s_port), I2S_TX_UPDATE, I2S_TX_UPDATE_M, 1, 0), \ .owner = ENTRY(0) | ENTRY(2)} \ @@ -153,14 +153,17 @@ static const regdma_entries_config_t i2s2_regs_retention[] = I2S_SLEEP_RETENTION const i2s_reg_retention_info_t i2s_reg_retention_info[SOC_I2S_NUM] = { [0] = { + .retention_module = SLEEP_RETENTION_MODULE_I2S0, .entry_array = i2s0_regs_retention, .array_size = ARRAY_SIZE(i2s0_regs_retention) }, [1] = { + .retention_module = SLEEP_RETENTION_MODULE_I2S1, .entry_array = i2s1_regs_retention, .array_size = ARRAY_SIZE(i2s1_regs_retention) }, [2] = { + .retention_module = SLEEP_RETENTION_MODULE_I2S2, .entry_array = i2s2_regs_retention, .array_size = ARRAY_SIZE(i2s2_regs_retention) }, diff --git a/components/soc/include/soc/i2s_periph.h b/components/soc/include/soc/i2s_periph.h index 8100bb9a1810..0dfc4a1196ca 100644 --- a/components/soc/include/soc/i2s_periph.h +++ b/components/soc/include/soc/i2s_periph.h @@ -6,10 +6,12 @@ #pragma once #include "soc/soc.h" -#include "soc/retention_periph_defs.h" #include "soc/interrupts.h" #include "soc/soc_caps.h" #include "soc/regdma.h" +#if SOC_I2S_SUPPORT_SLEEP_RETENTION +#include "soc/retention_periph_defs.h" +#endif #if SOC_I2S_SUPPORTED #include "soc/i2s_struct.h" @@ -53,9 +55,6 @@ typedef struct { }; const uint8_t irq; -#if SOC_I2S_SUPPORT_SLEEP_RETENTION - const periph_retention_module_t retention_module; -#endif } i2s_signal_conn_t; extern const i2s_signal_conn_t i2s_periph_signal[SOC_I2S_NUM]; @@ -68,6 +67,7 @@ extern const i2s_signal_conn_t lp_i2s_periph_signal[SOC_LP_I2S_NUM]; #if SOC_I2S_SUPPORT_SLEEP_RETENTION typedef struct { + const periph_retention_module_t retention_module; const regdma_entries_config_t *entry_array; uint32_t array_size; } i2s_reg_retention_info_t; diff --git a/docs/en/api-reference/peripherals/i2s.rst b/docs/en/api-reference/peripherals/i2s.rst index c1415498f3cc..9d0ad91bb1bf 100644 --- a/docs/en/api-reference/peripherals/i2s.rst +++ b/docs/en/api-reference/peripherals/i2s.rst @@ -234,6 +234,15 @@ When the power management is enabled (i.e., :ref:`CONFIG_PM_ENABLE` is on), the The I2S driver can prevent the system from changing or stopping the source clock by acquiring a power management lock. When the source clock is generated from APB, the lock type will be set to :cpp:enumerator:`esp_pm_lock_type_t::ESP_PM_APB_FREQ_MAX` and when the source clock is APLL (if supported), it will be set to :cpp:enumerator:`esp_pm_lock_type_t::ESP_PM_NO_LIGHT_SLEEP`. Whenever the user is reading or writing via I2S (i.e., calling :cpp:func:`i2s_channel_read` or :cpp:func:`i2s_channel_write`), the driver guarantees that the power management lock is acquired. Likewise, the driver releases the lock after the reading or writing finishes. +.. only:: SOC_I2S_SUPPORT_SLEEP_RETENTION + + Sleep Retention + """"""""""""""" + + {IDF_TARGET_NAME} supports to retain the I2S register context before entering **light sleep** and restore them after woke up. Which means you don't have to re-init the I2S driver even the peripheral is power off during the light sleep. + + This feature can be enabled by setting the flag :cpp:member:`i2s_chan_config_t::allow_pd`. It will allow the system to power down the I2S in light sleep, meanwhile save the I2S register context. It can help to save more power consumption with some extra cost of the memory. + Finite State Machine ^^^^^^^^^^^^^^^^^^^^ diff --git a/docs/zh_CN/api-reference/peripherals/i2s.rst b/docs/zh_CN/api-reference/peripherals/i2s.rst index 369f1d24b0af..0620798defbf 100644 --- a/docs/zh_CN/api-reference/peripherals/i2s.rst +++ b/docs/zh_CN/api-reference/peripherals/i2s.rst @@ -234,6 +234,15 @@ I2S 驱动中的资源可分为三个级别: I2S 驱动可以获取电源管理锁,从而防止系统设置更改或时钟源被禁用。时钟源为 APB 时,锁的类型将被设置为 :cpp:enumerator:`esp_pm_lock_type_t::ESP_PM_APB_FREQ_MAX`。时钟源为 APLL(若支持)时,锁的类型将被设置为 :cpp:enumerator:`esp_pm_lock_type_t::ESP_PM_NO_LIGHT_SLEEP`。用户通过 I2S 读写时(即调用 :cpp:func:`i2s_channel_read` 或 :cpp:func:`i2s_channel_write`),驱动程序将获取电源管理锁,并在读写完成后释放锁。 +.. only:: SOC_I2S_SUPPORT_SLEEP_RETENTION + + 睡眠保留 + """""""" + + {IDF_TARGET_NAME} 支持在进入 **轻度睡眠** 之前保留 I2S 寄存器中的内容,并在唤醒后恢复。也就是说外设若因进入 **轻度睡眠** 而掉电,程序不需要在唤醒后重新配置 I2S。 + + 该特性可以通过置位配置中的 :cpp:member:`i2s_chan_config_t::allow_pd` 标志位启用。启用后驱动允许系统在轻度睡眠时对 I2S 掉电,同时保存 I2S 的寄存器内容。它可以帮助降低轻度睡眠时的功耗,但需要花费一些额外的存储来保存寄存器的配置。 + 有限状态机 ^^^^^^^^^^ From 4ed1b873b42056b64cbba7c61fa7f74ab37c758e Mon Sep 17 00:00:00 2001 From: laokaiyao Date: Wed, 25 Sep 2024 16:35:41 +0800 Subject: [PATCH 039/365] fix(gdma): fixed GDMA retention on C5 --- components/esp_hw_support/port/esp32c5/pmu_param.c | 1 + components/esp_hw_support/port/esp32c61/pmu_param.c | 1 + components/soc/esp32c5/i2s_periph.c | 8 -------- components/soc/esp32c6/i2s_periph.c | 8 -------- components/soc/esp32h2/i2s_periph.c | 8 -------- components/soc/esp32p4/i2s_periph.c | 8 -------- 6 files changed, 2 insertions(+), 32 deletions(-) diff --git a/components/esp_hw_support/port/esp32c5/pmu_param.c b/components/esp_hw_support/port/esp32c5/pmu_param.c index c9b691c71966..e676f8c478df 100644 --- a/components/esp_hw_support/port/esp32c5/pmu_param.c +++ b/components/esp_hw_support/port/esp32c5/pmu_param.c @@ -293,6 +293,7 @@ const pmu_hp_system_analog_param_t * pmu_hp_system_analog_param_default(pmu_hp_m }, \ .backup_clk = ( \ BIT(PMU_ICG_FUNC_ENA_REGDMA) | \ + BIT(PMU_ICG_FUNC_ENA_GDMA) | \ BIT(PMU_ICG_FUNC_ENA_TG0) | \ BIT(PMU_ICG_FUNC_ENA_TG1) | \ BIT(PMU_ICG_FUNC_ENA_HPBUS) | \ diff --git a/components/esp_hw_support/port/esp32c61/pmu_param.c b/components/esp_hw_support/port/esp32c61/pmu_param.c index 5343316f8ad0..37105bef5381 100644 --- a/components/esp_hw_support/port/esp32c61/pmu_param.c +++ b/components/esp_hw_support/port/esp32c61/pmu_param.c @@ -292,6 +292,7 @@ const pmu_hp_system_analog_param_t * pmu_hp_system_analog_param_default(pmu_hp_m }, \ .backup_clk = ( \ BIT(PMU_ICG_FUNC_ENA_REGDMA) | \ + BIT(PMU_ICG_FUNC_ENA_GDMA) | \ BIT(PMU_ICG_FUNC_ENA_TG0) | \ BIT(PMU_ICG_FUNC_ENA_TG1) | \ BIT(PMU_ICG_FUNC_ENA_HPBUS) | \ diff --git a/components/soc/esp32c5/i2s_periph.c b/components/soc/esp32c5/i2s_periph.c index 41c41b69d8f7..619da2ca46e9 100644 --- a/components/soc/esp32c5/i2s_periph.c +++ b/components/soc/esp32c5/i2s_periph.c @@ -60,14 +60,6 @@ static const uint32_t i2s_regs_map[4] = {0x12360f, 0x0, 0x0, 0x0}; i2s_regs_map[0], i2s_regs_map[1], \ i2s_regs_map[2], i2s_regs_map[3]), \ .owner = ENTRY(0) | ENTRY(2)}, \ - /* Set the RX_UPDATE after the retention to make sure the RX configurations are synchronized */ \ - [1] = { .config = REGDMA_LINK_WRITE_INIT( \ - REGDMA_I2S_LINK(0x01), I2S_RX_CONF_REG(i2s_port), I2S_RX_UPDATE, I2S_RX_UPDATE_M, 1, 0), \ - .owner = ENTRY(0) | ENTRY(2)}, \ - /* Set the TX_UPDATE after the retention to make sure the TX configurations are synchronized */ \ - [2] = { .config = REGDMA_LINK_WRITE_INIT( \ - REGDMA_I2S_LINK(0x02), I2S_TX_CONF_REG(i2s_port), I2S_TX_UPDATE, I2S_TX_UPDATE_M, 1, 0), \ - .owner = ENTRY(0) | ENTRY(2)} \ }; static const regdma_entries_config_t i2s0_regs_retention[] = I2S_SLEEP_RETENTION_ENTRIES(0); diff --git a/components/soc/esp32c6/i2s_periph.c b/components/soc/esp32c6/i2s_periph.c index 2aebe5e03ded..0eba95654e17 100644 --- a/components/soc/esp32c6/i2s_periph.c +++ b/components/soc/esp32c6/i2s_periph.c @@ -60,14 +60,6 @@ static const uint32_t i2s_regs_map[4] = {0x12330f, 0x0, 0x0, 0x0}; i2s_regs_map[0], i2s_regs_map[1], \ i2s_regs_map[2], i2s_regs_map[3]), \ .owner = ENTRY(0) | ENTRY(2)}, \ - /* Set the RX_UPDATE after the retention to make sure the RX configurations are synchronized */ \ - [1] = { .config = REGDMA_LINK_WRITE_INIT( \ - REGDMA_I2S_LINK(0x01), I2S_RX_CONF_REG(i2s_port), I2S_RX_UPDATE, I2S_RX_UPDATE_M, 1, 0), \ - .owner = ENTRY(0) | ENTRY(2)}, \ - /* Set the TX_UPDATE after the retention to make sure the TX configurations are synchronized */ \ - [2] = { .config = REGDMA_LINK_WRITE_INIT( \ - REGDMA_I2S_LINK(0x02), I2S_TX_CONF_REG(i2s_port), I2S_TX_UPDATE, I2S_TX_UPDATE_M, 1, 0), \ - .owner = ENTRY(0) | ENTRY(2)} \ }; static const regdma_entries_config_t i2s0_regs_retention[] = I2S_SLEEP_RETENTION_ENTRIES(0); diff --git a/components/soc/esp32h2/i2s_periph.c b/components/soc/esp32h2/i2s_periph.c index 60a1ee3f094a..6e9b12c48792 100644 --- a/components/soc/esp32h2/i2s_periph.c +++ b/components/soc/esp32h2/i2s_periph.c @@ -59,14 +59,6 @@ static const uint32_t i2s_regs_map[4] = {0x12330f, 0x0, 0x0, 0x0}; i2s_regs_map[0], i2s_regs_map[1], \ i2s_regs_map[2], i2s_regs_map[3]), \ .owner = ENTRY(0) | ENTRY(2)}, \ - /* Set the RX_UPDATE after the retention to make sure the RX configurations are synchronized */ \ - [1] = { .config = REGDMA_LINK_WRITE_INIT( \ - REGDMA_I2S_LINK(0x01), I2S_RX_CONF_REG, I2S_RX_UPDATE, I2S_RX_UPDATE_M, 1, 0), \ - .owner = ENTRY(0) | ENTRY(2)}, \ - /* Set the TX_UPDATE after the retention to make sure the TX configurations are synchronized */ \ - [2] = { .config = REGDMA_LINK_WRITE_INIT( \ - REGDMA_I2S_LINK(0x02), I2S_TX_CONF_REG, I2S_TX_UPDATE, I2S_TX_UPDATE_M, 1, 0), \ - .owner = ENTRY(0) | ENTRY(2)} \ }; static const regdma_entries_config_t i2s0_regs_retention[] = I2S_SLEEP_RETENTION_ENTRIES(0); diff --git a/components/soc/esp32p4/i2s_periph.c b/components/soc/esp32p4/i2s_periph.c index b16e26261530..76d39c743561 100644 --- a/components/soc/esp32p4/i2s_periph.c +++ b/components/soc/esp32p4/i2s_periph.c @@ -137,14 +137,6 @@ static const uint32_t i2s_regs_map[4] = {0x12370f, 0x0, 0x0, 0x0}; i2s_regs_map[0], i2s_regs_map[1], \ i2s_regs_map[2], i2s_regs_map[3]), \ .owner = ENTRY(0)}, \ - /* Set the RX_UPDATE after the retention to make sure the RX configurations are synchronized */ \ - [1] = { .config = REGDMA_LINK_WRITE_INIT( \ - REGDMA_I2S_LINK(0x01), I2S_RX_CONF_REG(i2s_port), I2S_RX_UPDATE, I2S_RX_UPDATE_M, 1, 0), \ - .owner = ENTRY(0) | ENTRY(2)}, \ - /* Set the TX_UPDATE after the retention to make sure the TX configurations are synchronized */ \ - [2] = { .config = REGDMA_LINK_WRITE_INIT( \ - REGDMA_I2S_LINK(0x02), I2S_TX_CONF_REG(i2s_port), I2S_TX_UPDATE, I2S_TX_UPDATE_M, 1, 0), \ - .owner = ENTRY(0) | ENTRY(2)} \ }; static const regdma_entries_config_t i2s0_regs_retention[] = I2S_SLEEP_RETENTION_ENTRIES(0); From 6ff7947fefc637c5e714b9b5c326179adfcca9c7 Mon Sep 17 00:00:00 2001 From: Fu Hanxi Date: Thu, 19 Oct 2023 17:21:27 +0200 Subject: [PATCH 040/365] feat: add component_source property to component targets --- docs/en/api-guides/build-system.rst | 30 ++++- docs/zh_CN/api-guides/build-system.rst | 48 +++++-- tools/cmake/build.cmake | 24 +++- tools/cmake/component.cmake | 5 +- tools/cmake/project.cmake | 18 +-- .../scripts/component_get_requirements.cmake | 40 +++++- tools/test_build_system/conftest.py | 2 +- tools/test_build_system/pytest.ini | 1 + tools/test_build_system/test_components.py | 120 +++++++++++++++++- 9 files changed, 250 insertions(+), 38 deletions(-) diff --git a/docs/en/api-guides/build-system.rst b/docs/en/api-guides/build-system.rst index c22db7e76c8a..af6de6473478 100644 --- a/docs/en/api-guides/build-system.rst +++ b/docs/en/api-guides/build-system.rst @@ -307,7 +307,14 @@ When CMake runs to configure the project, it logs the components included in the Multiple Components with the Same Name -------------------------------------- -When ESP-IDF is collecting all the components to compile, it will do this in the order specified by ``COMPONENT_DIRS``; by default, this means ESP-IDF's internal components first (``IDF_PATH/components``), then any components in directories specified in ``EXTRA_COMPONENT_DIRS``, and finally the project's components (``PROJECT_DIR/components``). If two or more of these directories contain component sub-directories with the same name, the component in the last place searched is used. This allows, for example, overriding ESP-IDF components with a modified version by copying that component from the ESP-IDF components directory to the project components directory and then modifying it there. If used in this way, the ESP-IDF directory itself can remain untouched. +When ESP-IDF is collecting all the components to compile, the search precedence is as follows (from highest to lowest): + +* Project components +* Components from ``EXTRA_COMPONENT_DIRS`` +* Project managed components, downloaded by the IDF Component Manager into ``PROJECT_DIR/managed_components``, unless the IDF Component Manager is disabled. +* ESP-IDF components (``IDF_PATH/components``) + +If two or more of these directories contain component sub-directories with the same name, the component with higher precedence is used. This allows, for example, overriding ESP-IDF components with a modified version by copying that component from the ESP-IDF components directory to the project components directory and then modifying it there. If used in this way, the ESP-IDF directory itself can remain untouched. .. note:: @@ -1257,12 +1264,26 @@ Set a :ref:`build property ` *property* with value *val* .. code-block:: none - idf_build_component(component_dir) + idf_build_component(component_dir [component_source]) Present a directory *component_dir* that contains a component to the build system. Relative paths are converted to absolute paths with respect to current directory. -All calls to this command must be performed before `idf_build_process`. -This command does not guarantee that the component will be processed during build (see the `COMPONENTS` argument description for `idf_build_process`) +An optional *component_source* argument can be specified to indicate the source of the component. (default: "project_components") + +This argument determines the overriding priority for components with the same name. For detailed information, see :ref:`cmake-components-same-name`. + +This argument supports the following values (from highest to lowest priority): + +- "project_components" - project components +- "project_extra_components" - components from ``EXTRA_COMPONENT_DIRS`` +- "project_managed_components" - custom project dependencies managed by the IDF Component Manager +- "idf_components" - ESP-IDF built-in components, typically under :idf:`/components` + +For instance, if a component named "json" is present as both "idf_components", and "project_components", the component as "project_components" takes precedence over the one as "idf_components". + +.. warning:: + + All calls to this command must be performed before `idf_build_process`. This command does not guarantee that the component will be processed during build (see the `COMPONENTS` argument description for `idf_build_process`). .. code-block:: none @@ -1422,6 +1443,7 @@ These are properties that describe a component. Values of component properties c - COMPONENT_LIB - name for created component static/interface library; set by ``idf_build_component`` and library itself is created by ``idf_component_register`` - COMPONENT_NAME - name of the component; set by ``idf_build_component`` based on the component directory name - COMPONENT_TYPE - type of the component, whether LIBRARY or CONFIG_ONLY. A component is of type LIBRARY if it specifies source files or embeds a file +- COMPONENT_SOURCE - source of the component, one of "idf_components", "project_managed_components", "project_components", "project_extra_components". This is used to determine the override precedence of components with the same name. - EMBED_FILES - list of files to embed in component; set from ``idf_component_register`` EMBED_FILES argument - EMBED_TXTFILES - list of text files to embed in component; set from ``idf_component_register`` EMBED_TXTFILES argument - INCLUDE_DIRS - list of component include directories; set from ``idf_component_register`` INCLUDE_DIRS argument diff --git a/docs/zh_CN/api-guides/build-system.rst b/docs/zh_CN/api-guides/build-system.rst index 569a3818dd6a..66da3ed88a22 100644 --- a/docs/zh_CN/api-guides/build-system.rst +++ b/docs/zh_CN/api-guides/build-system.rst @@ -307,9 +307,16 @@ ESP-IDF 适用于 Python 3.8 以上版本。 同名组件 -------- -ESP-IDF 在搜索所有待构建的组件时,会按照 ``COMPONENT_DIRS`` 指定的顺序依次进行,这意味着在默认情况下,首先搜索 ESP-IDF 内部组件(``IDF_PATH/components``),然后是 ``EXTRA_COMPONENT_DIRS`` 中的组件,最后是项目组件(``PROJECT_DIR/components``)。如果这些目录中的两个或者多个包含具有相同名字的组件,则使用搜索到的最后一个位置的组件。这就允许将组件复制到项目目录中再修改以覆盖 ESP-IDF 组件,如果使用这种方式,ESP-IDF 目录本身可以保持不变。 +ESP-IDF 在搜索所有待构建的组件时,会按照以下优先级搜索组件目录(从高到低): -.. 注解:: +* 项目目录下的组件 +* ``EXTRA_COMPONENT_DIRS`` 中的组件 +* 项目目录下 ``managed_components`` 目录中的组件。这些组件由 IDF Component Manager 下载并管理。(除非 IDF Component Manager 被禁用) +* ``IDF_PATH/components`` 目录下的组件 + +如果有两个及以上同名组件,构建系统会使用优先级更高的组件。这使得我们可以在项目中覆盖 ESP-IDF 提供的组件。只需要复制 ESP-IDF 组件到项目目录下,然后修改它。这样可以在修改组件的同时,不修改 ESP-IDF 的源代码。 + +.. note:: 如果在现有项目中通过将组件移动到一个新位置来覆盖它,项目不会自动看到新组件的路径。请运行 ``idf.py reconfigure`` 命令后(或删除项目构建文件夹)再重新构建。 @@ -1257,23 +1264,37 @@ ESP-IDF 构建命令 .. code-block:: none - idf_build_component(component_dir) + idf_build_component(component_dir [component_source]) 向构建系统提交一个包含组件的 *component_dir* 目录。相对路径会被转换为相对于当前目录的绝对路径。 -所有对该命令的调用必须在`idf_build_process`之前执行。 -该命令并不保证组件在构建过程中会被处理(参见 `idf_build_process` 中 `COMPONENTS` 参数说明) +一个可选的 *component_source* 参数可以用于指定组件源。(默认为 "project_components") + +这个参数决定了同名组件的优先级。详细信息请参考 :ref:`cmake-components-same-name`。 + +该参数可以指定如下组件源(优先级从高到低排序): + +- "project_components" - 项目目录中的组件 +- "project_extra_components" - 通过 ``EXTRA_COMPONENT_DIRS`` 指定的额外组件 +- "project_managed_components" - 通过 IDF Component Manager 管理的组件 +- "idf_components" - ESP-IDF 中的组件,通常在 :idf:`/components` 目录中 + +举个例子,如果有两个组件,组件名都为 "json"。一个组件源被定义为 "project_components",另一个组件源被定义为 "idf_components",那么 "project_components" 中的 "json" 组件会被优先选择。 + +.. warning:: + + 所有对该命令的调用必须在 `idf_build_process` 之前执行。该命令并不保证组件在构建过程中会被处理(参见 `idf_build_process` 中 `COMPONENTS` 参数说明)。 .. code-block:: none - idf_build_process(target - [PROJECT_DIR project_dir] - [PROJECT_VER project_ver] - [PROJECT_NAME project_name] - [SDKCONFIG sdkconfig] - [SDKCONFIG_DEFAULTS sdkconfig_defaults] - [BUILD_DIR build_dir] - [COMPONENTS component1 component2 ...]) + idf_build_process(target + [PROJECT_DIR project_dir] + [PROJECT_VER project_ver] + [PROJECT_NAME project_name] + [SDKCONFIG sdkconfig] + [SDKCONFIG_DEFAULTS sdkconfig_defaults] + [BUILD_DIR build_dir] + [COMPONENTS component1 component2 ...]) 为导入 ESP-IDF 组件执行大量的幕后工作,包括组件配置、库创建、依赖性扩展和解析。在这些功能中,对于用户最重要的可能是通过调用每个组件的 ``idf_component_register`` 来创建库。该命令为每个组件创建库,这些库可以使用别名来访问,其形式为 idf::*component_name*。 这些别名可以用来将组件链接到用户自己的目标、库或可执行文件上。 @@ -1422,6 +1443,7 @@ ESP-IDF 组件属性 - COMPONENT_LIB - 所创建的组件静态/接口库的名称;由 ``idf_build_component`` 设置,库本身由 ``idf_component_register`` 创建。 - COMPONENT_NAME - 组件的名称;由 ``idf_build_component`` 根据组件的目录名设置。 - COMPONENT_TYPE - 组件的类型(LIBRARY 或 CONFIG_ONLY)。如果一个组件指定了源文件或嵌入了一个文件,那么它的类型就是 LIBRARY。 +- COMPONENT_SOURCE - 组件源。可选值为 "idf_components","project_managed_components","project_components","project_extra_components". 用于决定同名组件的优先级。 - EMBED_FILES - 要嵌入组件的文件列表;由 ``idf_component_register`` EMBED_FILES 参数设置。 - EMBED_TXTFILES - 要嵌入组件的文本文件列表;由 ``idf_component_register`` EMBED_TXTFILES 参数设置。 - INCLUDE_DIRS - 组件 include 目录列表;由 ``idf_component_register`` INCLUDE_DIRS 参数设置。 diff --git a/tools/cmake/build.cmake b/tools/cmake/build.cmake index e753f805902b..81f133e23019 100644 --- a/tools/cmake/build.cmake +++ b/tools/cmake/build.cmake @@ -253,7 +253,7 @@ function(__build_init idf_path) if(IS_DIRECTORY ${component_dir}) __component_dir_quick_check(is_component ${component_dir}) if(is_component) - __component_add(${component_dir} ${prefix}) + __component_add(${component_dir} ${prefix} "idf_components") endif() endif() endforeach() @@ -283,9 +283,29 @@ endfunction() # during build (see the COMPONENTS argument description for command idf_build_process) # # @param[in] component_dir directory of the component +# @param[in, optional] component_source source of the component, defaults to "project_components" function(idf_build_component component_dir) idf_build_get_property(prefix __PREFIX) - __component_add(${component_dir} ${prefix} 0) + + # if argvc is 1, then component_source is not specified + # this should only happen when users call this function directly + if(${ARGC} EQUAL 1) + set(component_source "project_components") + else() + set(component_source ${ARGV1}) + endif() + + # component_source must be one of the following (sorted by the override order): + set(valid_component_sources "idf_components" + "project_managed_components" + "project_extra_components" + "project_components") + + if(NOT component_source IN_LIST valid_component_sources) + message(FATAL_ERROR "Invalid component source '${component_source}'.") + endif() + + __component_add(${component_dir} ${prefix} ${component_source}) endfunction() # diff --git a/tools/cmake/component.cmake b/tools/cmake/component.cmake index 18bab3b38695..1ad0ed05edee 100644 --- a/tools/cmake/component.cmake +++ b/tools/cmake/component.cmake @@ -138,7 +138,7 @@ endfunction() # Add a component to process in the build. The components are keeped tracked of in property # __COMPONENT_TARGETS in component target form. # -function(__component_add component_dir prefix) +function(__component_add component_dir prefix component_source) # For each component, two entities are created: a component target and a component library. The # component library is created during component registration (the actual static/interface library). # On the other hand, component targets are created early in the build @@ -186,6 +186,9 @@ function(__component_add component_dir prefix) __component_set_property(${component_target} COMPONENT_NAME ${component_name}) __component_set_property(${component_target} COMPONENT_DIR ${component_dir}) __component_set_property(${component_target} COMPONENT_ALIAS ${component_alias}) + if(component_source) + __component_set_property(${component_target} COMPONENT_SOURCE ${component_source}) + endif() __component_set_property(${component_target} __PREFIX ${prefix}) diff --git a/tools/cmake/project.cmake b/tools/cmake/project.cmake index cb70e61e77c1..b59423bb363f 100644 --- a/tools/cmake/project.cmake +++ b/tools/cmake/project.cmake @@ -61,7 +61,7 @@ if(NOT "$ENV{IDF_COMPONENT_MANAGER}" EQUAL "0") idf_build_set_property(IDF_COMPONENT_MANAGER 1) endif() # Set component manager interface version -idf_build_set_property(__COMPONENT_MANAGER_INTERFACE_VERSION 2) +idf_build_set_property(__COMPONENT_MANAGER_INTERFACE_VERSION 3) # # Parse and store the VERSION argument provided to the project() command. @@ -420,11 +420,11 @@ function(__project_init components_var test_components_var) idf_build_set_property(CXX_COMPILE_OPTIONS "${extra_cxxflags}" APPEND) idf_build_set_property(COMPILE_OPTIONS "${extra_cppflags}" APPEND) - function(__project_component_dir component_dir) + function(__project_component_dir component_dir component_source) get_filename_component(component_dir "${component_dir}" ABSOLUTE) # The directory itself is a valid idf component if(EXISTS ${component_dir}/CMakeLists.txt) - idf_build_component(${component_dir}) + idf_build_component(${component_dir} ${component_source}) else() idf_build_get_property(exclude_dirs EXTRA_COMPONENT_EXCLUDE_DIRS) # otherwise, check whether the subfolders are potential idf components @@ -433,7 +433,7 @@ function(__project_init components_var test_components_var) if(IS_DIRECTORY ${component_dir} AND NOT ${component_dir} IN_LIST exclude_dirs) __component_dir_quick_check(is_component ${component_dir}) if(is_component) - idf_build_component(${component_dir}) + idf_build_component(${component_dir} ${component_source}) endif() endif() endforeach() @@ -451,11 +451,11 @@ function(__project_init components_var test_components_var) if(NOT EXISTS ${component_abs_path}) message(FATAL_ERROR "Directory specified in COMPONENT_DIRS doesn't exist: ${component_abs_path}") endif() - __project_component_dir(${component_dir}) + __project_component_dir(${component_dir} "project_components") endforeach() else() if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/main") - __project_component_dir("${CMAKE_CURRENT_LIST_DIR}/main") + __project_component_dir("${CMAKE_CURRENT_LIST_DIR}/main" "project_components") endif() paths_with_spaces_to_list(EXTRA_COMPONENT_DIRS) @@ -464,12 +464,12 @@ function(__project_init components_var test_components_var) if(NOT EXISTS ${component_abs_path}) message(FATAL_ERROR "Directory specified in EXTRA_COMPONENT_DIRS doesn't exist: ${component_abs_path}") endif() - __project_component_dir("${component_dir}") + __project_component_dir("${component_dir}" "project_extra_components") endforeach() # Look for components in the usual places: CMAKE_CURRENT_LIST_DIR/main, # extra component dirs, and CMAKE_CURRENT_LIST_DIR/components - __project_component_dir("${CMAKE_CURRENT_LIST_DIR}/components") + __project_component_dir("${CMAKE_CURRENT_LIST_DIR}/components" "project_components") endif() # For bootloader components, we only need to set-up the Kconfig files. @@ -521,7 +521,7 @@ function(__project_init components_var test_components_var) set(include 0) endif() if(include AND EXISTS ${component_dir}/test) - __component_add(${component_dir}/test ${component_name}) + __component_add(${component_dir}/test ${component_name} "project_components") list(APPEND test_components ${component_name}::test) endif() endif() diff --git a/tools/cmake/scripts/component_get_requirements.cmake b/tools/cmake/scripts/component_get_requirements.cmake index 89531881a4ed..bc94112e52ed 100644 --- a/tools/cmake/scripts/component_get_requirements.cmake +++ b/tools/cmake/scripts/component_get_requirements.cmake @@ -27,7 +27,7 @@ endfunction() function(__component_get_target var name_or_alias) idf_build_get_property(component_targets __COMPONENT_TARGETS) - # Assume first that the paramters is an alias. + # Assume first that the parameters is an alias. string(REPLACE "::" "_" name_or_alias "${name_or_alias}") set(component_target ___${name_or_alias}) @@ -119,7 +119,40 @@ function(__component_get_requirements) endfunction() set(CMAKE_BUILD_EARLY_EXPANSION 1) + +# smaller number means lower priority +set(__TARGETS_IDF_COMPONENTS "") # 0 +set(__TARGETS_PROJECT_MANAGED_COMPONENTS "") # 1 +set(__TARGETS_PROJECT_EXTRA_COMPONENTS "") # 2 +set(__TARGETS_PROJECT_COMPONENTS "") # 3 + foreach(__component_target ${__component_targets}) + __component_get_property(__component_source ${__component_target} COMPONENT_SOURCE) + + if("${__component_source}" STREQUAL "idf_components") + list(APPEND __TARGETS_IDF_COMPONENTS ${__component_target}) + elseif("${__component_source}" STREQUAL "project_managed_components") + list(APPEND __TARGETS_PROJECT_MANAGED_COMPONENTS ${__component_target}) + elseif("${__component_source}" STREQUAL "project_extra_components") + list(APPEND __TARGETS_PROJECT_EXTRA_COMPONENTS ${__component_target}) + elseif("${__component_source}" STREQUAL "project_components") + list(APPEND __TARGETS_PROJECT_COMPONENTS ${__component_target}) + else() + message(FATAL_ERROR "Unknown component source for component ${__component_target}: ${__component_source}") + endif() +endforeach() + +# priority higher ones goes first +set(__sorted_component_targets "") +foreach(__target IN LISTS __TARGETS_PROJECT_COMPONENTS + __TARGETS_PROJECT_EXTRA_COMPONENTS + __TARGETS_PROJECT_MANAGED_COMPONENTS + __TARGETS_IDF_COMPONENTS) + __component_get_property(__component_name ${__target} COMPONENT_NAME) + list(APPEND __sorted_component_targets ${__target}) +endforeach() + +foreach(__component_target ${__sorted_component_targets}) set(__component_requires "") set(__component_priv_requires "") set(__component_registered 0) @@ -141,11 +174,14 @@ foreach(__component_target ${__component_targets}) list(REMOVE_ITEM __component_priv_requires ${__component_alias} ${__component_name}) endif() + __component_get_property(__component_source ${__component_target} COMPONENT_SOURCE) + set(__contents "__component_set_property(${__component_target} REQUIRES \"${__component_requires}\") __component_set_property(${__component_target} PRIV_REQUIRES \"${__component_priv_requires}\") __component_set_property(${__component_target} __COMPONENT_REGISTERED ${__component_registered}) -__component_set_property(${__component_target} INCLUDE_DIRS \"${__component_include_dirs}\")" +__component_set_property(${__component_target} INCLUDE_DIRS \"${__component_include_dirs}\") +__component_set_property(${__component_target} __COMPONENT_SOURCE \"${__component_source}\")" ) if(__component_kconfig) diff --git a/tools/test_build_system/conftest.py b/tools/test_build_system/conftest.py index 74b96ae7a1f6..865c018863d0 100644 --- a/tools/test_build_system/conftest.py +++ b/tools/test_build_system/conftest.py @@ -51,7 +51,7 @@ def _session_work_dir(request: FixtureRequest) -> typing.Generator[typing.Tuple[ work_dir = request.config.getoption('--work-dir') if work_dir: - work_dir = os.path.join(work_dir, datetime.datetime.utcnow().strftime('%Y-%m-%d_%H-%M-%S')) + work_dir = os.path.join(work_dir, datetime.datetime.now(datetime.timezone.utc).strftime('%Y-%m-%d_%H-%M-%S')) logging.debug(f'using work directory: {work_dir}') os.makedirs(work_dir, exist_ok=True) clean_dir = None diff --git a/tools/test_build_system/pytest.ini b/tools/test_build_system/pytest.ini index 433952425ad5..fe058544ee37 100644 --- a/tools/test_build_system/pytest.ini +++ b/tools/test_build_system/pytest.ini @@ -19,3 +19,4 @@ markers = idf_copy: specify the prefix of the destination directory where IDF should be copied idf_copy_with_space: ensures that destination directory where IDF is copied contain space force_temp_work_dir: force temporary folder as the working directory + with_idf_components: automatically create/delete components under IDF_PATH diff --git a/tools/test_build_system/test_components.py b/tools/test_build_system/test_components.py index e7333c8d4548..1cbff9706fa9 100644 --- a/tools/test_build_system/test_components.py +++ b/tools/test_build_system/test_components.py @@ -2,8 +2,10 @@ # SPDX-License-Identifier: Apache-2.0 import json import logging +import os import shutil from pathlib import Path +from typing import Generator import pytest from test_build_system_helpers import append_to_file @@ -12,6 +14,31 @@ from test_build_system_helpers import replace_in_file +@pytest.fixture(autouse=True) +def create_idf_components(request: pytest.FixtureRequest) -> Generator: + """ + Auto create/remove components under IDF_PATH. + Use it by applying the marker to the test function: + + >>> @pytest.mark.with_idf_components(['cmp1', 'cmp2', ...]) + """ + mark = request.node.get_closest_marker('with_idf_components') + if mark is None: + yield + else: + idf_path = Path(os.environ['IDF_PATH']) + created_paths = [] + for name in mark.args[0]: + (idf_path / 'components' / name).mkdir(parents=True) + (idf_path / 'components' / name / 'CMakeLists.txt').write_text('idf_component_register()') + created_paths.append(str((idf_path / 'components' / name).as_posix())) + + yield + + for path in created_paths: + shutil.rmtree(path) + + def test_component_extra_dirs(idf_py: IdfPyFunc, test_app_copy: Path) -> None: logging.info('Setting EXTRA_COMPONENT_DIRS works') shutil.move(test_app_copy / 'main', test_app_copy / 'different_main' / 'main') @@ -124,19 +151,100 @@ def test_component_overridden_dir(idf_py: IdfPyFunc, test_app_copy: Path, defaul assert 'kconfig:{}'.format((idf_path / 'components' / 'hal').as_posix()) in ret.stdout, 'Failed to verify original `main` directory' -def test_components_prioritizer_over_extra_components_dir(idf_py: IdfPyFunc, test_app_copy: Path) -> None: - logging.info('Project components prioritized over EXTRA_COMPONENT_DIRS') +def test_project_components_overrides_extra_components(idf_py: IdfPyFunc, test_app_copy: Path) -> None: + logging.info('Project components override components defined in EXTRA_COMPONENT_DIRS') (test_app_copy / 'extra_dir' / 'my_component').mkdir(parents=True) (test_app_copy / 'extra_dir' / 'my_component' / 'CMakeLists.txt').write_text('idf_component_register()') replace_in_file(test_app_copy / 'CMakeLists.txt', '# placeholder_before_include_project_cmake', 'set(EXTRA_COMPONENT_DIRS extra_dir)') - ret = idf_py('reconfigure') - assert str((test_app_copy / 'extra_dir' / 'my_component').as_posix()) in ret.stdout, 'Unable to find component specified in EXTRA_COMPONENT_DIRS' + idf_py('reconfigure') + with open(test_app_copy / 'build' / 'project_description.json', 'r') as f: + data = json.load(f) + assert str((test_app_copy / 'extra_dir' / 'my_component').as_posix()) in data.get('build_component_paths') + (test_app_copy / 'components' / 'my_component').mkdir(parents=True) (test_app_copy / 'components' / 'my_component' / 'CMakeLists.txt').write_text('idf_component_register()') - ret = idf_py('reconfigure') - assert str((test_app_copy / 'components' / 'my_component').as_posix()) in ret.stdout, 'Project components should be prioritized over EXTRA_COMPONENT_DIRS' + idf_py('reconfigure') + with open(test_app_copy / 'build' / 'project_description.json', 'r') as f: + data = json.load(f) + assert str((test_app_copy / 'components' / 'my_component').as_posix()) in data.get('build_component_paths') + assert str((test_app_copy / 'extra_dir' / 'my_component').as_posix()) not in data.get('build_component_paths') + + +def test_extra_components_overrides_managed_components(idf_py: IdfPyFunc, test_app_copy: Path) -> None: + logging.info('components defined in EXTRA_COMPONENT_DIRS override managed components') + (test_app_copy / 'main' / 'idf_component.yml').write_text(""" + dependencies: + example/cmp: "*" + """) + idf_py('reconfigure') + with open(test_app_copy / 'build' / 'project_description.json', 'r') as f: + data = json.load(f) + assert str((test_app_copy / 'managed_components' / 'example__cmp').as_posix()) in data.get( + 'build_component_paths') + + (test_app_copy / 'extra_dir' / 'cmp').mkdir(parents=True) + (test_app_copy / 'extra_dir' / 'cmp' / 'CMakeLists.txt').write_text('idf_component_register()') + replace_in_file(test_app_copy / 'CMakeLists.txt', + '# placeholder_before_include_project_cmake', + 'set(EXTRA_COMPONENT_DIRS extra_dir)') + idf_py('reconfigure') + with open(test_app_copy / 'build' / 'project_description.json', 'r') as f: + data = json.load(f) + assert str((test_app_copy / 'extra_dir' / 'cmp').as_posix()) in data.get('build_component_paths') + assert str((test_app_copy / 'managed_components' / 'example__cmp').as_posix()) not in data.get( + 'build_component_paths') + + +@pytest.mark.with_idf_components(['cmp']) +def test_managed_components_overrides_idf_components(idf_py: IdfPyFunc, test_app_copy: Path) -> None: + logging.info('Managed components override components defined in IDF_PATH/components') + # created idf component 'cmp' in marker + idf_path = Path(os.environ['IDF_PATH']) + idf_py('reconfigure') + with open(test_app_copy / 'build' / 'project_description.json', 'r') as f: + data = json.load(f) + assert str((idf_path / 'components' / 'cmp').as_posix()) in data.get( + 'build_component_paths') + + (test_app_copy / 'main' / 'idf_component.yml').write_text(""" +dependencies: + example/cmp: "*" + """) + idf_py('reconfigure') + with open(test_app_copy / 'build' / 'project_description.json', 'r') as f: + data = json.load(f) + assert str((test_app_copy / 'managed_components' / 'example__cmp').as_posix()) in data.get( + 'build_component_paths') + assert str((idf_path / 'components' / 'cmp').as_posix()) not in data.get( + 'build_component_paths') + + +def test_manifest_local_source_overrides_extra_components(idf_py: IdfPyFunc, test_app_copy: Path) -> None: + (test_app_copy / '..' / 'extra_dir' / 'cmp').mkdir(parents=True) + (test_app_copy / '..' / 'extra_dir' / 'cmp' / 'CMakeLists.txt').write_text('idf_component_register()') + replace_in_file(test_app_copy / 'CMakeLists.txt', + '# placeholder_before_include_project_cmake', + 'set(EXTRA_COMPONENT_DIRS ../extra_dir)') + idf_py('reconfigure') + with open(test_app_copy / 'build' / 'project_description.json', 'r') as f: + data = json.load(f) + assert str((test_app_copy / '..' / 'extra_dir' / 'cmp').resolve().as_posix()) in data.get('build_component_paths') + + (test_app_copy / '..' / 'cmp').mkdir(parents=True) + (test_app_copy / '..' / 'cmp' / 'CMakeLists.txt').write_text('idf_component_register()') + with open(test_app_copy / 'main' / 'idf_component.yml', 'w') as f: + f.write(""" +dependencies: + cmp: + path: '../../cmp' + """) + idf_py('reconfigure') + with open(test_app_copy / 'build' / 'project_description.json', 'r') as f: + data = json.load(f) + assert str((test_app_copy / '..' / 'cmp').resolve().as_posix()) in data.get('build_component_paths') + assert str((test_app_copy / '..' / 'extra_dir' / 'cmp').resolve().as_posix()) not in data.get('build_component_paths') def test_exclude_components_not_passed(idf_py: IdfPyFunc, test_app_copy: Path) -> None: From 5a1dd125135ccc33785deb540dba89b1005a2cc0 Mon Sep 17 00:00:00 2001 From: Sarvesh Bodakhe Date: Mon, 15 Jul 2024 15:06:13 +0530 Subject: [PATCH 041/365] fix(wifi): Do not try re-connection when sta disconnects with esp_wifi_disconnect() Do not follow wifi_config::wifi_sta_config::failure_retry_cnt logic when station itself issues a disconnect from AP/Router using esp_wifi_disconnect() --- components/esp_wifi/lib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/esp_wifi/lib b/components/esp_wifi/lib index dde71a69c525..f3ea158d7c62 160000 --- a/components/esp_wifi/lib +++ b/components/esp_wifi/lib @@ -1 +1 @@ -Subproject commit dde71a69c525d0a69989eca620557536b2773231 +Subproject commit f3ea158d7c62b1a4479f6c0174a02bc19fa59f90 From 5be7860c540ebe161db409ced30d75f713360b7a Mon Sep 17 00:00:00 2001 From: laokaiyao Date: Thu, 26 Sep 2024 15:38:25 +0800 Subject: [PATCH 042/365] fix(i2s): fix i2s half sample rate issue --- components/hal/esp32/include/hal/i2s_ll.h | 9 +- components/hal/esp32c3/include/hal/i2s_ll.h | 76 ++++++------- components/hal/esp32c5/include/hal/i2s_ll.h | 52 ++++----- components/hal/esp32c6/include/hal/i2s_ll.h | 52 ++++----- components/hal/esp32h2/include/hal/i2s_ll.h | 52 ++++----- components/hal/esp32p4/include/hal/i2s_ll.h | 114 +++++++++++++------- components/hal/esp32s2/include/hal/i2s_ll.h | 9 +- components/hal/esp32s3/include/hal/i2s_ll.h | 78 +++++++------- 8 files changed, 243 insertions(+), 199 deletions(-) diff --git a/components/hal/esp32/include/hal/i2s_ll.h b/components/hal/esp32/include/hal/i2s_ll.h index 9ce5dbec7887..0ebc2fe9ea14 100644 --- a/components/hal/esp32/include/hal/i2s_ll.h +++ b/components/hal/esp32/include/hal/i2s_ll.h @@ -350,11 +350,6 @@ static inline void i2s_ll_set_raw_mclk_div(i2s_dev_t *hw, uint32_t mclk_div, uin */ static inline void i2s_ll_tx_set_mclk(i2s_dev_t *hw, const hal_utils_clk_div_t *mclk_div) { - /* Workaround for inaccurate clock while switching from a relatively low sample rate to a high sample rate - * Set to particular coefficients first then update to the target coefficients, - * otherwise the clock division might be inaccurate. - * the general idea is to set a value that unlike to calculate from the regular decimal */ - i2s_ll_set_raw_mclk_div(hw, 7, 47, 3); i2s_ll_set_raw_mclk_div(hw, mclk_div->integer, mclk_div->denominator, mclk_div->numerator); } @@ -659,7 +654,7 @@ static inline void i2s_ll_tx_set_bits_mod(i2s_dev_t *hw, uint32_t val) } /** - * @brief Congfigure TX chan bit and audio data bit, on ESP32, sample_bit should equals to data_bit + * @brief Configure TX chan bit and audio data bit, on ESP32, sample_bit should equals to data_bit * * @param hw Peripheral I2S hardware instance address. * @param chan_bit The chan bit width @@ -672,7 +667,7 @@ static inline void i2s_ll_tx_set_sample_bit(i2s_dev_t *hw, uint8_t chan_bit, int } /** - * @brief Congfigure RX chan bit and audio data bit, on ESP32, sample_bit should equals to data_bit + * @brief Configure RX chan bit and audio data bit, on ESP32, sample_bit should equals to data_bit * * @param hw Peripheral I2S hardware instance address. * @param chan_bit The chan bit width diff --git a/components/hal/esp32c3/include/hal/i2s_ll.h b/components/hal/esp32c3/include/hal/i2s_ll.h index 1b7e9de0da51..907324fdd0fa 100644 --- a/components/hal/esp32c3/include/hal/i2s_ll.h +++ b/components/hal/esp32c3/include/hal/i2s_ll.h @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2021-2023 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -285,15 +285,21 @@ static inline void i2s_ll_tx_set_bck_div_num(i2s_dev_t *hw, uint32_t val) */ static inline void i2s_ll_tx_set_raw_clk_div(i2s_dev_t *hw, uint32_t div_int, uint32_t x, uint32_t y, uint32_t z, uint32_t yn1) { - /* Set the integer part of mclk division */ + /* Workaround for the double division issue. + * The division coefficients must be set in particular sequence. + * And it has to switch to a small division first before setting the target division. */ + HAL_FORCE_MODIFY_U32_REG_FIELD(hw->tx_clkm_conf, tx_clkm_div_num, 2); + hw->tx_clkm_div_conf.tx_clkm_div_yn1 = 0; + hw->tx_clkm_div_conf.tx_clkm_div_y = 1; + hw->tx_clkm_div_conf.tx_clkm_div_z = 0; + hw->tx_clkm_div_conf.tx_clkm_div_x = 0; + + /* Set the target mclk division coefficients */ + hw->tx_clkm_div_conf.tx_clkm_div_yn1 = yn1; + hw->tx_clkm_div_conf.tx_clkm_div_z = z; + hw->tx_clkm_div_conf.tx_clkm_div_y = y; + hw->tx_clkm_div_conf.tx_clkm_div_x = x; HAL_FORCE_MODIFY_U32_REG_FIELD(hw->tx_clkm_conf, tx_clkm_div_num, div_int); - /* Set the decimal part of the mclk division */ - typeof(hw->tx_clkm_div_conf) div = {}; - div.tx_clkm_div_x = x; - div.tx_clkm_div_y = y; - div.tx_clkm_div_z = z; - div.tx_clkm_div_yn1 = yn1; - hw->tx_clkm_div_conf.val = div.val; } /** @@ -308,15 +314,21 @@ static inline void i2s_ll_tx_set_raw_clk_div(i2s_dev_t *hw, uint32_t div_int, ui */ static inline void i2s_ll_rx_set_raw_clk_div(i2s_dev_t *hw, uint32_t div_int, uint32_t x, uint32_t y, uint32_t z, uint32_t yn1) { - /* Set the integer part of mclk division */ + /* Workaround for the double division issue. + * The division coefficients must be set in particular sequence. + * And it has to switch to a small division first before setting the target division. */ + HAL_FORCE_MODIFY_U32_REG_FIELD(hw->rx_clkm_conf, rx_clkm_div_num, 2); + hw->rx_clkm_div_conf.rx_clkm_div_yn1 = 0; + hw->rx_clkm_div_conf.rx_clkm_div_y = 1; + hw->rx_clkm_div_conf.rx_clkm_div_z = 0; + hw->rx_clkm_div_conf.rx_clkm_div_x = 0; + + /* Set the target mclk division coefficients */ + hw->rx_clkm_div_conf.rx_clkm_div_yn1 = yn1; + hw->rx_clkm_div_conf.rx_clkm_div_z = z; + hw->rx_clkm_div_conf.rx_clkm_div_y = y; + hw->rx_clkm_div_conf.rx_clkm_div_x = x; HAL_FORCE_MODIFY_U32_REG_FIELD(hw->rx_clkm_conf, rx_clkm_div_num, div_int); - /* Set the decimal part of the mclk division */ - typeof(hw->rx_clkm_div_conf) div = {}; - div.rx_clkm_div_x = x; - div.rx_clkm_div_y = y; - div.rx_clkm_div_z = z; - div.rx_clkm_div_yn1 = yn1; - hw->rx_clkm_div_conf.val = div.val; } /** @@ -327,12 +339,6 @@ static inline void i2s_ll_rx_set_raw_clk_div(i2s_dev_t *hw, uint32_t div_int, ui */ static inline void i2s_ll_tx_set_mclk(i2s_dev_t *hw, const hal_utils_clk_div_t *mclk_div) { - /* Workaround for inaccurate clock while switching from a relatively low sample rate to a high sample rate - * Set to particular coefficients first then update to the target coefficients, - * otherwise the clock division might be inaccurate. - * the general idea is to set a value that impossible to calculate from the regular decimal */ - i2s_ll_tx_set_raw_clk_div(hw, 7, 317, 7, 3, 0); - uint32_t div_x = 0; uint32_t div_y = 0; uint32_t div_z = 0; @@ -367,12 +373,6 @@ static inline void i2s_ll_rx_set_bck_div_num(i2s_dev_t *hw, uint32_t val) */ static inline void i2s_ll_rx_set_mclk(i2s_dev_t *hw, const hal_utils_clk_div_t *mclk_div) { - /* Workaround for inaccurate clock while switching from a relatively low sample rate to a high sample rate - * Set to particular coefficients first then update to the target coefficients, - * otherwise the clock division might be inaccurate. - * the general idea is to set a value that impossible to calculate from the regular decimal */ - i2s_ll_rx_set_raw_clk_div(hw, 7, 317, 7, 3, 0); - uint32_t div_x = 0; uint32_t div_y = 0; uint32_t div_z = 0; @@ -467,7 +467,7 @@ static inline void i2s_ll_rx_set_eof_num(i2s_dev_t *hw, int eof_num) } /** - * @brief Congfigure TX chan bit and audio data bit + * @brief Configure TX chan bit and audio data bit * * @param hw Peripheral I2S hardware instance address. * @param chan_bit The chan bit width @@ -480,7 +480,7 @@ static inline void i2s_ll_tx_set_sample_bit(i2s_dev_t *hw, uint8_t chan_bit, int } /** - * @brief Congfigure RX chan bit and audio data bit + * @brief Configure RX chan bit and audio data bit * * @param hw Peripheral I2S hardware instance address. * @param chan_bit The chan bit width @@ -880,11 +880,11 @@ static inline void i2s_ll_tx_set_pdm_fpfs(i2s_dev_t *hw, uint32_t fp, uint32_t f } /** - * @brief Get I2S TX PDM fp configuration paramater + * @brief Get I2S TX PDM fp configuration parameter * * @param hw Peripheral I2S hardware instance address. * @return - * - fp configuration paramater + * - fp configuration parameter */ static inline uint32_t i2s_ll_tx_get_pdm_fp(i2s_dev_t *hw) { @@ -892,11 +892,11 @@ static inline uint32_t i2s_ll_tx_get_pdm_fp(i2s_dev_t *hw) } /** - * @brief Get I2S TX PDM fs configuration paramater + * @brief Get I2S TX PDM fs configuration parameter * * @param hw Peripheral I2S hardware instance address. * @return - * - fs configuration paramater + * - fs configuration parameter */ static inline uint32_t i2s_ll_tx_get_pdm_fs(i2s_dev_t *hw) { @@ -922,7 +922,7 @@ static inline void i2s_ll_rx_enable_pdm(i2s_dev_t *hw, bool pdm_enable) * @brief Configura TX a/u-law decompress or compress * * @param hw Peripheral I2S hardware instance address. - * @param pcm_cfg PCM configuration paramater + * @param pcm_cfg PCM configuration parameter */ static inline void i2s_ll_tx_set_pcm_type(i2s_dev_t *hw, i2s_pcm_compress_t pcm_cfg) { @@ -934,7 +934,7 @@ static inline void i2s_ll_tx_set_pcm_type(i2s_dev_t *hw, i2s_pcm_compress_t pcm_ * @brief Configure RX a/u-law decompress or compress * * @param hw Peripheral I2S hardware instance address. - * @param pcm_cfg PCM configuration paramater + * @param pcm_cfg PCM configuration parameter */ static inline void i2s_ll_rx_set_pcm_type(i2s_dev_t *hw, i2s_pcm_compress_t pcm_cfg) { @@ -1106,7 +1106,7 @@ static inline void i2s_ll_tx_pdm_dma_take_mode(i2s_dev_t *hw, bool is_mono, bool * @param is_mono The DMA data only has one slot (mono) or contains two slots (stereo) * @param is_copy Whether the un-selected slot copies the data from the selected one * If not, the un-selected slot will transmit the data from 'conf_single_data' - * @param mask The slot mask to selet the slot + * @param mask The slot mask to select the slot */ static inline void i2s_ll_tx_pdm_slot_mode(i2s_dev_t *hw, bool is_mono, bool is_copy, i2s_pdm_slot_mask_t mask) { diff --git a/components/hal/esp32c5/include/hal/i2s_ll.h b/components/hal/esp32c5/include/hal/i2s_ll.h index 0b9fb644cd10..47e096b35383 100644 --- a/components/hal/esp32c5/include/hal/i2s_ll.h +++ b/components/hal/esp32c5/include/hal/i2s_ll.h @@ -316,13 +316,21 @@ static inline void i2s_ll_tx_set_bck_div_num(i2s_dev_t *hw, uint32_t val) static inline void i2s_ll_tx_set_raw_clk_div(i2s_dev_t *hw, uint32_t div_int, uint32_t x, uint32_t y, uint32_t z, uint32_t yn1) { (void)hw; + /* Workaround for the double division issue. + * The division coefficients must be set in particular sequence. + * And it has to switch to a small division first before setting the target division. */ + HAL_FORCE_MODIFY_U32_REG_FIELD(PCR.i2s_tx_clkm_conf, i2s_tx_clkm_div_num, 2); + PCR.i2s_tx_clkm_div_conf.i2s_tx_clkm_div_yn1 = 0; + PCR.i2s_tx_clkm_div_conf.i2s_tx_clkm_div_y = 1; + PCR.i2s_tx_clkm_div_conf.i2s_tx_clkm_div_z = 0; + PCR.i2s_tx_clkm_div_conf.i2s_tx_clkm_div_x = 0; + + /* Set the target mclk division coefficients */ + PCR.i2s_tx_clkm_div_conf.i2s_tx_clkm_div_yn1 = yn1; + PCR.i2s_tx_clkm_div_conf.i2s_tx_clkm_div_z = z; + PCR.i2s_tx_clkm_div_conf.i2s_tx_clkm_div_y = y; + PCR.i2s_tx_clkm_div_conf.i2s_tx_clkm_div_x = x; HAL_FORCE_MODIFY_U32_REG_FIELD(PCR.i2s_tx_clkm_conf, i2s_tx_clkm_div_num, div_int); - typeof(PCR.i2s_tx_clkm_div_conf) div = {}; - div.i2s_tx_clkm_div_x = x; - div.i2s_tx_clkm_div_y = y; - div.i2s_tx_clkm_div_z = z; - div.i2s_tx_clkm_div_yn1 = yn1; - PCR.i2s_tx_clkm_div_conf.val = div.val; } /** @@ -338,13 +346,21 @@ static inline void i2s_ll_tx_set_raw_clk_div(i2s_dev_t *hw, uint32_t div_int, ui static inline void i2s_ll_rx_set_raw_clk_div(i2s_dev_t *hw, uint32_t div_int, uint32_t x, uint32_t y, uint32_t z, uint32_t yn1) { (void)hw; + /* Workaround for the double division issue. + * The division coefficients must be set in particular sequence. + * And it has to switch to a small division first before setting the target division. */ + HAL_FORCE_MODIFY_U32_REG_FIELD(PCR.i2s_rx_clkm_conf, i2s_rx_clkm_div_num, 2); + PCR.i2s_rx_clkm_div_conf.i2s_rx_clkm_div_yn1 = 0; + PCR.i2s_rx_clkm_div_conf.i2s_rx_clkm_div_y = 1; + PCR.i2s_rx_clkm_div_conf.i2s_rx_clkm_div_z = 0; + PCR.i2s_rx_clkm_div_conf.i2s_rx_clkm_div_x = 0; + + /* Set the target mclk division coefficients */ + PCR.i2s_rx_clkm_div_conf.i2s_rx_clkm_div_yn1 = yn1; + PCR.i2s_rx_clkm_div_conf.i2s_rx_clkm_div_z = z; + PCR.i2s_rx_clkm_div_conf.i2s_rx_clkm_div_y = y; + PCR.i2s_rx_clkm_div_conf.i2s_rx_clkm_div_x = x; HAL_FORCE_MODIFY_U32_REG_FIELD(PCR.i2s_rx_clkm_conf, i2s_rx_clkm_div_num, div_int); - typeof(PCR.i2s_rx_clkm_div_conf) div = {}; - div.i2s_rx_clkm_div_x = x; - div.i2s_rx_clkm_div_y = y; - div.i2s_rx_clkm_div_z = z; - div.i2s_rx_clkm_div_yn1 = yn1; - PCR.i2s_rx_clkm_div_conf.val = div.val; } /** @@ -355,12 +371,6 @@ static inline void i2s_ll_rx_set_raw_clk_div(i2s_dev_t *hw, uint32_t div_int, ui */ static inline void i2s_ll_tx_set_mclk(i2s_dev_t *hw, const hal_utils_clk_div_t *mclk_div) { - /* Workaround for inaccurate clock while switching from a relatively low sample rate to a high sample rate - * Set to particular coefficients first then update to the target coefficients, - * otherwise the clock division might be inaccurate. - * the general idea is to set a value that impossible to calculate from the regular decimal */ - i2s_ll_tx_set_raw_clk_div(hw, 7, 317, 7, 3, 0); - uint32_t div_x = 0; uint32_t div_y = 0; uint32_t div_z = 0; @@ -395,12 +405,6 @@ static inline void i2s_ll_rx_set_bck_div_num(i2s_dev_t *hw, uint32_t val) */ static inline void i2s_ll_rx_set_mclk(i2s_dev_t *hw, const hal_utils_clk_div_t *mclk_div) { - /* Workaround for inaccurate clock while switching from a relatively low sample rate to a high sample rate - * Set to particular coefficients first then update to the target coefficients, - * otherwise the clock division might be inaccurate. - * the general idea is to set a value that impossible to calculate from the regular decimal */ - i2s_ll_rx_set_raw_clk_div(hw, 7, 317, 7, 3, 0); - uint32_t div_x = 0; uint32_t div_y = 0; uint32_t div_z = 0; diff --git a/components/hal/esp32c6/include/hal/i2s_ll.h b/components/hal/esp32c6/include/hal/i2s_ll.h index c95ab9321b1d..0c0a99a852b5 100644 --- a/components/hal/esp32c6/include/hal/i2s_ll.h +++ b/components/hal/esp32c6/include/hal/i2s_ll.h @@ -306,13 +306,21 @@ static inline void i2s_ll_tx_set_bck_div_num(i2s_dev_t *hw, uint32_t val) static inline void i2s_ll_tx_set_raw_clk_div(i2s_dev_t *hw, uint32_t div_int, uint32_t x, uint32_t y, uint32_t z, uint32_t yn1) { (void)hw; + /* Workaround for the double division issue. + * The division coefficients must be set in particular sequence. + * And it has to switch to a small division first before setting the target division. */ + HAL_FORCE_MODIFY_U32_REG_FIELD(PCR.i2s_tx_clkm_conf, i2s_tx_clkm_div_num, 2); + PCR.i2s_tx_clkm_div_conf.i2s_tx_clkm_div_yn1 = 0; + PCR.i2s_tx_clkm_div_conf.i2s_tx_clkm_div_y = 1; + PCR.i2s_tx_clkm_div_conf.i2s_tx_clkm_div_z = 0; + PCR.i2s_tx_clkm_div_conf.i2s_tx_clkm_div_x = 0; + + /* Set the target mclk division coefficients */ + PCR.i2s_tx_clkm_div_conf.i2s_tx_clkm_div_yn1 = yn1; + PCR.i2s_tx_clkm_div_conf.i2s_tx_clkm_div_z = z; + PCR.i2s_tx_clkm_div_conf.i2s_tx_clkm_div_y = y; + PCR.i2s_tx_clkm_div_conf.i2s_tx_clkm_div_x = x; HAL_FORCE_MODIFY_U32_REG_FIELD(PCR.i2s_tx_clkm_conf, i2s_tx_clkm_div_num, div_int); - typeof(PCR.i2s_tx_clkm_div_conf) div = {}; - div.i2s_tx_clkm_div_x = x; - div.i2s_tx_clkm_div_y = y; - div.i2s_tx_clkm_div_z = z; - div.i2s_tx_clkm_div_yn1 = yn1; - PCR.i2s_tx_clkm_div_conf.val = div.val; } /** @@ -328,13 +336,21 @@ static inline void i2s_ll_tx_set_raw_clk_div(i2s_dev_t *hw, uint32_t div_int, ui static inline void i2s_ll_rx_set_raw_clk_div(i2s_dev_t *hw, uint32_t div_int, uint32_t x, uint32_t y, uint32_t z, uint32_t yn1) { (void)hw; + /* Workaround for the double division issue. + * The division coefficients must be set in particular sequence. + * And it has to switch to a small division first before setting the target division. */ + HAL_FORCE_MODIFY_U32_REG_FIELD(PCR.i2s_rx_clkm_conf, i2s_rx_clkm_div_num, 2); + PCR.i2s_rx_clkm_div_conf.i2s_rx_clkm_div_yn1 = 0; + PCR.i2s_rx_clkm_div_conf.i2s_rx_clkm_div_y = 1; + PCR.i2s_rx_clkm_div_conf.i2s_rx_clkm_div_z = 0; + PCR.i2s_rx_clkm_div_conf.i2s_rx_clkm_div_x = 0; + + /* Set the target mclk division coefficients */ + PCR.i2s_rx_clkm_div_conf.i2s_rx_clkm_div_yn1 = yn1; + PCR.i2s_rx_clkm_div_conf.i2s_rx_clkm_div_z = z; + PCR.i2s_rx_clkm_div_conf.i2s_rx_clkm_div_y = y; + PCR.i2s_rx_clkm_div_conf.i2s_rx_clkm_div_x = x; HAL_FORCE_MODIFY_U32_REG_FIELD(PCR.i2s_rx_clkm_conf, i2s_rx_clkm_div_num, div_int); - typeof(PCR.i2s_rx_clkm_div_conf) div = {}; - div.i2s_rx_clkm_div_x = x; - div.i2s_rx_clkm_div_y = y; - div.i2s_rx_clkm_div_z = z; - div.i2s_rx_clkm_div_yn1 = yn1; - PCR.i2s_rx_clkm_div_conf.val = div.val; } /** @@ -345,12 +361,6 @@ static inline void i2s_ll_rx_set_raw_clk_div(i2s_dev_t *hw, uint32_t div_int, ui */ static inline void i2s_ll_tx_set_mclk(i2s_dev_t *hw, const hal_utils_clk_div_t *mclk_div) { - /* Workaround for inaccurate clock while switching from a relatively low sample rate to a high sample rate - * Set to particular coefficients first then update to the target coefficients, - * otherwise the clock division might be inaccurate. - * the general idea is to set a value that impossible to calculate from the regular decimal */ - i2s_ll_tx_set_raw_clk_div(hw, 7, 317, 7, 3, 0); - uint32_t div_x = 0; uint32_t div_y = 0; uint32_t div_z = 0; @@ -385,12 +395,6 @@ static inline void i2s_ll_rx_set_bck_div_num(i2s_dev_t *hw, uint32_t val) */ static inline void i2s_ll_rx_set_mclk(i2s_dev_t *hw, const hal_utils_clk_div_t *mclk_div) { - /* Workaround for inaccurate clock while switching from a relatively low sample rate to a high sample rate - * Set to particular coefficients first then update to the target coefficients, - * otherwise the clock division might be inaccurate. - * the general idea is to set a value that impossible to calculate from the regular decimal */ - i2s_ll_rx_set_raw_clk_div(hw, 7, 317, 7, 3, 0); - uint32_t div_x = 0; uint32_t div_y = 0; uint32_t div_z = 0; diff --git a/components/hal/esp32h2/include/hal/i2s_ll.h b/components/hal/esp32h2/include/hal/i2s_ll.h index 85e920a2a9f7..15de741213a3 100644 --- a/components/hal/esp32h2/include/hal/i2s_ll.h +++ b/components/hal/esp32h2/include/hal/i2s_ll.h @@ -313,13 +313,21 @@ static inline void i2s_ll_tx_set_bck_div_num(i2s_dev_t *hw, uint32_t val) static inline void i2s_ll_tx_set_raw_clk_div(i2s_dev_t *hw, uint32_t div_int, uint32_t x, uint32_t y, uint32_t z, uint32_t yn1) { (void)hw; + /* Workaround for the double division issue. + * The division coefficients must be set in particular sequence. + * And it has to switch to a small division first before setting the target division. */ + HAL_FORCE_MODIFY_U32_REG_FIELD(PCR.i2s_tx_clkm_conf, i2s_tx_clkm_div_num, 2); + PCR.i2s_tx_clkm_div_conf.i2s_tx_clkm_div_yn1 = 0; + PCR.i2s_tx_clkm_div_conf.i2s_tx_clkm_div_y = 1; + PCR.i2s_tx_clkm_div_conf.i2s_tx_clkm_div_z = 0; + PCR.i2s_tx_clkm_div_conf.i2s_tx_clkm_div_x = 0; + + /* Set the target mclk division coefficients */ + PCR.i2s_tx_clkm_div_conf.i2s_tx_clkm_div_yn1 = yn1; + PCR.i2s_tx_clkm_div_conf.i2s_tx_clkm_div_z = z; + PCR.i2s_tx_clkm_div_conf.i2s_tx_clkm_div_y = y; + PCR.i2s_tx_clkm_div_conf.i2s_tx_clkm_div_x = x; HAL_FORCE_MODIFY_U32_REG_FIELD(PCR.i2s_tx_clkm_conf, i2s_tx_clkm_div_num, div_int); - typeof(PCR.i2s_tx_clkm_div_conf) div = {}; - div.i2s_tx_clkm_div_x = x; - div.i2s_tx_clkm_div_y = y; - div.i2s_tx_clkm_div_z = z; - div.i2s_tx_clkm_div_yn1 = yn1; - PCR.i2s_tx_clkm_div_conf.val = div.val; } /** @@ -335,13 +343,21 @@ static inline void i2s_ll_tx_set_raw_clk_div(i2s_dev_t *hw, uint32_t div_int, ui static inline void i2s_ll_rx_set_raw_clk_div(i2s_dev_t *hw, uint32_t div_int, uint32_t x, uint32_t y, uint32_t z, uint32_t yn1) { (void)hw; + /* Workaround for the double division issue. + * The division coefficients must be set in particular sequence. + * And it has to switch to a small division first before setting the target division. */ + HAL_FORCE_MODIFY_U32_REG_FIELD(PCR.i2s_rx_clkm_conf, i2s_rx_clkm_div_num, 2); + PCR.i2s_rx_clkm_div_conf.i2s_rx_clkm_div_yn1 = 0; + PCR.i2s_rx_clkm_div_conf.i2s_rx_clkm_div_y = 1; + PCR.i2s_rx_clkm_div_conf.i2s_rx_clkm_div_z = 0; + PCR.i2s_rx_clkm_div_conf.i2s_rx_clkm_div_x = 0; + + /* Set the target mclk division coefficients */ + PCR.i2s_rx_clkm_div_conf.i2s_rx_clkm_div_yn1 = yn1; + PCR.i2s_rx_clkm_div_conf.i2s_rx_clkm_div_z = z; + PCR.i2s_rx_clkm_div_conf.i2s_rx_clkm_div_y = y; + PCR.i2s_rx_clkm_div_conf.i2s_rx_clkm_div_x = x; HAL_FORCE_MODIFY_U32_REG_FIELD(PCR.i2s_rx_clkm_conf, i2s_rx_clkm_div_num, div_int); - typeof(PCR.i2s_rx_clkm_div_conf) div = {}; - div.i2s_rx_clkm_div_x = x; - div.i2s_rx_clkm_div_y = y; - div.i2s_rx_clkm_div_z = z; - div.i2s_rx_clkm_div_yn1 = yn1; - PCR.i2s_rx_clkm_div_conf.val = div.val; } /** @@ -352,12 +368,6 @@ static inline void i2s_ll_rx_set_raw_clk_div(i2s_dev_t *hw, uint32_t div_int, ui */ static inline void i2s_ll_tx_set_mclk(i2s_dev_t *hw, const hal_utils_clk_div_t *mclk_div) { - /* Workaround for inaccurate clock while switching from a relatively low sample rate to a high sample rate - * Set to particular coefficients first then update to the target coefficients, - * otherwise the clock division might be inaccurate. - * the general idea is to set a value that impossible to calculate from the regular decimal */ - i2s_ll_tx_set_raw_clk_div(hw, 8, 1, 1, 73, 1); - uint32_t div_x = 0; uint32_t div_y = 0; uint32_t div_z = 0; @@ -392,12 +402,6 @@ static inline void i2s_ll_rx_set_bck_div_num(i2s_dev_t *hw, uint32_t val) */ static inline void i2s_ll_rx_set_mclk(i2s_dev_t *hw, const hal_utils_clk_div_t *mclk_div) { - /* Workaround for inaccurate clock while switching from a relatively low sample rate to a high sample rate - * Set to particular coefficients first then update to the target coefficients, - * otherwise the clock division might be inaccurate. - * the general idea is to set a value that impossible to calculate from the regular decimal */ - i2s_ll_rx_set_raw_clk_div(hw, 8, 1, 1, 73, 1); - uint32_t div_x = 0; uint32_t div_y = 0; uint32_t div_z = 0; diff --git a/components/hal/esp32p4/include/hal/i2s_ll.h b/components/hal/esp32p4/include/hal/i2s_ll.h index cfb2f2d7c61e..817491f126fc 100644 --- a/components/hal/esp32p4/include/hal/i2s_ll.h +++ b/components/hal/esp32p4/include/hal/i2s_ll.h @@ -498,25 +498,52 @@ static inline void i2s_ll_tx_set_raw_clk_div(i2s_dev_t *hw, uint32_t div_int, ui // Note: this function involves HP_SYS_CLKRST register which is shared with other peripherals, need lock in upper layer switch (I2S_LL_GET_ID(hw)) { case 0: - HAL_FORCE_MODIFY_U32_REG_FIELD(HP_SYS_CLKRST.peri_clk_ctrl13, reg_i2s0_tx_div_n, div_int); - HP_SYS_CLKRST.peri_clk_ctrl13.reg_i2s0_tx_div_x = x; - HP_SYS_CLKRST.peri_clk_ctrl14.reg_i2s0_tx_div_y = y; - HP_SYS_CLKRST.peri_clk_ctrl14.reg_i2s0_tx_div_z = z; + /* Workaround for the double division issue. + * The division coefficients must be set in particular sequence. + * And it has to switch to a small division first before setting the target division. */ + HAL_FORCE_MODIFY_U32_REG_FIELD(HP_SYS_CLKRST.peri_clk_ctrl13, reg_i2s0_tx_div_n, 2); + HP_SYS_CLKRST.peri_clk_ctrl14.reg_i2s0_tx_div_yn1 = 0; + HP_SYS_CLKRST.peri_clk_ctrl14.reg_i2s0_tx_div_y = 1; + HP_SYS_CLKRST.peri_clk_ctrl14.reg_i2s0_tx_div_z = 0; + HP_SYS_CLKRST.peri_clk_ctrl13.reg_i2s0_tx_div_x = 0; + /* Set the target mclk division coefficients */ HP_SYS_CLKRST.peri_clk_ctrl14.reg_i2s0_tx_div_yn1 = yn1; + HP_SYS_CLKRST.peri_clk_ctrl14.reg_i2s0_tx_div_z = z; + HP_SYS_CLKRST.peri_clk_ctrl14.reg_i2s0_tx_div_y = y; + HP_SYS_CLKRST.peri_clk_ctrl13.reg_i2s0_tx_div_x = x; + HAL_FORCE_MODIFY_U32_REG_FIELD(HP_SYS_CLKRST.peri_clk_ctrl13, reg_i2s0_tx_div_n, div_int); return; case 1: - HAL_FORCE_MODIFY_U32_REG_FIELD(HP_SYS_CLKRST.peri_clk_ctrl16, reg_i2s1_tx_div_n, div_int); - HP_SYS_CLKRST.peri_clk_ctrl16.reg_i2s1_tx_div_x = x; - HP_SYS_CLKRST.peri_clk_ctrl16.reg_i2s1_tx_div_y = y; - HP_SYS_CLKRST.peri_clk_ctrl17.reg_i2s1_tx_div_z = z; + /* Workaround for the double division issue. + * The division coefficients must be set in particular sequence. + * And it has to switch to a small division first before setting the target division. */ + HAL_FORCE_MODIFY_U32_REG_FIELD(HP_SYS_CLKRST.peri_clk_ctrl16, reg_i2s1_tx_div_n, 2); + HP_SYS_CLKRST.peri_clk_ctrl17.reg_i2s1_tx_div_yn1 = 0; + HP_SYS_CLKRST.peri_clk_ctrl16.reg_i2s1_tx_div_y = 1; + HP_SYS_CLKRST.peri_clk_ctrl17.reg_i2s1_tx_div_z = 0; + HP_SYS_CLKRST.peri_clk_ctrl16.reg_i2s1_tx_div_x = 0; + /* Set the target mclk division coefficients */ HP_SYS_CLKRST.peri_clk_ctrl17.reg_i2s1_tx_div_yn1 = yn1; + HP_SYS_CLKRST.peri_clk_ctrl17.reg_i2s1_tx_div_z = z; + HP_SYS_CLKRST.peri_clk_ctrl16.reg_i2s1_tx_div_y = y; + HP_SYS_CLKRST.peri_clk_ctrl16.reg_i2s1_tx_div_x = x; + HAL_FORCE_MODIFY_U32_REG_FIELD(HP_SYS_CLKRST.peri_clk_ctrl16, reg_i2s1_tx_div_n, div_int); return; case 2: - HAL_FORCE_MODIFY_U32_REG_FIELD(HP_SYS_CLKRST.peri_clk_ctrl18, reg_i2s2_tx_div_n, div_int); - HP_SYS_CLKRST.peri_clk_ctrl19.reg_i2s2_tx_div_x = x; - HP_SYS_CLKRST.peri_clk_ctrl19.reg_i2s2_tx_div_y = y; - HP_SYS_CLKRST.peri_clk_ctrl19.reg_i2s2_tx_div_z = z; + /* Workaround for the double division issue. + * The division coefficients must be set in particular sequence. + * And it has to switch to a small division first before setting the target division. */ + HAL_FORCE_MODIFY_U32_REG_FIELD(HP_SYS_CLKRST.peri_clk_ctrl18, reg_i2s2_tx_div_n, 2); + HP_SYS_CLKRST.peri_clk_ctrl19.reg_i2s2_tx_div_yn1 = 0; + HP_SYS_CLKRST.peri_clk_ctrl19.reg_i2s2_tx_div_y = 1; + HP_SYS_CLKRST.peri_clk_ctrl19.reg_i2s2_tx_div_z = 0; + HP_SYS_CLKRST.peri_clk_ctrl19.reg_i2s2_tx_div_x = 0; + /* Set the target mclk division coefficients */ HP_SYS_CLKRST.peri_clk_ctrl19.reg_i2s2_tx_div_yn1 = yn1; + HP_SYS_CLKRST.peri_clk_ctrl19.reg_i2s2_tx_div_z = z; + HP_SYS_CLKRST.peri_clk_ctrl19.reg_i2s2_tx_div_y = y; + HP_SYS_CLKRST.peri_clk_ctrl19.reg_i2s2_tx_div_x = x; + HAL_FORCE_MODIFY_U32_REG_FIELD(HP_SYS_CLKRST.peri_clk_ctrl18, reg_i2s2_tx_div_n, div_int); return; } } @@ -536,25 +563,52 @@ static inline void i2s_ll_rx_set_raw_clk_div(i2s_dev_t *hw, uint32_t div_int, ui // Note: this function involves HP_SYS_CLKRST register which is shared with other peripherals, need lock in upper layer switch (I2S_LL_GET_ID(hw)) { case 0: - HAL_FORCE_MODIFY_U32_REG_FIELD(HP_SYS_CLKRST.peri_clk_ctrl12, reg_i2s0_rx_div_n, div_int); - HP_SYS_CLKRST.peri_clk_ctrl12.reg_i2s0_rx_div_x = x; - HP_SYS_CLKRST.peri_clk_ctrl12.reg_i2s0_rx_div_y = y; - HP_SYS_CLKRST.peri_clk_ctrl13.reg_i2s0_rx_div_z = z; + /* Workaround for the double division issue. + * The division coefficients must be set in particular sequence. + * And it has to switch to a small division first before setting the target division. */ + HAL_FORCE_MODIFY_U32_REG_FIELD(HP_SYS_CLKRST.peri_clk_ctrl12, reg_i2s0_rx_div_n, 2); + HP_SYS_CLKRST.peri_clk_ctrl13.reg_i2s0_rx_div_yn1 = 0; + HP_SYS_CLKRST.peri_clk_ctrl12.reg_i2s0_rx_div_y = 1; + HP_SYS_CLKRST.peri_clk_ctrl13.reg_i2s0_rx_div_z = 0; + HP_SYS_CLKRST.peri_clk_ctrl12.reg_i2s0_rx_div_x = 0; + /* Set the target mclk division coefficients */ HP_SYS_CLKRST.peri_clk_ctrl13.reg_i2s0_rx_div_yn1 = yn1; + HP_SYS_CLKRST.peri_clk_ctrl13.reg_i2s0_rx_div_z = z; + HP_SYS_CLKRST.peri_clk_ctrl12.reg_i2s0_rx_div_y = y; + HP_SYS_CLKRST.peri_clk_ctrl12.reg_i2s0_rx_div_x = x; + HAL_FORCE_MODIFY_U32_REG_FIELD(HP_SYS_CLKRST.peri_clk_ctrl12, reg_i2s0_rx_div_n, div_int); return; case 1: - HAL_FORCE_MODIFY_U32_REG_FIELD(HP_SYS_CLKRST.peri_clk_ctrl14, reg_i2s1_rx_div_n, div_int); - HP_SYS_CLKRST.peri_clk_ctrl15.reg_i2s1_rx_div_x = x; - HP_SYS_CLKRST.peri_clk_ctrl15.reg_i2s1_rx_div_y = y; - HP_SYS_CLKRST.peri_clk_ctrl15.reg_i2s1_rx_div_z = z; + /* Workaround for the double division issue. + * The division coefficients must be set in particular sequence. + * And it has to switch to a small division first before setting the target division. */ + HAL_FORCE_MODIFY_U32_REG_FIELD(HP_SYS_CLKRST.peri_clk_ctrl14, reg_i2s1_rx_div_n, 2); + HP_SYS_CLKRST.peri_clk_ctrl15.reg_i2s1_rx_div_yn1 = 0; + HP_SYS_CLKRST.peri_clk_ctrl15.reg_i2s1_rx_div_y = 1; + HP_SYS_CLKRST.peri_clk_ctrl15.reg_i2s1_rx_div_z = 0; + HP_SYS_CLKRST.peri_clk_ctrl15.reg_i2s1_rx_div_x = 0; + /* Set the target mclk division coefficients */ HP_SYS_CLKRST.peri_clk_ctrl15.reg_i2s1_rx_div_yn1 = yn1; + HP_SYS_CLKRST.peri_clk_ctrl15.reg_i2s1_rx_div_z = z; + HP_SYS_CLKRST.peri_clk_ctrl15.reg_i2s1_rx_div_y = y; + HP_SYS_CLKRST.peri_clk_ctrl15.reg_i2s1_rx_div_x = x; + HAL_FORCE_MODIFY_U32_REG_FIELD(HP_SYS_CLKRST.peri_clk_ctrl14, reg_i2s1_rx_div_n, div_int); return; case 2: - HAL_FORCE_MODIFY_U32_REG_FIELD(HP_SYS_CLKRST.peri_clk_ctrl17, reg_i2s2_rx_div_n, div_int); - HP_SYS_CLKRST.peri_clk_ctrl17.reg_i2s2_rx_div_x = x; - HP_SYS_CLKRST.peri_clk_ctrl18.reg_i2s2_rx_div_y = y; - HP_SYS_CLKRST.peri_clk_ctrl18.reg_i2s2_rx_div_z = z; + /* Workaround for the double division issue. + * The division coefficients must be set in particular sequence. + * And it has to switch to a small division first before setting the target division. */ + HAL_FORCE_MODIFY_U32_REG_FIELD(HP_SYS_CLKRST.peri_clk_ctrl17, reg_i2s2_rx_div_n, 2); + HP_SYS_CLKRST.peri_clk_ctrl18.reg_i2s2_rx_div_yn1 = 0; + HP_SYS_CLKRST.peri_clk_ctrl18.reg_i2s2_rx_div_y = 1; + HP_SYS_CLKRST.peri_clk_ctrl18.reg_i2s2_rx_div_z = 0; + HP_SYS_CLKRST.peri_clk_ctrl17.reg_i2s2_rx_div_x = 0; + /* Set the target mclk division coefficients */ HP_SYS_CLKRST.peri_clk_ctrl18.reg_i2s2_rx_div_yn1 = yn1; + HP_SYS_CLKRST.peri_clk_ctrl18.reg_i2s2_rx_div_z = z; + HP_SYS_CLKRST.peri_clk_ctrl18.reg_i2s2_rx_div_y = y; + HP_SYS_CLKRST.peri_clk_ctrl17.reg_i2s2_rx_div_x = x; + HAL_FORCE_MODIFY_U32_REG_FIELD(HP_SYS_CLKRST.peri_clk_ctrl17, reg_i2s2_rx_div_n, div_int); return; } } @@ -567,12 +621,6 @@ static inline void i2s_ll_rx_set_raw_clk_div(i2s_dev_t *hw, uint32_t div_int, ui */ static inline void _i2s_ll_tx_set_mclk(i2s_dev_t *hw, const hal_utils_clk_div_t *mclk_div) { - /* Workaround for inaccurate clock while switching from a relatively low sample rate to a high sample rate - * Set to particular coefficients first then update to the target coefficients, - * otherwise the clock division might be inaccurate. - * the general idea is to set a value that impossible to calculate from the regular decimal */ - i2s_ll_tx_set_raw_clk_div(hw, 7, 317, 7, 3, 0); - uint32_t div_x = 0; uint32_t div_y = 0; uint32_t div_z = 0; @@ -611,12 +659,6 @@ static inline void i2s_ll_rx_set_bck_div_num(i2s_dev_t *hw, uint32_t val) */ static inline void _i2s_ll_rx_set_mclk(i2s_dev_t *hw, const hal_utils_clk_div_t *mclk_div) { - /* Workaround for inaccurate clock while switching from a relatively low sample rate to a high sample rate - * Set to particular coefficients first then update to the target coefficients, - * otherwise the clock division might be inaccurate. - * the general idea is to set a value that impossible to calculate from the regular decimal */ - i2s_ll_rx_set_raw_clk_div(hw, 7, 317, 7, 3, 0); - uint32_t div_x = 0; uint32_t div_y = 0; uint32_t div_z = 0; diff --git a/components/hal/esp32s2/include/hal/i2s_ll.h b/components/hal/esp32s2/include/hal/i2s_ll.h index 8ae76c41cd20..4399631e1eeb 100644 --- a/components/hal/esp32s2/include/hal/i2s_ll.h +++ b/components/hal/esp32s2/include/hal/i2s_ll.h @@ -341,11 +341,6 @@ static inline void i2s_ll_set_raw_mclk_div(i2s_dev_t *hw, uint32_t mclk_div, uin */ static inline void i2s_ll_tx_set_mclk(i2s_dev_t *hw, const hal_utils_clk_div_t *mclk_div) { - /* Workaround for inaccurate clock while switching from a relatively low sample rate to a high sample rate - * Set to particular coefficients first then update to the target coefficients, - * otherwise the clock division might be inaccurate. - * the general idea is to set a value that unlike to calculate from the regular decimal */ - i2s_ll_set_raw_mclk_div(hw, 7, 47, 3); i2s_ll_set_raw_mclk_div(hw, mclk_div->integer, mclk_div->denominator, mclk_div->numerator); } @@ -682,7 +677,7 @@ static inline void i2s_ll_rx_set_eof_num(i2s_dev_t *hw, uint32_t eof_num) } /** - * @brief Congfigure TX chan bit and audio data bit, on ESP32-S2, sample_bit should equals to data_bit + * @brief Configure TX chan bit and audio data bit, on ESP32-S2, sample_bit should equals to data_bit * * @param hw Peripheral I2S hardware instance address. * @param chan_bit The chan bit width @@ -695,7 +690,7 @@ static inline void i2s_ll_tx_set_sample_bit(i2s_dev_t *hw, uint8_t chan_bit, int } /** - * @brief Congfigure RX chan bit and audio data bit, on ESP32-S2, sample_bit should equals to data_bit + * @brief Configure RX chan bit and audio data bit, on ESP32-S2, sample_bit should equals to data_bit * * @param hw Peripheral I2S hardware instance address. * @param chan_bit The chan bit width diff --git a/components/hal/esp32s3/include/hal/i2s_ll.h b/components/hal/esp32s3/include/hal/i2s_ll.h index 89b53f8c24f1..9f0ff7ec5afc 100644 --- a/components/hal/esp32s3/include/hal/i2s_ll.h +++ b/components/hal/esp32s3/include/hal/i2s_ll.h @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2021-2023 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -291,15 +291,21 @@ static inline void i2s_ll_tx_set_bck_div_num(i2s_dev_t *hw, uint32_t val) */ static inline void i2s_ll_tx_set_raw_clk_div(i2s_dev_t *hw, uint32_t div_int, uint32_t x, uint32_t y, uint32_t z, uint32_t yn1) { - /* Set the integer part of mclk division */ + /* Workaround for the double division issue. + * The division coefficients must be set in particular sequence. + * And it has to switch to a small division first before setting the target division. */ + HAL_FORCE_MODIFY_U32_REG_FIELD(hw->tx_clkm_conf, tx_clkm_div_num, 2); + hw->tx_clkm_div_conf.tx_clkm_div_yn1 = 0; + hw->tx_clkm_div_conf.tx_clkm_div_y = 1; + hw->tx_clkm_div_conf.tx_clkm_div_z = 0; + hw->tx_clkm_div_conf.tx_clkm_div_x = 0; + + /* Set the target mclk division coefficients */ + hw->tx_clkm_div_conf.tx_clkm_div_yn1 = yn1; + hw->tx_clkm_div_conf.tx_clkm_div_z = z; + hw->tx_clkm_div_conf.tx_clkm_div_y = y; + hw->tx_clkm_div_conf.tx_clkm_div_x = x; HAL_FORCE_MODIFY_U32_REG_FIELD(hw->tx_clkm_conf, tx_clkm_div_num, div_int); - /* Set the decimal part of the mclk division */ - typeof(hw->tx_clkm_div_conf) div = {}; - div.tx_clkm_div_x = x; - div.tx_clkm_div_y = y; - div.tx_clkm_div_z = z; - div.tx_clkm_div_yn1 = yn1; - hw->tx_clkm_div_conf.val = div.val; } /** @@ -314,15 +320,21 @@ static inline void i2s_ll_tx_set_raw_clk_div(i2s_dev_t *hw, uint32_t div_int, ui */ static inline void i2s_ll_rx_set_raw_clk_div(i2s_dev_t *hw, uint32_t div_int, uint32_t x, uint32_t y, uint32_t z, uint32_t yn1) { - /* Set the integer part of mclk division */ + /* Workaround for the double division issue. + * The division coefficients must be set in particular sequence. + * And it has to switch to a small division first before setting the target division. */ + HAL_FORCE_MODIFY_U32_REG_FIELD(hw->rx_clkm_conf, rx_clkm_div_num, 2); + hw->rx_clkm_div_conf.rx_clkm_div_yn1 = 0; + hw->rx_clkm_div_conf.rx_clkm_div_y = 1; + hw->rx_clkm_div_conf.rx_clkm_div_z = 0; + hw->rx_clkm_div_conf.rx_clkm_div_x = 0; + + /* Set the target mclk division coefficients */ + hw->rx_clkm_div_conf.rx_clkm_div_yn1 = yn1; + hw->rx_clkm_div_conf.rx_clkm_div_z = z; + hw->rx_clkm_div_conf.rx_clkm_div_y = y; + hw->rx_clkm_div_conf.rx_clkm_div_x = x; HAL_FORCE_MODIFY_U32_REG_FIELD(hw->rx_clkm_conf, rx_clkm_div_num, div_int); - /* Set the decimal part of the mclk division */ - typeof(hw->rx_clkm_div_conf) div = {}; - div.rx_clkm_div_x = x; - div.rx_clkm_div_y = y; - div.rx_clkm_div_z = z; - div.rx_clkm_div_yn1 = yn1; - hw->rx_clkm_div_conf.val = div.val; } /** @@ -333,12 +345,6 @@ static inline void i2s_ll_rx_set_raw_clk_div(i2s_dev_t *hw, uint32_t div_int, ui */ static inline void i2s_ll_tx_set_mclk(i2s_dev_t *hw, const hal_utils_clk_div_t *mclk_div) { - /* Workaround for inaccurate clock while switching from a relatively low sample rate to a high sample rate - * Set to particular coefficients first then update to the target coefficients, - * otherwise the clock division might be inaccurate. - * the general idea is to set a value that impossible to calculate from the regular decimal */ - i2s_ll_tx_set_raw_clk_div(hw, 7, 317, 7, 3, 0); - uint32_t div_x = 0; uint32_t div_y = 0; uint32_t div_z = 0; @@ -373,12 +379,6 @@ static inline void i2s_ll_rx_set_bck_div_num(i2s_dev_t *hw, uint32_t val) */ static inline void i2s_ll_rx_set_mclk(i2s_dev_t *hw, const hal_utils_clk_div_t *mclk_div) { - /* Workaround for inaccurate clock while switching from a relatively low sample rate to a high sample rate - * Set to particular coefficients first then update to the target coefficients, - * otherwise the clock division might be inaccurate. - * the general idea is to set a value that impossible to calculate from the regular decimal */ - i2s_ll_rx_set_raw_clk_div(hw, 7, 317, 7, 3, 0); - uint32_t div_x = 0; uint32_t div_y = 0; uint32_t div_z = 0; @@ -474,7 +474,7 @@ static inline void i2s_ll_rx_set_eof_num(i2s_dev_t *hw, int eof_num) } /** - * @brief Congfigure TX chan bit and audio data bit + * @brief Configure TX chan bit and audio data bit * * @param hw Peripheral I2S hardware instance address. * @param chan_bit The chan bit width @@ -487,7 +487,7 @@ static inline void i2s_ll_tx_set_sample_bit(i2s_dev_t *hw, uint8_t chan_bit, int } /** - * @brief Congfigure RX chan bit and audio data bit + * @brief Configure RX chan bit and audio data bit * * @param hw Peripheral I2S hardware instance address. * @param chan_bit The chan bit width @@ -790,11 +790,11 @@ static inline void i2s_ll_tx_set_pdm_fpfs(i2s_dev_t *hw, uint32_t fp, uint32_t f } /** - * @brief Get I2S TX PDM fp configuration paramater + * @brief Get I2S TX PDM fp configuration parameter * * @param hw Peripheral I2S hardware instance address. * @return - * - fp configuration paramater + * - fp configuration parameter */ static inline uint32_t i2s_ll_tx_get_pdm_fp(i2s_dev_t *hw) { @@ -802,11 +802,11 @@ static inline uint32_t i2s_ll_tx_get_pdm_fp(i2s_dev_t *hw) } /** - * @brief Get I2S TX PDM fs configuration paramater + * @brief Get I2S TX PDM fs configuration parameter * * @param hw Peripheral I2S hardware instance address. * @return - * - fs configuration paramater + * - fs configuration parameter */ static inline uint32_t i2s_ll_tx_get_pdm_fs(i2s_dev_t *hw) { @@ -927,7 +927,7 @@ static inline void i2s_ll_tx_set_pdm_sd_dither2(i2s_dev_t *hw, uint32_t dither2) * @brief Configure RX PDM downsample * * @param hw Peripheral I2S hardware instance address. - * @param dsr PDM downsample configuration paramater + * @param dsr PDM downsample configuration parameter */ static inline void i2s_ll_rx_set_pdm_dsr(i2s_dev_t *hw, i2s_pdm_dsr_t dsr) { @@ -949,7 +949,7 @@ static inline void i2s_ll_rx_get_pdm_dsr(i2s_dev_t *hw, i2s_pdm_dsr_t *dsr) * @brief Configura TX a/u-law decompress or compress * * @param hw Peripheral I2S hardware instance address. - * @param pcm_cfg PCM configuration paramater + * @param pcm_cfg PCM configuration parameter */ static inline void i2s_ll_tx_set_pcm_type(i2s_dev_t *hw, i2s_pcm_compress_t pcm_cfg) { @@ -961,7 +961,7 @@ static inline void i2s_ll_tx_set_pcm_type(i2s_dev_t *hw, i2s_pcm_compress_t pcm_ * @brief Configure RX a/u-law decompress or compress * * @param hw Peripheral I2S hardware instance address. - * @param pcm_cfg PCM configuration paramater + * @param pcm_cfg PCM configuration parameter */ static inline void i2s_ll_rx_set_pcm_type(i2s_dev_t *hw, i2s_pcm_compress_t pcm_cfg) { @@ -1133,7 +1133,7 @@ static inline void i2s_ll_tx_pdm_dma_take_mode(i2s_dev_t *hw, bool is_mono, bool * @param is_mono The DMA data only has one slot (mono) or contains two slots (stereo) * @param is_copy Whether the un-selected slot copies the data from the selected one * If not, the un-selected slot will transmit the data from 'conf_single_data' - * @param mask The slot mask to selet the slot + * @param mask The slot mask to select the slot */ static inline void i2s_ll_tx_pdm_slot_mode(i2s_dev_t *hw, bool is_mono, bool is_copy, i2s_pdm_slot_mask_t mask) { From 503097739e9381f6e1c66164ffc324ab641b987b Mon Sep 17 00:00:00 2001 From: laokaiyao Date: Thu, 26 Sep 2024 17:49:31 +0800 Subject: [PATCH 043/365] fix(i2s): fix multi-dev test failure --- .../test_apps/i2s_multi_dev/main/test_i2s_multi_dev.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/esp_driver_i2s/test_apps/i2s_multi_dev/main/test_i2s_multi_dev.c b/components/esp_driver_i2s/test_apps/i2s_multi_dev/main/test_i2s_multi_dev.c index 18a7092511a5..3f2737b0b350 100644 --- a/components/esp_driver_i2s/test_apps/i2s_multi_dev/main/test_i2s_multi_dev.c +++ b/components/esp_driver_i2s/test_apps/i2s_multi_dev/main/test_i2s_multi_dev.c @@ -23,7 +23,7 @@ static const char *TAG = "i2s_multi_dev_test"; #define TEST_I2S_FRAME_SIZE (128) // Frame numbers in every writing / reading #define TEST_I2S_ARRAY_LENGTH (1024) // The loop data length for verification -#define TEST_I2S_MAX_DATA (256) // The maximum data value in the data buffer +#define TEST_I2S_MAX_DATA (128) // The maximum data value in the data buffer #define TEST_I2S_MAX_FAIL_CNT (3) // Max broken packet count #define TEST_I2S_FRAME_TIMEOUT_SEC (10.0f) // Timeout seconds of waiting for a correct frame From 2c11c2ab8135c3c7064fb5c262fc17a457cf4202 Mon Sep 17 00:00:00 2001 From: Aditya Patwardhan Date: Tue, 17 Sep 2024 22:07:05 +0530 Subject: [PATCH 044/365] fix(docs): Fix secure boot v2 documentation Update the secure boot v2 documentation about the limitation of read-protection when secure boot is enabled Closes https://github.com/espressif/esp-idf/issues/14587 --- docs/en/security/secure-boot-v2.rst | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/docs/en/security/secure-boot-v2.rst b/docs/en/security/secure-boot-v2.rst index 7cc0a8d22774..e69b3ce049c9 100644 --- a/docs/en/security/secure-boot-v2.rst +++ b/docs/en/security/secure-boot-v2.rst @@ -435,17 +435,17 @@ Restrictions After Secure Boot Is Enabled - Please note that enabling Secure Boot or flash encryption disables the USB-OTG USB stack in the ROM, disallowing updates via the serial emulation or Device Firmware Update (DFU) on that port. +- After Secure Boot is enabled, further read-protection of eFuse keys is not possible. This is done to prevent an attacker from read-protecting the eFuse block that contains the Secure Boot public key digest, which could result in immediate denial of service and potentially enable a fault injection attack to bypass the signature verification. For further information on read-protected keys, see the details below. + Burning read-protected keys ~~~~~~~~~~~~~~~~~~~~~~~~~~~ -After Secure Boot is enabled, no further eFuses can be read-protected, because this might allow an attacker to read-protect the efuse block holding the public key digest, causing an immediate denial of service and possibly allowing an additional fault injection attack to bypass the signature protection. - -If :doc:`/security/flash-encryption` is enabled by the 2nd stage bootloader, it ensures that the flash encryption key generated on the first boot shall already be read-protected. - -In case you need to read-protect a key after Secure Boot has been enabled on the device, for example, +**Read protected keys**: +The following keys must be read-protected on the device, the respective hardware will have access them directly (not readable by software): .. list:: - :SOC_FLASH_ENC_SUPPORTED:* the flash encryption key + + :SOC_FLASH_ENC_SUPPORTED:* Flash encryption key :SOC_HMAC_SUPPORTED:* HMAC keys @@ -453,12 +453,21 @@ In case you need to read-protect a key after Secure Boot has been enabled on the :SOC_KEY_MANAGER_SUPPORTED:* Key Manager keys - you need to enable the config :ref:`CONFIG_SECURE_BOOT_V2_ALLOW_EFUSE_RD_DIS` at the same time when you enable Secure Boot to prevent disabling the ability to read-protect further efuses. +**Non-read protected keys**: +The following keys must not be read-protected on the device as the software needs to access them (readable by software): -It is highly recommended that all such keys must been burned before enabling secure boot. +.. list:: -In case you need to enable :ref:`CONFIG_SECURE_BOOT_V2_ALLOW_EFUSE_RD_DIS`, make sure that you burn the efuse {IDF_TARGET_EFUSE_WR_DIS_RD_DIS}, using ``esp_efuse_write_field_bit()`` API from ``esp_efuse.h``, once all the read-protected efuse keys have been programmed. + :SOC_SECURE_BOOT_SUPPORTED:* Secure boot public key digest + * User data + +When Secure Boot is enabled, it shall disable the ability to read-protect further eFuses by default. If you want keep the ability to read-protect an eFuse later in the application (e.g, a key mentioned in the above list of read-protected keys) then you need to enable the config :ref:`CONFIG_SECURE_BOOT_V2_ALLOW_EFUSE_RD_DIS` at the same time when you enable Secure Boot. + +Ideally, it is strongly recommended that all such keys must been burned before enabling secure boot. However, if you need to enable :ref:`CONFIG_SECURE_BOOT_V2_ALLOW_EFUSE_RD_DIS`, make sure that you burn the eFuse {IDF_TARGET_EFUSE_WR_DIS_RD_DIS}, using :cpp:func:`esp_efuse_write_field_bit`, once all the read-protected eFuse keys have been programmed. + +.. note:: + If :doc:`/security/flash-encryption` is enabled by the 2nd stage bootloader at the time of enabling Secure Boot, it ensures that the flash encryption key generated on the first boot shall already be read-protected. .. _secure-boot-v2-generate-key: @@ -631,7 +640,7 @@ Secure Boot Best Practices 4. The active partition is set to the new OTA application's partition. 5. The device resets and loads the bootloader that is verified with key #N-1, which then boots the new app verified with key #N. 6. The new app verifies the bootloader with key #N as a final check, and then runs code to revoke key #N-1, i.e., sets KEY_REVOKE eFuse bit. - 7. The API `esp_ota_revoke_secure_boot_public_key()` can be used to revoke the key #N-1. + 7. The API :cpp:func:`esp_ota_revoke_secure_boot_public_key` can be used to revoke the key #N-1. * A similar approach can also be used to physically re-flash with a new key. For physical re-flashing, the bootloader content can also be changed at the same time. From 1a547e34f15151453f3f8c4702a627b10b5c84a1 Mon Sep 17 00:00:00 2001 From: Sudeep Mohanty Date: Fri, 27 Sep 2024 12:04:57 +0200 Subject: [PATCH 045/365] fix(freertos): Fix freertos example pytest script This commit updates the freertos/basic_freertos_smp_usage pytest script to not follow a rigid order when testing against output logs as tasks can spawn on any core in no particular order. --- .../main/lock_example.c | 4 +-- .../pytest_smp_examples.py | 27 ++++++++++--------- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/examples/system/freertos/basic_freertos_smp_usage/main/lock_example.c b/examples/system/freertos/basic_freertos_smp_usage/main/lock_example.c index 670b13edc120..409e2095b62d 100644 --- a/examples/system/freertos/basic_freertos_smp_usage/main/lock_example.c +++ b/examples/system/freertos/basic_freertos_smp_usage/main/lock_example.c @@ -78,7 +78,7 @@ static void inc_num_atomic_iter(void *arg) static void inc_num_mutex(void *arg) { - int task_index = *(int*)arg; + int task_index = (int)arg; ESP_LOGI(TAG, "mutex task %d created", task_index); while (!timed_out) { @@ -159,7 +159,7 @@ int comp_lock_entry_func(int argc, char **argv) s_global_num = 0; // create 2 tasks to increase a shared number in turn for (thread_id = 0; thread_id < SHARE_RES_THREAD_NUM; thread_id++) { - xTaskCreatePinnedToCore(inc_num_mutex, NULL, 4096, &thread_id, TASK_PRIO_3, NULL, tskNO_AFFINITY); + xTaskCreatePinnedToCore(inc_num_mutex, NULL, 4096, (void *)thread_id, TASK_PRIO_3, NULL, tskNO_AFFINITY); } // time out and stop running after 5 seconds diff --git a/examples/system/freertos/basic_freertos_smp_usage/pytest_smp_examples.py b/examples/system/freertos/basic_freertos_smp_usage/pytest_smp_examples.py index 5019db6a4b40..fa7ac3b547d7 100644 --- a/examples/system/freertos/basic_freertos_smp_usage/pytest_smp_examples.py +++ b/examples/system/freertos/basic_freertos_smp_usage/pytest_smp_examples.py @@ -13,10 +13,13 @@ def test_creating_task( dut.expect(r'esp32(?:[a-zA-Z]\d)?>') # test creating_task dut.write('create_task') - dut.expect('create task example: task#0 is running on core#0') - dut.expect('create task example: task#1 is running on core#0') - dut.expect(r'create task example: task#2 is running on core#\d') - dut.expect(r'create task example: task#3 is running on core#\d') + expected_patterns = [ + 'create task example: task#0 is running on core#0', + 'create task example: task#1 is running on core#0', + r'create task example: task#2 is running on core#\d', + r'create task example: task#3 is running on core#\d', + ] + dut.expect(expected_patterns, expect_all=True) @pytest.mark.esp32c3 @@ -46,14 +49,14 @@ def test_locks( dut.expect(r'esp32(?:[a-zA-Z]\d)?>') # test locks dut.write('lock') - dut.expect(r'lock example: mutex task took \d+ us on core\d') - dut.expect(r'lock example: spinlock task took \d+ us on core\d') - dut.expect(r'lock example: atomic task took \d+ us on core\d') - dut.expect(r'task0 read value = 0 on core #\d') - dut.expect('task0 set value = 1') - dut.expect(r'task\d read value = 1 on core #\d') - dut.expect(r'task\d set value = 2') - dut.expect(r'task0 read value = 2 on core #\d') + expected_patterns = [ + r'lock example: mutex task took \d+ us on core\d', + r'lock example: spinlock task took \d+ us on core\d', + r'lock example: atomic task took \d+ us on core\d', + r'task\d read value = \d on core #\d', + r'task\d set value = \d', + ] + dut.expect(expected_patterns, expect_all=True) @pytest.mark.esp32c3 From 5bb10bc10d73f42b684c4dcdc46fc9e96a0a363c Mon Sep 17 00:00:00 2001 From: David Cermak Date: Tue, 1 Oct 2024 11:28:10 +0200 Subject: [PATCH 046/365] fix(esp_wifi): Add null pointer checks to WiFi-netif APIs Added null pointer checks to WiFi-netif API functions to prevent potential crashes from invalid arguments, updated unit tests. Closes https://github.com/espressif/esp-idf/issues/8702 --- .../test_app_esp_netif/main/esp_netif_test_lwip.c | 12 ++++++++++++ components/esp_wifi/src/wifi_netif.c | 8 +++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/components/esp_netif/test_apps/test_app_esp_netif/main/esp_netif_test_lwip.c b/components/esp_netif/test_apps/test_app_esp_netif/main/esp_netif_test_lwip.c index 6fe84750b4bd..66974fab137a 100644 --- a/components/esp_netif/test_apps/test_app_esp_netif/main/esp_netif_test_lwip.c +++ b/components/esp_netif/test_apps/test_app_esp_netif/main/esp_netif_test_lwip.c @@ -315,6 +315,17 @@ TEST(esp_netif, dhcp_server_state_transitions_mesh) #endif // CONFIG_ESP_WIFI_ENABLED && CONFIG_ESP_WIFI_SOFTAP_SUPPORT #ifdef CONFIG_ESP_WIFI_ENABLED +/* + * This checks some semi-public API for null dereference + */ +TEST(esp_netif, wifi_netif_api_null_deref) +{ + esp_wifi_destroy_if_driver(NULL); // returns void: just checking if won't crash + TEST_ASSERT_NOT_EQUAL(ESP_OK, esp_wifi_get_if_mac(NULL, NULL)); + TEST_ASSERT_NOT_EQUAL(true, esp_wifi_is_if_ready_when_started(NULL)); + TEST_ASSERT_NOT_EQUAL(ESP_OK, esp_wifi_register_if_rxcb(NULL, NULL, NULL)); +} + /* * This test validates convenience API esp_netif_create_wifi() which creates WiFi station * or API with the specified inherent network config. @@ -582,6 +593,7 @@ TEST_GROUP_RUNNER(esp_netif) RUN_TEST_CASE(esp_netif, create_delete_multiple_netifs) RUN_TEST_CASE(esp_netif, find_netifs) #ifdef CONFIG_ESP_WIFI_ENABLED + RUN_TEST_CASE(esp_netif, wifi_netif_api_null_deref) RUN_TEST_CASE(esp_netif, create_custom_wifi_interfaces) RUN_TEST_CASE(esp_netif, create_destroy_default_wifi) #endif diff --git a/components/esp_wifi/src/wifi_netif.c b/components/esp_wifi/src/wifi_netif.c index 60559b6fe4fd..9b6183bcd6dc 100644 --- a/components/esp_wifi/src/wifi_netif.c +++ b/components/esp_wifi/src/wifi_netif.c @@ -114,6 +114,9 @@ wifi_netif_driver_t esp_wifi_create_if_driver(wifi_interface_t wifi_if) esp_err_t esp_wifi_get_if_mac(wifi_netif_driver_t ifx, uint8_t mac[6]) { + if (ifx == NULL || mac == NULL) { + return ESP_ERR_INVALID_ARG; + } wifi_interface_t wifi_interface = ifx->wifi_if; return esp_wifi_get_mac(wifi_interface, mac); @@ -123,7 +126,7 @@ bool esp_wifi_is_if_ready_when_started(wifi_netif_driver_t ifx) { #ifdef CONFIG_ESP_WIFI_SOFTAP_SUPPORT // WiFi rxcb to be register wifi rxcb on start for AP only, station gets it registered on connect event - return (ifx->wifi_if == WIFI_IF_AP); + return (ifx && ifx->wifi_if == WIFI_IF_AP); #else return false; #endif @@ -131,6 +134,9 @@ bool esp_wifi_is_if_ready_when_started(wifi_netif_driver_t ifx) esp_err_t esp_wifi_register_if_rxcb(wifi_netif_driver_t ifx, esp_netif_receive_t fn, void * arg) { + if (ifx == NULL || fn == NULL || arg == NULL) { + return ESP_ERR_INVALID_ARG; + } if (ifx->base.netif != arg) { ESP_LOGE(TAG, "Invalid argument: supplied netif=%p does not equal to interface netif=%p", arg, ifx->base.netif); return ESP_ERR_INVALID_ARG; From 2c458f3af191f404923c8d59a31688530d4c41ee Mon Sep 17 00:00:00 2001 From: Peter Dragun Date: Wed, 18 Sep 2024 15:22:20 +0200 Subject: [PATCH 047/365] feat(tools): Add auto color to monitor and disable colors from chip logs ANSI color codes are handled on the host side instead of the chip side. This will result in shorter log messages transmitted over serial. --- components/bootloader/Kconfig.log.format | 2 +- components/log/Kconfig.format | 2 +- docs/en/migration-guides/release-5.x/5.4/system.rst | 1 + examples/storage/semihost_vfs/README.md | 3 +-- examples/storage/semihost_vfs/pytest_semihost_vfs.py | 8 +++++--- tools/idf_py_actions/serial_ext.py | 9 +++++++++ 6 files changed, 18 insertions(+), 7 deletions(-) diff --git a/components/bootloader/Kconfig.log.format b/components/bootloader/Kconfig.log.format index b1b877b0a99c..6d87bc560124 100644 --- a/components/bootloader/Kconfig.log.format +++ b/components/bootloader/Kconfig.log.format @@ -2,7 +2,7 @@ menu "Format" config BOOTLOADER_LOG_COLORS bool "Color" - default y + default n help Use ANSI terminal colors in log output Enable ANSI terminal color codes. diff --git a/components/log/Kconfig.format b/components/log/Kconfig.format index ba0c6286ed8e..e743dabff2e5 100644 --- a/components/log/Kconfig.format +++ b/components/log/Kconfig.format @@ -2,7 +2,7 @@ menu "Format" config LOG_COLORS bool "Color" - default y + default n help Enable ANSI terminal color codes. In order to view these, your terminal program must support ANSI color codes. diff --git a/docs/en/migration-guides/release-5.x/5.4/system.rst b/docs/en/migration-guides/release-5.x/5.4/system.rst index e6e0ede0156a..ca461e15d67d 100644 --- a/docs/en/migration-guides/release-5.x/5.4/system.rst +++ b/docs/en/migration-guides/release-5.x/5.4/system.rst @@ -8,6 +8,7 @@ Log - `esp_log_buffer_hex` is deprecated, use `ESP_LOG_BUFFER_HEX` instead. - `esp_log_buffer_char` is deprecated, use `ESP_LOG_BUFFER_CHAR` instead. +- The default value for ``CONFIG_LOG_COLORS`` is now set to false. Colors are added on the host side by default in IDF Monitor. If you want to enable colors in the log output for other console monitors, set ``CONFIG_LOG_COLORS`` to true in your project configuration. To disable automatic coloring in IDF Monitor, run the following command: ``idf.py monitor --disable-auto-color``. ESP ROM --------- diff --git a/examples/storage/semihost_vfs/README.md b/examples/storage/semihost_vfs/README.md index 0cf77e01fa4f..0ce5acc0eacc 100644 --- a/examples/storage/semihost_vfs/README.md +++ b/examples/storage/semihost_vfs/README.md @@ -97,7 +97,7 @@ There are two outputs produced by example: ``` W (274) example: Switch to semihosted stdout W (274) example: Switched back to UART stdout - I (274) example: Wrote 2798 bytes + I (274) example: Wrote 2776 bytes ====================== HOST DATA START ========================= The following are the graphical (non-control) characters defined by ISO 8859-1 (1987). Descriptions in words aren't all that helpful, @@ -115,4 +115,3 @@ There are two outputs produced by example: ====================== HOST DATA END ========================= I (694) example: Read 6121 bytes ``` - diff --git a/examples/storage/semihost_vfs/pytest_semihost_vfs.py b/examples/storage/semihost_vfs/pytest_semihost_vfs.py index aff2e51227aa..90af90e29e20 100644 --- a/examples/storage/semihost_vfs/pytest_semihost_vfs.py +++ b/examples/storage/semihost_vfs/pytest_semihost_vfs.py @@ -1,6 +1,5 @@ -# SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD +# SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD # SPDX-License-Identifier: Unlicense OR CC0-1.0 - import os import shutil import tempfile @@ -42,7 +41,10 @@ def prepare() -> t.Generator[None, None, None]: def test_semihost_vfs(dut: IdfDut) -> None: dut.expect_exact('example: Switch to semihosted stdout') dut.expect_exact('example: Switched back to UART stdout') - dut.expect_exact('example: Wrote 2798 bytes') + if dut.app.sdkconfig.get('LOG_COLORS') is True: + dut.expect_exact('example: Wrote 2798 bytes') + else: + dut.expect_exact('example: Wrote 2776 bytes') dut.expect_exact('====================== HOST DATA START =========================') with open(HOST_FILE_PATH) as f: diff --git a/tools/idf_py_actions/serial_ext.py b/tools/idf_py_actions/serial_ext.py index 9d8c1b3a3a7c..502ca5ecec0d 100644 --- a/tools/idf_py_actions/serial_ext.py +++ b/tools/idf_py_actions/serial_ext.py @@ -105,6 +105,7 @@ def monitor( timestamps: bool, timestamp_format: str, force_color: bool, + disable_auto_color: bool, ) -> None: """ Run esp_idf_monitor to watch build output @@ -187,6 +188,9 @@ def monitor( if force_color or os.name == 'nt': monitor_args += ['--force-color'] + if disable_auto_color: + monitor_args += ['--disable-auto-color'] + idf_py = [PYTHON] + _get_commandline_options(ctx) # commands to re-run idf.py monitor_args += ['-m', ' '.join("'%s'" % a for a in idf_py)] hints = not args.no_hints @@ -1011,6 +1015,11 @@ def efuse_write_protect(action: str, ctx: click.core.Context, args: PropertyDict 'is_flag': True, 'help': 'Always print ANSI for colors', }, + { + 'names': ['--disable-auto-color'], + 'is_flag': True, + 'help': 'Disable auto coloring logs', + }, ], 'order_dependencies': [ 'flash', From d5f37b526d4aca11a41fc37ecf0d41c749a6e985 Mon Sep 17 00:00:00 2001 From: Konstantin Kondrashov Date: Mon, 12 Aug 2024 12:49:27 +0300 Subject: [PATCH 048/365] feat(partitions): Adds new partition types and subtypes for bootloader and partition_table --- .../include/esp_flash_partitions.h | 14 ++++++++++- .../src/bootloader_utility.c | 20 +++++++++++++++ .../esp_partition/include/esp_partition.h | 6 +++++ components/esp_partition/partition_linux.c | 14 +++++++++++ components/partition_table/gen_esp32part.py | 25 +++++++++++++++---- docs/en/api-guides/partition-tables.rst | 18 +++++++++++-- .../bootloader/sdkconfig.ci.verbose_logging | 1 + 7 files changed, 90 insertions(+), 8 deletions(-) diff --git a/components/bootloader_support/include/esp_flash_partitions.h b/components/bootloader_support/include/esp_flash_partitions.h index 47fe97596109..d05ded654fee 100644 --- a/components/bootloader_support/include/esp_flash_partitions.h +++ b/components/bootloader_support/include/esp_flash_partitions.h @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2015-2023 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -29,6 +29,14 @@ extern "C" { #define PART_SUBTYPE_DATA_NVS_KEYS 0x04 #define PART_SUBTYPE_DATA_EFUSE_EM 0x05 +#define PART_TYPE_BOOTLOADER 0x02 +#define PART_SUBTYPE_BOOTLOADER_PRIMARY 0x00 +#define PART_SUBTYPE_BOOTLOADER_OTA 0x01 + +#define PART_TYPE_PARTITION_TABLE 0x03 +#define PART_SUBTYPE_PARTITION_TABLE_PRIMARY 0x00 +#define PART_SUBTYPE_PARTITION_TABLE_OTA 0x01 + #define PART_TYPE_END 0xff #define PART_SUBTYPE_END 0xff @@ -41,7 +49,11 @@ extern "C" { /* Pre-partition table fixed flash offsets */ #define ESP_BOOTLOADER_DIGEST_OFFSET 0x0 #define ESP_BOOTLOADER_OFFSET CONFIG_BOOTLOADER_OFFSET_IN_FLASH /* Offset of bootloader image. Has matching value in bootloader KConfig.projbuild file. */ +#define ESP_PRIMARY_BOOTLOADER_OFFSET CONFIG_BOOTLOADER_OFFSET_IN_FLASH /* Offset of Primary bootloader image. */ #define ESP_PARTITION_TABLE_OFFSET CONFIG_PARTITION_TABLE_OFFSET /* Offset of partition table. Backwards-compatible name.*/ +#define ESP_PRIMARY_PARTITION_TABLE_OFFSET CONFIG_PARTITION_TABLE_OFFSET /* Offset of partition table. */ +#define ESP_PARTITION_TABLE_SIZE (0x1000) /* The partition table occupies 1 sector of flash (SPI_FLASH_SEC_SIZE) */ +#define ESP_BOOTLOADER_SIZE (ESP_PARTITION_TABLE_OFFSET - ESP_BOOTLOADER_OFFSET) #define ESP_PARTITION_TABLE_MAX_LEN 0xC00 /* Maximum length of partition table data */ #define ESP_PARTITION_TABLE_MAX_ENTRIES (ESP_PARTITION_TABLE_MAX_LEN / sizeof(esp_partition_info_t)) /* Maximum length of partition table data, including terminating entry */ diff --git a/components/bootloader_support/src/bootloader_utility.c b/components/bootloader_support/src/bootloader_utility.c index 30dd5049fc39..d27aaaf53977 100644 --- a/components/bootloader_support/src/bootloader_utility.c +++ b/components/bootloader_support/src/bootloader_utility.c @@ -199,6 +199,26 @@ bool bootloader_utility_load_partition_table(bootloader_state_t *bs) break; } break; /* PARTITION_USAGE_DATA */ + case PART_TYPE_BOOTLOADER: /* Bootloader partition */ + switch (partition->subtype) { + case PART_SUBTYPE_BOOTLOADER_PRIMARY: + partition_usage = "primary bootloader"; + break; + case PART_SUBTYPE_BOOTLOADER_OTA: + partition_usage = "ota bootloader"; + break; + } + break; /* PART_TYPE_BOOTLOADER */ + case PART_TYPE_PARTITION_TABLE: /* Partition table partition */ + switch (partition->subtype) { + case PART_SUBTYPE_PARTITION_TABLE_PRIMARY: + partition_usage = "primary partition_table"; + break; + case PART_SUBTYPE_PARTITION_TABLE_OTA: + partition_usage = "ota partition_table"; + break; + } + break; /* PART_TYPE_PARTITION_TABLE */ default: /* other partition type */ break; } diff --git a/components/esp_partition/include/esp_partition.h b/components/esp_partition/include/esp_partition.h index ea0c42dde131..2a108ac0ac32 100644 --- a/components/esp_partition/include/esp_partition.h +++ b/components/esp_partition/include/esp_partition.h @@ -67,6 +67,12 @@ typedef enum { * @internal Keep this enum in sync with PartitionDefinition class gen_esp32part.py @endinternal */ typedef enum { + ESP_PARTITION_SUBTYPE_BOOTLOADER_PRIMARY = 0x00, //!< Primary Bootloader + ESP_PARTITION_SUBTYPE_BOOTLOADER_OTA = 0x01, //!< Temporary OTA storage for Bootloader, where the OTA uploads a new Bootloader image + + ESP_PARTITION_SUBTYPE_PARTITION_TABLE_PRIMARY = 0x00, //!< Primary Partition table + ESP_PARTITION_SUBTYPE_PARTITION_TABLE_OTA = 0x01, //!< Temporary OTA storage for Partition table, where the OTA uploads a new Partition table image + ESP_PARTITION_SUBTYPE_APP_FACTORY = 0x00, //!< Factory application partition ESP_PARTITION_SUBTYPE_APP_OTA_MIN = 0x10, //!< Base for OTA partition subtypes ESP_PARTITION_SUBTYPE_APP_OTA_0 = ESP_PARTITION_SUBTYPE_APP_OTA_MIN + 0, //!< OTA partition 0 diff --git a/components/esp_partition/partition_linux.c b/components/esp_partition/partition_linux.c index c85ac0ced8eb..daeba669312a 100644 --- a/components/esp_partition/partition_linux.c +++ b/components/esp_partition/partition_linux.c @@ -67,6 +67,8 @@ const char *esp_partition_type_to_str(const uint32_t type) switch (type) { case PART_TYPE_APP: return "app"; case PART_TYPE_DATA: return "data"; + case PART_TYPE_BOOTLOADER: return "bootloader"; + case PART_TYPE_PARTITION_TABLE: return "partition_table"; default: return "unknown"; } } @@ -74,6 +76,18 @@ const char *esp_partition_type_to_str(const uint32_t type) const char *esp_partition_subtype_to_str(const uint32_t type, const uint32_t subtype) { switch (type) { + case PART_TYPE_BOOTLOADER: + switch (subtype) { + case PART_SUBTYPE_BOOTLOADER_PRIMARY: return "primary"; + case PART_SUBTYPE_BOOTLOADER_OTA: return "ota"; + default: return "unknown"; + } + case PART_TYPE_PARTITION_TABLE: + switch (subtype) { + case PART_SUBTYPE_PARTITION_TABLE_PRIMARY: return "primary"; + case PART_SUBTYPE_PARTITION_TABLE_OTA: return "ota"; + default: return "unknown"; + } case PART_TYPE_APP: switch (subtype) { case PART_SUBTYPE_FACTORY: return "factory"; diff --git a/components/partition_table/gen_esp32part.py b/components/partition_table/gen_esp32part.py index cce5b78e9168..6c6592b326cf 100755 --- a/components/partition_table/gen_esp32part.py +++ b/components/partition_table/gen_esp32part.py @@ -7,11 +7,8 @@ # See https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/partition-tables.html # for explanation of partition table structure and uses. # -# SPDX-FileCopyrightText: 2016-2023 Espressif Systems (Shanghai) CO LTD +# SPDX-FileCopyrightText: 2016-2024 Espressif Systems (Shanghai) CO LTD # SPDX-License-Identifier: Apache-2.0 - -from __future__ import division, print_function, unicode_literals - import argparse import binascii import errno @@ -36,8 +33,12 @@ APP_TYPE = 0x00 DATA_TYPE = 0x01 +BOOTLOADER_TYPE = 0x02 +PARTITION_TABLE_TYPE = 0x03 TYPES = { + 'bootloader': BOOTLOADER_TYPE, + 'partition_table': PARTITION_TABLE_TYPE, 'app': APP_TYPE, 'data': DATA_TYPE, } @@ -56,6 +57,14 @@ def get_ptype_as_int(ptype): # Keep this map in sync with esp_partition_subtype_t enum in esp_partition.h SUBTYPES = { + BOOTLOADER_TYPE: { + # 'primary': 0x00, # The tool does not allow to define this partition yet. + 'ota': 0x01, + }, + PARTITION_TABLE_TYPE: { + # 'primary': 0x00, # The tool does not allow to define this partition yet. + 'ota': 0x01, + }, APP_TYPE: { 'factory': 0x00, 'test': 0x20, @@ -90,6 +99,8 @@ def get_subtype_as_int(ptype, subtype): ALIGNMENT = { APP_TYPE: 0x10000, DATA_TYPE: 0x1000, + BOOTLOADER_TYPE: 0x1000, + PARTITION_TABLE_TYPE: 0x1000, } @@ -110,7 +121,7 @@ def get_alignment_size_for_type(ptype): else: # For no secure boot enabled case, app partition must be 4K aligned (min. flash erase size) return 0x1000 - # No specific size alignement requirement as such + # No specific size alignment requirement as such return 0x1 @@ -119,6 +130,10 @@ def get_partition_type(ptype): return APP_TYPE if ptype == 'data': return DATA_TYPE + if ptype == 'bootloader': + return BOOTLOADER_TYPE + if ptype == 'partition_table': + return PARTITION_TABLE_TYPE raise InputError('Invalid partition type') diff --git a/docs/en/api-guides/partition-tables.rst b/docs/en/api-guides/partition-tables.rst index 9da55858a1a8..0ea3cb87c279 100644 --- a/docs/en/api-guides/partition-tables.rst +++ b/docs/en/api-guides/partition-tables.rst @@ -75,9 +75,13 @@ Name field can be any meaningful name. It is not significant to the {IDF_TARGET_ Type Field ~~~~~~~~~~ -Partition type field can be specified as ``app`` (0x00) or ``data`` (0x01). Or it can be a number 0-254 (or as hex 0x00-0xFE). Types 0x00-0x3F are reserved for ESP-IDF core functions. +Partition type field can be specified as a name or a number 0-254 (or as hex 0x00-0xFE). Types 0x00-0x3F are reserved for ESP-IDF core functions. -If your app needs to store data in a format not already supported by ESP-IDF, then please add a custom partition type value in the range 0x40-0xFE. +- ``app`` (0x00), +- ``data`` (0x01), +- ``bootloader`` (0x02). By default, this partition is not included in any CSV partition table files because it is not required and does not impact the system's functionality. It is only useful for the bootloader OTA update. Even if this partition is not present in the CSV file, it is still possible to perform the OTA. Please note that if you specify this partition in the CSV file, its address and size must match Kconfigs, +- ``partition_table`` (0x03), +- 0x40-0xFE are reserved for **custom partition types**. If your app needs to store data in a format not already supported by ESP-IDF, then use a value from this range. See :cpp:type:`esp_partition_type_t` for the enum definitions for ``app`` and ``data`` partitions. @@ -105,6 +109,16 @@ See enum :cpp:type:`esp_partition_subtype_t` for the full list of subtypes defin - ``ota_0`` (0x10) ... ``ota_15`` (0x1F) are the OTA app slots. When :doc:`OTA <../api-reference/system/ota>` is in use, the OTA data partition configures which app slot the bootloader should boot. When using OTA, an application should have at least two OTA application slots (``ota_0`` & ``ota_1``). Refer to the :doc:`OTA documentation <../api-reference/system/ota>` for more details. - ``test`` (0x20) is a reserved subtype for factory test procedures. It will be used as the fallback boot partition if no other valid app partition is found. It is also possible to configure the bootloader to read a GPIO input during each boot, and boot this partition if the GPIO is held low, see :ref:`bootloader_boot_from_test_firmware`. +* When type is ``bootloader``, the SubType field can be specified as: + + - ``primary`` (0x00). It is the so-called 2nd stage bootloader, which is placed at the {IDF_TARGET_CONFIG_BOOTLOADER_OFFSET_IN_FLASH} address in the flash. The ``gen_esp32part.py`` does not allow to have this partition in the CSV file for now. + - ``ota`` (0x01). It is a temporary bootloader partition used by the bootloader OTA update functionality for downloading a new image. + +* When type is ``partition_table``, the SubType field can be specified as: + + - ``primary`` (0x00). It is the primary partition table, which is placed at the :ref:`CONFIG_PARTITION_TABLE_OFFSET` address in the flash. The ``gen_esp32part.py`` does not allow to have this partition in the CSV file for now. + - ``ota`` (0x01). It is a temporary partition table partition used by the partition table OTA update functionality for downloading a new image. + * When type is ``data``, the subtype field can be specified as ``ota`` (0x00), ``phy`` (0x01), ``nvs`` (0x02), nvs_keys (0x04), or a range of other component-specific subtypes (see :cpp:type:`subtype enum `). - ``ota`` (0) is the :ref:`OTA data partition ` which stores information about the currently selected OTA app slot. This partition should be 0x2000 bytes in size. Refer to the :ref:`OTA documentation ` for more details. diff --git a/tools/test_apps/build_system/bootloader/sdkconfig.ci.verbose_logging b/tools/test_apps/build_system/bootloader/sdkconfig.ci.verbose_logging index 2ce67a363ce7..06028d51aba1 100644 --- a/tools/test_apps/build_system/bootloader/sdkconfig.ci.verbose_logging +++ b/tools/test_apps/build_system/bootloader/sdkconfig.ci.verbose_logging @@ -2,3 +2,4 @@ # Turn verbose log on for bootloader # CONFIG_BOOTLOADER_LOG_LEVEL_VERBOSE=y +CONFIG_PARTITION_TABLE_OFFSET=0xF000 From 95f5b29ffcbec8934607cc2dffa50d7229d70d53 Mon Sep 17 00:00:00 2001 From: "hrushikesh.bhosale" Date: Tue, 17 Sep 2024 14:09:39 +0530 Subject: [PATCH 049/365] feat(provisioning): Addded api to set Authmode in provisioning Added api to set threshold authmode for provisioning demo --- .../include/wifi_provisioning/manager.h | 9 +++++- components/wifi_provisioning/src/manager.c | 5 ++- .../wifi_prov_mgr/main/Kconfig.projbuild | 11 +++++-- .../wifi_prov_mgr/main/app_main.c | 31 +++++++++++++++++++ 4 files changed, 52 insertions(+), 4 deletions(-) diff --git a/components/wifi_provisioning/include/wifi_provisioning/manager.h b/components/wifi_provisioning/include/wifi_provisioning/manager.h index b8780762f616..a3164d31a88a 100644 --- a/components/wifi_provisioning/include/wifi_provisioning/manager.h +++ b/components/wifi_provisioning/include/wifi_provisioning/manager.h @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2019-2023 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2019-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -36,6 +36,13 @@ typedef enum { */ WIFI_PROV_START, + /** + * Emitted before accepting the wifi credentials to + * set the wifi configurations according to requirement. + * NOTE - In this case event_data shall be populated with a pointer to `wifi_config_t`. + */ + WIFI_PROV_SET_STA_CONFIG, + /** * Emitted when Wi-Fi AP credentials are received via `protocomm` * endpoint `wifi_config`. The event data in this case is a pointer diff --git a/components/wifi_provisioning/src/manager.c b/components/wifi_provisioning/src/manager.c index a4e4d35b6301..fd8b2e2edcfe 100644 --- a/components/wifi_provisioning/src/manager.c +++ b/components/wifi_provisioning/src/manager.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2019-2022 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2019-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -1240,6 +1240,9 @@ esp_err_t wifi_prov_mgr_configure_sta(wifi_config_t *wifi_cfg) RELEASE_LOCK(prov_ctx_lock); return ESP_FAIL; } + + execute_event_cb(WIFI_PROV_SET_STA_CONFIG, (void *)wifi_cfg, sizeof(wifi_config_t)); + if (prov_ctx->prov_state >= WIFI_PROV_STATE_CRED_RECV) { ESP_LOGE(TAG, "Wi-Fi credentials already received by provisioning app"); RELEASE_LOCK(prov_ctx_lock); diff --git a/examples/provisioning/wifi_prov_mgr/main/Kconfig.projbuild b/examples/provisioning/wifi_prov_mgr/main/Kconfig.projbuild index be36720ad3c1..a0aa2888d07b 100644 --- a/examples/provisioning/wifi_prov_mgr/main/Kconfig.projbuild +++ b/examples/provisioning/wifi_prov_mgr/main/Kconfig.projbuild @@ -58,6 +58,13 @@ menu "Example Configuration" default 1 if EXAMPLE_PROV_TRANSPORT_BLE default 2 if EXAMPLE_PROV_TRANSPORT_SOFTAP + config EXAMPLE_PROV_ENABLE_APP_CALLBACK + bool "Enable provisioning manager app callback" + default n + help + This is for advanced use-cases like modifying Wi-Fi configuration parameters. This + executes a blocking app callback when any provisioning event is triggered. + config EXAMPLE_RESET_PROVISIONED bool default n @@ -71,13 +78,13 @@ menu "Example Configuration" default y prompt "Reset provisioned credentials and state machine after session failure" help - Enable reseting provisioned credentials and state machine after session failure. + Enable resetting provisioned credentials and state machine after session failure. This will restart the provisioning service after retries are exhausted. config EXAMPLE_PROV_MGR_MAX_RETRY_CNT int default 5 - prompt "Max retries before reseting provisioning state machine" + prompt "Max retries before resetting provisioning state machine" depends on EXAMPLE_RESET_PROV_MGR_ON_FAILURE help Set the Maximum retry to avoid reconnecting to an inexistent AP or if credentials diff --git a/examples/provisioning/wifi_prov_mgr/main/app_main.c b/examples/provisioning/wifi_prov_mgr/main/app_main.c index 233e450fea80..b1a7b76ab262 100644 --- a/examples/provisioning/wifi_prov_mgr/main/app_main.c +++ b/examples/provisioning/wifi_prov_mgr/main/app_main.c @@ -280,6 +280,34 @@ static void wifi_prov_print_qr(const char *name, const char *username, const cha ESP_LOGI(TAG, "If QR code is not visible, copy paste the below URL in a browser.\n%s?data=%s", QRCODE_BASE_URL, payload); } +#ifdef CONFIG_EXAMPLE_PROV_ENABLE_APP_CALLBACK +void wifi_prov_app_callback(void *user_data, wifi_prov_cb_event_t event, void *event_data) +{ + /** + * This is blocking callback, any configurations that needs to be set when a particular + * provisioning event is triggered can be set here. + */ + switch (event) { + case WIFI_PROV_SET_STA_CONFIG: { + /** + * Wi-Fi configurations can be set here before the Wi-Fi is enabled in + * STA mode. + */ + wifi_config_t *wifi_config = (wifi_config_t*)event_data; + (void) wifi_config; + break; + } + default: + break; + } +} + +const wifi_prov_event_handler_t wifi_prov_event_handler = { + .event_cb = wifi_prov_app_callback, + .user_data = NULL, +}; +#endif /* EXAMPLE_PROV_ENABLE_APP_CALLBACK */ + void app_main(void) { /* Initialize NVS partition */ @@ -327,6 +355,9 @@ void app_main(void) #ifdef CONFIG_EXAMPLE_PROV_TRANSPORT_SOFTAP .scheme = wifi_prov_scheme_softap, #endif /* CONFIG_EXAMPLE_PROV_TRANSPORT_SOFTAP */ +#ifdef CONFIG_EXAMPLE_PROV_ENABLE_APP_CALLBACK + .app_event_handler = wifi_prov_event_handler, +#endif /* EXAMPLE_PROV_ENABLE_APP_CALLBACK */ /* Any default scheme specific event handler that you would * like to choose. Since our example application requires From 20d1a480ab7acb2441a8dc60af3d9c8fc9336fea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20M=C3=BAdry?= Date: Tue, 1 Oct 2024 15:04:13 +0200 Subject: [PATCH 050/365] feat(nvs): Add raw_data variable to NVS_Partition class in nvs_parser.py --- components/nvs_flash/nvs_partition_tool/nvs_parser.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/components/nvs_flash/nvs_partition_tool/nvs_parser.py b/components/nvs_flash/nvs_partition_tool/nvs_parser.py index 29b610b33b2e..a4bb3dae5700 100644 --- a/components/nvs_flash/nvs_partition_tool/nvs_parser.py +++ b/components/nvs_flash/nvs_partition_tool/nvs_parser.py @@ -64,8 +64,9 @@ def __init__(self, name: str, raw_data: bytearray): f'Given partition data is not aligned to page size ({len(raw_data)} % {nvs_const.page_size} = {len(raw_data)%nvs_const.page_size})' ) - # Divide partition into pages self.name = name + self.raw_data = raw_data + # Divide partition into pages self.pages = [] for i in range(0, len(raw_data), nvs_const.page_size): self.pages.append(NVS_Page(raw_data[i: i + nvs_const.page_size], i)) From 6a23790608804b155b3f556dd4e58bffc4d8ae2d Mon Sep 17 00:00:00 2001 From: "radek.tandler" Date: Mon, 11 Dec 2023 18:24:43 +0100 Subject: [PATCH 051/365] remove(nvs_flash/test_nvs_host): Old make based host tests removed after complete migration --- .gitlab/ci/host-test.yml | 12 +- .../host_test/nvs_host_test/CMakeLists.txt | 15 + .../host_test/nvs_host_test/README.md | 29 + .../nvs_host_test/main/CMakeLists.txt | 3 + .../host_test/nvs_host_test/main/test_nvs.cpp | 2 +- components/nvs_flash/test_nvs_host/Makefile | 113 -- components/nvs_flash/test_nvs_host/README.md | 22 - components/nvs_flash/test_nvs_host/main.cpp | 2 - .../nvs_flash/test_nvs_host/sdkconfig.h | 6 - .../test_nvs_host/spi_flash_emulation.cpp | 133 -- .../test_nvs_host/spi_flash_emulation.h | 245 ---- .../test_compressed_enum_table.cpp | 48 - .../nvs_flash/test_nvs_host/test_fixtures.hpp | 152 -- .../test_nvs_host/test_intrusive_list.cpp | 212 --- .../nvs_flash/test_nvs_host/test_nvs.cpp | 1251 ----------------- .../test_nvs_host/test_nvs_partition.cpp | 42 - .../test_nvs_host/test_partition_manager.cpp | 41 - .../test_spi_flash_emulation.cpp | 178 --- tools/ci/check_copyright_ignore.txt | 3 - 19 files changed, 51 insertions(+), 2458 deletions(-) delete mode 100644 components/nvs_flash/test_nvs_host/Makefile delete mode 100644 components/nvs_flash/test_nvs_host/README.md delete mode 100644 components/nvs_flash/test_nvs_host/main.cpp delete mode 100644 components/nvs_flash/test_nvs_host/sdkconfig.h delete mode 100644 components/nvs_flash/test_nvs_host/spi_flash_emulation.cpp delete mode 100644 components/nvs_flash/test_nvs_host/spi_flash_emulation.h delete mode 100644 components/nvs_flash/test_nvs_host/test_compressed_enum_table.cpp delete mode 100644 components/nvs_flash/test_nvs_host/test_fixtures.hpp delete mode 100644 components/nvs_flash/test_nvs_host/test_intrusive_list.cpp delete mode 100644 components/nvs_flash/test_nvs_host/test_nvs.cpp delete mode 100644 components/nvs_flash/test_nvs_host/test_nvs_partition.cpp delete mode 100644 components/nvs_flash/test_nvs_host/test_partition_manager.cpp delete mode 100644 components/nvs_flash/test_nvs_host/test_spi_flash_emulation.cpp diff --git a/.gitlab/ci/host-test.yml b/.gitlab/ci/host-test.yml index c646f0c235d4..b383c77b0a4a 100644 --- a/.gitlab/ci/host-test.yml +++ b/.gitlab/ci/host-test.yml @@ -34,22 +34,16 @@ check_public_headers: - IDF_TARGET=esp32p4 python tools/ci/check_public_headers.py --jobs 4 --prefix riscv32-esp-elf- - IDF_TARGET=esp32c61 python tools/ci/check_public_headers.py --jobs 4 --prefix riscv32-esp-elf- -test_nvs_on_host: - extends: .host_test_template - script: - - cd components/nvs_flash/test_nvs_host - - make test - test_nvs_coverage: extends: - .host_test_template - .rules:labels:nvs_coverage artifacts: paths: - - components/nvs_flash/test_nvs_host/coverage_report + - components/nvs_flash/host_test/nvs_host_test/coverage_report script: - - cd components/nvs_flash/test_nvs_host - - make coverage_report + - cd components/nvs_flash/host_test/nvs_host_test + - idf.py build coverage # the 'long' host tests take approx 11 hours on our current runners. Adding some margin here for possible CPU contention timeout: 18 hours diff --git a/components/nvs_flash/host_test/nvs_host_test/CMakeLists.txt b/components/nvs_flash/host_test/nvs_host_test/CMakeLists.txt index 658d311f49f9..4234d2bcd002 100644 --- a/components/nvs_flash/host_test/nvs_host_test/CMakeLists.txt +++ b/components/nvs_flash/host_test/nvs_host_test/CMakeLists.txt @@ -5,4 +5,19 @@ set(COMPONENTS main) # This test app doesn't require FreeRTOS, using mock instead list(APPEND EXTRA_COMPONENT_DIRS "$ENV{IDF_PATH}/tools/mocks/freertos/") +idf_build_set_property(COMPILE_DEFINITIONS "NO_DEBUG_STORAGE" APPEND) project(nvs_host_test) + +add_custom_command( + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/coverage_report/index.html" + WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" + COMMAND gcovr --root $ENV{IDF_PATH}/components/nvs_flash --html-details + --exclude ${CMAKE_CURRENT_SOURCE_DIR}/managed_components/* + -o ${CMAKE_CURRENT_BINARY_DIR}/coverage_report/index.html ${CMAKE_CURRENT_BINARY_DIR} + COMMENT "Generate coverage report" + ) + +add_custom_target(coverage + WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" + DEPENDS "coverage_report/index.html" + ) diff --git a/components/nvs_flash/host_test/nvs_host_test/README.md b/components/nvs_flash/host_test/nvs_host_test/README.md index 37c142df16d5..d7915b01228d 100644 --- a/components/nvs_flash/host_test/nvs_host_test/README.md +++ b/components/nvs_flash/host_test/nvs_host_test/README.md @@ -1,2 +1,31 @@ | Supported Targets | Linux | | ----------------- | ----- | + +# To build +Navigate to the host test folder and run the IDF build command for linux target + +``` +cd $IDF_PATH +. ./export.sh +cd components/nvs_flash/host_test/nvs_host_test +idf.py --preview set-target linux +idf.py build +``` + +# To run tests locally +Navigate to the IDF root directory and run the binary from there. This ensures all calls to relative paths from test cases are resolved correctly. +This is limitation of ci pipeline as it was not possible to specify the working directory of the host tests. + +``` +cd $IDF_PATH +./components/nvs_flash/host_test/nvs_host_test/build/nvs_host_test.elf +``` + +# To create coverage report +After running the tests, the coverage report can be generated following way. + +``` +cd components/nvs_flash/host_test/nvs_host_test +idf.py build coverage +open ./build/coverage_report/index.html +``` \ No newline at end of file diff --git a/components/nvs_flash/host_test/nvs_host_test/main/CMakeLists.txt b/components/nvs_flash/host_test/nvs_host_test/main/CMakeLists.txt index 27959af8ee29..d7260af4850b 100644 --- a/components/nvs_flash/host_test/nvs_host_test/main/CMakeLists.txt +++ b/components/nvs_flash/host_test/nvs_host_test/main/CMakeLists.txt @@ -12,6 +12,9 @@ idf_component_register(SRCS "test_nvs.cpp" REQUIRES nvs_flash PRIV_REQUIRES spi_flash) +target_compile_options(${COMPONENT_LIB} PUBLIC --coverage) +target_link_libraries(${COMPONENT_LIB} PUBLIC --coverage) + if(CMAKE_C_COMPILER_ID MATCHES "Clang") target_compile_options(${COMPONENT_LIB} PRIVATE -std=gnu++20) endif() diff --git a/components/nvs_flash/host_test/nvs_host_test/main/test_nvs.cpp b/components/nvs_flash/host_test/nvs_host_test/main/test_nvs.cpp index afc3dc5a74c6..431e8892037c 100644 --- a/components/nvs_flash/host_test/nvs_host_test/main/test_nvs.cpp +++ b/components/nvs_flash/host_test/nvs_host_test/main/test_nvs.cpp @@ -3742,7 +3742,7 @@ TEST_CASE("check and read data from partition generated via manufacturing utilit } } -TEST_CASE("nvs multiple write with same key but different types", "[nvs][xxx]") +TEST_CASE("nvs multiple write with same key but different types", "[nvs]") { PartitionEmulationFixture f(0, 10); diff --git a/components/nvs_flash/test_nvs_host/Makefile b/components/nvs_flash/test_nvs_host/Makefile deleted file mode 100644 index 3ddb65185fba..000000000000 --- a/components/nvs_flash/test_nvs_host/Makefile +++ /dev/null @@ -1,113 +0,0 @@ -TEST_PROGRAM=test_nvs -all: $(TEST_PROGRAM) - -SOURCE_FILES = \ - $(addprefix ../src/, \ - nvs_types.cpp \ - nvs_api.cpp \ - nvs_page.cpp \ - nvs_pagemanager.cpp \ - nvs_storage.cpp \ - nvs_item_hash_list.cpp \ - nvs_handle_simple.cpp \ - nvs_handle_locked.cpp \ - nvs_partition_manager.cpp \ - nvs_partition.cpp \ - nvs_encrypted_partition.cpp \ - nvs_cxx_api.cpp \ - nvs_platform.cpp \ - ) \ - spi_flash_emulation.cpp \ - test_compressed_enum_table.cpp \ - test_spi_flash_emulation.cpp \ - test_intrusive_list.cpp \ - test_nvs.cpp \ - test_nvs_partition.cpp \ - test_partition_manager.cpp \ - test_partition_linux.cpp \ - main.cpp - -SOURCE_FILES_C = ../../esp_rom/linux/esp_rom_crc.c esp_err_check_mock.c - -ifeq ($(shell $(CC) -v 2>&1 | grep -c "clang version"), 1) -COMPILER := clang -else -COMPILER := gcc -endif - -CPPFLAGS += -I../private_include -I../include -I../src -I../../heap/include -I../../esp_rom/include -I../../esp_rom/include/linux -I../../esp_rom/linux/include/linux -I../../log/include -I./ -I../../esp_common/include -I../../esp32/include -I ../../mbedtls/mbedtls/include -I ../../spi_flash/include -I ../../esp_partition/include -I ../../hal/include -I ../../xtensa/include -I ../../soc/linux/include -I ../../../tools/catch -fprofile-arcs -ftest-coverage -g2 -ggdb -CFLAGS += -fprofile-arcs -ftest-coverage -DLINUX_TARGET -DLINUX_HOST_LEGACY_TEST -CXXFLAGS += -std=c++11 -Wall -Werror -DLINUX_TARGET -DLINUX_HOST_LEGACY_TEST -LDFLAGS += -lstdc++ -Wall -fprofile-arcs -ftest-coverage - -ifeq ($(shell uname -s),Linux) -LDFLAGS += -lbsd -endif - -ifeq ($(COMPILER),clang) -CFLAGS += -fsanitize=address -CXXFLAGS += -fsanitize=address -LDFLAGS += -fsanitize=address -endif - -OBJ_FILES = $(SOURCE_FILES:.cpp=.o) -OBJ_FILES_C = $(SOURCE_FILES_C:.c=.o) - -COVERAGE_FILES = $(OBJ_FILES:.o=.gc*) -MBEDTLS_LIB := ../../mbedtls/mbedtls/library/libmbedcrypto.a - -$(OBJ_FILES): %.o: %.cpp -$(OBJ_FILES_C): %.c: %.c - -$(MBEDTLS_LIB): - $(MAKE) -C ../../mbedtls/mbedtls/ lib - -$(TEST_PROGRAM): $(OBJ_FILES) $(OBJ_FILES_C) $(MBEDTLS_LIB) | clean-coverage - g++ -o $@ $^ $(LDFLAGS) - -$(OUTPUT_DIR): - mkdir -p $(OUTPUT_DIR) - -test: $(TEST_PROGRAM) - ./$(TEST_PROGRAM) -d yes exclude:[long] - -long-test: $(TEST_PROGRAM) - ./$(TEST_PROGRAM) -d yes - -$(COVERAGE_FILES): $(TEST_PROGRAM) long-test - -coverage.info: $(COVERAGE_FILES) - find ../src/ -name "*.gcno" -exec gcov -r -pb {} + - lcov --capture --directory ../src --no-external --output-file coverage.info - -coverage_report: coverage.info - genhtml coverage.info --output-directory coverage_report - @echo "Coverage report is in coverage_report/index.html" - -clean-coverage: - rm -f $(COVERAGE_FILES) *.gcov - rm -rf coverage_report/ - rm -f coverage.info - -clean: clean-coverage - $(MAKE) -C ../../mbedtls/mbedtls/ clean - rm -f $(OBJ_FILES) $(OBJ_FILES_C) $(TEST_PROGRAM) - rm -f ../nvs_partition_generator/partition_single_page.bin - rm -f ../nvs_partition_generator/partition_multipage_blob.bin - rm -f ../nvs_partition_generator/partition_encrypted.bin - rm -f ../nvs_partition_generator/partition_encrypted_hmac.bin - rm -f ../nvs_partition_generator/partition_encrypted_using_keygen.bin - rm -f ../nvs_partition_generator/partition_encrypted_using_keyfile.bin - rm -f ../nvs_partition_generator/partition_encrypted_using_keygen_hmac.bin - rm -f ../nvs_partition_generator/partition_decrypted.bin - rm -f ../nvs_partition_generator/partition_decrypted_hmac.bin - rm -f ../nvs_partition_generator/partition_encoded.bin - rm -f ../nvs_partition_generator/Test-1-partition-encrypted-hmac.bin - rm -f ../nvs_partition_generator/Test-1-partition-encrypted.bin - rm -f ../nvs_partition_generator/Test-1-partition.bin - rm -f ../../../tools/mass_mfg/samples/sample_values_multipage_blob_created.csv - rm -f ../../../tools/mass_mfg/samples/sample_values_singlepage_blob_created.csv - - - -.PHONY: clean clean-coverage all test long-test diff --git a/components/nvs_flash/test_nvs_host/README.md b/components/nvs_flash/test_nvs_host/README.md deleted file mode 100644 index bad5b08cd875..000000000000 --- a/components/nvs_flash/test_nvs_host/README.md +++ /dev/null @@ -1,22 +0,0 @@ -# Build - -```bash -make -j 6 -``` - -# Run -* Run particular test case: -```bash -./test_nvs "" - -``` -* Run all quick tests: -```bash -./test_nvs -d yes exclude:[long] -``` - -* Run all tests (takes several hours) -```bash -./test_nvs -d yes -``` - diff --git a/components/nvs_flash/test_nvs_host/main.cpp b/components/nvs_flash/test_nvs_host/main.cpp deleted file mode 100644 index 0c7c351f437f..000000000000 --- a/components/nvs_flash/test_nvs_host/main.cpp +++ /dev/null @@ -1,2 +0,0 @@ -#define CATCH_CONFIG_MAIN -#include "catch.hpp" diff --git a/components/nvs_flash/test_nvs_host/sdkconfig.h b/components/nvs_flash/test_nvs_host/sdkconfig.h deleted file mode 100644 index 7a49e28578c1..000000000000 --- a/components/nvs_flash/test_nvs_host/sdkconfig.h +++ /dev/null @@ -1,6 +0,0 @@ -#define CONFIG_NVS_ENCRYPTION 1 -#define CONFIG_LOG_DEFAULT_LEVEL 3 -#define CONFIG_LOG_MAXIMUM_LEVEL 3 -#define CONFIG_LOG_TIMESTAMP_SOURCE_RTOS 1 -#define CONFIG_IDF_TARGET_LINUX 1 -#define CONFIG_NVS_ASSERT_ERROR_CHECK 1 diff --git a/components/nvs_flash/test_nvs_host/spi_flash_emulation.cpp b/components/nvs_flash/test_nvs_host/spi_flash_emulation.cpp deleted file mode 100644 index fc153edf30f5..000000000000 --- a/components/nvs_flash/test_nvs_host/spi_flash_emulation.cpp +++ /dev/null @@ -1,133 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ -#include "esp_partition.h" -#include "spi_flash_emulation.h" -#include "spi_flash_mmap.h" - -static SpiFlashEmulator* s_emulator = nullptr; - -void spi_flash_emulator_set(SpiFlashEmulator* e) -{ - s_emulator = e; -} - -esp_err_t esp_partition_erase_range(const esp_partition_t* partition, - size_t offset, size_t size) -{ - if (!s_emulator) { - return ESP_ERR_FLASH_OP_TIMEOUT; - } - - const uint32_t sec_size = esp_partition_get_main_flash_sector_size(); - if (size % sec_size != 0) { - return ESP_ERR_INVALID_SIZE; - } - - if (offset % sec_size != 0) { - return ESP_ERR_INVALID_ARG; - } - - size_t start_sector = offset / sec_size; - size_t num_sectors = size / sec_size; - for (size_t sector = start_sector; sector < (start_sector + num_sectors); sector++) { - if (!s_emulator->erase(sector)) { - return ESP_ERR_FLASH_OP_FAIL; - } - } - - return ESP_OK; -} - -esp_err_t esp_partition_read(const esp_partition_t* partition, - size_t src_offset, void* dst, size_t size) -{ - if (!s_emulator) { - return ESP_ERR_FLASH_OP_TIMEOUT; - } - - if (!s_emulator->read(reinterpret_cast(dst), src_offset, size)) { - return ESP_ERR_FLASH_OP_FAIL; - } - - return ESP_OK; -} - -esp_err_t esp_partition_read_raw(const esp_partition_t* partition, - size_t src_offset, void* dst, size_t size) -{ - if (!s_emulator) { - return ESP_ERR_FLASH_OP_TIMEOUT; - } - - if (!s_emulator->read(reinterpret_cast(dst), src_offset, size)) { - return ESP_ERR_FLASH_OP_FAIL; - } - - return ESP_OK; -} - -esp_err_t esp_partition_write(const esp_partition_t* partition, - size_t dst_offset, const void* src, size_t size) -{ - if (!s_emulator) { - return ESP_ERR_FLASH_OP_TIMEOUT; - } - - if (!s_emulator->write(dst_offset, reinterpret_cast(src), size)) { - return ESP_ERR_FLASH_OP_FAIL; - } - - return ESP_OK; -} - -esp_err_t esp_partition_write_raw(const esp_partition_t* partition, - size_t dst_offset, const void* src, size_t size) -{ - if (!s_emulator) { - return ESP_ERR_FLASH_OP_TIMEOUT; - } - - if (!s_emulator->write(dst_offset, reinterpret_cast(src), size)) { - return ESP_ERR_FLASH_OP_FAIL; - } - - return ESP_OK; -} - -// timing data for ESP8266, 160MHz CPU frequency, 80MHz flash frequency -// all values in microseconds -// values are for block sizes starting at 4 bytes and going up to 4096 bytes -static size_t readTimes[] = {7, 5, 6, 7, 11, 18, 32, 60, 118, 231, 459}; -static size_t writeTimes[] = {19, 23, 35, 57, 106, 205, 417, 814, 1622, 3200, 6367}; -static size_t blockEraseTime = 37142; - - -static size_t timeInterp(uint32_t bytes, size_t* lut) -{ - const int lut_size = sizeof(readTimes)/sizeof(readTimes[0]); - int lz = __builtin_clz(bytes / 4); - int log_size = 32 - lz; - size_t x2 = 1 << (log_size + 2); - size_t y2 = lut[std::min(log_size, lut_size - 1)]; - size_t x1 = 1 << (log_size + 1); - size_t y1 = lut[log_size - 1]; - return (bytes - x1) * (y2 - y1) / (x2 - x1) + y1; -} - -size_t SpiFlashEmulator::getReadOpTime(uint32_t bytes) -{ - return timeInterp(bytes, readTimes); -} - -size_t SpiFlashEmulator::getWriteOpTime(uint32_t bytes) -{ - return timeInterp(bytes, writeTimes); -} - -size_t SpiFlashEmulator::getEraseOpTime() -{ - return blockEraseTime; -} diff --git a/components/nvs_flash/test_nvs_host/spi_flash_emulation.h b/components/nvs_flash/test_nvs_host/spi_flash_emulation.h deleted file mode 100644 index 13db5ef17e3d..000000000000 --- a/components/nvs_flash/test_nvs_host/spi_flash_emulation.h +++ /dev/null @@ -1,245 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ -#ifndef spi_flash_emulation_h -#define spi_flash_emulation_h - -#include -#include -#include -#include -#include "esp_partition.h" -#include "catch.hpp" - -class SpiFlashEmulator; - -void spi_flash_emulator_set(SpiFlashEmulator*); - -class SpiFlashEmulator -{ -public: - SpiFlashEmulator(size_t sectorCount) : mUpperSectorBound(sectorCount) - { - const uint32_t sec_size = esp_partition_get_main_flash_sector_size(); - mData.resize(sectorCount * sec_size / 4, 0xffffffff); - mEraseCnt.resize(sectorCount); - spi_flash_emulator_set(this); - } - - SpiFlashEmulator(const char *filename) - { - load(filename); - const uint32_t sec_size = esp_partition_get_main_flash_sector_size(); - // At least one page should be free, hence we create mData of size of 2 sectors. - mData.resize(mData.size() + sec_size / 4, 0xffffffff); - mUpperSectorBound = mData.size() * 4 / sec_size; - spi_flash_emulator_set(this); - } - - ~SpiFlashEmulator() - { - spi_flash_emulator_set(nullptr); - } - - bool read(uint32_t* dest, size_t srcAddr, size_t size) const - { - if (srcAddr % 4 != 0 || - size % 4 != 0 || - srcAddr + size > mData.size() * 4) { - return false; - } - - copy(begin(mData) + srcAddr / 4, begin(mData) + (srcAddr + size) / 4, dest); - - ++mReadOps; - mReadBytes += size; - mTotalTime += getReadOpTime(static_cast(size)); - return true; - } - - bool write(size_t dstAddr, const uint32_t* src, size_t size) - { - const uint32_t sec_size = esp_partition_get_main_flash_sector_size(); - uint32_t sectorNumber = dstAddr/sec_size; - if (sectorNumber < mLowerSectorBound || sectorNumber >= mUpperSectorBound) { - WARN("invalid flash operation detected: erase sector=" << sectorNumber); - return false; - } - - if (dstAddr % 4 != 0 || - size % 4 != 0 || - dstAddr + size > mData.size() * 4) { - return false; - } - - for (size_t i = 0; i < size / 4; ++i) { - if (mFailCountdown != SIZE_MAX && mFailCountdown-- == 0) { - return false; - } - - uint32_t sv = src[i]; - size_t pos = dstAddr / 4 + i; - uint32_t& dv = mData[pos]; - - if (((~dv) & sv) != 0) { // are we trying to set some 0 bits to 1? - WARN("invalid flash operation detected: dst=" << dstAddr << " size=" << size << " i=" << i); - return false; - } - - dv = sv; - } - ++mWriteOps; - mWriteBytes += size; - mTotalTime += getWriteOpTime(static_cast(size)); - return true; - } - - bool erase(size_t sectorNumber) - { - const uint32_t sec_size = esp_partition_get_main_flash_sector_size(); - size_t offset = sectorNumber * sec_size / 4; - if (offset > mData.size()) { - return false; - } - - if (sectorNumber < mLowerSectorBound || sectorNumber >= mUpperSectorBound) { - WARN("invalid flash operation detected: erase sector=" << sectorNumber); - return false; - } - - if (mFailCountdown != SIZE_MAX && mFailCountdown-- == 0) { - return false; - } - - std::fill_n(begin(mData) + offset, sec_size / 4, 0xffffffff); - - ++mEraseOps; - mEraseCnt[sectorNumber]++; - mTotalTime += getEraseOpTime(); - return true; - } - - void randomize(uint32_t seed) - { - std::random_device rd; - std::mt19937 gen(rd()); - gen.seed(seed); - std::generate_n(mData.data(), mData.size(), gen); - } - - size_t size() const - { - return mData.size() * 4; - } - - const uint32_t* words() const - { - return mData.data(); - } - - const uint8_t* bytes() const - { - return reinterpret_cast(mData.data()); - } - - void load(const char* filename) - { - const uint32_t sector_size = esp_partition_get_main_flash_sector_size(); - size_t sec_size = sector_size; - FILE* f = fopen(filename, "rb"); - fseek(f, 0, SEEK_END); - off_t size = ftell(f); - assert(size % sec_size == 0); - mData.resize(size / sizeof(uint32_t)); - fseek(f, 0, SEEK_SET); - auto s = fread(mData.data(), sec_size, size / sec_size, f); - assert(s == static_cast(size / sec_size)); - fclose(f); - } - - void save(const char* filename) - { - const uint32_t sector_size = esp_partition_get_main_flash_sector_size(); - size_t sec_size = sector_size; - FILE* f = fopen(filename, "wb"); - auto n_sectors = mData.size() * sizeof(uint32_t) / sec_size; - auto s = fwrite(mData.data(), sec_size, n_sectors, f); - assert(s == n_sectors); - fclose(f); - } - - void clearStats() - { - mReadBytes = 0; - mWriteBytes = 0; - mEraseOps = 0; - mReadOps = 0; - mWriteOps = 0; - mTotalTime = 0; - } - - size_t getReadOps() const - { - return mReadOps; - } - size_t getWriteOps() const - { - return mWriteOps; - } - size_t getEraseOps() const - { - return mEraseOps; - } - size_t getReadBytes() const - { - return mReadBytes; - } - size_t getWriteBytes() const - { - return mWriteBytes; - } - size_t getTotalTime() const - { - return mTotalTime; - } - - void setBounds(uint32_t lowerSector, uint32_t upperSector) { - mLowerSectorBound = lowerSector; - mUpperSectorBound = upperSector; - } - - void failAfter(uint32_t count) { - mFailCountdown = count; - } - - size_t getSectorEraseCount(uint32_t sector) const { - return mEraseCnt[sector]; - } - -protected: - static size_t getReadOpTime(uint32_t bytes); - static size_t getWriteOpTime(uint32_t bytes); - static size_t getEraseOpTime(); - - - std::vector mData; - std::vector mEraseCnt; - - mutable size_t mReadOps = 0; - mutable size_t mWriteOps = 0; - mutable size_t mReadBytes = 0; - mutable size_t mWriteBytes = 0; - mutable size_t mEraseOps = 0; - mutable size_t mTotalTime = 0; - size_t mLowerSectorBound = 0; - size_t mUpperSectorBound = 0; - - size_t mFailCountdown = SIZE_MAX; - -}; - - - -#endif /* spi_flash_emulation_h */ diff --git a/components/nvs_flash/test_nvs_host/test_compressed_enum_table.cpp b/components/nvs_flash/test_nvs_host/test_compressed_enum_table.cpp deleted file mode 100644 index 8e9781637fb3..000000000000 --- a/components/nvs_flash/test_nvs_host/test_compressed_enum_table.cpp +++ /dev/null @@ -1,48 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2015-2022 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ -#include "catch.hpp" -#include "compressed_enum_table.hpp" -#include - -TEST_CASE("test if CompressedEnumTable works as expected", "[enumtable]") -{ - - enum class TEnum1 : uint32_t { - ZERO = 0, - ONE = 1, - TWO = 2, - THREE = 3, - }; - CompressedEnumTable table; - memset(table.data(), 0xff, table.byteSize()); - TEnum1 tmp; - for (size_t i = 0; i < table.count(); ++i) { - CHECK(table.get(i, &tmp) == ESP_OK); - CHECK(tmp == TEnum1::THREE); - } - - CHECK(table.set(0, TEnum1::ONE) == ESP_OK); - CHECK(table.set(1, TEnum1::TWO) == ESP_OK); - CHECK(table.set(2, TEnum1::ZERO) == ESP_OK); - CHECK(table.set(3, TEnum1::ONE) == ESP_OK); - CHECK(table.set(4, TEnum1::TWO) == ESP_OK); - CHECK(table.set(5, TEnum1::ZERO) == ESP_OK); - CHECK(table.set(6, TEnum1::ONE) == ESP_OK); - CHECK(table.set(7, TEnum1::TWO) == ESP_OK); - CHECK(table.set(8, TEnum1::ZERO) == ESP_OK); - CHECK(table.set(9, TEnum1::ZERO) == ESP_OK); - CHECK(table.set(10, TEnum1::ONE) == ESP_OK); - CHECK(table.set(11, TEnum1::TWO) == ESP_OK); -// table.set(12, ... - CHECK(table.set(13, TEnum1::ZERO) == ESP_OK); - CHECK(table.set(14, TEnum1::ONE) == ESP_OK); - CHECK(table.set(15, TEnum1::TWO) == ESP_OK); - - // b10010011100100001001001001001001 - // h 9 3 9 0 9 2 4 9 - - CHECK(table.data()[0] == 0x93909249); -} diff --git a/components/nvs_flash/test_nvs_host/test_fixtures.hpp b/components/nvs_flash/test_nvs_host/test_fixtures.hpp deleted file mode 100644 index 4ca5720dc52a..000000000000 --- a/components/nvs_flash/test_nvs_host/test_fixtures.hpp +++ /dev/null @@ -1,152 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ -#include "nvs_partition.hpp" -#include "nvs_encrypted_partition.hpp" -#include "spi_flash_emulation.h" -#include "spi_flash_mmap.h" -#include "nvs.h" - -class PartitionEmulation : public nvs::Partition { -public: - PartitionEmulation(SpiFlashEmulator *spi_flash_emulator, - uint32_t address, - uint32_t size, - const char *partition_name = NVS_DEFAULT_PART_NAME) - : partition_name(partition_name), flash_emu(spi_flash_emulator), address(address), size(size) - { - assert(partition_name); - assert(flash_emu); - assert(size); - readonly = false; - } - - const char *get_partition_name() override - { - return partition_name; - } - - esp_err_t read_raw(size_t src_offset, void* dst, size_t size) override - { - if (!flash_emu->read(reinterpret_cast(dst), src_offset, size)) { - return ESP_ERR_FLASH_OP_FAIL; - } - - return ESP_OK; - } - - esp_err_t read(size_t src_offset, void* dst, size_t size) override - { - if (!flash_emu->read(reinterpret_cast(dst), src_offset, size)) { - return ESP_ERR_FLASH_OP_FAIL; - } - - return ESP_OK; - } - - esp_err_t write_raw(size_t dst_offset, const void* src, size_t size) override - { - if (!flash_emu->write(dst_offset, reinterpret_cast(src), size)) { - return ESP_ERR_FLASH_OP_FAIL; - } - - return ESP_OK; - } - - esp_err_t write(size_t dst_offset, const void* src, size_t size) override - { - if (!flash_emu->write(dst_offset, reinterpret_cast(src), size)) { - return ESP_ERR_FLASH_OP_FAIL; - } - - return ESP_OK; - } - - esp_err_t erase_range(size_t dst_offset, size_t size) override - { - const uint32_t sec_size = esp_partition_get_main_flash_sector_size(); - if (size % sec_size != 0) { - return ESP_ERR_INVALID_SIZE; - } - - if (dst_offset % sec_size != 0) { - return ESP_ERR_INVALID_ARG; - } - - size_t start_sector = dst_offset / sec_size; - size_t num_sectors = size / sec_size; - for (size_t sector = start_sector; sector < (start_sector + num_sectors); sector++) { - if (!flash_emu->erase(sector)) { - return ESP_ERR_FLASH_OP_FAIL; - } - } - - return ESP_OK; - } - - uint32_t get_address() override - { - return address; - } - - uint32_t get_size() override - { - return size; - } - - bool get_readonly() override - { - return readonly; - } - -private: - const char *partition_name; - - SpiFlashEmulator *flash_emu; - - uint32_t address; - - uint32_t size; - - bool readonly; -}; - -struct PartitionEmulationFixture { - PartitionEmulationFixture(uint32_t start_sector = 0, - uint32_t sector_size = 1, - const char *partition_name = NVS_DEFAULT_PART_NAME) - : emu(start_sector + sector_size), - part(&emu, start_sector * esp_partition_get_main_flash_sector_size(), sector_size * esp_partition_get_main_flash_sector_size(), partition_name) { - } - - ~PartitionEmulationFixture() { } - - SpiFlashEmulator emu; - - PartitionEmulation part; -}; - -struct EncryptedPartitionFixture { - EncryptedPartitionFixture(nvs_sec_cfg_t *cfg, - uint32_t start_sector = 0, - uint32_t sector_size = 1, - const char *partition_name = NVS_DEFAULT_PART_NAME) - : esp_partition(), emu(start_sector + sector_size), - part(&esp_partition) { - const uint32_t sec_size = esp_partition_get_main_flash_sector_size(); - esp_partition.address = start_sector * sec_size; - esp_partition.size = sector_size * sec_size; - strncpy(esp_partition.label, partition_name, PART_NAME_MAX_SIZE); - assert(part.init(cfg) == ESP_OK); - } - - ~EncryptedPartitionFixture() { } - - esp_partition_t esp_partition; - - SpiFlashEmulator emu; - - nvs::NVSEncryptedPartition part; -}; diff --git a/components/nvs_flash/test_nvs_host/test_intrusive_list.cpp b/components/nvs_flash/test_nvs_host/test_intrusive_list.cpp deleted file mode 100644 index dea63f3c3358..000000000000 --- a/components/nvs_flash/test_nvs_host/test_intrusive_list.cpp +++ /dev/null @@ -1,212 +0,0 @@ -// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at - -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -#include "catch.hpp" -#include -#include -#include "intrusive_list.h" - -struct TestNode : public intrusive_list_node { - TestNode(const char* name_ = "", int num_ = 0) : num(num_) - { - strncpy(name, name_, sizeof(name) - 1); - name[sizeof(name) - 1] = 0; - } - char name[32]; - int num; -}; - -typedef intrusive_list TestList; - - -TEST_CASE("can add items to the list", "[list]") -{ - TestList list; - TestNode n1("one", 1); - TestNode n2("two", 2); - TestNode n3("three", 3); - - list.push_back(&n1); - REQUIRE(list.begin()->num == 1); - REQUIRE(list.front().num == 1); - REQUIRE(list.back().num == 1); - list.push_front(&n2); - REQUIRE(list.begin()->num == 2); - REQUIRE(list.front().num == 2); - REQUIRE(list.back().num == 1); - - list.insert(list.begin(), &n3); - REQUIRE(list.begin()->num == 3); - REQUIRE(list.front().num == 3); - REQUIRE(list.back().num == 1); - - - auto second = ++list.begin(); - REQUIRE(second->num == 2); - - second++; - REQUIRE(second->num == 1); -} - -TEST_CASE("can iterate over items", "[list]") -{ - TestList list; - - TestNode n1("one", 1); - TestNode n2("two", 2); - TestNode n3("three", 3); - - - list.push_back(&n1); - list.push_back(&n2); - list.push_back(&n3); - - int val = 1; - for (auto it = std::begin(list); it != std::end(list); ++it) { - REQUIRE(it->num == val); - ++val; - } -} - -TEST_CASE("iterator's prefix and postfix increments and decrements behave as expected", "[list]") -{ - TestList list; - - TestNode n1("one", 1); - TestNode n2("two", 2); - TestNode n3("three", 3); - - - list.push_back(&n1); - list.push_back(&n2); - list.push_back(&n3); - - auto it = std::begin(list); - REQUIRE((++it)->num == 2); - REQUIRE(it++->num == 2); - REQUIRE((--it)->num == 2); - REQUIRE(it--->num == 2); -} - -TEST_CASE("can pop_front from the list", "[list]") -{ - TestList list; - - TestNode n1("one", 1); - TestNode n2("two", 2); - TestNode n3("three", 3); - - list.push_back(&n1); - list.push_back(&n2); - list.push_back(&n3); - - list.pop_front(); - list.pop_front(); - list.pop_front(); - - REQUIRE(std::begin(list) == std::end(list)); -} - - -TEST_CASE("can erase first item in the list", "[list]") -{ - TestList list; - TestNode n1("one", 1); - TestNode n2("two", 2); - TestNode n3("three", 3); - - list.push_back(&n1); - list.push_back(&n2); - list.push_back(&n3); - - list.erase(std::begin(list)); - - REQUIRE(list.front().num == 2); - REQUIRE(list.back().num == 3); -} - - -TEST_CASE("can erase last item in the list", "[list]") -{ - TestList list; - TestNode n1("one", 1); - TestNode n2("two", 2); - TestNode n3("three", 3); - - list.push_back(&n1); - list.push_back(&n2); - list.push_back(&n3); - - list.erase(&list.back()); - - REQUIRE(list.front().num == 1); - REQUIRE(list.back().num == 2); -} - -TEST_CASE("can erase item in the middle of the list", "[list]") -{ - TestList list; - TestNode n1("one", 1); - TestNode n2("two", 2); - TestNode n3("three", 3); - - list.push_back(&n1); - list.push_back(&n2); - list.push_back(&n3); - - list.erase(++std::begin(list)); - - REQUIRE(list.front().num == 1); - REQUIRE(list.back().num == 3); -} - -TEST_CASE("can erase all items in the list", "[list]") -{ - TestList list; - TestNode n1("one", 1); - TestNode n2("two", 2); - TestNode n3("three", 3); - - list.push_back(&n1); - list.push_back(&n2); - list.push_back(&n3); - - list.erase(std::begin(list)); - list.erase(std::begin(list)); - list.erase(std::begin(list)); - REQUIRE(std::begin(list) == std::end(list)); -} - - -TEST_CASE("can erase all items in the list using clear method", "[list]") -{ - TestList list; - TestNode n1("one", 1); - TestNode n2("two", 2); - TestNode n3("three", 3); - TestNode n4("four", 4); - TestNode n5("five", 5); - TestNode n6("six", 6); - - - list.push_back(&n1); - list.push_back(&n2); - list.insert(++list.begin(), &n3); - list.insert(++list.begin(), &n4); - list.push_front(&n5); - list.insert(list.begin(), &n6); - - list.clear(); - - REQUIRE(std::begin(list) == std::end(list)); -} diff --git a/components/nvs_flash/test_nvs_host/test_nvs.cpp b/components/nvs_flash/test_nvs_host/test_nvs.cpp deleted file mode 100644 index 06d312e4831a..000000000000 --- a/components/nvs_flash/test_nvs_host/test_nvs.cpp +++ /dev/null @@ -1,1251 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ -#include "catch.hpp" -#include "nvs.hpp" -#include "nvs_test_api.h" -#include "sdkconfig.h" -#include "spi_flash_emulation.h" -#include "nvs_partition_manager.hpp" -#include "nvs_partition.hpp" -#include "mbedtls/aes.h" -#include "mbedtls/md.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include "test_fixtures.hpp" - -#define TEST_ESP_ERR(rc, res) CHECK((rc) == (res)) -#define TEST_ESP_OK(rc) CHECK((rc) == ESP_OK) - -stringstream s_perf; - -bool memeq(void *a, size_t a_len, void *b, size_t b_len) -{ - if (a_len != b_len) { - return false; - } - return memcmp(a, b, a_len) == 0; -} - -static void check_nvs_part_gen_args(SpiFlashEmulator *spi_flash_emulator, - char const *part_name, - int size, - char const *filename, - bool is_encr, - nvs_sec_cfg_t *xts_cfg) -{ - nvs_handle_t handle; - - const uint32_t sec_size = esp_partition_get_main_flash_sector_size(); - esp_partition_t esp_part; - esp_part.encrypted = false; // we're not testing generic flash encryption here, only the legacy NVS encryption - esp_part.address = 0; - esp_part.size = size * sec_size; - strncpy(esp_part.label, part_name, PART_NAME_MAX_SIZE); - unique_ptr part; - - if (is_encr) { - nvs::NVSEncryptedPartition *enc_part = new (std::nothrow) nvs::NVSEncryptedPartition(&esp_part); - REQUIRE(enc_part != nullptr); - TEST_ESP_OK(enc_part->init(xts_cfg)); - part.reset(enc_part); - } else { - part.reset(new PartitionEmulation(spi_flash_emulator, 0, size, part_name)); - } - - TEST_ESP_OK( nvs::NVSPartitionManager::get_instance()->init_custom(part.get(), 0, size) ); - - TEST_ESP_OK( nvs_open_from_partition(part_name, "dummyNamespace", NVS_READONLY, &handle)); - uint8_t u8v; - TEST_ESP_OK( nvs_get_u8(handle, "dummyU8Key", &u8v)); - CHECK(u8v == 127); - int8_t i8v; - TEST_ESP_OK( nvs_get_i8(handle, "dummyI8Key", &i8v)); - CHECK(i8v == -128); - uint16_t u16v; - TEST_ESP_OK( nvs_get_u16(handle, "dummyU16Key", &u16v)); - CHECK(u16v == 32768); - uint32_t u32v; - TEST_ESP_OK( nvs_get_u32(handle, "dummyU32Key", &u32v)); - CHECK(u32v == 4294967295); - int32_t i32v; - TEST_ESP_OK( nvs_get_i32(handle, "dummyI32Key", &i32v)); - CHECK(i32v == -2147483648); - - char string_buf[256]; - const char test_str[] = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n" - "Fusce quis risus justo.\n" - "Suspendisse egestas in nisi sit amet auctor.\n" - "Pellentesque rhoncus dictum sodales.\n" - "In justo erat, viverra at interdum eget, interdum vel dui."; - size_t str_len = sizeof(test_str); - TEST_ESP_OK( nvs_get_str(handle, "dummyStringKey", string_buf, &str_len)); - CHECK(strncmp(string_buf, test_str, str_len) == 0); - - char buf[64] = {0}; - uint8_t hexdata[] = {0x01, 0x02, 0x03, 0xab, 0xcd, 0xef}; - size_t buflen = 64; - int j; - TEST_ESP_OK( nvs_get_blob(handle, "dummyHex2BinKey", buf, &buflen)); - CHECK(memeq(buf, buflen, hexdata, sizeof(hexdata))); - - uint8_t base64data[] = {'1', '2', '3', 'a', 'b', 'c'}; - TEST_ESP_OK( nvs_get_blob(handle, "dummyBase64Key", buf, &buflen)); - CHECK(memeq(buf, buflen, base64data, sizeof(base64data))); - - buflen = 64; - uint8_t hexfiledata[] = {0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef}; - TEST_ESP_OK( nvs_get_blob(handle, "hexFileKey", buf, &buflen)); - CHECK(memeq(buf, buflen, hexfiledata, sizeof(hexfiledata))); - - buflen = 64; - const char strfiledata[64] = "abcdefghijklmnopqrstuvwxyz"; - TEST_ESP_OK( nvs_get_str(handle, "stringFileKey", buf, &buflen)); - CHECK(strcmp(buf, strfiledata) == 0); - - char bin_data[5200]; - size_t bin_len = sizeof(bin_data); - char binfiledata[5200]; - ifstream file; - file.open(filename); - file.read(binfiledata,5200); - size_t binfile_len = file.gcount(); - TEST_ESP_OK( nvs_get_blob(handle, "binFileKey", bin_data, &bin_len)); - CHECK(memeq(bin_data, bin_len, binfiledata, binfile_len)); - - file.close(); - - nvs_close(handle); - - TEST_ESP_OK(nvs_flash_deinit_partition(part_name)); -} - -static void check_nvs_part_gen_args_mfg(SpiFlashEmulator *spi_flash_emulator, - char const *part_name, - int size, - char const *filename, - bool is_encr, - nvs_sec_cfg_t *xts_cfg) -{ - nvs_handle_t handle; - - const uint32_t sec_size = esp_partition_get_main_flash_sector_size(); - esp_partition_t esp_part; - esp_part.encrypted = false; // we're not testing generic flash encryption here, only the legacy NVS encryption - esp_part.address = 0; - esp_part.size = size * sec_size; - strncpy(esp_part.label, part_name, PART_NAME_MAX_SIZE); - unique_ptr part; - - if (is_encr) { - nvs::NVSEncryptedPartition *enc_part = new (std::nothrow) nvs::NVSEncryptedPartition(&esp_part); - REQUIRE(enc_part != nullptr); - TEST_ESP_OK(enc_part->init(xts_cfg)); - part.reset(enc_part); - } else { - part.reset(new PartitionEmulation(spi_flash_emulator, 0, size, part_name)); - } - - TEST_ESP_OK( nvs::NVSPartitionManager::get_instance()->init_custom(part.get(), 0, size) ); - - TEST_ESP_OK( nvs_open_from_partition(part_name, "dummyNamespace", NVS_READONLY, &handle)); - uint8_t u8v; - TEST_ESP_OK( nvs_get_u8(handle, "dummyU8Key", &u8v)); - CHECK(u8v == 127); - int8_t i8v; - TEST_ESP_OK( nvs_get_i8(handle, "dummyI8Key", &i8v)); - CHECK(i8v == -128); - uint16_t u16v; - TEST_ESP_OK( nvs_get_u16(handle, "dummyU16Key", &u16v)); - CHECK(u16v == 32768); - uint32_t u32v; - TEST_ESP_OK( nvs_get_u32(handle, "dummyU32Key", &u32v)); - CHECK(u32v == 4294967295); - int32_t i32v; - TEST_ESP_OK( nvs_get_i32(handle, "dummyI32Key", &i32v)); - CHECK(i32v == -2147483648); - - char buf[64] = {0}; - size_t buflen = 64; - TEST_ESP_OK( nvs_get_str(handle, "dummyStringKey", buf, &buflen)); - CHECK(strncmp(buf, "0A:0B:0C:0D:0E:0F", buflen) == 0); - - uint8_t hexdata[] = {0x01, 0x02, 0x03, 0xab, 0xcd, 0xef}; - buflen = 64; - int j; - TEST_ESP_OK( nvs_get_blob(handle, "dummyHex2BinKey", buf, &buflen)); - CHECK(memeq(buf, buflen, hexdata, sizeof(hexdata))); - - uint8_t base64data[] = {'1', '2', '3', 'a', 'b', 'c'}; - TEST_ESP_OK( nvs_get_blob(handle, "dummyBase64Key", buf, &buflen)); - CHECK(memeq(buf, buflen, base64data, sizeof(base64data))); - - buflen = 64; - uint8_t hexfiledata[] = {0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef}; - TEST_ESP_OK( nvs_get_blob(handle, "hexFileKey", buf, &buflen)); - CHECK(memeq(buf, buflen, hexfiledata, sizeof(hexfiledata))); - - buflen = 64; - const char strfiledata[64] = "abcdefghijklmnopqrstuvwxyz"; - TEST_ESP_OK( nvs_get_str(handle, "stringFileKey", buf, &buflen)); - CHECK(strcmp(buf, strfiledata) == 0); - - char bin_data[5200]; - size_t bin_len = sizeof(bin_data); - char binfiledata[5200]; - ifstream file; - file.open(filename); - file.read(binfiledata,5200); - size_t binfile_len = file.gcount(); - TEST_ESP_OK( nvs_get_blob(handle, "binFileKey", bin_data, &bin_len)); - CHECK(memeq(bin_data, bin_len, binfiledata, binfile_len)); - - file.close(); - - nvs_close(handle); - - TEST_ESP_OK(nvs_flash_deinit_partition(part_name)); -} - -#if CONFIG_NVS_ENCRYPTION -TEST_CASE("check underlying xts code for 32-byte size sector encryption", "[nvs]") -{ - auto toHex = [](char ch) { - if(ch >= '0' && ch <= '9') - return ch - '0'; - else if(ch >= 'a' && ch <= 'f') - return ch - 'a' + 10; - else if(ch >= 'A' && ch <= 'F') - return ch - 'A' + 10; - else - return 0; - }; - - auto toHexByte = [toHex](char* c) { - return 16 * toHex(c[0]) + toHex(c[1]); - }; - - auto toHexStream = [toHexByte](char* src, uint8_t* dest) { - uint32_t cnt =0; - char* p = src; - while(*p != '\0' && *(p + 1) != '\0') - { - dest[cnt++] = toHexByte(p); p += 2; - } - }; - - uint8_t eky_hex[2 * NVS_KEY_SIZE]; - uint8_t ptxt_hex[nvs::Page::ENTRY_SIZE], ctxt_hex[nvs::Page::ENTRY_SIZE], ba_hex[16]; - mbedtls_aes_xts_context ectx[1]; - mbedtls_aes_xts_context dctx[1]; - - char eky[][2 * NVS_KEY_SIZE + 1] = { - "0000000000000000000000000000000000000000000000000000000000000000", - "1111111111111111111111111111111111111111111111111111111111111111" - }; - char tky[][2 * NVS_KEY_SIZE + 1] = { - "0000000000000000000000000000000000000000000000000000000000000000", - "2222222222222222222222222222222222222222222222222222222222222222" - }; - char blk_addr[][2*16 + 1] = { - "00000000000000000000000000000000", - "33333333330000000000000000000000" - }; - - char ptxt[][2 * nvs::Page::ENTRY_SIZE + 1] = { - "0000000000000000000000000000000000000000000000000000000000000000", - "4444444444444444444444444444444444444444444444444444444444444444" - }; - char ctxt[][2 * nvs::Page::ENTRY_SIZE + 1] = { - "d456b4fc2e620bba6ffbed27b956c9543454dd49ebd8d8ee6f94b65cbe158f73", - "e622334f184bbce129a25b2ac76b3d92abf98e22df5bdd15af471f3db8946a85" - }; - - mbedtls_aes_xts_init(ectx); - mbedtls_aes_xts_init(dctx); - - for(uint8_t cnt = 0; cnt < sizeof(eky)/sizeof(eky[0]); cnt++) { - toHexStream(eky[cnt], eky_hex); - toHexStream(tky[cnt], &eky_hex[NVS_KEY_SIZE]); - toHexStream(ptxt[cnt], ptxt_hex); - toHexStream(ctxt[cnt], ctxt_hex); - toHexStream(blk_addr[cnt], ba_hex); - - CHECK(!mbedtls_aes_xts_setkey_enc(ectx, eky_hex, 2 * NVS_KEY_SIZE * 8)); - CHECK(!mbedtls_aes_xts_setkey_enc(dctx, eky_hex, 2 * NVS_KEY_SIZE * 8)); - - CHECK(!mbedtls_aes_crypt_xts(ectx, MBEDTLS_AES_ENCRYPT, nvs::Page::ENTRY_SIZE, ba_hex, ptxt_hex, ptxt_hex)); - - CHECK(!memcmp(ptxt_hex, ctxt_hex, nvs::Page::ENTRY_SIZE)); - } -} - -TEST_CASE("test nvs apis with encryption enabled", "[nvs]") -{ - nvs_handle_t handle_1; - const uint32_t NVS_FLASH_SECTOR = 6; - const uint32_t NVS_FLASH_SECTOR_COUNT_MIN = 3; - - nvs_sec_cfg_t xts_cfg; - for(int count = 0; count < NVS_KEY_SIZE; count++) { - xts_cfg.eky[count] = 0x11; - xts_cfg.tky[count] = 0x22; - } - EncryptedPartitionFixture fixture(&xts_cfg, NVS_FLASH_SECTOR, NVS_FLASH_SECTOR_COUNT_MIN); - fixture.emu.randomize(100); - fixture.emu.setBounds(NVS_FLASH_SECTOR, NVS_FLASH_SECTOR + NVS_FLASH_SECTOR_COUNT_MIN); - - for (uint16_t i = NVS_FLASH_SECTOR; i - init_custom(&fixture.part, NVS_FLASH_SECTOR, NVS_FLASH_SECTOR_COUNT_MIN)); - - TEST_ESP_ERR(nvs_open("namespace1", NVS_READONLY, &handle_1), ESP_ERR_NVS_NOT_FOUND); - - TEST_ESP_OK(nvs_open("namespace1", NVS_READWRITE, &handle_1)); - TEST_ESP_OK(nvs_set_i32(handle_1, "foo", 0x12345678)); - TEST_ESP_OK(nvs_set_i32(handle_1, "foo", 0x23456789)); - - nvs_handle_t handle_2; - TEST_ESP_OK(nvs_open("namespace2", NVS_READWRITE, &handle_2)); - TEST_ESP_OK(nvs_set_i32(handle_2, "foo", 0x3456789a)); - const char* str = "value 0123456789abcdef0123456789abcdef"; - TEST_ESP_OK(nvs_set_str(handle_2, "key", str)); - - int32_t v1; - TEST_ESP_OK(nvs_get_i32(handle_1, "foo", &v1)); - CHECK(0x23456789 == v1); - - int32_t v2; - TEST_ESP_OK(nvs_get_i32(handle_2, "foo", &v2)); - CHECK(0x3456789a == v2); - - char buf[strlen(str) + 1]; - size_t buf_len = sizeof(buf); - - size_t buf_len_needed; - TEST_ESP_OK(nvs_get_str(handle_2, "key", NULL, &buf_len_needed)); - CHECK(buf_len_needed == buf_len); - - size_t buf_len_short = buf_len - 1; - TEST_ESP_ERR(ESP_ERR_NVS_INVALID_LENGTH, nvs_get_str(handle_2, "key", buf, &buf_len_short)); - CHECK(buf_len_short == buf_len); - - size_t buf_len_long = buf_len + 1; - TEST_ESP_OK(nvs_get_str(handle_2, "key", buf, &buf_len_long)); - CHECK(buf_len_long == buf_len); - - TEST_ESP_OK(nvs_get_str(handle_2, "key", buf, &buf_len)); - - CHECK(0 == strcmp(buf, str)); - nvs_close(handle_1); - nvs_close(handle_2); - TEST_ESP_OK(nvs_flash_deinit()); -} - -TEST_CASE("test nvs apis for nvs partition generator utility with encryption enabled", "[nvs_part_gen]") -{ - int status; - int childpid = fork(); - if (childpid == 0) { - exit(execlp("cp", " cp", - "-rf", - "../nvs_partition_generator/testdata", - ".", NULL)); - } else { - CHECK(childpid > 0); - waitpid(childpid, &status, 0); - CHECK(WEXITSTATUS(status) == 0); - - childpid = fork(); - - if (childpid == 0) { - exit(execlp("python", "python", - "../nvs_partition_generator/nvs_partition_gen.py", - "encrypt", - "../nvs_partition_generator/sample_multipage_blob.csv", - "partition_encrypted.bin", - "0x4000", - "--inputkey", - "../nvs_partition_generator/testdata/sample_encryption_keys.bin", - "--outdir", - "../nvs_partition_generator", NULL)); - } else { - CHECK(childpid > 0); - waitpid(childpid, &status, 0); - CHECK(WEXITSTATUS(status) == 0); - } - } - - SpiFlashEmulator emu("../nvs_partition_generator/partition_encrypted.bin"); - - nvs_sec_cfg_t cfg; - for (int count = 0; count < NVS_KEY_SIZE; count++) { - cfg.eky[count] = 0x11; - cfg.tky[count] = 0x22; - } - - check_nvs_part_gen_args(&emu, NVS_DEFAULT_PART_NAME, 4, "../nvs_partition_generator/testdata/sample_multipage_blob.bin", true, &cfg); - - childpid = fork(); - if (childpid == 0) { - exit(execlp("rm", " rm", - "-rf", - "testdata", NULL)); - } else { - CHECK(childpid > 0); - waitpid(childpid, &status, 0); - CHECK(WEXITSTATUS(status) == 0); - - } - -} - -TEST_CASE("test decrypt functionality for encrypted data", "[nvs_part_gen]") -{ - - //retrieving the temporary test data - int status = system("cp -rf ../nvs_partition_generator/testdata ."); - CHECK(status == 0); - - //encoding data from sample_multipage_blob.csv - status = system("python ../nvs_partition_generator/nvs_partition_gen.py generate ../nvs_partition_generator/sample_multipage_blob.csv partition_encoded.bin 0x5000 --outdir ../nvs_partition_generator"); - CHECK(status == 0); - - //encrypting data from sample_multipage_blob.csv - status = system("python ../nvs_partition_generator/nvs_partition_gen.py encrypt ../nvs_partition_generator/sample_multipage_blob.csv partition_encrypted.bin 0x5000 --inputkey ../nvs_partition_generator/testdata/sample_encryption_keys.bin --outdir ../nvs_partition_generator"); - CHECK(status == 0); - - //encrypting data from sample_multipage_blob.csv (hmac-based scheme) - status = system("python ../nvs_partition_generator/nvs_partition_gen.py encrypt ../nvs_partition_generator/sample_multipage_blob.csv partition_encrypted_hmac.bin 0x5000 --keygen --key_protect_hmac --kp_hmac_inputkey ../nvs_partition_generator/testdata/sample_hmac_key.bin --outdir ../nvs_partition_generator"); - CHECK(status == 0); - - //decrypting data from partition_encrypted.bin - status = system("python ../nvs_partition_generator/nvs_partition_gen.py decrypt ../nvs_partition_generator/partition_encrypted.bin ../nvs_partition_generator/testdata/sample_encryption_keys.bin ../nvs_partition_generator/partition_decrypted.bin"); - CHECK(status == 0); - - status = system("diff ../nvs_partition_generator/partition_decrypted.bin ../nvs_partition_generator/partition_encoded.bin"); - CHECK(status == 0); - - //decrypting data from partition_encrypted_hmac.bin - status = system("python ../nvs_partition_generator/nvs_partition_gen.py decrypt ../nvs_partition_generator/partition_encrypted_hmac.bin ../nvs_partition_generator/testdata/sample_encryption_keys_hmac.bin ../nvs_partition_generator/partition_decrypted_hmac.bin"); - CHECK(status == 0); - - status = system("diff ../nvs_partition_generator/partition_decrypted_hmac.bin ../nvs_partition_generator/partition_encoded.bin"); - CHECK(status == 0); - - CHECK(WEXITSTATUS(status) == 0); - - - //cleaning up the temporary test data - status = system("rm -rf testdata"); - CHECK(status == 0); - -} - -TEST_CASE("test nvs apis for nvs partition generator utility with encryption enabled using keygen", "[nvs_part_gen]") -{ - int childpid = fork(); - int status; - - if (childpid == 0) { - exit(execlp("cp", " cp", - "-rf", - "../nvs_partition_generator/testdata", - ".", NULL)); - } else { - CHECK(childpid > 0); - waitpid(childpid, &status, 0); - CHECK(WEXITSTATUS(status) == 0); - - childpid = fork(); - - if (childpid == 0) { - exit(execlp("rm", " rm", - "-rf", - "../nvs_partition_generator/keys", NULL)); - } else { - CHECK(childpid > 0); - waitpid(childpid, &status, 0); - CHECK(WEXITSTATUS(status) == 0); - - childpid = fork(); - if (childpid == 0) { - exit(execlp("python", "python", - "../nvs_partition_generator/nvs_partition_gen.py", - "encrypt", - "../nvs_partition_generator/sample_multipage_blob.csv", - "partition_encrypted_using_keygen.bin", - "0x4000", - "--keygen", - "--outdir", - "../nvs_partition_generator", NULL)); - - } else { - CHECK(childpid > 0); - waitpid(childpid, &status, 0); - CHECK(WEXITSTATUS(status) == 0); - - } - } - } - - - DIR *dir; - struct dirent *file; - char *filename; - char *files; - char *file_ext; - - dir = opendir("../nvs_partition_generator/keys"); - while ((file = readdir(dir)) != NULL) { - filename = file->d_name; - files = strrchr(filename, '.'); - if (files != NULL) { - file_ext = files + 1; - if (strncmp(file_ext, "bin", 3) == 0) { - break; - } - } - } - - std::string encr_file = std::string("../nvs_partition_generator/keys/") + std::string(filename); - SpiFlashEmulator emu("../nvs_partition_generator/partition_encrypted_using_keygen.bin"); - - char buffer[64]; - FILE *fp; - - fp = fopen(encr_file.c_str(), "rb"); - fread(buffer, sizeof(buffer), 1, fp); - - fclose(fp); - - nvs_sec_cfg_t cfg; - - for (int count = 0; count < NVS_KEY_SIZE; count++) { - cfg.eky[count] = buffer[count] & 255; - cfg.tky[count] = buffer[count + 32] & 255; - } - - check_nvs_part_gen_args(&emu, NVS_DEFAULT_PART_NAME, 4, "../nvs_partition_generator/testdata/sample_multipage_blob.bin", true, &cfg); - -} - -TEST_CASE("test nvs apis for nvs partition generator utility with encryption enabled using inputkey", "[nvs_part_gen]") -{ - int childpid = fork(); - int status; - - DIR *dir; - struct dirent *file; - char *filename; - char *files; - char *file_ext; - - dir = opendir("../nvs_partition_generator/keys"); - while ((file = readdir(dir)) != NULL) { - filename = file->d_name; - files = strrchr(filename, '.'); - if (files != NULL) { - file_ext = files + 1; - if (strncmp(file_ext, "bin", 3) == 0) { - break; - } - } - } - - std::string encr_file = std::string("../nvs_partition_generator/keys/") + std::string(filename); - - if (childpid == 0) { - exit(execlp("python", "python", - "../nvs_partition_generator/nvs_partition_gen.py", - "encrypt", - "../nvs_partition_generator/sample_multipage_blob.csv", - "partition_encrypted_using_keyfile.bin", - "0x4000", - "--inputkey", - encr_file.c_str(), - "--outdir", - "../nvs_partition_generator", NULL)); - - } else { - CHECK(childpid > 0); - waitpid(childpid, &status, 0); - CHECK(WEXITSTATUS(status) == 0); - } - - SpiFlashEmulator emu("../nvs_partition_generator/partition_encrypted_using_keyfile.bin"); - - char buffer[64]; - FILE *fp; - - fp = fopen(encr_file.c_str(), "rb"); - fread(buffer, sizeof(buffer), 1, fp); - - fclose(fp); - - nvs_sec_cfg_t cfg; - - for (int count = 0; count < NVS_KEY_SIZE; count++) { - cfg.eky[count] = buffer[count] & 255; - cfg.tky[count] = buffer[count + 32] & 255; - } - - check_nvs_part_gen_args(&emu, NVS_DEFAULT_PART_NAME, 4, "../nvs_partition_generator/testdata/sample_multipage_blob.bin", true, &cfg); - - childpid = fork(); - if (childpid == 0) { - exit(execlp("rm", " rm", - "-rf", - "../nvs_partition_generator/keys", NULL)); - } else { - CHECK(childpid > 0); - waitpid(childpid, &status, 0); - CHECK(WEXITSTATUS(status) == 0); - - childpid = fork(); - - if (childpid == 0) { - exit(execlp("rm", " rm", - "-rf", - "testdata", NULL)); - } else { - CHECK(childpid > 0); - waitpid(childpid, &status, 0); - CHECK(WEXITSTATUS(status) == 0); - } - } - -} - -static void compute_nvs_keys_with_hmac(nvs_sec_cfg_t *cfg, void *hmac_key) -{ - unsigned char key_bytes[32] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, - 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, - 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, - 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20 }; - if (hmac_key != NULL){ - memcpy(key_bytes, hmac_key, 32); - } - - unsigned char ekey_seed[32], tkey_seed[32]; - - for (unsigned int i = 0; i < sizeof(ekey_seed); i+=4) { - ekey_seed[i] = 0x5A; - ekey_seed[i + 1] = 0x5A; - ekey_seed[i + 2] = 0xBE; - ekey_seed[i + 3] = 0xAE; - } - - for (unsigned int i = 0; i < sizeof(tkey_seed); i+=4) { - tkey_seed[i] = 0xA5; - tkey_seed[i + 1] = 0xA5; - tkey_seed[i + 2] = 0xDE; - tkey_seed[i + 3] = 0xCE; - } - - const mbedtls_md_type_t alg = MBEDTLS_MD_SHA256; - - mbedtls_md_context_t ctx; - mbedtls_md_init(&ctx); - - const mbedtls_md_info_t *info = mbedtls_md_info_from_type(alg); - mbedtls_md_setup(&ctx, info, 1); - mbedtls_md_hmac_starts(&ctx, key_bytes, sizeof(key_bytes)); - - mbedtls_md_hmac_update(&ctx, ekey_seed, sizeof(ekey_seed)); - mbedtls_md_hmac_finish(&ctx, cfg->eky); - - mbedtls_md_hmac_reset(&ctx); - mbedtls_md_hmac_update(&ctx, tkey_seed, sizeof(tkey_seed)); - mbedtls_md_hmac_finish(&ctx, cfg->tky); - - assert(memcmp(cfg->eky, cfg->tky, NVS_KEY_SIZE)); - - mbedtls_md_free(&ctx); -} - -TEST_CASE("test nvs apis for nvs partition generator utility with encryption enabled using keygen (user-provided HMAC-key)", "[nvs_part_gen]") -{ - int childpid = fork(); - int status; - - if (childpid == 0) { - exit(execlp("cp", " cp", - "-rf", - "../nvs_partition_generator/testdata", - ".", NULL)); - } else { - CHECK(childpid > 0); - waitpid(childpid, &status, 0); - CHECK(WEXITSTATUS(status) == 0); - - childpid = fork(); - - if (childpid == 0) { - exit(execlp("rm", " rm", - "-rf", - "../nvs_partition_generator/keys", NULL)); - } else { - CHECK(childpid > 0); - waitpid(childpid, &status, 0); - CHECK(WEXITSTATUS(status) == 0); - - childpid = fork(); - if (childpid == 0) { - exit(execlp("python", "python", - "../nvs_partition_generator/nvs_partition_gen.py", - "encrypt", - "../nvs_partition_generator/sample_multipage_blob.csv", - "partition_encrypted_using_keygen_hmac.bin", - "0x4000", - "--keygen", - "--key_protect_hmac", - "--kp_hmac_inputkey", - "../nvs_partition_generator/testdata/sample_hmac_key.bin", - "--outdir", - "../nvs_partition_generator", NULL)); - - } else { - CHECK(childpid > 0); - waitpid(childpid, &status, 0); - CHECK(WEXITSTATUS(status) == 0); - - } - } - } - - SpiFlashEmulator emu("../nvs_partition_generator/partition_encrypted_using_keygen_hmac.bin"); - - nvs_sec_cfg_t cfg; - compute_nvs_keys_with_hmac(&cfg, NULL); - - check_nvs_part_gen_args(&emu, NVS_DEFAULT_PART_NAME, 4, "../nvs_partition_generator/testdata/sample_multipage_blob.bin", true, &cfg); - -} - -TEST_CASE("test nvs apis for nvs partition generator utility with encryption enabled using keygen (dynamically generated HMAC-key)", "[nvs_part_gen]") -{ - int childpid = fork(); - int status; - - if (childpid == 0) { - exit(execlp("cp", " cp", - "-rf", - "../nvs_partition_generator/testdata", - ".", NULL)); - } else { - CHECK(childpid > 0); - waitpid(childpid, &status, 0); - CHECK(WEXITSTATUS(status) == 0); - - childpid = fork(); - - if (childpid == 0) { - exit(execlp("rm", " rm", - "-rf", - "../nvs_partition_generator/keys", NULL)); - } else { - CHECK(childpid > 0); - waitpid(childpid, &status, 0); - CHECK(WEXITSTATUS(status) == 0); - - childpid = fork(); - if (childpid == 0) { - exit(execlp("python", "python", - "../nvs_partition_generator/nvs_partition_gen.py", - "encrypt", - "../nvs_partition_generator/sample_multipage_blob.csv", - "partition_encrypted_using_keygen_hmac.bin", - "0x4000", - "--keygen", - "--key_protect_hmac", - "--kp_hmac_keygen", - "--outdir", - "../nvs_partition_generator", NULL)); - - } else { - CHECK(childpid > 0); - waitpid(childpid, &status, 0); - CHECK(WEXITSTATUS(status) == 0); - - } - } - } - - - DIR *dir; - struct dirent *file; - char *filename; - char *files; - char *file_ext; - char *hmac_key_file; - - dir = opendir("../nvs_partition_generator/keys"); - while ((file = readdir(dir)) != NULL) { - filename = file->d_name; - file_ext = NULL; - files = strrchr(filename, '.'); - if (files != NULL) { - file_ext = files + 1; - if (strncmp(file_ext, "bin", 3) != 0) { - continue; - } - } - if (strstr(filename, "hmac") != NULL) { - hmac_key_file = filename; - } - } - - std::string hmac_key_path = std::string("../nvs_partition_generator/keys/") + std::string(hmac_key_file); - SpiFlashEmulator emu("../nvs_partition_generator/partition_encrypted_using_keygen_hmac.bin"); - - char hmac_key_buf[32]; - FILE *fp; - fp = fopen(hmac_key_path.c_str(), "rb"); - fread(hmac_key_buf, sizeof(hmac_key_buf), 1, fp); - fclose(fp); - - nvs_sec_cfg_t cfg; - compute_nvs_keys_with_hmac(&cfg, hmac_key_buf); - - check_nvs_part_gen_args(&emu, NVS_DEFAULT_PART_NAME, 4, "../nvs_partition_generator/testdata/sample_multipage_blob.bin", true, &cfg); - -} - -TEST_CASE("check and read data from partition generated via manufacturing utility with encryption enabled using sample inputkey", "[mfg_gen]") -{ - int childpid = fork(); - int status; - - if (childpid == 0) { - exit(execlp("bash", " bash", - "-c", - "rm -rf ../../../tools/mass_mfg/host_test | \ - cp -rf ../../../tools/mass_mfg/testdata mfg_testdata | \ - cp -rf ../nvs_partition_generator/testdata . | \ - mkdir -p ../../../tools/mass_mfg/host_test", NULL)); - } else { - CHECK(childpid > 0); - waitpid(childpid, &status, 0); - CHECK(WEXITSTATUS(status) == 0); - - childpid = fork(); - if (childpid == 0) { - exit(execlp("python", "python", - "../../../tools/mass_mfg/mfg_gen.py", - "generate", - "../../../tools/mass_mfg/samples/sample_config.csv", - "../../../tools/mass_mfg/samples/sample_values_multipage_blob.csv", - "Test", - "0x4000", - "--outdir", - "../../../tools/mass_mfg/host_test", - "--version", - "2", - "--inputkey", - "mfg_testdata/sample_encryption_keys.bin", NULL)); - - } else { - CHECK(childpid > 0); - waitpid(childpid, &status, 0); - CHECK(WEXITSTATUS(status) == 0); - - childpid = fork(); - if (childpid == 0) { - exit(execlp("python", "python", - "../nvs_partition_generator/nvs_partition_gen.py", - "encrypt", - "../../../tools/mass_mfg/host_test/csv/Test-1.csv", - "../nvs_partition_generator/Test-1-partition-encrypted.bin", - "0x4000", - "--version", - "2", - "--inputkey", - "testdata/sample_encryption_keys.bin", NULL)); - - } else { - CHECK(childpid > 0); - waitpid(childpid, &status, 0); - CHECK(WEXITSTATUS(status) == 0); - - } - - } - - } - - SpiFlashEmulator emu1("../../../tools/mass_mfg/host_test/bin/Test-1.bin"); - - nvs_sec_cfg_t cfg; - for (int count = 0; count < NVS_KEY_SIZE; count++) { - cfg.eky[count] = 0x11; - cfg.tky[count] = 0x22; - } - - check_nvs_part_gen_args_mfg(&emu1, NVS_DEFAULT_PART_NAME, 4, "mfg_testdata/sample_multipage_blob.bin", true, &cfg); - - SpiFlashEmulator emu2("../nvs_partition_generator/Test-1-partition-encrypted.bin"); - - check_nvs_part_gen_args_mfg(&emu2, NVS_DEFAULT_PART_NAME, 4, "testdata/sample_multipage_blob.bin", true, &cfg); - - - childpid = fork(); - if (childpid == 0) { - exit(execlp("bash", " bash", - "-c", - "rm -rf ../../../tools/mass_mfg/host_test | \ - rm -rf mfg_testdata | \ - rm -rf testdata", NULL)); - } else { - CHECK(childpid > 0); - waitpid(childpid, &status, 0); - CHECK(WEXITSTATUS(status) == 0); - - } - -} - -TEST_CASE("check and read data from partition generated via manufacturing utility with encryption enabled using new generated key", "[mfg_gen]") -{ - int childpid = fork(); - int status; - - if (childpid == 0) { - exit(execlp("bash", " bash", - "-c", - "rm -rf ../../../tools/mass_mfg/host_test | \ - cp -rf ../../../tools/mass_mfg/testdata mfg_testdata | \ - cp -rf ../nvs_partition_generator/testdata . | \ - mkdir -p ../../../tools/mass_mfg/host_test", NULL)); - } else { - CHECK(childpid > 0); - waitpid(childpid, &status, 0); - CHECK(WEXITSTATUS(status) == 0); - - childpid = fork(); - if (childpid == 0) { - exit(execlp("python", "python", - "../../../tools/mass_mfg/mfg_gen.py", - "generate-key", - "--outdir", - "../../../tools/mass_mfg/host_test", - "--keyfile", - "encr_keys_host_test.bin", NULL)); - - } else { - CHECK(childpid > 0); - waitpid(childpid, &status, 0); - CHECK(WEXITSTATUS(status) == 0); - - childpid = fork(); - if (childpid == 0) { - exit(execlp("python", "python", - "../../../tools/mass_mfg/mfg_gen.py", - "generate", - "../../../tools/mass_mfg/samples/sample_config.csv", - "../../../tools/mass_mfg/samples/sample_values_multipage_blob.csv", - "Test", - "0x4000", - "--outdir", - "../../../tools/mass_mfg/host_test", - "--version", - "2", - "--inputkey", - "../../../tools/mass_mfg/host_test/keys/encr_keys_host_test.bin", NULL)); - - } else { - CHECK(childpid > 0); - waitpid(childpid, &status, 0); - CHECK(WEXITSTATUS(status) == 0); - - childpid = fork(); - if (childpid == 0) { - exit(execlp("python", "python", - "../nvs_partition_generator/nvs_partition_gen.py", - "encrypt", - "../../../tools/mass_mfg/host_test/csv/Test-1.csv", - "../nvs_partition_generator/Test-1-partition-encrypted.bin", - "0x4000", - "--version", - "2", - "--inputkey", - "../../../tools/mass_mfg/host_test/keys/encr_keys_host_test.bin", NULL)); - - } else { - CHECK(childpid > 0); - waitpid(childpid, &status, 0); - CHECK(WEXITSTATUS(status) == 0); - - } - - } - - } - - } - - SpiFlashEmulator emu1("../../../tools/mass_mfg/host_test/bin/Test-1.bin"); - - char buffer[64]; - FILE *fp; - - fp = fopen("../../../tools/mass_mfg/host_test/keys/encr_keys_host_test.bin", "rb"); - fread(buffer, sizeof(buffer), 1, fp); - - fclose(fp); - - nvs_sec_cfg_t cfg; - - for (int count = 0; count < NVS_KEY_SIZE; count++) { - cfg.eky[count] = buffer[count] & 255; - cfg.tky[count] = buffer[count + 32] & 255; - } - - check_nvs_part_gen_args_mfg(&emu1, NVS_DEFAULT_PART_NAME, 4, "mfg_testdata/sample_multipage_blob.bin", true, &cfg); - - SpiFlashEmulator emu2("../nvs_partition_generator/Test-1-partition-encrypted.bin"); - - check_nvs_part_gen_args_mfg(&emu2, NVS_DEFAULT_PART_NAME, 4, "testdata/sample_multipage_blob.bin", true, &cfg); - - childpid = fork(); - if (childpid == 0) { - exit(execlp("bash", " bash", - "-c", - "rm -rf keys | \ - rm -rf mfg_testdata | \ - rm -rf testdata | \ - rm -rf ../../../tools/mass_mfg/host_test", NULL)); - } else { - CHECK(childpid > 0); - waitpid(childpid, &status, 0); - CHECK(WEXITSTATUS(status) == 0); - - } - -} - -TEST_CASE("check and read data from partition generated via manufacturing utility with encryption enabled using new generated key (user-provided HMAC-key)", "[mfg_gen]") -{ - int childpid = fork(); - int status; - - if (childpid == 0) { - exit(execlp("bash", " bash", - "-c", - "rm -rf ../../../tools/mass_mfg/host_test | \ - cp -rf ../../../tools/mass_mfg/testdata mfg_testdata | \ - cp -rf ../nvs_partition_generator/testdata . | \ - mkdir -p ../../../tools/mass_mfg/host_test", NULL)); - } else { - CHECK(childpid > 0); - waitpid(childpid, &status, 0); - CHECK(WEXITSTATUS(status) == 0); - - childpid = fork(); - if (childpid == 0) { - exit(execlp("python", "python", - "../../../tools/mass_mfg/mfg_gen.py", - "generate", - "../../../tools/mass_mfg/samples/sample_config.csv", - "../../../tools/mass_mfg/samples/sample_values_multipage_blob.csv", - "Test", - "0x4000", - "--version", - "2", - "--keygen", - "--key_protect_hmac", - "--kp_hmac_inputkey", - "mfg_testdata/sample_hmac_key.bin", - "--outdir", - "../../../tools/mass_mfg/host_test",NULL)); - - } else { - CHECK(childpid > 0); - waitpid(childpid, &status, 0); - CHECK(WEXITSTATUS(status) == 0); - - childpid = fork(); - if (childpid == 0) { - exit(execlp("python", "python", - "../nvs_partition_generator/nvs_partition_gen.py", - "encrypt", - "../../../tools/mass_mfg/host_test/csv/Test-1.csv", - "../nvs_partition_generator/Test-1-partition-encrypted-hmac.bin", - "0x4000", - "--version", - "2", - "--keygen", - "--key_protect_hmac", - "--kp_hmac_inputkey", - "mfg_testdata/sample_hmac_key.bin", NULL)); - - } else { - CHECK(childpid > 0); - waitpid(childpid, &status, 0); - CHECK(WEXITSTATUS(status) == 0); - - } - - } - - } - - SpiFlashEmulator emu1("../../../tools/mass_mfg/host_test/bin/Test-1.bin"); - - nvs_sec_cfg_t cfg; - compute_nvs_keys_with_hmac(&cfg, NULL); - - check_nvs_part_gen_args_mfg(&emu1, NVS_DEFAULT_PART_NAME, 4, "mfg_testdata/sample_multipage_blob.bin", true, &cfg); - - SpiFlashEmulator emu2("../nvs_partition_generator/Test-1-partition-encrypted-hmac.bin"); - - check_nvs_part_gen_args_mfg(&emu2, NVS_DEFAULT_PART_NAME, 4, "testdata/sample_multipage_blob.bin", true, &cfg); - - - childpid = fork(); - if (childpid == 0) { - exit(execlp("bash", " bash", - "-c", - "rm -rf ../../../tools/mass_mfg/host_test | \ - rm -rf mfg_testdata | \ - rm -rf testdata", NULL)); - } else { - CHECK(childpid > 0); - waitpid(childpid, &status, 0); - CHECK(WEXITSTATUS(status) == 0); - - } - -} - -TEST_CASE("check and read data from partition generated via manufacturing utility with encryption enabled using new generated key (dynamically generated HMAC-key)", "[mfg_gen]") -{ - int childpid = fork(); - int status; - - if (childpid == 0) { - exit(execlp("bash", " bash", - "-c", - "rm -rf ../../../tools/mass_mfg/host_test | \ - cp -rf ../../../tools/mass_mfg/testdata mfg_testdata | \ - cp -rf ../nvs_partition_generator/testdata . | \ - mkdir -p ../../../tools/mass_mfg/host_test", NULL)); - } else { - CHECK(childpid > 0); - waitpid(childpid, &status, 0); - CHECK(WEXITSTATUS(status) == 0); - - childpid = fork(); - if (childpid == 0) { - exit(execlp("python", "python", - "../../../tools/mass_mfg/mfg_gen.py", - "generate-key", - "--outdir", - "../../../tools/mass_mfg/host_test", - "--key_protect_hmac", - "--kp_hmac_keygen", - "--kp_hmac_keyfile", - "hmac_key_host_test.bin", - "--keyfile", - "encr_keys_host_test.bin", NULL)); - - } else { - CHECK(childpid > 0); - waitpid(childpid, &status, 0); - CHECK(WEXITSTATUS(status) == 0); - - childpid = fork(); - if (childpid == 0) { - exit(execlp("python", "python", - "../../../tools/mass_mfg/mfg_gen.py", - "generate", - "../../../tools/mass_mfg/samples/sample_config.csv", - "../../../tools/mass_mfg/samples/sample_values_multipage_blob.csv", - "Test", - "0x4000", - "--outdir", - "../../../tools/mass_mfg/host_test", - "--version", - "2", - "--inputkey", - "../../../tools/mass_mfg/host_test/keys/encr_keys_host_test.bin", NULL)); - - } else { - CHECK(childpid > 0); - waitpid(childpid, &status, 0); - CHECK(WEXITSTATUS(status) == 0); - - childpid = fork(); - if (childpid == 0) { - exit(execlp("python", "python", - "../nvs_partition_generator/nvs_partition_gen.py", - "encrypt", - "../../../tools/mass_mfg/host_test/csv/Test-1.csv", - "../nvs_partition_generator/Test-1-partition-encrypted-hmac.bin", - "0x4000", - "--version", - "2", - "--inputkey", - "../../../tools/mass_mfg/host_test/keys/encr_keys_host_test.bin", NULL)); - - } else { - CHECK(childpid > 0); - waitpid(childpid, &status, 0); - CHECK(WEXITSTATUS(status) == 0); - - } - - } - - } - - } - - - SpiFlashEmulator emu1("../../../tools/mass_mfg/host_test/bin/Test-1.bin"); - - char hmac_key_buf[32]; - FILE *fp; - - fp = fopen("../../../tools/mass_mfg/host_test/keys/hmac_key_host_test.bin", "rb"); - fread(hmac_key_buf, sizeof(hmac_key_buf), 1, fp); - - fclose(fp); - - nvs_sec_cfg_t cfg; - compute_nvs_keys_with_hmac(&cfg, hmac_key_buf); - - check_nvs_part_gen_args_mfg(&emu1, NVS_DEFAULT_PART_NAME, 4, "mfg_testdata/sample_multipage_blob.bin", true, &cfg); - - SpiFlashEmulator emu2("../nvs_partition_generator/Test-1-partition-encrypted-hmac.bin"); - - check_nvs_part_gen_args_mfg(&emu2, NVS_DEFAULT_PART_NAME, 4, "testdata/sample_multipage_blob.bin", true, &cfg); - - childpid = fork(); - if (childpid == 0) { - exit(execlp("bash", " bash", - "-c", - "rm -rf keys | \ - rm -rf mfg_testdata | \ - rm -rf testdata | \ - rm -rf ../../../tools/mass_mfg/host_test", NULL)); - } else { - CHECK(childpid > 0); - waitpid(childpid, &status, 0); - CHECK(WEXITSTATUS(status) == 0); - - } - -} - -#endif diff --git a/components/nvs_flash/test_nvs_host/test_nvs_partition.cpp b/components/nvs_flash/test_nvs_host/test_nvs_partition.cpp deleted file mode 100644 index d394f525aac5..000000000000 --- a/components/nvs_flash/test_nvs_host/test_nvs_partition.cpp +++ /dev/null @@ -1,42 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2015-2022 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ -#include "catch.hpp" -#include -#include -#include "nvs_test_api.h" -#include "nvs_handle_simple.hpp" -#include "nvs_partition.hpp" -#include "spi_flash_emulation.h" -#include "test_fixtures.hpp" -#include - -TEST_CASE("encrypted partition read size must be item size", "[nvs]") -{ - char foo [32] = { }; - nvs_sec_cfg_t xts_cfg; - for (int count = 0; count < NVS_KEY_SIZE; count++) { - xts_cfg.eky[count] = 0x11; - xts_cfg.tky[count] = 0x22; - } - EncryptedPartitionFixture fix(&xts_cfg); - - CHECK(fix.part.read(0, foo, sizeof (foo) - 1) == ESP_ERR_INVALID_SIZE); -} - -TEST_CASE("encrypted partition write size must be mod item size", "[nvs]") -{ - char foo [64] = { }; - nvs_sec_cfg_t xts_cfg; - for (int count = 0; count < NVS_KEY_SIZE; count++) { - xts_cfg.eky[count] = 0x11; - xts_cfg.tky[count] = 0x22; - } - EncryptedPartitionFixture fix(&xts_cfg); - - CHECK(fix.part.write(0, foo, sizeof (foo) - 1) == ESP_ERR_INVALID_SIZE); - CHECK(fix.part.write(0, foo, sizeof (foo) / 2) == ESP_OK); - CHECK(fix.part.write(sizeof(foo) / 2, foo, sizeof (foo)) == ESP_OK); -} diff --git a/components/nvs_flash/test_nvs_host/test_partition_manager.cpp b/components/nvs_flash/test_nvs_host/test_partition_manager.cpp deleted file mode 100644 index cc86e5182c79..000000000000 --- a/components/nvs_flash/test_nvs_host/test_partition_manager.cpp +++ /dev/null @@ -1,41 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ -#include "catch.hpp" -#include -#include -#include "nvs_test_api.h" -#include "nvs_handle_simple.hpp" -#include "nvs_partition_manager.hpp" -#include "spi_flash_emulation.h" -#include "nvs_test_api.h" -#include "test_fixtures.hpp" -#include "esp_partition.h" - -/* -TEST_CASE("Partition manager initializes multiple partitions", "[partition_mgr]") -{ - const uint32_t NVS_FLASH_SECTOR = 6; - const uint32_t NVS_FLASH_SECTOR_COUNT_MIN = 3; - SpiFlashEmulator emu(10); - const uint32_t sec_size = esp_partition_get_main_flash_sector_size(); - PartitionEmulation part_0(&emu, NVS_FLASH_SECTOR * sec_size, NVS_FLASH_SECTOR_COUNT_MIN * sec_size, "test1"); - PartitionEmulation part_1(&emu, NVS_FLASH_SECTOR * sec_size, NVS_FLASH_SECTOR_COUNT_MIN * sec_size, "test2"); - - REQUIRE(nvs::NVSPartitionManager::get_instance()->init_custom(&part_0, NVS_FLASH_SECTOR, NVS_FLASH_SECTOR_COUNT_MIN) - == ESP_OK); - // TODO: why does this work, actually? same sectors used as above - REQUIRE(nvs::NVSPartitionManager::get_instance()->init_custom(&part_1, NVS_FLASH_SECTOR, NVS_FLASH_SECTOR_COUNT_MIN) - == ESP_OK); - nvs::Storage *storage1 = nvs::NVSPartitionManager::get_instance()->lookup_storage_from_name("test1"); - REQUIRE(storage1 != nullptr); - nvs::Storage *storage2 = nvs::NVSPartitionManager::get_instance()->lookup_storage_from_name("test2"); - REQUIRE(storage2 != nullptr); - - CHECK(storage1 != storage2); - REQUIRE(nvs::NVSPartitionManager::get_instance()->deinit_partition(part_0.get_partition_name()) == ESP_OK); - REQUIRE(nvs::NVSPartitionManager::get_instance()->deinit_partition(part_1.get_partition_name()) == ESP_OK); -} -*/ diff --git a/components/nvs_flash/test_nvs_host/test_spi_flash_emulation.cpp b/components/nvs_flash/test_nvs_host/test_spi_flash_emulation.cpp deleted file mode 100644 index 46fae9f3c008..000000000000 --- a/components/nvs_flash/test_nvs_host/test_spi_flash_emulation.cpp +++ /dev/null @@ -1,178 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ -#include "catch.hpp" -#include "esp_partition.h" -#include "spi_flash_emulation.h" -#include "spi_flash_mmap.h" -#include - -template -bool range_empty_n(Tit it_begin, size_t n) -{ - return std::all_of(it_begin, it_begin + n, bind(std::equal_to(), std::placeholders::_1, 0xffffffff)); -} - -struct FlashEmuFixture { - FlashEmuFixture(size_t sectors) : esp_part(), emu(sectors) { } - - esp_partition_t esp_part; - SpiFlashEmulator emu; -}; - -TEST_CASE("flash starts with all bytes == 0xff", "[spi_flash_emu]") -{ - FlashEmuFixture f(4); - - uint32_t sec_size = esp_partition_get_main_flash_sector_size(); - uint8_t sector[sec_size]; - - for (int i = 0; i < 4; ++i) { - CHECK(esp_partition_read(&f.esp_part, 0, sector, sizeof(sector)) == ESP_OK); - for (auto v: sector) { - CHECK(v == 0xff); - } - } -} - -TEST_CASE("invalid writes are checked", "[spi_flash_emu]") -{ - FlashEmuFixture f(1); - - uint32_t val = 0; - CHECK(esp_partition_write(&f.esp_part, 0, &val, 4) == ESP_OK); - val = 1; - CHECK(esp_partition_write(&f.esp_part, 0, &val, 4) == ESP_ERR_FLASH_OP_FAIL); -} - - -TEST_CASE("out of bounds writes fail", "[spi_flash_emu]") -{ - FlashEmuFixture f(4); - uint32_t vals[8]; - std::fill_n(vals, 8, 0); - CHECK(esp_partition_write(&f.esp_part, 0, &vals, sizeof(vals)) == ESP_OK); - - CHECK(esp_partition_write(&f.esp_part, 4*4096 - sizeof(vals), &vals, sizeof(vals)) == ESP_OK); - - CHECK(esp_partition_write(&f.esp_part, 4*4096 - sizeof(vals) + 4, &vals, sizeof(vals)) == ESP_ERR_FLASH_OP_FAIL); -} - -TEST_CASE("after erase the sector is set to 0xff", "[spi_flash_emu]") -{ - FlashEmuFixture f(4); - uint32_t val1 = 0xab00cd12; - CHECK(esp_partition_write(&f.esp_part, 0, &val1, sizeof(val1)) == ESP_OK); - uint32_t val2 = 0x5678efab; - CHECK(esp_partition_write(&f.esp_part, 4096 - 4, &val2, sizeof(val2)) == ESP_OK); - - CHECK(f.emu.words()[0] == val1); - CHECK(range_empty_n(f.emu.words() + 1, 4096 / 4 - 2)); - CHECK(f.emu.words()[4096 / 4 - 1] == val2); - - uint32_t sec_size = esp_partition_get_main_flash_sector_size(); - CHECK(esp_partition_erase_range(&f.esp_part, 0, sec_size) == ESP_OK); - - CHECK(f.emu.words()[0] == 0xffffffff); - CHECK(range_empty_n(f.emu.words() + 1, 4096 / 4 - 2)); - CHECK(f.emu.words()[4096 / 4 - 1] == 0xffffffff); -} - -TEST_CASE("EMU raw read function works", "[spi_flash_emu]") -{ - FlashEmuFixture f(4); - uint32_t value = 0xdeadbeef; - uint32_t read_value = 0; - CHECK(esp_partition_write(&f.esp_part, 0, &value, sizeof(value)) == ESP_OK); - - CHECK(esp_partition_read_raw(&f.esp_part, 0, &read_value, sizeof(read_value)) == ESP_OK); - - CHECK(read_value == 0xdeadbeef); -} - -TEST_CASE("EMU raw write function works", "[spi_flash_emu]") -{ - FlashEmuFixture f(4); - uint32_t value = 0xdeadbeef; - uint32_t read_value = 0; - CHECK(esp_partition_write_raw(&f.esp_part, 0, &value, sizeof(value)) == ESP_OK); - - CHECK(esp_partition_read(&f.esp_part, 0, &read_value, sizeof(read_value)) == ESP_OK); - - CHECK(read_value == 0xdeadbeef); -} - -TEST_CASE("read/write/erase operation times are calculated correctly", "[spi_flash_emu]") -{ - FlashEmuFixture f(1); - uint8_t data[512]; - esp_partition_read(&f.esp_part, 0, data, 4); - CHECK(f.emu.getTotalTime() == 7); - CHECK(f.emu.getReadOps() == 1); - CHECK(f.emu.getReadBytes() == 4); - f.emu.clearStats(); - esp_partition_read(&f.esp_part, 0, data, 8); - CHECK(f.emu.getTotalTime() == 5); - CHECK(f.emu.getReadOps() == 1); - CHECK(f.emu.getReadBytes() == 8); - f.emu.clearStats(); - esp_partition_read(&f.esp_part, 0, data, 16); - CHECK(f.emu.getTotalTime() == 6); - CHECK(f.emu.getReadOps() == 1); - CHECK(f.emu.getReadBytes() == 16); - f.emu.clearStats(); - esp_partition_read(&f.esp_part, 0, data, 128); - CHECK(f.emu.getTotalTime() == 18); - CHECK(f.emu.getReadOps() == 1); - CHECK(f.emu.getReadBytes() == 128); - f.emu.clearStats(); - esp_partition_read(&f.esp_part, 0, data, 256); - CHECK(f.emu.getTotalTime() == 32); - f.emu.clearStats(); - esp_partition_read(&f.esp_part, 0, data, (128+256)/2); - CHECK(f.emu.getTotalTime() == (18+32)/2); - f.emu.clearStats(); - - esp_partition_write(&f.esp_part, 0, data, 4); - CHECK(f.emu.getTotalTime() == 19); - CHECK(f.emu.getWriteOps() == 1); - CHECK(f.emu.getWriteBytes() == 4); - f.emu.clearStats(); - CHECK(f.emu.getWriteOps() == 0); - CHECK(f.emu.getWriteBytes() == 0); - esp_partition_write(&f.esp_part, 0, data, 8); - CHECK(f.emu.getTotalTime() == 23); - f.emu.clearStats(); - esp_partition_write(&f.esp_part, 0, data, 16); - CHECK(f.emu.getTotalTime() == 35); - CHECK(f.emu.getWriteOps() == 1); - CHECK(f.emu.getWriteBytes() == 16); - f.emu.clearStats(); - esp_partition_write(&f.esp_part, 0, data, 128); - CHECK(f.emu.getTotalTime() == 205); - f.emu.clearStats(); - esp_partition_write(&f.esp_part, 0, data, 256); - CHECK(f.emu.getTotalTime() == 417); - f.emu.clearStats(); - esp_partition_write(&f.esp_part, 0, data, (128+256)/2); - CHECK(f.emu.getTotalTime() == (205+417)/2); - f.emu.clearStats(); - - const uint32_t sec_size = esp_partition_get_main_flash_sector_size(); - esp_partition_erase_range(&f.esp_part, 0, sec_size); - CHECK(f.emu.getEraseOps() == 1); - CHECK(f.emu.getTotalTime() == 37142); -} - -TEST_CASE("data is randomized predictably", "[spi_flash_emu]") -{ - SpiFlashEmulator emu1(3); - emu1.randomize(0x12345678); - - SpiFlashEmulator emu2(3); - emu2.randomize(0x12345678); - - CHECK(std::equal(emu1.bytes(), emu1.bytes() + emu1.size(), emu2.bytes())); -} diff --git a/tools/ci/check_copyright_ignore.txt b/tools/ci/check_copyright_ignore.txt index 8ef3d3f7c3d8..f605b7cd0543 100644 --- a/tools/ci/check_copyright_ignore.txt +++ b/tools/ci/check_copyright_ignore.txt @@ -499,9 +499,6 @@ components/nvs_flash/src/nvs_pagemanager.hpp components/nvs_flash/src/nvs_partition_lookup.cpp components/nvs_flash/src/nvs_partition_lookup.hpp components/nvs_flash/src/nvs_test_api.h -components/nvs_flash/test_nvs_host/main.cpp -components/nvs_flash/test_nvs_host/sdkconfig.h -components/nvs_flash/test_nvs_host/test_intrusive_list.cpp components/protocomm/include/transports/protocomm_console.h components/protocomm/include/transports/protocomm_httpd.h components/riscv/include/riscv/csr.h From c4acf3faad06db4f8c04ca16c7f0858ecc002b1d Mon Sep 17 00:00:00 2001 From: Alexey Lapshin Date: Fri, 6 Sep 2024 18:27:09 +0700 Subject: [PATCH 052/365] fix(newlib): sbom: add CVE-2024-30949 to cve-exclude-list --- components/newlib/sbom.yml | 3 +++ docs/en/security/vulnerabilities.rst | 9 +++++++++ 2 files changed, 12 insertions(+) diff --git a/components/newlib/sbom.yml b/components/newlib/sbom.yml index f0fee8725557..496cb10c30b2 100644 --- a/components/newlib/sbom.yml +++ b/components/newlib/sbom.yml @@ -4,3 +4,6 @@ cpe: cpe:2.3:a:newlib_project:newlib:{}:*:*:*:*:*:*:* supplier: 'Organization: Espressif Systems (Shanghai) CO LTD' originator: 'Organization: Red Hat Incorporated' description: An open-source C standard library implementation with additional features and patches from Espressif. +cve-exclude-list: + - cve: CVE-2024-30949 + reason: A vulnerability was discovered in the gettimeofday system call implementation within the RISC-V libgloss component of Newlib. ESP-IDF does not link against libgloss for RISC-V, hence the issue is not directly applicable. Still, the relevant fix has been patched through https://github.com/espressif/newlib-esp32/commit/047ba47013c2656a1e7838dc86cbc75aeeaa67a7 diff --git a/docs/en/security/vulnerabilities.rst b/docs/en/security/vulnerabilities.rst index a8629f945e98..00d87aad5ff3 100644 --- a/docs/en/security/vulnerabilities.rst +++ b/docs/en/security/vulnerabilities.rst @@ -10,6 +10,15 @@ This page briefly lists all of the vulnerabilities that are discovered and fixed CVE-2024 -------- +CVE-2024-30949 +~~~~~~~~~~~~~~ + +RISC-V gettimeofday system call vulnerability in Newlib's + +* Impact: ESP-IDF does not use system call implementations from Newlib +* Resolution: NA + + CVE-2024-28183 ~~~~~~~~~~~~~~ From 8c1ecc4d948c70ad95df4225b057bfac6e118e01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Neboj=C5=A1a=20Cvetkovi=C4=87?= Date: Thu, 27 Jun 2024 18:26:11 +0100 Subject: [PATCH 053/365] build: Reduce verbosity of disabled component manager warning closes https://github.com/espressif/esp-idf/pull/14097 --- tools/cmake/build.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/cmake/build.cmake b/tools/cmake/build.cmake index 81f133e23019..c9414c437d43 100644 --- a/tools/cmake/build.cmake +++ b/tools/cmake/build.cmake @@ -631,7 +631,7 @@ macro(idf_build_process target) endforeach() if(NOT "${__components_with_manifests}" STREQUAL "") - message(WARNING "\"idf_component.yml\" file was found for components:\n${__components_with_manifests}" + message(NOTICE "\"idf_component.yml\" file was found for components:\n${__components_with_manifests}" "However, the component manager is not enabled.") endif() endif() From e8dc63410825543edae3b927f6fc2aa9835378b2 Mon Sep 17 00:00:00 2001 From: Mahavir Jain Date: Mon, 30 Sep 2024 10:44:44 +0530 Subject: [PATCH 054/365] docs: update mbedtls guide for TLS 1.3 supported change --- docs/en/api-reference/protocols/mbedtls.rst | 12 ++++-------- docs/zh_CN/api-reference/protocols/mbedtls.rst | 12 ++++-------- 2 files changed, 8 insertions(+), 16 deletions(-) diff --git a/docs/en/api-reference/protocols/mbedtls.rst b/docs/en/api-reference/protocols/mbedtls.rst index 11a9fb02df3b..cc636fd033ca 100644 --- a/docs/en/api-reference/protocols/mbedtls.rst +++ b/docs/en/api-reference/protocols/mbedtls.rst @@ -9,7 +9,7 @@ Mbed TLS ESP-IDF uses a `fork `_ of Mbed TLS which includes a few patches (related to hardware routines of certain modules like ``bignum (MPI)`` and ``ECC``) over vanilla Mbed TLS. -Mbed TLS supports SSL 3.0 up to TLS 1.3 and DTLS 1.0 to 1.2 communication by providing the following: +Mbed TLS supports TLS 1.2, TLS 1.3 and DTLS 1.2 communication by providing the following: - TCP/IP communication functions: listen, connect, accept, read/write. - SSL/TLS communication functions: init, handshake, read/write. @@ -18,8 +18,9 @@ Mbed TLS supports SSL 3.0 up to TLS 1.3 and DTLS 1.0 to 1.2 communication by pro - Hashing - Encryption/decryption -Supported TLS versions include SSL 3.0, TLS 1.0, TLS 1.1, TLS 1.2, and TLS 1.3, but on the latest ESP-IDF, SSL 3.0, TLS 1.0, and TLS 1.1 have been removed from Mbed TLS. Supported DTLS versions include DTLS 1.0, DTLS 1.1, and DTLS 1.2, but on the latest ESP-IDF, DTLS 1.0 has been removed from Mbed TLS. +.. note:: + Mbed TLS v3.x.x series supports only TLS 1.2 and TLS 1.3 protocols. Support for SSL 3.0, TLS 1.0/1.1 and DTLS 1.0 has been removed (deprecated). TLS 1.3 is fully supported starting Mbed TLS v3.6.0 release, before this release some features were still in experimental state. Please refer to :component_file:`Mbed TLS ChangeLog ` for more details. Mbed TLS Documentation ---------------------- @@ -73,11 +74,6 @@ Following is a brief list of important config options accessible at ``Component :SOC_MPI_SUPPORTED: - :ref:`CONFIG_MBEDTLS_HARDWARE_MPI`: Support for hardware MPI (bignum) acceleration :SOC_ECC_SUPPORTED: - :ref:`CONFIG_MBEDTLS_HARDWARE_ECC`: Support for hardware ECC acceleration -.. note:: - - Mbed TLS v3.6.0 and later support only TLS 1.2 and TLS 1.3 (SSL 3.0, TLS 1.0, TLS 1.1, and DTLS 1.0 are not supported). More information about this can be found out `here `__. - - Performance and Memory Tweaks ----------------------------- @@ -122,5 +118,5 @@ Reducing Binary Size Under ``Component Config -> mbedTLS``, there are multiple Mbed TLS features which are enabled by default but can be disabled if not needed to save code size. More information can be about this can be found in :ref:`Minimizing Binary Size ` docs. -.. _`API Reference`: https://mbed-tls.readthedocs.io/projects/api/en/v3.4.1/ +.. _`API Reference`: https://mbed-tls.readthedocs.io/projects/api/en/v3.6.1/ .. _`Knowledge Base`: https://mbed-tls.readthedocs.io/en/latest/kb/ diff --git a/docs/zh_CN/api-reference/protocols/mbedtls.rst b/docs/zh_CN/api-reference/protocols/mbedtls.rst index 976d039ac400..2ed687549696 100644 --- a/docs/zh_CN/api-reference/protocols/mbedtls.rst +++ b/docs/zh_CN/api-reference/protocols/mbedtls.rst @@ -9,7 +9,7 @@ Mbed TLS ESP-IDF 使用的 Mbed TLS `复刻仓库 `_ 中包含对原生 Mbed TLS 的补丁。这些补丁与某些模块的硬件例程有关,如 ``bignum (MPI)`` 和 ``ECC``。 -Mbed TLS 提供以下功能: +Mbed TLS 通过提供以下内容支持 TLS 1.2、TLS 1.3 和 DTLS 1.2 通信: - TCP/IP 通信功能:监听、连接、接收、读/写。 - SSL/TLS 通信功能:初始化、握手、读/写。 @@ -18,8 +18,9 @@ Mbed TLS 提供以下功能: - 哈希 - 加密/解密 -TLS 版本支持 SSL 3.0, TLS 1.0、TLS 1.1、TLS 1.2 和 TLS 1.3,但是最新的 ESP-IDF 上 Mbed TLS 已经移除了 SSL 3.0、TLS 1.0 和 TLS 1.1。DTLS 版本支持 DTLS 1.0、DTLS 1.1 和 DTLS 1.2,但最新的 ESP-IDF 上 Mbed TLS 已经移除了 DTLS 1.0。 +.. note:: + Mbed TLS v3.x.x 系列仅支持 TLS 1.2 和 TLS 1.3 协议。对 SSL 3.0、TLS 1.0/1.1 和 DTLS 1.0 的支持已被删除(弃用)。从 Mbed TLS v3.6.0 版本开始完全支持 TLS 1.3,在此版本之前,某些功能仍处于试验状态。有关更多详细信息,请参阅 :component_file:`Mbed TLS ChangeLog `。 Mbed TLS 文档 ------------------ @@ -73,11 +74,6 @@ ESP-IDF 中的示例使用 :doc:`/api-reference/protocols/esp_tls`,为访问 :SOC_MPI_SUPPORTED: - :ref:`CONFIG_MBEDTLS_HARDWARE_MPI`: 支持硬件 MPI (bignum) 加速 :SOC_ECC_SUPPORTED: - :ref:`CONFIG_MBEDTLS_HARDWARE_ECC`: 支持硬件 ECC 加速 -.. note:: - - Mbed TLS v3.0.0 及其更新版本仅支持 TLS 1.2 和 TLS 1.3,不支持 SSL 3.0、TLS 1.0、TLS 1.1、和 DTLS 1.0)。TLS 1.3 尚在试验阶段,仅支持客户端。要了解更多信息,请点击 `此处 `__。 - - 性能和内存调整 ------------------ @@ -122,5 +118,5 @@ ESP-IDF 中的示例使用 :doc:`/api-reference/protocols/esp_tls`,为访问 在 ``Component Config -> mbedTLS`` 中,有多个 Mbed TLS 功能默认为启用状态。如果不需要这些功能,可将其禁用以减小固件大小。要了解更多信息,请参考 :ref:`Minimizing Binary Size ` 文档。 -.. _`API Reference`: https://mbed-tls.readthedocs.io/projects/api/en/v3.4.1/ +.. _`API Reference`: https://mbed-tls.readthedocs.io/projects/api/en/v3.6.1/ .. _`Knowledge Base`: https://mbed-tls.readthedocs.io/en/latest/kb/ From 9a043e82afc2d64dc02e59c08963483403e4fe9b Mon Sep 17 00:00:00 2001 From: Erhan Kurubas Date: Fri, 13 Sep 2024 16:38:26 +0300 Subject: [PATCH 055/365] docs(esp32c61): remove coredump.rst from not updated list --- docs/docs_not_updated/esp32c61.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/docs_not_updated/esp32c61.txt b/docs/docs_not_updated/esp32c61.txt index 444a1b4d36ca..7dfeaed03e79 100644 --- a/docs/docs_not_updated/esp32c61.txt +++ b/docs/docs_not_updated/esp32c61.txt @@ -1,4 +1,3 @@ -api-guides/core_dump_internals.rst api-guides/performance/speed.rst api-guides/performance/size.rst api-guides/performance/ram-usage.rst From 6d9905a90cf5ff2ee65358dc3aa094dabf6afde2 Mon Sep 17 00:00:00 2001 From: Erhan Kurubas Date: Fri, 13 Sep 2024 16:36:15 +0300 Subject: [PATCH 056/365] feat(esp-coredump): enable esp32c61 tests --- tools/test_apps/system/panic/pytest_panic.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/tools/test_apps/system/panic/pytest_panic.py b/tools/test_apps/system/panic/pytest_panic.py index d75f71224fb7..d0c093e35751 100644 --- a/tools/test_apps/system/panic/pytest_panic.py +++ b/tools/test_apps/system/panic/pytest_panic.py @@ -29,6 +29,7 @@ pytest.mark.esp32c5, pytest.mark.esp32c6, pytest.mark.esp32h2, + pytest.mark.esp32c61, ] TARGETS_RISCV_DUAL_CORE = [ @@ -54,9 +55,8 @@ pytest.param('coredump_uart_bin_crc', marks=TARGETS_ALL), pytest.param('coredump_uart_elf_crc', marks=TARGETS_ALL), pytest.param('coredump_flash_custom_stack', marks=TARGETS_RISCV), - # TODO: Move esp32c61 to TARGETS_RISCV once Core Dump is supported (IDF-9268) - pytest.param('gdbstub', marks=TARGETS_ALL + [pytest.mark.esp32c61]), - pytest.param('panic', marks=TARGETS_ALL + [pytest.mark.esp32c61]), + pytest.param('gdbstub', marks=TARGETS_ALL), + pytest.param('panic', marks=TARGETS_ALL), ] CONFIGS_DUAL_CORE = [ @@ -85,7 +85,6 @@ pytest.param('coredump_flash_bin_crc', marks=TARGETS_RISCV), pytest.param('coredump_uart_bin_crc', marks=TARGETS_RISCV), pytest.param('coredump_uart_elf_crc', marks=TARGETS_RISCV), - # TODO: Add stack guard support to the ESP32-C61: IDF-9269 pytest.param('gdbstub', marks=TARGETS_RISCV), pytest.param('panic', marks=TARGETS_RISCV), ] @@ -981,7 +980,7 @@ def test_hw_stack_guard_cpu(dut: PanicTestDut, cpu: int) -> None: assert end_addr > start_addr -@pytest.mark.temp_skip_ci(targets=['esp32c5'], reason='TODO: IDF-8662') +@pytest.mark.temp_skip_ci(targets=['esp32c5', 'esp32c61'], reason='TODO: IDF-8662 and IDF-9269') @pytest.mark.parametrize('config', CONFIGS_HW_STACK_GUARD, indirect=True) @pytest.mark.generic def test_hw_stack_guard_cpu0(dut: PanicTestDut, config: str, test_func_name: str) -> None: @@ -990,7 +989,6 @@ def test_hw_stack_guard_cpu0(dut: PanicTestDut, config: str, test_func_name: str common_test(dut, config) -@pytest.mark.temp_skip_ci(targets=['esp32c5'], reason='TODO: IDF-8662') @pytest.mark.parametrize('config', CONFIGS_HW_STACK_GUARD_DUAL_CORE, indirect=True) @pytest.mark.generic def test_hw_stack_guard_cpu1(dut: PanicTestDut, config: str, test_func_name: str) -> None: @@ -1037,7 +1035,7 @@ def test_capture_dram(dut: PanicTestDut, config: str, test_func_name: str) -> No assert int(dut.gdb_data_eval_expr('g_cd_iram')) == 0x4243 assert int(dut.gdb_data_eval_expr('g_cd_dram')) == 0x4344 - if dut.target != 'esp32c2': + if dut.target not in ['esp32c61', 'esp32c2']: assert int(dut.gdb_data_eval_expr('g_rtc_data_var')) == 0x55AA assert int(dut.gdb_data_eval_expr('g_rtc_fast_var')) == 0xAABBCCDD From 1b82ca33eefe0384fd663dd4d0f03a7dd74090d2 Mon Sep 17 00:00:00 2001 From: Erhan Kurubas Date: Fri, 4 Oct 2024 22:22:31 +0200 Subject: [PATCH 057/365] ci(apptrace): enable build tests for all targets except esp32p4 --- examples/system/.build-test-rules.yml | 6 +++++- examples/system/app_trace_basic/README.md | 4 ++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/examples/system/.build-test-rules.yml b/examples/system/.build-test-rules.yml index ddb33070ef08..3152b243fde3 100644 --- a/examples/system/.build-test-rules.yml +++ b/examples/system/.build-test-rules.yml @@ -2,9 +2,13 @@ examples/system/app_trace_basic: disable: + - if: IDF_TARGET == "esp32p4" + temporary: true + reason: not ready yet. IDF-8107 + disable_test: - if: IDF_TARGET in ["esp32c6", "esp32h2", "esp32p4", "esp32c5", "esp32c61"] temporary: true - reason: targets not supported yet, TODO[C61] IDF-9264 IDF-10992 + reason: usb-serial-jtag tests are not stable yet. TODO[C61] IDF-10992 examples/system/base_mac_address: depends_components: diff --git a/examples/system/app_trace_basic/README.md b/examples/system/app_trace_basic/README.md index 2da31cd059a6..72abab1b8da9 100644 --- a/examples/system/app_trace_basic/README.md +++ b/examples/system/app_trace_basic/README.md @@ -1,5 +1,5 @@ -| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | -| ----------------- | ----- | -------- | -------- | -------- | -------- | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-H2 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | -------- | -------- | # Application Level Tracing Example (Basic) From 26c514ffe78fa0852626ea0f024f989031ecc7bc Mon Sep 17 00:00:00 2001 From: Abhinav Kudnar Date: Tue, 1 Oct 2024 20:01:17 +0800 Subject: [PATCH 058/365] fix(nimble): Fix the sequence of ll and host transport init --- components/bt/host/nimble/nimble | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/bt/host/nimble/nimble b/components/bt/host/nimble/nimble index 03462b6686cf..87dd8bdc0374 160000 --- a/components/bt/host/nimble/nimble +++ b/components/bt/host/nimble/nimble @@ -1 +1 @@ -Subproject commit 03462b6686cf49bb0bb026461300fec593c6f4c5 +Subproject commit 87dd8bdc0374572bfde0067b068fafb7bf2374e1 From 3d07895c8f3027257432f75604b3a52201ca00bc Mon Sep 17 00:00:00 2001 From: Roman Leonov Date: Tue, 18 Jun 2024 12:06:16 +0200 Subject: [PATCH 059/365] refactor(usb_host_examples): Enabled Hub support by default --- .../usb/test_apps/hcd/sdkconfig.defaults | 1 + .../usb/test_apps/usb_host/sdkconfig.defaults | 1 + .../host/cdc/cdc_acm_vcp/sdkconfig.defaults | 1 + .../usb/host/hid/sdkconfig.defaults | 4 + .../usb/host/msc/main/msc_example_main.c | 92 ++++--- .../usb/host/msc/sdkconfig.defaults | 4 + .../usb/host/usb_host_lib/main/class_driver.c | 254 ++++++++++++------ .../usb_host_lib/main/usb_host_lib_main.c | 49 ++-- .../usb/host/usb_host_lib/sdkconfig.defaults | 4 + 9 files changed, 258 insertions(+), 152 deletions(-) create mode 100644 examples/peripherals/usb/host/hid/sdkconfig.defaults create mode 100644 examples/peripherals/usb/host/msc/sdkconfig.defaults create mode 100644 examples/peripherals/usb/host/usb_host_lib/sdkconfig.defaults diff --git a/components/usb/test_apps/hcd/sdkconfig.defaults b/components/usb/test_apps/hcd/sdkconfig.defaults index 0632edf7579e..d433503fbfd7 100644 --- a/components/usb/test_apps/hcd/sdkconfig.defaults +++ b/components/usb/test_apps/hcd/sdkconfig.defaults @@ -6,3 +6,4 @@ CONFIG_HEAP_POISONING_COMPREHENSIVE=y # CONFIG_UNITY_ENABLE_FLOAT is not set # CONFIG_UNITY_ENABLE_DOUBLE is not set CONFIG_UNITY_ENABLE_BACKTRACE_ON_FAIL=y +CONFIG_USB_HOST_HUBS_SUPPORTED=y diff --git a/components/usb/test_apps/usb_host/sdkconfig.defaults b/components/usb/test_apps/usb_host/sdkconfig.defaults index 0632edf7579e..d433503fbfd7 100644 --- a/components/usb/test_apps/usb_host/sdkconfig.defaults +++ b/components/usb/test_apps/usb_host/sdkconfig.defaults @@ -6,3 +6,4 @@ CONFIG_HEAP_POISONING_COMPREHENSIVE=y # CONFIG_UNITY_ENABLE_FLOAT is not set # CONFIG_UNITY_ENABLE_DOUBLE is not set CONFIG_UNITY_ENABLE_BACKTRACE_ON_FAIL=y +CONFIG_USB_HOST_HUBS_SUPPORTED=y diff --git a/examples/peripherals/usb/host/cdc/cdc_acm_vcp/sdkconfig.defaults b/examples/peripherals/usb/host/cdc/cdc_acm_vcp/sdkconfig.defaults index 990777805d61..a3e635c9d8d5 100644 --- a/examples/peripherals/usb/host/cdc/cdc_acm_vcp/sdkconfig.defaults +++ b/examples/peripherals/usb/host/cdc/cdc_acm_vcp/sdkconfig.defaults @@ -2,3 +2,4 @@ # Espressif IoT Development Framework (ESP-IDF) Project Minimal Configuration # CONFIG_COMPILER_CXX_EXCEPTIONS=y +CONFIG_USB_HOST_HUBS_SUPPORTED=y diff --git a/examples/peripherals/usb/host/hid/sdkconfig.defaults b/examples/peripherals/usb/host/hid/sdkconfig.defaults new file mode 100644 index 000000000000..bf1b553b2388 --- /dev/null +++ b/examples/peripherals/usb/host/hid/sdkconfig.defaults @@ -0,0 +1,4 @@ +# This file was generated using idf.py save-defconfig. It can be edited manually. +# Espressif IoT Development Framework (ESP-IDF) Project Minimal Configuration +# +CONFIG_USB_HOST_HUBS_SUPPORTED=y diff --git a/examples/peripherals/usb/host/msc/main/msc_example_main.c b/examples/peripherals/usb/host/msc/main/msc_example_main.c index eb934a568103..630c95e6b157 100644 --- a/examples/peripherals/usb/host/msc/main/msc_example_main.c +++ b/examples/peripherals/usb/host/msc/main/msc_example_main.c @@ -29,6 +29,11 @@ static const char *TAG = "example"; #define APP_QUIT_PIN GPIO_NUM_0 // BOOT button on most boards #define BUFFER_SIZE 4096 // The read/write performance can be improved with larger buffer for the cost of RAM, 4kB is enough for most usecases +// IMPORTANT NOTE +// MSC Class Driver is not fully support connecting devices through external Hub. +// TODO: Remove this line after MSC Class Driver will support it +static bool dev_present = false; + /** * @brief Application Queue and its messages ID */ @@ -78,7 +83,7 @@ static void gpio_cb(void *arg) static void msc_event_cb(const msc_host_event_t *event, void *arg) { if (event->event == MSC_DEVICE_CONNECTED) { - ESP_LOGI(TAG, "MSC device connected"); + ESP_LOGI(TAG, "MSC device connected (usb_addr=%d)", event->device.address); app_message_t message = { .id = APP_DEVICE_CONNECTED, .data.new_dev_address = event->device.address, @@ -274,47 +279,56 @@ void app_main(void) xQueueReceive(app_queue, &msg, portMAX_DELAY); if (msg.id == APP_DEVICE_CONNECTED) { - // 1. MSC flash drive connected. Open it and map it to Virtual File System - ESP_ERROR_CHECK(msc_host_install_device(msg.data.new_dev_address, &msc_device)); - const esp_vfs_fat_mount_config_t mount_config = { - .format_if_mount_failed = false, - .max_files = 3, - .allocation_unit_size = 8192, - }; - ESP_ERROR_CHECK(msc_host_vfs_register(msc_device, MNT_PATH, &mount_config, &vfs_handle)); - - // 2. Print information about the connected disk - msc_host_device_info_t info; - ESP_ERROR_CHECK(msc_host_get_device_info(msc_device, &info)); - msc_host_print_descriptors(msc_device); - print_device_info(&info); - - // 3. List all the files in root directory - ESP_LOGI(TAG, "ls command output:"); - struct dirent *d; - DIR *dh = opendir(MNT_PATH); - assert(dh); - while ((d = readdir(dh)) != NULL) { - printf("%s\n", d->d_name); + if (dev_present) { + ESP_LOGW(TAG, "MSC Example handles only one device at a time"); + } else { + // 0. Change flag + dev_present = true; + // 1. MSC flash drive connected. Open it and map it to Virtual File System + ESP_ERROR_CHECK(msc_host_install_device(msg.data.new_dev_address, &msc_device)); + const esp_vfs_fat_mount_config_t mount_config = { + .format_if_mount_failed = false, + .max_files = 3, + .allocation_unit_size = 8192, + }; + ESP_ERROR_CHECK(msc_host_vfs_register(msc_device, MNT_PATH, &mount_config, &vfs_handle)); + + // 2. Print information about the connected disk + msc_host_device_info_t info; + ESP_ERROR_CHECK(msc_host_get_device_info(msc_device, &info)); + msc_host_print_descriptors(msc_device); + print_device_info(&info); + + // 3. List all the files in root directory + ESP_LOGI(TAG, "ls command output:"); + struct dirent *d; + DIR *dh = opendir(MNT_PATH); + assert(dh); + while ((d = readdir(dh)) != NULL) { + printf("%s\n", d->d_name); + } + closedir(dh); + + // 4. The disk is mounted to Virtual File System, perform some basic demo file operation + file_operations(); + + // 5. Perform speed test + speed_test(); + + ESP_LOGI(TAG, "Example finished, you can disconnect the USB flash drive"); } - closedir(dh); - - // 4. The disk is mounted to Virtual File System, perform some basic demo file operation - file_operations(); - - // 5. Perform speed test - speed_test(); - - ESP_LOGI(TAG, "Example finished, you can disconnect the USB flash drive"); } if ((msg.id == APP_DEVICE_DISCONNECTED) || (msg.id == APP_QUIT)) { - if (vfs_handle) { - ESP_ERROR_CHECK(msc_host_vfs_unregister(vfs_handle)); - vfs_handle = NULL; - } - if (msc_device) { - ESP_ERROR_CHECK(msc_host_uninstall_device(msc_device)); - msc_device = NULL; + if (dev_present) { + dev_present = false; + if (vfs_handle) { + ESP_ERROR_CHECK(msc_host_vfs_unregister(vfs_handle)); + vfs_handle = NULL; + } + if (msc_device) { + ESP_ERROR_CHECK(msc_host_uninstall_device(msc_device)); + msc_device = NULL; + } } if (msg.id == APP_QUIT) { // This will cause the usb_task to exit diff --git a/examples/peripherals/usb/host/msc/sdkconfig.defaults b/examples/peripherals/usb/host/msc/sdkconfig.defaults new file mode 100644 index 000000000000..bf1b553b2388 --- /dev/null +++ b/examples/peripherals/usb/host/msc/sdkconfig.defaults @@ -0,0 +1,4 @@ +# This file was generated using idf.py save-defconfig. It can be edited manually. +# Espressif IoT Development Framework (ESP-IDF) Project Minimal Configuration +# +CONFIG_USB_HOST_HUBS_SUPPORTED=y diff --git a/examples/peripherals/usb/host/usb_host_lib/main/class_driver.c b/examples/peripherals/usb/host/usb_host_lib/main/class_driver.c index 594488df5193..3b7077986f29 100644 --- a/examples/peripherals/usb/host/usb_host_lib/main/class_driver.c +++ b/examples/peripherals/usb/host/usb_host_lib/main/class_driver.c @@ -13,21 +13,40 @@ #define CLIENT_NUM_EVENT_MSG 5 typedef enum { - ACTION_OPEN_DEV = 0x01, - ACTION_GET_DEV_INFO = 0x02, - ACTION_GET_DEV_DESC = 0x04, - ACTION_GET_CONFIG_DESC = 0x08, - ACTION_GET_STR_DESC = 0x10, - ACTION_CLOSE_DEV = 0x20, - ACTION_EXIT = 0x40, - ACTION_RECONNECT = 0x80, + ACTION_OPEN_DEV = (1 << 0), + ACTION_GET_DEV_INFO = (1 << 1), + ACTION_GET_DEV_DESC = (1 << 2), + ACTION_GET_CONFIG_DESC = (1 << 3), + ACTION_GET_STR_DESC = (1 << 4), + ACTION_CLOSE_DEV = (1 << 5), } action_t; +#define DEV_MAX_COUNT 128 + typedef struct { usb_host_client_handle_t client_hdl; uint8_t dev_addr; usb_device_handle_t dev_hdl; - uint32_t actions; + action_t actions; +} usb_device_t; + +typedef struct { + struct { + union { + struct { + uint8_t unhandled_devices: 1; /**< Device has unhandled devices */ + uint8_t shutdown: 1; /**< */ + uint8_t reserved6: 6; /**< Reserved */ + }; + uint8_t val; /**< Class drivers' flags value */ + } flags; /**< Class drivers' flags */ + usb_device_t device[DEV_MAX_COUNT]; /**< Class drivers' static array of devices */ + } mux_protected; /**< Mutex protected members. Must be protected by the Class mux_lock when accessed */ + + struct { + usb_host_client_handle_t client_hdl; + SemaphoreHandle_t mux_lock; /**< Mutex for protected members */ + } constant; /**< Constant members. Do not change after installation thus do not require a critical section or mutex */ } class_driver_t; static const char *TAG = "CLASS"; @@ -38,79 +57,94 @@ static void client_event_cb(const usb_host_client_event_msg_t *event_msg, void * class_driver_t *driver_obj = (class_driver_t *)arg; switch (event_msg->event) { case USB_HOST_CLIENT_EVENT_NEW_DEV: - if (driver_obj->dev_addr == 0) { - driver_obj->dev_addr = event_msg->new_dev.address; - //Open the device next - driver_obj->actions |= ACTION_OPEN_DEV; - } + // Save the device address + xSemaphoreTake(driver_obj->constant.mux_lock, portMAX_DELAY); + driver_obj->mux_protected.device[event_msg->new_dev.address].dev_addr = event_msg->new_dev.address; + driver_obj->mux_protected.device[event_msg->new_dev.address].dev_hdl = NULL; + // Open the device next + driver_obj->mux_protected.device[event_msg->new_dev.address].actions |= ACTION_OPEN_DEV; + // Set flag + driver_obj->mux_protected.flags.unhandled_devices = 1; + xSemaphoreGive(driver_obj->constant.mux_lock); break; case USB_HOST_CLIENT_EVENT_DEV_GONE: - if (driver_obj->dev_hdl != NULL) { - //Cancel any other actions and close the device next - driver_obj->actions = ACTION_CLOSE_DEV; + // Cancel any other actions and close the device next + xSemaphoreTake(driver_obj->constant.mux_lock, portMAX_DELAY); + for (uint8_t i = 0; i < DEV_MAX_COUNT; i++) { + if (driver_obj->mux_protected.device[i].dev_hdl == event_msg->dev_gone.dev_hdl) { + driver_obj->mux_protected.device[i].actions = ACTION_CLOSE_DEV; + // Set flag + driver_obj->mux_protected.flags.unhandled_devices = 1; + } } + xSemaphoreGive(driver_obj->constant.mux_lock); break; default: - //Should never occur + // Should never occur abort(); } } -static void action_open_dev(class_driver_t *driver_obj) +static void action_open_dev(usb_device_t *device_obj) { - assert(driver_obj->dev_addr != 0); - ESP_LOGI(TAG, "Opening device at address %d", driver_obj->dev_addr); - ESP_ERROR_CHECK(usb_host_device_open(driver_obj->client_hdl, driver_obj->dev_addr, &driver_obj->dev_hdl)); - //Get the device's information next - driver_obj->actions &= ~ACTION_OPEN_DEV; - driver_obj->actions |= ACTION_GET_DEV_INFO; + assert(device_obj->dev_addr != 0); + ESP_LOGI(TAG, "Opening device at address %d", device_obj->dev_addr); + ESP_ERROR_CHECK(usb_host_device_open(device_obj->client_hdl, device_obj->dev_addr, &device_obj->dev_hdl)); + // Get the device's information next + device_obj->actions |= ACTION_GET_DEV_INFO; } -static void action_get_info(class_driver_t *driver_obj) +static void action_get_info(usb_device_t *device_obj) { - assert(driver_obj->dev_hdl != NULL); + assert(device_obj->dev_hdl != NULL); ESP_LOGI(TAG, "Getting device information"); usb_device_info_t dev_info; - ESP_ERROR_CHECK(usb_host_device_info(driver_obj->dev_hdl, &dev_info)); + ESP_ERROR_CHECK(usb_host_device_info(device_obj->dev_hdl, &dev_info)); ESP_LOGI(TAG, "\t%s speed", (char *[]) { "Low", "Full", "High" }[dev_info.speed]); - ESP_LOGI(TAG, "\tbConfigurationValue %d", dev_info.bConfigurationValue); + ESP_LOGI(TAG, "\tParent info:"); + if (dev_info.parent.dev_hdl) { + usb_device_info_t parent_dev_info; + ESP_ERROR_CHECK(usb_host_device_info(dev_info.parent.dev_hdl, &parent_dev_info)); + ESP_LOGI(TAG, "\t\tBus addr: %d", parent_dev_info.dev_addr); + ESP_LOGI(TAG, "\t\tPort: %d", dev_info.parent.port_num); - //Get the device descriptor next - driver_obj->actions &= ~ACTION_GET_DEV_INFO; - driver_obj->actions |= ACTION_GET_DEV_DESC; + } else { + ESP_LOGI(TAG, "\t\tPort: ROOT"); + } + ESP_LOGI(TAG, "\tbConfigurationValue %d", dev_info.bConfigurationValue); + // Get the device descriptor next + device_obj->actions |= ACTION_GET_DEV_DESC; } -static void action_get_dev_desc(class_driver_t *driver_obj) +static void action_get_dev_desc(usb_device_t *device_obj) { - assert(driver_obj->dev_hdl != NULL); + assert(device_obj->dev_hdl != NULL); ESP_LOGI(TAG, "Getting device descriptor"); const usb_device_desc_t *dev_desc; - ESP_ERROR_CHECK(usb_host_get_device_descriptor(driver_obj->dev_hdl, &dev_desc)); + ESP_ERROR_CHECK(usb_host_get_device_descriptor(device_obj->dev_hdl, &dev_desc)); usb_print_device_descriptor(dev_desc); - //Get the device's config descriptor next - driver_obj->actions &= ~ACTION_GET_DEV_DESC; - driver_obj->actions |= ACTION_GET_CONFIG_DESC; + // Get the device's config descriptor next + device_obj->actions |= ACTION_GET_CONFIG_DESC; } -static void action_get_config_desc(class_driver_t *driver_obj) +static void action_get_config_desc(usb_device_t *device_obj) { - assert(driver_obj->dev_hdl != NULL); + assert(device_obj->dev_hdl != NULL); ESP_LOGI(TAG, "Getting config descriptor"); const usb_config_desc_t *config_desc; - ESP_ERROR_CHECK(usb_host_get_active_config_descriptor(driver_obj->dev_hdl, &config_desc)); + ESP_ERROR_CHECK(usb_host_get_active_config_descriptor(device_obj->dev_hdl, &config_desc)); usb_print_config_descriptor(config_desc, NULL); - //Get the device's string descriptors next - driver_obj->actions &= ~ACTION_GET_CONFIG_DESC; - driver_obj->actions |= ACTION_GET_STR_DESC; + // Get the device's string descriptors next + device_obj->actions |= ACTION_GET_STR_DESC; } -static void action_get_str_desc(class_driver_t *driver_obj) +static void action_get_str_desc(usb_device_t *device_obj) { - assert(driver_obj->dev_hdl != NULL); + assert(device_obj->dev_hdl != NULL); usb_device_info_t dev_info; - ESP_ERROR_CHECK(usb_host_device_info(driver_obj->dev_hdl, &dev_info)); + ESP_ERROR_CHECK(usb_host_device_info(device_obj->dev_hdl, &dev_info)); if (dev_info.str_desc_manufacturer) { ESP_LOGI(TAG, "Getting Manufacturer string descriptor"); usb_print_string_descriptor(dev_info.str_desc_manufacturer); @@ -123,25 +157,59 @@ static void action_get_str_desc(class_driver_t *driver_obj) ESP_LOGI(TAG, "Getting Serial Number string descriptor"); usb_print_string_descriptor(dev_info.str_desc_serial_num); } - //Nothing to do until the device disconnects - driver_obj->actions &= ~ACTION_GET_STR_DESC; } -static void action_close_dev(class_driver_t *driver_obj) +static void action_close_dev(usb_device_t *device_obj) { - ESP_ERROR_CHECK(usb_host_device_close(driver_obj->client_hdl, driver_obj->dev_hdl)); - driver_obj->dev_hdl = NULL; - driver_obj->dev_addr = 0; - //We need to connect a new device - driver_obj->actions &= ~ACTION_CLOSE_DEV; - driver_obj->actions |= ACTION_RECONNECT; + ESP_ERROR_CHECK(usb_host_device_close(device_obj->client_hdl, device_obj->dev_hdl)); + device_obj->dev_hdl = NULL; + device_obj->dev_addr = 0; +} + +static void class_driver_device_handle(usb_device_t *device_obj) +{ + uint8_t actions = device_obj->actions; + device_obj->actions = 0; + + while (actions) { + if (actions & ACTION_OPEN_DEV) { + action_open_dev(device_obj); + } + if (actions & ACTION_GET_DEV_INFO) { + action_get_info(device_obj); + } + if (actions & ACTION_GET_DEV_DESC) { + action_get_dev_desc(device_obj); + } + if (actions & ACTION_GET_CONFIG_DESC) { + action_get_config_desc(device_obj); + } + if (actions & ACTION_GET_STR_DESC) { + action_get_str_desc(device_obj); + } + if (actions & ACTION_CLOSE_DEV) { + action_close_dev(device_obj); + } + + actions = device_obj->actions; + device_obj->actions = 0; + } } void class_driver_task(void *arg) { class_driver_t driver_obj = {0}; + usb_host_client_handle_t class_driver_client_hdl = NULL; ESP_LOGI(TAG, "Registering Client"); + + SemaphoreHandle_t mux_lock = xSemaphoreCreateMutex(); + if (mux_lock == NULL) { + ESP_LOGE(TAG, "Unable to create class driver mutex"); + vTaskDelete(NULL); + return; + } + usb_host_client_config_t client_config = { .is_synchronous = false, //Synchronous clients currently not supported. Set this to false .max_num_event_msg = CLIENT_NUM_EVENT_MSG, @@ -150,52 +218,62 @@ void class_driver_task(void *arg) .callback_arg = (void *) &driver_obj, }, }; - ESP_ERROR_CHECK(usb_host_client_register(&client_config, &driver_obj.client_hdl)); + ESP_ERROR_CHECK(usb_host_client_register(&client_config, &class_driver_client_hdl)); + + driver_obj.constant.mux_lock = mux_lock; + driver_obj.constant.client_hdl = class_driver_client_hdl; + + for (uint8_t i = 0; i < DEV_MAX_COUNT; i++) { + driver_obj.mux_protected.device[i].client_hdl = class_driver_client_hdl; + } + s_driver_obj = &driver_obj; while (1) { - if (driver_obj.actions == 0) { - usb_host_client_handle_events(driver_obj.client_hdl, portMAX_DELAY); - } else { - if (driver_obj.actions & ACTION_OPEN_DEV) { - action_open_dev(&driver_obj); + // Driver has unhandled devices, handle all devices first + if (driver_obj.mux_protected.flags.unhandled_devices) { + xSemaphoreTake(driver_obj.constant.mux_lock, portMAX_DELAY); + for (uint8_t i = 0; i < DEV_MAX_COUNT; i++) { + if (driver_obj.mux_protected.device[i].actions) { + class_driver_device_handle(&driver_obj.mux_protected.device[i]); + } } - if (driver_obj.actions & ACTION_GET_DEV_INFO) { - action_get_info(&driver_obj); - } - if (driver_obj.actions & ACTION_GET_DEV_DESC) { - action_get_dev_desc(&driver_obj); - } - if (driver_obj.actions & ACTION_GET_CONFIG_DESC) { - action_get_config_desc(&driver_obj); - } - if (driver_obj.actions & ACTION_GET_STR_DESC) { - action_get_str_desc(&driver_obj); - } - if (driver_obj.actions & ACTION_CLOSE_DEV) { - action_close_dev(&driver_obj); - } - if (driver_obj.actions & ACTION_EXIT) { + driver_obj.mux_protected.flags.unhandled_devices = 0; + xSemaphoreGive(driver_obj.constant.mux_lock); + } else { + // Driver is active, handle client events + if (driver_obj.mux_protected.flags.shutdown == 0) { + usb_host_client_handle_events(class_driver_client_hdl, portMAX_DELAY); + } else { + // Shutdown the driver break; } - if (driver_obj.actions & ACTION_RECONNECT) { - driver_obj.actions = 0; - } } } - ESP_LOGI(TAG, "Deregistering Client"); - ESP_ERROR_CHECK(usb_host_client_deregister(driver_obj.client_hdl)); - vTaskSuspend(NULL); + ESP_LOGI(TAG, "Deregistering Class Client"); + ESP_ERROR_CHECK(usb_host_client_deregister(class_driver_client_hdl)); + if (mux_lock != NULL) { + vSemaphoreDelete(mux_lock); + } + vTaskDelete(NULL); } void class_driver_client_deregister(void) { - if (s_driver_obj->dev_hdl != NULL) { - s_driver_obj->actions = ACTION_CLOSE_DEV; + // Mark all opened devices + xSemaphoreTake(s_driver_obj->constant.mux_lock, portMAX_DELAY); + for (uint8_t i = 0; i < DEV_MAX_COUNT; i++) { + if (s_driver_obj->mux_protected.device[i].dev_hdl != NULL) { + // Mark device to close + s_driver_obj->mux_protected.device[i].actions |= ACTION_CLOSE_DEV; + // Set flag + s_driver_obj->mux_protected.flags.unhandled_devices = 1; + } } - s_driver_obj->actions |= ACTION_EXIT; + s_driver_obj->mux_protected.flags.shutdown = 1; + xSemaphoreGive(s_driver_obj->constant.mux_lock); // Unblock, exit the loop and proceed to deregister client - ESP_ERROR_CHECK(usb_host_client_unblock(s_driver_obj->client_hdl)); + ESP_ERROR_CHECK(usb_host_client_unblock(s_driver_obj->constant.client_hdl)); } diff --git a/examples/peripherals/usb/host/usb_host_lib/main/usb_host_lib_main.c b/examples/peripherals/usb/host/usb_host_lib/main/usb_host_lib_main.c index e6c2a8df92dd..f1a2dc348a53 100644 --- a/examples/peripherals/usb/host/usb_host_lib/main/usb_host_lib_main.c +++ b/examples/peripherals/usb/host/usb_host_lib/main/usb_host_lib_main.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2021-2023 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Unlicense OR CC0-1.0 */ @@ -120,26 +120,26 @@ static void usb_host_lib_task(void *arg) xTaskNotifyGive(arg); bool has_clients = true; - bool has_devices = true; - while (has_clients || has_devices) { + bool has_devices = false; + while (has_clients) { uint32_t event_flags; ESP_ERROR_CHECK(usb_host_lib_handle_events(portMAX_DELAY, &event_flags)); if (event_flags & USB_HOST_LIB_EVENT_FLAGS_NO_CLIENTS) { - ESP_LOGI(TAG, "No more clients"); - has_clients = false; + ESP_LOGI(TAG, "Get FLAGS_NO_CLIENTS"); if (ESP_OK == usb_host_device_free_all()) { - ESP_LOGI(TAG, "All devices marked as free"); + ESP_LOGI(TAG, "All devices marked as free, no need to wait FLAGS_ALL_FREE event"); + has_clients = false; } else { - ESP_LOGI(TAG, "Wait for the ALL FREE EVENT"); + ESP_LOGI(TAG, "Wait for the FLAGS_ALL_FREE"); + has_devices = true; } } - if (event_flags & USB_HOST_LIB_EVENT_FLAGS_ALL_FREE) { - ESP_LOGI(TAG, "No more devices"); - has_devices = false; + if (has_devices && event_flags & USB_HOST_LIB_EVENT_FLAGS_ALL_FREE) { + ESP_LOGI(TAG, "Get FLAGS_ALL_FREE"); + has_clients = false; } - } - ESP_LOGI(TAG, "No more clients and devices"); + ESP_LOGI(TAG, "No more clients and devices, uninstall USB Host library"); //Uninstall the USB Host Library ESP_ERROR_CHECK(usb_host_uninstall()); @@ -167,7 +167,7 @@ void app_main(void) TaskHandle_t host_lib_task_hdl, class_driver_task_hdl; - //Create usb host lib task + // Create usb host lib task BaseType_t task_created; task_created = xTaskCreatePinnedToCore(usb_host_lib_task, "usb_host", @@ -178,19 +178,20 @@ void app_main(void) 0); assert(task_created == pdTRUE); - //Wait unit the USB host library is installed + // Wait unit the USB host library is installed ulTaskNotifyTake(false, 1000); - //Create class driver task + // Create class driver task task_created = xTaskCreatePinnedToCore(class_driver_task, "class", - 4096, + 5 * 1024, NULL, CLASS_TASK_PRIORITY, &class_driver_task_hdl, 0); assert(task_created == pdTRUE); - vTaskDelay(10); //Add a short delay to let the tasks run + // Add a short delay to let the tasks run + vTaskDelay(10); while (1) { if (xQueueReceive(app_event_queue, &evt_queue, portMAX_DELAY)) { @@ -198,22 +199,20 @@ void app_main(void) // User pressed button usb_host_lib_info_t lib_info; ESP_ERROR_CHECK(usb_host_lib_info(&lib_info)); - if (lib_info.num_devices == 0) { - // End while cycle - break; - } else { - ESP_LOGW(TAG, "To shutdown example, remove all USB devices and press button again."); - // Keep polling + if (lib_info.num_devices != 0) { + ESP_LOGW(TAG, "Shutdown with attached devices."); } + // End while cycle + break; } } } - //Deregister client + // Deregister client class_driver_client_deregister(); vTaskDelay(10); - //Delete the tasks + // Delete the tasks vTaskDelete(class_driver_task_hdl); vTaskDelete(host_lib_task_hdl); diff --git a/examples/peripherals/usb/host/usb_host_lib/sdkconfig.defaults b/examples/peripherals/usb/host/usb_host_lib/sdkconfig.defaults new file mode 100644 index 000000000000..bf1b553b2388 --- /dev/null +++ b/examples/peripherals/usb/host/usb_host_lib/sdkconfig.defaults @@ -0,0 +1,4 @@ +# This file was generated using idf.py save-defconfig. It can be edited manually. +# Espressif IoT Development Framework (ESP-IDF) Project Minimal Configuration +# +CONFIG_USB_HOST_HUBS_SUPPORTED=y From 484a2d6d6cfe27a2fa8a0ffcd4a23be4010f0c54 Mon Sep 17 00:00:00 2001 From: Showier Drastic <168159404+showier-drastic@users.noreply.github.com> Date: Thu, 4 Jul 2024 10:50:34 +0800 Subject: [PATCH 060/365] feat(lwip/apps): only hand out DNS in DHCP if explicitly specified --- components/lwip/apps/dhcpserver/dhcpserver.c | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/components/lwip/apps/dhcpserver/dhcpserver.c b/components/lwip/apps/dhcpserver/dhcpserver.c index e6abfd743cf3..60e6e15cd4f2 100644 --- a/components/lwip/apps/dhcpserver/dhcpserver.c +++ b/components/lwip/apps/dhcpserver/dhcpserver.c @@ -454,18 +454,13 @@ static u8_t *add_offer_options(dhcps_t *dhcps, u8_t *optptr) } } - *optptr++ = DHCP_OPTION_DNS_SERVER; - *optptr++ = 4; if (dhcps_dns_enabled(dhcps->dhcps_dns)) { + *optptr++ = DHCP_OPTION_DNS_SERVER; + *optptr++ = 4; *optptr++ = ip4_addr1(&dhcps->dns_server); *optptr++ = ip4_addr2(&dhcps->dns_server); *optptr++ = ip4_addr3(&dhcps->dns_server); *optptr++ = ip4_addr4(&dhcps->dns_server); - }else { - *optptr++ = ip4_addr1(&ipadd); - *optptr++ = ip4_addr2(&ipadd); - *optptr++ = ip4_addr3(&ipadd); - *optptr++ = ip4_addr4(&ipadd); } ip4_addr_t broadcast_addr = { .addr = (ipadd.addr & dhcps->dhcps_mask.addr) | ~dhcps->dhcps_mask.addr }; From 649816d9a104796ea451b2d2b1c6bc4900ffb80d Mon Sep 17 00:00:00 2001 From: David Cermak Date: Tue, 1 Oct 2024 17:27:43 +0200 Subject: [PATCH 061/365] fix(lwip/dhcps): Fallback DNS option to DHCP server's IP by default Adds backward compatibity option CONFIG_LWIP_DHCPS_ADD_DNS, which prevents breaking changes. This option should be removed in IDF v6.0 Merges https://github.com/espressif/esp-idf/pull/14132 --- components/lwip/Kconfig | 14 ++++++++++++++ components/lwip/apps/dhcpserver/dhcpserver.c | 9 +++++++++ 2 files changed, 23 insertions(+) diff --git a/components/lwip/Kconfig b/components/lwip/Kconfig index 231536c39d85..c51fab4514b0 100644 --- a/components/lwip/Kconfig +++ b/components/lwip/Kconfig @@ -433,6 +433,20 @@ menu "LWIP" Enabling this option allows DHCP server to support temporary static ARP entries for DHCP Client. This will help the DHCP server to send the DHCP OFFER and DHCP ACK using IP unicast. + config LWIP_DHCPS_ADD_DNS + bool "Always add DNS option in DHCP responses" + default y + depends on LWIP_DHCPS + help + This allows the DNS option to be optional in the DHCP offers, + depending on the server's runtime configuration. + When enabled, the DHCP server will always add the DNS option to DHCP responses. + If a DNS server is not explicitly configured, the server's IP address will be used + as the fallback for the DNS option. + When disabled, the DHCP server will only include the DNS option in responses + if a DNS server has been explicitly configured. + This option will be removed in IDF v6.x + endmenu # DHCPS menuconfig LWIP_AUTOIP diff --git a/components/lwip/apps/dhcpserver/dhcpserver.c b/components/lwip/apps/dhcpserver/dhcpserver.c index 60e6e15cd4f2..8859e52c63bf 100644 --- a/components/lwip/apps/dhcpserver/dhcpserver.c +++ b/components/lwip/apps/dhcpserver/dhcpserver.c @@ -461,6 +461,15 @@ static u8_t *add_offer_options(dhcps_t *dhcps, u8_t *optptr) *optptr++ = ip4_addr2(&dhcps->dns_server); *optptr++ = ip4_addr3(&dhcps->dns_server); *optptr++ = ip4_addr4(&dhcps->dns_server); +#ifdef CONFIG_LWIP_DHCPS_ADD_DNS + }else { + *optptr++ = DHCP_OPTION_DNS_SERVER; + *optptr++ = 4; + *optptr++ = ip4_addr1(&ipadd); + *optptr++ = ip4_addr2(&ipadd); + *optptr++ = ip4_addr3(&ipadd); + *optptr++ = ip4_addr4(&ipadd); +#endif /* CONFIG_LWIP_DHCPS_ADD_DNS */ } ip4_addr_t broadcast_addr = { .addr = (ipadd.addr & dhcps->dhcps_mask.addr) | ~dhcps->dhcps_mask.addr }; From 463149cad27bcb0f37b8ac6a9650840778914d2c Mon Sep 17 00:00:00 2001 From: Sarvesh Bodakhe Date: Wed, 22 May 2024 15:42:33 +0530 Subject: [PATCH 062/365] fix(wifi): Fix bug in wrong profile checking of AP's RSNXE IE --- components/esp_wifi/lib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/esp_wifi/lib b/components/esp_wifi/lib index f3ea158d7c62..e5111a1452e6 160000 --- a/components/esp_wifi/lib +++ b/components/esp_wifi/lib @@ -1 +1 @@ -Subproject commit f3ea158d7c62b1a4479f6c0174a02bc19fa59f90 +Subproject commit e5111a1452e6d5ae3474a7cbe1c151998537e10b From 9ebfd93c5d460ded5a157a0d4b2f23887b4e8dec Mon Sep 17 00:00:00 2001 From: Sarvesh Bodakhe Date: Mon, 30 Sep 2024 12:05:57 +0530 Subject: [PATCH 063/365] fix(wpa_supplicant): Fix debug print in wps_start_msg_timer() --- components/wpa_supplicant/esp_supplicant/src/esp_wps.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/wpa_supplicant/esp_supplicant/src/esp_wps.c b/components/wpa_supplicant/esp_supplicant/src/esp_wps.c index ae84728bf8a5..c67413b1271a 100644 --- a/components/wpa_supplicant/esp_supplicant/src/esp_wps.c +++ b/components/wpa_supplicant/esp_supplicant/src/esp_wps.c @@ -930,7 +930,7 @@ int wps_start_msg_timer(void) ret = 0; } else if (sm->wps->state == RECV_M2) { msg_timeout = 5; - wpa_printf(MSG_DEBUG, "start msg timer RECV_M2 %" PRId32 " ms", msg_timeout); + wpa_printf(MSG_DEBUG, "start msg timer RECV_M2 %" PRId32 " s", msg_timeout); eloop_cancel_timeout(wifi_station_wps_msg_timeout, NULL, NULL); eloop_register_timeout(msg_timeout, 0, wifi_station_wps_msg_timeout, NULL, NULL); ret = 0; From 9d32a3165747c6a74e92348a3a271589c4defc99 Mon Sep 17 00:00:00 2001 From: Alexey Lapshin Date: Fri, 4 Oct 2024 13:54:03 +0700 Subject: [PATCH 064/365] feat(tools): add binary size exceeded hint --- tools/idf_py_actions/hints.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tools/idf_py_actions/hints.yml b/tools/idf_py_actions/hints.yml index f17f3fa28740..68181be04150 100644 --- a/tools/idf_py_actions/hints.yml +++ b/tools/idf_py_actions/hints.yml @@ -443,3 +443,7 @@ - re: "discarded output section: .*\\.got" hint: "Some objects being linked were compiled with the \"-fpic\"/\"-fpie\" options. These options may be suitable for \"linux\" builds, but must not be applied for esp32XX targets." + +- + re: "(error: Total discarded sections size is \\d+ bytes)|(region [`'.\\w]+ overflowed by \\d+ bytes)" + hint: "The binary size has exceeded the limit. To resolve the issue consider reducing the binary size.\nYou can explore size optimization techniques in the documentation by running 'idf.py docs -sp api-guides/performance/size.html#reducing-overall-size'.\nNote that the linker performed the dead code elimination." From 28ffd5fc04b58119d754941b7095d10a0378cddc Mon Sep 17 00:00:00 2001 From: Shen Weilong Date: Tue, 8 Oct 2024 11:01:42 +0800 Subject: [PATCH 065/365] update(ble): Modified the ble multi_conn example's readme --- .../nimble/ble_multi_conn/ble_multi_conn_cent/README.md | 2 ++ .../nimble/ble_multi_conn/ble_multi_conn_prph/README.md | 2 ++ 2 files changed, 4 insertions(+) diff --git a/examples/bluetooth/nimble/ble_multi_conn/ble_multi_conn_cent/README.md b/examples/bluetooth/nimble/ble_multi_conn/ble_multi_conn_cent/README.md index 6c32318b9fe4..8f3339a66ec8 100644 --- a/examples/bluetooth/nimble/ble_multi_conn/ble_multi_conn_cent/README.md +++ b/examples/bluetooth/nimble/ble_multi_conn/ble_multi_conn_cent/README.md @@ -5,6 +5,8 @@ (See the README.md file in the upper level 'examples' directory for more information about examples.) +**This example relies on the BLE controller. Currently, the ESP32/ESP32-C3/ESP32-S3/ESP32-C2 does not support the relevant vendor HCI, so please use the chip modules listed under Supported Targets.** + Please check the [tutorial](tutorial/Ble_Multiple_Connections_Central_Example_Walkthrough.md) for more information about this example. ## How to Use Example diff --git a/examples/bluetooth/nimble/ble_multi_conn/ble_multi_conn_prph/README.md b/examples/bluetooth/nimble/ble_multi_conn/ble_multi_conn_prph/README.md index 8035d1b64192..95d7358bbddb 100644 --- a/examples/bluetooth/nimble/ble_multi_conn/ble_multi_conn_prph/README.md +++ b/examples/bluetooth/nimble/ble_multi_conn/ble_multi_conn_prph/README.md @@ -5,6 +5,8 @@ (See the README.md file in the upper level 'examples' directory for more information about examples.) +**This example relies on the BLE controller. Currently, the ESP32/ESP32-C3/ESP32-S3/ESP32-C2 does not support the relevant vendor HCI, so please use the chip modules listed under Supported Targets.** + Please check the [tutorial](tutorial/Ble_Multiple_Connections_Peripheral_Example_Walkthrough.md) for more information about this example. ## How to Use Example From 808a82de812a8fb800752c6fcab26870619d8d74 Mon Sep 17 00:00:00 2001 From: Zhang Shuxian Date: Fri, 27 Sep 2024 19:19:40 +0800 Subject: [PATCH 066/365] docs: Update CN translation for secure-boot-v2.rst --- docs/en/security/secure-boot-v2.rst | 3 +- docs/zh_CN/security/secure-boot-v2.rst | 76 +++++++++++++++----------- 2 files changed, 46 insertions(+), 33 deletions(-) diff --git a/docs/en/security/secure-boot-v2.rst b/docs/en/security/secure-boot-v2.rst index 7cc0a8d22774..7fbe4011da59 100644 --- a/docs/en/security/secure-boot-v2.rst +++ b/docs/en/security/secure-boot-v2.rst @@ -637,8 +637,7 @@ Secure Boot Best Practices .. note:: - It may be necessary to revoke a key that isn't currently being used. - For example, if the active application is signed with key #0, but key #1 becomes compromised, you should revoke key #1 by using the above approach. The new OTA update should continue to be signed with key #0, and the API `esp_ota_revoke_secure_boot_public_key(SECURE_BOOT_PUBLIC_KEY_INDEX_[N])` can be used to revoke the key #N (N would be 1 in this case). After revoking, all remaining unrevoked keys can still be used to sign future applications. + It may be necessary to revoke a key that isn't currently being used. For example, if the active application is signed with key #0, but key #1 becomes compromised, you should revoke key #1 by using the above approach. The new OTA update should continue to be signed with key #0, and the API `esp_ota_revoke_secure_boot_public_key (SECURE_BOOT_PUBLIC_KEY_INDEX_[N])` can be used to revoke the key #N (N would be 1 in this case). After revoking, all remaining unrevoked keys can still be used to sign future applications. .. _secure-boot-v2-aggressive-key-revocation: diff --git a/docs/zh_CN/security/secure-boot-v2.rst b/docs/zh_CN/security/secure-boot-v2.rst index 640a32889ebc..e9d2d400f060 100644 --- a/docs/zh_CN/security/secure-boot-v2.rst +++ b/docs/zh_CN/security/secure-boot-v2.rst @@ -29,7 +29,7 @@ .. only:: esp32 - 芯片版本低于 v3.0 的 ESP32 安全启动请参阅 :doc:`secure-boot-v1`。如果你的芯片版本支持安全启动 v2,推荐使用此模式,相比安全启动 v1 更安全且灵活。 + 芯片版本低于 v3.0 的 ESP32 安全启动请参阅 :doc:`secure-boot-v1`。如果当前芯片版本支持安全启动 v2,推荐使用此模式,相比安全启动 v1 更安全且灵活。 安全启动 v2 使用基于 {IDF_TARGET_SBV2_SCHEME} 的应用程序和引导加载程序 (bootloader) :ref:`second-stage-bootloader` 验证。若需要使用 {IDF_TARGET_SBV2_SCHEME} 方案对应用程序签名,且无需对 bootloader 签名,同样可以参考本文档。 @@ -83,10 +83,10 @@ - 芯片在量产时最多能生成并存储三个公钥。 - - {IDF_TARGET_NAME} 支持永久注销个别公钥,对此可以选择保守或激进的配置。 + - {IDF_TARGET_NAME} 支持永久撤销个别公钥,对此可以选择保守或激进的配置。 - - 保守配置:在此情况下,只有在 bootloader 和应用程序成功迁移到新密钥后才会注销旧密钥。 - - 激进配置:在此情况下,只要使用此密钥验证失败,就会立即注销该密钥。 + - 保守配置:在此情况下,只有在 bootloader 和应用程序成功迁移到新密钥后才会撤销旧密钥。 + - 激进配置:在此情况下,只要使用此密钥验证失败,就会立即撤销该密钥。 - 应用程序和软件 bootloader 采用相同的镜像格式和签名验证方法。 @@ -361,11 +361,11 @@ bootloader 大小 - BLOCK_KEYX - 该块包含其在 KEY_PURPOSE_X 中烧录的功能的对应数据,并存储公钥的 SHA-256 哈希摘要。公钥模数、指数、预先计算的 R 和 M' 值的 SHA-256 哈希摘要都将写入 eFuse 密钥块。这个摘要大小为 776 字节,偏移量从 36 到 812,如 :ref:`signature-block-format` 所示。注意,必须设置写保护位,但切勿设置读保护位。 - - KEY_REVOKEX - 与 3 个密钥块中的每一个相对应的注销标记。例如,设置 KEY_REVOKE2 将注销密钥功能为 SECURE_BOOT_DIGEST2 的密钥块。 + - KEY_REVOKEX - 与 3 个密钥块中的每一个相对应的撤销标记。例如,设置 KEY_REVOKE2 将撤销密钥功能为 SECURE_BOOT_DIGEST2 的密钥块。 - - SECURE_BOOT_AGGRESSIVE_REVOKE - 启用激进的密钥注销。只要与此密钥的验证失败,密钥就会立即注销。 + - SECURE_BOOT_AGGRESSIVE_REVOKE - 启用激进的密钥撤销。只要与此密钥的验证失败,密钥就会立即撤销。 - 为确保后续不会有攻击者添加受信任的密钥,应使用 KEY_REVOKEX 注销所有未使用的密钥摘要槽。若未启用 :ref:`CONFIG_SECURE_BOOT_ALLOW_UNUSED_DIGEST_SLOTS`,应用程序启动时,将在 :cpp:func:`esp_secure_boot_init_checks` 中检查和修复注销操作。 + 为确保后续不会有攻击者添加受信任的密钥,应使用 KEY_REVOKEX 撤销所有未使用的密钥摘要槽。若未启用 :ref:`CONFIG_SECURE_BOOT_ALLOW_UNUSED_DIGEST_SLOTS`,应用程序启动时,将在 :cpp:func:`esp_secure_boot_init_checks` 中检查和修复撤销操作。 密钥必须为可读密钥,以便软件访问。如果密钥设置了读保护,软件只能读取到全为零的数据,导致签名验证失败,启动中止。 @@ -407,15 +407,15 @@ bootloader 大小 7. 运行 ``idf.py bootloader`` 构建启用了安全启动的 bootloader ,构建输出中会包含一个烧录命令的提示,使用 ``esptool.py write_flash`` 烧录。 -8. 当你准备好烧录 bootloader 时,请运行指定命令并等待烧录完成。注意,此处的指定命令需要手动输入,构建系统不会执行此过程。 +8. 烧录 bootloader 前,请运行指定命令并等待烧录完成。注意,此处的指定命令需要手动输入,构建系统不会执行此过程。 9. 运行 ``idf.py flash`` 构建并烧录分区表以及刚刚构建的应用程序镜像,该镜像使用步骤 6 中生成的签名密钥进行签名。 .. note:: - 如果启用了安全启动,``idf.py flash`` 不会烧录 bootloader 。 + 如果启用了安全启动,``idf.py flash`` 不会烧录 bootloader。 -10. 重置 {IDF_TARGET_NAME},它将启动你烧录的软件 bootloader 。该软件 bootloader 会在芯片上启用安全启动,然后验证应用程序镜像签名,并启动应用程序。请查看 {IDF_TARGET_NAME} 的串行控制器输出,确保已启用安全启动,且没有因构建配置发生错误。 +10. 重置 {IDF_TARGET_NAME} 将启动烧录的软件 bootloader。该软件 bootloader 会在芯片上启用安全启动,然后验证应用程序镜像签名,并启动应用程序。请查看 {IDF_TARGET_NAME} 的串行控制器输出,确保已启用安全启动,且没有因构建配置发生错误。 .. note:: @@ -435,16 +435,16 @@ bootloader 大小 - 注意,启用安全启动或 flash 加密会禁用 ROM 中的 USB-OTG USB 栈,阻止通过该端口进行串行仿真或设备固件更新 (DFU)。 +- 一旦启用安全启动,就无法再对 eFuse 密钥进行读保护,这可以避免攻击者对存储公共密钥摘要的 eFuse 块进行读保护,进而导致系统无法验证和处理签名,系统服务无法正常运行。有关读保护密钥的更多信息,请参阅下方详细说明。 + 烧录读保护密钥 ~~~~~~~~~~~~~~~ -一旦启用安全启动,就无法再对 eFuses 进行读保护,这可以避免攻击者对存储公共密钥摘要的 eFuse 块进行读保护,进而导致系统无法验证和处理签名,系统服务无法正常运行。 - -如果第二阶段 bootloader 启用了 :doc:`/security/flash-encryption`,它会确保在第一次启动时生成的 flash 加密密钥被读保护。 - -如需在设备启用安全启动后对密钥进行读保护,如: +**读保护密钥**: +以下密钥受到读保护后,相应的硬件将直接访问这些密钥(软件无法读取): .. list:: + :SOC_FLASH_ENC_SUPPORTED:* flash 加密密钥 :SOC_HMAC_SUPPORTED:* HMAC 密钥 @@ -453,19 +453,28 @@ bootloader 大小 :SOC_KEY_MANAGER_SUPPORTED:* 密钥管理器密钥 -请在启用安全启动的同时启用配置项 :ref:`CONFIG_SECURE_BOOT_V2_ALLOW_EFUSE_RD_DIS`,以防止禁用 eFuses 读保护功能。 +**不受读保护的密钥**: +因软件访问需要(软件可读取),以下密钥不受读保护: + +.. list:: + + :SOC_SECURE_BOOT_SUPPORTED:* 安全启动公共密钥摘要 + * 用户数据 + +启用安全启动后,默认禁用 eFuses 读保护功能。如后续需在应用程序中对某个 eFuse(例如上述读保护密钥列表中的密钥)进行读保护,请在启用安全启动的同时启用配置项 :ref:`CONFIG_SECURE_BOOT_V2_ALLOW_EFUSE_RD_DIS`。 -建议在启用安全启动之前,完成全部密钥的烧录。 +建议在启用安全启动之前,完成全部密钥的烧录。如需启用配置项 :ref:`CONFIG_SECURE_BOOT_V2_ALLOW_EFUSE_RD_DIS`,请在所有读保护 eFuse 密钥烧录后,使用 :cpp:func:`esp_efuse_write_field_bit` 烧录 eFuse {IDF_TARGET_EFUSE_WR_DIS_RD_DIS}。 -如需启用配置项 :ref:`CONFIG_SECURE_BOOT_V2_ALLOW_EFUSE_RD_DIS`,请在所有读保护 eFuses 密钥烧录后,使用 ``esp_efuse.h`` 的 ``esp_efuse_write_field_bit()`` API 烧录 eFuses {IDF_TARGET_EFUSE_WR_DIS_RD_DIS}。 +.. note:: + 如果在启用安全启动时,第二阶段引导加载程序启用了 :doc:`/security/flash-encryption`,则首次启动时生成的 flash 加密密钥已经受到读保护。 .. _secure-boot-v2-generate-key: 生成安全启动签名密钥 ---------------------------------- -构建系统会提示你,使用 ``idf.py secure-generate-signing-key`` 命令生成新签名密钥。 +根据构建系统提示,使用 ``idf.py secure-generate-signing-key`` 命令生成新签名密钥。 .. only:: esp32 or SOC_SECURE_BOOT_V2_RSA @@ -522,7 +531,7 @@ bootloader 大小 idf.py secure-sign-data BINARY_FILE --keyfile PRIVATE_SIGNING_KEY -上述命令将镜像签名附加到现有的二进制文件中,你可以使用 `--output` 参数将签名后的二进制文件写入单独的文件: +上述命令将镜像签名附加到现有的二进制文件中,可以使用 `--output` 参数将签名后的二进制文件写入单独的文件: .. code-block:: @@ -532,7 +541,7 @@ bootloader 大小 使用预计算的签名进行签名 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -如果你拥有为镜像生成的有效预计算签名及相应公钥,你可以使用这些签名生成一个签名扇区,并将其附加到镜像中。注意,预计算的签名应计算在镜像中的所有字节,包括安全填充字节。 +如果存在为镜像生成的有效预计算签名及相应公钥,可以使用这些签名生成一个签名扇区,并将其附加到镜像中。注意,预计算的签名应计算在镜像中的所有字节,包括安全填充字节。 在此情况下,应禁用选项 :ref:`CONFIG_SECURE_BOOT_BUILD_SIGNED_BINARIES` 来构建固件镜像。该镜像将进行安全填充,并使用以下命令,生成带签名的二进制文件: @@ -546,7 +555,7 @@ bootloader 大小 使用外部硬件安全模块 (HSM) 进行签名 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -为了提高安全性,你可能会使用外部硬件安全模块 (HSM) 存储私钥,该私钥无法直接访问,但具备一个接口,可以生成二进制文件及其相应公钥的签名。 +为了提高安全性,可能需要使用外部硬件安全模块 (HSM) 存储私钥,该私钥无法直接访问,但具备一个接口,可以生成二进制文件及其相应公钥的签名。 在此情况下,请禁用选项 :ref:`CONFIG_SECURE_BOOT_BUILD_SIGNED_BINARIES` 并构建固件。随后,可以将已进行安全填充的镜像提供给外部硬件安全模块来生成签名。请参阅 `使用外部 HSM 签名 `_ 生成已签名镜像。 @@ -583,15 +592,15 @@ bootloader 大小 * 烧录 eFuse 可以由软件 bootloader 在首次从 menuconfig 启用 ``Secure Boot v2`` 后进行,也可以使用 ``espefuse.py``,后者与 ROM 中的串行 bootloader 通信。 * KEY_DIGEST 应从密钥摘要 #0 开始,按顺序编号。如果使用了密钥摘要 #1,则必须使用密钥摘要 #0。如果使用了密钥摘要 #2,则必须使用密钥摘要 #0 和 #1。 * 软件 bootloader 不支持 OTA 升级,它将至少由一个私钥签名,也可能使用全部三个私钥,并在工厂内烧录。 - * 应用程序应仅由单个私钥签名,其他私钥应妥善保管。但如果需要注销某些私钥,也可以使用多个签名私钥,请参阅下文的 :ref:`secure-boot-v2-key-revocation`。 + * 应用程序应仅由单个私钥签名,其他私钥应妥善保管。但如果需要撤销某些私钥,也可以使用多个签名私钥,请参阅下文的 :ref:`secure-boot-v2-key-revocation`。 多个密钥管理 ------------- * 在烧录 bootloader 之前,应使用设备整个生命周期所需的所有私钥对 bootloader 签名。 - * 构建系统每次只能使用一个私钥签名,如果需要,你必须手动运行命令以附加更多签名。 - * 你可以使用 ``idf.py secure-sign-data`` 的附加功能,此命令也将在启用安全启动 v2 的 bootloader 编译的末尾显示。 + * 构建系统每次只能使用一个私钥签名,如果需要,必须手动运行命令以附加更多签名。 + * 可以使用 ``idf.py secure-sign-data`` 的附加功能,此命令也将在启用安全启动 v2 的 bootloader 编译的末尾显示。 .. code-block:: @@ -606,10 +615,11 @@ bootloader 大小 .. _secure-boot-v2-key-revocation: - 注销密钥管理 + 撤销密钥管理 -------------- * 密钥按线性顺序处理,即密钥 #0、密钥 #1、密钥 #2。 + * 撤销一个密钥后,其余未被撤销的密钥仍可用于应用程序签名。例如,如密钥 #1 被撤销,仍然可以使用密钥 #0 和密钥 #2 给应用程序签名。 * 应用程序每次应只使用一个密钥签名,尽量避免暴露未使用的私钥。 * bootloader 可以使用来自工厂的多个函数签名。 @@ -629,24 +639,28 @@ bootloader 大小 3. 验证新应用程序的签名块。对比公钥与 eFuse 中烧录的摘要,并使用已验证的公钥验证应用程序。 4. 将活动分区设置为新的 OTA 应用程序分区。 5. 设备重置并加载使用密钥 #N-1 验证的 bootloader ,随后启动使用密钥 #N 验证的新应用程序。 - 6. 新应用程序使用密钥 #N 验证 bootloader ,这是最后的检查,然后运行代码注销密钥 #N-1,即设置 KEY_REVOKE eFuse 位。 - 7. 可以使用 API `esp_ota_revoke_secure_boot_public_key()` 注销密钥 #N-1。 + 6. 新应用程序使用密钥 #N 验证 bootloader ,这是最后的检查,然后运行代码撤销密钥 #N-1,即设置 KEY_REVOKE eFuse 位。 + 7. 可以使用 API :cpp:func:`esp_ota_revoke_secure_boot_public_key` 撤销密钥 #N-1。 * 类似的方法也可以用于物理重新烧录,以使用新的密钥,还可以同时更改 bootloader 的内容。 + .. note:: + + 当前未使用的密钥可以被撤销。例如,如果活动应用程序由密钥 #0 签名,但密钥 #1 已被泄露,请通过上述方法撤销密钥 #1。新的 OTA 更新应继续使用密钥 #0 签名,并且可以使用 API `esp_ota_revoke_secure_boot_public_key (SECURE_BOOT_PUBLIC_KEY_INDEX_[N])` 来撤销密钥 #N(在此例中,N 为 1)。撤销该密钥后,其余密钥以后仍可用于给应用程序签名。 + .. _secure-boot-v2-aggressive-key-revocation: 激进方法 ~~~~~~~~~~~~~~ - ROM 代码具备一项额外功能,即在签名验证失败时可以注销公钥摘要。 + ROM 代码具备一项额外功能,即在签名验证失败时可以撤销公钥摘要。 请烧录 ``SECURE_BOOT_AGGRESSIVE_REVOKE`` eFuse 或启用 :ref:`CONFIG_SECURE_BOOT_ENABLE_AGGRESSIVE_KEY_REVOKE` 以启用此功能。 - 注销密钥仅适用于成功启用了安全启动的情况。此外,在签名块无效或镜像摘要无效的情况下不会注销密钥,仅在签名验证失败时,即在 :ref:`verify_image` 的第 3 步中验证失败时,才会执行注销操作。 + 撤销密钥仅适用于成功启用了安全启动的情况。此外,在签名块无效或镜像摘要无效的情况下不会撤销密钥,仅在签名验证失败时,即在 :ref:`verify_image` 的第 3 步中验证失败时,才会执行撤销操作。 - 一旦注销了密钥,它将无法再用于验证镜像签名。该功能提供了强大的物理攻击防护,但如果由于签名验证失败而注销了所有密钥,可能会导致设备再也无法使用。 + 一旦撤销了密钥,它将无法再用于验证镜像签名。该功能提供了强大的物理攻击防护,但如果由于签名验证失败而撤销了所有密钥,可能会导致设备再也无法使用。 .. _secure-boot-v2-technical-details: From 5126742003f8eb5c10648679393c500d3a66009a Mon Sep 17 00:00:00 2001 From: zhanghaipeng Date: Sat, 21 Sep 2024 16:21:30 +0800 Subject: [PATCH 067/365] fix(ble/bluedroid): Fixed error when writing Client Supported Features characteristic --- .../bt/host/bluedroid/stack/gatt/gatt_db.c | 44 +++++++++++-------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/components/bt/host/bluedroid/stack/gatt/gatt_db.c b/components/bt/host/bluedroid/stack/gatt/gatt_db.c index efae6413ad2b..8844ef5dc8e7 100644 --- a/components/bt/host/bluedroid/stack/gatt/gatt_db.c +++ b/components/bt/host/bluedroid/stack/gatt/gatt_db.c @@ -60,7 +60,7 @@ static BOOLEAN gatts_add_char_desc_value_check (tGATT_ATTR_VAL *attr_val, tGATTS ** Parameter p_db: database pointer. ** len: size of the memory space. ** -** Returns Status of te operation. +** Returns Status of the operation. ** *******************************************************************************/ BOOLEAN gatts_init_service_db (tGATT_SVC_DB *p_db, tBT_UUID *p_service, BOOLEAN is_pri, @@ -94,7 +94,7 @@ BOOLEAN gatts_init_service_db (tGATT_SVC_DB *p_db, tBT_UUID *p_service, BOOLEAN ** Parameter p_db: database pointer. ** len: size of the memory space. ** -** Returns Status of te operation. +** Returns Status of the operation. ** *******************************************************************************/ tBT_UUID *gatts_get_service_uuid (tGATT_SVC_DB *p_db) @@ -497,14 +497,14 @@ UINT16 gatts_add_included_service (tGATT_SVC_DB *p_db, UINT16 s_handle, UINT16 e ** Function gatts_add_characteristic ** ** Description This function add a characteristics and its descriptor into -** a servce identified by the service database pointer. +** a service identified by the service database pointer. ** ** Parameter p_db: database pointer. ** perm: permission (authentication and key size requirements) ** property: property of the characteristic. ** p_char: characteristic value information. ** -** Returns Status of te operation. +** Returns Status of the operation. ** *******************************************************************************/ UINT16 gatts_add_characteristic (tGATT_SVC_DB *p_db, tGATT_PERM perm, @@ -1173,40 +1173,40 @@ tGATT_STATUS gatts_write_attr_perm_check (tGATT_SVC_DB *p_db, UINT8 op_code, if ((op_code == GATT_SIGN_CMD_WRITE) && !(perm & GATT_WRITE_SIGNED_PERM)) { status = GATT_WRITE_NOT_PERMIT; - GATT_TRACE_DEBUG( "gatts_write_attr_perm_check - sign cmd write not allowed,handle:0x%04x",handle); + GATT_TRACE_DEBUG( "gatts_write_attr_perm_check - sign cmd write not allowed,handle %04x,perm %04x", handle, perm); } if ((op_code == GATT_SIGN_CMD_WRITE) && (sec_flag & GATT_SEC_FLAG_ENCRYPTED)) { status = GATT_INVALID_PDU; - GATT_TRACE_ERROR( "gatts_write_attr_perm_check - Error!! sign cmd write sent on a encypted link,handle:0x%04x",handle); + GATT_TRACE_ERROR( "gatts_write_attr_perm_check - Error!! sign cmd write sent on a encrypted link,handle %04x,perm %04x", handle, perm); } else if (!(perm & GATT_WRITE_ALLOWED)) { status = GATT_WRITE_NOT_PERMIT; - GATT_TRACE_ERROR( "gatts_write_attr_perm_check - GATT_WRITE_NOT_PERMIT,handle:0x%04x",handle); + GATT_TRACE_ERROR("gatts_write_attr_perm_check - GATT_WRITE_NOT_PERMIT,handle %04x, perm %04x", handle, perm); } /* require authentication, but not been authenticated */ else if ((perm & GATT_WRITE_AUTH_REQUIRED ) && !(sec_flag & GATT_SEC_FLAG_LKEY_UNAUTHED)) { status = GATT_INSUF_AUTHENTICATION; - GATT_TRACE_ERROR( "gatts_write_attr_perm_check - GATT_INSUF_AUTHENTICATION,handle:0x%04x",handle); + GATT_TRACE_ERROR( "gatts_write_attr_perm_check - GATT_INSUF_AUTHENTICATION,handle %04x, perm %04x", handle, perm); } else if ((perm & GATT_WRITE_MITM_REQUIRED ) && !(sec_flag & GATT_SEC_FLAG_LKEY_AUTHED)) { status = GATT_INSUF_AUTHENTICATION; - GATT_TRACE_ERROR( "gatts_write_attr_perm_check - GATT_INSUF_AUTHENTICATION: MITM required,handle:0x%04x",handle); + GATT_TRACE_ERROR( "gatts_write_attr_perm_check - GATT_INSUF_AUTHENTICATION: MITM required,handle %04x,perm %04x", handle, perm); } else if ((perm & GATT_WRITE_ENCRYPTED_PERM ) && !(sec_flag & GATT_SEC_FLAG_ENCRYPTED)) { status = GATT_INSUF_ENCRYPTION; - GATT_TRACE_ERROR( "gatts_write_attr_perm_check - GATT_INSUF_ENCRYPTION,handle:0x%04x",handle); + GATT_TRACE_ERROR( "gatts_write_attr_perm_check - GATT_INSUF_ENCRYPTION,handle:0x%04x, perm:0x%04x", handle, perm); } else if ((perm & GATT_WRITE_ENCRYPTED_PERM ) && (sec_flag & GATT_SEC_FLAG_ENCRYPTED) && (key_size < min_key_size)) { status = GATT_INSUF_KEY_SIZE; - GATT_TRACE_ERROR( "gatts_write_attr_perm_check - GATT_INSUF_KEY_SIZE,handle:0x%04x",handle); + GATT_TRACE_ERROR( "gatts_write_attr_perm_check - GATT_INSUF_KEY_SIZE,handle %04x,perm %04x", handle, perm); } /* LE Authorization check*/ else if ((perm & GATT_WRITE_AUTHORIZATION) && (!(sec_flag & GATT_SEC_FLAG_LKEY_AUTHED) || !(sec_flag & GATT_SEC_FLAG_AUTHORIZATION))){ status = GATT_INSUF_AUTHORIZATION; - GATT_TRACE_ERROR( "gatts_write_attr_perm_check - GATT_INSUF_AUTHORIZATION,handle:0x%04x",handle); + GATT_TRACE_ERROR( "gatts_write_attr_perm_check - GATT_INSUF_AUTHORIZATION,handle %04x,perm %04x", handle, perm); } /* LE security mode 2 attribute */ else if (perm & GATT_WRITE_SIGNED_PERM && op_code != GATT_SIGN_CMD_WRITE && !(sec_flag & GATT_SEC_FLAG_ENCRYPTED) && (perm & GATT_WRITE_ALLOWED) == 0) { status = GATT_INSUF_AUTHENTICATION; - GATT_TRACE_ERROR( "gatts_write_attr_perm_check - GATT_INSUF_AUTHENTICATION: LE security mode 2 required,handle:0x%04x",handle); - } else { /* writable: must be char value declaration or char descritpors */ + GATT_TRACE_ERROR( "gatts_write_attr_perm_check - GATT_INSUF_AUTHENTICATION: LE security mode 2 required,handle %04x,perm %04x", handle, perm); + } else { /* writable: must be char value declaration or char descriptors */ if (p_attr->uuid_type == GATT_ATTR_UUID_TYPE_16) { switch (p_attr->uuid) { case GATT_UUID_CHAR_PRESENT_FORMAT:/* should be readable only */ @@ -1215,13 +1215,19 @@ tGATT_STATUS gatts_write_attr_perm_check (tGATT_SVC_DB *p_db, UINT8 op_code, case GATT_UUID_CHAR_VALID_RANGE: status = GATT_WRITE_NOT_PERMIT; break; - + case GATT_UUID_GAP_ICON:/* The Appearance characteristic value shall be 2 octets in length */ case GATT_UUID_CHAR_CLIENT_CONFIG: /* coverity[MISSING_BREAK] */ /* intnended fall through, ignored */ /* fall through */ case GATT_UUID_CHAR_SRVR_CONFIG: max_size = 2; + status = GATT_SUCCESS; + break; + case GATT_UUID_CLIENT_SUP_FEAT: + max_size = 1; + status = GATT_SUCCESS; + break; case GATT_UUID_CHAR_DESCRIPTION: default: /* any other must be character value declaration */ status = GATT_SUCCESS; @@ -1242,17 +1248,17 @@ tGATT_STATUS gatts_write_attr_perm_check (tGATT_SVC_DB *p_db, UINT8 op_code, else if ( (p_attr->uuid_type == GATT_ATTR_UUID_TYPE_16) && (p_attr->uuid == GATT_UUID_CHAR_CLIENT_CONFIG || p_attr->uuid == GATT_UUID_CHAR_SRVR_CONFIG || - p_attr->uuid == GATT_UUID_CLIENT_SUP_FEAT || + p_attr->uuid == GATT_UUID_CLIENT_SUP_FEAT || p_attr->uuid == GATT_UUID_GAP_ICON ) ) // btla-specific -- { if (op_code == GATT_REQ_PREPARE_WRITE) { /* does not allow write blob */ status = GATT_REQ_NOT_SUPPORTED; - GATT_TRACE_ERROR( "gatts_write_attr_perm_check - GATT_REQ_NOT_SUPPORTED,handle:0x%04x",handle); + GATT_TRACE_ERROR("gatts_write_attr_perm_check - GATT_REQ_NOT_SUPPORTED,handle %04x,opcode %4x", handle, op_code); } else if (len != max_size) { /* data does not match the required format */ status = GATT_INVALID_ATTR_LEN; - GATT_TRACE_ERROR( "gatts_write_attr_perm_check - GATT_INVALID_ATTR_LEN,handle:0x%04x",handle); + GATT_TRACE_ERROR("gatts_write_attr_perm_check - GATT_INVALID_ATTR_LEN,handle %04x,op_code %04x,len %d,max_size %d", handle, op_code, len, max_size); } else { status = GATT_SUCCESS; } @@ -1554,7 +1560,7 @@ static BOOLEAN gatts_db_add_service_declaration(tGATT_SVC_DB *p_db, tBT_UUID *p_ uuid.uu.uuid16 = GATT_UUID_SEC_SERVICE; } - /* add service declration record */ + /* add service declaration record */ if ((p_attr = (tGATT_ATTR16 *)(allocate_attr_in_db(p_db, &uuid, GATT_PERM_READ))) != NULL) { if (copy_extra_byte_in_db (p_db, (void **)&p_attr->p_value, sizeof(tBT_UUID))) { if (p_service->len == LEN_UUID_16) { From e1423c53d5e994fc7967373423122fd80b807aa0 Mon Sep 17 00:00:00 2001 From: "chaijie@espressif.com" Date: Fri, 23 Aug 2024 14:31:49 +0800 Subject: [PATCH 068/365] feat(pwr_glitch): Add power glitch support on esp32c5/esp32c61 --- .../private_include/bootloader_soc.h | 8 +++ .../src/esp32c5/bootloader_esp32c5.c | 5 +- .../src/esp32c5/bootloader_soc.c | 29 ++++++--- .../src/esp32c61/bootloader_esp32c61.c | 6 +- .../src/esp32c61/bootloader_soc.c | 30 ++++++--- .../hal/esp32c5/include/hal/brownout_ll.h | 2 - .../hal/esp32c61/include/hal/brownout_ll.h | 2 - .../esp32c5/include/soc/lp_analog_peri_reg.h | 5 ++ .../soc/esp32c5/include/soc/regi2c_saradc.h | 16 +++++ .../esp32c61/include/soc/lp_analog_peri_reg.h | 5 ++ .../soc/esp32c61/include/soc/regi2c_saradc.h | 61 ++++++++++++------- 11 files changed, 119 insertions(+), 50 deletions(-) diff --git a/components/bootloader_support/private_include/bootloader_soc.h b/components/bootloader_support/private_include/bootloader_soc.h index d854112f6382..acce77cfb6c7 100644 --- a/components/bootloader_support/private_include/bootloader_soc.h +++ b/components/bootloader_support/private_include/bootloader_soc.h @@ -24,6 +24,14 @@ void bootloader_ana_super_wdt_reset_config(bool enable); */ void bootloader_ana_clock_glitch_reset_config(bool enable); +/** + * @brief Configure analog power glitch reset & glitch reset dref + * + * @param enable Boolean to enable or disable power glitch reset + * @param dref voltage threshold + */ +void bootloader_power_glitch_reset_config(bool enable, uint8_t dref); + #ifdef __cplusplus } #endif diff --git a/components/bootloader_support/src/esp32c5/bootloader_esp32c5.c b/components/bootloader_support/src/esp32c5/bootloader_esp32c5.c index 0f53f259ad5d..02b83fc1e8ca 100644 --- a/components/bootloader_support/src/esp32c5/bootloader_esp32c5.c +++ b/components/bootloader_support/src/esp32c5/bootloader_esp32c5.c @@ -92,11 +92,10 @@ static inline void bootloader_hardware_init(void) static inline void bootloader_ana_reset_config(void) { - // TODO: [ESP32C5] IDF-8650 - //Enable super WDT reset. - // bootloader_ana_super_wdt_reset_config(true); //Enable BOD reset (mode1) brownout_ll_ana_reset_enable(true); + uint8_t power_glitch_dref = 0; + bootloader_power_glitch_reset_config(true, power_glitch_dref); } esp_err_t bootloader_init(void) diff --git a/components/bootloader_support/src/esp32c5/bootloader_soc.c b/components/bootloader_support/src/esp32c5/bootloader_soc.c index 95238f511e9e..1e4335491b98 100644 --- a/components/bootloader_support/src/esp32c5/bootloader_soc.c +++ b/components/bootloader_support/src/esp32c5/bootloader_soc.c @@ -7,18 +7,29 @@ #include #include "soc/soc.h" #include "soc/lp_analog_peri_reg.h" -// TODO: [ESP32C5] IDF-8667 remove esp_log.h -#include "esp_log.h" - -void bootloader_ana_super_wdt_reset_config(bool enable) -{ - // TODO: [ESP32C5] IDF-8667 - ESP_EARLY_LOGW("bootloader", "bootloader_ana_super_wdt_reset_config() has not been implemented on C5 yet"); -} +#include "soc/pmu_reg.h" +#include "hal/regi2c_ctrl.h" +#include "soc/regi2c_saradc.h" //Not supported but common bootloader calls the function. Do nothing void bootloader_ana_clock_glitch_reset_config(bool enable) { - // TODO: [ESP32C5] IDF-8667, PM-207 (void)enable; } + +void bootloader_power_glitch_reset_config(bool enable, uint8_t dref) +{ + assert(dref < 8); + REG_SET_FIELD(LP_ANA_FIB_ENABLE_REG, LP_ANA_ANA_FIB_PWR_GLITCH_ENA, 0); + if (enable) { + SET_PERI_REG_MASK(PMU_RF_PWC_REG, PMU_PERIF_I2C_RSTB); + SET_PERI_REG_MASK(PMU_RF_PWC_REG, PMU_XPD_PERIF_I2C); + REGI2C_WRITE_MASK(I2C_SAR_ADC, POWER_GLITCH_DREF_VDET_PERIF, dref); + REGI2C_WRITE_MASK(I2C_SAR_ADC, POWER_GLITCH_DREF_VDET_VDDPST, dref); + REGI2C_WRITE_MASK(I2C_SAR_ADC, POWER_GLITCH_DREF_VDET_XTAL, dref); + REGI2C_WRITE_MASK(I2C_SAR_ADC, POWER_GLITCH_DREF_VDET_PLL, dref); + REG_SET_FIELD(LP_ANA_CK_GLITCH_CNTL_REG, LP_ANA_PWR_GLITCH_RESET_ENA, 0xf); + } else { + REG_SET_FIELD(LP_ANA_CK_GLITCH_CNTL_REG, LP_ANA_PWR_GLITCH_RESET_ENA, 0); + } +} diff --git a/components/bootloader_support/src/esp32c61/bootloader_esp32c61.c b/components/bootloader_support/src/esp32c61/bootloader_esp32c61.c index 8d62e4746e8b..d9b65d3e33b5 100644 --- a/components/bootloader_support/src/esp32c61/bootloader_esp32c61.c +++ b/components/bootloader_support/src/esp32c61/bootloader_esp32c61.c @@ -93,17 +93,17 @@ static inline void bootloader_hardware_init(void) static inline void bootloader_ana_reset_config(void) { - //Enable super WDT reset. - bootloader_ana_super_wdt_reset_config(true); //Enable BOD reset (mode1) brownout_ll_ana_reset_enable(true); + uint8_t power_glitch_dref = 0; + bootloader_power_glitch_reset_config(true, power_glitch_dref); } esp_err_t bootloader_init(void) { esp_err_t ret = ESP_OK; bootloader_hardware_init(); - // bootloader_ana_reset_config(); //TODO: [ESP32C61] IDF-9260 + bootloader_ana_reset_config(); bootloader_super_wdt_auto_feed(); // In RAM_APP, memory will be initialized in `call_start_cpu0` diff --git a/components/bootloader_support/src/esp32c61/bootloader_soc.c b/components/bootloader_support/src/esp32c61/bootloader_soc.c index e2876607d664..055fe372bdd8 100644 --- a/components/bootloader_support/src/esp32c61/bootloader_soc.c +++ b/components/bootloader_support/src/esp32c61/bootloader_soc.c @@ -7,19 +7,29 @@ #include #include "soc/soc.h" #include "soc/lp_analog_peri_reg.h" - -//TODO: [ESP32C61] IDF-9260, commented in verify code, check - -void bootloader_ana_super_wdt_reset_config(bool enable) -{ - //C61 doesn't support bypass super WDT reset - assert(enable); - // lp_analog_peri_reg.h updated, now following registers - // REG_CLR_BIT(LP_ANALOG_PERI_LP_ANA_FIB_ENABLE_REG, LP_ANALOG_PERI_LP_ANA_FIB_SUPER_WDT_RST); -} +#include "soc/pmu_reg.h" +#include "hal/regi2c_ctrl.h" +#include "soc/regi2c_saradc.h" //Not supported but common bootloader calls the function. Do nothing void bootloader_ana_clock_glitch_reset_config(bool enable) { (void)enable; } + +void bootloader_power_glitch_reset_config(bool enable, uint8_t dref) +{ + assert(dref < 8); + REG_SET_FIELD(LP_ANA_FIB_ENABLE_REG, LP_ANA_ANA_FIB_PWR_GLITCH_ENA, 0); + if (enable) { + SET_PERI_REG_MASK(PMU_RF_PWC_REG, PMU_PERIF_I2C_RSTB); + SET_PERI_REG_MASK(PMU_RF_PWC_REG, PMU_XPD_PERIF_I2C); + REGI2C_WRITE_MASK(I2C_SAR_ADC, POWER_GLITCH_DREF_VDET_PERIF, dref); + REGI2C_WRITE_MASK(I2C_SAR_ADC, POWER_GLITCH_DREF_VDET_VDDPST, dref); + REGI2C_WRITE_MASK(I2C_SAR_ADC, POWER_GLITCH_DREF_VDET_PLLBB, dref); + REGI2C_WRITE_MASK(I2C_SAR_ADC, POWER_GLITCH_DREF_VDET_PLL, dref); + REG_SET_FIELD(LP_ANA_POWER_GLITCH_CNTL_REG, LP_ANA_POWER_GLITCH_RESET_ENA, 0xf); + } else { + REG_SET_FIELD(LP_ANA_POWER_GLITCH_CNTL_REG, LP_ANA_POWER_GLITCH_RESET_ENA, 0); + } +} diff --git a/components/hal/esp32c5/include/hal/brownout_ll.h b/components/hal/esp32c5/include/hal/brownout_ll.h index 09dcb3cb5e9c..e103d2639c9e 100644 --- a/components/hal/esp32c5/include/hal/brownout_ll.h +++ b/components/hal/esp32c5/include/hal/brownout_ll.h @@ -113,8 +113,6 @@ static inline void brownout_ll_ana_reset_enable(bool enable) LP_ANA_PERI.fib_enable.val &= ~BROWNOUT_DETECTOR_LL_FIB_ENABLE; // then we can enable or disable if we want the BOD mode1 to reset the system LP_ANA_PERI.bod_mode1_cntl.bod_mode1_reset_ena = enable; - // Disable the power glitch detect. - LP_ANA_PERI.fib_enable.val &= ~(BIT2|BIT3|BIT4|BIT5); } /** diff --git a/components/hal/esp32c61/include/hal/brownout_ll.h b/components/hal/esp32c61/include/hal/brownout_ll.h index 7a4bb9e1841b..ac3b966d56a7 100644 --- a/components/hal/esp32c61/include/hal/brownout_ll.h +++ b/components/hal/esp32c61/include/hal/brownout_ll.h @@ -113,8 +113,6 @@ static inline void brownout_ll_ana_reset_enable(bool enable) LP_ANA.fib_enable.val &= ~BROWNOUT_DETECTOR_LL_FIB_ENABLE; // then we can enable or disable if we want the BOD mode1 to reset the system LP_ANA.bod_mode1_cntl.bod_mode1_reset_ena = enable; - // Disable the power glitch detect. - LP_ANA.fib_enable.val &= ~(BIT2|BIT3|BIT4|BIT5); } /** diff --git a/components/soc/esp32c5/include/soc/lp_analog_peri_reg.h b/components/soc/esp32c5/include/soc/lp_analog_peri_reg.h index edc9199d436f..13fd8e80e160 100644 --- a/components/soc/esp32c5/include/soc/lp_analog_peri_reg.h +++ b/components/soc/esp32c5/include/soc/lp_analog_peri_reg.h @@ -129,6 +129,11 @@ extern "C" { #define LP_ANA_ANA_FIB_ENA_V 0xFFFFFFFFU #define LP_ANA_ANA_FIB_ENA_S 0 +#define LP_ANA_ANA_FIB_PWR_GLITCH_ENA 0x0000000FU +#define LP_ANA_ANA_FIB_PWR_GLITCH_ENA_M (LP_ANA_ANA_FIB_PWR_GLITCH_ENA_V << LP_ANA_ANA_FIB_PWR_GLITCH_ENA_S) +#define LP_ANA_ANA_FIB_PWR_GLITCH_ENA_V 0x0000000FU +#define LP_ANA_ANA_FIB_PWR_GLITCH_ENA_S 2 + /** LP_ANA_INT_RAW_REG register * interrpt raw register */ diff --git a/components/soc/esp32c5/include/soc/regi2c_saradc.h b/components/soc/esp32c5/include/soc/regi2c_saradc.h index 120d51fc20d2..7fa3ff460262 100644 --- a/components/soc/esp32c5/include/soc/regi2c_saradc.h +++ b/components/soc/esp32c5/include/soc/regi2c_saradc.h @@ -81,3 +81,19 @@ #define ADC_SARADC2_EN_TOUT_ADDR 0x8 #define ADC_SARADC2_EN_TOUT_ADDR_MSB 0x2 #define ADC_SARADC2_EN_TOUT_ADDR_LSB 0x2 + +#define POWER_GLITCH_DREF_VDET_PERIF 11 +#define POWER_GLITCH_DREF_VDET_PERIF_MSB 2 +#define POWER_GLITCH_DREF_VDET_PERIF_LSB 0 + +#define POWER_GLITCH_DREF_VDET_VDDPST 11 +#define POWER_GLITCH_DREF_VDET_VDDPST_MSB 6 +#define POWER_GLITCH_DREF_VDET_VDDPST_LSB 4 + +#define POWER_GLITCH_DREF_VDET_XTAL 12 +#define POWER_GLITCH_DREF_VDET_XTAL_MSB 2 +#define POWER_GLITCH_DREF_VDET_XTAL_LSB 0 + +#define POWER_GLITCH_DREF_VDET_PLL 12 +#define POWER_GLITCH_DREF_VDET_PLL_MSB 6 +#define POWER_GLITCH_DREF_VDET_PLL_LSB 4 diff --git a/components/soc/esp32c61/include/soc/lp_analog_peri_reg.h b/components/soc/esp32c61/include/soc/lp_analog_peri_reg.h index cea0165480b7..d7398ecbda44 100644 --- a/components/soc/esp32c61/include/soc/lp_analog_peri_reg.h +++ b/components/soc/esp32c61/include/soc/lp_analog_peri_reg.h @@ -108,6 +108,11 @@ extern "C" { #define LP_ANA_ANA_FIB_ENA_V 0xFFFFFFFFU #define LP_ANA_ANA_FIB_ENA_S 0 +#define LP_ANA_ANA_FIB_PWR_GLITCH_ENA 0x0000000FU +#define LP_ANA_ANA_FIB_PWR_GLITCH_ENA_M (LP_ANA_ANA_FIB_PWR_GLITCH_ENA_V << LP_ANA_ANA_FIB_PWR_GLITCH_ENA_S) +#define LP_ANA_ANA_FIB_PWR_GLITCH_ENA_V 0x0000000FU +#define LP_ANA_ANA_FIB_PWR_GLITCH_ENA_S 2 + /** LP_ANA_INT_RAW_REG register * need_des */ diff --git a/components/soc/esp32c61/include/soc/regi2c_saradc.h b/components/soc/esp32c61/include/soc/regi2c_saradc.h index c7137f3bb007..0a80bbbc539f 100644 --- a/components/soc/esp32c61/include/soc/regi2c_saradc.h +++ b/components/soc/esp32c61/include/soc/regi2c_saradc.h @@ -18,41 +18,39 @@ #define I2C_SAR_ADC 0X69 #define I2C_SAR_ADC_HOSTID 0 -#define ADC_SAR1_ENCAL_GND_ADDR 0x7 -#define ADC_SAR1_ENCAL_GND_ADDR_MSB 5 -#define ADC_SAR1_ENCAL_GND_ADDR_LSB 5 -#define ADC_SAR2_ENCAL_GND_ADDR 0x7 -#define ADC_SAR2_ENCAL_GND_ADDR_MSB 7 -#define ADC_SAR2_ENCAL_GND_ADDR_LSB 7 + +#define ADC_SAR1_INITIAL_CODE_LOW_ADDR 0x0 +#define ADC_SAR1_INITIAL_CODE_LOW_ADDR_MSB 0x7 +#define ADC_SAR1_INITIAL_CODE_LOW_ADDR_LSB 0x0 #define ADC_SAR1_INITIAL_CODE_HIGH_ADDR 0x1 #define ADC_SAR1_INITIAL_CODE_HIGH_ADDR_MSB 0x3 #define ADC_SAR1_INITIAL_CODE_HIGH_ADDR_LSB 0x0 -#define ADC_SAR1_INITIAL_CODE_LOW_ADDR 0x0 -#define ADC_SAR1_INITIAL_CODE_LOW_ADDR_MSB 0x7 -#define ADC_SAR1_INITIAL_CODE_LOW_ADDR_LSB 0x0 +#define ADC_SAR1_SAMPLE_CYCLE_ADDR 0x2 +#define ADC_SAR1_SAMPLE_CYCLE_ADDR_MSB 0x2 +#define ADC_SAR1_SAMPLE_CYCLE_ADDR_LSB 0x0 -#define ADC_SAR2_INITIAL_CODE_HIGH_ADDR 0x4 -#define ADC_SAR2_INITIAL_CODE_HIGH_ADDR_MSB 0x3 -#define ADC_SAR2_INITIAL_CODE_HIGH_ADDR_LSB 0x0 +#define ADC_SAR1_DREF_ADDR 0x2 +#define ADC_SAR1_DREF_ADDR_MSB 0x6 +#define ADC_SAR1_DREF_ADDR_LSB 0x4 #define ADC_SAR2_INITIAL_CODE_LOW_ADDR 0x3 #define ADC_SAR2_INITIAL_CODE_LOW_ADDR_MSB 0x7 #define ADC_SAR2_INITIAL_CODE_LOW_ADDR_LSB 0x0 -#define ADC_SAR1_DREF_ADDR 0x2 -#define ADC_SAR1_DREF_ADDR_MSB 0x6 -#define ADC_SAR1_DREF_ADDR_LSB 0x4 +#define ADC_SAR2_INITIAL_CODE_HIGH_ADDR 0x4 +#define ADC_SAR2_INITIAL_CODE_HIGH_ADDR_MSB 0x3 +#define ADC_SAR2_INITIAL_CODE_HIGH_ADDR_LSB 0x0 #define ADC_SAR2_DREF_ADDR 0x5 #define ADC_SAR2_DREF_ADDR_MSB 0x6 #define ADC_SAR2_DREF_ADDR_LSB 0x4 -#define ADC_SAR1_SAMPLE_CYCLE_ADDR 0x2 -#define ADC_SAR1_SAMPLE_CYCLE_ADDR_MSB 0x2 -#define ADC_SAR1_SAMPLE_CYCLE_ADDR_LSB 0x0 +#define I2C_SARADC_TSENS_DAC 0x6 +#define I2C_SARADC_TSENS_DAC_MSB 3 +#define I2C_SARADC_TSENS_DAC_LSB 0 #define ADC_SARADC_DTEST_RTC_ADDR 0x7 #define ADC_SARADC_DTEST_RTC_ADDR_MSB 1 @@ -70,10 +68,31 @@ #define ADC_SARADC1_ENCAL_REF_ADDR_MSB 4 #define ADC_SARADC1_ENCAL_REF_ADDR_LSB 4 +#define ADC_SAR1_ENCAL_GND_ADDR 0x7 +#define ADC_SAR1_ENCAL_GND_ADDR_MSB 5 +#define ADC_SAR1_ENCAL_GND_ADDR_LSB 5 + #define ADC_SARADC2_ENCAL_REF_ADDR 0x7 #define ADC_SARADC2_ENCAL_REF_ADDR_MSB 6 #define ADC_SARADC2_ENCAL_REF_ADDR_LSB 6 -#define I2C_SARADC_TSENS_DAC 0x6 -#define I2C_SARADC_TSENS_DAC_MSB 3 -#define I2C_SARADC_TSENS_DAC_LSB 0 +#define ADC_SAR2_ENCAL_GND_ADDR 0x7 +#define ADC_SAR2_ENCAL_GND_ADDR_MSB 7 +#define ADC_SAR2_ENCAL_GND_ADDR_LSB 7 + + +#define POWER_GLITCH_DREF_VDET_PERIF 11 +#define POWER_GLITCH_DREF_VDET_PERIF_MSB 2 +#define POWER_GLITCH_DREF_VDET_PERIF_LSB 0 + +#define POWER_GLITCH_DREF_VDET_VDDPST 11 +#define POWER_GLITCH_DREF_VDET_VDDPST_MSB 6 +#define POWER_GLITCH_DREF_VDET_VDDPST_LSB 4 + +#define POWER_GLITCH_DREF_VDET_PLLBB 12 +#define POWER_GLITCH_DREF_VDET_PLLBB_MSB 2 +#define POWER_GLITCH_DREF_VDET_PLLBB_LSB 0 + +#define POWER_GLITCH_DREF_VDET_PLL 12 +#define POWER_GLITCH_DREF_VDET_PLL_MSB 6 +#define POWER_GLITCH_DREF_VDET_PLL_LSB 4 From 3e443a9033aa215c136284bfbbda911ba58e0cdf Mon Sep 17 00:00:00 2001 From: Marius Vikhammer Date: Sat, 14 Sep 2024 11:26:09 +0800 Subject: [PATCH 069/365] fix(system): fixed docs for ESP_SYSTEM_ALLOW_RTC_FAST_MEM_AS_HEAP, enabled on H2 --- components/esp_system/Kconfig | 15 +- components/mbedtls/test_apps/main/test_aes.c | 169 +++++++++--------- .../mbedtls/test_apps/main/test_mbedtls_sha.c | 3 +- 3 files changed, 91 insertions(+), 96 deletions(-) diff --git a/components/esp_system/Kconfig b/components/esp_system/Kconfig index e597eac88faa..8b0d24a0dcdf 100644 --- a/components/esp_system/Kconfig +++ b/components/esp_system/Kconfig @@ -92,14 +92,8 @@ menu "ESP System Settings" config ESP_SYSTEM_RTC_FAST_MEM_AS_HEAP_DEPCHECK bool - default y if IDF_TARGET_ESP32 && ESP_SYSTEM_SINGLE_CORE_MODE - default y if IDF_TARGET_ESP32S2 - default y if IDF_TARGET_ESP32C3 - default y if IDF_TARGET_ESP32S3 - default y if IDF_TARGET_ESP32C6 - default n if IDF_TARGET_ESP32H2 # IDF-5667 - default y if IDF_TARGET_ESP32P4 - default y if IDF_TARGET_ESP32C5 + default n if IDF_TARGET_ESP32 && !ESP_SYSTEM_SINGLE_CORE_MODE + default y depends on SOC_RTC_FAST_MEM_SUPPORTED config ESP_SYSTEM_ALLOW_RTC_FAST_MEM_AS_HEAP @@ -108,9 +102,8 @@ menu "ESP System Settings" depends on ESP_SYSTEM_RTC_FAST_MEM_AS_HEAP_DEPCHECK help This config option allows to add RTC fast memory region to system heap with capability - similar to that of DRAM region but without DMA. This memory will be consumed first per - heap initialization order by early startup services and scheduler related code. Speed - wise RTC fast memory operates on APB clock and hence does not have much performance impact. + similar to that of DRAM region but without DMA. Speed wise RTC fast memory operates on + APB clock and hence does not have much performance impact. config ESP_SYSTEM_USE_EH_FRAME bool "Generate and use eh_frame for backtracing" diff --git a/components/mbedtls/test_apps/main/test_aes.c b/components/mbedtls/test_apps/main/test_aes.c index 5ac71e82ec90..1e3e9865146a 100644 --- a/components/mbedtls/test_apps/main/test_aes.c +++ b/components/mbedtls/test_apps/main/test_aes.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Unlicense OR CC0-1.0 */ @@ -67,7 +67,7 @@ static const uint8_t iv[] = { print(as_c_array(plain)) ct = encryptor.update(plain) + encryptor.finalize() - print("Chipertext: {}".format(as_c_array(ct))) + print("Ciphertext: {}".format(as_c_array(ct))) */ TEST_CASE("mbedtls CBC AES-256 test", "[aes]") { @@ -85,11 +85,11 @@ TEST_CASE("mbedtls CBC AES-256 test", "[aes]") memcpy(nonce, iv, 16); // allocate internal memory - uint8_t *chipertext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); + uint8_t *ciphertext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); uint8_t *plaintext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); uint8_t *decryptedtext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); - TEST_ASSERT_NOT_NULL(chipertext); + TEST_ASSERT_NOT_NULL(ciphertext); TEST_ASSERT_NOT_NULL(plaintext); TEST_ASSERT_NOT_NULL(decryptedtext); @@ -100,19 +100,19 @@ TEST_CASE("mbedtls CBC AES-256 test", "[aes]") memset(decryptedtext, 0x0, SZ); // Encrypt - mbedtls_aes_crypt_cbc(&ctx, MBEDTLS_AES_ENCRYPT, SZ, nonce, plaintext, chipertext); - TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher_end, chipertext + SZ - 32, 32); + mbedtls_aes_crypt_cbc(&ctx, MBEDTLS_AES_ENCRYPT, SZ, nonce, plaintext, ciphertext); + TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher_end, ciphertext + SZ - 32, 32); // Decrypt memcpy(nonce, iv, 16); mbedtls_aes_setkey_dec(&ctx, key_256, 256); - mbedtls_aes_crypt_cbc(&ctx, MBEDTLS_AES_DECRYPT, SZ, nonce, chipertext, decryptedtext); + mbedtls_aes_crypt_cbc(&ctx, MBEDTLS_AES_DECRYPT, SZ, nonce, ciphertext, decryptedtext); TEST_ASSERT_EQUAL_HEX8_ARRAY(plaintext, decryptedtext, SZ); mbedtls_aes_free(&ctx); free(plaintext); - free(chipertext); + free(ciphertext); free(decryptedtext); } @@ -134,11 +134,11 @@ TEST_CASE("mbedtls CBC AES-256 DMA buffer align test", "[aes]") memcpy(nonce, iv, 16); // allocate internal memory - uint8_t *chipertext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); + uint8_t *ciphertext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); uint8_t *plaintext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); uint8_t *decryptedtext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); - TEST_ASSERT_NOT_NULL(chipertext); + TEST_ASSERT_NOT_NULL(ciphertext); TEST_ASSERT_NOT_NULL(plaintext); TEST_ASSERT_NOT_NULL(decryptedtext); @@ -149,19 +149,19 @@ TEST_CASE("mbedtls CBC AES-256 DMA buffer align test", "[aes]") memset(decryptedtext, 0x0, SZ); // Encrypt - mbedtls_aes_crypt_cbc(&ctx, MBEDTLS_AES_ENCRYPT, SZ, nonce, plaintext, chipertext); - TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher_end, chipertext + SZ - 32, 32); + mbedtls_aes_crypt_cbc(&ctx, MBEDTLS_AES_ENCRYPT, SZ, nonce, plaintext, ciphertext); + TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher_end, ciphertext + SZ - 32, 32); // Decrypt memcpy(nonce, iv, 16); mbedtls_aes_setkey_dec(&ctx, key_256, 256); - mbedtls_aes_crypt_cbc(&ctx, MBEDTLS_AES_DECRYPT, SZ, nonce, chipertext, decryptedtext); + mbedtls_aes_crypt_cbc(&ctx, MBEDTLS_AES_DECRYPT, SZ, nonce, ciphertext, decryptedtext); TEST_ASSERT_EQUAL_HEX8_ARRAY(plaintext, decryptedtext, SZ); mbedtls_aes_free(&ctx); free(plaintext); - free(chipertext); + free(ciphertext); free(decryptedtext); } @@ -183,11 +183,11 @@ TEST_CASE("mbedtls CTR AES-256 test", "[aes]") memcpy(nonce, iv, 16); // allocate internal memory - uint8_t *chipertext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); + uint8_t *ciphertext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); uint8_t *plaintext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); uint8_t *decryptedtext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); - TEST_ASSERT_NOT_NULL(chipertext); + TEST_ASSERT_NOT_NULL(ciphertext); TEST_ASSERT_NOT_NULL(plaintext); TEST_ASSERT_NOT_NULL(decryptedtext); @@ -198,19 +198,19 @@ TEST_CASE("mbedtls CTR AES-256 test", "[aes]") memset(decryptedtext, 0x0, SZ); // Encrypt - mbedtls_aes_crypt_ctr(&ctx, SZ, &nc_off, nonce, stream_block, plaintext, chipertext); - TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher_end, chipertext + SZ - 32, 32); + mbedtls_aes_crypt_ctr(&ctx, SZ, &nc_off, nonce, stream_block, plaintext, ciphertext); + TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher_end, ciphertext + SZ - 32, 32); // Decrypt nc_off = 0; memcpy(nonce, iv, 16); - mbedtls_aes_crypt_ctr(&ctx, SZ, &nc_off, nonce, stream_block, chipertext, decryptedtext); + mbedtls_aes_crypt_ctr(&ctx, SZ, &nc_off, nonce, stream_block, ciphertext, decryptedtext); TEST_ASSERT_EQUAL_HEX8_ARRAY(plaintext, decryptedtext, SZ); mbedtls_aes_free(&ctx); free(plaintext); - free(chipertext); + free(ciphertext); free(decryptedtext); } @@ -231,11 +231,11 @@ TEST_CASE("mbedtls OFB AES-256 test", "[aes]") memcpy(nonce, iv, 16); // allocate internal memory - uint8_t *chipertext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); + uint8_t *ciphertext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); uint8_t *plaintext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); uint8_t *decryptedtext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); - TEST_ASSERT_NOT_NULL(chipertext); + TEST_ASSERT_NOT_NULL(ciphertext); TEST_ASSERT_NOT_NULL(plaintext); TEST_ASSERT_NOT_NULL(decryptedtext); @@ -246,19 +246,19 @@ TEST_CASE("mbedtls OFB AES-256 test", "[aes]") memset(decryptedtext, 0x0, SZ); // Encrypt - mbedtls_aes_crypt_ofb(&ctx, SZ, &nc_off, nonce, plaintext, chipertext); - TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher_end, chipertext + SZ - 32, 32); + mbedtls_aes_crypt_ofb(&ctx, SZ, &nc_off, nonce, plaintext, ciphertext); + TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher_end, ciphertext + SZ - 32, 32); // Decrypt nc_off = 0; memcpy(nonce, iv, 16); - mbedtls_aes_crypt_ofb(&ctx, SZ, &nc_off, nonce, chipertext, decryptedtext); + mbedtls_aes_crypt_ofb(&ctx, SZ, &nc_off, nonce, ciphertext, decryptedtext); TEST_ASSERT_EQUAL_HEX8_ARRAY(plaintext, decryptedtext, SZ); mbedtls_aes_free(&ctx); free(plaintext); - free(chipertext); + free(ciphertext); free(decryptedtext); } @@ -278,11 +278,11 @@ TEST_CASE("mbedtls CFB-8 AES-256 test", "[aes]") memcpy(nonce, iv, 16); // allocate internal memory - uint8_t *chipertext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); + uint8_t *ciphertext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); uint8_t *plaintext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); uint8_t *decryptedtext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); - TEST_ASSERT_NOT_NULL(chipertext); + TEST_ASSERT_NOT_NULL(ciphertext); TEST_ASSERT_NOT_NULL(plaintext); TEST_ASSERT_NOT_NULL(decryptedtext); @@ -293,18 +293,18 @@ TEST_CASE("mbedtls CFB-8 AES-256 test", "[aes]") memset(decryptedtext, 0x0, SZ); // Encrypt - mbedtls_aes_crypt_cfb8(&ctx, MBEDTLS_AES_ENCRYPT, SZ, nonce, plaintext, chipertext); - TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher_end, chipertext + SZ - 32, 32); + mbedtls_aes_crypt_cfb8(&ctx, MBEDTLS_AES_ENCRYPT, SZ, nonce, plaintext, ciphertext); + TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher_end, ciphertext + SZ - 32, 32); // Decrypt memcpy(nonce, iv, 16); - mbedtls_aes_crypt_cfb8(&ctx, MBEDTLS_AES_DECRYPT, SZ, nonce, chipertext, decryptedtext); + mbedtls_aes_crypt_cfb8(&ctx, MBEDTLS_AES_DECRYPT, SZ, nonce, ciphertext, decryptedtext); TEST_ASSERT_EQUAL_HEX8_ARRAY(plaintext, decryptedtext, SZ); mbedtls_aes_free(&ctx); free(plaintext); - free(chipertext); + free(ciphertext); free(decryptedtext); } @@ -325,11 +325,11 @@ TEST_CASE("mbedtls CFB-128 AES-256 test", "[aes]") memcpy(nonce, iv, 16); // allocate internal memory - uint8_t *chipertext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); + uint8_t *ciphertext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); uint8_t *plaintext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); uint8_t *decryptedtext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); - TEST_ASSERT_NOT_NULL(chipertext); + TEST_ASSERT_NOT_NULL(ciphertext); TEST_ASSERT_NOT_NULL(plaintext); TEST_ASSERT_NOT_NULL(decryptedtext); @@ -340,19 +340,19 @@ TEST_CASE("mbedtls CFB-128 AES-256 test", "[aes]") memset(decryptedtext, 0x0, SZ); // Encrypt - mbedtls_aes_crypt_cfb128(&ctx, MBEDTLS_AES_ENCRYPT, SZ, &nc_off, nonce, plaintext, chipertext); - TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher_end, chipertext + SZ - 32, 32); + mbedtls_aes_crypt_cfb128(&ctx, MBEDTLS_AES_ENCRYPT, SZ, &nc_off, nonce, plaintext, ciphertext); + TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher_end, ciphertext + SZ - 32, 32); // Decrypt nc_off = 0; memcpy(nonce, iv, 16); - mbedtls_aes_crypt_cfb128(&ctx, MBEDTLS_AES_DECRYPT, SZ, &nc_off, nonce, chipertext, decryptedtext); + mbedtls_aes_crypt_cfb128(&ctx, MBEDTLS_AES_DECRYPT, SZ, &nc_off, nonce, ciphertext, decryptedtext); TEST_ASSERT_EQUAL_HEX8_ARRAY(plaintext, decryptedtext, SZ); mbedtls_aes_free(&ctx); free(plaintext); - free(chipertext); + free(ciphertext); free(decryptedtext); } @@ -401,11 +401,11 @@ static void aes_ctr_stream_test(void) memset(key, 0x44, 16); // allocate internal memory - uint8_t *chipertext = heap_caps_malloc(SZ, MALLOC_CAP_DMA | MALLOC_CAP_8BIT | MALLOC_CAP_INTERNAL); + uint8_t *ciphertext = heap_caps_malloc(SZ, MALLOC_CAP_DMA | MALLOC_CAP_8BIT | MALLOC_CAP_INTERNAL); uint8_t *plaintext = heap_caps_malloc(SZ, MALLOC_CAP_DMA | MALLOC_CAP_8BIT | MALLOC_CAP_INTERNAL); uint8_t *decryptedtext = heap_caps_malloc(SZ, MALLOC_CAP_DMA | MALLOC_CAP_8BIT | MALLOC_CAP_INTERNAL); - TEST_ASSERT_NOT_NULL(chipertext); + TEST_ASSERT_NOT_NULL(ciphertext); TEST_ASSERT_NOT_NULL(plaintext); TEST_ASSERT_NOT_NULL(decryptedtext); @@ -419,7 +419,7 @@ static void aes_ctr_stream_test(void) for (int bytes_to_process = 1; bytes_to_process < SZ; bytes_to_process++) { ESP_LOGD("test", "bytes_to_process %d", bytes_to_process); memset(nonce, 0xEE, 16); - memset(chipertext, 0x0, SZ); + memset(ciphertext, 0x0, SZ); memset(decryptedtext, 0x0, SZ); size_t offset = 0; @@ -429,12 +429,12 @@ static void aes_ctr_stream_test(void) size_t length = (idx + bytes_to_process > SZ) ? (SZ - idx) : bytes_to_process; mbedtls_aes_crypt_ctr(&ctx, length, &offset, nonce, - stream_block, plaintext + idx, chipertext + idx ); + stream_block, plaintext + idx, ciphertext + idx ); } ESP_LOG_BUFFER_HEXDUMP("expected", expected_cipher, SZ, ESP_LOG_DEBUG); - ESP_LOG_BUFFER_HEXDUMP("actual ", chipertext, SZ, ESP_LOG_DEBUG); + ESP_LOG_BUFFER_HEXDUMP("actual ", ciphertext, SZ, ESP_LOG_DEBUG); - TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher, chipertext, SZ); + TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher, ciphertext, SZ); // Decrypt memset(nonce, 0xEE, 16); @@ -444,7 +444,7 @@ static void aes_ctr_stream_test(void) // Limit length of last call to avoid exceeding buffer size size_t length = (idx + bytes_to_process > SZ) ? (SZ - idx) : bytes_to_process; mbedtls_aes_crypt_ctr(&ctx, length, &offset, nonce, - stream_block, chipertext + idx, decryptedtext + idx ); + stream_block, ciphertext + idx, decryptedtext + idx ); } ESP_LOG_BUFFER_HEXDUMP("decrypted", decryptedtext, SZ, ESP_LOG_DEBUG); TEST_ASSERT_EQUAL_HEX8_ARRAY(plaintext, decryptedtext, SZ); @@ -452,7 +452,7 @@ static void aes_ctr_stream_test(void) mbedtls_aes_free(&ctx); free(plaintext); - free(chipertext); + free(ciphertext); free(decryptedtext); } @@ -505,11 +505,11 @@ TEST_CASE("mbedtls OFB stream test", "[aes]") memset(key, 0x44, 16); // allocate internal memory - uint8_t *chipertext = heap_caps_malloc(SZ, MALLOC_CAP_DMA | MALLOC_CAP_8BIT | MALLOC_CAP_INTERNAL); + uint8_t *ciphertext = heap_caps_malloc(SZ, MALLOC_CAP_DMA | MALLOC_CAP_8BIT | MALLOC_CAP_INTERNAL); uint8_t *plaintext = heap_caps_malloc(SZ, MALLOC_CAP_DMA | MALLOC_CAP_8BIT | MALLOC_CAP_INTERNAL); uint8_t *decryptedtext = heap_caps_malloc(SZ, MALLOC_CAP_DMA | MALLOC_CAP_8BIT | MALLOC_CAP_INTERNAL); - TEST_ASSERT_NOT_NULL(chipertext); + TEST_ASSERT_NOT_NULL(ciphertext); TEST_ASSERT_NOT_NULL(plaintext); TEST_ASSERT_NOT_NULL(decryptedtext); @@ -529,10 +529,10 @@ TEST_CASE("mbedtls OFB stream test", "[aes]") for (int idx = 0; idx < SZ; idx = idx + bytes_to_process) { // Limit length of last call to avoid exceeding buffer size size_t length = ( (idx + bytes_to_process) > SZ) ? (SZ - idx) : bytes_to_process; - mbedtls_aes_crypt_ofb(&ctx, length, &offset, iv, plaintext + idx, chipertext + idx); + mbedtls_aes_crypt_ofb(&ctx, length, &offset, iv, plaintext + idx, ciphertext + idx); } - TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher, chipertext, SZ); + TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher, ciphertext, SZ); // Decrypt memset(iv, 0xEE, 16); @@ -541,14 +541,14 @@ TEST_CASE("mbedtls OFB stream test", "[aes]") for (int idx = 0; idx < SZ; idx = idx + bytes_to_process) { // Limit length of last call to avoid exceeding buffer size size_t length = (idx + bytes_to_process > SZ) ? (SZ - idx) : bytes_to_process; - mbedtls_aes_crypt_ofb(&ctx, length, &offset, iv, chipertext + idx, decryptedtext + idx); + mbedtls_aes_crypt_ofb(&ctx, length, &offset, iv, ciphertext + idx, decryptedtext + idx); } TEST_ASSERT_EQUAL_HEX8_ARRAY(plaintext, decryptedtext, SZ); } mbedtls_aes_free(&ctx); free(plaintext); - free(chipertext); + free(ciphertext); free(decryptedtext); } @@ -595,11 +595,11 @@ TEST_CASE("mbedtls CFB8 stream test", "[aes]") memset(key, 0x44, 16); // allocate internal memory - uint8_t *chipertext = heap_caps_malloc(SZ, MALLOC_CAP_DMA | MALLOC_CAP_8BIT | MALLOC_CAP_INTERNAL); + uint8_t *ciphertext = heap_caps_malloc(SZ, MALLOC_CAP_DMA | MALLOC_CAP_8BIT | MALLOC_CAP_INTERNAL); uint8_t *plaintext = heap_caps_malloc(SZ, MALLOC_CAP_DMA | MALLOC_CAP_8BIT | MALLOC_CAP_INTERNAL); uint8_t *decryptedtext = heap_caps_malloc(SZ, MALLOC_CAP_DMA | MALLOC_CAP_8BIT | MALLOC_CAP_INTERNAL); - TEST_ASSERT_NOT_NULL(chipertext); + TEST_ASSERT_NOT_NULL(ciphertext); TEST_ASSERT_NOT_NULL(plaintext); TEST_ASSERT_NOT_NULL(decryptedtext); @@ -616,16 +616,16 @@ TEST_CASE("mbedtls CFB8 stream test", "[aes]") for (int idx = 0; idx < SZ; idx = idx + bytes_to_process) { // Limit length of last call to avoid exceeding buffer size size_t length = ( (idx + bytes_to_process) > SZ) ? (SZ - idx) : bytes_to_process; - mbedtls_aes_crypt_cfb8(&ctx, MBEDTLS_AES_ENCRYPT, length, iv, plaintext + idx, chipertext + idx); + mbedtls_aes_crypt_cfb8(&ctx, MBEDTLS_AES_ENCRYPT, length, iv, plaintext + idx, ciphertext + idx); } - TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher, chipertext, SZ); + TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher, ciphertext, SZ); memset(iv, 0xEE, 16); for (int idx = 0; idx < SZ; idx = idx + bytes_to_process) { // Limit length of last call to avoid exceeding buffer size size_t length = ( (idx + bytes_to_process) > SZ) ? (SZ - idx) : bytes_to_process; - mbedtls_aes_crypt_cfb8(&ctx, MBEDTLS_AES_DECRYPT, length, iv, chipertext + idx, decryptedtext + idx); + mbedtls_aes_crypt_cfb8(&ctx, MBEDTLS_AES_DECRYPT, length, iv, ciphertext + idx, decryptedtext + idx); } TEST_ASSERT_EQUAL_HEX8_ARRAY(plaintext, decryptedtext, SZ); @@ -633,7 +633,7 @@ TEST_CASE("mbedtls CFB8 stream test", "[aes]") mbedtls_aes_free(&ctx); free(plaintext); - free(chipertext); + free(ciphertext); free(decryptedtext); } @@ -680,11 +680,11 @@ TEST_CASE("mbedtls CFB128 stream test", "[aes]") memset(key, 0x44, 16); // allocate internal memory - uint8_t *chipertext = heap_caps_malloc(SZ, MALLOC_CAP_DMA | MALLOC_CAP_8BIT | MALLOC_CAP_INTERNAL); + uint8_t *ciphertext = heap_caps_malloc(SZ, MALLOC_CAP_DMA | MALLOC_CAP_8BIT | MALLOC_CAP_INTERNAL); uint8_t *plaintext = heap_caps_malloc(SZ, MALLOC_CAP_DMA | MALLOC_CAP_8BIT | MALLOC_CAP_INTERNAL); uint8_t *decryptedtext = heap_caps_malloc(SZ, MALLOC_CAP_DMA | MALLOC_CAP_8BIT | MALLOC_CAP_INTERNAL); - TEST_ASSERT_NOT_NULL(chipertext); + TEST_ASSERT_NOT_NULL(ciphertext); TEST_ASSERT_NOT_NULL(plaintext); TEST_ASSERT_NOT_NULL(decryptedtext); @@ -703,24 +703,24 @@ TEST_CASE("mbedtls CFB128 stream test", "[aes]") for (int idx = 0; idx < SZ; idx = idx + bytes_to_process) { // Limit length of last call to avoid exceeding buffer size size_t length = ( (idx + bytes_to_process) > SZ) ? (SZ - idx) : bytes_to_process; - mbedtls_aes_crypt_cfb128(&ctx, MBEDTLS_AES_ENCRYPT, length, &offset, iv, plaintext + idx, chipertext + idx); + mbedtls_aes_crypt_cfb128(&ctx, MBEDTLS_AES_ENCRYPT, length, &offset, iv, plaintext + idx, ciphertext + idx); } - TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher, chipertext, SZ); + TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher, ciphertext, SZ); offset = 0; memset(iv, 0xEE, 16); for (int idx = 0; idx < SZ; idx = idx + bytes_to_process) { // Limit length of last call to avoid exceeding buffer size size_t length = ( (idx + bytes_to_process) > SZ) ? (SZ - idx) : bytes_to_process; - mbedtls_aes_crypt_cfb128(&ctx, MBEDTLS_AES_DECRYPT, length, &offset, iv, chipertext + idx, decryptedtext + idx); + mbedtls_aes_crypt_cfb128(&ctx, MBEDTLS_AES_DECRYPT, length, &offset, iv, ciphertext + idx, decryptedtext + idx); } TEST_ASSERT_EQUAL_HEX8_ARRAY(plaintext, decryptedtext, SZ); mbedtls_aes_free(&ctx); free(plaintext); - free(chipertext); + free(ciphertext); free(decryptedtext); } @@ -804,11 +804,11 @@ TEST_CASE("mbedtls OFB, chained DMA descriptors", "[aes]") memcpy(nonce, iv, 16); // allocate internal memory - uint8_t *chipertext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); + uint8_t *ciphertext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); uint8_t *plaintext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); uint8_t *decryptedtext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); - TEST_ASSERT_NOT_NULL(chipertext); + TEST_ASSERT_NOT_NULL(ciphertext); TEST_ASSERT_NOT_NULL(plaintext); TEST_ASSERT_NOT_NULL(decryptedtext); @@ -819,20 +819,20 @@ TEST_CASE("mbedtls OFB, chained DMA descriptors", "[aes]") memset(decryptedtext, 0x0, SZ); // Encrypt - mbedtls_aes_crypt_ofb(&ctx, SZ, &nc_off, nonce, plaintext, chipertext); - TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher_end, chipertext + SZ - 32, 32); + mbedtls_aes_crypt_ofb(&ctx, SZ, &nc_off, nonce, plaintext, ciphertext); + TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher_end, ciphertext + SZ - 32, 32); // Decrypt nc_off = 0; memcpy(nonce, iv, 16); - mbedtls_aes_crypt_ofb(&ctx, SZ, &nc_off, nonce, chipertext, decryptedtext); + mbedtls_aes_crypt_ofb(&ctx, SZ, &nc_off, nonce, ciphertext, decryptedtext); TEST_ASSERT_EQUAL_HEX8_ARRAY(plaintext, decryptedtext, SZ); mbedtls_aes_free(&ctx); free(plaintext); - free(chipertext); + free(ciphertext); free(decryptedtext); } @@ -858,11 +858,11 @@ void aes_ctr_alignment_test(uint32_t input_buf_caps, uint32_t output_buf_caps) memset(key, 0x1E, 16); // allocate memory according the requested caps - uint8_t *chipertext = heap_caps_malloc(SZ + ALIGNMENT_SIZE_BYTES, output_buf_caps); + uint8_t *ciphertext = heap_caps_malloc(SZ + ALIGNMENT_SIZE_BYTES, output_buf_caps); uint8_t *plaintext = heap_caps_malloc(SZ + ALIGNMENT_SIZE_BYTES, input_buf_caps); uint8_t *decryptedtext = heap_caps_malloc(SZ, MALLOC_CAP_DMA | MALLOC_CAP_8BIT | MALLOC_CAP_INTERNAL); - TEST_ASSERT_NOT_NULL(chipertext); + TEST_ASSERT_NOT_NULL(ciphertext); TEST_ASSERT_NOT_NULL(plaintext); TEST_ASSERT_NOT_NULL(decryptedtext); @@ -877,14 +877,14 @@ void aes_ctr_alignment_test(uint32_t input_buf_caps, uint32_t output_buf_caps) // Encrypt with input buffer in external ram offset = 0; memset(nonce, 0x2F, 16); - mbedtls_aes_crypt_ctr(&ctx, SZ, &offset, nonce, stream_block, plaintext + i, chipertext + i); - TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher_ctr_end, chipertext + i + SZ - 32, 32); + mbedtls_aes_crypt_ctr(&ctx, SZ, &offset, nonce, stream_block, plaintext + i, ciphertext + i); + TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher_ctr_end, ciphertext + i + SZ - 32, 32); // Decrypt offset = 0; memset(nonce, 0x2F, 16); // Decrypt with input buffer in instruction memory, the crypto DMA can't access this - mbedtls_aes_crypt_ctr(&ctx, SZ, &offset, nonce, stream_block, chipertext + i, decryptedtext); + mbedtls_aes_crypt_ctr(&ctx, SZ, &offset, nonce, stream_block, ciphertext + i, decryptedtext); TEST_ASSERT_EQUAL_HEX8_ARRAY(plaintext, decryptedtext, SZ); @@ -892,7 +892,7 @@ void aes_ctr_alignment_test(uint32_t input_buf_caps, uint32_t output_buf_caps) mbedtls_aes_free(&ctx); free(plaintext); - free(chipertext); + free(ciphertext); free(decryptedtext); } @@ -1483,10 +1483,10 @@ void aes_ext_flash_ctr_test(uint32_t output_buf_caps) memset(nonce, 0x2F, 16); memset(key, 0x1E, 16); - uint8_t *chipertext = heap_caps_malloc(SZ, output_buf_caps); + uint8_t *ciphertext = heap_caps_malloc(SZ, output_buf_caps); uint8_t *decryptedtext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT | MALLOC_CAP_DMA | MALLOC_CAP_INTERNAL); - TEST_ASSERT_NOT_NULL(chipertext); + TEST_ASSERT_NOT_NULL(ciphertext); TEST_ASSERT_NOT_NULL(decryptedtext); mbedtls_aes_init(&ctx); @@ -1497,19 +1497,19 @@ void aes_ext_flash_ctr_test(uint32_t output_buf_caps) // Encrypt with input buffer in external flash offset = 0; memset(nonce, 0x2F, 16); - mbedtls_aes_crypt_ctr(&ctx, SZ, &offset, nonce, stream_block, long_input, chipertext); - TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher_long_input_end, chipertext + SZ - 32, 32); + mbedtls_aes_crypt_ctr(&ctx, SZ, &offset, nonce, stream_block, long_input, ciphertext); + TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher_long_input_end, ciphertext + SZ - 32, 32); // Decrypt offset = 0; memset(nonce, 0x2F, 16); // Decrypt with input buffer in external flash, the crypto DMA can't access this - mbedtls_aes_crypt_ctr(&ctx, SZ, &offset, nonce, stream_block, chipertext, decryptedtext); + mbedtls_aes_crypt_ctr(&ctx, SZ, &offset, nonce, stream_block, ciphertext, decryptedtext); TEST_ASSERT_EQUAL_HEX8_ARRAY(long_input, decryptedtext, SZ); mbedtls_aes_free(&ctx); - free(chipertext); + free(ciphertext); free(decryptedtext); } @@ -1540,7 +1540,8 @@ static void __attribute__((unused)) aes_ctr_stream_test_task(void *pv) vTaskDelete(NULL); } -#if CONFIG_ESP_SYSTEM_RTC_FAST_MEM_AS_HEAP_DEPCHECK +#if CONFIG_ESP_SYSTEM_RTC_FAST_MEM_AS_HEAP_DEPCHECK && !CONFIG_IDF_TARGET_ESP32H2 +// Not enough rtc memory for test on H2 TEST_CASE("mbedtls AES stack in RTC RAM", "[mbedtls]") { @@ -1561,7 +1562,7 @@ TEST_CASE("mbedtls AES stack in RTC RAM", "[mbedtls]") vSemaphoreDelete(done_sem); } -#endif //CONFIG_ESP_SYSTEM_RTC_FAST_MEM_AS_HEAP_DEPCHECK +#endif //CONFIG_ESP_SYSTEM_RTC_FAST_MEM_AS_HEAP_DEPCHECK && !CONFIG_IDF_TARGET_ESP32H2 #if CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY && CONFIG_SPIRAM_USE_MALLOC diff --git a/components/mbedtls/test_apps/main/test_mbedtls_sha.c b/components/mbedtls/test_apps/main/test_mbedtls_sha.c index 003b35db8b5a..0d07fc7ff1c3 100644 --- a/components/mbedtls/test_apps/main/test_mbedtls_sha.c +++ b/components/mbedtls/test_apps/main/test_mbedtls_sha.c @@ -563,7 +563,8 @@ TEST_CASE("mbedtls SHA256 PSRAM DMA large buffer", "[hw_crypto]") #endif //CONFIG_SPIRAM_USE_MALLOC -#if CONFIG_ESP_SYSTEM_RTC_FAST_MEM_AS_HEAP_DEPCHECK +#if CONFIG_ESP_SYSTEM_RTC_FAST_MEM_AS_HEAP_DEPCHECK && !CONFIG_IDF_TARGET_ESP32H2 +// Not enough rtc memory for test on H2 TEST_CASE("mbedtls SHA stack in RTC RAM", "[mbedtls]") { From c672db530bc91efa6f0647fbb85813f546997140 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20M=C3=BAdry?= Date: Tue, 24 Sep 2024 11:52:14 +0200 Subject: [PATCH 070/365] docs(nvs): Document nvs_check.py functions --- .../nvs_flash/nvs_partition_tool/nvs_check.py | 76 ++++++++++++++++--- 1 file changed, 65 insertions(+), 11 deletions(-) diff --git a/components/nvs_flash/nvs_partition_tool/nvs_check.py b/components/nvs_flash/nvs_partition_tool/nvs_check.py index b6a4da3abafd..ca2cd4680a40 100644 --- a/components/nvs_flash/nvs_partition_tool/nvs_check.py +++ b/components/nvs_flash/nvs_partition_tool/nvs_check.py @@ -22,6 +22,22 @@ def check_partition_size(nvs_partition: NVS_Partition, nvs_log: NVS_Logger) -> bool: + """ Checks if the partition is large enough and has enough pages + """ + if len(nvs_partition.raw_data) / 0x1000 < 3: + nvs_log.info( + nvs_log.yellow( + 'NVS Partition size must be at least 0x3000 (4kiB * 3 pages == 12kiB)!' + ) + ) + return False + if len(nvs_partition.raw_data) % 0x1000 != 0: + nvs_log.info( + nvs_log.yellow( + 'NVS Partition size must be a multiple of 0x1000 (4kiB)!' + ) + ) + return False if len(nvs_partition.pages) < 3: nvs_log.info( nvs_log.yellow( @@ -83,16 +99,22 @@ def check_page_crc(nvs_page: NVS_Page, nvs_log: NVS_Logger) -> bool: return False -def identify_entry_duplicates(entry: NVS_Entry, seen_written_entires: Dict[str, List[NVS_Entry]]) -> Dict[str, List[NVS_Entry]]: +def identify_entry_duplicates(entry: NVS_Entry, entry_dict: Dict[str, List[NVS_Entry]]) -> Dict[str, List[NVS_Entry]]: + """Identifies and logs written entries + + Part 1 of duplicate entry check mechanism + """ if entry.state == 'Written': - if entry.key in seen_written_entires: - seen_written_entires[entry.key].append(entry) + if entry.key in entry_dict: + entry_dict[entry.key].append(entry) else: - seen_written_entires[entry.key] = [entry] - return seen_written_entires + entry_dict[entry.key] = [entry] + return entry_dict def check_page_entries(nvs_page: NVS_Page, nvs_log: NVS_Logger) -> Dict[str, List[NVS_Entry]]: + """Checks entries in the given page (entry state, children CRC32, entry type, span and gathers blobs and namespaces) + """ seen_written_entires: Dict[str, List[NVS_Entry]] = {} for entry in nvs_page.entries: @@ -203,6 +225,11 @@ def check_page_entries(nvs_page: NVS_Page, nvs_log: NVS_Logger) -> Dict[str, Lis def filter_namespaces_fake_duplicates(duplicate_entries_dict: Dict[str, List[NVS_Entry]]) -> Dict[str, List[NVS_Entry]]: + """Takes a dictionary of entries (as written) and returns a new dictionary with "fake" duplicates, + where entries which have the same key but under different namespaces are filtered out + + Use `filter_entry_duplicates()` to properly filter out all duplicates + """ new_duplicate_entries_dict: Dict[str, List[NVS_Entry]] = {} for key, duplicate_entries in duplicate_entries_dict.items(): seen_entries: List[NVS_Entry] = [] @@ -237,6 +264,11 @@ def filter_namespaces_fake_duplicates(duplicate_entries_dict: Dict[str, List[NVS def filter_blob_related_duplicates(duplicate_entries_dict: Dict[str, List[NVS_Entry]]) -> Dict[str, List[NVS_Entry]]: + """Takes a dictionary of entries (as written) and returns a new dictionary with "fake" duplicates, + where entries related to blob index and blob data under the same namespace are filtered out + + Use `filter_entry_duplicates()` to properly filter out all duplicates + """ new_duplicate_entries_dict: Dict[str, List[NVS_Entry]] = {} for key, duplicate_entries in duplicate_entries_dict.items(): seen_blob_index: List[NVS_Entry] = [] @@ -298,9 +330,19 @@ def filter_blob_related_duplicates(duplicate_entries_dict: Dict[str, List[NVS_En return new_duplicate_entries_dict -def filter_entry_duplicates(seen_written_entires: Dict[str, List[NVS_Entry]]) -> Dict[str, List[NVS_Entry]]: - duplicate_entries_list = {key: v for key, v in seen_written_entires.items() if len(v) > 1} +def filter_entry_duplicates(entries: Dict[str, List[NVS_Entry]]) -> Dict[str, List[NVS_Entry]]: + """Takes a dictionary of (seen written) entries and outputs a new dictionary with "fake" duplicates filtered out, keeping only real duplicates in + + (i.e. duplicate keys under different namespaces and blob index and blob data having the same key under the same namespace are allowed + and should be filtered out) + + Part 2 of duplicate entry check mechanism + """ + # Only keep seen written entries which have been observerd multiple times (duplicates) + duplicate_entries_list = {key: v for key, v in entries.items() if len(v) > 1} + # Filter out "fake" duplicates 1 (duplicate keys under different namespaces are allowed) duplicate_entries_list_1 = filter_namespaces_fake_duplicates(duplicate_entries_list) + # Filter out "fake" duplicates 2 (blob index and blob data are allowed to have the same key even in the same namespace) duplicate_entries_list_2 = filter_blob_related_duplicates(duplicate_entries_list_1) return duplicate_entries_list_2 @@ -341,6 +383,8 @@ def print_entry_duplicates(duplicate_entries_list: Dict[str, List[NVS_Entry]], n def assemble_blobs(nvs_log: NVS_Logger) -> None: + """Assembles blob data from blob chunks + """ for chunk in blob_chunks: # chunk: NVS_Entry parent = blobs.get( @@ -361,6 +405,8 @@ def assemble_blobs(nvs_log: NVS_Logger) -> None: def check_blob_data(nvs_log: NVS_Logger) -> None: + """Checks blob data for missing chunks or data + """ for blob_key in blobs: blob_index = blobs[blob_key][0] blob_chunks = blobs[blob_key][1:] @@ -395,6 +441,8 @@ def check_blobs(nvs_log: NVS_Logger) -> None: def check_namespaces(nvs_log: NVS_Logger) -> None: + """Checks namespaces (entries using undefined namespace indexes, unused namespaces) + """ # Undefined namespace index check for used_ns in used_namespaces: key = found_namespaces.pop(used_ns, None) @@ -415,6 +463,9 @@ def check_namespaces(nvs_log: NVS_Logger) -> None: def reset_global_variables() -> None: + """Global variables need to be cleared out before calling `integrity_check()` multiple times from a script + (e.g. when running tests) to avoid incorrect output + """ global used_namespaces, found_namespaces, blobs, blob_chunks used_namespaces = {} found_namespaces = {} @@ -423,6 +474,8 @@ def reset_global_variables() -> None: def integrity_check(nvs_partition: NVS_Partition, nvs_log: NVS_Logger) -> None: + """Function for multi-stage integrity check of a NVS partition + """ # Partition size check check_partition_size(nvs_partition, nvs_log) @@ -431,18 +484,19 @@ def integrity_check(nvs_partition: NVS_Partition, nvs_log: NVS_Logger) -> None: seen_written_entires_all: Dict[str, List[NVS_Entry]] = {} + # Loop through all pages in the partition for page in nvs_partition.pages: # page: NVS_Page - # Print page header + # Print a page header if page.header['status'] == 'Empty': - # Check if page is truly empty + # Check if a page is truly empty check_empty_page_content(page, nvs_log) else: - # Check page header CRC32 + # Check a page header CRC32 check_page_crc(page, nvs_log) - # Check all entries + # Check all entries in a page seen_written_entires = check_page_entries(page, nvs_log) # Collect all seen written entries From 4c08e00c6a20176b0dfb75e334438e61d7bb5f5f Mon Sep 17 00:00:00 2001 From: Zhang Shuxian Date: Tue, 8 Oct 2024 14:49:14 +0800 Subject: [PATCH 071/365] docs: Update CN translation for system.rst --- docs/zh_CN/migration-guides/release-5.x/5.4/system.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/zh_CN/migration-guides/release-5.x/5.4/system.rst b/docs/zh_CN/migration-guides/release-5.x/5.4/system.rst index dbe6984ddd7b..593a62105c3d 100644 --- a/docs/zh_CN/migration-guides/release-5.x/5.4/system.rst +++ b/docs/zh_CN/migration-guides/release-5.x/5.4/system.rst @@ -8,6 +8,7 @@ - `esp_log_buffer_hex` 已弃用,应使用 `ESP_LOG_BUFFER_HEX` 替代。 - `esp_log_buffer_char` 已弃用,应使用 `ESP_LOG_BUFFER_CHAR` 替代。 +- ``CONFIG_LOG_COLORS`` 的默认值设置为 false。默认情况下,IDF Monitor 在主机端添加颜色。如需在其他控制台监视器的日志输出中启用颜色,请将 ``CONFIG_LOG_COLORS`` 设置为 true。如需在 IDF Monitor 中关闭自动的日志颜色显示,请运行命令: ``idf.py monitor --disable-auto-color``。 ESP ROM --------- From aa022b14ce7628232af71e21c48c2bdf6e01002b Mon Sep 17 00:00:00 2001 From: luoxu Date: Wed, 18 Sep 2024 20:45:47 +0800 Subject: [PATCH 072/365] feat(ble_mesh): esp ble mesh v1.1 features enable/disable supported --- components/bt/CMakeLists.txt | 71 +-- components/bt/common/btc/core/btc_task.c | 12 +- components/bt/esp_ble_mesh/Kconfig.in | 430 +++++++++--------- .../bt/esp_ble_mesh/btc/btc_ble_mesh_prov.c | 8 +- components/bt/esp_ble_mesh/core/access.c | 148 +++++- components/bt/esp_ble_mesh/core/beacon.c | 9 +- .../core/bluedroid_host/adapter.c | 2 + components/bt/esp_ble_mesh/core/cfg_srv.c | 158 ++++++- components/bt/esp_ble_mesh/core/crypto.c | 2 + components/bt/esp_ble_mesh/core/friend.c | 2 + components/bt/esp_ble_mesh/core/lpn.c | 3 + components/bt/esp_ble_mesh/core/main.c | 12 +- components/bt/esp_ble_mesh/core/mesh.h | 1 + components/bt/esp_ble_mesh/core/net.c | 118 ++++- components/bt/esp_ble_mesh/core/prov_common.h | 2 + components/bt/esp_ble_mesh/core/prov_node.c | 2 + components/bt/esp_ble_mesh/core/prov_pvnr.c | 6 +- .../bt/esp_ble_mesh/core/proxy_client.c | 2 + .../bt/esp_ble_mesh/core/proxy_client.h | 2 + .../bt/esp_ble_mesh/core/proxy_server.c | 2 + components/bt/esp_ble_mesh/core/pvnr_mgmt.c | 2 + components/bt/esp_ble_mesh/core/scan.c | 9 +- .../bt/esp_ble_mesh/core/storage/settings.c | 2 + components/bt/esp_ble_mesh/core/tag.h | 53 +++ components/bt/esp_ble_mesh/core/transport.c | 27 +- .../lib/include/mesh_v1.1/utils.h | 2 +- .../models/client/client_common.c | 2 + 27 files changed, 813 insertions(+), 276 deletions(-) create mode 100644 components/bt/esp_ble_mesh/core/tag.h diff --git a/components/bt/CMakeLists.txt b/components/bt/CMakeLists.txt index 70f8aacbbe1a..0e278b35c460 100644 --- a/components/bt/CMakeLists.txt +++ b/components/bt/CMakeLists.txt @@ -39,12 +39,20 @@ set(ble_mesh_include_dirs "esp_ble_mesh/api/core/include" "esp_ble_mesh/api/models/include" "esp_ble_mesh/api" +) + +set(ble_mesh_v11_include_dirs "esp_ble_mesh/lib/include" "esp_ble_mesh/v1.1/api/core/include" "esp_ble_mesh/v1.1/api/models/include" "esp_ble_mesh/v1.1/btc/include" ) +if(CONFIG_IDF_DOC_BUILD) + list(APPEND ble_mesh_include_dirs + ${ble_mesh_v11_include_dirs}) +endif() + set(bluedroid_include_dirs host/bluedroid/api/include/api) if(CONFIG_BT_CONTROLLER_ENABLED OR CONFIG_IDF_DOC_BUILD) @@ -524,34 +532,41 @@ if(CONFIG_BT_ENABLED) "esp_ble_mesh/models/server/server_common.c" "esp_ble_mesh/models/server/state_binding.c" "esp_ble_mesh/models/server/state_transition.c" - "esp_ble_mesh/models/server/time_scene_server.c" - "esp_ble_mesh/v1.1/api/core/esp_ble_mesh_agg_model_api.c" - "esp_ble_mesh/v1.1/api/core/esp_ble_mesh_brc_model_api.c" - "esp_ble_mesh/v1.1/api/core/esp_ble_mesh_cm_data_api.c" - "esp_ble_mesh/v1.1/api/core/esp_ble_mesh_df_model_api.c" - "esp_ble_mesh/v1.1/api/core/esp_ble_mesh_lcd_model_api.c" - "esp_ble_mesh/v1.1/api/core/esp_ble_mesh_odp_model_api.c" - "esp_ble_mesh/v1.1/api/core/esp_ble_mesh_prb_model_api.c" - "esp_ble_mesh/v1.1/api/core/esp_ble_mesh_rpr_model_api.c" - "esp_ble_mesh/v1.1/api/core/esp_ble_mesh_sar_model_api.c" - "esp_ble_mesh/v1.1/api/core/esp_ble_mesh_srpl_model_api.c" - "esp_ble_mesh/v1.1/api/models/esp_ble_mesh_mbt_model_api.c" - "esp_ble_mesh/v1.1/btc/btc_ble_mesh_agg_model.c" - "esp_ble_mesh/v1.1/btc/btc_ble_mesh_brc_model.c" - "esp_ble_mesh/v1.1/btc/btc_ble_mesh_df_model.c" - "esp_ble_mesh/v1.1/btc/btc_ble_mesh_lcd_model.c" - "esp_ble_mesh/v1.1/btc/btc_ble_mesh_mbt_model.c" - "esp_ble_mesh/v1.1/btc/btc_ble_mesh_odp_model.c" - "esp_ble_mesh/v1.1/btc/btc_ble_mesh_prb_model.c" - "esp_ble_mesh/v1.1/btc/btc_ble_mesh_rpr_model.c" - "esp_ble_mesh/v1.1/btc/btc_ble_mesh_sar_model.c" - "esp_ble_mesh/v1.1/btc/btc_ble_mesh_srpl_model.c" - "esp_ble_mesh/lib/ext.c") - - if(CONFIG_BLE_MESH_SAR_ENHANCEMENT) - list(APPEND srcs "esp_ble_mesh/core/transport.enh.c") + "esp_ble_mesh/models/server/time_scene_server.c") + if(CONFIG_BLE_MESH_V11_SUPPORT) + list(APPEND include_dirs ${ble_mesh_v11_include_dirs}) + + list(APPEND srcs + "esp_ble_mesh/v1.1/api/core/esp_ble_mesh_agg_model_api.c" + "esp_ble_mesh/v1.1/api/core/esp_ble_mesh_brc_model_api.c" + "esp_ble_mesh/v1.1/api/core/esp_ble_mesh_cm_data_api.c" + "esp_ble_mesh/v1.1/api/core/esp_ble_mesh_df_model_api.c" + "esp_ble_mesh/v1.1/api/core/esp_ble_mesh_lcd_model_api.c" + "esp_ble_mesh/v1.1/api/core/esp_ble_mesh_odp_model_api.c" + "esp_ble_mesh/v1.1/api/core/esp_ble_mesh_prb_model_api.c" + "esp_ble_mesh/v1.1/api/core/esp_ble_mesh_rpr_model_api.c" + "esp_ble_mesh/v1.1/api/core/esp_ble_mesh_sar_model_api.c" + "esp_ble_mesh/v1.1/api/core/esp_ble_mesh_srpl_model_api.c" + "esp_ble_mesh/v1.1/api/models/esp_ble_mesh_mbt_model_api.c" + "esp_ble_mesh/v1.1/btc/btc_ble_mesh_agg_model.c" + "esp_ble_mesh/v1.1/btc/btc_ble_mesh_brc_model.c" + "esp_ble_mesh/v1.1/btc/btc_ble_mesh_df_model.c" + "esp_ble_mesh/v1.1/btc/btc_ble_mesh_lcd_model.c" + "esp_ble_mesh/v1.1/btc/btc_ble_mesh_mbt_model.c" + "esp_ble_mesh/v1.1/btc/btc_ble_mesh_odp_model.c" + "esp_ble_mesh/v1.1/btc/btc_ble_mesh_prb_model.c" + "esp_ble_mesh/v1.1/btc/btc_ble_mesh_rpr_model.c" + "esp_ble_mesh/v1.1/btc/btc_ble_mesh_sar_model.c" + "esp_ble_mesh/v1.1/btc/btc_ble_mesh_srpl_model.c" + "esp_ble_mesh/lib/ext.c") + if(CONFIG_BLE_MESH_SAR_ENHANCEMENT) + list(APPEND srcs "esp_ble_mesh/core/transport.enh.c") + else() + list(APPEND srcs "esp_ble_mesh/core/transport.c") + endif() else() - list(APPEND srcs "esp_ble_mesh/core/transport.c") + list(APPEND srcs + "esp_ble_mesh/core/transport.c") endif() endif() @@ -879,7 +894,7 @@ if(CONFIG_BT_ENABLED) target_compile_options(${COMPONENT_LIB} PRIVATE "-Wno-format") endif() -if(CONFIG_BLE_MESH) +if(CONFIG_BLE_MESH_V11_SUPPORT) if(CONFIG_IDF_TARGET_ESP32) add_prebuilt_library(ble_mesh "esp_ble_mesh/lib/lib/esp32/libble_mesh.a") target_link_libraries(${COMPONENT_LIB} PRIVATE ble_mesh) diff --git a/components/bt/common/btc/core/btc_task.c b/components/bt/common/btc/core/btc_task.c index 875f64b18a52..7859c99cd37c 100644 --- a/components/bt/common/btc/core/btc_task.c +++ b/components/bt/common/btc/core/btc_task.c @@ -69,6 +69,12 @@ #include "btc_ble_mesh_prov.h" #include "btc_ble_mesh_health_model.h" #include "btc_ble_mesh_config_model.h" +#include "btc_ble_mesh_generic_model.h" +#include "btc_ble_mesh_lighting_model.h" +#include "btc_ble_mesh_sensor_model.h" +#include "btc_ble_mesh_time_scene_model.h" +#if CONFIG_BLE_MESH_V11_SUPPORT +#include "btc_ble_mesh_mbt_model.h" #include "btc_ble_mesh_agg_model.h" #include "btc_ble_mesh_brc_model.h" #include "btc_ble_mesh_df_model.h" @@ -78,11 +84,7 @@ #include "btc_ble_mesh_rpr_model.h" #include "btc_ble_mesh_sar_model.h" #include "btc_ble_mesh_srpl_model.h" -#include "btc_ble_mesh_generic_model.h" -#include "btc_ble_mesh_lighting_model.h" -#include "btc_ble_mesh_sensor_model.h" -#include "btc_ble_mesh_time_scene_model.h" -#include "btc_ble_mesh_mbt_model.h" +#endif /* CONFIG_BLE_MESH_V11_SUPPORT */ #endif /* #if CONFIG_BLE_MESH */ #define BTC_TASK_PINNED_TO_CORE (TASK_PINNED_TO_CORE) diff --git a/components/bt/esp_ble_mesh/Kconfig.in b/components/bt/esp_ble_mesh/Kconfig.in index 17d23ba94ec6..47c6fad2c030 100644 --- a/components/bt/esp_ble_mesh/Kconfig.in +++ b/components/bt/esp_ble_mesh/Kconfig.in @@ -6,6 +6,12 @@ if BLE_MESH help It is a temporary solution and needs further modifications. + config BLE_MESH_V11_SUPPORT + bool "Support ESP BLE Mesh v1.1 features (Preview)" + default y + help + Support BLE Mesh v1.1 features + config BLE_MESH_RANDOM_ADV_INTERVAL bool "Support using random adv interval for mesh packets" select BT_BLE_HIGH_DUTY_ADV_INTERVAL if BT_BLUEDROID_ENABLED @@ -32,6 +38,7 @@ if BLE_MESH config BLE_MESH_ACTIVE_SCAN bool "Support Active Scan in BLE Mesh" + depends on BLE_MESH_V11_SUPPORT help Enable this option to allow using BLE Active Scan for BLE Mesh. @@ -281,6 +288,7 @@ if BLE_MESH config BLE_MESH_PROV_EPA bool "BLE Mesh enhanced provisioning authentication" depends on BLE_MESH_PROV + depends on BLE_MESH_V11_SUPPORT default y help Enable this option to support BLE Mesh enhanced provisioning authentication @@ -290,6 +298,7 @@ if BLE_MESH config BLE_MESH_CERT_BASED_PROV bool "Support Certificate-based provisioning" depends on BLE_MESH_PROV + depends on BLE_MESH_V11_SUPPORT default n help Enable this option to support BLE Mesh Certificate-Based Provisioning. @@ -390,6 +399,7 @@ if BLE_MESH config BLE_MESH_PROXY_SOLIC_PDU_RX bool "Support receiving Proxy Solicitation PDU" depends on BLE_MESH_GATT_PROXY_SERVER + depends on BLE_MESH_V11_SUPPORT help Enable this option to support receiving Proxy Solicitation PDU. @@ -417,6 +427,7 @@ if BLE_MESH config BLE_MESH_PROXY_SOLIC_PDU_TX bool "Support sending Proxy Solicitation PDU" depends on BLE_MESH_GATT_PROXY_CLIENT + depends on BLE_MESH_V11_SUPPORT help Enable this option to support sending Proxy Solicitation PDU. @@ -703,6 +714,7 @@ if BLE_MESH to perform the IV index recovery procedure. config BLE_MESH_SAR_ENHANCEMENT + depends on BLE_MESH_V11_SUPPORT bool "Segmentation and reassembly enhancement" default n help @@ -1102,253 +1114,257 @@ if BLE_MESH help Enable support for Health Server model. - config BLE_MESH_BRC_CLI - bool "Bridge Configuration Client model" - help - Enable support for Bridge Configuration Client model. - - config BLE_MESH_BRC_SRV - bool "Bridge Configuration Server model" - default n - help - Enable support for Bridge Configuration Server model. - - if BLE_MESH_BRC_SRV + if BLE_MESH_V11_SUPPORT - config BLE_MESH_MAX_BRIDGING_TABLE_ENTRY_COUNT - int "Maximum number of Bridging Table entries" - range 16 65535 - default 16 + config BLE_MESH_BRC_CLI + bool "Bridge Configuration Client model" help - Maximum number of Bridging Table entries that the Bridge Configuration Server can support. + Enable support for Bridge Configuration Client model. - config BLE_MESH_BRIDGE_CRPL - int "Maximum capacity of bridge replay protection list" - default 5 - range 1 255 + config BLE_MESH_BRC_SRV + bool "Bridge Configuration Server model" + default n help - This option specifies the maximum capacity of the bridge replay - protection list. The bridge replay protection list is used to - prevent a bridged subnet from replay attack, which will store the - source address and sequence number of the received bridge messages. + Enable support for Bridge Configuration Server model. - endif #BLE_MESH_BRC_SRV + if BLE_MESH_BRC_SRV - config BLE_MESH_PRB_CLI - bool "Mesh Private Beacon Client model" - help - Enable support for Mesh Private Beacon Client model. + config BLE_MESH_MAX_BRIDGING_TABLE_ENTRY_COUNT + int "Maximum number of Bridging Table entries" + range 16 65535 + default 16 + help + Maximum number of Bridging Table entries that the Bridge Configuration Server can support. - config BLE_MESH_PRB_SRV - bool "Mesh Private Beacon Server model" - help - Enable support for Mesh Private Beacon Server model. + config BLE_MESH_BRIDGE_CRPL + int "Maximum capacity of bridge replay protection list" + default 5 + range 1 255 + help + This option specifies the maximum capacity of the bridge replay + protection list. The bridge replay protection list is used to + prevent a bridged subnet from replay attack, which will store the + source address and sequence number of the received bridge messages. - config BLE_MESH_ODP_CLI - bool "On-Demand Private Proxy Client model" - help - Enable support for On-Demand Private Proxy Client model. + endif #BLE_MESH_BRC_SRV - config BLE_MESH_ODP_SRV - bool "On-Demand Private Proxy Server model" - depends on BLE_MESH_PROXY_SOLIC_PDU_RX - select BLE_MESH_SRPL_SRV - help - Enable support for On-Demand Private Proxy Server model. + config BLE_MESH_PRB_CLI + bool "Mesh Private Beacon Client model" + help + Enable support for Mesh Private Beacon Client model. - config BLE_MESH_SRPL_CLI - bool "Solicitation PDU RPL Configuration Client model" - help - Enable support for Solicitation PDU RPL Configuration Client model. + config BLE_MESH_PRB_SRV + bool "Mesh Private Beacon Server model" + help + Enable support for Mesh Private Beacon Server model. - config BLE_MESH_SRPL_SRV - bool "Solicitation PDU RPL Configuration Server model" - depends on BLE_MESH_PROXY_SOLIC_PDU_RX - help - Enable support for Solicitation PDU RPL Configuration Server model. - Note: - This option depends on the functionality of receiving Solicitation - PDU. If the device doesn't support receiving Solicitation PDU, then - there is no need to enable this server model. + config BLE_MESH_ODP_CLI + bool "On-Demand Private Proxy Client model" + help + Enable support for On-Demand Private Proxy Client model. - config BLE_MESH_AGG_CLI - bool "Opcodes Aggregator Client model" - help - Enable support for Opcodes Aggregator Client model. + config BLE_MESH_ODP_SRV + bool "On-Demand Private Proxy Server model" + depends on BLE_MESH_PROXY_SOLIC_PDU_RX + select BLE_MESH_SRPL_SRV + help + Enable support for On-Demand Private Proxy Server model. - config BLE_MESH_AGG_SRV - bool "Opcodes Aggregator Server model" - help - Enable support for Opcodes Aggregator Server model. + config BLE_MESH_SRPL_CLI + bool "Solicitation PDU RPL Configuration Client model" + help + Enable support for Solicitation PDU RPL Configuration Client model. - config BLE_MESH_SAR_CLI - bool "SAR Configuration Client model" - help - Enable support for SAR Configuration Client model. + config BLE_MESH_SRPL_SRV + bool "Solicitation PDU RPL Configuration Server model" + depends on BLE_MESH_PROXY_SOLIC_PDU_RX + help + Enable support for Solicitation PDU RPL Configuration Server model. + Note: + This option depends on the functionality of receiving Solicitation + PDU. If the device doesn't support receiving Solicitation PDU, then + there is no need to enable this server model. + + config BLE_MESH_AGG_CLI + bool "Opcodes Aggregator Client model" + help + Enable support for Opcodes Aggregator Client model. - config BLE_MESH_SAR_SRV - bool "SAR Configuration Server model" - help - Enable support for SAR Configuration Server model. + config BLE_MESH_AGG_SRV + bool "Opcodes Aggregator Server model" + help + Enable support for Opcodes Aggregator Server model. - config BLE_MESH_COMP_DATA_1 - bool "Support Composition Data Page 1" - help - Composition Data Page 1 contains information about the relationships - among models. - Each model either can be a root model or can extend other models. + config BLE_MESH_SAR_CLI + bool "SAR Configuration Client model" + help + Enable support for SAR Configuration Client model. - config BLE_MESH_COMP_DATA_128 - bool "Support Composition Data Page 128" - help - Composition Data Page 128 is used to indicate the structure of - elements, features, and models of a node after the successful - execution of the Node Address Refresh procedure or the Node - Composition Refresh procedure, or after the execution of the - Node Removal procedure followed by the provisioning process. - Composition Data Page 128 shall be present if the node supports - the Remote Provisioning Server model; otherwise it is optional. + config BLE_MESH_SAR_SRV + bool "SAR Configuration Server model" + help + Enable support for SAR Configuration Server model. - config BLE_MESH_MODELS_METADATA_0 - bool "Support Models Metadata Page 0" - help - The Models Metadata state contains metadata of a node’s models. - The Models Metadata state is composed of a number of pages of - information. - Models Metadata Page 0 shall be present if the node supports - the Large Composition Data Server model. + config BLE_MESH_COMP_DATA_1 + bool "Support Composition Data Page 1" + help + Composition Data Page 1 contains information about the relationships + among models. + Each model either can be a root model or can extend other models. - config BLE_MESH_MODELS_METADATA_128 - bool "Support Models Metadata Page 128" - depends on BLE_MESH_MODELS_METADATA_0 - help - The Models Metadata state contains metadata of a node’s models. - The Models Metadata state is composed of a number of pages of - information. - Models Metadata Page 128 contains metadata for the node’s models - after the successful execution of the Node Address Refresh - procedure or the Node Composition Refresh procedure, or after - the execution of the Node Removal procedure followed by the - provisioning process. - Models Metadata Page 128 shall be present if the node supports - the Remote Provisioning Server model and the node supports the - Large Composition Data Server model. + config BLE_MESH_COMP_DATA_128 + bool "Support Composition Data Page 128" + help + Composition Data Page 128 is used to indicate the structure of + elements, features, and models of a node after the successful + execution of the Node Address Refresh procedure or the Node + Composition Refresh procedure, or after the execution of the + Node Removal procedure followed by the provisioning process. + Composition Data Page 128 shall be present if the node supports + the Remote Provisioning Server model; otherwise it is optional. + + config BLE_MESH_MODELS_METADATA_0 + bool "Support Models Metadata Page 0" + help + The Models Metadata state contains metadata of a node’s models. + The Models Metadata state is composed of a number of pages of + information. + Models Metadata Page 0 shall be present if the node supports + the Large Composition Data Server model. + + config BLE_MESH_MODELS_METADATA_128 + bool "Support Models Metadata Page 128" + depends on BLE_MESH_MODELS_METADATA_0 + help + The Models Metadata state contains metadata of a node’s models. + The Models Metadata state is composed of a number of pages of + information. + Models Metadata Page 128 contains metadata for the node’s models + after the successful execution of the Node Address Refresh + procedure or the Node Composition Refresh procedure, or after + the execution of the Node Removal procedure followed by the + provisioning process. + Models Metadata Page 128 shall be present if the node supports + the Remote Provisioning Server model and the node supports the + Large Composition Data Server model. + + config BLE_MESH_LCD_CLI + bool "Large Composition Data Client model" + help + Enable support for Large Composition Data Client model. - config BLE_MESH_LCD_CLI - bool "Large Composition Data Client model" - help - Enable support for Large Composition Data Client model. + config BLE_MESH_LCD_SRV + bool "Large Composition Data Server model" + select BLE_MESH_MODELS_METADATA_0 + help + Enable support for Large Composition Data Server model. - config BLE_MESH_LCD_SRV - bool "Large Composition Data Server model" - select BLE_MESH_MODELS_METADATA_0 - help - Enable support for Large Composition Data Server model. + config BLE_MESH_RPR_CLI + bool "Remote Provisioning Client model" + depends on BLE_MESH_PROVISIONER + select BLE_MESH_PROV + help + Enable support for Remote Provisioning Client model - config BLE_MESH_RPR_CLI - bool "Remote Provisioning Client model" - depends on BLE_MESH_PROVISIONER - select BLE_MESH_PROV - help - Enable support for Remote Provisioning Client model + if BLE_MESH_RPR_CLI - if BLE_MESH_RPR_CLI + config BLE_MESH_RPR_CLI_PROV_SAME_TIME + int "Maximum number of PB-Remote running at the same time by Provisioner" + range 1 5 + default 2 + help + This option specifies how many devices can be provisioned at the same time + using PB-REMOTE. For example, if the value is 2, it means a Provisioner can + provision two unprovisioned devices with PB-REMOTE at the same time. - config BLE_MESH_RPR_CLI_PROV_SAME_TIME - int "Maximum number of PB-Remote running at the same time by Provisioner" - range 1 5 - default 2 + endif # BLE_MESH_RPR_CLI + + config BLE_MESH_RPR_SRV + bool "Remote Provisioning Server model" + depends on BLE_MESH_NODE + select BLE_MESH_PB_ADV help - This option specifies how many devices can be provisioned at the same time - using PB-REMOTE. For example, if the value is 2, it means a Provisioner can - provision two unprovisioned devices with PB-REMOTE at the same time. + Enable support for Remote Provisioning Server model - endif # BLE_MESH_RPR_CLI + if BLE_MESH_RPR_SRV - config BLE_MESH_RPR_SRV - bool "Remote Provisioning Server model" - depends on BLE_MESH_NODE - select BLE_MESH_PB_ADV - help - Enable support for Remote Provisioning Server model + config BLE_MESH_RPR_SRV_MAX_SCANNED_ITEMS + int "Maximum number of device information can be scanned" + range 4 255 + default 10 + help + This option specifies how many device information can a Remote + Provisioning Server store each time while scanning. - if BLE_MESH_RPR_SRV + config BLE_MESH_RPR_SRV_ACTIVE_SCAN + bool "Support Active Scan for remote provisioning" + select BLE_MESH_ACTIVE_SCAN + help + Enable this option to support Active Scan for remote provisioning. - config BLE_MESH_RPR_SRV_MAX_SCANNED_ITEMS - int "Maximum number of device information can be scanned" - range 4 255 - default 10 - help - This option specifies how many device information can a Remote - Provisioning Server store each time while scanning. + config BLE_MESH_RPR_SRV_MAX_EXT_SCAN + int "Maximum number of extended scan procedures" + range 1 10 + default 1 + help + This option specifies how many extended scan procedures can be + started by the Remote Provisioning Server. - config BLE_MESH_RPR_SRV_ACTIVE_SCAN - bool "Support Active Scan for remote provisioning" - select BLE_MESH_ACTIVE_SCAN - help - Enable this option to support Active Scan for remote provisioning. + endif # BLE_MESH_RPR_SRV - config BLE_MESH_RPR_SRV_MAX_EXT_SCAN - int "Maximum number of extended scan procedures" - range 1 10 - default 1 + config BLE_MESH_DF_CLI + bool "Directed Forwarding Configuration Client model" help - This option specifies how many extended scan procedures can be - started by the Remote Provisioning Server. + Enable support for Directed Forwarding Configuration Client model. - endif # BLE_MESH_RPR_SRV + config BLE_MESH_DF_SRV + bool "Directed Forwarding Configuration Server model" + help + Enable support for Directed Forwarding Configuration Server model. - config BLE_MESH_DF_CLI - bool "Directed Forwarding Configuration Client model" - help - Enable support for Directed Forwarding Configuration Client model. + if BLE_MESH_DF_SRV - config BLE_MESH_DF_SRV - bool "Directed Forwarding Configuration Server model" - help - Enable support for Directed Forwarding Configuration Server model. + config BLE_MESH_MAX_DISC_TABLE_ENTRY_COUNT + int "Maximum number of discovery table entries in a given subnet" + range 2 255 + default 2 + help + Maximum number of Discovery Table entries supported by the node in a given subnet. - if BLE_MESH_DF_SRV + config BLE_MESH_MAX_FORWARD_TABLE_ENTRY_COUNT + int "Maximum number of forward table entries in a given subnet" + range 2 64 + default 2 + help + Maximum number of Forward Table entries supported by the node in a given subnet. - config BLE_MESH_MAX_DISC_TABLE_ENTRY_COUNT - int "Maximum number of discovery table entries in a given subnet" - range 2 255 - default 2 - help - Maximum number of Discovery Table entries supported by the node in a given subnet. + config BLE_MESH_MAX_DEPS_NODES_PER_PATH + int "Maximum number of dependent nodes per path" + range 2 64 + default 2 + help + Maximum size of dependent nodes list supported by each forward table entry. - config BLE_MESH_MAX_FORWARD_TABLE_ENTRY_COUNT - int "Maximum number of forward table entries in a given subnet" - range 2 64 - default 2 - help - Maximum number of Forward Table entries supported by the node in a given subnet. + config BLE_MESH_PATH_MONITOR_TEST + bool "Enable Path Monitoring test mode" + default n + help + The option only removes the Path Use timer; all other behavior of the + device is not changed. + If Path Monitoring test mode is going to be used, this option should + be enabled. - config BLE_MESH_MAX_DEPS_NODES_PER_PATH - int "Maximum number of dependent nodes per path" - range 2 64 - default 2 - help - Maximum size of dependent nodes list supported by each forward table entry. + if BLE_MESH_GATT_PROXY_SERVER + config BLE_MESH_SUPPORT_DIRECTED_PROXY + bool "Enable Directed Proxy functionality" + default y + help + Support Directed Proxy functionality. + endif - config BLE_MESH_PATH_MONITOR_TEST - bool "Enable Path Monitoring test mode" - default n - help - The option only removes the Path Use timer; all other behavior of the - device is not changed. - If Path Monitoring test mode is going to be used, this option should - be enabled. - - if BLE_MESH_GATT_PROXY_SERVER - config BLE_MESH_SUPPORT_DIRECTED_PROXY - bool "Enable Directed Proxy functionality" - default y - help - Support Directed Proxy functionality. - endif + endif # BLE_MESH_DF_SRV - endif # BLE_MESH_DF_SRV + endif # BLE_MESH_V11_SUPPORT endmenu #Support for BLE Mesh Foundation models @@ -1465,6 +1481,7 @@ if BLE_MESH config BLE_MESH_MBT_CLI bool "BLOB Transfer Client model" + depends on BLE_MESH_V11_SUPPORT default n help Enable support for BLOB Transfer Client model. @@ -1483,6 +1500,7 @@ if BLE_MESH config BLE_MESH_MBT_SRV bool "BLOB Transfer Server model" + depends on BLE_MESH_V11_SUPPORT default n help Enable support for BLOB Transfer Server model. diff --git a/components/bt/esp_ble_mesh/btc/btc_ble_mesh_prov.c b/components/bt/esp_ble_mesh/btc/btc_ble_mesh_prov.c index 67d5353be8fa..f6cdb426f1b5 100644 --- a/components/bt/esp_ble_mesh/btc/btc_ble_mesh_prov.c +++ b/components/bt/esp_ble_mesh/btc/btc_ble_mesh_prov.c @@ -10,11 +10,13 @@ #include "btc_ble_mesh_prov.h" #include "btc_ble_mesh_config_model.h" #include "btc_ble_mesh_health_model.h" -#include "btc_ble_mesh_prb_model.h" #include "btc_ble_mesh_generic_model.h" #include "btc_ble_mesh_time_scene_model.h" #include "btc_ble_mesh_sensor_model.h" #include "btc_ble_mesh_lighting_model.h" + +#if CONFIG_BLE_MESH_V11_SUPPORT +#include "btc_ble_mesh_prb_model.h" #include "btc_ble_mesh_brc_model.h" #include "btc_ble_mesh_odp_model.h" #include "btc_ble_mesh_srpl_model.h" @@ -24,6 +26,8 @@ #include "btc_ble_mesh_rpr_model.h" #include "btc_ble_mesh_df_model.h" #include "btc_ble_mesh_mbt_model.h" +#include "mesh_v1.1/utils.h" +#endif /* CONFIG_BLE_MESH_V11_SUPPORT */ #include "adv.h" #include "mesh/kernel.h" @@ -65,8 +69,6 @@ #include "mesh/state_binding.h" #include "local.h" -#include "mesh_v1.1/utils.h" - #include "esp_ble_mesh_common_api.h" #include "esp_ble_mesh_provisioning_api.h" #include "esp_ble_mesh_networking_api.h" diff --git a/components/bt/esp_ble_mesh/core/access.c b/components/bt/esp_ble_mesh/core/access.c index 9606581eb89f..3791add9e34f 100644 --- a/components/bt/esp_ble_mesh/core/access.c +++ b/components/bt/esp_ble_mesh/core/access.c @@ -2,7 +2,7 @@ /* * SPDX-FileCopyrightText: 2017 Intel Corporation - * SPDX-FileContributor: 2018-2021 Espressif Systems (Shanghai) CO LTD + * SPDX-FileContributor: 2018-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -11,6 +11,7 @@ #include #include "mesh.h" +#include "tag.h" #include "adv.h" #include "lpn.h" #include "friend.h" @@ -22,7 +23,9 @@ #include "fast_prov.h" #include "pvnr_mgmt.h" +#if CONFIG_BLE_MESH_V11_SUPPORT #include "mesh_v1.1/utils.h" +#endif #define BLE_MESH_SDU_MAX_LEN 384 @@ -814,6 +817,135 @@ static bool ready_to_send(uint16_t dst) return false; } +#if !CONFIG_BLE_MESH_V11_SUPPORT +static bool use_friend_cred(uint16_t net_idx, uint16_t dst) +{ + /* Currently LPN only supports using NetKey in bt_mesh.sub[0] */ + if (IS_ENABLED(CONFIG_BLE_MESH_LOW_POWER) && + net_idx == 0 && + bt_mesh_lpn_match(dst)) { + return true; + } + + if (IS_ENABLED(CONFIG_BLE_MESH_FRIEND) && + bt_mesh_friend_match(net_idx, dst)) { + return true; + } + + return false; +} + +bool bt_mesh_valid_security_cred(struct bt_mesh_net_tx *tx) +{ + /* If the message is tagged with immutable-credentials, + * then the security credentials shall not be changed + * in lower layers. + * If not, later a better security credentials could be + * chosen for the message. + */ + if (!bt_mesh_tag_immutable_cred(tx->ctx->send_tag)) { + return true; + } + + if (tx->ctx->send_cred > BLE_MESH_FRIENDSHIP_CRED) { + return false; + } + + if (tx->ctx->send_cred == BLE_MESH_FRIENDSHIP_CRED && + !use_friend_cred(tx->ctx->net_idx, tx->ctx->addr)) { + return false; + } + + return true; +} + +void bt_mesh_choose_better_security_cred(struct bt_mesh_net_tx *tx) +{ + uint8_t send_cred = 0U; + uint8_t send_tag = 0U; + uint16_t net_idx = 0U; + uint16_t addr = 0U; + + send_cred = tx->ctx->send_cred; + send_tag = tx->ctx->send_tag; + net_idx = tx->ctx->net_idx; + addr = tx->ctx->addr; + + /* If the message is tagged with immutable-credentials, + * then the security credentials shall not be changed. + */ + if (bt_mesh_tag_immutable_cred(send_tag)) { + return; + } + + if (send_cred > BLE_MESH_FRIENDSHIP_CRED) { + BT_INFO("Use managed flooding security credentials"); + tx->ctx->send_cred = BLE_MESH_FLOODING_CRED; + return; + } + + if (send_cred == BLE_MESH_FRIENDSHIP_CRED) { + if (!use_friend_cred(net_idx, addr)) { + BT_INFO("Use managed flooding security credentials"); + tx->ctx->send_cred = BLE_MESH_FLOODING_CRED; + tx->ctx->send_tag = send_tag | BLE_MESH_TAG_IMMUTABLE_CRED; + } else { + /* TODO: + * For LPN, do we need to change the friendship security + * credentials to managed flooding credentials? + * If changed, this could increase the possibility that + * the corresponding Friend node receives this message. + */ + } + return; + } + + /* If the message is destinated to a LPN, the following could be + * introduced to send the message with the friendship credentials. + * + * For LPN, this optimization should not be introduced, since it + * may cause the message failed to received by the Friend node, + * using friendship credentials will make the message can not be + * relayed by other mesh nodes. + */ + if (IS_ENABLED(CONFIG_BLE_MESH_FRIEND) && + BLE_MESH_ADDR_IS_UNICAST(addr) && + bt_mesh_friend_match(net_idx, addr)) { + BT_INFO("Use friendship security credentials"); + tx->ctx->send_cred = BLE_MESH_FRIENDSHIP_CRED; + tx->ctx->send_tag = send_tag | BLE_MESH_TAG_IMMUTABLE_CRED; + return; + } + + /** + * Spec 3.7.3.1 + * The Low power node in friendship should use friendship security + * material. + * + * But in Spec 3.6.6.2 + * Depending on the value of the Publish Friendship Credentials Flag + * (see Section 4.2.3.4), the Low Power node model publishes messages + * using either the friendship security credentials or the managed + * flooding security credentials (see Section 3.9.6.3.1). + * + * So use the BLE_MESH_TAG_IMMUTABLE_CRED to indicate that the + * credentials of the message should not be changed when the + * message is sent by model publishing, even though the spec + * didn't require this flag to be set when model publishing. + */ + +#if CONFIG_BLE_MESH_LOW_POWER + if (BLE_MESH_ADDR_IS_UNICAST(addr) && + bt_mesh.lpn.frnd == addr && + !bt_mesh_tag_immutable_cred(send_tag)) { + tx->ctx->send_cred = BLE_MESH_FRIENDSHIP_CRED; + tx->ctx->send_tag = send_tag | BLE_MESH_TAG_IMMUTABLE_CRED; + return; + } +#endif +} +#endif /* !CONFIG_BLE_MESH_V11_SUPPORT */ + static int model_send(struct bt_mesh_model *model, struct bt_mesh_net_tx *tx, bool implicit_bind, struct net_buf_simple *msg, @@ -1108,11 +1240,13 @@ size_t bt_mesh_rx_devkey_size(void) #if CONFIG_BLE_MESH_NODE && !CONFIG_BLE_MESH_PROVISIONER if (bt_mesh_is_provisioned()) { size = 1; +#if CONFIG_BLE_MESH_RPR_SRV if (bt_mesh_dev_key_ca_valid()) { size += 1; } +#endif /* CONFIG_BLE_MESH_RPR_SRV */ } -#endif +#endif /* CONFIG_BLE_MESH_NODE && !CONFIG_BLE_MESH_PROVISIONER */ #if !CONFIG_BLE_MESH_NODE && CONFIG_BLE_MESH_PROVISIONER if (bt_mesh_is_provisioner_en()) { @@ -1122,9 +1256,11 @@ size_t bt_mesh_rx_devkey_size(void) #if CONFIG_BLE_MESH_NODE && CONFIG_BLE_MESH_PROVISIONER size = 1; +#if CONFIG_BLE_MESH_RPR_SRV if (bt_mesh_dev_key_ca_valid()) { size += 1; } +#endif /* CONFIG_BLE_MESH_RPR_SRV */ if (bt_mesh_is_provisioner_en()) { size += 1; } @@ -1156,7 +1292,9 @@ const uint8_t *bt_mesh_rx_devkey_get(size_t index, uint16_t src) #if CONFIG_BLE_MESH_NODE && CONFIG_BLE_MESH_PROVISIONER if (index == 0) { key = bt_mesh.dev_key; - } else if (index == 1 && bt_mesh_dev_key_ca_valid()) { + } else +#if CONFIG_BLE_MESH_RPR_SRV + if (index == 1 && bt_mesh_dev_key_ca_valid()) { /* If index == 1, there are two cases. * 1. bt_mesh_dev_key_ca_valid() is true, it should be return bt_mesh.dev_key_ca. * 2. bt_mesh_is_provisioner_en() is true, it should be return bt_mesh_provisioner_dev_key_get(src). @@ -1166,7 +1304,9 @@ const uint8_t *bt_mesh_rx_devkey_get(size_t index, uint16_t src) * Then this round of function bt_mesh_rx_devkey_get(2, src) will return bt_mesh_provisioner_dev_key_get(src). */ key = bt_mesh.dev_key_ca; - } else { + } else +#endif + { key = bt_mesh_provisioner_dev_key_get(src); } #endif diff --git a/components/bt/esp_ble_mesh/core/beacon.c b/components/bt/esp_ble_mesh/core/beacon.c index 488a3c5f6d08..45e4a2d1a952 100644 --- a/components/bt/esp_ble_mesh/core/beacon.c +++ b/components/bt/esp_ble_mesh/core/beacon.c @@ -2,7 +2,7 @@ /* * SPDX-FileCopyrightText: 2017 Intel Corporation - * SPDX-FileContributor: 2018-2021 Espressif Systems (Shanghai) CO LTD + * SPDX-FileContributor: 2018-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -25,7 +25,9 @@ #include "pvnr_mgmt.h" #include "mesh/common.h" +#if CONFIG_BLE_MESH_V11_SUPPORT #include "mesh_v1.1/utils.h" +#endif #if defined(CONFIG_BLE_MESH_UNPROVISIONED_BEACON_INTERVAL) #define UNPROV_BEACON_INTERVAL K_SECONDS(CONFIG_BLE_MESH_UNPROVISIONED_BEACON_INTERVAL) @@ -472,12 +474,13 @@ void bt_mesh_beacon_recv(struct net_buf_simple *buf, int8_t rssi) bt_mesh_provisioner_unprov_beacon_recv(buf, rssi); } - if (IS_ENABLED(CONFIG_BLE_MESH_RPR_SRV) && - bt_mesh_is_provisioned()) { +#if CONFIG_BLE_MESH_RPR_SRV + if (bt_mesh_is_provisioned()) { const bt_mesh_addr_t *addr = bt_mesh_get_unprov_dev_addr(); bt_mesh_unprov_dev_fifo_enqueue(buf->data, addr->val, bt_mesh_get_adv_type()); bt_mesh_rpr_srv_unprov_beacon_recv(buf, bt_mesh_get_adv_type(), addr, rssi); } +#endif break; case BEACON_TYPE_SECURE: secure_beacon_recv(buf); diff --git a/components/bt/esp_ble_mesh/core/bluedroid_host/adapter.c b/components/bt/esp_ble_mesh/core/bluedroid_host/adapter.c index e0fc33b48448..f16456d6dd9d 100644 --- a/components/bt/esp_ble_mesh/core/bluedroid_host/adapter.c +++ b/components/bt/esp_ble_mesh/core/bluedroid_host/adapter.c @@ -32,7 +32,9 @@ #include "net.h" #include "beacon.h" +#if CONFIG_BLE_MESH_V11_SUPPORT #include "mesh_v1.1/utils.h" +#endif struct bt_mesh_dev bt_mesh_dev; diff --git a/components/bt/esp_ble_mesh/core/cfg_srv.c b/components/bt/esp_ble_mesh/core/cfg_srv.c index 9d91cb217b3c..a8fe1af424db 100644 --- a/components/bt/esp_ble_mesh/core/cfg_srv.c +++ b/components/bt/esp_ble_mesh/core/cfg_srv.c @@ -2,7 +2,7 @@ /* * SPDX-FileCopyrightText: 2017 Intel Corporation - * SPDX-FileContributor: 2018-2023 Espressif Systems (Shanghai) CO LTD + * SPDX-FileContributor: 2018-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -30,7 +30,9 @@ #include "mesh/common.h" #include "heartbeat.h" +#if CONFIG_BLE_MESH_V11_SUPPORT #include "mesh_v1.1/utils.h" +#endif #define DEFAULT_TTL 7 @@ -38,6 +40,158 @@ static struct bt_mesh_cfg_srv *conf; static struct label labels[CONFIG_BLE_MESH_LABEL_COUNT]; +#if !CONFIG_BLE_MESH_V11_SUPPORT +const void *comp_0; + +static uint8_t bt_mesh_comp_page_check(uint8_t page, bool largest) +{ + /* If the page doesn't exist, TWO situations currently: + * 1. For Composition Data Get: + * With the Page field set to the largest page number of + * the Composition Data that the node supports and that is + * less than the Page field value of the received Config + * Composition Data Get message; + * 2. For Large Composition Data Get: + * The Page field shall be set to the largest page number + * of the Composition Data that the node supports. + */ + ARG_UNUSED(largest); + + if (page != 0) { + BT_WARN("Composition Data Page %d not exists", page); + } + + return 0; +} + +static inline uint16_t get_comp_elem_size(struct bt_mesh_elem *elem) +{ + return (4 + elem->model_count * 2 + elem->vnd_model_count * 4); +} + +static uint16_t get_comp_data_size(const struct bt_mesh_comp *comp) +{ + uint16_t size = 10; /* CID + PID + VID + CRPL + Features */ + + for (int i = 0; i < comp->elem_count; i++) { + size += get_comp_elem_size(&(comp->elem[i])); + } + + return size; +} + +static void get_comp_data(struct net_buf_simple *buf, + const struct bt_mesh_comp *comp, + bool full_element) +{ + struct bt_mesh_model *model = NULL; + struct bt_mesh_elem *elem = NULL; + uint16_t feat = 0; + + if (IS_ENABLED(CONFIG_BLE_MESH_RELAY)) { + feat |= BLE_MESH_FEAT_RELAY; + } + + if (IS_ENABLED(CONFIG_BLE_MESH_GATT_PROXY_SERVER)) { + feat |= BLE_MESH_FEAT_PROXY; + } + + if (IS_ENABLED(CONFIG_BLE_MESH_FRIEND)) { + feat |= BLE_MESH_FEAT_FRIEND; + } + + if (IS_ENABLED(CONFIG_BLE_MESH_LOW_POWER)) { + feat |= BLE_MESH_FEAT_LOW_POWER; + } + + net_buf_simple_add_le16(buf, comp->cid); + net_buf_simple_add_le16(buf, comp->pid); + net_buf_simple_add_le16(buf, comp->vid); + net_buf_simple_add_le16(buf, CONFIG_BLE_MESH_CRPL); + net_buf_simple_add_le16(buf, feat); + + for (size_t i = 0; i < comp->elem_count; i++) { + elem = &(comp->elem[i]); + + /* If "full_element" is true, which means the complete list + * of models within the element needs to fit in the data, + * otherwise the element shall not be reported. + */ + if (full_element && + net_buf_simple_tailroom(buf) < get_comp_elem_size(elem)) { + return; + } + + net_buf_simple_add_le16(buf, elem->loc); + net_buf_simple_add_u8(buf, elem->model_count); + net_buf_simple_add_u8(buf, elem->vnd_model_count); + + for (size_t j = 0; j < elem->model_count; j++) { + model = &(elem->models[j]); + net_buf_simple_add_le16(buf, model->id); + } + + for (size_t j = 0; j < elem->vnd_model_count; j++) { + model = &(elem->vnd_models[j]); + net_buf_simple_add_le16(buf, model->vnd.company); + net_buf_simple_add_le16(buf, model->vnd.id); + } + } +} + +static int fetch_comp_data(struct net_buf_simple *buf, + const struct bt_mesh_comp *comp, + uint8_t page, uint16_t offset, + bool full_element) +{ + uint16_t size = get_comp_data_size(comp); + + if (offset >= size) { + BT_WARN("Too large offset %d for comp data %d, size %d", + page, offset, size); + return 0; + } + + if (net_buf_simple_tailroom(buf) < 10 || + size - offset > net_buf_simple_tailroom(buf)) { + BT_ERR("Too small buffer for comp data %d, %d, expected %d", + page, buf->size, size - offset); + return -EINVAL; + } + + if (offset) { + struct net_buf_simple *pdu = bt_mesh_alloc_buf(size); + if (pdu == NULL) { + BT_ERR("%s, Out of memory", __func__); + return -ENOMEM; + } + + get_comp_data(pdu, comp, false); + + /* Get part of Composition Data Page 0/128 */ + net_buf_simple_add_mem(buf, pdu->data + offset, pdu->len - offset); + + bt_mesh_free_buf(pdu); + } else { + get_comp_data(buf, comp, full_element); + } + + return 0; +} + +static int bt_mesh_get_comp_data(struct net_buf_simple *buf, + uint8_t page, uint16_t offset, + bool full_element) +{ + if (page == 0) { + return fetch_comp_data(buf, comp_0, page, offset, full_element); + } + + BT_ERR("Invalid Composition Data Page %d", page); + return -EINVAL; +} +#endif /* !CONFIG_BLE_MESH_V11_SUPPORT */ + static void comp_data_get(struct bt_mesh_model *model, struct bt_mesh_msg_ctx *ctx, struct net_buf_simple *buf) @@ -2758,7 +2912,7 @@ static void node_reset(struct bt_mesh_model *model, bt_mesh_model_msg_init(&msg, OP_NODE_RESET_STATUS); - /* Send the response first since we wont have any keys left to + /* Send the response first since we won't have any keys left to * send it later. */ if (bt_mesh_model_send(model, ctx, &msg, NULL, NULL)) { diff --git a/components/bt/esp_ble_mesh/core/crypto.c b/components/bt/esp_ble_mesh/core/crypto.c index 9b762fb5ed3c..2577c65efba2 100644 --- a/components/bt/esp_ble_mesh/core/crypto.c +++ b/components/bt/esp_ble_mesh/core/crypto.c @@ -22,7 +22,9 @@ #include "mesh/common.h" #include "mesh/adapter.h" +#if CONFIG_BLE_MESH_V11_SUPPORT #include "mesh_v1.1/utils.h" +#endif #define NET_MIC_LEN(pdu) (((pdu)[1] & 0x80) ? 8 : 4) #define APP_MIC_LEN(aszmic) ((aszmic) ? 8 : 4) diff --git a/components/bt/esp_ble_mesh/core/friend.c b/components/bt/esp_ble_mesh/core/friend.c index b1a298d5a97a..aa9607492b22 100644 --- a/components/bt/esp_ble_mesh/core/friend.c +++ b/components/bt/esp_ble_mesh/core/friend.c @@ -21,7 +21,9 @@ #include "mesh/common.h" #include "pvnr_mgmt.h" +#if CONFIG_BLE_MESH_V11_SUPPORT #include "mesh_v1.1/utils.h" +#endif #ifdef CONFIG_BLE_MESH_FRIEND diff --git a/components/bt/esp_ble_mesh/core/lpn.c b/components/bt/esp_ble_mesh/core/lpn.c index f445be5632c4..80f5b4321afc 100644 --- a/components/bt/esp_ble_mesh/core/lpn.c +++ b/components/bt/esp_ble_mesh/core/lpn.c @@ -10,6 +10,7 @@ #include #include "crypto.h" +#include "tag.h" #include "adv.h" #include "scan.h" #include "mesh.h" @@ -23,7 +24,9 @@ #include "mesh/cfg_srv.h" #include "heartbeat.h" +#if CONFIG_BLE_MESH_V11_SUPPORT #include "mesh_v1.1/utils.h" +#endif #ifdef CONFIG_BLE_MESH_LOW_POWER diff --git a/components/bt/esp_ble_mesh/core/main.c b/components/bt/esp_ble_mesh/core/main.c index ad94e2c88b2a..94a43c19b147 100644 --- a/components/bt/esp_ble_mesh/core/main.c +++ b/components/bt/esp_ble_mesh/core/main.c @@ -2,7 +2,7 @@ /* * SPDX-FileCopyrightText: 2017 Intel Corporation - * SPDX-FileContributor: 2018-2021 Espressif Systems (Shanghai) CO LTD + * SPDX-FileContributor: 2018-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -30,7 +30,9 @@ #include "prov_pvnr.h" #include "pvnr_mgmt.h" +#if CONFIG_BLE_MESH_V11_SUPPORT #include "mesh_v1.1/utils.h" +#endif static bool mesh_init = false; @@ -161,9 +163,9 @@ void bt_mesh_node_reset(void) bt_mesh_clear_seq(); bt_mesh_clear_dkca(); bt_mesh_clear_role(); - if (IS_ENABLED(CONFIG_BLE_MESH_DF_SRV)) { - bt_mesh_clear_all_directed_forwarding_table_data(); - } +#if CONFIG_BLE_MESH_DF_SRV + bt_mesh_clear_all_directed_forwarding_table_data(); +#endif } memset(bt_mesh.flags, 0, sizeof(bt_mesh.flags)); @@ -405,12 +407,14 @@ int bt_mesh_init(const struct bt_mesh_prov *prov, return -EALREADY; } +#if CONFIG_BLE_MESH_V11_SUPPORT extern int bt_mesh_v11_ext_init(void); err = bt_mesh_v11_ext_init(); if (err) { BT_ERR("Bluetooth Mesh v1.1 init failed"); return err; } +#endif bt_mesh_mutex_init(); diff --git a/components/bt/esp_ble_mesh/core/mesh.h b/components/bt/esp_ble_mesh/core/mesh.h index c9392240696e..127844790fb7 100644 --- a/components/bt/esp_ble_mesh/core/mesh.h +++ b/components/bt/esp_ble_mesh/core/mesh.h @@ -11,6 +11,7 @@ #define _MESH_H_ #include "net.h" +#include "tag.h" #ifdef __cplusplus extern "C" { diff --git a/components/bt/esp_ble_mesh/core/net.c b/components/bt/esp_ble_mesh/core/net.c index d5b768c7d221..15d099cc5cd3 100644 --- a/components/bt/esp_ble_mesh/core/net.c +++ b/components/bt/esp_ble_mesh/core/net.c @@ -31,7 +31,9 @@ #include "proxy_server.h" #include "pvnr_mgmt.h" +#if CONFIG_BLE_MESH_V11_SUPPORT #include "mesh_v1.1/utils.h" +#endif /* Minimum valid Mesh Network PDU length. The Network headers * themselves take up 9 bytes. After that there is a minimum of 1 byte @@ -1019,6 +1021,33 @@ int bt_mesh_net_encode(struct bt_mesh_net_tx *tx, struct net_buf_simple *buf, return bt_mesh_net_obfuscate(buf->data, BLE_MESH_NET_IVI_TX, priv); } +#if !CONFIG_BLE_MESH_V11_SUPPORT +static void bt_mesh_net_adv_xmit_update(struct bt_mesh_net_tx *tx) +{ + /* When transmitting a Network PDU that is tagged as friendship, + * the Advertising Bearer Network Interface shall transmit the + * Network PDU over the advertising bearer only once. + * + * Note: Currently when transmitting a packet with the friendship + * credentials used, the message flow will not reach here. It + * will be enqueued into the friend queue in transport.c, and + * waited to be sent. + */ + if (bt_mesh_tag_friendship(tx->ctx->send_tag)) { + tx->xmit = BLE_MESH_TRANSMIT(0, BLE_MESH_TRANSMIT_INT(bt_mesh_net_transmit_get())); + return; + } + + if (bt_mesh_tag_relay(tx->ctx->send_tag)) { + tx->xmit = bt_mesh_relay_retransmit_get(); + } else { + tx->xmit = bt_mesh_net_transmit_get(); + } + + return; +} +#endif /* !CONFIG_BLE_MESH_V11_SUPPORT */ + int bt_mesh_net_send(struct bt_mesh_net_tx *tx, struct net_buf *buf, const struct bt_mesh_send_cb *cb, void *cb_data) { @@ -1418,13 +1447,94 @@ static bool relay_to_adv(enum bt_mesh_net_if net_if) case BLE_MESH_NET_IF_ADV: return (bt_mesh_relay_get() == BLE_MESH_RELAY_ENABLED); case BLE_MESH_NET_IF_PROXY: - return (bt_mesh_gatt_proxy_get() == BLE_MESH_GATT_PROXY_ENABLED || - bt_mesh_private_gatt_proxy_state_get() == BLE_MESH_PRIVATE_GATT_PROXY_ENABLED); + return (bt_mesh_gatt_proxy_get() == BLE_MESH_GATT_PROXY_ENABLED +#if CONFIG_BLE_MESH_PRB_SRV + || bt_mesh_private_gatt_proxy_state_get() == BLE_MESH_PRIVATE_GATT_PROXY_ENABLED +#endif + ); default: return false; } } +#if !CONFIG_BLE_MESH_V11_SUPPORT +static uint8_t net_retransmission_adv(struct bt_mesh_net_rx *rx, + uint8_t *cred, uint8_t *tag) +{ + if (rx->ctx.recv_cred == BLE_MESH_FLOODING_CRED) { + uint8_t bearer = BLE_MESH_NONE_BEARER; + + /* Inbound bearer: ADV; + * Inbound Security Material: managed flooding; + */ + + /* Condition: Relay is enabled. */ + if (IS_ENABLED(CONFIG_BLE_MESH_RELAY) && + bt_mesh_relay_get() == BLE_MESH_RELAY_ENABLED) { + bearer |= BLE_MESH_ADV_BEARER; + *cred = BLE_MESH_FLOODING_CRED; + /* Additional action: Tag as relay */ + *tag |= BLE_MESH_TAG_RELAY; + } + + /* Condition: Proxy is enabled. */ + if (IS_ENABLED(CONFIG_BLE_MESH_GATT_PROXY_SERVER) && + bt_mesh_gatt_proxy_get() == BLE_MESH_GATT_PROXY_ENABLED) { + bearer |= BLE_MESH_GATT_BEARER; + *cred = BLE_MESH_FLOODING_CRED; + } + + return bearer; + } + + if (rx->ctx.recv_cred == BLE_MESH_FRIENDSHIP_CRED && + IS_ENABLED(CONFIG_BLE_MESH_FRIEND) && + bt_mesh_friend_get() == BLE_MESH_FRIEND_ENABLED) { + + /* Condition: Directed friend is disabled. */ + *cred = BLE_MESH_FLOODING_CRED; + return BLE_MESH_ALL_BEARERS; + } + + return BLE_MESH_NONE_BEARER; +} + +static uint8_t net_retransmission_gatt(struct bt_mesh_net_rx *rx, + uint8_t *cred, uint8_t *tag) +{ + if (rx->ctx.recv_cred == BLE_MESH_FLOODING_CRED) { + /* Inbound bearer: GATT; + * Inbound Security Material: managed flooding; + * Condition: Proxy is enabled; + */ + if (IS_ENABLED(CONFIG_BLE_MESH_GATT_PROXY_SERVER) && + bt_mesh_gatt_proxy_get() == BLE_MESH_GATT_PROXY_ENABLED) { + /* Condition: Directed proxy is disabled. */ + *cred = BLE_MESH_FLOODING_CRED; + return BLE_MESH_ALL_BEARERS; + } + + return BLE_MESH_NONE_BEARER; + } + + return BLE_MESH_NONE_BEARER; +} + +static uint8_t bt_mesh_net_retrans_match(struct bt_mesh_net_rx *rx, + uint8_t *cred, uint8_t *tag) +{ + if (rx->net_if == BLE_MESH_NET_IF_ADV) { + return net_retransmission_adv(rx, cred, tag); + } + + if (rx->net_if == BLE_MESH_NET_IF_PROXY) { + return net_retransmission_gatt(rx, cred, tag); + } + + return BLE_MESH_NONE_BEARER; +} +#endif /* !CONFIG_BLE_MESH_V11_SUPPORT */ + static void bt_mesh_net_relay(struct net_buf_simple *sbuf, struct bt_mesh_net_rx *rx) { @@ -1621,7 +1731,9 @@ static void bt_mesh_net_relay(struct net_buf_simple *sbuf, (bearer & BLE_MESH_GATT_BEARER) && ((bt_mesh_gatt_proxy_get() == BLE_MESH_GATT_PROXY_ENABLED && cred != BLE_MESH_FRIENDSHIP_CRED) || +#if CONFIG_BLE_MESH_PRB_SRV bt_mesh_private_gatt_proxy_state_get() == BLE_MESH_PRIVATE_GATT_PROXY_ENABLED || +#endif rx->net_if == BLE_MESH_NET_IF_LOCAL || rx->ctx.recv_cred == BLE_MESH_FRIENDSHIP_CRED)) { if (bt_mesh_proxy_server_relay(&buf->b, rx->ctx.recv_dst) && @@ -1819,7 +1931,9 @@ void bt_mesh_net_recv(struct net_buf_simple *data, int8_t rssi, bt_mesh_elem_find(rx.ctx.recv_dst)); if (IS_ENABLED(CONFIG_BLE_MESH_GATT_PROXY_SERVER) && +#if CONFIG_BLE_MESH_PRB_SRV bt_mesh_private_gatt_proxy_state_get() != BLE_MESH_PRIVATE_GATT_PROXY_ENABLED && +#endif net_if == BLE_MESH_NET_IF_PROXY) { bt_mesh_proxy_server_addr_add(data, rx.ctx.addr); diff --git a/components/bt/esp_ble_mesh/core/prov_common.h b/components/bt/esp_ble_mesh/core/prov_common.h index 561712ef1467..d2a8771bec84 100644 --- a/components/bt/esp_ble_mesh/core/prov_common.h +++ b/components/bt/esp_ble_mesh/core/prov_common.h @@ -17,7 +17,9 @@ #include "mesh/timer.h" #include "mesh/adapter.h" +#if CONFIG_BLE_MESH_V11_SUPPORT #include "mesh_v1.1/utils.h" +#endif #ifdef __cplusplus extern "C" { diff --git a/components/bt/esp_ble_mesh/core/prov_node.c b/components/bt/esp_ble_mesh/core/prov_node.c index 4871a1cb1ebd..8053ac82018b 100644 --- a/components/bt/esp_ble_mesh/core/prov_node.c +++ b/components/bt/esp_ble_mesh/core/prov_node.c @@ -22,7 +22,9 @@ #include "prov_common.h" #include "prov_node.h" +#if CONFIG_BLE_MESH_V11_SUPPORT #include "mesh_v1.1/utils.h" +#endif #if CONFIG_BLE_MESH_NODE diff --git a/components/bt/esp_ble_mesh/core/prov_pvnr.c b/components/bt/esp_ble_mesh/core/prov_pvnr.c index e2e0fe5850db..9066597e8768 100644 --- a/components/bt/esp_ble_mesh/core/prov_pvnr.c +++ b/components/bt/esp_ble_mesh/core/prov_pvnr.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2017-2021 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2017-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -22,7 +22,9 @@ #include "prov_pvnr.h" #include "pvnr_mgmt.h" +#if CONFIG_BLE_MESH_V11_SUPPORT #include "mesh_v1.1/utils.h" +#endif #if CONFIG_BLE_MESH_PROVISIONER @@ -1413,7 +1415,7 @@ static int prov_auth(struct bt_mesh_prov_link *link, return -EINVAL; } - /* Provisioner ouput number/string and wait for device's Provisioning Input Complete PDU */ + /* Provisioner output number/string and wait for device's Provisioning Input Complete PDU */ link->expect = PROV_INPUT_COMPLETE; /* NOTE: The Bluetooth SIG recommends that mesh implementations enforce a randomly diff --git a/components/bt/esp_ble_mesh/core/proxy_client.c b/components/bt/esp_ble_mesh/core/proxy_client.c index 9382cf61478e..1719e4737dfb 100644 --- a/components/bt/esp_ble_mesh/core/proxy_client.c +++ b/components/bt/esp_ble_mesh/core/proxy_client.c @@ -21,7 +21,9 @@ #include "pvnr_mgmt.h" #include "mesh/adapter.h" +#if CONFIG_BLE_MESH_V11_SUPPORT #include "mesh_v1.1/utils.h" +#endif #if (CONFIG_BLE_MESH_PROVISIONER && CONFIG_BLE_MESH_PB_GATT) || \ CONFIG_BLE_MESH_GATT_PROXY_CLIENT diff --git a/components/bt/esp_ble_mesh/core/proxy_client.h b/components/bt/esp_ble_mesh/core/proxy_client.h index d2d85017019b..ef8db32f6d27 100644 --- a/components/bt/esp_ble_mesh/core/proxy_client.h +++ b/components/bt/esp_ble_mesh/core/proxy_client.h @@ -11,7 +11,9 @@ #include "mesh/adapter.h" #include "prov_common.h" +#if CONFIG_BLE_MESH_V11_SUPPORT #include "mesh_v1.1/utils.h" +#endif #ifdef __cplusplus extern "C" { diff --git a/components/bt/esp_ble_mesh/core/proxy_server.c b/components/bt/esp_ble_mesh/core/proxy_server.c index 020793dc6e81..532b23d823c1 100644 --- a/components/bt/esp_ble_mesh/core/proxy_server.c +++ b/components/bt/esp_ble_mesh/core/proxy_server.c @@ -22,7 +22,9 @@ #include "prov_common.h" #include "prov_node.h" +#if CONFIG_BLE_MESH_V11_SUPPORT #include "mesh_v1.1/utils.h" +#endif #if (CONFIG_BLE_MESH_NODE && CONFIG_BLE_MESH_PB_GATT) || \ CONFIG_BLE_MESH_GATT_PROXY_SERVER diff --git a/components/bt/esp_ble_mesh/core/pvnr_mgmt.c b/components/bt/esp_ble_mesh/core/pvnr_mgmt.c index 2531a2d2fdba..96ad2feb324c 100644 --- a/components/bt/esp_ble_mesh/core/pvnr_mgmt.c +++ b/components/bt/esp_ble_mesh/core/pvnr_mgmt.c @@ -22,7 +22,9 @@ #include "prov_pvnr.h" #include "pvnr_mgmt.h" +#if CONFIG_BLE_MESH_V11_SUPPORT #include "mesh_v1.1/utils.h" +#endif #if CONFIG_BLE_MESH_PROVISIONER diff --git a/components/bt/esp_ble_mesh/core/scan.c b/components/bt/esp_ble_mesh/core/scan.c index e1b43dd2f631..72b1ccb30006 100644 --- a/components/bt/esp_ble_mesh/core/scan.c +++ b/components/bt/esp_ble_mesh/core/scan.c @@ -2,7 +2,7 @@ /* * SPDX-FileCopyrightText: 2017 Intel Corporation - * SPDX-FileContributor: 2020-2021 Espressif Systems (Shanghai) CO LTD + * SPDX-FileContributor: 2020-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -27,7 +27,9 @@ #include "prov_pvnr.h" #include "mesh/adapter.h" +#if CONFIG_BLE_MESH_V11_SUPPORT #include "mesh_v1.1/utils.h" +#endif /* Scan Window and Interval are equal for continuous scanning */ #define SCAN_INTERVAL 0x20 @@ -263,12 +265,13 @@ static void handle_adv_service_data(struct net_buf_simple *buf, bt_mesh_provisioner_prov_adv_recv(buf, addr, rssi); } - if (IS_ENABLED(CONFIG_BLE_MESH_RPR_SRV) && - bt_mesh_is_provisioned()) { +#if CONFIG_BLE_MESH_RPR_SRV + if (bt_mesh_is_provisioned()) { const bt_mesh_addr_t *addr = bt_mesh_get_unprov_dev_addr(); bt_mesh_unprov_dev_fifo_enqueue(buf->data, addr->val, bt_mesh_get_adv_type()); bt_mesh_rpr_srv_unprov_beacon_recv(buf, bt_mesh_get_adv_type(), addr, rssi); } +#endif break; #endif #if CONFIG_BLE_MESH_GATT_PROXY_CLIENT diff --git a/components/bt/esp_ble_mesh/core/storage/settings.c b/components/bt/esp_ble_mesh/core/storage/settings.c index 34a40d2d303f..ad2232017698 100644 --- a/components/bt/esp_ble_mesh/core/storage/settings.c +++ b/components/bt/esp_ble_mesh/core/storage/settings.c @@ -22,7 +22,9 @@ #include "pvnr_mgmt.h" #include "prov_pvnr.h" +#if CONFIG_BLE_MESH_V11_SUPPORT #include "mesh_v1.1/utils.h" +#endif /* BLE Mesh NVS Key and corresponding data struct. * Note: The length of nvs key must be <= 15. diff --git a/components/bt/esp_ble_mesh/core/tag.h b/components/bt/esp_ble_mesh/core/tag.h new file mode 100644 index 000000000000..d1b9831094a0 --- /dev/null +++ b/components/bt/esp_ble_mesh/core/tag.h @@ -0,0 +1,53 @@ +/* + * SPDX-FileCopyrightText: 2020-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef _BLE_MESH_v11_TAG_H_ +#define _BLE_MESH_v11_TAG_H_ + +#include +#include + +#include "mesh.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if !CONFIG_BLE_MESH_V11_SUPPORT + +/* TAG - additional metadata */ +#define BLE_MESH_TAG_SEND_SEGMENTED BIT(0) +#define BLE_MESH_TAG_IMMUTABLE_CRED BIT(1) +#define BLE_MESH_TAG_RELAY BIT(3) +#define BLE_MESH_TAG_FRIENDSHIP BIT(4) + +static inline bool bt_mesh_tag_send_segmented(uint8_t tag) +{ + return (tag & BLE_MESH_TAG_SEND_SEGMENTED); +} + +static inline bool bt_mesh_tag_immutable_cred(uint8_t tag) +{ + return (tag & BLE_MESH_TAG_IMMUTABLE_CRED); +} + +static inline bool bt_mesh_tag_relay(uint8_t tag) +{ + return (tag & BLE_MESH_TAG_RELAY); +} + +static inline bool bt_mesh_tag_friendship(uint8_t tag) +{ + return (tag & BLE_MESH_TAG_FRIENDSHIP); +} + +#endif /* !CONFIG_BLE_MESH_V11_SUPPORT */ + +#ifdef __cplusplus +} +#endif + +#endif /* _BLE_MESH_v11_TAG_H_ */ diff --git a/components/bt/esp_ble_mesh/core/transport.c b/components/bt/esp_ble_mesh/core/transport.c index 70589706dae3..4f125b99df70 100644 --- a/components/bt/esp_ble_mesh/core/transport.c +++ b/components/bt/esp_ble_mesh/core/transport.c @@ -11,6 +11,7 @@ #include #include "crypto.h" +#include "tag.h" #include "adv.h" #include "mesh.h" #include "lpn.h" @@ -26,7 +27,9 @@ #include "mesh/cfg_srv.h" #include "heartbeat.h" +#if CONFIG_BLE_MESH_V11_SUPPORT #include "mesh_v1.1/utils.h" +#endif /* The transport layer needs at least three buffers for itself to avoid * deadlocks. Ensure that there are a sufficient number of advertising @@ -1039,18 +1042,18 @@ static int ctl_recv(struct bt_mesh_net_rx *rx, uint8_t hdr, return 0; } - if (IS_ENABLED(CONFIG_BLE_MESH_DF_SRV)) { - switch (ctl_op) { - case TRANS_CTL_OP_PATH_REQ: - case TRANS_CTL_OP_PATH_REPLY: - case TRANS_CTL_OP_PATH_CFM: - case TRANS_CTL_OP_PATH_ECHO_REQ: - case TRANS_CTL_OP_PATH_ECHO_REPLY: - case TRANS_CTL_OP_DEP_NODE_UPDATE: - case TRANS_CTL_OP_PATH_REQ_SOLIC: - return bt_mesh_directed_forwarding_ctl_recv(ctl_op, rx, buf); - } +#if CONFIG_BLE_MESH_DF_SRV + switch (ctl_op) { + case TRANS_CTL_OP_PATH_REQ: + case TRANS_CTL_OP_PATH_REPLY: + case TRANS_CTL_OP_PATH_CFM: + case TRANS_CTL_OP_PATH_ECHO_REQ: + case TRANS_CTL_OP_PATH_ECHO_REPLY: + case TRANS_CTL_OP_DEP_NODE_UPDATE: + case TRANS_CTL_OP_PATH_REQ_SOLIC: + return bt_mesh_directed_forwarding_ctl_recv(ctl_op, rx, buf); } +#endif if (IS_ENABLED(CONFIG_BLE_MESH_FRIEND) && !bt_mesh_lpn_established()) { switch (ctl_op) { @@ -1759,8 +1762,6 @@ void bt_mesh_trans_init(void) { int i; - bt_mesh_sar_init(); - for (i = 0; i < ARRAY_SIZE(seg_tx); i++) { k_delayed_work_init(&seg_tx[i].rtx_timer, seg_retransmit); } diff --git a/components/bt/esp_ble_mesh/lib/include/mesh_v1.1/utils.h b/components/bt/esp_ble_mesh/lib/include/mesh_v1.1/utils.h index 71a02314c812..d8e80b196ffd 100644 --- a/components/bt/esp_ble_mesh/lib/include/mesh_v1.1/utils.h +++ b/components/bt/esp_ble_mesh/lib/include/mesh_v1.1/utils.h @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ diff --git a/components/bt/esp_ble_mesh/models/client/client_common.c b/components/bt/esp_ble_mesh/models/client/client_common.c index db87851613d7..7e5448707d96 100644 --- a/components/bt/esp_ble_mesh/models/client/client_common.c +++ b/components/bt/esp_ble_mesh/models/client/client_common.c @@ -14,7 +14,9 @@ #include "mesh/client_common.h" #include "mesh/common.h" +#if CONFIG_BLE_MESH_V11_SUPPORT #include "mesh_v1.1/utils.h" +#endif #define HCI_TIME_FOR_START_ADV K_MSEC(5) /* Three adv related hci commands may take 4 ~ 5ms */ From bd4de3c8a376995fffd3b89cea3a4c30152b1c01 Mon Sep 17 00:00:00 2001 From: Sudeep Mohanty Date: Tue, 1 Oct 2024 15:35:37 +0200 Subject: [PATCH 073/365] fix(freertos): Fixed priority inversion when setting event group bits This commit fixes a priority inversion when a lower priority task set event group bits to unblock a higher priority task but the lower priority task continued to run. --- components/freertos/FreeRTOS-Kernel/tasks.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/components/freertos/FreeRTOS-Kernel/tasks.c b/components/freertos/FreeRTOS-Kernel/tasks.c index 8d06ea30b0d0..368a20599fd5 100644 --- a/components/freertos/FreeRTOS-Kernel/tasks.c +++ b/components/freertos/FreeRTOS-Kernel/tasks.c @@ -4123,10 +4123,19 @@ void vTaskRemoveFromUnorderedEventList( ListItem_t * pxEventListItem, if( taskIS_YIELD_REQUIRED( pxUnblockedTCB, pdFALSE ) == pdTRUE ) { /* The unblocked task has a priority above that of the calling task, so - * a context switch is required. This function is called with the - * scheduler suspended so xYieldPending is set so the context switch - * occurs immediately that the scheduler is resumed (unsuspended). */ - xYieldPending[ xCurCoreID ] = pdTRUE; + * a context switch is required. */ + #if ( configNUM_CORES > 1 ) + + /* In SMP mode, this function is called from a critical section, so we + * yield the current core to schedule the unblocked task. */ + portYIELD_WITHIN_API(); + #else /* configNUM_CORES > 1 */ + + /* In single-core mode, this function is called with the scheduler suspended + * so xYieldPending is set so the context switch occurs immediately once the + * scheduler is resumed (unsuspended). */ + xYieldPending[ xCurCoreID ] = pdTRUE; + #endif /* configNUM_CORES > 1 */ } } } From fc84220d90ad2f96d3d7a0365384121e7627d579 Mon Sep 17 00:00:00 2001 From: Sudeep Mohanty Date: Wed, 2 Oct 2024 10:43:15 +0200 Subject: [PATCH 074/365] test(freertos): Added unit test for event groups to test priority inversion This commit adds a FreeRTOS unit test to verify that event groups do not cause priority inversion when unblocking a higher priority task. --- .../event_groups/test_freertos_eventgroups.c | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/components/freertos/test_apps/freertos/kernel/event_groups/test_freertos_eventgroups.c b/components/freertos/test_apps/freertos/kernel/event_groups/test_freertos_eventgroups.c index b14f1ea1ca24..00ff6980c9ea 100644 --- a/components/freertos/test_apps/freertos/kernel/event_groups/test_freertos_eventgroups.c +++ b/components/freertos/test_apps/freertos/kernel/event_groups/test_freertos_eventgroups.c @@ -132,6 +132,57 @@ TEST_CASE("FreeRTOS Event Group Sync", "[freertos]") vEventGroupDelete(eg); } +static TaskHandle_t run_order[2]; +static uint32_t run_order_index = 0; + +void task_test_eg_prio(void *arg) +{ + TaskHandle_t main_task_hdl = (TaskHandle_t)arg; + + /* Notify the main task that this task has been created */ + xTaskNotifyGive(main_task_hdl); + + /* Wait for the event group bits to be set */ + TEST_ASSERT_EQUAL(1, xEventGroupWaitBits(eg, 1, pdTRUE, pdTRUE, portMAX_DELAY)); + + /* Record the task handle in the run order array */ + run_order[run_order_index++] = xTaskGetCurrentTaskHandle(); + + /* Suspend the task */ + vTaskSuspend(NULL); +} + +TEST_CASE("FreeRTOS Event Groups do not cause priority inversion when higher priority task is unblocked", "[freertos]") +{ + run_order[0] = NULL; + run_order[1] = NULL; + run_order_index = 0; + + /* Initialize the event group */ + eg = xEventGroupCreate(); + + /* Create a task with higher priority than the task that will set the event group bits */ + TaskHandle_t higher_prio_hdl; + TEST_ASSERT_EQUAL(pdTRUE, xTaskCreatePinnedToCore(task_test_eg_prio, "task_test_eg_prio", 2048, (void *)xTaskGetCurrentTaskHandle(), CONFIG_UNITY_FREERTOS_PRIORITY + 1, &higher_prio_hdl, CONFIG_UNITY_FREERTOS_CPU)); + + /* Wait for the task to be created */ + ulTaskNotifyTake(pdTRUE, portMAX_DELAY); + + /* Set the event group bits */ + xEventGroupSetBits(eg, 1); + + /* Record the task handle in the run order array */ + run_order[run_order_index++] = xTaskGetCurrentTaskHandle(); + + /* Verify that the higher priority task was unblocked and immediately scheduled and the lower priority task was preempted */ + TEST_ASSERT_EQUAL(higher_prio_hdl, run_order[0]); + TEST_ASSERT_EQUAL(xTaskGetCurrentTaskHandle(), run_order[1]); + + /* Clean up */ + vEventGroupDelete(eg); + vTaskDelete(higher_prio_hdl); +} + /*-----------------Test case for event group trace facilities-----------------*/ #ifdef CONFIG_FREERTOS_USE_TRACE_FACILITY /* From 02e9c850d8be6be04d0e34dbfe979708c947b395 Mon Sep 17 00:00:00 2001 From: sibeibei Date: Tue, 8 Oct 2024 15:36:40 +0800 Subject: [PATCH 075/365] fix(wifi): fix wifi bugs 240919 --- components/esp_coex/Kconfig | 4 ++-- components/esp_coex/src/coexist_debug.c | 2 ++ components/esp_wifi/lib | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/components/esp_coex/Kconfig b/components/esp_coex/Kconfig index 5fb0eac973aa..bc37b3820b2d 100644 --- a/components/esp_coex/Kconfig +++ b/components/esp_coex/Kconfig @@ -217,7 +217,7 @@ menu "Wireless Coexistence" default 12 if IDF_TARGET_ESP32S3 default 3 if IDF_TARGET_ESP32C2 default 22 if IDF_TARGET_ESP32C6 - default 16 if IDF_TARGET_ESP32C5 + default 10 if IDF_TARGET_ESP32C5 default 13 if IDF_TARGET_ESP32C61 default 11 @@ -231,7 +231,7 @@ menu "Wireless Coexistence" default 13 if IDF_TARGET_ESP32S3 default 2 if IDF_TARGET_ESP32C2 default 21 if IDF_TARGET_ESP32C6 - default 0 if IDF_TARGET_ESP32C5 + default 9 if IDF_TARGET_ESP32C5 default 12 if IDF_TARGET_ESP32C61 default 12 diff --git a/components/esp_coex/src/coexist_debug.c b/components/esp_coex/src/coexist_debug.c index 7c38eea8e515..317f7c4547ec 100644 --- a/components/esp_coex/src/coexist_debug.c +++ b/components/esp_coex/src/coexist_debug.c @@ -89,6 +89,7 @@ static const void* rom_funcs[] = { pm_tx_null_data_done_process, pm_start, pm_stop, + pm_disconnected_wake, #endif }; static const char* rom_funcs_name[] = { @@ -109,6 +110,7 @@ static const char* rom_funcs_name[] = { "pm_tx_null_data_done_process", "pm_start", "pm_stop", + "pm_disconnected_wake", #endif }; diff --git a/components/esp_wifi/lib b/components/esp_wifi/lib index e5111a1452e6..6c96f870aeec 160000 --- a/components/esp_wifi/lib +++ b/components/esp_wifi/lib @@ -1 +1 @@ -Subproject commit e5111a1452e6d5ae3474a7cbe1c151998537e10b +Subproject commit 6c96f870aeec6bf57b321d0fd52f95086e9e7e80 From 3f061bd557b3b4c77fe30e2823388f7c292a33a8 Mon Sep 17 00:00:00 2001 From: "C.S.M" Date: Mon, 23 Sep 2024 17:50:12 +0800 Subject: [PATCH 076/365] feat(i2c_master): Support i2c sleep retention on esp32c5/p4/c61 --- components/driver/i2c/i2c.c | 10 ++-- components/esp_driver_i2c/i2c_common.c | 38 ++++++++++----- components/esp_driver_i2c/i2c_master.c | 10 ++++ components/esp_driver_i2c/i2c_private.h | 13 ++++++ components/esp_driver_i2c/i2c_slave.c | 6 +++ .../include/driver/i2c_master.h | 3 ++ .../esp_driver_i2c/include/driver/i2c_slave.h | 3 ++ .../test_apps/.build-test-rules.yml | 5 -- .../i2c_test_apps/main/CMakeLists.txt | 7 +-- .../main/test_i2c_sleep_retention.c | 10 ++++ .../test_apps/i2c_test_apps/pytest_i2c.py | 18 +------- .../i2c_test_apps/sdkconfig.ci.iram_safe | 1 + .../i2c_test_apps/sdkconfig.ci.release | 1 + .../sdkconfig.ci.sleep_retention | 5 -- components/hal/esp32c6/include/hal/i2c_ll.h | 3 -- components/hal/esp32h2/include/hal/i2c_ll.h | 3 -- components/soc/esp32c5/i2c_periph.c | 29 ++++++++++++ .../esp32c5/include/soc/Kconfig.soc_caps.in | 4 ++ components/soc/esp32c5/include/soc/soc_caps.h | 2 +- components/soc/esp32c6/i2c_periph.c | 4 +- components/soc/esp32c61/i2c_periph.c | 29 ++++++++++++ .../esp32c61/include/soc/Kconfig.soc_caps.in | 4 ++ .../soc/esp32c61/include/soc/soc_caps.h | 1 + components/soc/esp32h2/i2c_periph.c | 6 +-- components/soc/esp32p4/i2c_periph.c | 46 +++++++++++++++++++ .../esp32p4/include/soc/Kconfig.soc_caps.in | 4 ++ .../include/soc/retention_periph_defs.h | 2 + components/soc/esp32p4/include/soc/soc_caps.h | 2 +- components/soc/include/soc/i2c_periph.h | 4 ++ docs/en/api-reference/peripherals/i2c.rst | 2 +- docs/zh_CN/api-reference/peripherals/i2c.rst | 1 + .../cxx_build_test/main/test_i2c_lcd.cpp | 1 + 32 files changed, 216 insertions(+), 61 deletions(-) delete mode 100644 components/esp_driver_i2c/test_apps/i2c_test_apps/sdkconfig.ci.sleep_retention diff --git a/components/driver/i2c/i2c.c b/components/driver/i2c/i2c.c index 12f2a25d7b71..1450f9af1e8b 100644 --- a/components/driver/i2c/i2c.c +++ b/components/driver/i2c/i2c.c @@ -280,7 +280,7 @@ static void i2c_hw_enable(i2c_port_t i2c_num) static esp_err_t i2c_sleep_retention_init(void *arg) { i2c_port_t i2c_num = *(i2c_port_t *)arg; - esp_err_t ret = sleep_retention_entries_create(i2c_regs_retention[i2c_num].link_list, i2c_regs_retention[i2c_num].link_num, REGDMA_LINK_PRI_I2C, I2C_SLEEP_RETENTION_MODULE(i2c_num)); + esp_err_t ret = sleep_retention_entries_create(i2c_regs_retention[i2c_num].link_list, i2c_regs_retention[i2c_num].link_num, REGDMA_LINK_PRI_I2C, i2c_regs_retention[i2c_num].module_id); ESP_RETURN_ON_ERROR(ret, I2C_TAG, "failed to allocate mem for sleep retention"); return ret; } @@ -428,9 +428,9 @@ esp_err_t i2c_driver_install(i2c_port_t i2c_num, i2c_mode_t mode, size_t slv_rx_ sleep_retention_module_init_param_t init_param = { .cbs = { .create = { .handle = i2c_sleep_retention_init, .arg = &i2c_num } } }; - ret = sleep_retention_module_init(I2C_SLEEP_RETENTION_MODULE(i2c_num), &init_param); + ret = sleep_retention_module_init(i2c_regs_retention[i2c_num].module_id, &init_param); if (ret == ESP_OK) { - sleep_retention_module_allocate(I2C_SLEEP_RETENTION_MODULE(i2c_num)); + sleep_retention_module_allocate(i2c_regs_retention[i2c_num].module_id); } #endif return ESP_OK; @@ -486,9 +486,9 @@ esp_err_t i2c_driver_delete(i2c_port_t i2c_num) p_i2c->intr_handle = NULL; #if CONFIG_PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP && SOC_I2C_SUPPORT_SLEEP_RETENTION - esp_err_t err = sleep_retention_module_free(I2C_SLEEP_RETENTION_MODULE(i2c_num)); + esp_err_t err = sleep_retention_module_free(i2c_regs_retention[i2c_num].module_id); if (err == ESP_OK) { - err = sleep_retention_module_deinit(I2C_SLEEP_RETENTION_MODULE(i2c_num)); + err = sleep_retention_module_deinit(i2c_regs_retention[i2c_num].module_id); } #endif diff --git a/components/esp_driver_i2c/i2c_common.c b/components/esp_driver_i2c/i2c_common.c index 87bad063b03e..b2590a7bae87 100644 --- a/components/esp_driver_i2c/i2c_common.c +++ b/components/esp_driver_i2c/i2c_common.c @@ -33,7 +33,7 @@ #include "soc/rtc_io_channel.h" #include "driver/lp_io.h" #endif -#if CONFIG_PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP +#if I2C_USE_RETENTION_LINK #include "esp_private/sleep_retention.h" #endif @@ -47,15 +47,31 @@ typedef struct i2c_platform_t { static i2c_platform_t s_i2c_platform = {}; // singleton platform -#if CONFIG_PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP && SOC_I2C_SUPPORT_SLEEP_RETENTION +#if I2C_USE_RETENTION_LINK static esp_err_t s_i2c_sleep_retention_init(void *arg) { i2c_bus_t *bus = (i2c_bus_t *)arg; i2c_port_num_t port_num = bus->port_num; - esp_err_t ret = sleep_retention_entries_create(i2c_regs_retention[port_num].link_list, i2c_regs_retention[port_num].link_num, REGDMA_LINK_PRI_I2C, I2C_SLEEP_RETENTION_MODULE(port_num)); + esp_err_t ret = sleep_retention_entries_create(i2c_regs_retention[port_num].link_list, i2c_regs_retention[port_num].link_num, REGDMA_LINK_PRI_I2C, i2c_regs_retention[port_num].module_id); ESP_RETURN_ON_ERROR(ret, TAG, "failed to allocate mem for sleep retention"); return ret; } + +void i2c_create_retention_module(i2c_bus_handle_t handle) +{ + i2c_port_num_t port_num = handle->port_num; + _lock_acquire(&s_i2c_platform.mutex); + if (handle->retention_link_created == false) { + if (sleep_retention_module_allocate(i2c_regs_retention[port_num].module_id) != ESP_OK) { + // even though the sleep retention module create failed, I2C driver should still work, so just warning here + ESP_LOGW(TAG, "create retention module failed, power domain can't turn off"); + } else { + handle->retention_link_created = true; + } + } + _lock_release(&s_i2c_platform.mutex); + +} #endif static esp_err_t s_i2c_bus_handle_acquire(i2c_port_num_t port_num, i2c_bus_handle_t *i2c_new_bus, i2c_bus_mode_t mode) @@ -77,14 +93,14 @@ static esp_err_t s_i2c_bus_handle_acquire(i2c_port_num_t port_num, i2c_bus_handl bus->bus_mode = mode; bus->is_lp_i2c = (bus->port_num < SOC_HP_I2C_NUM) ? false : true; -#if CONFIG_PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP && SOC_I2C_SUPPORT_SLEEP_RETENTION +#if I2C_USE_RETENTION_LINK if (bus->is_lp_i2c == false) { sleep_retention_module_init_param_t init_param = { .cbs = { .create = { .handle = s_i2c_sleep_retention_init, .arg = (void *)bus } } }; - ret = sleep_retention_module_init(I2C_SLEEP_RETENTION_MODULE(port_num), &init_param); - if (ret == ESP_OK) { - sleep_retention_module_allocate(I2C_SLEEP_RETENTION_MODULE(port_num)); + esp_err_t err = sleep_retention_module_init(i2c_regs_retention[port_num].module_id, &init_param); + if (err != ESP_OK) { + ESP_LOGW(TAG, "init sleep retention failed on bus %d, power domain may be turned off during sleep", port_num); } } else { ESP_LOGW(TAG, "Detected PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP is enabled while LP_I2C is used. Sleep retention is not supported on LP I2C. Please use it properly"); @@ -175,12 +191,12 @@ esp_err_t i2c_release_bus_handle(i2c_bus_handle_t i2c_bus) if (s_i2c_platform.count[port_num] == 0) { do_deinitialize = true; s_i2c_platform.buses[port_num] = NULL; -#if CONFIG_PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP && SOC_I2C_SUPPORT_SLEEP_RETENTION +#if I2C_USE_RETENTION_LINK if (i2c_bus->is_lp_i2c == false) { - esp_err_t err = sleep_retention_module_free(I2C_SLEEP_RETENTION_MODULE(port_num)); - if (err == ESP_OK) { - err = sleep_retention_module_deinit(I2C_SLEEP_RETENTION_MODULE(port_num)); + if (i2c_bus->retention_link_created) { + sleep_retention_module_free(i2c_regs_retention[port_num].module_id); } + sleep_retention_module_deinit(i2c_regs_retention[port_num].module_id); } #endif if (i2c_bus->intr_handle) { diff --git a/components/esp_driver_i2c/i2c_master.c b/components/esp_driver_i2c/i2c_master.c index ad18d2806d35..838d0578d73c 100644 --- a/components/esp_driver_i2c/i2c_master.c +++ b/components/esp_driver_i2c/i2c_master.c @@ -932,6 +932,10 @@ esp_err_t i2c_new_master_bus(const i2c_master_bus_config_t *bus_config, i2c_mast ESP_RETURN_ON_FALSE((bus_config->i2c_port < SOC_I2C_NUM || bus_config->i2c_port == -1), ESP_ERR_INVALID_ARG, TAG, "invalid i2c port number"); ESP_RETURN_ON_FALSE(GPIO_IS_VALID_GPIO(bus_config->sda_io_num) && GPIO_IS_VALID_GPIO(bus_config->scl_io_num), ESP_ERR_INVALID_ARG, TAG, "invalid SDA/SCL pin number"); +#if !SOC_I2C_SUPPORT_SLEEP_RETENTION + ESP_RETURN_ON_FALSE(bus_config->flags.allow_pd == 0, ESP_ERR_NOT_SUPPORTED, TAG, "not able to power down in light sleep"); +#endif // SOC_I2C_SUPPORT_SLEEP_RETENTION + i2c_master = heap_caps_calloc(1, sizeof(i2c_master_bus_t) + 20 * sizeof(i2c_transaction_t), I2C_MEM_ALLOC_CAPS); ESP_RETURN_ON_FALSE(i2c_master, ESP_ERR_NO_MEM, TAG, "no memory for i2c master bus"); @@ -980,6 +984,12 @@ esp_err_t i2c_new_master_bus(const i2c_master_bus_config_t *bus_config, i2c_mast ESP_RETURN_ON_FALSE(1 << (bus_config->intr_priority) & I2C_ALLOW_INTR_PRIORITY_MASK, ESP_ERR_INVALID_ARG, TAG, "invalid interrupt priority:%d", bus_config->intr_priority); } +#if I2C_USE_RETENTION_LINK + if (bus_config->flags.allow_pd != 0) { + i2c_create_retention_module(i2c_master->base); + } +#endif // I2C_USE_RETENTION_LINK + xSemaphoreTake(i2c_master->bus_lock_mux, portMAX_DELAY); SLIST_INIT(&i2c_master->device_list); xSemaphoreGive(i2c_master->bus_lock_mux); diff --git a/components/esp_driver_i2c/i2c_private.h b/components/esp_driver_i2c/i2c_private.h index a78dfdd06743..979387655199 100644 --- a/components/esp_driver_i2c/i2c_private.h +++ b/components/esp_driver_i2c/i2c_private.h @@ -54,6 +54,9 @@ extern "C" { #define I2C_INTR_ALLOC_FLAG (ESP_INTR_FLAG_SHARED | ESP_INTR_FLAG_LOWMED) #endif +// Use retention link only when the target supports sleep retention and PM is enabled +#define I2C_USE_RETENTION_LINK (SOC_I2C_SUPPORT_SLEEP_RETENTION && CONFIG_PM_ENABLE && CONFIG_PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP) + #define I2C_ALLOW_INTR_PRIORITY_MASK ESP_INTR_FLAG_LOWMED #define I2C_PM_LOCK_NAME_LEN_MAX 16 @@ -119,6 +122,9 @@ struct i2c_bus_t { char pm_lock_name[I2C_PM_LOCK_NAME_LEN_MAX]; // pm lock name #endif i2c_bus_mode_t bus_mode; // I2C bus mode +#if SOC_I2C_SUPPORT_SLEEP_RETENTION + bool retention_link_created; // mark if the retention link is created. +#endif }; typedef struct i2c_master_device_list { @@ -260,6 +266,13 @@ esp_err_t i2c_common_set_pins(i2c_bus_handle_t handle); */ bool i2c_bus_occupied(i2c_port_num_t port_num); +/** + * @brief Create sleep retention link + * + * @param handle I2C bus handle + */ +void i2c_create_retention_module(i2c_bus_handle_t handle); + #ifdef __cplusplus } #endif diff --git a/components/esp_driver_i2c/i2c_slave.c b/components/esp_driver_i2c/i2c_slave.c index 6b000ef66ede..2cb3da25958a 100644 --- a/components/esp_driver_i2c/i2c_slave.c +++ b/components/esp_driver_i2c/i2c_slave.c @@ -235,6 +235,12 @@ esp_err_t i2c_new_slave_device(const i2c_slave_config_t *slave_config, i2c_slave ret = esp_intr_alloc_intrstatus(i2c_periph_signal[i2c_port_num].irq, isr_flags, (uint32_t)i2c_ll_get_interrupt_status_reg(hal->dev), I2C_LL_SLAVE_EVENT_INTR, s_slave_isr_handle_default, i2c_slave, &i2c_slave->base->intr_handle); ESP_GOTO_ON_ERROR(ret, err, TAG, "install i2c slave interrupt failed"); +#if I2C_USE_RETENTION_LINK + if (slave_config->flags.allow_pd != 0) { + i2c_create_retention_module(i2c_slave->base); + } +#endif // I2C_USE_RETENTION_LINK + portENTER_CRITICAL(&i2c_slave->base->spinlock); i2c_ll_clear_intr_mask(hal->dev, I2C_LL_SLAVE_EVENT_INTR); i2c_hal_slave_init(hal); diff --git a/components/esp_driver_i2c/include/driver/i2c_master.h b/components/esp_driver_i2c/include/driver/i2c_master.h index a7b1a0d4c725..92928b14417f 100644 --- a/components/esp_driver_i2c/include/driver/i2c_master.h +++ b/components/esp_driver_i2c/include/driver/i2c_master.h @@ -33,6 +33,9 @@ typedef struct { size_t trans_queue_depth; /*!< Depth of internal transfer queue, increase this value can support more transfers pending in the background, only valid in asynchronous transaction. (Typically max_device_num * per_transaction)*/ struct { uint32_t enable_internal_pullup: 1; /*!< Enable internal pullups. Note: This is not strong enough to pullup buses under high-speed frequency. Recommend proper external pull-up if possible */ + uint32_t allow_pd: 1; /*!< If set, the driver will backup/restore the I2C registers before/after entering/exist sleep mode. + By this approach, the system can power off I2C's power domain. + This can save power, but at the expense of more RAM being consumed */ } flags; /*!< I2C master config flags */ } i2c_master_bus_config_t; diff --git a/components/esp_driver_i2c/include/driver/i2c_slave.h b/components/esp_driver_i2c/include/driver/i2c_slave.h index 897b9899ed03..5a443a174c9a 100644 --- a/components/esp_driver_i2c/include/driver/i2c_slave.h +++ b/components/esp_driver_i2c/include/driver/i2c_slave.h @@ -40,6 +40,9 @@ typedef struct { #if SOC_I2C_SLAVE_SUPPORT_SLAVE_UNMATCH uint32_t slave_unmatch_en: 1; /*!< Can trigger unmatch interrupt when slave address does not match what master sends*/ #endif + uint32_t allow_pd: 1; /*!< If set, the driver will backup/restore the I2C registers before/after entering/exist sleep mode. + By this approach, the system can power off I2C's power domain. + This can save power, but at the expense of more RAM being consumed */ } flags; /*!< I2C slave config flags */ } i2c_slave_config_t; diff --git a/components/esp_driver_i2c/test_apps/.build-test-rules.yml b/components/esp_driver_i2c/test_apps/.build-test-rules.yml index b363f05a9910..5436c0467eaf 100644 --- a/components/esp_driver_i2c/test_apps/.build-test-rules.yml +++ b/components/esp_driver_i2c/test_apps/.build-test-rules.yml @@ -5,8 +5,3 @@ components/esp_driver_i2c/test_apps/i2c_test_apps: - if: SOC_I2C_SUPPORTED != 1 depends_components: - esp_driver_i2c - # Following dependency is needed because they might increase lazy installed memory - # that can cause sleep retention memory leak check failed. - - components/ieee802154/** - - components/esp_coex/** - - components/esp_phy/** diff --git a/components/esp_driver_i2c/test_apps/i2c_test_apps/main/CMakeLists.txt b/components/esp_driver_i2c/test_apps/i2c_test_apps/main/CMakeLists.txt index 2f653da9aeb1..564a14d2d1f4 100644 --- a/components/esp_driver_i2c/test_apps/i2c_test_apps/main/CMakeLists.txt +++ b/components/esp_driver_i2c/test_apps/i2c_test_apps/main/CMakeLists.txt @@ -25,13 +25,10 @@ if(CONFIG_SOC_LP_I2C_SUPPORTED) list(APPEND srcs "test_lp_i2c.c") endif() -# Only build this file with `CONFIG_PM_POWER_DOWN_CPU_IN_LIGHT_SLEEP` and `CONFIG_IEEE802154_ENABLED` enabled -# Enable `CONFIG_IEEE802154_ENABLED` is for modem domain really power down. -# This reliable can be removed if the sleep retention got finished. -if(CONFIG_PM_POWER_DOWN_CPU_IN_LIGHT_SLEEP AND CONFIG_IEEE802154_ENABLED) +if(CONFIG_SOC_I2C_SUPPORT_SLEEP_RETENTION) list(APPEND srcs "test_i2c_sleep_retention.c") endif() idf_component_register(SRCS ${srcs} - PRIV_REQUIRES unity driver test_utils ieee802154 + PRIV_REQUIRES unity driver test_utils WHOLE_ARCHIVE) diff --git a/components/esp_driver_i2c/test_apps/i2c_test_apps/main/test_i2c_sleep_retention.c b/components/esp_driver_i2c/test_apps/i2c_test_apps/main/test_i2c_sleep_retention.c index 8f1ca39d8e8b..845791cfed72 100644 --- a/components/esp_driver_i2c/test_apps/i2c_test_apps/main/test_i2c_sleep_retention.c +++ b/components/esp_driver_i2c/test_apps/i2c_test_apps/main/test_i2c_sleep_retention.c @@ -43,6 +43,7 @@ static void i2c_master_write_sleep_retention_test(void) .scl_io_num = I2C_MASTER_SCL_IO, .sda_io_num = I2C_MASTER_SDA_IO, .flags.enable_internal_pullup = true, + .flags.allow_pd = true, }; i2c_master_bus_handle_t bus_handle; @@ -68,7 +69,9 @@ static void i2c_master_write_sleep_retention_test(void) TEST_ESP_OK(i2c_master_transmit(dev_handle, data_wr, DATA_LENGTH, -1)); unity_wait_for_signal("i2c slave receive once, master to sleep"); +#if ESP_SLEEP_POWER_DOWN_CPU TEST_ESP_OK(sleep_cpu_configure(true)); +#endif TEST_ESP_OK(esp_sleep_enable_timer_wakeup(3 * 1000 * 1000)); TEST_ESP_OK(esp_light_sleep_start()); @@ -84,7 +87,9 @@ static void i2c_master_write_sleep_retention_test(void) unity_send_signal("master write again"); unity_wait_for_signal("ready to delete"); +#if ESP_SLEEP_POWER_DOWN_CPU TEST_ESP_OK(sleep_cpu_configure(false)); +#endif TEST_ESP_OK(i2c_master_bus_rm_device(dev_handle)); TEST_ESP_OK(i2c_del_master_bus(bus_handle)); @@ -103,6 +108,7 @@ static void i2c_slave_read_sleep_retention_test(void) .scl_io_num = I2C_SLAVE_SCL_IO, .sda_io_num = I2C_SLAVE_SDA_IO, .slave_addr = 0x58, + .flags.allow_pd = true, }; i2c_slave_dev_handle_t slave_handle; @@ -128,7 +134,9 @@ static void i2c_slave_read_sleep_retention_test(void) unity_send_signal("i2c slave receive once, master to sleep"); // Slave sleep as well.. +#if ESP_SLEEP_POWER_DOWN_CPU TEST_ESP_OK(sleep_cpu_configure(true)); +#endif TEST_ESP_OK(esp_sleep_enable_timer_wakeup(1 * 1000 * 1000)); TEST_ESP_OK(esp_light_sleep_start()); @@ -147,7 +155,9 @@ static void i2c_slave_read_sleep_retention_test(void) vQueueDelete(s_receive_queue); unity_send_signal("ready to delete"); +#if ESP_SLEEP_POWER_DOWN_CPU TEST_ESP_OK(sleep_cpu_configure(false)); +#endif TEST_ESP_OK(i2c_del_slave_device(slave_handle)); } diff --git a/components/esp_driver_i2c/test_apps/i2c_test_apps/pytest_i2c.py b/components/esp_driver_i2c/test_apps/i2c_test_apps/pytest_i2c.py index 56a8eb0bf898..4683913b5c04 100644 --- a/components/esp_driver_i2c/test_apps/i2c_test_apps/pytest_i2c.py +++ b/components/esp_driver_i2c/test_apps/i2c_test_apps/pytest_i2c.py @@ -31,6 +31,8 @@ def test_i2c(dut: Dut) -> None: 'count, config', [ (2, 'defaults',), + (2, 'release',), + (2, 'iram_safe',), ], indirect=True ) @@ -38,19 +40,3 @@ def test_i2c_multi_device(case_tester) -> None: # type: ignore for case in case_tester.test_menu: if case.attributes.get('test_env', 'generic_multi_device') == 'generic_multi_device': case_tester.run_multi_dev_case(case=case, reset=True) - - -@pytest.mark.esp32c6 -@pytest.mark.esp32h2 -@pytest.mark.generic_multi_device -@pytest.mark.parametrize( - 'count, config', - [ - (2, 'sleep_retention',), - ], - indirect=True -) -def test_i2c_sleep_retention(case_tester) -> None: # type: ignore - for case in case_tester.test_menu: - if case.attributes.get('test_env', 'generic_multi_device') == 'generic_multi_device': - case_tester.run_multi_dev_case(case=case, reset=True, timeout=250) diff --git a/components/esp_driver_i2c/test_apps/i2c_test_apps/sdkconfig.ci.iram_safe b/components/esp_driver_i2c/test_apps/i2c_test_apps/sdkconfig.ci.iram_safe index 3d8248686352..05c3f1a8d133 100644 --- a/components/esp_driver_i2c/test_apps/i2c_test_apps/sdkconfig.ci.iram_safe +++ b/components/esp_driver_i2c/test_apps/i2c_test_apps/sdkconfig.ci.iram_safe @@ -2,5 +2,6 @@ CONFIG_PM_ENABLE=y CONFIG_COMPILER_DUMP_RTL_FILES=y CONFIG_FREERTOS_USE_TICKLESS_IDLE=y CONFIG_COMPILER_OPTIMIZATION_NONE=y +CONFIG_ESP_MAIN_TASK_STACK_SIZE=8192 CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT=y CONFIG_I2C_ISR_IRAM_SAFE=y diff --git a/components/esp_driver_i2c/test_apps/i2c_test_apps/sdkconfig.ci.release b/components/esp_driver_i2c/test_apps/i2c_test_apps/sdkconfig.ci.release index 91d93f163e62..eb643d4d06bc 100644 --- a/components/esp_driver_i2c/test_apps/i2c_test_apps/sdkconfig.ci.release +++ b/components/esp_driver_i2c/test_apps/i2c_test_apps/sdkconfig.ci.release @@ -1,4 +1,5 @@ CONFIG_PM_ENABLE=y +CONFIG_PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP=y CONFIG_FREERTOS_USE_TICKLESS_IDLE=y CONFIG_COMPILER_OPTIMIZATION_SIZE=y CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE=y diff --git a/components/esp_driver_i2c/test_apps/i2c_test_apps/sdkconfig.ci.sleep_retention b/components/esp_driver_i2c/test_apps/i2c_test_apps/sdkconfig.ci.sleep_retention deleted file mode 100644 index 219e27e6b932..000000000000 --- a/components/esp_driver_i2c/test_apps/i2c_test_apps/sdkconfig.ci.sleep_retention +++ /dev/null @@ -1,5 +0,0 @@ -CONFIG_PM_ENABLE=y -CONFIG_PM_POWER_DOWN_CPU_IN_LIGHT_SLEEP=y -CONFIG_FREERTOS_USE_TICKLESS_IDLE=y -CONFIG_IEEE802154_ENABLED=y -CONFIG_IEEE802154_SLEEP_ENABLE=y diff --git a/components/hal/esp32c6/include/hal/i2c_ll.h b/components/hal/esp32c6/include/hal/i2c_ll.h index e8aaa77828dd..c50ad9c13610 100644 --- a/components/hal/esp32c6/include/hal/i2c_ll.h +++ b/components/hal/esp32c6/include/hal/i2c_ll.h @@ -85,9 +85,6 @@ typedef enum { #define LP_I2C_SDA_IOMUX_PAD 6 #define LP_I2C_SCL_IOMUX_PAD 7 -// I2C sleep retention module -#define I2C_SLEEP_RETENTION_MODULE(i2c_num) (SLEEP_RETENTION_MODULE_I2C0) - /** * @brief Calculate I2C bus frequency * Note that the clock accuracy is affected by the external pull-up resistor, diff --git a/components/hal/esp32h2/include/hal/i2c_ll.h b/components/hal/esp32h2/include/hal/i2c_ll.h index d636cc0c7194..83d8816f734b 100644 --- a/components/hal/esp32h2/include/hal/i2c_ll.h +++ b/components/hal/esp32h2/include/hal/i2c_ll.h @@ -76,9 +76,6 @@ typedef enum { #define I2C_LL_RESET_SLV_SCL_PULSE_NUM_DEFAULT (9) #define I2C_LL_SCL_WAIT_US_VAL_DEFAULT (2500) // Approximate value for SCL timeout regs (in us). -// I2C sleep retention module -#define I2C_SLEEP_RETENTION_MODULE(i2c_num) ((i2c_num == 0) ? SLEEP_RETENTION_MODULE_I2C0 : SLEEP_RETENTION_MODULE_I2C1) - /** * @brief Calculate I2C bus frequency * Note that the clock accuracy is affected by the external pull-up resistor, diff --git a/components/soc/esp32c5/i2c_periph.c b/components/soc/esp32c5/i2c_periph.c index 5cc53907f946..bd702887f88e 100644 --- a/components/soc/esp32c5/i2c_periph.c +++ b/components/soc/esp32c5/i2c_periph.c @@ -40,3 +40,32 @@ const i2c_signal_conn_t i2c_periph_signal[SOC_I2C_NUM] = { .irq = ETS_LP_I2C_INTR_SOURCE, }, }; + +// I2C sleep retention entries +// I2C registers require set the reg_update bit to make the configuration take effect + +/* I2C Registers Context + Include: I2C_SCL_LOW_PERIOD_REG / + I2C_CTR_REG / I2C_TO_REG / I2C_SLAVE_ADDR_REG / I2C_FIFO_CONF_REG + I2C_INT_ENA_REG / I2C_SDA_HOLD_REG / I2C_SDA_SAMPLE_REG / I2C_SCL_START_HOLD_REG + I2C_SCL_RSTART_SETUP_REG / I2C_SCL_STOP_HOLD_REG / I2C_SCL_STOP_SETUP_REG /I2C_FILTER_CFG_REG / I2C_CLK_CONF_REG / I2C_SCL_ST_TIME_OUT_REG / I2C_SCL_MAIN_ST_TIME_OUT_REG / I2C_SCL_SP_CONF_REG / I2C_SCL_STRETCH_CONF_REG +*/ +#define I2C0_RETENTION_REGS_CNT 18 +#define I2C0_RETENTION_MAP_BASE I2C_SCL_LOW_PERIOD_REG(0) +static const uint32_t i2c0_regs_map[4] = {0xc03f345b, 0x3, 0, 0}; +static const regdma_entries_config_t i2c0_regs_retention[] = { + [0] = {.config = REGDMA_LINK_ADDR_MAP_INIT(REGDMA_I2C_LINK(0x00), I2C0_RETENTION_MAP_BASE, I2C0_RETENTION_MAP_BASE, I2C0_RETENTION_REGS_CNT, 0, 0, i2c0_regs_map[0], i2c0_regs_map[1], i2c0_regs_map[2], i2c0_regs_map[3]), \ + .owner = ENTRY(0) | ENTRY(2) }, \ + [1] = {.config = REGDMA_LINK_WRITE_INIT(REGDMA_I2C_LINK(0x01), I2C_CTR_REG(0), I2C_FSM_RST, I2C_FSM_RST_M, 1, 0), \ + .owner = ENTRY(0) | ENTRY(2) }, \ + [2] = {.config = REGDMA_LINK_WRITE_INIT(REGDMA_I2C_LINK(0x02), I2C_CTR_REG(0), 0x0, I2C_FSM_RST_M, 1, 0), \ + .owner = ENTRY(0) | ENTRY(2) }, \ + [3] = {.config = REGDMA_LINK_WRITE_INIT(REGDMA_I2C_LINK(0x03), I2C_CTR_REG(0), I2C_CONF_UPGATE, I2C_CONF_UPGATE_M, 1, 0), \ + .owner = ENTRY(0) | ENTRY(2) }, \ + [4] = {.config = REGDMA_LINK_WAIT_INIT(REGDMA_I2C_LINK(0x04), I2C_CTR_REG(0), 0x0, I2C_CONF_UPGATE_M, 1, 0), \ + .owner = ENTRY(0) | ENTRY(2) }, \ +}; + +const i2c_reg_ctx_link_t i2c_regs_retention[SOC_HP_I2C_NUM] = { + {i2c0_regs_retention, ARRAY_SIZE(i2c0_regs_retention), SLEEP_RETENTION_MODULE_I2C0}, +}; diff --git a/components/soc/esp32c5/include/soc/Kconfig.soc_caps.in b/components/soc/esp32c5/include/soc/Kconfig.soc_caps.in index 8943b4f27958..23a96312324b 100644 --- a/components/soc/esp32c5/include/soc/Kconfig.soc_caps.in +++ b/components/soc/esp32c5/include/soc/Kconfig.soc_caps.in @@ -615,6 +615,10 @@ config SOC_I2C_SLAVE_SUPPORT_SLAVE_UNMATCH bool default y +config SOC_I2C_SUPPORT_SLEEP_RETENTION + bool + default y + config SOC_LP_I2C_NUM int default 1 diff --git a/components/soc/esp32c5/include/soc/soc_caps.h b/components/soc/esp32c5/include/soc/soc_caps.h index 5badeefac16a..c8f1619ce982 100644 --- a/components/soc/esp32c5/include/soc/soc_caps.h +++ b/components/soc/esp32c5/include/soc/soc_caps.h @@ -265,7 +265,7 @@ #define SOC_I2C_SLAVE_SUPPORT_I2CRAM_ACCESS (1) #define SOC_I2C_SLAVE_SUPPORT_SLAVE_UNMATCH (1) -// #define SOC_I2C_SUPPORT_SLEEP_RETENTION (1) // TODO: IDF-9693 +#define SOC_I2C_SUPPORT_SLEEP_RETENTION (1) /*-------------------------- LP_I2C CAPS -------------------------------------*/ // ESP32-C5 has 1 LP_I2C diff --git a/components/soc/esp32c6/i2c_periph.c b/components/soc/esp32c6/i2c_periph.c index 217714447441..c2a39d3c9c66 100644 --- a/components/soc/esp32c6/i2c_periph.c +++ b/components/soc/esp32c6/i2c_periph.c @@ -50,7 +50,7 @@ static const regdma_entries_config_t i2c0_regs_retention[] = { [1] = {.config = REGDMA_LINK_WRITE_INIT(REGDMA_I2C_LINK(0x01), I2C_CTR_REG(0), I2C_FSM_RST, I2C_FSM_RST_M, 1, 0), \ .owner = ENTRY(0) | ENTRY(2) }, \ [2] = {.config = REGDMA_LINK_WRITE_INIT(REGDMA_I2C_LINK(0x02), I2C_CTR_REG(0), 0x0, I2C_FSM_RST_M, 1, 0), \ - .owner = ENTRY(0) | ENTRY(2) }, \ + .owner = ENTRY(0) | ENTRY(2) }, \ [3] = {.config = REGDMA_LINK_WRITE_INIT(REGDMA_I2C_LINK(0x03), I2C_CTR_REG(0), I2C_CONF_UPGATE, I2C_CONF_UPGATE_M, 1, 0), \ .owner = ENTRY(0) | ENTRY(2) }, \ [4] = {.config = REGDMA_LINK_WAIT_INIT(REGDMA_I2C_LINK(0x04), I2C_CTR_REG(0), 0x0, I2C_CONF_UPGATE_M, 1, 0), \ @@ -58,5 +58,5 @@ static const regdma_entries_config_t i2c0_regs_retention[] = { }; const i2c_reg_ctx_link_t i2c_regs_retention[SOC_HP_I2C_NUM] = { - {i2c0_regs_retention, ARRAY_SIZE(i2c0_regs_retention)}, + {i2c0_regs_retention, ARRAY_SIZE(i2c0_regs_retention), SLEEP_RETENTION_MODULE_I2C0}, }; diff --git a/components/soc/esp32c61/i2c_periph.c b/components/soc/esp32c61/i2c_periph.c index cc11ee808f5d..f86531948d26 100644 --- a/components/soc/esp32c61/i2c_periph.c +++ b/components/soc/esp32c61/i2c_periph.c @@ -21,3 +21,32 @@ const i2c_signal_conn_t i2c_periph_signal[SOC_I2C_NUM] = { .irq = ETS_I2C_EXT0_INTR_SOURCE, }, }; + +// I2C sleep retention entries +// I2C registers require set the reg_update bit to make the configuration take effect + +/* I2C Registers Context + Include: I2C_SCL_LOW_PERIOD_REG / + I2C_CTR_REG / I2C_TO_REG / I2C_SLAVE_ADDR_REG / I2C_FIFO_CONF_REG + I2C_INT_ENA_REG / I2C_SDA_HOLD_REG / I2C_SDA_SAMPLE_REG / I2C_SCL_START_HOLD_REG + I2C_SCL_RSTART_SETUP_REG / I2C_SCL_STOP_HOLD_REG / I2C_SCL_STOP_SETUP_REG /I2C_FILTER_CFG_REG / I2C_CLK_CONF_REG / I2C_SCL_ST_TIME_OUT_REG / I2C_SCL_MAIN_ST_TIME_OUT_REG / I2C_SCL_SP_CONF_REG / I2C_SCL_STRETCH_CONF_REG +*/ +#define I2C0_RETENTION_REGS_CNT 18 +#define I2C0_RETENTION_MAP_BASE I2C_SCL_LOW_PERIOD_REG +static const uint32_t i2c0_regs_map[4] = {0xc03f345b, 0x3, 0, 0}; +static const regdma_entries_config_t i2c0_regs_retention[] = { + [0] = {.config = REGDMA_LINK_ADDR_MAP_INIT(REGDMA_I2C_LINK(0x00), I2C0_RETENTION_MAP_BASE, I2C0_RETENTION_MAP_BASE, I2C0_RETENTION_REGS_CNT, 0, 0, i2c0_regs_map[0], i2c0_regs_map[1], i2c0_regs_map[2], i2c0_regs_map[3]), \ + .owner = ENTRY(0) | ENTRY(2) }, \ + [1] = {.config = REGDMA_LINK_WRITE_INIT(REGDMA_I2C_LINK(0x01), I2C_CTR_REG, I2C_FSM_RST, I2C_FSM_RST_M, 1, 0), \ + .owner = ENTRY(0) | ENTRY(2) }, \ + [2] = {.config = REGDMA_LINK_WRITE_INIT(REGDMA_I2C_LINK(0x02), I2C_CTR_REG, 0x0, I2C_FSM_RST_M, 1, 0), \ + .owner = ENTRY(0) | ENTRY(2) }, \ + [3] = {.config = REGDMA_LINK_WRITE_INIT(REGDMA_I2C_LINK(0x03), I2C_CTR_REG, I2C_CONF_UPGATE, I2C_CONF_UPGATE_M, 1, 0), \ + .owner = ENTRY(0) | ENTRY(2) }, \ + [4] = {.config = REGDMA_LINK_WAIT_INIT(REGDMA_I2C_LINK(0x04), I2C_CTR_REG, 0x0, I2C_CONF_UPGATE_M, 1, 0), \ + .owner = ENTRY(0) | ENTRY(2) }, \ +}; + +const i2c_reg_ctx_link_t i2c_regs_retention[SOC_HP_I2C_NUM] = { + {i2c0_regs_retention, ARRAY_SIZE(i2c0_regs_retention), SLEEP_RETENTION_MODULE_I2C0}, +}; diff --git a/components/soc/esp32c61/include/soc/Kconfig.soc_caps.in b/components/soc/esp32c61/include/soc/Kconfig.soc_caps.in index 2572350a6438..94aaaa03901f 100644 --- a/components/soc/esp32c61/include/soc/Kconfig.soc_caps.in +++ b/components/soc/esp32c61/include/soc/Kconfig.soc_caps.in @@ -423,6 +423,10 @@ config SOC_I2C_SLAVE_SUPPORT_SLAVE_UNMATCH bool default y +config SOC_I2C_SUPPORT_SLEEP_RETENTION + bool + default y + config SOC_LEDC_SUPPORT_PLL_DIV_CLOCK bool default y diff --git a/components/soc/esp32c61/include/soc/soc_caps.h b/components/soc/esp32c61/include/soc/soc_caps.h index bf1fab84d338..34a34bdb91dd 100644 --- a/components/soc/esp32c61/include/soc/soc_caps.h +++ b/components/soc/esp32c61/include/soc/soc_caps.h @@ -228,6 +228,7 @@ #define SOC_I2C_SLAVE_CAN_GET_STRETCH_CAUSE (1) #define SOC_I2C_SLAVE_SUPPORT_I2CRAM_ACCESS (1) #define SOC_I2C_SLAVE_SUPPORT_SLAVE_UNMATCH (1) +#define SOC_I2C_SUPPORT_SLEEP_RETENTION (1) // /*-------------------------- I2S CAPS ----------------------------------------*/ // #define SOC_I2S_NUM (1U) diff --git a/components/soc/esp32h2/i2c_periph.c b/components/soc/esp32h2/i2c_periph.c index f1fd089056a6..5afb3995eb3a 100644 --- a/components/soc/esp32h2/i2c_periph.c +++ b/components/soc/esp32h2/i2c_periph.c @@ -47,7 +47,7 @@ static const regdma_entries_config_t i2c0_regs_retention[] = { [1] = {.config = REGDMA_LINK_WRITE_INIT(REGDMA_I2C_LINK(0x01), I2C_CTR_REG(0), I2C_FSM_RST, I2C_FSM_RST_M, 1, 0), \ .owner = ENTRY(0) | ENTRY(2) }, \ [2] = {.config = REGDMA_LINK_WRITE_INIT(REGDMA_I2C_LINK(0x02), I2C_CTR_REG(0), 0x0, I2C_FSM_RST_M, 1, 0), \ - .owner = ENTRY(0) | ENTRY(2) }, \ + .owner = ENTRY(0) | ENTRY(2) }, \ [3] = {.config = REGDMA_LINK_WRITE_INIT(REGDMA_I2C_LINK(0x03), I2C_CTR_REG(0), I2C_CONF_UPGATE, I2C_CONF_UPGATE_M, 1, 0), \ .owner = ENTRY(0) | ENTRY(2) }, \ [4] = {.config = REGDMA_LINK_WAIT_INIT(REGDMA_I2C_LINK(0x04), I2C_CTR_REG(0), 0x0, I2C_CONF_UPGATE_M, 1, 0), \ @@ -71,6 +71,6 @@ static const regdma_entries_config_t i2c1_regs_retention[] = { }; const i2c_reg_ctx_link_t i2c_regs_retention[SOC_HP_I2C_NUM] = { - {i2c0_regs_retention, ARRAY_SIZE(i2c0_regs_retention)}, - {i2c1_regs_retention, ARRAY_SIZE(i2c1_regs_retention)}, + {i2c0_regs_retention, ARRAY_SIZE(i2c0_regs_retention), SLEEP_RETENTION_MODULE_I2C0}, + {i2c1_regs_retention, ARRAY_SIZE(i2c1_regs_retention), SLEEP_RETENTION_MODULE_I2C1}, }; diff --git a/components/soc/esp32p4/i2c_periph.c b/components/soc/esp32p4/i2c_periph.c index 41c208dda0f0..699e5890decd 100644 --- a/components/soc/esp32p4/i2c_periph.c +++ b/components/soc/esp32p4/i2c_periph.c @@ -34,3 +34,49 @@ const i2c_signal_conn_t i2c_periph_signal[SOC_I2C_NUM] = { .irq = ETS_LP_I2C_INTR_SOURCE, }, }; + +// I2C sleep retention entries +// I2C registers require set the reg_update bit to make the configuration take effect + +/* I2C Registers Context + Include: I2C_SCL_LOW_PERIOD_REG / + I2C_CTR_REG / I2C_TO_REG / I2C_SLAVE_ADDR_REG / I2C_FIFO_CONF_REG + I2C_INT_ENA_REG / I2C_SDA_HOLD_REG / I2C_SDA_SAMPLE_REG / I2C_SCL_START_HOLD_REG + I2C_SCL_RSTART_SETUP_REG / I2C_SCL_STOP_HOLD_REG / I2C_SCL_STOP_SETUP_REG /I2C_FILTER_CFG_REG / I2C_CLK_CONF_REG / I2C_SCL_ST_TIME_OUT_REG / I2C_SCL_MAIN_ST_TIME_OUT_REG / I2C_SCL_SP_CONF_REG / I2C_SCL_STRETCH_CONF_REG +*/ +#define I2C0_RETENTION_REGS_CNT 18 +#define I2C0_RETENTION_MAP_BASE I2C_SCL_LOW_PERIOD_REG(0) +static const uint32_t i2c0_regs_map[4] = {0xc03f345b, 0x3, 0, 0}; +static const regdma_entries_config_t i2c0_regs_retention[] = { + [0] = {.config = REGDMA_LINK_ADDR_MAP_INIT(REGDMA_I2C_LINK(0x00), I2C0_RETENTION_MAP_BASE, I2C0_RETENTION_MAP_BASE, I2C0_RETENTION_REGS_CNT, 0, 0, i2c0_regs_map[0], i2c0_regs_map[1], i2c0_regs_map[2], i2c0_regs_map[3]), \ + .owner = ENTRY(0) }, \ + [1] = {.config = REGDMA_LINK_WRITE_INIT(REGDMA_I2C_LINK(0x01), I2C_CTR_REG(0), I2C_FSM_RST, I2C_FSM_RST_M, 1, 0), \ + .owner = ENTRY(0) }, \ + [2] = {.config = REGDMA_LINK_WRITE_INIT(REGDMA_I2C_LINK(0x02), I2C_CTR_REG(0), 0x0, I2C_FSM_RST_M, 1, 0), \ + .owner = ENTRY(0) }, \ + [3] = {.config = REGDMA_LINK_WRITE_INIT(REGDMA_I2C_LINK(0x03), I2C_CTR_REG(0), I2C_CONF_UPGATE, I2C_CONF_UPGATE_M, 1, 0), \ + .owner = ENTRY(0) }, \ + [4] = {.config = REGDMA_LINK_WAIT_INIT(REGDMA_I2C_LINK(0x04), I2C_CTR_REG(0), 0x0, I2C_CONF_UPGATE_M, 1, 0), \ + .owner = ENTRY(0) }, \ +}; + +#define I2C1_RETENTION_REGS_CNT 18 +#define I2C1_RETENTION_MAP_BASE I2C_SCL_LOW_PERIOD_REG(1) +static const uint32_t i2c1_regs_map[4] = {0xc03f345b, 0x3, 0, 0}; +static const regdma_entries_config_t i2c1_regs_retention[] = { + [0] = {.config = REGDMA_LINK_ADDR_MAP_INIT(REGDMA_I2C_LINK(0x00), I2C1_RETENTION_MAP_BASE, I2C1_RETENTION_MAP_BASE, I2C1_RETENTION_REGS_CNT, 0, 0, i2c1_regs_map[0], i2c1_regs_map[1], i2c1_regs_map[2], i2c1_regs_map[3]), \ + .owner = ENTRY(0) }, \ + [1] = {.config = REGDMA_LINK_WRITE_INIT(REGDMA_I2C_LINK(0x01), I2C_CTR_REG(1), I2C_FSM_RST, I2C_FSM_RST_M, 1, 0), \ + .owner = ENTRY(0) }, \ + [2] = {.config = REGDMA_LINK_WRITE_INIT(REGDMA_I2C_LINK(0x02), I2C_CTR_REG(1), 0x0, I2C_FSM_RST_M, 1, 0), \ + .owner = ENTRY(0) }, \ + [3] = {.config = REGDMA_LINK_WRITE_INIT(REGDMA_I2C_LINK(0x03), I2C_CTR_REG(1), I2C_CONF_UPGATE, I2C_CONF_UPGATE_M, 1, 0), \ + .owner = ENTRY(0) }, \ + [4] = {.config = REGDMA_LINK_WAIT_INIT(REGDMA_I2C_LINK(0x04), I2C_CTR_REG(1), 0x0, I2C_CONF_UPGATE_M, 1, 0), \ + .owner = ENTRY(0) }, \ +}; + +const i2c_reg_ctx_link_t i2c_regs_retention[SOC_HP_I2C_NUM] = { + {i2c0_regs_retention, ARRAY_SIZE(i2c0_regs_retention), SLEEP_RETENTION_MODULE_I2C0}, + {i2c1_regs_retention, ARRAY_SIZE(i2c1_regs_retention), SLEEP_RETENTION_MODULE_I2C1}, +}; diff --git a/components/soc/esp32p4/include/soc/Kconfig.soc_caps.in b/components/soc/esp32p4/include/soc/Kconfig.soc_caps.in index a883653c744d..cefa4d0350fd 100644 --- a/components/soc/esp32p4/include/soc/Kconfig.soc_caps.in +++ b/components/soc/esp32p4/include/soc/Kconfig.soc_caps.in @@ -775,6 +775,10 @@ config SOC_I2C_SLAVE_SUPPORT_SLAVE_UNMATCH bool default y +config SOC_I2C_SUPPORT_SLEEP_RETENTION + bool + default y + config SOC_LP_I2C_NUM int default 1 diff --git a/components/soc/esp32p4/include/soc/retention_periph_defs.h b/components/soc/esp32p4/include/soc/retention_periph_defs.h index b069f7babd2a..37c04d2071b9 100644 --- a/components/soc/esp32p4/include/soc/retention_periph_defs.h +++ b/components/soc/esp32p4/include/soc/retention_periph_defs.h @@ -40,6 +40,8 @@ typedef enum periph_retention_module { SLEEP_RETENTION_MODULE_AXI_DMA_CH0 = 16, SLEEP_RETENTION_MODULE_AXI_DMA_CH1 = 17, SLEEP_RETENTION_MODULE_AXI_DMA_CH2 = 18, + SLEEP_RETENTION_MODULE_I2C0 = 19, + SLEEP_RETENTION_MODULE_I2C1 = 20, SLEEP_RETENTION_MODULE_I2S0 = 19, SLEEP_RETENTION_MODULE_I2S1 = 20, diff --git a/components/soc/esp32p4/include/soc/soc_caps.h b/components/soc/esp32p4/include/soc/soc_caps.h index d7dcd4200f07..ba380964b4fd 100644 --- a/components/soc/esp32p4/include/soc/soc_caps.h +++ b/components/soc/esp32p4/include/soc/soc_caps.h @@ -304,7 +304,7 @@ #define SOC_I2C_SLAVE_SUPPORT_I2CRAM_ACCESS (1) #define SOC_I2C_SLAVE_SUPPORT_SLAVE_UNMATCH (1) -// #define SOC_I2C_SUPPORT_SLEEP_RETENTION (1) // TODO: IDF-9353 +#define SOC_I2C_SUPPORT_SLEEP_RETENTION (1) /*-------------------------- LP_I2C CAPS -------------------------------------*/ // ESP32-P4 has 1 LP_I2C diff --git a/components/soc/include/soc/i2c_periph.h b/components/soc/include/soc/i2c_periph.h index 408da3afc49e..c1fbb0fbc8dc 100644 --- a/components/soc/include/soc/i2c_periph.h +++ b/components/soc/include/soc/i2c_periph.h @@ -11,6 +11,9 @@ #if SOC_I2C_SUPPORTED #include "soc/regdma.h" #include "soc/interrupts.h" +#if SOC_I2C_SUPPORT_SLEEP_RETENTION +#include "soc/retention_periph_defs.h" +#endif #ifdef __cplusplus extern "C" { @@ -31,6 +34,7 @@ extern const i2c_signal_conn_t i2c_periph_signal[SOC_I2C_NUM]; typedef struct { const regdma_entries_config_t *link_list; uint32_t link_num; + periph_retention_module_t module_id; } i2c_reg_ctx_link_t; extern const i2c_reg_ctx_link_t i2c_regs_retention[SOC_HP_I2C_NUM]; diff --git a/docs/en/api-reference/peripherals/i2c.rst b/docs/en/api-reference/peripherals/i2c.rst index a592b2508641..dd35c6322b54 100644 --- a/docs/en/api-reference/peripherals/i2c.rst +++ b/docs/en/api-reference/peripherals/i2c.rst @@ -111,7 +111,7 @@ I2C master bus requires the configuration that specified by :cpp:type:`i2c_maste - :cpp:member:`i2c_master_bus_config_t::intr_priority` sets the priority of the interrupt. If set to ``0`` , then the driver will use a interrupt with low or medium priority (priority level may be one of 1, 2 or 3), otherwise use the priority indicated by :cpp:member:`i2c_master_bus_config_t::intr_priority`. Please use the number form (1, 2, 3) , not the bitmask form ((1<<1), (1<<2), (1<<3)). - :cpp:member:`i2c_master_bus_config_t::trans_queue_depth` sets the depth of internal transfer queue. Only valid in asynchronous transaction. - :cpp:member:`i2c_master_bus_config_t::enable_internal_pullup` enables internal pullups. Note: This is not strong enough to pullup buses under high-speed frequency. A suitable external pullup is recommended. - +- :cpp:member:`i2c_master_bus_config_t::allow_pd` configures if the driver allows the system to power down the peripheral in light sleep mode. Before entering sleep, the system will backup the I2C register context, which will be restored later when the system exit the sleep mode. Powering down the peripheral can save more power, but at the cost of more memory consumed to save the register context. It's a tradeoff between power consumption and memory consumption. This configuration option relies on specific hardware feature, if you enable it on an unsupported chip, you will see error message like ``not able to power down in light sleep``. If the configurations in :cpp:type:`i2c_master_bus_config_t` is specified, then :cpp:func:`i2c_new_master_bus` can be called to allocate and initialize an I2C master bus. This function will return an I2C bus handle if it runs correctly. Specifically, when there are no more I2C port available, this function will return :c:macro:`ESP_ERR_NOT_FOUND` error. diff --git a/docs/zh_CN/api-reference/peripherals/i2c.rst b/docs/zh_CN/api-reference/peripherals/i2c.rst index 0b545cf773e3..e515082f6182 100644 --- a/docs/zh_CN/api-reference/peripherals/i2c.rst +++ b/docs/zh_CN/api-reference/peripherals/i2c.rst @@ -111,6 +111,7 @@ I2C 主机总线需要 :cpp:type:`i2c_master_bus_config_t` 指定的配置: - :cpp:member:`i2c_master_bus_config_t::intr_priority` 设置中断的优先级。如果设置为 ``0``,则驱动程序将使用低或中优先级的中断(优先级可设为 1、2 或 3 中的一个),若未设置,则将使用 :cpp:member:`i2c_master_bus_config_t::intr_priority` 指示的优先级。请使用数字形式(1、2、3),不要用位掩码形式((1<<1)、(1<<2)、(1<<3))。 - :cpp:member:`i2c_master_bus_config_t::trans_queue_depth` 设置内部传输队列的深度,但仅在异步传输中有效。 - :cpp:member:`i2c_master_bus_config_t::enable_internal_pullup` 启用内部上拉电阻。注意:该设置无法在高速频率下拉高总线,此时建议使用合适的外部上拉电阻。 +- :cpp:member:`i2c_master_bus_config_t::allow_pd` 配置驱动程序是否允许系统在睡眠模式下关闭外设电源。在进入睡眠之前,系统将备份 I2C 寄存器上下文,当系统退出睡眠模式时,这些上下文将被恢复。关闭外设可以节省更多功耗,但代价是消耗更多内存来保存寄存器上下文。你需要在功耗和内存消耗之间做权衡。此配置选项依赖于特定的硬件功能,如果在不支持的芯片上启用它,你将看到类似 ``not able to power down in light sleep`` 的错误消息。 如果在 :cpp:type:`i2c_master_bus_config_t` 中指定了配置,则可调用 :cpp:func:`i2c_new_master_bus` 来分配和初始化 I2C 主机总线。如果函数运行正确,则将返回一个 I2C 总线句柄。若没有可用的 I2C 端口,此函数将返回 :c:macro:`ESP_ERR_NOT_FOUND` 错误。 diff --git a/tools/test_apps/system/cxx_build_test/main/test_i2c_lcd.cpp b/tools/test_apps/system/cxx_build_test/main/test_i2c_lcd.cpp index cb058d62c06c..716e6d4eb0ef 100644 --- a/tools/test_apps/system/cxx_build_test/main/test_i2c_lcd.cpp +++ b/tools/test_apps/system/cxx_build_test/main/test_i2c_lcd.cpp @@ -52,6 +52,7 @@ void test_i2c_lcd_apis(void) .trans_queue_depth = 4, .flags = { .enable_internal_pullup = true, + .allow_pd = false, } }; From 0a9c99f86e7cc13454468beb825b66bf9567d628 Mon Sep 17 00:00:00 2001 From: Marius Vikhammer Date: Tue, 8 Oct 2024 16:19:01 +0800 Subject: [PATCH 077/365] change(system): cleanup c5 reset reason todo --- components/soc/esp32c5/include/soc/reset_reasons.h | 1 - 1 file changed, 1 deletion(-) diff --git a/components/soc/esp32c5/include/soc/reset_reasons.h b/components/soc/esp32c5/include/soc/reset_reasons.h index f86a798e289d..8822b2573a54 100644 --- a/components/soc/esp32c5/include/soc/reset_reasons.h +++ b/components/soc/esp32c5/include/soc/reset_reasons.h @@ -23,7 +23,6 @@ extern "C" { #endif -// TODO: [ESP32C5] IDF-8660 Check reset reasons for MP version /** * @brief Naming conventions: RESET_REASON_{reset level}_{reset reason} * @note refer to TRM: chapter From 08eadd8d25abb4766807b7ba3aadfbee4791cb69 Mon Sep 17 00:00:00 2001 From: Alexey Lapshin Date: Fri, 6 Sep 2024 18:27:09 +0700 Subject: [PATCH 078/365] fix(newlib): sbom: add CVE-2024-30949 to cve-exclude-list --- components/newlib/sbom.yml | 3 +++ docs/en/security/vulnerabilities.rst | 9 +++++++++ 2 files changed, 12 insertions(+) diff --git a/components/newlib/sbom.yml b/components/newlib/sbom.yml index f0fee8725557..496cb10c30b2 100644 --- a/components/newlib/sbom.yml +++ b/components/newlib/sbom.yml @@ -4,3 +4,6 @@ cpe: cpe:2.3:a:newlib_project:newlib:{}:*:*:*:*:*:*:* supplier: 'Organization: Espressif Systems (Shanghai) CO LTD' originator: 'Organization: Red Hat Incorporated' description: An open-source C standard library implementation with additional features and patches from Espressif. +cve-exclude-list: + - cve: CVE-2024-30949 + reason: A vulnerability was discovered in the gettimeofday system call implementation within the RISC-V libgloss component of Newlib. ESP-IDF does not link against libgloss for RISC-V, hence the issue is not directly applicable. Still, the relevant fix has been patched through https://github.com/espressif/newlib-esp32/commit/047ba47013c2656a1e7838dc86cbc75aeeaa67a7 diff --git a/docs/en/security/vulnerabilities.rst b/docs/en/security/vulnerabilities.rst index a8629f945e98..00d87aad5ff3 100644 --- a/docs/en/security/vulnerabilities.rst +++ b/docs/en/security/vulnerabilities.rst @@ -10,6 +10,15 @@ This page briefly lists all of the vulnerabilities that are discovered and fixed CVE-2024 -------- +CVE-2024-30949 +~~~~~~~~~~~~~~ + +RISC-V gettimeofday system call vulnerability in Newlib's + +* Impact: ESP-IDF does not use system call implementations from Newlib +* Resolution: NA + + CVE-2024-28183 ~~~~~~~~~~~~~~ From 5888cb8b4c4ef5e5a2deb8fac36f7019f745bde8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Neboj=C5=A1a=20Cvetkovi=C4=87?= Date: Thu, 27 Jun 2024 18:26:11 +0100 Subject: [PATCH 079/365] build: Reduce verbosity of disabled component manager warning closes https://github.com/espressif/esp-idf/pull/14097 --- tools/cmake/build.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/cmake/build.cmake b/tools/cmake/build.cmake index 81f133e23019..c9414c437d43 100644 --- a/tools/cmake/build.cmake +++ b/tools/cmake/build.cmake @@ -631,7 +631,7 @@ macro(idf_build_process target) endforeach() if(NOT "${__components_with_manifests}" STREQUAL "") - message(WARNING "\"idf_component.yml\" file was found for components:\n${__components_with_manifests}" + message(NOTICE "\"idf_component.yml\" file was found for components:\n${__components_with_manifests}" "However, the component manager is not enabled.") endif() endif() From 24fa2facd3849c57cc638fab7e410f52807e33b4 Mon Sep 17 00:00:00 2001 From: Mahavir Jain Date: Mon, 30 Sep 2024 10:44:44 +0530 Subject: [PATCH 080/365] docs: update mbedtls guide for TLS 1.3 supported change --- docs/en/api-reference/protocols/mbedtls.rst | 12 ++++-------- docs/zh_CN/api-reference/protocols/mbedtls.rst | 12 ++++-------- 2 files changed, 8 insertions(+), 16 deletions(-) diff --git a/docs/en/api-reference/protocols/mbedtls.rst b/docs/en/api-reference/protocols/mbedtls.rst index 11a9fb02df3b..cc636fd033ca 100644 --- a/docs/en/api-reference/protocols/mbedtls.rst +++ b/docs/en/api-reference/protocols/mbedtls.rst @@ -9,7 +9,7 @@ Mbed TLS ESP-IDF uses a `fork `_ of Mbed TLS which includes a few patches (related to hardware routines of certain modules like ``bignum (MPI)`` and ``ECC``) over vanilla Mbed TLS. -Mbed TLS supports SSL 3.0 up to TLS 1.3 and DTLS 1.0 to 1.2 communication by providing the following: +Mbed TLS supports TLS 1.2, TLS 1.3 and DTLS 1.2 communication by providing the following: - TCP/IP communication functions: listen, connect, accept, read/write. - SSL/TLS communication functions: init, handshake, read/write. @@ -18,8 +18,9 @@ Mbed TLS supports SSL 3.0 up to TLS 1.3 and DTLS 1.0 to 1.2 communication by pro - Hashing - Encryption/decryption -Supported TLS versions include SSL 3.0, TLS 1.0, TLS 1.1, TLS 1.2, and TLS 1.3, but on the latest ESP-IDF, SSL 3.0, TLS 1.0, and TLS 1.1 have been removed from Mbed TLS. Supported DTLS versions include DTLS 1.0, DTLS 1.1, and DTLS 1.2, but on the latest ESP-IDF, DTLS 1.0 has been removed from Mbed TLS. +.. note:: + Mbed TLS v3.x.x series supports only TLS 1.2 and TLS 1.3 protocols. Support for SSL 3.0, TLS 1.0/1.1 and DTLS 1.0 has been removed (deprecated). TLS 1.3 is fully supported starting Mbed TLS v3.6.0 release, before this release some features were still in experimental state. Please refer to :component_file:`Mbed TLS ChangeLog ` for more details. Mbed TLS Documentation ---------------------- @@ -73,11 +74,6 @@ Following is a brief list of important config options accessible at ``Component :SOC_MPI_SUPPORTED: - :ref:`CONFIG_MBEDTLS_HARDWARE_MPI`: Support for hardware MPI (bignum) acceleration :SOC_ECC_SUPPORTED: - :ref:`CONFIG_MBEDTLS_HARDWARE_ECC`: Support for hardware ECC acceleration -.. note:: - - Mbed TLS v3.6.0 and later support only TLS 1.2 and TLS 1.3 (SSL 3.0, TLS 1.0, TLS 1.1, and DTLS 1.0 are not supported). More information about this can be found out `here `__. - - Performance and Memory Tweaks ----------------------------- @@ -122,5 +118,5 @@ Reducing Binary Size Under ``Component Config -> mbedTLS``, there are multiple Mbed TLS features which are enabled by default but can be disabled if not needed to save code size. More information can be about this can be found in :ref:`Minimizing Binary Size ` docs. -.. _`API Reference`: https://mbed-tls.readthedocs.io/projects/api/en/v3.4.1/ +.. _`API Reference`: https://mbed-tls.readthedocs.io/projects/api/en/v3.6.1/ .. _`Knowledge Base`: https://mbed-tls.readthedocs.io/en/latest/kb/ diff --git a/docs/zh_CN/api-reference/protocols/mbedtls.rst b/docs/zh_CN/api-reference/protocols/mbedtls.rst index 976d039ac400..2ed687549696 100644 --- a/docs/zh_CN/api-reference/protocols/mbedtls.rst +++ b/docs/zh_CN/api-reference/protocols/mbedtls.rst @@ -9,7 +9,7 @@ Mbed TLS ESP-IDF 使用的 Mbed TLS `复刻仓库 `_ 中包含对原生 Mbed TLS 的补丁。这些补丁与某些模块的硬件例程有关,如 ``bignum (MPI)`` 和 ``ECC``。 -Mbed TLS 提供以下功能: +Mbed TLS 通过提供以下内容支持 TLS 1.2、TLS 1.3 和 DTLS 1.2 通信: - TCP/IP 通信功能:监听、连接、接收、读/写。 - SSL/TLS 通信功能:初始化、握手、读/写。 @@ -18,8 +18,9 @@ Mbed TLS 提供以下功能: - 哈希 - 加密/解密 -TLS 版本支持 SSL 3.0, TLS 1.0、TLS 1.1、TLS 1.2 和 TLS 1.3,但是最新的 ESP-IDF 上 Mbed TLS 已经移除了 SSL 3.0、TLS 1.0 和 TLS 1.1。DTLS 版本支持 DTLS 1.0、DTLS 1.1 和 DTLS 1.2,但最新的 ESP-IDF 上 Mbed TLS 已经移除了 DTLS 1.0。 +.. note:: + Mbed TLS v3.x.x 系列仅支持 TLS 1.2 和 TLS 1.3 协议。对 SSL 3.0、TLS 1.0/1.1 和 DTLS 1.0 的支持已被删除(弃用)。从 Mbed TLS v3.6.0 版本开始完全支持 TLS 1.3,在此版本之前,某些功能仍处于试验状态。有关更多详细信息,请参阅 :component_file:`Mbed TLS ChangeLog `。 Mbed TLS 文档 ------------------ @@ -73,11 +74,6 @@ ESP-IDF 中的示例使用 :doc:`/api-reference/protocols/esp_tls`,为访问 :SOC_MPI_SUPPORTED: - :ref:`CONFIG_MBEDTLS_HARDWARE_MPI`: 支持硬件 MPI (bignum) 加速 :SOC_ECC_SUPPORTED: - :ref:`CONFIG_MBEDTLS_HARDWARE_ECC`: 支持硬件 ECC 加速 -.. note:: - - Mbed TLS v3.0.0 及其更新版本仅支持 TLS 1.2 和 TLS 1.3,不支持 SSL 3.0、TLS 1.0、TLS 1.1、和 DTLS 1.0)。TLS 1.3 尚在试验阶段,仅支持客户端。要了解更多信息,请点击 `此处 `__。 - - 性能和内存调整 ------------------ @@ -122,5 +118,5 @@ ESP-IDF 中的示例使用 :doc:`/api-reference/protocols/esp_tls`,为访问 在 ``Component Config -> mbedTLS`` 中,有多个 Mbed TLS 功能默认为启用状态。如果不需要这些功能,可将其禁用以减小固件大小。要了解更多信息,请参考 :ref:`Minimizing Binary Size ` 文档。 -.. _`API Reference`: https://mbed-tls.readthedocs.io/projects/api/en/v3.4.1/ +.. _`API Reference`: https://mbed-tls.readthedocs.io/projects/api/en/v3.6.1/ .. _`Knowledge Base`: https://mbed-tls.readthedocs.io/en/latest/kb/ From 0e5adc1b9c3526d14996cc29420774ae3879e439 Mon Sep 17 00:00:00 2001 From: Sudeep Mohanty Date: Tue, 8 Oct 2024 12:05:39 +0200 Subject: [PATCH 081/365] feat(freertos): Add FreeRTOS port layer mocks for CMock tests This commit adds mocks for the FreeRTOS linux port layer for tests which mock the FreeRTOS component and use port layer APIs. --- .../portable/linux/include/freertos/portmacro.h | 4 ++-- tools/mocks/freertos/CMakeLists.txt | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/components/freertos/FreeRTOS-Kernel/portable/linux/include/freertos/portmacro.h b/components/freertos/FreeRTOS-Kernel/portable/linux/include/freertos/portmacro.h index 179265b778e4..583c568d8880 100644 --- a/components/freertos/FreeRTOS-Kernel/portable/linux/include/freertos/portmacro.h +++ b/components/freertos/FreeRTOS-Kernel/portable/linux/include/freertos/portmacro.h @@ -94,8 +94,8 @@ extern void vPortEnableInterrupts( void ); extern BaseType_t xPortSetInterruptMask( void ); extern void vPortClearInterruptMask( BaseType_t xMask ); -extern void vPortEnterCritical( void ); -extern void vPortExitCritical( void ); +void vPortEnterCritical( void ); +void vPortExitCritical( void ); #define portSET_INTERRUPT_MASK_FROM_ISR() xPortSetInterruptMask() #define portCLEAR_INTERRUPT_MASK_FROM_ISR(x) vPortClearInterruptMask(x) #define portDISABLE_INTERRUPTS() portSET_INTERRUPT_MASK() diff --git a/tools/mocks/freertos/CMakeLists.txt b/tools/mocks/freertos/CMakeLists.txt index ce6111260ab5..9286bd3d2ce0 100644 --- a/tools/mocks/freertos/CMakeLists.txt +++ b/tools/mocks/freertos/CMakeLists.txt @@ -25,7 +25,8 @@ idf_component_mock(INCLUDE_DIRS ${include_dirs} ${original_freertos_dir}/esp_additions/include/freertos/idf_additions.h ${original_freertos_dir}/FreeRTOS-Kernel/include/freertos/task.h ${original_freertos_dir}/FreeRTOS-Kernel/include/freertos/event_groups.h - ${original_freertos_dir}/FreeRTOS-Kernel/include/freertos/queue.h) + ${original_freertos_dir}/FreeRTOS-Kernel/include/freertos/queue.h + ${original_freertos_dir}/FreeRTOS-Kernel/portable/linux/include/freertos/portmacro.h) idf_component_get_property(freertos_lib freertos COMPONENT_LIB) target_compile_definitions(${freertos_lib} PUBLIC "projCOVERAGE_TEST=0") From 160b1b3b32edcaea5065355e5feb35fef637ea3a Mon Sep 17 00:00:00 2001 From: renpeiying Date: Tue, 8 Oct 2024 19:07:30 +0800 Subject: [PATCH 082/365] docs: Remove user guide for esp32-devkitm-1 migration --- docs/_static/ESP32_DevKitM-1_pinlayout.png | Bin 410187 -> 0 bytes docs/_static/esp32-DevKitM-1-front.png | Bin 1138905 -> 0 bytes docs/_static/esp32-DevKitM-1-isometric.png | Bin 1215003 -> 0 bytes .../esp32-DevKitM-1_v1_SystemBlock.png | Bin 166318 -> 0 bytes .../esp32-devkitm-1-v1-annotated-photo.png | Bin 509115 -> 0 bytes docs/en/get-started/index.rst | 2 +- .../esp32/user-guide-devkitm-1.rst | 335 ------------------ docs/zh_CN/get-started/index.rst | 2 +- .../esp32/user-guide-devkitm-1.rst | 335 ------------------ 9 files changed, 2 insertions(+), 672 deletions(-) delete mode 100644 docs/_static/ESP32_DevKitM-1_pinlayout.png delete mode 100644 docs/_static/esp32-DevKitM-1-front.png delete mode 100644 docs/_static/esp32-DevKitM-1-isometric.png delete mode 100644 docs/_static/esp32-DevKitM-1_v1_SystemBlock.png delete mode 100644 docs/_static/esp32-devkitm-1-v1-annotated-photo.png delete mode 100644 docs/en/hw-reference/esp32/user-guide-devkitm-1.rst delete mode 100644 docs/zh_CN/hw-reference/esp32/user-guide-devkitm-1.rst diff --git a/docs/_static/ESP32_DevKitM-1_pinlayout.png b/docs/_static/ESP32_DevKitM-1_pinlayout.png deleted file mode 100644 index 359251737f67c43414a6d19563185214095782b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 410187 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%0Aw9W$VnPtj7Au*Z$crxOB9P))e&7$Pt4VIu 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 z�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 diff --git a/docs/_static/esp32-DevKitM-1-front.png b/docs/_static/esp32-DevKitM-1-front.png deleted file mode 100644 index 5685040471efbec6e6f2f956ee618ac205c1279a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1138905 zcmeFYc{tSX_diY~WETzD#+rQ=%Z#lUTa4vp7h*P=>@(I-k!&&cT}q)WSwkWe*_R@F zC}T-T5{lGsXnFPi{NBsw`d#1a`hEX+yBPDl?{lAX?sFbzdEWD!Xj5Z7W=38{Dk>`G zGy2+QR8)ucsiFFpV8FLr6DgPL}^lgb$R7W}Y|EQ_5asX6RoLBJ{Ha<2+NEM8y zyBrGZiN?tVxO-8ksi@RW1$dz_t~ehdG|mO@p)S1E&@3#3$EpikD;j}}yb!qac>Rk6 zocTp#3(Q4V3>+(bN<&C3K!w7<9p{4*3UGJxAgTnY3m@=Rp}gN8mKPQ}An|ck7uMVt zC}d+~DunPP;Di+Alw>hr1(1+3Tn?-RQcwiT2thz#WqFXIJV;3v1XcmTR3KoXpFhGB zX#}jZikY_VPg#^Jb>Z_qK3*#F^8Wt*a{f>`PlAg)7!HTagCOz{h%ALdmKf;ag9?!K zAd39rpp7G92zW0ayr+lIK1USV)7M8`n4;;AEx3FAX6r%xX(o!n+O74P}{BPP{T)obF`gju0d;SY0eoy~{ zDikLe8U5z{56b+~+TH!PDnuV0Kgx#xnd-l&i57ugIC(Q1(bJcJ!Rh$nJbXlcX-M=j z!~Jdfe=6)Bms7}pFUDei3-5<;oK=Qh?HG{f9vUkcm5Z0_GkXV0Q+YA z&G;Ww`UeAhshFXB@E$Je!l3=#c&Qk9V)4#_+9)5Kx-bL;0m*{FlwS)loPsxCK~Ah4Kr9|Kvx(JQn4H`bV;V$I+8u;pyr2D>_Vnd0z;D*pCL7 z&`Bc{2Jf*C2}xlg3ZPWXaRfZd&Dhr+jU!O@p{xi7LBJpo6sGiJ9*OfHp7C(@R2K%r z)7ghi( zK>r^3AL2nEkOCA<3Em$RXWUUPxZk?{7}NCfB6tSi-6_`7^~CrRwedtBlm}+t;tKK< z&3{nox}k{Y5uWZ|6!j@S@}#67ko-@sx_E-SKZ-zEL5V*(h_KL)U{cxND#e31iuwNi zc78{V%D!WMc#@LZetG;4H_Cy)io!yF(<40HJPG?U)P*TV_#Y2X+Zm4^cH8Gh;V*}$aDrgLFl9w0sH~DA2qLQhhAYdW zpbBVNoDx<+5evm&K^Tg;erRJtz*90i%I#0BlpsnvT2L4QK}ozy5CttQWy&TLH6aKn zLJOv&Loo#wqvGsIpg2!mnBqbgoV=HZi?Gms0ID1~+ZvDcIj=6P2!<*AIZSbl%lBe^lhaT59SjNSn3xM0QE2z!siH%9vBD9EKcEbOQe+>D9{}A8AMp3w zK@1$s9iYveQi%7V{*(S-(>B_83Xp#A0z(yl$vBv^{bLRWp}^&U)jrTID2sl1{hy-! zx2j&AL|?)IJw>oQr5yiK_E#)ZQpx`yroi8YfO0=D&VfYp^S(Y5x0-w5a9Aspn=fS# z3NR=X0+Ux#RD@Dca6qN$g(LV-Wc{R2+V{#Y@9g{MfJi6cheBF-6!9nFK{7a)G(rXZ z4<=A02qnu=*!)~>grn#|0mP5ErGWTg9VPjo+l1B)ZzD4FP&=D#-nL-Svw z*5~m)I4u-K#eHD>8a2n@Ja7n<*S{KzG!nCX5af1Z~of8`R~EMA@NTpwJAx$ z2Y+#2slR9cP02af&VC~PPdWHE;lHjR2PEeEIQPN(;e7&s?CKZT&2W@1j1mP{9QK!) z&QLBWP1xT7q-SdWGp_ctBt#BMsTZLA#_#Wx`z!rvQjAG)0)hCmvD8Aj{Cwwz*HD6K zDuA?MI$ByFZA~y(M;W98)&)Z}b+we>+B&*0HTnI{kwW;RDW$xDX(Mz&x|)i*P$(3p z2-N{YDEU)cM^i_Ol4CVtkUv%&toIODPd$W%8H606dJ9ps6dJJf4ZapcT4_% z2m1a4-u5B+ch~eUQU1RN-~SnT|It(bySDQGA5R@*&mT!p{(t7jAJ^JHVp(@TJsjMu zs{FHD_`gLXH*<#@j+96$(8xi-j>oUVp8l3&R!JpSZTBBc0 zfv&H|&*JxwYp^Os^)+nuux-fxqZr0%~UQ5MBMRi77(;^^eWiO~S*fn=%^YQ3*eW{`4>cr^G zW=_+#&%pEC-1UHnT7D=1bCu&X0}y98rS7Q30yU-U6g^x3F^QEceL z7#`)}I$l^Fh;bpKm&eihaK7TjM^LCKUwsy*NCU!r;E5wP=VX(na#esK&w z>$CFrfy?1D>*MhoH^08Pd{aK;OS(;N%QO7I)u5YgwWPvxgQ#dA`JLDZz4cITI}FLP z(xFb)IFz`t$?t{_wk3z@#Tyq)@rT zkDSkBiA+u@!mmbwkRJrU9e31as~sJ+VQ+(%4R#jJe6+r_GVq~m?Te`V&Bt>ar@mgb zsf-)?#uu;;EdwAccTpj;E9xeKNHk;>I3T@&DW{R12c%&#P4rUeXFZL zcfqTJcmmcxN>27&ah0VHXDeEc@T+X&0c?vn_#xp5k7=AbMQ)Vi(~dU!+E7dNq-@Q( zorfU7?1&bX4&jwbcSOThX&S$2>S(5}R&4B$*Lf7Ar5CG;&Z!vD;&vNC$31IEL%piz z(PMgUBlPsemze9jtZ-EiuUT*Qvf6ZehbChzwgFz1Y?k*x{`P{@vhfo6Otsf15fuWc5ED) zf%nV3{`%qsQ?|6+O^2#++Ce_BkrA&hfu_Gs)TOgmv`fbNC}E0iwoPNMs=p99v#l@% zHqUu`AzqnzT8=8@`%hwn%Eh*ka-_MCygPL(f=X5lP z^vfALMIp)B)#vZs5b2Hn8vNSv+x9on_?d?t$Dr+Ja~#;wCvPS)G0lOYs&CGZzro!u zJ1+AsYwFT~bKRS%?Od;mgl^}CH?yCC*?noCScQ@_Q4zRk4itAJ$xcYnSPD{EsbE!6 zBfr}kV$#i{d|KQq*pCkFtu=v{eYORw@&}2ek)Qm}_wE&xR)L50gLRyaSw&1DR*-ts? zCb=IsJuk%#UwF2@&X{3yKmK04)k@ZNXHpMMoUw>4XE(Z0rJ4mwR{efs5K1knAav_d{&Xq3wCj6>{z| z@qDSEZpQN`*eZq8m*;toFGCw^knrl6b3<$0m0&@^>V_uKtuQK02vC>c!hUOGF#$5} zo~ad1%Ts|~pKh@rDRTxj)`eF@^2Bnf%sfBGM~*9)VNHsJ z@xzNQF7s-6f?iE;J_YFH_PiiwiRZ?jpnakeudj2$g+wBu#;a~_%}M?xuV$7y0Ch0> z>iT`hcqkIrhK?}Lm)0v|rTcyxr5teq=t9yNANti8(KtpDYuxEjLPJBWrI zBvGe9MB+*W?I-g<<~7;rAn|ngSs8W`TXvK=x<3<`x6;vjokfTRmt|zY~v+(q)-39sBA(DW5oijD|Xc?Jr@UuFdRdrck zNLL6UnoK(jqcW9OIX9w(q`7;1@m2FSz!jCnL5#Tg7jgFZN;^N?rBIR+@%kdssGr?a zwg=zk*IaN8Yqd~5FDn2XXy6@GgboapkLkL?( z)bS^Zihko-z2Q{G;n+h%AhyE9;-bvBj;PnM2}GS{>0J>rvrs2rkH4_iZN3Kcm<$6d z;Dks%hqyQ)3+x=7z+>J5kGy}*9onvvvyowNueg=Hl>vzT7I&FEGe7%{=ZW5}r_9l| zx7PCPHM81Pd8DO-nylW>%WDm7V|V4>HkP-^;e#^MO!lP(>{aD7%W?;> z-)pfsim|<0B%<5Bm5!EMuHW==N35#Pp8W`*=K%L(lCMftHwSBSzxhm`w#t}@#4!)0 zWVG`y`-N^Qaw(cINRq_IxBGr^9QOepZ(?CkwnLX1e zjj>3o)I!J-TgGG|p7gi|8d$af4@>QiDx$U1k;Y21XUNu~)4J1>uXdlf4z_@)s(2Rn z_S!Qv^{1ArLoMKo7OgK8jOG_Q)#BNl7|q0P;rp=6mCJm_`4EP7AVNxF`+6Bq8>~}I ziak7~CF(BZbeJ5%F360V@F3r|JKb`fpYpSQ_0(69ub*#z1wSgpWY9g$0GxGoC@g{q zRPYp2rAF?7u7Sj^CaN?P_Rn4`T)KBL0ih^t*_<9 z`Nb@Uw{4~J)U1kIm)tB9E3BLou=nqGn%QE&{Z`W_v>v2Zg3osLGtj4&^T(A-FJ^V0 zP;D?MEc95+n@+|QvsLtyCm(TC+7>JH!Z{L)moBWxAeX#29N1kKIq9bvGmt|y0I<#R z40GW{_1ZH0WLoX&c>vHEopTbn=HKd-eebgJH)+A$sm6@P+Le!yazi<%zHSkUe27aS zW3_q39+!9_rf2HQnnOtU^Q)3Tg$DhA(!8p6&F)mLqI)e-z0>-!R>erV#BNo?EpAbE zA=OHtby1Z-V-1((Q@9~nw*PZ<=Bo$H4wI&0PgM0*-BWMhJmF~KJ|tvi<3sAgqCX_4 z)o#JoZ2XurT7bz~dZDVeUT>*w9GsXUth=|%Js>(rYX!B7heU0b6kk%C!ndiRlcrVwp zvvL^oHeY7U3cu*v7{dU+JxJBw>2st61@EJ=9h$y?l)fH z2?Y=SO5F>kC!b2he5v)im0C>W#zG_OG9XdJ4X3gV5{iIi@9aD0FW8p$B@Jt{xn>Jq| z1h4zitq?)OZE=RprKl&6FFKYz(wpU~lZWwUsb;TdXXskUg5x&7;OwMal_yaT-u0by zx%lEHd6NIKW3#)iQ(1noRFQV^pp>wdm=JnVO0PSbSYMviQ;)H)|%>+jzDoR~ksq4PY^LSXYV z-NQ`cIvGwbB5uM{kPlzgFnjNbGaV6kt^BqKiZzT#qH0`(G$gll z(;?A_JPtBuQB^a60UMKSQ<=Jbj({rxx}gbYxNDP1La=qwKPX>*JcZ8YP6*y+UA?bEWfy=V12TZHQJb zIVY~UuEy$f(W%Xw)~CLZzh{nNtQ~S*9cM2Rl3=e*an)!&64sx?HpL@SPxh4zk>c=JAE zOafbqTVIU@KEo>rYo#%+7w8TvTgI9X#}8$g$66%;7m9<AqWPZwGw+|daaOxD zA&fpq1V9T8v&j<{vC4nieLfDU+g)R(WRYO7B`TzKlgRM6+nu->>bAiMilj1!SP=V@ zAeK2q{mhVF{iyj`c=m-Di^qBBZnDC>ceibVeL+r%BsLmTYSybSb6Iu4emqBPz#<7D zmTeJNgK|-xyi|98$33B>rznP4x}sq~s?XX2GYn~5AJZ=5h}zyY$T~~tZPSh+W_8-m z9(%T9@eI&*y@<_@$Nb1bPBW#Bs9O838oZxrkoR3KnYxrv*Yxe#`m^NY!_K2U>r2tS zbmQkdv2T?RnJSllXV?hUfngXI9iSg}M z=|ab{ySU?Gr_xsYqN3=%#=doP)d)3&Csv&?{i|Qh<2~zX)(rcyCpsTppG1Qaq6NqN zSSPD2S|XU>i!l}>sW}BPKr8l44004cpY7f(Z2l}nX|JrjtgZn>YQ4nx7y5SCNwcc> zm<)ZO3CM^$aSCK%tgY1N>pLY^V%flDJ-S=CwLz#U^-EVBcW^I8@s)H(*?THu6CG-e z&3e)8UIE|lL{)M{j{~56!W^w92g>D2?vyu)jLJK9UN1R5T;(7pt<nbb^Crq~g6x zBBKp)7USIy9~+N6_|)(?KNhyu79@dSfvjw$dS;z8izW(>#Pr%S6#&-7=V1?gq7sPX zX-ttgJs~I~?gW=+n}MyI*!fo?T;*x-Fxg4a75Wn!6CXJ=4KO;~>}KPqoMN5wrFy>B z%)_a7vp0e1qoo90G*dVrNGJ|&iRpA^tmnNe6KF6@c?c#Ujw(^cJZe}bg^pWRA(1CvxEnSRBWcOQDYA=d=8R?<&Z)X$G1?v@cqmTMyjk$}!?Vb!Br`}Q_b?{hnP+cJp!;|dAY!LmSzU95$vcT;siJaLXVlMG zd5hz&W@$iWlVr!s9w0n}oFba`aNtT5cqB$!b1a=dA8eKuMX%hWIv}Jfn%#QolUIX< z7EV(7TT?0PLPc-4$l)gdXbdPisuC?#DU20$DMI!O6KhJ^`q9M(+AIw8S_`J%&u(=I zs(llfw(Ga8g}Wqo4kOcYiU=gj*vc470jT!_vFI`_fM{D~x1<%)Y_ru*(7YeMQ{3oS z%to|~Jo7PS;n>~2rkU*ah6@w%slD}lp2TC?gQuqr+jXTW*>q5`i7;Xi6*BDWP*HOf z94jmY*2RB330~}$C^o=OfP3*we&GD>&$?zTVL~BD%b387WW{#Nq>N|!V!JC?gXHjx z^^t3Ym&dFV+XP5~RtXbHjX6*aa4=J4ZY~F z&*$5MW=4%L+S*m@XTXL@0kDPk`m(+A_Z9nty4Wj6Vmxym7&%1i(*uqDK8lN^Zk)@h z3p0%#W9$`x42~HXB*$ylk1wj&la;4OQrF|K`AOYTo3)TiZY*iM-r-nf|6I3?2>PCs zh%m(5au^%OWGSW#bDOlpN98WoXA!6SqI1v+a3jlptJ|3+AVWoKvp!;zcw6_bk>Y9@ zj&IA7Kk0e+1ql4^vD!f7q3TKpv3!eXU(8}3%&8rAeFdAB!E5>Lr7~IDy&CUo=vdzP zF0IVfC}o0c@_pLyjS;1>Al>%_()JbgD5zSuh1UFV6)UHrIfe@;SB!0^&);70Fu@XqMo z{K-u_E#K-VCpVRcs$B-Yi8o%56paDr?n!^|Zr(Zm{l?|R_+T`jUgb!4$NL+WCX3Lw z5>LI(oJw=?sd4dr)ILe~DyfWnhs~Rgw#WJHxWg$R7UUp4-x-A)f2nXo0ypL+7rpEA z@O|g&@Phk*!ia|_S~T66;%+{iV6_pEnc(JNk^~z^&ktfwo;if{nL5<@X)kwk5E>g@ zQ2Lgexz)p|Zt}(1cp{58NoOcwux043d`5)!P$0KooHtj`%c>h&YDFCRrv*5S7S9JG zIy0v>Pa8x#R|*v{1Pjsh!-I!TGp_6~50>IDu-4m$$YXDNsF5?y^F=8#?d4r~dYV2H zd0WFL4&w28{<@*mS>pkdqP-+O3AT!nAz5yp>wcG(o4;C?MF?~PoI(gH+qY=|aHigSRRoflSX~ zd^}`ctqd=@Ayyj6*qj?V#EXxFj__ z32?}V8Ga<|J;0jBh5>#UK+~F%aYiQVFdPxZX%=WtKFtJV0;E5ok8{=Mxpz&JOFEp* z(D$0V8o2`ZHV8s`@}XDos1QlFshqA zsd>hvzKXjH)Lt;_H;0krj0lD`*|;@*FjaH{&63xSlRat!Q-{EHb$bUFlTK;~c*7mCE!91Gy5)@y0KVA*oUgFgH9{%iI%Cn~;Fuz>^S5HXWU~1L!qd~<}hjULg%k19wIa6ov z{lLxJsN>EN*1(N*y@2&T!=|m_@+za~ltTml>3|kXmKmEuwk}CB_%$D%USYa2J(P`O z8pf2lr}SnrZMb;hOY&kkU%-dg0)<2-#K7jfqNGGx-(TaGYH5J9yo(uH=-x~PBfe8= z&XxAhUmJ`XtUbIK7!8f!J0vM;@36(%4!?y0bgPUi%&Qt9#501zA+cvJ?UP3Z_9jO)Av+!aG=9H+%mi5xV__A$wEHv zIA_0rHRV+Ijk!K(Gm`vPfP4!s<=aFasXpiT+6k~T7-l=sM)fw5ftq&_|5zeXe}k$1 zHWuy_0>2kStivVi@=1zTjk8Bqtz`^e@g&*!E<@Bb=WQP3;sxo8g1iMrpD1V*i@ei**r({U&cz0CX>{d!RWIpsd4s~kfZDh-ZR8Sdpczd0~jVBh0 zzN-x6*fZ+UvCu>{mk1EM*6VO6!FIdLyS+wWnGYOjmP?<+Zr=Y!%K*k?WKNO<*i_I- zw*~8TW?Ip@x}sMqN2sWVh&glXXhe=MmY!u6 zlz{ShB+gUZtw`rmz&IJPT(bC}5La^!;l6;+=?uB21t?1IxxmNzn3x3TlfIYG1|tpo zHIy6olS&HLnItVkU0bRIw*&at##pIyS^<=UEBeIfDtWX@p5PYpO-u%7jqCX~_O$0` zda8ShR!q7xIbn{qzAiA^(hsd-4O1l>hF2xs=_6focue%2coVu&NW3N}Ad60Js4%C2 zMNvx}Ch2;~FUkTr)MAu(XY8z9|-dTqgR>l&$fR+uH^ys7E*Xkk0?@wK9xpTzR>V6NvrMPEVHr-^p zWO`@9PRJtrxP^lYXxg%2s%3n(g2mBeN#&NT<3o6`!*#JSb?w)$Y|4}q^CFXX%g?@} z?WFm-B_Eutck|0J&*nX)(Ou6ET_%_1dpZ=|{d=7sE_{5fZW7t6-2Bx@V`uWxl~bQt zznfoPT-bRwpv6FT5-;FbnTJCct*ITqtS$I;ZrDd$>?{v!2$b9HBnZw02lVIZG^r^k zFCzQDe8_0si<}%>4f*0Vv+F1!_z3grYr|K6dH_-U@z%r1<|n&?JvkX0!GNa=3!eM} z$3^CoX4!NFrXA%jr{oOf>2`ezR@5$TOr;=IBxXsL9#e4anFUaAt_t&pZr&rTw*AUk0-|Qsy4p z@ z`J+S83B9>xwrrj|>I=CJr#On$jh4OZf!Dm=s?gR@K1MslRy)az5AQ`9h=gmCx%1VC zTo7X>NhTkMzK6`=DS>c@YA+TyofxR(k%>aF)h)o{nepceiV-br;#MVh2%)x!khjTv zW~bXU=`c+6`4;WfQe0A`zA~4Zw+0f{?7{98Fl{xs?n)KvMa{}Nd+*0n)X?bwzwB_k zm!BG>xvxh63kd6_kD3cbARA6%gpI+V_jHd|yyDmjKVIs5^Fiap zPM=~a>3nP+{9T z9wGC|Ts)5R?y_RYOuDy`bkCc!3tMeVAZ;pQzXkL;PFt;@v*%4P&$92kZQM%P1a#5o zGmHhmW3W-*O|L77M$MlhJZ>=*+ueMeD9&|o?z z1w2*Sx3Uugw|hWRk=Ox(EcmaFKw}4hxGf+m4!A{A>zAKkTWUcPqiK-$@3JvPPkHQRG2VNtKh zN_58*i%6Ke9icxQCQzo%562ebpJv2NGp{Jq^aIXX6GK9}K(w(-RBVg3wfvF}RT>(% zIrJuL+EA>fhhD+n6!`c)nC7@^)BZw4*oVTC#BOKDD~VAt_Lh=ZI0SBb2aywwbl;`9 z;qNaJ>A=Lnloxu8;~d{0Jy7AneOz<)!wLJuu^06uaHEj!hiSH_$k7L%&+6YnT!;s2 z8Hh}$gPjm3pJaQ3m~n1l-A5ruTAuqY+H|>znu&aB2rb;ghNnopL+It~0g7Cyqp=)D zJf~A1s@nGgdH~`JqJT>5DR88=vAX1wS*+1m{K^i5cA zzGbpyy%VnimBxG&7m6`WGIgyUoLeZnY+BfO^RHX(GD)bckFJi*uOEvUQ5!-SEtDYmEI5Sh0(qfPxp=Fl@<_%Jd3Upb}n^HBDRmFqUwp7@Qi7e@6IDEcNrlz`^KNQO=TSzl5_mmZin6t%%D*|!qGPI&51 z>Q|f(aFN}sa2c1S>M5gq28x;3R%`TsBB8M^X>1&i>TleAAJiD&-KCt{*!N&EQ4B~& z0D#M!jbFQ(41KQ3iPVqH3lAD$M++wxJwx43s21z!g)t5(yx}#x2Fg}XPd`!2_IAW| zXFX}pgNoWyT~Z4@i+z#s@d}xKkxw6?Q@Az%O2m9*DCL~&5JB!apVDiHKwW@gY=K*V zpvb1pNb~V*>5&pHW0^Mz#V>trmFS~nC%>J>t{iz+hG^p`4~oDK6y5~Up#jvuHU=&6 z2Xs$9-12)3%h?tMkx~wcp68wdS{(1q`{3(E1HWoWw;r*=^5m?+T+Y%2FMH=MB4Nct zDWgi@;xauPq(={bF&2asmNbc~^Rd}68pzm+DgxhU+e!pJS^pT77Z1ZM?dl_Gt}fY* zFiV;sLs;=reJ0MD4KmC^8BB;4o+pYdm}{aU{UguiyCjp|Q70EDyu~IwitTAUiJOaj zT_!`t(4qyv=4%!0k%k4h8I#)5oK7IOTSv2O$ zv;>DW;)((!n*?GOWojzIPn0#je<-cV$&_GC{_3$LI@zVm1wsvLFMRR#1Xb%P=zvX}?z1 z13wp*aFHPJ=K0oZKA1ImDmx!EYoy(X`^z5*Pa*y#IbZ2J1d6aYw55@31poHZsP*-g z1c3Qzq^;i{vtL0xG6u@o>vT?*f@OVzpAs;Klqk?IFi%)LnK|zw?_}m6zOVJU#lDF zH7$Ht6I<33e6ybI33B&q+?;nLPvd(g*MgHbl0CkK4(vIc+IF4!`u*GV#QYkpY{Z}J z{56#|$Lf{TRsZ1S*CGpB#)024eXHLCz9Z%k9zm=8jcaQ?k*}=IZPUnazT=tMdCjUZ zi#WHY++$?AyDGSzeEE(1cjw1E1(y(%N3SoL2d{=uFM0N=SpNl%CGV_#fBb#b@oP=_ z_wJ6hnaiDPpZOhy29w(}y%f`Ob2O6fGNrX%`6LqO$X3bJKs|G|P?F=Re#3d5ZBDpE z26J><0!;B%kj_DyeXOL-%JFCNmlFaeL)qRjLgZ`nlL#$-xsy^?HOG2IO3FmqPBVrUItWgD^JIBm zPy2)^3TAf8;ud49`K{W`H$z?SM+^18lqwTCk@(woek8AV>4+48=bmL=ahSJ9NTb_J+|22t@-P(@F}u#8whUlgrpKGg5vUOj z8Tf(PYj&o2mLY%X!*uB@<1`DAI-vhh;78N5ZqIsF2LKYJKkS5HF|elq0L0o? zOI`ickq8%SlpHn-dB;xfJe2grNX!2v`v!f=I@X+2nvE$0XwCv1y2V;9uC7Rjvy;1Z z^j5o7xZJg?_?oV^(xPj_3oyCegauIRv3d)6mH5Og{K^x0haoTD$Ef3nI!erU`XZ)0 z=APU+g3Ao=99~ejy3Q3H?$3+{#!@rTkuT&(Yx4JgtkkSlQD8KYf%>+5eC5dCXFBgPi`lJ2Ntd>?`D3Eh@6znu9U;s#?SQlr z5kd}2@@@K2YddXT2!lDoou8~=>MyX=F!)rSlSjXnR{e%28_kf79CDrwKw1~4oF;qE zozPxE?M5l@-KGWLz;pmm=!KLjmt(?(#jI< z(LRQclOmgKx4@x=wiV+|*bpDxnKgX}yY_d)+>ng(nASY5d!?7J9M8kEa?-kYi%JkO z66VA|%W{U=-oC-|1Rq$|$L}4bEm>~96}r9^23+i|T52(w%c%5~OU|&UJ*GL=>s$?l zkne}uJXL(#8ThpO-3Qe6oV}dryw}s4MDce0A%y_XrCnJCW(No8ivQ<}mWOfx8Cpfi zcrf|#m6FW%E62MU2>*-RYRYxP>nzB>M46^XAl3nkKgvnqr}=n@rTxA2{tU= z6KtV{l0gY5DNDy$>i|hk#%THD{jHbKs*Q%LXLIoPV)?$2u8t)qORCGb#SL&}uSNiM z+AIJVkg$GG?}cIDoyeT%EphEN!wY^k%IcAuf^62}PNF7Qe0Q#aK|xcEfZfq5`LzP| zcQ6%=XSNUD*Ue>&zb~tAx@bVQTR}C%)YD#%j%qbm8Az{`%l5lwdhxi8HKHF$Zd!54 zchiP5jv+~Dg+=T%;KOH!*q>e@@^1@jyq;YN2S_MctLCbOr1w-t!cYb37DwhGU(z!W zw-l4^A~xB-uxX7r>7t`P>%;qP;x}{ofGp}KAjaW2+u`TOkZXiXU!#)musgGvlLpAJ z1aqe#9*WH~wujZTEU#`0JrF7gg@hwX>1}+KTeRME$AvoBCoC9gmke6`H#Vd1)RGbm z->M<0f#eVetsXT&gXddy!{@zYY+Mb=e<5)*DNt|+$Ie}(l9LCgWmq14OWO#uySJy?f+G664|#TUsg)Po83$Smv( zyYe~98(`S#hw+{Ti1Ckvn)b^VM%6VbM9A=^@A`LD<^ZR2$Sd14h|Uz~a?8{E`eg-c zbfp-96YZeauQ(Rf(Wn}ye$1n>2{M}NQ-L|;^g)ljo^Txwa<{|_s#3eA5f^b zb+111FVH27UJl+3|I|t|Vs>u>Ro7GZwTqRmVm|%d)=feBs5c-jt98e(&EHq*LOc!j ztO}`%c8u1aIqpF|GyyF7uX%4+fy{toM7%^QKRanXu4=fglNl!V>%&>( zAsq(lQczoHzoPv)kIs!wkI9Wq`6D~t2&Y@i+{$;1-XN{dZo1c>WL1^C;k>-G<-|v5 zA0Je?iGDi1;FY-hO-`UCZ{l!!Wv|>>4c9OJ{kXKDK$hk=J?+Z5s3GX1k7501+hJfP zn&tTj`vjfah*_pI=YeS|+A2OMC*SH|-qZeG4CdMIU4GHj>>layw)| z86BISa(;5lOViU(-~a75PWA8%TZP;l)G3{CWC;CEk4sJLkYaz@e9dx@RnIUmr}}}B z;Z!Nl-RKGB2M!3vQNH`}UUC~B=M~{khZmCkXM*k`wXvg-n~!L}H#}~>@toeN3M5cG zZgu_esI~RH*4qkO=31HK65OtbRa4f!6~+j)+e+?U-d~-+ zE!R$9cfKzRwOp(c?&@Roeap>7HadNF)c)|MS8!xb&ZB)wjW;PCCQte~g zqk1FDoO17PR-Kh!$~qjxG|#`B%3+-p&= z`0(t_o0FKHzMUfth#3cdH!pTbr=(@~cl8112yqfIu!^-H0h zxsS?oBKslf&ZI#@;Bx-j) zm{|^Vt?IIa4?i$}5SGFs2=b$cA{-9sw1+Twh>{=c-F_~|r&mIG@R=Ra+qm1Ws(mQG zSAiLKN=-WgrJZ&(YhtMO>23AfcEhDs9iLT%Z0sG(89qM>Ozusnh$OOKv2){ z0)xpk|HH;h-7nL1Bl?5fhMd^6NVvCrGPc6c6EU(xotTkVyAkRY?8M$|@BUc7?!OnPK0IsUuF&ZRS?k^_FU$zt( zvb3XuYlkJ7!{t&?nVf-*;_WSShGMsU`9~Nvnu~X0;OTVi5@S<&zz+XNpe%=^3pz{a zXyD1+d9z`rG~XhHSf}i?^H3|MPQ}SpQ(kMf;G;F}HjX|%?s~=ue5Z|zs2zb6;NO32 z%igiis~)8cP$CMy-wIdztB%>>UYBWcRcOe=Hr4n_(v{ckHW3Q-FVe{Ng-oc~Wk_u2 zMCy$lkGgA!)OEjxJIluBjyiVFco~mHCa%`HjPn)eP)p~QU4QAT*P!Au?kgi_6%dYR zJJ%T84|9M%Yw@d-h^*?fvFjJ3`e?sp;ycAoxXp=ZUhAoK;)kc7(;dn~Jxt`j3R+MP zjCr2I7?91ZD}?PPzGjO}YsQEriZu4px$p~*)=i?|=?|ZdC~5?})3uR5UT|oHrm!8% z@wBaaxozv6X`xi+YN1Q4$kEB!;|@z>oZU*-B_~%E(lEy2B85%vKI|S75#a$RV_tot zDH44Bkm)Kef|l*|h6>P9r2cBo^RQV_!9SPLTI~{JK(= zm>{o^^`}-Yhqvqfh!3U=BV}*5gGkH0dwTJe9?lJu6@BtNkx{A_GFYi=I@OsLOXEi$ z+@Bx6zDPM+bKI$MoIf!zz3}O4th2XOzim52`$^Z}#_0D6$Hg0UH`RCZ1iv<|T_(Rc zv6j;LCFG3I$DN0_o|f!-dIrsifYwwmpNf6Bvvc$*@Yq);vGbb~%`-Q7yWiw|3~6p& z6FV2g`msqbczMn1#L1@b$rg<}(6wERAa6`e@Ur{N($?hm=hdp=Q91qv&-7!9le~kT zL6gnvdfz(hzR(!#jT9y;6wMsl^K0DOu8W^*zFzTdGtweeaBH3QP%1cL;Vt!mTqL4p z)=L_}OJnXRmr*DQao6=?d6G1kc8R7v{k=4o=_skt*30KXdr-&Hvn0RqRL*H8Bli!! z2tH*WJrbGNL+&`$J+z%mU|%DKs1v@-GMFfj0_@I47#94c?FO%}QMLqu1*Bvkz}RvP zCn@R|0Yoj`qIXQ1ub=CjEFgg2ST8BaPK+46<#p%%k$j5iRd{a z>t_?YgV$7>RTj=3RX%*1+oYdnE|iV(eI_97Q?_s7^4Zk*!^wuP(~0@D+@n5jwRZOA z#*b)lUmLAG*K3)yVK_b2jv64e2iJ$6eF{ZMJ}o}KSIAbZsFZFLHYhhgmf(Z?q2Rh>h=6= zV%sE@(e&k~z9;e-JAD9R1gWE?bTZtfIxO+kBj^I4z@rC_IgVbz!ANsupX;Q}i_c(< z6AR@^=?d{TD|&PBUv9dUFy1Cl2}rbK9}Qt4rZHb(0?+r@(3|f z_HfMSJ^ggUJFQ05S8ueqj7{oi37rkHu_y@5Ti0@aODjjOlWW8_0@cRbp&*bdr5wKZp5rp}{lmq*ax#>M-MyurOd3V;5c6kN zZOW{|`3&>Q^%+jHaDl;kY6aB7lV+$)IBfyXyVi#;*q{>?hmb>U3MrdqYuh=wH~$)y zb+;pj1b%x_>N*Y15O_{r5s>38ol z3cY1UT}P@~UCs;l@~mFn>4vi8)1@6pLS(|0ZQ4jV3*)(?X!7# zl7}mVk=|NvOP8eh9_^Vu`aEN?YiNuMK(e>hx1N*dZ@+i-4DIAa-uzgex0t2bzBJUS z%5yR{wTgFTD*6fD1lmJ*LTS2TRlV@tRykj~Q5hQvoZaB-@4ECfSANucqD>XfehdjM&(crKIbdZG8IQjAKkH~)uKUXrap79 zEJn{?m_6^?MvlMCdROAE+R6npF^i*ia#>YkU$aQPX^ zeWCJ-lF9hoHk-FLd(}D&{xoY43nSr9t6i6UtPOFJuP*{i*LNJ6d>OzAnoT$hx{oQ7 z8J*1S8$NwGwbN{*M}`^97&uX>agMm2NaVn+^bFkzdf@K-LiWS|0}Da)zRivb3u39g zqju%^Fb*C4cFWZk_S;j&J`g8|vl}+M0djf25lgn7CTIHVp6kn=Zn9bVqxx;6~EElACfOCzt;lmo`zBKQ(iOM-mF zZBhTBn%{a0c8|4&VcK(ie2lf8{eED#-@dORDL0lZhrPFCutJ`u5)j&k)pEhQIp*Z( zl(Ul)va<*k?F#C;<*Yttb+Rw-Niv(*bNTF=tGA!=wRhfO+V>@7mdvVK5nE5np51;^ zjspq2+yu6{oTqTu9(5o6@KpXj=E z84v%kgL(e^IY&oFY&JWFX(9;>-*}hv2M-7<&*}P@^ZOkS?meVlEeQQcySiyP_UuQ? z)u!Xcvu8Z}<`wU5c09kH2xCvzbR3_Yus&Wfjy)-tp$_^u5?#iImNIOkDFG;sX$qKi zVBAl{+=6#VgeeCm$yjlC>lk9fiz)k=oUqoAvm@qGrI~XH=R?f2a*b~~7R#2^;)Ih& z_vxCN^NSN|=g0`wc%WxD47A^TiNpn){f5gIFEFN@Z^V9J_v9ImA3p|Qx9eH2*IZp) zu{d5LsbROf#)>sYVO%Q&!yVS>co$Jd4j>vP(!X53Hw@Ba_~JAURXUu1E7 zh9@(OJ=T>TFZ(d@h2QhL`G5T`TTFWU%=r56@9#EVehaTZ;PCYSdgZ0&TSC-=bRpwN@xh{D9abl`N51%rxL?snc33B^WsKg?+ zqN>UajZ&5Eu&M;HI-9-v+m{BU>NiE-zZL+#E`R8)ugtF>hTcD$-wcf7aCURk@$#6< z%WJ%^i7^xQCCIqGzUKP+8e zD&h3(BV2B;$>hV}@&=PjH7m)Mz(Q^Y)lRq7l#npSlu2g{hu=$B5<+60p{gj8PPMRH zbv%0fkoD@A)AN(kb^p*OS46P2W7=IaXCX|U_2QUu?m6mO?mygfyzW?CEtsZ>FaO%F z;cUe;4m2%Hqro`JcuyIIa8m(#s4$A9`qCbb`SGR%m2$G@`iyM^_5(u3)eYkq*!TV4 z@?|rT$)R+e$}zmJi-{2-9YPdu{cDwgf_be-I81@s*RKLp60WXko6Pz7nx=M~ou6}Z zzT$YbdJ7+Agrvxk$xEP)|UC8r-5nPllQ{Pt~fqDf)^!po~BF)Tg;-t zL_?PRzCiwlwf43f{WMMQ3wsX}CYP|qmy4Kbm>}m88cii+%rVh5Eyw5QoSvR?a&kiL zYmU#3dGpbmJbL($<#NH(r%$=MzQj4lI0k;{t-r=Mzxq|C-A%>b#BR5vb`6j2J>Y6v zD!lV>sJQG)7xj4P6&Z&T$iy6Piml6uo|HLt>s&&Gojn96Sd3WW?XXsnoQ2w3CScg_ z=@u>C3yY%__m59mt=62bPH9@lgNOH6EIR7diZa$*g|!Z5%adpC@%68~#ctPgDZ-Oy zmppxbNsgH*T@u0o#&EViDIw@#yKCB(LlG45rotsRhv*GTVM(bJOZm0&A0;C_qG&FQ^kj+&13dd>OiJwEm6Pw|OQzk%4AuYKjqJb(6_kS31TXPg|b z5o`F`m%qZ-zxj3k++X@D{Pdsyb6_pY)dI5M8qW`Y{I==4R|(KS1mwoeV6y6OJ!Vc=MwVIX%8d-PNQVsg1|E1#R15 z?0v>KGVaUdI@i~igki*IgLFc^5S~AOMn4AX+Oppd#9<)jo~3luiozcxfdjw1+ICrl!UwKNedHPim8tgB)X@rVpGweawCjX2M0+3@Da zKf!PNp6}-?U;Pqa`rr^CEa30Wj%AA8B=81_dI{{P5NQaZa?ykcc1gcx4wkr zGKL^_g$$XdSrVlTe~@x_IMxKF{m3*}ymcTgLL~ci8)(EFX>2OTow1B3deklOG)()% z<+x+o^<;0z(K1D_b|Pl*P0izveT2__-}kfGZxABZdFocM#?ja{!+s!!%q}LpL|ko| za|?4rZ8~1`TRcZxUp}GkJnKcn(_N2`vC_&6Q`>(R$(sZD>+YWxA}0~DdXnGI8nNIXCfXehQ#q*U|891p{NBqT<}!bP{@!F|VSb25%Rv7U!&Tq&xKVAni#x z)7n#<1F3LG288y z{&4*7ki-5Pq;^P3?Du%GVvKZM$My9!UDMDt9gEe1 zve z?ms%`dp`SVFhUGhh!G@tY>dQsg|{A8JNEkxIa^NF$LzR<+Ts&sEbCy2!&rtC@j}jm z6+^CtVGM_gfABtl7kpoWa%oDhh0~*Z+`IpX7hI&!_a=E?IXJbmvueun!G9C$-{Jj49-yCgOyiDi??D`4+_8xPuD5J=JvEWV`F+k#TP&XGy(`Ay>x9!6)NMnK zu6(b%pCIJGi<5hN{}+Cg+O_<^NyneR>{*+aw9G8>vWy*%uslA2DN-+M(vbegZ$Ewd z@BbtJ{r|yFR)?Ukk`m~ds-mKzGNy!kRRyL5bV7v~p{lCe|3u8;=d0T)k@6a^-OkNx zz4qLyst#lJmm%G_c^nnx*PF)y9DW|&AMn1{DYut{YjwEq_6BZV|J(n(ePs3O8L!Gz zUj>mLystc`df)Tm+dS`E^33Y}kJ7wT-60x~s^1jvK7Eh(wYX)-9~O(|51XdxX6C~8 z|IW<3ANCHQ>Fz+CT)IFzapbC0bFSBGa?T8CAdi{s3~3?wwdak8k2qVb z@lC_yk9?XpAHBgRKKW6saadasVkrXFl zn29lR=HH}g8@|Vn{PHjVGBHJ-J$uH-KlU-kp=Yz*G7LSC%47gJAI2{)6InrNVI5PZ zPJ)w~n9JCauM4h>p(aiUA+k7BPYx;k)>$^8wA#L2ahVSnPC)`lsZL2blVZSNNI4Ov zz?@R4^w|xV+ECk?u3K_`-f(g82IuE%?p<7Pa(2dQwc_~bKFd`{TdztW9yjcE10>5V zGy8pDv%TiYlXrRRt6$~IU;PR{{^Nfd|Bd%Je{jL>>Jm(1xmq3iSiaWfSq@c_hYwJy z$mCEt`>Go^9I8VP!yepJ(~YTg4J5|HkOPtB8}~Rrz2KuK7j(-dr)L+Oo*i@l;sFmI zKH{Sv`8aj$OM^rRW!-d+FFg4@{Or&FJTJG`FvELqeS^RJ3;$1k<(Gcu_U}Lb^hdbY zond{c@F8dNbQlDYn{NI$AMVx1ykWhi78qlso${gUrw4>=d&olA?pR3;i-zT@;ds?? ze*XdYk55^23yu~SoZr9T{-bkFPR=+#KO^UvstR~lQ;B2P?|J^cFBrywO~2u<{?cFL zC;$9U^8fj%X{f+#z%?MlhYD%OBv(QvY-}-H(k?n8RPY)#Xrk%sA??}<>U;t zwa^?sY0Mn@eU^&H!>lIFvSZOLx&O$sUY*i4YaZUe&zo<4njiY@znus7ACOYwqi=q? zOezPoZA)F(q!jr0$G?whocIU-yF31a|KQ)_&;7YS%kubyU-+4ygDdzOUxJT*>|;<1 z(|#b6N<#rPF&`#661g1{)lQ{rJ5h*ZB*sHfebd$Zuy3=J^=^{Plm)xpvh<##dyhFj zK4P^v;;3F>=L#7j)-UMlrmSmkd@t+u33E!4GJ=^V;=PzF1e5P$%o<4n-pZe*a z;;;RMpX2SXzRhx7gLB-wcaO7=o?yI?_mNs0)0E42bz{68(~fCkn1&K!4a04N0=Yak zHZVm&yvNryIhQW4!!(d66C!ypw9S&$@iFJ;Z{ljlz4K#!__zN~zUPyl;d?*(Ii7z0 zMHz!IP3(uU%!s{M(zQ!+O6>O&-~67hv06Xk<;#~$mx2G}kNpR%yDK(f=98beM?Ykk zV9_*;IUdFt&1LLLUn)wy_e{gU4mbf^U1P`bb}zjfu2?S)V|9-cM~4bJvM>xg$QzpF zf_wK)I6qsmJiTCjcEoAdBF1A`bMM|gma7%3)e2|L;bO6L-5u_KAM+f!?0bIu=OaJ$ z(|?J-@{50sFMj=3c=xTh=zGVfKJzI~PA$!%rr&L`hw(_8wgz?#@tP!M0u)lFj6wRU zy19=LJ7j$0nOQL8i6Kn%pgqGH^+BoP(_$Io^z?e6zQ< zuZ};FG9i#{ZW|j#j&K5duEAJ35xV6Oi=zdL<%;_c@AK&4eLnKWLq75GPx0`t@L`O=KU*Nf2{$nPh3q;`f=#=Gh#ro(GpZvtfIX^#V3L{sSS4`8$m@6PN?e`q5j=A1k zbNTWGC&%afbARZc;}?JF7rAm&B&ti4L z7-74)qM@O#Ylb)=qY(3q^^tsNC^|YiCWOE^W`-e@$%_u>30Nt;NV+3VPR@ArptNYd z@#aT)@Zdh*`@NrI90#7icv&VWBr%Q=al%b^=A*@mx4!;0&dyG-7=GdBewP36Kl*?0 zOTYA2NV}d-f6r&Iz6@JsZ5a#QXN$>^QpPOgJW!bcLoUm%Nz`J9IHpMsL%Ec5=hiyL zx=i#{+Akw94qzLEOT1rlblh=zevikGA9HbjLAU6Tsv?G&Mb{y&W#4Zw=7_qkSuDzV zN*Dvq3C?<6TwZc{{hXip@juI-{*yn>lXsr6Sg-k^ANYPkoS3FEmTv1kAq3jm@p4zj zueJ2$b8+bDb2#q_x06DS#GG*(IO-fQ^NlaR!~XgkJbmXqq#haefv^6`FS9;AW#}QU z;G6HfrU}aw7+IxKF`##1#xBSo-{$AeOU2{3XXWzKT;`o@H8}{M4 zd|wu>H!XSsfkG)D3CQcw-rc zJ-gkOmoG0_EzemjI=UmvgL@xgzu)ku{>+c@^5sjeuZ6|3mV4 zjI-D@r2;r-!NyVz5%-ze)QE4`#~zW=Mf>#rJxA(=Qi(7Od#!PET>h^TxwBsDIaj_ny7W@%j|&gdhF=zn`D@v7g{S{}X?LU-~OQ!#DrS zuW|nQ`?U6m%@o*A8!{6$l*-9`SPZX9NSR(6!!na;WR1j;DQvN|JycL$}I z)-2Zxj=GMs#fk?H9&vKAqHY`3#~j?XV}*5aMx zv!D4p_+3Bpd-xasg@2i=?KOYspZ(|g#h?3WzW&x%5z}z*{N7=FzD$-9lES`Beqj$G zR?b*~C?&wQKqC!99I#nRXnOc8IYvrEnW?2rZnivH^5FhG9)9F8tK|ysS}sn{IXOS2 zA9`NAc*#7^#FWZ~m37>d1~^x9|G`6YikRB+hyTq#QmQI|pZWQp<#&JKck%pd&-wV9 zpJh?QFl@>=q;X)e6t0F1UKWQcm$E$!H)HTwi)~+>a^yI%A4e981y(FmykZ(MlNGwv znpOl?Ti(3?5t^pv;@-UytGG43ZD`gDT5mWxdPLiKy3XQ#OV>HtYs1mnadc9%UL67O zv5$U)vx|GI*JspC!(aGQe}=cd_BDR(mw%0w)Eu20BRP}nP=>3(!lLX`UZ1q=c7x)k z0U_eW9wyQ$F^PM;|fI@ZbB-{t^DsfAk;Z>Px@E4}AXn>G#j+`}EffVF;1drQ605YXv7lKkhkeTS6`5l$nN1j4$!NW_@~rYdY@V ze^iDFS)X8y$D1RXt|i1oB^;_@D>mDnlxCWyrmAMv=S!NV;p1J0cb32B_x&E`dFJKi zOa9W&{~Z6qANt?$r7!*hk3RY)pZ@HpXfBw}qD>u@+!F?Y@* z$uc#=;Y@cT?DsH27oo9&Wn?;ZQ(PaN^3jjJiF3_iA5!65%kl9E_nhGDg4$b7PL65n z8l=Km%M5I{JEkyke7xppafBG5Zakm=fzR^;zvm15FaKA6h|9~b(@1G-J375!`{XIu zNG2SHn|oEkf3>}$wl$VA+c=c*FEem6l(4Zi;!3D5BD8ILC|)f47I(DZ%{Sk~dQ0PK zKKl4EP1{m=%l*>}y1M4{^o$r2yKUJ=p58m-_-u_a7S}Ww5f+OE?`!_R-~R^?V|e=X z37`AH&-3i<_xPEg{AqsM4}G3&J-Hv~x{iM650lt+hvRW+Kq#x+p}g|YrE{7lZpQKU zhtK|MjNC2zJ~A-SG@j-838%*;d~3Rv#tRqcXPmCiX$})*J$&$xi+lG8VWK(&cS8u& z&aqmpu+Ad#eKd7VRaN}(5B>;$?~ncg{-yuzzr-K^PyZxMbHbxXkGQ_RWQt{6(0sT| z$^pn_oK7!?@yBENTvN<=8DF*1-JTB^rfDRLP)AD~%J3D7g{57rxp(go7Z+!&SH~=l zJF2|kOL1|_c%SfPrK+aAtI*5h#}9VQf-;LM%%D?u9|1dxG7ycqY@`W!TBBT_FF zpXTGhYO#jh?l3W!Ed|GtZ@+f$8~VPCGtM-T#S@c|$Ox`PjT!p9XW6#coLM?yIP~Ax zXD|X6>yERFdtBUq#BzDe#rX{h$2L__Z&6iNE>_f0Z{s^D(eO7zWzaJ#sWW-CV)s$te<@ z5Rfty(9IAcIa0>*6|8URueWRl!@bA%$vN{^|N1Y}HJ0na;$zFz?vnQGb4)~16M6jU z&tO;2@ZCf9Y2YJ|KEuN|ALARxy^{wtiyF(!9A=VGh6j*6n{ChLdP}Av=Yh?(=kYu5 zaJ{`|N{P$sYu4TO@u^RKk{|i(@8s|My?-a`Rl|M^#4vICJzu1cf1LXC(|qp_eLpXr zJ;A>BF1ziHad*l2`kZZk2cT*i|3fL|dYh91< zn$&NKfA*jK=lSqeEq}XAwA}k4VQRTO1GF)wzx;3i+yAG}uGf$F!hh@gNKp_rJiojm z=eCS(v)M7vGgVdLoMX4!;l0PXmWzuME-oG(PVVmW@Zlp?s|Ag3$aCqkKF>4roH;sL zb9R1CRaJ*E&?@%*p1N*%^zcoVs|DUWoG&Ls`~9AO`k(%1_@jUHKZQK-yT0(ddAaG! zg~4t>T&XCUBIFzydcla`yeCW(22ThRZjliwU6Dn~_@p_HgpdytJjtQ5G;n%+!5bfY z#QppCxj1{kV%4(jPVr4m3L~r4ij(tGPS(d|Ce@UfrqadvdUH*lXO``X#d68f`UvkW zZC&&9*;9V(PyHA_^_PB@pZ=*o&++jYXQ#(ZQzT41VCWCalLTU<)a!`@DS=ykQ^lCe zq!weEkm|7Tr3^K&+iiYJE}Pr+F5IlFiG;%$Pe}PN*_XZTavNir%%Q0p#xU{V-YNGV zpYrCLALrvA`xuWOJ>qD&z&S^SCFRIC42;vjJXbVL&A=hBIypm(L9DRq{(tQKcerlZ zeb)(oR@(86=e#F}8|&VxTUk}5EC*S(v9WQRfdLEyG))s5>;aR8d1l;h9vYZw9!xMZ z4VX6L1X#vcLf|AMEX%U2SgN4P`QEzeq&Mxb!u+w`bE-CAIefQpL zul4r;+T*+= zZ@~Ks>*F_3K-;F|`65tAN{X(=))tw1s&N&k<`Vk-9%s*GexS z{XWh)Y+JLswhF+tYd86;fBCQTfe-vkE?>RL+urt0#?>KZQL;Eu@Uz23$W;-SXubiN zV6k}LqNQ0RYg@dxWU_}$4ApEOTi4786lI5%r9QnupKh5k8ZEQ6evys!4e~Ojlb57< zLOqXm1zKxV5J;oRbB$J-G|$Ph6k`%>YcZK&Wi&!946wZS{QHmm0`K|iuc0UkzW(dJ zn!UXnG}fb~2MY2eXaC@Olx)7vV$0eZsna)%;q!S-nx-e9NL9s9Ia$Q*8x<27xB#@FFf}=c^*UHw9N26hOpVH zS!_QXRShaj80v(|Hj8kSxCpPUXLEH0p;L~It}&Z6Bw8~XjTnta42MHT%S)IfXV724 zB$}n(kY2Au8$)7JI-L?J6(RUVVswj16Uw3!8JYbaP1Dfpc1}Y201l51dDB}TLBsDLoDdGGwX25UA^UEC_gqR?(l)ww5$6 z+1gs+%$YN!sYaq$S>9x6X^BB^h{xhwAb3l+*F!6fR5AwK8Aa2!NTA#6k|uH9VX}m! z!2lryH}-DwL+|}je&7fGDTmVo42IGA3P{gTX4JN!sbi6j?W)lu>ju{MwXrpNAiplhd zPT9dM{L0IIWRs_+L#I<9q(Di9kf0ZA$`As7=O6w9{>uODFJWZLTi^O-l!M>{9?x_- zMap~;z7$6R?`J20a>wVdV@ZzI|D|8Rl1!HCf8*2S=(4+ zWqCx=Dao>e!C*+g-$zM>b(ZOL!qMS`vMd;_u99aNL4cA9tsSbt z6}#J~SlP;19j!-i^)#cuu}Q9$>6AH1TGBBJl^Tk?L!PGyr7(%cIUhX$Lm*2t$}*=Y z@{_SBguv5}e~$m>_kJ%Q`uU$j=LHup-a%c@$eLzf{XX3#&C1dW%flT;DeQ_q~Z%uU_RNpZq0$-|zXo+ZUL}&|!0P6)6RT7*P6=4}OGi z{I+l8o8I$nyz{Hx%ycs4%FSzx_YOFk%`sZ?+_O*e*yB%d?_Kx1U;6kj4Io4*&VMne z;@3{S{LlK6zb>}umw0pdkG%IwBp83W*Zv~09)zno@RX5aiqv!MLPd)O; zrGzYApojrUCJ0H!3gZ3GT|psFhJJZCzs==XcfW;a+`>T-H}o7MFJ8yj0}?QFBu zi{O)#DYgkw0_G&myrr5q*d}1Bma3_!W^=AzzrmxAe3m><$;%=FUNZV_8DsbzzvEl! zcKiI)`~D4iIiSBW!pp$4nW401+O~KRFactksz)e|^A3|JqzWJ{(N8{^HY_i%va_|t?uFBA@9ePBAF?)DWw^9NQRL)lMw%p;#kS3x=m9mEOqf>{Qbvzf zsU*%dBwCUhO}E!)b!9brehSaWKmKu^f9hE#lLd!H~DS<87=j^?CKh7kT07%ap?bjS{rpQqSf%h`@l52=U?;~i2#Vsdhm<8p^eH1)Ki^^G zL!h$&z5&Xz;GOSyfL@mJOCS3gmX`~PPKNb0MtcYqwhajHsf8nWK?pH4!h5h*piRcn zWP-^G>L!roeVhk;pbe6wFm$>-mR43-9<8!8Tw-ao&d$auhQl6tnv-NPB&uy%Jb}a* zgtr(i&{`9`#|FoIHply#fG5ievNS!h@(@C>y}8A3FyNyf`6$o5@ErHt`yfIn0-7{S z86WMViyn>j$e=-}2*1meK)fwcc(2GZ6@O=~$vT|~%m+_5?J?*qv$ea<>72EN_!$ zJ-S7Q)%6WFc6M1=U#H*ckfaH1TQjd3+`PtGNAQ3Mr4p2Y!-_rN<{|X@%}wocmxnC{+5X}U>$RN z7#ICX!Jxmy=I%DbL7!f4mBDb8L8nXJ?NTNsN-se8y5(p#WjvWs*GEyp>KfXn#sy23 zrzB}Yo+p&A14SUv8_{`b9~&wTn*+;QPFnG#5% zm4ps~R4avVbW z-Um2){v!YUCx3{mPhMvCwk>S%WG;}IgvQ1qZd+9pd5)I>B_)A{XWe2?dkJ1h25Cm8 z=+fAR$#jafme4lzdjod1cUj+ArPnRFshZ$tSSx7#34@D7`N;j`u<@~vG zoIiJlt@U*Vosv$GMSHB^k;0u6X1%jGTqH^)31uEFJMz@fEpmF@f=-@NqzQSJ(CwD= zx&=j^kY*CC6;enL0oztQ``p9)$dA1jV{Wp4G-EQ`r;&lVZSaL=JR2j@oGUN9$awN9 zfA-IO_up(=+t}8g6jEYuX>AJm+wuS zzc)?uTK|IA)USW8slTY#$Gxtoo0{t6{_CD=s*~H*>+jdEd;Rfy>gu)Lywaxj{)YSWH$Gmy_V{ox`1QgCx7w}to1)zUNN=^TNc*vW^OIQR z-`Mr9w}+GNVprDqzxddvKhy0jWvq-=Ih;&cP7~ZBFsN-?g7aiqwvcZN+SanNGUURA zORTJ|v$J!GrKKf0osuHU2_n!o(O0UitHlDvqZ5tR3g-h3kV;dQIn8{|Q%^t1`uZkX zr6fbSfj8aH2S4;7KKY4{v$?ey<#0My}grAS{@k0u2NwB4`}~zO^7dX`10&WSabD-8W6^z(`O;?>XU^&F17~Nuxn%g)S5U zOV!L#%97@SVSmWx)*9!}p5eCJE^umhmn_RT8jqPC9b#?#Eo^HMfoL)>L}V!8$Wl#` zD)M|GgAReZiU9d^a)?yXOHdob_L;NTRPo~<_yATpvNFSmKoEi;1cJpv2#;D+eglf2 zElzrr_6Y6JrbE#wXe*Br2?ygnkOAj4qy8%Q-~S-z&Rw9>?Zw4qk|4E;Y`8opO*6F8 zXze4wCIYEZBr39A6Qxi5NR3eo#;|$Af@m=46B@ziKKTga{hO=~R=_A`vl(e_Xqs8{ z>lEOFMH_J5fJl%QlAzIfiO~vU5{y_mT0BWTEBq_m*p9Qe#(FN$j|fa zQ;&1{^l7pr;2Mjx7NJs%F;u~W2nZKJ=6J4KG$l=C$;$M5}}T zfI(TXzPib&on1Pe0nQ(@9|KCO2zH7%4rV4nB^p7L=L#toll_+9pjQmkzO z8PTP%_}fB8pb#*|aPPf$@yaV#_~=JJ&6(4u5yFwDIU+!srnGgVe8J%t!y@mTFOWg=w54)qt80+QaNs7r*gp{Yq-jp4 z(`7!dNRoufbV_0p8Y_@8L&+3^Mh1=a8ebDVM3Wv_*+&P@Y}^to=%mANz0c;>ChIHf zoI7_LE29;%te`CVbUU5M@JkX7uifDCOD~i4G7_W7(uAg|u(d}CiBu4XwjpVfV4daY z=qMKPOq8+~Wx>(W0nb18GEJx$t*kJcw^(N}Iv%@0Xz&v21wm*+P+0HLB1KA#a}90X zMgS(uaY8U}8m4uPlakT$GNa{Hwl~+=++1gUZIj{hh|DCog~DP!pCfo(pa;#VITb9(m-+gqoRT61uC$kB8R z-XXLCEwJ9vdP}$0rQaLI-^(|sMS#e3KBuXw2rM}t0WBd=3-;xuOSkjv%TMzwzwjvr zy)J8OYbdRmOs1r1XHmrEWc+x2I|fLjrHDo>q`clwkup%%4V|*f@^FpeV3jiO(C-cz z^p+V6Mszw$3H-rTvykRzv=Yd*) zaouj0i?`pw-rhbR{_wwNZF3z0%&RK09d!qj76jSgoJUAU@FAMx9|L+GLhDglkro}a zPBBUl8t`t0Nd&{e66@=0tZ#3zzOqVD49IkfmvN3-w-xJkGWJ^ap>QPEk^1Dc02lEJ7rpBtisa7VsiR zcuk`eJ~g-n7}d6Iv~x%mUI#+s7IsJituy-lGTI(w38R%YmX}spT3SVsAuM#u9_`$c zXiZTR7^yK*k!VHh8j7?)%j55w#zJn0#j+3rfk2WZtgWrGzP8NgAAgvaUVZ^=MOmhJ zuOcH%%s6atSEmXOGJ+E~yQEEY$D$}=zlrD6d>DS_~o;2|G$8Lh7{EY{gr+2r)j zF3Zc&A3jTSw3GxFqW68%Qnw9tUD37`Aw)3N+J@|5{&OUiwc14Q{nt?KimH0!VMQuSol;pZF=1=f7OHpd3=Q;m>{U zbD!z-*H;*t6d3~T!dtIxnkcdK3fD@!m1McbS;yMS4!51XoxAV8o%M|kilT$k8j~bQ zqtIxQ#9*z&TS2P>W!WRi3aocH*H9D%!=(|+D{CwbR#3uF6gk~qH!_MAX^BcHzWSZ- z;+KBzqx|wGKE~PY)6DD~r8FulKnk4j1TRri;Oc1va-GHFKnel^Ei?!j7fjwm2!s|e zlHF5hS=-*?p1ba4Yh#_JZAg+1LdjTdtSe9=QXNFhvp8Pl1O!?q3-)LPQIu4O5TA2+ z0-hp^9(t=QBYyAi{Xet4bDDqk-XCW^o3XRKOJhL<&HiMMB2N)E1CisaiXa@$NW20a zq9?x>hJaZ})_!yE8z-Y5=WC0+2+ejn9Rwf=7*i0eV|+A421$|#c6N5Sc<~Zjo4XA9 zee%NK984x-nx>)b6p_*7;$kt)Gjtl|be+PG2DaK?ZriT!QX*I^SjzkwI zO3s`+#rDoQ?!W&&mPgAdq45h=hS3^lJylf`a0sDEOh9Q#nigoSNs|;~qVHH!R~#LV z>2|uLS$c9T0*eAbU~P4kwrTm~$3I3;&>alOvXrJdLMaj1wZ0;#6s;s7MDIWXanYMt zR07`B_)w8Z#e9B*53qB3myNAec6Uy3@$`AhtVElDQh_`#Y1DQPMYKG4)N(nK@p$FQ%_(uk$ukd@_SHn%qL-Z7aR zVQq_25hK((uIFd78LhWud1UrQd20lB9gZLbouVL5GwM2qaX@6hkoilee zgTXp0!&7XmZgYC`3@b}33zFM5z2H15F;w#!gu~jF@%V@&iA4jgH5V`3&gAHbkNxt88Fq#w zS;5lM67#BxX~ZJI`2bA?Hh>1R0N_P{fJBRgq{xt3VO_vmhf$ht*=4l8&gRZGcU`#1 z_Re+;$a5Cgw9IDn7`oTCkqHGSvh3ra#1H~f#@{|oBdgDcfQrgk>bgY;5ucNicYp1B z_|(In;xoVe8P1d1%}E`l5q zPV9K(q7bB%;%mR=Yx$}7{{)Xb@+7xiy1?vc%;v@>&Z`BpG9I68+n(5Icpn49q>SgR z6wwnp#ycvU^B8035Bl`_eR{nP%fli4L7(B$8fDpw=Ye&x$cUz{r&LwLc)ZWi(E-

DWn)^YRN4bmhb$+88o2zgd;;lc%O-aOzlpZ;_Vt_zAFKxPV| zJW^^8%jtp66nayT2i+Qisn&stX zR##U!8XxiWlTR=h4pB-m7(yDV zUVeqoKlM0!dwclc7X?Ve`sxN}PM_nk&ppf&Pdvl!?pXlpc>_`+jfi7GA`n_Y8|S3f zHdIZ6Odv4|DIGxujLtzuwT?hw$__<;$Y5o}T7QMDopny1JwvD8M`}gWHcTf|0J{Ay zt!=TvB1IsGfJ9)D6q6W~NFWIEJSw-^wqbm9KvmTkr7#QN@vGkXRea)?KhEbq{V3%y zVRLvNVZo-%vB3Pmr>MQkv!Nh}+KJ#i%e`Kio%% zIhCKW|LQX|M+ZFm*$=b#;y&l^yu|Wo4V@&kwdKm?Jq`|LI4r^>pb}=Y8756hbwW#2 zA}ApuYgGz@_jv0N$3hD4kwPsBmQiWpLo8g}xO$EM?H~PPUbu3FL3c==^wBCsr3DDh z>}ZCtlGX)Yc=1KRi$DFR|A)U7La2^`|F9Sj!i;=m?8mjLFWp~Dt(PLs z)xUI?C%5IVwJU*C@(a595|72MbX?#3>Rm6!3Ka|Jzs|0;Iw72Vx!&*JlGxvBzct$} zfb>@TinJg3;eUZ`?MaU^h%a9a`;T_p(%M!ww)w8lKmKU9lc(fGflw0Nf);8a6?4&S z+|J2$f)fs-3`^U6F5P(tyIb2)`XU?x5v$@VA<0rqrYSldn&6lnHPH(&RRlnrjDCMe zchE)1xX4cOBqo_kLATRoI*W2Itu_6@fQR1t5I^z$pTG-f(uV$07p#Kd(LT`3Ym5Qc z5Vs{$Xrp5SIUXYo9#7jwAVo?MJ-WI*?!0sl4?g%7&YV7jZ5>ibOq!ySgx1;^loDdP zx0V`X66$(Rw^K&BtrAEP5D2uAC?m;|93kNF@Ce&92&pNH;^g9b&pmhXPyWddv$uDZ zwY6=Glz8jNdI=^mw5|r(M#pyq9hs5@U;U=vH&RHHmkaxW=zn?)N*bZb zbqc`~T2EV7WEci(D_l5#k=@<%6h#LgLQE@dEiQPf`5dJsRz@H|XoXafty>fwq%x#Q z4nkwCG@WHslx^F#MY_AYK}x!Y&LO3g2I-LQZjf$}MpC*{x^rldE-7h-&iA^%^?dwh zt(gTg*Lj?KY)7d^8tQ{%$`zmT`27|V$9tW$oLU@rmGg__x5t-!beYoc$ZHVlMh4{f z%w!Pj6h1f*To4XQVY`(U7U3@fFe-*n*iWN=JJ*K3QbFpOI^vvDpSyFV|(N2Z1*{A z4lQE5lC35%g(x|Rfp|!Me~#JBAekh@4Tidh{lo4IPQExZG2uv{Iu11+#h=aYpp>Lh z;Bc8l>P;>JS|aOG0bV`vuOmKAd=%-DvVxsh(h0vVjV0lpLuD0Yc0VL(s>w^`7JI^M zEEa(!ZE&vY&FmT{&VY+Uq4`z8_ir`_s%GPof$2f4EYql%8zt6mQwAgTU|a z%4SDtwAy9NGmpNFbyS1R#vl)K9jA5<`_0jWqxC7$$4H{Imm5D*`{)po8Bq6S!Wz_q zGcAa73dBhpF7nXee6vRwnIT>s9uxZ-jeLwf&sL3+2K>HTu$0D)E2h?e_J+3MnDHRL zao@4(yu-DrqlsE%OgI>%>7kpRIGFe+sAb1IMp5eF(RNV%`;TCY^5-I_ueo$q_*l9H z^gPWH@=|FBW?n%mxQ(nM^%#*eMb@$=>f$s-CWczT*?mwjfYb93X!vn#X>n0dpna54 z^hQm#6QFv?)DagfG`c11#9)+YB=K;z&^- z+Vm(TBpb?36a%Z}Kl%p{RKiwhA3P*iWZ3v4-MzR5zrZmT*UArV!VF^tmJ1q)0f|o^ znZg`WlsGF5E7j!S&ga>AEwe>i&X}V%P;@q^^M61{{(YLm`Sc-< zMRM3Sa2DnGr@W$cLZc*&mSm=_>vzLkPm@nS5|Hpa6?JMY8dwi1HlX&e%iXWo6h61i z?AfBqq@cz`UhfIG%JL81%~3@6Vegw-YoOWlR-p-ul_&Kl|Ebka23H+L{Q8Bg?XK-F zziPE>l}zgz>6LFHecM(~3vv2quM+H+iBimbU1A9_Ag%ykHUqDs5uzpTmBj+-MoOGs z+;6ZerUtQCadgo*_gf-%3piM4V-$L;dT2hde6qHzm=Ua)=|rwVc-E2N_-Hd6W@$4A z;pk~>GD-O&9N-iF0oyL@+n_6-so_*@Z=Hu{U{eri+%$2G=<}D)I>gmb)3@i&zh3d% z&WMr5qB&G_+Pcy<7uunyOdu66d8$e0V63fzfR1S$G@rrkY1b#I&redaiWT|-9+`8N z?uV}J;`!BjfJ@iwrIe}Wj`FV@hU4Q{0t0g|YD&z+4M>sjr!MtpLa=g_Am7o-FW zVqMaWm$RB(#J5Y#i`j9Gy87%8OddP&GWLAJ*GW58GN!h7_i!7i-+q1Cz^z9@vp~91 zk*tPA+(k}a{;@xVU4T6S3<8M>dzlNd`0mXP{X1=5F9;OToKg0<$xLCm;VL><1ifXF zLr?>-*UqRx3!B}lagGQK0(HH4Sk#i=feH0n#zEemMm%UDwxXuCt_^vJD&`%|zKh~| z3^tAKm(J^*@psP;=dY-5990wg6^F^ysfK~xz!~3t!3mYAd6>9< zqj@nyn+}I0=JUbCF8Z;LZf-w|UaRFO9=_FZA9DR;X9FG3MJimh^~m`#R@EaFCPbPD zkU1U2MXxyxlf&h3<$U>tMTn|KQE}w@=qls~#0CK|i&3!CF#Xlhx_3emtQ0jH#1pxH zxsR=EJ=@G%Vy5V$W82x zJxgt-M1#?58ZwM5@hNJ3(r)ARw&iLI7W30z_~cQvVvQtC_F!K!sCV4m`$DcH&7pq{ zYANPmH3l;s$xP|dTE1}5ctJ#-`gOaAzHOV=E<&fF!?q%Ux%+WHjM$}y*r=Ivk5wbu z1`U~}kKA`@S&N@(`REWIi^W}E<1^T(KxTE_hpd3jR;+}tFfFVK0wk zQ#7W0&o8rJi^O3v$bFZ}uI;R*(c*%EiK(q;uy^*`{@~2#EYeUrRtCW_*1$7HHsND1 zY;H;2UmcWSCewL_vApCI5Xb0jjHYb|RC@_0*ytTHI@CfXsmQAM=*|ZOop12H7xVqG zkmEM?HN7*0R$lU&h!*P^C^Q8JOUkG4;Cag?+2~iylo@_xEJVBv!R*NReb%01xGY5) zGK$NvON(TjQ<(c@B2#d#q^}8mZaK6$aw7yHhb0a7%PzVlt-X5pfK@!HJ?d$Hp`vE! zJhOxj+(+JGv|}0YYUy<{GyG?5t$;}=deA$>6^0&9Laxm-b6?w5O(BUvP$)Vu!7Z)b z221j5RA})Y{USgA9}yQI59!v($AkJ5d#FZG@oY^p6fuM8#XFlPHT z@)-$2n`*|D@kt9G`apI-rjzzH=Bv4R*f51pOuYYf;hNi$L8F~gO)~-TL^f70Z~c_? z-ZDM`rIDw|`kB2~u(HAlQYR*60-Yz=d}Qm+c{=Zm2XS0NG~{FH0tq<>(02U!a8{d( zyrQ@e3ejcM)Kdi2nMoXI$6J^P)w|!(j74QNM+RO5ca}8m_aajK#ie`{=)R~k+SzGy zQCbyeA?rg4{mkghMLZ9lVc6o7O)f$BeguJfg}KEgAVKm(`~5K2CeLmWgcPmy6;DeA zwh1Hm6O~O2qCbUKo+L29%NGBTHjSaf5~0;wW!GE`+R|g#Ekq(ZW`d>xT=+)Zk%k!i z(!WN}f8sfbZgiH{ibP4037F>|SnD09JzJ0(Ffj^wbFBsw%mvkX{Sej(v;R-r50UV z1{&uCUsIup>h3ZXYa1HwAC>0rZ@yelaj)o_d)ei*mrG#z!I4raCWh(8phhRuZhb;= zPNs6rM<+-|*l(bP3y${C-}?FceEZ}`11)@5h1h>VvWkT~!0z63qn>Wv{X&`J$k7L85NnN3&IU?Fucl{S_a#_;|m+ z8kI5aDLL$|NI$gMtn~Xk?9_z9OTDm>-hT|Hn;P+k&p=8{v;>B=pPT30L}&sYXE^=a z-_MLQKrBR6Y_!EDq9T9=BSYZtuYdCWrzAC5g!YY^0-Iz2P3@^~G-})sAD+2NyKzE$ zm~s#&vboyD*m%0v{fwMILqkXpx1bQ!c+#NP#uj#CtQ?~q+Tt~vM6imICW+^iS%+$F z>O^_ez%}sQNo(nPu)BUz6d;VY)n%#YDPB63E2#j>D+TMk6V_!ZNhaRCgpp(_FCP>f zPi09L1PK@$>g;QUT-d8MYN3ip%SepZa_Mec2Ao+w3^0oJTQy3jSs*1kJJu4~CF;hz z4JWx{DHNJ1UO1_&9A8tb&|Bw7SxGQ*03Qkq^G1c1rLWdrk@c*mNVL=8hdB;PvIQDR ztdZ6?koUm_-&rlr$+QeOG!amWO)godP@;;ATRWt+-^~s?pWno~RU7yu-gVt|W{WnV z(|mNWNl7fq7t*|9l%ko!z}QdarhpWb zwZzVyrNTTH`np0g-VY8*|5*op5alD3gKl3-vE*u9zmO_ekGdNn`D9`urZwdVt)BpWjdR;c^$=0mt zu9>fC2)Oi_s5yA)4!>!bb@IEneL#a2Hy_P#cr%Y2`{}B_&XHvX1h%Vd{ z7^TQ}!&ewYZsZDHS?s32ja{VJ{PXKwC~lcCXr~~4>Kh-eBF;*)xt(2X>?AtE3x$GW z`B8Sey(2qU>nu<4Cb_K9_%@ZwbE+(HtZpcqd{u#i7C}E3pc_xkwrbmQM15LQuS?_V9bdx5k|KBQvPKZz+RG7&1v)L?r4}HUW1OpE zeI8>-fyk<9`>w+D>L}kXh?1$0CJ32l-%GTdZ2MkYD=M`om?MV9ux_2dR*MavKfQFn zNuw|q#~h8wykC@klSW>YGkvRPnwFhAa{pz?+Z61#iB%poXR8>~?0#5T`3Vj28bNWQ zT+p45IzusuroRH|Gd?(6eA|y|3NsunO707)08_;UFYXeZZRm-cXFvCx;!(nWaf!mV#{vJQ&Ytir&oZDP+S^)L!(7B z+_(wdW5X%Z=R6>xSR(Io8}BRIXQuKJ`Ymt+sJ>WP5|=en<T zAyP5Vi+x^+od8Ivpt|q|jyihSKfH{AWdEa5rA0 zf2rERSvusJtAtND{*G5Z9?rt52x^6y18>`6&8nWJX3wVKU6_|$Rl!d^OuZ8Ijfpot29`4o|XfT z)-L@#N%;#NTN@T{Hsv!%GfZKkC-^2pS$r=eixgL4%{(4#Uqcw}+zgMoTZpV6J*ZfK zK6ja7Xv9s1;WfqYPyW_T`2=%|ar-V_#q3(8lv{OOG`P`kx{0p5ZE?*Q)@gIc9CaP@@!?7YILfR8 ze*&iyikNkovkB=G=DbyR^lrLFBaQ(MBqR6&6>^XNCx!nso{Nh+2d?P@JF<_TzaN#t%L9?Stq9qFGJ zIqs1ZoKgcT;ge10So(`2UN@Uea;D?VJDCf@iR-ndkcHZoK!pDJsWi^01d*&)=QIu*s3pQu1OTaJ>7I4E-H7aB6&dUk9RZ}XxmZBcI%_IFN(1Pee+k(E8}JCDQC(Ucs5 z(%;1p{i60x@8-Aya>(h(Ee} za#GJd@V$H6eS_Tjp5I;kO;){{_PbL9U)V`0rudIFN8#{*WCsRAIN$T9nVCmwJ_DwM zT5gTCL8tb+Cix7iVg!!SJ0}#4$9Z8ZYNy8aNREPyrLNA4FN*a4URBdg87XM_Tazk?FDPHjVi=qcoM8R*nau2jr?#ssyvhvVrhva>bdA)YjA68H!HdO%fh0 z%VZj4sVDP|n$K4c0i*sKauy&@KE&{85J4DZIB-A9&-0+wbF~=N>}|}U2@@|*ftN_P zFU6IBI|j!Tr8C?cBSU5zv$GkinyB(eTuK^{8EE!*}2siaiEN%mgH;JSSq z318K;?$y5q+qHnrmySI)hwXU?d#oKX8bWBHREi7ho=9cc5EWTzXm2#gRw9)@Q}^`%a1BJWKxAm~UU?6Y9A zvsEV%Qb*}cpc5TQ#}yU)hIb>6eAN%-12ScXMjVKNz?5COy{Q{dpJ2pITzeU3S+9J^ zFBXIsQHID97jw-dv-mDq1GWpMHmHJf_bZ=YO+d6X4-^JocY=S%F${$;Yp=a2nc z`QY$U?s0if8^0@}`8nhx5UPWg$hH$4lQq|Qo)d~@2D5^DhTng1n>6F1R>T4PJGPFO zDhEsbFDH~_(;O}gbDRy!Xy?0vwe=txHWZv>D(QS{TQe4F&zMMRyKzO@6pF#%6O%;Y ztVt`~XghL0?iw|yPEx8;7TY#*P>N>8rkWaor>-T&H5r(^{^CyKYwRrxD*^ zfB#2)|W8d)!idjwkV_QXFyy8nsO9wItL&1Sq zp1zvvjc!V*9y6bRm0330k=V(n7}gHpd*yNwU2`%ZIDVieR5DUr9gvhtL6zh4y6*d& z-F^BVz#zS0KJNxR!s>f%>$vLf80|>LA?vlfbT8v>h9A5-^gD~ixEF4@{dmI z4Ef8%sNzZ7(AFPEfE)r~vZVK!Z3^J&^!P%o7vE43X%ySPOnZA*Zj;OtOaTCSzrP{h+ z$CA`1g+JIi_M`HQurmOO1=9+|qvje*`A!T6QWKK(B2>or)OgGwuz1SNwR&#K`B2!J zdY0UY>fW*fTke8mZ$t??2=g3Bqi+Z{hq_M*&Tpcp1V6)jlU_h(DF8p^VTj_biVwl1 z%~QW=BS#xSa4A2NdmlP=d)!Xc)YQOky7=2_H;9d>O9mf+giSyn9af^2&#IdX2-%Dd=a z@I-KvIJ5!tsqf~l`aEuxn z0{PG`bF5uPY^l-^Zpm(NVLxo#kQ@j);UX?ovm`}UYQLK49}syHOAg5sQ>_uB<4n8+ z9tV4c*1wzld!N5krC|l1PTKh|1we%X&f)M|Mo1R_k*knAy1!aR%f^l$Y@-z^Ar=?( z{`1_2SXEnspl}AMismD>w3#q7Jyv8%S(c1*<6q#|vv9Kw zGZfqsr*KY~I&6gh9O6KeZz@7XZ)ih;8D_nEX?s9+VpOVZ3(4t>ZxOwI$5M#x;}bC= z9mqbd6VGFJVaS>HnN9|cVI)?XSb_mJJ6lbaabhS!9-C#a+O5b7FmQcfsUCHU4W--8 zXhsx>`fnk8o6nP*W8IHm#1u3~n6oEFFRW;^i_Nb)cy&YWtQf5cC0v??Bp<>-;1OJ@ zOeDS~Sv+e6-aK_JPCQ1Yczg_r>)+(681E9eyxWM2i7Cm{mUwdt3N|UH+tZHBg2C!z zTtAt{te)zOLx~E@R?{9pxRZO!=euYzGv~*%$$43BZ$Ps-5%l(_vpb!k9MWt zHc-9_qNb;(iCTD*2BA zm()&A#!&@XDM`YS6+JBjFWGZLUZ!QWzljYZ+^B%0{xQp|-5~5bxY$3hCSZ8=;gT|d zV{Taop_8I2IxJ;C;M+0S7bcc*CTSiiJN!Y3CA8*N&6icGK5Crynnnkbp&eJcRM z055Z~nNyw?{7~M~1>ovD1D9P@N-KV?GPT_*bR%f8&3^B+n|{E`D~ibq*Ce%%tNA(` z$~E5Rxn%I)*|K5m{D!untm9;iUW+31G8DUA6=_#SFqf zi)u?QW*;uAqPo^idJoIFPBgi?oa9^PEbSU0WmV(=&I1UqjCuy+CHc1y7WeAFodDy( z?kIHxqMR8R1?FFKaovCEDQVJM05CC~wJ|X^X2bf49b_wY@n^B1u|Pigkh#M+&eD45 z{7vMI@b&2K?cEgU4P;#!u@D}2^y$kx)1o`=V?q?z_%W01d0anRy#pfE;mXSF{YgyG z0V|$@c4y*akg}bVXt)n^zJ@!tf>W(W&hobyB$&{GCgl``g2Nj`KpZISqhn@@3brqm zt0~R+!aE0)*|ADsR+@)&qLY$9&}{ zR_?+}(O_&G)zxM?FeS6k^%MN+Dk*Dh+7IPYdE(CHkmx+#iv7P{vTAhK-fCgnemz8B z1AZPTa}rwd6%qmaa}_sk5Zgha(ap@vk0aOcf6ST%855RFrhw)DJR^1`_b^c^Dp8sY z{a0aH&)WL~&lZ1!qmPU9;{LEWHip%Y^q|VCbiB!S35?TUtVsB0T~PTVXt_gjYy>nA zP6TJI$A!HB(#cFJwfIVzPW;tjCg)2&Crp;@cDq%Nw`xEQb^Zd1b>(P zdt`A%NQTkU%S$|slp!KQ8)%{a5@%JRwc6*76Od$k_NrKpv9Aeme$}ItsAigpJupaF zXbGf)qdff(sy)&yqDy+#^#p^kj(_X$`LMF6o}iL(eAki(3VycRNd*e;WibR2hXNd@ zmdK0VDtThVgR2feX?`+{)mL`Ck;$BCoE<`MrURLsO`wbH+8&M>ZI1o+aQ}Pwn4Tur z$NMYWUwr}*K|+cn$zZhLkbb}RbqsX{cKuc)0sA$9zY~KEbf~{+R8foGFEHdcW ziWeP05d{fk1rRH7W+(-z>Y1{|n%WaCMKR^@lr$Hf9k&XA)C8|!V<9(Vf_QLr^Qh?- zn_dTZVyAd2(q;4Gf+XQCtwroUk4d;=!M{*<=A2s?^c=epqj&oGY0AFk-K^dz%WSUS z>qGMDtKy7=kw?{C&C^|U=3BvmhfzCmA-WW=HY7~Pzt&L=b&@Q_f3M590mFy9L#S)wY?fhenHne7 znPiTkb(zQ-CE;V1Dj_bq3mVd{J}FB`^;aLC=%&<>lkCX@JTHm4c_jL2i5ZBVB)wpH z3E8@5BuJG|G#Giko)p$_QC8mi#}uO`jY3p`5}&tx7}m6IXEUZ`$_fM6?0a=})eO1o za(CTSQD%aI^16~>9QZQYRo#@nszshMK8Q6@bK$vVpesWQpKIoiMeriLGPe<#H*X~S zFAEL%{OWx`xdx+@K&56uKUYZ;>6zu85b54q%t__?|6{f%JDoedZgtxIP}AWIAGke> z6$!XJy+J(T+?EhW&)TV>AtAlh->zd2lb_f~5STb=JNjs_(vr@BS|3;7YiT-@xM{2DC6rj>12iG1oU6fHSe@bdQ(`{YJKi5LBQ zYreKnYmm!~)bUEi5;!R|^#&i3*C}7KNjs@t6c;VD{nPH025hLt8kj8hEY}rs*LiN_ zeDi4D?9o!E31kDo{H4TGWwms}fi#0AMOoWxXe^e1#WN?th`hS`8|eS4ec@CB%PTiZ zT>p@vTHNSW1`s5WjSXe??kkiW`}BgP$kC-7QGi^6=SAjXZ`c{vl-2^=x6vX>)fBih zV$>9JJg+E1Ty6iBf*7V; z{GS}&EFihD2XCGrYBqI}gLjGxkRQqxC*&uWe@x?n;w8r%Te^-|6U3RXX!YFL(J|-2 zckB#e9RohP<+{bJfnHTiH8eH#8`t7VwXBR(ewuwhlLcu`e8^^C4tSh;28&(<-9ewB z9MFBlO(om-jAoRwd?v2)5_sK}6&cwK#FT-ZUmqgWqddBy6-PJTWL>op7ioqqAx*j7 z8|-u|B14D~WU=vpGN2u(9M^vtQ@;vBlJ+EJ;WoIv&HK+Aa=WOKVn%|y*XD)5&ZQ6M z+eF#tu{reQ|Idhak3m6UO;YNxlTqhmUS-9lxQY_K1L=5c^-tCxkb~>b zpNZIGu@tyTI4954>0E=dF1hzjeHRK z1wo*lK|;g7{}#r{PRSD)X6j|=GX)8v&5K(mwr8kSMQ(U3fk;txv`1}ovx;E~CmEZ- zJecIt_N(|1(T3|?PPS0f7EVL?ochP+- z=K)}rYPf`P@LKipd=lP(09_RpTU#}IhxG#aW9#G0W_vI1D;`32{T`zJ9H3!&HOnEc;x0YaRB9?IKKiR+GeQS^(9(+y$y;@rgR(xE5d$T+ z#*czO{$nyo7|0nNBDLy(z-x|W3F;C|R(2sNY3;dAo~^^=E$h84{^RFAnS?-3&$#k1 z*10m_^l2r{bSg8U;fu1znCW|sw+UDPOlQJ^SJ~8hAD_S4sBq~Vz=j;TdZQtPz#n!X zi8XOzsg8)xNjoF}U3HgzH1n2mGm!bBE`Z-!%(6;MA?ir?ME-1R=0YT~$pd5hgK|Pb zGBF*G;cMesv7IHHFcl|qT2G^$X>e=2O_(=dNKw9XaN#(=fY2XW79TSig=4%8qmnr` zf~~BcA2BMHy=QkdFm^*^yCoL8=5tv?)b8Tu6sPq01=BSFy^aptlrx)&g<-yO0kho zLM!TNLRa4XF$n~K@;X>YG?YtMOIf*O3$d+9f*wljXtd9tX?*9ob5wwA84$>MNDjDC zz3>36^>}BOuoC4hwy1J$gV@M67Hx&FDa;)OU9& z0CrXQw>)#%kVbXaGfI5G?Jfwq#?8tRduU1ASvkNKoQ~i{0sB4~@7zQscvfguonXuA z0tj7I5Q5Ldui-4PCyvPT0`>&;6N6@4h3Knq8=-0KakpO>7!uT0myfAt-!zSyfr(+A z$BFg#f_>9lXQSS`qpDkc>!s>$XXhvM>4TcFuD4m-WB!gl4)z5cwUO+?kbb0hlOm$# z*!CZX&6v3o&2)m^?L&!WNxehNWBByNe53l0egLg14yV&cH;Shd+_k43ddTLh{o?0E z6$Z1XFVz4FG$6CdIb?5!OY9|x($d{ARuRY#&RPx3I)>r_{dol~8B87ra-CePju0$) zoJf06jqj@$-)4QBRB+k^faU#Zi&pNIK(enTlWQ*THPM&AWNx)O(z~L)S;SgMndFhX zC56_?iC{~*Qf~6Lg&+sao0tH79H={ImVC9fO?^7^Nyy1@dwhZM@p%FYbg`-;&u|Vt z(A7`6L)X*EV=pFCVC)z3?_1V2OS`ZC!IR!jRW;1uwKQfH<321AVfJ-5Z|YIOl$R7c zq0rB5;ylS(I$dIy<>V?6|0}0Hq9Z~E6T}{rCKIo#q)*23hJFTgQW7a7&L%g$EY2Dm zL+>N=T>ne2u>vzwKOifik>WK5j13%}&Kae7{=xq3p-MO_x7L6J;Z@H3+hF6ixuveF z3*539`)#iFB3J$L)@gNRW4kwkV#}!W+>Z#YX{vWo8(sc_kK}B8uy5{1O1nL=PrRIZ z1c{c!g1CV&0S%Mxxj4`k3QqyO-tYPXKCGNMY1-n_r6{$ca3w2huGb?n#p`{|#g0|R zWz%uCSOBR)pK;kZqW=}6RjKLgK;9$d$KeLgpIx)9>8)&?j|wJM6O@2l*K_w4(ml1Y z4I`5|r;91j$e&19A@P}@jGC9^1p8eYifR*42+0-e-cYP7KUM{EBix>m(|i{x+y3^KV!Ti>H%JyO;>4)1w1s|Fa(x7N|zmhf~FxaKObf^gRc! zx>OQzbF(VvA=~BHHGb$kkT_ph#M2r2Cbau_lLdM@fp$3WY4vF6P4%W`74c&-k0J7PMqJ{Z4PWc ztOk&tivV@G_HxsYYqrhP@2qmD2RJ==#`rKXheNTn4Jm%6?EG7(NUSQS>CtLQJX$<* zEz2aag+)Y^(`KpT@XYLuDFmmd8+yk9$NXRV&tLeN#!?u8j|8ESZ=^@pOAav7oEMCs zt0Vjk2J*dVNluV$UnMppy;WI-{?sqk#uPY2W!A`zy>ep0__h8j1-v7kXH9$v_+Fd& zDTPcZSN0ONdKkk`GpL^k{%j>gQjc;a@%%(j8_xAg`eNvfT}Izf$f>TVS)ijJJ3o#d zYYSE$yGg(Ew7&oeA2jP27!+<&0{Mzw%5gz*R-*mIW-DO4ad$BQYjx12ecB~qsbC&#px_b4h9wjJND z>a1(WQq&JzWblB0?c+DtNY)1R_tUZ)d4;iXbi&EYRumHDYVPC7^y-$X+S(?8OuhU< zjabjR`3-$I6VCRY7AV&q!hrJC2;Q}$I2>@{$|nb8NZR_dEGaF zUM9GeDv&ukp1C~M-3YU6Nn_&Uel-ng|5+i*SCtVvkAL2gYjxaqhfJ0-B~FuG6TGHz z{`7v^hvDeHK+9pZJeaUfQLjWp^u4Vcrpdn%a=gB82@gBblfgRCZeLLdOQk3@QR6-S zE5P=NYnmKgKKAQpEi&>2I-y>=q;k79C&$!uBi}gEr8^>4bO5cg$lLKe!7{_&kjYKN z>U4XeBU^~iFvnb~l2gK@I7?S}5yZp$hoHQK`duv4HML~vxXy2%2k4m!@-6W@3iY=g z9y1m9`9wBxHzF_>79iAIsKC1H&tI9_5UQk|Kt3xJnOCGVMrGR}^i~J|KlWMu53%q2c{jcM27XG_d_ZOi~L#d23GIEhHmpJYNNQj47 z#*QP%!i@)L;{t2iu=aLz3z~qSG(H&_7SVVzVh&07TWvnAeE8>lA z34v9azorjee_GEVPjoPjZm~JEr_am=elhY(Ey<8Wg{79S$1CR5T5vpFp$7hZU;xOG zYTsfEsr?|+v3OT;JV4*1XBSE(P4fD#Z^~vSSu7sDlm@!8|70W5M+2+ z>-rt5!c(f6)2ll^9B^d%T-ANUe?Ou~c|h8IN!mMgZwY|gfs~u!KH!({oMbfM~i!f`v z>|X|04y%3qF!tq*<-IaSv8g##v3^?2fHV`YFvaw7FqX6VOn3&FixS?SL(NFAZ4~A6a-ir;&mMLB0e05Jx&2D zIj=KmRO_5&%`1{;jA#;tBxc{cG^!SEW-2%ta@Gv3t^HOh(6E47D=`6W+1r&STi;h` zUa2(+BuA*9++!1*R07bBA3F_R{{*}ZKa8|RpOBMH^Wi`3(ngtN?41!P78{E#-QoE^Uj^lm5cwXz%q*hShmJp`5gK{JgYzW1$7gkWt;{nHD16f7CK4U_Cnaz;7Eic93DAbCQG%eaMw*BIHuaUQtT57nTziJK$?;DIyK+prrUoV7>I_7qILi!Rl6 z2OMa?PXQ9{@_#YK_UfJ>)HoHjkB68aho+A)mX`&kTIRmia{UFC?%C^i%le<;EL9ur zuDt%JOK-$!_Tb>k5Z<`s7MogG!Dun+2mv4%ke{j41fchlj!8%x$L@cY*Y_TqY`4fx zedFdc^@&QFEi5oEyCnAEH(Ex>Vv@-ylrOuexu?%9*8Z%THg*KZV%W`B8+g)K(CI{J zMqRp2^v8=TX?@Y}a3qy!F*9!*T_CNYDUAZ~Qn{AZ9Xl+Z%{hWuow0r9nZnP0@Ytr zcv2y_1^yjNExi;iai6kq@!uwV6*1RwzTC+HT~BAxYR@%CpTj|Z%W$$&_yEP<-i9er z86BILdU+nvyLl+dJXM_KSfB?m95M4q($CK^H(UP^YaO*C^Z;5vbYOL0zd4B5#j#O! zu2J9r#(brGXV3P_eX7v|oTZ0~%jL6WO%BeEc;Fz74Fcz^#SYt&3+;rwrcIFO00IW6QNrT&Ea z<>W7!plC*@=H~NdLPlP;Jdah>H>@ z{xSEmd|q@1s<%Uack6Q8c`mIjQ%#*BpO+Rr&oUUjt`k*VmU1wipH2yNHrGI3p{eV^ zO{aDYZn#pm^)U`l2HnweZ;wW$P1v3ec5wHdPCRb7-4!!`7H9d`6vl|2Qx52?6^?ad z_<`{}gAnbJR!9cCr)#lGqStb$L|X(jcCW@MACMZB$@aFl{-HO!L+V-raGBXCpZ;=i z<@EscjwvxHn$b(s`F9@1c}%y|8G^KFfSv~q zrZc3Aso3Z;2HFUIU34*!ga@h%1uu=ww&Q`W+gaca9{$ukfd8X!CaI#64IY2P4Jh^xL zrOo?+!7C$)P^5%={6O@L2a$gm1RZnnPzB@WEe*Qz?}fR9@>XGWt^2(Kk@6p#kE{8`xN-C;&j7&4K(?N6nh8p z%%QgVZr^j&%R}1utJBTb025nUg|*`kk5V6sRXhB{u)b9~7%Pocq;n)QAQP`2QtE`L z;98N^|Jn^)OePS_sgyEMy)aC=LuqFjcTEl*GPKm!>ag~Scsl!?w_*JKF89b&iC08C z9Qj}>@2j6B=@(&!U0B1`X8{?*X&XiP_Y1z^nmC2YL>J; zC@UeHvnL}UceLL};ZM_ODmohD$uAd3>&tJndZilHbYI*gb3V8V4GIo#Y`{Rg0hlW( zsW4IDfBOYrMfS$pF6g*y7%-1{BF?{JGJ%^c@dZ5P0|)=mOn9vVM-I2 zV_BsRWhf$PTk06$Jb!D2``G_)TsOu5Lc7tWYGv zr0{9=xG%1My+*%$76LRzzz}x>`*!!bF;zV7@>(48yQ=CsG2TA|h+za$au{xHAkJ~L za6Ro#HpHr3RWmZKi=tl>i)@u*9utbC;kMf&2M4=x_V|8N?-L+rPr7cLUc8NUNQEOXO*$)Js~w z&%L5o$yvHg<9{3<9bb7oIgze#YS3?kLki=Bksn4dHxIo&h36)GZJ2l(81o)Pv*N~& z>B%s4a7YlBL8@_BBSlF6br?CO;GxmZ%yVw;qx=%Q&K z?%1|xN$k-zXMTO+*~^vl^MHtbxEIG}$Q%EsZ7X$piUzT~eNu|C4N-*->eQ{5WIi9i zK~WhryQe-y(I;JuUN zm|SrDI$)@bm-s2Ln;Nqt@prn*N%&#Lm#)4tclPU&?IxF-X|Yy&5|)h?GT9OzTR=?Rs=?Ft#japm?FRUWL zYj8p52a9ul5ny&@s7M&)a12LCrSmXgtu!>=J$TbbFo4C%$|G|*TcRAKqpL>AzP@&? zUvO}$Z}xKMCz$$iIN8fJ6rXG1OD)i^kR z5G$#wXvTqnxYd!o7!O!D4Eb5^GsP(>LF8U#^-3PGX5$EaQNE@ZG;~!gIB4noWxJ;3 zlltRE0~$RujC*XAT%V}hD&sBE_^wR53I*e!Lw$z^#I??j;j=RqzsHM%*>J_2fMd&6 zzk{WwujG%p{y;PvUf?CS>h+WGM&Cw&RnjPzbed(qeC(Hqwv6WGtvVi!m33c`sPG+1q`ilwR1qqm#3C*1B!=VtQPxOfX{2|ES>%Oc-3Lj<2iWSsbLHFjRO607HW9uAwzJ zhg|n+v6)NF@tpAP_AHN~?QY&zJM1?2y^Pxe#7FP=IOz4^d;k*$bUaH)zP-&a(%lpQ zw8PA{jQKy0ec78W{yZZs(M51Ov-zY<=J#gQ{(LQ4#vkEQKW4%KcnJ&{U5ibp=|+Mi zoKZc%1g$ha(aEoQJ+-3;1>Z*_5{NQD;rQ@Eb373+`Wl6gyw;O-1<~E_X7B;bu4q ztvaemDk9Oto`^aOhS&xjI;0|%HOpN2X57-T5WZJ(1*X`|VYOiKbSoMQGv3!7u3UrT zW7qg>u5#-->&dOH&AyTu@Tz0u4cr&9wDk-g z!VrzdN}}OSx@?CUo0aJ`wh0R=7+zX4q`UIZnoDlZS8O2T6yl2ljPWbGZ$1K^FVZDn zl|LZN-Mt2EJS;R}Nozv_4s0Pm0>NdE0Wp*$xY0_q0<+8kfAPS(SP^3R&U5mw47tf> zStz}HaV+OZp!1A8o-r!INTqAsESGGdShr5AC1 z6ym6)sY~aLP4O%2EGrivz6*h&m0JT^Uv5}J;VXRzRls}N1zG5w@p`%6J-x;w-4DO} z&Eh}bLjS#gR)D1ul3-SzkG~4o^f2T_Qca-E)bj|ZI3KilPs!&nWB8qbZiZjEx%0>U zXS4qUOQnm?)apjhwUq1?OJsR^)zw*g=Xk|4iEb|y5=`ec$>va#{}}&{AV%tmz$;j+ zzc}1e?B$uh*>@M?z0-6wsM}Mjn$%%+;8v=aq1TPpn%&5pnc0Qs6BU#QPY46rNFAB} zWAzpEE-E~RWSDMaB$gOfmX?v?-05T7lqrfdTTQY2;>Eq$!oot?Jn`8^NBZ_QC1|M6 z)qmr8^6PDR*NwgZVq{mcb>|DH>uRj4zwFSMA_k{O^XICzZklw1+4%158jUIHSg&W? zKch6uyBE=y4zk^Qp+?8K-}BcR!GE?Wkcw1;`ZZTUsD0fO6Vth9!u$4S4&DD?H<~P8 zxDP1mNwJO*pc`?~cJN)hRE=>H?18#3d;9V{rJKFPK3VU_woR1^;w^dkwuX_GTlTtU zH^d6AL0K6=k1eQguT}p<{RMko+y*P7VE>%f0V&m~>8d}hvC_rqEkmp!`L$s@=dgpD zzp(#cfu+hDA~ZM?3RCiS7Jw)*SqBpGj3+vJMEZ0j_{L$PUs{=<>_Q!TjX0_ZV)U$g zrr^tDbh9Gb(l#-lpHpXdJjt5LXfH+!iw1YTMxY^6FR!#A07@}>J&>Ep3ApD;OAig3 zf3VB!WJO~B&|9O<#H+M4%O-9+0K`Cp3Ai|Uqf}nu@|%S*ga+26&FBqxDyM3~)snoa z>2-+usCOB(tCvqQUYGGp+r`ZiUMp0xeL2P#JMK?2*Ljrzm5C~@Ym;h+`r&Y5-`gDd zJHgu=z?SkbD;xVj4KG;H?dKKo34O-%!(aJJ@gIy{GlK0t+?6cp;H>owq zm!0uURB!OupC>r&G3lca9{Fm=U3h!NHni30C&*Bqut}gPWR;(7?i7Hksa&X8#wh1e zSm7%1k9cU$2jNyE9eYC!U6_JD;vW-)FmLvL+k=wxjFLk}W3 z#h507D~wMFJ|`Gf#iZy|-)6@+(j!m2*{0am*|R!4o&nY*%)HQ31@w6Q*t(b5dt>Nk z(#$E@pixK`r+F_s!u8$U9K*bg^7Qo7|Gs?c_Tg)LE+!C^_SU`m7rJ+P-yEn<1mrJ& z?6e;)KMwDV^0IwtGYKLV-;Wl!NKU7ulU7flVKgYu8^HKp4AS-kPS4JwJKY=*6)W9(l{{H?;4MR$1yiN`Opdn-R7u~R9!fyw<6 zoZq_M$3&(>3E~%z>-)YK=)2Q?z^U53b+CIc>Cvi0ZT*>#QBCMp^UODu3VI zxB!!?&#Lg|$bVH8|5?idJ9mZuid5+Qm}776zdFJ#Om;uZT30OAfQOS$N-RNHLH>3p69>3Yya*28o(YI z4>Au7gz!WGKXIeiJia5CX-0Eay0rh>mVhelEq}_EzLJeCj6q-}UD0zBOcfXCL*h zjSh`h8Ak`7pvCtdo1|Q^NIv`YGk){m6Xn`JPc>FPU@KuI#Vod9SAjlk7>8ST2=i{_ zmzP9@;Hmc^%w4@Kr#94C1j;K?0?BCzS5O%)!=q<)zi8~v{~tygjN!#8V0Uk6X&{H& zt!$wdL6@zc?wNoysa~IzkB<+lF|OJX;XOmeI#*(LA4pTouflCBDe-5^ao82aY1B(eifGp*Qm^FVL5iKVLmGZ3z7)tqI)&m z6GXLeAurXgGPf;A2W9GmIFLOhH$+Lm*ytQW*Db+VbNjD{9a@uQGk!QlT%Qa-i6a_` znUbk)7&UvfDIGb4*xlU^sgLQrg0H-s*?*sTii@9r=B_RCYLe5+SZt~h=L?*W`u(VD$IiD8R>ZuV`H_x6Cb{4H+2GNE|ZuOvbG zSm#8JNEA~S`y0^hbKMy*f6Vg8{6xT&)7Xa?vdRfN^tzd2K zU{fgmUBQ;T&xnJw>;LYzIkf#QTb)?itoqeG6xeb07s?l}LC%Qc(IHUs{l}W0b&c&@ zUmv*idosBXk1$#-d}K(-)0gQ>{@*euqjp zLUW^OaZ{@)nwOWar--FGxfhb6E{p{$PZJVTqMiPU%nD1TH1>ZM=>UOqL?jy2_g5+m z{O|a`CD&Eu6t3Hv>xInBa6ViLcOPAGR8%N0@ax#{$toZ?A46vzBAL!P@I@7186gSf ziru2#8a8_b0|4^3vEE*o1R{#b%=^#)y@6V7Slx?8-dE)p4!U7JBQ-R zRTPm0mHnX;cEka@mB;ubiQijaOzbN-2itofaP2MjY8>i6Fn=gg9%qu(;N0N@t zpyBAUb;U_H`1AN4aZg_pm(I0`Vc*>qn_JFIWC|9=jo!-BG1+^XTQzFm#7`Uak!A*l zBZ<2LCyc|vvX4$RYBxjV5+{NWLQh0ukF9Ma!cLDQS-?P(&N!7Dh#))-5^78@B~BXT z{L1$^ql;TLEAtdNB&h4=eG^b~3wWOJ*xRF?Ws@AflfO~;JzmoP(o$2%?4}7e4Jrkh zqKa(xAsgbijnT+UVrfkanU)HMX^__2kyvBFJB^$)1zT`*yMtCpNC2!GhC_r)sX|9e zD1_s#^s{{|1}_m2iKVx97zf&SrVkU_bocp8=H`VSE38QZ611GBBqaNyGy=YR3_x?? z=GZec!I4wF_frpI*&lnlnKmWICOC00D{ZP>*rCr;a6C0jBOku*mrJOmQa+_b#ab3A zX6;IDm~F)?xLz4`X}HW?@;DnnonRsN#9I$TS%I@t0pX zp1G2ekwwd}vXx%5pE<42sA>xnL-GZ!36H8taS01fbgui=+=eLrRJlHj`LZ`TE0PA^ zSYM_kRYHGi=zmYNZ)Iy` z--pYfApE*=Ogi(Tl2^gzms4&6N+l0IlVp&N)tTrJwWeUWB{$EXB8>{Qs1vk#+0uoR z*f^!DiOXkSjL8cG7^a2~Ni5a@KDpWaheX7@o$KJ;X^_*6bD*NBrD^NVf75a%XI>=kIu3>?ijKTN)FUF~_hew8y z-_Peef^U&yP3+0hXp6~ko#NKS)C}r$S4vC68Y+$t0gSB{P>Mqwgu=guMn_S+kQ1H* zgAQAk8uJ8swD_W44O=}Dxvf>UU-`hhGpFc;Xl9kh9U5HZ6EE&(OUPutcgpSlK+VJ7 z#lY0*djSs{a&=rYy+KHcPWg@xo3v>lMko@BL{`RCztZYftId~LRdX!j@Ph1zWE3acCGV5lGuurW2|wMQ0J>>RZJ*f z8`o}$>;ATGYAx)KAN#LqS+TlsI$@TB>-C%u{E(3gxfy^^|V zJ`mR1ab(35Xk~akhY;kB?nvEy-+&_X&dBl9A~19v9z{d*SV?oF`dYc4XVu@ZlZ`$1 zs?G()P(hm~$%2%XMEeik9u1PMY=wn|P+H~MGBPsXd%t(1mM&&1DXCn6n?w=1*TzA+ zySp^5;}xq-EiEoMUtRze#?sOfbfpg80My;??l z0M5}T-So`oNW!6nyDtT=b57<|c%fEQxP|6&A3eIBBP9yA^X2t;WGHV*8e5nYQ;7J! zi`lr4rXO5!NMI$FWCeaK-c+5||8D^RykRZ=`zSwEI^-I}J~gc}^FxvVNA{(OuUT51 z^`z_bjW*S$_mN&&_^1}L1i_w9C$*=(v7V)mCA_U7K0&&G{~kl~(waJQGs}p6sfPyR-xY5y%%8Hbv1IgVt8*-X zcCTeOluCG9leol|Ev%fvrZLg{I8?5Rr2i5AD=;Aoi>5&D^gPq$Z60oIBTOOc{jkx*v*EUWLDK5mbF&W2VVW!N#>c%v7Un?}s_i`0mW8)$da z9z#lpC~FT(<^uo{TR%cXW5FtFz(Sy+#KFhc|9s1yKqERhBwMC^N+UmN!m%~aTvgjz z+uCQ5z1|SBEBiQe{5#Nw!#L|D=LMqif=$fo@Hh_<5Yfyz9gsg^L+mH%az4s5 zg75KS1Vl;I%^l3Xd9oR|%5?o_sp@lUU@18`z#82hnF>hdX}CILT6ALBdetVLr#zXD z@KJ&7LKEgzPH}WG>6kaO4S+6+BbPy19ju9~_^yDbU%b~Cjvt{-tSyP)I;is%Hpr^Z z6uY|+>myp}y#1$Cl*&WwFtJy!OUp-yZHS!PO(*r*w|~fkLo&_2=P2`bak6BsKX^LF zc8JNz4`*b_x1SGx&_*F@m3tN$Sb92^*V9cS4N1rm95>4ypFx4>$%Ud0eSSMR1YdHh z!Dqtc8-cd7UX@#IXcSPj7@zSZt6N&4G}J1zuR)j}(Fn=xs8}S@Xyr_~x%fse*4@|i zHsJC&7bci0(?p3_2rxlkzkiMJEpw71Hqrn#T%c7?SW z6~>5RidbO+v$QdI3YL~7KjTnpoV8a0|r|EHVw0wO0-AsgJM1|=GcZevI0b%uuYV#a# z=(iriYRs}~Cdq|x!wTYEP2qIK`143>P$V4ZigmzTMpm%SiM~^+55&a;Fw25T&3*kr zNg*+xE2odYDh;PskNS+o&V*t@ie|ny2j0U7MU`n8-AJI=%5<&MvM-NSo^lCyWH*UE zI0=y;S2T!GJ?35Y;77Eyt@qGLMB`p1)JA(yxd*g_4oi9zV98HDEwNp+{gaT99kSuE z8(bN1RqA8>esst8d`2MF(}(%7*KhMR?vEW=Obq{#mw`>L`^f+Snjij^Nc>2Rk;iJZ zs{b3ZhuxcW6Uom;N0`ILMP^%)!K%v^-Ptu9Nf-zP0+XcX9Lk5EPs9!t(BZf+T^5NL zA>UbCMnI9kMs~9XhdzJGOE*Z5)PYscA&HNkmLOoEOyTS|x2r|<~xx0))AqZP-%<3l4aN^(vLPiEQ{H z6S?vT=xy@H?tJwi(Bq;_%ErUBza7YIg-CB(K%1uS_Bgo=blK*hwYvC#wy)egJmVL~ zq3!S4T~SQ|eSR71UGasH@f;$2=(F@Pa~VWd|6rXhwh-6aYeFVPA|hoK@xMik;=KoU zp;>Z4N8($090LnwUdmRsi|8tTDbGRgv%AM4-?bFM6sjCz*>$rHvc3e8R^y|>*Shr! zpM;J7jSQbo$i#jB8yR33Xpe@e3CWG?KRRN-!ASk2(W*PCa3!hFoKD*Ih*&R@sPB@$Y4FWyySyg5u&lYel34u&Y0SRY9mbZ%!Fe zDG>v@dk5k0;6pCC7Yg3>KmtYa2908ksP9Z-@6C#kuVp%p?rK%MM|X(*WrO$dO$W|g zgoHmdrra}Eg(u^lNenyO@QLsM>H@Gt&?v^WH*y5SK&+SIfQHTeVmzmfR(Zld&2HNf zoXwwMe@PX}*@`!vr>BS!9l+x;2=BUrzA4AXrC<|1BLQPy-!I-s9ko#0RJ$Y{V>uO~j(b?><8}o^J_2j*k>gE&6&Tkz#BLqFg{a!ZAgy zs=ZKC@VWQMMKn`*Kz{37Eq`Q!)}5R*`H-vaqwptn^dVP9h6He^qvEf7VpCmf^A_1+ zuKpTx*%==d5dE1GUq%cSAKyxj-##9YxG4dm|D+y{NbZ{ zPj09O8zw65)LWpj$hh3a?{xMJdu!&jWFE@ zqv~?B`bd)IPmuT&tg5DwBs50QNds}`AyrY_AtKT?ag+r{VI1eiePh$r)<|Kj3g!$^ zeY5vH$}K9Y#pv+F#!Dst?Z#t(=($9Eah&Bz1EpOmf;!Q(g`SQe#sSuOD_gKL)Vo51 z!dD-tZoc~Rlx~TnhnGCw0<GSem#_KGpFVIXPAi4$&OHwqBuA z?UD_}IwT*qfC`1J}fCX!)kL2c%^)Q@(TC>77|LEzMzyMw&aAlX>F&Q|w2-{tmLvX*7P4SPXP^XP#=K zAE_!ab)TnP-xpxYPf7Y+Lr%ThPp_*A)rpGd?Enru%C^~~#*u`Qg#o2+=L5{5YX$^z zaLwP9S;{p!8;7?;vpc=9J3cv{r9C&&ts;(EbSG}vA0^q!xD>zz9hZ-w(DPPdAh+7n z=xDfTY2gvJysYPSzA^wH&48=Lu=9p#oo0K6Uo;{mDV;rsQadX#Q{7iSzWCmguTf~P zh3<~o|NZqJ%U6BoySa?h(_3KW=H!~?iFFzpXe5p94T45UZ*&zkZ!m$?%TY(BVoDwU zo)ca}goQo#w8Ca!(w0O+a+cE;nMJL|`~gfoGK)Lpb!8Ok+aTj!DvyQ0;`}=pbr%Om zNmZ4TO9%~Y;q_>2cQ3T)Y)GvcU9S}g6823J;rl@yO*J@3=R!)Zh$ONYrV$4Qc&H`-Q#~6bv5FNYcJGV#5vfdzN=7ydcvvo8u~;ldM6YwJf8!tp`xkjh_KTWt zn;^XsJp*UX@8-2i`R)@(M*?%Z$!OY*1|FofcC*vJ&~s!>@^-^6vgj>gnm3PoHuM^7afb z5lUd0Ajb^Kg-b~Vdm)`GWXLg$%C{malTD`HF!}h_&^1=|wnG1OGGGu(CZZ(3lQ+N7doNPJ z(d+6E(v8SsI3?CJTypmpgB=d=zHP{Yui4ChHt48s+vHfGXBu-dL88Q4}rXrzHC1Er95`u zS*)Ed(fGSs#o1$AaZnx7mqWRE?08`qZTXarBniWXx5W@ubM_8yu;a?~%zUzJ%%VjR zF*U2^Ygk-JvkmPT;L^>+ClmxwvbwQP$XcGX|q7gvV-~vQYTED5}<3Z;G)jUB{kz`l<=Q1y8)Z z5Vv{db|+#CK#a!EAqA_a)0g))U@#Y;nmHu88gM5K+;V=?7I{n;@Y%td^>p!%VpW#I zAoR&J;&O}W?PUvS0WKql+Q~Oko2Jz;ym&d^?@C)J=@o(CQ|2NUV3<==NXnoY`7mq9 zA8^#*Yat);9S(e+7q(*Ri(nd#Namdr9u5zXHcD-CCF{o~Z5Wz>z%3%OOs8Bpvda1C z#o5H(J(&SXt*oG}{S%~kt9c2Y_KIz~Rs668nwS-JC~@uIbf^G$>TLzx%C2p?Y><8V z855Gd7hX=A;AuA2`%+M-T1%c^*)H2hqsnd#>=JeX9?Mk0qc>@Sabp*CH~$sVx| ze$&&aqO~|K=p)zAStVnZl;`b6<o`^?q_stkJq8nP9725-S~{`ND)c z7CSZaO1@P_4=Iw0uQ2}9aYB6uRq<*=V#p(@z(O!FzYXx$|(odbZp~ zFyx990yUIY?{o-gvPfrBNfMOhd)>coT0!Fw@j#B-G(GeVa@8eFKrN*(@T)f7IuX0)nv`EJo zFQrP9MKU(GI^gkP4L?7vF3B8snZniavKvnfmDPe? zZ-GUQbBb;Bo~u86@7<9uM&)SP?j?CN8{L&1VEkn_N%#wt>v^gxg_RYZPI=}y)PsFQK18(^t7 z?PXS`jmAopw@hoaNU-7=8r0j=J)F*m1+9Gx>UuKz7Hkdq%ay7SCou2uyQy?h+5F}z z(Ol_LRGeL2P(*Apo6Hw(tWkmlJH=jDx7e)bNh<4EG)_5L913C|)OcP(qi;$~T>wgM zgF?=D#h{SaaG+E=(}aecUjBZa*Uv>H4@6pxD5_d+y5w-huA3)MAmD?La~hHtsM~LO zUto+aV!{mmECCX3Y0;zx2M4PiqckGsty3vke4JQ}V-1(Ay!~-k8<$(_M&t^k5NR@d zaXwIS_XvQi1jzfw(_^gP_jN-?;=RGoz0i4FN1CQ^g|e~0Mp{ZKA?$x zXsW9Idg=7{<;!b%yW3y1F~zZ1w5jRS$JmCbOKwiS!7tB~mwON8`~ogp6!Qw-4}~1i zUz#iXucbgkzdO=6ZtE{e<|EBfeJe2BBzIAI(h_hhEmjNHv`e-#kd;|@@QM?Kpvzp& za_qL!(8X87FreQ%k#pwCOl8|a zvs;K@_|;Hl?Q7EJ%T!kkg{75m7SGss6b6gW@`JgaQ4yZ`q_^V2V?ZP{+ zkgC!o)d%5=xV0}YvQ_BX1OnPJjjI6duZg2MsUtub$rcMKiBz|^nnSbf{&Y9-;!p0| zJxUrm6#7b@er*!V$vHTGYE48^g{AYDJ#pbR>#nY56UWpSmoyGCwnW~cqy`|0In`r& z{Os)0=Kf(3%i&-uPHb){UNr%5j2E0w614}I%%b1G;7&N8fTKXCJke4Ra(6@r8(|OZ zhO$@hNL6o2?rm02W1H^;M;>jTOq-Ksj^*SFjkh~C-_U=1`hNEoU%wyaaR5%yg#GP5 zF#e`XF6x9gY5X5$Xpu5j_z@ZS^pP8~#EXs4H1C`&!9Y%nF=NC+NP*nnKk;$9DGoDm zYA^|T@U~f7@|aCjQLl_Ecot<+_)_==x*AF5x@2l5``A;MKKrx0G;H+ox!pp(Fh(Ku zEu+_l1e=fO)M#i(L4%$!7s4K~>>qDg=5Tg-dXdJMMkfQolkT8n>hMo1H6xUiqeZR!kX~e9z1a3=Hi2d}8EQgE5-xZm59SUN$&Ar&)9Rd*Za=OvpnS zkGs>v7t_to!cVEh>cx%RWYYPz&W=EunC+VR)EZeBY$y#a8i_CqQYy(uxwiHTo(Zo# zJCk-t)f|zLx~agjlwj1_aSrzIt7{{7%#6@q;y+=5Ui(1u&vqsBB<*eoX#CC_Ce4D9 zg`A(T!k+SF9)-j5RcTkGo7T-NJYcGcNPd_JOqpgg*0?Lf17D&*nko&I)zDAMsRaC| z%Ko&~9%Q~=J{`O?OLJ6r)<#G7rzhC|AqykCe{QBlK1a@TaBOwQOl3LTy6)C|Z`j5GE6t|4)SU-89%y4iWSqn`}#01$MYMjuXo`Ti}O%LhCq!| zBCjw)i_Np!OB+(4b@yo`mlznzi@=W(TR^ZFeM?|q@clmTFO~kaJ)Sh$X`f&OuHq|& zc-dqtr`zeMSLD8g@Bv{5PocY3qZRpHuzVpAQT4t(TpWICUTq)lO4C>NLh3#T2Pdo{ z&RJKNu>|ok7+D3OW8yaJ2ks+Jq8~X2%JJ=qdlsWBD>BGUOfs?&u48_cdX8$C_G;py zrTG;Yl9KtnLi}Y*3XBYJkVC5e2azoolTA3_O(`O*S2spil>ACfsq84(r10?~XgumQ zK$135e|HSUzysQQe|)Tce`aXJ6Rg19hjmLV9BkI;SZDnx#%A2!bMw;LvS^1_V8ec| zA5O!o)WQ%wYK6oT5kW}od~KUCECIm_#CU&O{iGo-tE+UT>(sSbHi`DgYWL~^JxD%N)bqoG25?li8) zTyI$SIaxh}4HG*%f_0V1qOTFgez|?G?z^;S0zh**kb!QhC7}?>-*x-}BI=2<`A9_S zID6{p)ef{MU%Z>^eTCJ_DrPE7f4~ZdVsx#hAg~aUE^ohMAP|7SxxxOi$J~rs(r@Wm z7!|tonKB@C+>2@l z(kZ&=qMB1R#@X~LXy3eUDtS%+&7sG4xA;7{8@CGu?r9WCY7-L?KX|$$rEFYpoFkjJ zLQ09&JnT{g-p>2%&eXCfd7)ek$ZkPxn99$A;bB6*hqL{POK;}SmF=Trhd(Sm>IY@o z#?Dt!0kiV^SyndH#48;QLu@Ronyu&uA9Vln=oEZpctp(HPr71~t-mXsxc+EGq@K4b zDXY3}O40lLeLh@1tHk*;c{-pim6~WToyN$5Qote3lwC~(*aED-_+$c5>-XfxkNusn zL%K$KmghanY3ZMJ_4EoESPG`CEs91~H~;FW{OFRKUEb=>hXq>if6X)D!%$i-uT__6 zO%U@C_S4AgOm63;N&;JL{NPjUFD?!T1FIj0f~JJC%O?r&Nr{O;Gb6|a3gLDQ5o^c_ zJnp61d)}4t%tj(Z5(MxXNJXqb4`Dk=o%KJEI&X;9%!Umo56`D0n)+2oK+hJ=<`n{@ z$unW4Nt=?<-Kr6p!pbMr086hsEgq-YBs80xC9%70i3GD$&QhlKU&X7i_b*R%|8(w$ zo;Rv0s*hW(DiST%D1=8TtZlev>& z+sMm`kkg*YE4BxCcjZZJNkxGtrKYA~a(Mc?JajzFjmRpp_EM$Ow_KKWlK|7G`o)r+ zObico+@)S9KywYU^=}1<7(TMOD`+v9ta>!P^t)!?-=i0lM!P6cB!|b#xrwYIsD^?Q zVcgv69Rc4iO6-~n^BV<4w1Ymbhp$0wYj_S);hB!B1;nCmyiZ{ zI1wTFwbPpVY5-Ei?PXL#QZmKPEB5#vf>PG#b1{%^!t&>E^@@3$rnYvsV^BQ5?AYbZ3Up~>IRi>- zE-U0|jUJF?DaOXf2SqF#&=s1SYuPuNeosY&gQ~!*JUo9h#D$mYL%)@Bf*}d3By2FB zl@bUX$y2iklgsZ}Sc0h*yTFE&`??G`NBSoHHs4yE3IqU*V&7oPvrcL zK~9+^W8y`7vUvSdNQ;da0)@z6HUj9N-?KkIO~ePLgd#p@R_G{f3R2JDz<_Ki*Kt28 z9eG`1!L^O~4Fa9tPoa@u9_1z7b}4(G#FHn6z6Mjfd8}i(qH{uV&d<8K%~kSq2-HUH zFQd$*PLe_5xcGWW5*OQc;@$!pN&EPEXcF+ZBKRn>&0+I&F3BXfxBae?g{Bvj;k{n8 z7L1u10<_6q^_=4k%%7LPnfxPfT{Jf6*q{>%Z+Ji$V?O06AVz#7UoyqYY`ec$Q%^a5 zSicBjnQ}eL`MpYIOZ%risQ&|6QqN>Z9+&$Oh6sr^A8Ub|V@KdAf>a!31hLfbiYnLB zNmeZw*Q_}Q3qWjH(^{{x$M3zr#yCj-v%2~!Al;~q&dXx;>tS1nz_IC!<>ML+q+YPz zp55Ry`%gJ~QV*1a!b9_W>%ASv5vL*l6qpr`ck}1!Wr21GyJO!{8qD?zO#tj$Sbj`3 zX&BGqEeSc$X>fN=K6o!ubh_h1CV_SK1W%IYkg8u8&Fa2GLx~3Cuxe#ymQ%ohwR3-~ zS&93ull^>p+kRg&RLzpT-u8&CT|g@D3nD?quOY>?();fAjv|Gq3@+!f`R;Cnz-7fy zJk~%d#YoNw523ehK=Uq7DbOfO+s%dg&lCH1MRIfK22?rz#oE*rc?^g<6PQ@gi4XWs zBF6|7M%kI|GLj0p2rU1PM>=O7r%d?mvTR-hO>W^=vJd&Ct-&hN+ly6o~w|DR1 z-c}G;;@JN%O1T!ajRdpGJ+iGnT#}+lI*nuCewp?;XS(K?m=G?|vA`K%jmHs(}PsTC7LqvAX zG10?%5)0fiTjfhtNPX{c5kQ@ljJUaXm7kqE~CWi7bU zR+lZLSi0D9@CgsTOO<1M&4<2h$5!bFJ;aS3!2LTC%{%pLAtFDE2DTPER!chAvX6or zG|58d@;>SLt4}*3tIrT1_V*PWregaV5zE+m)Z>t+3ah(o#~}h!oLW9OK?|3jSPkDL z(rW(vmpPz?fX#%mgKK6gu>8&?GGmzh{;xZf=U>;~)Q>lp|I{~czBB)E)jddZ=JLwWDuT;_ALUiVbe@v*6&r5ic|nyO?BjlO8Ta3Jeg!{Hz(E^9*wEY>=+v&f+b;a_Sjw-n_%@JIi!B z9fpU886F*`TCXzbY;ot-Rr=duVi@4b9JpV9b8jp!v$?d)zNvBYBxe8ABvX^42%{S; z!!q15dDZ|W+lTf-YfeA&44qz&nc-2SU7ps6>k9JvHT%p&`&_KP} zL|Y!~%Uv81l%Lruf$n0*?y{R<%WS%=8qwS#1A6sjUgJ1Q5Kh%QP}{U=Z4XywfT;e zVrB6f|K?}@Isf6;e}xyGzeuG~r9kQ4=)$5vU`e|KhAgDx;kkG3)&5|>`f>|U z3=dDxY)nyUgm^3^tYvEt&J}G_8no@p55p|mn`ODN7h)B ztlrnoBj+x@Ot;&mG2A4qMA&6$mJ~)F=t=M-C8KmZ+(rQ@BV$I6_)|aelPoW<80Mq2 z$x?woVt?Yz#n0o!(l%*+m7H{$7lTWgh$K*xI#?~@+>78l`3u)U} zCHU=@K65)`)9-Qm^j83IJfASAV3$77S}VgO>zPnJC{QQ_kZDDs!4J&mIrHMPD3$I2 zHCpFb!ou-Agk$6TKAl#FXPgoy?FJ55x?isXBc=_Tv`h(u<-fJ7s*{*mn;L^)4(_d=g zN}I8%DIR>wL# znYph6M{~u-`XXDKH<5XlJ6CUV{pvOR*EGRwTkLpUZx*!qP5z2wkws2NyWA;RF;vYDQT9mZ})DV|LRwnzi|VKg2N9S zV|dpnmB67|2?@dw$93s<`fO}$@QWY$Wj^)ECrQ(kT;~i1ed@yvgngF!FD8J)o`vV34{c7%uUHDLu@>7a8+)CRVflI5BtixIwK=DH-?0qq^v zDd&XL$dGe|PTsq zp0_sAmZfz=PEi;}_Su)u1K`RKGC^TOPJ$MKflh!7L1w_~q*pd6C4va4>wx47Pd;tF zAIrjbeF8s1YZwd$s60nlg1Li77@3%4a%vA#lXC8(}=K4(3;A#GVOhPJ~4lDVeuxNeg_kfrSWAz zLQ3i@L@04Ri6dbkQ&M5}($aO2o`>%VY++{dy?geOWeG}U^m`p#*QOHsRI3%E>#VITv9Z2PmL?PhOzoP%_d~J-))rbU-CAa8VGG|LK`F^|&%ex9zxq|4dFB~T zojS$J%F0gTZ9DwTi0lh23WUW@a8v0eg32>2sZHYwhpHceQV1DgJSO4#`napl7va7}iKlnbH%^LOk2(IU2Sw;pYZJRvLaY}ZG^BM`b z)|zLYe1atDbKt;kl?Up&jn zeQ&@jpu4`#JKz0onnOeMgC6J3zQVb)7f8|$-|%O?ouFDVQfy(8hf70LRFZP-{3~p2 zEHXKMl$TDOA#iPm8Vwv*;*`t^^U?+YdL0On@Z~R@K`F)b_-<^kLbu&PN{ECk6H$%7 zn9>@dGK8?nw7^CaRYP=7@X1eplF7+AjvYHn6h-uU1B7KErGw{%Y__`mnQ#17ZZ2Hq z#b;lk8df-T@BogK^ankz&Cio0F{8udEHAIn?X-|mGCeiLfqi>-zE{J5H9n+57~tx) zb^eu$oO$tCkVbCb@Ah|sF{G4esYyD59OJJl@aT6^v@8fipL#G1!0Bht5dYDVP3qM#Z^}w{ENx1w%aa;M>?(=}@nA znBG-GB2B=OZCJM376IFbpY2**+Ti@TGe}057#qX2ZTcc6Q9Uv;a-HFc0M~WV1I-{$ z5T1j;#ul39P{d8(^Pl@1|KGp!_jaWF=3rl-wK>E%uFK5KG*>QM#t+<5&ba-%hG}~F z{6)^4ewo`VEe;)h0882&d+~Ovlv2!0PC;y%6uC}Gx61Eb8*o$$jf;!t zx<)801ln`R@k#ny{KQZE3_tcS{<-m)93CRi_fY_q(B;ubA0vt)KJoES^4Z_}0uMj* zHXeQC4SxvS+`g{$)kXf(um2~M&KM*yS(dVEa)z`3RxNNxA;QXbttgNn5sYX=7+RnYab2-4m(jC6~{Il$u-Nyqb?&H#{7f}j2trp4f zkdf8f7LK%cY%R8*hvn>c&`%W;%`q~ag0w+os6ihoTmxQ}|F$ayXhoL$xM4sTx?HJV)tyV|a zHq~m~1ofmTgLq(ovM}V;`5QctzJVmo&_!v-@CTaH+tul|_~I8o&u2gTS&rX#66yMk zPfU{b6CC?)!z{^C9O01XIjzkNe&aX(BfyUJPVOXRS{XYFDR9eUp%4zzv2mn8h#ZG1 zj6p(~2`lvaefoob>1iGi`aX{yJ)ilU&`>+rE(|22N;7k`N_y?BQI&v$(ny>5@8p&?^UQ5bs)+qSVKJ8N7~Wc=8V z{R>uB)@d}V=rqNZrk#y6<3g?xXdGN{jp8H$MCRZ+0l7BcukRb*cgwPY zc3~NtrIFDoJnEc1^#a4QO_F$k=LhBYwVmgFx3t!5wH8=iyM?3L3{@R$X{6|s>rSro zvUz73kT7Z{KKVd{JG()vv6QJb!)N7jY(OKG^E@_-lt3|ACt+KEPbz}?={#1~-{y12p|99W> zYlTtz$IYz0SNH0_f87H}@733O`PTN_tUySCR}YD|QgkPV9Ao~SKr^TkZ}qu&>SZ22 zd7P2)F?`n{O$QWN#zTki=d=E2xOQot4}RCT@#FvOCpdZE{is|qKR-{e-zBP7IeOnQ z#-}I9i=1i@vS;^Rrlu#$&6U{cu)40h1CYFSGkEr;mpFCmO8`VcM61=N))>ahOz=sZ zgX1^JvSlOZ!i44oUIkUAcnV<-8cC9{u((*t0?no~Dt))4ZBws|(Wo_f>d7zh(?9v$ zxNgK)GeRI)S-Z{IGw10lc<+1P&7sLT7M2%@GsXDmXbHG__@4iVHtAMj{D-=o0cq-T z;p|yJaqQ@Q5G$mROUpK^P3vTJ1CF515*s7j#Y?e3I4C|DVO`+YArC`_!c5b*Bt{YHA(Cv2l-~abt2qhf`szipL64D%aoX)I?kp{GaL*pPoi>h? zI1W^+0dIQrVRlVV; zQB(%k2(*>r1V+Xs!<4WNp67A?{PS#eHwXd`!&o)UELo<3S1VOis)%zzy9-I$!S{Un zsYNt$h`;a`e-LTaQJIaDP^(4wk;l|<6SM)fD0Imw7bL|g&-$SHA>jH(nUyNlDHA&HZ-78pTLt>xpQ-IC*%dTnKc5-x*N1p zt=I8t6u0NHKwK}7#bZR@O?bj#t?Wdtir;= z!YVBwwz1NpD0u3NPw?uiR{&_#1KL`V**12@YigUFsL)#A0NTmu#H&CrMMPQI#ySS>Na}HT5X_=0?zY zPOLL_&+W$XTyxmYb$Nfu9jWGPYk7H@Y+ydGta)@=Jrb=U&rw>N*(}kZb;)qejFp3M zaD9!yWhkn%xwXZ!&%VHsBljUJ3)k~@r0aq2GdecL`@jAD#7WB4iucOvSm5O^o#Lq{KEro^`-gbr${1EL&RKqG8TWg3^8L&wTB!bRXkFf5N)&+$CtsD{!2lgK2;<@Mf z`Cs}7|MUO+&#-O7ey!I+!Z0LL3hB5!@}@@-fy;0F#&7Vk-~C-~-@L(zlP9S}5pf*T z7#cEZ?Q5HyK7AVPkMh{N-@xp_WAx*MskvE3$440&YP^mKyFETdQSkEVSNJ!-^y^3| zdE-M50j6o_B`#Tci&fnQc|Sud53K}R$7n6^eTgG|s(wVj+vVr}^+))*pZ^8puWgxN zk?m&)3moZk-|-W)dmAh*EfR(&%%KSYKZS zz^ws6X0Akm==aD}g3tm%j3=uITae`1tUs;>UEqW!WbQwI;* z>9BX-QGy`aS<@+*fD{(4>tI=eLBG$x`{iF|ePxBQsUc)2aYK*Rde2xf3e^Z$y!{sVsp*EN2x^?IFNuLp%`GEGfRaQV^|e(Gob z6|Y>n%K!AE|CCCtX4VZOL@+aHu4%1p@TuQ_g5UX_FETxLg2Q_sA_#qkhYqs364UD? zNa^g%bwyFI)!yPG|N3XReEBj{GZmtShX^we9(RElf!f{|WFTx1y2c<;Xh&f?U{M9& zQ@{TyKK#M&KuYH>t2H;lcbUp?rDS$)4>}h3%IEayi<~&|Adf!w2p{^65Aeo^-$WD! z+`e&}AN)H%%;!G$`vC0SyPx;I?}J8KUVi>;f#vKLHMXL`{JeRoV@R_nM0~WY^-i!Sw>}IJgY4% zM=-g6n$JA(`>gAE=H^DZ|AEJl(%4y8e_$=qTG49V;@ZVipbHAySRx@T1Oi=vEU#^Q zAA0G+1psPMgp@X^(mM(EuMKG0t~|@h@(j;*@f-_*hp+`(NlcQ&CR9yp9N$OU0$o^S zNrELbuIEs#)TuI+uQ|>=408vmB zddG_Awb#_`bXeJ3VPt58cDs#q34C#8#kC78ex2DoGY(hCUBk7Gbl8hIZ;rM zV>tp__#mtjI5O$BMPUw%?e-Q!%?5wwo4=W6bNH^GqirJ{k06L}-3p#l=iFPypFK)8`=)=72t#9WI559q!z57Vg0b}DMOixZTJ~mDmhCA$%*OtyTtyYUc zJiw8XmBl-J<=JPMotvVs2iR^wVHKps05Snq0mZhwurPp_ZDZLs{j7`SI)5t1#uCyT zqRI{7HgIR#Hc670#75T>4JwJegntuJHhhC8aHk&)9G}Xo}IxD zt0XxLlwf&jm3}W~eRJ7#@KwRe$|{-dkyw(j(xA~8;_#6pOzoN~z4GkW9O$?As>SQZ z>CEXb@e9B5%lKizuE{37UK?9z(zHY52&`P7^Nb=l-$|Yq2+KxOkQWw~NU=php%hEY zi`;+w0K50>MG6bs0%6;DzDKoEp+}JrhWfn;<7C&EL~n zgD^7iI8G44!I!0nr7c-rT1Kgy`yV>So8I_lyK{~?Z_ILO@I8OFy)85*wR`Nrdy@~~vvawj-xyVmZk@!cQ#URHba zJbLmZvZ@)xeR};KaoR=50-+01Y%*J5gGpYu3#2HF$DWj|ZLJdbV(!2H1Sd|M+_|?+ zn2V9SN$DV^pjNA(`h9wxHY!sjam=6>>T$82fjuZCId5jX*%7aHH+R3Q?LP!_eo zC-MZl#)j~`fcaZX3^$rgPfi=)1B*f%@5&tp>1#R*h1UF=fAb4`@>9P9!r{n~qYSnN z2yGGPVBz8mAFBYz7Gx?%6fwRqfLdW$D3Rm&4(n?h+?>C~x4r-UL{SA%&db{YT0syJ zg%P98Now^`iqvLlrA4=&U?a)Wl!e7buHRVU)$6x7c;qCp z;Nv*139zv&a-~SJgst@!zxd-n!Ba21z=8cU?ApJdI3Ca+^vRUQ(we-`*g_hXPp)vJ z#PvNQ&t-FEg~+!FDmJ$lmx#Mv{_6LAAJu9NTL|0|z&5~zAPNJf#wIv%_!#M6!0q`P zEZmraL17F0D#Td}ReC(CxJ%7<2&80wd5ITZ ze39?}-tVPatGAL8mz;V6Tg}t47`8+@Kk)NgC?{n<F_| z(e9#zjgu+!S)^gGsS-R8j*Yg#wlrgtqr7_YRl40SpZWCf^Znod*LR*#TbKq%QD_`T zQma;(8XKWj9pd`c>#S}r(I51Xw%qY0?{>PZuB>wE)XThd=0zTV?9Ie+!j&u6xc}r) z9((LzhDS%q@)XbY@O;mNsaY2Nevj|?jt}tat5=ztn`C6XiL@o4uylsbV^R_n!pMa4 z7*!}N*8)*MULdd#(x$bsNfIZVxbICo_`r$R&7Vb4Af=?yXfQjwms6)s@f*MOQO-U0 zC2U)g_B$-i-{hs!FY)`I{1n~PV(63&PE*M$S(h4> znKke4|HB_)d2@|jd*>J*o*?Zf^a@R!rsy;^z^Wq|WC?{R*F?`FQ;I>_2LXkE_0@I0 z{N*q6rnfxC?%6%%JT1xd0uUwW8&V&d6A#{+A#BF`jthD+EIo-u~8i@#vc#VX`@n&^B2bQ?Jz+8mg5{dD9%;Y_0JR{=tv1 zuyBXtC-zaPju>!Ofyz^Kt`U}L@L8BfUQvK_3lIsu9ip{GMu&}!HO`-Xg%5rB!%R&~ z0A@~AxkkmQ359YTsjpW%r7i(`_>X?UOLAUpL?2Kr^irz znAu(X`6vJMAM@ZN57HRAYv&+@Q5D!y8t-e%qSx*6Q~&bE_{y^{GBH_aVrC8{HA-b9 zmPVMZ0J$mw{-9G@+2jV;w{1Mv z<C7=g)HO`W;l7kY$Rkt#zdIjF)<0*uil!;9vgqKjG7#dY++)T^u|12#uj3 zq$AO#cf8}soxRT0t5^Bw|I5Fi-EK3vYXaAi6ot7bxA%5QnqXOl@z5_cIyWJW(s>|ev0xFe|iHR|) zwW^WGmoL|KONMq)?u|_ov)I{>-nH^c)07Jr&hyzXe3p8xPLUTRNrKkK>dKZ8S{p{N zEd_C!u)4BJo>_qNGaxq&+v1P%@&M=m;mhN{E`|T2yaK@gZ~O|&_xueaR! zKQDnJTr!>D_&!CJ?O68Q!X*J|Bkklw4W^-_*6fIfj|GwAi`BmyM`GF1pELC5&6 zB+E6Bv%a~)i!XeIrG=Y}PEB+8*f9p(9;+KY{?-rvea@ac%U7QIDktY2r0z7>J++VN znOUMJVq{n|JvF-nLJG?;Tr9C|o^K8$Me&Ed{<19NKmFFnIDhK~VHk4kp(AuQ6%kOC zkoy8H6go`FR0q%Y0YRE~v4u^lRrx+SQ4mnChAc|S#dBwg``y$g76>iQHK!y0M~jkAB>3@1(;r_rd<>9pCqYcD|L6v?b#dKF8QdiC5Ts?oXjG|@W|}8H^EA`rQ~dq^@$d8Yx4wm&^9x+L za)oNG$$Q@O4Sdr#eFN1XqE@Todmdwx6Hv;H_wC+Kk}9^gItXlrhH6x66%+J>WjgJp zB-C6SuLF9LB;m(@>Ze&;+vNDkLx%Y#C0m0O->=e5`$kfx1*)$|`z8(9t%L|Xv>Fh) z6^gje$oM$(D|h(Zb1(Ad_k1IJX6MXdrBqOD12c}}(i|Gbb|k%Cm#9*w8dZQ&=4ac; z(lb_*3li(sRi&h01d*jC9p? zTs-audcBr?yzS$-eb}}DTiSoh0rcSx=7zO zTU4z{vkXWHq{N8Sb0&99vbns;zxW1~Ab+MDQzTLpEO6I7hcufdc$p|S5&;^-NeC4U9xqkB|07La*geBS7 zSVK4h*9p)FL|l3fqtPlcfoK981Y4_HRJ}=NMs{;&{u-b9)Mxk`fAep!dv0duIR?m; z2CG18lYVVi0zv|kG$9$d#wXb}L2Paj81@tvM~@#gfQnlltjj~#4!h+w&rF`@tSv3_ zb07Id78loe3 zJUl+e?A$I!$A%C>P_6iQzJJ$Vq4f6?LXgG-o_X?9{Pvfg1gRJs9l85Fk?#cdN+}Ir zOl$lyT&>^hlBXHXMh#M^Rw9P$aHkL7{%7CIQ(t<1hdo%UR%y4l$kGhU3h+FST{F9Q z#DZHlN9lH3gi(bs3Q;*5lK9t-|K^GBZWj|IldDxGCD!MHp1lO1XvbH zwZ`EC2N`Y-?=;nlLStF4x7kRNl%M^`&(Z00*uVd%S!1+9<{Fjt(84_HJAcJ4kE|AG zGEx=L>T2Hj(8GM`OJCy3m7Bcq!gIXoO^=n&gN?-aQx}Cs*qXVyS+v$TPQkVL8@zn} zW$M)-W@ly?Z;oI~$1^kMOAJ%x&Ti$^k`Z%7$ zu3a+>;sM_>`7KP0kDCUN5T?;s=$$#Q+wF4W`ZX?Jxs2~S?A?8cn%^YPauStL+9e`f zmsBZ4qHr}x1UgY9y@9z-X?nu@j~t{QcbLC+hadc*zspyi{t8hTAOyIcN0wz+Lg4uU z@Bh|61Gdf2{lYKsOF#Q>dFApQP8{2ZYr8ZX5re@NYbzVH+dYJz@s4-C(FFfgs-y#> zHxeQxXOqqKDz$n8*LTTt#pxGcU}r%T{QCd)@3`+@{J8PY6$00hIQ5EY(gA)H@|XU~U*+cFkMa#)_w_vg z{0j(N#z%*#2%GV-F^(MAM?82FGPF2;{1`zcpb`cht3!s8>Y3s!skE#37&o7t2}V> z0RU7spwm@5fN4=!R4Nq?9y-MLec$(S{{xTk+aLdZo2971T zIloG0t50XE##Se1cxW&6S`}%Rfkx##v%QB{+t}c{zxywTA6U z2hanB3=GpTRSGFwlxiWg@fL~|WGQ%IgB*{GuWoSdT8GNyRo1fs!$ZTY4tl8Nc^-TF zTlvrjzY~=y0?(&WZ&0gNk)>CqSIYmkjmqI}V(|9HVLLf;d-Id$IcHybng8F9{0K?6 z%R>)6jK(7#tkIkpCh#MAI%cc0MdtfBfdi>wvSo0(x_g+c3n2Nx_s`5 zCpdWch)Gv1OV|QSKvWHIym5lSqsYIRG));Fn`Coiky9_dj2B3J-=$Wq(d~3;b=pYZ zEw?=Xxf0RtL(p5(mzycKK!~$JKO$3x+5TIkK|A zTi^I5F1z9|ul|nj;p!`|;G#n-Y;JE+)ry71MW8_n$?WVb-A-qEzLWp%TbRRIM;Q97 zeS_avhpk&P6Xs~JyU=#l^433oD}Vmye+9r?f3dv+foRX)5mU8#cTO5=R}+bd$|+(g z5V3%?!iA0*x*RxgnD@Qwz1;RszKV+v9VXpV0?Qtd&^b$%wr7r>-{YF5;hpb#8{hq%|B0d~xb)cbiGm*GaFaMramFBI7oYJT0}f;l84Jcm z#mfF=2J36owRa6qJ3W$ghnqffJGb9{8_#|2^ASRL7u>clfM;LHR;I$aW@-#!tS`w7 zCTvxhn!AKe==JPm2or$xN#N+IC!XLZfBu&!3d3`ra~u_CjJCIN#+N(Caf-n+Vx{m} zb_idpXU2-Lb0obO;o#8nGSy|Zw}MN?PyIF9|e7J}K?9=&dd{(K*;HREv!1UTy$RTYhGxbmt?neBC%o$3015d?rE z60+5)HaKetLl5>pbniX)GN8Xu1 z#wqjjOMKZ&zk(~Sx{@UE^L`vB7^QH|G8hc_@z?$czx?aJMo|>J;KmzqO^6}HSTE&* zos6~JEk`HK7*{o>u8@gC&>>1PtP$jKM7NuA+s(J}2XFixzU~|TH8V3atxUmQxtoxy zuDP1auDF7o;eev7a8{F~2}$J7Ra-|AB_wIwCQd!WFKC}PP2*)Z2>dwO84S4dj@$XQ z-~0^#4leDd+s)XiN)J+(hFr!tAy7tv^oEC0O0Ow89+Sv~et!{V98O6tzw9_0tJ~al z+Z}x3uKRfYbFTve;z$yPf~u-W;+WZ)E?@DFUq-*b#3$bLi^OcwA4s0{;umw>%U;gl z+*zJD^$<6|C+6sN*DyDCgt*`F&y6TTCcck0G>k?&-b5?zv--qoe&n@3&ieW~$BrHK znwK)eIl-uHk2ne`i4p8To9v}sGbKqvtxL4gbh9p3J>wc~yZIJ=>SunA|NNTQFgw#H z3+%9dFFM;IJ0_+<%5TrUz{b3+Jr@0 z4bn6LRaNqX|K8AGquyQD;5`dbhJ349u2uTv**96*N0TD%5*UE21(9LsZ`h5o5 zL(Z<9V`+aM8F*v7D2}Pez8$l)Ls`~@LNhMLq;bY@SYi`HH7*DeN3YjKYmKvtrirIa z^GRYsD~+|TO*jJhb+v0O&NbM;Vyz*`Vp0-TS64Z>yo`u|N>eLMoOXS_L`Ymyd!U;T zi6xYXPlZJOzf`{bT)+D>hamT?Q$95+`#DAk#Wokf(F<`Qd|UuXFT~&VaD%ZXpXnem zeq)5!gpx7`1jczC%rFE&MgSN$z$gKmlI@dEaQV_O4HcY)Bq0(BF(FO4 zyMdj6Mvb#x6e<=}R7g^m53lgp!;kV)Kl`&h??un$`OkjQc^m&A5QIV!iiW}Fkh0XM z%1{&~#%RVnLpFvLhgJ?VH@AR{B=o5L-YHN%* z=pZ!IW<-=psAG>PN`;dSVRE8Sfpe|t39TX&5Q@KbZBsk&V2;BX*Dh218JC6fMn~XT zO9Emkajq?g7KXXQUDnEz{KBvNDmOg;h1~eU8(G-5kJ-67s;X>D;sb`m0<9I`wcuRi zXj)CqBuQFVT{mU#HCO^X_)T-Z)>G3oY;JDwGymf!sOy^J*Iq@IcR@E)YUlw{W2P*M z$-T(pjt7uiUDZq`tX5mZNsL6YJm2Na$&>uI*Zwd^SN8F|=e>Y5%L&`^c-J_zvD8XU zIEYgdiiw_}Yp=sKpp+(#VnpcCkcnp1BwW)_76l*q$W46nH+>shTLb21bLxS`M24~y zQ^5M^ll6`)jyb!&#=cGuhXn^1_fv*$ zK;uhATL4kCrDT(K5kgG4QKAJB_qNHTUDnR6@h$)MTe<)K`&n68VR2=dQdOAHAw!8P z9HJ+XrDsX{U0rLK0XSk0)@y%yVInzt>D8P%eVW^DzK!qxo`278{l@QcaOI%aJ&ht? z0vhas0F!cPUsKnz+g!6}4Eb^7OXVgE&SrW&)_Q%*)2E-{-~Io-g#g9ga|7roF+DoSW03-&$u*($^ddqn)e_CC3d*_8PDX7J8tH`{OEt?AAIqR zyyzc%(X>y5G9+#iOv~byQl59l6LSscJhM8AA`gVPX3AG;8caFU3SrWBZVS9{qNSF*8Puzuzw zKl$T7$s68q4GRm4z%Db^Sw|RpK)xS!Xd2iz--nv48nu;y9&NC8e!!wE-b8(*ffUEg(NNY|@6L+oh3$ z(t${3SXsH4M<0EdSH0?0Tyn|9JpcJGAP54oJe!{H#5|?b?Qyg}OA^P(C~C`fCnwyX zwQkExBa~L&EF_ZC@w2yW27?`b^2dLI)s55i7Wy3Aw}>kX>e_4A3E^3=M%SJ(Ccrog zCd1SzFvhqV>oN!g>pPnqx#nUXS$&NA?|+P6`qkI*qpyAKu6#t`OIoMnqD^)L!fU;X z(2p%`ElCixV7;gCck&FS4Ay#yk2Lk}?t3dSnxZ4bYHV)wgs(t3v z)`0_~jc0>9$3$dRiw0vX&J}d>E^DhhTz=Uzc>Fepp{^|=6bPpw1XG)*RG}DW7;Z}h5`+XDA)=st4ob32 zaPZ(9Cr>)Q`+L6^M8Ma4?JMc^W{@&MsT!>{aqOQRNgA_1-Pb1HCgq(0&RL40^kYYO zw{Zv%ZPGLdyhf~2idt1{54L#VzWaE?@BS{g-F7Qi9lH{dIBGp6i6mM(oB>r8h&Uz| zyR29t1WZhH1SATuUJE-3Bt-s|-~HX+$@|~;ZsI6v*LHqR*4ofC(8)87Uv(Kv-}rCY zS>GhiW0tSJnzT2Eh;r&M<%Ta=q$WUQ9c&}0b;Bh`jzZv*j-d#t%N?{TdE}ure(|UN zJGb0+8`oZajFpw6SU}ejT^ppZ{+?0eD5gewE|M5+aK?ahNM{iUtaHru`=q@NqpbnI z@bmwN@A%H|q}!Vz3?;p8Zz{i3jK>VeW1KZCtQ=%<-#!8nuyW`iX`CP=Y+EzL9D@qIscG1Q7QO_5eo*NU>P5RIg9kj8>23{hH>cDsluqN){<49W8j z*6Q=tbD}j=(%L;`d=vPw*Eol@j)R8|aosh~;R82)kdTD5D?vs?#;>q_5yV7e-FOfC zJi>_Z{15(&0m9EClK5G3SU=CC*H3vVpNzut*?va|8*5wuM=!*M*o_Msq!;3EB))(e zq~E$Qzkj9Qn}tYw29Iqp+9Ja)p~wj^*uY?enmm^TVNKKcjAuQlN#l8z_s{d97u?9= z!UFx7S&}ruIfK$Qjq?UW6OBJFMBYqG=d3k^;jRnilL4!$Ecm}~{2ku##@`{7f*Zf+ zIoP^juyqz=K!zzaAx^ZQmzACu+qzE$_-k^y0qcl_z&gMkV3`Zm0`g?ET9e?(APOUz{{rBI?snaJp`PfOGIC+v|$1dlZtFPw3 zffcqkHt2M^EG{feGsaI2Ap(r9`QQisl0W;4cX0V-m$ES5ryLGg?9ZY{V`3NKOhaHS zIEQXDai;+rqQ{0vCP^lsg%Vl*6*q$wg47^5kxib%%oHGypz zGgEE3P_*&^=L2!7uKBM&_M^Pz&;EkhnS|rVpMla4SV!$@#&tWF7v#@{Bn-jF(-8ipD<*fDc2EuDb zhBBN2sJ<(EO}sdsl&VkKWw(DdG@L!V%J+TmcXQ{RcLVU^7r&TLI*LM}jlpT%+DaJ& z3id)~4K%@sB#fwSMXfEy7(ywz^ysA=SYGCd)in+tI?T~aF5bPjq412u_GET-wI=7d zr_3BYc+z-4cLFGePts4d)^h5J$M~Kf_-_9A&3{UFX^tCS@N8^t(AId#3Fq}|lcYo7 z0-SLKQ$4K^L`V<@NEv~MXb7n)M<`>K4lQx!@sm9K;NxU7883RljZ?rd6uahK9yHj! zN1^b{Oy_Ldw}UC$(r7asQ`0fiG+1L;J9CQv@_n!7&F}atjvZKH<@s;%Z z{pr07TNAAy*gYpVWlx`fjT4q{z%G+q1W%RLXd1`P&VV2Kq3_`*e)<>4y9w7k^D-9q zFHwwYqzedK0M3!eJ=9PmOhcdyrfKH{E08Y2T19}D0`AnVz?c1oLhLeNo5r&P<*sfofKoLN zK6pPr@e}`zcfbGr%+2OJ^O?s9Wk8`Sc6J6J1%dNA!!!*-N}PnqHaOc5wXz}vDKg5b z%Yrn^Ied5@Cmw!;$4@@NyWjOLUh>5+ra!mvlztV*5rGIu;@Gq4TEI6+Qe>;4nPnOM znI8R_S?1?viTCIvf@f$C1{=Kj|Gtr*{)wMv{p>bZAHRxDXNDw^1dXG12CejNVr){D zD+DfZG#Z?SFqSR*+tGm6#03`jEz|9FSzTM_ZGZabTzkz`Tzv7-wo0VIDAOhwCgaJs zQ7HWVvr~q@pT}f0VFfcyEJ8z7mQ=-IDKlBQ%^k3bDn*iOD?(WJW$>k zgEc!-tq%UP7iRMq4Ufqpc;7f(A#W#)v?3`K6cApY3{WaN(fw^Y_}R zll=D|`%nDkd)~(K{w^y^hp@tei*YVQG=kbV8UZxM&u5}SW}r)lvlfj+#vO`EV`YSD zEH;EhI>tLA-to?Nv2SHR$FF_nbS)OgG1a)H99EoNKg-V6HUyS5jfmoyD2bWr_6UTa zC<{j8F{-M3Wl5_&oTdp`p3=$@BV@p^*x}cI;}`k$-+Db-6@+6_wV4c@f zjf9sHan^WiCIP}UB%+}cXEXscGH8>2jx-y*a?fy0GmN$r zqk_?RgtYmI zJ$5VK^L_u3`|dfxwbx(7{6#TEGp3^!5Mzl66>%h6)5nG&aF|9hmq{`K<6=mZ3WTtn zJo7N!-Yka?Uc`}u`e~r5kWwjb_gQDM?dsIPM;jGIJ+My zI*1^pBXb%nuuc*M8TGhkeeD!F=^^vvmqZ+$6LExy6NHRE!$W@lj_~P^D3r*j90@Xv z&OeBd;&V9oRLAGxe_@Q>IODUvf9=?-K^kGTxu8LMA^y(C1%UKI{EfsH5Fq`QbZOtg zWT8(MG&IKIT!66^L6D-1!HEi`4NhAO4w}#dri~zxip{fU*tfLgOB97WkQmKC_U!v>K1Q#^P9Nj;)5K$$CpFse!jCBlXn*Ldb@F z0^uxy)7Z%3&{(U$G=Hnwh9*EYp54(jyWr>~oO6f<0t6FBY;Y~uuPqrxxhl3tCLQ1zS{Y8!k+@ zFobkBh;$6n-5@B^-6Am{-CaXB3?SW|l2QXmgM@SsNO!}Y=l#Cp*!wT6d#!t2*O|u- zZ>x!VF4|3YBaAP}A*IQbw#_A*spFf-8CS?+8THi!9_jZg;V!tYUgDRjVWA44(r~(AIL1C)Rxth6`;1zR!h6-^+NZC`R08^ zik&4i;)(+B=t@~gcEIKQ&uciKB@0)JWRcU(ki*=2)ta`g42b}VpQ?xi`f0l;ZNvq0 z`wq+RGXi6MPNlHp$nAly7a;$$$L^5zfYIel3GUI|1xh()BQW9TeuvPHq{vE;BsVR? z!l@F;P~0M9GmJzOH5ARLNRDQ9r9N=Z*O1ZLpDEXThgG>B`j0()A+`5ewPKUgzB(Gf zMP%?vy=V9rY14v|r44-@bmEF z&xe^ZSmLy^Cu&Bf7{Aab5qw&p9!N^6FUOSTQX}*b0fXsd>2axyH+Qy6y|#9?SKOC} z?jlT{2Cp9d@CZ(nHdKekKR*=qlB@AqF`WMXag^%3DAMET2Dw%;JUd#if-UnSkr`DoVpmc&J1KRK*%4D4igSu^1^U?fK9)_=gpn z&#WlEryZU|k5`(nwl+?L2o5@&mHHL(w8YgFce`@sA4etj`(pF$H;Y7i$pJ*UUHt=G z4Dxyf@{*jq>>ux4)iIEJb#(xW|Jw8E7)}-8aqPk#?m0cakITZXpzy<*0AjnWX4+)* z?1JG#e)on@Q380~IQQ~#l2ufC5gqNM$oC7}LG_WD7i5l;W%M^GazSpy+H-KdF-p&K zN6$$1>z#(8rEI`1Z=WN2CO=Sz$JV_p`#n3_a2dViR#S03fdP6Of+Z;dW?c)Ty|lGu z^f#1i#d`i8xIYQYz<}cEfaVp`K0E%r6V`3Y9z@-+ex2v=%5)8bVz^rO% z`$&fjh}B?LCL=&YQj#PJj|9j92qKbDlo+Mi3(G5m!~9%{tVS5{B*v&bR!2sSZ18 zpf;PpY#eN1@yxOQn%5oCwd_DPg^G&yVxJ)oB zy_$K`7ckVKk9I3bg>y6SWwv(b@1(!@JNDy6wjqd~ z#As%-ntDx+jNM?+uGNQ}lRpu(7$|bu52v|R$;|ds2O%n|FboTviMxAVB?9j*&c+cISgnf-r-9 zE<|7=8F-bgb3-M{znc6*oBKkRp_v0+5^JDw;|j@#G{*QWAtCk+d+?*PL60O34rvTiQkF zr+)i}<26dtl}Z>d_N!O{mr!@;6z<`=$nLp+_b0Zn$0_$)i3&iv+TNsM>5nWg9E<#z zhH7uKaJMS-OidH;8lk7ZsF5W19${ao-OUKJwfT70eflT`f3DOw#|8x=vxRnAecVBf@2KJ-f9o=u`ZeiT9Q)(bAPY(&-O&LDFvui z9?ixw`0C38jpI-E5mMZ!%+>RMws~Ocd0W>KH|w64%WLYz0wxzsTy${^aCkPlz*Lko zL37Hn<#y4(>9(Yo;yhF{kPmSQBL!)fgVWab<3QAp#lL$m=qK=L>sG|~TH+P9lXK$r zVD3lPa)~q88rO9PrGchu=tm9 zns%y?oK4c&sEUVwob&LnKw3%428wQN*g+N=iD!!{0K=RuGc%`<{0-3OhC^ueN~-&4 z)L5!VV!;@@*nBf}wNYhJj-`|J(%?L zeam&e+Q-r{{GOs&-FZ@m*?D72I)(D)4P9(~_vlCh|AZ*A!4xxwFYn-o5PO^&C02G_ z{alujPwF|sBOUAaj(f01yK+Awx$2P_6!3EPu-(mmhnj6+?m453uoWiWkj%>#RlvmL z%hjaI=<}`1-{N%VjVb@Vy_;#>y5IPN_`7AYD0DNJkZ3!kLk|y7aB@=4G{zw%C<_3@ z2$SiE{z%cT8QQSS$Y$s|sHvW#zq=Vhv!@nt74Y-!mlS9BPMJ-RI#d>W1FgWyK*)ht z_IH}yj+HR8RhEy8{h-*bUvR*so5|$q>vSGLDL%>jYVJn<5W#5Z2Wc|%>U>NTUR&EL zCKPhm$JG29dnEjjH?|*vp9n@U2qiy(@u3OK!ZFx>^IwG8PP-rP8YLdF;p3wYw}^=A znkY9JSI4a5)I?W}6+PN8@s6Jhl05;O68TsADq4HbB>^27nrvtS4)Nt(etT%dUbC&J z0KJ!45q?v19!NIPm;~A%p_H6mL&lVn0TA;`PospZbHT5KIBEM_&nup_=M#^{ra!PH z`}n+}rWFw(IOmP%z*F95JMm~Rd-wPw)%^I%PW+}D?<`Kj_g&93c5UI>;?C3)e%u%( z{eior@M&ZXj)*P0Q=(j;OdE>fJ|4v;_c3In?hlZ`mRyQ3u=$OvrsR_D2R^a(F6wx3 zP`JcvqeuPgFG?L_FM-uuq4$t~gDv4M^ZJIfO_LBzzNM)}L7yNS`Lsf+FB)RdpN%$c zj}r!7+XidDJJw$jo#Fx$f+_=s?lnC|Jv&0>h-@%O!mF&r`hhO@sdcV6dT*xqSyLuH-jZvNp7!Z|D)B1 zRXfoJb5$LW4%Ke2nXa;{G=IH;_^9(%oKkZQTj^Q{lDZ!`X#jXEN$`)aZ z5}Q0QfWp~pdzd%aF^E4azA{A{LORWyV@25rpYVXnZFfoi-y9q+^6~t^)v<^R#y-NJ zl#OH&L?kK50Q@e_o&-cD0F@HxujEY-E$!s9;K36u>ki*zYn0{t-@}hc>SbfRXWZ!( zK7j2Hkkz#RBSpVCWx)F6ByNc_@is#eUx1E22_PHVbQn{D$U$wK#!rl86odiF|791% zlLiDweo`vrxLxtXix>B$nH2S>diJLw8yvfW4R8Hnu|(>1_L1yK23>6xT6&=u3T#(w zoPW}wtuk4cojH7D0m*LTxE(O1Qv2+fb-zlyAUOHY=7EmqbQ(Kd5bPQnf3urZ4Ql+7Rn z(GG>{ek=W=fJ8hZ-S=E2^KkP1jkG=1R_%8Af_e1vq5sY3r&> zu;}D}ENJHGWL--aGA0f>s(WRiV$*|FN8Vi7mlqMS0GU(Usfk2>q*#WmU>QU{K38~d zBFe7kSZ1sPcX;ZcT=%{g*T%`?sTFW#V(k#Tl`At`N?o(p7r!Dq zFd*r8Ty2kpwp4iq{>n}rF)0cst9!s|*HbdnfF zE7k30MW{s+ zI;~_8-jAr1mN+B~I--JV7bi$-4dF`n8e*1wjC71vBw#;Y^@UGUp{R$Ii0(;bLhoI1QA{pM8P(hi;Q z9Gmv@TYDmLg6G0Az=F^<;>y3+Twb|mxu&`B@8m8^Oq{-+oSsVr3{v<}cG-r(ob7o<^!<&__am`l2Wq=6iPg@uC) zuJ8|&Q^Y;x^?}Aea5Ubi|EOCW9nVBH%NlSL{7fk6Q|mhr`rf))rZU=v-+X&TPyFG< z?KIjKU_|Z2!9ubiNJylkQfBML{nOJo{7f$$> zIxt5gr^_T2` zKf|n=oXMhj{Z@xLatr=$)#VQgtkTgg15U3KwHE;|x3$h&`9p30{v8U}HN^k@3kK%c z`1lR)-RRBmpFh+l$^s*11?bN|v`WiwP=+)NU^+b!wf;byptB6cU}B5oA5okQJ#X8S zq4C9&<0;67Jr$;RK}_x>B!*u6RE+aZN45(DZnGNJN^$fu#vIgUKWa0G-{eZ{R`%Q& z=+V6W-q8q$lgx0bKByYm^W$2G#!TAQ#_ppMcHQgj;xzCM>&_gEZ5zr|t0bjiT0zby zZs=*F&C}A;{~IBGzUFr5t}ksp*w?~hdtM(6L36t>9+XL%ZAUD6^^!deL6gARmb=yU zN2~7Rb$=4KHxYQX&hTq}CUbqLjdgKl<%;=}G;JY99ZcD}F)c(0 zkBFWzicxP~3QA{xD1!#0-i1G88xSat<}q>M;&<(%&XqTxh7yq~fsa3y?VD1h$p(9f zRVSaNAsE=&{(E`t0lo9(x@UX|DhS^oi`Gx+M5rDb8%gnh#Fn%yW&durki#-Dq8nK( zEQyr00B0G;OVP{jT-Tqw97d@EB$JA&Y9)H%*P&41bmZ$9@@vq4-cBojf3sGX0X;}_ znZ8$D`y53x^kZDaemhh*_7ky@4n)K?YgyvVf9-xco_o=7Hw~S753Wm4BC*~dzbaFS znD(yV;iS(?Ae`6Kek+Xy)>NFnj@{IM7N_eJQZ`z`}PZUCsE|SBEf$HB^;gVHAG|~vm-%)yiD<{udMK#5vb6!pvnEN$vC{voq^`1F5PEDi`wf7rJ~|se8PEJ zP9Y=Dkq0%~heUtiyAT8Z=(m!q0nNMiEh#mbT>*jAu-2`*Ad zW6bLPOBL!&sjJ^BJg7#~`5zhq-CCg>ssa9fdZKIbnD^SqkN9s}RZ)4z!9i)d-i#?nu^00_1zf2+#=qLS0Z$BMz|yjfmPYx%1c2tF|DWSSkg?^n|Q zgH>cZ_{#EQzozY{b6<}tmMp|{h4h%RF>~iULZcDnm|Ae=IJkb^wceY)c8BM6p6<`4 z*ZP>^8sMU9|51C~7Pz(Q^hgLtru{Q~G;$G5L3UC7??#V$uFM68WELq2RC?zzKCH%h z$f8A?W79DPrN~Othf3?bRfnrnQR&KJ>FricFKf~(B6meA8pg)u!04#iBBi>kq7loa ze2q>t5oxfy5~n*I-@iScOe*it4d%~3$=C_JkN=}RUg)tpZqj+~ad$7_i)}NJi@Fhw z+;~+3RJAFIa1L%iqK_>9O$FxpGm$XJ6O7SMnkZ%1>L7y_*y{v=Tzx5%CeBJ|pEJdmMMOj&7TG3p#e-1dD0TCNghqw@o)<2(U$^Y_K77}-=Z8z# z$iWq2m!sYZW$X!-vK%g|Ae-QGi`nxNdlN!BBw_MK3Ave4ZNKX2%1L zAt%T4evF;X1=Zh{M2SfNOJWXyF$avoIrrikE1=*Gn$GM3&Jw4NbJWSrfR`r?(CRsi zU?ddt@M2`sN({c|Ie*cNSNK+yV`lG{-ErETQ~UbbO&BOTBJ98VhEnup`5Wunz52&J+#KfrCcQEG$_u1pmFDxK> z_QESl_5v;iR_>Al#`59%r-`dc`}7J9*2?;YTd;YR09^S5f9HMiPP-1QCmRJ6CLKznxzv#dwZ@gL>{yWr{SG8#--0zHv- zFL_EBki+fgcwxNwZ@4=sI;E~|YWw%Qn%#)kL%ef5N8b^z?EoZpZ->P+)Gn9@1qIA= z(xeMcR_&U=lM^~n0~s~i&V?tf-Tf2IGz;8fr_n-wMdCGDx2q==Lu&bsIdH#C+G4yhteJvn?flP*_hR!^JR>jTY0wX1VPelv@CNJV+f zXd!C;4*@S2uh%`#qNHsP|LlMMt9XZr#OkJ0{WZL>UZ^+GSVS8I$w9?1XTxK{9qW_Y zuT482vWNugHiCS({+mDwP`u+ZybVuEdhe0*18(1g>%6)zwbv&We4iH*8UH#i>zcSV z>gW&X%NS`B?M4pKcm*1WUr>v?!&ur5{90WuuGp-JAC3+=lS|3|_R%AiHKQUk@W@lh zgy$77KjiJBM99!{!w1SYo)+9R)U>go5Mz*b>XkQj;P(mh_bXnH)!*LCdtFx=4|@16 zc({x(Dfnp(kwW{a3}*p@m>|mLrKY#rn+YyJ%et=K@<*DT0l!<&P>#oWqDN=4HhhW{ z_I{_ZKY3j)D;xQ%eJMNbz`gnpQn$2XN;zOaJV(S!$!cyc%Vp-rZR+oi zYxv8y4*Kuk2OEutfxYR%2(S6;1<>=kO`Vfn(ESVVtkgAEux*8NC?0-h{Z{FkeVLf(JZtN(tcH6w~nVgaUwQ@z{B#@`7q|KBL3U`Ccy#boUGA%^SD~ zA#?W7(r$R>0trM}-(5e_@p2(1>avIL4f+jN@8tOI%bZ#O!x_-i_4Gv*Sw=uP8D?Vg z&GxWGCA=yTr;Qee7I@da)CQO?jYpoe2;X#L4gJ)LpByx~>H)fcJG8iB2(t+|2;f~l zI2${3{H3Qb1*}42Gbc{Joj%x8q>D<91V)p^g4=2L^uQxAfq_$OAS2YC9O z8>;!135Cv#5ky>|_)$AtRKviin^ZMy4^vSsI{CM4WO;_$2Sjg<+sSjTv1kc7&n zrAL;iR524DCAfn0GTh{W?PV43rA){OsgH5<-zXk$>np+%d4pxzrs=S=ts;TaCKeLr zysb29sQCg>FyNR-X-7r0`I=s&V3i}E3ZCTm{uqr@nr-OlTY3Y(Y+^x0xNUX;)lOd{ zw>7Z~m~SANDh=QtvP;CP!6WYlfqwpek&&MaSzeK~$JTFb=Cl6%EjdE$OBxuVnVYG~4 zIpSr%kyiEh+mB7Lq}-+iuLJ_eBjuD2a1ue^MX20c1U;X|$PG#-Ro7piYhQ3*Rz03Y zh||*iemauU!?EQ@pgr3V!`kJE$GJ~!0P?BNq>r$XXA5*?hTsuKk|EKi$}++lX7-t6 zxPF}!T!~Mg#z-%Z!CF~hH06!HUnh|6EXmL2F@&G_h0n2_;Wp5C?J!9WQ(YEkGZp z!|oAt)2Ks)kMEDwVEK?nLw#58{DbKda|9mOMXJet>eFTIi;bbzZu8jnZS#>4<0 zK0Q<-;-T~j9B)?JfCx>IVbx6l2D{O%e>W9DL-|L!8%mZ);kaNwMEp3YO;pJfx~t&T zE3j}@%;ild^l}+6ax_DLAU{`?8?QB`0ZvaE3rZ>bk`GD^n?KB2`0J4v!)oPe)Qg$Mz5~$a8VV?vC)xT> z@z%V7lNpe*Mb&w|gv)OP`>w_5(c1WGE1jpuc|+7Iqy&W1Dzpgf_?dLfzy4a&`R~IFqZNE7jPJfZ z?t~T6m;>3%?1wx*JO7KCU2(lN!jTuBogHUNH}OXvefQWKL?mpb`9mh8oC-sYCH+sT z4BK%;Fg7S^5F>;=^;E;f`j(7AG8`ZJ70+}#@}1%(n3ZR3#7O?nZ}S*BxXK*8P;+`M zH#Fd4*QAf@d8@YGX`R5$=zJ>5N4T{m42Q`s3m*k>dD%epVc){{Xq#qN$N%{H6Y?tK z$bm`w7$2vwGC_nbLz#Un54lq)3lFE{0hR?3(&VB?V%{m_Z6qt>bqF+`uF1wa28B*p zn$b!RUjd25{0lC%S<}z)F1(e|s7DQivwu2WS+$Q3I!PY9oImeaa~w(VJugd2tOf*| zUL86qgXg0gC=35ZH`?3W-{|;Z3$6R&DYo7GuKc<8yAoe>z}7~#{H5Z~xC|LxEoQ;9tr-%nOiu@b~84urVVa*$*w1%z^TZOHi6d`6U z%e((<4EsI0AC|p(W4WZ4gU=_(cWo7uN-4XpK6rQe9pOw~%)_-7LeFb7u7|7feDET^ z&Jw~&&|N{{z+d{rF*;}6O6TT6=j8$EE&7qRFS2)DK*3~`R0pG-Ub-7m348FT4Rbs= zXKwKJNz{nQ!n=z)M}3H;pr!TaWsQg)ji>wlZNNgMu*(jCd?63K$kB#cVnQ__P4v1L z1|^j*q@or+=N9tYk@0;(K7~y`(pX!3c6A1&-S;aTaEzgH4MHUDnKO+=0G79Xm2 zYPc@G{ycDy%mlTYv~`4)D9uFykOY>3I#tLOz$tRkC~U|QL&d?$>0m)YQV501!_{`+ z=GmrPTovWcuM4{F{g|E+m46OKSBT?-cVR z#MiJeJ@3ZGBE<_}5WnX;_4L6{LUnA|1AkWIzj5^h^X zig-)Xxp)^T>1T2Ei0hl1)ga84wpDzrHauwHv&k((D0N#cN+ju->&EKs+GrVReOK2w z{OXt|hts?kD}KwzqKDxyJ`s_a#yCyQx^8#e*sZM?&f?``LMD7Y$iu(f61pftS=J}l zB0vB1?Id%<2EL_&<>UG`CmOvpe87*2Xn9p|7DVXq8&cEE*o_C1%FB_)+K5iTxX#ol zN!wLJjG~29>oO|a6U5p^5B~4yIO)g~m6$2AJN2&f5Z$GFY|>cMAkKS8&Es0RYg3rO#0GzOvxJN6uW#&CIi3k>-xvK*#* zx_W>y1IF3kC+i24CP_+|Y@&rIN91fI>quR*&4+(bK0A7p39^FE1=Z^-`VPa%M1@pK zaT&k}Yd!QJnewD25$p*~vcbKHNLDPRWE7*%J6__6a*W>{^|#6(X!e+Wf%5Wya0#k0 z3nM>147P9+L`aI@9WAEue3<5UdFpYXh~;uH@52>Wb~<| zrGSZS)Xb4?X{@cH5F$jm>hhKa(r-RL2AURJp3g0gB)%tD4ApEvVciM#HJt?ZIJava z5>9vHLT4==&vREkI$zQf!3=3wDdC(vNW$n<4XvPz*EG%#qQl9uHt|@sh=kE8J zG8m`SqHKCjCM;o$&?bbU^9N5}y3?J{&C>F0S|Skqvaj%Uw>`T+a7RhHcAX)X&pXD* z_#uhHYww(*?fS;x?o#6Z-9(Ooh3HKTD<);8f%)dJ6?}}1T(KYiB6ol&>l;;GTXY?m zouN!|#5;^&GOuJX&-Pa9p+$JTtJ4YzYrjaW04RwiWi$@~f@ok9vE@xAoY9x!k4uMm zuJ?(BhAs!1!N9F)beip!`1OgXp^1~5UeSDsWefiR=wL+Lv=UzvPs(oO`C@$HjcUGC z1g&V>rVlr;G!ZDTey6sc>(7jl?}o}%K@}SKd4QUdI1U)K&zzJIdF&lJ6P=^k+tqq} z!ebqDSkn^(^P6@BU{HJQ@K6VAVXEgDTWufdF{{8jJBBYV{E2Ul8IIjXqz}%S4b0p^ zcy_&hA&{D9Cdp!&p|};Zy&JruUm8u9ZuwDelZ3C*Gp+64X-a9g#Pm3HKyziHN@bYfd$2acr|sk7braEGpT-8hOeyUC zR(jydWysXNe-tPiyg88oR6i&YPUZYKZwAT#9R3lmJn?<)r6Y{8d5{MG5{_+r%bOyb z7>f4Qf*YQCBHXoxv#Or19NTtFh*$6Kn0no4(Bb#ZE^49sCIaYk#rxZP>?a>=aY;Ca z{2jF7$4oSz24pLr5YJ`k{Vn&BYiwhq5ia%0BwsE_EVY6ZPmJ~hhhKm)Z(ahgzJ`=m zsXdmYygvtn{@DUq^pbfBjf7X4DdlH3wJcd?)BuB_;TPh|!s(EN#Rso(mL~lv11!jeghJGSeuS3WvXH3lSNqd5YC1iU zj*;z37E(NPa4x?FjWJ|kwT2|)skM(D73;pg`I5()xe;%SE|&6XZbkULu731`{G~X&+>HU3IWC+anP!2 z(}rH%AMoy!U&$wrRGL_-CNITI7lMo`W;jM3`>ZH)O9hwf;= z9*D=qhd^aGa=2#VzQ;s)o_uO?9*R%p{+8^4 zTW~|ZWVn_RTMeZ}DIepOPgb6^ChnV_d>kkYRt!BNRb%Dj=l*Qr*t5I+r(`eR=X86& z{@uhZI2@sH?vEm-sl88Zz-zS$+|W7w2=qQeXuR};O9V!(_pRU-X$S9Z)|~qn0v1_% z>F}h6njnHw%2e)8#!s9)X|GMS7;ddiZ4^H~k-<(1JO9&1tZWGgnWRuyd`xT%i# z_SDAfH3?nG4qnU!Jk&Kbgw%A2`yb|XK3Tm+ULQxp3Uswm!$h=ZKT% z0ktyQOzwZ86j=tjPn~!6Az1;jLgM4w|2_@DqMiM}oa-G`%Axc}^!j%9YPKOH7)SQR zgZ}rcW;jPhQGETkFGu2c-kbUsLd04)EFvtYM~59%Ny%Q7fT@ZQrEd=(Lu<6&_oLw; zWqR%93C5vFd6Z~qIyAO>r}5dSn~6uw=A|U5FK%wd;PEvE#IcShB7!Rmsv!cO<;_wM zi-Z!L(->V;A-3W|l!Fj!1z6EK|+cVa|uT#Gp1^cG} zSRcR0&`$lv55GgT1gPKTgc{$BQ7}z;0+?~40^u<@1kkw*S?hsgv71v!%20Ea49s~# zjp*`BSBxf zJ$Xd`4?|T-kHD-MRssgVr!d4QFoPu!QI{#7`cp;L<_1UhG6h7u%Wdr^ixMwtOHrsl zm(A;i_=f|3Z#(e*HC^C&SrM;5xhPFtW{O~kU7k;S>b~ROx+nvAjmKp+$)&VXitT2s z?M{_QT0#OARCk~?kkZ+GuKrU^{&nP6!%x{;cHMZ^Hn8E#6xuXOV3Tw!O|m7vX3oY} zHO;hRsJ#nw&0KRfX*=WlI{S00#^d|b>Ce|$+0=E(eLWtZW0i`9Zg_!U3UlrqdM3Jj z_$g~?lfp>j4J`Gk>@FFrd}IM~y#o$5*B1 z^BR8qGwQ%0)Iety{vA3qNU zMyTfocCD)JQ7*Oy;+XoI;L#C8GOhA6O%h(HM|?fsfKg?WyF`t2sgu zsJ6gzh{FIY{@-jancmLRv50w+=UKVtzwb1p5o4uH$$pe6%e6{iV-Rd-99j-@Sh@Md z&JE3z;zpztn^&qe`IRK@2xC9%?cI*UlUv{#a+=Tue@+#JG`T-ZNs)j=K_I1@wg%!1 zV>GGy;@>_NwIv#!b~TO-0kbfi^50l=XM4atmTUOx*oaGi<=WGTrX%7$QQgp0Kk;{y zy^I`(F{)@S`(uLh-H!#5yqwcQ3ONGz$Qj%(nBnk|hKTi;FvM;vnZLwcQi`~D(H+Fu z*8~%vCcd_?vY zI8e;GO$=I+1roM)wywK%X*=2)#gI`*fq(8?8%r?P)@=A*CIi|1(TrXT0`79l^9hD? zr++5|IJkU>B7mwFRx!jf%2UW@AoQs?97RQ?J;6D3?drs+yhGAIMRws9U_z{6Hu>n! z%Fuo+l2q^zDooJ*V?Ui4j$KL;jB2Y&fdvmgiZ+=HNr9t7mcAg4A4(n&5GGrGqr^(o zG4^Fs;2RSu2@(N*bJY7|vUBrz<9o)Df6gE8CSz^#*%b!5Ah?*#^`V-|M$Kb)-1)PI z&ZmBO&KJ{!hF<4pjz1r}%iTMh(W;58co>uLbByyOF~nacS}%V)-RnS%v43vr4dK(D zJuLn#tm5c-EB$@=~mJZi>pz*clCF`1?7rx|5KGoPueU#w~gQ6aua zKM!9QZUk;kofAkR=#2I&0LzjUu51V&qV@sznnvX0AnLy}hNG8sLWZy3=-J59Q7bCS zqIpP+d{eluyh|VPVbhyoK*2(9!?n-OhO|8rbG!pw=OUkM z&qken8Z1qDUhzA%DZ=$$ixI!R^`Ds})VSYF?%5eRS85qe7F)J)k@hip8=Z0N>R}#T zs(0&W+=pEB8;se(cJsf5mU`g-TKN1HHVY$Or+){%WnL=$?($hrv)YLeNi&PSm@zf! zw`asMJVmCOHLRQ|l)&BqYPF-HGt<;R=8F!ey9P;%iN5OcE^@NY;nGc=o)*q3ja*Wa zVJBIlIXp>YZ#%Q5XqGK$zLO&w#Na3_D99c{;pcxZSio>v7a3XJL?4S(W$!%C_s%)( zV<5(p{JdVo;6u_CkWr%@NU6Qc2QvfYr}T9&VLv%hp#(E3N%};1;VU@<^uySRK43)_ zf`{iKS&JN1Qlxt>v(gNG+~+tyTIC>`DeY@6U@3_C=?Y1HlfigTSON(n{&8t_1bfe4 zRX8KCdXE}eKBKzw`CW+08N}4s)5=69D0^WBDq)r&2J|d324^~czkwFfU}b!R0N2~>T>NrT z3!S5in%+jmM9C>r%C9Nu7;G^zj;CohTW}lO)HTagxBlwgg9h@eMb1QWgY|S56#`1O zGZUcsR#Fc9QPETSg-z(GNgqv{ZHU!5rIdRz-D|qk>F{N%d!trePu5nKoJO7x!%}kV zDTSTH&56)Lh#ELLorrrU48-$LR*fl^oS7sY*^=j!(EF3OhOeY0k>M;-}_$EY8NHKDWlScJ!}_ zO}nA3PLYrliB9T+C4|2CKi^?>tV2RlXojx!_YY)dtcss%m4v^9p_^9ID|PxG?>#W9 zx3vUB-n^0lf-5C6TE=BXjKk0i&k3+2ok{A5A?T4GBwNBiPk8+@Ai%exZc5K*1Ox-) zo}NgBK3mH+{{=*2P{m1lC%6IEN?1ftCTh_io~faN#^efp>OVs&QT0+ZdYkkORIP?T zU`i`CRcbc(YBQ-aQTX1APP7CzrDFl;FPIGi2a+NWs0vEtHvtp)5oBhCT{Sg0qKl-r zq{P%kz}6P%-kxAZnIxMfX)=s$-p+Q&x|>@iRQBCa-we`a*BCZ2P=f256JAt9Li^RX zJB}!fgv9~mkL@>6dHgt0pOo}c_vHx_Kc@c(bz%;c6h;iuBU8as{$S*T zz?&&W7BkjK-A2j|X*mKz0Yi$2^{Sd-wbE>Y0?#j^N(!bc861azA-dGycIrn<8=@Hu zZfHSsEsEwuYjQ$ToGM!~n#G~fl`F3?q_B#;0GJy`_J$D}QU;>*5=JFc%X7jVlJ1#o zV?}i0;7@k*&FuJ$fmu6U10gLlW}{(}c2M#@bctG+A>~Ph}rSF-#T9 z3rFDNZu3F_)ZT=BETjXRlH@GMA5~C_Z>kq4AId z%L(k?_T=Ua1BqsOw+4lnwPDJD7C?!sAPk^dhD~m=x)TVD;%Sy*Yks%8;k%x#y4qZ` zxW>M?C@Pm#QskxF)1%tc6UY}=og)C5I})i2jr{c|%mn@CB1K4SI1akZzj`Zsi|jHQVm7!2D6sY}Ism%$BJ)(~^u+AgeQ(X#@sHm7G6JBLG&x3yXeC^dY*kg0x7RJ= zSSaDc1QL7{b*9-)mc2XJ&(dJOxKrI8xoOMm)$y&syW{V9vG;u`_3TadSkh$mx|@D1 zLHlZw@&9e10sqeyy6!b?MdEkxJ5dIMvF1ygs#faTCesu_)E`kr>%*Vf8Hw=WEx8rt zmsUy@^O4-LzcVy>`cRGI*}?4eY>6Oc$cPw+I^GJfP_w!3vF@hqGn`+hM``&pHRU)) zM-H2Phy5C#Ua_VdeNDV&YFNFH6``ifkjGNg9MPrJp~|XeV3t zsY01h-l3c4f&<S=keZds|u-x%o>ZD=jWz7F%{d*G`!0=R~Ho?y4%zcLf7nWy;O7 zju|4qWIaA6bE_DMgqAsP8Yh&_wYuhJnl{s`o8vWo2!V3-5k3jqI%MSJoc}mAMajQ< z2=_E)J7#*J`$nfkZ^=q}%Jbc;y@f~qQx?9SkUVQd#Z$0>BG20a9a8pB_)!UURwrtG z{T&W^`Y{{#0v*4|cgGuL*LaC7vBlX#uOyTBaEo+IlQa8G0mTdbW0ulM-^)g`xUuRB zO1=yHJena@iQTy4%Y%z0d2dCXCGfgkJc>tdgGyRTCvE3!eV??{W~J4_GI|p4Ly~oTM`Yfb zLLmbQY|PDMr;j2dIrc0|yc$l*096B|r|^wF*hQ-_DQoLiM)d{eXu@4;@jSTpbW!Gj zxCZzAc6w#h_6oZ5V=+X7$Dd0NKc$VcJWKm@_{GFaRyz*U7?iA%1tW? zYVJL*w8$*oWM)a^6+nH!p=|$<1Ca;*R*O-jFJP3j@7YXBq>Z*vE-Y(eilry$3ZW(e zvLy1bZVMo>_-F(3Xl+$j|8+3|nYfLwdY!5anBU62&jyhIu1^JK7u0lPCSnh6ef~60 z(#mN{=c|Nw?wB-AFZFI7u68yBK?_N@v!=EFgh)#d|T%Ssv2tw*(QFM-T5P*LI z85nE?!(WqRUG9G2%g%C>#@f~aQ-4$xxEVQ4wO?@V1eyB5b3u_d%GgyXOGyi(EHF_% zr^;h=lvekB>F4WvtkebMCOTZzfN~MA7Y$9h`DBt%*$5i7Bgsur*+huoT4*A!4s3 zDI`jea?AzE`zjmog)L0SE%67e$;f$q|rv9E{fdCgx zCefB$kfyA!uk*kicQY7$2F&s#=jzKZ=hDlM`b1fK&qSjc4TdNIaVLe^AdsX`;DrsP{o+B(!_B@BqJ)L2}MXICH1)W2Cc&(N;%A)suw8}ui2g(JpCT#7IK`0 zaZwQGb1d}dNDz#-$82sFU<4L0G6Yl5O_sUp+M~=aWZZu1Efm{hqE5xQs`)g#wAf%=@{nlVXHpG#=AQ5>BtLao6p)aCG@nX8SWQaMpdqzxT6+IX{c|EKTSC zy65t_>z#gf-y6x86A#_VVDN=vj!xo90IAkf*{};3(}noE8W#Z43-LD+UqFEL?N?oO z{AC9gmnpM0Yo$HVVuv{pL0GmLWo`Mh@inYk`wc6?gL}#rgrT6HDXI7#CQ@5)bdcW?Y5rU2;l!`scAXzT2qF<588WnRBiw1yd}Kkukz zl=4Ar8lS{AEm?}-N>#>EhXAdX`X+6sY8V_fLlb=rOo z3R5B6E;uU0Zku?-a~Cw-brhD+vT;3tBHN9wAj?t@GZ+}xg|~Zf;FO`;?UK2KS`Bf+ z%Wq&K^4zm2wYDTlTNRQif2(Ga2A}YArk1u8`+gb(K0+0m5JLv2~L1i9*j0_ zh!74z-kN$OAS6&-v2t$jhc+H(NqYVt5gSxxFBuC9?XB1}S} zP*RO*R3s1)I32Xwn-lD<0TEzygCIbJ+OzC52p58|WJyX8HU1pxAqa^GBSI-XIN?By zYPwm5a{*R2WLZKKK$!cvN?Adgb*ap#tqKqrrKp`|SPV#A&(9IMCW-`cm|-mFx|}92 zb?wliBFiE=GqY@NZ()R>G7ec=?<*(#vr}}u%#5lH221K7%hDD+o-l+p4#=_`Aquic zP#YMG3WSh!vY6V0L?S|n80UPl$R}tj-_L^@geGz`)LJ7%fDqm&D+FYov9-O8An~Q| zeiQ>5<4UCSNyM>eeT=3N`NI_yM$ttOiv(hga|(3gr`4iBGxKL?~kslql_pg+oS@WRpWi9iKe3&f7CO zgVDZY8K;nVCb@CDc$uHmK*-5+#RG84IGm{3RfC{*eoc|Zl5*t8;v7Xp+VSURYE9bd zcmU2iB!;mA5ycoiq|!C}=4TkI5>s282uX$4KkY^xXarSV`viLuQP%|ufwA}#c6cKk z;h2dMjNVNsN(UIbJBQ)dHf~QQ%()6&j1&njOHkH;s}LeYMtjx}!XavlFpg|SP}>4@ z+JeXl`Am<|=8z~62$@ihm7g2q5N8^M48UoOux*k+lSaZPyHw#56Ea0c5vta-lPgjP zMs4Lto^)`|f(-!;QI2tt>V_l=8H{&)GF4y*#6AD`uPp z8A@=5EX_H$y3YFcI%<0Wsv++BgsyguC`w30NE#`DD(i{={?{f|^#BMtPRaH|IW0cZl zS&r2OPFd)r7^{(CN)#pdtWil6_UZO!s7(b1wBE!Dh{;JhIcHA~7?)$NICc$R{*S+m zwR2~A?_Yg@bA!{Qc|^5S0|{Z}7#AfvJfE>BM8e@CN9lI*mgFGlbW%D|juM7qdrY1s ztZuAv_b2Y);K3{D_2+JM)_sW2G@h1>`PTz8o2UHnd5BL#c>Qa=<&&VUVU+Or=}#~k zoPGKid|u-MKzbqm{)PPXFS!sG;%{|0U*psu$nnKm+Izky3gHaSb5aoGNC8@EoYFLr zpr{L9wiIRLqQu&YVUdzVF=-Sb0iz14y2M5^UbIn zUap{4*haJ)M#;ETdzfr3*b>L>#?S47RL)_HLK};Sy#`;@>WX==Qv#E6+P3T&5Jv3k z3<8tVZGi{=O4l+0a7Y2AG+5^u9ib8+yhFJM^&F}NGt}4+v>!Yg8)WV z#Wo@HU<}pv0IfB7zQv;t-%lL(h@u#)OOhnQRDwL6fIBgU%76Esd#T(6xb)u}r~Z1+ z(94%wm^PJi&&SLCj_~0IAf{m0_Dc^^Er$egX~e22I;`4aqH3!gTW@_@c^7ft09&UhavAs zLM+&nILVP|=79()TJ~tf#Ib%aFfB!haTDff>j3X8=i3Ab5Xws&;DIY+TkTE(W35m) zMn#1#hFD$F>FvjAMHGc3B5QT>1X9Grgp7)9w5r%L1ywm>t2|Aub`aq*X`0i`Q=AaQ zCc+u(!P2--A{wl#aV{hg0*ynN65|q#f;bmU1v~fjt!Z~N2{?(NoXEoN_E@LskT5v6 z#f};i#u3OGr5wZU0a2XMpNR=0L0ODYg(H@xO%#Bs4Ms_dvSetX(hU&~B0(C)%=B_( z93#^Rc2a~Bmv3LKq#RxFt8z&gB&omrWkF3)l@qSs$V5AO6*CxOQg(3GfE{=# z59xvLs#X*`4wRrYn$gZV;vk}%g>=&nVHUH!vq{!jWV^5^0W!>S)Tpu~&J0c{3hg(` z)!1N7iZhZd&ydpMsuI!Z;6#LCOon7<2jV0lw$7Jk+K|e4hx9l~Au$y7P79nQ?G;%} zYi42?Qn`>=dw@UAC8`=BU5cn6$!9!+O!ygDL;@pfhP6Y6j*Zjn7^l#xq@nT8S|^!X zNIi?o8PYVyjB3=l#ubV*PN{?;i6bCnH1N^|+k*kME;x4VN-nzSQu_TJPMtY}s>i-h z3GF3C1m5(|`MJ=wCFpfswe1!WXO7Xhz^Is_D1gzVw|ZuOE~rh2u@+NXdWj^<1mm3% z7N4}O>k4O-PZ*mKb8|D4V{Zr*3d6XlkfzIQC-)%yWP#$e*L)S80bb(hh@=H?_Asx7 zzwT6KC^yCk<0~zYh*;3=IGoFHRuG3Xlp}*oglDLkn%WqYG{muFXRtw@=5(@zvK-S5 zXGo)lqOv&ah(b$b3_5f;>!^0NFxp|Q!#afyV>-P)j)FLjNu{GG$MmucZEBnrq_j*~ zIjL)b7F{Hk;UpzVLV^`uf+E5vg?C(xkr_DdC4jKFFHm<_O4ufE5HN9Sj1L{h7EmWYa z3TEc}K0gnWhBiC@VpdW<*xtYJ-!YM2M&~f|y=c zV#*;(;ky3LvLmlx<2V%DaBzq zhmy-)C$&%@VK!gDRGKkf``*bA9ZBlcSI>w}L=$)~144sR4n0KJPfNReDun1h&EG$> zkNRt%nV(gBj-UUe<<#DY!kAN!-Oi}^?6k8l#D%yJyKw;^y%2xb!)Y5)x)AaIXYbGB z|qHzF%SqL5ON`bEF>h{kdWLY1j5b6 zmW4pT*uh|oF$TOK+rqXaYaL4(X*8O(*XmkMoqql}H6xoX`Q7_G`Q6-?&L7fDcTaa! zSDo$i{VbgXsXD~6K#Gm+EFe&5m6+-j)#L!9EJp8M6FgMXvS0r z1{o|E@5v{T0of((09d#zaYvp~>=byGM#L$WmN;paVxO^KZLydjt%y1? zVHjp=J_~JuuoI-T$lD$%B9rY(6I6hL@NBpWXoOB_$0?`hn^U;7A5nj8$|>JpgoMY=b{g!NmJI!gb0a@5*Y&RX27xWgQ(!CNu{R& z7uW5hueU;_>f;oO^m!iWE@7CE$KlD7Czw6cU{N*;$IWq8`zSa*BPEaCz5&9xjwc}z z3MFC?V7n3>nT=Yk6NG029>fxaNiWW_rw~fx2!U`6J62@&3SbHvaU7fP!GT)XAP7_D zrcMy-Z-HB+XqPCJ3WUvs{=R++p1_td2!}|SB7qbz+gM=!)HD#9KseXu)IvaCrAS&X zv20`zTT5)Gh`?nkZsQh;$ecpxfDVehED`I3L~BaIuz8eHrr;pFMKo~=G@B6v)e?^5;pG=YmJ-6C#(b?#7&mCo z*J(Xf&UhU9hsGEk877PrI&zjxOGej!uy(GP2mE zs56C*Vgx=)JJjnjQzxd-R!CppC<_ZAmJ^ZCWTeMqsHc~DR6`5!+&pN7P7=z+0=Ac< zS!;k6G!_Dq1lqxzVItWsD+UKB`UT>S#>p4Z2_zkX6vnSQ(Gig{Y2jWbsntTEIzW^+ zfV%}!k*WsZ~Quiz%Qq?qB&&hUt z`eci{@4lNL3K$+3rqgQUXpJi*iFgW&S7YSKnEtaUHLsS6L{UQAOqo5|Vy@Yw)tbXF z!vI{W{lk>Y1$wIkc#iQ2RcQm&YJh9{UAxmFuETUK!ZKg zOQJjE2n~794rwJ4>E;oxZGxaImpDmq>Vz_OkpdV7XZ`4Gn|BC>m3uvncv+e3^Mjg_&`1mzG@GM9F>v=Hvnm@ z1j0^)&>={H6nPfC#Z}W3F;Wf9`W#^=#Bm&4FHf~x#PiDtD>cmMBr@z>%Q8VsrX&jy zgmH-Hm~wpBu4jXrAPgD^T|_#XTBE_t{H$4n+cq`Z#If%sNy3;!$JyN0BJWDTW@c`RII++eWmtm3 z7Lt6i2iF!RXjNKhTjFRS(r5u9>+?biY;w>^QC1e3`V^&*5CX@8R;Na@8Ipt@gj1y5 zNlBBK!GS^Ij_JcFP1*^`X^V;t%`~Lmsv|5H&vo$21%g(au#>TjWx(-MhjARoFnH+_ z22E0-N#YPfL9skQ8{;LPW;2d zG@G=$63cNJSiX{hWxcrh67#hNDh_D0+BDA0(riam^9jN>$?rB9hMC3$VFN5dkL}P+ z6LOYKH%Up-6wAty+P2BYz(XKtHe(9DM`^H!FoIf8qn(7<2{@q!D?r#51<}n+$4x4I zk|yXRV<@=hJ&oc^W90-v7~t9-T0oLCA@Q*-$D~LT(c`YA?DQkNkom?8GxH0imc;i2 z^=6$o?NaV3Q_V|)dYze|4xXUk`jGSRMTBERlDKpe$+DFz85$kr#Q14WOig1a8V^ZG z3v7XF8^5E(iqIlKL`587fdx-Zr(I-}z*8SjvB-lKh(sY!bZm!(W{0rTq+ITyzsIK& z2b`Lm#&ZhvjZ|21t;r)yAeS_rac36VOxNbAH6QNVI678)TM3*nVG-RQvh zaj-1hm1EdWN~<Ui4Q(gODb@ zUI@IrL)dH~Rgszb1*VTL(2@x#8^aCOz$qZ2;*K#gyas={g^~++o+eIXWJe=NXvQAX zQ!%r#25SJOHK+!L<(aZ(*H)%Gip_-p5eLM?_(gLLi$Km|c)=nFEEhG8dNI_=Bxp+k z+H;9jx`+@X3NBheuuw;6O}*J74HEi#D-`m}QOc#>gz2fHU`14Yo8F!>3)YNH??Ee81r>E%a74*9rzXCdGpq0jvu3@_9 zMYgY4l5PrNqv@b@2-s`XI4O(#~h#43hq|Yx>?QtkBTh3H{ffI+u zsV_9C)mj9#8Y3e;lnNf6BXN9>g}GURdGLCdvFp<7xZzpXa^mzXk3RHWj*cIsS&wMc zo7AUIFfz8B-iiZ`q#%q8I}{nK8;s{|>}J5c=Bdl(B@h&IenOjTVgfkM=CcN2hoDu* z>KSHqWQ^tOMzQmfiKEjzd29mEG=qpvFh?1IZyTAttmM&YN-GS|y2G@#Nb2*HOGU1F z<~6MDTg#b=DIVLumm|j}5NXKp@BlrIM@hIWgk~cxq#%w%gme(n$TgJ)Um8zlt<1eA z9cSsh^x}Dtv9Bya*s0;j6oo|?O7N;ke}Kp-P;rOpA6`ber26P$_a~jO`oN;`kDfw)CW1dUWO3uAJ#ARd8hYtFPolGtPU$O!eCLii3N%U98= zMeKj#FrBbPk_ZaL2DTM|tFWa*UrEqY%9D_i1RiuDXr@GAhh`Jznjr;GvSP&;3qgnW zq45Y~ zMHng$S6<8= zciqMJzI_ipl@g9G@rrrS+Q@RvO@)^QD`s$6Rv0nYZFY7V%PEle3N&g91YtmDCZymN zDD_ncf{^jaaikQiUonc6+6=BOLK@RXGgF)9M6FG!Fou^OMmiE(0<#e(jvqt?A!}Cl z;rn?i{S{nWk|YYPQevTv$E$VLS|m;)io!(&5wTJ@UY>kj5=Buq-U+0mke)=R5JyIW zz6cy>W#Qx{VY|(VsWbEq_hI!^sLg6@h4GUQ8Z_!HPESwaIt9+#ybj^y2!oml+9?&8 znwzEBYBP6g9P!R2Dk5Bu(?@2_$mkcr zmQV+ODuTt z#kXCwP^PdSCHS!kcZ@S1Y{$tY|Ei9PeS|3DIH{4Cs}2&4b_HQ%ip0W#pdO5>!;1PUb_I$C3CwR9~^!P^An#VSE3Dbw?97A8;gv?hH} zg33@IBLh8nB_Chrk+x)RdWQOZlVZi8w_HU#rV#D8E?Px6c9}4YkhV?GZc(3a(P@Sh z{2bLv1>s0^9Mh;bY0S+rqlIB$2MG{DrNq#{AZrGODHQS~NrGN-_7z}dY}rmi7=}2) z6tcs%GHeT{fRvJ0g`_DYVT&+oGSi3&>Wg5R%tm~PD;1-wmf?B@GuDU_wXjAQLBTDN zCNns;06T~64B@3^TpMQR8>lb=3#z?+#7T{yS))shW~Yv2K^Q=U52?WKsUn1+RPZTO zdZ`p$q$SWv2PZEmxV>gkkU-87Oij)5=$;?2ZQCaL`UbAmT7QS1(8Q1Z@Uz-eUiAO7 z-{?<&tN+ax{lC!6zS_(JUGi?8#~<0v>C=<{NuR&iB(5xwo|D+0YyTIua}3gR?Z0}{ zw%sM4Pe`=@G9!Ae5xs3vG`T=Sq!BiZt*x+p^E$R|x{SUR!&E9&3i&*_T#imF;{HdT z;P$V4gVQsI80;Hi`_|1YTQ)$V6vvMr;Mn8@b`panux*c_(LvU%-9V?)X8-;JoH%xj zzU5VR?Yxj}JGL1qZkW(l?V-|NW@f&{LqEKq{f7=PH8Vq;G_jHd+ya)9BTX%wtfJq_ zQtEACBuk`cqe9ZIrsx-l(wHOx6?ukXsx=#TZ071~uHw9{I~eXC!1X=qt&rLIIvV)i z_aESkU;I}lXP(3Y)-6AutDd=q!^e;C*ntDg%uZ3M_;|J;Az^NQf_B5^f=jR9mwxdL zR4Zk^^Zg(2iNE-t96mn5V7Z8AIVQzE6*!hdH?utejV$1ao2nBdeD*zl}ZzLZzr{Bj;Yc#OaJ(?8_&v1uqp4A_!#pCDAqNI&D0$hS~= z3)x9XS`bIDb?q+J?Yw~NuXzTQQjtd=f0D1>{xzn@4`2^U^3p|zO%u*R3s)v6U04DP zjZdP^q|zFlXd)G3mqZrEWYVq;t;R4}k(#)pX?E)@?_ba5S6|1r?H6&;g1^)laV^S~o}xa+Qax#J%{Oa1tF z7_%;9WZ4Q-V7wxA*g_L?;>Z)U+BR2Qe*-VP`FXtJB{xwjm|&X|r_b=AKm0?!_O-9_ zWZ*G8FhD_igrV6ic}^Zg3h`N9&)I*qVa8&%wToV{u}YS_FSP)fYT`~rv)-mua(VTu zUd;_x-@vAg>&UwvTEm&y2KRjHA-;6$9qfJhLE>bNROcBS>}O%F#i@xIF2D9FUh%S5 zu<5)_^!HVb)&v8)_<&qgW5!+S2`z3=`I<0p^d^?+9#AaCc1bcE7r26mohDo9~t zxtcUhK})14nrozuZ>&P#EWTbSq=d5XQft(SYjZr~1vl}IcfN(*Y*PXPm849bo@MXR zaqfR)FJJw~e`4a;JY!>Jl1_-$;FTiY`>U_vl`ncRj_c6v=1AUjBWD&GOiY~S=!q%5 ze%Cj-`?fo1v?GR>kK+2m9Gg;TWqkH*Ay6{PEH$#=GtPpeV3Mi@f`BFoF?r$PxQ>y* zDn%!1&}vLExNarC^4@o|YukDpDG1_(Fj2IEfMzpb-{GTt>U00hgL@uetWc)d5%|)j z7B3SLz6YW_vlgfJ@5$M{QeI(d~BYu5MZIOUCE`-doepM+DYH=FsoONuxeQ^ zm7<3$EF3#Wr;~8+4<6&sKJw>`A9;+C6$ALTg7hpyS*K@@ckw3yXFZ}9uaCCPed#73 zBCr#55+ZB|EI}Mk69f*F`}y$u-_3>FHzF;Yw5w^hI*d=8;q>eRd-ojSyZ3#Isi_J4 z5(oi}rl4dC+^)~W%skDeW@;{E%Z4qy^(`;r^2;`}X5BJ0@PUu~5ug3jkF#;zD*Aob z^!Fq|i-^=pafJ)EM0HFexQikMVmrya5h3g-f~ID0&|}wm7jVJ(7tlK}K&6tW;M#O` zN~77~#N-Jce&`20yyt!vrcY7QHZ>Jc%6rt)kdw_>$}9SK&NE-gP0x7-8`i8L?|BH3 z!7w-Jd1H9)g?_hFa0$&XAu9w`*6&IclGRNF}n`XU36erYcO^zQsja#(1{;~@h z9qs2uFMlrIxZ~S=;Df(S*sA0EE=s2vJR-svd~c094v|ewq+U1MY@qVl~AqZR}U#rF440mNcUl`GR4y zH#;$o&~(}^CuUBud~^fvd(ACeb>$WKoXanZeD(JG_~PxKCXHj`@j4H4?K7u!iG{dTZUwo zK!DUPLK+(vE#*@G*E-28PmIhzRyr$oEshcbAssY|u-#^Aa*pN8H}LA0znaS~yqs!J znR=s5yB*MOb=ZI40Qdf2H*x(8iHeLLtLy*~p0ZIQCI}SmNRy;KgUePjwrVxIcC2Id zsu8-n%lO0z{_XbLsWs;qu2j(~!DL`2W~@Cs>!Y=i_D8WM6~d^Iw1FBE$6~%QLtl9n z*WP#)qXR1en@-rI-fWO}J%S`=?}0-Z(j;K(2wx1UeBP~y<|LH6wVA%3yI z+Eru33Ou(+7$h`<4(NzxJz&lHHSE~FgQB13JNMqp{>L6;+2{(+zv5Z=(x#?Uw9YX$ zHiFjh-~;#a@ZI;&o>^e+x(#?m3&#R`aq*m*e=GngQNo-#c{BQHA!vm$wOXBK*rYXA z!}UfPT(OCrmygoZQ>9!fqN9KxKC*{X(-Sljn{cW@!IFrcHgW9JQy!(!Y|@-=f@3kz zSHiCp3H1bF*kELN4>M8jX)PrLiXxq*TjA_oSe-_tmDGo7tp*d?C@DrPQ`keM-P5+GN_0RbAr@UeM zGe7L#`Mjk!INN?4K78tW{b#qOmvq5)^6Wjen}yl`Y;g2kJJ}%k+4(urMA6lnfz88gT2ZA2(ciIomJTM!ngl8O+mDE>kE~=;m^)8n(E9$mQUnBkVtNkho@%(j`cZPZF+0 z7$u}hVr1t)5+{fsDSc|)CD944Q^+Lb5Vkw?_Ex#RigFKlAr|{TurTXXbFc5(`MAc=qMjuxs0TF59t*ZJU?#{$Kqq_CI_V&fpqsQKDGwp->!#)TE`i z>J2(A!Kv{&S3d7r-u1S3uxaahge7ntn`?G$V(-J><>2>EFzl?r8MIN9%&|od(#nGu zp$I^WEUd<)j!P+^0#eJf3lw1tQ?*tGP!XC~`vkE>X~DV;D|z=XzM0i4m*eLhL{0!X zo_FV&cT%mC$%!1@?%8T=+BIHkLI|WK zNc8}_uRotXxBdfG+eeoi$QZecU;QG}4Z!maBg;HySf&Pr6R0foKzNdcT7!W?387(T zW|kz4*tlXXfAX>4W@K~-%M#>rutvj0+g9`P=iR`aFL@@P{Oo7g{mr|87R%SHByYP+ zg)#dd+r!Z4T5f#a<-Ge{?_}rp%{bCF4D(!$Eo)Ztt~b7g2fy|pa|@GL%Z6AC!qGy3 zOhH>2n^zlIVCFliSyFKtKQ-S#KZ#P<+N8K*flM?iRM=6M%dfeLUwYFU85tcWm$4Xg zz(9YAHDi5Tb>&w6=^y@?JHGZ+=7TA8LsOfdVsiF0mtFPiTzb`o6bn8D-!t|Y-7Yzi zL*#Pc+MK_A9mC6Q4o=k&Ru4K(h@{05XH-C@4F+M@Vzz)Z)hMkpdxU%@%ReiF)><2e zQqaKnjJL8aa_ro?nPr26IJS+}+0xs!S+{nS!Qno(Z`nl9gungxUosa8`i92vNvRZk zmM>d_<9bNTLgaEtyUX&yDkJ?pY}>eo3%9M|Kt=-X3KSYQ?=YPt^!Jw8uxf}>b{%b7QtHBR zwL~Y18C^EOc^lXB?svR{@7}$ejXT#f8!7U(X2*&(eCQqTWZl?`3?#~-yIu00!$n)x zviaBE$a$ML^84?7GijqpyI&ePuuc(9L@ESoNq(w~Ofoj$E?Of!?`dPPBaFp?283Xj8f`H_!vsxe2B zbU1J4cHaMMuV>w=l}O9{oo!jzmLLa+oS@>n+;I6;Zr?G${u3?Ev`@0kDd7v}r|z>B z!QRFDDnlI1kRcLu;v2w9I}jTda};T!PQcXEDPAcw*I&uvdzmWhHyLx*t-1! ze*RUj;KoZYX8BNG7KjBoa^!?z@mzB8`HXB?%f#eiu_cZpx$^2=Y}vYoZ+`0@%H=Aam#G%8=?DXGYxEKmSU4_q)j?@+26`wA z^)fs2Sy|zV zU1Qw*f*pMLBma}zZoiEwtBD-yWp1`XIM?MxFMkeid()dZf7^N!VnmKECctauSczb3 zAKP~h^XDHIeD2eKg+EqBX%{IXj3tEWAyP=Q7Ranryu4??Mv=!zhLXh-Kqm?d2c0+= z?T0A<#&HvZ7ME;a$E#lc9EOGl$>q#=-^CR3RHC^4+O=GDem}qaTfc#xt&_AhZqVUb zmuzA6vOc8Dv3d0{X_}I=1YNC3)9vJPWMjX^>&)|=uiryp*Qu5ZhK(F_kTUZ|$0zT) zB&jgz>ZGQ4DnLnzi0j5z)^V2B4q8Y=0*=8V*ZZrjMsFMJ7CUU?O3SB}zK zc5!VR$T2lN%fpZC=ENhX815^f2@$rjA>t|Q<2Wk2*I#k^jFzEEPZFZ>8fie&~J{W{>}`f55qRuAOU7Yv%ycbM3!+(@~OSpqoXc7OUR? z9&tUPod&F2v7Q${=eg`We;ZyQPrDPM(M-+EbI(0@Qz+zl)-#{U%*+gp+8H2b)w+Im zp1+pifkApI1$LglmihVfm^kw!XO0}FmQ3-w*Zdq8U9_E5tCsQE&;A`zG)vA}&ET?r ze8*!USYXdXkI`y(D3SL0efkP@d25;X0k$^7IDv(xh|8|*V)Z3<4FnB=ho`#JdJQRa?6iBxrp zHbga(_FO6U(l@r2o!hSD&aZtN2e7cI&CIdT&KQ6?HUL|$OWya`yml>wAu0)pLmS)E zST+b9qSFxYj38U77!txwg}9m%S)@P1R-psG=7#!MJAos$?mZ%%*3!n z%y|UOHjd-cNdkI&pQ|swj{bovj{Owdgj^Sq%Q09j^MV_$Ve{HG{POe^dv-ravE)Nv zndzwpTh6=FiOW4`0$m`V3pQoKJ71AJ2AiY#Z0M zu#1AynlYaL!W-HB-8)EH^LRZDvZDw^`cyjaPXXiv5MpAvCBkyZrxuYq>l-K|fiEP1 z^vD+m5v>M6eVVApr`yfZ4gwODQt*r9J&&F|R9B7g($~J4?|%P2rl%$ubb2V49A0$8 zb6Gn&f^9*XD!K+y!6HY=m6W{_x4iTke)yf6_{Y!wHHE4sKhTHJ3EGVbM2t>6gq9hL zTq00U^GaRpQ7ZF&GXQ-CV5J)EmCzJOT6Kb?M#;ArKmHhnf{kl?kjnuUuH)dy9DSuc z)q=;*-E<{)e&O#p@aSVG72*3Auxe<4O5UZ5Vd|x+B22Xjo6CUtsNKXw#K)!-! zI~W&(pL|730(S;bX%m)nc8ak;2ieal(h*p0hg7u@c7uo-2M_P&$hb0vm%N* zxQ>gLckmpG?b}zfX5AnMpSYieMh`jiBuPX{o|99jXtissT5}W6zxfhIhkCJcCNaGW zl*=wf-^2DS5Fvr?5(pKEd1G_4+F4r<4%6zme;dm^BVlTgGw~bT9bAdQtho! z@Emq+UCm$o&bw$FeV9AHaR)P{3ZtWg2rM)y=oIO?Xf08hHza_x1uDtrN%7RMxybmZ z+c^@Qg3^XPCM+}wNoSssfnFvjT1-t(F?Z$!akL%Vc2TJ!j3T6E|{>_~5U; zlDY8*xa<3O6DOn0Oq}Az8*k$6uYV<5HmpDj2%|Q&W}R3i^i}%s92eWxtX|Q_&%NXd zzWOhJ%H*kOs@01TdHXCdsEuuo5H%C8hlwGR1rGXI9?tV zM@UbS>)I^LOoK4@1Q`EyQ|z!wEkQo-@tm74=W|~e=7}FZL0?~$x!Gy=ROt27;NH7^|eY=E|FR>nq;E)w{N4wj?=3 zu1nhOVu>7ug2Q=R)?&LaATUveW|OOSUQ97odacIkFOiX1s1*tBIi z=Uuvr{y+El;@^FO$*G!ybgCU3w+Eee2;;~w6*MGT5P2@EM#s4Ll8f1S!FGCkD`tb#X!6}}KfvAJ zzL&|VV@L^4JoW=Tzs&Ii4*`nN<;$p6dJwrBI#u*k3v9Vy1HE^9OfpLpNP7Bukd}q( zc(}Hy_EsuBmSuzPGJSfMZ+-2X95{3k=+M(sX4AUOY}~YoE3Uqpwb!jcBncD8j}w!_ zvOU5u#I|iLOJs)SW;3LdKc3$;4avvb^g&)rBgIm^Pbtsn6>_tCa-R84@?wu~6h5=J&8EWk2;ci9GB0BJWx zIyP}jbHVnl3=a-qSr(~EiQ|a8>tb6L&${kPuD|{U{_*plr9Ie3K5yguKDH}q)-|V& zo`A5;8{hLHo_GB0n-{X5o)0C-W6a2!PZsGN>do^oTucQ^UIWs#=nj~Cx^%ZQ{yaOry>|W3uKm4Tm zS=b;7NNJ%|*MOk%>F9bGMhFpQvUG_QlDun^q}s57bV97PNgGuPr4l3-hmRg-{mM}s zX{2neW}AAwiR(G^^;VJ6qFO3){>HWJy8IG$-~WATwOMM-I;1I=Uvdd=edB8x9vUJ| z6-SO8=j5>`Y1M0_y36UwQ{2D%F)UlsXB8-Gf%ZLOm0b^1cFbp2uUaqiM@#?$7_kVjQJI~vN=Xm5qjht{e``(V*>vLfL1P?#B zpUa;03_kRmALQ~2F2;3Cv4O4)Q5#G4VEGOUbEhc!HgOmdM=*ZmNoosqww||*YPDht z3V`oBy!_>_;A>y~3hmlFuIo@N7LZiTt)<#%bOww#2F%XM#`>; z10Tokq2MKGRYEsH{`mKQpTXf?gjFU+Qt+$1?iH`%yzN`@JQpbiEBY$*`4&n=SzlEo zu_>tJfH+L}-tI^F+8wtek{12NA|mrtJb7f2;oddS5h$saCBrK5gW@=?U->) z`b%X6&voc(ND`ZpgmqPzI5EjTfBANXmhI-u+!PN#@F-h1Z{-y)elh2tw-wiM80f9C zcI7$%TJtgeJtHJSGh3VH^r=ZU@4A9Fy!oXJ4^*%gCy*S_#ehpBG}|G~PD)88Mk;Fw zQvk7z$2VFUscm95zbcJU8oYc&V$GW|zNc!gS59Etl0)N9^6MY`T~wrb-}`@+8?L?- z*Rio3$*W%ZBJQ~TRv!HBod8^O**11;U4!d7B&lM)KF6MYk8$GENqTID&FeR!mFBTM z57M6APk+^gc!JM-;*U7+$Zj^Ce?FI9ekm)LFUNBna=9F_QXD%q$ydI3I}2wfiB-(; z<3~AhVuE7H!tqS3lO{Ifv$nG}KxXk^<a!4zi&hRo=D}Jt09u^V+h`plgugT{ zV}XcLq&7v7rcO;*j}B3yh$Btl9=1i$Oep*Pq``6i@_+mVGc%K%I(?i69=;#fsdCF( z-^!JjUPq-=!uLIfhWpvFc?)-a|4vR%9LIHwyy*>ZWyiMdIF3yxin#B-AMmz!yc5?J zy!jX2#mis%eENHPkkVqHZ;(n)4~_8z8WNGWKrD{4i-m>+>H2^s3=~*06LxnXJ!>iA zNQt(LdLi#?9GWN*qe!vx3H!(Q^H+cKaW=2thID+o+G1?wa@MR^PNk=Wv;_G|nNok1 zR@9=evWjSOf*_Z&_rN}ytrqQ0L?=jSHk+(lzlPN-mebc$#S%HXK%+K8ZEl*v;9w?2 zFPNahj$!p{DKZbw1Yx@w0X9=AND#4uP!eRps7(~aD!>yiLU_2oN7QKIm*BB|Kj8Ln z-NnxHb}%(_hOd9;E{e9x>tFFIR*kJB@4B47el7ha2`oT3Lom~!cI+hU)?LbLU;7qb z^xP{b6!Yj*kwg)VMuSt6lSEO-Lwg>g)0|~l)iY}uR}v+l$%7E4h?Py8B1uefl$20t zGdBehp>C4s4*h*4j_kjmyS{lF7hiM*Q5-ROauVr!Y*@RVfq_2Cj^wv+!1FJSk+ z-4N6{c=#Y1kkX>Rx58D=eI9q-_GRN?oa<%!_z7eX@vdKcCnJM{*tSF|#rTs)IX!U{ zfYX!5s4dKsgb81{^In2Z!b@LtBg+PRaczsio(ivf$#eP6H@?Qh-}*YeLmqyinw{Sw z%i7E|Q4)czD3z-;YfwLS2$dFi{tI8hJ8yXvn^%ls+k#xKi%yM|g0w8dc+Ua39LolJ z85geDrsI9o3xUpFjUuMDZm4h=(g2bePc9Kz2{2 z7Nok})w;b@;QOgFnK-Mg`Kd2@ijC1veVd=f{5<;xKjC@t)EEB9bGaXR&ictOeagZA zm_@4fqi?@thCx1G;D?Vr!ouvtPd>PF?OZ$8{+HW1fb?AZuimsJQlJB9q>u>5$Wxnh z3)rH>CA)U%KYEC68gXi34gkjj-Blz? z5Og}&u8ZU6vHWsICv-S8eu6krgi%7hZZ>1hR!A5ogmKK_W8>`G`#7@;a}<3KM>rfh zc!b&MSvGIq&gwO*7+y9)lBOUmx|Tp|BXvqJn{P5k5sSW+;8E9&qp}J2o|4WB+5jnVveqisgM&dnN0~Y!(*AY1ITI zMeusqxN8?zUvnjua*6RLkMpO0_1ApsJNM92s^GakmgRueL7+)9PLECvo610;U`d-) zYhs?*A6swrnJd5^n$Izp-ikW-i>mlY}mw>#+9x z^WgJPYu0c}Lxe~gO*ndDoL1`$&-%Gn^5Pf0is6Al^Zr^Ra=9fr_Y$kpHi`A^I5vSE z!XwtkTTH1CAsn;0mWCZ7gaguf8nA0j?#UP>My4iXMG;LsZ1c!N_wmRh53qml9(F&t z7vJ}}{L;($jSu_=mtJ-muIu194%gpsHJ|#_CrETc-@q8-<5T?dyWaI-eWH ze1%OLHqo`9R;w|7_@Fr*+egYg(#{gk(I}-kTYZjDDl{^BDG)k9tC&Pfw2o0)Acc`N z2SJNLze><*Q!JKPyVm0i|MD;F-u)1#PM&0Ze4JLR$xB}HLT-8U+ZY-iGyzqP!-YF8 zF#Vws6E>&Wdf`R<>bu^~$g*LgIOe|lAK`uPeK&^>KVdwm(v&o{D0nXAa-QDam1v3x zkzi7$)Dq)T2yxc$Q415`q%}eq`v#>!Xj3f7JA%C1HP;rG$cfP+rgyN16B9>y`73WG z2|FA)Zu-gQZELvkS=aHQ4}FYcp@d~w3=9uYtQMEP|H08Q`g(d0mPNO#dGh3wy!B1L z$dU0U0C@1uhnHTvZp%h|zXyjraU79!6qYN|IwcW7#wn0X3ABssSRoClaFzjR*i1=c z*z(32L7$u>& zUAV3=b_Rag^l# zNmPhib&idn;Ep@K|FrYI?;CgVSD*Vl7wy=BofC*$3i@nJeX}-C-0h+<``X!No8SHY z5A)#NcRcNVs?{p%HmsxAC$e$qX#)DEl6;LcSc5$`sXh)cj^RT5Rj%R-@5H~NZM@K^1DbWNtCA9Ht*|ueK@K@qrSlLqjN}H zF23v%Hm_bsns$kEU8I2ABK@Xoks8BoT-T;xyR?G_Isz$NY~4kO00hL*;ux1l*m+8> zAW@nmG;FzAP-ihGG7J;``qTf+ckjFnfcFI*Zu{crS-xxlA)s6;(LXf0^u4ZJzXeN5 za^y%-&7BY3$6IcBBhkdd(ra8`c*tdNcokzSwtx^EI((Av-2X8E)@|O%|NPY7aQP({ zV+o69qsbqA^ke+f=RQvq)N%bH!^2g2EBy!uq^ls3Ciu+)(hf0sge!3}%L-v7I8Kb? zN;*n&;Lrq*>^Z>H$qCM!o?Po;)K71!|SqmNRb(F_b2kXpwHv5w9b zt^nh1YqThkd6Qxzg@sm$xeJvB;h=GFbRMm2bL%MxWq`_SR%{yM*po+i-+SLfJvjUB zdk&xBcRwt7@iVTcnN zwqJM=IbjiX1wjHj3K3~U-tqy9K*w1T$JlG2T~h>6Iy>D(hHN$tF7~N3#ny)9Nost| zwN_Lr8WDH+hrj+bCr(YHREp~s7#H znZNksKc!V`qHK#K?2x7j)qz3&>|-D0`fIO)u0<4fxb-VvL@7m|Uow8LERJ0O>5})g z$b4XB=GU15u};x41UlI{8iuBnnI#W`xY1ys>|m#(OdXr%kN@C9jGs74uwce6x6;qU z_dUv|KJ{^i2l^1X9Hnv(0H^8( zf=Wd)JTQn?@+nk|GJ}pn%gBs#!bs?mX5FGN?D#kijaR3Rsn1Ol5#r`;1}Yvwd!7&f z-iK(+*Qht^1OaSZH^w{O@eW@3nm16XRLQwE+b-HgrL>It!fAFt{2)%=wpAz#EA)p`un-{OaH{9d-gCtGsis- z+)t9GOq|%y+itmqwX0TOON)`-9!7dS9#j!wkWlP1MR%1gFs12nxKCmzMN1*=Df7#!+lba*vF<(WQdioR{a zCGEN)5#(6EeifTGZsqv+6HFZ0PqUrSUp3YVVJ3Y)*=}OFHqy3GDrNui6TIkc@1!w3 z!HaHu25*1;8`!aB3$E)hJTSm7zx|i^*4OS}W^RU&<_NuR5oMSKP}h6gH) zjSN_+$~;qkB0%}$iA&-q{_^h^3ZE|9|6kF<{|LbOAI>HIkAIfPK0v2XES31)efMzs z^ojrYA)agJ+PU^0Zs!2fbM3!+(>7owITR629z5Hn)@adcG}yF$h?|~sJsUTyB~BDG z)6?90?|ppwGoNGP)G=%{1+TzVqsCxgABYlKOaowv5?z%eNE2ooO}c3gFIQmw<{cb+ z;!*0elMq6#E6An70B69+@F1S+p}UH9IEU?d4E2u!F)B$pK5>jzyO&r+NZUaci`agF zPO7QJ33=DZ233*(7ICTxF8*5E{D_a`?a=zIN-svU1HBZYj^Y?W=hB@O?DrTnJ%cc$CYpyqXou zmt#wty@!tQ&2M~*V6MZOwW~?!AgmZIZGtG`r^!f`7CJzZY81YJs@2$*#ayk9=eQL8Jhly_=@LMivpf=&N5u{Zlj156AflyYd!>wT7urZkm%vqF z7>rtLB6K#Q8gDkw3Gt+jS03a`U%8!D&;}H)?-K+8cinv#^@TdO-u@Mamn}2wK$#~= zG`45c(^FvC@DK|%mxWplM?kIKBnl$-9+;$FYtij?3B!ob{{27j*bg70=vVN42dyLG zM4@$(1uS#`i4ZOj;W)-q%~%q|XdMtMhea}3tV0~%qsQ?LNMFoTHsRJhy617e`HgSU zYMliL{`}8R(W*uK_J=-5xu*i%E>_wPxU?2(K*U8CUdr&$FqW`5eP*8bz5mzPvuF2@ z-6!=Vpxo=>RU}#`s5k-vj_@+y#1O~vmtJp@YZueE&$5`Z%R>Z2Q9JV>H2^rm!LOF7 z*IVcmf}};IQluRwJh6A2C-#o>f%pGD_$A0eE*8knSwApU6UH~L+l4M1eR4mO(@#+J zU0T6eaLWapu4O_gn$SkKpFNWLYR7tc9-rovLFq^xXO_x z62~#@niXTi96DSxKCHmQ_dmp=hbFk>{4GdfabjwgL&wG$>T{{6m>3BnW}sZcPe(Z2 zG8?ATlaoCB_+f6o@djMSq0@=@_MP9O)vQsf_7J8Tk!WJI=mEF532y_&3P3HQp=fjx zp|wIOjaTrH+5jZdk*GMPr4-UJ=k5qi914beHxZ|koJnRNit&99uQEc~?Lsa`5G6da zZyYF)I2O9pgP_6ZzWfD_9veqRuyW-xyh_5~efE=FaOo!A_LjFJgheg~g_1+H>SJiF zO`?v(%}a>l3=A~^aFB&dEnX)C!WP6y=1q)Ttdy8@2NWG}jc1=$ia6b=`XHX@iM3|quuj_17cm$~KVe}Q5?Ppci!4B8C# zRVn5Ti!jK=q_&NhYCJSaSE6+uArwj^5M_*OY0iN~wrpzbVKm@T0>J7zXG5wqw5QLC zAP*lo&3rv%Y$W@>_~@Zr?Ui(0vta+!NU)Y^NQzdq}Aoby~@engNH#$IWLUiQ_3+!5lCMxg4!1K|kGphR60DBhg))ZkL5-hgv(p z_FFiW8aZJjlEefW0opPJEERQ7XgndZ5(;MvBiXt@>BZ*-I=dVKka>^3as?eH)SD@m z#nkvi{x_bps~?Uh`7-bNbjfLgr;3Q9Ri$t!SX;w1A6b)%4qLu#{UP{6|M zEED60$z6LLU7)rw&-md(*?3_i9UG-Jj>w#WgtfFv)270e73D3oPEjhxaXhq^#IZ7} z7_m6MYm^G`q=WAYtU`%)GoaQCDOr7_a*jwvMDX>??g%_B$bkt1nDm_@XL$f(Yy$L}Ex*t3;!5{p|U$ANCC0ups zWk8okV}Ud=7E=cv`yo#pI?TYu7hqX};ekH-hDR7bHck?QQUMq3*v>$2FS%TfuGSnp za+q)3eJ7EM7#>{9nW=@PeEl!O4=rd2b(xR*ckYPPHy#dD0J>%jO4e&rqS;s-zYz6pNJnq`6S zLA5-{^n$5ig$pz2ZkKMii|T?!mqNj1_1Y~XQh!>W-1^O|g4Y#uv~juX0;MSWp` zU;TyGGkO300DSh~es2Hb?R?|5FR^pSb}S*-vSkC;+;9b7`r@sqdJ8$c9HnE@R3n8$ z&N5?>4DtCvAn4 zizU#)c&%Z;M8jn;Elo9Ar}&;v3M3-I5*EVqvS6o_Rihht<1fC6wHr3Fd-r~R@Zdg< zojA_q>?}C~Izfac#_8>0wl>XIzV#r_dg%=7*REvs<|`20@1xRjnrXs@q0L-<$u9Dq zVNRSHKhEr_<5YTF+!ENzCJ_efaRDqrkm|F?oBeMI3n7FFju0knL1YW{MHt0$B)%wN z+a825C-xm@Ur-}%!}Fi@GUKn6gT_LG$&)7mutgD(*k~j(?FCSZ>z?&2Zn*jiJlCb& z4*1iL{yB+``QUH-H>%YNmSs^b87XbIn_>%r?}4U6h)skbuK|_G>w!?Kr)YW1Q9DAC zqKxVZwR9#q1X4OULegrrSifNvI)*q5DHh9|IB|kAXU?#D&u-dbgzk3HY04vyJxUY> z^bW3}QZAy285ka5Xm|*rB?k{3APUa#qUS%CjT<+T%jGz7^eBJ&XMaS!UT0`z48JHq zFA#_0qCth?lL5UZ5$-G3)%ffHD_b_7Qn`BraFiEFNS4nd=bO)J;a zTPQQpoaKRs_t09HV&ZU&JvL2WwTR<*fLsE49O$Sac!H&_dU*;GiSK$ic7E^cZmcrJu}P13Z!kYI!Jh9wz}!q5+aJMkG}03$@i+Pg%Ajx z&lbTNun{^y=olP{Eg;E^h}9x{Q3!LkNhWK>1uX2MW_0Zi3RaPg8`rRT#|7Mc-9@;z zpxaG3b#x!~)2Ap5_EK^hbhM&gZ_|zgLT`Zn;gyt2y{zA`iEFO9$|RI)n5xgS|G>kb z6lL4Nu>_$CArv6Jr>rK-G3u~mLX8BVB2Wr4Fck@T8zMrKG7yCC83bMlP)KlMrdxIT zMmN$sbOC6K=RWHiUiFIWDB3yDDN(D&sRzCc)LG#Tu)@}K62qciHMTChXWG~qcJ{=+ z{d773zF#oDq{1SfFB2(<6G2HzqR23FrIaWmat0|EYaa;9MX3Z5(6K@)15OzqJdBqj zpnXXzZ7;E(ZQmkjTJ-jmS@(<`tQs3&U|@_@o6qAJyS9-dhe|c~|KK3U#?P`s(k_r{ zaybLj4fOQzEAMPofcM3q0#ANF~rHWjIK&Gzf#V z4LYJyb6+JY%>r2xw6sh&!Z3n`B|w&lwWb-?(VpZP&w36$eWRpWvwFo4mtK7pt|RHv zrPb~*Uo!?>i>oGY!jVtq%%N61zByOjyT)Bpc@Hk%Id0cSOrEK52 zmRG&(na~xqI|*O-r*BiAonAV>sB?CVUI-dX;OMgIMuKRLfB3@ZxbCJG@yeGx8?C#v zV+C#n%XgPl6pM3s1h|=!$FYsYi29g5K!I1Xw z`bJqO*lgN#0p*d6>^Of5y~R9QYv!is2{VeRB`p>f7I^fr{j6TQ0clwb_EmY=&%c&W zed6P^&P-BWwvh`i+JVUBh*ipcyMI7^eu}Z)er(|pCJ8}g{48B5Nd$z6Q736MN|+LZ z$UJF0;-*8q-)brP^$Q>b=T0WE3i_A*Nm}c<3^SZ^wI5hX|!8} zNdVHKuTUjX3B_uW4Ff$UG*Y;nINi&cBTpdx3fnKd7)wf0o$|=uhk5M4UW&yEMc)K8 zX)IKnAUvC=HDMT+M&WF{V5M{nYf)(+W-&<9+?J*o*-|ksOx8xCpppq_$_Hbp1q2WPb zmbsZ3>cIlO>oMAM9wa5S&Jjlu58S(02$n?kGkoE5pXSo@w~^0#IJU$u`Jf_#1=F9_ zZ`?@1H(vL;+vWI^#|YXBR7Zx8r99QrFzxOs=Hd=S#+)T+1?)R?iYQVP^AN>~xfxSD zOAv^hYwkCln8JaTHxe1Qh;kiTts2eR1l9f#UUBntsrD4f$v^4uTyIW#L5&_ zqNs^w_bm0HI8Jh%FcGPW`Oj+qE4TWWkW;wex5VUCSSSr4h|jMgD)$Td-__h*8(T_(u!9HWg&@)? z<$NB`86hre4jp-nK+Q5d)QcqqIdbG}kFs9{APhSo41m#?Fzk|Fc>OKpU6(FhcHjR! zKK+?LXLh#E*Au@&&?n6X|$J0lHW~I4N4%#Ho>c-~75aQ0?mja?ID8eD(IP0+1{D z25Qxy&^UQPT-Su{kg>5bKJ?qaO;5#a{`dWGAE!^BMoOQ7o?%>FBnkopyk%aYOFouF z2vUsCs5yl=3qBH=r{bcNP>?q}y;h5&lnB`YX&&$Gsp5@{a&odlJE+mBM_hdMm3?NJl~(WA>;8bPS3%!VxTngPiR}<|j{T;?5k7 zbH1Vq6ChYufSbonrrWwC5zl=uC{ zZY?Lv_UvL%xd+Bje*HZ39LKZ2)Q1640PYaHPrr z13{upfQHtQ@mv)GAq=x8jD^|pctv6@NQC62FT07iyzx!+Rx7xU#I{W`ecJ8v_`xHf zB5H9!laPGbBbtVpu+4Lx{Q}Uw)wV82y)Cc7SK+UE$5B$hL^vY z)vH&L_dR+md8Bkm(=Jof^UTdPv%#c5gpVa9rIMgpbsZ&#| zS-S>H2pWwxCr+Nkb$x_w(+L8!ClHRabl*CTL|Ouw3bdsm$%5d*!~`2H`jcwQ03nu* zPJ{^u(*lHpk`gP9iR;t!4iE7^KKdK1UA=;w5afiwmKL@YG+QCx{PK5+>Sx*6bCVNv zQT; z%fS0I)zs#j)E62696L4-M+5x6b-dzLKgWez*JIm~edAB^i9h*W_CLCx%P-%+=5;GT z!+dRKsmE#rDrw_*+DOiY36zoo$S*P$1u6q3l-BrmfrYpOKy5Z;q1nOrOIXt5hU=ft z@oB-S)2I1`*W660P^7E7%+Jkp+vh*e#F1n8euW^Y^VM6wzztVl&d~56mJsw*ioEg# zSF>UDO8)6zzRV9F{vLY{9OKCN9AjfXXqReFkwT%5BvCB-Z?@XarGkr}&(mA&GruT- zjvbODz_N^*0zgO$ou*jYfZtjOv=S7B!(g#QQwi!?;LAK#0;-cxueVsXyq`Dz-W$34 z>gTd@#Snhps57L@(FsycFH9`WSpfT<*w6Oun~}oe;%(<~%ez0ozy8ywIX!uhMQQa% zKKfBC(Pj0j<;>5|;P>`nTMj~c#;;ODNWI7*7f8zl8fl#nDut8nG)#d`E(Hl1R-9pB zO3Puu&+7AW zYZia-yMN63t=rkWehmfB<*mQ)M!bO`9)0MC?AX4O>#yC2CA%D%nB+5`{4d6!PqMm1}wwx*fF z`4{ZursqDN&6`$JDEX8NMF#qMNV{F4RN>e@sFc_j^cVYSv|8A<#I`i;1md<~ns486 zDQj16K;#5x=H~h2Uw)d|GYgE3tu*#PSzpnPZOXVRVX^WnU}@Yo%bf@*G*B>BDcU51 z8M_{pDN?|9JmMh4scQP1W$Zb0n8E6DUjMR}vg^E^6#ADVU59mRR*(}pPR`76_<&)x zwmlE1Qd}1GW-gPHO9^FeVbXm1>5HIi3 zj1sUkNJ(CU(y^I?gogkc2(;snl#JC!iXdMRgptA`G592c3wK?>>UHZFTRFy-4Qtr4 zbp=uin)MD7M+_sm==aeI&T#LYchhcn@bVsB-lI~jWW6Z!vmY8jSmu0EtvP)BNl;Ms zOCTJYNr$0TgIHdfsp1@0UVat3F1mu9J9pqX4qduT*P0v|H^u*M+eUR4M?pXcRH_iR zKy^$JsND!rQ9yOgDoQ;?qcrGt89(|Y_kGWRqeIJ9;yFIGT8*ea11M7ZXttr9F=UfY z8=a;=*A&T;7|*pCTQPkUKiUiiKT1%S5 z96fQ2yYKowyZ7wnsw*zRu`MpT;1b40S243NM;xoHaPEPIF72$xfF*_K{(k{m{)qft z|H%LU|7t(;^Sj`e^E~|U{Tx30e=0coCjP znt^)rmMwUBj~qFIpu@s^9e~vFD3u0z^K0M4nzduhEYuk3?_+9eiro)>mx<#Cv4x-$ zhSZx)9)9dGrWP7(T)Pgxkmsc@ypi5Qfxf{(&P>m8{P+o?_9EaGlEfW!K9AB}n(YLO z1l!ZNg#tY}jj$}*af?(aO64NGr4l0PLaNXrkKtk_B&lAK)TdARSqO_T=pcke!Sjid zCSefJ?!=S|HpPlZE>4L$5oz3^rzF|DX&Eb5_R`y@`O@u^96LGz30NW}iQDYk^AOLx z=6cqS4zX+1CdT(X2q>0~^-=9DlO!?w5AS9F(Z|3A%j+Xad;%>HPSMEpoS0a}bdvRx(=1T zGV3;;&v(9iCuxu(5|1-8(}e97&wS3y7#$e_kt2>`KK+khWOmkE_ePikIdoSWDI+FC z3P%zs2ttkH7%xjlJH*PQvZBGlfS*E2q$81*P1uRDRgEN%S_;n5S`##z2%*s`i*XPU zNSCS83oOhw8QHjvUwhXtQ7IOn+vUL@>|y_7`*3}ip1f;V9V*82ec~u)V&WvNR-NZR z{{^gFzXr>)h@yz^-upeX2p(ENrBWq|Q@}>ZWGPqzp^;Bvks zs*oUTkD{LvhLK_apw$UENjIuo3eYW6?=7$=S#c}h2} zu<`s0v2r<-)=NQIk%~;Xn1Djb<$_)7S+{i=YcCt%gTL}V+NWk2C>C)Xff5!VJt#^KdZLsIDL8_kZV2 zz!abV)Suy%Bu;5Hc7ZH?w_|J@8~_D&Y*NQjXcZwSAu#u#5*9*O*#f>B@!%nuY zTTZc10CMJU0HwPW3Ke=vy`1JaVGt7)yGzy+LMYIl`CSX3Kp1yWQlT}(N)aoGC-Y`A zjxzW6q9hj$DsMn}a;T(B$uBT5ewcirz~z^nzXZNpITJ#XrkY448LSLpJ4C07X1hV5 zg^`_1R)SDSvC z%VG5mAtf{$ZQ>}#^IQY&q@Yuk8Cx50R14E@M0b(GXU^Ld1ps<_`>>@2bg`vi<=7x^ zfAdR#9D~&&Qdl&Dkbk}XUjF*8|AA1$*veHjYg62N*IoSWr#``J-}FWX`Uc1se0s_r zS6#Y+ojZPo@rhUSxi5W-fBC}anb`jWTx%8m{VPb4l-m3(VPa;zQ>P}-UDKZ&*J1fe z6LQjOhV=IeTvrlB9nw?)7Pj5Z{JGEC)+pH|=m=^xpEwASj*HR}w${Wtp_3}gX*@1?KRgU>%ZNuxeqQpZwq(0MO0+KwFkcUeO~yynv*JejV(k1zT=|fgs^FmwiG><&kLXTLSFQOXDwMw=&n&LXbppTj~>rs z5*R3~p`D)Q(Y+7y*0;Z%FaFa%FxcP6P_@FlUj0(kD_%&d6s1A|l`0;8Y!5S2Cy+Qe z7Pzi}6dXJZhf<(ZL)?>D9Gg&CVL@7%D}a&NF9y%~zDJ>$ryWJ8C?+o?!j^R6fItVd zlavcD-p+HLb-7Uu0pxPn(n5E;6di}6=V4febvmvMqzJl15i|l#a~}N4N?!Md*HbPP z(Oo!n>=chYb{Jn4>F@1FI&OAv9hz)2OD}@#UDFq6Zd5nTk9nNkM&&un` zOb3(#$19^E%|hceVbWsjmQB3>J?~;@u%A?SiIRkz$f1;GdZ9tBX}~yjx&}bm>che@ z;E(I_o>#t0UxmDJ#-9Rp90Mein^2FY~0Q3(H;kbEb zrl+{}qGzz>g`24k^zqEguccZpp}Hxyl&G}J%)-23oC5_r!iyA23xw{P8{O%mk`yTg zQV4>k0V+4HT2GH}?xQqKx#!#8=hSJ#*zGCzuyWlN%K0j8#X+G_v10$BLxeL11a=*p zD2YiDMcC<}l)|=c%GF-htlP=%`@hQ*Pd-ViAx;#tr;H8BP^H&QAzdg~7S+7V95CPy zqy0Q{3vFf>PV+xL{z-Q2+KFT5K}x(znPlMih0bKZ&LFEa18xk3aeYP8>V>e<(P5 zuAOWDceQf>>ACh_y;)1L(=6D+ab4&d`N!yBm0ZrGqt}BL2PO^~XvB>f8FUyMF0olXph z#kL5Nrm4pBjaOSU2na*t$y7)!v<}$w*n@ofvmSkY185YUiult^{JgAYH<#Oaf)S-F<;c5LFduQ>#fqS{+Qh#a;00{49L>r9RxXIbwM z<${kOB5Dh4*EYZbW`mHk1h#OIO4A{ti(t{gF$dT}kmw{66I)n|n3e{zKqOBE5QmKR z<*CoY9pC%{zu9~b#Zn&2%5lMt)%*=muv2QM_Tysl?zg^?i=TZhp$cgQl6xO`oNs;i zzNPPP_418amPIZn=<6E>AZgl!o`-fcmLrJ+f$tTFbwU!yCS7|GO$2ZR%C!w+Mq=1n zS%8qrXrBTjTl1txq63gA1yw)@&8fL3fPmM(K$eP zQ?me6A!hNV1xSs=Mh6+oGz)NvJ0VI%bmD-L^bwIqLW^3`Mzot8o_dmXTXynWAO0}? z{k>S0pkA-@sZV@@GiOdybzvcb9h*nlylN03a>#C%xkiJ3z4facJhY$Jzw+nVuy%tv zSLxu}1+L$4F?VdekT3527nX}vcoHWtcE& z^YwrGD*GPZ!wt{Ak)7vnr&unrX5|Wo1_!Z)h2z=yuFad?@>;%j+vjP{jnf(`QZ3k! zMCP7x3_A`jGd7PvXd^fcwE+{-MX*Q8%xG61_yI8`ccwcwXR$lwd@8pwz^asq>Tex{2-*X_S^YBCW^2!&#fI`7H%Fy&m8>4*mT@eC11D<||+MYPL)1(lb0r!Sm?^A$ecoNXPi9S`q{CNOWQw zbd(5%1;Rdi+?ljqE8~@`wMHwAc5GrT>CiUC2wy5>a_WTkNzRWvd8k#WArX z)LA{U65W=d9Rj5g(iD2M*0i%gEMw&WD%5C4AY9w{F#}3M8;!sugzyCOoA9|eEy!ut_y7*G6)gfHRp||8x+%U>}-+D8v*H`(_`#!*2 zBV`RfQ}bu2HRjN%0Xq&HnjlFudCweQ@4yfMVbY=FGJ*VrWln$1-|R>(&t^v7eBL} zy^rppSgi25&;31XSB`PZ+un-r`z#+BWckRT0ppdTry}^h5B~uR6B8r}*si8n@Qs&c z7#ap;R`f`aXlxX1Qte`;UZz$sV129-)8(a&Yuh9`S@JB6RDyI3{1~eQlp>$cL)4)a z)ks{6;O_`ugx4hrHuJ z*MQGD)r3(*(e)V^9HzeT1W7j`iaNvyaEzC2EC6K?(nXf2c0dbl0J@C9tTDD50u4&g zX=#*>&DzMa5NKi?f;b?KBASglK^Rgj6f*mv6csC^5cKv`@CpV97Of`k;4qMoB!+EX zKl3Cin&7glZsH|3U5DdHnyofp{@T}>Idzo5fj)fSN9h#ZfmUb~6;34agpH7x=j0;G zm8S#(E`p(9_ILnVB4iaogwi2O{XguzcbHvQdG`G~Yp-2TojKD-BgwLgZMioLHZB+p zHUUC2U?71|LJ~p<0YX9&2rnTW(g>j?G0k*h3^v9E8#int%W{!z$&w|FrfB+U`|Psz zI^Q2_&)9@G$(wx1_iHFlmTfFlZo zQA|(T95Xn`IcGeZ*?oJ7bN$V#V`CQtJq?-ChTZPiq-jE^dstFZ?<;Z9S*NgmsGo)X zd%5Gb>!{Ui99aRCnDsy>fP)YYsnA416C~ioG1v*h(IgsDtth$~y{JJHuP|7zvvJ)9 z`ul1)j!h3p5=EwZc&^WdFMT=Rz5ZGj+f8iGL$w=R|ASjN>BQraQgY#Qp2OF^^iPEC z24fTJ*}8EvmJswZ&5rvX<&K+fVR&o;$E}gXT`bpSXkeIAPdX9Xbtx4+TvuXgL7JvO z0ci_z8BT25#j<*69ka^MRv17&QZZNsb8iACY}rZ>_=tia%@hX@J_)4tkFV#=Z+Z*Q zJnJN?{UsV<#QuX*%p6(aZ$I|O+;QV~aSDQx?~`fGp2zmH)ChUTnI};!dc5?C%lY27 zZ@}?}>FFNLPM68$8FQVho>|8WAOnY>TA~5W>p3>`Z^thcVHsvunuJk8x#$xo8DW?} zYLUj8$c93}Ln{yk3n^VzmKPDy5$V4M1OFB1`1F{i&S(BSo<N9kn*F+8|8drB7-!qY%NQ8xqt}CG+#;6QDqR9!!}7u$6|YPwC{na-n#~rDUqld)B@uRD zlXMg+R4gs6FgLq|FDxv_!XiT3DOT>JOr{}kwO?H`Ej!n_(-~=+VcP=Fu@Qkq90~UB z-p8It57CN3iUbVS`#A5COL$57=NTIv=6M%h#IAd9=dUCuDJHfrlP?kfGr* z#$?RvZKw1p#C|(yqp~ZB~sXY$=W5j0TbA=iu39 z#_48cnQ6bbtS4JCR-K_GrYkzpg1+hib6CJ6#gPFXJ#>gly^k=C*?VLK=wmMG(4K8@ z{BbAo*57_7<0HcyS#I#wk9>@;{Mm<${$U==D2()=;F3!(;gg^ITNb;ERJ~F9r6dU> za1=>6L!up!9;*tEiApFSu(d7rdtLSmSuNFp?u04oQIJepN(kd7kA) z$c7CYc*VWBvM#lxz9SmmwvQg~=(u8k%o#DKC{nqX;V z+Q5ZPk|g+^V-m$M!gU;$8p|A+Z*aoaZJcq&*&MTRJy0M`72p2$_qgu5>!|hxI9>oV z3v67!fpRgRP=Icy#i#z^kND_ceu^+m`KOP6ia+?xU*QeE{#(>){S=E1k(Q*Q4TPvp zg7ys4D2falYt<|#Ns_hSAvG|y28Sm#Bt_o-tu<(!AVih}+Zo-&m>n%I&eNXW&*sg? z^BceZ>-6VFQ%4pW{Kh+ekI93Nv+a~K7$4e1)@?FT-^_t09^%%=9^=+qZ(O^-UijQ| z`IEo;8;(Ej42-(me&;UU^}GLvGfzF0ZJQ?;UpK`1bsH&{DwG0`H@xPB+;r_% zxcTNA7>laZM=Er?pks*^30g#`$ia~TI9-qlXo1R^)j|uj$YmoC2(6J${ymUu5vCm+ zl~9NTMNx+&;sYQ2ZJvGcMVx-x=^VG|IBJzXq?9<-67PKHTbP@j!$U*{EAoc=O6wMt{c!lFwESMdEWUO@4|N+nvpTI@QMzyJj67$bvv~5&Cay(t+j90C5FxRnJ1%TJ);QTCCO=U#>TE}s683;{^HYOjg%eGUt zar?b@^1JWNFd~P$OvC?6nzf9mr3VR3IqH3N94QzZsBy(57jXYwFXr?A z@EInj58z0!u*@V5EG*8Md#mhY$lT_8Poor_CRh}(e4j!=kYx#4r)yUQ1eOLbe~pT} z2q9>#tRSVpw;deIMwcrrE-vz0Z+{1G{PnkT+G!_K3Q7zO3^7=*BMO4C;UTu4c?J*d z+DR03D3)vd;U9g3#ia)CeAhb|7#vtzm!%dQckBdJ&u0JrM;RL%C2*?DEiO?jmk69v zE;}O;Sg2T#pb>642Ml^fy2XMd)=x1xgE-CIam4CbW~}+KXbr_8i)l<4C0O+uNX0*W z>9gE)^S3$onP;>4xb2*H{7GzCzX@OZ)CX$(+~qIlM|a%KLb?d4qFNp0=U)062Kom` zR7#>WE3FoG4=Tj~OWJs@%l6}sW8=oHJpR}tBpMX9G1C+I=+L0Fg^(6PO5!BO5-ynl zk{Cw_gtQSlBN7lxO<7Aw@&Xuw#**na37j&N1-4~z+xKpwxxB)~&v_mb8^)-V%2di_ zO2s0hg9H5L@BSXY{f@UYJ$ZR zMy5z~6pohk1vdBJ{(U}o>)G@eiM1Vc`hJpK%%pg-W`3v1ZSsdvK(n)#`HS#8b zXBqX9&(O)+Xg1q?cX)_9fYJU59O+imd2=@x!Rw1Rspz{Lw~tu=G-(SOWKf`LA`auIDzY!!mH9mQG~!F@G3~5Nd!dg z3<$6sk7hH(qAgY>#r~~$+J^3*ctHFczdcQe)t5i{OzYoz!s>6%VGzyUgs$0T!FnsQO;n=R)uh6D&-4byoL>%wsXGM$loU6>FyfmbjL zrOW_euI-X`S~R1OG|o7ZG*~>+!t(Fs8P9kYTelp`G3&+|85`%`hwj5p1og@W!W3@& z;q7cc`BWy>P4J4Byq1+lhf~iuolZC5NB8Vt|AA?Oa+$!jDPTb%-#+vpOEVxN!vZHy zUeS57Wtn6<0gXkPrSxL30YsNh*e+VKpfz{7W4tb$;$R^!CuPU0HRgT5`0w4k%XZ&6l<&-9%6oan#J}42#Wv*9UI07Qc#e_l~y7_C1eSvJxoBFx7d4vyp0=l0)gkD z6eLN+N*Hr+s>$%C&Aj{lzr!(Gj;9kV{^f=n`NYTmgvEA?`p^Up9I)CMp^pK}3coO&`s6j)kb;ZOebPuOwycPRw}^gDgn&4e_H@q}RGG3zN89j517WH!W& zkni4j2T#2Itz7l_FL2z}%}8nCN(WB{0CXA&m7xkkYoa6pkv@f6owqM)j7d;#%3`jD z0k2c7uvtw`4I(EEhmKTB(`p}7IXJz*y`T7JR2&kNO1%9Y@8E53eGB7b<5)saFW0Gf zB~&M5elcWXd;=33>r5Y+<*KXxnQvYtsFjP9%SGPw#y9b%H@}7cdOv~hGdMh8m~4#* zN_As8MTpW6Bgq^PPKtw|=$5cuk4$BBqnIda(@ns29B?E;I$#NsI02OtN`*wD8LJPV zyACsr16*_Mb$sjV#@YC_Z+bZ&_}xEc!^8$G%c4>#^6q!PgS+p(ot?YxA|t`~3wU-7 zFDTP##LUmlf<&xnsQO(EM5@Us6->ABC3yH{>|1s>eBo4aq`2?|a-<1~KlH{ZdlUV1r!@8h^G zFTdh)zW9wVF+aUXxv!6r@ln!l!qVbA^mzU;gqp`P$d62HG;+I{D=eeeM(9;x$ z2RQi^FXYrT;HA&IlyZN7E|>*wc)XAIyz4he8!7kfxCOi3WTHAqK@`y1m?nZiqzPz+ zbOk!KNOVRj6w>M^@T6Y8L>(x7W|8KvKb)#cgLNM4@sX&ByCN`|2R;@F8_y}M5@|AR=8LEAKc-4R` z(bVh;9!1c(DVYK-GZ4nTom3dzR4iOul8M6FIwPfx5RxQ`^L1XX&F4~R5(%*beX&I) z^r(0hA{EnVwGb)nxZweAyUv(no%PIf`OK$2#kMV*DY^l#yzJ-s_Eq2H<{PgEx5|ru z;qAQlH-3TsN|{5`NBGjWzsvE`7Li^$2~t}es-Q} zP)A9NOs}#-Eg&OB<0^rzFu<<@t-2@)(rmzxLYiwTjIo*2rT`Nuh4i4QItWh?$TIt8 zCfV_+9end^U!#9ufS-TKOL+C=ufkjB;5r`9Klfa&e%ASX%800%e`~|c zG~FkTF{{ke#Wo-?b94|?2z8q-3co(cd>Hb_fB!L}zxoggi%VbnO5XEJZ{^JGr{Fm* z6YEF$gzePlpUzKEfaV@h7PLOBS$# z7R1x+y!m$8KmQU2`YW8ebqk*7VigKxy(}*oLMNB%0O)o*%uXBq)GW#9EKJi*R&ZUH z7d`(1e9zoNak|9f$`ti-iewH~R8d(2*RNu^ia2R7F*45h@JL~`TjW1NH=lgC@N^IS z2e12&(953=>%Z_C^EC0)e>`pYL5V$kcQLbg0LzkQj2?}naWwu{;wV6RG=A1Yiyk;B z2-mni#;L+_4Fm6y2fs_J^%jESIQ@NPu6X6ov48(AX7)~@RK#PCPV%j5@8;A~&t|L? zP;fm|8s~2;(DW!2jHyh~F(Aj`*=fQk#gPu(B&AS*j;#oVS;)Itnpfa$+`vWHMR04R z*mP3xDmAKOWB7d|Ode_Q=>GjIw?Z-mnFZ(!TN~X@^_1$VD2TjME#EMtDZ&y6+d=D| z(bCKWS(Jj#2)r7?fwgKFMsVHPA z1;CXS?|kL+8K`}mFMZ=XjE#?S`lijCd*TUXS&yCtt`l(PB`;;~T$gjtdk*Wz$JqVw zW7zxlv9xdmPl7EpnGnY8#S+*^w9v$1LYky#of!s(&}hVy20Gf9A9XtsDUezLktI3) z+zWWkYhT9;f9`o`A-U(#{rt`!|1~rB-UZb@#=Mdt*`^6vnKb0k^btC#=7bZ^;EGpX zj$=!Dy&kvUdK-=9Wd{0&SvRttKseY%i4Y1!LLhyFz)9C^wuOtd z925~zmZ77BSV7SdIBSTbk%drF(@2(ye1yi_Av0#CW{H);@AXK8LzLFm?(0qGzMjs)qx|Kc|30T3cNVXB&Bb`4On-3z zfC!Cp1+Hb-Z)RRGl_dA1#xcTy=bu!)m4ou;O}*rw2n zn3&jrTPpI3%P&Vdl9hIcfBfR-_?wUZ89@-ResBn1Xi6TGf?*V})O6_^2xxJHD2b@m zH__>a?B2P9x4q|2_~w;=&CoyaXf*_AZ)k!=%0Or&BvX^>s~R2AVA_v8B$yyb1Lq#y-;(IjLcnvP}V%uf#?z}Jed zRyaP4)JEyAmeFY1?KXP3K@>$;m=;o4y^c?5ms@S0lal$xX&mk0`A{wwSq>XWDf!}O zzk%;>;Lkt&0mJSW1^R{p)@>SK=PrmdP1vooY2bLq)=e81p&05dzj@MOO4S`bOh2d0HQe$fs_VRK?*Vy z*aAq5F&*9-vwi1|om~0Jf8eD*_c8(>3I)MH-yr4EAS;boJZ*+xm?Z>-6hTDR2w7<^ z)5y)7#x{)chadcHhU$a-=^y$uytzUWzZn=zG=rLTj zAOKsXpnHbt)Ps%nAwKe!-^7*l)uYLX7*zw?D7N>SI)nCCb)yPDhLMbDtrGzUhgbN{``MbYo>WN7{^XX49 zGCYK3S!~;Q3|o&qmV0iyhh%)!rQNL8n>KI8TXPWCBr0c6x-nX`kiv9{WLZian|s4` zUBmiMQiL=nGzl7M2?P$l<!$ zLl5tyy1j@On7xS78A;9vcWsv}(g2K*JqO(vhC^ZO2PG-HVAL=gg@sEF;6Hhn=+m>8--r1aX@@d?B>ksKhA#N!! z#a>`FRnkhKbr(-aB+8t7Zc4UVurmfn5lTl!+Y=yBM$_AUva3Nz2d`YkjbM865Yv;B z%uY@ch9U2L_is@Qij+%5F1+YMzH{xjX@wDW3dE6SZn{M!8-@o4@X9sX%SUkh5(P^T zM+vvw@?<9lfQlPj`MJ;XOIN&_!GSu$5)75h+T&Ob0WL~_8w6{-_pVH^mBi5)V@K&C zRBTkcRYII7Y$@?Q2c-nD7ObQZ(~m#4_PMQ2hd=+*zhKib$5OBNapqa4b7WzWn{K;@ zcDTSJ2afQuPkn{UUUUf;J@XXChwHrlWzWU7EPUUmlcap}mOGf6onolo$3Rd<2#aaj zM&3(GbQF4?0OL?C>Z zB#jYT(oHfb22d*To_*BMI+;q*$F>dIzNdSpPz&63=a0Dj^4C%- zTRi&sZuTA8j|?Q$YCny(W_h8(DW{yqxzBtSmN0DL<;4bZqfHi6(Xx+N+hp39H0e}< zf}&R}^bholM8*GE-0|r{JT2GsKlk$gu_r&>i#3%}nFn_7V&8#%SjGR&dmfFWaWwub zaTFju8b9ly3k8RSCykA?PLWQHzP@2@yJHvEUw;d)dCjZvy@2PQ{{oI25q#rczR$i# z4-mEHd2II)T5XLUEMQ~dxcO?NGzB3{>%Q+0=ZVhZ!aPgMi>NFi>t%F0T{^AKlT1&` z#kM4w?%{bAMkm&BaB-G!sZDush*M8Jl{3yboy{B9bLhY!4ouFo)YWu!ie=l7fyy+# zW#ia3Nt~IQXwNXpQZP(Xol&xFEZZgyJ49KEZCPl`0>?*Y0ag-IwH?HO&(J^(zu?em zw%EUSFSCaZQ4Z=@Hq5u?v9KtnMIL^5KjUM^aO|dW3I&T+qrp9Q-^YPNhwwZH%k^j^ zF}7o23k%N@SQaFirjS8q1BkU&b0y6FI#U{fg=JZ}X+Ylku65ppXg1(6CJ}LDm6@ew zW|n7=!11S@V;sjlhc{k+88`pSv)Os~Z7eRkNJ<17>re9LH@}h5;Xy3R;#JQ% zgI8U626oOoEC7yUQJ{zK+q~esQ<4FDAmKU9X!8?=Q~(JkV!x~*c4DI zLnw_-6^kp2w3e57+naug%PxH>BV(fs*9R&3KAmn%tC=GG4KR8$YX%NE60U_{x4rHWwd&=0Iz_sEi*qDYg@F=2)iLF=|DR)d2B_~^L(0m3p9=Z(>&wc*K^7#r_#$! zvZO0mcl>(pz5_&2vwqzsR+d*-X>`Hb0EFO89&kxQ zL6n-29xEGL8aABPEtCM&D>Anbv(j22>O^$WWI|F3f}a3Le=?LY+lVBsC}A<2r!%{V zieqH8%HZG_^OMuW-H2YHM~@!p9!D0A@Wg>90LWs&D}L#TMAq$2&79CMMw#b1ZYo&(dyM&@e8}CIZH`U4Y2h_*!S|et0iakMA|03J|q4 z2c~0|8v$a*G%P_POo}9GTq1 z+}vDk1N9o7YvyH9D46lx>tWdz8*36f zYYUBvHCbZfS;c^R5RD(VQaO-z(;>grA z!$X4rNKv5V`^3ZqMMtJU#w&&7pb~!x1kHz_z-u;`u#T75Rh@rkJ?N*yxZoiE??!B3AA`p%+MqCo4Ff3LHNK1g{ zua0K4N}mMi0V$L@w;T&Ft=$5xm653sVpSHKB+^7GA&MfV=9aJ=mx|+IX|cwo%Cc|` zSLo>;Y1imxp1gGv+cu0~TNXVVgj{tTH*wb;_ww<-`#K-}=!q1IHU;6}m-@_mrpBbu zB1H;;CPn1O#%e)SD-fpGlh0=PI~y4rbFOj?a1>HPDshC(a=SsN)gWvoM6D*PF6avj z3q0`1V^FYi!@mNqZIeY2S!SV9Seac!h0`2&+6lbyqH_s6mmWPHJ2=UAzVj`VQq=1G z1bFDw#?j_pvV|ljMroC=k9Iy^Y14wwQ{*^s){0ka66VAhCwmY=q6k4MG?GrDX|@_P z!zN&1S2ASkqT-mPl_jE1NI{tK*KD+Dw~SM{Z951G1dhvdo^vU;UVA-Zu1^X;yF=LO zKo3%t^60)j03@kKwY%opxS$Ifkt%E)aLl!d(b$Pzlb}hJIc|_7ks#HAL}|QYAEkjY z+6!}l;?6torX5DudEa=UP@otD*nxvA4FE1T-*zjJ=&|XTQMPUzXS7~5W1vuAYGH-z zueq8yZc{1`p`#d`b8Z!iC`t@KZrQj&jW|hoFyfVw}8J;+Fh?BN&qu0|s_eJL+ha+yh>2@0PhoRGfFyy;m zx{?>Z>czbN;&V`0k0&M%0^pa%5Li$UtQ#>*-I;~Qx%a;NIqBr%DV2k~8?0c?H6OrJ zGl#kA%bz3ertI0hn~}j$e8;ETjX5+m1yb_Ni!Pv=o5rb3bMHfDt#;%HQdB_1AWB%4 zz_!i%I=<{xD#b#io-}xSYW&x5$baKi|IQmd{X>PPedOs$rT>W|7J!CowaSj2_weYW z51@##e#W30%d(DgU601keEe*Ux}$M4emXMaWGf8wQb4RVU{k4hw3gu;SAUV?kKe}j zlTKoAu#Z>1{5h=OILiGy_p)>6gKXQj0f&sJ8v-qYifQfb#0k3B!;>~+1APR!V1B2$ z$b&oYX3MsX^bge0)qwu8PY~qJs>HO@4$UY8*I~o4n^80R#4pG`>u`$c+!6~vRqgE^u_#WMM zgWZom%JiXWTu0#99vL1wgS2OkD??-V44X}-X$~Bi7D&joU!^d{!-nXBW!d~|!5XbK zI@M%Z%t|R>@U&yua>1#bb;3zpeA$IKu1$dgqr-LH|IxqZ&p-Ch?6~7r)Y1~ICOo)v zFaP+NFL27~C$nkOC>z#|QVh!2mTk7O+j;vhzK%0aJP~Ob zm(#K*dD(@h(mwEPTCFytW9x|;n#Sy5ibV&{aY?kstJV0q7rltnPCkL6p_tK$BHFzS zr&^;FND|e`TmA&8>5W5WU1Ow>vsa>tpxUPrRnwcX$iGtat^ zSG@S=7#!%&ff>-c$4GyLmtX!0g7q6YGBZWsNG2x_^5El-Q?5h=C6DppF}9s}Hue5> z3{;9NEG;lIbA(GTIgbm@-cI0}B(tY8iba8Cc?1Q4XFJ%!Ap>F+BY85xR;va-Jt&qf zJYf??8JSY32y~L7v;k1j;5q`OW2R@?q&S>%^7)J%GeMjb*!|cFk4?@qP)YdBU%i4Y z$BwS)y?N4NcxW92F0qiv$_Se`olK-{Hgqi>e0+xW>#MxumtMr#Cmuu5chS8bsuwf9 zX@G$fkE2qq;kb@rd}woQT7Zj9&`ntB&avE%NLn4x8ppN?Y#ZtOrX@6Y;nlVzOcj|j z?-NFg1hPkU^f=PSAViNrv>)4BM}h6U@+}wfikF`XIA{&cc8AY=<{Lcpppi+q;Ihkj z|GVGBmUV*&A?WEMZ+-3aIr-!hxc;WyEH2EGMqOH+HsR7D%X3fA>Mnq5%vHQVqIHPE z0b!FQ8A8|wjF&xxE|{v1=pqDoj?CeZ#OMuLAZ(F)ItijAq|=pnewA%wrxF}L0R>Ie zoB}i#U3wY6@ah*6_#X6NX=#N|e&S=amlqftn4l3yjI7(r$;X^Tq%>u(j9(HQGqH~6 zzu;odIB6q&6%VUWAc|r-D=SC>Tv>b)fELDWd$nCrPEoyn;uoJgruGz=w-IoRxxS^n`epCMXVVPfm?lw2FF z6=|Ac3sYQ(bOZvN)Wa2~Sb|bSD#i5;C^l3#1+#)E;QKCq?t%_*&wW2)esP%~Fgk#x zz~yBZpTl=gK7qS$y^)t({6b#%!pn#$u=Alk%*@Yn?AGI$oH~d^Q5!Z4EZytT2;0o% ztlp~Q&|e#Q4~n>7t-Ot-ogGGRwubjhB47XD7V{~jI zQi*h3v%cu3AhxW%4aQ+h=Y=jvv?i5cDTz>Jk_=MIp*~ch(_Cb6aUM%}^bHKK>6l}= zo39VMh zk?Cm&JAeaJft0hJaSm^I?Jwfx%;CkQC2sou^{6<;c5GG}ZKe-S(l<82hyLLGj1Kf8 z3W82I;`5*WM~)miK(!>Pxa4a|oCDEz4(Qs(TuUhuVzXz+k3C5Yq#+%{I8AWT(#9Ay zskQ5ssE7g@R|wJsv=n4Y(@I^Uv`9;VYBeFVC{_D7{u$50tyW2u;>f}RSN+R3K^YMK z`fq=mUwHM)>8n-vh09;YL$}|}H?H|Q?XW>mDsjOD7qjJr%@nKxQJ8RW(zvoaL77BD zM@6_e2(5`#uGO2D9*T}fk|>nY_@#g((L|9Z6Pk9TO|#RY(F%=b0E^}v-9Fy>E5FOu zW4F2eyq% znL{&+L}|vepZ_9W_l7s&IJt@K@(R~}+Tj!66+- z@lRljPyYIEfRy52!;n7>N{XNQ^G`pg@KX={2k-jRZ~D_m_pkItpAIhVtMzfq?KgAZ zefJs?$x)Q%XdI3IPvYp%I~qUhp=@CxR1COa33LKNqzv`1r?Y5r-8DOq;uC!EgTKqM zncZfP6CEuq~DbqhT4*T{KS(;ss z?BcY2XHqLy@P$JK8%MZCuhFqtUTUy7zl7u1JoB8h*}Qo(t+-84DbZgkv)pR(;GPG0 zbk9!0g;{jk!V@00&OlgbTae~@qd(3^J zV&Mfg1yNvWd5NW^MRxAGp9db=N!0B?no=xQ2)ux(n-H~|EG*42w{(QfdIMP!F?nb| zOSAjIN(eLPvux8|4(xT0hzP zlBFPekhCJ|oBFxzRX@*bpK~!q$Hnn%Jllx8mpq3ToqaOT{D(i}5B}_9Tz%!&s5qL# z2kz(IA6?6Gqk#mh0P3|qKKP-JaQQ1_4ipN+X~JS-k-KmC0rUGF zp<0wI9g6AL7U+yLHsF8(+zlX=W%^0*K@<$^u6x*afh_A0$0orOwuH=LadCymcOT%~ z=XltzZ75v@==F?qd)aq5_rzm4@t8s4w7{X6CZE0PI&PVI0(D?NZcT8(`4{rK=U>Wj z{{X&Y13i)?!*eVg*8+N|G~s~<9^l?Pe@GxwI!iM|tp&0)L#4|2uSo%xz?BxM*2LPR z-o1{EbJ0f7(<+LEp< zX>=nN=a(sO7~v1z^UEA}?D5PlG{`iJjMN$Iui(29OIT!?Vt#Rv@85D8U;FAm8DVMQ zoYT%^!%!bqUI^(Gps(a|$uo}S;ZwuXATw$ z6a&|=zwr38X09G*?DvAZ?=jR|8ammK7Wf5TvvQm9o$X zNfEr^jc?%PFS(RTxd;V;Yujt`AHuSr&|`jSk=t(nA+v`KK)T$R<)6R&IcAQ`Ft>ji z1@!e*85tSmiYu<*m*4hl^ws()6kvIIiNE=qk8#ykzKB;Y;`*92ZX2h1%f=QqJtVSg zn1{9m3Ic5_NF${12)nC176S+u0N1gpRVr(1&OLYD$^8#M$msAOj_pvON5yyPuM~kQ zZ~yJLbK3T8^m_237hg=Odt?RZ#4)1RqrX-{Qy`9FZoOw0`wvY~tyYn^*eb*prl_Nm zDK<3vZO;?$H1+>y6IzN8ODky4Ol8HXpQ_`vV|J~J~1*|cqpW*9QOd5{l&==V8p^JXmD z!m`XdVC6-lMytin2Og%;jDdix6;cdpWI_8gzd-CY<4+x_%KRo2Kp(|k0hg|gB3%T%_r{=N; zJ=)zii%U~T!1ps#5Yb}o;Dx|wbjk#TDP)Np41Fp+0vD}I4mwMKuvpW%@~vR+EPzsd<)H(?3Ek@*F__N{Mn+ue6l9UdUfQs(ED>DzQH zm%aFfJnPI;aPxKN@Z3B4Yu{H)m5C3|NCS zAhnsn9Rw{jrjub!VnBn12YKUPNUb%NUfqM4f|X8;iDMxLv@-;jBk3efO4Sl$8`q?WJ7q$B|}yIEHpg*bdFuk;>@G%7j|o!7mNd?JV-d z6MMPl+HbIX|6WAjI^xJ-^OiG6w^cav8K?2m%P!`;(@w%FK!F~fCvk%^ThWw^#5e<2mbi z!E0a5@4e&IY~3(|6oNQSx%uw9*s*IzUa&XFu2LGE*%U-6FB(9#QcA~$hjo}U!t)8_ z=^)SlUi@FY#sB@M{X1;ar-Y_Qt=i9>_xzAsZ@Y>3sZ8plaWsy`|9Tt+NRP(PdT86u znMhjWx;9eUBuR=QWN=(i%RGMkqtEmApGbJkt6$HiEn6v<>WmEcF+A8unkt&jHdFIQ zn4X%Uv$%|uF1sJt&G)Xok+Yw1I*;sp7}W_0`m1D7$m0A8J9gZIZCliWA}iAeaFxQV zdBiH^!3TGP^cfl)q*C#*3jK(cg!!c@_U(O`m1c|S$pb7;?I(>g6sm^4mERF|ctISw7(&ts45Vb7k2 zX*CuQXk^hx*cnk0=H^ckv(t~W>%Kb}?XM9hiaTz(ndRC2lpU}! z1Dgyioij>7;1LOTjj`Yb0(3;X+s3m2uY^*V_F2n9AxJSBkQjm2?(m#rHZj~+%}pyn zUQ{|cY~{1^E2r$5E| zb;rcjm6We432QN%*OxVCNdI#o>2XVY9>Vcq&+=xMS{Q7D*X-E$mcV$xqlBa-L#LW}IVJT>qL641$b5D;z=n#|8fz>` z5)ekuQfDzLHVly@aflVzIXgCuBg(!c6;)C+WEt(11#YX4oytA*&&G{oLo;ain?f^lgmJe zysfblYtTjm*Agxn0;AJw%s^ZVdXYxQEod!L_o_VitZfX|0ty9-qAMBc&sptC(^Dx& zmKuEXn_uH|pZg?_JhYz@8R^O-&pdr2CvBO)_dR+&=r1}X^&(Lkqm?4I@-s;qeCCt5A5JsM1K znb9N`;5cAQ3Q3WL=3$=ojI%lQ#I1O~2R*}(q+r^DlO$nzrNKiFKE$U#{`XjkVC>j2 znq<^Hi<3{;#KhGBkqYto6pOY0IsmJz5#I z?;15OZ?#<|`AOR)O1ebR63TINLoGq1HBnFFIS%JP>r6JSA4f{d6c*@_Wri`GrYR3T zvX^gt_3M1+#&0vVJjL-RY%>K#KOh+1KpBs@sabqK;NbK;AN`AulEo2k{^hp=@YSz< zg|A-yb;|W38`n<|cmb;hf7;T-Ix~$U(%?I(QXoNQ38;h+2z=9?dDoq{(+PhCS*egj zF=&mH634O#+igDccYnq4o7S^&!zLWZrGTQ{Spg!}4_5IViSB_bS63h?ls$TY?rB=B z7WeMBpHKhQ-?BV2%?aB!;JPU~ZD8fB_eb|UjMgv1vIJ?W*tP3^0Bjr5v`w0tF`!gt z)$Naqb|2P;5PR1O2rMqEKLTph{00HhQnuBkXp0aQCBp zpLn}}PBY}znE zEpSLh8(ce|he0~F8624lnGaf{bZl<2RSiG^jCp`nqL$|P z3r^(4FMK|O{r&m(-Gg4w0Li*X6va#(p61J6{tAEpx1V4oUMA=Zxb27c;(DKA=)Lb| z%dwkqJ(sN;NBPkEe-%gCNGT~43Zz-W{L%{F`p(rXHl;wG5Z^Za;MS+EjNNE%8Zv@|X2Yp|(A2-l1`GU7-xGj|ZDZ1LWA zzK<(jaw(;vPnKy^)}zsB<64rEXVYr7*?I4e`S{2FoaWR4CN>VSxY%WRVVRHoDciShW~kneEldGpa(0%_e(6f$IA+sC4KPek zEd-!QG^E{#zG?|qSR{bw)$odfAKY>$JMQ1jBM&}^5-t;En_+*DOI~#muY2W-8LIbD z$mcAj6s<;s*8D6RM@A@m4h3PV#9FnvRgfM**|{E(abeR#b}~ zf#)zawLoXKO(R}meA`Ce`R?E6h0l97^=c8zDi9|LkM7;am7n@&mX9njIy%f?wSv^9 z!^zI2Y*L*AqM}f+97jl%@}G@=E!gw_O7zx#Jnd)v`=8tUcOM1lX-!|PpWAf=7jgat7co3CN*pIV@Zc^Ud3Y}eC#Tr8>mk+;9*fYDFa7fu`SRzkB8pN}8Zsyy zA_`cY0uSzdkeR6|1_o-ZtTc&*(GYDlS{!POCv{d4-voS?1>EX?2=tE5I)XxVDAXnl$ZEt^`C*jirT{n{T|A$M?)5fZ5q; zqR7MZMzJ%;B`A-fUHBtgi; z=!gM{aaO`fD{dte>D# zsuJdGl7zKJ#qOI{OUz`}#>@MVe?zr6Plab-Gc+yof9{WiKGlVehoQ^BlI5CQ9%y8EoH*>=F6B+0q z#`6QBFy!E&{S-@O#>dxVc|H~y>-sbLooSk*HJ0aA`0-u0^89npr&KJ_>-EUACW&L_ zm*%-+$B+2jm0#rMYpw%e)20b(1K}wJL*%@XJPcb`nm@j_ytK53qZ3N|j{{A|43bL7?J+Qri zKB?&@UD}~wIRX!;dLCUzt^tTbgUYqoM8_~Mog5g}Lge=@JihM$4?nbviSaQ?#Zo@w z_0T;{H|p}x?uYrOfBHvu?zkHtn__j4xlGVmY4N>lzr%B$cM%sp>s)Lp4QSWX=$>8! zexzm7qsM{62YCGOgJ3NqoH5WwGf*jwz%Xn=UjK-ygz&1u3;3)i*tgj&<-gv`$^@ZbZxx%ZxXx#N!8d0^+mY}~kozL5%t7pGX7 zJH&$zJ;26w6BL60on^E-ZQ7kSS(-Axw8S^R{!PAf^)<}SO;hO$@T!FzuyH}hK$hzb z=4(gJ;uFHopQlat1!nD$!lu+;AyO%%%DhkhyeJNt+PjOF#Xin`niL1W}8{r52z4(pR|drXS!4 z$=uQsX{cGhZUWCM8ePZLUeZ*N;Gl(vAVrH5fk0{-jlgys9IYuw5!Gsm$%9XD?RUS; zx#vBbM<0EZ1M~YC9UY`(7nxsPWY?}8eDqKMm^Z)mZEW7Mm4&$}$P^HB_wC=O|3$Av zSduKujo~a)7|JqDyVc;XJ8t4L|MWTb?cK%j=m5o94Q*+{G@(+jQfka`(@od#>Q}v# zV>WH!@xA-lvEwd+KvJnxNYh;W5sgxjDIho=+Ln+CM1m3J6e(*^oWRWaiKeV=cHH>` zCJ(%Z{!>n-APNWyAS`;B;>heAU;obcxawQq=8=aV#2MW{;0;jn1C*MjJ>SB!1wDEc zdYZ7)WY^C7dFY}0x$(vu`0;)BQZ3afI<}d(tS-J=MPs2I!yGk?SV^iCDot}nwaB}( zSCMyCy@1wG1+5LET(HWZ6*$_)^_p1G3@e={m_9N|sT3fDAXN&TW!RP^NfUm&<8Hq8 z_0Mt5cfUs~Y_a9U4vobo_3QL_SEL-3>W-jRUG?~h1Hk&;1=;M6(s;_g+_1DpeA_n`18K_lIS`j4? zQ`3hDTPv(AFY)k0Q+)5H>$(1hn+V$-Ce}~jI03q=a%N>0kVtZqz|hQ7o~-8UXiS1$ zo!(Yw2ZUBwIB0C7HgmbsDPZ()g@A?*v1s9B9_OF7g=*Qs%E94GXSjBeBu<&1o8$Y} z|A0?@@)N8q&M`DJhHwk?Syi;{u;admc*pyGhxfhx?VNMwnGBRm^cQ`?PMi7JN%kE) zz-K>qCHo&g$VgBojv_pxaR4gUfE5P9RhUAFy(%4`G$>6GNs)|Jv`n_L%gUZ z^!>H7?$JZ*jApCJk9Xe5HP?NcLx*Rm_YE>sA3`V)j_DY19aDI`>-IaCdCjXC8y_c4 zQg-gTk9|)(L8;WoU|$Wg7Kw`JbeHi^$vn+K(SUsNC%}mhT$8x@R1;l%tfNILYzb*&b6lht@tTm^1p|8A^SSpNs&uO}upykpCj zZ3toXB`r&mrU{)+XdH=^B90T1BxQDXk#>8AAaL2X?L_+es&rc|5|yB|AWbz^)J>_lW~3V2|-c&;W2 zL+F9!*a*wU&O5m>+c*tpSq8Zu{F4fWCW*C;qY+^gV%rv;T_%bWx?ySzcgj8%MrShZ z#ik7zh{6<|WY`X1Ti6y@!XwiWQPje=ZEVLQjv~5Ihcq#6p*E?UX7-JVz2ZC03eC6g`Jd7&1LOjUyZ!AxLt-Y}2vpXf>C( z`|h0-ivfd!LwKH#CylOVm>4ZSDNIYeP6UQhC0JEb6Bst37P*$1&RgnMX>sJ2N1Oc5 zm{3TPC}F8R3kCBX?AteqiXjLBs7x#kkUhIi4Y-5DWW7KRxMgf&D@woGEyH0QW~ul%Eb{*I^`K${M_?VX_srS{T`G1 z4-#2|`PK?WugD48ws78g=Tq;mGe3WX$M!zXop=0*$^H8PMPId#O0hz*R-~`oheYHu z4Mr3bXrYN!f~z2GwP~(2SU*0>i(h>?C!BgB zS*Oe12OiF;+L;t_wEPjb~}V|hx*_s{rv+}OCG}ZQP@ZczUyH-Hd^;sX*5`AwJ0Fy35}(p zD!rU3s*sLGNKGeFBtS6;2wVq*MH0s}7MBQH4XULoC!cTvXP^5lPC4x~Yyl5FbU)w! z{`GwCd)E`kuxZ-{`f39RA?PMu!gfeE>=3m(oUrwHMg~S`tC%qBVxtk3!1n@%hKE>b zEOF@2VcM+@1q=M3iX%J{AXEwuftQ<5s8cPx+s~@T3Kds zWtsKs#(D0=&*j2rUcg{|kd@{NH(Y-+H{X0Kdmn$Cb`((x0{Z&;7^>E(mOK_0=2&Vs z*|=pr=bZfvHf`8Mv$?`UyLYkY(L=P7E{lytj?5ha4WlC)7#kfzX+Q{5= zr7xsht}-<<$jxs zf)lr&j7~drqDA)Y-_12wU&p<7KZ@{TDz!46SH=?-p7fZVn`g_hTR82sGugOtJuA&+ zzWFcL@c5p`Nu!7?%c$3D3=R$wluKx(DS95l_33s~A^_LL5sE17B9z9_tQ9-7deW{# zI1((wQ%t%MI#M7!1P+jx`CU5ZwL;NenJ2^J*v;EG@BC*IcvTJ_I>>UPiB8+Bw3c{c z-#+&3-3?eAw`~h0ZxE#fD(P@=`f(N(kFf2y6L{7cXRvw01jS;ROhY5?Fg-iV&K(c) z*aQ2aY%w%3iYp`qDX`bfmsaQH1VMrjo?(XyWmtAvf-t(Bs{pS6v|Kf7(xB6PyxGhx zOtW!hjMrWMI-dE=^OzVOBTF+LeCPpg`oYcY*tvs!k3K>NsPzv~^o^#x;|dlRmr2uv zbrYl1$^$H{beNrG%*Kx)fr!hL*4=6ev#gUnL9@_Ib zD~&crmjXQL8n|6cY{$a^B$^25YE4gTECfYi3a46#9KcTKcA890Epg$6&*t5~^B%Tr z-fX%C(gc+z%pRHL)?04mh8ust z$;oLx_rLtgUoOL^N{e~mDS_=kV~ zH22+g4Po^0PC9-Yp69SKw@kaa%wtoB zIOp7R__Ggvkc|`T>2x}L=R4oxLm&DJW@aWS1$~TY;T^v$+TYihe+r zf#dj;$^iwTNg_xs7b}e*ixIYqZCiwKYV_j(GO%ocZJ9=^4C5M{L@7m203lIin%8^1 zG~amJ`SUYuTTrkpdOg#YxXM1T1Z4R}&k{C?jtRRFNQtrHD8oMiSu?xBw|B z8q2eD7hR2&+6X+1LcGyVHG2b1+yh%@1fC68q*;b-+ejget33&kmL@sU5Nm}kG`192 zA|WB7pd4Du9hzasfLX1EK~tX+0|UdjEJ(-7_T@*3TV(dI~H)YX?s?>16T-=rw@6O zB&7j|qom8i;t^Jsn?zyDh_65OJo?5M94Vu9L=f~-sgyt)AYEx#SZc7cI7Lvjsn}W_;EZvX6(ms$Qk#P1VXw7mnlB`Y612_`mPJ8GY)j_AY7WNdPnL4+7sHrS zZK6&KjnTquE-tY&e}r0nfK3~>u+m)Nkw+d`JEzg%KI-KXDFVA(1}t0$8qF1E=NBp4 zHfgIxrWJ7pVGILf1K3`Lf>&j*DDl>M=LAY6XdMHlJ#uYao6-Ve)f7zUU5PjGvPL&dnLIQ_W4ZBD&vT{A$oL4w zat+&Z5JDO~yL_{4T1wTEY`)e1KNU#8Ar^`pegJJ6HVc@3Vj%@tVxT)qX?mHW9YrMJ z3M-u!mghkf5jKo5L*PnWuSls<5hvm(i zc`+f;nm|fa6mocafti`bHA9c5M&IxNm2!oFzCOcp(dsAeiG{^E4nBVH-@Trtfq+Ue zpjI2AULQ1{A4eb^A~aIxaOf%+j|12sQj9jA`Rm#Rl=*X&gTy5fEu4}uom*L6CX8cd z7Z-_-{G_&+bX|&Nk6OJ(e{BHI^Nb!qs!7@*v5si8R+yWcA%2Qq3V<6(G8=03Iz#m_ ze6IpI6Hn&M)<_w!-PatJp2gzg zGLwfVX+;sWT7@J{AP3fyETmRxRVc)wcj-&FmMR0_2GC9j_uF-J64*f*+jpo0MS^nCv|+B@ZcWR1&kYvdrxK3MU+Y0XNju1yFW5Xkya>^;h zY09Gy>?Y|XXpxX+ZK4=DO@-q~%C#!4Yv<$3K}vy26iRhztVArYba1=^o)b_mRVmj> z6de!CmbAM|BqS^@EYoQ=>95zZY@4N}2GdiMpd@3X8yOs_BZY&I3a=fHI`TlwPW|A|JUfg35b&Q|4 z%`_T~oN*?ISHmS}X?}>=w6iYy)d-PIma+fqBwTmRe!_g^$ZIh-MNt#l?F#l{} zk?NE6o>8zm%hjO}>@zR@S^qH!IG1|qGoghU{*3GqZmm{?>&8UQU$aEm3vM59|>M3|7| znU}N$SQbOo3Z7?}YOBD@8VI8R5>grCJ4H+@W6m;E(CUPc#Z zleHv8N}oh!BvBis6j_#n&hY)x8sH{`BvLB>T^Xi?6vRZRvFY#cCrLWY&CL?UFD;!Un#0%qpuAZW$ z<_Jk56m1l?247$_dNpKPp|v7Y5?e?tM`8(=C~43P7tmo!mS)%p9NWjT1%YP@IKJ=W zI36lWzyU2K-6$mLgv3$Aa&v|DLIa7UK31n(t5GahkiwxIHn4=Iudj}djTV~pi|BkF zaD02sxJ&mmQ8zMrw`oS3Pk6{3M0p%$#h05j96Tpr{dHpm-|Sw zHq~li*gWL&1j?9_NXJ2nfcYa$;yA)~q1y=!v&*uOmQ5y7urtbDkxH?O<4CklKuCNc ziGfHZ2&IgHxOM;+A+j7fP&xRKpNBRkPH1yqgGt^cP;`8h)^wB9Xhf@sMi|j*wtya9 z#izg0XEcdD2j7#1RfnRhB}%&poe@O|ooIzLZjh$nl{{=bY+N!2Qb$ns`f!B12J{PI z3J0dkSwooMDbS9S16l&db+J&yX=-3OTcXmKL?s9%QC;v{(^@KoIWAL75-heO7F#XC zutVBQaHUyyE2S#6S_$EJXf4(>bsg7511dIc;*RZ-#9cGjxh|^P#S;?W_i=5TcGx!a zg}GB8XN3!443Adj4b0ar^5b`j(k@CVf}C-wg~-8cW%dJ(2e!b;T!=IZqsJ<>jZ!g6 zCpdvbpm8v6<%!mWtrlr7#V**ykv2-)fk)A`sY(~WTqRBg5F;!Bsg1zS-NYdwL}6Hm zjud#ZY;Kp_7)z_zXkH0H-gCZoURr6C(0MO6U`wR1&~cV~1m#-ON)t9(gso+CrpXZ4 zwolOu@Jp_lZ-hkT^+Rc!Hu3i2GGUZqS>}PB5Cpb|=lBR|*3gKQF5oM0a#pJl5+|^* zeZz9|-6BrOK}&56B7GmvbJ41Y#z;@HB)B_+%EwUFo-5{(l$rs$Ca zfdYY&pe$ImlGJ%of6b_kCqt>!yjDPf#K$5BeN`u9v zMbadu=$COk2iLZ-g8-*grsO*qpEt7(NS%Y3x&CPwCB(@puU!CU9rOHvQV<|)8!ZHy z)U5xRKv-tZQGk~j{q$^A3m>qhz%JNiQEc`JHpFql@=}xKrFp_6C57Nhu4ZM5HamVBPE?L&4Qt2m2 z658!HVLnM4c3>ANEz>Teh1sa&kwg)eWsw45)WdZh&?%i(L;->2S=gCCq#7%*$mr!@ zQ%0gtWkwsZG;WN6|Fj zkZS}9F%~MbkU%#zj7QJ1(N=2Mk674QM(9{1xn!6WHdqD7dS+u~0iu9K&j74o+@W;- zpuKv&2CqUCOgot{iGi>!NFj|gG!{vML6NPTNorYm*mxqqD>}w}VNLE*K84W$!ZQg4 z>M2YHKuZtdmr$grP8Y}bacrA*yG@G57ZM#tNXL27Ay{i7owtxlCvO{zFdd7g8tyrs zVX#J;Os81FFh8TDgCkv}bm%4>P~c)4XKNe-v}t8rxrLiwCqa(Fp)tUgaLn1MP~*u8 zN<=8J3VsP3Pk>5reFwivOOAT+Z{7E;lYa(`pB6>>i~p64fw9HhF>}vEOvS!YLC*oxBCxuoAV9L{Wqk;wK~lbfWT9 zHbLkZC4CYhky_&j!+cdb#qi1{8pF_91GaOGU*qCyTB6MuFgt1u=tMnvFXZ2w5|Ajv zeo9q}FO2S7q9deJ$eFq3(s{?T}#M*#gxy$#=O@!uA}}B%vF}Byqe}q%xoT zZ3WPRoK0)kga%kOYm&5OKBi48u1I0kX%2qovhJ1F~Be$Dlvau zy5Qlop|mkYa-@Uw0)*v&=mKfZvV}~!Ms!JN zGTp~#DS6jf_PFz~mx+>RakhrNBjPr9sgIVbkhOb7$c3F{CU$7s*txV9uxncKe80PMA_ z@f*j>X>a@6XjNd&IdZ+XuDZ51ODBabdF5RUBU z!Vm^N|8t+`vp@S2{15--f93wa^@sjD|H^*9|3CHXT=i*w`t8B&|FFNUKKdW0f5`{_ zar*n}!8`fjOCNF`A3WLRr6bDq<0t&h|MWlQ&-}SR#lGIyKKo^P4UoQWuiI~+_S&TB zb^ExtnsY{rQc+SWjcr$#faauE7%0U81JhZGlyV@eBNMpaWe$^VNNZLc6+LDP531v! z_b3V3$+8JEkjcVcX9e+8GGPq3I-=#8N~P>z%J&>lw%dVm7~2Eg3~Yws(oC8VvMO^< zNR5ncO_e>h?wJ(s(!@ShF2*YYft*LC?08XI$$yCKT_99t+7)Idyt5LRjSG+|GcWl~{#8M%mx zriA#&W;EcyK&*t~iPAt!l-SrYMGYt-B}S<{S`X|+DZ2wcDlrvvFpUj5oF;PHq=x7j zHQJao_L0X!0+k3;VZST*VPy0tNB6h^FPFCAErqoNGlH90NZvB9$0(N9W%8k8}U{mw!b$9RopOcwiKxx(heuybPx&nl3Alvok$u{qtW1- zWI`XGM_1Q?^)qyhzTP@Z(Msyg#G#e6dqE`NRnZcW6iH$wgB#yWiwk6(5%FC3$A|{f z9*~UqOg5WkiZn(mBg3#o1>(ge5)xB3;9AOT3`Gn?FC{@78wf7Tcz0<71xgXnffzlb zc#JG$CHB!0f-{NT|!k+Q&g!28PKcuy_?q8&?EGjU*U+OfWYc1e}!J(3b0 zxQGz}QZA-bI0!{Ohl6JjfoO%D=r-P+O*jqc@J;5`J$Fc(FNal%fn??Rch-Ho(j``D5b9VGB*fJtZ2gbb!%TC$y2 zvZbEbfh&8AkP8Igjc_XB8weW|=EjN+LJ?T&KrPCovzgurh~^f|_h+8n5zz&73=K%= zHgc7sx0FU zqpgWOVZ;Y?1*mIlbOWqtTCz@zaay}cSl7liK$olrf&@>V=Ju>@z%Z7e*{iqYmKrxu zI^$kp(##~_H6c?%qh}u)h$b^IFc8@c1EcdzR~+V)DCt0E$AJtp_(QN$3lPM^3UWQP zQuHmZSsqsHAo`&XB7)+`)X)t}s;%ijtutx1^*6*o)Y?FBVV;$FzNO!=HeVD8W)f!^ zV(X7uGbI8mKO4N@%ijZk-B#w6(lwgB#nvKvZmOuu3DP zw$gi(-w-cEiOc*fWXQ+%n>)ipI*4m6Nd{-2`+@-5L~7G|rs(06cUJK2KJY4}qRbSA z{v4w11v)rNY2YZxa(<@yT@DXX8ZD(w*qBy5K-u9WAY$OCG5<$ONlYohD8zAtSzHOeC|WY(xaNL3fGSTv z@m6D%8*pB{Fkg-YHT@Kkv5kX*FT|F7x9zbdWQEwC&C-?*?OkX6k`y1e45Q;vCQ2zh ze)@>RVPcvlHk<9KQYnV^{84N>ENnIdr9c*;Y9{((>qdFWW*r&Um(&~(-5^rfO*=@H z?PkjXvHRHraYo9Ty9t68;uxD}s4|F2pj16_j4RVgI2vID;Og?4r*A!#_3mV(^`LzX z&drCwoWH#GtK#vn*5Bga{0o1MyXl5;8_82kE`3ycaDV^CZ6AYE zeBEBRUv_&9kiKpo_omycE5^;1AV7@G;D}aIH)F2$7NF2r6s0KhTyPH78wh?&48kUO zD#~6J@~7BtuRxWY3&@OQ_ zr5z1vWZElUY_n}l9B;u-V}Af-0mKtLi@8y4lnm9T%9Re_Jq6EHc8Dg%c+r3_WBLR? zuw8G7??R?1nd^v*OD4JhtGfN#{$0?lB_Bhk0_EMcIrtHd{@G+DqTRdZPP zVtSCJzu&gT&{)mtJz33tSbP>;~goh$5&NNU516d0&{caLyO`aAx{>f->0o=Gs75gV>8G zh18B|=aP#7{T@h%3D`IGkiEx_8$m4KFR42?H-1~q6a=kGY|<6$Fu*0Y_B57K(PGt# zdeZ7EDUrm=?X{J8YPR=WOEalC0|pk2z<$ie;xTfwKzD%E+SU{+m+qippYcUH6w`qa zj6sSJosiVlAmfO_=@fLi=bBVOhXUWuHukU*(cg4)cDv}$`Ux(3(*on@+u$^fx35libF zj+n@U_0hC90LefC-^zCT7^k)#>}=*r#LGZx&gKhayMsu}z3Gh|pIhKgAOtgHnR7J| z@_ZbGjvV4;1tFl>&MOQnMAxKw0Om8G_Z*Qt>!V(p+>PCGvGZ(y6K7HZB_-~6J1ZJU z1#-r`Q;fN5Yr$Z^N@=>u$XOqq0H_b1L@Qgbxd9%g{mL>sd;|Sl17j;TK)qF_U4oR1 z^*gR@9mCda5G%t*s2p$&MD93KQe_sXrQnJh<12z{LaO3jw0^+jWzDc%8xWil`;?e- zCTm3~NS;tUMFdU7;hL6f7v z?%91xrrQ}~TlaKfMkbUj%Fvz|{rN7-DOz82`IOCO)9y>V|5cSJk$pbXnGK*Cel6=5w`eoc`|PNy|E&CLqYw}htl(Q#*3Sl@58eo!Sh)_x2DQHa|$$cl8BXpkpK)sp*t zEan2%me7(weF}@BI<;qdY)Q@rl%DT>2PMmnG8H@{FL!$m0^4yU zO}5{QF<3PZX0Ew0!vRuJ;u??x``u*shEA3o&%(@%RW%e+nplrpN->kQAcFIeoC?R{ zx!8=ju`x&02mKR&9CTqABR?{&0hF*d)+?X z?KMF9x_#W6j^luHj>BP(NMY`}X8r=O2auJG?3>KR zH@Ugl;oZP$<=IU;=6T|NKOrbrn*m*|NK~{|#=&v@=n61hw0S!4{MilD@xX@1_qUnmlionssDmpI43ob7%S;>n1VaKrE^7!#1h8PJ$;O^xufBpad zAMn@yy?>u+zcXMd6;xs?>9ft>TnZ|Mq7hY35Fr4wz&**zQntNZ+#GOenextHtQ4wR z*^%Lxt%RqSX)8ANrBFo4egcw#>K5%%BqCfetAWi1j_TQVrJ)7ABvwx#1Cf`cN4S+MPK{)|s_Hm?{xST7O`3}6DmHkF<0EHU$ ziqtgRd~AJ@dH^g?4sA?N!A8SR&VVO_G*t~K6cIK=e33@{(DohjAgEdx>8N0`f;I|bP7^(DAA0G8fI(t@ovM;2dmb0ca2n1OMoFbh*- zeOoS|dAg?w)sZUF3jRY&C{Q?S$K*jUz-pN@v>?|Cb-fQHAeC&)*65a!T(34aixhmP?$ZNu zV+X5x7ACC}4#n2dC`!r)w2!FjvIZ2)RXa#wl);Qi$_&`|XEK_h>xX)Y?flz%<$YtN znszYm*eW|3U{aN$je#Tz?An~+L0kGmPrr*c4N@$zV&(FJXk~wQi&LmGXld)Cwj_qP z?=l$!TGERJ)bG!Og#g!2txc)E*epfg%aBUPpzNnuseZo{=Nx`*)hxv;qWSE&_T5P{ zB7u++QWVB5RQtRy`mwGy3z493E1eJX)w z>}c0iN=x{0N?M%el9EztbEtrh`38eUY8J z;pQDwPWEh&k&kL=S8Y$|H*D7)0%~0vmp$@R9JK-dLwZF z?C*E0X+OKe;UtCjacxIcuCA~6p}+fg_)~xCkMrL1FEfM>fnVweUwYkMx7Y3eH|;e* z`nrAGn;xb+4)u8}`2;YAXlc57sx(%aKhuT+W#EW#r^0vt)8E4%`UAh0^?KmN%RBDo z15yjCTuH}Do--V+90efdOwl78mDNgs6(v`WK&@snvRWNE9t)|w$%+-5VWiZ=^ZSJA zb0q8tn~_yxWms)*reXojYN&)wVxB;=@aB_G@NNIZXBa{xPl=Qg^I<}dl_4m8z2bN^ z@R>K>z=ffe_SP0N3dfaVr+g%p#O~fQ$B!R9A~Zdsi|rLFSy4(wOGWia2xjV`#~$>r zSjh_KJl=UyF1(DwcD?24<4ZQ{5g!6iE;szP@A|F$-~P}47oI))0^{bBM1;HD3q+2D zVMGt$0=U>p;mc`nYc^L+Z?2{Bjp1qmWNyHa6K#ch25OzVW6QGn7wccqWrMG3vW=vf;ro>bZL=keabF3s* z3r)?UsB>+?(*G}6&|vJ5cnb8zKq@Kiip9XMuC>@((TWtS*YUnC0NDxftqlius2)s* z5o4_xsMgBCXZuWS8dj)j#g(>`cRGQNK(qjSVRjl|1*tLn?04_SrLTHWpTvOketsP$ zv@?iAZ@|_9mYt0|s*D{Jg~gebYy%;5lM&OS?5xvM@!8MeKf3OvZyg zmarVFw&OYxN(?PHKC!6n$~`69JwS`kYEfJZ8a)sTq`L$69>&dob%!;0O`TjIgn z_x1JI*o4MRH8Z5f5EdF>xHa}=)AD^dR;Q*4xlB~Ggo`hc5)B+h=|!X%>elb0+yJ_kN{>c2{X7ibGcIP_><_4~81$iq5$WmtTN@qKR>9 z0L*l-b+0(=o?Fh}?y2re->U#RzyX{9`aZnU!M@X+?Pa3k1KSXYSxF{kX&EZ56c3YE zO7U$hnoefx2V-Kh7@qYxHHazYn%R}jE8omsL`UcVWShR~GgF)A#)t+@ecGQx)3VH& zAq=R_Xqq{cMH_&U-7-c!eMCEh({Vn!$yxs(g5->ZVBegx>2J5a1#}%kfBJWuLxycM zAWE}=Vb*bH^Q_SC*9k6+wb&V+x?h!tQV|;4BxAYTCXDieyv{Ff|5!Jgpw0 z1xZji7*p=N&-=5k%W?PMMm~9^MkPd(A}FQO?tu2(FnwwJ?)LmfP@PPM zM=K)3gCvJ(13m1YvmMdt`EvG=x}Ik*BeIX5x+*~TXMMtJYnr&hUu;#TfvW|X^zL1j1giq*@Kiy1F&0C{B(NDJTU#! zR>=ZP$$t7MO>IP2$H3ZMakIPO%U}KymzR&ZxOmL|{tho5A6umjmMlCa8auS&*xG3QokduClgT(tlgSLU<=IS7jhq3H zYoTbBS|5)2tL^xazx>8%$K#R9%Pao=kNkc9^q>FZ-0Yqa$6={-{Ku=Eo>#Bi>-KSP zuL086?c?4QBATq!6)+Z$&kOj_1IUvun*mxgJ7yAc>-dSk{rC9FcYiN$e)3J;{pve> z_H#eS&HK--Y;I+mUq>yZl+h!|s+G}YWuFe*9_~0CDx-IVA>dcug6|#xwaxc_y5}oj z_zEv?C)hYO( zgDe2x^>)Mf=mHr9-zWfD74L*;o_PQHGoC%WVTI?dH=oi0mABt~o3L4vr^#GT%Y^t1 z3~RI`b~|%l9^x7w0x4(qyL(bjJbLmL-~27##@B!9lZ@Ln?|t>F{3rj>f54r-z-=AR zpTEoHW?&dc8#bMZgOz;y%MIkfw9gh5w~@7te=k8hFDEpRO=)Zg>1+tgZr9R4({>DP z21YbS#?SzR6V_!60%#jLfvn9%boojPEr(WSucXu79V-Ky#em&&ijs;k6P!XomhZ`G zdR$JYb_`jrxi;#?iRncPDEoVQ&}c!qGyu6YS1sSlwO`#_tM(E)SgYc-b24rGJET?` zz_{@vNkJGuGQR0)(Q!eq+%VM%sx^s?4en zm^z5Wz~>I(}F51Qc8F80>SZlrvCe`6>?wQHD}l*>=+qg~sfNc(#~f zSzA}y_oWt$#v$OVnX@baXP>qrO90egPi1}ps5c4~9%q_#eQcI7Ez9v1jstDuMKwLZ!N9^%4AAWo4oQVj%L!1A z11Zsr9TdUzP63L}OMhz9?KLKB19=sqnnSimwX#Tsbqn-LyVgM>#LEo}&Y4#j3b|*-~Hx*yCX*sqt&w@Xi799uE74@M>E0hIN$IQy? zJ5>#!DwFB&jszxlw&v)FCoW(YoI_|VYmX+okIw;~4w9XM{nPbkHQ>#626r3xe(7Eu z1{P%6Oa}%wB6y7DYl~_-FBPN+L{Qh)=MLZWAiUi#-T;}Yn1-p1XI=vKqLq}CBE}*d zY1IzSQAJ2hjbU|e$W#|F&|Yw$!S34!rRgBAt}UG@*Ve97%CcG3R18h?vXrii@4#zg zbq3JfSifG(fxge5eh)?~QMYdH!07pU5>Yi~^ODq~uV-xyElpBG>-i(cz_=(#^Y!+a z)?pDLs^eNhs~c##*R8~P-_D~K4EPur@eB@}c;qO|6ehJ}+8b+QMjIoq=tS`b?2UN5 zZa9_4S4@}1?oDm?O=pXGe`5dl=KXoqPXq8&5kI0j8vDO#C6{u5I5a61A!#)LsIe8L zEs`gr$P-gfydq+IiYXP!UKo?NHQ}sp8(+FxkfBw6KRk5m;@O^;JbB6`ne(-KXnRcB!Lc-Ia- zJsXX+Z4yQ89#PXkZ`%aAsapGiC0GTaG_6dR^B%D^ zw2gD&j16i84^g{Sh%6Ej27C*Y5k#5#!*^rr$bo`W+h52a)Sy`H+a-4tV``2{k%@yE zIbgHiwC7ZNUbX%AdGc2TGY+eck%(8<%I=l@?HyW;MQsVbQ^ijfv9(r`mEO0tk5ahw zLL5A0u80n3Rc7a@baN-IT8~xr*BABthiNB#JSvx$m;Cro{0M*UFZ^rV?{3&^#s`4% z>-M_6Zoe_xYk>51`?$BtQBXF(u>ml~LMVsE<{0|sh8B=0hxtIQm5`x^%1?amNBB#B z=`XU5*L>;SukZ_B{UYi9j*ySs&+`JLtQ4FRDjALrw-OkgImPD6Y8(l{{;kzfsT_4i zr4U&WTmW&+P({cU!pgvmc|TE7WtB5kpF=+4(uyz!=Jb*u|H&Wa@Bida!Et8F6XZ+? zrZYJ0CRmwktaFaxVnc|*OcgAKF++?fG@XNArsnND?>Ya&{(SfP-Rr)t#p`laF2pBc?b!YGwmW+5UDztZQXEuE-dAL`(?h>& zl-V3qq^0pPkGhz2L4&UP!jh(aA%*_@9TsXIutfB~nE#eAj+9Fef4Gu6H7pkmluccF zkVdPzJzS2FZ)SrK4w;A3T-nxE6skBEQ^j_!nqDh%cM*~>!L384d2woVn!3!IlRt=fS`@J zd6oDFC53i)5^H=sD|A^O!1Yz_kukYg`F`ri;6gLV_hLI}H;+L)cwk49*D!9$ZBBh? zP7_MUMu`LByLi$qRZBSmSS$ec%<3WGET8o`ba+GGx<#n~@DM%KBK$e402lVfI^#v$ zreYa@yEZPo&{#6GyH_LZt&pnVuo*QM{#rB`N0EVeK^p2$wm7Pl<1PL}>cXq#iLg7% zKa0JWO<-xBOa_NdIh>DpJA1{*xm<97yR~tylZgQ!#@TTr%}4zTnUx#6luqy=_cfiX zX~Bcfezy~eQ@^SRHj}aKUYxg$X!fH?jhw!AUwJ50pGh8G2sfL3W3pt5M8 zU9b@h*^G|nDQXYgEy07sG(@cohBedLGU&-=R zF}CsGjDzEkn+;Nu;AT<#pxfi6ZX8oW{5DOx^*+<(!Q>#e7NE6mI8ljf-xKHTMu$H# zW%TXatY=Eos7kN4`VFFJDb-}UDxcYo*H(#5u`Y`4e5VvCZ#?G~2YkmC2@&l@N6cG+ z6IEUns?yo>;1g+yn5xG z#xiUtL}mLILkdm{c;4QI7IVDXefVgjzSnomcL&^Vt9g}0(32&BLYnWr!L^YfNqM`5 z$|8ocP7{n1y`qEx>PgE#UaL-?5id5&VoUvG$w4Z1sk}AVkuD_RSg=M=%E5LkDp`0q)zx+h+c4NDCx!I_BMoq{c3TitnSC zd>&8b4-2`9#Aa>NtyVb#4RPp0oxpzEtv%6VrR~;aI|epyau{An2E<*hpVW zOy6`Bl!+mQJ3J%$9bY6lu&nt)zLX3Zo)o>h)0q>a6HUL*qKAfpUpX~av)$30J~)?k z)gz9?I&5z;Nrg$$@CS>3_OY?q9?_o~yQf}#rFV@g#-}Rip$IVGLL|v(%%D13XzIBn z;M_n3Lu=0%*DH=Y;HB72Gn1dIQCWw&K}%f+nOdVL?C8DJ=5PJdZ?zR4*?Vh;uOe}L zZ^i%iq+c8Vt>l|;^co8}%A9|febw5G5J~$_1mf}jX#d}d+Wna5a6|2nJtA>s>K}9n zSUWc-WYkejehD%P!tEqNQM=>ycb1n+k@tV*8@p&y90cPS1q1_o6}H*M6%x>2-4O-2 zwUQ(@Na`PBt?=r(2(fH^Xl3J^%gG45UVTx6!(;Ws)*i5g8uPCD!BK)-ZqQnARaZC9 z3g_XSoM`%W4F!T|^wYUTE{XcaMpg?SNJ)|MvbGz^ER`zn|B!LX4CKf&rl#$Of%t7EJ~% z^%O^bzU5v39d2}{loscZGkNcS<=gS=)p^%F{9C?Kru`_=3;ZV%NrUEdD{70@a2Uy*xf}N zyZ%V59_S1ZdF&4oqBdGdG(B#$M%Zqi^#P;xJL$)RNp(rewAB=Su#u;8@^ud&A+Qb~CfHLB(0928J5eE*3U`G-lxX~eHb)-n}1bxmyI>Dd}% z$2c?o749@)|C(3=QJ%0kAVCavf>%I>UH3>i;Qpj#PYFWu+TN#zn zY+hJvv}1J>l^$=V;$*a$Ki#J-f1MNamiyU}81M4rS5M zW@WKIu#`CwqvW(XyDroznlXv{bg`AE{q4s!i?;XkqBMc{4JK#B!{PGsp`_eJb|7DmGAa8+C3h)$lT3K;JJ=yIK*y zj0r+JYOYFvav*~k!P)pAHACBLH9(Sh4EXrH%69R)OJ%-BcD(z!5-KDT4? znwBXpDU|B|u53xd9bvL$F6G6GGARMFsjT4nHHD~KY$2Wq23diHZbJSkh#Z`O>xW8k z3qimj<8>7-6~&m~%v$tw9*FTr0S~VuJL>apCwm*Kx0I1~9cv+B$!gnSMNF#BB7HJQ zo3IU$vt-F~@e1{zyyl1pp#~t}&p_iSfoj%`cusu*g5sM4aEe;+8`KZ0$c9z4zt}RG zV9bzMJ;*~fp`k*c0eF6TQ7ZB#M(`$tB;Ne+xDr5k5I}9l{FIUP&J>!tDz3SC#C?)o z!z#Xr7h1jMW?}+O4FNv2DlGR(KjekGcE&Sv0mL9JGl6d=fUteX9%* z*?sbA&s+;cnR^ej@r$whemWF_-2dj7URIzbx_0;=T9+6hn8gOYM(mEwFz*TxAJuLX zU5Ts4#m%V^R+h9ep`0U`i8;3rz1GnfU^VCS4T3i=GQI3aRa^qQ$rOc*6<8&0jHA{n zv|e!MN-KfrZ$&Q+CR*C4Qb2Zk(L|`0*b>1W1%#Se{IR9fL3El0&r=OnjIMYw_mdKg z?6+9eVlE0tQS%|cuzFS=t0%01dbUX9oxVSbseGGTa5YC;bsgBa3m{P&v1z=5Ik_{! zkquq0KITfc%r5?-Jkf{bN%kHkO+<-;RE3$SI$UhnDg%_7S*CC`!_&3_K6{k?Ch~H6NKZxmP4$iH7Q#x>+^sk*q)2E8ErbISQ3T^=w5$ zcnZdO6n>IHR=t5-Z?yDoBWAWV;6uvYIod6-Tk}n0KQ|IHOOr(jFk6g;h}0eOFc_B_@q~2wrvP?XdME+HpjNB=JK?^pt;k4LIpdnLxN4Iy)Zav+ z{mD7BHTY#g@e!jzbABH@Vt!G6ojf?PZ8gh$@XU0o*E>E@StB)w6DCR7d~s7cwJcT= zXXD{5%4Y>fTd3EMuYA$mqK}Z~9Tqoq+YDW%QB*cGOpuG)55$q&v$_K;&9|3!T&C2L z#a|^HDD9qP3um0?S4|_+GJE)_eS4NdNb;BwxVYx+VDku8%(hyL_5L$y{Tvbv4GP__V*9B}KEh4^w-iL*4)ncykM6^)IL6$V`U zz#Qj@Yss1p(VxL7EoRowdklSqXY4cSy!^ew@~M}v`Z~!@&^bBST&QAQEfZmjYY&g& zT^jU0caX-?WXA@Qi+9^HG4f6M(m7VbDosG3EjryN zh*63JW4C{eR`Tw})Q@Qwx8&lgXM7oKwc7R$5?X~s2q=PC`Xa67`42^6Ry|>2_$g%e z^RMz<`M-sK(N?XqZH7UadLJTX4sc-q8D|f-4FM&!o1@*8Zt=LG>;%8vdR&0lvHTYN z+I)YGm$_Uz*|?$hn%Q5BvlHD;QZD;Y1uwm2=~!p|x(Iy!o`ujlyZH_7JKKO=<;spX zy(53qN%#S^G8Z~Z6l$kH7^m-tJ9ytvKL20!UD6rRpqwiFU*JY!s zcn{jX7V^!g+>hMkEej|+k(@7y*W|T=&xJ>1c9tA}C#w32AXS%sz;KQrUWh5t zHSkK}xPzbhKa3QWJf4bB{%(k%>26aKV)Xz^qsp6ak-Z-MDuUHG2Bx=ZGvi7d=7d31#TS(_ZOgIz*dY1p{3+3eat#*edqlz z(}cB;YZ}R2u#=c|d+P?ahT&U0b?F>gv>X)9)Nn@}I0U8cu2vV%_cV2Q!i2Gjo#ccQ zNvDr8b0KcjwUzi}%V=yVa+e2tW}e9pi`|;3d$dz99Wre=qi^F=3LO-#!y7QJHpV8< zLu4}$Quzo})9#*}vQZ5q(o|R}+A3^9?7PEb8^N9u&>9hAp5U}2*BwwRiqA@oAU7ff zGyyblX5s`DlipsaR5mFf{ZvF$zmKctpS$3p{R)U1?};EFvb7IrH}h9+S=pv`s*=r3-_1aT?ei%g zhE$gm)~;1`?_s`R!9!QoE8Rdjp;imf1L9|sH74t;cb)) zL#XWeUwY19TkkLI%$@G-pIcu<8QVcTBt6F>pwMewf8%bQ#`LjV8h|RaGBZtk;g0g; z$K1>z_!`vYZQ1cw@EJ5JoF@yRN<4jaT{G|AT|Mfg0BY%Io$X9q<{>(NpbNpW{=i{zS1p+13V$3Pu66K51f zW zdQOtch?mjMSI?)b_5oa)bLah+r|)Fe_Wxjd7gruVotXG(KTsVUr8m7iWb-?Lw7S{) zNz*a96YN3p*Qd5RyBogyAEueGNahJHvYrC#Os9_2{$Ujhp=jB{b}3i$4aK#j3mA>h z&-Sfak%kLgh3_=HIsedb<*0d{&OGN0m0m2Ns}wOdc&I&O#}7j5?aFo4QuPt+aH1|0 zX|xayC=Nc@^K>yQO&d@g6yatt%oZv0F-lW4m{CU0GFFAn!%6_iPkhYF=Q;7o>dVKP5ZqM-pYbQ+6-KgN>zQlGpqAYa?U$} zXQ#l5i6mq$NfuDb?u4NCli>A;!0GO<^JsNi?Z1cB`JQ_;L6aDpVi!$|ox0ns*3pUGa!zg~Qa#0@vOVI+gn@%K~~*a1t1~@u|k?ViQ=z!Lbw?!x>nYgas)0beUQgY`_t6fm=0c;yuLjpqk$D=l~xT@$?2KX+Azzv+2`SGf%kRj z^y1KOA<+Tz0fsk{v#*M@htUiP`VG%)DO`J)qLgtqYiC?Xo zBCR1acAQtm*?K}|q9S6UvUmer5U|x0oKX1h++MhIM6hO(%O~ul&FVyi7XVxWgQv5V z&7^%{$~aQpop2 zAWTQo|J6W6%xTybI<0&8sxmmUchriUeZDjh;` zfOj|bi*%mn_tFE9V?u6I^ZSS)GLbf?4HQ;pu|c>RZ!|tsho}(d6M3k|V!$f$eyc~k z){0hWM}u6R&K@mvE^>CE23P6|3Q>V#oP|>_KqKlGiPm^kjL(vfPpbfd$jt0vtc{&r z%@402tNca}J}Cej9}$ZkfUTQHNTs>i$??8mHtqB8Wgo4$naK042-66}5i+Xp?#NhQ z;4M=Xy+2CAEdkVy1s@BYsxkP)mG{Q+@DhU2wC6(qS4hv0e2VMiklvX*;da|4p#mKwUHPkr|w7W1Y#jm5ydOVTOB86Z~uVlAKuKh zB*lH(F&VM8j1?I+qrQZ+Hd5xsxPsmh@~APtPl{=V%D-5#q)SEfHN*Rnlu^i2zUZ{5 z%zXt>KTzBQObrx%H2O+Xvv-qW{jNb4u?=pbVnK-lU6c!<4tRu(IA24Q9XDBWyfi&S z_;M1^Y9V!Q;{|=jGxh$aFHpFFC{{I{hr$F!i2(qp8jl@3cwG+&0ufS0D? zUKvfD_!A(*QhFVn-kR)G-(aMpL#iwF+Yl~r&(u$>GRLA=L=nTyjOfYbAwYmwa0+f> z>hMy&1t){BjA&84t-aHX`FW`t@uz%Z)Zv3LuL*yN<_<|efpdv4dNJq7Sv0*Sd9PuD zeRr`v&ygSq9xyO9G&D74EEm^PpBmpcLCF}6TYEZQM;%WwA7RN^Nb6Mql?9)TJ^;_- z_{El{2PfnOb+f8GGbnv`Ra6qZnwYFGMJW~D)z>Mz>m;q;-Z z2vS*Tk{uRn_g#~{3}CPQ0^Gxw$;wn}v)(H1uHsT};OZ>&ktT2-#sJY}y(D!wMkb-a zWNaM4O||8+-IUx%f_iC`OP@x(S5BNc-_YIE-C5}04j+CvREm%QY~zc%SRO4o8Uo!M%E1w!I1+tT z`mRa?TBVOR)^yJ`PGTAF0UI0wc^rwcI_gRYQ8j7@8O@p?0{~|Lg9MHTrcs67KIufT zt~lFz$En}H)-N2VRxkZEy1PM z%wa>S9j>Q2BK#wYB=3;S{#Z89#8(mugT)JT#=DA=FK3*%ZvX1Ac)YTrLl6ku#v79r zgO@#lW~Zm8p(tL|ViurNvRH&yeA_GJJ76E2$s84Dd0c6{JNx>A%jXkl0N2>yBxN8+ zMr)lSqxmqj^ZfzA{6P7W3R@)w2;>TIfC{;2h|k<9lSNyrO6R-K>4isH$#&4nQUF#N zp$n(TQN4lNY!vFEOLzK0Bo*`AQ{_A~f`Ux5hv8s(H8+UgH>%7^rc?SeFRMJUyYuY; z6%;UX98};WNAI3$c)^Cg|tchlFL%Ak8pG4Pia3#`vm{%^8*Zrn31DOdZ}ZIm@I)ps?w~ zyf++0Cb7v+n5R7t7eAO0igM##5ewMhuRboLpEHiJ=K#|mm_5G!(0sUu(|?UC-%eAct1Mua_&Upmd2DnRc3RggpItM2V)j zDfiLF=N*_nm{}8H^2@PD&&kN&3N(&4PV0)#T|v(wJb68E!H_V?GK)k96yGr1vUGK3 z;nlT?V7eOj+A%GZV4{iX`XR7y1!tt=X^)@s{umZvA|QJ0fHAq81oapxUUdJc1$2RZ#+aXK{h8~(Uv z`i8OlGQB%=`?~!PtLM4(!}4)j+-ATx2 zU{&Y?F^|FV*318i=AT=lUf%W&N6-701BC&F%-)&&$fspn##uiWz{X1m;&nG5H6!o< zYvTNrFxTfCuS$m!#bSX5tI`f;BF4eDSjH&{)ogGS^IjRM{|3ik^Jb`4i|xrs!F#d(9LIhxXv;bv@Ex#41?_D74zb^dn8v`;Z+jmGA|0I>2T}H**9N7 zR$>|)0#V5ZS;X755}u?DhASQna9Kk;_^q z^1M3Hd<*cDh~eN9WRd0uETtJ}32(r9oR~Vbz5~E`czERLsuPk3+RLvn=;iE1^=+8X z$qhK>nlNDCrpy=L>_&_SJD=hwxF-xxAF~$>=Ig?5lXnq^NWL z<~MzbIDZg*cDRDw*(o4H_g1XCkITGD7-%`zQDD=S6yp40_p%$^_=6EqYCtI{?age&o+%`Kwx!4ROv=%pAC`JZU<6>ns$Y z45Gx6aQ!q}mV8WH|1uy!=KiHVrS(V@P`t6m7}dl*5}D}F748D!Kp>Xy>Vde4X*G2y z$w-(TxuB`P%X8_rNR)@?(7ml#PdP!ZAo#u}tVL^)Q28dvSSyqdQ{Pwxu2@F26(kbH z+f+h1Q8Zi#@0*7!KZJ-V&NX2t5Z(+voU^QY39chIu_@Ez8WN(V$5Ceb_GOgNpEUI9 zy2(ZJ__ck$(S>q=J#sKW%zWH`3)Ww&%0##cO4v98+i*$9M1E=TJ=)?VV>-tLlB!h# zU2qxF(49XJsScf?>%g~f1UbI*nzghXh1Vp(HHBnjszBvp0FLV8)mQW0GXn*FT*q^3 zxxeSSW4DM}$5^eT-(mp@R87KMhx%@o*?A4b{tYds?ez9&ZR5^)+nZ&vk+Rhl_>)-2 zq}z8oG-mUuV-?=l{IpDrf&uLGkc8xnAJ zFW!Dt8%T6M0AY7b<2Bsw-MkY+ht{jC(wlWf1$C_1_HHwR=;{03)z4bO1Zn2hjK5bn!lU`` zZvXg=dIA#4wUjq=KQ&tJG2WMH5xc$=ESFDqj{mKV&~pXrYjeBi)jMnwi4|OkX77OS zE#|*+{yTaO$pecs@t+LfEYk%$Ck7-2ZSu z|1(6k>*|*?rZ|d1-h8EFRao}jhHn15l|{4lj80h)l`~^lF2});F^Pz7VV*YMzI&!j zge0A`q}I#Xo#TW!w6m3J$+cM+%hY}lA(LC~95(Le$SH;vj=q72 z)UaBaA7R*F>iRXh(Omxix>nCrj#GDk8?pEE53fz=(=h>~S9-WLeWUxAb1W?_Ed`s= z*}xl|mjyqglT4aC;a5%x+_rW<*?B;I;2)&F@wfj1nZGcj3$5ML&EAikSE1g^_qL86 zQ!Js|-R(WKbe z3EVdjeqS^?mJWP4bwT$zytd;`o_ioJ#T@zB_jTQihg4dea4gITzx#>eJjk5esQTbhVuwiI0r=O+ra<<_81{47?6bh|)z&(klmL)yfgsFQv`w!P|?U!Yvw^H-VdCk4N3 z;d+}-d>MQG&h9Dg=7M(g2rzzCe@Si}6{Mp|+UG#y!w;a`#wfS(n_bzqov!x|LbEnq zMcN(x4ve_7I@Sqa%KeX;py?*KSQ9ybml~Uy;4M`2!Hvnv&}0V7*Cw9Nko|oaW3!lnEA+#WqoPFXqKoCB!&u2?xJ~TES_I`jvg}zB46j_C@weNQ#MD{rcJ9~#x zF$b%@c>q|eQO=Jn95Y_s`!LMoc@AqO_gV{^S zy`f=hqB(aR-Mez)$~t_9_me{L1XDVngmM(xK0W1dmbkt7W@V7+iK1YRxrb%F@jN_~$c_)j9GXstG3wcvn!j1F?R} zxP-fH_$)(p@j?7FmQ_?0Wp55BCpG^={s}O(q@6cGoz;0%nPC4tj4K(b~zJe9m4H%zzx76Av zwq&~cY3N}LXRJt9QeDO~^{?cS$p0CisV&Mp&qYV&gmW>Yu3MaxR05sRw?SUQ8dg-I zc4=cR;L57$ycumgTJxo_*aFmfso)F0@3i1V&$|UQ@3RugKC@IV$EKTWxAM7;Zv9%H zj2sIGQd`^g318##DC6?jIRYJ5?Hau!T|DZye+h%he!|0*_HuuoGvo(isV-CCWZ?Wg z$OudldAIt+{5rsg^K!K5^pV|jH`rUjW#;_<{~#{s{=15$lN8Ko(_Oz5+9B9WmZLt6 zMxl^^tv(#vzR5HCdw}Ef{P8??EW<~cd=o`LcFS|+WwF0BMb((jl)%i=)}gP4oOOOY zNtMVY70mX>R0V*!LEXx+;y;`JIGgjHMq0&2=tg$Yhq54qHDvxi4kS)tP|#&_a8Z{0er zZ*OxTYIXhlM8Y{tZ>J1bB%@io#z@E$K8`DQss|n)f5gw%-Wj$9JSC%sl`E6nGwpsV zP7O~~^`3V2~(1+dJ zMA#-{?FqfSSX}7t%mwZg^ZloI{14djef)->12@au>O0f8rkex2)==tbjBEMr2U3D9%AYs`w)hUPyv0=B zhsy%;dKeF6ynuTyRA&yVjIxxpKItY|PVcx_dohN08{fSJdZxX5VRUJZKMTM_^Ji!D z`rfFl@JO$kTfr*v_2rSFjVxv@t4a@Na22M|YF6j6`ITU>Ak8oIkD6g9b*+?Ku!8ma zHV#WZn3DoX&}nabMY`BhY9=v53XQcI&&K(bi6?F^Ck{keA`Stb+A}O_mUYWwgQdgn zWEIMcmx2n*RCz;#cfG^=-MqY3!Ps_BurSfk{g6AeY+4)9Pg(2f4i6gajjTo-iBbc& zRDz*!h@uIgNo&yj#zvZ zy80eMvLyOQN7gf#PqQaZU?5OcM>KVnkY}6(y@4Q81o8ohDRS`i4{$%Rp?_!PZ1r_- zr37IglA-~#8Ns0(KG)yWla)Tva*RJ z#W<7_cnNoMI2CPB#$l>|YyGR~$h>tA7>8QA>N{I+)pFQ4vdUPVJimT>({-FIEkZfX z;%x}751wwTOJ9&%BI4WZ;e=$E&Id|q*!vG<=Dz1~FAa%G!Ig}#hChA%u+75|;&qL(QaRVDYK~xGNO+YznSLm4tfIW6fn}wur*K1; zPscsFrOPQ!M9$fn1#^k$$%Lr3f?JZBAl4I2I zP#5S;%UrKE^}TrN@+jyLTFh>7$Qq~BP>Asnkn~)f(x<5kEo(G_s{}R!xi$ihQ440oYj;-$7Y1(NurEx~CfSkN&|c6wQH{b8ce2Ib%OL z1YFIgs|KD#d37=_QgZQuhWeZ@s5;*qlI=Te=s}v<_*R$q_&tu7ItkoP%YI6TWdw29 zW%(*1J9~GR)xy-i* zZ%942?>+g~!&qL=URz47TQ_-k--Aw_?mu?_eU#|8bp&pNH#N-i43VMNLT03P<+u6V z8gPF>QC|PTf})(>!e z?-aU>E{P`Srm$hFX2Rn`8X({t;`guhj_cU;vM@@4H;az2X#a$|EsHzx2tR>k`i7TE zeMzNgH`i26>9O(+C3r}b#Ku^pNy}j~FPhK9Yi^LB^dNQ1F&VN5=L-b`x1lFWwYjP_ zqZ+Eq6qN-ScX;NRib6w_!b0uBVtveG{RYa?sW!2d+{J#vFH4$2hy-68oH%%;WbUs* z48U4Ll7~pkGjzv%)p?ujFI1Hu%sR`&=@f%7K(Opm{1&YJ08Byz*>{Mh6vGhwP?^RU9=^S>K+qu9_9;7z4EJWNq!H5xV473)# zl=cc=b1G*akKuZVYVW&)@IgoMTvM(VQ03HCd8brK8Z6efG-=k%1|fjzp&8?Vw4l{l35;|(x$_?L5@)L5_T z2zSpa%w2&Y?5tj0zzmA<@0gx|f^Fux20g@Bn#`U{iz>sJait<*J82{}?pvkOb5#+JQkNw5MT>XYHd9T=Xd5`LPP zf9H11qMuFYa~=@B-F(GGdqhtotBF0@43n%l)3>wnl)R-SsxH|3wBYPJb-MZlJSZ5I zF0(Z22ZHr#hpN|Gm+3eYnib-J#%Kfno;nAR ztV1*|Y26CI{r;M?a0*m!gv%+sd-I|C)-0q1At;Q@xsYbo-3wl0xixp_+v)rBc=>AliI>y@&Z4b z*lJ;nsq5hCE;`9;6qaWW1~&70<=@nWIL!a-Od&Lr-}I#peCL?W=39{@B>(jw)T&_# zhlHZ_(^bc0<_xx4l8-xiSdNeZixR4722v#WnUG$g{ZA}`RGgscAZP!KK^>eTw5$mW zYoyh86%}>rBL%xGZWJh5y2sJB>+_;ye~by@R0C|sr?Ab+`eGhr%qQK-oxYtVS1&Z| zEbtV;`b;X`Sw?F4g=5?B$FbpM&*jzh1aUTzhvQ|Kpx0v#SuK)3wGr22NsqjLX8dmd zi2O79ixzm)7?iL--wgM}&AW3apUE7+%5(SC3i>}+FFt9&w(yOjU6sPSpDALbw<)f( zhb4~{r^YW9mY1bXCpRv``_GKqm&*LVI?T}fi^p_08Ok!*FLD9M??M@WAiwcZezR=b zCi;EbW$eqw&W$~05>!A)&8_g4Xok3mno8jg2rt>{*7fTQ zYqQ);`uaAu5Fsz?o3ugwa>Pqj!APGKxi} z-J8xE!NEpT0t8ZKrW31vaD3IO4! zd?0u@UYfz9;3~}YGVFhCSGkgbyJVCJX;y(#(o>SFsq6EtCSJxCNHVWCeb@Uf3u^PQrABIWyZHGSUs6%J@vYQKX;G)ooP+I zrp4dJEGFKhfHh?yubp!77bA!?DH=WC$W*}f>q4_3Hc~0JJmeDe#^iUnZZH{7zL1yx zDr$a;7yHumqG~;K2SS(u3+o0dD8&!9suB0Nk*(YOC*gx{ZP(OBNY3yF&O03bd&1nL zw;H3?e&*}Vd}u9y>M(nQkO}d4SN`@1T6kza^#qrY%jgt0i-yG}qE&H7mFLzVl0YZ% z($wS{j=#z{BcFzVe1Yfu`!fi325w^l@n4e$gR|-BPYg4Bhq^*-k>`cK0^>w2mo-NZuJ{GYypc7LMeWJq)qJ<{#`F^^ETLU^`Bctj%itSE*$%20#TynLOgjU8NH)!uVGg%W6|H3(KQowjG@4yy zq8@qiBhQ3JQ?Y;J8y^cD*|XQWcCfr%>9t!=xpM`DGI3TA@5yK|)YrP=qrg^2tK6w)Imd)v=DhbaH%MW%wDFoH5-cv!NNR~qhp{?FfKw)5YJ ziI0jbIZ}djnM-NUS%y|xKm66v5;y<%s?ab7iPAgaj=H)L1Ba%CY z&)w(yRhf`(=waY=-au0j$*uwnvLEX9@3Z;UyOBlZy58OI*!o+2xE05Jsh+8HNw?@~ z*=@Tx6S*c@eOesu5D(6ys)8LY?72N*3m0R@!N?P+u{JHN9P!ZZ77_L82kB&x2c*?q zr>NhsH(BY(uU;Zgo^yS- zdF$rgNRAU&;*(#v^y<{`;YCj0)bu z<`a+ky+80f`TpXg%~hdYSV%nP0;?dOV!g4Cm_wBs0GbIAZOv2JsK2^rh~<7Dp(RtgSP5y zl2mli#?zN$X^ySlN4y^h3mdGU^9@=I0B{OsIHANAkEK#fjzK+995SpaheHDdEP(eS zOG&T+pAUB7Eg01nOjO7ftrb=+$XEwL0rl{*F>W%Zb9$6a-tBmH_l)_)J)6AYuI>q# z#6WE&f#Y~V++6XAx4xcX*gz1-zz%Y0&FGoVW1Xd=ufazYY#|@j{5C`|up2Kt?#>f}~)3nFAK*ez^nN?#hj6*jf z5iTzuF>V5WfFTI;G;_DV=Vm&P?(g7`nD#rIIG#Rz#O0$cyJ=#7H?h0DWj9UWMxq0e zk*s@atxz3f+~7h+f)L#rkwngS$z_S0l!90JpHN7l?RZg^w7rbJKCh@#9* zv+piNoOs4b*r;;hg`{v0yH{rbO*pwlHNswqqqp+^*`ch_G;?^rAXhV9;OVesBc3#s zt~tOaJi?6|_S1pN5&VE`BdU&c*g-1BY%5KpL99gCN6%CW2UXTFwt3$m=2D0yH71RM zc)K5^ApU@=!?-UV@mH`IVi-5A%bOsIL}@O`hKx!vjXodSje>9E7}26!A~1T+R7CqN z$cGs`i8of3IbkQf*m0&qBIm@-S8sUlnH=3SkFEg)aDHuZ^Eh!Wmh|odZ4)7b>O;HY~Ia7=Y?_(v+RyHi&)J%`b z45N-g*=#Nt*H^4<;U<@CrP?|m8rqjw9~Hf)>))Q|w_3V@NnSQq^4SAK6!8Tn&;!J+ zM?%+>?IL<7wyh=OiuH3dBBFP28^CFtWO%Yj^O=Lh0x#M-kB3@QzBR3jaV-$m)m~tF@BbJ^O0~ zGFQ}A5!EFfbm`xEG~h3bX)$JRfV%y8uLAtm;DL{MBa z13H(x=zwVN_tCXgxfJGUG9Xn17vsVv?eBFV*zokv`!?&epSLVbW%uAp^&|<<`%%p( zOSS9Onr3-zApD4fWK8=pjD*eGc6{AIhy>XnVtcx2w>MK!jPNiglYH{tssj2NqgtR? zMS{o$rq$jnfD}yvKAOOpFEDP{A8p+dAhrM0S!!$d4ZEd=b^PaibL%ya)MVXMgS&VE`{1_IDmP>lu3{XhJ*1ssJ7-n{xY z-gxwsZ~C+%vu!lO`U!eDLYXXB?or^P4cY_bmid>H)?yaRhI5v57ZF16q}iB{uBn0c z0JxV=)kF(mPVTL>CTh)u5QuRk#sLw_`R7{L?e5WJrBGdSQDKpHSORD4oQrxcB|se5 zr+En)O=@#P(TOR{#OA_$9!S8NgG?a1h+^m=uL9J1(x@ zhBvNx|DBic<*zccfwHpeErI*_4qgThk1n~uBl{cn`-waY`+efDtK8gtirL-c(=Ai_ zR+t3G1{ck!2E9RKYjPF8FP6(knmIqJ|>{a1YnF+;$(Ws zWrO;R1-3H>-9fhX)(r#e^_s#R)85wU7(GKA3G0ZN6)EdBXSdtPp%hzVRVi8VYfBWB zQt%=S(o5a#Ua062S{KzuG%fgOj7-(-a!2+57TruW_VMYyIk8peQqTfJw|(+L3|peW z#DP+*Jok>sS{nqVQ*&tt_-KPCSRPJ7z^F7GZ zCxpgEv*0(gPdlp5JlbCJb=OyrlrO*g6<*dCP-g-#I7baLkxC|0>j2XT&at_8#GBvn z&3ygWe>0D+o>1{5R%nU5^ZX^xpCz0Zwok7~K#Y!y3&$5f|I_^R-}`&qJ%5)?NIczE z&<)qxG*zdW%Zn{ZmHQWW3|=@eQd40iMmaoEKqD(+Pc7kw3)lvn9$2Z#rW`3`5?*(} z*i4f%-6*Q0m}ON2qAl ztScg`rSy8~>h{@VwbEzKU+rPy5^>fVLV%EO&{_uqOx zR}Ex>vZ_Fp#w3JFfK@=Nu`p#7zu=tG$%o4pmjD8HUi!p-jp{rFjLJyODkk^i;$o&8X-UxW8g~#r|sUdR7EK{ z>#@$Y)}|+V-hKrI^B+=f|Fw?wQQvhu9$AlTp1*j`ANeDHm>>SJzr!cL@om!dVfWX0 zlMk)6|0u5MN8HxG!Q1)1`ZbI8b^FJoy#`2Mw_m6B=-2SskJ@|*#$f}+GiRlje|Sk; ztOGA!B%bGqclNhTnz?>_$@P&A`|PJ3&u?zH)5?B-2iQh2sgiDAF#5<4 z1X+8Yyzz+3%S+o(7l)4#A4Y0Uym;}9ci(@;zL@z-I^4HlSQx}ZD9m$RPG4MXplHT1 z;PCj^oOK)HXiE2pEIbv!L$GUg^K6@)Svef-L4ALl7)MX^!jn8A@(pY+9y6}Dc-H7j znU6adJa25?WOK1*`s~kB=Yp2Pw1aUy5<}qTOMAw7N7&9B?sk+I7^4v43N7&B**m=C zJ-ol*@uN4myW3OshLM5GgD`#ZD}4Rtg5UXH|NT69{Fs$nF>Xe#t}pRVpKx{ch~0k2 zfBgUckNBw{{ZX#B7hFFHxH#cu4O2i>8S4&shxL<3#PxuzR&2N12eaWq*8KPWtG|cu z{q}F>=4Q|D{>|UR|M5TjL7=d?xa2#(^=)DhuC7L0`{*!c3zYQ?zyxZxz^ntM=E8|F zfZ7h`0yD$P)dc6v0al3Kljn(P%4}+eu(7d5$O{AG2t-25%pTEBZS5xnltRD z%x;%}6Z;Loul>S;NwYbL4}+B)r)grB5~YDbU9*vD;7?W0N=}T5b4E^RuHl+NoZ!c3 zrReK5ekI&bJNCEtOw&ukxMdwK*y&5Y`o$Og=I{8e{Jwww5AprK{lCa3KlKJ*dFLgE zTnH=SVi=R9v>Zt-GQ)L@lD_ODK54foHOm&cb~oFXFvB9e&R=ej4%Dn zj}R|5jB#XpIk1~wG940Mc=wjCe&H)jyP3`PH&W&uSC20Ful>O9;>nXM{=tv`T~-qK zt>5)q+3olImB0L#`SSZO2r&Rh_Ag$Nw7~H(E9d!!ulsg>-yi&E`5nLW`xrvtCx8CS z{J;LgzroM{{AYRpo%gwV`h?&A2mTQMjUV`@x!4Tc+}`ru^B1JUf$erf@SfdaVxBVZ zJ$uGyfBJKb*PrC_;t?W8o?LEF;GJjBc>dxgFP=Z=$A0V=_D@CFC71pY3@0^up#^0ip$+44!MZf)GekqP*O5UolE@x`m>=7@ojb*?hyyXP$nF zaXm7<`#$^KyX?RClF@nI`t)1Wn0WEx7Pmi z=s=XjEnY{W-y-9{lq%_N$0jPn<_hO8xZJFX!808WbR#kEJ*jw#CJu*0TsxFtF6Xrw z*lkZq4x-KdjZJU^?m8%invuwoBoIuyuA6UkDCeO@E~O;5ba#v^G)jE5_it-|zYA^OxKo?s@x-$2=V)pZolm`OE*;zse8( zjlaq5-HykPE<3bB2zL!QsZ1fmUir@7{M-2N|BwC$e9w1&2iwiMm4hBxiKFO|`@4*U z71x&o!3(Pu9JO+{pZU*!;%E4?fAN3I5B{~kLVol%Z@z6#@O?51J;OmuWBavIe6+xRLJ%UJ zh{x;5#6%%2G7r)W*-Fu-`Dskaz6&@9T}ppNKtd15`y4LhoEe?4*=#^OrGl@pt&Ulh zFgR3Tdbu;rXYJoGwr9dXjno)Dt3}JS&r*7^8t9lFWc* za1O_j+rxp~ArTx%G@a8EE7U3^#Cv==Pe#ac{jMb}d}EG2Fn{XLbHJ(M`t#Qtq^GTt z=Uij-*xs*IL66kq8KZC|W>nRdl`N*WDD7J&DjSZ*4|HyM-{}AiI$c?*yf9gUF$bhc z!?^aGu8k3U{<~It9)~8M+~oi|`?J=@aOFrh4pQ{QM5OO=G9m^Y=Bmv3jQuFCVN@#v zC~Jeqv}tLsoM~l?AS(yXst3^WAwVXmuI!w$N1P|u#LR37{HjPC&JbybTbatNC6k3( zyYBCa0c)LVh2jSCnvp3qx%X8cNdvdK^n!@#zOI}s;I~Kvz#4e{YRSFG8QU3oIHqc5 zaU#N6q!l{YaaK*kSS0|_?)#Q_J{sDI6Bfqsa!6RdPhC&i*|*xd*5-pKhr!mABUY;3 zKPag}RYtc#!oa<^zd2PxFdgPaBU}yqcFX!=jBfFYNLnh7L;gJH~i86+5eOu{^7sLr@#3#OiO~{mr4-)|3mwDLc6cq>-JIYH9-2h{kpW_SM>m? zul)Sr-)B(Kill=DRL$+Z6c0tYlxy}k@ABT~zRcnFp5OFM-@-rfnQ!KYfBZ*SZz9Qi z_FVGpdF9zxzKk!4%j*ktwWl6Oyk0ZCc!7wO*FL#gbN%=Uo47$m$rM~GkACm|8K3*g z7rA|TPfoC(CW5og;VM*SV7nRdn+@I%_%IOi2v&6sfUE@PM=RAViJB5)zA$%A;cVkC z9OjIsOlr>Q%ms8N=St2NfK6q`?x0*>J?H6@C%p0KO=1-Cp)emZVOzMkxaRH8e43Xp zZ`s{W%=dfhE>kWCd>Fa8-E)yPY%d?-M?s=zxEhghL%A6_qBsfETMO=~iK)!|{QK|n zTMojv{+8dyH-GE55n^P{GpfpFd&PFMC4|8H&z|#hpZ!u}bd5MJ5RH`G9+~#kGhp%M z`!}SVczkuqKlji7KK{g?{nz3C9l-Mq-|=01%WwTA!Vr1%RQMhL%|FOr`H%k=`r@;E z@Av%|_@;0D297|=$z&0L)e(AW{G1yDM+K_sM;$AyR_>GpcAnt9m9~l+u<6Z6r&^Mn zj39%sIXcLhgc%2{Tn|`Glh#~ru@Y+l0>cp5Y))(#Efe=s;ckBbj>OSQmh0R&L5rb_ zC#!NiR)uw>$Pe1c^^@4k`w@{Lt`fNd#aUIX$v$5xY%6bHUqU5D~T2>zRMzn zxNWS2J-Zk0^5P3$;H@9{XZhXV_q}}P6QAJG^#%W5_WnFhmh7zWguii?h{(vy%35yS zwd-zudr`Mqt(K6479_C5YGG_+V=Uwa?3uA&W^9km%Xl}&;FrO`j4`%_U$e*-#$YhW zfWSfs1Cm&TXtkDZ^}gJ`Yu#EiGcqF1IZwy-5R6|4oyf%`1-&2mAvonbNtW$pReQ8>M8QxkVOw9lvTV}+E&qckJSmQqXEWfTKQt6 z1+6u$2!G^@zkpx(;79n`_x>!?X~pwA$(8HZsmq39l=FFC^acD+fBx;PEDdRa`(An% zZ~gq&vpcQ0a$^sp5?*rt1VtVz>#dxKi?Mbd&XB|dYU6eDBD8HAmv}L8jJ9oQT)>6E zjd97tPh8?XzxWY8@zBR9Ov-()emSqY|0SG1zD7#I*g5u-mY!0WHU@C)?$4N3QKFsN zjJ`FfEHdhMc4y3*mXk*Y6nV;(tsVMV%S$(IW7zNU>~mN7C*S(r{Me8F5F00!S=z~= z2ZLUUh^28J*_q(`0;(W2LQaEpiRT?rWf9snU+{T6qr8VU3ihW|RYRi$aTV6Zu!f8X zSTs%Dou9dnXO3^;ZIDJpGD_P4MH)A#;Ok5V+5M(`)(4Kl~RR0 z{fN6xu2H)NYYeTl*fwxxx!_UdAT$g@g$|BTLDkP8C_=E{YRCgRA5)}`)CR0=NlBn> zX$d$V(EWy@*CWjpq4Nv&Az`U+dEG1S~3#i zZBA2{?5l!aeiRo%w3SJ8WLil8cLQ{SRhAGMBm^o6(U-YMaW2qQo9x=l6p2NXgJc*n z2zj)K2%Z3xm0~)c;=*-`+>&S*w*l)Qtpw)+%H|Qs(hbhWWO8wU+m4}ZWGHKa1Rtt6 z?rTdmDA2W#Wi}RM7haxIM6$@9n&T!NFq)EKQ%g_|@AnXCqWzAfk-ch6WP{1Ud|&|z zDus8Q3|7Su6r&8iz9BV+UcZmA33WY=5?6dI4me9q#Bi$8qfi#T&zkQXW@q??Vz&s&?}WCmS`=K&6>u^MnY&{~v40Nv^X_sTiD zSkGCYp*aL(s&4-Sfdtj+*tzI{=OoI@bz<}k$?*s*2ei^tDsZ@jdXFOMDS86YEf8; zb;X0nr=a?AoVnSmKx5OGZ(tf>N?3rSbMQIQD*EDzqV_e`1Vj?@ycbt(lNf-gQkfG- z!P7mx4xV4XW&2Iv)BbM$`Jx}svXq_eUH-=3{CeL1!S`|I)QLET=r}IS+wTy{{j_#4 z|Nabbw-BXU?e|f;)tzs(-;)-Y{#W{@7fv}#K@Cx+AgZ0Cbg1zqvmgX**so^nKlv29 zyA#qpXKiJTm!7$c#y8Z?v(GN6gYlK?C?gE}%fM=!WH%E=M^{)|USnltz*0|>_Xb@> z-C#tqJDISzx5@Pzo0QjfsHPQSAtV;;C??q|L%--TT3#Z{dy#o037Q<6&O?_vi3=vq znp#g;%~Tp(;U>})^h-Nqm)|@Vt|H0?YzRaJ|H<$Qr7 zA~cnQ9F8s@CrwkXUcbt7*RNm$6gER^jlp)uFI4;cj0P+G=|B2bUUtU?v{D@|*+Scr zsK_RZlja1KB-lKGtU(QiET34SeC8_t#x)-K=!3lJb3VUgsi-bhSx`w5rE5tC90EQ# zs#(pT-$!dr;~cZPAx~q_M`$}1P}|1KqBMzuqL+~r2|7_oE6ipMRb7*lq88sD!!eeZ z2i$khIkvC71QGbj?aR0;GiI|f*&yZEu{HA4#?Q1ZMkOo_GL{AzCyxwq-jk;q=Nwhj zP}em|YX(IRohX722rVi}&{|`ST}<5D?i{v2W=#xelEAB8avKlad6KK!Zy+_6)5ngm zJSgI|Y~v?G@XS$V)q$)bL@=*yTdcJht4T;A7~Qt0Bwjb)-o~s67?m*SW!$#5ME|dU z4WD}SS9#0n-e$ywz?1+C;xSh=#qL9m>h1s{*vR)yH-Dl46b${vq%f~+UDK0+vAWv3TSzTI2#KqwiLz=DO>WZE6I?{noxD-MLI(qL( z5OO_5sT`v`kQXzK7Cj1M@S^cv zFiL3fpvqXl>WXWorwCqCO>(?aI1w^qx{#-XBB?T_OOcO3Q%2+`Jc-;ftQXD1#D3-v}&1 z7o$gN3@Vd2CKMGWuSkpN0jxUUltcUfVvNuOZ&yC;J@aCR@5aeF2-=3|GdU0H3C=Bi zCn173frA2w?PT|DH~@om$2dg-I#DR^7N!3e%IW9w{TFLC0U=@R0=bI7T4eG?sd<#G zcS88k0lQcT0TGQ;(K1CRf~c@yHHH?fP0YfkX_7lOX z_>2sZlSpbUZ4i{ykYo__fqos;nFk3KW0ba78=rAOTCDAkT^dN@eI&s~3y)5{?-FoQ zGk4R>)w~iN3l-u(XYpP{JCvRycClYpE`rjiWKR1EibH=MA`EHAGxTv-MY+F1?6r18c#>~3#y<&NwV>@6pfW*piH}^!T6qOi!yNK^WC4y1$GrkR-Z=T0D4U_#b zRXt%co**ivN-D}}^s$od3OC-23#NR)@r`ws?GbjjcbT~vxwd3!!C(*<99l)M&@}C1 z6f{l1q?QX8?&iXsx09us$_47mgMmwzo~5j3Akga%7>~yc`+d%wTxVnB6iO@F7EGe( z_X;Z0Fy7lk+mv3fpco9ODVe#e*la0YKbkl}3qqP_tgNhY^~opssdvAdlSls?!$HCS z_NV?hU;c%ki!qi_zhEi1i^XBjYTo#Ym-0Ce+)EpT#?|ca&G^ap`~;Lc3`WPgYP!MH z;5&b$x}F`(b{0i@wOD{TB-%L;;^a?7&#o|MPlPs-oI;4q$rfzqZzdwN-S??ZiY6|m z96RSI@;rj0!BI9%|L`C4Wp3ay}_u0OFjmg#)skVePCC>`-G$S>JiJ!8yJLS~r6P!PP z8<|a!R+!F8KJt-|@bCZKk8syZ?&8>y5ogZa&f1Z6ExX`XxBii@#ln_cm8f@TdrTa!nMuF@Z6t{F{xs-x`NJAk~ZPk(PJDxvPPa}F_AsAT)TRSPd)J% zx1BhF_=YSiICJJ4S(dW5yUS1f#J}Uizxq*DkF2mi*~Dr`nmVR?m-x`n{}gX}-ThoR ze>*KLjdx^eiqVFholTy6?g^~QxOC+jANarrc>IY^vD9DYtzY~loIbt5jT_h5+1+6@ z9AJAr+P3RBAz^EK3xnnOZKpVU`|YfamPl#I^Nc*pSnC&*vyQbktB|&(Y9dRtaTQHf zgKx=uJ#3oNwnAN(IPXbqO20qA7(ecpVK2n8BN}czN3cd=SZ6J=|!!spD6{#5`%v{Rn_1_OxPCX zyOi-c_z_66f~8&`Ps{$y(lisGS%@Ab4w|SO3@-Xw64}s7z$-;5f(4A9C*2?1*N6Lm zhk_!+&(e7&3K1w(oupK1g9moQ1f2|6KXZW#8+X%Rj`wTrB&L-UQ|x!PwwUaWsrDJaJx|>~(~AB5lI@)>w6SPWsK!u> zCp6J}J6OO4$b>=(x{M3&xW-LD3dTDnA9?M!xc>Pcx+0d$1HvvOXU)a!u$J?6^dRAj? z76YE3{ex)u%cA{$qt2I_DLgP9B?$cqD#OerMDNUg=@b!X0sgrc^ES^K* z9afLlb8k?I(~NFzU|ou$?HHYrS*b`!tc}MYWmk|LqLK~-)&ZqjM9(dPfHvOxHnA*A zfg+^}f|CYKO=vATF$Ag6M5d*X(1sW~hnkxcbUyX8WEv8kcBTUnD@8&#_CjtOg6n|o zR-r=26a`e8kSV}Hg2n0_2uSz-Ad0$;EL0^1X@wvTtFoB$o_KQQaH2@mywKgTdpl56 zRJ1|RDnW&VYvq8_Ijj?`wm1zzYa}$#Cg{+jx?rz3ol6L=h1|sFm#^`Xbm{Ib?IEDN z6$NfVK)vbdcp&>%1au?@hj=~pA=!WYz3bD5EDc0L1n;#%YdCBjanLl;HA0gg0%(I5 zTIET+pwbY}brkfIF{So`6NNQ)QAoVG9Uc!NFf9_WM8Mt{wRoN`A_Gx#*zQLrdiOvU#$K2JJeh4 zR=d?+&~5>wx7z;z?Z2cOdI_Pz`@Ja5YYvzMY1*S{rrfx8gS+m!z}d5BFxqh8!d?7_ zAA2{;Yb8a0fU8Qzo0k~m8O30gJk8K1#b|}e4TIqlMV?VjX6(&oi)75ba))QHU1fi} z#5W$3uQM76snIMA24sT)T4kh0VR{8h>COn9D4~-;q9W&2DNFF4bPlBX29cN`nF^gu zTHzaqPAzy(iXu~*+E*xRSj`KN70UfFv*|v2d;27$OsjpWSxGgmfh|6zp1^xyb@>QN zLyD%6n!MNJWIALt?Bm6er#*z6*=$Txm86AcFpQ@1JG=YTO~aty=hVrg{0n zeA94abBl)_{3suK-}^DfaQfsrSq?^3cAhDdIv)R9tW*?VQk{&{?#9i0lxF^Geq-BaFfk;^I^UEm;gl0IV{RJtYpuq3s-M zn#c@NI51(vDTCR801!b5&E_A~W7T3abOw3ghV%-+0QgAR$NDH2US* z6g5;-zQMVG_nv+}U}-RjYVpwWGe7q}{?h;a7uem}MW-686v|q(PH`bJ%g>x#!!={J zwj0)tpWr3R^3>zc^75Cx0;yoH-r+ZEqY>=w{iZMfrtOdXi7)3{zUd!w{_Od^vMlW zp5l$-b+7y^&YV2P_rCMHdGAku)nM#B-(bSy{Z@xG$2YZ|5SRf!?6vUZfJp0T&P z%S-OMm)F1X4V=4hJ1R+d^pVH;H$U)i_{9%=kgxhvZ|7})_HBIL>tDm)`#XP&fB28S zot>R+W>d?l)8`rVG-_Og&zZ^&eZD4}e?q=GTNW8VW}KrE;TP96@J$h#YN>;;RWNTX*k9Z>4M?-;3O z!HhU+_$G_ssc*Q+;GwAoa(W31NLrL655Pa?NjVDn_ zWbKHszgx01onQ*X$)l@SldwIWv0uZHr5?jP#Ym_&gYNt{5#1DUj%8 z*gBl^ae1C(R85I<4qN0DX+}RA5{f`sO>k}(biuV|%&-|z6az}el&dwmRxm!w6Ho8* zvB%!aL(g5~uO#q!Z}=SgS;`-J>*w>)M?Ow1!k_$8Z{y9ceI-ZNSJ|6YY?n2SbF>oK zXtSn?&sYqZjsDtr&-JZsZd}?X%`LZYoMin-^k40=^E$7`md&j#e*C9@o*((q|G=}) zT&J*>VtI{?GNK$cou2+XRAt^G06@q{cf6oVc; zqnXu#BuP*SG(Pg~iXtWN_vrU>iY(*$)-FHz?|+Q<|J?g|?5QV_e#-iA9T%xxApva9SuhAY zK-3z$@cD!YoX&C3MW_>?w2CVGAn`{lY8CBsbe0i99rr0wpcO6%RszbVF||I(Jo4z! z&gcka8H4M@Ct0Qdy|5Ds`T$-P7w=6pSR2RCxzEEv@J>K0O&+2x#vHgsMV6t`CQ7qu z5e;ggWsduTir{Y674K`Rj#UaGku9pMi%NfVv;>gIAdGg;$%6gaA-M6FwOXXtD-Gxt z34$aF9WlqXFyj1sD< z1H(GHp@_urG?BC){4S9i5aXqs@c{>I)-S;xzW~@FF#KyImim&&W z7e0jj{aq%L9Yid{e8hAdCv;ldB+oMyg1ks@(n0&}LYNL-f5B_NjS*> zVn9_nd?%x{Hs#H4eiOg?;a_2G^#tCxY+m1H<|~$$M`&fD!G0Pa;5W8zu)7xlDFf&< zr3#+f1p*n8Ye)k2!i~4N4kPWf+>2nQss^Vbrte(J_X-0&$LOm!Ie3k9?Bt-5VTR zU1fQ74H1u6^JOpN*B^7tuscX#>6-}z6ta%Gdxd-I!F zTU!MYo__KvKKjtd_?e&jNt85v&L4O)r_OG0;r0uhI=R8eKlX9{?GJrFpLpnFoLxUk zFSRI>A|g~yNGzyS(>g&yACeTSEKZ_~>`)x)O_a-UsKPy8$h32x`NX1aobV%Yv86>3 z3=6-fPUYi-K3MSwXN`x4}O?y*RFvvWNH}0 z5=7A17@KCSEgz+yXIK?Mjh(&yD4kvFaqZHT=&MV-@77KZ$VW@;Zthd`SJ=FCg}ps6 zMuR@QWYCdulSAH*zdH>yicmW0y5`4z=tohF=lj0@U(xRmaJA#&6ITJqOh(ZkBEjLD z2(AHA9hFw=O-I)RvSV8LsN=;~LyoaLrkBq+m zdpLP!jg|h0tCx3p=9%Z1loS5>zxZyhl@tE@U;fMdxv%;P-tgI<&0qSfe~(}Kg%7Zl zZ?bgiILh=8aZIZjnaPlJ68o_i(o}I^VIg=Qh*G;Q4Y!F4N0sK$7J@FA&I_0sRpoFl z!=TA}eH0DUyLdmh;%!jM5dGdtlvku#j-Pp&jsZIF=elEbqEb{EMaklQ1g#{VK+~~L zMS;n{PdoXog1VG=jrPU_vHXG0`CQ)i_OIa8ue_JxuupWAm@n)Ov4>ir?R@bP653X9 zKF})^OSK`-QpkT0c6vlJI`T^ zrk+*QO_Z{x*3iogX_g|uY&K(3&VVFtUx5!oFH7kcd9?0GVjt5=Ei6Dztq&M{kC00m=LW>FJC!-KFBk<`2M?O)$rFoS3pu$g3JkeP z$$LGD%p$Y|?{J~U*9{(`WS`FGTw-=x^qubH`rWgl?f}q(XT%`}tBFBp-d7-T9*|kVE}XB%Q{z1%snpW z-*?k9sgujk8Kd(bI|oOJU{pm1j&?RI^C#y#&}nXslL4X?!8_0jt2D~F=quSu{Jd5K zrEh*t6M?RZ4$zv-4$X?=zF2Dy!W@-G>NsW|2I91iviUi1tdzxCg(X1{0(Auc+LSQI zEveCo#*%i-#5iUiv?#}RRwD*NE$FI2WtyNOb2v0{A9bQoI=M;oebD9%-Fbl4;;P_m z%mNHnBLdo3tY~sIFHgtgZjtVq5t*4UG%(PbBuK=pTfyoYNdiF!QfnE8gsB8(Z4A~7 z9c$D9MQ5`RwfH{PfTM1RH11 z6P){9W-tr!?j*BXZ z598sePgO0kwYAAV|L*VP&-|G`OI(dq(>#CaX(p4BqF7>3 z6r^cJp2E1C(KZoS3QEyBsHUFDZooAlQsY%d$SQQYL{_Ba!#+CCVt@q-kp@xH1^Nj1 z7T>fe6a9dcM36wKIO#Sj!-s$(!J|l2OtVc>0h6LJ1n;7EVFSH^Wp#C#Uav4iO4lIsD}aY~*$`s~o_Ek(~r(KJoq@n;?&Mk7A#J99n{KxU5 zXSw5^3rwf`__CyNLer`k-ck!HC>j|f)fhC?P8jtpD{ITp@3Yc0aZ%bpu8*TrK$X}$ z!`cLE731+9<#a-uKp#y*7A1m}!=@G*jabcaX@!;H3a(#q-EDDYbC-{N^q2XfFMKm0 z7#{!B$M}JN`Hy+(i6_VkSY18>+EQ9@vx;$3#({MPArWY242K#mIaP4vx`50PtfsCS zYzSPre1*-+SMb0f8(?$Ii8DvI^6WL<^P@k=AO6BOaOSqRa_?Pd`N!Y(b-eit-^105 zI~+Tbqa?)`%UXV%%1@D$DDg)lqPm}$44dB&M711GzRd!6Uw5 zfG1ef0R&)dj!2334bBtOo$1I`KH8u(;-O=S8l}20oOo|kwn3>J@rs%Ev}xK23nzG$ z1AT&@k@~D#0s06aVsH}(*6<~7{XD+k20kAONsgPN)MqxAcqXnH;o> zz-X;;!C?s`X@>0pR&jeciJ9$IL)ru9VLGjFO+}N`xB!x`vbK~XWkoSu=G5s`9)9Ry zu53QXcru}^Yeu7-&wu^PXzB(p70+M3LY7;ax<9NVG+q zV|#mx$#ja72qYtlnVT_bDwc;!oISU}@wFp3C+N23FMP!p@}^hb!GjNejP1>9+;Mc7 zsvdJ=XOntXvweM&z44f8QX{HmFw9w5SplQj+1_DiIz=JaMB`gekc1;gR@pdpilt#> zoJI+15(|Kd#d*)hZMX4f-u5=0dGZqP{NC^5@};M_UfjDIJltGz{F)~o2L zZBz{PqiGh(g9BkKz=*Q9wP?F zkVXa@5R=Zk=7?}!f{^(+^>yyw9`E;HB&rm;6LmPG>2RATmCs?MIiNJ(cSmHKXG9wV zqhdn&fFuxD9ihyW{g}P4@dn>?q^=56k=?IlzvzT@tzsoI@FVpUv=78t8I#!%Na-}n!{fgk+A zA7JCc`RL{PX>A^)^`Fyzm!In{-|s|e^glxT&$l4B)o!)_aoR0_^j7;lY2H^a_SgR^ zUyTKoS5&@=zD7#}B=l&;J1}jqTC=n?KY@E3oMx&v(#sGI3hEaG*4-~ z&{T7u$LL#URWJHLwHm#Ukj1HaD}W>} z?d~%k?~`T&ddmUIim4WQy&-O_u)z_im@3V4n^$T4gtXt|&U1I5dnsz%9Ac-WxS;8; ztaAH>+qwPr^Jw6~haO{p$8+wEdssfQ%&-0Oukggx8|;r~pmK`-DzfLeSZ=bX1EF#( zZJfvZiYFhx!lxepagt zT5zECh}H>d&!JT0?KoX80#{RF;7wgQvc4s=-AX0Q)8Rw6AaUTLmsHWW5vZfPhN=V0 z=le-O`A*v8W6HgUd?-P0cFIHDv;dM_y%nSlWFR@BFxij+rT5wTm)cnbeT%Z z82;fEMh!ZjNzZI1jK?#!HYXfkK21)_#Vbz%u*Ws_CXwfH-+lKpo{WJh%Xws3`P4Jr zpHh!&{46l0;d-@?)`5K5rwK!LdkQ;9SY93xh85+LaOTuezWl4clK!Aik|d=4jBK?J z!0PHzl=7G~Lm5Z~%Ce*!mxQvW2{Qs?TvM^PbMqK>;@ApD*N5sYz2vjiRY5-t&|1=E+B& zAS*I9&Yq&*i{6)whdOi2_Qs57Qy~)HW<>O*3m)GOKuB zAqaV|kG9b-j|}#%Z}R+OPvhU{NVAOFPoL*icfO4G{=zTOOd7;Atn^l>YsYA~%5>&H zjq$1k4s0F{vzm=DF<7ZLXEjIvL}Ls~Hp+LEBT92cVmvT$p=OQ6yPTrP7hy|_fEHiJ zWL*{SmpQNj3Na~yAmhk}L*l}2&REPl$e}?9zM+(cG@k>hC5@z{gCT$L%f5uK{hGHi z=;!?MZ+w&=`}aSJL6P?dJn`5gTz~3e4urcfUpgpDT+Gkqs3@wkqHJokQLGcw} zNRcwz-=e>~LYfw!G`rh@Bj--=mN$Ghr;aSg@E-4(OlIIcS>DHtmMFy&R7#~2u5Mqa zo|Yhi!EDA-f56t(4n;plS1F;}#T-i&A_pzkInzclZ7OU6SQu-euON)Cv$^HSa?8?i zi6SkydgUrRJ3E*nBOlEORiBfq#}Oq|)9ai#w!zC^{tAw)E|Vq-Yc#`t#z!7|jQ{Y{ zKgp$wml*HwM%#heHf^FHje$xw2O33P3(7{Tg8lIxPG(UFpiE@Cd&BHw-~Bs(4Lj7lRq6Yy4uT_HTB4ulR6?gvh%?h50xE*KI7d#z?UYJTMD}qTMGtdO(RL$lC<($BAWBw z_B(jbZ`WFkG1PU#KluB9mv_DEdpLjBT~zMH)~>&c_S@jQzwc~E4||l{YPZ^FaJvPN z-fF)`?Y~*wD~2>>QKBi5qFd0qM*Ix06h#qPEr1yqw1ws6Bhg7w=UP`gP&dRZq zxM@kDGEC)ZTuC!6X?#GXnlv@^1bpMDnhGz_(>;QPtT&_>3>ahuJ(Hox@l|9-amcSL z!GJO(-ea>AhhU9#K-s*?+D4(X0#ONuDA_YAE`|W+S+$7=n-w?__9uJn?d{?bOh0F7 zX_dma=)II`x{cHUrxnZOxZv2?pKyIP ziPiILYRJXP`0~Rb$eO zV<%6uJRGt#9B|^)DbAfc2W`v0{h=RbI@#yzzW%Rq=IjRF`A@!!_r3S0fRFR)*M2s$ z$&{yxI2T6=nh!ib|8N0uHUB(_A`f@iN@MO;HM8p6cG@rLJw>lmZhIDY~0!gJ4E#acLi+;e8*HndLp#3w$^V30Ge zN>+4^84MUV6G9V6^BzViW{susE$7c&;N=h8&u-&+_TsbL*xX`oXH41KxHao+Fd%;m$tsTV;l{6H5&W0c(E@mgWE zL7Rn39{^3$M5+FKK?rovXeWF7=!Etny7HKoWE=g;27 zSAW%4@$}PAbM@LaE?&OO?$!>gYip!MflU(X@sz=G0YR8l`(z@dMW6~$xjkC37_C`S z8M$^;`GCNTo$;7)BT!z#cXk-QteKQGZm$HLvpQM=DG-D+r|)Js>eJFj%K+#3!FRoj z@A;m0EKWx;8c+wJbYO@X{K6>U7^87sEa>e7(fKH8{wa|BD%RNN?q-K~ADe(DqK z?$mhT!zVsYIraR7|LH3^fBQO*Km81kKK2yXx2|K;3fDqe){%kNjkijMRBlWPWZ4ku z?V>`0YnljTxxnRomnS~)Xbgt2Il(!q=@gF!4;$wi(gJL4to$KmfRCzj5u{^k7J~tUeh;HyI-XJ2 zA$orj76q~Sy`U6iqR5n5NTr=L-9szN=Cw%)J_bo?6v_khqMH{m4a%5BFksm+!qprS zt)weT2ogdJ+(I)9eS`?$2j8GW)k%Hl#e@o_Qgrt$SBHEgQIMMmM8*)p?*1l%fB^v& z(CBz6MWBs-ne&wTRweW5DG@nFkPh_s#9Xipm8?^t;qlp`E)D5yGKFr0yIi zTG48SRvIUcAb~I~V~7+6ZKK6b*Q*vR)wwcAfZ!ZXD^Ll#3xWcTm6nP?BQR~E?F$N& zN#n)$HMz8e&QsKdKuG3uzXTTow(E~{{bnwwpZ6bUh{vkB1FGjQMk|JSa{N5BsqMn3 zP8AnJi_0Z~G+m)VMZ1L1vC8EIviC(;6$eaj0ag$FE%x_=XR-61Mm(dH zshgTvIc1G&WiY8uAq82kH!P9m?YJy@`PNUGu zMqkZB=PWPvSsCQ)+~{$2-y>N{T{WnXv9z>CHLZE(nd>O^G48qhr7RDQAbyvsDk@A1SZKTe5o<;FFXQmn3yNR4JXnK7MBP`#WkSQC>emY1SULAkesD22*%w1%P6 zSnb$Yi$G@MLIl~m^ikFCA>I>w41)-vfdrOLt#kG2^IYHFVQ5#l=Z+2j&R_ZKyzzA} zW6YcZMqFUll&Ew7CPion zgpM7-f&t+r+Bq!ztpL}F4Q8fmSA7Wx2<5m#*@?KkzOd{K$u4 z^BDlN*0@%pCu9rWIp&YUz4|&PEK^k_)2$YprJO%|H|OrSj}y0@peYlsT)u|1fiL*N z*YjDQbq`uA9)9>SzW(d}E+78Lui@5595)7C270N*cm+yP)|#!&OYC2!=GgO_~QWVXCOME4xSG_@-RR1p$}q=VVXm+0?l}zes77r{TX>` zV^~F6M#gvt0nAy=b<=bnhc_>{=Ea5R+YG5mNmBz>A+@J*O=O{9$uf=e8f6_OHB8GX zsu(irjmY+9Oy|ImVv$78{2u7GV{G&!JzOh@7QKoz&FCRiWyx3?u54{`W@Cf5{qZm2 z^s%F~t*|$q@XV(k#sK}%5&F3%U(VUF4#o|+fXQO8jF$%I18J&hbrkfYmZ<6(L*>u{ z(^*C7rdS2bCkE{9O;}qWp|xU5cBr+J5kCABj#K#`w{lEBro_+En_uYR#cieFYP1Ep^5C0;@IR>MQk?rHc43A>J@l>-3 zK@5A7hPrAnX2ANHb&ei6!uF)$Q;&X5T)~HS*8~sS> z<`*~pAT&+)%pfw>CG|8-R1ZeO>UP; zC5S|@cMgQk4LlVI+Nzttr3mHiqKfI| z!My-A>2@->czt!9B34lbL3fFet{dZ`N4j+TS0kMtD_y@>oM#osJgd_f<`e>sun2)7 z2{;$`JQZkh*f!paflhBO>JV6*5;}nUrv0X?ZM>j`RuIb~Epu$WiPuag5(4M|XhrYoQ&;Hnl^ditY+UYas%8c=(2UMFn? zxf6wSAgPlU+vx-5KxQi~3K*(5PFc50?WSbCoHXqLo-DN}l`*L&b3H*9R25IO?t>ECcIJP#8mshyl)o#?_tN?Isl~ZeN>Su?0q#yGA4-)gtofA@9^ zAidQ-)0+t3RUZAgya(4K_!?z=H&c(s-ytYSgrdkejPnbl+Fvnt;> z#5bfy6Uxq;N@^x!VOk4K73JrHLCU}w21QDNAtS*kp=mrSwWP`*GNow(%0y%KAP%cQ zrJy8@{&*-*f)`LKPQ;W^9owjzhA4?htxscsPy7P3@(6w*p)y)w(2U0=RpY6HVtFuP zX*I|1)lfrI)HKzUWL6u}`EI0OVu)A{=v}JJoILmcIRhEz%dV>^SHdIw) zMmlK_3A7?H6t++xf!)o^Ovg~SJ#IgJ7k}+9el>4=-F>Vq4Uo2_aSe6TAZ-(qTvLnI z79kuVA%U;fH_Z$JpM!3YA4^(@i=9jszE{`Y2r@jl)&o!kje_$kHgn zvsNRaTO4Uk(q%Jry1gi|2UO71&S6^>Ner%Hf5)MFF+3|u@w$ootU>pn@eXaFbpqNV zQ6vbh%%|fA%SRO#1_s{&sGX;qB`$J1CePuOkm~%@Uf7~^QZT3vI8x|&H#CuKBdXh5 z>HeVv}ct5=bxWwf+R)zpml_P7*0 z<#>;!LUCr}?7@z80FXvw$&hl2+pj3giskiH{?M0wF}K}z8>=g;^zw|_IqIs$m?%|K ziQ@d3)4c5~-_G8R=yRLr1s1iKD9@^jiV)K4}B@y zdteVk{X*dAjm9M;yt^MaI%WJGjO5+_QvCvV@rWk8Utwx#(U(Fa~ zIm4v^W^Ikv-uqHsd)K`@^zmQe#M&CEwWQYY_CN7d2>EwHk* z1g1cx4I(8qlbDjs;*-JIOGi>ueJ;6j5Bo}ImM^q|dinx>%@kMq%6u5m4!H#YH2 zL&KDfqpK_rQZ_ds_X=Nj48b~DHzZ22JDoDwxx!%O2>H?wA8Jy8+2(bOQFxVh3!j3f zsutaF4vxm<>WfT6q{D$a_OkaLl^aZ!;kyvCrWUX;3qs`_MNyDv17;qiX;4LzLN)wU{nL7_&HE(;5A+U30hiezF&?|CQ*Vedk?F!9w#sl}g zl+S(3Text?dAt{@YMfQ^iEe%;64*13Q{v>yu+2G1EPoax-3If|(J4|Oa zN0mmT<-;F+m|yt7FHjU2cinlOy=jR;)8{19@h(P>389mp3Z!9(qax@E&^_Tw9{g5v23PB|v@> zsga?=f6kqJHKIW$pRd_x&7y=&fHy zzbLr-j=T9IU;Za}$3J@qu1d(4a=d^vf|4|1K;1pC046=%m>a>YZo)v3=cGlSL7qi> z3GujU7E>!tcjCmy&wI0Aq0WmGbDI@_UPF}C_A;0WPJ~n$QiSt0nl7N8^Un^1;;O;iVP>Bakkw76EtQ+puspY!DA4~?Y7 zb$;VIQ3!#msj)VGM(Ymv>YiPTCvXc?O>_#$bw^(fu^6f?RsJ4R-hANSb7P?L5x3{~f!8Kgqn1gkra zYM7trg1PZ!P+)V#9GzQSkE9DNa)D3_HnSwyIHu@^7!L?pDhL^ks}b4=BB}(dEzSj8 zD^&C2?||SrSgO#t(7D01f@%T=p~wqNFQck!w2JqnO5@JXS*ogIHwz(}fzGdy1e~*E zSqD-Ay&{jtGVkB9l=5l8Pv92HXWM-j5@>=fz|lq1;H)Lf4XQc_e_K#k=Y3`VJ;V~o zJn+ml_2ND{nB4**6rIO$ES`AweNC?W3}tt#+&Zzo*>-NN=^z^d?Fmt%x9F$gsfv3o;q=oJMXxU z5Bjr z@A$5N!gOzowW7xMEus{yi%b_JM?yvr-LY>1jdSQsBf*i{oVJ@7hae=D$Rh0)UO>kX z3AjoVMB%F%tR>NoS+x(l5?LNqgYBhg6xJGac9eu}QXgup1vg(10VE2m5~Ag)j#gqa z7lHxI08MHlUC#Tiuf>jZGgvzRzf#oke`paJnoc4p3rT(5RnzB=aq-?!DAfajN)*!) zPOq(T~U2bx1`!ZS!qatG_ft_pDklJx%Fk*Rm zd2xfgj=7L(#kt#-SsoZZ`RFEuDXV=!wGG=huF_N!mPX6$?e4I(ca=dg;^fJ5ERROK z?z3Lbt6p&r?|biMj4|Bt(wDNjJUS3&sg|;y0?^O;H1$5>!R9q8G^`%!F&y>T-oMJT zmp+Ek6(>)fCCH4Zdyb31KlP`-jQ``WJ&5NDPFaFoiJ-N$R856L$nzX2$Lwugr)P9z z^z?eHW+`WeBlKdY5^mc##{=g#c<`xva-C)^=nu8#3w$%?)EOdevg;l`%?Nv!O#56PxI41 z|8t0MP?u zgO6TwJ>~&0FJx;d)ydzbWBHVTB%Ob4+#g@Z!ci`eiNO{#Nmnsf2t@DSg~lEbm7>V;uEJz-_gv@qJ6syjFM1?IFy+yYJsi(NW=RJr;!CQs zVr6-mBdfnDye8ja{>Id|Q8njSN5 zTOU&NqNPWYBphE|isv0jZ9_fYV#|YH43i00u3Uq1LKqZOc-B@{+1c4)ZEZx+Hw@Jh z+nW=dOL3}Ue=75$<>n;yA> zqeqXErg`)QoivP>73H;O`RK2IjGgU$`b8hD4R@To4}j@@KvrWQiZap>NHYxXX7Bcn z;UBdE6TE;?DN9RB3nZgdw29AF7Xn&G zHezBFG*COYc;>{b)$MIJY`D(X#&(|*0T&`m(@DT}Qf95XATrlIQ$w6v#iFQ1Wof*| z9rz^@sGRBm$&Sf)2uBLAD27JR`ryU+?>dQ~oC_gJn^oMW%xWwu?gt0BlWql4O~^FL zfs(M0>MNCWpd*x4<3r#eniNPBrc;&_2{Ej%N@K`dcjhK907Y%0k+$tZnKVM%omPbt z2e=NvRErI1oe+`;2D%nP(gmc=;nARRL1PhyJs6i$L>yMn6VLKoZd5=4Z+x{AliDT|~PB08JfL8b#juv;^RbJB(hVh2DI@gsQ^!ku#%^gd!9P93ypfB z6(~(xJ5UOnJ6sdL-9p5!o#1qrVz0Wuy*Y-cB2ei%R_Hu9%Y{I8C_pO$sL{Li(4P;Q z1nM%fZx>+UA0vi!SR3pv;ULt{a5ec-h0l|G>#WPDgX7_f8($J@76TY z?IHc`-gv9sYM%k^7C?HdeWo`N1wIF370gt}x$NO6X_$5_3{B7)6({Sy z;hwuVv9ZC$r!OM)ghtim#zG0D)TC*jEYA^NvUhzh3|0v?!Ax zT}Y5MacU~QMM;A1CNx@s^PMJ;I1x1mXbm73EFPhigwO;knPE)U`94PA&P(W~gbAqV z@nejpM?ozWOlvmFYaCl$;oON+w7y|`cb|}Iij^6qQk1*<>^IkuD?(LOtRFu?<7Yhn z>@|wjl)+#a(`p+>p+Kh@Cr_MWG+O47M;>8+dyk>b(K?=c?}eg)V=G74xa~Hiag2Ai zIDh&~7p#(k^0=~&(mn}TNn(^QF+d?Ght_@O)R|dXvA4Cwg;(9j*Zi?B<+kHT2|n=A zk3Pt^e#^J=Q$O+U7wH=Bg^kseYI2V(;p`jW_ug)*|pwcr&!#-6tCFx{SHaSQy)~%pAHj1U&KJ&Tje4!Eh zMSLw?NTE!(7@qss(s|6Po&nP_>$;#PnS)6S-^O{@j0xm(54y74BhOP@Im1uKtXw$H za1g_eT3UL;INQ}$@P0yC2w^Y!`f9BRO_XvanI$RWdskLZ#6W|l;jzb_=KuP(?*QQF z`cYoy(pnF@rYRkf(9`MQTC7OJM30RRcft?stQYMS_dZU83=O zJbm#JiC4Vg4R0Y$bFN-{o+lrD8iPUn8hx{ZpBfy{%L+1WnCx9gjRV_Puky)He4I;{ zFLCkNi<~}l417zG^`f+EHbW$^dG!i+-~Tcmd@9P2o8XyF$FyyWbB?X8D}cxLhvdTn zRkOp+-acqcqEmW3OTWliT^}(jhNQ-_aq2iLD@Qng?i}~u|8n;B_L)qk6h)6yr%v+f z&wdSG`@j7qKK9Tr0Aun77l6OH%&0-9YjtHlW#RzB<;TG{TjIp??Mq^k_ z2iOtp?d`Mgq4oylJXsdmX;Dh=KrAMmhx^Q>ho&oDd3+NC>r_vH@ig8Y1U7hReM|zD z;Mv;00f0l8(8L0T&6$Yf&W&T-ar^{+zhrkj#v~bK4YOvNZf-JbgrexNI>;DS zL&Vn%mzP*wP1!hgmXjMBJa_3L`@ixbu2xq8*xcG?XJ-m$5@-{w$>KgZ&A1$s%;T$- zjW!ZK@buHq(Nvy>mb!KXFW7#{(c`DNymOuBx1ZLR-6*sK%F1)~>J^~o_|YR6BTUC7Thm?Y zYRdAk;LPb$7%|{89?m}w6HqiHNwg(MXjxl50@UnoZLxZ0nU%E>S+8Ju6pJ3?@s!!D z#+NnTC`4I|QB1CFQcfzeqCndmn--i{Jwj^W_{o#papy}IE%kZup%1aScdhI5CFA{l z;CPgIi|hK#7MP=REet46L53)eSK$3TY|r3*v|z#K6lsd-sm^CQ7DmR?F?C&cpeXo8 zAwJrsC}mJ-*~!Hv`Upx6bRcT?j1Uj1Qe+DHX=GkQPSrHA=qwJ^FR*FKWIDyqszdj# zL|;^wV=>@W^b`~UvN+tTjs+WF5Ms~{x&ck}((N8tVO)cSs`F%2T2qlwIfv36N6n^D zdYtG8?&|2{8#<<=Zc}DeLs|&d=G4yNTETZr%aK-$rzN(~5zGlf6CApe^E*H%n$UJC z4~Yfs`Li(7Q9djZVmMa^M$H+d5TD<)G1YsXsP2@8M6g!ln)q24x&WQfMo>2d@3iLAHlv{iuY(<|H~A@x;Q(p(fxsR1gXQrMtpz8##$q=V%)x`DzZj z(K3guqq1fGOH@dKpmh|yS7jXARcFOOE7A572U>xCU8p+YJk z)H;Gmg>**aSxOMc<=q`V_Q*pltt_#;yvpWii~Xu3ZTd8gP&@DlsZnTS@Ty?y$K*zn z4h+U*m@LPpDM(A&%}k;^rUjLCUXQ+mJ0-F;fJEYqQmGaZM-zPX7PShcQtUk8b3v@? zz$@=CsqQ3KC8An#6TQ&HN3bkT>f%IL*_^x&lS$2$t5-0Yj^Lzt8ehl6>jZ9yXFnud z8eiv$C!XMquX_XQCyw)E_Ary_K53rC@0KXD8V*J*FR$U8=kX_>Kpf;sVMH^-(S*Rb z88bY3gg3qM_3Z8M@KZnaZZ30?jq|5b%Hzj1N?Z&&P>Tx&L?9WRlBEh|JUg3v^cpy} zeuDeX-@~b6$4E$c{_F?zA+EGsy?%)sJ2&{=fAvl#(+Z{GwXb_M zd69AK#1ZPrE;dV1NrKkPgbw`FDu9+K1q766mXzui4+kt3jmD`Mz7+*hNlY1y`o8E# z2jn(qdF2?R(SVth6t-YE7*LnZ;@Ioij0EAv<{sWnsp~1jw2zb6r{)vRd4(Qgc#}F< zu5nPW4>+0UiuwgZ`KI*nPBJBFWF#F1S|c;zkg(5tf(W_ENhQOJ!z)j!QkGYGG10V=g!~G@^YWMFWkf0`U>y*SKr5dFS(oBZ$FPQhAhk2I2+lJ+q)%4POc-;5d0?9 zbeBgTd4eDP;eXG4_uflWCoCYdi_3NsCA%PNg3B3 z#AAS>v!j?N%L|~jAybN~EKyjbN>S;dK6x;#FNy-nM6boz75xH?ktRxm6*0U?yu(#f zhQoDE431)r;nL;=CBlJ%P<0A`KFXNIzdc>BjLd^Hx&bwfV{`2lnjU$s!NBI`HLh-6 z`KGpfV z9=ZJt$5xM!W|rP?z{fuINgmyvvUaZE#EG+H<`Y!&glw&85(sSsEv{9O#h2?<6gi=Z z=PXToI5%Zycgp7eCGwGHune}BU@}YFwoLbTkiDAe<^;bXv7d#6)}YvXrFJi&aICF5QSsU|VTc znv`j%Xm&SQJ$;N<+xQ9LWcqJb9MEV2MO)d>#96Q?^W}B|^pHk3Gi6AO8f8 zJp6I4ZcoVa9Zu&XvM_}zj^(@iKe0k;bB0SpHcp?z2t4}4 zlT61o$4{I<<$daE%GUNi+nZY$m3Do-#~pW^Lz@cM1csv(R@YWId2N{wy9fe1kp9nC~1Y=^z zlj%G_MK#DFFwCSe^ve4vpA{#O9i0LOD$}5$^G=SStWt{97?jD8pqR~ORI@m~D^(*{ zT=#ylB@1G>cHN_C&P`NEjG+O97N|SqM|D6?^zekNfl&gqon*UkP${BWq9fE5v;mSl zUdaGiR~VQFQK_P%=ea;|Z3MRTJVa5U^E`rf&JjW<$=51|=-4Da8@tI^t`t>QG_>T63IWZ_AwlL$syz_lT=cA4`wfmR`jEacuK zkZT+LNC~*kyH+QM=E~i9iIV@0CEGZh2riB4nve+62C&WI{nlz+2XE>$J`WT+dgv|^ z=ey(Xu1A=kVB)6r{G=>^#i(p*n)yni3wVm8b26!^r9s=+-vWYa55PYsVF6lZHjPE@ zI)GM@A&uZ_LFFkq(N{ao5}F!NZG8P;%h1HINC{x|%|Kz0*jJsaVt?#jKfp-4A_0&! z7MjA$t)2f$_R zeGHc}p4?{pXznp7())i9e)p%E}C$`*)H)Xg5EYQ$tHGeTuis)I4K-bbs`ZsHj2 z8KZopC3^L#wndwS7DX#boY15xu4*tzhR|Y2BEYLs5}Ho(snDq*@roATEqWqoAl_3| z4#Y)(&KRiMC~4FhYZ3xE#d6AC-7tIld4@$!R`gj?ibiE5YD(oi%gqTk>l<9Uw#Bm- zudse<8G0!L6s`#!1yNIpV|_HhTFui>J zQvg_NSzkXwo+`Xol(}JJw88$xlq=UR^Dn;VU-0VBeI2h&5?ZC0Wft(b z8^v&l^9^}wDe^wXfK~?AdY*s&GQaq{x00yffa8!4GZ*zv;VedJB(52zb8FW#8s^U-6V7rBM5U9kHlHt9lGF6oD*PgO0 zQQf5W{2h0ZrI7((v?lG=VcKO_6!qRFDGhcx$5YYFYM!6$vA%u`Ne#!&onkhf@$jb} zW#z~kgTauO-1iayuIyan=YQ$fFbJ2fKF4rr$SdFQ8t%H|ZuU3#*xucymnzQOerE@Q z30ZDP^XN_aS+9IOb!qv~FMoi^WQTXX>j(JCxBYQeR+ll_@XA-c27u{whDb^|-KEzX zbNhvRFjjG7b%058n#n%XnPUCK8ooNq&W&Bp-gcJHfAi<_&?g_|>hrUF>smD{A$&?@s+c$2|%qmWvIZfKj zsOuS9`}<7CV@_@yr`PL|BniEu#~=EGujN0z|DDwJ!Qvq+1f>&bV<=iS%BlAzgmMf^ zE0~@_O&fgYZJ4KN*WWZQjbUSESm0+KRYFrWQRc4Z+1G#~hQ0(rLWR`^y0OnA3r5_$ zKYMY^!^fu63EAo@$4?x^`I@b*eX6QvFc_ieBQgc5SQtQJuuM*5;z`A8@MG>XBodJaHQ*Pn=?P

*R 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≧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:! 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�VmFxzAA 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

7j>scyFEW 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%0D@f89tYs4CT-wO`;|!jM2v9m` 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 z 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

|2j5eC6?1m|gfH?db-$ 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 diff --git a/docs/_static/esp32-DevKitM-1-isometric.png b/docs/_static/esp32-DevKitM-1-isometric.png deleted file mode 100644 index af9aa306cb8f244cf3b40857b2655327a0e2ecb8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1215003 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Ξ2nNRB$ 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 U*CY?3+_fltixEmKc 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%0DJ9lg9LGUtnkbA=O3~=N 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%0Anjx5GRUaMC3T7t%6o2%abZ+!UbM~GRE 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�drh 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

{R5Y5CwDxSJu`y)f zWKTLeLf)|wy)>IoGg3Bv$9iHF45ij7_mP<2tB_CYF2S243?22G1?$&jVR zB|iP}PjKhm2l(2Tzs!#LEu4SOKK|;xZ|ASx`*wcuSN|*Td;6bp{DDI>f`~1hfSHLF zc^82~9Il~+rrBuWZ!NJ#Fj`w?d2x~1nJuKrm`WIWt39%` zMEa7dKg9DCkp?RbUfuu{#`KWZBBYORELL|YtRYOs#L7oSQyjVfIQO}`z!=gO^=Z49 z&-}~3&|h2S&_k!V=z@!Q*3+KGk6roLN3Nx_b8`SxRY6tO7?ZP=;<49W&+~uj*Ldq6 zzk@G){`1^<&)r;c*%b^%eY|!9Yx=A&_ej=`acX@XfJ1lR$=MfOTHmu*d%Wr;uj12R z*eq%D1pD`&1*s$}6Pl5SDQeoYj{==CGHVoRfU<^E_CQEvjmk&)nytG!Xf4T(FVY(? z(%CZ414kZY*sC{U|M<^;n-{(GrL^OaG|4%(beO~U-U~pUFB44!AQVNJQ`iDe3bt+C zLeL1w(v&c2v29C>Jv+{(Ge1MrjJV+`PhoP)c5eO7mr+WQWgc;R3;VQY`RD>GtBWX3 zae8B&s2Q?-M~jWsCHx$+Q9?Y^qS*)#NTxayq-ly&3Ts?F-DAr7K7hhkK9!+nO9Ors zp_Ib&JSHb+(1C}wmNd_h#!?znUo$o_Q=@T$5Q03 z&M8IZ3{pz6A|+RfX567)t)n7KmF8GikY}2el^)43CCdz>QJ=~|#|s$_hFB$tf|%{w zw{zVM*R$iSnDv!)4&Hy9#l>Zc)I<9Lk`S#GD1kyEl)@BsC2hUb5lCNQjlt6)K@gB+ zDMgu+rbEV~0WW&tOL_9sp2*?D$NAPbzJ%};F4GM98)UlV$dQM*;~TdU#T~A`_DZ5C zW@fTYJ{r(y#*{^lkkvO$;l3@LyY>v=;Ec}be_m&>24{3e{~Psx64t;PgWrmA*4FJ> zKTOd6kG=pQBt??#$Yu2?X$zERDUCoi4ehB(Mk|X92dl&qq{vZaO0l6B4*Fbl)zxjAndnSnt!3f#0?t*0K}dhp!&Zi7 zGomUCP~rOxAR&wb;!eacO=+}ZX6Lt2*~LgfsHdS+WJ!)MV}f?T z)Ycu?Ji}Tze(VG@GuwFdwO6rY$97JgI?1O#^;wRdIzr&b?AdcRGgEUY;p0h?>ah zz|P(0Fig|B@Igp~=aXoQ^E{;a(W9pjbrKE(N`oJUj0OXODB__953#(o#K!6>$zVt^ z9HQ|FyasdaNgClKQb4b_$`9`N9=Cnx9?m=O0(R}(PM{-B96G`A2anP3<&v*1!b|G9tQYv1@R|M(A|;O{^E zMMnJ%p7Da`@lT)rG|zwWi+JBV{tSyH?o84Y0^d1M4V)7-8&XLk&!^#eo7^#h(h4sK zu|=JTmegag*4j<3G>?>0K%M;4+N-0+Kxqrw6O*J_MpopsCnk|XlJCJE8ci-|y0PNYj zjoE#>7*-`NS;x~p$!N^d>S=EI%J%YOc z1R)JZdU#=g@dY;9K**9t;4vDlQy}WG%W*<;qC=G%;#Q2O3W6wLcGo2D*h1c*X?3jWK<8mxHg&7g*7;6oI4#2_4)=67sEmcvVjKJUs z!w@NDjjC}Dj6o=cbq*;Ujmc>|*{lm?(u$(6toLj44(HHeh_5w5DayQ{p%j6R$kGCb zL}?#qB_0)($tg{N?^~cG%Liy3l5HB!)*5u68I6V*Q_*TQnVQ-{5Hu-@F-0*(sSegE zigH9&=GZ($T8;2a8et2qeUedK@Ti=_^8`u?q;xoI$g(j?N@Nh?NllejoLpRHJQ{-W zDJn;xVnWX%tij>P%Z%P|fOLXRr_E${hHfju8}Dui`dAxM%0DFj7TP?fdeGd(*4LU8)jDOT6ku%)Hi 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%0AHb1d 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

  • IDelnOo>m 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�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

    {xY{FHHgXwY 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 diff --git a/docs/_static/esp32-DevKitM-1_v1_SystemBlock.png b/docs/_static/esp32-DevKitM-1_v1_SystemBlock.png deleted file mode 100644 index 35eac16c8d9544abd8ded4b940976c151b1287da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 166318 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 diff --git a/docs/_static/esp32-devkitm-1-v1-annotated-photo.png b/docs/_static/esp32-devkitm-1-v1-annotated-photo.png deleted file mode 100644 index ffcaa4ac48f82048f172d1d6972ad1e52deae0f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 509115 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℞)c*=@t?J%N9~SL-xnQfBg%0ditA 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�X6;kJ2VEWB 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

    R2QPqvA8>b=Jw}4_lEuD! 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

    Setup serial port for QEMU - If you are enabling eFuses on esp32c3 emulated using QEMU then we shall set the serial port as follows: + If you are enabling eFuses on ESP32-C3 emulated using QEMU then we shall set the serial port as follows: export ESPPORT=socket://localhost:5555 @@ -40,19 +39,23 @@ export ESPPORT=/* Serial port to which esp is connected */
    -**Please make sure to perform this step every time when you open a new terminal to use `esptool/espefuse` commands.** +**Make sure to perform this step every time when you open a new terminal to use `esptool/espefuse` commands.** ### 2. Erase flash We shall erase the flash on the device to ensure a clean state. -```idf.py -p $ESPPORT erase_flash``` +``` +idf.py -p $ESPPORT erase_flash +``` ### 3. Install esptool We shall require esptool utility which can be installed as follows: -```pip install esptool``` +``` +pip install esptool +``` ### 4. Installing qemu (optional) @@ -112,7 +115,8 @@ When the application is built (later in the workflow) the `bootloader` and `appl ``` espsecure.py sign_data --version 2 --keyfile /* Signing key placeholder */ --output bootloader-signed.bin build/bootloader/bootloader.bin - + ``` + ``` espsecure.py sign_data --version 2 --keyfile /* Signing key placeholder */ --output my-app-signed.bin build/security_features.bin ``` @@ -122,7 +126,7 @@ When the application is built (later in the workflow) the `bootloader` and `appl Details about the Flash Encryption protocol can be found at the [Flash Encryption documentation](https://docs.espressif.com/projects/esp-idf/en/stable/esp32c3/security/flash-encryption.html) The indicates the status of Flash Encryption feature for the chip. The example also demonstrates writing and reading encrypted partitions in flash. -Please follow below steps to enable Flash Encryption: +Follow below steps to enable Flash Encryption: 1. Generate Flash Encryption keys @@ -163,9 +167,11 @@ It can be done with following commands: ``` espsecure.py encrypt_flash_data --aes_xts --keyfile my_flash_encryption_key.bin --address 0x0 --output encrypted_data/bootloader-enc.bin build/bootloader/bootloader.bin - +``` +``` espsecure.py encrypt_flash_data --aes_xts --keyfile my_flash_encryption_key.bin --address 0xD000 --output encrypted_data/partition-table-enc.bin build/partition_table/partition-table.bin - +``` +``` espsecure.py encrypt_flash_data --aes_xts --keyfile my_flash_encryption_key.bin --address 0x20000 --output encrypted_data/security_features-enc.bin build/security_features_app.bin ``` @@ -200,7 +206,7 @@ We shall use the [nvs_partition_gen.py](../../../components/nvs_flash/nvs_partit Execute following command to generate the encrypted NVS partition. ``` - python3 nvs_partition_gen.py encrypt /* CSV placeholder */ nvs_encr_partition.bin /* NVS partition offset */ --inputkey keys/nvs_encr_key.bin + python3 $IDF_PATH/components/nvs_flash/nvs_partition_generator/nvs_partition_gen.py encrypt /* CSV placeholder */ nvs_encr_partition.bin /* NVS partition offset */ --inputkey keys/nvs_encr_key.bin ``` * `CSV placeholder`: CSV file which contains data of the NVS partition. See [CSV file format](https://docs.espressif.com/projects/esp-idf/en/stable/esp32c3/api-reference/storage/nvs_partition_gen.html#csv-file-format) for more details. * `NVS partition offset`: NVS partition offset. Can be found out by executing `idf.py partition-table` @@ -463,7 +469,7 @@ A hex file containing the eFuse configuration of ESP32C3 v0.3 (ECO3) has been ke This command shall start a serial connection with QEMU. Keep this running in one terminal and execute espefuse commands in an alternate terminal. - After espefuse commands are used to update the eFuses of the emulated esp the eFuse file generated in *Step 1* shall get ovwewritten. To revert to the original state, execute the command provided in *Step 1* once again. + After espefuse commands are used to update the eFuses of the emulated esp the eFuse file generated in *Step 1* shall get overwritten. To revert to the original state, execute the command provided in *Step 1* once again. 3. Execute the commands to enable security features From 6d86e581d3fbe3d932c16d99f9463f4de9a113f0 Mon Sep 17 00:00:00 2001 From: Aditya Patwardhan Date: Mon, 14 Oct 2024 11:18:49 +0530 Subject: [PATCH 169/365] feat(security): Added README for security examples --- examples/security/README.md | 39 +++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 examples/security/README.md diff --git a/examples/security/README.md b/examples/security/README.md new file mode 100644 index 000000000000..2d9f53a4c760 --- /dev/null +++ b/examples/security/README.md @@ -0,0 +1,39 @@ +# Security Examples + +## Security Features App + +This example demonstrates how to enable most of the security features on the ESP32 series SoC with the help of host-based tools such as (idf.py, esptool, espsecure). The example also supports the use of QEMU emulated ESP32-C3 for testing the security features without the need for physical hardware. +Note: Currently, this example is only supported on the ESP32-C3 SoC. +The example demonstrates the following security features: +* Secure Boot V2 +* Flash Encryption +* HMAC-based NVS Encryption +* Secure JTAG Return Material Access + +## Flash Encryption + +The Flash Encryption example for the ESP32 series SoC demonstrates how to enable and use flash encryption in Development and Release modes. +It includes: +* Checking the status of flash encryption and relevant eFuses. +* Writing to and reading from encrypted flash partitions. +* Initializing FATFS and NVS partitions, both encrypted and non-encrypted. +* Flashing the example in different modes, with guidance on handling encrypted data. + +## NVS Encryption - HMAC + +This example demonstrates how to use NVS (Non-Volatile Storage) encryption with an HMAC-based encryption key protection scheme on Espressif SoC chips. The encryption keys are derived from an HMAC key stored in eFuse, ensuring they are not stored in flash memory. This approach eliminates the need for a separate nvs_keys partition and does not require flash encryption to be enabled. +The steps include: +* Generating a secure HMAC key using the host tool. +* Burning the HMAC key into the eFuse. +* Enabling the HMAC-based NVS encryption scheme. +* Reading and writing to the encrypted NVS partition. + +## HMAC Soft JTAG + +The "JTAG Re-enable Example" demonstrates how to use the HMAC peripheral to securely re-enable a software-disabled JTAG interface after authentication on supported ESP32 Series SoCs. This is useful for implementing the Return Material Access (RMA) feature for a device. +The steps include: +* Generating a 32-byte HMAC key. +* Burning the key to an eFuse. +* Generating token data from the key. +* Using commands to re-enable JTAG access. + From 4d7436f861fd47da2b3d0220ebdfb42da030ea19 Mon Sep 17 00:00:00 2001 From: Linda Date: Fri, 20 Sep 2024 12:17:36 +0800 Subject: [PATCH 170/365] docs: update application examples for modbus.rst, mqtt.rst and lwip.rst --- docs/en/api-guides/lwip.rst | 27 ++++++++++------- docs/en/api-reference/network/esp_netif.rst | 15 +++++----- docs/en/api-reference/protocols/icmp_echo.rst | 6 ++-- docs/en/api-reference/protocols/modbus.rst | 17 ++++++----- docs/en/api-reference/protocols/mqtt.rst | 29 ++++++++++++------- docs/zh_CN/api-guides/lwip.rst | 23 ++++++++++----- .../zh_CN/api-reference/network/esp_netif.rst | 14 ++++----- .../api-reference/protocols/icmp_echo.rst | 2 +- docs/zh_CN/api-reference/protocols/modbus.rst | 11 ++++--- docs/zh_CN/api-reference/protocols/mqtt.rst | 25 +++++++++++----- 10 files changed, 102 insertions(+), 67 deletions(-) diff --git a/docs/en/api-guides/lwip.rst b/docs/en/api-guides/lwip.rst index 462ded4e9eb0..1920e2b03adf 100644 --- a/docs/en/api-guides/lwip.rst +++ b/docs/en/api-guides/lwip.rst @@ -31,9 +31,9 @@ Some common lwIP app APIs are supported indirectly by ESP-IDF: DNS server configuration in lwIP is global, not interface-specific. If you are using multiple network interfaces with distinct DNS servers, exercise caution to prevent inadvertent overwrites of one interface's DNS settings when acquiring a DHCP lease from another interface. -- Simple Network Time Protocol (SNTP) is also supported via the :doc:`/api-reference/network/esp_netif`, or directly via the :component_file:`lwip/include/apps/esp_sntp.h` functions, which also provide thread-safe API to :component_file:`lwip/lwip/src/include/lwip/apps/sntp.h` functions, see also :ref:`system-time-sntp-sync`. +- Simple Network Time Protocol (SNTP) is also supported via the :doc:`/api-reference/network/esp_netif`, or directly via the :component_file:`lwip/include/apps/esp_sntp.h` functions, which also provide thread-safe API to :component_file:`lwip/lwip/src/include/lwip/apps/sntp.h` functions, see also :ref:`system-time-sntp-sync`. For implementation details, see :example:`protocols/sntp`. This example demonstrates how to use the LwIP SNTP module to obtain time from internet servers, configure the synchronization method and interval, and retrieve time using the SNTP-over-DHCP module. - ICMP Ping is supported using a variation on the lwIP ping API, see :doc:`/api-reference/protocols/icmp_echo`. -- ICMPv6 Ping, supported by lwIP's ICMPv6 Echo API, is used to test IPv6 network connectivity. For more information, see :example:`protocols/sockets/icmpv6_ping`. +- ICMPv6 Ping, supported by lwIP's ICMPv6 Echo API, is used to test IPv6 network connectivity. For more information, see :example:`protocols/sockets/icmpv6_ping`. This example demonstrates how to use the network interface to discover an IPv6 address, create a raw ICMPv6 socket, send an ICMPv6 Echo Request to a destination IPv6 address, and wait for an Echo Reply from the target. - NetBIOS lookup is available using the standard lwIP API. :example:`protocols/http_server/restful_server` has the option to demonstrate using NetBIOS to look up a host on the LAN. - mDNS uses a different implementation to the lwIP default mDNS, see :doc:`/api-reference/protocols/mdns`. But lwIP can look up mDNS hosts using standard APIs such as ``gethostbyname()`` and the convention ``hostname.local``, provided the :ref:`CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES` setting is enabled. - The PPP implementation in lwIP can be used to create PPPoS (PPP over serial) interface in ESP-IDF. Please refer to the documentation of the :doc:`/api-reference/network/esp_netif` component to create and configure a PPP network interface, by means of the ``ESP_NETIF_DEFAULT_PPP()`` macro defined in :component_file:`esp_netif/include/esp_netif_defaults.h`. Additional runtime settings are provided via :component_file:`esp_netif/include/esp_netif_ppp.h`. PPPoS interfaces are typically used to interact with NBIoT/GSM/LTE modems. More application-level friendly API is supported by the `esp_modem `_ library, which uses this PPP lwIP module behind the scenes. @@ -53,17 +53,24 @@ A wide range of BSD Sockets reference materials are available, including: - `Single UNIX Specification - BSD Sockets page `_ - `Berkeley Sockets - Wikipedia page `_ -Examples -^^^^^^^^ +Application Examples +^^^^^^^^^^^^^^^^^^^^ A number of ESP-IDF examples show how to use the BSD Sockets APIs: -- :example:`protocols/sockets/tcp_server` -- :example:`protocols/sockets/tcp_client` -- :example:`protocols/sockets/udp_server` -- :example:`protocols/sockets/udp_client` -- :example:`protocols/sockets/udp_multicast` -- :example:`protocols/http_request`: this simplified example uses a TCP socket to send an HTTP request, but :doc:`/api-reference/protocols/esp_http_client` is a much better option for sending HTTP requests +- :example:`protocols/sockets/non_blocking` demonstrates how to configure and run a non-blocking TCP client and server, supporting both IPv4 and IPv6 protocols. + +- :example:`protocols/sockets/tcp_server` demonstrates how to create a TCP server that accepts client connection requests and receives data. + +- :example:`protocols/sockets/tcp_client` demonstrates how to create a TCP client that connects to a server using a predefined IP address and port. + +- :example:`protocols/sockets/tcp_client_multi_net` demonstrates how to use Ethernet and Wi-Fi interfaces together, connect to both simultaneously, create a TCP client for each interface, and send a basic HTTP request and response. + +- :example:`protocols/sockets/udp_server` demonstrates how to create a UDP server that receives client connection requests and data. + +- :example:`protocols/sockets/udp_client` demonstrates how to create a UDP client that connects to a server using a predefined IP address and port. + +- :example:`protocols/sockets/udp_multicast` demonstrates how to use the IPV4 and IPV6 UDP multicast features via the BSD-style sockets interface. Supported Functions ^^^^^^^^^^^^^^^^^^^ diff --git a/docs/en/api-reference/network/esp_netif.rst b/docs/en/api-reference/network/esp_netif.rst index 70faff41a154..e9ffb448beaa 100644 --- a/docs/en/api-reference/network/esp_netif.rst +++ b/docs/en/api-reference/network/esp_netif.rst @@ -82,20 +82,19 @@ Common Network Interfaces As the initialization of network interfaces could be quite complex, ESP-NETIF provides some convenient methods of creating the most common ones, such as Wi-Fi and Ethernet. -Please refer to the following example to understand the initialization process of the default interface: +Please refer to the following examples to understand the initialization process of the default interface: +.. list:: -.. only:: SOC_WIFI_SUPPORTED - - - Wi-Fi Station: :example_file:`wifi/getting_started/station/main/station_example_main.c` + :SOC_WIFI_SUPPORTED: - :example:`wifi/getting_started/station` demonstrates how to use the station functionality to connect {IDF_TARGET_NAME} to an AP. -- Ethernet: :example_file:`ethernet/basic/main/ethernet_example_main.c` + :CONFIG_ESP_WIFI_SOFTAP_SUPPORT: - :example:`wifi/getting_started/softAP` demonstrates how to use the SoftAP functionality to configure {IDF_TARGET_NAME} as an AP. -- L2 TAP: :example_file:`protocols/l2tap/main/l2tap_main.c` + - :example:`ethernet/basic` demonstrates how to use the Ethernet driver, attach it to `esp_netif`, and obtain an IP address that can be pinged. -.. only:: CONFIG_ESP_WIFI_SOFTAP_SUPPORT + - :example:`protocols/l2tap` demonstrates how to use the ESP-NETIF L2 TAP interface to access the Data Link Layer for receiving and transmitting frames, implement non-IP protocols, and echo Ethernet frames with specific EthTypes. - - Wi-Fi Access Point: :example_file:`wifi/getting_started/softAP/main/softap_example_main.c` + - :example:`protocols/static_ip` demonstrates how to configure Wi-Fi as a station, including setting up a static IP, netmask, gateway and DNS server. .. only:: SOC_WIFI_SUPPORTED diff --git a/docs/en/api-reference/protocols/icmp_echo.rst b/docs/en/api-reference/protocols/icmp_echo.rst index 929211088b47..5aa1451133aa 100644 --- a/docs/en/api-reference/protocols/icmp_echo.rst +++ b/docs/en/api-reference/protocols/icmp_echo.rst @@ -109,10 +109,10 @@ Get Runtime Statistics As the example code above, you can call ``esp_ping_get_profile`` to get different runtime statistics of ping session in the callback function. -Application Example -------------------- +Application Examples +-------------------- -ICMP echo example: :example:`protocols/icmp_echo` +- :example:`protocols/icmp_echo` demonstrates how to implement a simple ping command line utility to test if a remote host is reachable on the IP network, using ICMP echo request packets. API Reference ------------- diff --git a/docs/en/api-reference/protocols/modbus.rst b/docs/en/api-reference/protocols/modbus.rst index c74978e2f246..529f3c8b4143 100644 --- a/docs/en/api-reference/protocols/modbus.rst +++ b/docs/en/api-reference/protocols/modbus.rst @@ -14,15 +14,18 @@ The documentation can be found through the link below: * `ESP-Modbus documentation (English) `__ -Application Example -------------------- +Application Examples +-------------------- The examples below demonstrate the ESP-Modbus library of serial and TCP ports for both slave and master implementations respectively. -- :example:`protocols/modbus/serial/mb_slave` -- :example:`protocols/modbus/serial/mb_master` -- :example:`protocols/modbus/tcp/mb_tcp_slave` -- :example:`protocols/modbus/tcp/mb_tcp_master` +- :example:`protocols/modbus/serial/mb_slave` demonstrates how to use {IDF_TARGET_NAME} as a Modbus serial slave device with the esp-modbus stack, enabling an external Modbus host to read and write device parameters using the Modbus protocol. + +- :example:`protocols/modbus/serial/mb_master` demonstrates how to use the esp-modbus stack port on {IDF_TARGET_NAME} as a Modbus serial master device, capable of reading and writing values from slave devices in a Modbus segment. + +- :example:`protocols/modbus/tcp/mb_tcp_slave` demonstrates the esp-modbus TCP slave stack port, allowing an external Modbus host to read and write device parameters via the Modbus protocol. + +- :example:`protocols/modbus/tcp/mb_tcp_master` demonstrates how to use the esp-modbus stack port on {IDF_TARGET_NAME} as a Modbus TCP master device, capable of reading and writing values from slave devices in a Modbus network. Please refer to the ``README.md`` documents of each specific example for details. @@ -30,5 +33,3 @@ Protocol References ------------------- - For the detailed protocol specifications, see `The Modbus Organization `_. - - diff --git a/docs/en/api-reference/protocols/mqtt.rst b/docs/en/api-reference/protocols/mqtt.rst index 7c5899de56c9..b408c3bc2d8a 100644 --- a/docs/en/api-reference/protocols/mqtt.rst +++ b/docs/en/api-reference/protocols/mqtt.rst @@ -19,16 +19,25 @@ Features Application Examples ---------------------- - - * :example:`protocols/mqtt/tcp`: MQTT over TCP, default port 1883 - * :example:`protocols/mqtt/ssl`: MQTT over TLS, default port 8883 - * :example:`protocols/mqtt/ssl_ds`: MQTT over TLS using digital signature peripheral for authentication, default port 8883 - * :example:`protocols/mqtt/ssl_mutual_auth`: MQTT over TLS using certificates for authentication, default port 8883 - * :example:`protocols/mqtt/ssl_psk`: MQTT over TLS using pre-shared keys for authentication, default port 8883 - * :example:`protocols/mqtt/ws`: MQTT over WebSocket, default port 80 - * :example:`protocols/mqtt/wss`: MQTT over WebSocket Secure, default port 443 - * :example:`protocols/mqtt5`: Uses ESP-MQTT library to connect to broker with MQTT v5.0 +-------------------- + + - :example:`protocols/mqtt/tcp` demonstrates how to implement MQTT communication over TCP (default port 1883). + + - :example:`protocols/mqtt/ssl` demonstrates how to use SSL transport to implement MQTT communication over TLS (default port 8883). + + - :example:`protocols/mqtt/ssl_ds` demonstrates how to use digital signature peripheral for authentication to implement MQTT communication over TLS (default port 8883). + + - :example:`protocols/mqtt/ssl_mutual_auth` demonstrates how to use certificates for authentication to implement MQTT communication (default port 8883). + + - :example:`protocols/mqtt/ssl_psk` demonstrates how to use pre-shared keys for authentication to implement MQTT communication over TLS (default port 8883). + + - :example:`protocols/mqtt/ws` demonstrates how to implement MQTT communication over WebSocket (default port 80). + + - :example:`protocols/mqtt/wss` demonstrates how to implement MQTT communication over WebSocket Secure (default port 443). + + - :example:`protocols/mqtt5` demonstrates how to use ESP-MQTT library to connect to broker with MQTT v5.0. + + - :example:`protocols/mqtt/custom_outbox` demonstrates how to customize the outbox in the ESP-MQTT library. MQTT Message Retransmission --------------------------- diff --git a/docs/zh_CN/api-guides/lwip.rst b/docs/zh_CN/api-guides/lwip.rst index 34e8b485fe21..4ebc5975531f 100644 --- a/docs/zh_CN/api-guides/lwip.rst +++ b/docs/zh_CN/api-guides/lwip.rst @@ -31,9 +31,9 @@ ESP-IDF 间接支持以下常见的 lwIP 应用程序 API: lwIP 中的 DNS 服务器配置为全局配置,而非针对特定接口的配置。如需同时使用不同 DNS 服务器的多个网络接口,在从一个接口获取 DHCP 租约时,请注意避免意外覆盖另一个接口的 DNS 设置。 -- 简单网络时间协议 (SNTP),由 :doc:`/api-reference/network/esp_netif` 功能间接支持,或通过 :component_file:`lwip/include/apps/esp_sntp.h` 中的函数直接支持。该函数还为 :component_file:`lwip/lwip/src/include/lwip/apps/sntp.h` 函数提供了线程安全的 API,请参阅 :ref:`system-time-sntp-sync`。 +- 简单网络时间协议 (SNTP),由 :doc:`/api-reference/network/esp_netif` 功能间接支持,或通过 :component_file:`lwip/include/apps/esp_sntp.h` 中的函数直接支持。该函数还为 :component_file:`lwip/lwip/src/include/lwip/apps/sntp.h` 函数提供了线程安全的 API,请参阅 :ref:`system-time-sntp-sync`。有关详细信息,请见 :example:`protocols/sntp`。该示例演示了如何使用 LwIP SNTP 模块从互联网服务器获取时间、配置同步方法与时间间隔,并使用 SNTP-over-DHCP 模块检索时间。 - ICMP Ping,由 lwIP ping API 的变体支持,请参阅 :doc:`/api-reference/protocols/icmp_echo`。 -- ICMPv6 Ping,由 lwIP 的 ICMPv6 Echo API 支持,用于测试 IPv6 网络连接情况。有关详细信息,请参阅 :example:`protocols/sockets/icmpv6_ping`。 +- ICMPv6 Ping,由 lwIP 的 ICMPv6 Echo API 支持,用于测试 IPv6 网络连接情况。有关详细信息,请参阅 :example:`protocols/sockets/icmpv6_ping`。该示例演示了如何使用网络接口发现 IPv6 地址,创建原始 ICMPv6 套接字,向目标 IPv6 地址发送 ICMPv6 Echo 请求,并等待目标返回 Echo 回复。 - NetBIOS 查找,由标准的 lwIP API 支持,:example:`protocols/http_server/restful_server` 示例中提供了使用 NetBIOS 在局域网中查找主机的选项。 - mDNS 与 lwIP 的默认 mDNS 使用不同实现方式,请参阅 :doc:`/api-reference/protocols/mdns`。但启用 :ref:`CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES` 设置项后,lwIP 可以使用 ``gethostbyname()`` 等标准 API 和 ``hostname.local`` 约定查找 mDNS 主机。 - lwIP 中的 PPP 实现可用于在 ESP-IDF 中创建 PPPoS(串行 PPP)接口。请参阅 :doc:`/api-reference/network/esp_netif` 组件文档,使用 :component_file:`esp_netif/include/esp_netif_defaults.h` 中定义的 ``ESP_NETIF_DEFAULT_PPP()`` 宏创建并配置 PPP 网络接口。:component_file:`esp_netif/include/esp_netif_ppp.h` 中提供了其他的运行时设置。PPPoS 接口通常用于与 NBIoT/GSM/LTE 调制解调器交互。`esp_modem `_ 仓库还支持更多应用层友好的 API,该仓库内部使用了上述 PPP lwIP 模块。 @@ -58,12 +58,19 @@ BSD 套接字的相关参考资料十分丰富,包括但不限于: 以下为 ESP-IDF 中使用 BSD 套接字 API 的部分示例: -- :example:`protocols/sockets/tcp_server` -- :example:`protocols/sockets/tcp_client` -- :example:`protocols/sockets/udp_server` -- :example:`protocols/sockets/udp_client` -- :example:`protocols/sockets/udp_multicast` -- :example:`protocols/http_request`:此简化示例使用 TCP 套接字发送 HTTP 请求,但更推荐使用 :doc:`/api-reference/protocols/esp_http_client` 发送 HTTP 请求 +- :example:`protocols/sockets/non_blocking` 演示了如何配置和运行一个支持 IPv4 和 IPv6 协议的非阻塞 TCP 客户端和服务器。 + +- :example:`protocols/sockets/tcp_server` 演示了如何创建一个 TCP 服务器,该服务器可以接受客户端的连接请求并接收数据。 + +- :example:`protocols/sockets/tcp_client` 演示了如何创建一个 TCP 客户端,该客户端使用预定义的 IP 地址和端口连接到服务器。 + +- :example:`protocols/sockets/tcp_client_multi_net` 演示了如何同时使用以太网和 Wi-Fi 接口连接,在每个接口上创建一个 TCP 客户端,并发送一个简单的 HTTP 请求和响应。 + +- :example:`protocols/sockets/udp_server` 演示了如何创建一个 UDP 服务器,该服务器可以接收客户端的连接请求和数据。 + +- :example:`protocols/sockets/udp_client` 演示了如何创建一个 UDP 客户端,该客户端使用预定义的 IP 地址和端口连接到服务器。 + +- :example:`protocols/sockets/udp_multicast` 演示了如何通过 BSD 风格的套接字接口使用 IPV4 和 IPV6 的 UDP 组播功能。 支持的函数 ^^^^^^^^^^^^^^^^^^^ diff --git a/docs/zh_CN/api-reference/network/esp_netif.rst b/docs/zh_CN/api-reference/network/esp_netif.rst index 00c0d6fe750f..596ecdf4f1e6 100644 --- a/docs/zh_CN/api-reference/network/esp_netif.rst +++ b/docs/zh_CN/api-reference/network/esp_netif.rst @@ -82,20 +82,20 @@ ESP-NETIF 组件使用了系统事件,典型的网络启动代码如下所示 初始化网络接口可能有些复杂,ESP-NETIF 提供了一些创建常见接口(例如 Wi-Fi 和以太网)的快捷方式。 -以下示例展示了默认接口的初始化过程: +请参考以下示例来了解如何初始化默认接口: -.. only:: SOC_WIFI_SUPPORTED +.. list:: - - Wi-Fi 站点::example_file:`wifi/getting_started/station/main/station_example_main.c` + :SOC_WIFI_SUPPORTED: - :example:`wifi/getting_started/station` 演示了如何使用 station 功能将 {IDF_TARGET_NAME} 连接到 AP。 -- 以太网::example_file:`ethernet/basic/main/ethernet_example_main.c` + :CONFIG_ESP_WIFI_SOFTAP_SUPPORT: - :example:`wifi/getting_started/softAP` 演示了如何使用 SoftAP 功能将 {IDF_TARGET_NAME} 配置为 AP。 -- L2 TAP: :example_file:`protocols/l2tap/main/l2tap_main.c` + - :example:`ethernet/basic` 演示了如何使用以太网驱动程序,将其添加到 `esp_netif`,并获取一个可 ping 的 IP 地址。 -.. only:: CONFIG_ESP_WIFI_SOFTAP_SUPPORT + - :example:`protocols/l2tap` 演示了如何使用 ESP-NETIF L2 TAP 接口访问数据链路层,以接收和传输帧,实现非 IP 协议,并使用特定的 EthTypes 回显以太网帧。 - - Wi-Fi 接入点::example_file:`wifi/getting_started/softAP/main/softap_example_main.c` + - :example:`protocols/static_ip` 演示了如何将 Wi-Fi 配置为 station,包括设置静态 IP、子网掩码、网关和 DNS 服务器。 .. only:: SOC_WIFI_SUPPORTED diff --git a/docs/zh_CN/api-reference/protocols/icmp_echo.rst b/docs/zh_CN/api-reference/protocols/icmp_echo.rst index 87dea76943a7..38bb987ac052 100644 --- a/docs/zh_CN/api-reference/protocols/icmp_echo.rst +++ b/docs/zh_CN/api-reference/protocols/icmp_echo.rst @@ -112,7 +112,7 @@ IoT 设备通常需要检查远程服务器是否可用。如果服务器离线 应用示例 ---------- -ICMP echo 示例: :example:`protocols/icmp_echo` +- :example:`protocols/icmp_echo` 演示了如何实现一个简单的 ping 命令行工具,使用 ICMP 回显请求数据包测试远程主机在 IP 网络上的可达性。 API 参考 -------------- diff --git a/docs/zh_CN/api-reference/protocols/modbus.rst b/docs/zh_CN/api-reference/protocols/modbus.rst index 3d88cbcfba89..11234ae48437 100644 --- a/docs/zh_CN/api-reference/protocols/modbus.rst +++ b/docs/zh_CN/api-reference/protocols/modbus.rst @@ -19,10 +19,13 @@ ESP-Modbus 以下示例分别介绍了 ESP-Modbus 库的串行端口、TCP 端口的从机和主机实现。 -- :example:`protocols/modbus/serial/mb_slave` -- :example:`protocols/modbus/serial/mb_master` -- :example:`protocols/modbus/tcp/mb_tcp_slave` -- :example:`protocols/modbus/tcp/mb_tcp_master` +- :example:`protocols/modbus/serial/mb_slave` 演示了如何使用 {IDF_TARGET_NAME} 作为 Modbus 串行从设备,通过 esp-modbus 栈,使外部 Modbus 主机能够使用 Modbus 协议读取和写入设备参数。 + +- :example:`protocols/modbus/serial/mb_master` 演示了如何在 {IDF_TARGET_NAME} 上使用 esp-modbus 栈端口作为 Modbus 串行主设备,读取和写入 Modbus 网络中从设备的值。 + +- :example:`protocols/modbus/tcp/mb_tcp_slave` 演示了 esp-modbus TCP 从设备栈端口,允许外部 Modbus 主机通过 Modbus 协议读取和写入设备参数。 + +- :example:`protocols/modbus/tcp/mb_tcp_master` 演示了如何在 {IDF_TARGET_NAME} 上使用 esp-modbus 栈端口作为 Modbus TCP 主设备,读取和写入 Modbus 网络中从设备的值。 详情请参阅具体示例的 ``README.md`` 。 diff --git a/docs/zh_CN/api-reference/protocols/mqtt.rst b/docs/zh_CN/api-reference/protocols/mqtt.rst index 9365dfe850a7..7ad56ec21e23 100644 --- a/docs/zh_CN/api-reference/protocols/mqtt.rst +++ b/docs/zh_CN/api-reference/protocols/mqtt.rst @@ -21,14 +21,23 @@ ESP-MQTT 是 `MQTT `__ 协议客户端的实现,MQTT 是一 应用示例 ------------------- - * :example:`protocols/mqtt/tcp`:基于 TCP 的 MQTT,默认端口 1883 - * :example:`protocols/mqtt/ssl`:基于 TLS 的 MQTT,默认端口 8883 - * :example:`protocols/mqtt/ssl_ds`:基于 TLS 的 MQTT,使用数字签名外设进行身份验证,默认端口 8883 - * :example:`protocols/mqtt/ssl_mutual_auth`:基于 TLS 的 MQTT,使用证书进行身份验证,默认端口 8883 - * :example:`protocols/mqtt/ssl_psk`:基于 TLS 的 MQTT,使用预共享密钥进行身份验证,默认端口 8883 - * :example:`protocols/mqtt/ws`:基于 WebSocket 的 MQTT,默认端口 80 - * :example:`protocols/mqtt/wss`:基于 WebSocket Secure 的 MQTT,默认端口 443 - * :example:`protocols/mqtt5`: 使用 ESP-MQTT 库连接 MQTT v5.0 的服务器 + - :example:`protocols/mqtt/tcp` 演示了如何通过 TCP 实现 MQTT 通信(默认端口 1883)。 + + - :example:`protocols/mqtt/ssl` 演示了如何使用 SSL 传输来实现基于 TLS 的 MQTT 通信(默认端口 8883)。 + + - :example:`protocols/mqtt/ssl_ds` 演示了如何使用数字签名外设进行身份验证,以实现基于 TLS 的 MQTT 通信(默认端口 8883)。 + + - :example:`protocols/mqtt/ssl_mutual_auth` 演示了如何使用证书进行身份验证实现 MQTT 通信(默认端口 8883)。 + + - :example:`protocols/mqtt/ssl_psk` 演示了如何使用预共享密钥进行身份验证,以实现基于 TLS 的 MQTT 通信(默认端口 8883)。 + + - :example:`protocols/mqtt/ws` 演示了如何通过 WebSocket 实现 MQTT 通信(默认端口 80)。 + + - :example:`protocols/mqtt/wss` 演示了如何通过 WebSocket Secure 实现 MQTT 通信(默认端口 443)。 + + - :example:`protocols/mqtt5` 演示了如何使用 ESP-MQTT 库通过 MQTT v5.0 连接到代理。 + + - :example:`protocols/mqtt/custom_outbox` 演示了如何自定义 ESP-MQTT 库中的 outbox。 MQTT 消息重传 -------------------------- From e005b7c97be32e7accb4290f755306363925839e Mon Sep 17 00:00:00 2001 From: Roland Dobai Date: Tue, 1 Oct 2024 16:02:19 +0200 Subject: [PATCH 171/365] fix(tools): Update chip support status of ESP32-C5 and ESP32-C61 --- README.md | 23 ++++++++++++----------- README_CN.md | 23 ++++++++++++----------- 2 files changed, 24 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index ce807d91da87..d90e7e0eee93 100644 --- a/README.md +++ b/README.md @@ -15,17 +15,18 @@ ESP-IDF is the development framework for Espressif SoCs supported on Windows, Li The following table shows ESP-IDF support of Espressif SoCs where ![alt text][preview] and ![alt text][supported] denote preview status and support, respectively. The preview support is usually limited in time and intended for beta versions of chips. Please use an ESP-IDF release where the desired SoC is already supported. -|Chip | v5.0 | v5.1 | v5.2 | v5.3 | | -|:----------- | :---------------------:| :--------------------: | :--------------------: | :--------------------: | :--------------------------------------------------------- | -|ESP32 | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | | -|ESP32-S2 | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | | -|ESP32-C3 | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | | -|ESP32-S3 | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | [Announcement](https://www.espressif.com/en/news/ESP32_S3) | -|ESP32-C2 | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | [Announcement](https://www.espressif.com/en/news/ESP32-C2) | -|ESP32-C6 | | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | [Announcement](https://www.espressif.com/en/news/ESP32_C6) | -|ESP32-H2 | | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | [Announcement](https://www.espressif.com/en/news/ESP32_H2) | -|ESP32-P4 | | | | ![alt text][supported] | [Announcement](https://www.espressif.com/en/news/ESP32-P4) | -|ESP32-C5 | | | | ![alt text][preview] | [Announcement](https://www.espressif.com/en/news/ESP32-C5) | +|Chip | v5.0 | v5.1 | v5.2 | v5.3 | v5.4 | | +|:----------- | :---------------------:| :--------------------: | :--------------------: | :--------------------: | :--------------------: |:------------------------------------------------------------------- | +|ESP32 | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | | +|ESP32-S2 | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | | +|ESP32-C3 | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | | +|ESP32-S3 | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] |[Announcement](https://www.espressif.com/en/news/ESP32_S3) | +|ESP32-C2 | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] |[Announcement](https://www.espressif.com/en/news/ESP32-C2) | +|ESP32-C6 | | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] |[Announcement](https://www.espressif.com/en/news/ESP32_C6) | +|ESP32-H2 | | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] |[Announcement](https://www.espressif.com/en/news/ESP32_H2) | +|ESP32-P4 | | | | ![alt text][supported] | ![alt text][supported] |[Announcement](https://www.espressif.com/en/news/ESP32-P4) | +|ESP32-C5 | | | | | ![alt text][preview] |[Announcement](https://www.espressif.com/en/news/ESP32-C5) | +|ESP32-C61 | | | | | ![alt text][preview] |[Announcement](https://www.espressif.com/en/products/socs/esp32-c61) | [supported]: https://img.shields.io/badge/-supported-green "supported" [preview]: https://img.shields.io/badge/-preview-orange "preview" diff --git a/README_CN.md b/README_CN.md index e8f21600d1d6..6aeb55a5ac7b 100644 --- a/README_CN.md +++ b/README_CN.md @@ -15,17 +15,18 @@ ESP-IDF 是乐鑫官方推出的物联网开发框架,支持 Windows、Linux 下表总结了乐鑫芯片在 ESP-IDF 各版本中的支持状态,其中 ![alt text][supported] 代表已支持,![alt text][preview] 代表目前处于预览支持状态。预览支持状态通常有时间限制,而且仅适用于测试版芯片。请确保使用与芯片相匹配的 ESP-IDF 版本。 -|芯片 | v5.0 | v5.1 | v5.2 | v5.3 | | -|:----------- | :---------------------:| :--------------------: | :--------------------: | :--------------------: | :-------------------------------------------------------------- | -|ESP32 | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | | -|ESP32-S2 | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | | -|ESP32-C3 | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | | -|ESP32-S3 | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | [芯片发布公告](https://www.espressif.com/zh-hans/news/ESP32_S3) | -|ESP32-C2 | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | [芯片发布公告](https://www.espressif.com/zh-hans/news/ESP32-C2) | -|ESP32-C6 | | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | [芯片发布公告](https://www.espressif.com/zh-hans/news/ESP32_C6) | -|ESP32-H2 | | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | [芯片发布公告](https://www.espressif.com/zh-hans/news/ESP32_H2) | -|ESP32-P4 | | | | ![alt text][supported] | [芯片发布公告](https://www.espressif.com/zh-hans/news/ESP32-P4) | -|ESP32-C5 | | | | ![alt text][preview] | [芯片发布公告](https://www.espressif.com/zh-hans/news/ESP32-C5) | +|芯片 | v5.0 | v5.1 | v5.2 | v5.3 | v5.4 | | +|:----------- | :---------------------:| :--------------------: | :--------------------: | :--------------------: | :--------------------: | :------------------------------------------------------------------------ | +|ESP32 | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | | +|ESP32-S2 | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | | +|ESP32-C3 | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | | +|ESP32-S3 | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | [芯片发布公告](https://www.espressif.com/zh-hans/news/ESP32_S3) | +|ESP32-C2 | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | [芯片发布公告](https://www.espressif.com/zh-hans/news/ESP32-C2) | +|ESP32-C6 | | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | [芯片发布公告](https://www.espressif.com/zh-hans/news/ESP32_C6) | +|ESP32-H2 | | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | [芯片发布公告](https://www.espressif.com/zh-hans/news/ESP32_H2) | +|ESP32-P4 | | | | ![alt text][supported] | ![alt text][supported] | [芯片发布公告](https://www.espressif.com/zh-hans/news/ESP32-P4) | +|ESP32-C5 | | | | | ![alt text][preview] | [芯片发布公告](https://www.espressif.com/zh-hans/news/ESP32-C5) | +|ESP32-C61 | | | | | ![alt text][preview] | [芯片发布公告](https://www.espressif.com/zh-hans/products/socs/esp32-c61) | [supported]: https://img.shields.io/badge/-%E6%94%AF%E6%8C%81-green "supported" [preview]: https://img.shields.io/badge/-%E9%A2%84%E8%A7%88-orange "preview" From 0a354e09ef58d898c5652f38e09547d6c3d8d707 Mon Sep 17 00:00:00 2001 From: Roland Dobai Date: Fri, 11 Oct 2024 10:40:52 +0200 Subject: [PATCH 172/365] Tools: Add new ROM binary release including for ESP32-C5 --- tools/idf_py_actions/roms.json | 7 +++++++ tools/tools.json | 8 ++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/tools/idf_py_actions/roms.json b/tools/idf_py_actions/roms.json index 40a4ff930a02..01524dc9cf1f 100644 --- a/tools/idf_py_actions/roms.json +++ b/tools/idf_py_actions/roms.json @@ -44,6 +44,13 @@ "build_date_str": "Feb 7 2021" } ], + "esp32c5": [ + { + "rev": 0, + "build_date_str_addr": "0x4004b3c4", + "build_date_str": "Mar 29 2024" + } + ], "esp32c6": [ { "rev": 0, diff --git a/tools/tools.json b/tools/tools.json index 54b3037af734..dc3ac44fd5ce 100644 --- a/tools/tools.json +++ b/tools/tools.json @@ -863,11 +863,11 @@ "versions": [ { "any": { - "sha256": "a26609b415710f0163d785850c769752717004059c129c472e9a0cbd54e0422c", - "size": 3258247, - "url": "https://github.com/espressif/esp-rom-elfs/releases/download/20240305/esp-rom-elfs-20240305.tar.gz" + "sha256": "921f000164a421c7628fbfee55b173384aafaa51883adc65cd27bf9b0af9e9a9", + "size": 3540038, + "url": "https://github.com/espressif/esp-rom-elfs/releases/download/20241011/esp-rom-elfs-20241011.tar.gz" }, - "name": "20240305", + "name": "20241011", "status": "recommended" } ] From 3683e4c18b79c42e7951375cb41d9c88773eac1e Mon Sep 17 00:00:00 2001 From: morris Date: Mon, 14 Oct 2024 14:34:57 +0800 Subject: [PATCH 173/365] fix(hal): reenable gnu static analyzer --- components/hal/CMakeLists.txt | 5 ----- 1 file changed, 5 deletions(-) diff --git a/components/hal/CMakeLists.txt b/components/hal/CMakeLists.txt index 35ca479f78fc..1eae44dfffd6 100644 --- a/components/hal/CMakeLists.txt +++ b/components/hal/CMakeLists.txt @@ -330,8 +330,3 @@ if(CONFIG_HAL_DEFAULT_ASSERTION_LEVEL EQUAL 1) elseif(CONFIG_HAL_DEFAULT_ASSERTION_LEVEL EQUAL 2) target_link_libraries(${COMPONENT_LIB} INTERFACE "-u __assert_func") endif() - -if((CONFIG_IDF_TARGET_ESP32H2 OR CONFIG_IDF_TARGET_ESP32S2 OR CONFIG_IDF_TARGET_ESP32S3) AND - CONFIG_COMPILER_STATIC_ANALYZER AND CMAKE_C_COMPILER_ID STREQUAL "GNU") # TODO IDF-10234 - target_compile_options(${COMPONENT_LIB} PRIVATE "-fno-analyzer") -endif() From 0682be88c94c0b88a5ac2cbfcdf79557bdb40064 Mon Sep 17 00:00:00 2001 From: zwx Date: Mon, 14 Oct 2024 15:34:41 +0800 Subject: [PATCH 174/365] fix(esp_phy): fix C5 coex phy init issue --- components/esp_phy/lib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/esp_phy/lib b/components/esp_phy/lib index 6bd4ea98abf8..8fd02ff780e9 160000 --- a/components/esp_phy/lib +++ b/components/esp_phy/lib @@ -1 +1 @@ -Subproject commit 6bd4ea98abf865ee8ee3598f58d7260bf06ff03e +Subproject commit 8fd02ff780e977e76e7ed78619629c8344f0fc50 From 5e6e1ba49abe768423b9cd9f8ac6ef3121e625ba Mon Sep 17 00:00:00 2001 From: "wangtao@espressif.com" Date: Mon, 14 Oct 2024 16:39:47 +0800 Subject: [PATCH 175/365] fix(wifi): fix esp32eco4 softap h2e issue --- components/esp_rom/esp32c2/ld/esp32c2.rom.eco4.ld | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/esp_rom/esp32c2/ld/esp32c2.rom.eco4.ld b/components/esp_rom/esp32c2/ld/esp32c2.rom.eco4.ld index 22130d601e41..c0a535973862 100644 --- a/components/esp_rom/esp32c2/ld/esp32c2.rom.eco4.ld +++ b/components/esp_rom/esp32c2/ld/esp32c2.rom.eco4.ld @@ -1201,7 +1201,7 @@ ieee80211_send_mgmt = 0x40002038; //ieee80211_auth_construct = 0x4000203c; ieee80211_deauth_construct = 0x40002040; ieee80211_disassoc_construct = 0x40002044; -ieee80211_add_xrates = 0x40002058; +//ieee80211_add_xrates = 0x40002058; //ieee80211_assoc_req_construct = 0x40002060; ieee80211_assoc_resp_construct = 0x40002064; ieee80211_timer_process = 0x4000208c; From f333131063a6369ac3446dca9cf991be67e787a8 Mon Sep 17 00:00:00 2001 From: Roman Leonov Date: Fri, 20 Sep 2024 13:33:28 +0200 Subject: [PATCH 176/365] feat(hub): Added notification when hubs support disabled --- components/usb/ext_hub.c | 2 +- components/usb/hub.c | 35 +++++++++++++++++++++++++--- components/usb/private_include/hub.h | 4 +++- components/usb/usb_host.c | 10 ++++---- 4 files changed, 41 insertions(+), 10 deletions(-) diff --git a/components/usb/ext_hub.c b/components/usb/ext_hub.c index 1c821677f45f..8b02f4191f14 100644 --- a/components/usb/ext_hub.c +++ b/components/usb/ext_hub.c @@ -528,7 +528,7 @@ static esp_err_t device_alloc(device_config_t *config, ext_hub_dev_t **ext_hub_d usb_device_info_t dev_info; ESP_ERROR_CHECK(usbh_dev_get_info(config->dev_hdl, &dev_info)); if (dev_info.parent.dev_hdl) { - ESP_LOGW(EXT_HUB_TAG, "Multiple Hubs not supported, use menuconfig to enable feature"); + ESP_LOGW(EXT_HUB_TAG, "Multiple Hubs support disabled, Hub device was not initialized"); ret = ESP_ERR_NOT_SUPPORTED; goto fail; } diff --git a/components/usb/hub.c b/components/usb/hub.c index 2d328bcf39a1..e39e741d6949 100644 --- a/components/usb/hub.c +++ b/components/usb/hub.c @@ -778,14 +778,35 @@ esp_err_t hub_port_disable(usb_device_handle_t parent_dev_hdl, uint8_t parent_po return ret; } -#if ENABLE_USB_HUBS esp_err_t hub_notify_new_dev(uint8_t dev_addr) { HUB_DRIVER_ENTER_CRITICAL(); HUB_DRIVER_CHECK_FROM_CRIT(p_hub_driver_obj != NULL, ESP_ERR_INVALID_STATE); HUB_DRIVER_EXIT_CRITICAL(); - return ext_hub_new_dev(dev_addr); + esp_err_t ret; +#if ENABLE_USB_HUBS + ret = ext_hub_new_dev(dev_addr); +#else + // Verify the device descriptor and if the bDeviceClass is a Hub class, + // show the warning message, that Hub support feature is not enabled + usb_device_handle_t dev_hdl = NULL; + const usb_device_desc_t *device_desc = NULL; + // Open device + if (usbh_devs_open(dev_addr, &dev_hdl) == ESP_OK) { + // Get Device Descriptor + if (usbh_dev_get_desc(dev_hdl, &device_desc) == ESP_OK) { + if (device_desc->bDeviceClass == USB_CLASS_HUB) { + ESP_LOGW(HUB_DRIVER_TAG, "External Hubs support disabled, Hub device was not initialized"); + } + } + // Close device + usbh_dev_close(dev_hdl); + } + // Logic should not stop the flow, so no error to return + ret = ESP_OK; +#endif // ENABLE_USB_HUBS + return ret; } esp_err_t hub_notify_dev_gone(uint8_t dev_addr) @@ -794,9 +815,17 @@ esp_err_t hub_notify_dev_gone(uint8_t dev_addr) HUB_DRIVER_CHECK_FROM_CRIT(p_hub_driver_obj != NULL, ESP_ERR_INVALID_STATE); HUB_DRIVER_EXIT_CRITICAL(); - return ext_hub_dev_gone(dev_addr); + esp_err_t ret; +#if ENABLE_USB_HUBS + ret = ext_hub_dev_gone(dev_addr); +#else + // Nothing to do, while Hubs support is not enabled + ret = ESP_OK; +#endif // ENABLE_USB_HUBS + return ret; } +#if (ENABLE_USB_HUBS) esp_err_t hub_notify_all_free(void) { HUB_DRIVER_ENTER_CRITICAL(); diff --git a/components/usb/private_include/hub.h b/components/usb/private_include/hub.h index e3efaac9bf8c..f563a56f2834 100644 --- a/components/usb/private_include/hub.h +++ b/components/usb/private_include/hub.h @@ -191,13 +191,13 @@ esp_err_t hub_port_active(usb_device_handle_t parent_dev_hdl, uint8_t parent_por */ esp_err_t hub_port_disable(usb_device_handle_t parent_dev_hdl, uint8_t parent_port_num); -#if ENABLE_USB_HUBS /** * @brief Notify Hub driver that new device has been attached * * If device is has a HUB class, then it will be added as External Hub to Hub Driver. * * @note This function should only be called from the Host Library task + * @note If the Hub support feature is disabled and device has a Hub class, only the warning message will be shown. * * @param[in] dev_addr Device bus address * @@ -213,6 +213,7 @@ esp_err_t hub_notify_new_dev(uint8_t dev_addr); * If the device was an External Hub, then it will be removed from the Hub Driver. * * @note This function should only be called from the Host Library task + * @note If the Hub support feature is disabled, no additional logic requires here. * * @param[in] dev_addr Device bus address * @@ -222,6 +223,7 @@ esp_err_t hub_notify_new_dev(uint8_t dev_addr); */ esp_err_t hub_notify_dev_gone(uint8_t dev_addr); +#if ENABLE_USB_HUBS /** * @brief Notify Hub driver that all devices should be freed * diff --git a/components/usb/usb_host.c b/components/usb/usb_host.c index bc41bab9089d..9e5f3feea368 100644 --- a/components/usb/usb_host.c +++ b/components/usb/usb_host.c @@ -309,21 +309,21 @@ static void usbh_event_callback(usbh_event_data_t *event_data, void *arg) break; } case USBH_EVENT_NEW_DEV: { + // Internal client + hub_notify_new_dev(event_data->new_dev_data.dev_addr); + // External clients // Prepare a NEW_DEV client event message, the send it to all clients usb_host_client_event_msg_t event_msg = { .event = USB_HOST_CLIENT_EVENT_NEW_DEV, .new_dev.address = event_data->new_dev_data.dev_addr, }; send_event_msg_to_clients(&event_msg, true, 0); -#if ENABLE_USB_HUBS - hub_notify_new_dev(event_data->new_dev_data.dev_addr); -#endif // ENABLE_USB_HUBS break; } case USBH_EVENT_DEV_GONE: { -#if ENABLE_USB_HUBS + // Internal client hub_notify_dev_gone(event_data->new_dev_data.dev_addr); -#endif // ENABLE_USB_HUBS + // External clients // Prepare event msg, send only to clients that have opened the device usb_host_client_event_msg_t event_msg = { .event = USB_HOST_CLIENT_EVENT_DEV_GONE, From 30dbe31ef67ead76f2c72813812007c2f5ba34ce Mon Sep 17 00:00:00 2001 From: renpeiying Date: Mon, 14 Oct 2024 15:24:03 +0800 Subject: [PATCH 177/365] docs: Update CN translation for fatfs.rst --- .../api-guides/file-system-considerations.rst | 2 +- docs/en/api-reference/storage/fatfs.rst | 16 +++++---- docs/zh_CN/api-reference/storage/fatfs.rst | 33 +++++++++++++++++-- 3 files changed, 40 insertions(+), 11 deletions(-) diff --git a/docs/en/api-guides/file-system-considerations.rst b/docs/en/api-guides/file-system-considerations.rst index ac90b6783205..bef83ad7765e 100644 --- a/docs/en/api-guides/file-system-considerations.rst +++ b/docs/en/api-guides/file-system-considerations.rst @@ -50,7 +50,7 @@ The most significant properties and features of above-mentioned file systems are - Integrated - Integrated * - Minimum partition size - - * 8 sectors with wear levelling on (4 FATFS sectors + 4 WL sectors with WL sector size=4096B) + - * 8 sectors with wear levelling on (4 FATFS sectors + 4 WL sectors with WL sector size = 4096B) * plus 4 sectors at least * real number given by WL configuration (Safe, Perf) - * 6 logical blocks diff --git a/docs/en/api-reference/storage/fatfs.rst b/docs/en/api-reference/storage/fatfs.rst index 3777c4f17cad..4c6520eb2732 100644 --- a/docs/en/api-reference/storage/fatfs.rst +++ b/docs/en/api-reference/storage/fatfs.rst @@ -166,20 +166,22 @@ The FATFS component supports FAT12, FAT16, and FAT32 file system types. The file * For a partition with wear leveling enabled, 4 sectors will be reserved for wear-leveling operations, and 4 sectors will be used by the FATFS (1 reserved sector, 1 FAT sector, 1 root directory sector and 1 data sector). * Increasing the partition size will allocate additional data sectors, allowing for more storage space. * For partition sizes less than 528 KB, 1 root directory sector will be allocated; for larger partitions, 4 root directory sectors will be used. -* By default, two FAT sectors are created, increasing the partition size by one sector to accommodate the extra FAT sector. To enable a single FAT sector, configure the `use_one_fat` option in `struct esp_vfs_fat_mount_config_t` (see/vfs/esp_vfs_fat.h). Enabling this option allows the minimum partition size to be reduced to 32 KB. +* By default, two FAT sectors are created, increasing the partition size by one sector to accommodate the extra FAT sector. To enable a single FAT sector, configure the `use_one_fat` option in `struct esp_vfs_fat_mount_config_t` (see :component_file:`fatfs/vfs/esp_vfs_fat.h`). Enabling this option allows the minimum partition size to be reduced to 32 KB. * The general formula for calculating the partition size for a wear-leveled partition is:: partition_size = Wear-levelling sectors * FLASH_SEC_SIZE + FATFS partition sectors * FAT_SEC_SIZE - Where, - - Wear-leveling sectors are fixed at 4, - - FLASH_SEC_SIZE is 4096 bytes, - - FATFS partition sectors include: 1 reserved sector + FAT sectors + root directory sectors + data sectors, - - FAT_SEC_SIZE can be either 512 bytes or 4096 bytes, depending on the configuration. + Where: + + - Wear-leveling sectors are fixed at 4 + - FLASH_SEC_SIZE is 4096 bytes + - FATFS partition sectors include: 1 reserved sector + FAT sectors + root directory sectors + data sectors + - FAT_SEC_SIZE can be either 512 bytes or 4096 bytes, depending on the configuration * For read-only partitions without wear leveling enabled and a sector size of 512 bytes, the minimum partition size can be reduced to as low as 2 KB. -Please refer :doc:`File System Considerations <../../api-guides/file-system-considerations>` for further details . +Please refer :doc:`File System Considerations <../../api-guides/file-system-considerations>` for further details. + High-level API Reference ------------------------ diff --git a/docs/zh_CN/api-reference/storage/fatfs.rst b/docs/zh_CN/api-reference/storage/fatfs.rst index 65f281bd790c..ef34512814ef 100644 --- a/docs/zh_CN/api-reference/storage/fatfs.rst +++ b/docs/zh_CN/api-reference/storage/fatfs.rst @@ -99,7 +99,7 @@ FatFs 分区生成器 该生成器可以在主机上创建文件系统镜像,并用指定的主机文件夹内容对其进行填充。 -该脚本是建立在分区生成器的基础上 (:component_file:`fatfsgen.py`),目前除了可以生成分区外,也可以初始化磨损均衡。 +该脚本是建立在分区生成器的基础上 (:component_file:`fatfsgen.py`),目前除了可以生成分区外,也可以初始化损耗均衡。 目前的最新版本支持短文件名、长文件名、FAT12 和 FAT16。长文件名的上限是 255 个字符,文件名中可以包含多个 ``.`` 字符以及其他字符,如 ``+``、``,``、``;``、``=``、``[`` and ``]`` 等。 @@ -112,13 +112,13 @@ FatFs 分区生成器 fatfs_create_spiflash_image( [FLASH_IN_PROJECT]) -如果不希望在生成分区时使用磨损均衡,可以使用 ``fatfs_create_rawflash_image``:: +如果不希望在生成分区时使用损耗均衡,可以使用 ``fatfs_create_rawflash_image``:: fatfs_create_rawflash_image( [FLASH_IN_PROJECT]) ``fatfs_create_spiflash_image`` 以及 ``fatfs_create_rawflash_image`` 必须从项目的 CMakeLists.txt 中调用。 -如果决定使用 ``fatfs_create_rawflash_image`` (不支持磨损均衡),请注意它仅支持在设备中以只读模式安装。 +如果决定使用 ``fatfs_create_rawflash_image`` (不支持损耗均衡),请注意它仅支持在设备中以只读模式安装。 该函数的参数如下: @@ -156,6 +156,33 @@ FatFs 分区分析器 生成文件夹结构之前,参数 --verbose 将根据 FatFs 镜像的引导扇区在终端打印详细信息。 + +FATFS 最小分区大小及限制 +------------------------ + +FATFS 组件支持 FAT12、FAT16 和 FAT32 文件系统类型。文件系统类型取决于卷上簇的数量(簇数通过数据扇区数量除以每簇包含的扇区数计算得出)。最小分区大小由分配给 FAT 表、根目录和数据簇的扇区数量决定。 + +* 对于 4096 字节的扇区,启用损耗均衡的 FAT 分区大小最小支持 32 KB。对于 512 字节的扇区,最小分区大小取决于损耗均衡的配置:性能模式下,最小支持 20 KB,安全模式下最小支持 28 KB(需要额外的 2 个扇区)。 +* 启用了损耗均衡的分区会预留 4 个扇区用于损耗均衡操作。此外,FATFS 本身也会使用 4 个扇区,分别为 1 个保留扇区、1 个 FAT 扇区、1 个根目录扇区和 1 个数据扇区。 +* 增加分区大小将分配更多的数据扇区,提供更大的存储空间。 +* 对小于 528 KB 的分区,将分配 1 个根目录扇区;对于更大的分区,将分配 4 个根目录扇区。 +* 默认会创建两个 FAT 扇区,因此分区大小会增加一个扇区来容纳这个额外的 FAT 扇区。如要启用单个 FAT 扇区,可以在 `struct esp_vfs_fat_mount_config_t` 中(参见 :component_file:`fatfs/vfs/esp_vfs_fat.h`)设置 `use_one_fat` 选项。启用此选项后,最小分区大小可减少至 32 KB。 +* 计算损耗均衡分区大小的一般公式为:: + + partition_size = 损耗均衡扇区数 * FLASH_SEC_SIZE + FATFS 分区扇区数量 * FAT_SEC_SIZE + + 其中: + + - 损耗均衡扇区数固定为 4 个 + - FLASH_SEC_SIZE 为 4096 字节 + - FATFS 分区扇区包括:1 个保留扇区 + FAT 扇区 + 根目录扇区 + 数据扇区 + - FAT_SEC_SIZE 根据不同的配置,可以是 512 字节或 4096 字节 + +* 对于未启用损耗均衡、扇区大小为 512 字节的只读分区,最小分区大小可减少至 2 KB。 + +更多详情请参考 :doc:`文件系统注意事项 <../../api-guides/file-system-considerations>`。 + + 高级 API 参考 ------------------------ From 42677a155648082b21dc1b86d44ed7666ffdcdbb Mon Sep 17 00:00:00 2001 From: Rahul Tank Date: Mon, 14 Oct 2024 20:49:33 +0530 Subject: [PATCH 178/365] fix(nimble): Adjust Data len time in case 5.0 support is not present --- components/bt/host/nimble/nimble | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/bt/host/nimble/nimble b/components/bt/host/nimble/nimble index 24ff17de7c07..32b2124f5423 160000 --- a/components/bt/host/nimble/nimble +++ b/components/bt/host/nimble/nimble @@ -1 +1 @@ -Subproject commit 24ff17de7c07d53f2db2940052c52bfc48f8414c +Subproject commit 32b2124f54238e70ecd4c72a753698babdd939f7 From 64e0fc7a5ad5f32fc85443d3ad5449ee279330db Mon Sep 17 00:00:00 2001 From: Marius Vikhammer Date: Thu, 10 Oct 2024 11:10:51 +0800 Subject: [PATCH 179/365] fix(system): rename __VA_NARG__ macro __VA_NARG__ is copied from a forum post and is a pretty common implementation with a high chance of causing naming collision Added ESP_ namespace to avoid this. --- components/esp_common/include/esp_macros.h | 31 ++++--------------- .../test_apps/esp_common/main/CMakeLists.txt | 2 +- .../esp_common/main/test_esp_macro.c | 21 +++++++++++++ .../include/esp_private/esp_regdma.h | 4 +-- .../release-5.x/5.4/system.rst | 5 +++ .../release-5.x/5.4/system.rst | 5 +++ tools/idf_py_actions/hints.yml | 3 ++ 7 files changed, 43 insertions(+), 28 deletions(-) create mode 100644 components/esp_common/test_apps/esp_common/main/test_esp_macro.c diff --git a/components/esp_common/include/esp_macros.h b/components/esp_common/include/esp_macros.h index 183c947a44fd..0893878e7eb3 100644 --- a/components/esp_common/include/esp_macros.h +++ b/components/esp_common/include/esp_macros.h @@ -50,15 +50,15 @@ extern "C" { /* Count number of arguments of __VA_ARGS__ * - reference https://groups.google.com/forum/#!topic/comp.std.c/d-6Mj5Lko_s * - __GET_NTH_ARG__() takes args >= N (64) but only expand to Nth one (64th) - * - __RSEQ_N__() is reverse sequential to N to add padding to have Nth + * - ESP_RSEQ_N() is reverse sequential to N to add padding to have Nth * position is the same as the number of arguments * - ##__VA_ARGS__ is used to deal with 0 parameter (swallows comma) */ -#ifndef __VA_NARG__ -# define __VA_NARG__(...) __NARG__(_0, ##__VA_ARGS__, __RSEQ_N__()) +#ifndef ESP_VA_NARG +# define ESP_VA_NARG(...) ESP_NARG(_0, ##__VA_ARGS__, ESP_RSEQ_N()) -# define __NARG__(...) __GET_NTH_ARG__(__VA_ARGS__) -# define __GET_NTH_ARG__( \ +# define ESP_NARG(...) ESP_GET_NTH_ARG(__VA_ARGS__) +# define ESP_GET_NTH_ARG( \ _01,_02,_03,_04,_05,_06,_07,_08,_09,_10, \ _11,_12,_13,_14,_15,_16,_17,_18,_19,_20, \ _21,_22,_23,_24,_25,_26,_27,_28,_29,_30, \ @@ -66,7 +66,7 @@ extern "C" { _41,_42,_43,_44,_45,_46,_47,_48,_49,_50, \ _51,_52,_53,_54,_55,_56,_57,_58,_59,_60, \ _61,_62,_63,N,...) N -# define __RSEQ_N__() \ +# define ESP_RSEQ_N() \ 62,61,60, \ 59,58,57,56,55,54,53,52,51,50, \ 49,48,47,46,45,44,43,42,41,40, \ @@ -80,25 +80,6 @@ extern "C" { #define ESP_UNUSED(x) ((void)(x)) #endif -/* test macros */ -#define foo_args(...) 1 -#define foo_no_args() 2 -#if defined(__cplusplus) && (__cplusplus > 201703L) -#define foo(...) CHOOSE_MACRO_VA_ARG(foo_args, foo_no_args __VA_OPT__(,) __VA_ARGS__)(__VA_ARGS__) -#else -#define foo(...) CHOOSE_MACRO_VA_ARG(foo_args, foo_no_args, ##__VA_ARGS__)(__VA_ARGS__) -#endif - -ESP_STATIC_ASSERT(foo() == 2, "CHOOSE_MACRO_VA_ARG() result does not match for 0 arguments"); -ESP_STATIC_ASSERT(foo(42) == 1, "CHOOSE_MACRO_VA_ARG() result does not match for 1 argument"); -#if defined(__cplusplus) && (__cplusplus > 201703L) -ESP_STATIC_ASSERT(foo(42, 87) == 1, "CHOOSE_MACRO_VA_ARG() result does not match for n arguments"); -#endif - -#undef foo -#undef foo_args -#undef foo_no_args - #define ESP_INFINITE_LOOP() \ do { \ ESP_COMPILER_DIAGNOSTIC_PUSH_IGNORE("-Wanalyzer-infinite-loop") \ diff --git a/components/esp_common/test_apps/esp_common/main/CMakeLists.txt b/components/esp_common/test_apps/esp_common/main/CMakeLists.txt index d1e953e63823..f45ce0708cd0 100644 --- a/components/esp_common/test_apps/esp_common/main/CMakeLists.txt +++ b/components/esp_common/test_apps/esp_common/main/CMakeLists.txt @@ -1,4 +1,4 @@ -idf_component_register(SRCS "test_app_main.c" "test_attr.c" +idf_component_register(SRCS "test_app_main.c" "test_attr.c" "test_esp_macro.c" INCLUDE_DIRS "." PRIV_REQUIRES unity esp_mm esp_psram WHOLE_ARCHIVE) diff --git a/components/esp_common/test_apps/esp_common/main/test_esp_macro.c b/components/esp_common/test_apps/esp_common/main/test_esp_macro.c new file mode 100644 index 000000000000..334fa9806722 --- /dev/null +++ b/components/esp_common/test_apps/esp_common/main/test_esp_macro.c @@ -0,0 +1,21 @@ +/* + * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Unlicense OR CC0-1.0 + */ +#include "esp_macros.h" + +/* test macros */ +#define foo_args(...) 1 +#define foo_no_args() 2 +#if defined(__cplusplus) && (__cplusplus > 201703L) +#define foo(...) CHOOSE_MACRO_VA_ARG(foo_args, foo_no_args __VA_OPT__(,) __VA_ARGS__)(__VA_ARGS__) +#else +#define foo(...) CHOOSE_MACRO_VA_ARG(foo_args, foo_no_args, ##__VA_ARGS__)(__VA_ARGS__) +#endif + +ESP_STATIC_ASSERT(foo() == 2, "CHOOSE_MACRO_VA_ARG() result does not match for 0 arguments"); +ESP_STATIC_ASSERT(foo(42) == 1, "CHOOSE_MACRO_VA_ARG() result does not match for 1 argument"); +#if defined(__cplusplus) && (__cplusplus > 201703L) +ESP_STATIC_ASSERT(foo(42, 87) == 1, "CHOOSE_MACRO_VA_ARG() result does not match for n arguments"); +#endif diff --git a/components/esp_hw_support/include/esp_private/esp_regdma.h b/components/esp_hw_support/include/esp_private/esp_regdma.h index 9e904997f70a..1a082408fd7a 100644 --- a/components/esp_hw_support/include/esp_private/esp_regdma.h +++ b/components/esp_hw_support/include/esp_private/esp_regdma.h @@ -396,9 +396,9 @@ void *regdma_find_prev_module_link_tail(void *link, void *tail, int entry, uint3 */ void *regdma_find_next_module_link_head(void *link, void *tail, int entry, uint32_t module); -#define regdma_link_init_safe(pcfg, branch, module, ...) regdma_link_init((pcfg), (branch), (module), __VA_NARG__(__VA_ARGS__), ##__VA_ARGS__) +#define regdma_link_init_safe(pcfg, branch, module, ...) regdma_link_init((pcfg), (branch), (module), ESP_VA_NARG(__VA_ARGS__), ##__VA_ARGS__) -#define regdma_link_update_next_safe(link, ...) regdma_link_update_next((link), __VA_NARG__(__VA_ARGS__), ##__VA_ARGS__) +#define regdma_link_update_next_safe(link, ...) regdma_link_update_next((link), ESP_VA_NARG(__VA_ARGS__), ##__VA_ARGS__) #endif // SOC_PAU_SUPPORTED diff --git a/docs/en/migration-guides/release-5.x/5.4/system.rst b/docs/en/migration-guides/release-5.x/5.4/system.rst index e6e0ede0156a..cddbd0a6bb5b 100644 --- a/docs/en/migration-guides/release-5.x/5.4/system.rst +++ b/docs/en/migration-guides/release-5.x/5.4/system.rst @@ -3,6 +3,11 @@ System :link_to_translation:`zh_CN:[中文]` +ESP-Common +---------- + +``__VA_NARG__`` and its related macros have been re-named to avoid naming collisions, use the new name with ``ESP`` pre-fix, e.g. ``ESP_VA_NARG`` instead. + Log --- diff --git a/docs/zh_CN/migration-guides/release-5.x/5.4/system.rst b/docs/zh_CN/migration-guides/release-5.x/5.4/system.rst index dbe6984ddd7b..bb748fef1139 100644 --- a/docs/zh_CN/migration-guides/release-5.x/5.4/system.rst +++ b/docs/zh_CN/migration-guides/release-5.x/5.4/system.rst @@ -3,6 +3,11 @@ :link_to_translation:`en:[English]` +ESP-Common +---------- + +``__VA_NARG__`` 及其相关宏已被重新命名以避免命名冲突,请使用带有 ESP 前缀的新名称,例如 ``ESP_VA_NARG``。 + 日志 ------ diff --git a/tools/idf_py_actions/hints.yml b/tools/idf_py_actions/hints.yml index 68181be04150..20ff00e2c0e3 100644 --- a/tools/idf_py_actions/hints.yml +++ b/tools/idf_py_actions/hints.yml @@ -447,3 +447,6 @@ - re: "(error: Total discarded sections size is \\d+ bytes)|(region [`'.\\w]+ overflowed by \\d+ bytes)" hint: "The binary size has exceeded the limit. To resolve the issue consider reducing the binary size.\nYou can explore size optimization techniques in the documentation by running 'idf.py docs -sp api-guides/performance/size.html#reducing-overall-size'.\nNote that the linker performed the dead code elimination." + + re: "implicit declaration of function '__VA_NARG__'" + hint: "__VA_NARG_ has been renamed. Please use ESP_VA_NARG instead" From d53572ab10b677e61e69d08fefb84f6292dd3540 Mon Sep 17 00:00:00 2001 From: chenjianhua Date: Tue, 15 Oct 2024 10:46:02 +0800 Subject: [PATCH 180/365] fix(bt/bluedroid): Update address type for BLE link when the connection is completed --- components/bt/host/bluedroid/stack/l2cap/l2c_ble.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/components/bt/host/bluedroid/stack/l2cap/l2c_ble.c b/components/bt/host/bluedroid/stack/l2cap/l2c_ble.c index 01edf9caf537..36f91cfe0876 100644 --- a/components/bt/host/bluedroid/stack/l2cap/l2c_ble.c +++ b/components/bt/host/bluedroid/stack/l2cap/l2c_ble.c @@ -376,6 +376,7 @@ void l2cble_scanner_conn_comp (UINT16 handle, BD_ADDR bda, tBLE_ADDR_TYPE type, p_lcb->waiting_update_conn_latency = p_lcb->current_used_conn_latency = conn_latency; p_lcb->conn_update_mask = L2C_BLE_NOT_DEFAULT_PARAM; p_lcb->updating_param_flag = false; + p_lcb->ble_addr_type = type; /* If there are any preferred connection parameters, set them now */ if ( (p_dev_rec->conn_params.min_conn_int >= BTM_BLE_CONN_INT_MIN ) && @@ -476,6 +477,7 @@ void l2cble_advertiser_conn_comp (UINT16 handle, BD_ADDR bda, tBLE_ADDR_TYPE typ p_lcb->waiting_update_conn_latency = p_lcb->current_used_conn_latency = conn_latency; p_lcb->conn_update_mask = L2C_BLE_NOT_DEFAULT_PARAM; p_lcb->updating_param_flag = false; + p_lcb->ble_addr_type = type; /* Tell BTM Acl management about the link */ p_dev_rec = btm_find_or_alloc_dev (bda); From d327186ddd5281f6ebba1c82617c0e79731eca3f Mon Sep 17 00:00:00 2001 From: Omar Chebib Date: Mon, 30 Sep 2024 11:31:37 +0800 Subject: [PATCH 181/365] fix(esp_psram): fix a bug in PSRAM heap registration This commit fixes a bug in the PSRAM heap initialization that didn't take into account the reserved himem area when registering the PSRAM virtual space as a heap. --- components/esp_psram/esp_psram.c | 1 + .../test_apps/psram/main/test_himem.c | 57 ++++++++++++++++++- 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/components/esp_psram/esp_psram.c b/components/esp_psram/esp_psram.c index 59176e7c74e4..80a9cdeb5f4c 100644 --- a/components/esp_psram/esp_psram.c +++ b/components/esp_psram/esp_psram.c @@ -325,6 +325,7 @@ static void s_psram_mapping(uint32_t psram_available_size, uint32_t start_page) #if CONFIG_IDF_TARGET_ESP32 s_psram_ctx.regions_to_heap[PSRAM_MEM_8BIT_ALIGNED].size -= esp_himem_reserved_area_size() - 1; + s_psram_ctx.regions_to_heap[PSRAM_MEM_8BIT_ALIGNED].vaddr_end -= esp_himem_reserved_area_size(); #endif } diff --git a/components/esp_psram/test_apps/psram/main/test_himem.c b/components/esp_psram/test_apps/psram/main/test_himem.c index cfb4372d201a..7e048c3af34a 100644 --- a/components/esp_psram/test_apps/psram/main/test_himem.c +++ b/components/esp_psram/test_apps/psram/main/test_himem.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -7,6 +7,7 @@ #include #include #include +#include #include "inttypes.h" #include "freertos/FreeRTOS.h" #include "freertos/task.h" @@ -106,6 +107,60 @@ TEST_CASE("high psram memory test", "[himem]") vTaskDelay(100); } +#define CACHE_BLOCKSIZE (32*1024) +#define ALLOCATIONS_SIZE (CACHE_BLOCKSIZE / 2) +#define MAX_ALLOCATIONS ((4*1024*1024) / ALLOCATIONS_SIZE) + +TEST_CASE("psram heap doesn't affect himem", "[himem]") +{ + esp_himem_handle_t mh; + esp_himem_rangehandle_t rh; + uint32_t *ptr = NULL; + /* Array containing all the areas from the heap */ + void* allocs[MAX_ALLOCATIONS] = { 0 }; + int allocs_idx = 0; + + /* Allocate a physical block from the PSRAM */ + ESP_ERROR_CHECK(esp_himem_alloc(CACHE_BLOCKSIZE, &mh)); + /* Allocate a range of virtual memory where we can map the allocated block */ + ESP_ERROR_CHECK(esp_himem_alloc_map_range(ESP_HIMEM_BLKSZ, &rh)); + /* Map that physical block in the allocated virtual memory */ + ESP_ERROR_CHECK(esp_himem_map(mh, rh, 0, 0, ESP_HIMEM_BLKSZ, 0, (void**)&ptr)); + /* Memset that part of the memory with an arbitrary pattern */ + memset(ptr, 0x42, CACHE_BLOCKSIZE); + + /* Allocate heap memory in PSRAM until there is no more memory */ + while (1) { + uint8_t* data = heap_caps_malloc(ALLOCATIONS_SIZE, MALLOC_CAP_SPIRAM); + /* If the allocation failed, there is no more memory, we can break */ + if (data == NULL) { + break; + } + assert(allocs_idx < MAX_ALLOCATIONS); + allocs[allocs_idx++] = data; + /* Set the allocated memory to another pattern */ + memset(data, 0xAB, ALLOCATIONS_SIZE); + } + + /* Make sure we allocated more than 127 blocks */ + printf("Allocated %d blocks\n", allocs_idx); + TEST_ASSERT_GREATER_THAN_INT(127, allocs_idx); + + /* Check if the himem block has been altered by the heap */ + TEST_ASSERT_EACH_EQUAL_INT8(0x42, ptr, CACHE_BLOCKSIZE); + + /* Free all the allocated memories */ + for (int i = 0; i < allocs_idx; i++) { + heap_caps_free(allocs[i]); + } + + ESP_ERROR_CHECK(esp_himem_unmap(rh, ptr, ESP_HIMEM_BLKSZ)); + ESP_ERROR_CHECK(esp_himem_free(mh)); + ESP_ERROR_CHECK(esp_himem_free_map_range(rh)); + + printf("Success!\n"); +} + #endif #endif // CONFIG_IDF_TARGET_ESP32 From 2a7ba86824cf523d0d35b9c603ce5ef883742b67 Mon Sep 17 00:00:00 2001 From: wanckl Date: Fri, 23 Aug 2024 19:32:59 +0800 Subject: [PATCH 182/365] fix(driver_spi): enable p4 multi dut test --- .../include/test_spi_utils.h | 5 ---- .../test_driver_utils/test_spi_utils.c | 3 +++ .../test_apps/.build-test-rules.yml | 4 ---- .../test_apps/master/main/test_spi_master.c | 17 ++++++++------ .../test_apps/master/pytest_spi_master.py | 4 ++-- .../test_apps/param/main/test_spi_param.c | 23 +++++++++++++------ .../test_apps/param/pytest_spi_param.py | 7 ++---- .../test_apps/slave/main/test_spi_slave.c | 2 ++ .../test_apps/slave/pytest_spi_slave.py | 4 ++-- .../slave_hd/main/test_spi_slave_hd.c | 10 ++++++-- .../test_apps/slave_hd/pytest_spi_slave_hd.py | 1 + components/soc/esp32p4/spi_periph.c | 1 - 12 files changed, 46 insertions(+), 35 deletions(-) diff --git a/components/driver/test_apps/components/test_driver_utils/include/test_spi_utils.h b/components/driver/test_apps/components/test_driver_utils/include/test_spi_utils.h index 0fdcb27e4939..6bcac2a72d9a 100644 --- a/components/driver/test_apps/components/test_driver_utils/include/test_spi_utils.h +++ b/components/driver/test_apps/components/test_driver_utils/include/test_spi_utils.h @@ -94,11 +94,6 @@ #define WIRE_DELAY 12.5 #endif //CONFIG_IDF_TARGET_ESP32 -#define GET_DMA_CHAN(HOST) (HOST) - -#define TEST_DMA_CHAN_MASTER GET_DMA_CHAN(TEST_SPI_HOST) -#define TEST_DMA_CHAN_SLAVE GET_DMA_CHAN(TEST_SLAVE_HOST) - #define FUNC_SPI SPI2_FUNC_NUM #define FUNC_GPIO PIN_FUNC_GPIO diff --git a/components/driver/test_apps/components/test_driver_utils/test_spi_utils.c b/components/driver/test_apps/components/test_driver_utils/test_spi_utils.c index 124021167f77..8e23021d84b6 100644 --- a/components/driver/test_apps/components/test_driver_utils/test_spi_utils.c +++ b/components/driver/test_apps/components/test_driver_utils/test_spi_utils.c @@ -91,6 +91,7 @@ void spitest_slave_task(void* arg) t.length = txdata.len; t.tx_buffer = txdata.start; t.rx_buffer = recvbuf + 8; + t.flags |= SPI_SLAVE_TRANS_DMA_BUFFER_ALIGN_AUTO; //loop until trans_len != 0 to skip glitches do { TEST_ESP_OK(spi_slave_transmit(context->spi, &t, portMAX_DELAY)); @@ -231,6 +232,7 @@ void spitest_gpio_input_sel(uint32_t gpio_num, int func, uint32_t signal_idx) esp_rom_gpio_connect_in_signal(gpio_num, signal_idx, 0); } +#if (TEST_SPI_PERIPH_NUM >= 2) //Note this cs_dev_id is the ID of the connected devices' ID, e.g. if 2 devices are connected to the bus, //then the cs_dev_id of the 1st and 2nd devices are 0 and 1 respectively. void same_pin_func_sel(spi_bus_config_t bus, spi_device_interface_config_t dev, uint8_t cs_dev_id) @@ -247,3 +249,4 @@ void same_pin_func_sel(spi_bus_config_t bus, spi_device_interface_config_t dev, spitest_gpio_output_sel(bus.sclk_io_num, FUNC_GPIO, spi_periph_signal[TEST_SPI_HOST].spiclk_out); spitest_gpio_input_sel(bus.sclk_io_num, FUNC_GPIO, spi_periph_signal[TEST_SLAVE_HOST].spiclk_in); } +#endif //(TEST_SPI_PERIPH_NUM >= 2) diff --git a/components/esp_driver_spi/test_apps/.build-test-rules.yml b/components/esp_driver_spi/test_apps/.build-test-rules.yml index 81f1c69c5cfb..9413dfd7e59b 100644 --- a/components/esp_driver_spi/test_apps/.build-test-rules.yml +++ b/components/esp_driver_spi/test_apps/.build-test-rules.yml @@ -18,10 +18,6 @@ components/esp_driver_spi/test_apps/master: components/esp_driver_spi/test_apps/param: disable: - if: SOC_GPSPI_SUPPORTED != 1 - disable_test: - - if: IDF_TARGET == "esp32p4" - temporary: true - reason: no multi-dev runner # TODO: [ESP32P4] IDF-9517 <<: *spi_depends_default components/esp_driver_spi/test_apps/slave: diff --git a/components/esp_driver_spi/test_apps/master/main/test_spi_master.c b/components/esp_driver_spi/test_apps/master/main/test_spi_master.c index 4298dcdd222e..c59347d3ebcd 100644 --- a/components/esp_driver_spi/test_apps/master/main/test_spi_master.c +++ b/components/esp_driver_spi/test_apps/master/main/test_spi_master.c @@ -1251,6 +1251,7 @@ static void slave_only_tx_trans(uint8_t *slv_send_buf, uint32_t length) { ESP_LOGI(SLAVE_TAG, "FD DMA, Only TX"); spi_slave_transaction_t trans = {0}; + trans.flags |= SPI_SLAVE_TRANS_DMA_BUFFER_ALIGN_AUTO; trans.tx_buffer = slv_send_buf; trans.length = length * 8; unity_send_signal("Slave ready"); @@ -1262,6 +1263,7 @@ static void slave_only_rx_trans(uint8_t *slv_recv_buf, uint8_t *mst_send_buf, ui { ESP_LOGI(SLAVE_TAG, "FD DMA, Only RX"); spi_slave_transaction_t trans = {}; + trans.flags |= SPI_SLAVE_TRANS_DMA_BUFFER_ALIGN_AUTO; trans.tx_buffer = NULL; trans.rx_buffer = slv_recv_buf; trans.length = length * 8; @@ -1276,6 +1278,7 @@ static void slave_both_trans(uint8_t *slv_send_buf, uint8_t *slv_recv_buf, uint8 { ESP_LOGI(SLAVE_TAG, "FD DMA, Both TX and RX:"); spi_slave_transaction_t trans = {0}; + trans.flags |= SPI_SLAVE_TRANS_DMA_BUFFER_ALIGN_AUTO; trans.tx_buffer = slv_send_buf; trans.rx_buffer = slv_recv_buf; trans.length = length * 8; @@ -1492,6 +1495,8 @@ TEST_CASE("spi_speed", "[spi]") #define DUMMY_CS_PINS() {25, 26, 27} #elif CONFIG_IDF_TARGET_ESP32H2 #define DUMMY_CS_PINS() {9, 10, 11, 12, 22, 25} +#elif CONFIG_IDF_TARGET_ESP32P4 +#define DUMMY_CS_PINS() {20, 21, 22, 23, 24, 25} #else #define DUMMY_CS_PINS() {0, 1, 4, 5, 8, 9} #endif //CONFIG_IDF_TARGET_ESP32 @@ -1575,6 +1580,7 @@ void test_add_device_slave(void) slave_trans.length = sizeof(slave_sendbuf) * 8; slave_trans.tx_buffer = slave_sendbuf; slave_trans.rx_buffer = slave_recvbuf; + slave_trans.flags |= SPI_SLAVE_TRANS_DMA_BUFFER_ALIGN_AUTO; for (uint8_t i = 0; i < SOC_SPI_MAX_CS_NUM; i++) { memset(slave_recvbuf, 0, sizeof(slave_recvbuf)); @@ -1697,7 +1703,6 @@ static IRAM_ATTR void test_master_iram(void) spi_flash_enable_interrupts_caches_and_other_cpu(); ESP_LOG_BUFFER_HEX("master tx", ret_trans->tx_buffer, TEST_MASTER_IRAM_TRANS_LEN); - ESP_LOG_BUFFER_HEX("master rx", ret_trans->rx_buffer, TEST_MASTER_IRAM_TRANS_LEN); spitest_cmp_or_dump(master_exp, trans_cfg.rx_buffer, TEST_MASTER_IRAM_TRANS_LEN); // Test polling trans api once ------------------------------- @@ -1709,13 +1714,12 @@ static IRAM_ATTR void test_master_iram(void) spi_flash_enable_interrupts_caches_and_other_cpu(); ESP_LOG_BUFFER_HEX("master tx", ret_trans->tx_buffer, TEST_MASTER_IRAM_TRANS_LEN); - ESP_LOG_BUFFER_HEX("master rx", ret_trans->rx_buffer, TEST_MASTER_IRAM_TRANS_LEN); spitest_cmp_or_dump(master_exp, trans_cfg.rx_buffer, TEST_MASTER_IRAM_TRANS_LEN); free(master_send); free(master_recv); free(master_exp); - spi_bus_remove_device(dev_handle); + TEST_ESP_OK(spi_bus_remove_device(dev_handle)); spi_bus_free(TEST_SPI_HOST); } @@ -1733,20 +1737,19 @@ static void test_iram_slave_normal(void) slave_trans.length = TEST_MASTER_IRAM_TRANS_LEN * 8; slave_trans.tx_buffer = slave_sendbuf; slave_trans.rx_buffer = slave_recvbuf; + slave_trans.flags |= SPI_SLAVE_TRANS_DMA_BUFFER_ALIGN_AUTO; test_fill_random_to_buffers_dualboard(211, slave_expect, slave_sendbuf, TEST_MASTER_IRAM_TRANS_LEN); unity_wait_for_signal("Master ready"); unity_send_signal("Slave ready"); - spi_slave_transmit(TEST_SPI_HOST, &slave_trans, portMAX_DELAY); + TEST_ESP_OK(spi_slave_transmit(TEST_SPI_HOST, &slave_trans, portMAX_DELAY)); ESP_LOG_BUFFER_HEX("slave tx", slave_sendbuf, TEST_MASTER_IRAM_TRANS_LEN); - ESP_LOG_BUFFER_HEX("slave rx", slave_recvbuf, TEST_MASTER_IRAM_TRANS_LEN); spitest_cmp_or_dump(slave_expect, slave_recvbuf, TEST_MASTER_IRAM_TRANS_LEN); unity_send_signal("Slave ready"); test_fill_random_to_buffers_dualboard(119, slave_expect, slave_sendbuf, TEST_MASTER_IRAM_TRANS_LEN); - spi_slave_transmit(TEST_SPI_HOST, &slave_trans, portMAX_DELAY); + TEST_ESP_OK(spi_slave_transmit(TEST_SPI_HOST, &slave_trans, portMAX_DELAY)); ESP_LOG_BUFFER_HEX("slave tx", slave_sendbuf, TEST_MASTER_IRAM_TRANS_LEN); - ESP_LOG_BUFFER_HEX("slave rx", slave_recvbuf, TEST_MASTER_IRAM_TRANS_LEN); spitest_cmp_or_dump(slave_expect, slave_recvbuf, TEST_MASTER_IRAM_TRANS_LEN); free(slave_sendbuf); diff --git a/components/esp_driver_spi/test_apps/master/pytest_spi_master.py b/components/esp_driver_spi/test_apps/master/pytest_spi_master.py index 1ac833a84ded..0afe5c97f392 100644 --- a/components/esp_driver_spi/test_apps/master/pytest_spi_master.py +++ b/components/esp_driver_spi/test_apps/master/pytest_spi_master.py @@ -27,8 +27,8 @@ def test_master_esp_flash(case_tester) -> None: # type: ignore # if `test_env` not defined, will run on `generic_multi_device` by default -# TODO: [ESP32P4] IDF-9517 [ESP32C5] IDF-10322 [ESP32C61] IDF-10949 -@pytest.mark.temp_skip_ci(targets=['esp32p4', 'esp32c5', 'esp32c61'], reason='no multi-dev runner') +# TODO: [ESP32C5] IDF-10322 [ESP32C61] IDF-10949 +@pytest.mark.temp_skip_ci(targets=['esp32c5', 'esp32c61'], reason='no multi-dev runner') @pytest.mark.supported_targets @pytest.mark.generic_multi_device @pytest.mark.parametrize( diff --git a/components/esp_driver_spi/test_apps/param/main/test_spi_param.c b/components/esp_driver_spi/test_apps/param/main/test_spi_param.c index 627f4ad492a3..71506acb752e 100644 --- a/components/esp_driver_spi/test_apps/param/main/test_spi_param.c +++ b/components/esp_driver_spi/test_apps/param/main/test_spi_param.c @@ -109,6 +109,10 @@ static void local_test_start(spi_device_handle_t *spi, int freq, const spitest_p devcfg.flags |= SPI_DEVICE_NO_DUMMY; } +#if CONFIG_IDF_TARGET_ESP32P4 //TODO: IDF-8313, update P4 defaulte clock source + devcfg.clock_source = SPI_CLK_SRC_SPLL; +#endif + //slave config slvcfg.mode = pset->mode; slave_pull_up(&buscfg, slvcfg.spics_io_num); @@ -192,6 +196,7 @@ static void local_test_loop(const void *arg1, void *arg2) .tx_buffer = txdata->start, .rx_buffer = recvbuf, .length = txdata->len, + .flags = SPI_SLAVE_TRANS_DMA_BUFFER_ALIGN_AUTO, }; esp_err_t err = spi_slave_queue_trans(TEST_SLAVE_HOST, &slave_trans, portMAX_DELAY); TEST_ESP_OK(err); @@ -247,8 +252,7 @@ static void local_test_loop(const void *arg1, void *arg2) /************ Timing Test ***********************************************/ //TODO: esp32s2 has better timing performance static spitest_param_set_t timing_pgroup[] = { -//signals are not fed to peripherals through iomux if the functions are not selected to iomux -#if !DISABLED_FOR_TARGETS(ESP32S2, ESP32S3) +#if (SLAVE_IOMUX_PIN_MISO != -1) //SPI3 slave has iomux pin { .pset_name = "FULL_DUP, MASTER IOMUX", .freq_limit = ESP_SPI_SLAVE_MAX_FREQ_SYNC, @@ -277,8 +281,7 @@ static spitest_param_set_t timing_pgroup[] = { .slave_iomux = false, .slave_tv_ns = TV_INT_CONNECT_GPIO, }, -//signals are not fed to peripherals through iomux if the functions are not selected to iomux -#if !DISABLED_FOR_TARGETS(ESP32S2, ESP32S3) +#if (SLAVE_IOMUX_PIN_MISO != -1) //SPI3 slave has iomux pin { .pset_name = "MISO_DUP, MASTER IOMUX", .freq_limit = ESP_SPI_SLAVE_MAX_FREQ_SYNC, @@ -307,8 +310,7 @@ static spitest_param_set_t timing_pgroup[] = { .slave_iomux = false, .slave_tv_ns = TV_INT_CONNECT_GPIO, }, -//signals are not fed to peripherals through iomux if the functions are not selected to iomux -#if !DISABLED_FOR_TARGETS(ESP32S2, ESP32S3) +#if (SLAVE_IOMUX_PIN_MISO != -1) //SPI3 slave has iomux pin { .pset_name = "MOSI_DUP, MASTER IOMUX", .freq_limit = ESP_SPI_SLAVE_MAX_FREQ_SYNC, @@ -616,7 +618,8 @@ TEST_CASE("Slave receive correct data", "[spi]") spi_slave_transaction_t slave_trans = { .length = slave_trans_len * 8, .tx_buffer = slave_sendbuf, - .rx_buffer = slave_recvbuf + .rx_buffer = slave_recvbuf, + .flags = SPI_SLAVE_TRANS_DMA_BUFFER_ALIGN_AUTO, }; esp_err_t ret = spi_slave_queue_trans(TEST_SLAVE_HOST, &slave_trans, portMAX_DELAY); TEST_ESP_OK(ret); @@ -1270,7 +1273,9 @@ static int s_spi_bus_freq[] = { IDF_PERFORMANCE_MAX_SPI_CLK_FREQ / 7, IDF_PERFORMANCE_MAX_SPI_CLK_FREQ / 4, IDF_PERFORMANCE_MAX_SPI_CLK_FREQ / 2, +#if !CONFIG_IDF_TARGET_ESP32P4 //TODO: IDF-8313, update P4 defaulte clock source IDF_PERFORMANCE_MAX_SPI_CLK_FREQ, +#endif }; //------------------------------------------- Full Duplex with DMA Freq test -------------------------------------- @@ -1483,6 +1488,7 @@ static void test_slave_fd_no_dma(void) .tx_buffer = slave_send, .rx_buffer = slave_receive, .length = test_trans_len * 8, + .flags = SPI_SLAVE_TRANS_DMA_BUFFER_ALIGN_AUTO, }; unity_send_signal("Slave ready"); TEST_ESP_OK(spi_slave_transmit(TEST_SPI_HOST, &trans_cfg, portMAX_DELAY)); @@ -1587,6 +1593,7 @@ static void test_slave_hd_dma(void) TEST_ESP_OK(spi_slave_hd_queue_trans(TEST_SPI_HOST, SPI_SLAVE_CHAN_TX, &slave_trans, portMAX_DELAY)); slave_trans.data = slave_receive; TEST_ESP_OK(spi_slave_hd_queue_trans(TEST_SPI_HOST, SPI_SLAVE_CHAN_RX, &slave_trans, portMAX_DELAY)); + TEST_ESP_OK(spi_slave_hd_get_trans_res(TEST_SPI_HOST, SPI_SLAVE_CHAN_TX, &ret_trans, portMAX_DELAY)); TEST_ESP_OK(spi_slave_hd_get_trans_res(TEST_SPI_HOST, SPI_SLAVE_CHAN_RX, &ret_trans, portMAX_DELAY)); ESP_LOG_BUFFER_HEX("slave tx", slave_send, test_trans_len); @@ -1688,6 +1695,7 @@ static void test_slave_hd_no_dma(void) TEST_ESP_OK(spi_slave_hd_queue_trans(TEST_SPI_HOST, SPI_SLAVE_CHAN_TX, &slave_trans, portMAX_DELAY)); slave_trans.data = slave_receive; TEST_ESP_OK(spi_slave_hd_queue_trans(TEST_SPI_HOST, SPI_SLAVE_CHAN_RX, &slave_trans, portMAX_DELAY)); + TEST_ESP_OK(spi_slave_hd_get_trans_res(TEST_SPI_HOST, SPI_SLAVE_CHAN_TX, &ret_trans, portMAX_DELAY)); TEST_ESP_OK(spi_slave_hd_get_trans_res(TEST_SPI_HOST, SPI_SLAVE_CHAN_RX, &ret_trans, portMAX_DELAY)); ESP_LOG_BUFFER_HEX("slave tx", slave_send, test_trans_len); @@ -1951,6 +1959,7 @@ static void test_slave_sio_no_dma(void) .length = SOC_SPI_MAXIMUM_BUFFER_SIZE * 8, .tx_buffer = slave_send, .rx_buffer = slave_receive, + .flags = SPI_SLAVE_TRANS_DMA_BUFFER_ALIGN_AUTO, }; unity_send_signal("Slave ready"); TEST_ESP_OK(spi_slave_transmit(TEST_SPI_HOST, &trans, portMAX_DELAY)); diff --git a/components/esp_driver_spi/test_apps/param/pytest_spi_param.py b/components/esp_driver_spi/test_apps/param/pytest_spi_param.py index d565235e9c8c..26308aaf34dc 100644 --- a/components/esp_driver_spi/test_apps/param/pytest_spi_param.py +++ b/components/esp_driver_spi/test_apps/param/pytest_spi_param.py @@ -4,9 +4,7 @@ # If `test_env` is define, should not run on generic runner -@pytest.mark.temp_skip_ci(targets=['esp32p4'], reason='p4 support TBD') # TODO: IDF-8942 @pytest.mark.supported_targets -@pytest.mark.esp32h2 @pytest.mark.generic def test_param_single_dev(case_tester) -> None: # type: ignore for case in case_tester.test_menu: @@ -16,10 +14,9 @@ def test_param_single_dev(case_tester) -> None: # type: ignore # if `test_env` not defined, will run on `generic_multi_device` by default -# TODO: [ESP32P4] IDF-8942 [ESP32C5] IDF-10322 [ESP32C61] IDF-10949 -@pytest.mark.temp_skip_ci(targets=['esp32p4', 'esp32c5', 'esp32c61'], reason='no multi-dev runner') +# TODO: [ESP32C5] IDF-10322 [ESP32C61] IDF-10949 +@pytest.mark.temp_skip_ci(targets=['esp32c5', 'esp32c61'], reason='no multi-dev runner') @pytest.mark.supported_targets -@pytest.mark.esp32h2 @pytest.mark.generic_multi_device @pytest.mark.parametrize('count', [2,], indirect=True) def test_param_multi_dev(case_tester) -> None: # type: ignore diff --git a/components/esp_driver_spi/test_apps/slave/main/test_spi_slave.c b/components/esp_driver_spi/test_apps/slave/main/test_spi_slave.c index 8a27902e716d..46537168210b 100644 --- a/components/esp_driver_spi/test_apps/slave/main/test_spi_slave.c +++ b/components/esp_driver_spi/test_apps/slave/main/test_spi_slave.c @@ -562,6 +562,7 @@ static IRAM_ATTR void test_slave_isr_iram(void) } TEST_CASE_MULTIPLE_DEVICES("SPI_Slave: Test_ISR_IRAM_disable_cache", "[spi_ms]", test_slave_iram_master_normal, test_slave_isr_iram); +#if !SOC_CACHE_INTERNAL_MEM_VIA_L1CACHE //isr option is not supported in this condition static uint32_t isr_trans_cnt, isr_trans_test_fail; static IRAM_ATTR void test_trans_in_isr_post_trans_cbk(spi_slave_transaction_t *curr_trans) { @@ -725,6 +726,7 @@ static IRAM_ATTR void spi_queue_reset_in_isr(void) spi_slave_free(TEST_SPI_HOST); } TEST_CASE_MULTIPLE_DEVICES("SPI_Slave: Test_Queue_Reset_in_ISR", "[spi_ms]", test_slave_iram_master_normal, spi_queue_reset_in_isr); +#endif // SOC_CACHE_INTERNAL_MEM_VIA_L1CACHE #endif // CONFIG_SPI_SLAVE_ISR_IN_IRAM #if (SOC_CPU_CORES_NUM > 1) && (!CONFIG_FREERTOS_UNICORE) diff --git a/components/esp_driver_spi/test_apps/slave/pytest_spi_slave.py b/components/esp_driver_spi/test_apps/slave/pytest_spi_slave.py index b39e7f948471..f58db76aee4a 100644 --- a/components/esp_driver_spi/test_apps/slave/pytest_spi_slave.py +++ b/components/esp_driver_spi/test_apps/slave/pytest_spi_slave.py @@ -15,8 +15,8 @@ def test_slave_single_dev(case_tester) -> None: # type: ignore # if `test_env` not defined, will run on `generic_multi_device` by default -# TODO: [ESP32P4] IDF-9517 [ESP32C5] IDF-10322 [ESP32C61] IDF-10949 -@pytest.mark.temp_skip_ci(targets=['esp32p4', 'esp32c5', 'esp32c61'], reason='no multi-dev runner') +# TODO: [ESP32C5] IDF-10322 [ESP32C61] IDF-10949 +@pytest.mark.temp_skip_ci(targets=['esp32c5', 'esp32c61'], reason='no multi-dev runner') @pytest.mark.supported_targets @pytest.mark.generic_multi_device @pytest.mark.parametrize('count, config', [(2, 'defaults'), (2, 'iram_safe')], indirect=True) diff --git a/components/esp_driver_spi/test_apps/slave_hd/main/test_spi_slave_hd.c b/components/esp_driver_spi/test_apps/slave_hd/main/test_spi_slave_hd.c index 397a30f4a1a6..eea77e52c339 100644 --- a/components/esp_driver_spi/test_apps/slave_hd/main/test_spi_slave_hd.c +++ b/components/esp_driver_spi/test_apps/slave_hd/main/test_spi_slave_hd.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2021-2023 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -855,19 +855,23 @@ static void hd_slave_quad(void) { .data = slave_recv_buf, .len = (trans_len + 3) & (~3), + .flags = SPI_SLAVE_HD_TRANS_DMA_BUFFER_ALIGN_AUTO, }, { .data = slave_recv_buf + BUF_SIZE / 2, .len = (trans_len + 3) & (~3), + .flags = SPI_SLAVE_HD_TRANS_DMA_BUFFER_ALIGN_AUTO, }, //send { .data = slave_send_buf, .len = (trans_len + 3) & (~3), + .flags = SPI_SLAVE_HD_TRANS_DMA_BUFFER_ALIGN_AUTO, }, { .data = slave_send_buf + BUF_SIZE / 2, .len = (trans_len + 3) & (~3), + .flags = SPI_SLAVE_HD_TRANS_DMA_BUFFER_ALIGN_AUTO, }, }; @@ -901,7 +905,7 @@ static void hd_slave_quad(void) spi_slave_hd_deinit(TEST_SLAVE_HOST); } -TEST_CASE_MULTIPLE_DEVICES("SPI quad hd test ", "[spi_ms][test_env=generic_multi_device]", hd_master_quad, hd_slave_quad); +TEST_CASE_MULTIPLE_DEVICES("SPI quad hd test", "[spi_ms][test_env=generic_multi_device]", hd_master_quad, hd_slave_quad); #endif // #if !TEMPORARY_DISABLED_FOR_TARGETS(ESP32S2) @@ -941,6 +945,7 @@ void slave_run_append(void) slave_rx_trans[append_idx].data = heap_caps_aligned_calloc(4, 1, TEST_TRANS_LEN, MALLOC_CAP_DMA); TEST_ASSERT_NOT_NULL(slave_rx_trans[append_idx].data); slave_rx_trans[append_idx].len = trans_len; + slave_rx_trans[append_idx].flags |= SPI_SLAVE_HD_TRANS_DMA_BUFFER_ALIGN_AUTO; TEST_ESP_OK(spi_slave_hd_append_trans(TEST_SPI_HOST, SPI_SLAVE_CHAN_RX, &slave_rx_trans[append_idx], portMAX_DELAY)); } @@ -982,6 +987,7 @@ void slave_run_append(void) } slave_tx_trans[append_idx].data = slave_rx_trans[append_idx].data; slave_tx_trans[append_idx].len = trans_len; + slave_tx_trans[append_idx].flags |= SPI_SLAVE_HD_TRANS_DMA_BUFFER_ALIGN_AUTO; prepare_data(slave_tx_trans[append_idx].data, trans_len, -3); TEST_ESP_OK(spi_slave_hd_append_trans(TEST_SPI_HOST, SPI_SLAVE_CHAN_TX, &slave_tx_trans[append_idx], portMAX_DELAY)); } diff --git a/components/esp_driver_spi/test_apps/slave_hd/pytest_spi_slave_hd.py b/components/esp_driver_spi/test_apps/slave_hd/pytest_spi_slave_hd.py index d84705884604..6fea4581ee69 100644 --- a/components/esp_driver_spi/test_apps/slave_hd/pytest_spi_slave_hd.py +++ b/components/esp_driver_spi/test_apps/slave_hd/pytest_spi_slave_hd.py @@ -28,6 +28,7 @@ def test_slave_hd_single_dev(case_tester) -> None: # type: ignore @pytest.mark.esp32c3 @pytest.mark.esp32c6 @pytest.mark.esp32h2 +@pytest.mark.esp32p4 @pytest.mark.generic_multi_device @pytest.mark.parametrize('count', [2,], indirect=True) def test_slave_hd_multi_dev(case_tester) -> None: # type: ignore diff --git a/components/soc/esp32p4/spi_periph.c b/components/soc/esp32p4/spi_periph.c index 5a629b6604c1..8d88638166e4 100644 --- a/components/soc/esp32p4/spi_periph.c +++ b/components/soc/esp32p4/spi_periph.c @@ -73,7 +73,6 @@ const spi_signal_conn_t spi_periph_signal[SOC_SPI_PERIPH_NUM] = { .spiclk_in = SPI3_CK_PAD_IN_IDX, .spid_out = SPI3_D_PAD_OUT_IDX, .spiq_out = SPI3_QO_PAD_OUT_IDX, - //SPI3 doesn't have wp and hd signals .spiwp_out = SPI3_WP_PAD_OUT_IDX, .spihd_out = SPI3_HOLD_PAD_OUT_IDX, .spid_in = SPI3_D_PAD_IN_IDX, From ca66d3fb4095fe54c0b9b5216ce70b479c26dbb5 Mon Sep 17 00:00:00 2001 From: wanckl Date: Mon, 26 Aug 2024 18:51:47 +0800 Subject: [PATCH 183/365] fix(driver_spi): enable c5 spi test --- components/esp_driver_spi/test_apps/.build-test-rules.yml | 4 ---- .../components/spi_bench_mark/include/spi_performance.h | 2 +- .../esp_driver_spi/test_apps/master/pytest_spi_master.py | 5 ++--- .../esp_driver_spi/test_apps/param/pytest_spi_param.py | 4 ++-- .../esp_driver_spi/test_apps/slave/pytest_spi_slave.py | 4 ++-- .../esp_driver_spi/test_apps/slave_hd/pytest_spi_slave_hd.py | 1 + 6 files changed, 8 insertions(+), 12 deletions(-) diff --git a/components/esp_driver_spi/test_apps/.build-test-rules.yml b/components/esp_driver_spi/test_apps/.build-test-rules.yml index 9413dfd7e59b..9b605ff85528 100644 --- a/components/esp_driver_spi/test_apps/.build-test-rules.yml +++ b/components/esp_driver_spi/test_apps/.build-test-rules.yml @@ -9,10 +9,6 @@ components/esp_driver_spi/test_apps/master: disable: - if: SOC_GPSPI_SUPPORTED != 1 - disable_test: - - if: IDF_TARGET in ["esp32c61"] - temporary: true - reason: no multi-dev runner # TODO: [ESP32C61] IDF-10949 <<: *spi_depends_default components/esp_driver_spi/test_apps/param: diff --git a/components/esp_driver_spi/test_apps/components/spi_bench_mark/include/spi_performance.h b/components/esp_driver_spi/test_apps/components/spi_bench_mark/include/spi_performance.h index 5dcb6f690f3e..2b68f9d04060 100644 --- a/components/esp_driver_spi/test_apps/components/spi_bench_mark/include/spi_performance.h +++ b/components/esp_driver_spi/test_apps/components/spi_bench_mark/include/spi_performance.h @@ -84,7 +84,7 @@ #elif CONFIG_IDF_TARGET_ESP32C61 #define IDF_PERFORMANCE_MAX_SPI_CLK_FREQ 40*1000*1000 #define IDF_PERFORMANCE_MAX_SPI_PER_TRANS_NO_POLLING 32 -#define IDF_PERFORMANCE_MAX_SPI_PER_TRANS_POLLING 17 +#define IDF_PERFORMANCE_MAX_SPI_PER_TRANS_POLLING 19 #define IDF_PERFORMANCE_MAX_SPI_PER_TRANS_NO_POLLING_NO_DMA 29 #define IDF_PERFORMANCE_MAX_SPI_PER_TRANS_POLLING_NO_DMA 14 diff --git a/components/esp_driver_spi/test_apps/master/pytest_spi_master.py b/components/esp_driver_spi/test_apps/master/pytest_spi_master.py index 0afe5c97f392..691929a135a2 100644 --- a/components/esp_driver_spi/test_apps/master/pytest_spi_master.py +++ b/components/esp_driver_spi/test_apps/master/pytest_spi_master.py @@ -5,7 +5,6 @@ # If `test_env` is define, should not run on generic runner @pytest.mark.supported_targets -@pytest.mark.temp_skip_ci(targets=['esp32c61'], reason='test case fail') # TODO: [ESP32C61] IDF-10949 @pytest.mark.generic @pytest.mark.parametrize('config', ['defaults', 'release', 'freertos_compliance', 'freertos_flash',], indirect=True) def test_master_single_dev(case_tester) -> None: # type: ignore @@ -27,8 +26,8 @@ def test_master_esp_flash(case_tester) -> None: # type: ignore # if `test_env` not defined, will run on `generic_multi_device` by default -# TODO: [ESP32C5] IDF-10322 [ESP32C61] IDF-10949 -@pytest.mark.temp_skip_ci(targets=['esp32c5', 'esp32c61'], reason='no multi-dev runner') +# TODO: [ESP32C61] IDF-10949 +@pytest.mark.temp_skip_ci(targets=['esp32c61'], reason='no multi-dev runner') @pytest.mark.supported_targets @pytest.mark.generic_multi_device @pytest.mark.parametrize( diff --git a/components/esp_driver_spi/test_apps/param/pytest_spi_param.py b/components/esp_driver_spi/test_apps/param/pytest_spi_param.py index 26308aaf34dc..d7df69641062 100644 --- a/components/esp_driver_spi/test_apps/param/pytest_spi_param.py +++ b/components/esp_driver_spi/test_apps/param/pytest_spi_param.py @@ -14,8 +14,8 @@ def test_param_single_dev(case_tester) -> None: # type: ignore # if `test_env` not defined, will run on `generic_multi_device` by default -# TODO: [ESP32C5] IDF-10322 [ESP32C61] IDF-10949 -@pytest.mark.temp_skip_ci(targets=['esp32c5', 'esp32c61'], reason='no multi-dev runner') +# TODO: [ESP32C61] IDF-10949 +@pytest.mark.temp_skip_ci(targets=['esp32c61'], reason='no multi-dev runner') @pytest.mark.supported_targets @pytest.mark.generic_multi_device @pytest.mark.parametrize('count', [2,], indirect=True) diff --git a/components/esp_driver_spi/test_apps/slave/pytest_spi_slave.py b/components/esp_driver_spi/test_apps/slave/pytest_spi_slave.py index f58db76aee4a..5b9f8823dc2d 100644 --- a/components/esp_driver_spi/test_apps/slave/pytest_spi_slave.py +++ b/components/esp_driver_spi/test_apps/slave/pytest_spi_slave.py @@ -15,8 +15,8 @@ def test_slave_single_dev(case_tester) -> None: # type: ignore # if `test_env` not defined, will run on `generic_multi_device` by default -# TODO: [ESP32C5] IDF-10322 [ESP32C61] IDF-10949 -@pytest.mark.temp_skip_ci(targets=['esp32c5', 'esp32c61'], reason='no multi-dev runner') +# TODO: [ESP32C61] IDF-10949 +@pytest.mark.temp_skip_ci(targets=['esp32c61'], reason='no multi-dev runner') @pytest.mark.supported_targets @pytest.mark.generic_multi_device @pytest.mark.parametrize('count, config', [(2, 'defaults'), (2, 'iram_safe')], indirect=True) diff --git a/components/esp_driver_spi/test_apps/slave_hd/pytest_spi_slave_hd.py b/components/esp_driver_spi/test_apps/slave_hd/pytest_spi_slave_hd.py index 6fea4581ee69..5d09b75f069d 100644 --- a/components/esp_driver_spi/test_apps/slave_hd/pytest_spi_slave_hd.py +++ b/components/esp_driver_spi/test_apps/slave_hd/pytest_spi_slave_hd.py @@ -26,6 +26,7 @@ def test_slave_hd_single_dev(case_tester) -> None: # type: ignore @pytest.mark.esp32s3 @pytest.mark.esp32c2 @pytest.mark.esp32c3 +@pytest.mark.esp32c5 @pytest.mark.esp32c6 @pytest.mark.esp32h2 @pytest.mark.esp32p4 From 020f7a6297f52e473e724af6509b72350024e62f Mon Sep 17 00:00:00 2001 From: chenjianhua Date: Tue, 15 Oct 2024 12:11:13 +0800 Subject: [PATCH 184/365] fix(bt/controller): Fixed BLE functions overriding on ESP32-C3 ECO7 --- components/esp_rom/esp32c3/ld/esp32c3.rom.eco7.ld | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/components/esp_rom/esp32c3/ld/esp32c3.rom.eco7.ld b/components/esp_rom/esp32c3/ld/esp32c3.rom.eco7.ld index 69df558be7ec..beaccc21dd63 100644 --- a/components/esp_rom/esp32c3/ld/esp32c3.rom.eco7.ld +++ b/components/esp_rom/esp32c3/ld/esp32c3.rom.eco7.ld @@ -172,7 +172,6 @@ r_bt_rtp_get_txpwr_idx_by_act = 0x40000c00; r_btdm_task_post = 0x40000c14; r_btdm_task_post_from_isr = 0x40000c18; r_btdm_task_recycle = 0x40000c1c; -r_hci_register_vendor_desc_tab = 0x40000d9c; r_ke_task_schedule = 0x40000e80; r_llc_hci_command_handler = 0x40000ef0; r_llc_loc_ch_map_proc_continue = 0x40000f5c; @@ -183,8 +182,6 @@ r_lld_con_sched = 0x40001118; r_lld_con_stop = 0x40001124; r_lld_llcp_rx_ind_handler = 0x400011b0; r_lld_per_adv_sched = 0x400011f8; -r_lld_scan_process_pkt_rx_adv_rep = 0x40001284; -r_register_esp_vendor_cmd_handler = 0x40001400; r_rf_txpwr_cs_get = 0x40001428; r_rf_txpwr_dbm_get = 0x4000142c; r_sch_arb_event_start_isr = 0x400014f8; @@ -216,6 +213,9 @@ r_lld_scan_start_hook = 0x40001c74; r_lld_init_start_hook = 0x40001cb8; r_lld_scan_evt_start_cbk_eco = 0x40001d20; r_ke_task_handler_get_overwrite = 0x40001da8; +r_hci_register_vendor_desc_tab = 0x40000d9c; +r_lld_scan_process_pkt_rx_adv_rep = 0x40001284; +r_register_esp_vendor_cmd_handler = 0x40001400; */ From 82e6c0619338214cb90b8e42dfdceb66b2aca278 Mon Sep 17 00:00:00 2001 From: Nachiket Kukade Date: Mon, 14 Oct 2024 21:29:52 +0530 Subject: [PATCH 185/365] feat(wpa_supplicant): Add sbom manifest file for wpa_supplicant --- components/wpa_supplicant/sbom.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 components/wpa_supplicant/sbom.yml diff --git a/components/wpa_supplicant/sbom.yml b/components/wpa_supplicant/sbom.yml new file mode 100644 index 000000000000..c283feb63207 --- /dev/null +++ b/components/wpa_supplicant/sbom.yml @@ -0,0 +1,6 @@ +name: 'wpa_supplicant' +version: '2.10' +cpe: cpe:2.3:a:w1.fi:wpa_supplicant:{}:*:*:*:*:*:*:* +supplier: 'Organization: Espressif Systems (Shanghai) CO LTD' +originator: 'Person: Jouni Malinen' +description: Espressif fork of wpa_supplicant - an open-source WPA/WPA2/WPA3/IEEE 802.1X Supplicant. From af318a91a1c0394fdabbbd60963e89bb3e63fc47 Mon Sep 17 00:00:00 2001 From: "C.S.M" Date: Tue, 15 Oct 2024 17:30:48 +0800 Subject: [PATCH 186/365] test(spi_flash): Add 32MB flash encrypted write-read test (beyond 16MB) --- .../main/test_flash_encryption.c | 80 +++++++++++++++++++ .../sdkconfig.ci.release_f8r8 | 1 + 2 files changed, 81 insertions(+) diff --git a/components/spi_flash/test_apps/flash_encryption/main/test_flash_encryption.c b/components/spi_flash/test_apps/flash_encryption/main/test_flash_encryption.c index 6ebfa46b523d..0277dd5ebcd3 100644 --- a/components/spi_flash/test_apps/flash_encryption/main/test_flash_encryption.c +++ b/components/spi_flash/test_apps/flash_encryption/main/test_flash_encryption.c @@ -273,6 +273,33 @@ TEST_CASE("test read & write encrypted data(32 bytes alianed address)", "[flash_ free(cmp_normal_buf); free(cmp_encrypt_buf); + + uint32_t size; + esp_flash_get_physical_size(NULL, &size); + + if (size > 0x1000000) { + start = 0x1030000; + TEST_ESP_OK(esp_flash_erase_region(NULL, start, SPI_FLASH_SEC_SIZE)); + start = (start + 31) & (~31); // round up to 32 byte boundary + printf("Test data partition @ 0x%" PRIx32 "\n", (uint32_t) start); + ESP_LOG_BUFFER_HEXDUMP(TAG, plainttext_data, sizeof(plainttext_data), ESP_LOG_INFO); + printf("Encrypted writing......\n"); + TEST_ESP_OK(esp_flash_write_encrypted(NULL, start, plainttext_data, sizeof(plainttext_data))); + + cmp_encrypt_buf = heap_caps_malloc(SPI_FLASH_SEC_SIZE, MALLOC_CAP_32BIT | MALLOC_CAP_8BIT | MALLOC_CAP_INTERNAL); + printf("Encrypted reading......\n"); + TEST_ESP_OK(esp_flash_read_encrypted(NULL, start, cmp_encrypt_buf, SPI_FLASH_SEC_SIZE)); + ESP_LOG_BUFFER_HEXDUMP(TAG, cmp_encrypt_buf, sizeof(plainttext_data), ESP_LOG_INFO); + TEST_ASSERT_EQUAL_HEX8_ARRAY(plainttext_data, cmp_encrypt_buf, sizeof(plainttext_data)); + + cmp_normal_buf = heap_caps_malloc(SPI_FLASH_SEC_SIZE, MALLOC_CAP_32BIT | MALLOC_CAP_8BIT | MALLOC_CAP_INTERNAL); + TEST_ESP_OK(esp_flash_read(NULL, cmp_normal_buf, start, SPI_FLASH_SEC_SIZE)); + printf("Normal read(esp_flash_read)......\n"); + ESP_LOG_BUFFER_HEXDUMP(TAG, cmp_normal_buf, sizeof(plainttext_data), ESP_LOG_INFO); + + free(cmp_normal_buf); + free(cmp_encrypt_buf); + } } TEST_CASE("test read & write encrypted data(16 bytes alianed but 32 bytes unaligned)", "[flash_encryption]") @@ -305,6 +332,38 @@ TEST_CASE("test read & write encrypted data(16 bytes alianed but 32 bytes unalig free(cmp_normal_buf); free(cmp_encrypt_buf); + + uint32_t size; + esp_flash_get_physical_size(NULL, &size); + if (size > 0x1000000) { + start = 0x1030000; + TEST_ESP_OK(esp_flash_erase_region(NULL, start, SPI_FLASH_SEC_SIZE)); + do { + start++; + } while ((start % 16) != 0); + + if (start % 32 == 0) { + start += 16; + } + printf("Test data partition @ 0x%" PRIx32 "\n", (uint32_t) start); + ESP_LOG_BUFFER_HEXDUMP(TAG, plainttext_data, sizeof(plainttext_data), ESP_LOG_INFO); + printf("Encrypted writing......\n"); + TEST_ESP_OK(esp_flash_write_encrypted(NULL, start, plainttext_data, sizeof(plainttext_data))); + + cmp_encrypt_buf = heap_caps_malloc(SPI_FLASH_SEC_SIZE, MALLOC_CAP_32BIT | MALLOC_CAP_8BIT | MALLOC_CAP_INTERNAL); + printf("Encrypted reading......\n"); + TEST_ESP_OK(esp_flash_read_encrypted(NULL, start, cmp_encrypt_buf, SPI_FLASH_SEC_SIZE)); + ESP_LOG_BUFFER_HEXDUMP(TAG, cmp_encrypt_buf, sizeof(plainttext_data), ESP_LOG_INFO); + TEST_ASSERT_EQUAL_HEX8_ARRAY(plainttext_data, cmp_encrypt_buf, sizeof(plainttext_data)); + + cmp_normal_buf = heap_caps_malloc(SPI_FLASH_SEC_SIZE, MALLOC_CAP_32BIT | MALLOC_CAP_8BIT | MALLOC_CAP_INTERNAL); + TEST_ESP_OK(esp_flash_read(NULL, cmp_normal_buf, start, SPI_FLASH_SEC_SIZE)); + printf("Normal read(esp_flash_read)......\n"); + ESP_LOG_BUFFER_HEXDUMP(TAG, cmp_normal_buf, sizeof(plainttext_data), ESP_LOG_INFO); + + free(cmp_normal_buf); + free(cmp_encrypt_buf); + } } static const uint8_t large_const_buffer[16432] = { @@ -338,6 +397,27 @@ TEST_CASE("test read & write encrypted data with large buffer(n*64+32+16)", "[fl TEST_ESP_OK(esp_flash_read_encrypted(NULL, start, buf, sizeof(large_const_buffer))); TEST_ASSERT_EQUAL_HEX8_ARRAY(buf, large_const_buffer, sizeof(large_const_buffer)); free(buf); + + uint32_t size; + esp_flash_get_physical_size(NULL, &size); + + if (size > 0x1000000) { + start = 0x1030000; + printf("Test data partition @ 0x%" PRIx32 "\n", (uint32_t) start); + TEST_ESP_OK(esp_flash_erase_region(NULL, start, 5 * 4096)); + printf("Encrypted writing......\n"); + + TEST_ESP_OK(ccomp_timer_start()); + TEST_ESP_OK(esp_flash_write_encrypted(NULL, start, large_const_buffer, sizeof(large_const_buffer))); + write_time = ccomp_timer_stop(); + IDF_LOG_PERFORMANCE(TAG, "Writing speed: %.2f us/KB", (double)(write_time/sizeof(large_const_buffer))*1024); + + buf = (uint8_t*)heap_caps_malloc(sizeof(large_const_buffer), MALLOC_CAP_8BIT); + + TEST_ESP_OK(esp_flash_read_encrypted(NULL, start, buf, sizeof(large_const_buffer))); + TEST_ASSERT_EQUAL_HEX8_ARRAY(buf, large_const_buffer, sizeof(large_const_buffer)); + free(buf); + } } static DRAM_ATTR const uint8_t large_const_buffer_dram[16432] = { diff --git a/components/spi_flash/test_apps/flash_encryption/sdkconfig.ci.release_f8r8 b/components/spi_flash/test_apps/flash_encryption/sdkconfig.ci.release_f8r8 index b31f5907ca34..6fab53cf3ad6 100644 --- a/components/spi_flash/test_apps/flash_encryption/sdkconfig.ci.release_f8r8 +++ b/components/spi_flash/test_apps/flash_encryption/sdkconfig.ci.release_f8r8 @@ -18,3 +18,4 @@ CONFIG_SPIRAM_MODE_OCT=y CONFIG_SPIRAM_TYPE_AUTO=y CONFIG_ESPTOOLPY_OCT_FLASH=y CONFIG_ESPTOOLPY_FLASHMODE_OPI=y +CONFIG_ESPTOOLPY_FLASHSIZE_32MB=y From 9742007ce01f4f09d9f1c46583c8f5a082ccb3a1 Mon Sep 17 00:00:00 2001 From: morris Date: Tue, 15 Oct 2024 17:26:26 +0800 Subject: [PATCH 187/365] fix(pcnt): install the pm lock upon driver installation --- components/esp_driver_pcnt/src/pulse_cnt.c | 17 ++++++++--------- docs/en/api-reference/peripherals/pcnt.rst | 8 ++++---- docs/zh_CN/api-reference/peripherals/pcnt.rst | 8 ++++---- 3 files changed, 16 insertions(+), 17 deletions(-) diff --git a/components/esp_driver_pcnt/src/pulse_cnt.c b/components/esp_driver_pcnt/src/pulse_cnt.c index 5f50e39acff6..0f1148e9fdda 100644 --- a/components/esp_driver_pcnt/src/pulse_cnt.c +++ b/components/esp_driver_pcnt/src/pulse_cnt.c @@ -246,6 +246,14 @@ esp_err_t pcnt_new_unit(const pcnt_unit_config_t *config, pcnt_unit_handle_t *re TAG, "install interrupt service failed"); } + // PCNT uses the APB as its function clock, + // and its filter module is sensitive to the clock frequency +#if CONFIG_PM_ENABLE + sprintf(unit->pm_lock_name, "pcnt_%d_%d", group_id, unit_id); // e.g. pcnt_0_0 + ESP_GOTO_ON_ERROR(esp_pm_lock_create(ESP_PM_APB_FREQ_MAX, 0, unit->pm_lock_name, &unit->pm_lock), err, TAG, "install pm lock failed"); + ESP_LOGD(TAG, "install APB_FREQ_MAX lock for unit (%d,%d)", group_id, unit_id); +#endif + // some events are enabled by default, disable them all pcnt_ll_disable_all_events(group->hal.dev, unit_id); // disable filter by default @@ -375,15 +383,6 @@ esp_err_t pcnt_unit_set_glitch_filter(pcnt_unit_handle_t unit, const pcnt_glitch if (config) { glitch_filter_thres = esp_clk_apb_freq() / 1000000 * config->max_glitch_ns / 1000; ESP_RETURN_ON_FALSE(glitch_filter_thres <= PCNT_LL_MAX_GLITCH_WIDTH, ESP_ERR_INVALID_ARG, TAG, "glitch width out of range"); - - // The filter module is working against APB clock, so lazy install PM lock -#if CONFIG_PM_ENABLE - if (!unit->pm_lock) { - sprintf(unit->pm_lock_name, "pcnt_%d_%d", group->group_id, unit->unit_id); // e.g. pcnt_0_0 - ESP_RETURN_ON_ERROR(esp_pm_lock_create(ESP_PM_APB_FREQ_MAX, 0, unit->pm_lock_name, &unit->pm_lock), TAG, "install pm lock failed"); - ESP_LOGD(TAG, "install APB_FREQ_MAX lock for unit (%d,%d)", group->group_id, unit->unit_id); - } -#endif } // filter control bit is mixed with other PCNT control bits in the same register diff --git a/docs/en/api-reference/peripherals/pcnt.rst b/docs/en/api-reference/peripherals/pcnt.rst index 15478424fe15..3f7d9a12c089 100644 --- a/docs/en/api-reference/peripherals/pcnt.rst +++ b/docs/en/api-reference/peripherals/pcnt.rst @@ -226,7 +226,7 @@ This function should be called when the unit is in the init state. Otherwise, it .. note:: - The glitch filter is clocked from APB. For the counter not to miss any pulses, the maximum glitch width should be longer than one APB_CLK cycle (usually 12.5 ns if APB equals 80 MHz). As the APB frequency would be changed after DFS (Dynamic Frequency Scaling) enabled, which means the filter does not work as expect in that case. So the driver installs a PM lock for PCNT unit during the first time you enable the glitch filter. For more information related to power management strategy used in PCNT driver, please see :ref:`pcnt-power-management`. + The glitch filter operates using the APB clock. To ensure the counter does not miss any pulses, the maximum glitch width should be longer than one APB_CLK cycle (typically 12.5 ns if APB is 80 MHz). Since the APB frequency can change with Dynamic Frequency Scaling (DFS), the filter may not function as expected in such cases. Therefore, the driver installs a power management lock for each PCNT unit. For more details on the power management strategy used in the PCNT driver, please refer to :ref:`pcnt-power-management`. .. code:: c @@ -269,7 +269,7 @@ Before doing IO control to the PCNT unit, you need to enable it first, by callin * switches the PCNT driver state from **init** to **enable**. * enables the interrupt service if it has been lazy installed in :cpp:func:`pcnt_unit_register_event_callbacks`. -* acquires a proper power management lock if it has been lazy installed in :cpp:func:`pcnt_unit_set_glitch_filter`. See also :ref:`pcnt-power-management` for more information. +* acquires a proper power management lock if it has been installed. See also :ref:`pcnt-power-management` for more information. On the contrary, calling :cpp:func:`pcnt_unit_disable` will do the opposite, that is, put the PCNT driver back to the **init** state, disable the interrupts service and release the power management lock. @@ -327,9 +327,9 @@ The internal hardware counter will be cleared to zero automatically when it reac Power Management ^^^^^^^^^^^^^^^^ -When power management is enabled (i.e., :ref:`CONFIG_PM_ENABLE` is on), the system will adjust the APB frequency before going into light sleep, thus potentially changing the behavior of PCNT glitch filter and leading to valid signal being treated as noise. +When power management is enabled (i.e., :ref:`CONFIG_PM_ENABLE` is on), the system adjusts the APB frequency before entering light sleep, which can cause the PCNT glitch filter to misinterpret valid signals as noise. -However, the driver can prevent the system from changing APB frequency by acquiring a power management lock of type :cpp:enumerator:`ESP_PM_APB_FREQ_MAX`. Whenever you enable the glitch filter by :cpp:func:`pcnt_unit_set_glitch_filter`, the driver guarantees that the power management lock is acquired after the PCNT unit is enabled by :cpp:func:`pcnt_unit_enable`. Likewise, the driver releases the lock after :cpp:func:`pcnt_unit_disable` is called. +To prevent this, the driver can acquire a power management lock of type :cpp:enumerator:`ESP_PM_APB_FREQ_MAX`, ensuring the APB frequency remains constant. This lock is acquired when the PCNT unit is enabled via :cpp:func:`pcnt_unit_enable` and released when the unit is disabled via :cpp:func:`pcnt_unit_disable`. .. _pcnt-iram-safe: diff --git a/docs/zh_CN/api-reference/peripherals/pcnt.rst b/docs/zh_CN/api-reference/peripherals/pcnt.rst index 4f4cc2b08580..acd8ed550548 100644 --- a/docs/zh_CN/api-reference/peripherals/pcnt.rst +++ b/docs/zh_CN/api-reference/peripherals/pcnt.rst @@ -226,7 +226,7 @@ PCNT 单元的滤波器可滤除信号中的短时毛刺,:cpp:type:`pcnt_glitc .. note:: - 毛刺滤波器的时钟信息来自 APB。为确保 PCNT 单元不会滤除脉冲信号,最大毛刺宽度应大于一个 APB_CLK 周期(如果 APB 的频率为 80 MHz,则最大毛刺宽度为 12.5 ns)。使能动态频率缩放 (DFS) 后,APB 的频率会发生变化,从而最大毛刺宽度也会发生变化,这会导致计数器无法正常工作。因此,第一次使能毛刺滤波器时,驱动会为 PCNT 单元安装 PM 锁。关于 PCNT 驱动的电源管理的更多信息,请参考 :ref:`pcnt-power-management`。 + 毛刺滤波器的时钟信息来自 APB。为确保 PCNT 单元不会滤除脉冲信号,最大毛刺宽度应大于一个 APB_CLK 周期(如果 APB 的频率为 80 MHz,则最大毛刺宽度为 12.5 ns)。使能动态频率缩放 (DFS) 后,APB 的频率会发生变化,从而最大毛刺宽度也会发生变化,这会导致计数器无法正常工作。因此,驱动会为每个 PCNT 单元安装电源锁。关于 PCNT 驱动的电源管理的更多信息,请参考 :ref:`pcnt-power-management`。 .. code:: c @@ -269,7 +269,7 @@ PCNT 单元的滤波器可滤除信号中的短时毛刺,:cpp:type:`pcnt_glitc * 将 PCNT 单元的驱动状态从 **初始** 切换到 **使能** 。 * 如果中断服务已经在 :cpp:func:`pcnt_unit_register_event_callbacks` 延迟安装,使能中断服务。 -* 如果电源管理锁已经在 :cpp:func:`pcnt_unit_set_glitch_filter` 延迟安装,获取该电源管理锁。请参考 :ref:`pcnt-power-management` 获取更多信息。 +* 如果电源管理锁已经安装,获取该电源管理锁。请参考 :ref:`pcnt-power-management` 获取更多信息。 调用函数 :cpp:func:`pcnt_unit_disable` 会进行相反的操作,即将 PCNT 单元的驱动状态切换回 **初始** 状态,禁用中断服务并释放电源管理锁。 @@ -327,9 +327,9 @@ PCNT 内部的硬件计数器会在计数达到高/低门限的时候自动清 电源管理 ^^^^^^^^^^ -使能电源管理(即 :ref:`CONFIG_PM_ENABLE` 开启)后,在进入 Light-sleep 模式之前,系统会调整 APB 的频率。这会改变 PCNT 毛刺滤波器的参数,从而可能导致有效信号被滤除。 +当电源管理使能(即 :ref:`CONFIG_PM_ENABLE` 开启)时,系统会在进入 Light-sleep 模式之前调整 APB 的频率,这可能导致 PCNT 毛刺滤波器将有效信号误认为噪声。 -驱动通过获取 :cpp:enumerator:`ESP_PM_APB_FREQ_MAX` 类型的电源管理锁来防止系统修改 APB 频率。每当通过 :cpp:func:`pcnt_unit_set_glitch_filter` 使能毛刺滤波器时,驱动可以保证系统在 :cpp:func:`pcnt_unit_enable` 使能 PCNT 单元后获取电源管理锁。而系统调用 :cpp:func:`pcnt_unit_disable` 之后,驱动会释放电源管理锁。 +为了防止这种情况发生,驱动程序可以获取类型为 :cpp:enumerator:`ESP_PM_APB_FREQ_MAX` 的电源管理锁,以确保 APB 频率保持不变。该锁在通过 :cpp:func:`pcnt_unit_enable` 使能 PCNT 单元时获取,并在通过 :cpp:func:`pcnt_unit_disable` 禁用单元时释放。 .. _pcnt-iram-safe: From 8d8b3fc0a25425fdfcec71a038968aad061bbc1a Mon Sep 17 00:00:00 2001 From: "nilesh.kale" Date: Mon, 14 Oct 2024 17:08:51 +0530 Subject: [PATCH 188/365] fix(esp_http_client): Fix ota failure with openssl server If the TLS server (e.g., openssl) closes connection with encrypted close-notify alert then `errno` is not explicitly set on the socket by LwIP stack. For this scenario, we must rely only on `ERR_TCP_TRANSPORT_CONNECTION_CLOSED_BY_FIN` return value as the connection close case and do the graceful connection closure. Closes https://github.com/espressif/esp-idf/issues/14724 --- components/esp_http_client/esp_http_client.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/components/esp_http_client/esp_http_client.c b/components/esp_http_client/esp_http_client.c index 1e642d63dacc..c7d2c28ffaf8 100644 --- a/components/esp_http_client/esp_http_client.c +++ b/components/esp_http_client/esp_http_client.c @@ -1247,15 +1247,15 @@ int esp_http_client_read(esp_http_client_handle_t client, char *buffer, int len) ESP_LOGD(TAG, "need_read=%d, byte_to_read=%d, rlen=%d, ridx=%d", need_read, byte_to_read, rlen, ridx); if (rlen <= 0) { + esp_log_level_t sev = ESP_LOG_WARN; + /* Check for cleanly closed connection */ + if (rlen == ERR_TCP_TRANSPORT_CONNECTION_CLOSED_BY_FIN && client->response->is_chunked) { + /* Explicit call to parser for invoking `message_complete` callback */ + http_parser_execute(client->parser, client->parser_settings, res_buffer->data, 0); + /* ...and lowering the message severity, as closed connection from server side is expected in chunked transport */ + sev = ESP_LOG_DEBUG; + } if (errno != 0) { - esp_log_level_t sev = ESP_LOG_WARN; - /* Check for cleanly closed connection */ - if (rlen == ERR_TCP_TRANSPORT_CONNECTION_CLOSED_BY_FIN && client->response->is_chunked) { - /* Explicit call to parser for invoking `message_complete` callback */ - http_parser_execute(client->parser, client->parser_settings, res_buffer->data, 0); - /* ...and lowering the message severity, as closed connection from server side is expected in chunked transport */ - sev = ESP_LOG_DEBUG; - } ESP_LOG_LEVEL(sev, TAG, "esp_transport_read returned:%d and errno:%d ", rlen, errno); } From d66442b74a9daddcc6c32b87dce4704f49288ca1 Mon Sep 17 00:00:00 2001 From: "nilesh.kale" Date: Tue, 15 Oct 2024 17:25:03 +0530 Subject: [PATCH 189/365] fix(esp_http_server): updated condition to verify http version Closes https://github.com/espressif/esp-idf/issues/14723 --- components/esp_http_server/src/httpd_parse.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/components/esp_http_server/src/httpd_parse.c b/components/esp_http_server/src/httpd_parse.c index 3d76380a8b47..2fbc37f3eb82 100644 --- a/components/esp_http_server/src/httpd_parse.c +++ b/components/esp_http_server/src/httpd_parse.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2018-2021 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2018-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -86,7 +86,7 @@ static esp_err_t verify_url (http_parser *parser) ESP_LOGD(TAG, LOG_FMT("received URI = %s"), r->uri); /* Make sure version is HTTP/1.1 */ - if ((parser->http_major != 1) && (parser->http_minor != 1)) { + if (!((parser->http_major == 1) && (parser->http_minor == 1))) { ESP_LOGW(TAG, LOG_FMT("unsupported HTTP version = %d.%d"), parser->http_major, parser->http_minor); parser_data->error = HTTPD_505_VERSION_NOT_SUPPORTED; @@ -106,7 +106,7 @@ static esp_err_t verify_url (http_parser *parser) } /* http_parser callback on finding url in HTTP request - * Will be invoked ATLEAST once every packet + * Will be invoked AT LEAST once every packet */ static esp_err_t cb_url(http_parser *parser, const char *at, size_t length) @@ -191,7 +191,7 @@ static size_t continue_parsing(http_parser *parser, size_t length) } /* http_parser callback on header field in HTTP request - * May be invoked ATLEAST once every header field + * May be invoked AT LEAST once every header field */ static esp_err_t cb_header_field(http_parser *parser, const char *at, size_t length) { @@ -250,7 +250,7 @@ static esp_err_t cb_header_field(http_parser *parser, const char *at, size_t len } /* http_parser callback on header value in HTTP request. - * May be invoked ATLEAST once every header value + * May be invoked AT LEAST once every header value */ static esp_err_t cb_header_value(http_parser *parser, const char *at, size_t length) { From b4c501374f9e88adc20c4dda8d9281fc51d95b5d Mon Sep 17 00:00:00 2001 From: Marius Vikhammer Date: Mon, 1 Jul 2024 16:56:44 +0800 Subject: [PATCH 190/365] feat(lp_core): added support for LP-IO as LP-core wakeup source --- .../hal/esp32c6/include/hal/rtc_io_ll.h | 8 ++ components/ulp/lp_core/lp_core.c | 2 +- examples/system/.build-test-rules.yml | 6 ++ .../ulp/lp_core/gpio_wakeup/CMakeLists.txt | 6 ++ .../system/ulp/lp_core/gpio_wakeup/README.md | 26 ++++++ .../lp_core/gpio_wakeup/main/CMakeLists.txt | 27 ++++++ .../main/lp_core_gpio_wake_up_example_main.c | 86 +++++++++++++++++++ .../ulp/lp_core/gpio_wakeup/main/ulp/main.c | 23 +++++ .../lp_core/gpio_wakeup/sdkconfig.defaults | 9 ++ 9 files changed, 192 insertions(+), 1 deletion(-) create mode 100644 examples/system/ulp/lp_core/gpio_wakeup/CMakeLists.txt create mode 100644 examples/system/ulp/lp_core/gpio_wakeup/README.md create mode 100644 examples/system/ulp/lp_core/gpio_wakeup/main/CMakeLists.txt create mode 100644 examples/system/ulp/lp_core/gpio_wakeup/main/lp_core_gpio_wake_up_example_main.c create mode 100644 examples/system/ulp/lp_core/gpio_wakeup/main/ulp/main.c create mode 100644 examples/system/ulp/lp_core/gpio_wakeup/sdkconfig.defaults diff --git a/components/hal/esp32c6/include/hal/rtc_io_ll.h b/components/hal/esp32c6/include/hal/rtc_io_ll.h index 0cd64df36d5d..6fcac4cd406f 100644 --- a/components/hal/esp32c6/include/hal/rtc_io_ll.h +++ b/components/hal/esp32c6/include/hal/rtc_io_ll.h @@ -309,6 +309,14 @@ static inline void rtcio_ll_wakeup_enable(int rtcio_num, rtcio_ll_wake_type_t ty { LP_IO.pin[rtcio_num].wakeup_enable = 1; LP_IO.pin[rtcio_num].int_type = type; + + /* Work around for HW issue, + need to also enable this clk, otherwise it will + not trigger a wake-up on the ULP. This is not needed + for triggering a wakeup on HP CPU, but always setting this + has no side-effects. + */ + LP_IO.date.clk_en = 1; } /** diff --git a/components/ulp/lp_core/lp_core.c b/components/ulp/lp_core/lp_core.c index aedcf0e78e25..50e019ad26a3 100644 --- a/components/ulp/lp_core/lp_core.c +++ b/components/ulp/lp_core/lp_core.c @@ -130,7 +130,7 @@ esp_err_t ulp_lp_core_run(ulp_lp_core_cfg_t* cfg) } #endif - if (cfg->wakeup_source & (ULP_LP_CORE_WAKEUP_SOURCE_LP_UART | ULP_LP_CORE_WAKEUP_SOURCE_LP_IO)) { + if (cfg->wakeup_source & (ULP_LP_CORE_WAKEUP_SOURCE_LP_UART)) { ESP_LOGE(TAG, "Wake-up source not yet supported"); return ESP_ERR_INVALID_ARG; } diff --git a/examples/system/.build-test-rules.yml b/examples/system/.build-test-rules.yml index ddb33070ef08..c4a9e2b3d583 100644 --- a/examples/system/.build-test-rules.yml +++ b/examples/system/.build-test-rules.yml @@ -299,6 +299,12 @@ examples/system/ulp/lp_core/gpio_intr_pulse_counter: depends_components: - ulp +examples/system/ulp/lp_core/gpio_wakeup: + enable: + - if: (SOC_LP_CORE_SUPPORTED == 1) and (SOC_RTCIO_PIN_COUNT > 0) + depends_components: + - ulp + examples/system/ulp/lp_core/inter_cpu_critical_section/: enable: - if: SOC_LP_CORE_SUPPORTED == 1 diff --git a/examples/system/ulp/lp_core/gpio_wakeup/CMakeLists.txt b/examples/system/ulp/lp_core/gpio_wakeup/CMakeLists.txt new file mode 100644 index 000000000000..8c1a422f3f46 --- /dev/null +++ b/examples/system/ulp/lp_core/gpio_wakeup/CMakeLists.txt @@ -0,0 +1,6 @@ +# The following lines of boilerplate have to be in your project's CMakeLists +# in this exact order for cmake to work correctly +cmake_minimum_required(VERSION 3.16) + +include($ENV{IDF_PATH}/tools/cmake/project.cmake) +project(ulp_lp_core_gpio_wakeup_example) diff --git a/examples/system/ulp/lp_core/gpio_wakeup/README.md b/examples/system/ulp/lp_core/gpio_wakeup/README.md new file mode 100644 index 000000000000..66925750726f --- /dev/null +++ b/examples/system/ulp/lp_core/gpio_wakeup/README.md @@ -0,0 +1,26 @@ +| Supported Targets | ESP32-C5 | ESP32-C6 | ESP32-P4 | +| ----------------- | -------- | -------- | -------- | +# ULP-LP-Core simple example with GPIO Interrupt: + +This example demonstrates how to program the LP-Core coprocessor to wake up from a RTC IO interrupt, instead of waking periodically from the ULP timer. + +ULP program written in C can be found across `ulp/main.c`. The build system compiles and links this program, converts it into binary format, and embeds it into the .rodata section of the ESP-IDF application. + +At runtime, the main code running on the ESP (found in lp_core_gpio_wake_up_example_main.c) loads ULP program into the `RTC_SLOW_MEM` memory region using `ulp_lp_core_load_binary` function. The main code then configures the ULP GPIO wakeup source and starts the coprocessor by using `ulp_lp_core_run` followed by putting the chip into deep sleep mode. + +When the wakeup source pin is pulled low the LP-Core coprocessor is woken up, sends a wakeup signal to the main CPU and goes back to sleep again. + +In this example the input signal is connected to GPIO2. To change the pin number, check the Chip Pin List document and adjust `WAKEUP_PIN` variable in main.c. + + +## Example output + +``` +Not a LP-Core wakeup, initializing it! +Entering deep sleep + +... + +LP-Core woke up the main CPU! +Entering deep sleep +``` diff --git a/examples/system/ulp/lp_core/gpio_wakeup/main/CMakeLists.txt b/examples/system/ulp/lp_core/gpio_wakeup/main/CMakeLists.txt new file mode 100644 index 000000000000..9970ae3effb9 --- /dev/null +++ b/examples/system/ulp/lp_core/gpio_wakeup/main/CMakeLists.txt @@ -0,0 +1,27 @@ +# Set usual component variables +set(COMPONENT_SRCS "lp_core_gpio_wake_up_example_main.c") +set(COMPONENT_ADD_INCLUDEDIRS "") +set(COMPONENT_REQUIRES ulp driver) + +register_component() + +# +# ULP support additions to component CMakeLists.txt. +# +# 1. The ULP app name must be unique (if multiple components use ULP). +set(ulp_app_name ulp_${COMPONENT_NAME}) +# +# 2. Specify all C and Assembly source files. +# Files should be placed into a separate directory (in this case, ulp/), +# which should not be added to COMPONENT_SRCS. +set(ulp_riscv_sources "ulp/main.c") + +# +# 3. List all the component source files which include automatically +# generated ULP export file, ${ulp_app_name}.h: +set(ulp_exp_dep_srcs "lp_core_gpio_wake_up_example_main.c") + +# +# 4. Call function to build ULP binary and embed in project using the argument +# values above. +ulp_embed_binary(${ulp_app_name} "${ulp_riscv_sources}" "${ulp_exp_dep_srcs}") diff --git a/examples/system/ulp/lp_core/gpio_wakeup/main/lp_core_gpio_wake_up_example_main.c b/examples/system/ulp/lp_core/gpio_wakeup/main/lp_core_gpio_wake_up_example_main.c new file mode 100644 index 000000000000..7de67d59c366 --- /dev/null +++ b/examples/system/ulp/lp_core/gpio_wakeup/main/lp_core_gpio_wake_up_example_main.c @@ -0,0 +1,86 @@ +/* + * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Unlicense OR CC0-1.0 + */ +/* ULP LP-Core GPIO wake-up example + + This example code is in the Public Domain (or CC0 licensed, at your option.) + + Unless required by applicable law or agreed to in writing, this + software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR + CONDITIONS OF ANY KIND, either express or implied. +*/ + +#include +#include "esp_sleep.h" +#include "driver/rtc_io.h" +#include "ulp_lp_core.h" +#include "ulp_main.h" +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" + +#define WAKEUP_PIN 2 + +extern const uint8_t ulp_main_bin_start[] asm("_binary_ulp_main_bin_start"); +extern const uint8_t ulp_main_bin_end[] asm("_binary_ulp_main_bin_end"); + +static void init_ulp_program(void); + +static void wakeup_gpio_init(void) +{ + /* Configure the button GPIO as input, enable wakeup */ + rtc_gpio_init(WAKEUP_PIN); + rtc_gpio_set_direction(WAKEUP_PIN, RTC_GPIO_MODE_INPUT_ONLY); + rtc_gpio_pulldown_dis(WAKEUP_PIN); + rtc_gpio_pullup_en(WAKEUP_PIN); + rtc_gpio_wakeup_enable(WAKEUP_PIN, GPIO_INTR_LOW_LEVEL); +} + +void app_main(void) +{ + /* If user is using USB-serial-jtag then idf monitor needs some time to + * re-connect to the USB port. We wait 1 sec here to allow for it to make the reconnection + * before we print anything. Otherwise the chip will go back to sleep again before the user + * has time to monitor any output. + */ + vTaskDelay(pdMS_TO_TICKS(1000)); + + wakeup_gpio_init(); + + esp_sleep_wakeup_cause_t cause = esp_sleep_get_wakeup_cause(); + /* not a wakeup from ULP, load the firmware */ + if (cause != ESP_SLEEP_WAKEUP_ULP) { + printf("Not a ULP wakeup, initializing it! \n"); + init_ulp_program(); + } + + /* ULP read and detected a change in WAKEUP_PIN, prints */ + if (cause == ESP_SLEEP_WAKEUP_ULP) { + printf("ULP woke up the main CPU! \n"); + } + + /* Go back to sleep, only the ULP will run */ + printf("Entering deep sleep\n\n"); + + /* Small delay to ensure the messages are printed */ + vTaskDelay(100 / portTICK_PERIOD_MS); + + ESP_ERROR_CHECK( esp_sleep_enable_ulp_wakeup()); + + esp_deep_sleep_start(); +} + +static void init_ulp_program(void) +{ + esp_err_t err = ulp_lp_core_load_binary(ulp_main_bin_start, (ulp_main_bin_end - ulp_main_bin_start)); + ESP_ERROR_CHECK(err); + + /* Start the program */ + ulp_lp_core_cfg_t cfg = { + .wakeup_source = ULP_LP_CORE_WAKEUP_SOURCE_LP_IO, + }; + + err = ulp_lp_core_run(&cfg); + ESP_ERROR_CHECK(err); +} diff --git a/examples/system/ulp/lp_core/gpio_wakeup/main/ulp/main.c b/examples/system/ulp/lp_core/gpio_wakeup/main/ulp/main.c new file mode 100644 index 000000000000..0f630ddc0cc6 --- /dev/null +++ b/examples/system/ulp/lp_core/gpio_wakeup/main/ulp/main.c @@ -0,0 +1,23 @@ +/* + * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Unlicense OR CC0-1.0 + */ +#include +#include +#include "ulp_lp_core.h" +#include "ulp_lp_core_utils.h" +#include "ulp_lp_core_gpio.h" + + +int main (void) +{ + ulp_lp_core_wakeup_main_processor(); + + /* Wakeup interrupt is a level interrupt, wait 1 sec to + allow user to release button to avoid waking up the ULP multiple times */ + ulp_lp_core_delay_us(1000*1000); + ulp_lp_core_gpio_clear_intr_status(); + + return 0; +} diff --git a/examples/system/ulp/lp_core/gpio_wakeup/sdkconfig.defaults b/examples/system/ulp/lp_core/gpio_wakeup/sdkconfig.defaults new file mode 100644 index 000000000000..456833bc8c36 --- /dev/null +++ b/examples/system/ulp/lp_core/gpio_wakeup/sdkconfig.defaults @@ -0,0 +1,9 @@ +# Enable ULP +CONFIG_ULP_COPROC_ENABLED=y +CONFIG_ULP_COPROC_TYPE_LP_CORE=y +CONFIG_ULP_COPROC_RESERVE_MEM=8128 +# Set log level to Warning to produce clean output +CONFIG_BOOTLOADER_LOG_LEVEL_WARN=y +CONFIG_BOOTLOADER_LOG_LEVEL=2 +CONFIG_LOG_DEFAULT_LEVEL_WARN=y +CONFIG_LOG_DEFAULT_LEVEL=2 From 3b8bd7b60838f921c944f146b70a8827ea55ab41 Mon Sep 17 00:00:00 2001 From: liuning Date: Mon, 23 Sep 2024 20:18:43 +0800 Subject: [PATCH 191/365] fix(coex): fix some coexist debug issues --- .../include/private/esp_coexist_debug.h | 11 ++++- components/esp_coex/src/coexist_debug.c | 49 ++++++++++--------- 2 files changed, 34 insertions(+), 26 deletions(-) diff --git a/components/esp_coex/include/private/esp_coexist_debug.h b/components/esp_coex/include/private/esp_coexist_debug.h index 26147262c753..80bfbbd5aa6f 100644 --- a/components/esp_coex/include/private/esp_coexist_debug.h +++ b/components/esp_coex/include/private/esp_coexist_debug.h @@ -108,7 +108,7 @@ typedef enum { #endif /* wifi callback -> debug */ -void wifi_set_gpio_debug_cb(void (* cb)(int, int)); +void wifi_set_gpio_debug_cb(void (* cb)(int, coex_gpio_debug_sig_t)); int wifi_gpio_debug_max_event_get(void); /* functions to check if in ROM */ @@ -128,9 +128,10 @@ void pm_check_state(void); void pm_tx_null_data_done_process(void); void pm_start(void); void pm_stop(void); +void pm_disconnected_wake(void); /* coex callback -> debug */ -void coex_set_gpio_debug_cb(void (*cb)(int, int)); +void coex_set_gpio_debug_cb(void (*cb)(int, coex_gpio_debug_sig_t)); int coex_gpio_debug_max_event_get(void); esp_err_t coex_gpio_debug_matrix_init(void); @@ -142,4 +143,10 @@ void wifi_bind_io_to_evt(uint8_t io_idx, uint8_t evt); void coex_bind_io_to_evt(uint8_t io_idx, uint8_t evt); void diagram_bind_io_to_evt(void); +/* coex -> debug + * configure single gpio debug event */ +esp_err_t coex_gpio_debug_matrix_config(int event); +/* debug -> internal use */ +esp_err_t esp_coexist_gpio_debug_matrix_config(int event); + #endif diff --git a/components/esp_coex/src/coexist_debug.c b/components/esp_coex/src/coexist_debug.c index 317f7c4547ec..8ef1eb6de168 100644 --- a/components/esp_coex/src/coexist_debug.c +++ b/components/esp_coex/src/coexist_debug.c @@ -13,37 +13,20 @@ #include "esp_attr.h" #include "esp_log.h" -#if CONFIG_IDF_TARGET_ESP32 -#include "esp32/rom/gpio.h" -#include "esp32/rom/ets_sys.h" -#elif defined(CONFIG_IDF_TARGET_ESP32S2) -#include "esp32s2/rom/gpio.h" -#include "esp32s2/rom/ets_sys.h" -#elif defined(CONFIG_IDF_TARGET_ESP32C3) -#include "esp32c3/rom/gpio.h" -#include "esp32c3/rom/ets_sys.h" -#elif defined(CONFIG_IDF_TARGET_ESP32C2) -#include "esp32c2/rom/gpio.h" -#include "esp32c2/rom/ets_sys.h" -#elif defined(CONFIG_IDF_TARGET_ESP32C6) -#include "esp32c6/rom/gpio.h" -#include "esp32c6/rom/ets_sys.h" -#elif defined(CONFIG_IDF_TARGET_ESP32C5) -#include "esp32c5/rom/gpio.h" -#include "esp32c5/rom/ets_sys.h" -#elif defined(CONFIG_IDF_TARGET_ESP32C61) -#include "esp32c61/rom/gpio.h" -#include "esp32c61/rom/ets_sys.h" -#endif +#include "rom/gpio.h" +#include "rom/ets_sys.h" #include "driver/gpio.h" #include "soc/gpio_sig_map.h" #include "esp_rom_gpio.h" #include "soc/soc.h" +#if SOC_MODEM_CLOCK_IS_INDEPENDENT +#include "esp_private/esp_modem_clock.h" +#endif #if CONFIG_ESP_COEX_GPIO_DEBUG static char* TAG = "coexist debug"; -__attribute__((weak)) void wifi_set_gpio_debug_cb(void (* cb)(int, int)) +__attribute__((weak)) void wifi_set_gpio_debug_cb(void (* cb)(int, coex_gpio_debug_sig_t)) { ESP_LOGW(TAG, "Not support: %s", __FUNCTION__); } @@ -53,7 +36,7 @@ __attribute__((weak)) int wifi_gpio_debug_max_event_get(void) return 0; } -__attribute__((weak)) void coex_set_gpio_debug_cb(void (*cb)(int, int)) +__attribute__((weak)) void coex_set_gpio_debug_cb(void (*cb)(int, coex_gpio_debug_sig_t)) { ESP_LOGW(TAG, "Not support: %s", __FUNCTION__); } @@ -207,6 +190,18 @@ esp_err_t esp_coexist_debug_matrix_init(int evt, int sig, bool rev) return ESP_OK; } +esp_err_t esp_coexist_gpio_debug_matrix_config(int event) +{ +#if SOC_MODEM_CLOCK_IS_INDEPENDENT + modem_clock_module_enable(PERIPH_COEX_MODULE); +#endif + esp_err_t ret = coex_gpio_debug_matrix_config(event); +#if SOC_MODEM_CLOCK_IS_INDEPENDENT + modem_clock_module_disable(PERIPH_COEX_MODULE); +#endif + return ret; +} + esp_err_t esp_coexist_debug_init(void) { if (check_funcs_in_rom()) { @@ -270,8 +265,14 @@ esp_err_t esp_coexist_debug_init(void) gpio_set_level(s_io_nums[i], false); } +#if SOC_MODEM_CLOCK_IS_INDEPENDENT + modem_clock_module_enable(PERIPH_COEX_MODULE); +#endif /* Init coexist hardware signal */ ESP_ERROR_CHECK(coex_gpio_debug_matrix_init()); +#if SOC_MODEM_CLOCK_IS_INDEPENDENT + modem_clock_module_disable(PERIPH_COEX_MODULE); +#endif return ESP_OK; } From 18f959623c558c799edb840b9c1a6d9dcd1a64e4 Mon Sep 17 00:00:00 2001 From: liuning Date: Fri, 11 Oct 2024 15:53:55 +0800 Subject: [PATCH 192/365] fix(coex): fix esp32c5 coexist hw timer issue --- components/esp_coex/esp32c2/esp_coex_adapter.c | 6 ++++++ components/esp_coex/esp32c5/esp_coex_adapter.c | 6 ++++++ components/esp_coex/esp32c6/esp_coex_adapter.c | 6 ++++++ components/esp_coex/esp32c61/esp_coex_adapter.c | 8 +++++++- components/esp_coex/esp32h2/esp_coex_adapter.c | 6 ++++++ components/esp_coex/include/private/esp_coexist_adapter.h | 1 + 6 files changed, 32 insertions(+), 1 deletion(-) diff --git a/components/esp_coex/esp32c2/esp_coex_adapter.c b/components/esp_coex/esp32c2/esp_coex_adapter.c index 4954fb9f8506..b98c9c94742d 100644 --- a/components/esp_coex/esp32c2/esp_coex_adapter.c +++ b/components/esp_coex/esp32c2/esp_coex_adapter.c @@ -152,6 +152,11 @@ static int esp_coexist_debug_matrix_init_wrapper(int evt, int sig, bool rev) #endif } +static IRAM_ATTR int esp_coex_common_xtal_freq_get_wrapper(void) +{ + return rtc_clk_xtal_freq_get(); +} + coex_adapter_funcs_t g_coex_adapter_funcs = { ._version = COEX_ADAPTER_VERSION, ._task_yield_from_isr = esp_coex_common_task_yield_from_isr_wrapper, @@ -172,5 +177,6 @@ coex_adapter_funcs_t g_coex_adapter_funcs = { ._timer_setfn = esp_coex_common_timer_setfn_wrapper, ._timer_arm_us = esp_coex_common_timer_arm_us_wrapper, ._debug_matrix_init = esp_coexist_debug_matrix_init_wrapper, + ._xtal_freq_get = esp_coex_common_xtal_freq_get_wrapper, ._magic = COEX_ADAPTER_MAGIC, }; diff --git a/components/esp_coex/esp32c5/esp_coex_adapter.c b/components/esp_coex/esp32c5/esp_coex_adapter.c index b5e761ffbd9f..8588b7348d10 100644 --- a/components/esp_coex/esp32c5/esp_coex_adapter.c +++ b/components/esp_coex/esp32c5/esp_coex_adapter.c @@ -151,6 +151,11 @@ static int esp_coexist_debug_matrix_init_wrapper(int evt, int sig, bool rev) #endif } +static IRAM_ATTR int esp_coex_common_xtal_freq_get_wrapper(void) +{ + return rtc_clk_xtal_freq_get(); +} + coex_adapter_funcs_t g_coex_adapter_funcs = { ._version = COEX_ADAPTER_VERSION, ._task_yield_from_isr = esp_coex_common_task_yield_from_isr_wrapper, @@ -170,5 +175,6 @@ coex_adapter_funcs_t g_coex_adapter_funcs = { ._timer_setfn = esp_coex_common_timer_setfn_wrapper, ._timer_arm_us = esp_coex_common_timer_arm_us_wrapper, ._debug_matrix_init = esp_coexist_debug_matrix_init_wrapper, + ._xtal_freq_get = esp_coex_common_xtal_freq_get_wrapper, ._magic = COEX_ADAPTER_MAGIC, }; diff --git a/components/esp_coex/esp32c6/esp_coex_adapter.c b/components/esp_coex/esp32c6/esp_coex_adapter.c index 81b4eef2b1e7..4b920ce15951 100644 --- a/components/esp_coex/esp32c6/esp_coex_adapter.c +++ b/components/esp_coex/esp32c6/esp_coex_adapter.c @@ -152,6 +152,11 @@ static int esp_coexist_debug_matrix_init_wrapper(int evt, int sig, bool rev) #endif } +static IRAM_ATTR int esp_coex_common_xtal_freq_get_wrapper(void) +{ + return rtc_clk_xtal_freq_get(); +} + coex_adapter_funcs_t g_coex_adapter_funcs = { ._version = COEX_ADAPTER_VERSION, ._task_yield_from_isr = esp_coex_common_task_yield_from_isr_wrapper, @@ -171,5 +176,6 @@ coex_adapter_funcs_t g_coex_adapter_funcs = { ._timer_setfn = esp_coex_common_timer_setfn_wrapper, ._timer_arm_us = esp_coex_common_timer_arm_us_wrapper, ._debug_matrix_init = esp_coexist_debug_matrix_init_wrapper, + ._xtal_freq_get = esp_coex_common_xtal_freq_get_wrapper, ._magic = COEX_ADAPTER_MAGIC, }; diff --git a/components/esp_coex/esp32c61/esp_coex_adapter.c b/components/esp_coex/esp32c61/esp_coex_adapter.c index 547e1dbd3630..059160f7bab4 100644 --- a/components/esp_coex/esp32c61/esp_coex_adapter.c +++ b/components/esp_coex/esp32c61/esp_coex_adapter.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -152,6 +152,11 @@ static int esp_coexist_debug_matrix_init_wrapper(int evt, int sig, bool rev) #endif } +static IRAM_ATTR int esp_coex_common_xtal_freq_get_wrapper(void) +{ + return rtc_clk_xtal_freq_get(); +} + coex_adapter_funcs_t g_coex_adapter_funcs = { ._version = COEX_ADAPTER_VERSION, ._task_yield_from_isr = esp_coex_common_task_yield_from_isr_wrapper, @@ -171,5 +176,6 @@ coex_adapter_funcs_t g_coex_adapter_funcs = { ._timer_setfn = esp_coex_common_timer_setfn_wrapper, ._timer_arm_us = esp_coex_common_timer_arm_us_wrapper, ._debug_matrix_init = esp_coexist_debug_matrix_init_wrapper, + ._xtal_freq_get = esp_coex_common_xtal_freq_get_wrapper, ._magic = COEX_ADAPTER_MAGIC, }; diff --git a/components/esp_coex/esp32h2/esp_coex_adapter.c b/components/esp_coex/esp32h2/esp_coex_adapter.c index f00cade6f6bd..1fa2243ae9ab 100644 --- a/components/esp_coex/esp32h2/esp_coex_adapter.c +++ b/components/esp_coex/esp32h2/esp_coex_adapter.c @@ -144,6 +144,11 @@ static int esp_coexist_debug_matrix_init_wrapper(int evt, int sig, bool rev) #endif } +static IRAM_ATTR int esp_coex_common_xtal_freq_get_wrapper(void) +{ + return rtc_clk_xtal_freq_get(); +} + coex_adapter_funcs_t g_coex_adapter_funcs = { ._version = COEX_ADAPTER_VERSION, ._task_yield_from_isr = esp_coex_common_task_yield_from_isr_wrapper, @@ -163,5 +168,6 @@ coex_adapter_funcs_t g_coex_adapter_funcs = { ._timer_setfn = esp_coex_common_timer_setfn_wrapper, ._timer_arm_us = esp_coex_common_timer_arm_us_wrapper, ._debug_matrix_init = esp_coexist_debug_matrix_init_wrapper, + ._xtal_freq_get = esp_coex_common_xtal_freq_get_wrapper, ._magic = COEX_ADAPTER_MAGIC, }; diff --git a/components/esp_coex/include/private/esp_coexist_adapter.h b/components/esp_coex/include/private/esp_coexist_adapter.h index aca50a6161a2..15e8ef7114fe 100644 --- a/components/esp_coex/include/private/esp_coexist_adapter.h +++ b/components/esp_coex/include/private/esp_coexist_adapter.h @@ -47,6 +47,7 @@ typedef struct { void (* _timer_setfn)(void *ptimer, void *pfunction, void *parg); void (* _timer_arm_us)(void *ptimer, uint32_t us, bool repeat); int (* _debug_matrix_init)(int event, int signal, bool rev); + int (* _xtal_freq_get)(void); int32_t _magic; } coex_adapter_funcs_t; From 05173abc43e844aad1169e7ea40fd582cb0b4d79 Mon Sep 17 00:00:00 2001 From: liuning Date: Fri, 11 Oct 2024 15:55:28 +0800 Subject: [PATCH 193/365] fix(coex): sync up coex head file --- components/esp_coex/test_md5/test_md5.sh | 54 +++++++++++++++++++----- 1 file changed, 44 insertions(+), 10 deletions(-) diff --git a/components/esp_coex/test_md5/test_md5.sh b/components/esp_coex/test_md5/test_md5.sh index 24f80b76e3bb..429796bdfa75 100755 --- a/components/esp_coex/test_md5/test_md5.sh +++ b/components/esp_coex/test_md5/test_md5.sh @@ -32,40 +32,74 @@ case $IDF_TARGET in esac LIB_DIR=${IDF_TARGET} -ELF_FILE=test.elf +COEX_ELF_FILE=coex.elf +TEST_ELF_FILE=test.elf FAILURES=0 function check_md5() +{ + if [ "$1" != "$2" ]; then + echo " error: MD5 mismatch!" + FAILURES=$(($FAILURES+1)) + fi +} + +function check_md5_file_lib() { FILENAME=$1 SYMBOL=$2 - ${PREFIX}ld --unresolved-symbols=ignore-all --entry 0 -o ${ELF_FILE} \ + ${PREFIX}ld --unresolved-symbols=ignore-all --entry 0 -o ${COEX_ELF_FILE} \ -u ${SYMBOL} \ ${IDF_PATH}/components/esp_coex/lib/${LIB_DIR}/*.a GDB_COMMAND="printf \"%s\\n\", (const char*) ${SYMBOL}" - MD5_FROM_LIB=$(${PREFIX}gdb -n -batch ${ELF_FILE} -ex "${GDB_COMMAND}") + MD5_FROM_LIB=$(${PREFIX}gdb -n -batch ${COEX_ELF_FILE} -ex "${GDB_COMMAND}") MD5_FROM_HEADER=$(md5sum ${FILENAME} | cut -c 1-7) - echo "Checking ${FILENAME}:" echo " ${MD5_FROM_HEADER} - from header file" echo " ${MD5_FROM_LIB} - from library" - if [ "${MD5_FROM_LIB}" != "${MD5_FROM_HEADER}" ]; then - echo " error: MD5 mismatch!" - FAILURES=$(($FAILURES+1)) - fi + check_md5 ${MD5_FROM_HEADER} ${MD5_FROM_LIB} +} + +function check_md5_libs() +{ + COEX_SYMBOL=$1 + TEST_SYMBOL=$2 + TEST_PATH=$3 + + ${PREFIX}ld --unresolved-symbols=ignore-all --entry 0 -o ${COEX_ELF_FILE} \ + -u ${COEX_SYMBOL} \ + ${IDF_PATH}/components/esp_coex/lib/${LIB_DIR}/*.a + + ${PREFIX}ld --unresolved-symbols=ignore-all --entry 0 -o ${TEST_ELF_FILE} \ + -u ${TEST_SYMBOL} \ + ${TEST_PATH}/*.a + + COEX_GDB_COMMAND="printf \"%s\\n\", (const char*) ${COEX_SYMBOL}" + TEST_GDB_COMMAND="printf \"%s\\n\", (const char*) ${TEST_SYMBOL}" + COEX_MD5_FROM_LIB=$(${PREFIX}gdb -n -batch ${COEX_ELF_FILE} -ex "${COEX_GDB_COMMAND}") + TEST_MD5_FROM_LIB=$(${PREFIX}gdb -n -batch ${TEST_ELF_FILE} -ex "${TEST_GDB_COMMAND}") + + echo "Checking ${TEST_PATH}/${TEST_SYMBOL} " + echo " ${COEX_MD5_FROM_LIB} - from coexist library" + echo " ${TEST_MD5_FROM_LIB} - from test library" + check_md5 ${COEX_MD5_FROM_LIB} ${TEST_MD5_FROM_LIB} } echo "Checking libraries for target ${IDF_TARGET}..." -check_md5 ${IDF_PATH}/components/esp_coex/include/private/esp_coexist_adapter.h g_coex_adapter_funcs_md5 +check_md5_file_lib ${IDF_PATH}/components/esp_coex/include/private/esp_coexist_adapter.h g_coex_adapter_funcs_md5 case $IDF_TARGET in esp32c6|esp32h2|esp32c5) - check_md5 ${IDF_PATH}/components/esp_coex/include/esp_coex_i154.h g_coex_i154_funcs_md5 + check_md5_file_lib ${IDF_PATH}/components/esp_coex/include/esp_coex_i154.h g_coex_i154_funcs_md5 ;; esac +if [[ ! "$IDF_TARGET" =~ ^(esp32h2)$ ]]; then + check_md5_libs g_coex_basic_md5 g_wifi_coex_basic_md5 ${IDF_PATH}/components/esp_wifi/lib/${LIB_DIR} +fi + if [ $FAILURES -gt 0 ]; then exit 1 fi From 99dbcf536c0a6f5afedbe8353acb5ca53b45356e Mon Sep 17 00:00:00 2001 From: liuning Date: Fri, 11 Oct 2024 17:57:14 +0800 Subject: [PATCH 194/365] fix(coex): fix esp32c2/esp32c5/esp32c61 coexist memory leakage issue --- components/esp_coex/lib | 2 +- components/esp_rom/esp32c2/ld/esp32c2.rom.ld | 2 +- components/esp_rom/esp32c5/ld/esp32c5.rom.pp.ld | 2 +- components/esp_rom/esp32c61/ld/esp32c61.rom.pp.ld | 2 +- components/esp_wifi/lib | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/components/esp_coex/lib b/components/esp_coex/lib index e15e7a161fc1..9baa4202b6bd 160000 --- a/components/esp_coex/lib +++ b/components/esp_coex/lib @@ -1 +1 @@ -Subproject commit e15e7a161fc1a48e8fb4fd0b3da74623c30ba1cb +Subproject commit 9baa4202b6bddac85aa5f318c171a1b413e2caea diff --git a/components/esp_rom/esp32c2/ld/esp32c2.rom.ld b/components/esp_rom/esp32c2/ld/esp32c2.rom.ld index dd40a0253b9f..2abe48222a5f 100644 --- a/components/esp_rom/esp32c2/ld/esp32c2.rom.ld +++ b/components/esp_rom/esp32c2/ld/esp32c2.rom.ld @@ -1623,7 +1623,7 @@ dbg_lmac_rxtx_statis_dump = 0x40001e90; dbg_lmac_hw_statis_dump = 0x40001e94; dbg_lmac_diag_statis_dump = 0x40001e98; dbg_lmac_ps_statis_dump = 0x40001e9c; -pp_timer_do_process = 0x40001ea0; +/*pp_timer_do_process = 0x40001ea0;*/ rcUpdateAMPDUParam = 0x40001ea4; rcUpdatePhyMode = 0x40001ea8; rcGetHighestRateIdx = 0x40001eac; diff --git a/components/esp_rom/esp32c5/ld/esp32c5.rom.pp.ld b/components/esp_rom/esp32c5/ld/esp32c5.rom.pp.ld index 7515b90cca30..96c501f990e4 100644 --- a/components/esp_rom/esp32c5/ld/esp32c5.rom.pp.ld +++ b/components/esp_rom/esp32c5/ld/esp32c5.rom.pp.ld @@ -222,7 +222,7 @@ pp_coex_tx_release = 0x40000f08; ppAdd2AMPDUTail = 0x40000f0c; ppDirectRecycleAmpdu = 0x40000f10; ppRegressAmpdu = 0x40000f14; -pp_timer_do_process = 0x40000f18; +/*pp_timer_do_process = 0x40000f18;*/ rcGetAmpduSched = 0x40000f1c; rcUpdateRxDone = 0x40000f20; rc_get_trc = 0x40000f24; diff --git a/components/esp_rom/esp32c61/ld/esp32c61.rom.pp.ld b/components/esp_rom/esp32c61/ld/esp32c61.rom.pp.ld index cf1349b9ab2f..6931333f9d7a 100644 --- a/components/esp_rom/esp32c61/ld/esp32c61.rom.pp.ld +++ b/components/esp_rom/esp32c61/ld/esp32c61.rom.pp.ld @@ -225,7 +225,7 @@ pp_coex_tx_release = 0x40000e7c; ppAdd2AMPDUTail = 0x40000e80; ppDirectRecycleAmpdu = 0x40000e84; ppRegressAmpdu = 0x40000e88; -pp_timer_do_process = 0x40000e8c; +/*pp_timer_do_process = 0x40000e8c;*/ rcGetAmpduSched = 0x40000e90; rcUpdateRxDone = 0x40000e94; rc_get_trc = 0x40000e98; diff --git a/components/esp_wifi/lib b/components/esp_wifi/lib index a93530033aec..0da5a8a5dfd8 160000 --- a/components/esp_wifi/lib +++ b/components/esp_wifi/lib @@ -1 +1 @@ -Subproject commit a93530033aece29f1622c9ca9161eb4770aea909 +Subproject commit 0da5a8a5dfd8914496c5975af7d8903a44f8bced From 910bea1a1d08a45d5accf69f99ffcc5c421d09e5 Mon Sep 17 00:00:00 2001 From: Fu Hanxi Date: Wed, 16 Oct 2024 09:37:50 +0200 Subject: [PATCH 195/365] ci: bypass import failure while checking test scripts we mock the missing packages in pytest_collectstart in plugin.py. but here the common_test_methods are imported by other scripts, which got executed earlier. --- tools/ci/python_packages/common_test_methods.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/tools/ci/python_packages/common_test_methods.py b/tools/ci/python_packages/common_test_methods.py index 80392fbc27ec..fe5db2a9e73d 100644 --- a/tools/ci/python_packages/common_test_methods.py +++ b/tools/ci/python_packages/common_test_methods.py @@ -1,12 +1,19 @@ -# SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD +# SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD # SPDX-License-Identifier: Apache-2.0 - import logging import os import socket -from typing import Any, List +from typing import Any +from typing import List + +try: + import netifaces +except ImportError: + from unittest.mock import MagicMock + + netifaces = MagicMock() + logging.warning('netifaces is not installed. Please install it to get network interface information.') -import netifaces import yaml ENV_CONFIG_FILE_SEARCH = [ From bd26feef9b51ae4a22ee69619649b24b9bc44d43 Mon Sep 17 00:00:00 2001 From: Fu Hanxi Date: Wed, 16 Oct 2024 09:56:54 +0200 Subject: [PATCH 196/365] ci: ignore collect import error --- .gitlab/ci/build.yml | 4 ++++ .gitlab/ci/pre_check.yml | 4 +++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/.gitlab/ci/build.yml b/.gitlab/ci/build.yml index ce6ccfd2764f..6147e13503e2 100644 --- a/.gitlab/ci/build.yml +++ b/.gitlab/ci/build.yml @@ -309,7 +309,11 @@ generate_build_child_pipeline: - non_test_related_apps.txt expire_in: 1 week when: always + variables: + PYTEST_IGNORE_COLLECT_IMPORT_ERROR: "1" script: + # requires basic pytest dependencies + - run_cmd bash install.sh --enable-pytest - run_cmd python tools/ci/dynamic_pipelines/scripts/generate_build_child_pipeline.py build_child_pipeline: diff --git a/.gitlab/ci/pre_check.yml b/.gitlab/ci/pre_check.yml index 31dfb072664c..2acc5ef0bf54 100644 --- a/.gitlab/ci/pre_check.yml +++ b/.gitlab/ci/pre_check.yml @@ -117,8 +117,10 @@ check_test_scripts_build_test_rules: extends: - .pre_check_template - .before_script:build + variables: + PYTEST_IGNORE_COLLECT_IMPORT_ERROR: "1" script: - # required pytest related packages + # requires basic pytest dependencies - run_cmd bash install.sh --enable-pytest - python tools/ci/check_build_test_rules.py check-test-scripts examples/ tools/test_apps components From 1e614efa5f818aef3ccc7e7b308aa2489eba9bca Mon Sep 17 00:00:00 2001 From: Fu Hanxi Date: Wed, 16 Oct 2024 11:01:16 +0200 Subject: [PATCH 197/365] ci: add missing dependency --- tools/requirements/requirements.ci.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/requirements/requirements.ci.txt b/tools/requirements/requirements.ci.txt index fa1ac259d40c..dfec5b20fc3c 100644 --- a/tools/requirements/requirements.ci.txt +++ b/tools/requirements/requirements.ci.txt @@ -15,3 +15,4 @@ pyyaml SimpleWebSocketServer pylint-gitlab minio +prettytable From b1dee4e0d98bf135631bdbb28bad547e0e35c42f Mon Sep 17 00:00:00 2001 From: morris Date: Tue, 25 Jun 2024 15:47:50 +0800 Subject: [PATCH 198/365] change(hw_support): temporarily ignore gcc static analyzer issues found in regdma and dma2d driver --- components/esp_hw_support/CMakeLists.txt | 4 - components/esp_hw_support/port/regdma_link.c | 3 + components/esp_hw_support/sleep_modes.c | 5 +- components/hal/esp32h2/include/hal/uart_ll.h | 102 ++++++++++--------- 4 files changed, 57 insertions(+), 57 deletions(-) diff --git a/components/esp_hw_support/CMakeLists.txt b/components/esp_hw_support/CMakeLists.txt index e1b6efc00db4..52f0aa03a859 100644 --- a/components/esp_hw_support/CMakeLists.txt +++ b/components/esp_hw_support/CMakeLists.txt @@ -163,10 +163,6 @@ idf_build_get_property(target IDF_TARGET) add_subdirectory(port/${target}) add_subdirectory(lowpower) -if(CONFIG_COMPILER_STATIC_ANALYZER AND CMAKE_C_COMPILER_ID STREQUAL "GNU") # TODO IDF-10229 - target_compile_options(${COMPONENT_LIB} PRIVATE "-fno-analyzer") -endif() - if(CONFIG_ESP_SLEEP_GPIO_RESET_WORKAROUND OR CONFIG_PM_SLP_DISABLE_GPIO) target_link_libraries(${COMPONENT_LIB} INTERFACE "-u esp_sleep_gpio_include") endif() diff --git a/components/esp_hw_support/port/regdma_link.c b/components/esp_hw_support/port/regdma_link.c index a090ea0b25d4..69db06f5e08f 100644 --- a/components/esp_hw_support/port/regdma_link.c +++ b/components/esp_hw_support/port/regdma_link.c @@ -15,6 +15,7 @@ #include "esp_heap_caps.h" #include "esp_log.h" #include "esp_regdma.h" +#include "esp_compiler.h" @@ -419,6 +420,7 @@ static void * regdma_link_get_instance(void *link) return container_memaddr[it]; } +ESP_COMPILER_DIAGNOSTIC_PUSH_IGNORE("-Wanalyzer-null-dereference") // TODO IDF-11384 static regdma_link_stats_t * regdma_link_get_stats(void *link) { const static size_t stats_offset[] = { @@ -437,6 +439,7 @@ static regdma_link_stats_t * regdma_link_get_stats(void *link) return (regdma_link_stats_t *)(regdma_link_get_instance(link) + stats_offset[it]); } +ESP_COMPILER_DIAGNOSTIC_POP("-Wanalyzer-null-dereference") static void regdma_link_update_stats_wrapper(void *link, int entry, int depth) { diff --git a/components/esp_hw_support/sleep_modes.c b/components/esp_hw_support/sleep_modes.c index ed81134542d6..ff8257c124e9 100644 --- a/components/esp_hw_support/sleep_modes.c +++ b/components/esp_hw_support/sleep_modes.c @@ -12,6 +12,7 @@ #include "esp_attr.h" #include "esp_rom_caps.h" +#include "esp_macros.h" #include "esp_memory_utils.h" #include "esp_sleep.h" #include "esp_private/esp_sleep_internal.h" @@ -1215,9 +1216,7 @@ static esp_err_t IRAM_ATTR deep_sleep_start(bool allow_sleep_rejection) } else { // Because RTC is in a slower clock domain than the CPU, it // can take several CPU cycles for the sleep mode to start. - while (1) { - ; - } + ESP_INFINITE_LOOP(); } // Never returns here, except that the sleep is rejected. esp_ipc_isr_stall_resume(); diff --git a/components/hal/esp32h2/include/hal/uart_ll.h b/components/hal/esp32h2/include/hal/uart_ll.h index 4fa29d216f32..26e3e1facd1a 100644 --- a/components/hal/esp32h2/include/hal/uart_ll.h +++ b/components/hal/esp32h2/include/hal/uart_ll.h @@ -94,14 +94,14 @@ typedef enum { */ FORCE_INLINE_ATTR bool uart_ll_is_enabled(uint32_t uart_num) { - uint32_t uart_clk_config_reg = ((uart_num == 0) ? PCR_UART0_CONF_REG : - (uart_num == 1) ? PCR_UART1_CONF_REG : 0); - uint32_t uart_rst_bit = ((uart_num == 0) ? PCR_UART0_RST_EN : - (uart_num == 1) ? PCR_UART1_RST_EN : 0); - uint32_t uart_en_bit = ((uart_num == 0) ? PCR_UART0_CLK_EN : - (uart_num == 1) ? PCR_UART1_CLK_EN : 0); - return REG_GET_BIT(uart_clk_config_reg, uart_rst_bit) == 0 && - REG_GET_BIT(uart_clk_config_reg, uart_en_bit) != 0; + switch (uart_num) { + case 0: + return PCR.uart0_conf.uart0_clk_en && !PCR.uart0_conf.uart0_rst_en; + case 1: + return PCR.uart1_conf.uart1_clk_en && !PCR.uart1_conf.uart1_rst_en; + default: + return false; + } } /** @@ -194,18 +194,18 @@ FORCE_INLINE_ATTR void uart_ll_sclk_disable(uart_dev_t *hw) FORCE_INLINE_ATTR void uart_ll_set_sclk(uart_dev_t *hw, soc_module_clk_t source_clk) { switch (source_clk) { - case UART_SCLK_PLL_F48M: - UART_LL_PCR_REG_SET(hw, sclk_conf, sclk_sel, 1); - break; - case UART_SCLK_RTC: - UART_LL_PCR_REG_SET(hw, sclk_conf, sclk_sel, 2); - break; - case UART_SCLK_XTAL: - UART_LL_PCR_REG_SET(hw, sclk_conf, sclk_sel, 3); - break; - default: - // Invalid UART clock source - abort(); + case UART_SCLK_PLL_F48M: + UART_LL_PCR_REG_SET(hw, sclk_conf, sclk_sel, 1); + break; + case UART_SCLK_RTC: + UART_LL_PCR_REG_SET(hw, sclk_conf, sclk_sel, 2); + break; + case UART_SCLK_XTAL: + UART_LL_PCR_REG_SET(hw, sclk_conf, sclk_sel, 3); + break; + default: + // Invalid UART clock source + abort(); } } @@ -220,16 +220,16 @@ FORCE_INLINE_ATTR void uart_ll_set_sclk(uart_dev_t *hw, soc_module_clk_t source_ FORCE_INLINE_ATTR void uart_ll_get_sclk(uart_dev_t *hw, soc_module_clk_t *source_clk) { switch (UART_LL_PCR_REG_GET(hw, sclk_conf, sclk_sel)) { - default: - case 1: - *source_clk = (soc_module_clk_t)UART_SCLK_PLL_F48M; - break; - case 2: - *source_clk = (soc_module_clk_t)UART_SCLK_RTC; - break; - case 3: - *source_clk = (soc_module_clk_t)UART_SCLK_XTAL; - break; + default: + case 1: + *source_clk = (soc_module_clk_t)UART_SCLK_PLL_F48M; + break; + case 2: + *source_clk = (soc_module_clk_t)UART_SCLK_RTC; + break; + case 3: + *source_clk = (soc_module_clk_t)UART_SCLK_XTAL; + break; } } @@ -248,7 +248,9 @@ FORCE_INLINE_ATTR void uart_ll_set_baudrate(uart_dev_t *hw, uint32_t baud, uint3 const uint32_t max_div = BIT(12) - 1; // UART divider integer part only has 12 bits uint32_t sclk_div = DIV_UP(sclk_freq, (uint64_t)max_div * baud); - if (sclk_div == 0) abort(); + if (sclk_div == 0) { + abort(); + } uint32_t clk_div = ((sclk_freq) << 4) / (baud * sclk_div); // The baud rate configuration register is divided into @@ -844,22 +846,22 @@ FORCE_INLINE_ATTR void uart_ll_set_mode_irda(uart_dev_t *hw) FORCE_INLINE_ATTR void uart_ll_set_mode(uart_dev_t *hw, uart_mode_t mode) { switch (mode) { - default: - case UART_MODE_UART: - uart_ll_set_mode_normal(hw); - break; - case UART_MODE_RS485_COLLISION_DETECT: - uart_ll_set_mode_collision_detect(hw); - break; - case UART_MODE_RS485_APP_CTRL: - uart_ll_set_mode_rs485_app_ctrl(hw); - break; - case UART_MODE_RS485_HALF_DUPLEX: - uart_ll_set_mode_rs485_half_duplex(hw); - break; - case UART_MODE_IRDA: - uart_ll_set_mode_irda(hw); - break; + default: + case UART_MODE_UART: + uart_ll_set_mode_normal(hw); + break; + case UART_MODE_RS485_COLLISION_DETECT: + uart_ll_set_mode_collision_detect(hw); + break; + case UART_MODE_RS485_APP_CTRL: + uart_ll_set_mode_rs485_app_ctrl(hw); + break; + case UART_MODE_RS485_HALF_DUPLEX: + uart_ll_set_mode_rs485_half_duplex(hw); + break; + case UART_MODE_IRDA: + uart_ll_set_mode_irda(hw); + break; } } @@ -957,7 +959,7 @@ FORCE_INLINE_ATTR void uart_ll_xon_force_on(uart_dev_t *hw, bool always_on) { hw->swfc_conf0_sync.force_xon = 1; uart_ll_update(hw); - if(!always_on) { + if (!always_on) { hw->swfc_conf0_sync.force_xon = 0; uart_ll_update(hw); } @@ -1003,7 +1005,7 @@ FORCE_INLINE_ATTR void uart_ll_inverse_signal(uart_dev_t *hw, uint32_t inv_mask) FORCE_INLINE_ATTR void uart_ll_set_rx_tout(uart_dev_t *hw, uint16_t tout_thrd) { uint16_t tout_val = tout_thrd; - if(tout_thrd > 0) { + if (tout_thrd > 0) { hw->tout_conf_sync.rx_tout_thrhd = tout_val; hw->tout_conf_sync.rx_tout_en = 1; } else { @@ -1022,7 +1024,7 @@ FORCE_INLINE_ATTR void uart_ll_set_rx_tout(uart_dev_t *hw, uint16_t tout_thrd) FORCE_INLINE_ATTR uint16_t uart_ll_get_rx_tout_thr(uart_dev_t *hw) { uint16_t tout_thrd = 0; - if(hw->tout_conf_sync.rx_tout_en > 0) { + if (hw->tout_conf_sync.rx_tout_en > 0) { tout_thrd = hw->tout_conf_sync.rx_tout_thrhd; } return tout_thrd; From 1792aba1dcc5ae7cf8aead79663d244787a2bbc2 Mon Sep 17 00:00:00 2001 From: Armando Date: Thu, 26 Sep 2024 16:18:30 +0800 Subject: [PATCH 199/365] feat(vad): lp vad driver and wakeup feature --- components/esp_driver_i2s/CMakeLists.txt | 4 + .../include/driver/lp_i2s_vad.h | 153 ++++++++++++++++++ .../include/esp_private/lp_i2s_private.h | 27 ++++ components/esp_driver_i2s/lp_i2s.c | 13 ++ components/esp_driver_i2s/lp_i2s_vad.c | 112 +++++++++++++ .../hal/esp32p4/include/hal/lp_core_ll.h | 2 +- .../hal/esp32p4/include/hal/lp_i2s_ll.h | 106 +++++++++++- .../esp32p4/include/soc/Kconfig.soc_caps.in | 12 ++ components/soc/esp32p4/include/soc/soc_caps.h | 5 + components/ulp/CMakeLists.txt | 4 + components/ulp/cmake/IDFULPProject.cmake | 1 + components/ulp/lp_core/include/ulp_lp_core.h | 1 + components/ulp/lp_core/lp_core.c | 5 +- .../ulp/lp_core/lp_core/lp_core_utils.c | 11 ++ .../include/ulp_lp_core_lp_vad_shared.h | 121 ++++++++++++++ .../shared/ulp_lp_core_lp_vad_shared.c | 65 ++++++++ 16 files changed, 635 insertions(+), 7 deletions(-) create mode 100644 components/esp_driver_i2s/include/driver/lp_i2s_vad.h create mode 100644 components/esp_driver_i2s/include/esp_private/lp_i2s_private.h create mode 100644 components/esp_driver_i2s/lp_i2s_vad.c create mode 100644 components/ulp/lp_core/shared/include/ulp_lp_core_lp_vad_shared.h create mode 100644 components/ulp/lp_core/shared/ulp_lp_core_lp_vad_shared.c diff --git a/components/esp_driver_i2s/CMakeLists.txt b/components/esp_driver_i2s/CMakeLists.txt index cc39943ae665..2498fa6126a5 100644 --- a/components/esp_driver_i2s/CMakeLists.txt +++ b/components/esp_driver_i2s/CMakeLists.txt @@ -30,6 +30,10 @@ if(CONFIG_SOC_LP_I2S_SUPPORTED) list(APPEND srcs "lp_i2s.c" "lp_i2s_std.c" "lp_i2s_pdm.c") endif() +if(CONFIG_SOC_LP_I2S_SUPPORT_VAD) + list(APPEND srcs "lp_i2s_vad.c") +endif() + idf_component_register(SRCS ${srcs} INCLUDE_DIRS ${include} PRIV_REQUIRES esp_driver_gpio esp_pm esp_mm diff --git a/components/esp_driver_i2s/include/driver/lp_i2s_vad.h b/components/esp_driver_i2s/include/driver/lp_i2s_vad.h new file mode 100644 index 000000000000..ce52370cde69 --- /dev/null +++ b/components/esp_driver_i2s/include/driver/lp_i2s_vad.h @@ -0,0 +1,153 @@ +/* + * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#pragma once + +#include +#include +#include "soc/soc_caps.h" +#include "esp_err.h" +#include "driver/i2s_types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief State Machine + ┌──────────────────────────────────┐ + │ │ + ┌─────────────┤ speak-activity-listening-state │ ◄───────────────┐ + │ │ │ │ + │ └──────────────────────────────────┘ │ + │ ▲ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +detected speak activity │ │ detected speak activity │ detected speak activity + >= │ │ >= │ >= +'speak_activity_thresh' │ │ 'min_speak_activity_thresh' │ 'max_speak_activity_thresh' + │ │ │ + │ │ && │ + │ │ │ + │ │ detected non-speak activity │ + │ │ < │ + │ │ 'non_speak_activity_thresh' │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ ┌───────────┴─────────────────────┐ │ + │ │ │ │ + └───────────► │ speak-activity-detected-state ├─────────────────┘ + │ │ + └─┬───────────────────────────────┘ + │ + │ ▲ + │ │ + │ │ + │ │ detected speak activity + │ │ >= + │ │ 'min_speak_activity_thresh' + │ │ + │ │ && + │ │ + │ │ detected non-speak activity + │ │ < + └─────────────────────┘ 'non_speak_activity_thresh' +*/ + +/** + * @brief LP VAD peripheral + */ +typedef uint32_t lp_vad_t; + +/** + * @brief Type of VAD unit handle + */ +typedef struct vad_unit_ctx_t *vad_unit_handle_t; + +/** + * @brief LP VAD configurations + */ +typedef struct { + int init_frame_num; /**< Number of init frames that are used for VAD to denoise, this helps the VAD to decrease the accidental trigger ratio. + Note too big values may lead to voice activity miss */ + int min_energy_thresh; ///< Min energy threshold. + bool skip_band_energy_thresh; ///< Skip band energy threshold or not + + int speak_activity_thresh; /**< When in speak-activity-listening-state, if number of the detected speak activity is higher than this value, VAD runs into speak-activity-detected-state */ + + int non_speak_activity_thresh; /**< When in speak-activity-detected-state, if the number of the detected speak activity is higher than this value, but lower than `max_speak_activity_thresh`: + - if the number of the detected non-speak activity is higher than this value, VAD runs into speak-activity-listening-state + - if the number of the detected non-speak activity is lower than this value, VAD keeps in speak-activity-detected-state */ + + int min_speak_activity_thresh; /**< When in speak-activity-detected-state, if the number of the detected speak activity is higher than this value, but lower than `max_speak_activity_thresh`, + then the VAD state machine will depends on the value of `non_speak_activity_thresh` */ + + int max_speak_activity_thresh; /**< When in speak-activity-detected-state, if the number of the detected speak activity is higher than this value, VAD runs into speak-activity-listening-state */ +} lp_vad_config_t; + +typedef struct { + lp_i2s_chan_handle_t lp_i2s_chan; ///< LP I2S channel handle + lp_vad_config_t vad_config; ///< LP VAD config +} lp_vad_init_config_t; + +/** + * @brief New LP VAD unit + * @param[in] vad_id VAD id + * @param[in] init_config Initial configurations + * @param[out] ret_unit Unit handle + * + * @return + * - ESP_OK: On success + * - ESP_ERR_INVALID_ARG: Invalid argument + * - ESP_ERR_INVALID_STATE: Driver state is invalid, you shouldn't call this API at this moment + */ +esp_err_t lp_i2s_vad_new_unit(lp_vad_t vad_id, const lp_vad_init_config_t *init_config, vad_unit_handle_t *ret_unit); + +/** + * @brief Enable LP VAD + * + * @param[in] unit VAD handle + * @param[in] init_config Initial configurations + * + * @return + * - ESP_OK: On success + * - ESP_ERR_INVALID_ARG: Invalid argument + * - ESP_ERR_INVALID_STATE: Driver state is invalid, you shouldn't call this API at this moment + */ +esp_err_t lp_i2s_vad_enable(vad_unit_handle_t unit); + +/** + * @brief Disable LP VAD + * + * @param[in] unit VAD handle + * @param[in] init_config Initial configurations + * + * @return + * - ESP_OK: On success + * - ESP_ERR_INVALID_ARG: Invalid argument + * - ESP_ERR_INVALID_STATE: Driver state is invalid, you shouldn't call this API at this moment + */ +esp_err_t lp_i2s_vad_disable(vad_unit_handle_t unit); + +/** + * @brief Delete LP VAD unit + * @param[in] unit VAD handle + * + * @return + * - ESP_OK: On success + * - ESP_ERR_INVALID_ARG: Invalid argument + * - ESP_ERR_INVALID_STATE: Driver state is invalid, you shouldn't call this API at this moment + */ +esp_err_t lp_i2s_vad_del_unit(vad_unit_handle_t unit); + +#ifdef __cplusplus +} +#endif diff --git a/components/esp_driver_i2s/include/esp_private/lp_i2s_private.h b/components/esp_driver_i2s/include/esp_private/lp_i2s_private.h new file mode 100644 index 000000000000..2785ca026336 --- /dev/null +++ b/components/esp_driver_i2s/include/esp_private/lp_i2s_private.h @@ -0,0 +1,27 @@ +/* + * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#pragma once + +#include "hal/lp_i2s_hal.h" +#include "driver/i2s_types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Get LP I2S soc handle + * + * @param[in] chan LP I2S channel handle + * + * @return LP I2S soc handle + */ +lp_i2s_soc_handle_t lp_i2s_get_soc_handle(lp_i2s_chan_handle_t chan); + +#ifdef __cplusplus +} +#endif diff --git a/components/esp_driver_i2s/lp_i2s.c b/components/esp_driver_i2s/lp_i2s.c index 7084fc8947e6..0d5e43dd8d01 100644 --- a/components/esp_driver_i2s/lp_i2s.c +++ b/components/esp_driver_i2s/lp_i2s.c @@ -25,6 +25,7 @@ #include "driver/lp_i2s.h" #include "esp_private/periph_ctrl.h" #include "esp_private/i2s_platform.h" +#include "esp_private/lp_i2s_private.h" #include "i2s_private.h" #include "soc/i2s_periph.h" @@ -329,3 +330,15 @@ static void IRAM_ATTR s_i2s_default_isr(void *arg) portYIELD_FROM_ISR(); } } + +/*--------------------------------------------------------------- + HELPERS +---------------------------------------------------------------*/ +lp_i2s_soc_handle_t lp_i2s_get_soc_handle(lp_i2s_chan_handle_t chan) +{ + if (!chan) { + return NULL; + } + + return chan->ctlr->hal.dev; +} diff --git a/components/esp_driver_i2s/lp_i2s_vad.c b/components/esp_driver_i2s/lp_i2s_vad.c new file mode 100644 index 000000000000..f1cc63559ece --- /dev/null +++ b/components/esp_driver_i2s/lp_i2s_vad.c @@ -0,0 +1,112 @@ +/* + * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include "soc/soc_caps.h" +#include "stdatomic.h" +#if SOC_LP_VAD_SUPPORTED +#include "esp_check.h" +#include "esp_err.h" +#include "driver/lp_i2s_vad.h" +#include "esp_heap_caps.h" +#include "hal/lp_i2s_ll.h" +#include "hal/lp_i2s_hal.h" +#include "esp_private/lp_i2s_private.h" + +#define LP_VAD_MEM_ALLOC_CAPS (MALLOC_CAP_INTERNAL | MALLOC_CAP_8BIT) + +static const char *LP_VAD_TAG = "LP_VAD"; + +typedef enum { + VAD_FSM_INIT, + VAD_FSM_ENABLE, +} vad_fsm_t; + +typedef struct vad_unit_ctx_t { + lp_i2s_soc_handle_t hw; + lp_vad_t vad_id; + vad_fsm_t fsm; +} vad_unit_ctx_t; + +static atomic_bool s_vad_id_claimed[SOC_ADC_PERIPH_NUM] = {ATOMIC_VAR_INIT(false)}; + +static bool s_vad_claim(lp_vad_t vad_id) +{ + bool false_var = false; + return atomic_compare_exchange_strong(&s_vad_id_claimed[vad_id], &false_var, true); +} + +static bool s_vad_free(lp_vad_t vad_id) +{ + bool true_var = true; + return atomic_compare_exchange_strong(&s_vad_id_claimed[vad_id], &true_var, false); +} + +esp_err_t lp_i2s_vad_new_unit(lp_vad_t vad_id, const lp_vad_init_config_t *init_config, vad_unit_handle_t *ret_unit) +{ + esp_err_t ret = ESP_OK; + ESP_RETURN_ON_FALSE(init_config, ESP_ERR_INVALID_ARG, LP_VAD_TAG, "invalid arg"); + ESP_RETURN_ON_FALSE(init_config->lp_i2s_chan, ESP_ERR_INVALID_ARG, LP_VAD_TAG, "LP I2S not initialised"); + ESP_RETURN_ON_FALSE(init_config->vad_config.init_frame_num >= LP_VAD_LL_INIT_FRAME_MIN && init_config->vad_config.init_frame_num <= LP_VAD_LL_INIT_FRAME_MAX, ESP_ERR_INVALID_ARG, LP_VAD_TAG, "invalid init frame num"); + + bool success_claim = s_vad_claim(vad_id); + ESP_RETURN_ON_FALSE(success_claim, ESP_ERR_NOT_FOUND, LP_VAD_TAG, "vad%"PRId32" is already in use", vad_id); + + vad_unit_ctx_t *unit = heap_caps_calloc(1, sizeof(vad_unit_ctx_t), LP_VAD_MEM_ALLOC_CAPS); + ESP_GOTO_ON_FALSE(unit, ESP_ERR_NO_MEM, err, LP_VAD_TAG, "no mem for unit"); + + unit->hw = lp_i2s_get_soc_handle(init_config->lp_i2s_chan); + ESP_LOGD(LP_VAD_TAG, "unit->hw: %p", unit->hw); + lp_vad_ll_set_init_frame_num(unit->hw, init_config->vad_config.init_frame_num); + lp_vad_ll_set_init_min_energy(unit->hw, init_config->vad_config.min_energy_thresh); + lp_vad_ll_set_speak_activity_thresh(unit->hw, init_config->vad_config.speak_activity_thresh); + lp_vad_ll_set_non_speak_activity_thresh(unit->hw, init_config->vad_config.non_speak_activity_thresh); + lp_vad_ll_set_min_speak_activity_thresh(unit->hw, init_config->vad_config.min_speak_activity_thresh); + lp_vad_ll_set_max_speak_activity_thresh(unit->hw, init_config->vad_config.max_speak_activity_thresh); + lp_vad_ll_skip_band_energy(unit->hw, init_config->vad_config.skip_band_energy_thresh); + unit->fsm = VAD_FSM_INIT; + *ret_unit = unit; + + return ESP_OK; +err: + bool success_free = s_vad_free(vad_id); + assert(success_free); + + return ret; +} + +esp_err_t lp_i2s_vad_enable(vad_unit_handle_t unit) +{ + ESP_RETURN_ON_FALSE(unit, ESP_ERR_INVALID_ARG, LP_VAD_TAG, "invalid arg"); + ESP_RETURN_ON_FALSE(unit->fsm == VAD_FSM_INIT, ESP_ERR_INVALID_STATE, LP_VAD_TAG, "The driver is enabled already"); + + lp_vad_ll_enable(unit->hw, true); + unit->fsm = VAD_FSM_ENABLE; + return ESP_OK; +} + +esp_err_t lp_i2s_vad_disable(vad_unit_handle_t unit) +{ + ESP_RETURN_ON_FALSE(unit, ESP_ERR_INVALID_ARG, LP_VAD_TAG, "invalid arg"); + ESP_RETURN_ON_FALSE(unit->fsm == VAD_FSM_ENABLE, ESP_ERR_INVALID_STATE, LP_VAD_TAG, "The driver is not enabled yet"); + + lp_vad_ll_enable(unit->hw, false); + unit->fsm = VAD_FSM_INIT; + return ESP_OK; +} + +esp_err_t lp_i2s_vad_del_unit(vad_unit_handle_t unit) +{ + ESP_RETURN_ON_FALSE(unit, ESP_ERR_INVALID_ARG, LP_VAD_TAG, "invalid arg"); + ESP_RETURN_ON_FALSE(unit->fsm == VAD_FSM_INIT, ESP_ERR_INVALID_STATE, LP_VAD_TAG, "The driver is still in enabled state"); + + bool success_free = s_vad_free(unit->vad_id); + ESP_RETURN_ON_FALSE(success_free, ESP_ERR_NOT_FOUND, LP_VAD_TAG, "vad%"PRId32" isn't in use", unit->vad_id); + + free(unit); + return ESP_OK; +} +#endif /* SOC_LP_VAD_SUPPORTED */ diff --git a/components/hal/esp32p4/include/hal/lp_core_ll.h b/components/hal/esp32p4/include/hal/lp_core_ll.h index 27a9a0997fa2..eb2c57be317f 100644 --- a/components/hal/esp32p4/include/hal/lp_core_ll.h +++ b/components/hal/esp32p4/include/hal/lp_core_ll.h @@ -28,7 +28,7 @@ extern "C" { #define LP_CORE_LL_WAKEUP_SOURCE_LP_BOD BIT(14) #define LP_CORE_LL_WAKEUP_SOURCE_ETM BIT(17) #define LP_CORE_LL_WAKEUP_SOURCE_LP_TIMER_1 BIT(18) -#define LP_CORE_LL_WAKEUP_SOURCE_LP_I2S BIT(19) +#define LP_CORE_LL_WAKEUP_SOURCE_LP_VAD BIT(19) #define LP_CORE_LL_WAKEUP_SOURCE_HP_CPU BIT(22) /* Use lp timer 1 as the normal wakeup timer, timer 0 is used by deep sleep */ diff --git a/components/hal/esp32p4/include/hal/lp_i2s_ll.h b/components/hal/esp32p4/include/hal/lp_i2s_ll.h index c9f0d5611bd5..23e81cd2a5f2 100644 --- a/components/hal/esp32p4/include/hal/lp_i2s_ll.h +++ b/components/hal/esp32p4/include/hal/lp_i2s_ll.h @@ -32,6 +32,8 @@ extern "C" { #define LP_I2S_LL_EVENT_RX_DONE_INT (1<<0) #define LP_I2S_LL_EVENT_RX_HUNG_INT_INT (1<<1) #define LP_I2S_LL_EVENT_RX_FIFOMEM_UDF_INT (1<<2) +#define LP_I2S_LL_EVENT_VAD_DONE_INT (1<<3) +#define LP_I2S_LL_EVENT_VAD_RESET_DONE_INT (1<<4) #define LP_I2S_LL_EVENT_RX_MEM_THRESHOLD_INT (1<<5) #define LP_I2S_LL_TDM_CH_MASK (0x03UL) @@ -709,9 +711,9 @@ static inline uint32_t lp_i2s_ll_get_intr_status_reg_addr(lp_i2s_dev_t *hw) /** * @brief Enable LP I2S RX channel interrupt * - * @param hw LP I2S hardware instance - * @param mask mask - * @param enable enable or disable + * @param[in] hw LP I2S hardware instance + * @param[in] mask mask + * @param[in] enable enable or disable */ static inline void lp_i2s_ll_rx_enable_interrupt(lp_i2s_dev_t *hw, uint32_t mask, bool enable) { @@ -727,8 +729,8 @@ static inline void lp_i2s_ll_rx_enable_interrupt(lp_i2s_dev_t *hw, uint32_t mask /** * @brief Clear LP I2S RX channel interrupt * - * @param hw LP I2S hardware instance - * @param mask mask + * @param[in] hw LP I2S hardware instance + * @param[in] mask mask */ __attribute__((always_inline)) static inline void lp_i2s_ll_rx_clear_interrupt_status(lp_i2s_dev_t *hw, uint32_t mask) @@ -736,6 +738,100 @@ static inline void lp_i2s_ll_rx_clear_interrupt_status(lp_i2s_dev_t *hw, uint32_ hw->int_clr.val = mask; } +/*--------------------------------------------------------------- + VAD +---------------------------------------------------------------*/ +#define LP_VAD_LL_INIT_FRAME_MIN 100 +#define LP_VAD_LL_INIT_FRAME_MAX 200 + +/** + * @brief Set VAD init frame number + * + * @param[in] hw LP I2S hardware instance + * @param[in] frame_num Frame number + */ +static inline void lp_vad_ll_set_init_frame_num(lp_i2s_dev_t *hw, int frame_num) +{ + hw->vad_param0.param_init_frame_num = frame_num; +} + +/** + * @brief Set VAD min energy + * + * @param[in] hw LP I2S hardware instance + * @param[in] min_energy Min energy + */ +static inline void lp_vad_ll_set_init_min_energy(lp_i2s_dev_t *hw, int min_energy) +{ + HAL_FORCE_MODIFY_U32_REG_FIELD(hw->vad_param0, param_min_energy, min_energy); +} + +/** + * @brief Set VAD speak activity thresh + * + * @param[in] hw LP I2S hardware instance + * @param[in] thresh Threshold + */ +static inline void lp_vad_ll_set_speak_activity_thresh(lp_i2s_dev_t *hw, int thresh) +{ + hw->vad_param1.param_hangover_speech = thresh; +} + +/** + * @brief Set VAD non speak activity thresh + * + * @param[in] hw LP I2S hardware instance + * @param[in] thresh Threshold + */ +static inline void lp_vad_ll_set_non_speak_activity_thresh(lp_i2s_dev_t *hw, int thresh) +{ + hw->vad_param1.param_hangover_silent = thresh; +} + +/** + * @brief Set VAD min speak activity thresh + * + * @param[in] hw LP I2S hardware instance + * @param[in] thresh Threshold + */ +static inline void lp_vad_ll_set_min_speak_activity_thresh(lp_i2s_dev_t *hw, int thresh) +{ + hw->vad_param1.param_min_speech_count = thresh; +} + +/** + * @brief Set VAD max speak activity thresh + * + * @param[in] hw LP I2S hardware instance + * @param[in] thresh Threshold + */ +static inline void lp_vad_ll_set_max_speak_activity_thresh(lp_i2s_dev_t *hw, int thresh) +{ + hw->vad_param1.param_max_speech_count = thresh; +} + +/** + * @brief Skip band energy check + * + * @param[in] hw LP I2S hardware instance + * @param[in] skip 1: skip; 0: not skip + */ +static inline void lp_vad_ll_skip_band_energy(lp_i2s_dev_t *hw, bool skip) +{ + hw->vad_param1.param_skip_band_energy = skip; +} + +/** + * @brief Enable LP I2S 24 fill + * + * @param[in] hw LP I2S hardware instance + * @param[in] en enable or disable + */ +static inline void lp_vad_ll_enable(lp_i2s_dev_t *hw, bool en) +{ + hw->vad_conf.vad_en = en; +} + #ifdef __cplusplus } #endif diff --git a/components/soc/esp32p4/include/soc/Kconfig.soc_caps.in b/components/soc/esp32p4/include/soc/Kconfig.soc_caps.in index f8319e722ee2..eac76a74a3f7 100644 --- a/components/soc/esp32p4/include/soc/Kconfig.soc_caps.in +++ b/components/soc/esp32p4/include/soc/Kconfig.soc_caps.in @@ -263,6 +263,10 @@ config SOC_LP_ADC_SUPPORTED bool default y +config SOC_LP_VAD_SUPPORTED + bool + default y + config SOC_SPIRAM_SUPPORTED bool default y @@ -1763,6 +1767,10 @@ config SOC_UART_SUPPORT_FSM_TX_WAIT_SEND bool default y +config SOC_LP_I2S_SUPPORT_VAD + bool + default y + config SOC_COEX_HW_PTI bool default y @@ -1962,3 +1970,7 @@ config SOC_LP_CORE_SUPPORT_ETM config SOC_LP_CORE_SUPPORT_LP_ADC bool default y + +config SOC_LP_CORE_SUPPORT_LP_VAD + bool + default y diff --git a/components/soc/esp32p4/include/soc/soc_caps.h b/components/soc/esp32p4/include/soc/soc_caps.h index a8a90bda8676..16d2aa76438c 100644 --- a/components/soc/esp32p4/include/soc/soc_caps.h +++ b/components/soc/esp32p4/include/soc/soc_caps.h @@ -83,6 +83,7 @@ #define SOC_LP_I2S_SUPPORTED 1 #define SOC_LP_SPI_SUPPORTED 1 #define SOC_LP_ADC_SUPPORTED 1 +#define SOC_LP_VAD_SUPPORTED 1 #define SOC_SPIRAM_SUPPORTED 1 #define SOC_PSRAM_DMA_CAPABLE 1 #define SOC_SDMMC_HOST_SUPPORTED 1 @@ -662,6 +663,9 @@ // UART has an extra TX_WAIT_SEND state when the FIFO is not empty and XOFF is enabled #define SOC_UART_SUPPORT_FSM_TX_WAIT_SEND (1) +/*-------------------------- LP_VAD CAPS -------------------------------------*/ +#define SOC_LP_I2S_SUPPORT_VAD (1) + // TODO: IDF-5679 (Copy from esp32c3, need check) /*-------------------------- COEXISTENCE HARDWARE PTI CAPS -------------------------------*/ #define SOC_COEX_HW_PTI (1) @@ -745,3 +749,4 @@ /*------------------------------------- ULP CAPS -------------------------------------*/ #define SOC_LP_CORE_SUPPORT_ETM (1) /*!< LP Core supports ETM */ #define SOC_LP_CORE_SUPPORT_LP_ADC (1) /*!< LP ADC can be accessed from the LP-Core */ +#define SOC_LP_CORE_SUPPORT_LP_VAD (1) /*!< LP VAD can be accessed from the LP-Core */ diff --git a/components/ulp/CMakeLists.txt b/components/ulp/CMakeLists.txt index 058d05922b3a..dbe990e652e0 100644 --- a/components/ulp/CMakeLists.txt +++ b/components/ulp/CMakeLists.txt @@ -78,6 +78,10 @@ if(CONFIG_ULP_COPROC_TYPE_LP_CORE) if(CONFIG_SOC_LP_ADC_SUPPORTED) list(APPEND srcs "lp_core/shared/ulp_lp_core_lp_adc_shared.c") endif() + + if(CONFIG_SOC_LP_VAD_SUPPORTED) + list(APPEND srcs "lp_core/shared/ulp_lp_core_lp_vad_shared.c") + endif() endif() idf_component_register(SRCS ${srcs} diff --git a/components/ulp/cmake/IDFULPProject.cmake b/components/ulp/cmake/IDFULPProject.cmake index 04da71b00c28..fd90cfd87ffb 100644 --- a/components/ulp/cmake/IDFULPProject.cmake +++ b/components/ulp/cmake/IDFULPProject.cmake @@ -126,6 +126,7 @@ function(ulp_apply_default_sources ulp_app_name) "${IDF_PATH}/components/ulp/lp_core/lp_core/lp_core_spi.c" "${IDF_PATH}/components/ulp/lp_core/lp_core/lp_core_ubsan.c" "${IDF_PATH}/components/ulp/lp_core/shared/ulp_lp_core_lp_adc_shared.c" + "${IDF_PATH}/components/ulp/lp_core/shared/ulp_lp_core_lp_vad_shared.c" "${IDF_PATH}/components/ulp/lp_core/shared/ulp_lp_core_critical_section_shared.c") set(target_folder ${IDF_TARGET}) diff --git a/components/ulp/lp_core/include/ulp_lp_core.h b/components/ulp/lp_core/include/ulp_lp_core.h index d737d638aca8..6a0373aefa21 100644 --- a/components/ulp/lp_core/include/ulp_lp_core.h +++ b/components/ulp/lp_core/include/ulp_lp_core.h @@ -22,6 +22,7 @@ extern "C" { #define ULP_LP_CORE_WAKEUP_SOURCE_LP_IO BIT(2) // Enable wake-up by LP IO interrupt #define ULP_LP_CORE_WAKEUP_SOURCE_ETM BIT(3) // Enable wake-up by ETM event #define ULP_LP_CORE_WAKEUP_SOURCE_LP_TIMER BIT(4) // Enable wake-up by LP timer +#define ULP_LP_CORE_WAKEUP_SOURCE_LP_VAD BIT(5) // Enable wake-up by LP VAD /** * @brief ULP LP core init parameters diff --git a/components/ulp/lp_core/lp_core.c b/components/ulp/lp_core/lp_core.c index aedcf0e78e25..cfc8fc81cc0b 100644 --- a/components/ulp/lp_core/lp_core.c +++ b/components/ulp/lp_core/lp_core.c @@ -35,7 +35,7 @@ extern uint32_t _rtc_ulp_memory_start; const static char* TAG = "ulp-lp-core"; -#define WAKEUP_SOURCE_MAX_NUMBER 5 +#define WAKEUP_SOURCE_MAX_NUMBER 6 #define RESET_HANDLER_ADDR (intptr_t)(&_rtc_ulp_memory_start + 0x80 / 4) // Placed after the 0x80 byte long vector table @@ -46,6 +46,9 @@ static uint32_t wakeup_src_sw_to_hw_flag_lookup[WAKEUP_SOURCE_MAX_NUMBER] = { LP_CORE_LL_WAKEUP_SOURCE_LP_IO, LP_CORE_LL_WAKEUP_SOURCE_ETM, LP_CORE_LL_WAKEUP_SOURCE_LP_TIMER, +#if SOC_LP_VAD_SUPPORTED + LP_CORE_LL_WAKEUP_SOURCE_LP_VAD, +#endif }; /* Convert the wake-up sources defined in ulp_lp_core.h to the actual HW wake-up source values */ diff --git a/components/ulp/lp_core/lp_core/lp_core_utils.c b/components/ulp/lp_core/lp_core/lp_core_utils.c index 8b358741fbb1..d3e8664907b0 100644 --- a/components/ulp/lp_core/lp_core/lp_core_utils.c +++ b/components/ulp/lp_core/lp_core/lp_core_utils.c @@ -14,6 +14,10 @@ #include "hal/pmu_ll.h" #include "hal/uart_ll.h" #include "hal/rtc_io_ll.h" +#if SOC_LP_I2S_SUPPORT_VAD +//For VAD +#include "hal/lp_i2s_ll.h" +#endif #if SOC_LP_TIMER_SUPPORTED #include "hal/lp_timer_ll.h" @@ -56,6 +60,13 @@ void ulp_lp_core_update_wakeup_cause(void) rtcio_ll_clear_interrupt_status(); } +#if SOC_LP_VAD_SUPPORTED + if ((lp_core_ll_get_wakeup_source() & LP_CORE_LL_WAKEUP_SOURCE_LP_VAD)) { + lp_wakeup_cause |= LP_CORE_LL_WAKEUP_SOURCE_LP_VAD; + lp_i2s_ll_rx_clear_interrupt_status(&LP_I2S, LP_I2S_LL_EVENT_VAD_DONE_INT); + } +#endif + #if SOC_ETM_SUPPORTED if ((lp_core_ll_get_wakeup_source() & LP_CORE_LL_WAKEUP_SOURCE_ETM) \ && lp_core_ll_get_etm_wakeup_flag()) { diff --git a/components/ulp/lp_core/shared/include/ulp_lp_core_lp_vad_shared.h b/components/ulp/lp_core/shared/include/ulp_lp_core_lp_vad_shared.h new file mode 100644 index 000000000000..8a37dee54dbd --- /dev/null +++ b/components/ulp/lp_core/shared/include/ulp_lp_core_lp_vad_shared.h @@ -0,0 +1,121 @@ +/* + * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#pragma once + +#include +#include "esp_err.h" +#include "driver/lp_i2s_vad.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief LP VAD configurations + */ +typedef lp_vad_init_config_t lp_core_lp_vad_cfg_t; + +/** + * @brief State Machine + ┌──────────────────────────────────┐ + │ │ + ┌─────────────┤ speak-activity-listening-state │ ◄───────────────┐ + │ │ │ │ + │ └──────────────────────────────────┘ │ + │ ▲ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +detected speak activity │ │ detected speak activity │ detected speak activity + >= │ │ >= │ >= +'speak_activity_thresh' │ │ 'min_speak_activity_thresh' │ 'max_speak_activity_thresh' + │ │ │ + │ │ && │ + │ │ │ + │ │ detected non-speak activity │ + │ │ < │ + │ │ 'non_speak_activity_thresh' │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ ┌───────────┴─────────────────────┐ │ + │ │ │ │ + └───────────► │ speak-activity-detected-state ├─────────────────┘ + │ │ + └─┬───────────────────────────────┘ + │ + │ ▲ + │ │ + │ │ + │ │ detected speak activity + │ │ >= + │ │ 'min_speak_activity_thresh' + │ │ + │ │ && + │ │ + │ │ detected non-speak activity + │ │ < + └─────────────────────┘ 'non_speak_activity_thresh' +*/ + +/** + * @brief LP VAD init + * + * @param[in] vad_id VAD ID + * @param[in] init_config Initial configurations + * + * @return + * - ESP_OK: On success + * - ESP_ERR_INVALID_ARG: Invalid argument + * - ESP_ERR_INVALID_STATE: Driver state is invalid, you shouldn't call this API at this moment + */ +esp_err_t lp_core_lp_vad_init(lp_vad_t vad_id, const lp_core_lp_vad_cfg_t *init_config); + +/** + * @brief Enable LP VAD + * + * @param[in] vad_id VAD ID + * @param[in] init_config Initial configurations + * + * @return + * - ESP_OK: On success + * - ESP_ERR_INVALID_ARG: Invalid argument + * - ESP_ERR_INVALID_STATE: Driver state is invalid, you shouldn't call this API at this moment + */ +esp_err_t lp_core_lp_vad_enable(lp_vad_t vad_id); + +/** + * @brief Disable LP VAD + * + * @param[in] vad_id VAD ID + * @param[in] init_config Initial configurations + * + * @return + * - ESP_OK: On success + * - ESP_ERR_INVALID_ARG: Invalid argument + * - ESP_ERR_INVALID_STATE: Driver state is invalid, you shouldn't call this API at this moment + */ +esp_err_t lp_core_lp_vad_disable(lp_vad_t vad_id); + +/** + * @brief Deinit LP VAD + * + * @param[in] vad_id VAD ID + * + * @return + * - ESP_OK: On success + * - ESP_ERR_INVALID_ARG: Invalid argument + * - ESP_ERR_INVALID_STATE: Driver state is invalid, you shouldn't call this API at this moment + */ +esp_err_t lp_core_lp_vad_deinit(lp_vad_t vad_id); + +#ifdef __cplusplus +} +#endif diff --git a/components/ulp/lp_core/shared/ulp_lp_core_lp_vad_shared.c b/components/ulp/lp_core/shared/ulp_lp_core_lp_vad_shared.c new file mode 100644 index 000000000000..db78e7463357 --- /dev/null +++ b/components/ulp/lp_core/shared/ulp_lp_core_lp_vad_shared.c @@ -0,0 +1,65 @@ +/* + * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include "soc/soc_caps.h" +#if SOC_LP_VAD_SUPPORTED +#include "esp_check.h" +#include "esp_err.h" +#include "ulp_lp_core_lp_vad_shared.h" +#if SOC_LP_I2S_SUPPORT_VAD +//For VAD +#include "hal/lp_i2s_ll.h" +#include "hal/lp_i2s_hal.h" +#include "esp_private/lp_i2s_private.h" +#endif //SOC_LP_I2S_SUPPORT_VAD + +//make this available for multi vad id in future +vad_unit_handle_t s_vad_handle; + +esp_err_t lp_core_lp_vad_init(lp_vad_t vad_id, const lp_core_lp_vad_cfg_t *init_config) +{ +#if IS_ULP_COCPU + // Not supported + return ESP_ERR_NOT_SUPPORTED; +#else + esp_err_t ret = lp_i2s_vad_new_unit(vad_id, init_config, &s_vad_handle); + return ret; +#endif +} + +esp_err_t lp_core_lp_vad_enable(lp_vad_t vad_id) +{ +#if IS_ULP_COCPU + // Not supported + return ESP_ERR_NOT_SUPPORTED; +#else + esp_err_t ret = lp_i2s_vad_enable(s_vad_handle); + return ret; +#endif +} + +esp_err_t lp_core_lp_vad_disable(lp_vad_t vad_id) +{ +#if IS_ULP_COCPU + // Not supported + return ESP_ERR_NOT_SUPPORTED; +#else + esp_err_t ret = lp_i2s_vad_disable(s_vad_handle); + return ret; +#endif +} + +esp_err_t lp_core_lp_vad_deinit(lp_vad_t vad_id) +{ +#if IS_ULP_COCPU + // Not supported + return ESP_ERR_NOT_SUPPORTED; +#else + esp_err_t ret = lp_i2s_vad_del_unit(s_vad_handle); + return ret; +#endif +} +#endif /* SOC_LP_VAD_SUPPORTED */ From 60c005d1dc8db9d09c2d9b04b58ee82544955880 Mon Sep 17 00:00:00 2001 From: Armando Date: Thu, 26 Sep 2024 16:20:30 +0800 Subject: [PATCH 200/365] test(vad): vad wakeup test --- .../lp_core_basic_tests/main/CMakeLists.txt | 15 +- .../main/Kconfig.projbuild | 9 + .../main/lp_core/test_main_vad.c | 18 ++ .../main/test_lp_core_vad.c | 154 ++++++++++++++++++ .../lp_core_basic_tests/main/test_vad_8k.pcm | Bin 0 -> 34272 bytes .../pytest_lp_core_basic.py | 13 ++ .../lp_core_basic_tests/sdkconfig.ci.default | 0 .../lp_core_basic_tests/sdkconfig.ci.lp_vad | 2 + 8 files changed, 210 insertions(+), 1 deletion(-) create mode 100644 components/ulp/test_apps/lp_core/lp_core_basic_tests/main/Kconfig.projbuild create mode 100644 components/ulp/test_apps/lp_core/lp_core_basic_tests/main/lp_core/test_main_vad.c create mode 100644 components/ulp/test_apps/lp_core/lp_core_basic_tests/main/test_lp_core_vad.c create mode 100644 components/ulp/test_apps/lp_core/lp_core_basic_tests/main/test_vad_8k.pcm delete mode 100644 components/ulp/test_apps/lp_core/lp_core_basic_tests/sdkconfig.ci.default create mode 100644 components/ulp/test_apps/lp_core/lp_core_basic_tests/sdkconfig.ci.lp_vad diff --git a/components/ulp/test_apps/lp_core/lp_core_basic_tests/main/CMakeLists.txt b/components/ulp/test_apps/lp_core/lp_core_basic_tests/main/CMakeLists.txt index 63d8f905d7c4..239b78cf330d 100644 --- a/components/ulp/test_apps/lp_core/lp_core_basic_tests/main/CMakeLists.txt +++ b/components/ulp/test_apps/lp_core/lp_core_basic_tests/main/CMakeLists.txt @@ -20,6 +20,10 @@ if(CONFIG_SOC_LP_ADC_SUPPORTED) list(APPEND app_sources "test_lp_core_adc.c") endif() +if(CONFIG_SOC_LP_VAD_SUPPORTED) + list(APPEND app_sources "test_lp_core_vad.c") +endif() + set(lp_core_sources "lp_core/test_main.c") set(lp_core_sources_counter "lp_core/test_main_counter.c") @@ -46,10 +50,15 @@ if(CONFIG_SOC_LP_ADC_SUPPORTED) set(lp_core_sources_adc "lp_core/test_main_adc.c") endif() +if(CONFIG_SOC_LP_VAD_SUPPORTED) + set(lp_core_sources_vad "lp_core/test_main_vad.c") +endif() + idf_component_register(SRCS ${app_sources} INCLUDE_DIRS "lp_core" REQUIRES ulp unity esp_timer test_utils - WHOLE_ARCHIVE) + WHOLE_ARCHIVE + EMBED_FILES "test_vad_8k.pcm") set(lp_core_exp_dep_srcs ${app_sources}) @@ -79,3 +88,7 @@ endif() if(CONFIG_SOC_LP_ADC_SUPPORTED) ulp_embed_binary(lp_core_test_app_adc "${lp_core_sources_adc}" "${lp_core_exp_dep_srcs}") endif() + +if(CONFIG_SOC_LP_VAD_SUPPORTED) + ulp_embed_binary(lp_core_test_app_vad "${lp_core_sources_vad}" "${lp_core_exp_dep_srcs}") +endif() diff --git a/components/ulp/test_apps/lp_core/lp_core_basic_tests/main/Kconfig.projbuild b/components/ulp/test_apps/lp_core/lp_core_basic_tests/main/Kconfig.projbuild new file mode 100644 index 000000000000..5783fc5daf08 --- /dev/null +++ b/components/ulp/test_apps/lp_core/lp_core_basic_tests/main/Kconfig.projbuild @@ -0,0 +1,9 @@ +menu "Test Configurations" + + config TEST_LP_CORE_VAD_ENABLE + bool "Enable LP VAD test" + default n + help + Enable this to trigger LP VAD test + +endmenu diff --git a/components/ulp/test_apps/lp_core/lp_core_basic_tests/main/lp_core/test_main_vad.c b/components/ulp/test_apps/lp_core/lp_core_basic_tests/main/lp_core/test_main_vad.c new file mode 100644 index 000000000000..5f6198fe3704 --- /dev/null +++ b/components/ulp/test_apps/lp_core/lp_core_basic_tests/main/lp_core/test_main_vad.c @@ -0,0 +1,18 @@ +/* + * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include + +volatile bool vad_wakup; + +int main(void) +{ + vad_wakup = true; + + return 0; +} diff --git a/components/ulp/test_apps/lp_core/lp_core_basic_tests/main/test_lp_core_vad.c b/components/ulp/test_apps/lp_core/lp_core_basic_tests/main/test_lp_core_vad.c new file mode 100644 index 000000000000..16a3c059dd8e --- /dev/null +++ b/components/ulp/test_apps/lp_core/lp_core_basic_tests/main/test_lp_core_vad.c @@ -0,0 +1,154 @@ +/* + * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ +#include +#include +#include "unity.h" +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "esp_log.h" +#include "driver/lp_i2s.h" +#include "driver/lp_i2s_std.h" +#include "driver/i2s_std.h" +#include "ulp_lp_core.h" +#include "ulp_lp_core_lp_vad_shared.h" +#include "lp_core_test_app_vad.h" + +#if CONFIG_TEST_LP_CORE_VAD_ENABLE + +#define TEST_I2S_FRAME_SIZE (128) // Frame numbers in every writing / reading +#define TEST_I2S_TRANS_SIZE (4096) // Trans size + +extern const uint8_t test_vad_pcm_start[] asm("_binary_test_vad_8k_pcm_start"); +extern const uint8_t test_vad_pcm_end[] asm("_binary_test_vad_8k_pcm_end"); +extern const uint8_t lp_core_main_vad_bin_start[] asm("_binary_lp_core_test_app_vad_bin_start"); +extern const uint8_t lp_core_main_vad_bin_end[] asm("_binary_lp_core_test_app_vad_bin_end"); +static const char *TAG = "TEST_VAD"; + +static void load_and_start_lp_core_firmware(ulp_lp_core_cfg_t* cfg, const uint8_t* firmware_start, const uint8_t* firmware_end) +{ + TEST_ASSERT(ulp_lp_core_load_binary(firmware_start, + (firmware_end - firmware_start)) == ESP_OK); + + TEST_ASSERT(ulp_lp_core_run(cfg) == ESP_OK); +} + +void test_lp_vad(lp_vad_t vad_id) +{ + esp_err_t ret = ESP_FAIL; + int pcm_size = test_vad_pcm_end - test_vad_pcm_start; + printf("pcm_size: %d\n", pcm_size); + + lp_i2s_chan_handle_t rx_handle = NULL; + lp_i2s_chan_config_t config = { + .id = 0, + .role = I2S_ROLE_SLAVE, + .threshold = 512, + }; + TEST_ESP_OK(lp_i2s_new_channel(&config, NULL, &rx_handle)); + + i2s_chan_handle_t tx_handle = NULL; + i2s_chan_config_t i2s_channel_config = { + .id = I2S_NUM_0, + .role = I2S_ROLE_MASTER, + .dma_desc_num = 4, + .dma_frame_num = TEST_I2S_FRAME_SIZE, + .auto_clear = false, + }; + TEST_ESP_OK(i2s_new_channel(&i2s_channel_config, &tx_handle, NULL)); + + lp_i2s_std_config_t lp_std_cfg = { + .pin_cfg = { + .bck = 4, + .ws = 5, + .din = 6, + }, + }; + lp_std_cfg.slot_cfg = (lp_i2s_std_slot_config_t)LP_I2S_STD_PCM_SHORT_SLOT_DEFAULT_CONFIG(I2S_DATA_BIT_WIDTH_16BIT, I2S_SLOT_MODE_STEREO); + TEST_ESP_OK(lp_i2s_channel_init_std_mode(rx_handle, &lp_std_cfg)); + + i2s_std_config_t i2s_std_config = { + .gpio_cfg = { + .mclk = I2S_GPIO_UNUSED, + .bclk = GPIO_NUM_7, + .ws = GPIO_NUM_8, + .dout = GPIO_NUM_21, + .din = -1, + .invert_flags = { + .mclk_inv = false, + .bclk_inv = false, + .ws_inv = false, + }, + }, + }; + i2s_std_config.clk_cfg = (i2s_std_clk_config_t)I2S_STD_CLK_DEFAULT_CONFIG(16000); + i2s_std_config.slot_cfg = (i2s_std_slot_config_t)I2S_STD_PCM_SLOT_DEFAULT_CONFIG(I2S_DATA_BIT_WIDTH_16BIT, I2S_SLOT_MODE_STEREO); + TEST_ESP_OK(i2s_channel_init_std_mode(tx_handle, &i2s_std_config)); + + // LP VAD Init + lp_vad_init_config_t init_config = { + .lp_i2s_chan = rx_handle, + .vad_config = { + .init_frame_num = 100, + .min_energy_thresh = 100, + .speak_activity_thresh = 10, + .non_speak_activity_thresh = 30, + .min_speak_activity_thresh = 3, + .max_speak_activity_thresh = 100, + }, + }; + TEST_ESP_OK(lp_core_lp_vad_init(0, &init_config)); + + /* Load ULP firmware and start the coprocessor */ + ulp_lp_core_cfg_t cfg = { + .wakeup_source = ULP_LP_CORE_WAKEUP_SOURCE_LP_VAD, + }; + load_and_start_lp_core_firmware(&cfg, lp_core_main_vad_bin_start, lp_core_main_vad_bin_end); + + uint8_t *txbuf = (uint8_t *)heap_caps_calloc(1, TEST_I2S_TRANS_SIZE, MALLOC_CAP_8BIT | MALLOC_CAP_INTERNAL); + TEST_ASSERT(txbuf); + + uint8_t *prebuf = (uint8_t *)heap_caps_calloc(1, TEST_I2S_TRANS_SIZE, MALLOC_CAP_8BIT | MALLOC_CAP_INTERNAL); + TEST_ASSERT(prebuf); + + memcpy(prebuf, test_vad_pcm_start, TEST_I2S_TRANS_SIZE); + memcpy(txbuf, test_vad_pcm_start, TEST_I2S_TRANS_SIZE); + + for (int i = 0; i < TEST_I2S_TRANS_SIZE; i++) { + ESP_LOGD(TAG, "prebuf[%d]: %d", i, prebuf[i]); + ESP_LOGD(TAG, "txbuf[%d]: %d", i, txbuf[i]); + } + + size_t bytes_written = 0; + TEST_ESP_OK(i2s_channel_preload_data(tx_handle, prebuf, TEST_I2S_TRANS_SIZE, &bytes_written)); + TEST_ESP_OK(lp_i2s_channel_enable(rx_handle)); + TEST_ESP_OK(lp_core_lp_vad_enable(0)); + TEST_ESP_OK(i2s_channel_enable(tx_handle)); + + ret = i2s_channel_write(tx_handle, txbuf, TEST_I2S_TRANS_SIZE, &bytes_written, 0); + if (ret != ESP_OK && ret != ESP_ERR_TIMEOUT) { + TEST_ESP_OK(ret); + } + ESP_LOGD(TAG, "bytes_written: %d", bytes_written); + + while (!ulp_vad_wakup) { + ; + } + + ESP_LOGI(TAG, "wakeup"); + + TEST_ESP_OK(lp_i2s_channel_disable(rx_handle)); + TEST_ESP_OK(lp_i2s_del_channel(rx_handle)); + TEST_ESP_OK(i2s_channel_disable(tx_handle)); + TEST_ESP_OK(i2s_del_channel(tx_handle)); + free(txbuf); + free(prebuf); +} + +TEST_CASE("LP VAD wakeup test", "[lp_core][lp_vad]") +{ + test_lp_vad(0); +} +#endif //CONFIG_TEST_LP_CORE_VAD_ENABLE diff --git a/components/ulp/test_apps/lp_core/lp_core_basic_tests/main/test_vad_8k.pcm b/components/ulp/test_apps/lp_core/lp_core_basic_tests/main/test_vad_8k.pcm new file mode 100644 index 0000000000000000000000000000000000000000..5b6c32a03731f5cee7ba8bfa178b38477ac7f5f4 GIT binary patch literal 34272 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 literal 0 HcmV?d00001 diff --git a/components/ulp/test_apps/lp_core/lp_core_basic_tests/pytest_lp_core_basic.py b/components/ulp/test_apps/lp_core/lp_core_basic_tests/pytest_lp_core_basic.py index 53178dca4e84..33e7b3c9507e 100644 --- a/components/ulp/test_apps/lp_core/lp_core_basic_tests/pytest_lp_core_basic.py +++ b/components/ulp/test_apps/lp_core/lp_core_basic_tests/pytest_lp_core_basic.py @@ -33,6 +33,19 @@ def test_lp_core_xtal(dut: Dut) -> None: dut.run_all_single_board_cases() +@pytest.mark.esp32p4 +@pytest.mark.lp_i2s +@pytest.mark.parametrize( + 'config', + [ + 'lp_vad', + ], + indirect=True, +) +def test_lp_vad(dut: Dut) -> None: + dut.run_all_single_board_cases(group='lp_vad') + + @pytest.mark.esp32c6 # TODO: Enable LP I2C test for esp32p4 (IDF-9407) @pytest.mark.generic_multi_device diff --git a/components/ulp/test_apps/lp_core/lp_core_basic_tests/sdkconfig.ci.default b/components/ulp/test_apps/lp_core/lp_core_basic_tests/sdkconfig.ci.default deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/components/ulp/test_apps/lp_core/lp_core_basic_tests/sdkconfig.ci.lp_vad b/components/ulp/test_apps/lp_core/lp_core_basic_tests/sdkconfig.ci.lp_vad new file mode 100644 index 000000000000..8397edb939d2 --- /dev/null +++ b/components/ulp/test_apps/lp_core/lp_core_basic_tests/sdkconfig.ci.lp_vad @@ -0,0 +1,2 @@ +CONFIG_TEST_LP_CORE_VAD_ENABLE=y +CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG=y From 6db48cff2574dab3d0e65d6bf76f6d2526c0daaf Mon Sep 17 00:00:00 2001 From: Armando Date: Wed, 9 Oct 2024 11:26:57 +0800 Subject: [PATCH 201/365] feat(sleep): support vad wakeup hp core --- .../include/esp_private/esp_pmu.h | 8 +++++++ .../include/esp_private/esp_sleep_internal.h | 1 + components/esp_hw_support/include/esp_sleep.h | 11 ++++++++++ .../esp_hw_support/port/esp32p4/pmu_sleep.c | 5 +++++ components/esp_hw_support/sleep_modes.c | 21 ++++++++++++++++++- .../hal/esp32p4/include/hal/clk_gate_ll.h | 13 ++++++++++++ .../esp32p4/include/soc/Kconfig.soc_caps.in | 8 +++++++ components/soc/esp32p4/include/soc/soc_caps.h | 2 ++ 8 files changed, 68 insertions(+), 1 deletion(-) diff --git a/components/esp_hw_support/include/esp_private/esp_pmu.h b/components/esp_hw_support/include/esp_private/esp_pmu.h index 5b4819460743..6d347788a241 100644 --- a/components/esp_hw_support/include/esp_private/esp_pmu.h +++ b/components/esp_hw_support/include/esp_private/esp_pmu.h @@ -50,6 +50,7 @@ typedef enum { #define RTC_SLEEP_USE_ADC_TESEN_MONITOR BIT(17) #define RTC_SLEEP_NO_ULTRA_LOW BIT(18) //!< Avoid using ultra low power in deep sleep, in which RTCIO cannot be used as input, and RTCMEM can't work under high temperature #define RTC_SLEEP_XTAL_AS_RTC_FAST BIT(19) +#define RTC_SLEEP_LP_PERIPH_USE_XTAL BIT(20) #if SOC_PM_SUPPORT_EXT0_WAKEUP #define RTC_EXT0_TRIG_EN PMU_EXT0_WAKEUP_EN //!< EXT0 wakeup @@ -109,6 +110,12 @@ typedef enum { #define RTC_LP_CORE_TRIG_EN 0 #endif //SOC_LP_CORE_SUPPORTED +#if SOC_LP_VAD_SUPPORTED +#define RTC_LP_VAD_TRIG_EN PMU_LP_I2S_WAKEUP_EN //!< LP VAD wakeup +#else +#define RTC_LP_VAD_TRIG_EN 0 +#endif //SOC_LP_VAD_SUPPORTED + #define RTC_XTAL32K_DEAD_TRIG_EN 0 // TODO #define RTC_BROWNOUT_DET_TRIG_EN 0 // TODO @@ -127,6 +134,7 @@ typedef enum { RTC_TOUCH_TRIG_EN | \ RTC_XTAL32K_DEAD_TRIG_EN | \ RTC_USB_TRIG_EN | \ + RTC_LP_VAD_TRIG_EN | \ RTC_BROWNOUT_DET_TRIG_EN) diff --git a/components/esp_hw_support/include/esp_private/esp_sleep_internal.h b/components/esp_hw_support/include/esp_private/esp_sleep_internal.h index df9c2a79e29b..7805b7149593 100644 --- a/components/esp_hw_support/include/esp_private/esp_sleep_internal.h +++ b/components/esp_hw_support/include/esp_private/esp_sleep_internal.h @@ -38,6 +38,7 @@ typedef enum { ESP_SLEEP_ULTRA_LOW_MODE, //!< In ultra low mode, 2uA is saved, but RTC memory can't use at high temperature, and RTCIO can't be used as INPUT. ESP_SLEEP_RTC_FAST_USE_XTAL_MODE, //!< The mode in which the crystal is used as the RTC_FAST clock source, need keep XTAL on in HP_SLEEP mode when ULP is working. ESP_SLEEP_DIG_USE_XTAL_MODE, //!< The mode requested by digital peripherals to keep XTAL clock on during sleep (both HP_SLEEP and LP_SLEEP mode). (!!! Only valid for lightsleep, will override the XTAL domain config by esp_sleep_pd_config) + ESP_SLEEP_LP_USE_XTAL_MODE, //!< The mode requested by lp peripherals to keep XTAL clock on during sleep. Only valid for lightsleep. ESP_SLEEP_MODE_MAX, } esp_sleep_sub_mode_t; diff --git a/components/esp_hw_support/include/esp_sleep.h b/components/esp_hw_support/include/esp_sleep.h index de25aeb26839..76233f1d6278 100644 --- a/components/esp_hw_support/include/esp_sleep.h +++ b/components/esp_hw_support/include/esp_sleep.h @@ -118,6 +118,7 @@ typedef enum { ESP_SLEEP_WAKEUP_COCPU, //!< Wakeup caused by COCPU int ESP_SLEEP_WAKEUP_COCPU_TRAP_TRIG, //!< Wakeup caused by COCPU crash ESP_SLEEP_WAKEUP_BT, //!< Wakeup caused by BT (light sleep only) + ESP_SLEEP_WAKEUP_VAD, //!< Wakeup caused by VAD } esp_sleep_source_t; /** @@ -179,6 +180,16 @@ esp_err_t esp_sleep_enable_ulp_wakeup(void); */ esp_err_t esp_sleep_enable_timer_wakeup(uint64_t time_in_us); +#if SOC_LP_VAD_SUPPORTED +/** + * @brief Enable wakeup by VAD + * + * @return + * - ESP_OK on success + */ +esp_err_t esp_sleep_enable_vad_wakeup(void); +#endif + #if SOC_TOUCH_SENSOR_SUPPORTED /** * @brief Enable wakeup by touch sensor diff --git a/components/esp_hw_support/port/esp32p4/pmu_sleep.c b/components/esp_hw_support/port/esp32p4/pmu_sleep.c index 97c112aa6b52..b6be295d1098 100644 --- a/components/esp_hw_support/port/esp32p4/pmu_sleep.c +++ b/components/esp_hw_support/port/esp32p4/pmu_sleep.c @@ -29,6 +29,7 @@ #include "hal/pmu_hal.h" #include "hal/psram_ctrlr_ll.h" #include "hal/lp_sys_ll.h" +#include "hal/clk_gate_ll.h" #include "esp_private/esp_pmu.h" #include "pmu_param.h" #include "esp_rom_sys.h" @@ -202,6 +203,10 @@ const pmu_sleep_config_t* pmu_sleep_config_default( config->analog.hp_sys.analog.dbias = HP_CALI_ACTIVE_DBIAS_DEFAULT; } + if (sleep_flags & RTC_SLEEP_LP_PERIPH_USE_XTAL) { + _clk_gate_ll_xtal_to_lp_periph_en(true); + } + config->power = power_default; pmu_sleep_param_config_t param_default = PMU_SLEEP_PARAM_CONFIG_DEFAULT(sleep_flags); config->param = *pmu_sleep_param_config_default(¶m_default, &power_default, sleep_flags, adjustment, slowclk_period, fastclk_period); diff --git a/components/esp_hw_support/sleep_modes.c b/components/esp_hw_support/sleep_modes.c index ed81134542d6..b790ade73854 100644 --- a/components/esp_hw_support/sleep_modes.c +++ b/components/esp_hw_support/sleep_modes.c @@ -222,7 +222,7 @@ typedef struct { } domain[ESP_PD_DOMAIN_MAX]; portMUX_TYPE lock; uint64_t sleep_duration; - uint32_t wakeup_triggers : 15; + uint32_t wakeup_triggers : 20; #if SOC_PM_SUPPORT_EXT1_WAKEUP uint32_t ext1_trigger_mode : 22; // 22 is the maximum RTCIO number in all chips uint32_t ext1_rtc_gpio_mask : 22; @@ -917,6 +917,12 @@ static esp_err_t IRAM_ATTR esp_sleep_start(uint32_t pd_flags, esp_sleep_mode_t m sleep_flags |= RTC_SLEEP_XTAL_AS_RTC_FAST; } +#if SOC_LP_VAD_SUPPORTED + if (s_sleep_sub_mode_ref_cnt[ESP_SLEEP_LP_USE_XTAL_MODE] && !deep_sleep) { + sleep_flags |= RTC_SLEEP_LP_PERIPH_USE_XTAL; + } +#endif + #if CONFIG_ESP_SLEEP_DEBUG if (s_sleep_ctx != NULL) { s_sleep_ctx->sleep_flags = sleep_flags; @@ -1645,6 +1651,14 @@ esp_err_t esp_sleep_enable_timer_wakeup(uint64_t time_in_us) return ESP_OK; } +#if SOC_LP_VAD_SUPPORTED +esp_err_t esp_sleep_enable_vad_wakeup(void) +{ + s_config.wakeup_triggers |= RTC_LP_VAD_TRIG_EN; + return esp_sleep_sub_mode_config(ESP_SLEEP_LP_USE_XTAL_MODE, true); +} +#endif + static esp_err_t timer_wakeup_prepare(int64_t sleep_duration) { if (sleep_duration < 0) { @@ -2165,6 +2179,10 @@ esp_sleep_wakeup_cause_t esp_sleep_get_wakeup_cause(void) #if SOC_LP_CORE_SUPPORTED } else if (wakeup_cause & RTC_LP_CORE_TRIG_EN) { return ESP_SLEEP_WAKEUP_ULP; +#endif +#if SOC_LP_VAD_SUPPORTED + } else if (wakeup_cause & RTC_LP_VAD_TRIG_EN) { + return ESP_SLEEP_WAKEUP_VAD; #endif } else { return ESP_SLEEP_WAKEUP_UNDEFINED; @@ -2229,6 +2247,7 @@ int32_t* esp_sleep_sub_mode_dump_config(FILE *stream) { [ESP_SLEEP_ULTRA_LOW_MODE] = "ESP_SLEEP_ULTRA_LOW_MODE", [ESP_SLEEP_RTC_FAST_USE_XTAL_MODE] = "ESP_SLEEP_RTC_FAST_USE_XTAL_MODE", [ESP_SLEEP_DIG_USE_XTAL_MODE] = "ESP_SLEEP_DIG_USE_XTAL_MODE", + [ESP_SLEEP_LP_USE_XTAL_MODE] = "ESP_SLEEP_LP_USE_XTAL_MODE", }[mode], s_sleep_sub_mode_ref_cnt[mode] ? "ENABLED" : "DISABLED", s_sleep_sub_mode_ref_cnt[mode]); diff --git a/components/hal/esp32p4/include/hal/clk_gate_ll.h b/components/hal/esp32p4/include/hal/clk_gate_ll.h index 8c5fc05cfbff..9a49fd41e01d 100644 --- a/components/hal/esp32p4/include/hal/clk_gate_ll.h +++ b/components/hal/esp32p4/include/hal/clk_gate_ll.h @@ -14,6 +14,7 @@ extern "C" { #include #include "esp_attr.h" #include "soc/hp_sys_clkrst_struct.h" +#include "soc/lp_clkrst_struct.h" /** * Enable or disable the clock gate for ref_20m. @@ -75,6 +76,18 @@ FORCE_INLINE_ATTR void _clk_gate_ll_ref_240m_clk_en(bool enable) /// the critical section needs to declare the __DECLARE_RCC_ATOMIC_ENV variable in advance #define clk_gate_ll_ref_240m_clk_en(...) (void)__DECLARE_RCC_ATOMIC_ENV; _clk_gate_ll_ref_240m_clk_en(__VA_ARGS__) +/** + * Enable or disable the clock gate for xtal to lp periph + * @param enable Enable / disable + */ +FORCE_INLINE_ATTR void _clk_gate_ll_xtal_to_lp_periph_en(bool enable) +{ + LP_AON_CLKRST.lp_clk_en.xtal_clk_force_on = enable; +} +/// use a macro to wrap the function, force the caller to use it in a critical section +/// the critical section needs to declare the __DECLARE_RCC_ATOMIC_ENV variable in advance +#define clk_gate_ll_xtal_to_lp_periph_en(...) (void)__DECLARE_RCC_ATOMIC_ENV; _clk_gate_ll_xtal_to_lp_periph_en(__VA_ARGS__) + #ifdef __cplusplus } #endif diff --git a/components/soc/esp32p4/include/soc/Kconfig.soc_caps.in b/components/soc/esp32p4/include/soc/Kconfig.soc_caps.in index eac76a74a3f7..ed47efb44635 100644 --- a/components/soc/esp32p4/include/soc/Kconfig.soc_caps.in +++ b/components/soc/esp32p4/include/soc/Kconfig.soc_caps.in @@ -1859,6 +1859,14 @@ config SOC_PM_PAU_REGDMA_UPDATE_CACHE_BEFORE_WAIT_COMPARE bool default y +config SOC_SLEEP_SYSTIMER_STALL_WORKAROUND + bool + default y + +config SOC_SLEEP_TGWDT_STOP_WORKAROUND + bool + default y + config SOC_PSRAM_VDD_POWER_MPLL bool default y diff --git a/components/soc/esp32p4/include/soc/soc_caps.h b/components/soc/esp32p4/include/soc/soc_caps.h index 16d2aa76438c..bf411fb3b79d 100644 --- a/components/soc/esp32p4/include/soc/soc_caps.h +++ b/components/soc/esp32p4/include/soc/soc_caps.h @@ -702,6 +702,8 @@ #define SOC_CPU_IN_TOP_DOMAIN (1) #define SOC_PM_PAU_REGDMA_UPDATE_CACHE_BEFORE_WAIT_COMPARE (1) +#define SOC_SLEEP_SYSTIMER_STALL_WORKAROUND 1 //TODO IDF-11381: replace with all xtal field clk gate control +#define SOC_SLEEP_TGWDT_STOP_WORKAROUND 1 //TODO IDF-11381: replace with all xtal field clk gate control /*-------------------------- PSRAM CAPS ----------------------------*/ #define SOC_PSRAM_VDD_POWER_MPLL (1) From 56af6b5fc4fe1fcef4a44bfc6f2341bcc93b55da Mon Sep 17 00:00:00 2001 From: Armando Date: Wed, 9 Oct 2024 14:50:00 +0800 Subject: [PATCH 202/365] test(sleep): vad wakeup hp core test --- .../test_apps/lp_i2s/sdkconfig.ci.defaults | 1 - .../test_apps/.build-test-rules.yml | 4 + .../test_apps/vad_wakeup/CMakeLists.txt | 8 + .../test_apps/vad_wakeup/README.md | 3 + .../test_apps/vad_wakeup/main/CMakeLists.txt | 7 + .../test_apps/vad_wakeup/main/test_app_main.c | 27 +++ .../test_apps/vad_wakeup/main/test_vad_8k.pcm | Bin 0 -> 34272 bytes .../vad_wakeup/main/test_vad_wakeup.c | 162 ++++++++++++++++++ .../test_apps/vad_wakeup/pytest_wakeup_vad.py | 11 ++ .../test_apps/vad_wakeup/sdkconfig.defaults | 8 + .../lp_core_basic_tests/sdkconfig.ci.lp_vad | 1 - 11 files changed, 230 insertions(+), 2 deletions(-) create mode 100644 components/esp_hw_support/test_apps/vad_wakeup/CMakeLists.txt create mode 100644 components/esp_hw_support/test_apps/vad_wakeup/README.md create mode 100644 components/esp_hw_support/test_apps/vad_wakeup/main/CMakeLists.txt create mode 100644 components/esp_hw_support/test_apps/vad_wakeup/main/test_app_main.c create mode 100644 components/esp_hw_support/test_apps/vad_wakeup/main/test_vad_8k.pcm create mode 100644 components/esp_hw_support/test_apps/vad_wakeup/main/test_vad_wakeup.c create mode 100644 components/esp_hw_support/test_apps/vad_wakeup/pytest_wakeup_vad.py create mode 100644 components/esp_hw_support/test_apps/vad_wakeup/sdkconfig.defaults diff --git a/components/esp_driver_i2s/test_apps/lp_i2s/sdkconfig.ci.defaults b/components/esp_driver_i2s/test_apps/lp_i2s/sdkconfig.ci.defaults index 5e9f8e25bd87..e69de29bb2d1 100644 --- a/components/esp_driver_i2s/test_apps/lp_i2s/sdkconfig.ci.defaults +++ b/components/esp_driver_i2s/test_apps/lp_i2s/sdkconfig.ci.defaults @@ -1 +0,0 @@ -CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG=y diff --git a/components/esp_hw_support/test_apps/.build-test-rules.yml b/components/esp_hw_support/test_apps/.build-test-rules.yml index b61d8878c6c9..a13010cf3aa0 100644 --- a/components/esp_hw_support/test_apps/.build-test-rules.yml +++ b/components/esp_hw_support/test_apps/.build-test-rules.yml @@ -42,6 +42,10 @@ components/esp_hw_support/test_apps/rtc_power_modes: temporary: true reason: the other targets are not tested yet +components/esp_hw_support/test_apps/vad_wakeup: + disable: + - if: SOC_LP_VAD_SUPPORTED != 1 + components/esp_hw_support/test_apps/wakeup_tests: disable: - if: IDF_TARGET in ["esp32c5", "esp32p4", "linux", "esp32c61"] diff --git a/components/esp_hw_support/test_apps/vad_wakeup/CMakeLists.txt b/components/esp_hw_support/test_apps/vad_wakeup/CMakeLists.txt new file mode 100644 index 000000000000..503656001154 --- /dev/null +++ b/components/esp_hw_support/test_apps/vad_wakeup/CMakeLists.txt @@ -0,0 +1,8 @@ +# This is the project CMakeLists.txt file for the test subproject +cmake_minimum_required(VERSION 3.16) + +# "Trim" the build. Include the minimal set of components, main, and anything it depends on. +set(COMPONENTS main) + +include($ENV{IDF_PATH}/tools/cmake/project.cmake) +project(vad_wakeup) diff --git a/components/esp_hw_support/test_apps/vad_wakeup/README.md b/components/esp_hw_support/test_apps/vad_wakeup/README.md new file mode 100644 index 000000000000..f8ea707124d7 --- /dev/null +++ b/components/esp_hw_support/test_apps/vad_wakeup/README.md @@ -0,0 +1,3 @@ +| Supported Targets | ESP32-P4 | +| ----------------- | -------- | + diff --git a/components/esp_hw_support/test_apps/vad_wakeup/main/CMakeLists.txt b/components/esp_hw_support/test_apps/vad_wakeup/main/CMakeLists.txt new file mode 100644 index 000000000000..3a92a5d2bd7c --- /dev/null +++ b/components/esp_hw_support/test_apps/vad_wakeup/main/CMakeLists.txt @@ -0,0 +1,7 @@ +set(srcs "test_app_main.c" + "test_vad_wakeup.c") + +idf_component_register(SRCS ${srcs} + REQUIRES unity esp_driver_i2s esp_driver_uart ulp esp_timer + WHOLE_ARCHIVE + EMBED_FILES "test_vad_8k.pcm") diff --git a/components/esp_hw_support/test_apps/vad_wakeup/main/test_app_main.c b/components/esp_hw_support/test_apps/vad_wakeup/main/test_app_main.c new file mode 100644 index 000000000000..1d34b63e4462 --- /dev/null +++ b/components/esp_hw_support/test_apps/vad_wakeup/main/test_app_main.c @@ -0,0 +1,27 @@ +/* + * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include "unity.h" +#include "unity_test_runner.h" +#include "unity_test_utils.h" + +#define LEAKS (400) + + +void setUp(void) +{ + unity_utils_record_free_mem(); +} + +void tearDown(void) +{ + unity_utils_evaluate_leaks_direct(LEAKS); +} + +void app_main(void) +{ + unity_run_menu(); +} diff --git a/components/esp_hw_support/test_apps/vad_wakeup/main/test_vad_8k.pcm b/components/esp_hw_support/test_apps/vad_wakeup/main/test_vad_8k.pcm new file mode 100644 index 0000000000000000000000000000000000000000..5b6c32a03731f5cee7ba8bfa178b38477ac7f5f4 GIT binary patch literal 34272 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 literal 0 HcmV?d00001 diff --git a/components/esp_hw_support/test_apps/vad_wakeup/main/test_vad_wakeup.c b/components/esp_hw_support/test_apps/vad_wakeup/main/test_vad_wakeup.c new file mode 100644 index 000000000000..2a245bfc6f37 --- /dev/null +++ b/components/esp_hw_support/test_apps/vad_wakeup/main/test_vad_wakeup.c @@ -0,0 +1,162 @@ +/* + * SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Unlicense OR CC0-1.0 + */ + +#include +#include +#include +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "esp_sleep.h" +#include "esp_log.h" +#include "driver/uart.h" +#include "driver/lp_i2s.h" +#include "driver/lp_i2s_std.h" +#include "driver/i2s_std.h" +#include "ulp_lp_core_lp_vad_shared.h" +#include "unity.h" +#include "esp_timer.h" + +#define TEST_I2S_FRAME_SIZE (128) // Frame numbers in every writing / reading +#define TEST_I2S_TRANS_SIZE (4096) // Trans size +#define TEST_LP_I2S_PIN_BCK 4 +#define TEST_LP_I2S_PIN_WS 5 +#define TEST_LP_I2S_PIN_DIN 6 + + +extern const uint8_t test_vad_pcm_start[] asm("_binary_test_vad_8k_pcm_start"); +extern const uint8_t test_vad_pcm_end[] asm("_binary_test_vad_8k_pcm_end"); +static const char *TAG = "TEST_VAD"; + +static void s_hp_i2s_config(void) +{ + esp_err_t ret = ESP_FAIL; + int pcm_size = test_vad_pcm_end - test_vad_pcm_start; + printf("pcm_size: %d\n", pcm_size); + + i2s_chan_handle_t tx_handle = NULL; + i2s_chan_config_t i2s_channel_config = { + .id = I2S_NUM_0, + .role = I2S_ROLE_MASTER, + .dma_desc_num = 16, + .dma_frame_num = TEST_I2S_FRAME_SIZE, + .auto_clear = false, + }; + TEST_ESP_OK(i2s_new_channel(&i2s_channel_config, &tx_handle, NULL)); + + + i2s_std_config_t i2s_std_config = { + .gpio_cfg = { + .mclk = I2S_GPIO_UNUSED, + .bclk = GPIO_NUM_7, + .ws = GPIO_NUM_8, + .dout = GPIO_NUM_21, + .din = -1, + .invert_flags = { + .mclk_inv = false, + .bclk_inv = false, + .ws_inv = false, + }, + }, + }; + i2s_std_config.clk_cfg = (i2s_std_clk_config_t)I2S_STD_CLK_DEFAULT_CONFIG(16000); + i2s_std_config.slot_cfg = (i2s_std_slot_config_t)I2S_STD_PCM_SLOT_DEFAULT_CONFIG(I2S_DATA_BIT_WIDTH_16BIT, I2S_SLOT_MODE_STEREO); + TEST_ESP_OK(i2s_channel_init_std_mode(tx_handle, &i2s_std_config)); + + + uint8_t *txbuf = (uint8_t *)heap_caps_calloc(1, TEST_I2S_TRANS_SIZE, MALLOC_CAP_8BIT | MALLOC_CAP_INTERNAL); + TEST_ASSERT(txbuf); + + uint8_t *prebuf = (uint8_t *)heap_caps_calloc(1, TEST_I2S_TRANS_SIZE, MALLOC_CAP_8BIT | MALLOC_CAP_INTERNAL); + TEST_ASSERT(prebuf); + + memcpy(prebuf, test_vad_pcm_start, TEST_I2S_TRANS_SIZE); + memcpy(txbuf, test_vad_pcm_start, TEST_I2S_TRANS_SIZE); + + for (int i = 0; i < TEST_I2S_TRANS_SIZE; i++) { + ESP_LOGD(TAG, "prebuf[%d]: %d", i, prebuf[i]); + ESP_LOGD(TAG, "txbuf[%d]: %d", i, txbuf[i]); + } + + size_t bytes_written = 0; + TEST_ESP_OK(i2s_channel_preload_data(tx_handle, prebuf, TEST_I2S_TRANS_SIZE, &bytes_written)); + + TEST_ESP_OK(i2s_channel_enable(tx_handle)); + + while (1) { + ret = i2s_channel_write(tx_handle, txbuf, TEST_I2S_TRANS_SIZE, &bytes_written, 0); + if (ret != ESP_OK && ret != ESP_ERR_TIMEOUT) { + TEST_ESP_OK(ret); + } + ESP_LOGD(TAG, "bytes_written: %d", bytes_written); + vTaskDelay(1); + } +} + +static void s_lp_vad_config(void) +{ + ESP_ERROR_CHECK(esp_sleep_enable_vad_wakeup()); + ESP_ERROR_CHECK(esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON)); + ESP_ERROR_CHECK(esp_sleep_pd_config(ESP_PD_DOMAIN_XTAL, ESP_PD_OPTION_ON)); + + lp_i2s_chan_handle_t rx_handle = NULL; + lp_i2s_chan_config_t config = { + .id = 0, + .role = I2S_ROLE_SLAVE, + .threshold = 512, + }; + TEST_ESP_OK(lp_i2s_new_channel(&config, NULL, &rx_handle)); + + lp_i2s_std_config_t lp_std_cfg = { + .pin_cfg = { + .bck = TEST_LP_I2S_PIN_BCK, + .ws = TEST_LP_I2S_PIN_WS, + .din = TEST_LP_I2S_PIN_DIN, + }, + }; + lp_std_cfg.slot_cfg = (lp_i2s_std_slot_config_t)LP_I2S_STD_PCM_SHORT_SLOT_DEFAULT_CONFIG(I2S_DATA_BIT_WIDTH_16BIT, I2S_SLOT_MODE_STEREO); + TEST_ESP_OK(lp_i2s_channel_init_std_mode(rx_handle, &lp_std_cfg)); + + // LP VAD Init + lp_vad_init_config_t init_config = { + .lp_i2s_chan = rx_handle, + .vad_config = { + .init_frame_num = 100, + .min_energy_thresh = 100, + .speak_activity_thresh = 10, + .non_speak_activity_thresh = 30, + .min_speak_activity_thresh = 3, + .max_speak_activity_thresh = 100, + }, + }; + TEST_ESP_OK(lp_core_lp_vad_init(0, &init_config)); + TEST_ESP_OK(lp_i2s_channel_enable(rx_handle)); + TEST_ESP_OK(lp_core_lp_vad_enable(0)); + + printf("Entering light sleep\n"); + /* To make sure the complete line is printed before entering sleep mode, + * need to wait until UART TX FIFO is empty: + */ + uart_wait_tx_idle_polling(CONFIG_ESP_CONSOLE_UART_NUM); + + /* Enter sleep mode */ + esp_light_sleep_start(); + + /* Determine wake up reason */ + const char* wakeup_reason; + switch (esp_sleep_get_wakeup_cause()) { + case ESP_SLEEP_WAKEUP_VAD: + wakeup_reason = "vad"; + break; + default: + wakeup_reason = "other"; + TEST_ASSERT(false); + break; + } + + ESP_LOGI(TAG, "wakeup, reason: %s", wakeup_reason); +} + +TEST_CASE_MULTIPLE_DEVICES("test LP VAD wakeup", "[vad][ignore][manual]", s_hp_i2s_config, s_lp_vad_config); diff --git a/components/esp_hw_support/test_apps/vad_wakeup/pytest_wakeup_vad.py b/components/esp_hw_support/test_apps/vad_wakeup/pytest_wakeup_vad.py new file mode 100644 index 000000000000..b4d9f85affd9 --- /dev/null +++ b/components/esp_hw_support/test_apps/vad_wakeup/pytest_wakeup_vad.py @@ -0,0 +1,11 @@ +# SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD +# SPDX-License-Identifier: Unlicense OR CC0-1.0 +import pytest +from pytest_embedded import Dut + + +@pytest.mark.esp32p4 +@pytest.mark.temp_skip_ci(targets=['esp32p4'], reason='lack of runners for now') +@pytest.mark.lp_i2s +def test_efuse(dut: Dut) -> None: + dut.run_all_single_board_cases() diff --git a/components/esp_hw_support/test_apps/vad_wakeup/sdkconfig.defaults b/components/esp_hw_support/test_apps/vad_wakeup/sdkconfig.defaults new file mode 100644 index 000000000000..cac3f9a01f9a --- /dev/null +++ b/components/esp_hw_support/test_apps/vad_wakeup/sdkconfig.defaults @@ -0,0 +1,8 @@ +CONFIG_ESP_TASK_WDT_INIT=n + +CONFIG_ULP_COPROC_ENABLED=y +CONFIG_ULP_COPROC_TYPE_LP_CORE=y +CONFIG_ULP_COPROC_RESERVE_MEM=12000 +CONFIG_ULP_PANIC_OUTPUT_ENABLE=y + +CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG=y diff --git a/components/ulp/test_apps/lp_core/lp_core_basic_tests/sdkconfig.ci.lp_vad b/components/ulp/test_apps/lp_core/lp_core_basic_tests/sdkconfig.ci.lp_vad index 8397edb939d2..766d6c83cde5 100644 --- a/components/ulp/test_apps/lp_core/lp_core_basic_tests/sdkconfig.ci.lp_vad +++ b/components/ulp/test_apps/lp_core/lp_core_basic_tests/sdkconfig.ci.lp_vad @@ -1,2 +1 @@ CONFIG_TEST_LP_CORE_VAD_ENABLE=y -CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG=y From 4cbc790628777f1c1d131a4203ec87c4195f5d5e Mon Sep 17 00:00:00 2001 From: "C.S.M" Date: Fri, 27 Sep 2024 19:11:30 +0800 Subject: [PATCH 203/365] feat(temperature_sensor): Add sleep retention support for temperature sensor --- .../include/driver/temperature_sensor.h | 8 ++- .../esp_driver_tsens/src/temperature_sensor.c | 52 +++++++++++++++ .../src/temperature_sensor_private.h | 5 +- .../temperature_sensor/main/CMakeLists.txt | 2 +- .../main/test_temperature_sensor.c | 63 ++++++++++++++++++- .../temperature_sensor/sdkconfig.ci.release | 1 + .../temperature_sensor/sdkconfig.defaults | 2 + .../include/esp_private/regi2c_ctrl.h | 9 ++- components/esp_hw_support/regi2c_ctrl.c | 21 ++++++- components/esp_hw_support/sleep_modes.c | 6 ++ .../esp32c5/include/soc/Kconfig.soc_caps.in | 8 +++ .../include/soc/retention_periph_defs.h | 3 + components/soc/esp32c5/include/soc/soc_caps.h | 2 + .../soc/esp32c5/temperature_sensor_periph.c | 24 +++++++ .../esp32c6/include/soc/Kconfig.soc_caps.in | 8 +++ .../include/soc/retention_periph_defs.h | 3 + components/soc/esp32c6/include/soc/soc_caps.h | 2 + .../soc/esp32c6/temperature_sensor_periph.c | 26 +++++++- .../esp32h2/include/soc/Kconfig.soc_caps.in | 8 +++ .../include/soc/retention_periph_defs.h | 3 + components/soc/esp32h2/include/soc/soc_caps.h | 2 + .../soc/esp32h2/temperature_sensor_periph.c | 27 +++++++- .../esp32p4/include/soc/Kconfig.soc_caps.in | 4 ++ components/soc/esp32p4/include/soc/soc_caps.h | 2 + components/soc/include/soc/regdma.h | 2 + .../include/soc/temperature_sensor_periph.h | 17 ++++- .../api-reference/peripherals/temp_sensor.rst | 1 + .../api-reference/system/power_management.rst | 1 + .../api-reference/peripherals/temp_sensor.rst | 1 + .../api-reference/system/power_management.rst | 1 + 30 files changed, 305 insertions(+), 9 deletions(-) diff --git a/components/esp_driver_tsens/include/driver/temperature_sensor.h b/components/esp_driver_tsens/include/driver/temperature_sensor.h index 3c2c18dc1c5f..fc968dfb0fa0 100644 --- a/components/esp_driver_tsens/include/driver/temperature_sensor.h +++ b/components/esp_driver_tsens/include/driver/temperature_sensor.h @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -30,6 +30,12 @@ typedef struct { int range_min; /**< the minimum value of the temperature you want to test */ int range_max; /**< the maximum value of the temperature you want to test */ temperature_sensor_clk_src_t clk_src; /**< the clock source of the temperature sensor. */ + struct { + uint32_t allow_pd; /**< If set, the driver will backup/restore the temperature sensor registers before/after entering/exist sleep mode. + By this approach, the system can power off temperature sensor's power domain. + This can save power, but at the expense of more RAM being consumed */ + } flags; /**< Temperature sensor config flags */ + } temperature_sensor_config_t; /** diff --git a/components/esp_driver_tsens/src/temperature_sensor.c b/components/esp_driver_tsens/src/temperature_sensor.c index 2bf39ca9bf28..39e44afb9b57 100644 --- a/components/esp_driver_tsens/src/temperature_sensor.c +++ b/components/esp_driver_tsens/src/temperature_sensor.c @@ -29,6 +29,9 @@ #include "soc/temperature_sensor_periph.h" #include "esp_memory_utils.h" #include "esp_private/sar_periph_ctrl.h" +#if TEMPERATURE_SENSOR_USE_RETENTION_LINK +#include "esp_private/sleep_retention.h" +#endif static const char *TAG = "temperature_sensor"; @@ -93,6 +96,26 @@ static void IRAM_ATTR temperature_sensor_isr(void *arg) } #endif // SOC_TEMPERATURE_SENSOR_INTR_SUPPORT +#if TEMPERATURE_SENSOR_USE_RETENTION_LINK +static esp_err_t s_temperature_sensor_sleep_retention_init(void *arg) +{ + esp_err_t ret = sleep_retention_entries_create(temperature_sensor_regs_retention.link_list, temperature_sensor_regs_retention.link_num, REGDMA_LINK_PRI_TEMPERATURE_SENSOR, temperature_sensor_regs_retention.module_id); + ESP_RETURN_ON_ERROR(ret, TAG, "failed to allocate mem for sleep retention"); + return ret; +} + +void temperature_sensor_create_retention_module(temperature_sensor_handle_t tsens) +{ + sleep_retention_module_t module_id = temperature_sensor_regs_retention.module_id; + if ((sleep_retention_get_inited_modules() & BIT(module_id)) && !(sleep_retention_get_created_modules() & BIT(module_id))) { + if (sleep_retention_module_allocate(module_id) != ESP_OK) { + // even though the sleep retention module_id create failed, temperature sensor driver should still work, so just warning here + ESP_LOGW(TAG, "create retention link failed, power domain won't be turned off during sleep"); + } + } +} +#endif // TEMPERATURE_SENSOR_USE_RETENTION_LINK + esp_err_t temperature_sensor_install(const temperature_sensor_config_t *tsens_config, temperature_sensor_handle_t *ret_tsens) { #if CONFIG_TEMP_SENSOR_ENABLE_DEBUG_LOG @@ -110,6 +133,24 @@ esp_err_t temperature_sensor_install(const temperature_sensor_config_t *tsens_co tsens->clk_src = tsens_config->clk_src; } +#if !SOC_TEMPERATURE_SENSOR_SUPPORT_SLEEP_RETENTION + ESP_RETURN_ON_FALSE(tsens_config->flags.allow_pd == 0, ESP_ERR_NOT_SUPPORTED, TAG, "not able to power down in light sleep"); +#endif // SOC_TEMPERATURE_SENSOR_SUPPORT_SLEEP_RETENTION + +#if TEMPERATURE_SENSOR_USE_RETENTION_LINK + sleep_retention_module_init_param_t init_param = { + .cbs = { .create = { .handle = s_temperature_sensor_sleep_retention_init, .arg = (void *)tsens } } + }; + ret = sleep_retention_module_init(temperature_sensor_regs_retention.module_id, &init_param); + if (ret != ESP_OK) { + ESP_LOGW(TAG, "init sleep retention failed, power domain may be turned off during sleep"); + } + + if (tsens_config->flags.allow_pd != 0) { + temperature_sensor_create_retention_module(tsens); + } +#endif // TEMPERATURE_SENSOR_USE_RETENTION_LINK + temperature_sensor_power_acquire(); temperature_sensor_ll_clk_sel(tsens->clk_src); @@ -147,6 +188,17 @@ esp_err_t temperature_sensor_uninstall(temperature_sensor_handle_t tsens) ESP_RETURN_ON_ERROR(esp_intr_free(tsens->temp_sensor_isr_handle), TAG, "uninstall interrupt service failed"); } #endif // SOC_TEMPERATURE_SENSOR_INTR_SUPPORT + +#if TEMPERATURE_SENSOR_USE_RETENTION_LINK + sleep_retention_module_t module_id = temperature_sensor_regs_retention.module_id; + if (sleep_retention_get_created_modules() & BIT(module_id)) { + sleep_retention_module_free(temperature_sensor_regs_retention.module_id); + } + if (sleep_retention_get_inited_modules() & BIT(module_id)) { + sleep_retention_module_deinit(temperature_sensor_regs_retention.module_id); + } +#endif // TEMPERATURE_SENSOR_USE_RETENTION_LINK + temperature_sensor_power_release(); free(tsens); diff --git a/components/esp_driver_tsens/src/temperature_sensor_private.h b/components/esp_driver_tsens/src/temperature_sensor_private.h index b511505ffba8..28b84be5f8e0 100644 --- a/components/esp_driver_tsens/src/temperature_sensor_private.h +++ b/components/esp_driver_tsens/src/temperature_sensor_private.h @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -30,6 +30,9 @@ typedef enum { #define TEMPERATURE_SENSOR_MEM_ALLOC_CAPS (MALLOC_CAP_DEFAULT) #endif +// Use retention link only when the target supports sleep retention and PM is enabled +#define TEMPERATURE_SENSOR_USE_RETENTION_LINK (SOC_TEMPERATURE_SENSOR_SUPPORT_SLEEP_RETENTION && CONFIG_PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP && SOC_TEMPERATURE_SENSOR_UNDER_PD_TOP_DOMAIN) + typedef struct temperature_sensor_obj_t temperature_sensor_obj_t; struct temperature_sensor_obj_t { diff --git a/components/esp_driver_tsens/test_apps/temperature_sensor/main/CMakeLists.txt b/components/esp_driver_tsens/test_apps/temperature_sensor/main/CMakeLists.txt index 5d45e0615adc..57b6fd425c69 100644 --- a/components/esp_driver_tsens/test_apps/temperature_sensor/main/CMakeLists.txt +++ b/components/esp_driver_tsens/test_apps/temperature_sensor/main/CMakeLists.txt @@ -9,5 +9,5 @@ endif() # In order for the cases defined by `TEST_CASE` to be linked into the final elf, # the component can be registered as WHOLE_ARCHIVE idf_component_register(SRCS ${srcs} - PRIV_REQUIRES unity esp_wifi test_utils nvs_flash esp_driver_tsens esp_driver_gpio + PRIV_REQUIRES unity esp_wifi test_utils nvs_flash esp_driver_tsens esp_driver_gpio esp_pm WHOLE_ARCHIVE) diff --git a/components/esp_driver_tsens/test_apps/temperature_sensor/main/test_temperature_sensor.c b/components/esp_driver_tsens/test_apps/temperature_sensor/main/test_temperature_sensor.c index 6bc7fe4e86ea..15b38613c8b6 100644 --- a/components/esp_driver_tsens/test_apps/temperature_sensor/main/test_temperature_sensor.c +++ b/components/esp_driver_tsens/test_apps/temperature_sensor/main/test_temperature_sensor.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -13,6 +13,11 @@ #include "freertos/task.h" #include "soc/soc_caps.h" #include "unity_test_utils_cache.h" +#include "esp_sleep.h" +#include "esp_private/sleep_cpu.h" +#include "esp_pm.h" +#include "esp_private/esp_sleep_internal.h" +#include "esp_private/esp_pmu.h" TEST_CASE("Temperature_sensor_driver_workflow_test", "[temperature_sensor]") { @@ -146,3 +151,59 @@ TEST_CASE("Temperature sensor callback test", "[temperature_sensor]") } #endif // SOC_TEMPERATURE_SENSOR_INTR_SUPPORT + +#if SOC_LIGHT_SLEEP_SUPPORTED && CONFIG_PM_ENABLE +static void test_temperature_sensor_sleep_retention(bool allow_pd) +{ + printf("Initializing Temperature sensor\n"); + float tsens_result0; + float tsens_result1; + temperature_sensor_config_t temp_sensor = { + .range_min = 10, + .range_max = 50, + .clk_src = TEMPERATURE_SENSOR_CLK_SRC_DEFAULT, + .flags.allow_pd = allow_pd, + }; + temperature_sensor_handle_t temp_handle = NULL; + TEST_ESP_OK(temperature_sensor_install(&temp_sensor, &temp_handle)); + TEST_ESP_OK(temperature_sensor_enable(temp_handle)); + printf("Temperature sensor started\n"); + TEST_ESP_OK(temperature_sensor_get_celsius(temp_handle, &tsens_result0)); + printf("Temperature out celsius %f°C\n", tsens_result0); + + esp_sleep_context_t sleep_ctx; + esp_sleep_set_sleep_context(&sleep_ctx); + +#if ESP_SLEEP_POWER_DOWN_CPU + TEST_ESP_OK(sleep_cpu_configure(true)); +#endif + TEST_ESP_OK(esp_sleep_enable_timer_wakeup(2 * 1000 * 1000)); + TEST_ESP_OK(esp_light_sleep_start()); +#if ESP_SLEEP_POWER_DOWN_CPU + TEST_ESP_OK(sleep_cpu_configure(false)); +#endif + printf("check if the sleep happened as expected\r\n"); + TEST_ASSERT_EQUAL(0, sleep_ctx.sleep_request_result); +#if SOC_TEMPERATURE_SENSOR_UNDER_PD_TOP_DOMAIN + // check if the power domain also is powered down + TEST_ASSERT_EQUAL(allow_pd ? PMU_SLEEP_PD_TOP : 0, (sleep_ctx.sleep_flags) & PMU_SLEEP_PD_TOP); +#elif CONFIG_IDF_TARGET_ESP32P4 + TEST_ASSERT_EQUAL(PMU_SLEEP_PD_TOP, (sleep_ctx.sleep_flags) & PMU_SLEEP_PD_TOP); +#endif + + TEST_ESP_OK(temperature_sensor_get_celsius(temp_handle, &tsens_result1)); + printf("Temperature out celsius %f°C\n", tsens_result1); + TEST_ASSERT_FLOAT_WITHIN(6.0, tsens_result0, tsens_result1); + + TEST_ESP_OK(temperature_sensor_disable(temp_handle)); + TEST_ESP_OK(temperature_sensor_uninstall(temp_handle)); +} + +TEST_CASE("temperature sensor sleep retention test", "[temperature_sensor]") +{ + test_temperature_sensor_sleep_retention(false); +#if SOC_TEMPERATURE_SENSOR_SUPPORT_SLEEP_RETENTION + test_temperature_sensor_sleep_retention(true); +#endif +} +#endif diff --git a/components/esp_driver_tsens/test_apps/temperature_sensor/sdkconfig.ci.release b/components/esp_driver_tsens/test_apps/temperature_sensor/sdkconfig.ci.release index 91d93f163e62..eb643d4d06bc 100644 --- a/components/esp_driver_tsens/test_apps/temperature_sensor/sdkconfig.ci.release +++ b/components/esp_driver_tsens/test_apps/temperature_sensor/sdkconfig.ci.release @@ -1,4 +1,5 @@ CONFIG_PM_ENABLE=y +CONFIG_PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP=y CONFIG_FREERTOS_USE_TICKLESS_IDLE=y CONFIG_COMPILER_OPTIMIZATION_SIZE=y CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE=y diff --git a/components/esp_driver_tsens/test_apps/temperature_sensor/sdkconfig.defaults b/components/esp_driver_tsens/test_apps/temperature_sensor/sdkconfig.defaults index e4bfc208a55b..a89cab2af3bf 100644 --- a/components/esp_driver_tsens/test_apps/temperature_sensor/sdkconfig.defaults +++ b/components/esp_driver_tsens/test_apps/temperature_sensor/sdkconfig.defaults @@ -1 +1,3 @@ CONFIG_ESP_TASK_WDT_EN=n +# primitives for checking sleep internal state +CONFIG_ESP_SLEEP_DEBUG=y diff --git a/components/esp_hw_support/include/esp_private/regi2c_ctrl.h b/components/esp_hw_support/include/esp_private/regi2c_ctrl.h index def755d81560..e77322677f80 100644 --- a/components/esp_hw_support/include/esp_private/regi2c_ctrl.h +++ b/components/esp_hw_support/include/esp_private/regi2c_ctrl.h @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2015-2022 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -70,6 +70,13 @@ void regi2c_analog_cali_reg_read(void); void regi2c_analog_cali_reg_write(void); #endif //#if ADC_CALI_PD_WORKAROUND +#if SOC_TEMPERATURE_SENSOR_SUPPORT_SLEEP_RETENTION +// regi2c would be powered down in light sleep, but measure range is recorded +// in regi2c, so this function is used for record. +void regi2c_tsens_reg_read(void); +void regi2c_tsens_reg_write(void); +#endif + /* Enable/Disable regi2c_saradc with calling these two functions. With reference count protection inside. Internal use only. diff --git a/components/esp_hw_support/regi2c_ctrl.c b/components/esp_hw_support/regi2c_ctrl.c index 1d63f6668643..14c8e4034518 100644 --- a/components/esp_hw_support/regi2c_ctrl.c +++ b/components/esp_hw_support/regi2c_ctrl.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2020-2023 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2020-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -12,6 +12,7 @@ #include "hal/regi2c_ctrl.h" #include "hal/regi2c_ctrl_ll.h" #include "esp_hw_log.h" +#include "soc/soc_caps.h" static portMUX_TYPE mux = portMUX_INITIALIZER_UNLOCKED; @@ -109,3 +110,21 @@ void regi2c_saradc_disable(void) regi2c_exit_critical(); } + +#if SOC_TEMPERATURE_SENSOR_SUPPORT_SLEEP_RETENTION + +#include "soc/regi2c_saradc.h" + +static DRAM_ATTR uint8_t dac_offset_regi2c; + +void IRAM_ATTR regi2c_tsens_reg_read(void) +{ + dac_offset_regi2c = REGI2C_READ_MASK(I2C_SAR_ADC, I2C_SARADC_TSENS_DAC); +} + +void IRAM_ATTR regi2c_tsens_reg_write(void) +{ + REGI2C_WRITE_MASK(I2C_SAR_ADC, I2C_SARADC_TSENS_DAC, dac_offset_regi2c); +} + +#endif diff --git a/components/esp_hw_support/sleep_modes.c b/components/esp_hw_support/sleep_modes.c index ed81134542d6..3a4ee01c9c0f 100644 --- a/components/esp_hw_support/sleep_modes.c +++ b/components/esp_hw_support/sleep_modes.c @@ -679,6 +679,9 @@ FORCE_INLINE_ATTR void misc_modules_sleep_prepare(uint32_t pd_flags, bool deep_s #endif #if REGI2C_ANA_CALI_PD_WORKAROUND regi2c_analog_cali_reg_read(); +#endif +#if SOC_TEMPERATURE_SENSOR_SUPPORT_SLEEP_RETENTION + regi2c_tsens_reg_read(); #endif } @@ -724,6 +727,9 @@ FORCE_INLINE_ATTR void misc_modules_wake_prepare(uint32_t pd_flags) #if REGI2C_ANA_CALI_PD_WORKAROUND regi2c_analog_cali_reg_write(); #endif +#if SOC_TEMPERATURE_SENSOR_SUPPORT_SLEEP_RETENTION + regi2c_tsens_reg_write(); +#endif } static IRAM_ATTR void sleep_low_power_clock_calibration(bool is_dslp) diff --git a/components/soc/esp32c5/include/soc/Kconfig.soc_caps.in b/components/soc/esp32c5/include/soc/Kconfig.soc_caps.in index 3ca17508c5da..d8776c93c859 100644 --- a/components/soc/esp32c5/include/soc/Kconfig.soc_caps.in +++ b/components/soc/esp32c5/include/soc/Kconfig.soc_caps.in @@ -1407,6 +1407,14 @@ config SOC_TEMPERATURE_SENSOR_INTR_SUPPORT bool default y +config SOC_TEMPERATURE_SENSOR_SUPPORT_SLEEP_RETENTION + bool + default y + +config SOC_TEMPERATURE_SENSOR_UNDER_PD_TOP_DOMAIN + bool + default y + config SOC_WIFI_HW_TSF bool default y diff --git a/components/soc/esp32c5/include/soc/retention_periph_defs.h b/components/soc/esp32c5/include/soc/retention_periph_defs.h index b21f1d3edeae..8f3db9db68b0 100644 --- a/components/soc/esp32c5/include/soc/retention_periph_defs.h +++ b/components/soc/esp32c5/include/soc/retention_periph_defs.h @@ -38,6 +38,7 @@ typedef enum periph_retention_module { SLEEP_RETENTION_MODULE_UART1 = 15, SLEEP_RETENTION_MODULE_I2S0 = 16, SLEEP_RETENTION_MODULE_ETM0 = 17, + SLEEP_RETENTION_MODULE_TEMP_SENSOR = 18, /* modem module, which includes WiFi, BLE and 802.15.4 */ SLEEP_RETENTION_MODULE_WIFI_MAC = 26, @@ -78,6 +79,7 @@ typedef enum periph_retention_module_bitmap { SLEEP_RETENTION_MODULE_BM_UART1 = BIT(SLEEP_RETENTION_MODULE_UART1), SLEEP_RETENTION_MODULE_BM_I2S0 = BIT(SLEEP_RETENTION_MODULE_I2S0), SLEEP_RETENTION_MODULE_BM_ETM0 = BIT(SLEEP_RETENTION_MODULE_ETM0), + SLEEP_RETENTION_MODULE_BM_TEMP_SENSOR = BIT(SLEEP_RETENTION_MODULE_TEMP_SENSOR), SLEEP_RETENTION_MODULE_BM_GDMA_CH0 = BIT(SLEEP_RETENTION_MODULE_GDMA_CH0), SLEEP_RETENTION_MODULE_BM_GDMA_CH1 = BIT(SLEEP_RETENTION_MODULE_GDMA_CH1), @@ -100,6 +102,7 @@ typedef enum periph_retention_module_bitmap { | SLEEP_RETENTION_MODULE_BM_UART1 \ | SLEEP_RETENTION_MODULE_BM_I2S0 \ | SLEEP_RETENTION_MODULE_BM_ETM0 \ + | SLEEP_RETENTION_MODULE_BM_TEMP_SENSOR \ ) #ifdef __cplusplus } diff --git a/components/soc/esp32c5/include/soc/soc_caps.h b/components/soc/esp32c5/include/soc/soc_caps.h index b98bce60b930..ba33e35b99db 100644 --- a/components/soc/esp32c5/include/soc/soc_caps.h +++ b/components/soc/esp32c5/include/soc/soc_caps.h @@ -591,6 +591,8 @@ #define SOC_TEMPERATURE_SENSOR_SUPPORT_FAST_RC (1) #define SOC_TEMPERATURE_SENSOR_SUPPORT_XTAL (1) #define SOC_TEMPERATURE_SENSOR_INTR_SUPPORT (1) +#define SOC_TEMPERATURE_SENSOR_SUPPORT_SLEEP_RETENTION (1) +#define SOC_TEMPERATURE_SENSOR_UNDER_PD_TOP_DOMAIN (1) /*------------------------------------ WI-FI CAPS ------------------------------------*/ #define SOC_WIFI_HW_TSF (1) /*!< Support hardware TSF */ diff --git a/components/soc/esp32c5/temperature_sensor_periph.c b/components/soc/esp32c5/temperature_sensor_periph.c index b0b6cfef7eb7..45410347bda7 100644 --- a/components/soc/esp32c5/temperature_sensor_periph.c +++ b/components/soc/esp32c5/temperature_sensor_periph.c @@ -4,7 +4,10 @@ * SPDX-License-Identifier: Apache-2.0 */ +#include +#include "soc/regdma.h" #include "soc/temperature_sensor_periph.h" +#include "soc/apb_saradc_reg.h" const temperature_sensor_attribute_t temperature_sensor_attributes[TEMPERATURE_SENSOR_ATTR_RANGE_NUM] = { /*Offset reg_val min max error */ @@ -14,3 +17,24 @@ const temperature_sensor_attribute_t temperature_sensor_attributes[TEMPERATURE_S { 1, 11, -30, 50, 2}, { 2, 10, -40, 20, 3}, }; + +// Temperature sensor sleep retention entries +// Temperature sensor registers require set the reg_update bit to make the configuration take effect + +/* Temperature sensor Registers Context + Include: APB_SARADC_INT_ENA_REG / + APB_SARADC_APB_TSENS_CTRL_REG / APB_SARADC_TSENS_CTRL2_REG / APB_TSENS_WAKE_REG / APB_TSENS_SAMPLE_REG +*/ +#define TEMPERATURE_SENSOR_RETENTION_REGS_CNT 5 +#define TEMPERATURE_SENSOR_RETENTION_MAP_BASE APB_SARADC_INT_ENA_REG +static const uint32_t temperature_sensor_regs_map[4] = {0x6c1, 0, 0, 0}; +static const regdma_entries_config_t temperature_sensor_regs_entries[] = { + [0] = {.config = REGDMA_LINK_ADDR_MAP_INIT(REGDMA_TSENS_LINK(0x00), TEMPERATURE_SENSOR_RETENTION_MAP_BASE, TEMPERATURE_SENSOR_RETENTION_MAP_BASE, TEMPERATURE_SENSOR_RETENTION_REGS_CNT, 0, 0, temperature_sensor_regs_map[0], temperature_sensor_regs_map[1], temperature_sensor_regs_map[2], temperature_sensor_regs_map[3]), \ + .owner = ENTRY(0) | ENTRY(2) }, \ +}; + +const temperature_sensor_reg_ctx_link_t temperature_sensor_regs_retention = { + .link_list = temperature_sensor_regs_entries, + .link_num = ARRAY_SIZE(temperature_sensor_regs_entries), + .module_id = SLEEP_RETENTION_MODULE_TEMP_SENSOR, +}; diff --git a/components/soc/esp32c6/include/soc/Kconfig.soc_caps.in b/components/soc/esp32c6/include/soc/Kconfig.soc_caps.in index 396d8ff0e079..297b260f12b4 100644 --- a/components/soc/esp32c6/include/soc/Kconfig.soc_caps.in +++ b/components/soc/esp32c6/include/soc/Kconfig.soc_caps.in @@ -1459,6 +1459,14 @@ config SOC_TEMPERATURE_SENSOR_SUPPORT_ETM bool default y +config SOC_TEMPERATURE_SENSOR_SUPPORT_SLEEP_RETENTION + bool + default y + +config SOC_TEMPERATURE_SENSOR_UNDER_PD_TOP_DOMAIN + bool + default y + config SOC_RNG_CLOCK_IS_INDEPENDENT bool default y diff --git a/components/soc/esp32c6/include/soc/retention_periph_defs.h b/components/soc/esp32c6/include/soc/retention_periph_defs.h index 5bba74ce3531..c7c3a452a13a 100644 --- a/components/soc/esp32c6/include/soc/retention_periph_defs.h +++ b/components/soc/esp32c6/include/soc/retention_periph_defs.h @@ -38,6 +38,7 @@ typedef enum periph_retention_module { SLEEP_RETENTION_MODULE_UART1 = 15, SLEEP_RETENTION_MODULE_I2S0 = 16, SLEEP_RETENTION_MODULE_ETM0 = 17, + SLEEP_RETENTION_MODULE_TEMP_SENSOR = 18, /* Modem module, which includes WiFi, BLE and 802.15.4 */ SLEEP_RETENTION_MODULE_WIFI_MAC = 26, @@ -72,6 +73,7 @@ typedef enum periph_retention_module_bitmap { SLEEP_RETENTION_MODULE_BM_UART1 = BIT(SLEEP_RETENTION_MODULE_UART1), SLEEP_RETENTION_MODULE_BM_I2S0 = BIT(SLEEP_RETENTION_MODULE_I2S0), SLEEP_RETENTION_MODULE_BM_ETM0 = BIT(SLEEP_RETENTION_MODULE_ETM0), + SLEEP_RETENTION_MODULE_BM_TEMP_SENSOR = BIT(SLEEP_RETENTION_MODULE_TEMP_SENSOR), /* modem module, which includes WiFi, BLE and 802.15.4 */ SLEEP_RETENTION_MODULE_BM_WIFI_MAC = BIT(SLEEP_RETENTION_MODULE_WIFI_MAC), SLEEP_RETENTION_MODULE_BM_WIFI_BB = BIT(SLEEP_RETENTION_MODULE_WIFI_BB), @@ -96,6 +98,7 @@ typedef enum periph_retention_module_bitmap { | SLEEP_RETENTION_MODULE_BM_UART1 \ | SLEEP_RETENTION_MODULE_BM_I2S0 \ | SLEEP_RETENTION_MODULE_BM_ETM0 \ + | SLEEP_RETENTION_MODULE_BM_TEMP_SENSOR \ ) #ifdef __cplusplus diff --git a/components/soc/esp32c6/include/soc/soc_caps.h b/components/soc/esp32c6/include/soc/soc_caps.h index 70835692ee81..bdae84ebd29b 100644 --- a/components/soc/esp32c6/include/soc/soc_caps.h +++ b/components/soc/esp32c6/include/soc/soc_caps.h @@ -574,6 +574,8 @@ #define SOC_TEMPERATURE_SENSOR_SUPPORT_XTAL (1) #define SOC_TEMPERATURE_SENSOR_INTR_SUPPORT (1) #define SOC_TEMPERATURE_SENSOR_SUPPORT_ETM (1) +#define SOC_TEMPERATURE_SENSOR_SUPPORT_SLEEP_RETENTION (1) +#define SOC_TEMPERATURE_SENSOR_UNDER_PD_TOP_DOMAIN (1) /*--------------------------------- RNG CAPS --------------------------------------------*/ #define SOC_RNG_CLOCK_IS_INDEPENDENT (1) diff --git a/components/soc/esp32c6/temperature_sensor_periph.c b/components/soc/esp32c6/temperature_sensor_periph.c index f5ad36f5a9f1..b1a189fe9b46 100644 --- a/components/soc/esp32c6/temperature_sensor_periph.c +++ b/components/soc/esp32c6/temperature_sensor_periph.c @@ -1,10 +1,13 @@ /* - * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ +#include +#include "soc/regdma.h" #include "soc/temperature_sensor_periph.h" +#include "soc/apb_saradc_reg.h" const temperature_sensor_attribute_t temperature_sensor_attributes[TEMPERATURE_SENSOR_ATTR_RANGE_NUM] = { /*Offset reg_val min max error */ @@ -14,3 +17,24 @@ const temperature_sensor_attribute_t temperature_sensor_attributes[TEMPERATURE_S { 1, 11, -30, 50, 2}, { 2, 10, -40, 20, 3}, }; + +// Temperature sensor sleep retention entries +// Temperature sensor registers require set the reg_update bit to make the configuration take effect + +/* Temperature sensor Registers Context + Include: APB_SARADC_INT_ENA_REG / + APB_SARADC_APB_TSENS_CTRL_REG / APB_SARADC_TSENS_CTRL2_REG / APB_TSENS_WAKE_REG / APB_TSENS_SAMPLE_REG +*/ +#define TEMPERATURE_SENSOR_RETENTION_REGS_CNT 5 +#define TEMPERATURE_SENSOR_RETENTION_MAP_BASE APB_SARADC_INT_ENA_REG +static const uint32_t temperature_sensor_regs_map[4] = {0x6c1, 0, 0, 0}; +static const regdma_entries_config_t temperature_sensor_regs_entries[] = { + [0] = {.config = REGDMA_LINK_ADDR_MAP_INIT(REGDMA_TSENS_LINK(0x00), TEMPERATURE_SENSOR_RETENTION_MAP_BASE, TEMPERATURE_SENSOR_RETENTION_MAP_BASE, TEMPERATURE_SENSOR_RETENTION_REGS_CNT, 0, 0, temperature_sensor_regs_map[0], temperature_sensor_regs_map[1], temperature_sensor_regs_map[2], temperature_sensor_regs_map[3]), \ + .owner = ENTRY(0) | ENTRY(2) }, \ +}; + +const temperature_sensor_reg_ctx_link_t temperature_sensor_regs_retention = { + .link_list = temperature_sensor_regs_entries, + .link_num = ARRAY_SIZE(temperature_sensor_regs_entries), + .module_id = SLEEP_RETENTION_MODULE_TEMP_SENSOR, +}; diff --git a/components/soc/esp32h2/include/soc/Kconfig.soc_caps.in b/components/soc/esp32h2/include/soc/Kconfig.soc_caps.in index 1330fbf23324..a2254cbb3cfd 100644 --- a/components/soc/esp32h2/include/soc/Kconfig.soc_caps.in +++ b/components/soc/esp32h2/include/soc/Kconfig.soc_caps.in @@ -1423,6 +1423,14 @@ config SOC_TEMPERATURE_SENSOR_SUPPORT_ETM bool default y +config SOC_TEMPERATURE_SENSOR_SUPPORT_SLEEP_RETENTION + bool + default y + +config SOC_TEMPERATURE_SENSOR_UNDER_PD_TOP_DOMAIN + bool + default y + config SOC_RNG_CLOCK_IS_INDEPENDENT bool default y diff --git a/components/soc/esp32h2/include/soc/retention_periph_defs.h b/components/soc/esp32h2/include/soc/retention_periph_defs.h index 372e43e981c9..e3b7c020762a 100644 --- a/components/soc/esp32h2/include/soc/retention_periph_defs.h +++ b/components/soc/esp32h2/include/soc/retention_periph_defs.h @@ -39,6 +39,7 @@ typedef enum periph_retention_module { SLEEP_RETENTION_MODULE_UART1 = 16, SLEEP_RETENTION_MODULE_I2S0 = 17, SLEEP_RETENTION_MODULE_ETM0 = 18, + SLEEP_RETENTION_MODULE_TEMP_SENSOR = 19, /* Modem module, which includes BLE and 802.15.4 */ SLEEP_RETENTION_MODULE_BLE_MAC = 28, @@ -72,6 +73,7 @@ typedef enum periph_retention_module_bitmap { SLEEP_RETENTION_MODULE_BM_UART1 = BIT(SLEEP_RETENTION_MODULE_UART1), SLEEP_RETENTION_MODULE_BM_I2S0 = BIT(SLEEP_RETENTION_MODULE_I2S0), SLEEP_RETENTION_MODULE_BM_ETM0 = BIT(SLEEP_RETENTION_MODULE_ETM0), + SLEEP_RETENTION_MODULE_BM_TEMP_SENSOR = BIT(SLEEP_RETENTION_MODULE_TEMP_SENSOR), /* modem module, which includes BLE and 802.15.4 */ SLEEP_RETENTION_MODULE_BM_BLE_MAC = BIT(SLEEP_RETENTION_MODULE_BLE_MAC), SLEEP_RETENTION_MODULE_BM_BT_BB = BIT(SLEEP_RETENTION_MODULE_BT_BB), @@ -95,6 +97,7 @@ typedef enum periph_retention_module_bitmap { | SLEEP_RETENTION_MODULE_BM_UART1 \ | SLEEP_RETENTION_MODULE_BM_I2S0 \ | SLEEP_RETENTION_MODULE_BM_ETM0 \ + | SLEEP_RETENTION_MODULE_BM_TEMP_SENSOR \ ) #ifdef __cplusplus diff --git a/components/soc/esp32h2/include/soc/soc_caps.h b/components/soc/esp32h2/include/soc/soc_caps.h index 26110b48eba6..1fc679eea083 100644 --- a/components/soc/esp32h2/include/soc/soc_caps.h +++ b/components/soc/esp32h2/include/soc/soc_caps.h @@ -559,6 +559,8 @@ #define SOC_TEMPERATURE_SENSOR_SUPPORT_XTAL (1) #define SOC_TEMPERATURE_SENSOR_INTR_SUPPORT (1) #define SOC_TEMPERATURE_SENSOR_SUPPORT_ETM (1) +#define SOC_TEMPERATURE_SENSOR_SUPPORT_SLEEP_RETENTION (1) +#define SOC_TEMPERATURE_SENSOR_UNDER_PD_TOP_DOMAIN (1) /*--------------------------------- RNG CAPS --------------------------------------------*/ #define SOC_RNG_CLOCK_IS_INDEPENDENT (1) diff --git a/components/soc/esp32h2/temperature_sensor_periph.c b/components/soc/esp32h2/temperature_sensor_periph.c index e75c60b31783..348567d3f2f1 100644 --- a/components/soc/esp32h2/temperature_sensor_periph.c +++ b/components/soc/esp32h2/temperature_sensor_periph.c @@ -1,10 +1,14 @@ /* - * SPDX-FileCopyrightText: 2019-2022 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2019-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ +#include +#include "soc/regdma.h" #include "soc/temperature_sensor_periph.h" +#include "soc/apb_saradc_reg.h" + const temperature_sensor_attribute_t temperature_sensor_attributes[TEMPERATURE_SENSOR_ATTR_RANGE_NUM] = { /*Offset reg_val min max error */ @@ -14,3 +18,24 @@ const temperature_sensor_attribute_t temperature_sensor_attributes[TEMPERATURE_S { 1, 11, -30, 50, 2}, { 2, 10, -40, 20, 3}, }; + +// Temperature sensor sleep retention entries +// Temperature sensor registers require set the reg_update bit to make the configuration take effect + +/* Temperature sensor Registers Context + Include: APB_SARADC_INT_ENA_REG / + APB_SARADC_APB_TSENS_CTRL_REG / APB_SARADC_TSENS_CTRL2_REG / APB_TSENS_WAKE_REG / APB_TSENS_SAMPLE_REG +*/ +#define TEMPERATURE_SENSOR_RETENTION_REGS_CNT 5 +#define TEMPERATURE_SENSOR_RETENTION_MAP_BASE APB_SARADC_INT_ENA_REG +static const uint32_t temperature_sensor_regs_map[4] = {0x6c1, 0, 0, 0}; +static const regdma_entries_config_t temperature_sensor_regs_entries[] = { + [0] = {.config = REGDMA_LINK_ADDR_MAP_INIT(REGDMA_TSENS_LINK(0x00), TEMPERATURE_SENSOR_RETENTION_MAP_BASE, TEMPERATURE_SENSOR_RETENTION_MAP_BASE, TEMPERATURE_SENSOR_RETENTION_REGS_CNT, 0, 0, temperature_sensor_regs_map[0], temperature_sensor_regs_map[1], temperature_sensor_regs_map[2], temperature_sensor_regs_map[3]), \ + .owner = ENTRY(0) | ENTRY(2) }, \ +}; + +const temperature_sensor_reg_ctx_link_t temperature_sensor_regs_retention = { + .link_list = temperature_sensor_regs_entries, + .link_num = ARRAY_SIZE(temperature_sensor_regs_entries), + .module_id = SLEEP_RETENTION_MODULE_TEMP_SENSOR, +}; diff --git a/components/soc/esp32p4/include/soc/Kconfig.soc_caps.in b/components/soc/esp32p4/include/soc/Kconfig.soc_caps.in index f8319e722ee2..fcc964add8b7 100644 --- a/components/soc/esp32p4/include/soc/Kconfig.soc_caps.in +++ b/components/soc/esp32p4/include/soc/Kconfig.soc_caps.in @@ -1907,6 +1907,10 @@ config SOC_TEMPERATURE_SENSOR_SUPPORT_ETM bool default y +config SOC_TEMPERATURE_SENSOR_SUPPORT_SLEEP_RETENTION + bool + default y + config SOC_MEM_TCM_SUPPORTED bool default y diff --git a/components/soc/esp32p4/include/soc/soc_caps.h b/components/soc/esp32p4/include/soc/soc_caps.h index a8a90bda8676..70755ca405f5 100644 --- a/components/soc/esp32p4/include/soc/soc_caps.h +++ b/components/soc/esp32p4/include/soc/soc_caps.h @@ -722,6 +722,8 @@ #define SOC_TEMPERATURE_SENSOR_INTR_SUPPORT (1) #define SOC_TSENS_IS_INDEPENDENT_FROM_ADC (1) /*!< Temperature sensor is a separate module, not share regs with ADC */ #define SOC_TEMPERATURE_SENSOR_SUPPORT_ETM (1) +// temperature sensor on esp32p4 in under low power domain. +#define SOC_TEMPERATURE_SENSOR_SUPPORT_SLEEP_RETENTION (1) /*-------------------------- Memory CAPS --------------------------*/ #define SOC_MEM_TCM_SUPPORTED (1) diff --git a/components/soc/include/soc/regdma.h b/components/soc/include/soc/regdma.h index 15186cbb95a8..6dbc3cbc78ba 100644 --- a/components/soc/include/soc/regdma.h +++ b/components/soc/include/soc/regdma.h @@ -55,6 +55,7 @@ extern "C" { #define REGDMA_TG1_TIMER_LINK(_pri) ((0x1D << 8) | _pri) #define REGDMA_I2S_LINK(_pri) ((0x1E << 8) | _pri) #define REGDMA_ETM_LINK(_pri) ((0x1F << 8) | _pri) +#define REGDMA_TSENS_LINK(_pri) ((0x20 << 8) | _pri) #define REGDMA_MODEM_FE_LINK(_pri) ((0xFF << 8) | _pri) #define REGDMA_LINK_PRI_SYS_CLK REGDMA_LINK_PRI_0 @@ -74,6 +75,7 @@ extern "C" { #define REGDMA_LINK_PRI_I2C REGDMA_LINK_PRI_GENERAL_PERIPH #define REGDMA_LINK_PRI_I2S REGDMA_LINK_PRI_GENERAL_PERIPH #define REGDMA_LINK_PRI_UART REGDMA_LINK_PRI_GENERAL_PERIPH +#define REGDMA_LINK_PRI_TEMPERATURE_SENSOR REGDMA_LINK_PRI_GENERAL_PERIPH typedef enum { REGDMA_LINK_PRI_0 = 0, diff --git a/components/soc/include/soc/temperature_sensor_periph.h b/components/soc/include/soc/temperature_sensor_periph.h index 737428193506..d52739255415 100644 --- a/components/soc/include/soc/temperature_sensor_periph.h +++ b/components/soc/include/soc/temperature_sensor_periph.h @@ -1,11 +1,16 @@ /* - * SPDX-FileCopyrightText: 2020-2022 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2020-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ #pragma once +#include "soc/regdma.h" +#if SOC_TEMPERATURE_SENSOR_SUPPORT_SLEEP_RETENTION +#include "soc/retention_periph_defs.h" +#endif + #ifdef __cplusplus extern "C" { #endif @@ -22,6 +27,16 @@ typedef struct { extern const temperature_sensor_attribute_t temperature_sensor_attributes[TEMPERATURE_SENSOR_ATTR_RANGE_NUM]; +#if SOC_TEMPERATURE_SENSOR_SUPPORT_SLEEP_RETENTION +typedef struct { + const regdma_entries_config_t *link_list; + uint32_t link_num; + periph_retention_module_t module_id; +} temperature_sensor_reg_ctx_link_t; + +extern const temperature_sensor_reg_ctx_link_t temperature_sensor_regs_retention; +#endif // SOC_TEMPERATURE_SENSOR_SUPPORT_SLEEP_RETENTION + #ifdef __cplusplus } #endif diff --git a/docs/en/api-reference/peripherals/temp_sensor.rst b/docs/en/api-reference/peripherals/temp_sensor.rst index 22b7e1a6ce3d..ca7231e6e1e2 100644 --- a/docs/en/api-reference/peripherals/temp_sensor.rst +++ b/docs/en/api-reference/peripherals/temp_sensor.rst @@ -59,6 +59,7 @@ In order to install a built-in temperature sensor instance, the first thing is t - :cpp:member:`range_min`: The minimum value of the testing range you have evaluated. - :cpp:member:`range_max`: The maximum value of the testing range you have evaluated. +- :cpp:member:`allow_pd` configures if the driver allows the system to power down the peripheral in light sleep mode. Before entering sleep, the system will backup the temperature sensor register context, which will be restored later when the system exit the sleep mode. Powering down the peripheral can save more power, but at the cost of more memory consumed to save the register context. It's a tradeoff between power consumption and memory consumption. This configuration option relies on specific hardware feature, if you enable it on an unsupported chip, you will see error message like ``not able to power down in light sleep``. After the ranges are set, the structure could be passed to :cpp:func:`temperature_sensor_install`, which will instantiate the temperature sensor instance and return a handle. diff --git a/docs/en/api-reference/system/power_management.rst b/docs/en/api-reference/system/power_management.rst index f583b86718c8..7f72750dcf52 100644 --- a/docs/en/api-reference/system/power_management.rst +++ b/docs/en/api-reference/system/power_management.rst @@ -156,6 +156,7 @@ The following peripheral drivers are not aware of DFS yet. Applications need to :SOC_I2C_SUPPORT_SLEEP_RETENTION: - I2C :SOC_I2S_SUPPORT_SLEEP_RETENTION: - I2S :SOC_UART_SUPPORT_SLEEP_RETENTION: - All UARTs + :SOC_TEMPERATURE_SENSOR_SUPPORT_SLEEP_RETENTION: - Temperature Sensor The following peripherals are not yet supported: diff --git a/docs/zh_CN/api-reference/peripherals/temp_sensor.rst b/docs/zh_CN/api-reference/peripherals/temp_sensor.rst index bffe7b669438..a53aace2fbd3 100644 --- a/docs/zh_CN/api-reference/peripherals/temp_sensor.rst +++ b/docs/zh_CN/api-reference/peripherals/temp_sensor.rst @@ -59,6 +59,7 @@ - :cpp:member:`range_min`:所测量温度范围的最小值。 - :cpp:member:`range_max`:所测量温度范围的最大值。 +- :cpp:member:`allow_pd` 配置驱动程序是否允许系统在睡眠模式下关闭外设电源。在进入睡眠之前,系统将备份温度传感器寄存器上下文,当系统退出睡眠模式时,这些上下文将被恢复。关闭外设可以节省更多功耗,但代价是消耗更多内存来保存寄存器上下文。你需要在功耗和内存消耗之间做权衡。此配置选项依赖于特定的硬件功能,如果在不支持的芯片上启用它,你将看到类似 ``not able to power down in light sleep`` 的错误消息。 设置好温度范围后,将配置结构体传递给 :cpp:func:`temperature_sensor_install`,该函数将创建温度传感器模块并返回句柄。 diff --git a/docs/zh_CN/api-reference/system/power_management.rst b/docs/zh_CN/api-reference/system/power_management.rst index 3ea51dc30bb6..0d64025cd986 100644 --- a/docs/zh_CN/api-reference/system/power_management.rst +++ b/docs/zh_CN/api-reference/system/power_management.rst @@ -156,6 +156,7 @@ ESP-IDF 中集成的电源管理算法可以根据应用程序组件的需求, :SOC_I2S_SUPPORT_SLEEP_RETENTION: - I2S :SOC_ETM_SUPPORT_SLEEP_RETENTION: - ETM :SOC_UART_SUPPORT_SLEEP_RETENTION: - All UARTs + :SOC_TEMPERATURE_SENSOR_SUPPORT_SLEEP_RETENTION: - Temperature Sensor 以下外设尚未支持: From 3957e59f1a9ad67f637c65d68e062e9940e49df3 Mon Sep 17 00:00:00 2001 From: "harshal.patil" Date: Thu, 10 Oct 2024 12:34:32 +0530 Subject: [PATCH 204/365] feat(mbedtls/esp_crt_bundle): Move dummy cert to .rodata to save 408B from dram Co-authored-by: Hanno --- components/mbedtls/CMakeLists.txt | 8 +++++++- .../mbedtls/esp_crt_bundle/esp_crt_bundle.c | 7 ++++++- .../esp_crt_bundle/include/esp_crt_bundle.h | 15 ++++++++++++--- .../port/dynamic/esp_mbedtls_dynamic_impl.c | 18 +++++++++++++++++- .../port/dynamic/esp_mbedtls_dynamic_impl.h | 1 + 5 files changed, 43 insertions(+), 6 deletions(-) diff --git a/components/mbedtls/CMakeLists.txt b/components/mbedtls/CMakeLists.txt index 94033218cef4..d3f4fe40a7d6 100644 --- a/components/mbedtls/CMakeLists.txt +++ b/components/mbedtls/CMakeLists.txt @@ -96,7 +96,13 @@ idf_build_get_property(python PYTHON) set(Python3_EXECUTABLE ${python}) # Needed to for include_next includes to work from within mbedtls -include_directories("${COMPONENT_DIR}/port/include") +set(include_dirs "${COMPONENT_DIR}/port/include") + +if(CONFIG_MBEDTLS_CERTIFICATE_BUNDLE) + list(APPEND include_dirs "${COMPONENT_DIR}/esp_crt_bundle/include") +endif() + +include_directories(${include_dirs}) # Needed to for mbedtls_rom includes to work from within mbedtls if(CONFIG_MBEDTLS_USE_CRYPTO_ROM_IMPL) diff --git a/components/mbedtls/esp_crt_bundle/esp_crt_bundle.c b/components/mbedtls/esp_crt_bundle/esp_crt_bundle.c index dc75d0cff42a..65f817f7bdd2 100644 --- a/components/mbedtls/esp_crt_bundle/esp_crt_bundle.c +++ b/components/mbedtls/esp_crt_bundle/esp_crt_bundle.c @@ -54,7 +54,7 @@ static const char *TAG = "esp-x509-crt-bundle"; /* a dummy certificate so that * cacert_ptr passes non-NULL check during handshake */ -static mbedtls_x509_crt s_dummy_crt; +static const mbedtls_x509_crt s_dummy_crt; extern const uint8_t x509_crt_imported_bundle_bin_start[] asm("_binary_x509_crt_bundle_start"); extern const uint8_t x509_crt_imported_bundle_bin_end[] asm("_binary_x509_crt_bundle_end"); @@ -368,3 +368,8 @@ esp_err_t esp_crt_bundle_set(const uint8_t *x509_bundle, size_t bundle_size) { return esp_crt_bundle_init(x509_bundle, bundle_size); } + +bool esp_crt_bundle_in_use(const mbedtls_x509_crt* ca_chain) +{ + return ((ca_chain == &s_dummy_crt) ? true : false); +} diff --git a/components/mbedtls/esp_crt_bundle/include/esp_crt_bundle.h b/components/mbedtls/esp_crt_bundle/include/esp_crt_bundle.h index 49069185b3ab..61c09f0bd035 100644 --- a/components/mbedtls/esp_crt_bundle/include/esp_crt_bundle.h +++ b/components/mbedtls/esp_crt_bundle/include/esp_crt_bundle.h @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2017-2022 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2017-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -27,7 +27,7 @@ extern "C" { * * @return * - ESP_OK if adding certificates was successful. - * - Other if an error occured or an action must be taken by the calling process. + * - Other if an error occurred or an action must be taken by the calling process. */ esp_err_t esp_crt_bundle_attach(void *conf); @@ -55,10 +55,19 @@ void esp_crt_bundle_detach(mbedtls_ssl_config *conf); * * @return * - ESP_OK if adding certificates was successful. - * - Other if an error occured or an action must be taken by the calling process. + * - Other if an error occurred or an action must be taken by the calling process. */ esp_err_t esp_crt_bundle_set(const uint8_t *x509_bundle, size_t bundle_size); +/** + * @brief Check if the given CA certificate chain is the default "dummy" + * certificate chain attached by the esp_crt_bundle + * + * @param ca_chain A pointer to the CA chain. + * @return true if the ca_chain is the dummy CA chain attached by esp_crt_bundle + * @return false otherwise + */ +bool esp_crt_bundle_in_use(const mbedtls_x509_crt* ca_chain); #ifdef __cplusplus } diff --git a/components/mbedtls/port/dynamic/esp_mbedtls_dynamic_impl.c b/components/mbedtls/port/dynamic/esp_mbedtls_dynamic_impl.c index a5ea9fb337a9..d76f6b5049ca 100644 --- a/components/mbedtls/port/dynamic/esp_mbedtls_dynamic_impl.c +++ b/components/mbedtls/port/dynamic/esp_mbedtls_dynamic_impl.c @@ -1,11 +1,16 @@ /* - * SPDX-FileCopyrightText: 2020-2022 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2020-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ #include #include "esp_mbedtls_dynamic_impl.h" +#include "sdkconfig.h" + +#if CONFIG_MBEDTLS_CERTIFICATE_BUNDLE +#include "esp_crt_bundle.h" +#endif #define COUNTER_SIZE (8) #define CACHE_IV_SIZE (16) @@ -532,7 +537,18 @@ void esp_mbedtls_free_cacert(mbedtls_ssl_context *ssl) if (ssl->MBEDTLS_PRIVATE(conf)->MBEDTLS_PRIVATE(ca_chain)) { mbedtls_ssl_config *conf = (mbedtls_ssl_config * )mbedtls_ssl_context_get_config(ssl); +#if CONFIG_MBEDTLS_CERTIFICATE_BUNDLE + /* In case of mbedtls certificate bundle, we attach a "static const" + * dummy cert, thus we need to avoid the write operations (memset()) + * performed by `mbedtls_x509_crt_free()` + */ + if (!esp_crt_bundle_in_use(conf->MBEDTLS_PRIVATE(ca_chain))) { + mbedtls_x509_crt_free(conf->MBEDTLS_PRIVATE(ca_chain)); + } +#else mbedtls_x509_crt_free(conf->MBEDTLS_PRIVATE(ca_chain)); +#endif + conf->MBEDTLS_PRIVATE(ca_chain) = NULL; } } diff --git a/components/mbedtls/port/dynamic/esp_mbedtls_dynamic_impl.h b/components/mbedtls/port/dynamic/esp_mbedtls_dynamic_impl.h index 72641b3a5495..ad7a716be588 100644 --- a/components/mbedtls/port/dynamic/esp_mbedtls_dynamic_impl.h +++ b/components/mbedtls/port/dynamic/esp_mbedtls_dynamic_impl.h @@ -24,6 +24,7 @@ #include "mbedtls/ssl.h" #include "mbedtls/platform.h" #include "esp_log.h" +#include "sdkconfig.h" #define TRACE_CHECK(_fn, _state) \ ({ \ From 1fe57a5d8e1e2ad37acc26ac6f2b8590188e949a Mon Sep 17 00:00:00 2001 From: Sudeep Mohanty Date: Wed, 16 Oct 2024 09:59:45 +0200 Subject: [PATCH 205/365] fix(freertos): Fixed SMP race condition in xStreamBufferSend() This commit fixes a race condition in dual-core SMP mode where in the xStreamBufferSend() makes the xTaskWaitingToSend NULL but it may have already been evaluated to not be NULL by xStreamBufferReceive() running on another core and eventually leading to a crash in tasks.c. --- components/freertos/FreeRTOS-Kernel/idf_changes.md | 2 ++ components/freertos/FreeRTOS-Kernel/stream_buffer.c | 13 ++++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/components/freertos/FreeRTOS-Kernel/idf_changes.md b/components/freertos/FreeRTOS-Kernel/idf_changes.md index 83bee6843322..7bf620e6e413 100644 --- a/components/freertos/FreeRTOS-Kernel/idf_changes.md +++ b/components/freertos/FreeRTOS-Kernel/idf_changes.md @@ -125,6 +125,8 @@ The following functions were modified to accommodate SMP behavior: - Added extra check to see if current blocking task has already been deleted by the other core. - `xStreamBufferReceive()` - Added a critical section for setting `xTaskWaitingToReceive` to `NULL` so that the write is SMP safe. +- `xStreamBufferSend()` + - Added a critical section for setting `xTaskWaitingToSend` to `NULL` so that the write is SMP safe. ### Critical Section Changes diff --git a/components/freertos/FreeRTOS-Kernel/stream_buffer.c b/components/freertos/FreeRTOS-Kernel/stream_buffer.c index 988eb3f5f7f9..04d67a20056b 100644 --- a/components/freertos/FreeRTOS-Kernel/stream_buffer.c +++ b/components/freertos/FreeRTOS-Kernel/stream_buffer.c @@ -774,7 +774,18 @@ size_t xStreamBufferSend( StreamBufferHandle_t xStreamBuffer, traceBLOCKING_ON_STREAM_BUFFER_SEND( xStreamBuffer ); ( void ) xTaskNotifyWait( ( uint32_t ) 0, ( uint32_t ) 0, NULL, xTicksToWait ); - pxStreamBuffer->xTaskWaitingToSend = NULL; + /* In SMP mode, the task may have been woken and scheduled on + * another core. Hence, we must clear the xTaskWaitingToSend + * handle in a critical section. */ + #if ( configNUMBER_OF_CORES > 1 ) + taskENTER_CRITICAL( &( pxStreamBuffer->xStreamBufferLock ) ); + #endif /* configNUMBER_OF_CORES > 1 */ + { + pxStreamBuffer->xTaskWaitingToSend = NULL; + } + #if ( configNUMBER_OF_CORES > 1 ) + taskEXIT_CRITICAL( &( pxStreamBuffer->xStreamBufferLock ) ); + #endif /* configNUMBER_OF_CORES > 1 */ } while( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdFALSE ); } else From 15c895fc6a41a9df43b1798c92960994c407eb58 Mon Sep 17 00:00:00 2001 From: zhanghaipeng Date: Wed, 16 Oct 2024 20:11:30 +0800 Subject: [PATCH 206/365] feat(ble/bluedroid): Support enable BLE hci log by API --- components/bt/common/hci_log/bt_hci_log.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/components/bt/common/hci_log/bt_hci_log.c b/components/bt/common/hci_log/bt_hci_log.c index e35bf1a7a688..ac85179a7070 100644 --- a/components/bt/common/hci_log/bt_hci_log.c +++ b/components/bt/common/hci_log/bt_hci_log.c @@ -305,19 +305,27 @@ void bt_hci_log_data_show(bt_hci_log_t *p_hci_log_ctl) osi_mutex_unlock(&mutex_lock); } +static bool enable_hci_log_flag = true; +void bt_hci_log_record_hci_enable(bool enable) +{ + enable_hci_log_flag = enable; +} esp_err_t IRAM_ATTR bt_hci_log_record_hci_data(uint8_t data_type, uint8_t *data, uint8_t data_len) { + if (!enable_hci_log_flag) return ESP_OK; return bt_hci_log_record_data(&g_bt_hci_log_data_ctl, NULL, data_type, data, data_len); } esp_err_t IRAM_ATTR bt_hci_log_record_custom_data(char *string, uint8_t *data, uint8_t data_len) { + if (!enable_hci_log_flag) return ESP_OK; return bt_hci_log_record_data(&g_bt_hci_log_data_ctl, string, HCI_LOG_DATA_TYPE_SELF_DEFINE, data, data_len); } esp_err_t IRAM_ATTR bt_hci_log_record_hci_adv(uint8_t data_type, uint8_t *data, uint8_t data_len) { + if (!enable_hci_log_flag) return ESP_OK; return bt_hci_log_record_data(&g_bt_hci_log_adv_ctl, NULL, data_type, data, data_len); } From daf788242172ff0e00123ce866ec230f521b266f Mon Sep 17 00:00:00 2001 From: xuxiao Date: Wed, 16 Oct 2024 12:08:55 +0800 Subject: [PATCH 207/365] fix(wifi): fix can not tx in low rssi during iperf test --- components/esp_wifi/lib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/esp_wifi/lib b/components/esp_wifi/lib index 0da5a8a5dfd8..5dca4edbc4c5 160000 --- a/components/esp_wifi/lib +++ b/components/esp_wifi/lib @@ -1 +1 @@ -Subproject commit 0da5a8a5dfd8914496c5975af7d8903a44f8bced +Subproject commit 5dca4edbc4c5e20406878926fb24e9bbfcb67e88 From 3f838d7843835215334faddd0c22add48a4657fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20M=C3=BAdry?= Date: Tue, 15 Oct 2024 22:28:26 +0200 Subject: [PATCH 208/365] fix(sdmmc): Improve SD card state checking after write/read command --- components/sdmmc/include/sd_protocol_defs.h | 3 ++- components/sdmmc/sdmmc_cmd.c | 9 +++++++-- components/sdmmc/sdmmc_mmc.c | 4 ++-- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/components/sdmmc/include/sd_protocol_defs.h b/components/sdmmc/include/sd_protocol_defs.h index a1b6a8ec0222..f3252be38fc5 100644 --- a/components/sdmmc/include/sd_protocol_defs.h +++ b/components/sdmmc/include/sd_protocol_defs.h @@ -108,6 +108,7 @@ extern "C" { #define MMC_R1_CURRENT_STATE_POS (9) #define MMC_R1_CURRENT_STATE_MASK (0x1E00)/* card current state */ #define MMC_R1_CURRENT_STATE_TRAN (4) +#define MMC_R1_CURRENT_STATE_STATUS(status) ((status & MMC_R1_CURRENT_STATE_MASK) >> MMC_R1_CURRENT_STATE_POS) /* SPI mode R1 response type bits */ #define SD_SPI_R1_IDLE_STATE (1<<0) @@ -424,7 +425,7 @@ extern "C" { * * 67 45 23 01 ef cd ab 89 * - * MMC_RSP_BITS will extact bits as follows: + * MMC_RSP_BITS will extract bits as follows: * * start=0 len=4 -> result=0x00000007 * start=0 len=12 -> result=0x00000567 diff --git a/components/sdmmc/sdmmc_cmd.c b/components/sdmmc/sdmmc_cmd.c index fb18a9d69629..24acb6cb4a0b 100644 --- a/components/sdmmc/sdmmc_cmd.c +++ b/components/sdmmc/sdmmc_cmd.c @@ -444,6 +444,11 @@ esp_err_t sdmmc_write_sectors(sdmmc_card_t* card, const void* src, return err; } +static bool mmc_ready_for_data(uint32_t status) +{ + return (status & MMC_R1_READY_FOR_DATA) && (MMC_R1_CURRENT_STATE_STATUS(status) == MMC_R1_CURRENT_STATE_TRAN); +} + esp_err_t sdmmc_write_sectors_dma(sdmmc_card_t* card, const void* src, size_t start_block, size_t block_count, size_t buffer_len) { @@ -480,7 +485,7 @@ esp_err_t sdmmc_write_sectors_dma(sdmmc_card_t* card, const void* src, int64_t t0 = esp_timer_get_time(); int64_t t1 = 0; /* SD mode: wait for the card to become idle based on R1 status */ - while (!host_is_spi(card) && !(status & MMC_R1_READY_FOR_DATA)) { + while (!host_is_spi(card) && !mmc_ready_for_data(status)) { t1 = esp_timer_get_time(); if (t1 - t0 > SDMMC_READY_FOR_DATA_TIMEOUT_US) { ESP_LOGE(TAG, "write sectors dma - timeout"); @@ -602,7 +607,7 @@ esp_err_t sdmmc_read_sectors_dma(sdmmc_card_t* card, void* dst, int64_t t0 = esp_timer_get_time(); int64_t t1 = 0; /* SD mode: wait for the card to become idle based on R1 status */ - while (!host_is_spi(card) && !(status & MMC_R1_READY_FOR_DATA)) { + while (!host_is_spi(card) && !mmc_ready_for_data(status)) { t1 = esp_timer_get_time(); if (t1 - t0 > SDMMC_READY_FOR_DATA_TIMEOUT_US) { ESP_LOGE(TAG, "read sectors dma - timeout"); diff --git a/components/sdmmc/sdmmc_mmc.c b/components/sdmmc/sdmmc_mmc.c index e3f44bc865b5..23f18272f416 100644 --- a/components/sdmmc/sdmmc_mmc.c +++ b/components/sdmmc/sdmmc_mmc.c @@ -272,8 +272,8 @@ esp_err_t sdmmc_init_mmc_check_ext_csd(sdmmc_card_t* card) ESP_LOGE(TAG, "%s: send_status returned 0x%x", __func__, err); goto out; } - status = ((status & MMC_R1_CURRENT_STATE_MASK) >> MMC_R1_CURRENT_STATE_POS); - if (status != MMC_R1_CURRENT_STATE_TRAN) { + + if (MMC_R1_CURRENT_STATE_STATUS(status) != MMC_R1_CURRENT_STATE_TRAN) { ESP_LOGE(TAG, "%s: card not in transfer state", __func__); err = ESP_ERR_INVALID_STATE; goto out; From 9c7609a0e789e6607d00656620ab5e7c6e7bd608 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20M=C3=BAdry?= Date: Tue, 15 Oct 2024 23:22:27 +0200 Subject: [PATCH 209/365] fix(sdmmc): Send status (CMD13) even if write/read command fails --- components/sdmmc/include/sd_protocol_defs.h | 2 +- components/sdmmc/sdmmc_cmd.c | 30 ++++++++++++++++----- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/components/sdmmc/include/sd_protocol_defs.h b/components/sdmmc/include/sd_protocol_defs.h index f3252be38fc5..8eb52ca6b0ab 100644 --- a/components/sdmmc/include/sd_protocol_defs.h +++ b/components/sdmmc/include/sd_protocol_defs.h @@ -108,7 +108,7 @@ extern "C" { #define MMC_R1_CURRENT_STATE_POS (9) #define MMC_R1_CURRENT_STATE_MASK (0x1E00)/* card current state */ #define MMC_R1_CURRENT_STATE_TRAN (4) -#define MMC_R1_CURRENT_STATE_STATUS(status) ((status & MMC_R1_CURRENT_STATE_MASK) >> MMC_R1_CURRENT_STATE_POS) +#define MMC_R1_CURRENT_STATE_STATUS(status) (((status) & MMC_R1_CURRENT_STATE_MASK) >> MMC_R1_CURRENT_STATE_POS) /* SPI mode R1 response type bits */ #define SD_SPI_R1_IDLE_STATE (1<<0) diff --git a/components/sdmmc/sdmmc_cmd.c b/components/sdmmc/sdmmc_cmd.c index 24acb6cb4a0b..9d54ba3e1c2b 100644 --- a/components/sdmmc/sdmmc_cmd.c +++ b/components/sdmmc/sdmmc_cmd.c @@ -444,7 +444,7 @@ esp_err_t sdmmc_write_sectors(sdmmc_card_t* card, const void* src, return err; } -static bool mmc_ready_for_data(uint32_t status) +static bool sdmmc_ready_for_data(uint32_t status) { return (status & MMC_R1_READY_FOR_DATA) && (MMC_R1_CURRENT_STATE_STATUS(status) == MMC_R1_CURRENT_STATE_TRAN); } @@ -474,18 +474,26 @@ esp_err_t sdmmc_write_sectors_dma(sdmmc_card_t* card, const void* src, } else { cmd.arg = start_block * block_size; } + + uint32_t status = 0; esp_err_t err = sdmmc_send_cmd(card, &cmd); + esp_err_t err_cmd13 = sdmmc_send_cmd_send_status(card, &status); + if (err != ESP_OK) { - ESP_LOGE(TAG, "%s: sdmmc_send_cmd returned 0x%x", __func__, err); + if (err_cmd13 == ESP_OK) { + ESP_LOGE(TAG, "%s: sdmmc_send_cmd returned 0x%x, status 0x%" PRIx32, __func__, err, status); + } else { + ESP_LOGE(TAG, "%s: sdmmc_send_cmd returned 0x%x, failed to get status (0x%x)", __func__, err, err_cmd13); + } return err; } - uint32_t status = 0; + size_t count = 0; int64_t yield_delay_us = 100 * 1000; // initially 100ms int64_t t0 = esp_timer_get_time(); int64_t t1 = 0; /* SD mode: wait for the card to become idle based on R1 status */ - while (!host_is_spi(card) && !mmc_ready_for_data(status)) { + while (!host_is_spi(card) && !sdmmc_ready_for_data(status)) { t1 = esp_timer_get_time(); if (t1 - t0 > SDMMC_READY_FOR_DATA_TIMEOUT_US) { ESP_LOGE(TAG, "write sectors dma - timeout"); @@ -596,18 +604,26 @@ esp_err_t sdmmc_read_sectors_dma(sdmmc_card_t* card, void* dst, } else { cmd.arg = start_block * block_size; } + + uint32_t status = 0; esp_err_t err = sdmmc_send_cmd(card, &cmd); + esp_err_t err_cmd13 = sdmmc_send_cmd_send_status(card, &status); + if (err != ESP_OK) { - ESP_LOGE(TAG, "%s: sdmmc_send_cmd returned 0x%x", __func__, err); + if (err_cmd13 == ESP_OK) { + ESP_LOGE(TAG, "%s: sdmmc_send_cmd returned 0x%x, status 0x%" PRIx32, __func__, err, status); + } else { + ESP_LOGE(TAG, "%s: sdmmc_send_cmd returned 0x%x, failed to get status (0x%x)", __func__, err, err_cmd13); + } return err; } - uint32_t status = 0; + size_t count = 0; int64_t yield_delay_us = 100 * 1000; // initially 100ms int64_t t0 = esp_timer_get_time(); int64_t t1 = 0; /* SD mode: wait for the card to become idle based on R1 status */ - while (!host_is_spi(card) && !mmc_ready_for_data(status)) { + while (!host_is_spi(card) && !sdmmc_ready_for_data(status)) { t1 = esp_timer_get_time(); if (t1 - t0 > SDMMC_READY_FOR_DATA_TIMEOUT_US) { ESP_LOGE(TAG, "read sectors dma - timeout"); From 67a87a5fcd0f59cd46e7e394f310e020cfe12d15 Mon Sep 17 00:00:00 2001 From: Song Ruo Jing Date: Wed, 16 Oct 2024 19:27:59 +0800 Subject: [PATCH 210/365] fix(pmu): enable all func clock icg during retention This should only increase a tiny amount of the power consumption in the retention process, but save debug time since some module register read/write relies not only APB but also func clock. --- .../esp_hw_support/port/esp32c5/pmu_param.c | 37 ++---------------- .../port/esp32c5/private_include/pmu_param.h | 2 +- .../esp_hw_support/port/esp32c6/pmu_param.c | 38 ++----------------- .../port/esp32c6/private_include/pmu_param.h | 2 +- .../esp_hw_support/port/esp32c61/pmu_param.c | 37 ++---------------- .../port/esp32c61/private_include/pmu_param.h | 2 +- .../esp_hw_support/port/esp32h2/pmu_param.c | 37 ++---------------- .../port/esp32h2/private_include/pmu_param.h | 6 +-- .../esp_hw_support/port/esp32p4/pmu_param.c | 26 +------------ .../port/esp32p4/private_include/pmu_param.h | 2 +- 10 files changed, 21 insertions(+), 168 deletions(-) diff --git a/components/esp_hw_support/port/esp32c5/pmu_param.c b/components/esp_hw_support/port/esp32c5/pmu_param.c index e676f8c478df..6f44a1b4e17d 100644 --- a/components/esp_hw_support/port/esp32c5/pmu_param.c +++ b/components/esp_hw_support/port/esp32c5/pmu_param.c @@ -291,18 +291,7 @@ const pmu_hp_system_analog_param_t * pmu_hp_system_analog_param_default(pmu_hp_m .hp_sleep2active_backup_en = 0, \ .hp_modem2active_backup_en = 0, \ }, \ - .backup_clk = ( \ - BIT(PMU_ICG_FUNC_ENA_REGDMA) | \ - BIT(PMU_ICG_FUNC_ENA_GDMA) | \ - BIT(PMU_ICG_FUNC_ENA_TG0) | \ - BIT(PMU_ICG_FUNC_ENA_TG1) | \ - BIT(PMU_ICG_FUNC_ENA_HPBUS) | \ - BIT(PMU_ICG_FUNC_ENA_MSPI) | \ - BIT(PMU_ICG_FUNC_ENA_IOMUX) | \ - BIT(PMU_ICG_FUNC_ENA_SPI2) | \ - BIT(PMU_ICG_FUNC_ENA_UART0) | \ - BIT(PMU_ICG_FUNC_ENA_SYSTIMER) \ - ) \ + .backup_clk = 0xffffffff, \ } #define PMU_HP_MODEM_RETENTION_CONFIG_DEFAULT() { \ @@ -314,17 +303,7 @@ const pmu_hp_system_analog_param_t * pmu_hp_system_analog_param_default(pmu_hp_m .hp_sleep2modem_backup_mode = PMU_HP_RETENTION_REGDMA_CONFIG(0, 1), \ .hp_sleep2modem_backup_en = 0, \ }, \ - .backup_clk = ( \ - BIT(PMU_ICG_FUNC_ENA_REGDMA) | \ - BIT(PMU_ICG_FUNC_ENA_TG0) | \ - BIT(PMU_ICG_FUNC_ENA_TG1) | \ - BIT(PMU_ICG_FUNC_ENA_HPBUS) | \ - BIT(PMU_ICG_FUNC_ENA_MSPI) | \ - BIT(PMU_ICG_FUNC_ENA_IOMUX) | \ - BIT(PMU_ICG_FUNC_ENA_SPI2) | \ - BIT(PMU_ICG_FUNC_ENA_UART0) | \ - BIT(PMU_ICG_FUNC_ENA_SYSTIMER) \ - ) \ + .backup_clk = 0xffffffff, \ } #define PMU_HP_SLEEP_RETENTION_CONFIG_DEFAULT() { \ @@ -341,17 +320,7 @@ const pmu_hp_system_analog_param_t * pmu_hp_system_analog_param_default(pmu_hp_m .hp_modem2sleep_backup_en = 0, \ .hp_active2sleep_backup_en = 0, \ }, \ - .backup_clk = ( \ - BIT(PMU_ICG_FUNC_ENA_REGDMA) | \ - BIT(PMU_ICG_FUNC_ENA_TG0) | \ - BIT(PMU_ICG_FUNC_ENA_TG1) | \ - BIT(PMU_ICG_FUNC_ENA_HPBUS) | \ - BIT(PMU_ICG_FUNC_ENA_MSPI) | \ - BIT(PMU_ICG_FUNC_ENA_IOMUX) | \ - BIT(PMU_ICG_FUNC_ENA_SPI2) | \ - BIT(PMU_ICG_FUNC_ENA_UART0) | \ - BIT(PMU_ICG_FUNC_ENA_SYSTIMER) \ - ) \ + .backup_clk = 0xffffffff, \ } const pmu_hp_system_retention_param_t * pmu_hp_system_retention_param_default(pmu_hp_mode_t mode) diff --git a/components/esp_hw_support/port/esp32c5/private_include/pmu_param.h b/components/esp_hw_support/port/esp32c5/private_include/pmu_param.h index 8e9909749b81..bbcc0c8e70f9 100644 --- a/components/esp_hw_support/port/esp32c5/private_include/pmu_param.h +++ b/components/esp_hw_support/port/esp32c5/private_include/pmu_param.h @@ -87,7 +87,7 @@ const pmu_hp_system_analog_param_t* pmu_hp_system_analog_param_default(pmu_hp_mo typedef struct { pmu_hp_backup_reg_t retention; - uint32_t backup_clk; + uint32_t backup_clk; // icg_func } pmu_hp_system_retention_param_t; const pmu_hp_system_retention_param_t* pmu_hp_system_retention_param_default(pmu_hp_mode_t mode); diff --git a/components/esp_hw_support/port/esp32c6/pmu_param.c b/components/esp_hw_support/port/esp32c6/pmu_param.c index 044c300688e5..23acfc344727 100644 --- a/components/esp_hw_support/port/esp32c6/pmu_param.c +++ b/components/esp_hw_support/port/esp32c6/pmu_param.c @@ -291,18 +291,7 @@ const pmu_hp_system_analog_param_t * pmu_hp_system_analog_param_default(pmu_hp_m .hp_sleep2active_backup_en = 0, \ .hp_modem2active_backup_en = 0, \ }, \ - .backup_clk = ( \ - BIT(PMU_ICG_FUNC_ENA_GDMA) | \ - BIT(PMU_ICG_FUNC_ENA_REGDMA) | \ - BIT(PMU_ICG_FUNC_ENA_TG0) | \ - BIT(PMU_ICG_FUNC_ENA_TG1) | \ - BIT(PMU_ICG_FUNC_ENA_HPBUS) | \ - BIT(PMU_ICG_FUNC_ENA_MSPI) | \ - BIT(PMU_ICG_FUNC_ENA_IOMUX) | \ - BIT(PMU_ICG_FUNC_ENA_SPI2) | \ - BIT(PMU_ICG_FUNC_ENA_UART0) | \ - BIT(PMU_ICG_FUNC_ENA_SYSTIMER) \ - ) \ + .backup_clk = 0xffffffff, \ } #define PMU_HP_MODEM_RETENTION_CONFIG_DEFAULT() { \ @@ -314,17 +303,7 @@ const pmu_hp_system_analog_param_t * pmu_hp_system_analog_param_default(pmu_hp_m .hp_sleep2modem_backup_mode = PMU_HP_RETENTION_REGDMA_CONFIG(0, 1), \ .hp_sleep2modem_backup_en = 0, \ }, \ - .backup_clk = ( \ - BIT(PMU_ICG_FUNC_ENA_REGDMA) | \ - BIT(PMU_ICG_FUNC_ENA_TG0) | \ - BIT(PMU_ICG_FUNC_ENA_TG1) | \ - BIT(PMU_ICG_FUNC_ENA_HPBUS) | \ - BIT(PMU_ICG_FUNC_ENA_MSPI) | \ - BIT(PMU_ICG_FUNC_ENA_IOMUX) | \ - BIT(PMU_ICG_FUNC_ENA_SPI2) | \ - BIT(PMU_ICG_FUNC_ENA_UART0) | \ - BIT(PMU_ICG_FUNC_ENA_SYSTIMER) \ - ) \ + .backup_clk = 0xffffffff, \ } #define PMU_HP_SLEEP_RETENTION_CONFIG_DEFAULT() { \ @@ -341,18 +320,7 @@ const pmu_hp_system_analog_param_t * pmu_hp_system_analog_param_default(pmu_hp_m .hp_modem2sleep_backup_en = 0, \ .hp_active2sleep_backup_en = 0, \ }, \ - .backup_clk = ( \ - BIT(PMU_ICG_FUNC_ENA_GDMA) | \ - BIT(PMU_ICG_FUNC_ENA_REGDMA) | \ - BIT(PMU_ICG_FUNC_ENA_TG0) | \ - BIT(PMU_ICG_FUNC_ENA_TG1) | \ - BIT(PMU_ICG_FUNC_ENA_HPBUS) | \ - BIT(PMU_ICG_FUNC_ENA_MSPI) | \ - BIT(PMU_ICG_FUNC_ENA_IOMUX) | \ - BIT(PMU_ICG_FUNC_ENA_SPI2) | \ - BIT(PMU_ICG_FUNC_ENA_UART0) | \ - BIT(PMU_ICG_FUNC_ENA_SYSTIMER) \ - ) \ + .backup_clk = 0xffffffff, \ } const pmu_hp_system_retention_param_t * pmu_hp_system_retention_param_default(pmu_hp_mode_t mode) diff --git a/components/esp_hw_support/port/esp32c6/private_include/pmu_param.h b/components/esp_hw_support/port/esp32c6/private_include/pmu_param.h index fdef78b3300b..155c3e810f4a 100644 --- a/components/esp_hw_support/port/esp32c6/private_include/pmu_param.h +++ b/components/esp_hw_support/port/esp32c6/private_include/pmu_param.h @@ -92,7 +92,7 @@ const pmu_hp_system_analog_param_t* pmu_hp_system_analog_param_default(pmu_hp_mo typedef struct { pmu_hp_backup_reg_t retention; - uint32_t backup_clk; + uint32_t backup_clk; // icg_func } pmu_hp_system_retention_param_t; const pmu_hp_system_retention_param_t* pmu_hp_system_retention_param_default(pmu_hp_mode_t mode); diff --git a/components/esp_hw_support/port/esp32c61/pmu_param.c b/components/esp_hw_support/port/esp32c61/pmu_param.c index 37105bef5381..4883b9067723 100644 --- a/components/esp_hw_support/port/esp32c61/pmu_param.c +++ b/components/esp_hw_support/port/esp32c61/pmu_param.c @@ -290,18 +290,7 @@ const pmu_hp_system_analog_param_t * pmu_hp_system_analog_param_default(pmu_hp_m .hp_sleep2active_backup_en = 0, \ .hp_modem2active_backup_en = 0, \ }, \ - .backup_clk = ( \ - BIT(PMU_ICG_FUNC_ENA_REGDMA) | \ - BIT(PMU_ICG_FUNC_ENA_GDMA) | \ - BIT(PMU_ICG_FUNC_ENA_TG0) | \ - BIT(PMU_ICG_FUNC_ENA_TG1) | \ - BIT(PMU_ICG_FUNC_ENA_HPBUS) | \ - BIT(PMU_ICG_FUNC_ENA_MSPI) | \ - BIT(PMU_ICG_FUNC_ENA_IOMUX) | \ - BIT(PMU_ICG_FUNC_ENA_SPI2) | \ - BIT(PMU_ICG_FUNC_ENA_UART0) | \ - BIT(PMU_ICG_FUNC_ENA_SYSTIMER) \ - ) \ + .backup_clk = 0xffffffff, \ } #define PMU_HP_MODEM_RETENTION_CONFIG_DEFAULT() { \ @@ -313,17 +302,7 @@ const pmu_hp_system_analog_param_t * pmu_hp_system_analog_param_default(pmu_hp_m .hp_sleep2modem_backup_mode = PMU_HP_RETENTION_REGDMA_CONFIG(0, 1), \ .hp_sleep2modem_backup_en = 0, \ }, \ - .backup_clk = ( \ - BIT(PMU_ICG_FUNC_ENA_REGDMA) | \ - BIT(PMU_ICG_FUNC_ENA_TG0) | \ - BIT(PMU_ICG_FUNC_ENA_TG1) | \ - BIT(PMU_ICG_FUNC_ENA_HPBUS) | \ - BIT(PMU_ICG_FUNC_ENA_MSPI) | \ - BIT(PMU_ICG_FUNC_ENA_IOMUX) | \ - BIT(PMU_ICG_FUNC_ENA_SPI2) | \ - BIT(PMU_ICG_FUNC_ENA_UART0) | \ - BIT(PMU_ICG_FUNC_ENA_SYSTIMER) \ - ) \ + .backup_clk = 0xffffffff, \ } #define PMU_HP_SLEEP_RETENTION_CONFIG_DEFAULT() { \ @@ -340,17 +319,7 @@ const pmu_hp_system_analog_param_t * pmu_hp_system_analog_param_default(pmu_hp_m .hp_modem2sleep_backup_en = 0, \ .hp_active2sleep_backup_en = 0, \ }, \ - .backup_clk = ( \ - BIT(PMU_ICG_FUNC_ENA_REGDMA) | \ - BIT(PMU_ICG_FUNC_ENA_TG0) | \ - BIT(PMU_ICG_FUNC_ENA_TG1) | \ - BIT(PMU_ICG_FUNC_ENA_HPBUS) | \ - BIT(PMU_ICG_FUNC_ENA_MSPI) | \ - BIT(PMU_ICG_FUNC_ENA_IOMUX) | \ - BIT(PMU_ICG_FUNC_ENA_SPI2) | \ - BIT(PMU_ICG_FUNC_ENA_UART0) | \ - BIT(PMU_ICG_FUNC_ENA_SYSTIMER) \ - ) \ + .backup_clk = 0xffffffff, \ } const pmu_hp_system_retention_param_t * pmu_hp_system_retention_param_default(pmu_hp_mode_t mode) diff --git a/components/esp_hw_support/port/esp32c61/private_include/pmu_param.h b/components/esp_hw_support/port/esp32c61/private_include/pmu_param.h index 80aaac61ee96..4a7516a4f932 100644 --- a/components/esp_hw_support/port/esp32c61/private_include/pmu_param.h +++ b/components/esp_hw_support/port/esp32c61/private_include/pmu_param.h @@ -90,7 +90,7 @@ const pmu_hp_system_analog_param_t* pmu_hp_system_analog_param_default(pmu_hp_mo typedef struct { pmu_hp_backup_reg_t retention; - uint32_t backup_clk; + uint32_t backup_clk; // icg_func } pmu_hp_system_retention_param_t; const pmu_hp_system_retention_param_t* pmu_hp_system_retention_param_default(pmu_hp_mode_t mode); diff --git a/components/esp_hw_support/port/esp32h2/pmu_param.c b/components/esp_hw_support/port/esp32h2/pmu_param.c index 036792a6faae..56f679a91451 100644 --- a/components/esp_hw_support/port/esp32h2/pmu_param.c +++ b/components/esp_hw_support/port/esp32h2/pmu_param.c @@ -290,18 +290,7 @@ const pmu_hp_system_analog_param_t * pmu_hp_system_analog_param_default(pmu_hp_m .hp_sleep2active_backup_en = 0, \ .hp_modem2active_backup_en = 0, \ }, \ - .backup_clk = ( \ - BIT(PMU_ICG_FUNC_ENA_GDMA) \ - | BIT(PMU_ICG_FUNC_ENA_REGDMA) \ - | BIT(PMU_ICG_FUNC_ENA_TG0) \ - | BIT(PMU_ICG_FUNC_ENA_HPBUS) \ - | BIT(PMU_ICG_FUNC_ENA_MSPI) \ - | BIT(PMU_ICG_FUNC_ENA_IOMUX) \ - | BIT(PMU_ICG_FUNC_ENA_SPI2) \ - | BIT(PMU_ICG_FUNC_ENA_SEC) \ - | BIT(PMU_ICG_FUNC_ENA_PWM) \ - | BIT(PMU_ICG_FUNC_ENA_SYSTIMER) \ - | BIT(PMU_ICG_FUNC_ENA_UART0)), \ + .backup_clk = 0xffffffff, \ } #define PMU_HP_MODEM_RETENTION_CONFIG_DEFAULT() { \ @@ -313,16 +302,7 @@ const pmu_hp_system_analog_param_t * pmu_hp_system_analog_param_default(pmu_hp_m .hp_sleep2modem_backup_mode = PMU_HP_RETENTION_REGDMA_CONFIG(0, 1), \ .hp_sleep2modem_backup_en = 0, \ }, \ - .backup_clk = (BIT(PMU_ICG_FUNC_ENA_REGDMA) \ - | BIT(PMU_ICG_FUNC_ENA_TG0) \ - | BIT(PMU_ICG_FUNC_ENA_HPBUS) \ - | BIT(PMU_ICG_FUNC_ENA_MSPI) \ - | BIT(PMU_ICG_FUNC_ENA_IOMUX) \ - | BIT(PMU_ICG_FUNC_ENA_SPI2) \ - | BIT(PMU_ICG_FUNC_ENA_SEC) \ - | BIT(PMU_ICG_FUNC_ENA_PWM) \ - | BIT(PMU_ICG_FUNC_ENA_SYSTIMER) \ - | BIT(PMU_ICG_FUNC_ENA_UART0)), \ + .backup_clk = 0xffffffff, \ } #define PMU_HP_SLEEP_RETENTION_CONFIG_DEFAULT() { \ @@ -339,18 +319,7 @@ const pmu_hp_system_analog_param_t * pmu_hp_system_analog_param_default(pmu_hp_m .hp_modem2sleep_backup_en = 0, \ .hp_active2sleep_backup_en = 0, \ }, \ - .backup_clk = ( \ - BIT(PMU_ICG_FUNC_ENA_GDMA) \ - | BIT(PMU_ICG_FUNC_ENA_REGDMA) \ - | BIT(PMU_ICG_FUNC_ENA_TG0) \ - | BIT(PMU_ICG_FUNC_ENA_HPBUS) \ - | BIT(PMU_ICG_FUNC_ENA_MSPI) \ - | BIT(PMU_ICG_FUNC_ENA_IOMUX) \ - | BIT(PMU_ICG_FUNC_ENA_SPI2) \ - | BIT(PMU_ICG_FUNC_ENA_SEC) \ - | BIT(PMU_ICG_FUNC_ENA_PWM) \ - | BIT(PMU_ICG_FUNC_ENA_SYSTIMER) \ - | BIT(PMU_ICG_FUNC_ENA_UART0)), \ + .backup_clk = 0xffffffff, \ } const pmu_hp_system_retention_param_t * pmu_hp_system_retention_param_default(pmu_hp_mode_t mode) diff --git a/components/esp_hw_support/port/esp32h2/private_include/pmu_param.h b/components/esp_hw_support/port/esp32h2/private_include/pmu_param.h index 58fbf97ff48b..bb78a1e7759f 100644 --- a/components/esp_hw_support/port/esp32h2/private_include/pmu_param.h +++ b/components/esp_hw_support/port/esp32h2/private_include/pmu_param.h @@ -85,7 +85,7 @@ const pmu_hp_system_analog_param_t * pmu_hp_system_analog_param_default(pmu_hp_m typedef struct { pmu_hp_backup_reg_t retention; - uint32_t backup_clk; + uint32_t backup_clk; // icg_func } pmu_hp_system_retention_param_t; const pmu_hp_system_retention_param_t * pmu_hp_system_retention_param_default(pmu_hp_mode_t mode); @@ -407,7 +407,7 @@ typedef struct { typedef struct pmu_sleep_machine_constant { struct { - uint16_t min_slp_time_us; /* Mininum sleep protection time (unit: microsecond) */ + uint16_t min_slp_time_us; /* Minimum sleep protection time (unit: microsecond) */ uint8_t reserved0; uint16_t reserved1; uint16_t analog_wait_time_us; /* LP LDO power up wait time (unit: microsecond) */ @@ -418,7 +418,7 @@ typedef struct pmu_sleep_machine_constant { uint16_t power_up_wait_time_us; /* (unit: microsecond) */ } lp; struct { - uint16_t min_slp_time_us; /* Mininum sleep protection time (unit: microsecond) */ + uint16_t min_slp_time_us; /* Minimum sleep protection time (unit: microsecond) */ uint16_t analog_wait_time_us; /* HP LDO power up wait time (unit: microsecond) */ uint16_t power_supply_wait_time_us; /* (unit: microsecond) */ uint16_t power_up_wait_time_us; /* (unit: microsecond) */ diff --git a/components/esp_hw_support/port/esp32p4/pmu_param.c b/components/esp_hw_support/port/esp32p4/pmu_param.c index 0905a1268a4a..c1c8896f37ab 100644 --- a/components/esp_hw_support/port/esp32p4/pmu_param.c +++ b/components/esp_hw_support/port/esp32p4/pmu_param.c @@ -208,18 +208,7 @@ const pmu_hp_system_analog_param_t * pmu_hp_system_analog_param_default(pmu_hp_m .hp_sleep2active_backup_en = 0, \ .hp_modem2active_backup_en = 0, \ }, \ - .backup_clk = ( \ - BIT(PMU_ICG_FUNC_ENA_L2MEM_MEM) | \ - BIT(PMU_ICG_FUNC_ENA_L2MEM_SYS) | \ - BIT(PMU_ICG_FUNC_ENA_REGDMA) | \ - BIT(PMU_ICG_FUNC_ENA_HP_CLKRST) | \ - BIT(PMU_ICG_FUNC_ENA_SYSREG_APB) | \ - BIT(PMU_ICG_FUNC_ENA_ICM_CPU) | \ - BIT(PMU_ICG_FUNC_ENA_ICM_APB) | \ - BIT(PMU_ICG_FUNC_ENA_ICM_SYS) | \ - BIT(PMU_ICG_FUNC_ENA_ICM_MEM) | \ - BIT(PMU_ICG_FUNC_ENA_INTRMTX_APB) \ - ) \ + .backup_clk = 0xffffffff, \ } #define PMU_HP_SLEEP_RETENTION_CONFIG_DEFAULT() { \ @@ -236,18 +225,7 @@ const pmu_hp_system_analog_param_t * pmu_hp_system_analog_param_default(pmu_hp_m .hp_modem2sleep_backup_en = 0, \ .hp_active2sleep_backup_en = 0, \ }, \ - .backup_clk = ( \ - BIT(PMU_ICG_FUNC_ENA_L2MEM_MEM) | \ - BIT(PMU_ICG_FUNC_ENA_L2MEM_SYS) | \ - BIT(PMU_ICG_FUNC_ENA_REGDMA) | \ - BIT(PMU_ICG_FUNC_ENA_HP_CLKRST) | \ - BIT(PMU_ICG_FUNC_ENA_SYSREG_APB) | \ - BIT(PMU_ICG_FUNC_ENA_ICM_CPU) | \ - BIT(PMU_ICG_FUNC_ENA_ICM_APB) | \ - BIT(PMU_ICG_FUNC_ENA_ICM_SYS) | \ - BIT(PMU_ICG_FUNC_ENA_ICM_MEM) | \ - BIT(PMU_ICG_FUNC_ENA_INTRMTX_APB) \ - ) \ + .backup_clk = 0xffffffff, \ } const pmu_hp_system_retention_param_t * pmu_hp_system_retention_param_default(pmu_hp_mode_t mode) diff --git a/components/esp_hw_support/port/esp32p4/private_include/pmu_param.h b/components/esp_hw_support/port/esp32p4/private_include/pmu_param.h index 9c8be63ac555..37e67fc48318 100644 --- a/components/esp_hw_support/port/esp32p4/private_include/pmu_param.h +++ b/components/esp_hw_support/port/esp32p4/private_include/pmu_param.h @@ -86,7 +86,7 @@ const pmu_hp_system_analog_param_t* pmu_hp_system_analog_param_default(pmu_hp_mo typedef struct { pmu_hp_backup_reg_t retention; - uint32_t backup_clk; + uint32_t backup_clk; // icg_func } pmu_hp_system_retention_param_t; const pmu_hp_system_retention_param_t* pmu_hp_system_retention_param_default(pmu_hp_mode_t mode); From 7c0b1dc98c84437e7e3c6f52ed08183eee418415 Mon Sep 17 00:00:00 2001 From: Song Ruo Jing Date: Thu, 17 Oct 2024 12:23:49 +0800 Subject: [PATCH 211/365] fix(clk): rtc_clk_cpu_freq_set_xtal will always disable CPU's PLL Align C6/H2/C5/C61 rtc_clk_cpu_freq_set_xtal behavior to other chips For PMU supported chips, powering down CPU PLL in sleep will be done by PMU, not sleep code --- .../esp_hw_support/include/esp_private/rtc_clk.h | 15 +++++---------- .../esp_hw_support/port/esp32c5/include/soc/rtc.h | 5 +++-- components/esp_hw_support/port/esp32c5/rtc_clk.c | 6 ++---- .../esp_hw_support/port/esp32c6/include/soc/rtc.h | 5 +++-- components/esp_hw_support/port/esp32c6/rtc_clk.c | 6 ++---- .../port/esp32c61/include/soc/rtc.h | 5 +++-- components/esp_hw_support/port/esp32c61/rtc_clk.c | 6 ++---- .../esp_hw_support/port/esp32h2/include/soc/rtc.h | 5 +++-- components/esp_hw_support/port/esp32h2/rtc_clk.c | 6 ++---- .../esp_hw_support/port/esp32p4/include/soc/rtc.h | 4 ++-- components/esp_hw_support/port/esp32p4/rtc_clk.c | 1 + components/esp_hw_support/sleep_modes.c | 9 +++++++++ 12 files changed, 37 insertions(+), 36 deletions(-) diff --git a/components/esp_hw_support/include/esp_private/rtc_clk.h b/components/esp_hw_support/include/esp_private/rtc_clk.h index 52610fa0d1ce..4480780217f4 100644 --- a/components/esp_hw_support/include/esp_private/rtc_clk.h +++ b/components/esp_hw_support/include/esp_private/rtc_clk.h @@ -18,11 +18,12 @@ extern "C" { * @brief Switch CPU clock source to XTAL, and let cpu frequency equal to main XTAL frequency. * * This function does not disable CPU's source PLL. If the PLL requires to be disabled to save power, please call - * `rtc_clk_cpu_freq_set_xtal` instead. It does one extra check (if necessary) to see whether can disable the - * corresponding PLL after switching the CPU clock source to XTAL. + * `rtc_clk_cpu_freq_set_xtal` instead. It will always disable the corresponding PLL after switching the CPU clock + * source to XTAL (except for S2). * - * Currently, this function should only be called in `esp_restart_noos` and `esp_restart_noos_dig` to switch the CPU - * clock source back to XTAL (by default) before reset. + * Currently, this function is only called in `esp_restart_noos` and `esp_restart_noos_dig` to switch the CPU + * clock source back to XTAL (by default) before reset, and in `esp_sleep_start` to switch CPU clock source to XTAL + * before entering sleep for PMU supported chips. */ void rtc_clk_cpu_set_to_default_config(void); @@ -32,12 +33,6 @@ void rtc_clk_cpu_set_to_default_config(void); * Currently, this function is only used for tracking whether USB Serial/JTAG is using the 48MHz PHY clock * * Note: Calling this function only helps to not disable the BBPLL clock in `rtc_clk_cpu_freq_set_config`. - * For light and deep sleep, whether to disable the BBPLL in the internal call to `rtc_clk_cpu_freq_set_xtal` - * varies for targets. - * On ESP32C3/S3, USB CDC device can not function properly during sleep due to the lack of APB clock. Therefore. - * `rtc_clk_cpu_freq_set_xtal` will always disable BBPLL, no matter whether BBPLL has any consumer. - * On ESP32C6/H2, USB CDC device can maintain the minimum connection with the host during sleep, so - * `rtc_clk_cpu_freq_set_xtal` will check for BBPLL consumers, and keep BBPLL if USB Serial/JTAG is in use. */ void rtc_clk_bbpll_add_consumer(void); diff --git a/components/esp_hw_support/port/esp32c5/include/soc/rtc.h b/components/esp_hw_support/port/esp32c5/include/soc/rtc.h index 92a2c4f5c255..a11d201f20cf 100644 --- a/components/esp_hw_support/port/esp32c5/include/soc/rtc.h +++ b/components/esp_hw_support/port/esp32c5/include/soc/rtc.h @@ -307,8 +307,9 @@ void rtc_clk_cpu_freq_get_config(rtc_cpu_freq_config_t *out_config); * rtc_clk_cpu_freq_set_config when a switch to XTAL is needed. * Assumes that XTAL frequency has been determined — don't call in startup code. * - * @note On ESP32C5, this function will check whether BBPLL can be disabled. If there is no consumer, then BBPLL will be - * turned off. The behaviour is the same as using rtc_clk_cpu_freq_set_config to switch cpu clock source to XTAL. + * @note This function always disables BBPLL after switching the CPU clock source to XTAL for power saving purpose. + * If this is unwanted, please use rtc_clk_cpu_freq_set_config. It helps to check whether USB Serial JTAG is in use, + * if so, then BBPLL will not be turned off. */ void rtc_clk_cpu_freq_set_xtal(void); diff --git a/components/esp_hw_support/port/esp32c5/rtc_clk.c b/components/esp_hw_support/port/esp32c5/rtc_clk.c index e3d1052c4b07..23a3941c9d2b 100644 --- a/components/esp_hw_support/port/esp32c5/rtc_clk.c +++ b/components/esp_hw_support/port/esp32c5/rtc_clk.c @@ -383,10 +383,7 @@ void rtc_clk_cpu_freq_set_config_fast(const rtc_cpu_freq_config_t *config) void rtc_clk_cpu_freq_set_xtal(void) { rtc_clk_cpu_set_to_default_config(); - // We don't turn off the bbpll if some consumers depend on bbpll - if (!s_bbpll_digi_consumers_ref_count) { - rtc_clk_bbpll_disable(); - } + rtc_clk_bbpll_disable(); } void rtc_clk_cpu_set_to_default_config(void) @@ -394,6 +391,7 @@ void rtc_clk_cpu_set_to_default_config(void) int freq_mhz = (int)rtc_clk_xtal_freq_get(); rtc_clk_cpu_freq_to_xtal(freq_mhz, 1); + s_cur_pll_freq = 0; // no disable PLL, but set freq to 0 to trigger a PLL calibration after wake-up from sleep } void rtc_clk_cpu_freq_to_pll_and_pll_lock_release(int cpu_freq_mhz) diff --git a/components/esp_hw_support/port/esp32c6/include/soc/rtc.h b/components/esp_hw_support/port/esp32c6/include/soc/rtc.h index 8d508d5df39b..3880b325e5b7 100644 --- a/components/esp_hw_support/port/esp32c6/include/soc/rtc.h +++ b/components/esp_hw_support/port/esp32c6/include/soc/rtc.h @@ -338,8 +338,9 @@ void rtc_clk_cpu_freq_get_config(rtc_cpu_freq_config_t *out_config); * rtc_clk_cpu_freq_set_config when a switch to XTAL is needed. * Assumes that XTAL frequency has been determined — don't call in startup code. * - * @note On ESP32C6, this function will check whether BBPLL can be disabled. If there is no consumer, then BBPLL will be - * turned off. The behaviour is the same as using rtc_clk_cpu_freq_set_config to switch cpu clock source to XTAL. + * @note This function always disables BBPLL after switching the CPU clock source to XTAL for power saving purpose. + * If this is unwanted, please use rtc_clk_cpu_freq_set_config. It helps to check whether USB Serial JTAG is in use, + * if so, then BBPLL will not be turned off. */ void rtc_clk_cpu_freq_set_xtal(void); diff --git a/components/esp_hw_support/port/esp32c6/rtc_clk.c b/components/esp_hw_support/port/esp32c6/rtc_clk.c index 521e2fd03f54..c36c48d85934 100644 --- a/components/esp_hw_support/port/esp32c6/rtc_clk.c +++ b/components/esp_hw_support/port/esp32c6/rtc_clk.c @@ -333,10 +333,7 @@ void rtc_clk_cpu_freq_set_config_fast(const rtc_cpu_freq_config_t *config) void rtc_clk_cpu_freq_set_xtal(void) { rtc_clk_cpu_set_to_default_config(); - // We don't turn off the bbpll if some consumers depend on bbpll - if (!s_bbpll_digi_consumers_ref_count) { - rtc_clk_bbpll_disable(); - } + rtc_clk_bbpll_disable(); } void rtc_clk_cpu_set_to_default_config(void) @@ -344,6 +341,7 @@ void rtc_clk_cpu_set_to_default_config(void) int freq_mhz = (int)rtc_clk_xtal_freq_get(); rtc_clk_cpu_freq_to_xtal(freq_mhz, 1); + s_cur_pll_freq = 0; // no disable PLL, but set freq to 0 to trigger a PLL calibration after wake-up from sleep } void rtc_clk_cpu_freq_to_pll_and_pll_lock_release(int cpu_freq_mhz) diff --git a/components/esp_hw_support/port/esp32c61/include/soc/rtc.h b/components/esp_hw_support/port/esp32c61/include/soc/rtc.h index 12c15bc101d4..b04132733988 100644 --- a/components/esp_hw_support/port/esp32c61/include/soc/rtc.h +++ b/components/esp_hw_support/port/esp32c61/include/soc/rtc.h @@ -307,8 +307,9 @@ void rtc_clk_cpu_freq_get_config(rtc_cpu_freq_config_t *out_config); * rtc_clk_cpu_freq_set_config when a switch to XTAL is needed. * Assumes that XTAL frequency has been determined — don't call in startup code. * - * @note On ESP32C61, this function will check whether BBPLL can be disabled. If there is no consumer, then BBPLL will be - * turned off. The behaviour is the same as using rtc_clk_cpu_freq_set_config to switch cpu clock source to XTAL. + * @note This function always disables BBPLL after switching the CPU clock source to XTAL for power saving purpose. + * If this is unwanted, please use rtc_clk_cpu_freq_set_config. It helps to check whether USB Serial JTAG is in use, + * if so, then BBPLL will not be turned off. */ void rtc_clk_cpu_freq_set_xtal(void); diff --git a/components/esp_hw_support/port/esp32c61/rtc_clk.c b/components/esp_hw_support/port/esp32c61/rtc_clk.c index e46cdbe1c480..5c32d173585a 100644 --- a/components/esp_hw_support/port/esp32c61/rtc_clk.c +++ b/components/esp_hw_support/port/esp32c61/rtc_clk.c @@ -327,10 +327,7 @@ void rtc_clk_cpu_freq_set_config_fast(const rtc_cpu_freq_config_t *config) void rtc_clk_cpu_freq_set_xtal(void) { rtc_clk_cpu_set_to_default_config(); - // We don't turn off the bbpll if some consumers depend on bbpll - if (!s_bbpll_digi_consumers_ref_count) { - rtc_clk_bbpll_disable(); - } + rtc_clk_bbpll_disable(); } void rtc_clk_cpu_set_to_default_config(void) @@ -338,6 +335,7 @@ void rtc_clk_cpu_set_to_default_config(void) int freq_mhz = (int)rtc_clk_xtal_freq_get(); rtc_clk_cpu_freq_to_xtal(freq_mhz, 1); + s_cur_pll_freq = 0; // no disable PLL, but set freq to 0 to trigger a PLL calibration after wake-up from sleep } void rtc_clk_cpu_freq_to_pll_and_pll_lock_release(int cpu_freq_mhz) diff --git a/components/esp_hw_support/port/esp32h2/include/soc/rtc.h b/components/esp_hw_support/port/esp32h2/include/soc/rtc.h index dfd1f96f0197..fa820b48d82b 100644 --- a/components/esp_hw_support/port/esp32h2/include/soc/rtc.h +++ b/components/esp_hw_support/port/esp32h2/include/soc/rtc.h @@ -354,8 +354,9 @@ void rtc_clk_cpu_freq_get_config(rtc_cpu_freq_config_t *out_config); * rtc_clk_cpu_freq_set_config when a switch to XTAL is needed. * Assumes that XTAL frequency has been determined — don't call in startup code. * - * @note On ESP32H2, this function will check whether BBPLL can be disabled. If there is no consumer, then BBPLL will be - * turned off. The behaviour is the same as using rtc_clk_cpu_freq_set_config to switch cpu clock source to XTAL. + * @note This function always disables BBPLL after switching the CPU clock source to XTAL for power saving purpose. + * If this is unwanted, please use rtc_clk_cpu_freq_set_config. It helps to check whether USB Serial JTAG is in use, + * if so, then BBPLL will not be turned off. */ void rtc_clk_cpu_freq_set_xtal(void); diff --git a/components/esp_hw_support/port/esp32h2/rtc_clk.c b/components/esp_hw_support/port/esp32h2/rtc_clk.c index 0c6664fdce84..7a8a82ef5948 100644 --- a/components/esp_hw_support/port/esp32h2/rtc_clk.c +++ b/components/esp_hw_support/port/esp32h2/rtc_clk.c @@ -393,10 +393,7 @@ void rtc_clk_cpu_freq_set_config_fast(const rtc_cpu_freq_config_t *config) void rtc_clk_cpu_freq_set_xtal(void) { rtc_clk_cpu_set_to_default_config(); - // We don't turn off the bbpll if some consumers only depends on bbpll - if (!s_bbpll_digi_consumers_ref_count) { - rtc_clk_bbpll_disable(); - } + rtc_clk_bbpll_disable(); } void rtc_clk_cpu_set_to_default_config(void) @@ -404,6 +401,7 @@ void rtc_clk_cpu_set_to_default_config(void) int freq_mhz = (int)rtc_clk_xtal_freq_get(); rtc_clk_cpu_freq_to_xtal(freq_mhz, 1); + s_cur_pll_freq = 0; // no disable PLL, but set freq to 0 to trigger a PLL calibration after wake-up from sleep } soc_xtal_freq_t rtc_clk_xtal_freq_get(void) diff --git a/components/esp_hw_support/port/esp32p4/include/soc/rtc.h b/components/esp_hw_support/port/esp32p4/include/soc/rtc.h index 183f8a79fe60..43acaa253faf 100644 --- a/components/esp_hw_support/port/esp32p4/include/soc/rtc.h +++ b/components/esp_hw_support/port/esp32p4/include/soc/rtc.h @@ -350,8 +350,8 @@ void rtc_clk_cpu_freq_get_config(rtc_cpu_freq_config_t *out_config); * rtc_clk_cpu_freq_set_config when a switch to XTAL is needed. * Assumes that XTAL frequency has been determined — don't call in startup code. * - * @note On ESP32C6, this function will check whether BBPLL can be disabled. If there is no consumer, then BBPLL will be - * turned off. The behaviour is the same as using rtc_clk_cpu_freq_set_config to switch cpu clock source to XTAL. + * @note On ESP32P4, this function always disables CPLL after switching the CPU clock source to XTAL, + * since there is no peripheral relies on CPLL clock (except Flash/PSRAM if their clock source selects CPLL). */ void rtc_clk_cpu_freq_set_xtal(void); diff --git a/components/esp_hw_support/port/esp32p4/rtc_clk.c b/components/esp_hw_support/port/esp32p4/rtc_clk.c index aa3bfd967505..f9e19ce08c44 100644 --- a/components/esp_hw_support/port/esp32p4/rtc_clk.c +++ b/components/esp_hw_support/port/esp32p4/rtc_clk.c @@ -426,6 +426,7 @@ void rtc_clk_cpu_set_to_default_config(void) int freq_mhz = (int)rtc_clk_xtal_freq_get(); rtc_clk_cpu_freq_to_xtal(freq_mhz, 1, true); + s_cur_cpll_freq = 0; // no disable PLL, but set freq to 0 to trigger a PLL calibration after wake-up from sleep } soc_xtal_freq_t rtc_clk_xtal_freq_get(void) diff --git a/components/esp_hw_support/sleep_modes.c b/components/esp_hw_support/sleep_modes.c index 0f36b970c489..9c60ea1f0444 100644 --- a/components/esp_hw_support/sleep_modes.c +++ b/components/esp_hw_support/sleep_modes.c @@ -810,7 +810,16 @@ static esp_err_t IRAM_ATTR esp_sleep_start(uint32_t pd_flags, esp_sleep_mode_t m // Save current frequency and switch to XTAL rtc_cpu_freq_config_t cpu_freq_config; rtc_clk_cpu_freq_get_config(&cpu_freq_config); +#if SOC_PMU_SUPPORTED + // For PMU supported chips, CPU's PLL power can be turned off by PMU, so no need to disable the PLL at here. + // Leaving PLL on at this stage also helps USJ keep connection and retention operation (if they rely on this PLL). + rtc_clk_cpu_set_to_default_config(); +#else + // For earlier chips, there is no PMU module that can turn off the CPU's PLL, so it has to be disabled at here to save the power consumption. + // Though ESP32C3/S3 has USB CDC device, it can not function properly during sleep due to the lack of APB clock (before C6, USJ relies on APB clock to work). + // Therefore, we will always disable CPU's PLL (i.e. BBPLL). rtc_clk_cpu_freq_set_xtal(); +#endif #if SOC_PM_SUPPORT_EXT0_WAKEUP // Configure pins for external wakeup From 61a13d7e3b7d6aae480ef8f440e92a8ccf0b1534 Mon Sep 17 00:00:00 2001 From: Sarvesh Bodakhe Date: Thu, 17 Oct 2024 09:44:22 +0530 Subject: [PATCH 212/365] fix(wifi): Add support to recongize different WPA3 Authentication modes from specs Add support to recognize APs supporting 'WPA3-Enterprise-Only Mode' and 'WPA3-Enterprise-Transition Mode' using authmodes WIFI_AUTH_WPA3_ENTERPRISE and WIFI_AUTH_WPA2_WPA3_ENTERPRISE, respectively. --- components/esp_wifi/include/esp_wifi_types_generic.h | 5 ++++- components/esp_wifi/lib | 2 +- examples/wifi/scan/main/scan.c | 6 ++++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/components/esp_wifi/include/esp_wifi_types_generic.h b/components/esp_wifi/include/esp_wifi_types_generic.h index 3e49682df5a7..74e2a4fb7c3c 100644 --- a/components/esp_wifi/include/esp_wifi_types_generic.h +++ b/components/esp_wifi/include/esp_wifi_types_generic.h @@ -62,7 +62,8 @@ typedef struct { } wifi_country_t; /* Strength of authmodes */ -/* OPEN < WEP < WPA_PSK < OWE < WPA2_PSK = WPA_WPA2_PSK < WAPI_PSK < WPA3_PSK = WPA2_WPA3_PSK = DPP */ +/* Personal Networks : OPEN < WEP < WPA_PSK < OWE < WPA2_PSK = WPA_WPA2_PSK < WAPI_PSK < WPA3_PSK = WPA2_WPA3_PSK = DPP + * Enterprise Networks : WIFI_AUTH_WPA2_ENTERPRISE < WIFI_AUTH_WPA3_ENTERPRISE = WIFI_AUTH_WPA2_WPA3_ENTERPRISE < WIFI_AUTH_WPA3_ENT_192 */ typedef enum { WIFI_AUTH_OPEN = 0, /**< authenticate mode : open */ WIFI_AUTH_WEP, /**< authenticate mode : WEP */ @@ -79,6 +80,8 @@ typedef enum { WIFI_AUTH_WPA3_EXT_PSK, /**< this authentication mode will yield same result as WIFI_AUTH_WPA3_PSK and not recommended to be used. It will be deprecated in future, please use WIFI_AUTH_WPA3_PSK instead. */ WIFI_AUTH_WPA3_EXT_PSK_MIXED_MODE, /**< this authentication mode will yield same result as WIFI_AUTH_WPA3_PSK and not recommended to be used. It will be deprecated in future, please use WIFI_AUTH_WPA3_PSK instead.*/ WIFI_AUTH_DPP, /**< authenticate mode : DPP */ + WIFI_AUTH_WPA3_ENTERPRISE, /**< authenticate mode : WPA3-Enterprise Only Mode */ + WIFI_AUTH_WPA2_WPA3_ENTERPRISE, /**< authenticate mode : WPA3-Enterprise Transition Mode */ WIFI_AUTH_MAX } wifi_auth_mode_t; diff --git a/components/esp_wifi/lib b/components/esp_wifi/lib index 5dca4edbc4c5..41b2e6890dec 160000 --- a/components/esp_wifi/lib +++ b/components/esp_wifi/lib @@ -1 +1 @@ -Subproject commit 5dca4edbc4c5e20406878926fb24e9bbfcb67e88 +Subproject commit 41b2e6890dec98eef2756b6fccd2d4f1417ec9d6 diff --git a/examples/wifi/scan/main/scan.c b/examples/wifi/scan/main/scan.c index 1f4be36b2244..2dd34ff907a4 100644 --- a/examples/wifi/scan/main/scan.c +++ b/examples/wifi/scan/main/scan.c @@ -59,6 +59,12 @@ static void print_auth_mode(int authmode) case WIFI_AUTH_WPA2_WPA3_PSK: ESP_LOGI(TAG, "Authmode \tWIFI_AUTH_WPA2_WPA3_PSK"); break; + case WIFI_AUTH_WPA3_ENTERPRISE: + ESP_LOGI(TAG, "Authmode \tWIFI_AUTH_WPA3_ENTERPRISE"); + break; + case WIFI_AUTH_WPA2_WPA3_ENTERPRISE: + ESP_LOGI(TAG, "Authmode \tWIFI_AUTH_WPA2_WPA3_ENTERPRISE"); + break; case WIFI_AUTH_WPA3_ENT_192: ESP_LOGI(TAG, "Authmode \tWIFI_AUTH_WPA3_ENT_192"); break; From 5841495e7f474c12be486c7364edf16a46b3e3b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Rohl=C3=ADnek?= Date: Thu, 17 Oct 2024 09:21:33 +0200 Subject: [PATCH 213/365] fix(storage/fatfs): fix CMake project names in fatfs examples --- examples/storage/fatfs/ext_flash/CMakeLists.txt | 2 +- examples/storage/fatfs/fatfsgen/CMakeLists.txt | 2 +- examples/storage/fatfs/fs_operations/CMakeLists.txt | 2 +- examples/storage/fatfs/getting_started/CMakeLists.txt | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/storage/fatfs/ext_flash/CMakeLists.txt b/examples/storage/fatfs/ext_flash/CMakeLists.txt index 93841c0e29c3..66233663cd75 100644 --- a/examples/storage/fatfs/ext_flash/CMakeLists.txt +++ b/examples/storage/fatfs/ext_flash/CMakeLists.txt @@ -4,4 +4,4 @@ cmake_minimum_required(VERSION 3.16) # external SPI flash driver not currently supported for ESP32-S2 include($ENV{IDF_PATH}/tools/cmake/project.cmake) -project(ext_flash_fatfs) +project(fatfs_ext_flash) diff --git a/examples/storage/fatfs/fatfsgen/CMakeLists.txt b/examples/storage/fatfs/fatfsgen/CMakeLists.txt index 1c0c2b8a1a2a..0399bf40c59a 100644 --- a/examples/storage/fatfs/fatfsgen/CMakeLists.txt +++ b/examples/storage/fatfs/fatfsgen/CMakeLists.txt @@ -3,4 +3,4 @@ cmake_minimum_required(VERSION 3.16) include($ENV{IDF_PATH}/tools/cmake/project.cmake) -project(fatfsgen) +project(fatfs_fatfsgen) diff --git a/examples/storage/fatfs/fs_operations/CMakeLists.txt b/examples/storage/fatfs/fs_operations/CMakeLists.txt index 1c0c2b8a1a2a..2f478de10ddd 100644 --- a/examples/storage/fatfs/fs_operations/CMakeLists.txt +++ b/examples/storage/fatfs/fs_operations/CMakeLists.txt @@ -3,4 +3,4 @@ cmake_minimum_required(VERSION 3.16) include($ENV{IDF_PATH}/tools/cmake/project.cmake) -project(fatfsgen) +project(fatfs_fs_operations) diff --git a/examples/storage/fatfs/getting_started/CMakeLists.txt b/examples/storage/fatfs/getting_started/CMakeLists.txt index 1c0c2b8a1a2a..b5959836791d 100644 --- a/examples/storage/fatfs/getting_started/CMakeLists.txt +++ b/examples/storage/fatfs/getting_started/CMakeLists.txt @@ -3,4 +3,4 @@ cmake_minimum_required(VERSION 3.16) include($ENV{IDF_PATH}/tools/cmake/project.cmake) -project(fatfsgen) +project(fatfs_getting_started) From 4ae7b4aecf473b96113284b096e5f1b95f2f4b2e Mon Sep 17 00:00:00 2001 From: chenjianhua Date: Mon, 30 Sep 2024 11:04:33 +0800 Subject: [PATCH 214/365] feat(bt/bluedroid): Added API to set supported channel selection algorithm --- .../bt/host/bluedroid/api/esp_gap_ble_api.c | 17 +++++++++++++ .../api/include/api/esp_gap_ble_api.h | 24 +++++++++++++++++++ .../bt/host/bluedroid/bta/dm/bta_dm_act.c | 6 +++++ .../bt/host/bluedroid/bta/dm/bta_dm_api.c | 13 ++++++++++ .../bt/host/bluedroid/bta/dm/bta_dm_main.c | 1 + .../bluedroid/bta/dm/include/bta_dm_int.h | 9 +++++++ .../host/bluedroid/bta/include/bta/bta_api.h | 4 ++++ .../btc/profile/std/gap/btc_gap_ble.c | 22 +++++++++++++++++ .../btc/profile/std/include/btc_gap_ble.h | 5 ++++ .../bt/host/bluedroid/stack/btm/btm_ble_gap.c | 11 +++++++++ .../bt/host/bluedroid/stack/btm/btm_devctl.c | 8 +++++++ .../bluedroid/stack/btm/include/btm_ble_int.h | 1 + .../bt/host/bluedroid/stack/hcic/hciblecmds.c | 24 ++++++++++++++++++- .../stack/include/stack/btm_ble_api.h | 15 ++++++++++++ .../bluedroid/stack/include/stack/hcidefs.h | 3 +++ .../bluedroid/stack/include/stack/hcimsgs.h | 8 +++++-- 16 files changed, 168 insertions(+), 3 deletions(-) diff --git a/components/bt/host/bluedroid/api/esp_gap_ble_api.c b/components/bt/host/bluedroid/api/esp_gap_ble_api.c index d37f3724be80..a4122529799b 100644 --- a/components/bt/host/bluedroid/api/esp_gap_ble_api.c +++ b/components/bt/host/bluedroid/api/esp_gap_ble_api.c @@ -1049,6 +1049,23 @@ esp_err_t esp_ble_gap_set_privacy_mode(esp_ble_addr_type_t addr_type, esp_bd_add == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL); } +esp_err_t esp_ble_gap_set_csa_support(uint8_t csa_select) +{ + btc_msg_t msg; + btc_ble_gap_args_t arg; + + ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); + + msg.sig = BTC_SIG_API_CALL; + msg.pid = BTC_PID_GAP_BLE; + msg.act = BTC_GAP_BLE_SET_CSA_SUPPORT; + + arg.set_csa_support.csa_select = csa_select; + + return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_gap_args_t), NULL, NULL) + == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL); +} + #if (BLE_50_FEATURE_SUPPORT == TRUE) esp_err_t esp_ble_gap_read_phy(esp_bd_addr_t bd_addr) diff --git a/components/bt/host/bluedroid/api/include/api/esp_gap_ble_api.h b/components/bt/host/bluedroid/api/include/api/esp_gap_ble_api.h index 589945b3175a..83fea16a99cb 100644 --- a/components/bt/host/bluedroid/api/include/api/esp_gap_ble_api.h +++ b/components/bt/host/bluedroid/api/include/api/esp_gap_ble_api.h @@ -229,6 +229,7 @@ typedef enum { ESP_GAP_BLE_ADD_DEV_TO_RESOLVING_LIST_COMPLETE_EVT, /*!< when add a device to the resolving list completes, the event comes*/ ESP_GAP_BLE_VENDOR_CMD_COMPLETE_EVT, /*!< When vendor hci command complete, the event comes */ ESP_GAP_BLE_SET_PRIVACY_MODE_COMPLETE_EVT, /*!< When set privacy mode complete, the event comes */ + ESP_GAP_BLE_SET_CSA_SUPPORT_COMPLETE_EVT, /*!< When set CSA support complete, the event comes */ ESP_GAP_BLE_EVT_MAX, /*!< when maximum advertising event complete, the event comes */ } esp_gap_ble_cb_event_t; @@ -1572,6 +1573,12 @@ typedef union { struct ble_set_privacy_mode_cmpl_evt_param { esp_bt_status_t status; /*!< Indicate privacy mode set operation success status */ } set_privacy_mode_cmpl; /*!< Event parameter of ESP_GAP_BLE_SET_PRIVACY_MODE_COMPLETE_EVT */ + /** + * @brief ESP_GAP_BLE_SET_CSA_SUPPORT_COMPLETE_EVT + */ + struct ble_set_csa_support_cmpl_evt_param { + esp_bt_status_t status; /*!< Indicate CSA support set operation success status */ + } set_csa_support_cmpl; /*!< Event parameter of ESP_GAP_BLE_SET_CSA_SUPPORT_COMPLETE_EVT */ } esp_ble_gap_cb_param_t; /** @@ -2744,6 +2751,23 @@ esp_err_t esp_ble_gap_vendor_command_send(esp_ble_vendor_cmd_params_t *vendor_cm */ esp_err_t esp_ble_gap_set_privacy_mode(esp_ble_addr_type_t addr_type, esp_bd_addr_t addr, esp_ble_privacy_mode_t mode); +/** + * @brief This function is used to set which channel selection algorithm(CSA) is supported. + * + * @note - This function should only be used when there are BLE compatibility issues about channel hopping after connected. + * For example, if the peer device only supports CSA#1, this function can be called to make the Controller use CSA#1. + * - This function is not supported on ESP32. + * + * @param[in] csa_select: 0: Channel Selection Algorighm will be selected by Controller + * 1: Select the LE Channel Selection Algorighm #1 + * 2: Select the LE Channel Selection Algorighm #2 + * + * @return + * - ESP_OK : success + * - other : failed + */ +esp_err_t esp_ble_gap_set_csa_support(uint8_t csa_select); + #ifdef __cplusplus } #endif diff --git a/components/bt/host/bluedroid/bta/dm/bta_dm_act.c b/components/bt/host/bluedroid/bta/dm/bta_dm_act.c index 0ff6dc6c2ca4..58d545d3b948 100644 --- a/components/bt/host/bluedroid/bta/dm/bta_dm_act.c +++ b/components/bt/host/bluedroid/bta/dm/bta_dm_act.c @@ -5859,6 +5859,12 @@ void bta_dm_ble_gap_set_privacy_mode(tBTA_DM_MSG *p_data) p_data->ble_set_privacy_mode.privacy_mode, p_data->ble_set_privacy_mode.p_cback); } +void bta_dm_ble_gap_set_csa_support(tBTA_DM_MSG *p_data) +{ + APPL_TRACE_API("%s, csa_select = %d", __func__, p_data->ble_set_csa_support.csa_select); + BTM_BleSetCsaSupport(p_data->ble_set_csa_support.csa_select, p_data->ble_set_csa_support.p_cback); +} + #if (BLE_50_FEATURE_SUPPORT == TRUE) void bta_dm_ble_gap_dtm_enhance_tx_start(tBTA_DM_MSG *p_data) { diff --git a/components/bt/host/bluedroid/bta/dm/bta_dm_api.c b/components/bt/host/bluedroid/bta/dm/bta_dm_api.c index 7ec61ee99943..71555246373c 100644 --- a/components/bt/host/bluedroid/bta/dm/bta_dm_api.c +++ b/components/bt/host/bluedroid/bta/dm/bta_dm_api.c @@ -3025,6 +3025,19 @@ void BTA_DmClearRandAddress(void) } } +void BTA_DmBleGapSetCsaSupport(uint8_t csa_select, tBTA_SET_CSA_SUPPORT_CMPL_CBACK *p_callback) +{ + tBTA_DM_API_BLE_SET_CSA_SUPPORT *p_msg; + + if ((p_msg = (tBTA_DM_API_BLE_SET_CSA_SUPPORT *)osi_malloc(sizeof(tBTA_DM_API_BLE_SET_CSA_SUPPORT))) + != NULL) { + p_msg->hdr.event = BTA_DM_API_BLE_SET_CSA_SUPPORT_EVT; + p_msg->csa_select = csa_select; + p_msg->p_cback = p_callback; + bta_sys_sendmsg(p_msg); + } +} + /******************************************************************************* ** ** Function BTA_VendorInit diff --git a/components/bt/host/bluedroid/bta/dm/bta_dm_main.c b/components/bt/host/bluedroid/bta/dm/bta_dm_main.c index 99736d8ececb..2d747f5b0784 100644 --- a/components/bt/host/bluedroid/bta/dm/bta_dm_main.c +++ b/components/bt/host/bluedroid/bta/dm/bta_dm_main.c @@ -235,6 +235,7 @@ const tBTA_DM_ACTION bta_dm_action[BTA_DM_MAX_EVT] = { bta_dm_ble_gap_set_rpa_timeout, /* BTA_DM_API_SET_RPA_TIMEOUT_EVT */ bta_dm_ble_gap_add_dev_to_resolving_list, /* BTA_DM_API_ADD_DEV_TO_RESOLVING_LIST_EVT */ bta_dm_ble_gap_set_privacy_mode, /* BTA_DM_API_SET_PRIVACY_MODE_EVT */ + bta_dm_ble_gap_set_csa_support, /* BTA_DM_API_BLE_SET_CSA_SUPPORT_EVT */ #endif }; diff --git a/components/bt/host/bluedroid/bta/dm/include/bta_dm_int.h b/components/bt/host/bluedroid/bta/dm/include/bta_dm_int.h index 862393fe8ab7..29af35c6dc5d 100644 --- a/components/bt/host/bluedroid/bta/dm/include/bta_dm_int.h +++ b/components/bt/host/bluedroid/bta/dm/include/bta_dm_int.h @@ -226,6 +226,7 @@ enum { BTA_DM_API_SET_RPA_TIMEOUT_EVT, BTA_DM_API_ADD_DEV_TO_RESOLVING_LIST_EVT, BTA_DM_API_SET_PRIVACY_MODE_EVT, + BTA_DM_API_BLE_SET_CSA_SUPPORT_EVT, #endif BTA_DM_MAX_EVT }; @@ -959,6 +960,12 @@ typedef struct { tBTA_SET_PRIVACY_MODE_CMPL_CBACK *p_cback; } tBTA_DM_API_SET_PRIVACY_MODE; +typedef struct { + BT_HDR hdr; + UINT8 csa_select; + tBTA_SET_CSA_SUPPORT_CMPL_CBACK *p_cback; +} tBTA_DM_API_BLE_SET_CSA_SUPPORT; + #endif /* BLE_INCLUDED */ /* data type for BTA_DM_API_REMOVE_ACL_EVT */ @@ -1365,6 +1372,7 @@ typedef union { tBTA_DM_API_BLE_DTM_STOP dtm_stop; tBTA_DM_API_CLEAR_ADV ble_clear_adv; tBTA_DM_API_SET_PRIVACY_MODE ble_set_privacy_mode; + tBTA_DM_API_BLE_SET_CSA_SUPPORT ble_set_csa_support; #endif tBTA_DM_API_REMOVE_ACL remove_acl; @@ -1817,6 +1825,7 @@ extern void bta_dm_ble_gap_clear_adv(tBTA_DM_MSG *p_data); extern void bta_dm_ble_gap_set_rpa_timeout(tBTA_DM_MSG *p_data); extern void bta_dm_ble_gap_add_dev_to_resolving_list(tBTA_DM_MSG *p_data); extern void bta_dm_ble_gap_set_privacy_mode(tBTA_DM_MSG *p_data); +extern void bta_dm_ble_gap_set_csa_support(tBTA_DM_MSG *p_data); #if (BLE_50_FEATURE_SUPPORT == TRUE) extern void bta_dm_ble_gap_dtm_enhance_tx_start(tBTA_DM_MSG *p_data); extern void bta_dm_ble_gap_dtm_enhance_rx_start(tBTA_DM_MSG *p_data); diff --git a/components/bt/host/bluedroid/bta/include/bta/bta_api.h b/components/bt/host/bluedroid/bta/include/bta/bta_api.h index 2ba9707de5fe..c0cabab2c71d 100644 --- a/components/bt/host/bluedroid/bta/include/bta/bta_api.h +++ b/components/bt/host/bluedroid/bta/include/bta/bta_api.h @@ -439,6 +439,8 @@ typedef tBTM_ADD_DEV_TO_RESOLVING_LIST_CMPL_CBACK tBTA_ADD_DEV_TO_RESOLVING_LIST typedef tBTM_SET_PRIVACY_MODE_CMPL_CBACK tBTA_SET_PRIVACY_MODE_CMPL_CBACK; +typedef tBTM_SET_CSA_SUPPORT_CMPL_CBACK tBTA_SET_CSA_SUPPORT_CMPL_CBACK; + typedef tBTM_CMPL_CB tBTA_CMPL_CB; typedef tBTM_VSC_CMPL tBTA_VSC_CMPL; @@ -2921,6 +2923,8 @@ extern void BTA_DmBleDtmStop(tBTA_DTM_CMD_CMPL_CBACK *p_dtm_cmpl_cback); extern void BTA_DmBleSetPrivacyMode(uint8_t addr_type, BD_ADDR addr, uint8_t privacy_mode, tBTA_SET_PRIVACY_MODE_CMPL_CBACK *p_cback); +extern void BTA_DmBleGapSetCsaSupport(uint8_t csa_select, tBTM_SET_CSA_SUPPORT_CMPL_CBACK *p_callback); + /******************************************************************************* ** ** Function BTA_DmBleSetStorageParams diff --git a/components/bt/host/bluedroid/btc/profile/std/gap/btc_gap_ble.c b/components/bt/host/bluedroid/btc/profile/std/gap/btc_gap_ble.c index 464f032417c8..b48670334667 100644 --- a/components/bt/host/bluedroid/btc/profile/std/gap/btc_gap_ble.c +++ b/components/bt/host/bluedroid/btc/profile/std/gap/btc_gap_ble.c @@ -1363,6 +1363,25 @@ static void btc_ble_set_privacy_mode_callback(UINT8 status) } } +static void btc_ble_set_csa_support_callback(UINT8 status) +{ + esp_ble_gap_cb_param_t param; + bt_status_t ret; + btc_msg_t msg = {0}; + + msg.sig = BTC_SIG_API_CB; + msg.pid = BTC_PID_GAP_BLE; + msg.act = ESP_GAP_BLE_SET_CSA_SUPPORT_COMPLETE_EVT; + + param.set_csa_support_cmpl.status = btc_btm_status_to_esp_status(status); + + ret = btc_transfer_context(&msg, ¶m, sizeof(esp_ble_gap_cb_param_t), NULL, NULL); + + if (ret != BT_STATUS_SUCCESS) { + BTC_TRACE_ERROR("%s btc_transfer_context failed\n", __func__); + } +} + void btc_get_whitelist_size(uint16_t *length) { BTM_BleGetWhiteListSize(length); @@ -2402,6 +2421,9 @@ void btc_gap_ble_call_handler(btc_msg_t *msg) btc_ble_set_privacy_mode(arg->set_privacy_mode.addr_type, arg->set_privacy_mode.addr, arg->set_privacy_mode.privacy_mode, btc_ble_set_privacy_mode_callback); break; + case BTC_GAP_BLE_SET_CSA_SUPPORT: + BTA_DmBleGapSetCsaSupport(arg->set_csa_support.csa_select, btc_ble_set_csa_support_callback); + break; default: break; } diff --git a/components/bt/host/bluedroid/btc/profile/std/include/btc_gap_ble.h b/components/bt/host/bluedroid/btc/profile/std/include/btc_gap_ble.h index e540116de19f..e1324b5faf4a 100644 --- a/components/bt/host/bluedroid/btc/profile/std/include/btc_gap_ble.h +++ b/components/bt/host/bluedroid/btc/profile/std/include/btc_gap_ble.h @@ -106,6 +106,7 @@ typedef enum { BTC_GAP_BLE_ACT_ADD_DEVICE_TO_RESOLVING_LIST, BTC_GAP_BLE_ACT_VENDOR_HCI_CMD_EVT, BTC_GAP_BLE_SET_PRIVACY_MODE, + BTC_GAP_BLE_SET_CSA_SUPPORT, } btc_gap_ble_act_t; /* btc_ble_gap_args_t */ @@ -274,6 +275,10 @@ typedef union { esp_bd_addr_t addr; uint8_t privacy_mode; } set_privacy_mode; + // BTC_GAP_BLE_SET_CSA_SUPPORT + struct set_csa_support_args { + uint8_t csa_select; + } set_csa_support; } btc_ble_gap_args_t; #if (BLE_50_FEATURE_SUPPORT == TRUE) diff --git a/components/bt/host/bluedroid/stack/btm/btm_ble_gap.c b/components/bt/host/bluedroid/stack/btm/btm_ble_gap.c index a85f6a16112d..bef993d18522 100644 --- a/components/bt/host/bluedroid/stack/btm/btm_ble_gap.c +++ b/components/bt/host/bluedroid/stack/btm/btm_ble_gap.c @@ -4761,6 +4761,17 @@ BOOLEAN BTM_BleSetPrivacyMode(UINT8 addr_type, BD_ADDR bd_addr, UINT8 privacy_mo return TRUE; } +BOOLEAN BTM_BleSetCsaSupport(UINT8 csa_select, tBTM_SET_CSA_SUPPORT_CMPL_CBACK *p_callback) +{ + if (btsnd_hcic_ble_set_csa_support(csa_select) != TRUE) { + BTM_TRACE_ERROR("LE SetCsaSupport csa_select=%d: error", csa_select); + return FALSE; + } + + btm_cb.ble_ctr_cb.set_csa_support_cmpl_cb = p_callback; + return TRUE; +} + bool btm_ble_adv_pkt_ready(void) { tBTM_BLE_CB *p_cb = &btm_cb.ble_ctr_cb; diff --git a/components/bt/host/bluedroid/stack/btm/btm_devctl.c b/components/bt/host/bluedroid/stack/btm/btm_devctl.c index bab88739a080..d3c4ac61da2f 100644 --- a/components/bt/host/bluedroid/stack/btm/btm_devctl.c +++ b/components/bt/host/bluedroid/stack/btm/btm_devctl.c @@ -773,6 +773,14 @@ void btm_vsc_complete (UINT8 *p, UINT16 opcode, UINT16 evt_len, } break; } + case HCI_VENDOR_BLE_SET_CSA_SUPPORT: { + uint8_t status; + STREAM_TO_UINT8(status, p); + if (ble_cb && ble_cb->set_csa_support_cmpl_cb) { + ble_cb->set_csa_support_cmpl_cb(status); + } + break; + } default: break; } diff --git a/components/bt/host/bluedroid/stack/btm/include/btm_ble_int.h b/components/bt/host/bluedroid/stack/btm/include/btm_ble_int.h index 0f8888fb1bd1..d81a03c0a92c 100644 --- a/components/bt/host/bluedroid/stack/btm/include/btm_ble_int.h +++ b/components/bt/host/bluedroid/stack/btm/include/btm_ble_int.h @@ -377,6 +377,7 @@ typedef struct { tBTM_BLE_STATE_MASK cur_states; /* bit mask of tBTM_BLE_STATE */ UINT8 link_count[2]; /* total link count master and slave*/ tBTM_UPDATE_DUPLICATE_EXCEPTIONAL_LIST_CMPL_CBACK *update_exceptional_list_cmp_cb; + tBTM_SET_CSA_SUPPORT_CMPL_CBACK *set_csa_support_cmpl_cb; } tBTM_BLE_CB; #ifdef __cplusplus diff --git a/components/bt/host/bluedroid/stack/hcic/hciblecmds.c b/components/bt/host/bluedroid/stack/hcic/hciblecmds.c index 52a2b2dc09ef..c51746b1aaec 100644 --- a/components/bt/host/bluedroid/stack/hcic/hciblecmds.c +++ b/components/bt/host/bluedroid/stack/hcic/hciblecmds.c @@ -1910,7 +1910,7 @@ UINT8 btsnd_hcic_ble_set_default_periodic_adv_sync_trans_params(UINT8 mode, UINT } #endif // #if (BLE_FEAT_PERIODIC_ADV_SYNC_TRANSFER == TRUE) -UINT8 btsnd_hcic_ble_set_privacy_mode(UINT8 addr_type, BD_ADDR addr, UINT8 privacy_mode) +BOOLEAN btsnd_hcic_ble_set_privacy_mode(UINT8 addr_type, BD_ADDR addr, UINT8 privacy_mode) { BT_HDR *p; UINT8 *pp; @@ -1933,4 +1933,26 @@ UINT8 btsnd_hcic_ble_set_privacy_mode(UINT8 addr_type, BD_ADDR addr, UINT8 priva btu_hcif_send_cmd(LOCAL_BR_EDR_CONTROLLER_ID, p); return (TRUE); } + +BOOLEAN btsnd_hcic_ble_set_csa_support (UINT8 csa_select) +{ + BT_HDR *p; + UINT8 *pp; + + if ((p = HCI_GET_CMD_BUF (HCIC_PARAM_SIZE_BLE_SET_CSA_SUPPORT)) == NULL) { + return (FALSE); + } + + pp = (UINT8 *)(p + 1); + + p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_BLE_SET_CSA_SUPPORT; + p->offset = 0; + + UINT16_TO_STREAM (pp, HCI_VENDOR_BLE_SET_CSA_SUPPORT); + UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_BLE_SET_CSA_SUPPORT); + UINT8_TO_STREAM (pp, csa_select); + + btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); + return TRUE; +} #endif diff --git a/components/bt/host/bluedroid/stack/include/stack/btm_ble_api.h b/components/bt/host/bluedroid/stack/include/stack/btm_ble_api.h index 21d783dd2b10..3dc7dc8b3315 100644 --- a/components/bt/host/bluedroid/stack/include/stack/btm_ble_api.h +++ b/components/bt/host/bluedroid/stack/include/stack/btm_ble_api.h @@ -1007,6 +1007,7 @@ typedef void (tBTM_START_STOP_ADV_CMPL_CBACK) (UINT8 status); typedef void (tBTM_UPDATE_DUPLICATE_EXCEPTIONAL_LIST_CMPL_CBACK) (tBTM_STATUS status, uint8_t subcode, uint32_t length, uint8_t *device_info); typedef void (tBTM_CLEAR_ADV_CMPL_CBACK) (UINT8 status); typedef void (tBTM_SET_PRIVACY_MODE_CMPL_CBACK) (tBTM_STATUS status); +typedef void (tBTM_SET_CSA_SUPPORT_CMPL_CBACK) (tBTM_STATUS status); #if (BLE_50_FEATURE_SUPPORT == TRUE) #define BTM_BLE_5_GAP_READ_PHY_COMPLETE_EVT 1 @@ -2724,6 +2725,20 @@ BOOLEAN BTM_BleSetPrivacyMode(UINT8 addr_type, UINT8 privacy_mode, tBTM_SET_PRIVACY_MODE_CMPL_CBACK *p_callback); +/******************************************************************************* +** +** Function BTM_BleSetCsaSupport +** +** Description This function is called to set the ChSel field of Advertising or Initiating PDUs +** +** Parameters csa_select - Select LE Channel Selection Algorithm. +** p_callback - Callback function to be called when the operation is completed. +** +** Returns TRUE if the operation was successful, otherwise FALSE. +** +*******************************************************************************/ +BOOLEAN BTM_BleSetCsaSupport (UINT8 csa_select, tBTM_SET_CSA_SUPPORT_CMPL_CBACK *p_callback); + /* #ifdef __cplusplus } diff --git a/components/bt/host/bluedroid/stack/include/stack/hcidefs.h b/components/bt/host/bluedroid/stack/include/stack/hcidefs.h index b77e8854767b..0943c624f929 100644 --- a/components/bt/host/bluedroid/stack/include/stack/hcidefs.h +++ b/components/bt/host/bluedroid/stack/include/stack/hcidefs.h @@ -422,6 +422,7 @@ #define HCI_SUBCODE_BLE_ADV_REPORT_FLOW_CONTROL 0x0A #define HCI_SUBCODE_BLE_RD_STATIC_ADDR 0x0B #define HCI_SUBCODE_BLE_CLEAR_ADV 0x0C +#define HCI_SUBCODE_BLE_SET_CSA_SUPPORT 0x12 #define HCI_SUBCODE_BLE_MAX 0x7F //ESP BT subcode define @@ -468,6 +469,8 @@ #define HCI_VENDOR_BLE_ADV_REPORT_FLOW_CONTROL HCI_ESP_VENDOR_OPCODE_BUILD(HCI_VENDOR_OGF, HCI_ESP_GROUP_BLE, HCI_SUBCODE_BLE_ADV_REPORT_FLOW_CONTROL) /* BLE clear legacy advertising */ #define HCI_VENDOR_BLE_CLEAR_ADV HCI_ESP_VENDOR_OPCODE_BUILD(HCI_VENDOR_OGF, HCI_ESP_GROUP_BLE, HCI_SUBCODE_BLE_CLEAR_ADV) +/* BLE set CSA support */ +#define HCI_VENDOR_BLE_SET_CSA_SUPPORT HCI_ESP_VENDOR_OPCODE_BUILD(HCI_VENDOR_OGF, HCI_ESP_GROUP_BLE, HCI_SUBCODE_BLE_SET_CSA_SUPPORT) //ESP BT HCI CMD #define HCI_VENDOR_BT_SET_MIN_ENC_KEY_SIZE HCI_ESP_VENDOR_OPCODE_BUILD(HCI_VENDOR_OGF, HCI_ESP_GROUP_BT, HCI_SUBCODE_BT_SET_MIN_ENC_KEY_SIZE) diff --git a/components/bt/host/bluedroid/stack/include/stack/hcimsgs.h b/components/bt/host/bluedroid/stack/include/stack/hcimsgs.h index 951e5b703a7f..252efa721917 100644 --- a/components/bt/host/bluedroid/stack/include/stack/hcimsgs.h +++ b/components/bt/host/bluedroid/stack/include/stack/hcimsgs.h @@ -759,6 +759,7 @@ void btsnd_hcic_vendor_spec_cmd (BT_HDR *buffer, UINT16 opcode, #define HCIC_PARAM_SIZE_BLE_UPDATE_ADV_FLOW_CONTROL 2 #define HCIC_PARAM_SIZE_BLE_CLEAR_ADV 0 #define HCIC_PARAM_SIZE_SET_PRIVACY_MODE 8 +#define HCIC_PARAM_SIZE_BLE_SET_CSA_SUPPORT 1 #if (BLE_50_FEATURE_SUPPORT == TRUE) #define HCIC_PARAM_SIZE_BLE_READ_PHY 2 #define HCIC_PARAM_SIZE_BLE_SET_DEF_PHY 3 @@ -914,7 +915,12 @@ BOOLEAN btsnd_hcic_ble_set_rand_priv_addr_timeout (UINT16 rpa_timout); BOOLEAN btsnd_hcic_ble_clear_adv(void); +BOOLEAN btsnd_hcic_ble_set_privacy_mode(UINT8 addr_type, BD_ADDR addr, UINT8 privacy_mode); + +BOOLEAN btsnd_hcic_ble_set_csa_support (UINT8 csa_select); + #endif /* BLE_INCLUDED */ + #if (BLE_50_FEATURE_SUPPORT == TRUE) typedef struct { UINT8 scan_type; @@ -1042,8 +1048,6 @@ UINT8 btsnd_hcic_ble_write_rf_path_compensation(UINT16 rf_tx_path, UINT16 rf_rx_ #endif // #if (BLE_50_FEATURE_SUPPORT == TRUE) -UINT8 btsnd_hcic_ble_set_privacy_mode(UINT8 addr_type, BD_ADDR addr, UINT8 privacy_mode); - #define HCIC_PARAM_SIZE_WRITE_AUTHENT_PAYLOAD_TOUT 4 #define HCI__WRITE_AUTHENT_PAYLOAD_TOUT_HANDLE_OFF 0 From 8e511ffb4e097a0781ab2e9fd79b5bab2bab9ee8 Mon Sep 17 00:00:00 2001 From: Marius Vikhammer Date: Thu, 17 Oct 2024 17:04:55 +0800 Subject: [PATCH 215/365] fix(hints): added missing seperator between hints --- tools/idf_py_actions/hints.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/idf_py_actions/hints.yml b/tools/idf_py_actions/hints.yml index 20ff00e2c0e3..67c57f3a7c63 100644 --- a/tools/idf_py_actions/hints.yml +++ b/tools/idf_py_actions/hints.yml @@ -448,5 +448,6 @@ re: "(error: Total discarded sections size is \\d+ bytes)|(region [`'.\\w]+ overflowed by \\d+ bytes)" hint: "The binary size has exceeded the limit. To resolve the issue consider reducing the binary size.\nYou can explore size optimization techniques in the documentation by running 'idf.py docs -sp api-guides/performance/size.html#reducing-overall-size'.\nNote that the linker performed the dead code elimination." +- re: "implicit declaration of function '__VA_NARG__'" hint: "__VA_NARG_ has been renamed. Please use ESP_VA_NARG instead" From 3df0e6022d600f5ac98782b035c60763c6e31423 Mon Sep 17 00:00:00 2001 From: Zhang Shuxian Date: Wed, 16 Oct 2024 15:45:15 +0800 Subject: [PATCH 216/365] docs: Delete user guide esp32-s2-saola-1, esp32-s3-devkitc-1 and esp32-s3-devkitm-1 --- .../ESP32-S3-DevKitC-1_v1-SystemBlock.png | Bin 66125 -> 0 bytes .../ESP32-S3-DevKitC-1_v1-annotated-photo.png | Bin 334074 -> 0 bytes ...SP32-S3-DevKitC-1_v1.1-annotated-photo.png | Bin 347002 -> 0 bytes .../ESP32-S3-DevKitC-1_v2-SystemBlock.png | Bin 69521 -> 0 bytes .../ESP32-S3-DevKitC-1_v2-annotated-photo.png | Bin 375317 -> 0 bytes .../ESP32-S3-DevKitM-1_v1-annotated-photo.png | Bin 334464 -> 0 bytes .../ESP32-S3-DevKitM-1_v1_SystemBlock.png | Bin 65655 -> 0 bytes docs/_static/ESP32-S3_DevKitC-1_pinlayout.jpg | Bin 340284 -> 0 bytes .../ESP32-S3_DevKitC-1_pinlayout_v1.1.jpg | Bin 461010 -> 0 bytes docs/_static/ESP32-S3_DevKitM-1_pinlayout.jpg | Bin 300954 -> 0 bytes .../esp32-s2-saola-1-v1.2-annotated-photo.png | Bin 305003 -> 0 bytes .../esp32-s2-saola-1-v1.2-block-diags.png | Bin 75801 -> 0 bytes .../esp32-s2-saola-1-v1.2-isometric.png | Bin 161893 -> 0 bytes docs/_static/esp32-s2_saola1-pinout.jpg | Bin 455028 -> 0 bytes .../esp32-s3-devkitc-1-v1-isometric.png | Bin 479204 -> 0 bytes .../esp32-s3-devkitc-1-v1.1-isometric.png | Bin 479294 -> 0 bytes .../esp32-s3-devkitm-1-v1-isometric.png | Bin 481786 -> 0 bytes docs/en/get-started/index.rst | 6 +- .../esp32s2/user-guide-saola-1-v1.2.rst | 262 -------------- .../esp32s3/user-guide-devkitc-1-v1.0.rst | 320 ----------------- .../esp32s3/user-guide-devkitc-1.rst | 329 ------------------ .../esp32s3/user-guide-devkitm-1.rst | 258 -------------- docs/zh_CN/get-started/index.rst | 6 +- .../esp32s2/user-guide-saola-1-v1.2.rst | 262 -------------- .../esp32s3/user-guide-devkitc-1-v1.0.rst | 320 ----------------- .../esp32s3/user-guide-devkitc-1.rst | 329 ------------------ .../esp32s3/user-guide-devkitm-1.rst | 258 -------------- 27 files changed, 6 insertions(+), 2344 deletions(-) delete mode 100644 docs/_static/ESP32-S3-DevKitC-1_v1-SystemBlock.png delete mode 100644 docs/_static/ESP32-S3-DevKitC-1_v1-annotated-photo.png delete mode 100644 docs/_static/ESP32-S3-DevKitC-1_v1.1-annotated-photo.png delete mode 100644 docs/_static/ESP32-S3-DevKitC-1_v2-SystemBlock.png delete mode 100644 docs/_static/ESP32-S3-DevKitC-1_v2-annotated-photo.png delete mode 100644 docs/_static/ESP32-S3-DevKitM-1_v1-annotated-photo.png delete mode 100644 docs/_static/ESP32-S3-DevKitM-1_v1_SystemBlock.png delete mode 100644 docs/_static/ESP32-S3_DevKitC-1_pinlayout.jpg delete mode 100644 docs/_static/ESP32-S3_DevKitC-1_pinlayout_v1.1.jpg delete mode 100644 docs/_static/ESP32-S3_DevKitM-1_pinlayout.jpg delete mode 100644 docs/_static/esp32-s2-saola-1-v1.2-annotated-photo.png delete mode 100644 docs/_static/esp32-s2-saola-1-v1.2-block-diags.png delete mode 100644 docs/_static/esp32-s2-saola-1-v1.2-isometric.png delete mode 100644 docs/_static/esp32-s2_saola1-pinout.jpg delete mode 100644 docs/_static/esp32-s3-devkitc-1-v1-isometric.png delete mode 100644 docs/_static/esp32-s3-devkitc-1-v1.1-isometric.png delete mode 100644 docs/_static/esp32-s3-devkitm-1-v1-isometric.png delete mode 100644 docs/en/hw-reference/esp32s2/user-guide-saola-1-v1.2.rst delete mode 100644 docs/en/hw-reference/esp32s3/user-guide-devkitc-1-v1.0.rst delete mode 100644 docs/en/hw-reference/esp32s3/user-guide-devkitc-1.rst delete mode 100644 docs/en/hw-reference/esp32s3/user-guide-devkitm-1.rst delete mode 100644 docs/zh_CN/hw-reference/esp32s2/user-guide-saola-1-v1.2.rst delete mode 100644 docs/zh_CN/hw-reference/esp32s3/user-guide-devkitc-1-v1.0.rst delete mode 100644 docs/zh_CN/hw-reference/esp32s3/user-guide-devkitc-1.rst delete mode 100644 docs/zh_CN/hw-reference/esp32s3/user-guide-devkitm-1.rst diff --git a/docs/_static/ESP32-S3-DevKitC-1_v1-SystemBlock.png b/docs/_static/ESP32-S3-DevKitC-1_v1-SystemBlock.png deleted file mode 100644 index feb598763f3721dcef7c400e8bfb002db41e00d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66125 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

    v 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 diff --git a/docs/_static/ESP32-S3-DevKitC-1_v1-annotated-photo.png b/docs/_static/ESP32-S3-DevKitC-1_v1-annotated-photo.png deleted file mode 100644 index 8a0ae98b395567677bdface9463dc46be5086787..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 334074 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 z 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

    _MHhw;p8o82Sj5WAZBLHuRrC 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

    jPJqti|9iMsKkcEImHuut~x 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®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%0ADnb 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

    iLYzK`neGg9#01x_ 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 diff --git a/docs/_static/ESP32-S3-DevKitC-1_v2-SystemBlock.png b/docs/_static/ESP32-S3-DevKitC-1_v2-SystemBlock.png deleted file mode 100644 index 58ab4f25a83ce4e0bfca943f7d69d9322f6cb896..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69521 zcmX6^Wmp_dv&AL2Ll$4$Ex60#8iGr32oAw5Sa7%C`Xa&ICAhn5aDuzb9lrZ#pV{e| z?rE#8I(1H%ijp+ihmRkiprFuXWhB+0pkRifprF^05P;tsVUm6*Xbde`NilVIgX2uZ zRn6_E0sB@=MOm)0GPP@KZ3+%GqW>g0YB)J5m&{BhHOz?=snR7O*wi1x#iimC75Cme zH<~-&t}^yB&fGh;y$4)64fb!mC)&>@nzN7e_FF2ePdndUt+~v|{9S5AByS;F*5&o4 z+0U)`V0S+Y``++7y-86`@1*4%WR z^uJF@@z6BxSboD3oP6j=STj-laF8D(>{(ZkpTC3>EOfZx_tqX=&8vwdE{Wm4ps7eA&QZJ8lVr7Ywco4F&ifa;KVBb? zDiwQvqHW5XXf?%rycB*umzXJ##c|$=lTM?}a_^p3jm5D~cM^r=pg)M1N?)ip8R%`d zjv|Bs-o05c920qaHlb0RGxO7|G-yYaMW$pOLeurEhkAT`t7y}IdAZwoYf`B2LZIQj+(}Rtrh$Da zSe0rf$#lY)&hfa~!%MF3czb=4y;y}&kt)dn&d>B!W)+178(Bo=de%4S!AQ zb$oG4VCX&dx3se3cdNr@w{4cs?GpNahVyu=0_9E$bGFO8w!~TUe%8$E^VP%+2cMF< z4>dejf^N(AfB3e`byyX4a_MZbQl?ggN|_&ZM|_`7EE-mwUj`QY=m|+Ote?>LDll5J(Z6tbNtx}}7 zUuh_RII8R%1s*mm6tEPmdkn%+at|HBlWSKt@cj3motTLQJL~SoQROT_4>H+=_8$%b&@ZSk|Kg-c9}HE5J$|5e9h***`8^vIDyEx@1YEL{xXh}O z#ejJ1q z*75Y+o)wYg`(#A4E6qylQx2BX*Yq96!BN|j`i0k(&WZstzf~lUx}{Rh%4obIm?~>^ z1WQEIi7X*$!JFC7ASDLb{2ONjkwmo-ZqarLv9xE!bwy-y`BKpr zxSAYbVz1+Bo)HwIK-0s=qe1!J>@SITxuQ>+t>5N;e~Z_6xM~);TXlXy*d?$uP&53! zUQb=C9go1DE!z69mp+!k=X`(N$g2O)#9ox;`8y7SSU}OhRE8L9cTb){CP!K17m7n9tps1$%IaMF<5?rHq`k-8R|8NQ3#u15xft5$NWa7q9SxFAh4|K1(%b z>1Q<~EVVIwd%p(kJ6~>VVV8SrzBae9mX5G?t~$j1-JIdm8A%?cvC4s_THm6-Vi8u= z*F+zDuJ~Luz7WO>QgY{aIW(Quchi3g<}>Ps>xoOt;7Sj~5MB&L?bmZ2`@~Jw#lVqm zx}W*2y}(}yuGN9#UgT}KDARRW<|8Zza;)s>YCH}_N?WTy zaw?(-Faqm(?eRRCF$CCQ`qbVYY61V{u;)0xA-@KOj|CGLSlYGxE7T&AwrA8RLn@Om zOeno)jAgaRS)qh;cJ91gwjMJ}(Kp|KCe~p!Xj`-a9xl`<*KyUigdR+(!-^h7k~W_= z^z(UwZv%!IL=kNEQ|9A=`?3C{-Sz7V4Y>V^RWQ}-4(9n^QMN)7!j7EfC67zUyUedEiTD>>}88gWFEuhzV?&+S&C6Z z|DaT-*^gUacL&!&qC7urBh=1LgThlBA0qQ_88&w~a{K|J+suyvC@h#u zPh$iQ;w&X!+FEoP5c~`L?Iv^n5ae2IRi5LfcG2ZCBJ#ZGBgo#>_od-d+wLJUNaLE^)ZghaoywD18DZBDQ5Dh7 zXTxR-25fiMKScf_zs3v90M!er%?mi`yq?GbY zq0}KATJL=5HSMS8&3W)VS$}yO)0Pyeh^!m)S*vm1jNbv-L~SRUb`6?m2Ecw~OXIfv zc$e7khnu7bm2lEZ?!Q+cuIYMyS3PwMx4(Zh%O^{x$A zmQUeB{=eK-J!l3D=vLWanGluu{}mukRy)&v%2Sz1Xux~mK{S0lS*Y9~ugLk5NBc{e zoO2*ZG@>QRQeWTFrJ`ZYbp`%e2r#X7@ahA#E#B34yukFtd7^8P29ZD>NnIlNs+X`~PDIg{eO?9KSZ{;(VKQ0?-pH&Gp|wAd*V-wl&yPv(2_NL*IvI4Y zWmHB4qK28j*%79SKUvQfUu3>@G8*m~RFT6L=f7k;?l5)<9t6Or4hejfx;GRtbhVun z{P58ff5+8%a_f@1@~_xBV1cgSMfI4yVUUgb9>g|k?6ur&u}TFQ}mW~SwlY(L^)6|BwRx-OS&dV?j!X=zH7^P6-N zp*?^_!K1gI?bo4S|7MN(qy0hf$L}wt_&nl7TKaz@F#I4t?jH8Db^Y?1_LjbtmPg9; zjJho7TlhX-NP{)LIL3r>ur=oWqr}`D zTX>8p`5@OHuL}9eZ}DI>~PaEC@5Zi+wp)qW*t>BJog{;!HKgQDj^Hp22^}b_JQ~+M8TSMFleR4-N#k!+ zcXt0|4o*K{lJI{&(7q?QX=zumh*ND;{9t-U73duSbabF$n7MJ)xD#nNXLcQyZ7As~ z-Dy8E$jkA2&CI;6y{${dIoYtGs$ku?ypt{Iz^{1h4#~ID{TH0O;51BAqnRKQ1Jwl5 zmxyG)3j(tRk{yV%Vfe9zu<=f4$Ex=#tOGpyUne|j31bcF3`3Px?-9mYq%bOqhGfv& zDAj_ly^v$=^S-CS3bqLCU--pNHsmSO_Tt!H%t3_DUC@cV3748^?X&?(mPW}arnV44 z_B8vBhyDz}$zjjVZL*bU*cKj*PlceGUYtGP7l1m{E%>a&NByt4UlbxSST9~JrT1Z@uVQ>3cDO)O z`%kzpG|^hqASl!~LD8R!HA_uiWnie~??oe?|IAzKuNwmVDIfB|l8VZ~)wAART(!QR zk3`VTl(0oJ2#E8F=pHNnIkrb zK%>S-Qym?r@~uG3m7&Tg^Gokc*>i;Q55@0L`QIY;ycY>$5z%q(72N!Bu`f#Bo;Kb_ z+dQt0X?@k{tzvPiosLZ#k;L~%9J-*nB|~uT5t%1PLO!1&{_@k`Tv=&q@J71-oTvW; zc(zM4@XUva6I&C)4?77b?GXbHzuifz%)f@Yrjc=-wdY$)W}MTadmH-P%xSrDY!4#h z|M^II>(@LTrfK@)O&QL>n9>MdJKd%x?1j;=3n9(#W=?bEYCJ~xaghIDkC(+jX1>6! z#xL&l74W>*#@`-}*7U<%b+kH%b|gf!$;Z`Xi7#)@Hab`7TaQX5LeP7f10HW-&hB3R z&6DT-TwGuxMjJZf;V(A4oJLrJJy%hx!ugNNFgmOy?8KOTzS@NZ)4g!4F_C-FPE6`n zEPiS~kv*1^zm)PwL5$^1^rp5&kmeyfUw{vBf{tbIQni|bg&xNzbmwapypSYO?8A2i zb&Z{!53As|6imA$s=VC~swL$ly`vVe@WPl>OfJJ5Q8uI0nZhGKj$O-O3BMu_{u+n+ zS2s4-qhJv|REI`IAk%Ldnd_NIPFwp!ych?mCcVkK_U*ve1U$B&kLlA-O)V^nV)RFK zl$~YJPW-aOGZRS)L541`Gvf_;mh$(LhJ`*>>f9I}=GA=xNl^t)L*f(?CRw zXcDxCqn*c&zoM>Cxo^bDLH5#(d}X}*5AY})&}e+Q=<*YSR|>0_Rjx~etdg-NgDpLu z$=Je%YyC}Dg;CH=321}A1P>`>WJn3itrP4fzx7FxBL>4Gaqi@jadO{;twfxky1)Wp^zb7GrEQX-+0}TeQGh>{G zHX=@C_{(bEVxJgF2Ct)WYtFOr*!Euu9~a2=cd4X1L7Crv_bmD?k$5u=6|dgy%8{bt z;c-nU<#7x!Y$EaVNmUv=_Zw3-rj!q|i=`}ENtUv|eNvo!)<&@eeYiP#F27w5qmxAB zQqVKrs(k0vL~V?$?|u^`1H&Ssw{e+dCR<9kq=J3Vg9xpr^7`tk*vPPyD|3EM9GK&S z`ben85={8`xICW;4RW{GE@Ve<(D@H?2-vrsE7gYi-A)CwCW%9cod&NC#@t6RJ=!jZ z84*J(bF`fbrw9Vp3Pdu6RCo9Ln-oLeC8TVfQO&X| zDvcE-XL<=S6s$=Sx78`>=k!$;maLBv_Q^|$)vdpHSkilaum8BMdlY>VY-m&v#3tDQ z;;j%z3-M7Sd!iZv8+AkPi@rbyt1V`bh_AN=rF*FH2?bq*$4G2+XvrRur`U*Pc#WD|tA??TID=_Jhk*SHn=RlE<<|IfnYBw8B9w)~uRQYga4OHvz0a$rZ^b@iI=MGNC@WR@=-Bb+vpa0192g6gik^vWc&LKxG8C;CuVlff+K?1SRF@ySApSYGQR(-6P3Po z;q6x=$)y^>#NY<{)>iq^3z{P`V_;KIQW(usK^4b3zmXYnZBUY!UYnVLBUNvoF3tEa z$@TW}4VyjrosT;|Dh3S&buIXU$@0xTzMcrbVL52DInr|)KxOoR^=h`$^jC#H8lglI zhJjGK92IE{Hy}2tM(x!y ziFMD?N*2Ewk$Trg*R{7zFj(Q6=*+<^+BLl`@M)YD(Q9osrr7;=-A{{AjFp6~&FqIo zq`o3S|5dG{$=H}4hOf@umdj$vAo@3@6a60DOTtL|1%~6M3uA+&+SDJ8#DI76xb(+i zboRiet5fjtd*TT8%ttEtA-X!IAi_)3{e+#4yH4l|MLVpbeg?@9^r(r$fR;BZ!H}n1 zFFsM%6C$|v7hLulIgX-{B1eP6wlmLQ@xTG4N)nMVX%VB0rbNM>vj#RQ)CvZVq`P@YRC#*1>RhG6U&_E!LK(>8cGcH)R@7$5vG0@nDdbu}})$X^O2{=FNA2-Lt zfw=pK${MP!eDzKQ%P>i^mOOxT*yH|JUKfc4wAhaF^UdYXNZ5gj?vQFq(ppZax+|m0 za4NobY!#WJvps!6>XEWjyVks#gW!a*xP4*UbrO=?jQyL(wnMwF0|GW=ZJgn@~Gdko_!iv&Zi zqYjxBj4F205yGTAkImT`>_V>hpTVYcZKHA?8$=(ivt(Y+sAnSd?;0CDy50;SJC(vw z@Cwa7NXtJA8>U^y4rob~z{C;}@w8FVZt;*rr&fdC)NRLN3^kUt`9-6c#%3rGd2mm& zI{0s#HhU#PdG!Xq=v&FSs*nrZ{1&IBez)#JRSLcpyb?K$?dDHAt6!$qtW0lgA3DjEo*E^m`{;noNJhzSasd|RhN0&)Q<}#4V~!C(5#JVRzZdTPT_hmwX*@NZBL=HWz(^1YtEQOubOCy0x1>$1rRiX71Eoe~4MPgaxWP=p>5P7HBm7H@ zQ`wnVJs$g+7C>Z9<<->l&j=HRg7!aGZ5vZRY`>3?jK}2~0Q>s&pM1(=Y2vI;KaaE2 zq`+}iPnK+9rixl=?Nq(BrWf{LApRSHnL*Fc^>%sS1mdX~Y=uK~l>WoGz?mSef#2!u zG;6vGQ*er0xN@A9CgDSTFG=}JL?6GViW63&erlsKca6LlNV_Zme^{i$XXJjLkPF|# zPBD*dzS(xALAllQl#Ka+Y27|MoqTMvB*9hiUlrn(#}h~ z7#oEsCC&XXRN|U4W_XV&Mwq1ae3P2*)Hc*hv>F_ooG-_tq7;n532ko<1~+=r-fgxe z6A+r}I9VIhc+AE{$ewU<O!?y}3X-SAzF5yl;8oQaLxP6WpZ}CjsAHOB)kKPCB1_ z7rtsE{8jSon4V;7#cWDmdh@KCC|0>h`B-GWO@{ae09+IWhIyA)B>kq!53QR0Pcl;U zz`UR8gPC`Rk(bFNyJ7XgJ(9$i;U)sjI*TTkQ1;)%qo3|6w_N_6Q-=bNnu7xoXH&)$ zLRqJ7brc3+*?DcTf8t%76tf2SmF8f(%Hhv<#9po~Q%Qghh56pj>owFcZ z(Q|XK^M`J44u@LpN0|-m-8IPXNtR5CI$tsG)#Gh(BCm}aMU?2b-txRgk!omO;rZ)P z#$K8$xjGrod0kMa=s5|2-kP?fy@GOtcr|i`n2=OcsBER0gOZE==Xlihqq*&sTv5x5 zkle8bm(6JsSqK7Ux&GU3TJ7>3W>FgI%rA@OxvXeCThpGd?Ps$EgSA6v8uPZAq1v1<% zw9BKR?CmFg5x8Tv&k1kG7fxW(Ar7U~0|Ops8Wn}Sn9s^Wb00V2$9cCS6D1hE&}1)K z==&RFBXxAXeCOOh@TiTu$b?QRmx**(HkynG_9XmoVoL4Om2hp8&z?Hko;As7ZB*NL`gLYpJw(3I=l3?=yVI}j>#4+Qw%X(iL};U3tI8!d-om8l`2N9FIyG%mBPzI|`faQ6`p zl6Ff+VkfTkTh(hfcGYvC5S**=Oo5oYc^CA_e;X^Bn8S%P$(>spCuYd4^I4wQa$D{f zm!AnN{u%t1ZZ1d(c$A}M%`%YV0Hs#9UtJ%z9Y9!~OgTDI|B;6G7(RS`!29-nR#iI6 z`5|$0<^*s}>?0Dyr#`vwRu7OK{eg4#iTrnpf$w@4osH@m7XIjyvA+J9>2hn>5-FaWy&ISS63WHUBv*`#7w) zATL$Xyq7jI63**b=hWa5lFf9cW?90`S}7Jm$lZKa>99^6Kn*-BYu z4rWB3BL7=}^E%be6x*qA)`KOJ-i~ypBOic?sae_H=W|ju#=T<0M^?VhzeVT60n%&x z+Ob!*75F&Wc8LTGRE(^Kvy#Zmb!%=5@94$nT|`p%zf>2`oiQRJr8o@n<1XO+d$IS7 z;}PWwger7YKW|9*4=xqg*=^LvPid@wLRr*qDQ`mZKzuHv({_#k9EY*bzY{Bw<#y?+ z_v;@*1#ewT9AmWpGBb7CpANe#27x%zjFz~W9@g^tAPZ-ZR*9pI%AUoqkn7}va(OK1 z{|2!{Zh)-M;W>uLv%^AYk?MKR5hVH^EAL_e?}F=t?|r1*4&eVb1fuW*Neuhb`u!}g zj@@18Tw&~|hamz0tNt4ZgpX48slB;Jy|6x~&HL!P*6X_cn^3|z)dsGIx#SpzVGt5T zr2C@n=d~53wg)ch7|j6Mtm#&_v!^yQY*QZ|;ShV%=JRGb>zR!k=2KzEa+I!yX>{uM_?#8 zsM}xr*Td!Cv>B7}dngDK%#;<}dvJ8f>>R?kb$R5wv-SQ?oz;wv19|VC*v3eUKUd;r z1eybaDA#UU*+CLdaLob}Fp6?n@Dn3X8!2&7$6T8L@OoaBo&oChit#METYu8c3lt{N z_-U@IMdUedWY*h+&L|N)t9uJTU|$@a5qRxW@3R(XlVpq6gV#CcPlumLl^w4ShC@qE zY(swkW&}r8H`?4DFSRz+pm8sLt#7nBoGmGD!xCLrQGsC0%;lEq!@&|80~vtCeoEuv|V_X6YSf0^E2AHQj& zjAevd?8Q{!cG5YtuL-LavbZ^mwGBdP^V3?cqj&N*$(dorh7;$hIrrVW+wkM*#wn~* z4>Pe1s^r8zq_At<9Z3N_+=tC!r3=*pvo>Ix9~>@92$KtHwqB@MoYKBiyuA6=%QQ4d z(9(Q0E?{eDOk%SG{$n7SBC;8TWAmDOJjB_StrK2+J)(07`xYayAap566aa*=ay0Cg!IKkW69x zC!VxYLO(|AULhu>z@GAtO$;%yBezQNGB1u~!|ETpx;?^;tB z!f&RlG|4ih5X$oYa2K4Xxap^GN=!Gfm&iS-_qo^zBETV73q>Rc(|$uBs>x7ERpegk z9h@r1+F#fMHcGwUZt?6hz=$ya+vN|5j*iM0Pd#Z^8NckVqTCWEpAR9f)cF3otb|ns zgzSUr4rJa=dv;WmacjNj%~ePMULG7b`1`go!zaBz3IyU?X?*ornxqm&Dq)S*h|H)5 zg^duHuu3X--{t~QJAr=?XvydN&wjXg$XX(hr3!gz-HsMmj#9v;j!E3#dX#C-q5evuUpO!Bb+v^c*8S zLHcU--CEyVE$G$K47^A8B*cviKzzZp6d~X*pNkEyzw|Lsvd$B-vUwXQu%RT#L{N@M z>-8^U2P9b-`8c-DcI`QC(ieBvadX^S|9Ukw?yD)`n2Nep%|j}vk7Ms1rTW4$Wsx&7 z4h3UnYf5}-_7#0Om@<|d__u??+ICLE13Ow5X36EeH(I!^ZB(fAy)dVy&LaB{`c5Ky zf4&J!OsatSzLu|mVPBh%5wB2(OU7_5oZS`Tl!%aYEmN2cmr)~k(1?nRi2V&{LnezIWve%Yi!r+~~vENEGiGWg<(Fag7 z5VDgsIT=H@aQK1RWAOcfflHrJ%tkyj3}?h(xLVjX5WLm0<>fA3>8;4(-KqlNe`D7$>lf4PwB6;d+I8Ggp! z)~?Q6v*GKE_#_K8`6rJ&IblZbVtJO9gm`9oFx&UBq?pkD&T0`ZXsk)DxXS1Jl}f!P zyh)P5q*xQ6=YYk)QB7+#k7LE&4VF{gqv<>o%Lp~v%^9h9H0oQ)^z-%BtZ~Xw-l5Ch z-}6X5?KRqHys1Yv`KD2CpKPTt)`pcF7uQ70%4HoGHDWcYfp-;EoApAZ;wiAcu?_}n zU3XgGtwC;EleZqid^VD{78n~m`ZE4C`<}QiBfb6_UCo7%W1Q%q5uD_G%5Mh>}bhS)SAJ_K9>h zL}cP=Dg=kHOl@&hhDYU=z&;sruWdaiE_bcEeyJFr?ig zU3ionsteQo3xU}5i({sEd|KsQ6pi)-*k;*Ee1@laPmd|O-{*dR=?oDETcE*GW_q7V zlf8Vs3h^P&$@8FLKV&i#`r7s5`%n7t2Fhdw?RJgOX$0}M*9}=&C~U26@QNSsb))Za z0WuQufRJ|vA`!NPR&P{UIjwM30=7Q_DhUsx1Gp8R*!8a_!7yqt4H@F(_yWs#Zo98r z7)1!@q4R{$T|-m8M%CooRLB!EHd#1T81Xk&MTC*tN&5sgZ^`iMz31qO~hqp7O ztI8HJ$Ehvh8wkX!ri^8R@dxphu}jxgM2@X$bdv_n&3Q|aryv#7 z#kJ#H*&QknJe>CKkiny%xn5g3yfjGU*Fgp+)nZB*IIoQKR~w2OO;_K8dYr3auv zS=$$>K8(+vjMrIqoBClU-;K*1KKA>=L{Cr;769(QbtGI67iDLo2bI#GWKmzTvrZU8 zsV0v=dn%st5m1Geqj#=4U-Q^srA8zp$GudGWeD*MwsUar5CMot$i|*LcfMQ~#Ew%7 zdWhs4r`tBpnv(&GQ+IYqj$}qI@{Qh&qv-RBifA$LWN0Y*2M?K zewL?WgAR)pyc{eeKKohDa$w3@X2)_Bh&w*LJSZ;4GI0&FLt#f7t-@z50po%;Jcm=RR`zh+PBvqerw%A}+seLe zw+l;cG*MAdMbdGgaFMBw9|dD&@KWbZja1#)BZ(F4?vcsw(g9%)A6H2hN0uw2lKkLu zoSzG8DP}+(I}f3`^r6wfO8UZawc&YG-k17nq3hhWZF8fAbLnuYw$@wBg&iJ+!DoR4 zb@an5Tq{j?rp$SqZy>Zg3GLzM3x#^Jmv{r;jdVz9t+ZrmZE0=hXhD>caOnqVawdpr9jkFcLa zKo;c%oH(T^g`>;O&Xp|S~LCY&>$1w1J$R@HyMC!Z`|NXG*S-@kUy<@1xpSB5AJ#)HL}cblJ(Nvq=L`1FlJ&{%^Bfk* zpd#7sZ2Pv0{`FCU@JN1!Xe}zmJc`7RC!Il=_Y9cNh<%Q%W_>Fn*oafx4V#R`5*cFH zxT(c8D(cdIUQ8ZKxFGOUbX;bHa~c(TO9<2qbBXhipN(aM{WpOp+|?o*UT2gFakOn^ z%vz=~h%9Y**XIZ75i8Ze`xw?fIsUdH~2Wf-LRp*I0XEPgP z?AiIJJD~dLZC@$RrxpAq~bDLXTqGKnjND^+vXt0-^D{THgw8(iajf8$kVDnyLY-l(2rOq+3=MHsw)p}Z^uwy}l1 z*Y;#?vcD)HFDS#q8vW;sl)ru|8p2l_XLQ8dCiY?5-L>EN>LT|j>CSU3hg{gkbTJQ| zgul1LYG#&PIvNQqpKL>0Y;%aC;}>Xd?B@0K^)4ELH*%L z;f5aZqqXUm)I*i0A$d69k-YYLt{HW0Nl*D%9V*s4IRj+|U~AoIWiOP@4&e#C`-9$H zctYYWT>+xxc$`Qc`bfgeFDa0natV0J&%D_A>u({sjHCA zuM-fGGJ!TIH5Q#Ww=lCaUiQz`KQkWaw3P31BanSX!W_7&9Jl+=2G6+v-4>n9NRT^# zaU|eod|U8~Jdz$FIB`13P`InJKYB68Nj*FoU;I;N494rA(%;c(L1}LIaLI8zURLJOPgfb2{#0X)Vy0 zCY+PMs2nI2*+U}nkKF;yc%R8MJ2pk^CFIuipgu>5D>j)CW=Rs5ljGg|zUr(d?)!FZ zZ!QD=zQ;Mw4M*>r^Ua=MePQ3GR=>+3+P=miEM-rEyFZ9zTnX1=+yrGl1hnsSa=`>9 zI|02OhWu0d zosLMMPmC#NMRn_5jv?Parj(|mVcZ*`Oh8^sin7w8?CK||-dovl8e!h2WrxVBHv=U>97S}yVt@;VD1*G$!Bse)DEvj^0*tNePI~V>p)YM-R!nbkrklU-y zho&y?RGf5Waj?3)g>Z|1&y>71IO0fIHDKj_|NOLG5^E3*7_}XSFTbA))cJTY3E3%|dd%4xwp_KJ(*1$V8m z`l0u`jS%1P+svBC>;3is?(N~F#Vs%|FO%}muyLaOP$SU%D z`3IKB#!vjO{%uyKMUr7G3>bxw+@g}rj~gP{jl^z0Ju%Ha)p1_}WH$%35}1_ZmP}=g zZgrWK_w~lFH~raWl8Dp%I9Wl&j`Q=v5i3<{!+&bD&{ zzJceP7yTgnV`fM}D=IPX`LyYadl#+S@uFil=Y*j1uPcJQWInTOhz`hOxz39D8RHHh zCRd3o#km-e7inP((W|#o%O~3e5AVOd-gVyHi{d8S8fc}2qOH&<(f2>8N|4GuY052o zUyY?Sx7aZ~{(dK^f3lv}V+W)US+9IeUj6HC8$O06+g!HG-)T%H?{)#23K~lXkZhdx zuc$~l48BSE*5RhO#rTN6kmb&(H*~%K_>0X*e8BWD@(x@2C&w-9RVUdHUE-NdwV+V0gp}ah~GO9 zjrM!{(%~neI!{@Y+vi99xfVjY&xH!r(ALSUh8?L#15cVfu9ytL2`Tds^Hdw-Rr5{Z zQitSnPG)Yn>GeUVZW`A%t7_-H~MG zl~uI*A)55(#Rl7z1=f~>JP?2f#x&OQ!k_41AxV;hSEasAq?I7;V8IlZ%vKuu#rer) zl-ApCyi$*^^M3m!?DKe(ga12u$t9iJwy;Sy zSI@s2?#^M*vco}#-Q{prL$W{jbg|l`)j?01B&Z1~o!Y#sN6%pz5D)YedeqBgDyUNA zNH!Of7P0ilKuNc*e`dYL)~T~(AJfI~fsgi`G6#e$tEzexZDN54hFxM$Pjg;Ur!sht4&ZDX*IctXJRGZ>MSfBh^NQA8If?O? z<{5|w#u0v;%J z_OFSKYeXWK=qCwICr9-15YW!lk|hUvN<~`B!hs6CGpq*)UM9Y5u^xn1d8Sn&?R>|T+7?DfawQ+1tJGYHUgQkEeo zd#@+r2Y3*B+(4Wz;~Z1+0T8Z91&97>f_(Z;GoZ-oYD!~~=R*$@E-FR|B}UUGwv*u` zmRFRZ0f!4MMUH}mDU>TNsr@|q5jpHD6&2xyNTmB12R0oo%4aS}UUk}+QjOFI){aGD zpX;gHO35@i>#}!IOxt-kioZ`8kokZZXTl|06;kE^U$O+r5tmGrwXN>Mhm_?;@;b6_ zcweD8T8+NPTfI{esQ@AB-%4X8!01bitMY)1w*+13hX?c=8;(ICQ2@~V zaIZQ@jIby4@-@Z%ZMkifoZ6P0k{Oh}0tn`*hjXRrfFf`$lvPK!-_S9^GK@l&(rBd< zQ=e6g1|xvU2#iL|G=yakwr+7o{oA=L%DVMmVR~BU>*Gi=;%*!(7F5(de^tia^TSot z{cJrelw$Y~V5B6&M1w7<4JRb5d3 zbZO4Z5!AHW&va|Z!~OpzcTixguy*xG@4vuR0Sxtl;l@wEn)pGfLWfi!m8f0t)`d|W zEKnt3-R*bJ<94d&MHs5LG!*i{NE5OLkoY-))4=ZdN3{3O5Vk;+met-5Sai0rv`?IX zZpS3G!Pwn+x2Hm+7l+e)lnsEJt0(-Q0oh&GaGO5Kf@E9S$AT4f5l zJLnYp?NuK4E%UlkqCjm<;i5W{d1 za~_G8Wmi9W#RVMZByDC(+lW6(0Po`ZhhoY^&}o{EAHcTmER+??_~F?muwE4(JlAIe zQ-n(kgSmV3*6P$Dj`bNy|5ft^vP0}aq5`~niRYi;JZwPT`(wM-8y>QchX#YK__zs} z&i#A6nCRk@+0V)^JPX@}{02w!v&FB2KwmqX2jHRS!VgLHfCckA24rhx&!s+4NFktF33`+6S`WC=9gZ@;8b-ww=3GH2u#JPObE*icXk;vx@7cKbTyPSG+GMbfvjPH{j zYw>ma1Ax{uiswn?|D@XnPW}y03$KzpX%hq1)G;pe3xdkGib;uwPvTN`io%dk) zG0eFRU6;E6HbWF^kQycqd-vTi`}ro-1i-H#%%KhUO!NaHNMgpr#p?X`)SlvYf7BQt zGAy5YLB^puk7xUpzRj*|@L~Q!WQb4r^48~Sj3*sXlTPq|kxT6Er!^h{dTEu(HS~CL zU*NutI7U5nFSfgtVoHK^23V@M!`?8Q6;;Fl`HoWM=BE?Xz<_1=n@SI0)W0eeNIrC< zu;LaT6{5Ugh$D@&?#LFGuu?O~fSdMMJMQzKJ>KQ6h7zBbMKh=qXEwJ~-e?zui}eec z5s-C*2b!T_5q<%Q@p%Y~KK&$P{oRJ)<6s+&@ny&~)*L zQzYat9prm;P4%To)hoLF4@oi#SgqPfs)iz}_!Z7E?m42d^wKsI7mue-E;#iO3l=I% z@0w&2Ol-X11NxxM08YDwicIP@K>1v2R7Uk!*8J+pG#BN<9NzOEkQQ2E)1q{umxx5> zikR`?HQU@7vnt9o_q;u}l28=_&d+(2EP11Cuds&@GGDEqO>dVYtY*A7;XfPWQ{=!{ zps_n_Wyj0w<|gCv{%7(*v7othT8b`>4+bP9XZEyt(T9|mT12{KuXHkSDr7FC#3)YC z9kSb}nuMXb*k`rMiAQ0Hbga4!HdpEdegGb>M?J5|&dv5kUl$qrCM%RWjkALHkDm^b z<^&-4y?@(Qf8ogm7$WOs2JOr1Vv=D6it!V-Z{G-KI{o~-;@U{BqJ?f3yFzK2xLk%n zin^iNOdBsqpbf)?wI`ulkE4f`CU(h;+K47`60qd`+XliLUSYU(Gkot*ENfJ|)bn*> zV|W{sAI|A(FYj0#9R?QpSI26q=em7~@I<=So>tQz=Qt({kgZqkQ|2YA?3LiY^Qp{(CegLND}wbr{)D$LWs{YQ^;<$DN}1?Fb+I{m3mix$ytOzo%e}T!2s2Q zJl&l1vb%n@o<=GMh&uUHArL0wsW|{7)sNCN^l|ZXgai9m6`h@uLUqQ8J(7ib9~%DI zolw4c1@HkIuyN3anr+Ir7k5Pai^t*FT)j5-fZ-OmGvOe{Vx}37OG@HwMJ2(RtGQR) zcM2D0p5V9HV!Hui=h5xUCExRdsr+&#Q7+`<)%PGig3zc&_xfGY?#c~42ruS(bw~Cb zhcWd65Qxh4S^z~lWOjHI2xP3rfrl1r;K{(O%wP`ZE1+EWfipX7un~iA2UB7;5un6R zM3M+_r>j_Pgo`dCh0auKk>x>uDHIWJ6S^D(Lky-797$x4aU&N&iyMFs!Rf@UT8PGT z{qJOC<)_nl0PnM_$wH~-1mirTa!k&rs{X#&6vu;0VyF(3U^q2Ka7OrD6hKIL5D zily`U()t-rvs=nm%1|r>vcqXkq5JZH@k(sBUd%|GC|b-XD)@3eV~e-5uoLF~XK=qg z$tpkItrtuB7paivVysp``;pQc1B|wqsHASu2!-o0oBpq2<=u|bAj9<3;~&RHZiW6I z_En`x%mDVTDepDSWG~?K8Mi)85JYUgQN(>KX;fZ*Txn|dIKnbR>LzyWh(GppQf0Nu zTLlz@B?bY{WQ4Mx5kfgMr3h}O)6*YUo#uv+*63Zl z^A?Y)t7R-*Eg2NycFsLs)F)IK!V@vaIPApvBJqsBMYX8O_O6-6oB_J>J-`e41gHG- z5BY^u=pkL2#FBymgf4yCH1Dh+?DCxnBg)$}Wl(Wj)r0QUUn0a#6v^khY*o~Jx%ArA z8N7%Qy*+Cs{miBIAI}^|ch;8&d8((1D=3%nAPakl$ktBy7UXb`$v5z+N1{-)pn`YYb)f#V5)d#y)rUIy4!D=QY@!u z#5(_u;z|k2qnY~R82XA-)K=wJVkpB&X5SED_b^_N%vx;8io+(|=gtU#T0sY+zE-7E zvw*vHQWvVPb7HW2o@%=Jhd!MZGxGKCbb2j-T!nnTFsu;3`h3;&V#6rt96iiIwSi79 zXA!%HSrbF1dy6{!Ti^0`;Z>1iBhAQO7+NHkvYcOS3Twsk9yMD(JN%_NVlqtk&iZvG ztZZzX7AJT2b;S9P>euCwP+iN7@I3fqFJCKIq5Ii?s$l4q|74vCpFI3;<<>)>q3 zD!8UTYOH6PCXF7BO-?*xXmU9L$Or~*pFah!r5tPeOd41dqfovWdWz;V3E5`S8nYeR zQPy{>hWR0YrY7Izo9_5wv4PnW4uaxZaufqGrx*5rbKLNaa`{;vL1%W+%=9S26^2dY z&zGv4D`B74Et#N{%V95MsX551VCOz7r3^*&_Wma%2jYxe zmdxjW+F82~Iu=!Xv9tso{Muu6xZmCGffhA1fr*j3YN(+5vDA>>-}x|)hz>LpGP2VC zsj&NSdXs5T$O2OaBp6O>ANb{J|4Juxb)*#;)_glvVeoByC*A^TX=_q)vX*8nS?}Ap zj0>939mpbH0@N5Glu?(Dlm5iY8ZpL&M^1Qv!*&V2cAUgN##dRG_x%07GZY(&KB)SDR$H1#n7#;V_}#TOpIdRp1Y1rm$%L zI{q1Q1Mp5(_g&S(PDjoV5gh}+5@aE6b~P75{MrCc%ezsh=p zHvV?1FqtkT!&L2Gi~5M@3$)(>o6OUA1oF=vxX?*>6~CqHY%@%lA+pE;$jC=A;VDC? zCIFSfii6-vQ1)Y=ui)(*MSoZdCYWz2MNp#b21`_@Y%grDChUDaP}#9S?=} z)v=Lr=Sx{7Gtp!X=T!=9Jm-@n&(y*&PMtez;%Aykelb>eD3|-01%iIQ`TJ`zUkhX< zHuv}SI#JHU(VX9%d+u^zHehP~I9m6l%%J^MM%hW!l_eW&*KJg;Nn@iQ5HZ9_#ycFy zfqw)gnzZ^EV*K?mbIJ)#q%h*;w)FITIn68FkWl~K#AJDCB6(=sFjlBP+^%}J*P_v< zFS+Ac=U9ATSHzt}$Fu$`6Fe?$fu&8t%ctuD(HGe_`p?nVKo3DiAzo|pTVlq+QZT#6^X8E$iq3SI|0su69(fqHo%PNAIZ z7oC4ka4h>$suo%cRSKTXTb@wo3-TXT3m?v`j=3_veKqjadN_+Vh;)mM@xZUH{&NAD zeU{-1BIH)$dP16yHcLaH`D7>RsMzb-lU-5H?97_Bv~8-6e>UT?JvwncElJpfiiv(D zZutgF-cqSZ@3>qC)5TjxUTj1ZYKN;tuk%BYdx^o;Ep$fkJ9d?y1g~9p{&Q8oFmJ3hH6+LRYSeZ;# zl*ZsyXW*5o{J%R;!?E%3zUndPa~#BT^dhB-sxw|%YO$kj59LfK9GKKA>lALN1Ne4g9-y^V zHh@i7jS7{d{pi{31mB{fh9@$z>0^aHHj-SvV60Len}Z`NP1AdAGVJEuu>`3bR zArLeZAPwfcU7B!3mk{*MRo6&b_>biPq{|MkiVMt*5Y^I9*JLaP*CZDxIRvY`!1x1< z%kszc%fIq*s_e=xp4F%+cay{51KD3=^0_#TOwqb3uXI>YJFhTb}|n^5YdE!^U%4!PJJks)NT=-#J@JQjGVXqZw z7u4dEU$04DwBCk=H<<>uwnZ4iONz5B&7HUTRSIt3^-jcd@&}S>CMkBdOC!dMS-#`dUUL$l?FZUCH?$*}hXsYZz(M_S|MV80mra`6S~eIb;4W#^X# zD2%T`lFwxgqzg~P))KToDS4L>J9M|NdEWvwe}D7TY!rCgDsYPGaEwZWUKu=409$a( zqwv4NEw=oOD1kg|chKlge5siZYlF(Kd47WuUbGmB4dZac^DEiSsd-T66puic((O~{r z)Q7k`>R4Nuj>!)wP9ys4>L^a4E=R=?)?bHNTC!k641QROsZ0gjuE_Q=wrW5x(!9f1 zD4NJsUG{*hcLhnlfH@Iq;MAOn(El>qv}pz(Cvd~ZVp$;xBKgF++20D zGn&_J5iN07hh82v`6)3{Hi*Q};nJ82>AZ ze0B{A*uoLpI@_CV=@k1ghGmbY7X=vXB`7Uz2cqLx%tp_TqraX%JcpL3P#u;=Duvpy zJCh#$xfh~9h{e4x4x^|#=<`S;DXNNpj>?nX!dC=S$)p5cxyerMxLY)xPF~{%5^evi z02wRms8owmJ~mkoV>1oCag7}qA_J&~L`Hic)ouQ)15;uSA77;8k+IlG_UL@;LFbxk zwz!Ww7tM6!H3(Z9I>EKnTPF|aqUzj~f|_MUO?injjH^jXpA$`7d(zuX5d=^|igkQd z!e-)w-uuJG&YE|#XRhq`kA=1i^L||(kEEY%c0UegpCn|-F7d8 zd>T*2l>e54+yoP+*9Qs>KKV0HRqs1rv$fE2p9jd?y^5l<&!@_`(6Ed1(EZg)8`=3* z^|5tSfl{o0wp?(;Fw<5|cU(vSk0T7}r)TJJ5{1(frv`80Um1>87JD<+j#QxKTjx}T zIXT*W@iyp!K%H`YuEX+QrWMS_i97YMtlRQ`a#Yx}`!S2HK2Bmt~gpKq@4v#%S z*jX+|6y9NQ&6!UD8(9I|EV6ujY;j{YO@ybYfG7(-Z9Fmq1F`18?05+mH6#Ue{NUp) z8vPG@wDf(w4Qs4T-MK961PGndyaekd`jcOFdf1`qnI_TF-E-zA4Hg@G-!p}9Kk6uo zXPO|z>Zf|Li#s)Zf%6b1!dOL8f6(*LxL{=`FLeD{FD+TJ z5z%?i12p2_JwZhnk@7MffV8V`Jw((%^&8>A$BQ%47V6Aa)z41i##w-wr1gV2~7b&f!BA zCdq*9ak-WpxywSUX*2MI)b16XVtMQ7ND_=5i%bvK3s*YOM!) z@iZ~W;9)t+_PeV$$whfvPZRSL9?KFX49k{gsi|+SU`$VLJM5niaexZtGM*BOlUyt7 zC_ng3kWYB5qU4^$bk?woMiYY`8K#p@czRJZpu4j!0G(9Tkg#nb&f3j9)us4Pl}(a@ zs$YfO>el~e_$8p{MLkovM%TAJw@T|_X(fT~5ZlXIZ-F$cox(1E|EaY1;cT_~5A&F+ zoAG9kfZd;iV^x8_Cn1)zK@-PAfr{G@u!+8XwmG^|0Yx5u%4>k+nk^U0;r4|fFOT?s z2vpE3-Od|Bf1j1u4|0e>Kk^Mn?*l3OZx(rPsx$&pzPIBx;+g~0VY@6Pau5bKUk+%_ zW)OSWJ$u*q8$_>VJdvN^xT;aVkkT6Bt<&J%T5I>wUUx@}|HtC6N(m8F~n5Q{p6|Kji)t zefIm9kbG_79{6=?LeNRw!t_tb_mPisqyn#CZ|BSZi_wfOy2U4ihSm~8iSEM6OJa3z z_JtDahl@(5nzzA?O!XrsN`v-gMl$HTiRrMgAR^P+^`X82Le9S;N?@u@?vM>gOH&lzd@L~{XDC$>j{ zA0#uND7_xwN#K>4R|6$x(#8B2gI08zAFD%ltcV7C=o}<(uWacunGBNZX*3S2YkC0SP zdc%8`T9Xloe%5%woJShLRcIhoh5%NHSUP!NEX((5OKtvxLy$MTwCp0;v%naK#SZ(E zZ1RHL87WEN-MiNlviwXo`uLRkJz#9+J_G&GF``kKc+ejahU^=MHJMLnLL2$%?;8#v z`VlU-XCcS;cCX3jkaXx2f+A2p%i&eNY72M=>3w#Ad5DCT;&YU&<$O>FlPs+{dt>v? z<9{g&p>NvjO#0FV?C-=~)diOjg#12iA{>pN`fV2#U~I@G+C;qF%wMkQ$eftu$Kh&h9*^ z&lYp%+k;VmIGzF>j3_F5l9!=dENB%1&dif;>vMSl(LB zSK|iE4~#DbJXjF-Z2@I8m7WnpSom}&rn1Y(vXowee(BxK}7%o z8o}oxVUeTg&*x#1%s>dFhR9a>G6s3kxxI+E(jTfqU$lhf`k6(Go#|s1bVsTQ{yA1A3mA4>EM~D*t zNH>BKt4=^n?9V9v&52?R_j$49-1HcnwOp?+4OATP7r3!5=Mbx1c0BTADH!*RHhAFj zp_J7AkRh^!ia345)lGIRc&9ji|AUgNY4{1GE&BNFEL8w`QGhs`2276g*)|4>K|2$7 zz0`3zWL19FTfHAC^KTx^0GqMQA-f8y`&Gd}5@bhRe7lYgk7dNLLf_-ifq7 zWK#v^ua=MTOmj`^g8?oya*^P>xxS4Jf*kPRooEqc5WV!h30jm5AC<{voBQh z%$1=hj)}XAKmm0&ntaxNi!dE7543Ij9n{SdJ#XI7<`)m+Lkg(i>Zo`<Wfqb{`T^Bku^Z3HJ67;2;3 zQj0Zu_}pxxR2U#h`n$EA;=x<*6m9e%wYrRuoX4>uYgcSoZ+(pEeF@DxuR!K++V!+` z_B&Ms6td(MQbNl5oApkz4KA?mT@es3fm+Pn0C)(?*94;a-&8>hPNA~6&#_l;9R15B zJ19MPK_mGF)Q?7k_5%)Fbgke08&*wSfl2bf3y_zP4aC4F{avkr;$Hv|UVI`2j}wir zUa8^fbsC>-nf~`zZMEa{l=qD{cK{yex1u0=29DPjh;+Vo&X8_*M0=!SB(Ih1-I#bt z>K><`1**&UJcZ#ReUNKJ#}_JZ?s;t|cLSkSS?S|s22y4Y+aC$_EDNly zLM!Y2iooTCm%|=|dRC+QZ0$SK0`??(kkz;QZzeW6gl{`8T4l0^)(-?Qr^^~20lS}1 zwXK3U*M6b$e=DFHE`!SEAAmv>6wLzVrFAxVYh{c@j=G~M7g8IB0qsi-O6mjDGIB@< zaG?!d6+ZZnI!JlM9;a{dxjy5lcLO1fn-$$4f{k`O@n)kyEpw)?hL-Y@+ZFN|i9P5c z!7)J(e6ci6@7I^`?46Ow5jfnE$vFMJ9|)cF@+i!^fr4v}OR9!Q`s}4OK1YSHXoAxx zp=gn~+RS5s5)h&lM7HCgeCLIsec(PGmJY_;Pyz?+iJ{&&AXT{C%_iY{>#gt?$Qe&N z2zgt8CiS2TTtnkw7(UBeFy40x7fm*!xmU8UQLYw>fWXxJ*VF5TrF#pgii+R@X~6=U zz#82Wv@lVuX9|;}TdE;i0U7Oe7rEi=4Y3P1`%r2<-$O($ICE&Nivb^UVooX=A6=jA ziKIYZ0W}9YP;3gvH(W5a>G8Kr8CYkwRP@~}24bdZKAglYIH?jb$OSBQFOm>XdDap* zI|)Q!*4!3?lyf)vB9}rf}h|o>DC^yro>Z?_0|gUk6Uxl>Ng+k%7p^j%q4OwOh`I>}$6z z(xL0#9~Yx>NLeWWo5E<{nOT~M2*0vx@Yr($<@#3HUkCzN%Js#1Kkxm6xVM8Yl_k~f zJ&%?<0L%Z@#k~m$;TK@s&sXIghN45-0 zaOc9o>kvF%Yj{_97?q5~2!bx=(+Llv=U?Dti?-LOD~+{v1YGuJ2Jrpl0a` zghR>+<)+z42uIQ~hCQ4Tz5-mL@VHJQlOCDOJLpSclJeNCNZ~kZ5z^l>{}Tl|B5+a^ zV`&m7lZ$-&J}b}qfmu9|?q!&65_Z1`ZIX#nEpj7$xc)jbSe9kQ8gd(8u{T!x!=S{oPFF+N+=KN44L7l1(f`ctMt8PECU0x1W^BkPT?i^iZW3q=KkJ0h0O^ zdtX<+QP6g@GOy~SO~hUxlFyj9DDM2%#gcmK z1G1<|9UCqDfM#_#Tv9ZT`0&N2-?SoAO7RTS{AmyPcPRWLmqZqogsyjHn;DdztJt*f zZ&UyeKLEsU_MLlQ*AyXL6_4YxY@_9L2d|^D&Dz-V-+sa6ojsRd5yU{x$zCC=ZA4|L z8FJD6-N;=dPBP`i+@nzmkSJ3!H=7+&7z{=EOedqjT9%W3S=|le39mhg#*m;|1il_yhq*+dZF4FWBynzIUm!o%K+`i zs?9z$)X&OasLmWgDo{qo(N*;NUZ@1#bG(n z?{}9;^W_r23{a^KZ(5dr|g^yFs= zou!e*ep!0MIpoh2 ze|5fZ?_(Lmx!NiiR16yBq{7_n2z<&SK(m~cE8{%ke{DBbvy(RByU8Gv6Nod%vjqyd zYKwMyq(R!k()EYw4`j?32^LoW3b&r#*dt!?eC_favf5vXXqCu<+lL#efsKHilUA!DG~epW(gJWN1I@>>mG1lVNjzuy zCQTnw0cbUj^LlkCO23;lkH(7T2TUY7?4$_PtKhOgjtLl4sTZ#EqAiJ(6mtg@3gn%H zDVj1thniB-mP_yaK>d(pkjK(dJPQhbi+({Wx;CqytJ`gkUOT*R#yTAk2Wcnu{r-EV zu;FRGWdi5wbPGFKPd3nI!FOe)SbQj*BP}PLJW8u zE&HE6p+``Y{y4Goce<`%%$7=3q<_jlIZ9{B-p8lk{XETF^>U5;G1-HkS$7Ty2Osw7 z;8$(*m>}b4R@L^C!*9mfUil#eQL&KG`%8YwaH@JeDE=TO!k1kHB9pRL{mXXwvh{-5 z#eTZ6eF>*I!}o$feFK!m-`Z^!9ikwE(bi*ae{BYrUdJWjhbT zF)9jp2ykJH-Fi9pz-Nm;++%5T;8ms8S z9NG!x@gGS2Tr%SS`|>{w03Cs5LffR$viF75fBN$nQvgzTEmOT#T^$!JRzMpAxlySA z@Ad4^nd#cn3jc4yNBF47cGccVSQw<}QCJ0ffgg|kS|E)$6k|We8I%SvljfilLy-wL zv)jZE;_2|lN*owC&u%P~M4qRx?W`vfnr#eac7qK|>L|`3qb`jj;e95z)pOFRe^8mL zuY+n&CsATtWKp`Khj4=|yM0ZQm0SlbbjNB8EL>MZfiKAhG0kI8?Mxy~)mbn>=vert*07(?7Wo8Zxe^W>@ zlX6B2%0pjrmk(l1jx7JN=zg>G1?#20E{y|jObzI9){~B#djKI+VsJd)|`r#%s#a&c!duD(&!}Y zX7gEI|1MvE{aJhiTBU7_13~$5htrm0s*hy0*S>ArOrz0w-UXKJ>0*!(RT1kemC2C7gS+KvY|d z%3jwhKb<6$yw#wdEv|&S=HdJS&;*aeJ>SFt#tOw5*h{88pLW{@t?;EDaJvDDW8P&M z#wcC~xYEW!!BCEWz@?!5*OHEEkK^CD|D(rcZY{TaM$LEN>HSy<#!_4Dm+~AiR(>dV zNRl}R-El9L8TDIt#qAF6#TZ7_v})54nbX>S1THs=63~Cji!TfU{jw?`8!bAgMUXCo z1VCOjKd1u@Qj6Nm;y;{jTT%F4nDrZEJN_bG2P_W{Xj{{;r3tGOoIE+2PU7mplQ{@2 zARu7wne)X`NOJKp7#)(>n&f_U#>ZsTJ)$8Gu!StXLz`Ne%7X7<7f2y;mDBj?vi|uU z{zr2lS2~mv<#6nweRKylsUoIP3m8KGfDAG&KFn~yE9Dz&m=>+J`SejI;iLDwEJZW> zBm(UOHVCltcU=gO>%}-cV^S1At1osRNqtIbH>16)10WXL$L5VJzFfy`3gDsotc?>J zd3mbGQp*Q!ZZr8XeK~T6ibIP`yw(^%6#NgT9K(@;3Ss~@2 zumPpnRZMtu>+cgF5jCvOIhj+aIPWY&AH2i+G*z3*^4{2M1bFZka#)O+E^*V~c1854 zm2OIf;y>Y#H({1v&0h!aU8Jh^obSv6cwK4`Gvq{Oa%Xh*h#e@+A;+r8)89=8z zV0CkG2%#|5x6e-qXpypC7%i)kAxNjNq9zY2a;So#)JM?PR zsBQ%Cm)5serxHqQsf~b4>Lzm;k+L0UT;`SKhtkbRh4guI{cJ}HsoEl+Cfk5*V~p!g z^)Y`Js7K$LG`JM4ncpg5Fb@JzEb&gr<9aTOU-~rr>QXB*K~47vJvD%HvP|!jP%J^M zJ7Fnr9GgGJaU}CDk#5Djd|D^XKC38rbK1tAV<=whvSTANe*i zzY~V{4zk^cYZico?1=d8zI}u))*mbU&#MwL{yjz9*x_20$~Ps30E41j!QpCqyX2xS z3@SuQ)E$}7Cqa2e6%Meqqqrra7#XjLaVS>C>DGhiW(6s7>4@sj{AwwSk?o=&O?UJ2 zTm?*I)&Z&f#uJQl+)XmHVi_iQ&u}=?lvu|;fZKfhN@JGfgTW_3eU|%-1er8EU&_F0 zj&6y7-8~S<1a36hk*jaSgnIMkG|_jVjXUzC!rx4Mo1m1soE}IA86#O$*28L-^yz~_ zkg&fDyOn^7I~O!DBAie{zmR#(h%PVwVoabxGjGfa4={TcP&oBaM?clvOpw<@oTzqM z>ytoDwu_Vmrdt!e1M*`)cNp+&*@bh+8V|pn3eE5RK?C-&%9RV(Blo}*J&=@IDvZ}f z;D$+lSw__)t=dL%3guVA=zn|ol9$w1VLvgDeqVYG>rHKsV`+~$uoC?gghw~SPAum3 zC5d~aD9h*vGn_2SeR2MZ`;=_5v%=)YHCU`7CWs)T)DHoK?FB(^&Df5l1DtnXhB=C{D~a zZ~kgYOO9I=uc>%{3?#*tV>JRiuj*xiHzDSAq4C$pb=i4p1?6@%r-m1RssS$WE|qlt zL6WT2XL$r6W-#yem#S!jYY-tiz1bJA zH%6kWfh-0No~$Pea2!*iUUN^2Q~_i=LFU+rJ^7Tt*pJoNOmbvDWI87BwKkB>E58b^ z)o0PiRwrqEW`F;RSg?LXo zrB+_aIsZZ!i!FF(4lQUWJ=pLi4GnYlCdVto@C5`}g0iNCvHlirnwVFA90~6 zCorgVw1GiX&tr$4yDAHkQCtz+PUMU1RsWv*&UM5m(bJB}{wSN6otk!?jl-8FBGh#N zyqBzcAIXR>d0u=Rn$6IsF&ss@d>(UrT4e2RQfF3LXyVK8ngOljtI-L4RK>hmIm7eZ zHOt%j(1x$r_R+Ns$y6O|@vBv0le(pbHLOyCw{I`f^p2$*a~11SB4jNi)t$14u0%MHtK55<-*i^+}c20i6zoUm7Np&?`=;)O(W`fIi388L`<h2_KLhv1f9wu&Rfn~Ol7w}kWV*_52$B{}u0#kkpvT1*XNj_f= z*P)J!|82UKlT-hL9Dx{v1k*9fORdJVwEW@6D`;Y>vz+qbBumj{a4J-6kUm7(`U>_PC$kiI>p)GTwCNYotOj8%4zlW z)Jnf~=~)geO9NX2u`kjugNF35nWPb%w&{nWvr~-usX0vGbaf5`SW#|$thOmk+i{R9 z)$^}@`{IFe*#A|NFZqhOi9P#dlJjA(yC%M)MmDO33mSw`MEHBZA!n>%e{NLe@D|z= z)N0&4FQvY7a88_MhOn2FAvU?r@@fPUpJJiIU+Jcj&%t`|h&9zLUuS00+m`=_7yzwO z7)NLFb{Z$?Wq9-u#C79+%%F+U6KQCj`Zr0K;5%vr!l^#`kUzcGv>Y_BNk;6s3U z&7*FxGwquWOivld`UVfecw_-bP1>vQ@I)e=*hK^c>do<@cx(gPlBd*>2NC%o9G2h_ ztnbLvQdS5$F~ZNMc#lFPHA?tH%LK{FsY`6`v;sa=_ALf;!<+0P#Z2y z83^=G2#pmpRJjO$?Z9rcO<+|k;Ff7DL+4t( zc~299N%?+-X}O0yD)qZebsh)ojWw((h?gh#T|(sA+ibZ{{<73pg4}BV(bA$q?^wBw zT!pY{7NaK^Fe+H5p6i#!(kdjS5}Tt7T4a>r>fowf0w|nQf!s9#yM^sFpp&8}0LAO| ziq~=m7dr?c*1b)lo>7re_7YfLqOq{a8)C3p<(w>K4PcJc?-JWnizQx=(jeoQ?ZL8G zN9{^dJ|c{+(oj8|Lf(|-gvet)!dAf@FA|BL7d?= zd1TTOc7Hf|Y(}U^gXd<4+;Wt#4<5#dW@ge#{9EwnYwnlGub!}e^oi{BsK!o=y=OPR zx=%|1kCZ~{XL4${)Se`IJVWACPVCgCQ7#*qPODI1GJY7-nykgA#|pbr-gUmWSNMr` z2CE0rVt~8rw%nP<*KRR?=5Y)V{8@oiKDloNtoLLuIhBBrPn5Ydo)sQTDVZwE;Rk!P zO`iaWf3VRDuo94m#^2j>AfEH!B1i8D43N}25Bie+r0g`g$3ST!s@E6knC$~dN) z>Og(b8Z%sty7=^n>ky`7Yw6zA`J ztoqIj!jIq-{`YepNrkRT31v@AIrBWMob(x7E{9L&2D+#$I5hEDimj8Dta>+$29_~c zL}5A>3X%dBpt<1!!577jpLdFNip-&kmzziOC46f6y#^-vIsjl(fgP3zMfLS8m6K%2 zQca)Cx&C;93ZPoy^*;UMS!w7@MiuTQyAi5*(vr+-V9v*9WLRsLDkU*f^xJb55#viL z{YU@Z0_IrkHSc2_q;7>Ay-S6?7l8jQ5BEfRWqJ=%SjhWGV9EL|zPEDkn-2R5X-&}t z!UPpC5~6*op}p9GY$k>oUSOFq-giC4R1JHKA=paM{<#@SYEPw&5^UG`rqgS8b_Y4wS56ztMyNFZSVNGcVZI@P(avw#`b3(tv+Cy&6r> zgk#@fpAGE{Dk1I(L2ks8NQV!8R=AWK&hSG=X|`n*%@rgpa zK#dRN&V`<)N@YoyEp-Pkpd|xwv`rQOG`+k4Rz8!g$lY7xoJQfWH=w7zMICc)vMlTA z7x|q7Y514&4Rxo*uZS(?u=^J^QsQi=+Zx>1M&M>G&~Z^`u^&zPbXHCOUS4RcbT^M{ zOi9+%0DIYRk&3?*pIsQ}dPIqktnO#oagi#?kA{S%u!GZysb+wogx1h=h(i+tlsQR7 z0VOkzojrb#H1*}b)ux-Xmq&<^j~-zv`wkJtqTF#S&bzT0R)6OpYDVKtq=1k800S9C z(@2*H^>y|)Dt87y1*J2F<{FW-$|yIOaZJ%}etT+d*_{F&HnHcTw#O|yyWxaKk3D7Js95G4O3(N}=GlIk{LEQ^ zY#9-|5lAojUMwUEycwg@IBwTMoBQyO54pV#?8y!=N)OD9qjy=Cf|Np-byt8@Z84H%oah?v{-!b% z3!;sBc-Q+_%6I8Q{$dE8qX$>KWORYIy)Zx5P9N%pSz52sgqDer|04(nR_& z_xD9N%$>3*tJ3*zDu=8Azq*&wyMs=YnaT z^=YsEEEQK_MF?Pe^Lk}&c1)(I!8v(eS&D{bo5989gbsr{0izE(|6Wg1!iD&rObq8c>>1D26BZmc0%Z!;Bg2X}jntCJ&^JS2i1cV~!tp0U{JY zc}>jWXb$)Nvv(BTUN|p|kFg{`Lc5zw1U~b7Y`OG^#0L$ELGYSsk!$aCEBO1#8#y=R z6k-|LKVAMZaw16!uW(LR$6L^`d#jq7ofj^Ve)2px=Z4d=2g{a$L$)yACNTo1Jr4b_ zt0kA(nObcoK9kG*@%d4EbtZ!5slw^H2EOSO(Phl)$P~$3%pA$XsU=Xb!KnU2V)E6~%LLQo$({q+IKg0Bb4#lnQ-uNGBe3$qbyOyf zcQOg0aSWGht2_uNeTBMRID^gFr|0(VxL8b_S)u7qC zK#_lJq4CSD$N?(S)^ITO#3|Qh29g^bD`9;dk#q;OTEox8WwtkqaMdE zPjkBH0)r1^qGqkwgeRb`)*Kw4oj_X%Hb)B=*F@ZlC z<8H{ctio_)XCL6e7^bG3FBOmuFmRG|j<(;U%OzC)jT$O9{U_v|N}d+SLW~ORpR!lJ z8!<|e8NXmC&m<6okKKN@5zcHhDq&@uBiEYw%Q z9`)h#Txq!3h@Q|&oRva~pHYwo{Su^lfv}F2o3RhihP&auU0$`in1EJVV-6y$RcyTI z`?{LiTwK9NF(mNjm8RNVghgigH4hL)4+%U@X1*Ed?chxftG;=o=A`je*H}FK6b=>C zwo237Ccg4DghBuh+2PVUaqTX`7?I-^w2|t zR~IEYFP1ADR(e96KBpQWJu37JlPsd4dZKIXoVa~eRr3#`*LhCw#pJAQgJ=HJQXvLG zRpWB7t-&L+uiF1n-aE*J$#o?%C66D33o)WlC4{^GnkO#%+vJ1WHs=C6RLA=e@NLsF z^04I7`-;|ZN@wHG51jaC=&vga|X}>0fO;7Rw9Q8|Jn+I73Tt%cngzJPOY?68Y8n%D$hQBT z=QAoSSaKaGc3q&ofc#KQmVt)sLoD z6T~0&%lm6UCY~0^PP2S)1=7HPL&QQL^dHEA^jHSQ7@pJy6As4|LnLf-%OSAyPWKgb z%H@YwQ``^FSJO&Gx4@Ed;RK%dm=LAzK=^-FkgpBupv{u17HGYuXZ+l z?x;t=Zt{M^AW{=m&XP~?{&fNH>*mVj0L@LfHcg*Nz;3>n^-xA8=&e?=JCY6o*{J); zW8USrDxp*T2etPRPmT0nZjUto4^`hCkM;WhA1Oq3A$t?qBa%_}mYM8G$R>Ns-jrm9 zjIvVMn`Do&D%m3>d#~T?eLLs#J-^4}JkB5I6!-le*Y&!d6Oj$rf|&FJ3kaS2AR^^B zdCTcbrNfNMZh3;w3HGw=<|e*BP^@FEOnisCUh>FM&}LsqF)fZh_5sGdt42Y}b`V5z zn++jqQt+?w=TD$vQm$Rvm?=G&Wq2`ZCpv&>8lQgKGg_h+##q-aLY_7w#4JkUPWW+c z7vYudFfix)Mhzr&S`UE=N?)lFe~?K^&QGDV_X4$MJae0x>dq7#E@3DB|n zG~wiv8%$Za4u25uF(L==)rU1|!#aq2d@@Z4)1C6S%il5gBWTY|36?IB*=88Tj%7k|`x@k+u?jDoxeR4ScklrUN?SpB{dR#-E$`<17;{;f$5T zQ7>_F2q$QomMeBYSW@kq?;>U0BcL3@SMz>%|HJ$xU+*|uL5~VYn;n;dEto$>aCR_v7dZAKV9m4CxT~~I1H5xJWJ>D)K zyPH}k()qvOLjZZ}L1C=N7RGh&g2~qJ0ofLTY#zd4Z9KPLoh-`W=y^nm!$#-#Gpvxv zywU6T>kyU64fKfi=``1IOXcxoi*$DjHveMlvjq>=zc8Gu`Qn*GeJxNOK{946AGa>w z?K)e61Tjhv+ePvyFaAJ6U^xnvHqWqTX$RX%5PHZrY4N%2GGRln5=lt>s0@1(w98f~!0!oFL3c`@e1JF<0^DNmF zu@k=TtxGjs!tnTs-FW}&yM6Ke{OY&Q5Lj9btenEU)B^uSOgp)Ptq`3mQ0qJ0rcY3M z$^Dw4^+l=rmcMZMCL`w5_TfVnO=^C84x;C*m~`1l1R|({5jvL2 zA1x*rh4$SAsWvv^fmhECsEC`YOye(GC*G+A zNGLUB9tFOX!|6V)6qPL%VH=_fc_ZdN{uGvgc$3`}k`k^P8mR3@1FKPAMkevNb@YZ6 z;1;K|FuT9K!>z^7Irf@rWBM5mscm2h?niczM*7~cX??!1js(mzAK4CMedbS{@xeIE zw0~Drt~dRKsF>7tIHLgx`A($0QsK4<4yvCQPCPnZczWA5GI=fpkTJ@U5ZQ73^Kq## z==nZ8`pWsrg+N`!Lj6a1DPbj8OZbSMO5r)zC}5=WsAtjXiAEsa5D)cU$uFE77-fH% zIH@U3Kmup;QHfCQA{wE0nreSweps25M}<+~D-wS*!gknJOFK~eQfK`8V$e1~uPiNw zZOuw~O5lc5GK;NspJ^>TEfofkqs=n!_=M^m_|!GM2)T@{rtZAu>tn%SJaCuAR@Lrp zXC-y2MLH-SQVu+$VQ7;da^lI2R^P)SAY4jEA< z6^RoGL#_*%4u9BNX`cG%`!BJKH3)(780xO(rW?M$a1Cw1iRO3P5mS=5KR zS|dnYdb1JcjWfLJ_seGhOH4;_b2&V_@VZxUf-n|KXa#`F<9nP7Y?5B9o6$m07A2d= zy0C#w@>dt8*SsaBVtbR}}5G;G!%<=VTC3XihmFddTL~bWn6*!q>B1+CM8{LXc&;?me!zPoLt?C z3%aAdW@$X^4aK-70V|zw2{SC#JWBGd3%BecL)AhW9_&w7W(UhkjCW&HMA5)tMSL#j z^Bh5=4+C#jVQb~sW`86-lGhz~yPuN7;$UmBMph;fiEqsiAUa{hv>u`Z(uV=ef(x;v zM}F|7ATiyGkE!!QLx?k)16U3zF)43cl9EW(9g2?B&|a6GQ#<&6XEF620`=$0e(wtA?LEc zzsBl@4LGU&rg>I*aIX>$1nWvj2+z^Gg$f%sgQ`j>G?MjQQYEGM3O&`|AYv7_(5OE~ z>AyWs?7Mlsi2m(c@Cm#usC$D`Ocm>Tmzg0rwRFtN#8=+!fsIm_H){;6+Fao@rUoX0 zgkU!uX^~>br?@NH>VnVCAa2l%O3M6I<4Qwr7wKlsdC#*}L{D1}OUmkz!8`3DJ4GB@ z1Djkz*y+TF^Hc|1gkWxye|yNLkxMoZCnP!Ma*xXGx-u-i58v8+tfwcyN82VM#izQ# zPKH6-9wSc8TEJRyk1lQT1jXU{G8n!Mr!`fD6;-ur5b;KU zG@?KSHI_E{tfoM*@vf?&ioWSga+KhYb})u@_pZX6$4#``jY#!`Q%W!z_=!q~3U%K% zQ^E-P2nHQtiU*k2pJ32$6NQLTud#j6A5CGMc*IrRB!k!Asf6R;FV6K~vmUgU-2oSH zx+^A%g?S0Tf4ZVGYjyObNb#`eGWz3-(z)KRTW<>CS0&0+!7keaBeA+|hvEwk9+-UJ z2}8O-=W}zB8IVZwAmCczgMAjh>04u9cWx2|mr^pd${{;1MyYdjBt-SCplwGxhx>fsmKi=B8>!oPi8x)5}3oR489QOiqR;?^69ToGWmoFLNXB_b#7 zj%3RESOu{(W%c0zK@C!Rtu@WV6vZku44%6OoT`w|AdbG59D_VrH&18!51k1|VYrP9 zBIg5lDnF#^6s-IOL75PrMK6CSw__aehAgNka`55u38s=MBtwJMoT(dCb|bQOy?$$d zq26=D`2dL#mSidd(Wmyz6quKIL60im`v^xem~R3iKh<_WI_&`#kE=%qi=`BDR+7T9 zbeE(rg+K#xykA)gFcN1^L6&$80GDc(*cK^pmyt$yS4e)(s_Tm zp2E-AZa0j#gQ~m~i;S>}Ko4XC@@g!Sc`OdxKE>nZ8@op$zFc zoCBpy+nsGco+4*6qFeUiduo6Emh_o5*UETQSNIwT2x!<+WZT%@?a?;~-lglEhrno$ zbL5mp2BFxxEwJ_YM$E{4UXZ%X>6?DDMf?GJ5p@Dvz@OWN)ZE66L){ON%3ekitq&j) znxezngz{mp^IQ>kTJJBU-ojv{ZPAV+G#}FF{T0YL90!Hc{t2mjSpYh{J6e_sDzzGV zYc+n9De7CJxq3Vufl9?_y;{qf?mnN~@*6+y8PS|(+>N>eIE@P;M=(WvM*|0DLNWm> z%?fxYPh-G8^=S_|6@J~7#H8AqhLGr|s(tCVWko@+$a1GLa3lW~w96bbDtFGN>Kko! zRZh?BlVGR*(72)d!QXLxTNvqgfH4yl^ASdyChqIQ;7a>@Dg49Q1(-m4?yNs}aG^K* z-W!F6h}ALw>1*qDOZJymm%?d&+POlOB>A|*Z;h{BcGQltV(wHUR|HESQIDoCO#Ji- z9DLl8E5#*`Jq{fYbA`yo??^;n8@!tJInM*u z^4vRx0ZWy&aBMQsn16v4;pRP?6=|^!E4yv8E-*hYgXIDyrj1XGvGuE0kc9Iz;)fV> zMfz1`2f(Q&mnWFdPkmm3KR!-K8`cqA z!)17Z;FvcC-rl@=IQkrVRFN}BMe|{@pgLMkobc}yhx*kbreg{2IJ%9Sw3+QYdkZ;` z;pgUmms(y{&b}*{lJ{#l+zLKAnRX{NgG(NX1R7Y^W)vtZe+pNfF1;&R3f^8`ZRv^F zXRrvO&B?kU;XBzBb^@o4fe=r#oU zN=U{cID^Y1KNIigH$c)-ap3j$jl!AV*Ir#MU`y^-WjiJf(!^aELQq{TdE88O;YLS~ zHDdFHre-^W)Y@-%9K7$ATHZp4Sf;4?UBus8EnMxhe`k{K7#8+hBSQ;ZOFBlr$1Z7b z%l0L1O4XC3igCHEPiIBt{M0u(dY16?q30&_SHr@EhrIdlm{!pzziDpTApgD8?5z(G zYa3=yHP!}kqHP3ASE)!o)-!{)&l z6Qw8Xynl=9!hB=Ivp^1U*FK!U^Bj2*6gy!j5VcCZJnsmJJYq{3Ns#{rpBUMv^uf|L z;Sl1q{(_S*Aj64QQwP77P%9gJ(~EaF&1yK>`szFmr9~ST_HR^-If{|C;%12=x<#Z~ zUfDkOZxE&Wvs)Mex(LqYNrzVn(mhVur-}{TX{wh^t@aP4eTRRFJ@zJexFH-HP0-mNGc@>$A(JhZyHy_R3%+~sAOY^3pd`3C(hl!}n3r1*S*`5th*Kvrpz0oHxl9o5sg_u7fej(m%Lx zp?RUcV%!`I8&s`A`4gq?l{@X9K^Z)gYg73K`+x$u<`d1*@*~kV)M&kakkS-}RYoj;A-Rpv zPgIFCQkn$|SL`aE);^E_R5ooK)g}H2f>uPvLV6;2E8RGKp@QOv@>cnId|#@D_KWl@ zHs{r2gvuMlKMEZoSrJfHBYTeJKI=J%WxCHi#{B5*ccZdsq{Jp%;)H&(x0jx!)9`Ze z(KAJhT-1NuA(-UoDEJ_wl9$GE?2}~@YBov~MNg$OU%#4aIDM3Dm?ye@H zi~?e&>HHRWYCnDc&=^=?^Sx}YW{-wBhd6pny$Eabb!3%*Sg3=Le18Yfje>%S3}T3eR!34l(>B62jrQjiMl!c{i=(QC!=io z7=F^fvXO|*mNqC6M!10uDm3%N&13AvBNWDlC3%infYqMJf62tO?l1rE00~*{_lUR^ zGji`v^^K&c*5q^YLDJGfRWRF3Wao8D&!L1lwGTNUcjLhbnT`x9U`H{D^H-LB$g9_= zhsB>ZGt$vtlr`BBKy0+LbF;CZa~MIg!$mk(e<>Rar8-SR=sdqAtrj#s2RUyC3GUw#c><_QFj z5H|xA)1mwAwQnrx{FRSG)@eQZDiiMNQ3>WEkR}jJkFi*@^&hJ$Eg&>hxCA;zF2rsu z0mUcU{NS=cB+|b1769eL9fjxDkEu&=oD)DDcYN8S&F~_n%cVgPwNLgdkXWK+^Sl4G z1#CdJ^gI`5w%?hbJ&D(lC-DdIzlOzgXfL&KH)SBXh1iay(y`^|GwWb0jQxBS)PcS9 zFZb`|v8qkCtxQ*>YJj^JJayxk1$uA;Y)UyPzPNGsSpH?yb9yYhL-+di^X3|o^hzqi- z%QHy0S!S)KxeVXGi|xOHnT=%WBH?AXA-exKx^fdSuH$o-qGc3M*cft-?j4eu zcPS|V6{7)Hh#KDdu7_D?A3Tu~9U#z$pJ3>)o6C_;cpG6ir^STn$Ek~YV9vo$!#gMa z0kuG&7Ge~s2tR?Z6f@Lx`*?Rkr%1El>nh5ki%fk~sRzXKE}*W>=p_JHe6tPau=VI8 z86gx#+PsQjupbaW^#~DsiqEo=>?&=^Q{$a1CQNJ{LV2TY$10@q{QU-f9zK1m5O9;< zfgn(gr!a*pTg0<`eXTs-moX7Kf%4u~yDa;BUcG>G^+`mDrjJIF;Q0FQgnBl7idAq8 zjXnRZKfVr&MTjzLtFio|8`)vE!8)@GP^jQTxR(1VRlF7(Z*@xQ9g$R_cDv!Wmq+8! zmN~CgaBq&qC-8z3#srdhLyzCx7(HQ(oqP1Cr!Z~8xQ}lwI%NGT!iSO1naoUGTZUvk zLzXACV9&f!Y*4c!wAI8n_kDw6hV=xF>?IVa5H26$?$=1=-x`JQCy*yiL{1<{k*Sx3 z#@2Lv8W3~_II@XPfo;4gWX-Hq?UN zH-hyP>3j16y!+GM3RR!Dl0F?z^+Y{$};G@x%pMLsqpLD=MeJdRKxG`bSC5!-0jPNrZh?8Sx_8PDb81dn*ISd+ksT=l-j_pTh;coR zDBqH#_Wml=fbvfNKHW$;H6qPt7;r0$68PGC*f7&Ja~gfx;5OsWW1ScMvkO9YPi&9? z6lLl@tUr4zzq%q>JiFRAe<0va!Z1QYyI~3j$Xjdj%&_!*^wO#`f)Kxxeq7hNEsrF{Q2rGdsL9eE1uCG&8_Vbu-@hj2^3QyN;utjWtPu08)eMc&9p3I^)97sv}E%WLwnaL%$f}H*|Z4|9`_O8M*(@u+y#l2T5 z{d+Qq-dUA^Nh~W&Yeh60_AOzWcU{m!VO1soXmUrm4YB!xjz&RmLQo9{1 zaT7aJD5HdxMcrjz4kKV`qd)Cq$4|_!w@y>{!Y?hg$k*0xYf$yckJozBu47&6lW(bW z+0Vy%8^PZrk5jju=G>YRg3&BbSGTWXn%wKA;`plDO(lG;s4GOX{~$J3*s`R;r+ZIcXE*V; zH8X35E=RNYDSR!ENtal5P_;$t^{=1s{H_J?B2I6@Pd=Gn1 z^u*<+mb0MoEL--`1mAqDs!GAMIjVmg#*R|DqY?D_00B_TR0(ah%oKbg7yI;D=( zvXUj6>HgzNMyluc?iQuWW1PI`O;qn?%=(dp+LTd$O%n@kY{Ep>1M%MHza_mAphkh( zYybDzNEp!Fwi}taPsX3CbGES*TBE{q|Mw2$bE8+1&)$=%Y9_F{i`shscNt8j&&50z zewg@q`&BYzG6-{g4!iZ*ElQV+Xu4A0z1~8OU(D&NJWDc6&*a$O$Wn?ihPc54nhqfc zYO{*5jaRNdbnr~t(BGNx^<{W{^L&OuXPV{t|Nf3k7-*tdbCK##U!t;&yhxJ#<(lsh z4|Ko*msqA&l?2PHjkk@+pj(bal!1;oO6qA?j{&7l3dFV~!;sxl3;Xkh56r7lhug~* zj3>4Gu%+NQo`_if_m^A`_gfQpaqMNqR37H(CDQA^ilo5Fm^x5kU$%-CSz=|F$|-8q zrhoe~jF{zG&Noo#CsY9+_5_JSwfPC7XfJ|OoD4&BZV!YCKVd2YY^}n5?zv9kmL{cg3gRMAN*7IzeVYq2@1xODlX7vp0G=1z zg)$`d$`H-g4X6KyKk1rQpn8yyl;Qmn_fU5O6ihtYTbp`+1e<-koF5i1ri|DxA!+sRA2TRpx`$4LqZmA1cqD>33@GvNbb$! z<2ITZ8Q7R&Fc>`GIP(frCn@0ac!?Y=U|eP!HeGHp;j6Mc&#@Yg#XE{4vzd4QWfNp}o89Yf7_ze3o) zn=Uv)3bcz}86d52c2GjV)Wrw^Bcnc<2;wO-{VPwz<&3)c_nS8{&|1A){k(wwp|q8D z2xpZWAlb4Cpd;9XMB=rGTtLia0^=~xH?SnLn>>?$wqFN5vm7n15QsssWerm=#U_%< z{WRKL+IKW1_AxRCYsde&7lKDc#M>d4%;XrcLL<+k#1#2nk^4~2{=On)&38sF+P3N# z8T<4fRE(P9JkV*r(e{J!LEkN`ua@ihkC|4%bMW4J^85^N5&Ux7`(%U@{_}|%D%hzh zk5I?)f8KDlKUnPrz6q&(ozNL8Npb6G;qz35K~X2*XOm&b98gFyc@!6lklf`I>Sg7T zZ1>E+!iBInHFW9`c(Hg_K?Jn38t=4kq~P-*x|yGjgY?zTi>BZ{WoP$K7k0`8I70Qw zZ6cZAFd`W*?pN@H*RGJt-y|}8Il+?Q^_6!eKSnM3)y3;qV?;MXEeEomnNK4l?>hy; zL`atxs1XxGkFAWM5g&&-?}?pNP5#G8Pj0W0!QD+CN*M>aT#?=v__xJ^!kzd?&HegA z{u9}Lr-A=0%B+_$q->t9r1Es;U(U4tBQ%Q>@Wb5#j@SPCaN%tz$nLSI@03egMd0zc z7}LxD#*R?LXQ#4(BWp69A*5P&F}9Fo)95$&cz5~TYI|7*F_vFmE@$pniRSV397E=A z(ZPl4hJ3!p{FYG<;_jQl4*6ngG@oL?LHNBl8}j(gm+l3h2(jTy9_B{`6I;w-Q?MSavBRJ6;q^E zjO_!*I#<9-`1#}8WJ*&cy9aIvx?t;ALs%G+E`H(9cj@OXS}+yQd* z=$CWvkXozxTfJPki;cSiNhFU4=pmw}Pj{8D(vsn(TrCe)fieLJ<0Mc4kOfd0%MvJCYmt41D*W^L5-*|0!P`T>-P9U?6t@u{HW|WY{Bjn~Am1SV zpZvW=c*aAo3x^55xcZ-exy?ik=W%bFlsT*f-x6LT+H1MM*2GnYlcL|o3`D9P@$k^JrO?|`UaK{9d2X;mn%#X0B$NzUjVAY4HDJi1n z>a4v3@}Fk(d)vz+eM+e}2N0*OVChA=6y*F%p?v^+46D$UQ!=@jf{|Qh3W_?s#T`JU ztRddV@aGF-);&hfL@9e>dMxG$+1G`N3#h!ve;>qLLIRhc)p7EP2~mR~9|bt>8S)Yy z<=@4)J;-Pr@45Bc#AElb&6`$E3As_Sp!8fZqFInH=zhZ9%7UfSsznt!UJ3HM^dDhW zDU;cjY`ysHIp}h49&T~=%Cqecz^8p*uT?*dZ({gHp$rKb|Bfzz6!sJ7!YXz(jt6e+ zUt#WqutZX>fC)gd?BJ2(>>`Q4`n7bG*h;UN=oPXR;St;6;%>zCjaC@83hB+|)3#BqcN-ocgP$UmuAYP@;RKj&Ru` zu#~nt#8VS`PnBdRKZ{m+_e9HN+qF0cPDHXxdfGa@5bmMf~KV+lALdz^-j>?U6X~)S{K_UESRlY0QPNMn{pa}s#WabH&y=*Sbp^9(3#-! z|5h&n;V?fl8OBu<{ zMGZoICv7|2YC$%7dpsSe) zuk)#JwkcW^|0v%g*aOgY_ykFeV%FOSkacevXvivR9Z1=#pC6x?hnS!-N63k!7%VaJ z9Y8|ylGsT{Tx#B*qPWp|$dk$ULDpkiq<6D!A5j47#H}BBFQ0|(!abRk%{05K zt5ag=JqJ_l?H~AZwTD2=nlr3MoFbUj0-#6r{zHJ+ohOq{FndvR< zz|qM~7zI|Hw<)tDokvnuJH_D+tgNZ`VlvJl8u&n@^@Wse1C^yMLt(QOQNcwvj%r>( zsZv(;Rp4*b)SZ&T!#CUy{?Nfft#`u}$A`NOJMjJN6pacZlO7kHrFkIl!cB~FkXgNf z_sD`bNI%g*fJG`=#6)gr-uj9&gU&k9WTk=#tBk_yAX(JWfLI(JjMjI8{V(TL(XO z4zR0z%l7;GB{z|eq5Td zl4`b=YJR}Xjf=YvB?TI`k@{w9gkff67w@O9Cqrq_&We}X!I$9V@qdd>PJD@vbi#fo zZ`7X7UL9g2GmW%I#q^=l+*jDYuOH3)-|IvWEYb1S@CXL)CAinlno!4P(OD9=IqGIP=vVoQM!x}+d}5?_ zh3aA4lZ@|$EMM;;xwKt_(G)_xwB*bnQ}0B?5HAWgdA-J~Liq=13AdTaR;`Px+7LY8 zVlXd9*m8p|Ml~EWbvp#Q-zaW4n1EN~DTA%iA2PWLFuCYK>rzdSOR}~Y(Imta{tT`5 zH;<(deDZiTPNiiJlj-z8`jwRw>K~}>xz6x)P?zruD}%%Qc}5zdQ=B8!C(v9e{-<&# zng(aw!VdJz8T414Zr0o*x=wP_8UNJ>(dDi*De@tlrebyI1Cdcq7j@5o^s+yH#I9MU zbh}ADe0a)nlermF2X4IK}q=DQy)yGxZJjv zk5Nw^Jbc&o`+4b=FI&Y6x$i>if@QukCFHR6bsgZDo8Aq9WOHHRUa_O7cw>@l6`n}jpdkTP%d21HE74TSn&&-WIYxv-tIC`xvl zF~>w+@c9kLuMcw?^Y6J4i}dCbBC&ni3L-8`nhY-!3j+0mjk0jFS-az&GiMhMfLVsu z#yH?}XrWU2u1wDHMK&Sdx`P4k35t|*9d zv06NCb$C@%03IsiCFxhM2!B01eYrTkN!WpnNo2I+fGF51#o`zlOxo6pfd^`sl0W}E z(o9^_KwRz(iWAH?w7(a)Zk)9qtI!fVGtcr%zzXT(gK^UTtK>P!$1q@_vfwIR5}cE{ zxiUU`&dNp3JpaOe7kkX89@fU5xs8RIL+3V}Wxj-cIVWTSVvq?%Vz=4833#;9v+>JC z4oJ(0ld%xOY-yPO~BEC2cvc!Pn^+1mwdB5e*}#nLXjbUs-j>oWEuU9v)5 z4fW4F$jM)T?9Z>73c{AMep`+E;xt&?lOSFeazs}zM$FcOxMbXoZ?pX3gw|hAi3zro zTD~Rx_n%|q(CbsfmvcwO#iGCSlx{B6c%mO?T2pHO-H`tDD5g}zE8oN5i@9lS>3bAo z%Nx@OEi53dVE-eZkb5LE3G+tX{Xa$r^Sc}$Zq>wJHaSLO-6TFu!5GoNM3|lWOIFRT zZUTH%+BSD0KSauPcX3ECdJE!PvRcB+%NOvesSzKa%%|<@_W75FFC~15>@J>g+)eiy zOMKYhrIm;~-|qGDJnkCA)fp#09ppml3&F}}6Gzn2j|WNJxK7sw?aG!z_8;N>wqR(& zQ;>TFK%Wgn#TlM7qPH4Uom!*c51%bkoQE$mqc ze(BbpXjXH*>hdBEXnuD|G2XWD=smuTscon7wr@UgFsCI$bGTB)!<33^nwQ0PN+97U z@Ti+?%)>U;_e0l8pT5da_^GGQZ4EXa_L?AaPx-7LyT=C zxwVdkXmUQw=-3nFP)0-@b1z}gSSB|SVSm!fTJLaKhZj4^R%M$u`G9Q6oL<0o>}Ee7 zW}AJ!Xih@>eeu6zYMY@+QWu&+^;DCuuMfur3Ag{0>z9?QbvQQvqx^*+LN+1oXzsHk zmsCSMcXx=B`v@ZqO+&|NTg2(Ho#;DU=l7xx1|g^+eUVNgG9unAk#9;?7}w*Ab0f*E z;G2cEoKO)YmGpr)$yHxHQ1|lrJ|BSfSUH@Z+wgK3_6!9@Jsi z3@aPGq|2tQMzkCFyoK!XfU41Tnq+L%YXJvC|DZ^K=_8}?nn0wqnD005AR-A2XtqY3LrwJ#+N|_h0TEm2iTkNy1;Y z;T4MCLGry|!B=C&3JocI#KflF<~Uwe)ZE9@cGvJc-R`+{`A7<3GArEY0n~;0S2;*$ zO4uuF=d!+4b@_hzF89I}%gPhB#?=h=A)M1axr+!(Lf9rzD;r6w+ zBvp9NgESd-r^@k!9M-o2!szAvVlH03CRO*RFp8@_se$NW3!VPBB;(7T7u@}+k)d&q z*x4Q^avN&p6Pf3!5VjFmTsB@o5#4aWFeYqttAp9TWa$}YjjhCtY)OxXJKLFaO}}^3id59TlD<5sBN7nD0~JaHS=Fk1Ub)E)&}guHc0{Yt(U> z_7X)-^$St9{MsJ0MmkvorPZlgaGNn%XA z+4fw{CL~3$C_q zf3P;@)olsD9q{k5-oKrY^#{SQ)DqDyGik@V$N8Kl2oi0SZ|1I3m_!rb#K9sGw)yzm z%J%9$@c=eslmu_wA(julKl2|Km<@F=et#AjJRog;o~9QA-M_;JZuwUN)a4f>&!z4c?&H&&rti)FdS*jnlav6zuhIsx`afilo2K1F-H>ep6g%dwAzKtSq)GDr1%z56(+|G!}&1*Q;Gho*MmR7zF`UGB*Qy6q)b!-!wTs zSauBP{DLNSbPI_z0$osP?yC%RbaI_KiCvvL+tf|~9^mf*hF`whC+#dF^g`K_Ea^#U zQgPz!R?x9aLe-aZs)D;KC`sF$na=roEy2|u$=BI+$MT8g%5#dE0nVS2iQ1IDQ26#| zN*=Ghk~9+^>jtoCao2786UQbN#^OOPQB_}0=wom0YOgTj*L_TyJbU4!4c`P6#fota zxmzoXly2WKB-Z{>;2iokMr*;3ZD)tY=*|4wcg1D*tj@q<5?=H>KReUPIQ2f}$EDU9 zw9Og(M7-PQ=I<9fz-hVV+WW^ZNLSH?1?h3GU>0a|8 znh(BKZOk3Y*H%lK6KR@Jcr8;QHhDF?hbq3!{J)a0C%PpcT8&@Bn3gWyd>Dk5A^xQN zT_7jWKkwzJr^x){-9@ zQCKI8#g9212PS~Y;ChqLTPLQU67_C)li@lvGq)Cs=nKb>_BScg02V)8b)+rK;-Z-s z?0D<&E)2r~2Yb?GM=S*echi^!Y-bL)yU&L%lpC{J}aYqd11%37%q_5w3 zw_o)t&gg=_17b2#J(WwH1&*$xdQa->^;K_;Y?;ds=AY9?q{Uwe-g8MRV8KH}Hwc=h z!)E)mcDua6S!48O$4=KZHL9r~jW-<~SyvmVms-f5vnsOAy3Tej6(RnBTl-6TEaPis z>J6w^^_|6U3wY?BZp&HM=uWIXv#o29SOk**bti(7^AX2}?9)+%+QBuIASF<%b^Yc1 znv8)1>mBI}u3)1D?6}`C&JWN9B7>%`(!b}{5E(I&gc3w=If8=z4o%%~~ zLKXQkg_u|6{$gGRI#V5hP)vBL()w}f{pquehHWfm$R=84`-~J zj~*Lx9k~$yif~!Yl5+W||9_}vS>QQb+girpz}KJi4QXAT##`tR)?Cf$=486Y;CxP1 zlGnSDgC!+?k?VW?M?+H#DbhNXHgfaT(haQ&M}QZ??U3{vIX!QobThV*OmQ}Oxe`^{VLNY+$)d2Wbv#4(8zY$Pw8y89+>wK? zgg)5ogy&43`48;?1K}P)qx{__p3dM zi>t!|5?YrZoP`zqZ$b(uMq95tR+r?1u+6JvCS>NEIyAxL6}DtonZL;v3=^JLvi=xK zLCLB7+22oeL@n)PTK9GFoqz9+9F2cuNU4giLe--GZ+D{A;{s5vnK~sW*Pqe)5PV*g{#<7`X^Z#kaYM%M z%yoWLy2;sheXx_{a^UG8WOR*d{s;AQ=kW zNtw&K|9-r)Pq`l>(e$jemn4T>r?~J0MgeMv4yGjil1Rr~wILrETp_ywyfV~}pbGKz zF99(0B1Fa!EHQ{VkQc}SUeK(n7M>ve;7BbZq_t-9dIxRSfZCAUo$e(tMn6MU(rrF? zY+HS6@b%?$oRwo}N>&1}P6-h79>82U>BrPq4|AKr;pp z=SN^?i5^Oj%gF_tUFN7Z1?H+6{liS32N0hH6@sptt;DKiWLDV2W_ULz&wViKAUe;W zY&BN-9*QQT5&g`H8wj93+3>mk)khH5?;@bF4~9a~Wc)XErjJ;Zzqmc?~M8BjA5hKbl^P<2zs3ON>mwc+kd%oE?A@+n> zp`eg1S(xdXY8UEZkh|a?uT>Yz(5gkhNY*!@dG1>^>c&IW*x>bHgNj_=C&zFrRG0=Q{e;PrF8N8hdfC;^0rZ?tpp^G8*sG)_D!e z&f^DDr=xTp5qS_}qeJ$?PX*_tJ_L3Z3^hX+dHkMktt8d!cpQ`nbXno$jNc*>@K1-% zNX6WW_#K2V{4Q~h;r1ZS5%wbjOFk1npv~PjK~0l_qN#~UXUjz-%u3* z(#vQ5&xbz2o)jS=xf1XqSs@`w*0iDZ8y86Rje{ZQ8L6~EtX?mj$-+J=a{q;wsqEe) z{7o_YO9h2!Z0=dYJaV<`=q#_3g{38M#qC~r|CGki=4ly7Rgu7CzmCzGzaIk{@WQ^3 zBsae0gvHM*h>c1yUj1s;aR+=bUo2m~%WqL1KU|_3t1(CcW1!zw%}(Nq2?Xzy<59Dy zHINC}rf#b^O!{N$31InVO@Q%$O;cfIDZBYxOV2ac%Y&T89{Y8RxhX%aezSJH&+!c% ztsAN2F1&Z$TEc)~Aho$|;OOY?xz+2@6$Yxh&%J3udA>_0>>|rqUG2WFgiF{Rua9@JVb;TJzy@R z8okl&%v`6$SQG5#bSX9eOdF*piP0L^Hw~~l@V*yZl~Nx${xP}XdoxRmO_DMbJ$yD| zl=}68o`q^HQK+$FU~4h9my=3)8kt)W!@VyTrwON2LzNr9#@TA$ulK5YjP;~k-&xJ~ z(pywi&DpX~f;CudaF_zv)liHh$xr1k-Iy3sEL&(igCgqAYAj)j@7YRV3p_zdKjl~D z{2~NRoC@V`32UD|z^y$9mmIY;wI5b=HV^SUB&Dggj!;<<9k^W-Uea0mUI1lFLAIe# zbmRq}{4DCeG3(8!e6_A(HT#^n(HD~2Umlru)PI3|+x;NjF5k40%|Z7!(SBrlROb@9 znQU9BvqFFnnRn!gtu{EC+DR66dZZ!GcYIstBh~R3I1DU|@$Ea=@^Eh*t+iwjF?@VE zU6h|ZRt_B>H`1X|1kW+`rOopGVw7QGP%^`N_ z6AKrjL$3lCv5kF9DXSM`a#f^r9Od!5W!&5z)F>j%5Td6ko^5Y{rnF9SwA>#Tg&a2M z%tx383JO&|iW5d+Y~#%LSJ)XjeNz_Nf7e>al10-N44Wdpz}`<_hl_+Ri_4hUfHOsw zg5X)GuOv3jH-uL+&`{fw5E=)w6Tq=end_+P_)C~*Jdb@EU{^)lF;Dl@(**@1CuyAOpes^T$`Oe7Au=gEyxajz(Rgc-7@zV4LnGPBH~~=r zje*=)&`mxIsBrNa^fWc0=jCAsc-LKLI%=9sU#h^BIXSyBIB1%e;l1z8S-S9bvDxF# zx&^!T9L1rvy%Z-J#?JgD(@bd*K^bS|5h<26q2a??DL>-#oXjlsPgJMgxlcCwCtb?s zW*rY=|7weH{c11oIyCp6{(vO;r=-3~*^HyDkFj;v_kqlGe^k4^QHNW=-ey~d$4=E| zlS20C72q`AL*3{L`xh~K%ba*LU)Z$^<*Jln2zfH$R!lpJWyt@d+{XHg3$_eZl7n2|Pk4N6IZenb zi)QG7TR1hgU%~S4!Nf`z)E{g#`xzWX#Wit@`erVL3-`FL9^!v`=I__P(FW@`gZlia z&etkfcYftvao3mHCdTfU@v_m(@qS%Fh_n4n4(TiC!{w2)*7|LIeP^GcNxEkm-0jr% zz}6eh40mnLRB+#ZfN7#O@N~Rhs%KI}lcV27hU?n%2sottCE+)GJ=gRn>{?P2EAb<8 zEo@D8y^oJgj;~DspL|iCsYxK8y^W4XzQnaia$tisBu*+`0Xp;2k16JpMz1P3M*cYx;+5+AF1` zm&G09=Km|}y5q6z+jn$}JIRe?Wpool_TFTM%KX6*etysA{^tqTeU0yRe$VqbkK;IrFm8cd@@$^5+@^Z9$yF+HrIFMj-B$&a znZh&U1YZntPTFhKzC_gdq<4QYMIFecY|eUa5k5N;&ilwphc=G2TQM+NOYy6TQIH z4_pvZU=P554kOB*cd$5vEIk~g_Z+VY@zTu{%YW=X#Y^(V{aA-|GIzZNAFr?ZjnFUZ zug6q=c9Qx^=6^1I=2m$yWasDjaV;K}+<*j<@0GV^zZiqr`n{07M?;oGtT7zjRN{C% zWRuExR0?Zat%#H`D4)~;I9PcqMC+JEe)+0alsWz2trmHo=+;pe?g8#(r91EAco#2bTszq;r$qVN zTsW+p+6|@ofCr5HGU5|>7)ia^=lnpupb9#pC{MnUAGGAQWc)HDoTE;oJ7VWAd;o8? z`>&tTQW4Lmi{!Q&$A?g#(X!E8E;$vt*{*nBzv%P#GT=)_CPaEt@|%=u;&Vx#s+c@$_^v<6GK2Nt>ef!o0QQe<@ik8DxR_hobI>1LwMQVf?N-I?5_ zlm_#d0XJq+dgUmdD<_o}Z0aPCxpr?Sve^a|CiV<$Az?}9PV=l;eQli+Arm5*x}ZZw zC)%1i1hHyL5bs6u6(eeAmegYQ0Hcu;)R$ zC*zc6hrWsQB%?;@Yl;O5!ZQA#Mz7;U*I+7{6V?xAo#JgCgU_OV8}4()8}C@T?#IQ4 zdx^$V_*~+de4V`LUm@jFXVP1lwlL^$>CyZ~RUM`BY62JS$;__B(`PL8gGC6nPUiSO zweecpOR6?h;7dxhr^y>WlB2Zabd=>)5&jy%G~Y5ecwKDyR@Ecrqqj$bJ%pKe3X9JP znmo@v8ydaxAtg3DQ$FCB73+HX?%pw1;w|d$RcD*yGk-@3}+WxVYDUJm_XWLgw}TLNxt2 zGSXs8dR7Z$Y0*mJ9{|&e%lSSWQTEYsltXxpyh!Df3g(3s=~T|I+xr z%RbO|e(fC}y_|ULM;dtIrY8E8{gvIdZ+RS=aj^i35FD7Q)yG1&DyobG(Q)#rT zpM`goV}vrEuD7oxZrlpZc;aqQ8tIMLFLG1IgqpPmxkisr%q=^2A9pD$klwVei|BDC z3wR-GDufK6tabM44hcWhq+CFA_djhve$<#bnWD%LM$$MPOqfrjF#L#MP@4lCM1Dte z_eYtr&Z2b+Q!a;AuDa8W_fr;Q_GyOrCY(&KZ(JR)JviHk?^(w%Q6hJ+$F6OeH$*H$ zoIw&(Ngv~1ulTl*j*BCID%>p8O|pIBfV_g{v-pj7FJ0#g@8({WKGQcINmC}ENHCzr zxWxD!``Ba@%Z9z%UGa_0{#ROW`x~^vyRTP$lPSq#DCXB}cna;gUYjnlP)D9n5C3sa ztJ?FT0qaUq^}39xddNA0vLKlkbSeII_-92I7~Xu2%_A@3e>q`1n(S)c7wI#qcVc`2I>wJ za?YjR$_k8pl(J~!y?f}o;o;trad=s=Bi7mLHZrpQYfWHFC;RoX6WyM)tp^zm)!wEnKS$X_evx88Z&T}|-qWWpKkQyYpcN!T;gTKZU( zuN&#d#0QzVl0i>6+Fn)JhoG6F_Moo4qK&?)q`^R`?l=zSS7B^-${taXt*|leh0YKe zDyHEa)vgs%DUezxDXGZC6W*Ab1?2vc}i%>+1Src+pnGgxzi?q4>ox8xybRz4}W=TsE7xqBDZW z?_^=)xCnIkADfhtzPgonm-NHXwbIqfp7u8?b*^5!*pFDlCsLOl_2XqS@9wjP_&iBx zf8Ze5F_&4yeJA}%aMFsMG`+!ftEEo-g-7;%H$ntTI-({^%#PwVA2A6AAF7NxJGPk7 zFjIy`qY^q78O!OW<~{Yn7~sAYZv34`W;V)4(xTtIi0&oOCb&n%b0nx977MtLMvO31 zdOLo7mwN7-S6jh-(X(8QlUzT-`iUIBGRj_;&1a%fNPBC}34%rLRF)?~F;0>GUwOKQ zKitlqs}i^Zpcyb9Z)HG~-kKaNFTi zyc5;utHZ{0`W2Kx&y!pq#nCYekXv45WP6~%w6FU^6{R!?(mR{Oj9F`v%lvG_A$J~L zRxphAkx6+(o3JN?6KX+=cd+_~a@~QJ&pIlz9bP<>LcC_Lohh*GOUc{-Cq%0>oxFBm zRx{Rz7&QHYQZ;C{Z1{Y(?Ux>A3NXsBXppEDs8FKUHJkBVVonn_4DXI^wPSOL?l529 zl5LSR5=ui!jzcoPEDVN;>_U#b>tAkr0ih0)rY;zparWodb6;D3`kl>d{A8i}1WjSw zp;dC`16J&~cn_u71~wlhDP3Z}OL($-DP_!*g&dvPSTIRJkGpmdS!ReeE~U?Gj|3{% z0B{+5wDmFgXqlDG4Yb21m-R-{_s`>kc?{5Rn zp5slZ)dLVvX-3gNP!+1SBYeHC-(NEt4K5d%juaA{Bg5_d^T_cmDMYz?z?!;M zf#h8Mjqb1vhzd_upJSg8F3S-{oC=b=<0|7IVUFVIiu}GpM^2E}c@%OnUub{=hCvz2 zK8hg8Xfzp3-HeZjU6Zrh?h^?!e-v$UC< zXKwt)79YZS&ECx({(w~iHQ$p~<^so2N_;P?WBg6_A2YdLBMZ{j^XuB#6Lsn#Mb`Mbbu zenHOJ_8Kitvy#3>+ zk@Lcr0w=npUY&n1`@cvWDFjNRt5eq=Y3hEAGR1%)DmvozpaCFLH3XaUd)I2QR@kE^J$5911tWr$p4pp(IO{}#rN0zbG58J zL~qJ;|7B)CHKa!X>W8Jzf5A3|Z&PFb?N=o#nzcny&9~7wa+v0bL`a_|=#YG!D7%&T zCOQAddyq`Lu15?jl)RrIW_DT%*J=KvrjhO<*!(%Rfg3JcvjfQAD8pRaxHL>LD+bDD z8Vpk|_@ghd57aL8Pow~Sz!m?*7i#IBa51Ggh1>t7n6V-m_1*Z8qI7PgAtDm1K|p{2 zmPt3Zo?^iA=5NcNzwZXai@(fC;Yz-P@52J%ymi`xX&`QRoUJ|V#{Iu{tq$1kH@N)4 zc3o{Xw`Zy@;F_q+|Nce>V=^m+w}?Vy%1$)rzn?GOgC?lfwQGS0w3TbDv9H7O z$K~ap#nX#OHX?!ZUi5SDS-1Yt`~^2!jsJRTaN}1o~+U z_5$j)zL}@$y?CZZsQ-6VO%?!neQ_W>%1*#M$xq0moC%iH}x2OMoh;QeR z_oKd(`FLc~D^OX}&9({$?~+pQBR&FLtbuf}g*58$1_m9BN@Ai~Q+&#hgNm;U#L8&O zVC2viC_U**_?^L|p&3Jy9`1IPZx^x((H~sZ{SL(sT}M9ruK#!wkaVBkn=gPkS37Zi ze{XB4lbBXCaS0Ixj8vcQd~~TcUhwXC8BAz5Ob6|X$~UsTJ*XEuGpyV=aIp;kd@#Ex z;MZ36B~V)hJf~p(<=X|&*@!)ib>jFw$gG}q;0>O&Fb^KwD@v_Dcn_x)S(0FI{`myu z!64DM_KM;cS+ga41eX&pYnwb4^Z4ZgoQJx7uq(G6e5T?720WtdKUDxm{un5ZNly5* zZYTJkGho0CB4F|wiUb|dGinKM*A$R(yG2GsbcHOo!l3n9U=)AB4}g?A0{kXS?o*u# zWUU2L&-`j`2PJbO#CyZ$A4~6dm z34QGk+M9r@d_As&0qZN87d(N3;gFJ zJ;>+;^L2(VQX~@7OJ=x$BDx-C1|94`>t?XbmQz0B+(`eAxAtTA6hKeI@?14-{hsW! z{OBQgncgXP_~Jbd7QUyyb;QrEQ1Mxp`vL_$WdhWudijzE4~nf-!FXlzz1YRJr-E|Q zsDD4$lqM)puZ5~=DA>rGWlH$CYxCD#S5=Iq`%nWCt9yt^peQWi-bA-#XP>Cw;V|Ox zJTj?n4U%;?a-C9kvH;@=fBMKc=$w3OIfsr(Gkpj zsd1yZ(crtg<*+2$?R?T)+(E|({Q=!3g0(lYs5+h4$^pr<147EJ(qK`SZ;=r6u6B;-0W7s`*qdyr8-3^TwF(!@wx+7!f>N zkp$VDwr$Fx(*et17E&PWpQu-8Y(SIZbktR)Y?;8|L4%n7RZI z*L(8J{q22e#94)!ptX&;W)1WYF2dcEcWcYXud|At5Awtyww(0zQvL@TK4b{#+i;e7 z-E!loRoqV$6FYz7#-H2EfF>QS^>93jvrQCon9v`;!dKphi~`ti?y_XR(Br{FJr_zu z!+GY@`CWo?hpy_&@2W<*cR*V!U;@LbGr|4RyMbqSXVT^&J55mC8c6m_t8E|h_6&{c z-gY%InS)1Y!R!Ptk67jnj+ziOgH47!rM4ai>ogc zqN?E!&}C$4vI|gW0(gsF+vLoSf9gzN;R7Z5>J;R0OR1n{WbILeQFFp)Kij0MZT0~E?8^Oi ze77GeoenQ`I$*1@{SKlVe}1!%hCiDV6!~{*V1zdCBsB)?`bjw2~TE zm~W-q(kD`IB_4hOS^-XSf>W|wk}*Sh$}YVI^I$SrYgl6O-V}_OVtL`E_RE8%#^=>& zYm(}wQ)F_8f16gQouCw989ekIe3&kJ)HRJhskYO2e7F*ndUJ=bqWH&LPnt{iq6?Fw zk5OBZiww$U!@n&xB$1`hIKL<@J(TQd4~DpfN&iFxhnSY)XGPD-QH1k;8EF}zC1*vG zXRQd`zV3~ye?8~RWCYdpa~AI-?kY0+&a^xbE1A0_&i`vXs^61x%GKskL0msikhKfl z{JBvwq$A4p`^QH+;kQi$11OTtbfJ}_)E{CSr_Zq#!e0(G6}8E*bapa~n}2!zePFgo5&Br`+?5n&%{l+gfo=DN~+Y~QA!RgzatvmjMm<%JhR^r@m|I;hbRhEppEUXfw z0Q|c1XV(m~38wo-6 zqWsJF91>8n716iYwZXn>hy7_m;RkEam7rt$h$Qha8eff%^Yetg=%${j?SBV#<=7L? zYe-&cx^v>CFWea^tbbI=*C(n#X{~JrMib8q0lAeNMC*M4#Wab8&$h4F^JveYah;lf z;w_wr^dM8*C6#1LWmygPGV#eNjycFPYYz7J=taz(M2drY z!TCwD)^r|X>)gAZ`yHGBp&tCiy!{6#%L704BMC1 z%zf&Bz8$+G=%W%|wBI+<3fS^k9>1~krl{d{tcv)7?#5!2??O?5nJr@Q78=;nZOoVgW}7FACIxku7)w zQqwaQvkcRjTf)D!U z$0Xxx@Wr2EY*oAdTJT5)5~Rd5Z7@VQ(LN)V))!(T{Im*WA411q?I+gf5UQD{6rXAH z9EcYJhtRk%`d(y;J!1$wRhJBmk^+H$~isbQzKm>`9>fJ;J=P zu1qQf6Tv%JT8q6PC)EY#alVTI-=SewqoV4^rvA?vNuwTNakf*vv@{g#3`?-5hfLY9 z{P;%3<<%%&DxgfGzm52$){DEh0_(tsGMeXY$LO!8X$5*klR~2eMzU9v<`WtxhKSEnF_oFv zTueW^>pz)VP@Ym#*>eidnx?i-(d~ri{lO)gmM48-_|?!TY)y4mQdHb-3`AlUgJ8qf zNcY=iRNB&eW`aMAmRr^laBM*__1FBigBcqsp_wJx(jLh!E>W1MU3itQSdTMOtkXuX zL*ruq6k#1M{(O%(NxpifXwszG6hsZ>pujPmrF2oZJ6fp`^B7#*40`YIKmsOO+^ntK zsC1zoVvDjwaA?qP{j5f7TvHO?r)JPqtl4+hAYjfyTMCFXiXcQ?f7$4s&o8(tg6GR# z1kGxilU~PRuhizkrI|>%g=$llXJaBF*4I9%pe8Wf-}^2J&FLthbI^SNaZ>q#nF$nlB zztHVoScdcs>ohNWF`*0XFL>b8tDq9S)p-S8U6n-E5^{B7-v>+CnTna2EJBu5O zwoh#T$u*k7Yt>b6-6*GBREWPJcr@ojIg+UM7;=+bV3SIDrahSFg!E1nH%p+tNx~2c zxCTO6!-_xY30frw6v`WFk)2Vs9RXAqOPrU-E2LCL>9Dy1WqsJnwPneS0mQdiyUbQp zuehE(o`)}53odVh;2f)lSuBe{SIL$)i38z_HOQzvBLmSE!$YY7I_1`fUlb$3nzA^D5RpQ9T)hjcMXEu0iQ7k$Ghqk+=Sdj_)mA z5+ilUs^TUFrL85_E=Cbp`~XN_u0JoxP?$RRdKp zA>s!AUfFH(aSCiQUoorsix0*sve5MHsN<%q@?WR*ijbWQlM#saiS2x^#x+|%k2hQB zYyt&LW8GywG&AM#uf^!Q+nxd1OP?!OE|AIar=zP}n@t-Ak<6We6D7W+IJQ&65khZ; z8>6HV)BP$}6b@M#9Jn?%(dX&GO7oJ-^4{tb5=9ou7 z(IJdxGSDspz2B7F0>6MgL|1M`X&r0z(_PTj=K2JAyz>0VLj4kp&+qJS@?ZFK-_u^) zRAg37)fkES3QnI?(Up;`vvdVd!=t=f*i*T=3?NNDzwZkiX_3&`Um(HTK8^oD8zndW zi4?iv)uR&+=&d9juiV>$YlPb!he2@*@o36wv&b3U`IEaHkc`&*c*v;VNu1kinOe-@ zN4_@f0xm&UoAvH?2UUpz8$2ajR1CdT)>uMt=>e;cYT75bIWu?yMLz?y6@Eo#|n#%kWf%MVn0l}VY_x{sA z--roVNiNuV{*{04Y>!HF%%Q4;`W~H zCKiK67OfZPKk-&`jiG#%f}ga!dd(97l`pr)uZiz)n!GHWe28ZhAcmSiaTZYnTf6FN z=Ys6GEwf^XA`iK4)+DmUEdR0{FJH8;bklxz&216%BPQoLH$21~l3@8NUBCrHF*Wv~ z$X4?r6G)rIuTO)+fhU#+)9)xu5COd13?8I@tbE)Iwibri4E1cu`i}*_j1D2z$(;{^ z?J;>ZFQ=zer307bz^E2%=im!;%}xj-oS$yJsE?O zdQi*yg7Tk8`8P=N6C9@+{Ek1ni}R0Oq{^m-+e)C01U~7c7+93=Tx|K-{;cuyI3eFO zCRnB8)A4F^eqJekTmUP|7;W}?NjbW-&ZKoKQBwlGxfScQvud7Qvba@nv-T4OIr&^S zn41;B>;_5x0jObB^UW_^YlIPfQNM%$X9yo`6os!`J%y7Y<*B8SOmF3wG5z=%ft+X% zjgZ3**omAkuthxBiUN+08sOzSS}Dh*;-9^+Km)jc-zcqO3JjYu$Wz~cz7|U@&@}>u ztSRVWb1U9iGrDhzLqSU^aoYh4#)UtZV4#nhThgBe?|ca|rbx&*==|2+Qyky#t7_4P z(}#<{6a+ID_Sfe>&=l|}m~H=t^`GDfp3DO)K)~Ep9UibDJGn76U*y^P?CxlB^KDL@ z1~5?D2Z-gX#{q2jk=IuSpG9&32+{zoUAd6~6=W@cRr&XYLbAVELX9n?kYvz7^?ax+ z^4(o;0Pv*dhXn{m8eo9PJ^-3?Ms=PgZ$xK|7a*n#Jii2R!fHJfATkfTKFGq?`GVeO zjaI^&f1F>Q3pw>L;vm?6GvgQEAO1eR?aT1G5J~z&f}0@Z_(4S+d1DB&t93vS*mT`m zDvF(F&KJl#0OYWAQS1ChBxKME={5_Oka)0mQKQat?JlyBCUaE37tearbKCdC-v^A4 zhJ?%yYJ#nL@IPp{AaW12JP&Dj1611kplUof$8AlIZ8>VV>ru z+sdSb_mGj6CpoJ|(?b!o;Q0L7ixpr-qY_Vi{u^ZZb$uZ=*MDAQ zu{loF;&vo+A0Gj;Ib<%+{5$trrFiVX;m`4k?%UX(y9zNE7Wrb8a_dc}sjmKc6iNiR zz|NKYr7UCMpGfv~Q1lLvn9}p2efbBpMu7xA4~^{lH}BR8CL}H zpaGZ@o+Q!p2*70VCj$xEgnWlOb>t}$un2i>3;b28#GODPzDZNyh?aKZ$}9Ar)q5RT zW@zOwdaD+F6^*n0PhTQ|e*ulyKwMlKmadIoJ^k?@%_omLEW~Y)QoczA)uWwXd&_&~ z8Tkkp)u38JrICpL8UJbyX7Y(Ym3EBElV9)D_QM4N+Rk&HnQ+qja~B!Se1|AD@^b1B z{KF>k!_s@wOV{kx>Mm*Y!Ihd^;s&d{WGJtWyXt3YQHPAU(fd3^1yP)kPfjGpWR_RzB#&Fo3MJtL zC&+e?`VLA8jv|U*>ZD1qT_L*(^5G&41GMzppSxb~S!34=NB;XWofUXnjVtQvUVsVE z)qn50#;RQU^9CNFkfMHq0t^Y?O=?A)yIe>$a{C3JRo6N4V>;{`ya4gkpzt=2Hk7Ui zsg0oZtYrgS@)r+?2>D1g+#OPI^f6@bD1CjT$W%SXBUjq3U=zx>?7lREYTaTS%a0@8mBOy)a8i?lAZ|_45B%zJE*L*9kOOiXDV1T2BZGB z@cmKqjZ-LAug}-|Qh8>>5r@2(?y4J#5Um!;q=POFMeeU0_vJMXgKvJAbQKAh!@ooE zKi+np>rD9G1OwD2cVGtbn~TzhUWDg4Jnum=mWh;0rNc5lqDX~{0Flf-hpAm33vc>7 zL+=`=BCat9iZ-TdiM8W1E$=&LKf>sN*l7)B-l+jZ2XzEJ7rPQ1A3$5KRE4KX1so08 ze5DGQ>q;7_1LLCmnBYqLF)h*&7lPhT6C5&BL=_Se#`A^FNcdw3LIAJduuZ;yKzJSO zaXdo458CL!vQW-EG5!Ivk}qaiupjjVa;E^NcL~a@A|q%ikmu2h++#{d4;|cwh~4Kf zTKpu#%CH!q`^R7lzdMVR((So2m2(`?>o5^x)3?edvB2#YB*7Zxix*76pb9_>kMl_G zmxPBu7G4AVvqK-l@S4)G3oeWMa0i5N1;rU)s}X_<9vkVP)XAc+#U^LB>* zn~Ajk+j5e%pqDksO2$y&rlN%fx(GsH72b>y^a7XczTU?IZ>S7)B(GddYrxRex-AKw z-XOw89f1+!$1jPI-NKGHX!#e<6RUDLZN}~kJDe7DoHXt#y`-=dvl!uL3~+NbEg#W= zR_=qg!`ny!KKZ)j4Ly=ZDCaoMwA6~f(o7zS%=419)5T&IQ5-VPU~vAMn*wDa$#Oko zv;p#I!h+pQ5f|n!h+i)5wu_BMLHd!|T=5o>oD_YL}Bi zcLg^7DykWBgKkUOJVhA7y9bppT=TO8(!gOi{{G4tNp#NQZ1eod4dyyTlm)a%lwPA? zn*`S$p~28IRO{X=ll2edA8Ldd{3&`3t*P@i{;qnl#x++Sdf^T%b|JO%#eH}$7c(sh zURbKKQF1+}fZclO17d@jRgKtm^VCak*wb^VpRVqd?l}9x%Z3B)c)T(an5xJu7zwBe z1S4AAc0pB9;V}uVn8M~CWzDyc?gy(7$Q}hHyf-O>)Si~nvH9EM14DKvGKnIen4j(E zDjko795JV_ZarXl;$57MKM#~?7-XsT?+Q&Sx2VH@` zYYgA0v;B7^pAsrZ)x-AINJ4h^OoT8*j|xp4R}K@mt_GsO+MruLQreO@}|qI=0-J9(#wpA-o-`B_71&< zmR5Ed`)- z&Glz2#fJP2GToYjPtm;(V(`KJ)N!=@WT{m*U0Ve?ZWBzG=fNQzI)DUL3`++%`ukyN3+C-3ULl zW2Jnl_V;E);DMW3-MRVod?D#$`+cZ$?#wZ2;UP8OqZ_0F#O z96*?3V<<~>XZibC75fV$&-2@p2s-M(=ON#AE4-fmF1#8q)Snc%ikT#bCCH_?~%$j_& zeJ@!N=b%ojO(Yb7Tc46gS2O8i>~-$nJgPS zi6Y9b#IUG62G1wHUUrAG2T9J)*LJ8!EOkW-TYpO0X3qWFOjV9=0$ZL4A1#f^8aF$1 zM$ha-wqpF+O=A@Ei~d`VL!_!>X-CkQYV7&tFmYk5JCVcS9%0MbmIA3OLgNx4#&6CB z3%>Of4{j|u7rS~TMa$+|!99=@O|u=u8nz4nP}KNFDbsB`t0)?rG8Ym6$-Y`ajf146 zn4PHvZanq>}3XW44H|`9~hi|?50Z3Z3*_-T`H-n znBfyoDgg+Y()tC^iHD_D0@O%;sad1#P!^bq2YpI)!)6|Vj9<9dgt`AW8O!xs-%gz_ z5EJ6}JdwjO9uQ*M0}H!TH@!+GDwfI^K47usEZFeu%*cH9orgClAGX+U>BO+Q-&)2X~ zHH%Xsk^${DTgvSdbC54NqKIQo?wUOyv}+|o`#TKCzQZ>scfohys9J2wZ|O}EG`}B8 zMI`7@fbn#8d#}Kuiam(t(x=|;N|ecs3Z&P5Y5FUSWM?sfa_ zMYA90DD|G*)qk2f)AG2+BNCTc%SP?}?WP(I<;wk%8TYHQPy`j?4a7S1L|FH%(S!9W zIwGd@1xyyECQMeICN-F0)XbkmujouqxHKLjR+Q*L*LbW*KH9zb)1329Bi++dTB)rS z_o4_CTkZW3v!@e0hvE`%L{=1iMp1>&Vb>G?>;{!Tcx745c$aAC$8CcE|9& zPH>I=z1CJ#0k@%Vh$+g3zXav|2P>+=#u@rONn<(S3g)yO4X7oG?%s3BmCeqe5SM9U z!VemsGVWkG1O|OUQ|f>1$Q&%#`;Vx0C*Yr6B!q z;tN7L!#sVbyOQaz_s}^g%yQzXqy98No39yVopQnn?GG(r3+53lvcVmzd+5ib`4%BQ zv`uDxd}w4&7t~p*-1e4ynManaMfC32XPF#Xvq;;6>qb9PyB<+|7J+BnyvIB>_1Mhf z{;OcA&yH`@>U>uf;;hvm;A@fAn)oyQ!IO#{d$ck7on^I~WnHI?#856Md;YHBndi~9 zdK1lKA8bcGJ4CML@wVNTQe3z%M6;!D$N#kv(&BoXn6bF-8f>%s`#6>l3a8%RYE%`Gt=K z@lh(~ahA4S`KP3T=P{ji!n!(@|7la{xhJHFL{j!n%kEX0nwo9=LfVNw$^;>VlSsJ2dio8@-m=ldaQ-(NL$@q(xn!z{ihQJpq4l;*n(0=?(5Xazvn-V z?&2BX@$$4{*yJ9!sw2ZZi)O1@Y!SMG!-nX*sQbvPyxyg7?^YSV+oGBJy)uIg%qW^7?ck!nYP5J6r9iUpid1WQUQhmPd_i+oqjTT$u&Ey2M$@u3SjmAAp!Se~Q ze^f56*n~sZdonO~k}HbT{5P9b&$r53ckeOz0*$?+^7li0GOWR)Uqw>>mIt3YUNn%0N(dg7&?Q%&pR{(`=%_K! zr0dHNNjU3qf3sQC=&j?yr`-<;*Ei*{*!AqDfRna6J8ykm-q9ZAwLg~<|1vG|!24*= z@(aiD44lgETM{>C12A0d2fua>2RJA7SHHgV*ek7DinD%T)^2w?-S?H9mv{4)IkXf# zG>MD2JQrqa8;{IR=BC0Qcdw-K>INWx8h`$!)DiKOOJQ4$J;%()*~4YWTpLo|$MlQ& zm+iVemIBf$zF%Ot((lF~csN#c@@UV+pES+?xD3@!{7R3^;`jZ{qK)R3usj6`riztFgR^|MUC3oTU@T z6uR~&0!DBOt&E5C8~^_yj!O@X&$`kUcWZR;cTjIHo%nwK_>wXE4t+45RUCblbJ%-F%be-zwmg%D#^4=U~!%ZjPKV|vra)q*H!T$%tkKii+ diff --git a/docs/_static/ESP32-S3-DevKitC-1_v2-annotated-photo.png b/docs/_static/ESP32-S3-DevKitC-1_v2-annotated-photo.png deleted file mode 100644 index ce2b1ff61538d37d90332dcec6c6f4fcff9e18e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 375317 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

    *Efz0c`;S;RsPjf0{;j!R$O zPF)^bi?Q3!n52I~C87e_*1f0L=odpI({wN-@L<%+w^^qhdd^UvcU~d(NDlV0KT>`+ zJFbkclU;5#E^4agmH5!hjuR4dY^VQ7zy+u01?>9uijv<(N&ane8E z<;ZS3{9oqF03D`k{NSY|`;~hVKoHhGu1Y+aJm1W6TCOcq7T4WAztmm1<2DPw$S?La zsK&GvQzjP$iFuwqFa?zTFtw=Ex~NEC-Ep91eoR7MW0_Tjwdn(<&1fuLrYP!CWDj!; z(>PcKHyAGEotIJUMA4Es<^}RE4_Z^+R58?*n(@tY&57sh>BUWyFK!+w=GcMw-CSTv z`ObOP)1C!AfR6ym>d54Ddvd4H9NxmNu$8%l=$I2p?({e3tRCi4!)Y)1S!U`U>XAvd zrKBDFC%PXwD8YOFeBk6HSucfV@Y#w^{Jkuo_{^H?Vv?mp3y4Dvh}uG1JZ6-{#0Azd z^Tj^M)#k6UzpIc}sBYfgezkl~?99?FewUF!A(qG`&GE^c zyCOZrFqv)BT#_YOq#yCg^NNZsnaY={}*Q9OZi9v5hb`_-C)*6nIr7H&{&1&Zx!)4Yn<&Z7Z$Ov+gEH;2``GE09UfVp+ zN^IdnBm@a*wtZ*AGn3P?AwJLO`X2B42^b~49KKt8gs z#lrB|t#(|?KozEu%Wu43A$VW@iLBb}_ zq+9qhO*pINJ#p95nytOj=;C*(slC-v!&Zc1g@MJz0(;u3&-MO^*+x z!M%9dZnHCDRSGjpTb6ImY{Bwx5DcBEbtS3N+U)tb8snz}`|VC zy&;LwPpx^Bjar7@%e6dj`0`ZqF5KfqU>@R!Fi)vn^Gak&Kt0Osk#^604pYJb;LS3} z1fjJSOgg6rs67Y`S)}teJhBY+INbnxIBo`KsvY@vl_}=MWzwa&r2D@;o#C$3W6*I< zmp2=r?C-vi{yx(^H_VYjVe+F!DyK%r8s>LjQ=dG%i%6YbJTKjT+gfWbx8-#sw_hmE z*o2Y02MI4drQYXHQH*Z+UUF2$x>c>`_X>iikTv5IF@RBBjUIbT6$;zotUfk<#zWzE z*Y!gJajA}*t(=gV;$s*TJ)UKIOw_bECc?FIK`>InVFH`brwSfady0HaghZEvI}yoZ z+HA7bGiFa-{$%T4l)v3z@d7;b1=g@1o0PN*3cAlxxV&~UE@o#bpK;7*hV>nXzeAT>*t!W&n9PF5zF$rF%=Jp1Wj+2t(N=GO>; zs#HL!I}tin-mU95fA}DF9)Z@t_W=hO_Y>uzi}%H}+|P?WdX_Ooagvo&d^3N?>B!}~ zyfN9LMm@GVj@Owd%6QQMNG}|Fvi8)R~PTspPaJxbVmM^$WSco0pDC@~m67xeUzUZUu*YMOd?8E!< z=}8Abv2&7a+v|O$0I;E7xS_kb9%H2x1>fzkv0zL}N;QZ;!?61}ckd>#c_RAnA(`L9 zgr2%K&D>A6n)aW^BgH$#oOT{l#dt;ptTC3fxQC$5n&y1=AWP{@k98(8POCX5!Pf(i zH0;Zsmcr_EF0-h8vcQ8a`})6;H_?U3FWDh!d+3q>7WRvexBXv3zuDFOZQS!8nw+Ry zNI=(t3YopabMLs`o~2@6oWfx3Wa>7NKHh>tT?gr1o4EALUq~?d7@&wV7aUgOH;qsn zi#if`fHuT1#{;UP%b+E0041bVM@7e1ucUBNr)jo4UaVDhx#Wv!KMwrX=qpJkh6Z&; zdOVHZX)5Fcw$x?cQoF9pC8<`d-~XBhUZ8uh^0Uyh*t!}KUfx%IR@(603d0N3){K7s zMTADG?Q7t2(Msq%KE1}}f1z}|VW^T@?|!xxj&drYudb5nh(xzZ+69S6kz{r5$gsT_ z^9@YdCq$&xQ>iYJr zzCvaNw`S!)#?}=&8afDz&5_Ml+B4K;q8Z&bAM;}Mxfz%Qa+L*zOLBY3wW$1<{WQe% z*XXM~M>vBoB)m=AhIOWJJ(vH|#=t~DCFGEGg^4FcjfmX`@@pw}KMKkS>9+|LVMf7F zy#a(n*Z_8WfpCV@ND`%o{DoPxOqFlPDec;$Vybd2@jROb`_xU?q_|!h5*FH$u{u7B zT^g}AcWCorWrJ*rWFXl6$>w z^Ik#{kk3=NV`vX>8tZRayX`l6e|&$}iIU!VcKlGf`j5ptr!U$24O8aQk~Y`q6S|n| z7tx(E5poFuVK|!tUorF#pD6Z_3Pce<31dJ@k5RvnH*teSBE7_T(1ZJxLZPJq${n$` zFmiOtTy)e>@+&L~Xeke|{j}}X#DrG3q2^rW!+hWY`g_YTht*tu27P9xpzl4~nvMqH z4PgL^6Zq_Mv&m8kMnmQ%6A~W>nP8|>4)xw-c>m{La0Y|^ zP)ALgvacx}{2vU*fHM_+_n)fk8D zsBW>4GU3+~Aq={@N$|^1-J|q&5{Y32pWo(6U*LPk@+BIk!d27Ho<2Zz3%u|#erjP= zUGI}ShSC*>?9%Ds#QVSQH@({TI_lihP^^vfQ_h>c(}=I4?iDWcl6d~bm&>EyybRn2 zRhlAqjt3kVd{_qOFTV;3d%ea#k|eWsdO&&NU%_2ZmJ#u6ZvW=2pE~yA_(_oiXj7QV zTj5ILdXX_^cIWtSp5Jx%c-eWx^1{il_Wv6gWN1}$DHMn=EQq0zw4vzGk_5DLO#6x1 zO%L(Ep|&gX|9z;<*;D*abuj<`s_QQpu~8%SfeztdXyeeT$gk=`L}Xl_R|fd*iqT=k z&=Ez+VS~ic5s~uH=|lhTwwFl?bWEXlmp>7t`2Y7H^al#!|GE3W#~#we$*KI_4$093 zSz&|z--@XG{+l}g*APpDh|I&wq$sJ+&;M;2dP(LX)Ct<&|K7i2gc|hc>MTo6Ez+&CUG?eV=?)Pr#APj5uTee+3a2!Y9Q^z5fjvN0b>&+8@1;E#EXrDXCNh zVSZ5aB2NSOY%%!q{pDDAyQ(Py-0OY@Ajfx@ zZQtA@uiI&E;jHxZ^uS_o1mVTbW}%+Txq>0WoFx4+#T=MG#}~4vxBouvXRm+;F5TT~ zX0!nVC;wrP>WZA)|2=|NjNTWZ-+*s*(Np=*d$j5dW84()&|+U9LhpUKHNNk4{!0Uw znetFlmM8qK%B%M>MEJpfI+K&b{jGT>LCDYHt90DKuepAtf+uFL{+HdAu&wvw|LN0P z$U|U_@^EcY_~gVyp^1r!9I7yyzL=D72s}z=2b3&D)9qpP0jcEl_nyoT)2(jr*Ddek z93!}RZdAjfZ73>>*zI}*FAz#>KiCg=Ju~VPG#&jtfJus}iW&KIo?)5WaR>#MJwky< zdb-fb{WC7z-O$ibRZdQ>72n+*o*243Z($O8Qe(ml};GfkbH zo$cIrT_3tbRsx`1Sf(i~_9$cf*6@$R|LKlmxo(-my}LP73Hn#>8Fdo`?cl*zC}MkwGPaGpfi4V&1WdBkNffEcJ{rwyZa?@9{dir8<1nI?QI>} zrO-af%+G(M;DOyOIhK}`Oo21@e0W1474RBGqRnPiZjQ z$f13AWXO4UY>?k=vriaSZ18wHFh1_|3*>U!C~f8Kbc*8PS9ElAWMN?;4_nrXp)V*? z&!OWm18P2R&UYXti1YLFB@2e07aPEbONAdR@^gYv8lWc{F^^L!eoQqp66N%6e-MoO zT{jfyc7JreKSstv17474F<>dJZn*5eoskB2L0?i8+R6*R=S4TWpkNPI-QA7=B_$>O zoo5=efu_v*E$^l)9GSV(dn5Lgb;_H zD9n=d2CfCtk@<|0d7rd}mJ6+HV+uX_Q|Zqg7pw%r|JR$sreuM4^uu>0!02&Ug47K` z69G)V#_-{ngF(J*q*Dq40)iG)Qi1ffa+M;32;sZO6|mS%KUh&tB>kNyTQbuCAI`54wb%xK3Mx)>=T|FFL|cKX88qXa&}2Hx$Nf zIj*NX9(jcUCLO{?JM1l)Q5mw83}rgL>W5`zaxmRzXRs8R@? z-PPQC&z#%#{yM3W_V*^qDVZE~i*n$rycA%hqAd3*Hni*e+m66`vvm_iyA~$jz;o%3 z43}!y%wD|~8;!E+>gwhl;wmH0V#~8!sK0zRMylKKQiX?woIdlopDr1@AYW|tbWzl8 zc4|8DF1UnTVWN&J5OkM5z4g4@O!g(PCO1+LBgd6I{&O^p34xFx;l`UsTO5d-8{lvu(ZC{}3DzLUlq)NTjju|FIKS zE>9t_a7xN^r_V#j+Ww>keSyIL{Djf{+bd+skeQ`<|2-EjLX!~c=(+x9X!r(-S3Nrh z_j9nk4L}9CquxuYBLGj6VgLC77YOtBTXfhrZdiH-N-=UI(VetU|5^W%b9Jj+sB;rU zRM!lD?~xbVjv&9f{GUsnz^JcN;snYO2!-)Z!1pIBC=PP$D)SXmi|qeSh8Pq*QRMJg z?jcR!^-ga^$8d9XkQ}(&BtHANBDRx(kBQWEXvpdJA>sb^Af0ywJl%*QKJSN}|xc z$DHv)$h*mFm8Z_jD&+tPx)M3w+5pfl1a{l=3}ByOgR2f(b_M~hYbk*-fIuK!#5NY= z-^Js~&sy**tU2GAnQLWORh-Si_PJ1AAtH_n{9*(+XCVpPVMD6UQ(nznf^*h&b>$=i z5!Q78^Xj`VYdB8j@VC9c!}XoczA3#tUkM`hYMtIgWgD-4vM$PTDheMYQ& zn6+dldFg(MDhJ~V(N*15$-qfK>jcES5 zt0RenCX zr~yYZ5^X?!q493->1eSP(zeErm!=`EyI)19L4k4)FLQS4f#@%apAOe->-;&>h3L#Q zF*0F;{;03WUX@FUyHi)%XkO=_EBw#|!$HIIGkBEn1`NZ`1=k_LwBOW++e5&pKD{>b z-@{J{sL+$eD!(f)Yr!5@`D)hc1HGZ>)#(sdz;pi2yt|ETQc{wdI4qSYZnsvS#zwgb z?{ck`0wz7wECaoDaFEl5lUHRejrQ;7*+JQfa6bB%ru~=lXFAL`m6g|i$rS_7O$OCJ z!3MN$I`unRpTyiH8b>um=)2#7jNk6BBgg{08erpv(9g{iVgSg<$orDdPZ;OaUctWT z#jeYNa0rRN79jLfDD(#O9stNYX2BZ-m+T)e4HmB zw46xa$NS=&<4t^2QFFcaqJ*tLHYDmKb-~Z%G;}EMP7ms1;Gv9?S`A?Vo$Mz)(~4eM zoVVpX=ZAD@@T;)#qZMgg_sxX+vNI$vCks2Dd&_H|e!k?hQb=kvY^0UqC#kU7(_jj( zC@t8$4k+RDFTL{LYQvBxeN)&zEosr0`C^m?pl;J({6;*yngtt*iS<=s z{oQ458#;D-;E}GRNjuco1eN+qbPvSA2BHN-2=5DnUf)~dPw}*R1}vRGfoP6#p=ZKw zvuOTrO+$})k&ndI{+V^KtpV~*|Jtn1uXql2A@BwcorWZscl-~DtP4uu**nNCs~UIM zkTCL$=n4W;Ao|OCh*8lom zs|(Ze&+k@Zx9=y~CfS+&EYaR?S<8>1Jy#Po9@``r?8rT0=sd)qD0W?WB*ZSo(V_Ns zx;m1qg)T+o-OydA!<#c;saqWHRZHx@#XCcrVDrCs8N`<)po26CO$RUZxuu||JdU4G zdwqOvZbkhLLNBj=fHe9wx{41T_mR-P$Acq6XWu_&&uKwzb|Lwdqvhj&e(ZDL+ei`$ zQeGfizj!>d=#FJbf1ln|L}zE7eN917;5GV#`RBa$0~3asThtHl9(Ce5_-~*ia2{(x zAcb9E0|G+NRWY8}`+9fWLaxRk9#uH?@UzPP|ExIzG6toCBTnC1Y_(n=JG8diY5Cj! z?(N_jbhb24&hT$dL?bh@^TmahU{0>)IVkns#HMIT>1t?~Tt`Sc*+V5umWu)({k83i zMMNM;^{QEYKU@6;Y*JIwB6Q3psl&3c`*b?O7FUl45F8o_k>+t{EO8F0HFY!`xHlo) zDR|O)uuxTms(K}1zuB3-f0Vvg7u(u$s?}ixaKK$QO=W%Sw$0aaNl9u~lJ|6R4fB-4 zngt+er{JxUw<(-@297|;f*T+CVVK?kN22Fh=F=d-q(bQ4> zseM{luX&DibyT79xPaC^*5jMTPslMpx4yhQY8e4n$IpV~J0!1! zejk*xkH$u$Hfb68^$$)Ea4-YuC*G7i#L(lZGQk4XiB!&7iB zpbEYc7ShsbSK7}*Ic>n)S7Y3Q<0dJFy1ibPuCq9zYS(AJUcAhoCUP8IcQ-LL?V+5m z1l&!%E<{50H978YkGLcnAG0Z$C@Ci>DU;4C%E(#|892_@FMBOsX&Y&GHB}95%Cfzx z4IZnSYKYrMMrn}cTHVJCegExR)_mhe^U`RL<_nA?sitpW5e^usq?cn7V9$JIXan)L ztxdNHIyg5#vqz@}i*%$rN)0S#1#i%Kw1swkN zKeq2{sukqZHrIhlf#Z_o*g*unV(bl#%t~;Ao1DboSzv_u*Yn=I$R0Gz4ol#0iPVNP znMfSlw%=*aOnP>ACCAvdr_1l9Xh%{L@tVdE@XY zagXxZXUY;6^1RM;nIOy>Zxs`-)Y3E~6l;rVjj%k|dbw&m|J&$e@P_LcS+#3fsQ@x# zd1bvS;O;G=Zf&@NsHU;~llCv7sj}ed^Yx;tP5&__P1Q`a(NH}zvvwRjv$e;x4V&E^ z4eDoo0!`xt6}D7tGV?tD>xvN?z=yn#M+GYcug|Lk<*+-)BXf5&q3r!#O51^xltVG? z+(DcNx)xHUJ@)|DRyzeDFS2xo^qdpV2gg!Uk>?-bSogG&M-d{H6*+(0O+1MR zRqgp}P~&}QatiQ8CC^eriuHS>xxQZbo0*7 z2%g|S@2&G927BTEEIvFmTaOxw(6*VDV$G46+~}RTF-|{3A1pL~OvS`=Kv+PoL4?;* z&bEX>0GBK)k{$iAnK#F1N7-HeRe%FkxzB3-^{{Whr`pi>$=C$ z0}*mo7q(B_Q0yErJ*_);@K+n2H8FBh&);8+*L!aHZeDbOnDrWc`oK0TYd5H7YflEx zOhOfL1_6qA>$&SwP#IVUC~dbXaf1DMh-pPfMfUq(Q7ScsHnO}t6F>L%Q?so_3>GCL z8{dY@?Poj4mfQ34y^d-HT*+CS=qrD{3PWwsPIDW5PlT~0ysfnVL1Ka0fzXThfPpQu8vb!w3+G z(xX1V%#r|xg)-YWYkQt-eE$Ur>$-?l3xW^!Q*#_O+cfh3 zt)>xZ^|Qjy6Q`V3KOx&LB`sE46B8VbjG5jPpY6e&DIVi=L+6`yN7^dR1i={LC>;FP zp}T-8C9F04-Q{y07i-q9zIi5xVMgoG;1RBW=>bA@(?nXUuaGSi(x_L->vx_> zo^f(C_5L&!1mDb%J7+Wi6>8rev1O+p#k_W$d z5)7(M6u8L^mmueV-jbknl1mUVMjUY(E#JHRwUb~bR_?5TZ-4b&t|1wFH!jq`y4@bw ztEI|t_k<_1gU94Imru_i`WHW4*IN>M&9ED^(J+}>t!oU@ZD}lxCDOK531V7TwXz=P zWaMW-GdZ!UN@bE*ugD*;3a6%}UTw`;UzQpUo6C&lZ8balAs-#ng0$_ouj{62QV0Sz zt(-1b*q?DzrsM}Th-w#N8uo1QTAER;#OExhzR4g9%AK2 z%5ReyS8+SGkdpB0YI>A{RyD1fQUe^2tU0UY#}oyKP)OxP2#+RE^y*iT<-uJ+TtL2A6RP6s<4O^)rM zu{)ChbE0>cj)Q0~4ld5R=v6pP2rk;ttJe}F6`#m@WXBPw>v?URtkAEyH5gL>P@-?YB!aJImWj&u?THi{K$*t{IVq&z49RlgCa@lh~1au zLX6nr8DqQG6;$*nkiUP^DX6TFd_!DUS!nqmq*1&kStq-#@^ST(7YDKy2*B;jsP z*sN5T+OAapQu)zH99d_a1>iE<5m`rZt*;ZJ!A`NP(f!^6{pO?xAr-XWT*Kk=-ZNY8 zbIk)yf2(gW?F*qO8W*MVoliuwu+V=02(tlJZ&Osr5_IKq1={e2l~9so@tSg7)MGLh zt53=a|MY)GtMBgC@7jlO1G{z9>_?X>SfgaV19G5g0`lt}CHPMgJJp8Pmf7CnwxQ4+ zXMGJ302q3`AEeP?Ug#_>u^awNL^4v3yQVGStCX&bT;+1L&g2b2;NC$+YVT!!$`PK9 ziQkt`q?2$f>bjqqg}={ZNyQC=FpX!0!R^yV?Q{2+z#*AkO()jP(fBv`bU;ISv_5vQ zHW8l}`9--^*Y(qx-Siq~t2fAI=vRIBxxT(vkwJSJ6^$N`E8k;i0^;Ro+lA^5_tOR7 zmKTUKT|a-I0YDh`OEx4(Ye3n=Ib%L|JCoCTLQsRtX9+*lzO_aNElIy=G<7C@1l%6~ zIi}iUozDaFnaSdAwJ5LwjM&qI3g`JFDwcg(0ezGzC)M9<+&{e;L zZM)*$7fbZoV87ioE$0#g>d`WEKjSPjZsZ(}mXTAG`r~QV2hF}N8s!SuXw#Ola4l=% zZWnAD{B65(j_4|0=QuY<$XSf@6Pl0X^w*gS-g7U`-y89t+oVjS=s(kvqf~7qnD1w6 zQ@SlSDBY7xT`Fo>LjIkHKTk@^zWOz}GV-70T8sYJS}XWZ50h7_<@*zXaTUV=$Yk>w8R<{5y?& zrf4RFLd4m4vFS^h?m?s=&BV_!IXaVW8@3~*Z$jKyJ_o4Pb8Jv)@Hqb?rCBG`3=`n_ zelK6Wq#yHmjy0KmRl>9yrW5k#4EW*#>oNu?h;z{Kh+~yQ=!1lx9ymsL4A>(vJz+gTE~5c2U1& zH0)>;J%Jf3q!?@aRC7s;GY}!0h6#fC zBv|p_4^IUj7yDf&%&Im7R$PW`^-%B^k2o2a2#zxJ2rRFM-3FaFLXAxr;Q20wSnTe# zjP^eD3nF}_6Nu!ZqlChWPg=jETM%EM!K#^b*JL&Q-3rP_vmm3Q37SL#)zw!IMz?d_ z^wT^$yq5M+oJDuU*k2}^YgQQxLRH(R@6T7QPptC7BymzBSs5aB#o2H}N?RRYQGG9g zcy@REj(U_|7`X+JA=(tqaNi;Zu#7KM7bK7m5gI|u(z&g(i-y!v>ImW4*5*@RyD2f5 zI))eW`%02Z$=#v`cXZQV4)OJ3@3+ex>=Bvbd7A=EL_6TjQ}uO?!`405)$x_SOK@E* zvbBi5VZudsggS=@0 z6Pw`!>2>@27h(}KH|C#GYm^+T26~fu16 z`KVN3N4?$u_K242@|NvhTQ&uhCop26kYgf$G~Eg_QVz4D^C{I!LN-C;V+_gU%{gGQ zwh?)TZ@JS0^wSlWx#4k<7GXmlk&W1H#tGZ^v#|EZY{!RpzI(Xv6p+XFkriLwBfWuG!E{OSye1T~) zg%uEKI10A&(~J*YDJ@)hY2TX$TxxE%d-Qmib8KklC*cH@VYbOhfqRXxvQPFC6BCoR z2WA%PBl*cQSsadH+XEpi2kB9aWIT6#mH&m2$O_})T&%6V;n>LW{}w~w%vG%3V7C}N zt}%Xu;VX26q6jaTq%fhw1gD6>stkuViYPNE|Lla7kUBfC?+9*Oy-Fc>NM9n~Q0hQ; z*qVW{(oH{~U+AH_5Lwk84U;in_HEA7lJqOI4{7%}pKh)+APD+U@iP9KI<_uRr1n#` z2CS7=QyVf#$i5t$txe&_*NF4k9!I`k5(3=ujX-}p;6sVEc-lCiVeaU zz0zV?0;RF)zjzy#kUCk_aT;O=rn$s^*PeE!xmd_xbwfhktkdGfN?wIB?0Hh}j&mHXFives=Nf`eFOK)poVO45iq=F8)xdb&$oiuFwY(#olh(eC(JH?vO*Q=* z%$aeu%GJ0eVfBdlLq8eWbq6B63saOVhf1KeR*TZ-wLVsx>ah4XAyzFXhU_z9T60O( zS-H_+tPx^UyRF(EdiDO5dRQ2KH7ye8<#^PH4i_(~#9_lZ8s8WpLa&{)S%_M&fzvEM zyv82n^dcqZ(wfqEtHHURqpYL&G;oaH9TRz}-V57VpgO_DKG}>5?G<3hwcp-YMf8F{ zw*{WdQ)IPeRuN}S@Rh_u*_x$15X5D!XeozXzq;i#en}=MHo%P>h-Tl|?yW22t@+rQ zW?QHKfRIZ)N&`hl7pquc2bVj?06rEY{bIj+FZvKkR?6k+Fa>(jvJ_i+w2k5rh zeMA+PVAV9g>VAII@_6YFfSpa+?YhCz0&aN6Am&Q}>qY&^b3c4tYjDo0*=`+LYqbxu zt>FZkC78V?uR_`-=G$U ze^6>suFQVSkKv)@%MeyYIue}om}Cqjf@y_@2DwmK>?y3bDfzPn$AS3YERC}VwKu$H zI?$uP3~!P)LQ^_o?7zKqQuIfxwhjg4pX(lx$c9GdIdfq<$wvee`o(53bLDyHlH{ur z7jGTAwlDN|$=D+9i} z+6Unj^KdwFzZ5erv-z8L5^vgV4Vu-p^1L!K_s+Ex;)kNS+BH+`*+(9;ww>Ep4D;Hv zVWov7rdXrqtpL9?gV5_}LExwhpBrzwscJ6)c_A{a$~ROSE(Rdfk2=H*%Ei1K6$6MW zP12DVB6f{ebj4naEVbogWYRe0rg1G1q;B3c#k!Kl8y{I_7Y$Fg*m~^XT z&S$z-RkUX!>9UD-OwY!+Y*MXOtC3civlBPU7Sdmn?boL?w;HW4bXQ$f?qVz4pW=IR zMsMcP?05u6h3#AUh2^Bzw=;&dwZujPEu~INu3Ky|naiyW$q*+Fh_O1I&l8zg(U#9G z^FTdo*)+}i^l4}H$nq*DeRuVw7db?$p`Fmbk=5;R0)G7@E7-e~Y^-Hgf-oD=CBhnX zJKbF~8LPj5*|xBr9qLa?c9Y4JV1s(pwr2e=ai)>Aezdi&S7jZ# zceRhkEVU8CdLV$a?Y;Lt#1)5N&=vsq2r&Zw7N-!S75@-{$H3f_Vk;&Y(DnnrwHBqY zid!ht$hVTe#mL1%e9v7&Wq+O7@tzCxPxlEQG={Fz%NgJynwJPsV7Zd(qa?`mPk1Ct zk^y~8|G$`O;9fn!EedCvT0jsd1Gpt7Ct<^XWUy6P9Kty;N?-<>yIeRDT9Ih-S`wjZ z1_@Y7nz3HtF#1xMbOctl)~xjG004#m0WI7uLdJ?D%cEF$&pld&rYyYn^l9c$BFV_d zvT>A?C4Q=l1RrH>c}jNRv2MwVz90^NoIb_|04B=c(s)6LxR~dqEHYBU`PO44Y;2Tp1iVXn^h5 zbAZ%uJOMnr1f?vJiQjbX#kPC(Dki`l1||Z1==rP_>nVjYjHsj(E8Tt2-W&Ig*=HX+ zWcIXdYvtodS(6scEU`wKRgl=Dd83N3Zf5!q3ZEZ3?*7} zGV-!V5L~UXRbM0Ks?Q~uw9g6& zP`<@Aya(Xgc4e@s_9tk<38K!xd4`@SOK z<@%Afug{e-93|WYSIVG|7~I80Sf!ENTMmBfnkX!8m)8J0;G!j+n6V=HP;i$8sx@m8 zq8&j*kE_&vVlrv&vbYs9(YIPfl@{)h=5Gmm<}C3V5ZnP;V+o!$8H-0C48bEUqm=o? z$TD*a2)F}RJxlNu?6lYJzH|+f=SirF-kH3f=I&kH!PuHtndr$C5G+F83uOAg1h6a@ z(PgPJ&KOUMg{I0$ux`_S$P-J^b1qI?DaAg|^a8#4 zzu21y*h$0h(Oq&M-~e&L*7adxj{H;c<;|D(v6B5eEv3_Gq`U5M6W$eSF&H5`eq;HZ zRg5UcCU=A8C`1fU00fTzN^uV{QW1&>&Y3??EtTNYt(uqSDuUyWD#p{8(pDqTu*$@( zzyHQgKKVEV3PJ$4iikBp_F5q;fnekspwht!+Q;F&#+6c~?=+_XBNt7RNP#;pT-QQ` zazD8Ct!z2o3r5naD{$k4!?+}1M8p9`14Bof6;lus&_)N~ATm^KM1;kW3AUHi@O+D> zCTJH~S+guII+nS+@5i4hrt5-3KRizsMHz3T3P{NpbM;-5FmdwKE(=CHSK7RW;hz>J zSjlS9NP5Z5q(5CCxIkm^V%A(3F%5twD2=8lVJXwfxGgcyu6mO7As>}mNG5`Wr zj$CgVP8nHFv>I9)qj_kb91g-M2{R#-CKQCLgag;{@BqH)d(oA&dI7~%JY0>eT=6F6 zBt=QMqk*Cb{8xd86lMnmhbF?`Ww;qNzbGuZ@-oqf@R4}}lX8T5ECNH&loBS3s8p^- z&56&XXef3R%^phGD`O6VSr~KoxFGYdfDR)FGR0wyJ$Cn9wsYf3OQ>DjGgLE3ZOBz;hr>br?H7Ng)DCj2p@O_wKsUaihb^wYIx? zeXDAqELW^26g$ysED1Vkt=m~N0_~Wg$47#{j^RJ{b)@6&b#HoldhPo4>+fZ*5jqKZ z^ytxN1jh_oS3h)=`{75OUwY}K@AvE1Z{7_z-0)&TLP9})etx3Hs($3SPFg;guE<5gO)C`RbhKu^dhJV3 z$L}p7664f-VZ9Jgr2;hE7O1S2W(P!IY!Udy#brd8%A|8xK*VCi8nYBlR02mgD}_}t zqjECg`<;)Rdn7sp&=McbCZCP<>>;SzoqeNAb$+M#rOk^l@Bxz1VokGoV+bVqZJDa^Z0_8 z7keErZMgCfqv1O7aDVzCWu%PzYb2_oUV_?fB^Ox22`xl$)1F2!?=YCFaMCqq(sd(U zCd(31yu@#G*I1b2t?os0XTS)GLxuTL1f*oRYYZ4wus0>#NHoc5!0}o*zzj8G=|_&) zS}yx5ecgo*KjrMLu9K2fCPCn1O6cewv2$TsK#+PUNDJpneM$+O@1eeT`f}}t??AQ+ zI#1mF``_76Qtj`({Z3m!+B9V2c%G7d{TDL}g* zyma@N;GsPORuLo)0AZg;6Y7Ap;q~g(CKg*}1<*ngDf0)Z{M}2|rN;!B>3Nhh)TmPr z1qi_eEj<6o!@wxoilEVJZ@tGA&+;(nL^KMp3Z+;<$1xRocFxHsy0W9BA;&GcoVZ2o zyASO3AvC5Kpzn*Ah;Res+uF0UMIz9A@0B4ZYmw_nB*g`fFQF<)`-NQn$Ar(3j=R@f zYS*rvj-vSgQ}!d-Aqfc!!riKyHrk$?dWJ&p2^HWtXX3Rp`XC>C-#b;?D@wIG#5 zKtWzM4+&(l1(-4jEuxTyE~?WVT&viFf6iDX5P}do3~fh(M9jerH6~uFmL5v?j8!`p z35ZH7pfFAuJQbzf2VpANK*GXZPi}4A=F*;|=Sc`klccWAD zi3FqwxXPL|YG7&9+r+awiJnJOK*eR#d zwIM6sj_FsM)-@yTk!M~;ILErnsRSV;<}5;wmLSu{@wwh>7b@U(o-GC;2MrquLS5t8 zP+aa90URYXOeD>U3%wQlU+N%-CK(#w{dz0a?kIb)JN_}km9 zs74~V19_JZY{GnM&xW%*fD$<$7s--~CVaf5)-DvEY zJWk;-Gz#54EjS{gjL(z}$9~gQB34;~Fx65Ca`sehaAYOxSy99z<#19KUnJ|1U{K1r zD5^26%F|6EpvEgK=8SW!gUg-jD@SU2U_N>_1Q-ZM`GoYJop;G)ws!df`|7K2?IV(Nq&W6$*~CV6 zXko=t66snHh9VUO4diF&08|euM4XZ@#8>sV%=h{b~j-nKRdMJuc%c(hw zjZ3n53l_SN^lU)Jy79Ny*ujkbmhXk&8$lXMC{V(rjMSkkz5gwqFD+^R->*Rd!j2!K^Ol(;izNcuj_;VEhku@Ot(KwC{AcjnNVMhf7_uM^0 zsKSr5uP1J^?}&paQ%LPgG`8F>(mW+pBI!F-jF6Ct?!ihJf_!O}6l}V$UT-xfOhbW4 zWp=e7TP}+tzC7B+NN|XNaoN)D!~UaP1W#(6W{98zO!xGxWV^WR#N-+9cbUO%PymXKos2_Dz>k( z|@eFCNxNL-Qiy2yLMZ>rtNIf`0riWatoOspm>u%4z`KINnUe1M% z){h`%4!7KNmo;tC&}yaC;xlLk_(sz?B4fjLd+GJJQOt;Ia((0WZBe))?Sr@9vETjv zHhb=I(#9o3xPH*U0agk<6w?o}>9lc{oL1AOFIZ-o6#cepDP;vUjxpThp>=DGSo%tE zs*C{}M027su91?9sl)7eBSHWe!a*?|=Lv$6aGv*Z#KENSqF}-X0(<8h7kd5E5IE|> zC!j>I`B1T^>xv7znJgBH)&YU&8VMQK_4wZ17HGUO9s&*ozaW4B5T}qi0%BE*l$#%$ z&9#`%V(N13Fnkn@SYt}_Dq`VBSD#i| zj-XO4g~o}J4~B8H)+i9#n>8XRvMlW4KPlG!JB?i~4LBOsk-{&=xLQ#*^u)#(Kq=_GhMBRfbu^K0Sa1 zOp1G0pylRQ*qnJ8RuYzOFOGTDk|0cXKgfFf8!>8sB*a;-h*->*F=bVHmKx91{#Nlp zAbwG09XqtPYp=P&zWm~In>u@mTT!?F?ivak=g|Z000Hel(uBKU*%v`lt{zqKAK1Iy zYR6~Wl<59?9yen|B?G`TU@biSuo8i;+oREAdag1B3h%!wX3_`#&E%3iiIIJ zW*KmooueVZ#H+6N>gF(jT_aaebO$APoWts!a)i~3>xqK_y57#0n5CcJd})b zyMe;fXj0R|LsVl`80*tFS;-5sTjG@$6N;L0f6kq9o;m{mwh zNc+-!1Utoyq=D-n@I>z0#&v6``tM>{6y?@QWz6{tSPND?+J5t<4J;)g-qw;WIep?p z$3d-Jy1IUQoYggVelwPOsTI(LpiU~TM#VGO1mS)(ag7#OIa@cZv7WW!tyfY@8%z3e zMYB$}H*2H4{L(u>l65lY__ze{7wZoi>D8{CwW>=&bY*RO`OAsKb*R#zK5X>Y-(&F+ zi#a$K+y^!i20&gug-0H{$KHMKBk&Vpg$u7{&16fAi?D``8`@RBzRe!|^OMk1nPt)? zBadX9lTSVsi+v~igc8BNihTe2!W&pO`6zvr2>D&!Pf)IO#ZR|xPxVHsQV7IzG-u(c zCxW1;IfVjm_h7(B98NGBrQ$0gBMLmw_u3S%HG+O+af(jW!6AmWSnNOH897-)ucHNl zqb__RK^AqK_3RjN0V!kBKE#+HO6eJHI*9G-8fh5*J;b6|k!v6N7Qp}lOOtUeR;~}*C$dPI*!#%2Wc7&7V!avPh zZUQlcZ0cp05=>RhRWT!#&mru1uIh0VM{-8Y*oqy=1sBZ1RF;*r*fQKml^}Wq6i|j+ zN^_Tsz=O#!GR1Dn2=Hn>MOXtd%&8bgC2MBVjF||ffdBeC7)-c?0M8iMzn`^5OPw}v zzH4gHQE?W7P|8R9lbi4O;m5khDd;6fC)jaAk3q2$6OaI}us+?p1dJ(ySZ)AUY<|QwF)Y=t54%AvG?xSoZY1RDafyJFLS5|DXMjzlzg<;CBDGWWjDvx$^d5Ijs8(-52Hz}TUR&^jq## z(n6mTl@O2Lq;yb$O|*#$x+!+$7tubtmr6FdCsYcI8N}CBED6ckU$@+h^~5U{~C5qrLaqiw-9j)X+;2^GdAU#HLaE6@j)N&AvxPsR?d? zd6&y$z$E9c-(!u_Vo{1>u|@{lq$yMEvP;gRGe&>A@|xe-DW{)i)5m_zb_(P92Y%gm z-=hKg6Rt4Hg6uro#u`L}ci;UN=!e~6Z)(=AYpDeH72{eof1b}x*>l2;^&8jI4=&p~ zn#+44iB#qateUR|lo-*WU|3nE0#snGH88YC_E<+Ga8L@mlqT&!C3L9vI{G_OaOYle z8F_BpOTzxi{Ync-VTrS@(Cg?y;HV29?RFq009k0G5jt`yd7THFsZW$OBNv;9#TkM$ zKfZIVjh71c#Q1ezfRKd7VkiM54OmN{9fbMB+l#6FD8?t;)9)3tR1h~B#$Sb&nTO^Q zflE&~EXJ=`j$Crmn*8yK|9C2L8Jb`#t6#4U&#tt_xVLuTMiGN4mo_i)fon@O3T610 zqr?!!&xDwY4+OZryGt8%m3t zQn~K9G6rE;1{2Aq3$|MrXq8Qf;Y7i-iYP4Y)1xyCvDEfuWY`AUt*AyRp5p-O6EliM zFs)d%#`0+Ol1(2qt+-LWde*&T8(^WVxpFH6)`gi>xQlAq;Epu(+?MN&HkC46#8{Ec zvz)#2#0}OcGE{Pe1duO9>t@aBBoXBS2d-gB-;YCRvVX4ab8i_IUpYrhOr1D^?$v>P zRh7K%7c6A)eDuz{KE9f`#$pwfzzp;dG3tODH=G`0d%Vcj6%##QdjPI@QKPP99x9yF zTBQ~9)-6z_XG>dF;qG7lavyDT@@aomll5-1FGqbv;c=`L(4@3x8d^Pq1-5H1(ZlWG zSKjcLi?b`ulgzIYx`ayr@epg>t_xknSJ|S4b8YnKuWa6m^)`9@B$SjuTq%-06;vc3 zwU6%3)jVOis53%;chR{r#d`^l_8r>W!F^lo+_P_?QRz1pU8Ali#*jX1BZd#NfdzT? z{zs$j*kOb1lh40!B~R9q5_qIhMUfy=2L9+JH>-l?rC5kxeDs|?^4t@)bkPbIq@tsI z_FBhiWEUK?1QIclDSFPKqqi*DXe`7sI<|lK`MXYkg7>*+U&MNVG4ZddlgFYE^|$4# zH`u(nOGsaCL`$V_^i;QUU9ps<1@si?SHHe^T!6y&{WJhRKvtSO7-e*tj|hvl&p-Uo zyI#-JNp_q@u^vAsZ{O3R4 zyI{eBKDstFHT9t0E9Lpe-1}p%2|hy^a=m)>T6Eui_x9@RnaVB zlG(37bfCf;#1PVZI*tnZ=&7cRDvvz`v{o5KZZ?CU&TQpptxUvtAiR#arIKiBId92I+*pnIJDz%*Mb4yzbYkARPHo*?BPEb4W+^vV z0fe4MV@GAf2`|NjMNImx9CwV01j}K7dPxb309n1RNiY6(;V3+I*Ob0T@G^ijE4kI; zFyBjcCXge&I|cNY^KrReAZ4*=TJ&<(y%*{m#;(qHm zta*p7wrCpICByg6-M3iLT}u zRu_e6^5of;m4DFcG^l6ajQPfei(H^m^aKxWS}9heWU*)SDK?4poi}p^S!B`n=ezH> zDuk2d{xgq1Wxcz1!zGx{cPK!_aAHX=$kg5fuN+*rW4;U&U^dZMj zD=#2?MJu9VxxS>BXgpx^+8GEv_SsW-^cnN7V*ip8QtaCo$3n;8G&C)K(Z6>)E6F-w zaqOL9MoO9pWAEjWQGJ!C)uWuok@Vp5n(^aPlfCmqCHKg>Re?9@qj(katN{&$aaI09 zyiyrx@4WNQuV}`aA=o7*Cg#&8FiC4h7ETsg?jPg#XadgSo-wS zPv3g@HM;KXv(Nr=)~s0r+qZAOR%2Fwh6K?gk34c0uScM1A`LD*MX!LfDvSoaTb_IF zxtr*WpBEgbLx&D)X3m^BNCl~rCr>`ERjXE;^u2`G>#x6l^~WE7e4&Jz#`!s3{}4cb z%mm~=Ri=-avTJ<86lr^M12{wDZ@IkKbrqz#y9(qD)J6zcd?p4a=Ext)c5%T2GAr%* zmHSU7Fk5A_XYaRwxlR=blx)|mYJvY?_MjK#}WSRDeK^=hS&(wXhY6f}om)jO&Z zrnZlOeyqCWq6x`IFV~k^_Q%3plK5%gx)rVF*W;(AWI_ULA_=E9grUmY>H57tGQef7;) zJNwj=DL~D1q5R3{@2pvaMl@&a8D~zvS4H>xuvT0>r=p`{cx=lrk5{)!}I!b3`1?K%bEm? z-7MjyWDhAN5*)$W61h+0DpcCMgycsbyk|`t*5~+v468~`a1B{7RoX2MA=02#v!gj_ z9x!s@8h1)iO1LRQF)=wFw@n!b!(C~yFqtB<$8;PQw?UB*5?s z$+LDB6ZkD7U#pkwkQ$@Cmf%)wDT5;y(TodTf2C^Z9iCQEjZ*cp7rICVTTLzC-cf- z!-h@$;)^fNksz2fY0~iD{N^_=pL*)4-{?o5(V;s=wLkB^`|jn`D-|B;nxR97PSbZm z!Q;qL?RD?H_x@R9N%$Q8o!-m(()0AU#@W7od((#>e)#Tz0|(C9v}sc-I{c5-bGvlu zvf}pJZ-2Z`pFRudqCVsoC4A&6QTCT8%bQ=q6w0A6nek$*a=l5_@a_g;T)g+nWzh+M zQMI;fvV42U9&iGZX&ep1zxmM#K8D1N#*=pG)!uxje@Y9M>rGZrF6q}<*+RSsOMt0J z>nY)gghG(11Z)n+rKWN7aRb%D-BJ(Xw1!sv5(XmNdYrM+wpB~pKu6tFG~`0uF?pnu z>X|y2PQ|HAArKFdpO{xMf-MH3mC)2EsvH+nl|Nc(yh^kP5FSht2Bg5a7?CU~2{dKt z=vashQivB(Q!(n>Z`@_0@#IQKpgv;w(4idNP>cmZ=j%j*>S*Yr#(&Lm1Sh~$1B@y> zve3>v>3Fi<=8@Hu#Z1ENtP_qy*wL5>W~!u(Qq2v{u|K=a#;?q>9%L zDdc(=YaI}<#7qn^opMh*RW6mR0iYxv$#0FL9aXiyn65_(Aao^Za0iT@qzD*80%z@P z-m=Mx=n(E598h7UohybW#X-zjt|u`Jj|IYPRnV&=1j6Zzt$uo&_E9`2?VRgNC=~S! zN$%lTTCZ7hOkzGtY1ZFmN}*@mxLBNN5}rJ>7{(>nk;mb%dbQ?K))#r`L{hnHhW6=Y zwSh?{%s6ZBZpUejAqy{txmQ+|+J2G(QaG5eEHBd%h(WF7OqxKyHsArCsK!beof@r~7&-ion$6tL(IP4S8O!#kFf3ofJdOHvIyO;>#8(=A)8nSF5jE3JlhY# z^AZQ}Qx>-9SjsBN^kjZYFq0Y&{&|OM(H}UZ7?9lJZ5yUp$Ma9*xte3(`O!_9(7GzY z)-7F5{SZem5Z5ZfHCq-(EJ~h;@-n5z{pi>8&p-dWw6ru4o=u%Pb(jiHckkZaaQN`y zlQ_d_vI;&=IN^kG!D3JefcM^e@3JOMn(WX$N4iFx5hOHtZPzt=#*Q63n&?Lz5oF=$ zb6GvA^Xb;D+cH^G`b@vajvb4PIdQDUk%cv4#E6NbMvXdCf=z-)*U4Jb@7}$8FYMT{ z<7)l=bG?4DH2PM@&{J(cUh^ z(MfMqa-Wl@NUIN@ly@De3Gh{<^U2xGcX(zh_nQh?$xz}+Mbck7Pr zFbR6G9n;5l@8GaHvYVDJTV@^TJyn+)or5_X76(kDs9X7N{A90_k*jMj2b867HqO*p zb2z%Xqif}DIF}|4%~FzX^7MJQ+@kGxdSdwld44>8{sgk+t~jlm&0AMuPjNoa9%4tg z{OM7kiq(MCQm)fGu?&h?gL@aH90>4?;mm?RgGInzP^$fg>B*&}tfyGks{Pc)Z(X<6 z28}%4YH=)tp6|$@zZk~_m~&JO9r!$W&62h2Jp(Wg*O2asMPLaJl)O=i3&&$lJSUvs zUNiyvqB64Jn5yWfpnmZ>?AFZdhqGEQ1v3tU5clPDfCB+J;daJhe3 zi_}Rqxs4^R8=DeuIUMR2P3$u{fxTzX#W3`2J);EcPRT%tbfPc81)Rrm4w0NX97QRD zz8`wQ1;;gQ)@+KF^^d;f=Bj>=IvNDu%R)K*^wY;w|Gt0!{&TCpKhia=Teqgb>3?2_ zKco70>X4xKJ$m$568v0(M}Joz=gc$D998|k;CJelpr7jB9qqr5y70-RQ-Fv|449o} z6NP_lItbzVvk*&!=macu)O!SgkWU}-l?0TCHc|zCVstQ9wms zq2)*`lAB16UW}>VnY7SO?c2FqY&EAbdZrmo2=n++t&F=tL|lwpvqnv8SU=4cuUvzx zjU$xNifa;YsY5#t9e}2|kB(K&SIrF1tZ>(ddV?uLO$;~yN>4u)(-9+Ob?#PEF{_B` z5TRD^Tm>?Vsj?SGP*A#3nybSsf?A^-KF+neo!T=;Tom}7&pPvT&Z}8r)26R+0M%t) zy=e-1!pPywztTo?j>-ZoB@yF!XPoY?#xFQI^t{tgV18lt{uiU|(z8zHUb$q1M)dN+ z8kE43k4$~+>Nl=S0GIkAm}DIBr5p}5tE6vUbVLGf4q1xaCMyVd2Q)_3#z(RQ-DTuV zC(LTsC{-PYZ0 z?3+^N6;o6DlwBLQ*mzx-($7M+QnC1=R*IgYibU zBjFclW*VeBmAs%NVd={=A>~IIV`DhTPs&`6R!unBFUxCUmZ9wAL6-@1f-i?5CnnWk zJ@XNcWTJrsvcT8w!1W0dMZw^eBqXCmS$D2DFmK_$*M9Mt?6G2mLu#_>?#k_>&qle$ zqHmQES_*E;9j)XGx#_}qhOBN0&3Ihat(rBoZF|YYoH3mP71Iz5X6tHfCHAIc*!Nij zx>2W-gb+*2aPOuqBs8QV_~R{+b`*J=ORX0B8jW{gJDGy1d>2p5v z%mWgGWoTextwFwuI1cWppR^@5FA~Gcv$jVY|MhCLVJ))NjP*xlV zu@?}dk_$!*UjjxI@t*L&-%7GjfHa)%y|aQ+z~vrbZN0j6CJQOgJ|F$9or@qTrM{t< zwBwe|8(YgJ4Q#^HS#&s{Ej-6SC__$t%@h|n=hTy6<|W)W+PYFFa^^`R?2E6y!7@^8 ziL+#=WN*X?qa%+Sf-oh$mNiCE?3b5UZdd;CGaG>Kd&=~s2rGiIxcAgkOXtSO!jN(T{R)IMv7Cf%%QOTJUwMgkhx)J^gjS{8LPf}!Fu zV#F#&)^8~+5@Z1v3krvDLCFgU2lpr>B-`nyo#2THeaUbVb6dF#?H;MswReB}{G$(D zaOs$6PkO)tlS(7RawW)N1&%RqkB{D~^e9FKcIg!cDoE zxrd`Sq&#h+;55+vf$%=xQ1K0b!#xi#&$UUZRxXUrtCZeQjBl(cNDBdMU!lu#7G90pAUVy^Orh#JK! z)Z!=2+BIutlu210@ZY?C1zDZ>wr&Tft)d7De?2h@`o86l_stQYl55mh+Mr>hPXen6 z{r_k~;HV29nfUIKknRJ4DfXi3a%J8qh1qlN(Ux?Ej6%WaKYpEJ5o(K}_V?a8MNCOn ziT**iQ6Ppgj?|h(E|zl4>M2JWdP6 zmDY+Qu}?p7xNTa$(KWQ52&8nn^)6ny(oR19SQu=jO_?#%=aRzl*T?kegjUo`7n{?tbNih6O1Ytb)iuY;$N(4|{l(YobZ++>q_|S~8q|}dY!^R!7z1b+a>w-ra zM{W&BzzQOA6|%n)#EOY1UZ7Z;vJkx^g#-?aHwKrX;zce-xF-x|Bi!)LdR&iIN@ia? zMYlOvqk+VN7BK9;OIsa=Pj;p6Z>r(G5+B_fZ^Ib|Q}hjJTmMl=${9j@i` zXt~6MOu`rWY@uaME00rh3-b5brafOEdq|SuT2IGjKNN4Opx>KYS(-brlNIKTgr!{q zM6F>rNi^H{En|P>9dLy8d52-)`*c2aR2tTq=Bb4ie%lK#|7~ZUdg>*6 z?YwhsQ{(ypB8KrvdDY?-Gx8uPb61}*JyWUAv1r>0)JxG8lNr=|0N0d}EKz`eyQbA7 z8%sWXSy?^1_w+U|3Z(WYARZa1EFlUqiHFGe%FEBR9$kB|4#wg+8Tje-8y_%m6THI^ z#96jG{h%{eSzTq&aEET~tWjyQ?S-N02ywYG!fBAH8YVG(1?SzB3VdT=W^xTFy;@Em z(W=s5<>OcCaor}(Y%jGaYAGaUWSn8(MiIWKi?RBz z2^Zud)BYDRhV*uCzYmfd zLL;6SU>;dsm?XAmU%IvH(9YIzjB^}9c|Tnw>aZuWx@t74&+*^5q_9|0v6x$tWq8M3 zcLXx7fJy6CE$qybhuf(X_-3Fq z0+HB~wIyq%6bmpGccp~A6rn1`HxWA02BIZY_|cXo;98RYs&dd1-o9w${eN0cpEOU4t@thlJFFs<2~N=J@;u& zdX89(mg8HY-};|uG$5GtCiME5A#jw1PgPg}X_P`9PaKe@s()aS?a_4%~K?;cJ&gN>hvIqB@I&yJVK2#VaSS;$Qn>KTrg2W zadVvo5H5Fym=7O_VZ&KGi2nAN6_yYkW?xNOiUN-?bl6ivRbEW32^IF-BP&w`UxCz@ z8%iD$F(4iLpgr|2;V`X4PIA@timQkj1g%B6gANcdRspRTnKzzfS3N+j`XmxKq*S#GdpcD6?7`^ez z>+GYDkS8IV)vRi4RKy7kuOrjp9BDQK|PWIXO2B{EG!<2?#x9 zu&GIFVp1HLX?eD5e}*$eKJ5u1_{6lQC&c+|lFl5+liBgcu z3c!InBqQkHI9;a}RE6QxDRG02?hqbJ$%u_kqBFs{Hj`u&)of*_XQMopTC>J&aL48l z&st%Byy;r3hJAjLuY}XAS&OV;+io`HyHO4+x!T>P7g&LfSiD?Va+RwOpb`gSWT8j^ z@tMxFQit#`#wrG8uAl^V*s~J3(FJfRu007FDKC+tQ~Y`Q+Z9ypK97`w;qFa7QT$QX znuMS5N&-o*fEDa&l0V-CBy*Df;;ui@qP9u%6;k_3La(120!LN&NUIUU(Qh#k=|diq z&?-O@_qp?@v=Y@o1%!;=t2K)P*>b%I!Ga7caJ{!C;d(J_k*(N+r{#*PKx~m@@Wi4) zDkW7!EO&_9d_qulR`B##X-^V*x*M05+OdSIwFYBK15yfV4(=_*Zj_SRvSmxGj#O)y zUynXyySy+m4%bnjS*jSZeE$)4?=3gkF>5y1sdVzyYg*p{_Wi(KPIN+Op}NLY0}y5N zDCQ+Wgm%hZ<=$ zEQ{ut3Ao43CRw8;jYAKn?*%WzZ1&uxr0M566O*Gh4}p2jjknsTZ@+Gn$Bh9;im4&G z8Y?@V+L?pi$WaLbW`AsPc-vLGb{yrHW81~=;0ZD^NXc!A~78<3P>dvDY?-i)*edXUAxcC1eVuRy&KAa~&b*2Vt=f^cTR!e zLh!?vM3bHrg8+^e-Ls1&vYd2}E)Fmr;TwiAC@DbA3#Cb_UPj%5YtwE<4GGn%-ZdY_Q7lA=E8!se5z;EY&izPc4%qS+uy`<16GvubjN5h8)rNSIqvhAhX_L! z0iUa{l-l7ah7e9OPo-nK-Y6!)GZd3hU|AN5;zVjg(v?oo1N--(+i<4sqUOR|&G0W; z#jM=pedMH30#^x(VDCBibE9>u_C-C<ipVbb<3= z=*EmDFBgzVQE*q0tuq?t)xB?Dd-a89ZS?1FyZi5)^Dnf1Lq^)ZeY+7djITauTCe}W zDcHOsVsjE)Rp3Vg&n^buf1oRL^_O;C)=w@LO$M~w9A z@l$N?7}^ABPxukzzLD_^A)65<)6ffDwh20})78B2E7L5_=V(zu@0#Cpl1dxdaO zip9QtS)50dM3(~u1KPxLidwnF_b2$e2zM;zy`3<8xV^Y>vmg?{NWi5e8-BVe7wTkGDG_^jY_r^SGC9exlhq+lgnV$KW#=8hJxUpH?k!>eB&?Z} zT(G{Q#aoVZTA1N+G`(G5>_5LK-2Un6J!X zu{v2v(t&l3JS?5R0|HFikIZbjOu}LQLOfN+D^*y1+r-?J2(WDBD$=Yw;u5Lnnr#Nm zdLx-I;vKcaFNh#wg) z!3|?5f#HmwJk1gbXs4s4HgDDfev8!vW0MpNG+Y&ttLuZ{4}?XO{4K^(g|;0<<*&$E zR+6WKGmlsVTZcADw!a{O7A`fc3;`a&Q3zrJstAGQvre&;z??mh&L}Ux@+>e4v+qBD zfxQbSzI4#$&6r~CJ9V`T+?sNaXurjD)Jse!q>8o!`%NmW+UGFW2imr_Flv&LfTv=G zg=pgnEW4!w1NZJ1U`0W$0_(yX?K`kx*~bp(NA}Y~n>~ZF285(EUpeF?*!5fqN?DnD zse`eE-)A4cO9$nh)|iA8;ob7ZOYN1nKk&5kGVKL$i)X#6#fiY}D7meDkteK#z~gz5q_3ycs%M!9;27|y9Hy*ToCKPm0|ZPY#H3~n9yG+=!ykV7 znOopwSCJyWiymuA?g(`BD57RgJ^a!UMnZQr(L9)y$9Mt3AWLx2kl{`<@)&8!{OPg7 zx^+?mu53P()vxan55&-jr^(6!w%#}s7p5Oejs>avUCD#)STZOC;;I;o0zg?Ac9XTJ$f;t8Uma={;$vQJW|!9TD0 z;gdiE+JL){*ddP>j)h)7Cj^eJ@B!QWhyjRK{#T zeUF5;yF9Vv)Yw}>w|&dz)(~q+tY-z5(7yCcz9_S<-Fn&v8drvsrKf}jWu+Z6u%EX} z%E5iNnDpQ}HB+ri&;Iu9*P~c&;QXdCk{QI@#KhfQ3yjoRJ0&IAZuspD#7~50+LH*k zSSoNsCMBx?Q=Ku`V>qHt-K-!>OU1QODjUGE+O}Z}@3BhRNiogDc<$#6oJSwL$F0n3 zZ@S%TkfE2Qrj;;gF-&RkN`ety!%3YEVnh?{fzG(`<1G+sN+PL(UWBiD6(e-iU{%Lk zL^z=62u;F53|U?!N?#Xq780>nq7@x*7j#AIQE_CtCFADIq(iq-l$BNJY#cO@TQ-K| zo5uATS^Kt4?85WUwM;w%J9qE0Ei`tu_?otpV&k=IHd}r{oHcLK*;*&3Vuc-Kf0o%v zr=Du#iTMCn_jw78^&=dV(5S++kToLZ(}jer7WVzDvrl48;a+p|B*!)cQpLGP0YLlib)QIE0+RV^oq}8N_zh*fVgzf|&IgwHvkTa0U$Sh9Zz!nQ=@JYk;&*vaV*$Tj?$bi%4FOa0r}RFCA8CvsfRRt6U4LM_N>%UmF@Ab0|Ytcya)X6tkC=RziBH(v@`# zv>&(4Iz67m7)nVO9Hh<4Jt-|wi2-s`#UdovY*_0;voV=iQHmw72sOQoWL$wuK7Mfm zS#mCrxjjnm7Qr5-C*dk9vr6q`fZ49>LYwvRVmsyJ0rt@+pWvUDRvGQ-z)IH8@edKC zW9vK^!B>PUC1c_I+19T7=@`n;8Zopl%~j)Z2U3I7 zq`tlU#yhyszr108HF1^N1z-8w}(|opPPlj_@Rpm!vaTJi?P{3XW z&ZXi4gp{mk56W|$>ZGK^D4^vj;<5llS3DyDA${}BcRI6`#UgjB_f?ZC@Q{@u#*11) z?bNAQR#~=+)chFX2-abGA#In~(*l}~o_XeJ95%Phx((>hF%$c3`9@-EB-}`W@FVKM zRTmHtfs`J_HkGv~idFrOgm*G9Y}Tr|O`%3jY2{(W4eQWNMD;{jlt2Uospucvk|1Kd zawWFNb`fyIAS8VF<+V!utvI3+3NL&MS|M>D;KKFtj>xJ}mYrL1!ZpSdPxAi`DQkk4 z5+c+UK`?b|?NFNU6qA=)WaNCKjXIp{mC@fe1XouOmV7X6HsVj*vBCu~*7>&E`Qx^j7xEnK#QeqgOA zuB3m}?D<|)H-MPV?76f3{2Zkd%YCB5!0Oel%ef&NZ1}OmY|4~rwt4$j>q4>Sa#C0}JKhek z1tY)ss^8eekKeFy6TT$@pwP}c|58h>MS3>v|0RGbQ8HqIwGs&wPZ6$bp59y*K~hcv zM@!tNI)AE^L>J*zA{L7>I92?ZOI)rdR)T)lz;e&aCw-da8o7HxLppO%hegVGD)F%W z6kXOPUgt3#kY?G+E~oorpx(q;m|m zGWL|DB1>9$eyfr z99s#xu-PiSgh7BD0au$ukZ(CZVlM&BLpv`-lMD)WHV~4CUcHUZA=gh4O(08YB3N0G z#0}J+pzXy$M2exTrWH#sx*GKF)5j4@J>C=~*7+prZ{{vLAtwStnN!)h*>;ddqzZ1Q z?>~TLM6jFEPqpPyR+Z?Z48l>ijhKf{$@BoI5STT3eS)tB@@2_h*)%E(BDlLlU&YWu9d-nBarY#Wq z%a$#+`o!I&f}C*tV9U=gwy~2Yy8tgyG6i(rjLP$R6ijZ}Kno=PHEZ4oc$V6lO*=h> zwj4O-llH4r-?Pp>!`3Wc0xu2cw96gdg<5q!I%mggWv~$4Z6%z8kxAn%#C;V*rq=r( zyh{+D`ma1%=JR}aZSqqiI?c1sbY!$AWbiSNqrR%1cN=hAX0FoM-{BB8Sye>{jxwx* zyuF+4!e3o$ufFq%$KQT^)wTB4TW`wr;)GRx;l|UN^in=VnG$grUvWqsD?aY~32uq1 z1&|=DI;ig8?T4RyVHciv7H0&FwRGY~Wnr;)-4&PFYj3>i%u<f?%8lb$B&=Ri>0al172#uT-8}YE^|2nybC(8P@28}lOW+D zb>om2(R=S~Eubjw%RIb1!JjYDr01cmah;zUEC6dgTrc=4$v`*Ds`NN9AIgq{`Bk?{@A{0w?#H;?!jUS4;96A z<~*Mgn9jV#%dBgcPS&nX8=JpqDPxMrrG0_oFx&`SORBSpfT5In()mDvd)!(u5(R1%O9~_nNXtf`AOynE02L@#I=KrlM|`Jh zjm}6Qz1%{~T}Ly=K)52bG8Qd@mfKK5OxZ+9^g&Z{f?POGTnv^^R+!GdsYU-SHH%dC zo(fXEwGD8OL6dG)BPEdJ02Pm&IGyH`w4z6|Rt?jpeR+1gJ&C^$!ag6RZHWnG{DdkSZhAQISTh_-ob*uWjyk=tI8E+ zxvqgbGiDs^O%%eY0+(05;#G2OX^$CPY)R?Bva%y^=}w+74ZNPpexY0lPsCh#zPE>B zPvlaT`$+K^mG)N>hl~d=3aRc7bg%}OxRy}AD+YTGWZEZRehofG*;k{+!my?AkTT9* zzVjiSUie(+(Mb7`vZ78EIpBGz3k)oH8pUd@(h}sJ3uD4^y}4UUFv1!ZQ96SL@8uTL zeNukZR!GMvDAnJ)&2yjEG=U?ss0G_NybVR{r38}{EXPBDqqBD;JVY-_FIOsepazFM zVC{g+@0ZV`j9`s+$BA1zb%+ND_Wt5Jy?oA^rxZli9D}fsvQomls&EaLOTkknsWXGX zP5Py|=sBWwFYx7_2#VZQzm^IuI@PhJJbvVcmZIfHH_%H`b0J&OWm)L;^FrY03Lj}L z+H5uyRO5$YNJoBxNY3Gp;mv2@Dw6j@|nRcDJ;V#}4H)h>IJC^S9EKi*P3?c zatn?aI^3(mB?ME+Jd&o?lG7J;u8(@jss4nFW*0`19TEbFI~Y-yem#m|8T;uU7Y1+y(1E#Ue zvvs2+`}J^+lgMst1Ba$zNhH`8Uyrk8Yd4^|)8(0K#QZ%QkukmB8k@k$jJ9-PggyV< zGxp_IU)r~$zO$MfOOZ<*NOU~s!|d8_4e;ydb-&d_xCk-C zyQC4TJ&*nh4_B80&Jq$c_V);X7-uv<7S5HknTm!8@x%;0F2LRg@Q}1}o~{0AWvo{k zy%?ePQ(dg(<}4-k`2NQqv^#IR*hnbW`=v-En1dP@oYuVw*q-0gd zO{fwG2^9$=q{Fs3pI}%GL@y)&u zDG8~#(r4k8ti@q)NuJ=NQUh5uJQOQ%KmFehkZjZkc$8DmRF@*>ENe*rM&;DbnljVc zv}$VK5??%S_()e47R+5NH+(HDz$nt;?$V>TZQZz)3i$5>y~Ti2A(n~~K%%fLm#ZB zOJp9h0t>XKSV^vavX`=YW8;Xo+;$gmg8?H5FFlttU4Tacah4hLm)OWto4Up2_{ChD z@p4}o!dez*0#-^MF_oMDa2Ia34EB=jGG$OQcmcvej8V;8r5xz=-6#rLb#_u7@ba`0 z28$-C4x@GIwUqcO)eO4d2@v!K}+5F2!Ti98`Va;$#Uh zuC7rEzwqCW{a{>gDZ|`_cS?3aJh*p2IMuUvZ}4S@3xP4?CVKW;-(KBpK*MCGM)8WKHiwM8Jg4bc1gWy_Hf`F$tg!UaY$Dkcx$CqK!rh(Q_gI65wX8A6qAVqbRZ1Vb zbLgk1db46O?>d}!GIt`d=s}prxQVPGm%|>T5|ZdxlEd*RHEC&-OS(GoESlst=QxH^ z_DpnjELoEk;QFOBiXa02v$P`xExiUn!o^i=7y%cGiAWsD z;^EtXkdpL4b$9m?o_SdlvJet=XdIn|+qG_Lg~WFhmz3LQAR3znQmc{iQ)gJe-hFHZ zO**9{OEZm^izrTAi_2{Iupu^S>Qtvmx}LYbkLSNrV9sgeuHpG*kQ9)eTkqT=w1v1 zj8eN9o=ftA+&Ah5t-2vGg+>h%lG|XnLpfwTj zk%k=&Lr%d>wg#eaW=Uw>nlUVNeL#l5I(X7zx+{EDlIg}e^a)%iXW?qXsR8sG@?YKLZj)9-HZ zc{C@!R7C3e`M!L`8e6|=2}%!E56LN_ zp9BO23#RNqHA8U-Q)O8y#t~r`UviO+qlHcq3R_WOj%9E-p4tf|kU2Pnwo}Vc&YD0| zbx1d#uy(Jt;2fx9ha6|?I8H>hZXAqez3R8J?prq6()0{mR&iJr`MxhYia{L|;t}ZH z5{Dy0f zRwWfz(>s8rEjFSJ+LykEH2fM^vnoq~?oeIS{OGgb z|K1UgvhWd(KmZ68X?S3ZGfw~CA&W(CB}`<0%e59kDz@yOfM9~~L1eEB&}U$Xa3flp z9b+6aeq0jCjh4uvStW8|zz}6cNwld3r(dUzG+^A%G!*owHbuuJ3o(VP5dV3npKS9v z`$jRFBDJJ}X_XW2S-E1hwdFYEC0GjHLWZ$cu3qhl3?887nd!7zX@xtlFP6&EHLEOh zf2Lb6$qxOZ*xul+5ef^naYVD`-Xu6H26LusKUjkzSIMO5)9tTMJV^TO0oIpqe}4Q0XLMa?Qd))^a>Ldw_RyWT+qm)H zTdSrm?Bj38*@%i0r_Sx|`>(&VSN{5#?W8qLTxq&> zZyaU`H5=gu!qS7WefY%~t4k}O8uT~o(`$&;O2zU6UtWFw1-tZ;U)wjMKepULDLHbD zN^=K~fbaeTIo|m@o1+{KrthS?13k~!Zz(rrXue*IDx~D6*5x-^%#2BY;|TG8dcX?a ze9H<>8p+oYHt(BHEx8$e&tUL6gzPj9e4F(37dC0^7_6`YJN2ydt#Q+Kws$ABNk}&( zn@DL2^sz&bGp|yF{_pR<*FJmq4SVIK=fM*)5V?2ax8K>EwcG5N{{8ITS6;L?-h7$b zoAs7f)t`pAC<=*nZ1K{K)`iBg9lN)u3}BwcDBgtyQHcVOC$}7HNKTCL1eAEPCH(+E z_W7evKeC3++gPKf4LJs4GcG(?=O~LX{-OiBZD1V~gG^2>&BUUrS41h8#Qj^ZIBX~ zzse1EY(;pW@KvI4~gFTeaUCw2ek%~jD@KpT;3Oj#{ z3j{HGYab{^2B3&Xi2(|j55ZL+%}jBsQUr+3KN>K+ucw{sOrmTm;TJ4ZEJ&Gl(g-U# zpJh8UhtcAeknjx@U#eLu+YhtSp?XbPwz0-hakgmFHmgPb%G4Qi0~Q49)O~63$+jmy zoB9#*z@!xD_-6!CG1_zMR&D4zw$qPXR+6jwkY%IA%L-NMdz&uZEU_$~=W^r#%s}&A zxtO*!3V6^KCm!ax7lzT71cpCxf@%VtqSupBeK40XlJ=3|H<>g6L~m{S@99|I#WiMTHUp7-W)gTZg-g}Bl7FfUlL1*wfYSkc!zH#I^^Sy z$;SH9p>&ZE*jwCJ`PV;N<1YW3M`RBl=>71DaUW$=Cfkx3bBI;puH$)ocW$BJ@^rdA zya8;Z?9yLdX=A?`=eR0$NoWwLX#>xITM3d#HAGTo)Dv&py2Ui}BuNBID2k%myqtq% z{cW-WEX{`>eVVx!TLQ;)EACNHnC`V#vu4h0 z0q1|qX~K8Exm_N4Yr+$}nJx-eGsTSc4dk=yP+a86 zh>&$QW4Vn4=W|wWveK2?tThT(EB3*KB<|jtJJT((cD)Pe+0_TYl5Ii$cmzS>DE%e? z7;)&cNIpAZ#CO3}CnhH52mcP9REnYjIm_8B(hIAiu6iT-m^tWtW5d+r)al!(jPSt~e)F z2^@%3OjB6wa)&>qrMhh6Z_j8!!;eM_!+=5)#pQ!@hZ!qtM-;{@3WD85eTg#iw%|7D+O;c;s*$ZBMO&5vO9JPV)uS#uBvL?R z(`V0di%S}o6C2nnuevg4N(tmDdrNMl2z}1=yQoVkqL?+2nhZyL#*+U(izB@I(kG2~ zT*m=;i*Q@J<(HRUxKcar8{lnKnu_RiLqe_~lpOvYh9ZSZ`dL-%pxBY$^o}yxa!j zX8QQU53DA=%Zk!h5id}phjDVK*^DJStTpb94BVG{VT`IiPvCj#_%LnORAwATF(OAn z(EXrJjdE)kwS)C3lEQHk*~E>;f8a5(jp{&rP!j?!S}FvT*xq%tR|8 zUhv2h54rHx*+;^u6kwTw3on!O`Wl=XT8hAa}hlD<~#p@U~L6ACsU986yAOH z?HD> zUF|{lG@5yC=FFTPSnibs`LDhDa@)Lay}kb4$JViP9~*K^V}`7>Y13vCt0QJ{^655d z+$g*0hHG$-ZLsghPWC;%{r5N6IvS;Z^UZkcJ$QsIqiO4V?|)|PIa;K4y}IEW*l_V!y1zKu!#f&xq9c$UuwU)^h`?#&$BrQ5%uhoMPI63 ze=1`@NfQkzW-E>0Z}o(lw6+Bf7)Xj@UvU5HC5tsOyro5=%r>M|R7G8~U+Xp=Rik+` zHu}fEKL7mlb8FSAmEn&%Bp8B%A~*`P6IZil%}l+=dy-pRTpX*vB^-|Qr19g&AFt0Z zz4X%eUwrY!8{*>PSm+PGg5wJE|4 zm^s7JaHX|v+s4*!+UORLUOGf;NY5^$73XnS+ggtysYQ^4rWk{SQ5{mXdmh`Fo@0wZ zetN?x7Qs4(4jl@kf!#IVQrf?@a_Q;ePNXa2%%V8No=B3ljb&U{vzwvlP(DR*I;$zb82S-xPTQG z7LQA^fo0(uyyo(YEunsGn>+bi=38#9x(>4iOPA7p;Z%F@)3@Q%+@HiwUY{aEM!7Ptz?UZu8I|@3q`58?XlR?S(JDwLSE+ zlPgn}yfkygEZxeNtJsAR;6{)NhEiViPj0xRlzNs^zRz(=`yuzC&Q6L!_$^+rz~Q`V z)oQoa3vdlDS%yF_+KVEPL?LXcjsIq>GuBwrw`UQ<)G-BVtRtN+*i*)hC+3qZ)x*}V zfM3F-e|`A{_VK5qZ5=M<&Yion=QUj!l-D4a7+*syA6bdQUvE5%kSsu0$8(D4sr)BEiAH=XY;cke+c_n*7}RYw=l@?^ci4+??mLM8aOtPfpS<*-boYT)%l!Y=sz&++>o0_fkH zfHX-z5?BA^2WE4_IFi|q7m$J^!i4$B0K)kN!^b7U-%3yr(aO@1DlGC1WXfqoFu{Eo zB5s-TpajS#OQJxBfkh}bQpcvz=TxSfTFpx-{1mz{P*MOR6szU z{nUx5=~y^*Qc253QHUf^9}g2MF3M(mfiWHvWxM62t2}^HL+jG|B{GHUaA~P07%}d?R&~~;wa2dLhh<-uAw36 z6IQ3?iPpEl0QMu&w$P`qW&2WZc)Fh=-48ze++D88Snds5weR9}2#!*Od?EE#g)F#Z z`!3AC)M60abEl3E)U$zO^ni!X%kACwzkm-QuAsLh5**ZBe9wV=%SK`PxX@mC`b9t`HzElrJp184--o4EOzbYf_HRY_Gv|Xenq9kXs}1hc6MR9* zgZ`cO@LPh#8}351=!?Xih==MRNfbr7Xk{Ul9ZKbwfGWl98941$6f2=5KE=@%I;aqw z$C6i#cj$E#A#hZMk5oO?vM9}1oePw+ul#zo8L9GAU64W%Nn#*M^Yvqr2_!rD%EXq& z4}+s#-8Wq9UJV}A7f#3|B}RVR;PDIYRhFBsJXcO35AG`7r1Vk=Bk;_kVLH<8)IMDT z2LF&VEJstQO4gZ(S?-EjRN_lxROjNsg9o_~*o!MpPJ{}^R={2J*t}(v|Fmh>fg`Pl zy9><^DC4(k3nopPLccMXoESax=l|}KJ9seD1`Zfxi|5X@Vrf@mT-;NyPF)*6c7kUL z4j4F?OsZWTDAxUI&!c6ADLw-M4W!m#FGnd9(SdpsmWKpllLiDtnU{LV#meW+`lQ*V zkZwBSxIsJzIAR^Dznly>xkJ4L5^p zd;H1gS%WeWafRj`Bv^cqBLq?*>PoAd5=)&%GIK7o$NzG_WwQ2(U%hGxFtD_yoh+L& z`@w^cwTJ%lG^yJOByH5jvR&=RHssJ?lwuK!tS47yrTzZ4+w8d)pSSbRIKw{u@^f50 zsVELr_NPBSinY4mPCVfRJN?v?ftON}qsjKF?Mjc7rIgg#QhWGYi5Vy?SfaAV6Lg|2 zuvgcJ7F`C|`n9X94ycqw24jYlDXx*Q@rIbdMHag<=}8GSUC7j@e_kBND)c8aa~fHFlcs!&B~WPh-Tgo8F8-CZ zZPyNl%Td|5Ij2k<oQp9LHVw# zq1}A_<@VjA8T8FtOd`Y-uV;JZ#aHMWaj}j1l*m#l#A|jw%F>uJB=MGUcU3s{4TYF{vg&#HSMib($wp2KVqPi9kpy zK~at{a;t|-1P`*qbR=c;cZ32Tj3KRGzFDu!VH`iV1A^6&09DkiD0Nl=c`?K=0?_I- z9Z6cL(y!HFAOfK$O*EP~khB^p?94~nxdgT{o|LLB zPl7%PFh(`HjLKm#WPUuCoMOlEo6{?2DhGNertB z4Yv}_H4K>T!IFFYnO9hg0^8abu4Qw|Nhk=1*=QfLvT(2E7tu#7P$>Dg#X1 zHxQQ+UWCzA9QE|X0skL+=K)|>QT_k3y|-l3d#@xUp#}m0LK6tRC{mOnf~cSf0ygAF zRRKl1^xgvm2!SLdr1#!?-;(XU{XgGx^Zc)Cz(f`$cyCzVd-u+ra%SfAIcGRh(QJ!F z$G)?soh=2)XK%&+HlV+~`c|MynmPS5n=y^K0hZ!W0fT6>CB{q!p+(zGzx;*6>+#2) zur#C_FGK%Uu35(zqwHyHAJ4z?n$MZ5b+rcNJ}#+&c^1x*%WZxRZn(hL51rD82$duv z9N23)oqCvU;blPnaRc` zH(`0cEt)kKpBtigk37MpEe}Ptc$rQ3AjW?C`+Hz8P@}&13Tu?L&mI|h!f2m=>Ynfd_r{wE~e$C0a&#Wj=8XKXYk!8~Y(Qx7?2Cm}H~+ zcCe^z%kg-dAA~RhFu5=fOLr9cLC+1?jk=S{J7#l^9e4D>5Vr$u(v+!$WJP0ym&Cl})n@?>;$F$h&q(zbmf^QSTy)kgO(9`qUs4eZ5OVA~=$HDWy%>xTN-Un!`IflTw9hC9kO3uKvR(cFE|WcK?0% zTiz~lg*q0DzMZkxC5j1Pjvzov!j(Y2nMyXlh>aRlo7(ijfnvr53^hxN@wZcn(1Nb` zX921}IfXdWA%HN?arMeLiXr{8Db55GLxqLBgv|4D3+$6gQ>YJEXdQXywU#JI8F_b! zNf9DeI3J}BSKW%J&;VTJsi^1^s!ys@WwuprC0*_yA_j*;&;nQ)l1L(|p{+O+q{fpG zSL1~}mZV%Qy&CXyCW%IYp2Jwv;eS-g>^bsR&KdodGmO$=tB*3Ed+<&A9y#nB7uND6%XzB-De+{x;DT=xF{03pKm8oyB5v?`U?XWuBJ~^ls+FB_+KKl4 zt535zGp5^b@5N<$Q;usJ-Wykjv%{x;$aUlPjo9JPW-wP$h3UwGRGtFTisfrO?~j73 zR^aMgSy_ZylMJq`9jS9WqZT}F)Gt4#7Ptw#?@v2>T;xU784;3j#*KS}7)^9cd8Zal;RA;=ZpR z7z4E#4HGN76F8+=aiuT7|M9DN0m=qbTrzRIB0wIk8Uo?mCz~LM1Er10X40zm4WmuL z9~%OGJ>b|xoa6)mHm~>dIYJa7JmTg+0CHlWK5?vneQ~am6MpQbLIOlzK|47!gBlB6UdIZRGHw zzw29HT0Ip|Mp5ksVG?~%kIIPJ%Beu@sxRV<)s|OCSvIWf2!e%>i+cmoACKg%@7&Wn z;-39Lq`wz%=4>bT91;t+(k~D1#6aD`z+jc znTJ@oS`kS0qq}O;Fu7#tyU#^nzo_t(4fI`9$J?PzJ~h+2<>PihX_x`R4{|r@xz+@) zdOS8ZIp3XVfl9^2I)RnQCK%AX$6FI7=hFER4>qaaA_BA_6{Fx#$AHUG{Ry3du5mD5ER%r-y*w>jX)_^Y=>Ptk^P%XIepBRuw zo_N+C`P*}@s*?Ru(p!)WlJOxK#8GihUZFkx%&Ydyv#)BXj;I3)YaBMs_pf3&bdXbv zK*FI?uZwv)_q@|^{%C1$efTlNql7L-StfaqQrdR1>#n)V#(pr)#^YTmugM)GNkmRT z725)d2j&RmuM-r%x%KB3g+om>>}}qrbykJL&8pm8mQU`bR)kloCh~_4UwaDfV4%KU z#PG6=0<|@LN#tzMC4abIfbi?B%P+Id9ozCs5FSaIRvo7q z{Nf(2Uqs&c{qKMOtDpVsXMapiPA(@^dArLlyXIOwOMX$?Dmi-eXnY(3CkOqGw5{)1Sy=`8P3Wx6D%Z3R zjo*tr=e%U~6<1vG_=zW;IId~=FZ$iA#D|R_fu!@4s#ADlTPrtw1p8D+xs6=wCtf4ij zyz}h-7nc!IB;Kw*qc>`dGDqAE*hcPob*Wu>R$t2|Izf3&GEgtE3Tt71er=XL_3Kf# zV$oKsimUaL?SFiG1=1if*5FM0^lfj`X0IRyT#6HRpA8*^^=SYZA_~e&QDISpD#cBB zt{6!pAToXRAeFq~^W_^~2y-_FuDvWmhE2kWqZ1a09rel4F_DIRF|yGE2}jsW$XDE| zaC(5uB|SLt;@!yF@I+v=t@wOGfeOJQ*ZnjM^-Axo94}>@H&W~{bxHv@g+RT}AYTs@ zD#Gh(HqezLaLG0zJ{k*cfyw2uuBEE?MC7Du(^y6D6+j9>D_GweC(q;YMhJ4tFm{|8 z+|x>Js`TzQWRH=@qz2{Z7nraoI6|oBb zqYwO&F3A}a=1a_zaz;r-Dp)HrfchiiB?lixDNs}aiCNCJh)HDZL5k{NykY>w6k@xz^m3_HLQyLI-Mij~!ztD>E&ue}-MPFbXx zwd-)m!7EePAaE|yT7V&;OE=&0TUSLZCr{u}OPf%oQO6!(g{T6%9Wwv|gZCs-8*%$U)=i+$+P-dLkc=&>u$IF@G5)o#n&smeqT0412f&Ju;@%H;)|H4{jcCq-hPIlQ32ikA$yc+^C)t-3tA`lG$8xvaD z_b!OH2VQ*3et6j>HnJbCxNZB{;hBfoyEA@cm)`uYz4I1{*Vquzt^3^t`Svwy?*oi0paXGcx7o6+6>@)6QE|K$O=PsO-8+)g>V z&fdjHeCWsvY!F6#A=&DzWfuRzZ|wWGylYQB^@R1p9-)|9M{Ie*UZ!tzmUgvK=Uz^# zfX=pZ)oSZJ`ChyK>FJbx)OwQApp?LqE0!&_+Gi)*3lod&+MoQ+J24lAO7 zNDGK`ORIFZG)Tu#64ITL(j}eJ-3>D|NFyLM^w8Zs#0)V1;qzVh@AdQkc{gj;y7rv2 zuYDf-IGd03&+l9}_o0DZ+t(OZ*n=+2$$dX07qO|{cMn#_;J!MuByg3GVnnZe%}!8< z*MnbgW`ou#PJ^c}6qm`&q+MA%LOAAGDll!(Gv78&Cg+%7mM1O`)KxyyQE)`)I-W6M6?*v{8WgdnVtuu1X}}C} zWc!IL=%3IaRWSKJVwmZs3wkPus>`w zJLpPm3@;&u&_RWXx$lo&sD`V{c0$P=!|hhu$yFpwuK(I&(1LGj zsb@h3H#UN9`xjJ7r!zAJGO<8XUi+gSpejeDeoK8UZf&Q_D3xZP?mDEKM@%DKR{ik{WjrICS}jqQ?&Nu$^fzSGKP$nCxsdZikU@sr1 z8|Ozvlx4R`;{_zkx0<$rcrd(`$=u_bR=vP6L&AZ73WSelcvsDg@?=5*FxtA-{B^aW zjSsuO6li{E6f0+ZW06fMo;QY)875k02NKT|+=#A~`6Qp@ihlxs#O5$)T%z#4{kGbt zMnae?6Fc}7F%g90L=igFmO!y4lxPM(!4P?vUbO_gda#CccmLxXj`7{K%iw%a-yKVS z#)d7YD0l)THbM*mr~XU`XO6tURnSqd`p?mr~xNlZs3af>|e(UMX^@iNGhMqfqB zyiRMf1PWhnZI0#1CpWNk{cL#4#1q{hvGVgQ3Wn9*x7=3FWZa*%N&IPoo{O1=WnIF)> za0eK5@Jp1p3lp3RC{PVM^mzGK`1SD+yCOd00h+??dXlMBFDlgcR0ejaf3cDh=fX-O z<1&Rl-yMjpk9SbaykMU4mS`3k$Blf2?CylgMt3N(>5TsO`9NO&CE!YCsqLhK9aeS5 zXDFJwMn5pf?+s%yIgBkeiU$jm^M)H(i#4&7;pox+lI(g=B$Luf2rtc;E>vzuWuH04 zRl{l7O|TJj) z!)|B5hj}79sUQ-zhL#&ItNYzPBXLn*(UZGYb=vc#ch$F!AvZnMg`)4(U$fp5a0@vO zLQ{fXL}dD*&gmT$x?L%h$-J#?lKMofy1?{2e>R9rx~Nr)lFNZqps}9uD{^QaX#njP z3zUNayfiMhVouXiH*Y7VN%akCdn+pvb|`1@+xL*e!+v6;`lf-wdobN3e#=oMZia8^hM-*T}x zm4KjQ|9Dq@!osx+J2NvgXJ5X2sq6oEnd7f`)M?Nv>a@{kT1d3i>SlvhUDY~wyYzKy zdA!YkN{-Rj6RAM4{z!ctBjb18qQj#|PSzm)Arns~m2~aBk(hsp<){|<%^j}P6d`RQ z`X|82Pkbrwh^omDariUH{F}C8pvX(qF2BF8AhI8@sL`qUvLbLH9pAeJWQvpBJWJ{X z)d~`AA@x|G=x7?c4G=zGyDQP-62C(8ZrkcH3rVB4bY;_Tx-0x`T>J=HT7a`+a#b2I zTu)PZi3Ts>E^0u@4K@hQ!rjvVrA50Q7;#&aReiOx^BSiAS~He7dTW+Wi?>YVtX%TQ zHZr$BH1^}e3-g~;`)C}>K8Li>UxDwbcYnRpWE()7pDGrn8Pmq-W8+N^4BRZS$HWCw zy(@WNVvtqxtRdi|s}2g)S7lNG$B_=f{AfJYP8BV!MLG0w+>tXa3 z4BfxV3?^~R*ejHK5g&`uwa!4zt9;b@-O1k1jfgU3alSL$c4@TIWE%>eBp<{~R9_tL zk(+l$UwQ@}sEgtDvyCuGxx5Rh8XC`hPRU50G)IP+CvO0~89J0WVuzi@w3fnx_oU5= zh+LBM1_JRi>#eFkzuritf8ntZ#wAK&q*Sn_4tnYKt3)|h(+&%SPHuaBDLH*ws|mPQ zK~+qUV>3t2@hSEEX_);3n|U_fGUQJg2$fJX54*x4Fj+zK*Nl3l`U>He^JxhJuPr~W z>*$NMQ9=X({y%CPW!V**pqAdMpPfCjf2~4!DhRieJL&3`li2}d6xggr<32uGEB`VCB?YdRWe1Co;9q00)XOV(>I! z>5y4ud3gRWCmiW9rO7|KyD`IUpE9il7j1-D?*HLVw&44nK9I_o+A+jE1xK6j;Ey&#mS)CuoSmLO)}h zSpT(p5iXuM$%V{Dhzrpf>Tdi@!-c8KY$Apy#f&wlDm*|s>K|y^rQoNg`{m7wcw(VPP)9Vi|~T(y{@Mcqp=8b<|AWCM}n{)p7F;pOkPcw zrWiXR14&{OrcTap`TY?#$rib|A2;U)QjP;@0kT|9*IAciwcCAlfR7${-17hEL*l~u z*OKD_;hICgJFoUvLO2=i>=s8CV&1U?q+-A972remcg2g6SJ>r^5!!x-9R#X7&rzlm zvkhqLn!_BR(xn!`qKR|hLybzBYry$t1hQr5)TfY=GW1NBY*PHu5nw8p4}5O#8xCnQ zzkHuh?hptjDnOwr^8b_xB1X~9&U^<;>AUZ~YcX&-4$boGlmn6DiBOxz6Sbg>uyr<8 zhI{^8UM}r4rcivveqiFoWq{H!;m2=)kCJ+%6ItrqQ4X?^`KsQj(-^e(ip{q)#14S;gR`vu) z|3aW*tSmPCZNW1^4_lcyK>Kr#lTkO0PtuDijmQQ5l(6 zioSd6f|^QzISUd{&Pn7?TL|&9-OyKN{|o2Sl5DiW<5S8DPkR?-EXoY?V4MXg^c1o! zrfnvK5ykB#VSiQ05?ZMypO_TDyE8ag`}_{n;8apWP4P|WJzCijs&-bv)M65G=29W> z)s`$BRm58Ok2r!jI@M3aG>>|7txM-JqwmI-*azAKes*~EFJ{i#)sH*O6#wg4ro|FX z$3sD$ay&8}55F&Bch>o`EDvi2U9_XJ#k4d1g@8xTdo%s8C@R(qWOqoavH78R+6XSe z=)@&P{I&|Tg9l(zZoj1)b#rH%#YIuzRWw(;xw7H`{I7Hd$S@m{ITUblJyMnzsBo$ zziss`mC|cVJV`k6qX^miK8OXLh2P4ZrBIk`RD|l_fcOIqc6+uG|3+zE@FR&y7=?Ry zaxVU8-bqt9s)1&@gAETMe_fdcc<&zkJP7WT3w6|ZZO0nWn+6zC*O1F_XqT2v%SxIN z9iXXhv8!Me+y)Gi5`9(E^FZq!L{{|>gdGDvl^$r_2DB>+dj;qN;%sdqmpu=anma)B zFRT;47$CrudXy-+um67d+*7&0 zc?{)Usr?6W7B_y4hFbsPAA@t}eq&-R5R73`?xK{Cy&Zlw0C0fFoOXm1gzIV_p$g21 z?i|k@9ZfPWHg&osxKT&s#2Ipm6O}xh zWNv_;z>)S``zX<_9NQ;J$ zXvlAVJq$8@2R?4c`~u;($dZ(bWMv#1sl61wJZb=?2M2}hg|e*i2s9mA_LDsm*-7h_ zwR6nM;Vu8e(ERgrO&7F!+fK*i@Ip5OH}#tgb`zls@#oYqh^FXm_I9G6OvF1*@MpW7 z%7yFmjB&^jw2~IreQ?Y`$0%c-#p-&KQeQr;{A4!jin<@Q(AQ#A5cI5V1LY`QTi-3Y zgV&u5t*Oattjr$w#)X|PCkQOl+-l3eFaGFyDmia|!4})>?>s*@)1Z`sb@W@wr<>K% zq}})aKmqqgh-I;5?2*TwGx*gEX*iXk6oK(vt;JSf;R97fhp$&7xr-Txf{KmB-zvct zFR!`TJ6!jAm>;Nz$Sy9bAdUW0$ocifB@WPTl7`#kPww+_yl-utFZ*m$Js8^4u~6W` z=iMx&0m78@e>cj|P8o&%VVh(o+sKgn zR?_YtOC7RPxq%X#eGiieY-fLwfT$f>ys;l|VL6MGr;kBElnCH9m*=P2`4*q5?VvsE z&8_=SgTHF!`Z5JiD>0AbEwURvON_Z5PU1}pW>7_QvSoY}ru6wdxrhgC^Y04KO6r=0 zQF=y3Z@R*)rxaWdmj)zHM$K(yDEz|z0f1U2ZS*Bgwd;}%c7JCznop}y71$V^p^M z-}iD)t~UUee8FiZ+|q4SkAUOG&2dml)#6$)JRZ8{xM6`hMdr6PIon}jWO7nfS7HB% zH8tU$Apqs15q4Zbv+^L?RToH%cUf8DPm%Xa#~gd$*;UULUnDi2ksW_n`?KnK$rh_@ zIN-G?PBou@%ul59bLtx!r5QaxrtQv!v!HvQBcwUTb*$f*%-`Fq@_0F-+4M^9&h>VWXj&cDI>P zb00P!1HDyGvd8?(Uu0WPk9!MjTmS(?4?(_c12-EyDCGO1mJXyCM3DIGJiCS02jR#B6;eADkqf%`@x+JB zOq46X(5yzm^GA>aL|hE~;wwW^+&lXYb2@_Bln2gIZ-spR##-!Se#Lg%x{96>muG@e zE?!j$pDQ8av{RCpTS_q{RIC0;_t2#K)hO^BZpouSKKH+#*ZA4x0S4q$<<5 zEf;?1QQ)~hqm46+6L^K?T;S*6{DOXcM*Wwc-iE)Xcvgp~TfB_)Scn1#gS5DJpcaTO zy^iL&KLVaAK(pHZqhe;4!?o9z+feUj^-@L!Ef;+K0Kbu09$0tp?O9QT}LNw9GHwCn)$d1#cwEyQHVxr`mI>l)hX6i(Bs&GlNk#24jBFPgTd zH4dlRqTEFHWYy#=B|h{0foJsSU!5#q3QDk*7gV`V58+WQ=sT~N0rU?=MztMmltw{l zeCMmL%x1DXzY|1N|MZct$P`)ZNLNd!%Mv$U1da6(ruy*Ge)%-;nM|>s`YmH~()3NK zsnCn#P^g?#=XkyMX-n9=Y4RQrpckfPQ01~ami@gTF3n1Y+?#dE`14ADO{H&%`}Jcp zN%g1nm{wP@9DDY2SIgDFBs5%<0YVk79sIF0*Ta;E;Y!NCu$3kPWxlaqLS(rNA+O1z zZSpZsTrUoq)*o8#>Jndh>!?&+Vs2Toqtc)Afc1Hi(#ogsnGeCgQK1Cc|)^W4vw6`A*0a^^R}ls!w9X9vp&IivpC4h!(J?`-Tv$cNru9m#<-;Y0~b1 z?$*m6;J2)HR7O0>mg;a$0M^`=<)m6^+|rACu@Zk&TDqt|&86yYyz1(Gwr=Mxau6>W z`UZ8fcwrMPx~VVmd`cX?Oh(v^-=NOc)=vfhi#6{3*0AM<$Z0~oy7aEarqbcmv=qm> zXD8mT6^%b!jz|KRZte)>9c0 zjznL?{Jyy#B5d-~Ld>itK@h5^-(B6YqvuH7Exqn}mjk5cSv`|%gRExD6k*iMZ=dA} zrGDqo!46Zr=QWwqI7;nlsJ+ zn#E^p_nu>)4XF3~f)0_;o>q_A3HW7n|JH3;@MMbpv_^@pt!=&7C~#;ben&vhHx}DI zac{c1+tBM#DKJ6=d&7)y>=y%rLHWbgqViQsx1Q5tm*0dqQHN#BCU((Lv!1o!bk)Hx zeKtMw#KoUKL{3V3m)Rg$7+-nqj&+PV9?s-w-pR^8qc*+KjYwI`Y#8sC>YY>}IU+HF zBm15Dx(9UJ!UnJZd)$~Ur4W0$GFOQw1cZ9?c=pK?5^cbvOFn0MWW zc_AKq$=fHk|E4g%iM+?B^v&(~vNPh}%J+}_h-Ua(ZvU|Ha(&pMjXya|MVhoW>gBa* zGFa1UKgG^Lv^C5N+FYo=<$OcvnI(+))9c@LiDNWGTF_^);?QEJdb4fu7}v$nj~OM) ztM{fdcg4>tF4=vy^b}?U#tb8n;XxpnX%5^(N#R?jN>QKv?DH7xe1PHm<_;ncTcW8m zS0KBjz5DrI#T^{MyM4gihn3lFo6h^-6t8XhwW*+Bpu^Es zOvbf$ttgbf{TzyfMJ1nnz3dlc&PyK-u>S<3(W0v82=8W4AT zPaxYv`hQQMQ=e%{QqhSRaR>LpB$3NJJ-mi&5rd!Ok0R$u`?So{FLYWztzHr8sN?^C zUr3X5cA+0j%}$KWLEj3Mr<5CYn;qAU&8>Wn z>ISPd9$}OZdonl&cf`Wr%OGq4%b2NS_oI2IC_e(tw9@Ng%J=#u$jL?C@jf>>9A2R{Hs`0T8#qrckWIgc8$??U=j+vNEx>zLd=&s8BS z)&#bYwWe(tvR|e1T9bQl6V(mKvX< z^FhikiHJci3ugblys)uMVejkin`Mtxx2+H5tq0{56sn~Dx5yUZero|}>}jI@kGS;2 z;C3tuA@T?c0JMm6z7;7v}T_(RD$G3e&sPcd1aPLj)Jl>$pe&vY72O}c!i zla}4i>#S3sU1{oL^!3RG=_n#(l|mVKr|qQmuz27UpRhea;Ve7A^8+xuw;8Aq2c#=Ey;i=EmXdC|6_E`q&O_WSAM;S-` z@inCEfm5SizeJwt1!7BI$zkOz0cbdFtk4A~)^0Z%<-IESTLeT?Z#4&Tzw58l=57~T zJl)XCOBb<$+0z++H;pK9 z`aK}~kw#kTgsJ1SP%iOHaZypSEHf^3T|0x zUHED>3!Mle=#t~)+K76s4LQ&J%fm5-Q1t3UzL!+y`!0XvB=Z&AyXC8eF6)x>%csH0 z)5Y62t{iGR$XIEMyuZ@wox{VUP@3=6qzoh12{?P0yMu9~+(Y)R1GvwLmm}*NZ_(f1 zzppeX{1hm9znUog;R0YS_`vPUcuy{|HX`w){6vB4$gO=s5p?R>aa{C>agiWaAL{?7 z{H#x!ZchEK^Z(%p{LPb&a}MUTNxl z{BOI`U!YL0TVa0)b^AX!r3(IIh{RYSZ>;iKyA({S zjW{9EoBwW=9VFa%roV{%M*g1!PkVqdZWzSO`tCn5|2;>F$%Xc|SKz<%VO&Fvl;Ho@ zjdJ+XO^hu16>M5|hai22RSq49648f!*gyddme({go9ABK$;kG8-jX>YzFG%{wzjr*g(_?S&?o|0JQ4#RPTEehuaU5oc|ReEV?bV3@<|9=U@w>7+Q{bnSSCLjxBVgVR%!b{ zOIsj&W8d{~4R~2oT3Y(5;lu%x?VF8(OVx;5I|6G!oj? zwea*pc)k4)-&~)<#iHejP{DAGTk@@o#Kwj3Cff z&mS!CICEOu$9@5?A7O_>0?;U$jsK-{3v-JiUn}>40%{5n2&{|uj)pXEB`9RCx6(N~ zsC69 z&rPE6*G|o+$w?j3u9{PNdU`8;`sh>t$>#J<%EuM|C#`s}sP1%CX{fJ%E#;~aFM@_c z(O&CR#Ldm^1glb^UK|(?{^^H+ul5c-9^6!D*PL)$PnX7al}ZvDxK6szXhjioh=`$X zKBcNjsU_lC9nMy{H0xDFcinGu%suYOhK$6Q zVplBRMtE5cGOxxdaAD<2+EM6gLej$T)O*$Y07}=R zV}6&eKIO~B-+|Nd&Ld)Cs#B$y_F>5L_Lw)kpItbIY`k&9E$5#;UTh<-_^0!VmK6>S zL83!vr^{tBl$Dzs$R#Y?(OjmH_sai%lM2RT%6`P3Z)GB5GCRvfh|P ztbAXCOPt_nls;#+atsp2YO8w<=a>G_ho3L7b;y`#O%@vObH#&**bI=KAQu7(YF%iX z!)hmsR<-_u40G@Qu3Mo0FjL7d!cWn%_G$t4OU-pr#>{5y`=(F17>_3&UGQl1>XlSI zB~(#0`?Ws-3h6QQ7l707XR^azv!XF#{VFnN<%4za+P!FQIGWc2Q|Y-C+-{!opeo@? zyADtE^l=sOu*zma^LX9VWuRqXKwfjM;G7K8wif=koIM*j0Ih-HimZzM?XpV;EpG28{X+`hDtkLTwK&c88OUNveJ=6 zF-~}St^@sZ+gT5$Q5vtq%2#Sd>N$XY%QnK$?`|7YwcbT)+Fv60co7I$N!u%> zfJ&Z5h<#b~+KQK{#>em6j1jb7(atXrxR$bgA1fKIIwiH~4Zr9pqXXwjhE;hPxzI#d z_eT=?LIEEmakJ}82eb3N>-&Yz{=5+7Kdfw6d3zr9M|C{7nf5FKnTnM-{lU$uFcW=z z7uaDrnJ=yuQAQ!hphrx@1tb3FJ}8?a$V2g(bOk05?kKrvRKRbF$L~m*%Z6UqpD3X$k z8mj%wB#?S1T0>54vp^w5hk(s>8PY;?ZPjzMJI^1`C5QtO8jCFAy}9-yZU>FJ zY9T9$)`|mu-RslpD!wWpLAj5y!q@Z3(IaI?*^9Ge;kn4nSGSw8(HL^U#n;(L2Pb*) zYP>>1$*jCOMzhoJA&+i_u~!F>-EMis5M!p|FaGIWL&E<;Y{SyWg{wk#Qh08-LeEzG zUm*#=-T0q7o5{!{jH$YjdDa?Wc=>TzNj5B7;6qT&uRgVXuI&VHYxc)**#d+mlb6W!8$rRX=SZarL=C3Z8Pg943sHhgR7CYZBHiIGjNKYM405`yCBPDRJ)?ACaj{L_esj+%oa2ewAjX!v zW?Y=6KezJwwR}PmII8Xa?xWhDBjb8Cwkr%t%%WD)da%0JN0q7`h!^1kbsUu$)mw3O zt~TFi!y1}yuBT^HI~W5QFp8{%C16TLZNkuoeQ!J~C1#L6JrB|6N zx%t)7=b=G&Xh@R9sE_*}pE{#_0@25UHEdG22h~JvMQ+GSlyyAtaP^0%599wVdt&4t zyo9F5*78!LJ_@5}dQ86ahPHqa9jU!dNYmWniEANP+k0mv(0!zFZwF-wj8tjA0jW{b zk@nNN7177gWTeZ0L(A*ntc+zu=k) zt8XR7AF1AEAJH$Uj*kTq_WVU7UwfLX4chE)Jr2=VA)-`gMd+~`)=aJTW~HysN^Vsn zF^l>OKD5Z66gs|(%&n+}zg8~ozfa7$-+E4esJ3PB@`uJVg?>l1GqIO68gxb-HSd&% zyQbb{dY2oG&rnJuG@p$YQ}bO_I=%U@O^s)wU5(ctq~=^Ni+KB1_4#W;A5|#xv;6#9 zWplDPZcn<7#tW#kIO0J&CCorUa=(&PH58L)Hqt=Lj++^G?cxG{D$(S!_O!5CKm@P`E zVG8lsBJY-TDSeiyM6k@ACD>7rn-cH%=;d*Jw16gapmyv3QbtoCgw(!yeWiwM)<|t* z@)lXb;Md4Vb7<$FrpOf%Z89kB%yB%@O!$slF{Fb77vewS$J9fxV5<~Xa|XvV$s1~p zA5D>1jJ|XWKl^|*ezB^FY7f-dv7JO<6fJYj(ZVxbHgnZPuRoUF)4aw)tOel&n)+QC zgFE+|K5IqBg%2^kX{)DVe(kXNSf)tlTOV#_Dp5St=A|MxeihU6x57}Ggy?y=6eZF6 zuf`eyDX#SEUErLdptfu|Q)y3SjB~yfE5jxNlzq0>07m$2D?DHTI)^plN|o znN(eE>LDW6s>0_NA+NavjQ{*BGWpo%x?ivQ_cVRS#+t}8G})&J_jW3HS8(-iEGnL& z^L8U@b<%^{1n-UX5}}h->&Leg!WS{04Vh6pMQDGl(oO|mw4ch2uBtyQ&g-Q~yw}^J zL5Zejl*r3uIf&w!Y3h17PQB9qVT?3BiX0B%vsC~=%Lc`4p}SJI!&x_C)wjg%`$efD z%gyZc2Wl}SazuFf1-l7)Qg3O^rO~;oWu1Wo{8lvPN!YDU%dl#FXoBmNFn)iN)owV>I605Kl#gfMI=r9C zK??gBX9ihn+MWIAo~Nup)F0vtzpFLKJrv&4#m61!O_$gBBOXVBKlE7%-)$wXY70hd z($nb3V^m?`?&s7~S<`Y+ll)f2zLoUrve4`V66`TAD8j;!MI$;OO`3hVOR+emvgocCiFg_2t6o38mj5d63@eX}>iR{4)|?WapEmkiZoY87&BG+AzD zl5%V%t;tpDrpZ?Y0(31*C9^Dup{bT6UwL)2+p!sE@o zkT*E?%Vl%ikEO~VsB$xZtI^Q1pM7HrEaUgM(YLboN6?b)@lf}7SnV1mPYT)iN~`H2 zDlWV|SKglF;D9--HdP@=BVeO;o)_~!a{F@TnR<)qv6NW%W zNW}@VQ(9#g7w#e?USs{>SGZbVXd!S_XXLC%fVA_TGU!k0ig7f*yA!*b#a~0b77lwA zRPir!!qM`XYK4_k*1t;4wHMSMyi`zS+~nTR6AXF{QHPDIj32wqkK2n<8+L|Uj7G$W# z<0WOHj8N|2J>_NZ6{>!AZ9cmB390BTauBtG^2~QHHAMS;?EVm~A4+ITeU845@%geN zaj2loRd2+_PM}*750}p^wyjn=TnJnB#<}@UB?O0oBIqC??ah)lB6dXq~Qsa2&n zlVOu=%=3LT4Xmkb-ZQ? zI+|)6D?a7&tzPxU1a~0$DAa%7TNRNVOk#C&Il$;`y4iVLrVmC^HYqiEuthXU&rpLf z-tIuTAdvFg^_9UGMm*QD(R=%EFA;?3K1@BAM*B|lmQVgM#G8PRS`g7*y7o)p{|s7? zI)OWD@E;MeHJegvNZ3l4G-B|{96{7!;Do`ILc}hc)pot+^%hgyOeRh_l@4sVfs z3akiT_^P*KA)2qIE}v00T$_$0MK}R98GSCx9F&d3*?b$DSV~m8G<{H49xU2FqQ`2Aj2yTxVH%>)Bi-4`o3;hxu^LBF+cG(%g?=e_c)Sk zhYaUO*w=TWLbU4>UC*9~8_HU6Eb=j4+}qX#&yAoDU^v!&Pt2pt{|M!W=H7w-Bb2Rj zLV4xKEa`g=Ux3J`zK@#nMIzkLrKC@N^_vi=mG~07fe6&Jn>ik&C|zUv^QXAT%kK;+ zr9=(L(bwYX&Z#Am{9b;<0lcA}xW`4O&)x~M z(%IC0^~6HWbFo;ksm~~b|I8hesl01h6Xm;u8>u6`oroRQBPa9#|4^|H=l7h7J%UC6 z^dpbplDtZx?ZbEB4OTH5HOIeB!^q(^-PebqqllTM<-4|=hYA|__GMoqbH#_pFxEo& zHeZi2f*b`-zW&L%mUrvanq-E?hSi9s5*5iya~u`$&LM8pPeiaz=#;);s; zy1q%8yi(@vvI5%%-szXe0HPHFN^O6$M(#e%nZ7aG8T&sfN%q>mnKM#qJ}f_GrOk)l zeu%2u+k3~tQh_XTW(AmQrD~}fW+&*WgFiErQ*#4d+HTX*LetVdC|FyDE0>kCDzkhj zV~&WCA7-j4jV!OJh?s&`>3x?P9QXp(zau$!Vk$gfw=XTXx1<7CNt!rc6WqP*cbd^m zMz-sTkc*Hz|9jUW2p%qHb|?S5_2*)7aX9T&ROEu@SKKbPl6pFJhH?>h>gsBB2oF%u z#bZW8b8ebAH6?|7zRUM!W22o~E@BeRc1fRa+@xUuXg!%v&BWB|2Ol%|!_tyhSlC=$ zpI^KB)9+ZXZ-9Q5)RC2)xvH!}K}U^}FhgBU4PV_rm%zXPKuk_dO1@lgt_JCwk93)u zQupSXo-3NwATCNxS!}-;o=$bXxY)2cBu%KyV{ZYJ@L2WJZ(C&vBF8;vcxXzSJK1Sy z$SbW>FCJ$!Z4u4P%t_D8&LZ3HPcgQFTAKk{UwTy|B7UC}CbzLJ9x#`+*`C*Dy|jb4 zv&vUjhDS!IL{!Twm*(*LOS|sIR28(kDj!aN)y5|$O?^*DkU<8t?LR1GH^BCxXXml@ zwF{zG&Jp22e&%UW*abzKp*X7tZy=dKU;7#4xCN54%O4{)_S!$tb za~rw8n!d_x4i3&7Eo>)ky?WFd4?O0?yfe6jK@wBBru!X+#*}NUW(3;2`pcCx_y3k@ zvW6Uh*bcm}_LuE7d`xWHF6vt|8FL;ytrcDMdoUQu1g-wo6K1(@Z#T)y$}$W4+{X1B z3u<|g^OS;rV?>mF8u-xU0C1=rpSlsvH2A7vXz-rWRCT$nG5P>p0?=qocHKidB<0_3 z506}s$}2>%q}DKV62=BmA z+5R?$-=yUX6n#7TZ}wN%J52{?&(%c$WL*`_ABv4)8BpXX>OWqf=yR^{oQ9S zl3O4+Bmz`Lz9p5-7CDr}g07CM%?p@B1KGT=@Mb?>@caA%6E+5(tj8~q>W#ffa!3?o zQE{Qh&en1Le41GXr+*prbeVc5Tr#nXP?LZ>>j%8z6TJnwAz}x#m_R?$#P)uoNyggR z+6Tr+P*P-YvAnryO$Hn)m&9SAF?~Nkt?(clghK#^U)0 zoMl9+8);-!3Kqf4SBE;*#zmO5Abd3OXpc6`8D~nhL{s<21Y6VnR=VAt<}16}4;8%V z;WM+-3wXU@3oQk)7cWU?CXC&HGd$)yp5BjD$wcGqKfmg#nZG2Q0W{@x97RT{n0}H0 z_y*Oudml&F@wjvgL>1srX+%l`+?0L;ZB~cv5i_w>#h~E&X@IsJMxC2G6C<2-Lcd+&zmX8N7iNd{b<-urqgwk z#scy@i_)p6scIxpCNWU{ECi&)cvLny}*L+<--v`F6y{oiYonv9@QwRuV*&R&b#6b}`m_ET<_H zs5_WB06B1L`BS+Fqwp*@H>cAzcjMnSWu@j{Uh&zTD|6^*fK9hr4@i_*&evJu!sJ$A zSw+=Dbyw;#g7*oAo{X?IHh@Kzz}n9OVm9R5M3tsvZI5;{MhcHcbC3u{8ol6Ag^j!J z$dwSF)m^YQxsO1~PyX6D(di*I%72;j#RNhg-y`;&+=t~#bWQY#WN8QZMW_#{gYb{< zcyVb=K3Be~)ENn_sb;Rj?DCDEH~-$iBqb~Mp7n8rqh(a9s(n&^WV5}>^MHx98WhFR zj9a+Sy&=A~c*Z@GoYF=+sAn+^DYn~~I{397FfD(SLR!;QIf|W2sYbi@6_9KO6woMnb1bQd8_jgM|_);J2{ z(Y4}n-ojAUkwC=g7FlLsTQJ}&Ysaeb2v0cv~0UJ@U>dVl_{TXeY zx52zD4OIk7?}r(s=yfWR>g#=e9qQ%FR9Vh0Hf! z3GVtCy?Lb`tbP<~v}7D{BV>%RAgm*UrKO=^eE0F|Lo5B_QvXY>X1|VTz8%zz^95A+ z=CXhNRubz-IGX#Y=1WJzTGv*CyJbn+ZkVFr&K@4favk5>bQFTjeIuw;g1A>k&?%I3 z(f8AX%tyW-PL|P{8ki$vM=EU8+`SaOM-HUQ@QFNM@?#{zY&5ka;*uI`H{JpN@hb=($Ak8XoNHQhqJ3GNy06m82CbhXN= zXb&?$DAz=d3Wr5u_D_uDZC1mXR66oxcsjbdq)N z+1uWx9~-ysL^7(iN~FO=kcG-FS-RZ1cg(QmTT1NK-`-|7-*k(0?AYGgw(SB@skB{i zw6Spf<&1j+P%8?X)ZPXU>SeJh z+4k%+&$wiC$dF-HTv`H=O0{ik*H~O!tW`tk}bY_RERWK3ZdD|e5NPH zSt&^Rv{O#82k!YJj7dFh^#}QuIGh`p6EP*5w{EvptF~EdkoK;^TwAqzrEOuso_*3W zLV&DUq)Mc=3g&*@hIO`L)m9rcw7bomG0o0A`&64UeZHmCm)N4kOYC4eRZ>u3l}P-^ z0!|S6^vJYBj{Uaf?c8o@X{~J5l#gxQ`gPW=TNkUWs)A`Kw+i|ck7Qb2P;P6M@3akT z)>}?)fs@{>RxMFuAw^_G+cpRefVLewkV=;2SvFGTy?^*K#5tS27H^pl_O08uS;sw~ zr~y6N*v$D`EEaWL6o|iH&u*-P6*gqZ5SX|c+sfFYDyyw`?_M@_?R2l9fq576C&Hmi zI*0~{Nv${s;9nC}>r%Uj8EP|U7Nkw!2MimMCQyiHjcCvF8f_!5X+J^KdC|2W@LyC6 z(PCX9CnEj>xo9c~udf^e`!(Tdfa8l{0VP9pTEg868x`)%wYNU_(9Svg3?z#<+n!&J zWRuP&YGZ>A9B6O8^qOU)r(0oBk!5G3+LTF?t^eRbmXVoZ1tlQ7vPw3h*|2_n?2}28 ztXt={EKHDQMVYNyxY*V~SX#7bVQHC26AhJc@%1*ae;?bnd=-oogsrr~YFn_Gwr#bg ztG8Q2{34KJ4SygwU&$>Valv&Rt0xh3_@MKW}PJ;Jj6CFTW&ePCMhM!wyr9&la3o@(`U@! z`6?vOY|0i{KI7}ttEbJMJkd5oFgtYWj*2YW211?u!`*jVR(4C?uYuX9u_eovS=-cP+q!wPWpwOpxx0!O z?*ePnwZFA*+uF8+*efbZgvD&?w3(KHq*+1zMF}ZRfXd6N?Bs8qXs^BXwzWu2v(_*j z8#ZpX8tOlct+(L)cdZbFRt~N!Wh`f3_-z~7e}FAvuE&ji6QY5M4`jA+{YHzgD0J1$ z&MLV3k_v0nsx<^_BWk!ZRD3ZIl_l1yO&eRXWU0j!eT!akTNjE zHpN_2*c-3EX1Ng2GS)(V!7h92%@6Fzp4nC&lVtU=sg}QEu8lbA82fDUr%0IwQ_>pZ zoo^|Be894P_LILOuDXO|E2>UpjiuX#-@U+AA*I(AZ3q5whW*f`l=Yi7T3v3Q?Su%e z%Zaj4C!cB?*R5cmWLoF0J#K*rehp>R;w&K99Vz|Cnh1@Q?@cW*;;jKPZ>6PVWH*a1Yi_ndP;pj$02F~Qzlw+6lPE)Xb^S0dapQd$z6bME#Xwqtt<$S&TN zLL@G^_iHvx5&k#Kyew5{S9l za9n^xUW@vrg)JO6(GECp5ULWC6Lqmj2eEeKu}9m~$y2NXHBK2wf5E~WN`8LF@-r7<}CQ@m~K|^iwgmEwiNR7;E3`is%gj!O!+1e!~q4tag!Dbj92i9xg zKwGvHL<};MvL!34g{5P#E}+fAt+|%jBAszpS{`$7`ISFFJ-E(twk)(F2x}XNrmm8- zOxvEKj;XL2^A_6rwHsU=xC_`PL$sH!SYsoPI@Agw3<;=rH|19#WmWKA zyxs7tU)ck9-(fqDoP=ak($g%hb(XDNwE_DR>eZM;x0PWiu|tL*Ve4Oc2}w@mE()on z5@Z-_ahGxtSZAOZzgwfiTlLxV^LiN?!3JXi@&9~mSOjNM- zNDv!0ZnVx_x+2xl7u1Ri7cB?&5CO(Anf24DV>_e{i0{@dwjNlepFP^P_2_Dy?|;a) zb?a>NMvb)UvG3S%r=DmNr%bWK4n544ZC`~d5C)04kSbGlqpDWXHsh`LtRvD`Y7%2k zOSj~-448+lJ{R(msHe>sNhgwmARd^E=m+bPAF^%A1|&&MwpAXXnv0Ry)%yw`(COX2kuLtwuqJPAm}6>vHgaB$0)t+eybKhr(V?)>eqEjMQ; zQouX5cEt*85XE-%vBx+<9sA)pTY}_rG@D$KQdWyBkYpZ`zzUFOk!7&CYw8jqJPodc zFM=z>JIW3_e7F;^BZePt>(;JDWflv!RBxAFb}5`vP%^Y>)5!eWltOaU~op9)D*KNUmP-}%{dGx2y zo<K(8`7mJIGaxvfk$KUf)5P*1Kmfx7plt z=OCNHrY|oo##WVLqrY{seK7uGS9{bUg{4A(Pdf2u|E0H`itzZ9v_Q4ns6a*(5=`aaG zn}c!tf^UBpyUJqb%P=5E*$p?|Y(Kg7hp21XyUL_n*RIyDZ(j_})%K@9{m~|UItdL{ zg{@n?!LIq?6?XUEp0JT4kF!dii^Dw>LR&|tTLF(E2y!`dm5L-B`_*U`rvZ=2R{ zK*CvpdN0ZS$QtJ?b-?c2AH;mt>X=h~{BIabblb#W=~0P)+~ZnHb?z1JnUfe>)qFYSjv z{GLl(1ES(>+Qe}}8nE!$dRe2uHhTC~WpsG&p5-g(V3ac;?d`4vlS zsIswdzhz1BiT2W}^(NKZt^y=a?5%CuwzVVK1FM!Sv%v%V+U$uRqJ@|a;mfjhtcglg zj(+X7)wrsSj!7dXhaAZ(&<<#Zq#%(U2{RBH5ft`tfZ$}`k+g$UC%Pg+q>doIW;u(~Sr)hw`?Gv~0P z|tVE3kB8f{x6puy~ zwgc{N4F=G3+(;K%|Gon(8&%%6O=~R=B6fJzVXpS70BNp9-(QYIQC@<&4#eavmE1e& zlXUt+Q2$9so`8s7QBq_(LC{s`yGx2{Ae4CQxLTnBubx$Q^oS$;y>iqrrA6rdSFNxb zIP4v8-k*H(p`CHsY0ll3frMqlNr2E6L!i<#vTVk*DOSK{FDq@Z#~yvi&bi=xR8(s% zrnbViY~O1A(t0~0O#mtF1dbclt%ifIv>ShUBLw|Cn>=xf#i!vEk+%avUg&B zZr*k)szPP7agE#6sv$-9PI^#I>vp&q4G=5B}vZ))FbM9`B}>5ZJWTbl-Fd zlrqz@V(Oti%)C zDI*1SWCqe%j9k|=qae-1#CX;VYY_r{*Z$m~wOX|A$^A|vL>agEPO&N_XX`9`JJx#bua@%!7|+bgS8J7;<{KFxENE}dZpCR`v@>J`biR8MYjCINy+U-0bcy(=u_5$$*%MW(i8h4>iq;GN@2>yep zhmPRhT zzG4XM*MvtRzQk-96iZQSJ^T2RE`Imyj7nmA4qiyxFfgL$jZ1g+fFj4o%3iQN*Z%gz z6Zq{Pgt5LOuA}R05xVzUHqjc?7h?URAW-6{uZk#Q}aJ-`owE}L>;=;tI$+K!TsvJ%2|UT3D5Jf$K~&0 zM(CT=J(9ALsB8SVkE}Zq6i&(@dY+@6<z&oMbhjDPoi8+za{<~Wx3V<8^vt*)Zf zw&mjKCGS8GaTL$$SSv5S@Vp&)#9^#c940{C(kx`cOcdnf)B(e%eru)1A<@m5zua1m zdCi6lJJN}cB#Lz_ms=%{4Y{S*x_b_Oi4|&YcBnc+04)E(n~M4%!V~zsiBTRtE#vIE5 zAr{qbHQuiEcKFZ(?cDF4?UHyrgj`H!6;2gn-y4I}Rc-SYE_BIMGo1jlSzlW>xT2z> zu!4i?x!bp0f;#caE3UbEzs8fkFurEj{s&NSQdD7KmKG<;0cp*r+w!G5Hgf~&4XaPon z6yg)&tPD?=ZETJxq==PBO;YJ-yH!>+SSFh(79F{mEZJw0`MqM+LMuf*(-u30>Mg-@ zuBx!ql4QhWGYE-7;oPuUur9|I6iu|%s5{&hx194waJ==!wU)+)k`h2no4iO%winne zkl4yuvydVZ*?_rTPgw;LAMfBV^!M`#)o_EWr_ZtCmFsbHO~MvcjIp|$O~-j7xK8yU zo7Rpc9UgGK@RUA1=d-XjCrW9IN9s-Scxj>_UnIU7hdpfYk`aM zcD$+Hdg&P}K$=U1!NC0q53skBrf zY}7RFam9PTzUC)(^DQ^Ib3t8RK7F2OZ#?{jud^%&qEs~^uyMd-+Sre*8n|71-OqeZ zK1DV7^dpa0NmYZT%axwGWw1|TF3WPu?C0OT&@Q~>Vms=XQTF~DuXDEN6{M&J%K+gE z5(p^};u<_NIcxLN>+SRtMq1AUhG1x4XH#%=*jZR**`mlGdP({*I1$uAl>U1A-IkG< zYzadTusobHCcgKcquf4?1IQLv6O>9<-FOPjt3KNwD z^%QXzxMjnSVh(S*;z}DfWT>^nS)-V_oHc8z<+JuvbRLTNmWnI77Ua)*n*QDdE64uT zfqk|QV}5TXX|>BM&(#ICBM>cIvWyS!~uk;b0^(Yac6g;(=JV80_g zQ7yCbonhp1Nt$mu>ktJuI(1bU2jnVn?UWaq47?Z}Ks@e3$-)y~BUM&bMoYMPkOzpj zxUvvLBLDw5oD*;@MZHo6a!$=kL?`FA)ri2A&M#rZtz4<{3iLKOGh7wfcT;<}6t5NKfaIG-jP~s^uNob{youDH?UxE1xX3S0?;~ z%@3lY&2o^dMg}-74&+%U2}e@{a(ZLT2lnRM?>iC}cUld+bf~f(gsFK`Ibk`3AzQwF zhuwAOAJkngRF85Dpny#0>bY~+j?C*(hnCoVoYRQ|E^?`_;#`K@ZPm{Jz944$r?%iJ z?8R5c*wfFxf(;+%3Jd@`XvqM)51@QtA`d6}g(P$LJ@?sL^x!s%R#WQjK zvL!~dHbJGqC}k|Cd^L;X^|6yI>Vt{CK5HR%lH+11Pb3QvrhY?U>AO4-W!Qh^wmV!Z zljKsz7}Zrbv}@gIoQ`;FZSAI9yXU@#X;+iw{ELrG%uo$&%ZpOdemwvwtcd@rM*Gw?eVNcZ=!{o}4AC1(#VEtD6 z;m>Y%>8lo1g``Fi4((OJtThttlI6?nw?F-{^=aGEMxTC$&HQwNB_h>Iay8D)NwSoL zUX6NE`m$(F-IiffYG6_XC{ zoM>v2QuEHd{Hig6On5av1ok_^BM>NDjy@|;OB5%{JB7^)@@fFFX;Tywm$JxNWDpS< zX`|q5;&^MRrUA8%d)aWwu2M=_ZF$v87!bbm9)v>CIwJaKArU!2RI@RN9AnWeda0pw zxGgGyjYl_tjMUaHZgxLL*I88{^Bf=~~A*3%jxi=BdohEZfYOEMPl*4^-whs3| z+A5*1?gA@<0W1hU1VThDgo;!Gj$CC$bmRCGVG#jTWC^LYgiPRIeGVe+i}(pKi2$o1 z8JLCeA_0@OgWG(l^h4d#JWCR&qHSGqykFt(1Vl?`Pa1T{SjbZ_q`v}|)J!qJSSl>R zuE@a+fq;l(hybDyRifsRvLe!~9W5*M$>)JO!~h7*7cdqv1@$1wX!;VxIw)t%`C2~^ z@CH5`nCBoujQ3oF@IJ|VPDEC)S8cV-g}N!*p@?NQ1ks78Afsslu!540SZk4T4mYVC zakx-l^-SxFfFCX$6Cz11v9BcMP_M%aV#-Z=%=?-@txGXh$zHpnc{FI9X{;`8McFgs z#$yBe4qmFL_OQu*`q5bH(YlRoUAvaLDZ)C5646lm8Xk3sX=3=^r$D+vb5NJ>FsYX} z9?wNQV_-6MjxHKTvK|Ibj1fTRJ=s;cUtOL(f809_ExPxWoAqyd_UipRfgrq^2Lk&g z;fV}g+={q;VFe)~1!NN9(ybbKK1qdw4M1zM2Jv1+#K9+G@Rv828y0yc6-Nz3AQ2;K zG>fuBC-m7YMqTl!P|(g<47zgPbi5yILTwjeTl#=1L-nbB8OEjUk^84Fe@EE-qb=kw z*H6cTe8q_-sp8)xx8|Pgio_O@}x`&pP@Z>%0t918B|a_mS2Uzn#6?I^_4Cj7I0Yr3>3>4&3ZFv*j3+?k zG2S2lFW^em2N5h0F-K(l0T>`g-Ks;#%7@~3R)|n2Q8qHKgn9!6sAs^OccfMloJ7oI zSXKr4rzjG-gt)|L)Cr!u`=z=eU+y)fzRTFH`h=YICzG29r|MK)f`y2K7!46ag?ot> zGvvsXdGz^`niSP8pD|ASsoxPPb@+hP=U{wVeIoEw?Fd`<14XjR?_Qfi_WI}J3xLAc z02V>7C>)Gi<$we~DNB2jY$Bwll* z$rtD~P5ck=`PrISh!G(P{Q)KTR6m10`oyt+r1FwXUw|6>&yPICf!EH~txE^1$9`6o zS`2aL9r_T31S6OV##+zXN#YE|Ja{Anh>Gr2P%er!uaU~5G@5#}cqL`a*&`-4!-gF@ z0-Mwt?6KReu3)<$ZkrY_wEB!Rq|4Y$2#d&;c+gPSzsmr{$E~|-B(8bTp$mmTlP8&CVB1@W<~wRmgA z*_4S>@rWw2V@4e6XLn*j`ih_M&U>HmZlWD?)bIdNvq{!)`g|1*5rYrtW1VoF)oJoL zq_S7u7z56ZwG)p&3fmK2b$CLpMg1^+!BXqRA=5z|UR5}eYCPela>l5lpu)~R?^_<; zCl^C(OWb{59`i14z%6l&?GG$cAa+&6!CG!Rb|D$^uJDe|6N!N6yDs4dp*#@>ZCD{C zArLJX6_ct-@OCY_q)9%7bfdjKkStVBv_$o&h`g*~#HKnz6Oz*X06{vlKzT`EZeQ?s zL=g2QP%}9Zp}eDdA#?w(ro;?D+;}dvmbiQ&#DJ^kw-B7lt1nIrgn$FYDLNM5|A1>( zMB}`y%q{pG$#G9B5&;R3YuM`X*^lQm-R@z9;d5C}@>fFPuSq}$lk@$YhI zaHX9%@^BkIVw8JeZR3RbmQ{;w@%qhn!8xaMW<=*WQf%e&1sG_T*$KxTZAWoPRQl&S zbk92}U%RZ-&f+XaMn(%ieqabv9lef}AzpGnx5w(hRI26f?#WlM;}(BDRIzNj?^9Hll{xpEoC>S9ix zkFw4kJK^?B2p0~`zKoGxgzl1yF7XXVRA@_k^ErF(%1Q11lRsELgbScOYZGdET zKu|4a=nY9kue z!z=GkAlBbO9?MPV*LD#Lj!5h{3{~SOlw#?q&ExU#)LIs(T-p-c5Fw@3m8WARIzid8 zX3Sk=!!u)S;q4z;(U9KOsY_4m(6I{+HXSS$oY8=BP{a?Y_|)yob?Bjo&g42Y^3Exz zoHF)>7hbq9Gc&VLe_gwF-O#C1r_JxZ_ui?jfv8hYJ@q|8Ftt(nIdkS5G=BW}<427e z^>O1ikqjG#4<9~l{rdIYwr}6ANb8L7i?4?te)xx64}Wo~|NPTtB|LLy&-~rJ4?l6M zq91GdiOZBaLu^xxBN-MIuo5@whzH3;EN7sC2~;)W1jRk+xgtylzV$*PY-JXp4Dxy{ zBRR&pcWT4psgKY%5DTilCvK!rnZKh`bx@rc3&wbj_RA`iN_B zf8JrWo8KfHPdhtoa68UJ;HC>9h^gCU$;ET*&_V4jt7IB+wT5tdy@*3H(`{(q7M!(6 zv;39ga34O;V`61SEw)3w0hgz?K6Z>uYu}Leee`byyecRPG{?oZU%eHvVuDts4SPxqxE?DyH(HKnVXG8(hgjjmQxdoHDcq=Q=gMZr!lB{;d&-0%|^2Lve~UVm4WdL3$u z^HDCf@tY#@r&GJoJAbztrbI|VL{TleeNP=1TzMiI?f1P~QgH=Lg6atP!+;=Z{zNdG z&@hf@Ce?``n^)(t99mSSIdV#*d3OLw0^%oLo*KGT(IRqko>3=Ov9DLI-t5sijvaM^ zt>>(eMj>WT%ttE3=i~$X(67iu2u}J7)S{`e3AoS4p>9vM=ciA%R?|OKqh=qCx2NyB z2aoJHOJUxm#fZk~M?p{PYqYAG?_zIfELgDMK-IW*?b;rMXmW|_gAYD9nLx66B0!@@ zkA9~q;Zd2XQ>PxG&pYn8v|`>6us+7L&-B>%z4@*>EyURuB_w*_xer5tZBJqldC_ONdkT z0d>OJz(%dxTxjJDS!O%NvyhTes}b>eXO&g4kx~iJSe6j#M5 z@=dF#q1JX3M{%I8kVw;QsP}!i#AtWTUAVf?b;R)v+bk-7G7>`}s<{T6zG%Chdvafk z${hodYHKl7`L;2axNA8D_Pw+ESoxY~87p=j&Wuc$yTu0gYimj6GpuCe3b@QtY)Wx9 zW6oN;`po`TwDJ|eCU@C#q6_C)_ii=ztwSNGYsa#|b~4sF8$WfUopeYii!GTA*4SlL zMXM|)ztZLqW%=@xyIJMt4^R_fw}McPowCMGKCHXdZhzm(;;XE5%cqVYe|W<~cvT*oqGsZ(;1 zEE6)cMYAtNO~lwb($=Sltq2$Oi7<(<$ay57%Ib$;q_O+3DeGj&`{?lCJxKvRj~cGv zNZnGM#!8yw9i4Rx;3mmUjtn4Q))Fo?{1Vi3sXs^;(Tef`;+L39wP#QK^jJ!^^TC#RJTG^tMWiRl|Z%By_1^)vhEZc{NI{8;4_&97|+_ zt(GVbA5#-{C7uNc4jh8 zIY>IPwF*dqZuTF_ewiOfAAR(vl3va|_uSX+zyJQ961UEEyZWuqNs}gxBqB)a=d~ft z(qoT3cIB(DzIq-9ql>Y<`hr!Rl7eDmV{1i_4m<3y8E?Gt#@Tb{&K>r7b^W*QH!I=c z)HL)%D_e_D>p;s?znOe(0xfba_1)Zy7KWCpHjX+X^x`=)v_X8sfiRp<1)IlJ0xTSP z{OEfeY?YA1<+r}*sxa9?668(_($oRQU)=M7M>5u$j%KsUy;ex)(woPysYT@Qf}@|Z zhdlV~XLOsVY+P*`w->P3FS_v!xNmI?mM#5>!S*s^&UTwLYZFVE{)08;sg=g_U)=qX z6==f=Q3^T8!;Su4^7C=@Q}!tOAugDWegCsF7+}S*-ADu(SITKbuzpH;}RlP=VOzyDAW~lKwv&3UATnlun3^9+JuCB zfjgVd7a>A6yCYt0P{!)W+!3DY(8lM7kTPY2fVBC={R@eEIn^U#AmqbuUpJ~+ZRKPZ!;n(igIgAtW*9c`Oo1>Ikn+(66Hn5{k~x1`-rB2gN7ig zs5x_QLrE~|lhlviJy)8!vquyjn%ZC5TU8uHRUl8*S>-Ovfyzt4G-Z3D^E60VoO0BE zsYvVa(35oM5k=&>OdpkkqlSr=l;wSqns)czmW1PL)c>h3f*k+AqvAP5v})+5)O$Sg z{>xKTgk4O`gvpbz(R7E1gV>mAn7;^z8rNYohuRf#A}p6?m2|2MbGtMfY-Ya#{}>G-%Nu z|MGx}|y>_l7o~>KAc91%5Pg2T77hUw62#d-deDJ}u)kdTPgiXQ&D!4>+BHzD` zpUp~mi1>_`s5oJf8=-{&SqFM%ZGvD!IM=4d%Z3pW5ylWVE5zuxr9SIVrnmvdu`n$FC~R3i&B~Aw|jyDMu;lhR}BauwX6lUW6bDnR?}aUkAJU3ZW5H+yfI> zIBKUW0<+Gyh&cFp9oCmK3_wmyeZ6#CK7L6f5LW6J(vE`Ja-!>ukif_O7DFId(!and zMMO<&ms<#G@tP=aG=Pl=vhQDY+7Z9zQp|_;gR~vMQp|+rPDON1hYo9gGt-jnmpA;> zgY^~?31k}qSF;FhR6)q2+4JVxS;zIY74tT@l(UXVA_}#nn21_G>Y*fHdEbfo(-4Id z)X#DP)+Q5GByzoX`32U1!;lg-YVAaG5V+SdM_O4)&67tSbL?e*FSr+9F1zfqzukG~ zoxi;0mRtT$#bvX}$jB&~KY#v^OD?(OnMI2h4Z@C_^YqhCUpisJgku|5*`Y&+t=M7r zh?}2#?zxLTuX&gS!W8cx*B%G=?{?k2Np#MH3Iar<4XVYc)u@FgBpGaA-_L4@#Va>r zSIw{pCGLB`KfY_fY4!VNWTm(YL1aQmgF2CfIb;?`T&zu&!>NDebJ1oK!j{2R2vK`O z>OXBHCxGmEXMCj7rx_VyV~~y{Iq5u$ICZ&JCqslPu~q5);M@Vv;B;MuAcVuqI$Pri zgg(a8zLt3@HX9*dKN~|I#2E*OLO_vze>ayJK^TrS96GLFkM}H_5Ct}%p6JBC?-Jl5 z4;v9?{S45p2#NSznTLf4VV0AT=N)Ap5VY-u#p3G3N=gRu^Um#1z8-gh@H2mM|xKXNk6Dp zUqxJ;Q|42>lYX9R9VUTcI#^Q<2A(Mfmk6K`rY6&AiQ43j7LCTLXTg1a?w&L1b7@KC zyoBTjttb&DwMM)2H9+V*@bxOxs%q6PD(oAL zM=HP@fALexTfNR=h(J(PQ*Ke^g_c8ztc~09iM~)q-)KjS6ni!rLZ=Z4HV!Vvsqt%% zy3DMxXyfzn*j0SxPj)ns;p?Eq#!@c9LTiZ7!`ot!Le1 zL2IFKUnNDXyqFM`HVJpNA%%RkVWjKl7SCd=O}jMPzN*>-N(y;aBdG)%QhNtUNd$t* zbV5O>K`lrscCJv!0mE^fR0eDu?Tth{W_Ce1+~=P@xCavZE(uB}{k(`tt-E4N@?!Jw zQXS{y4rQn(ByXP)}5GT`q5qV}3iFjR$ zms9@%U2XpC<=%b-ysA*$3Uu^TNq1cmqH?Kc)SgR6yx=w;#^s31q3f1A+7Bd2Ep%7o z0Z)ZL5yI1)>r$U}hNNaUQ4`W|w`t1P0Y5R$s#PhUMKYZE5aH7JRWC0H{(^}9{0yot z)uA@{6jE#ua#xfCtv{_dF*>T;7Y1d4dzHLbxU?385Y?iW^Y(WmG`?%TM0f?~h}7dJ z^aUgCt6D`Kmn5D5(NXYM?<)n=oRFj#q(Ev@^Yl@Slh!zu>I9mrqeXP|2LGuSl1{X7 z711E@niCXMp+l7M>d$E(Dn~5>&6(zj8(IteiD-yNNR+f84>#tt2D_@Q`**Vvo*>n;5Syb*M+&ZTW912<2#NbS3!hl#QnW+A^^Y?87VwmUueeVw$Y3Ms zfSn)m(|YHgTu`AGEL2H3Y($Kla^=(sXCV)9a@s^f&O#jWicx)1i>W`+NEWUl!=S9d zf-=A;{!^3;p&;#Aq#Z>)kl60C&1O%+22fsI$}{?}jlzOgIUNY~zBBGBq$^2pim0sf zJX+l1y6TDLCPd{U6Vej`P@8(s;X*mu(#DMk0V|}6Z%jdvazbLNCz`fvg>b3Y56Y>$ z#zL7YCzP};j*WM#g)k_m+%?`d{dBg|Cql$9u(`BOM>T?nUuVMSuSi-gORZ>}6Bfk+ z^BEG{9SlND+~Xr442}w&_&8z@KttU@AKiP3vZ_Url*aEWKrUiZb8t3LX9-?`8dQY? zuG$aCYQnuO5dtB^0DkUfP2J8+sGK?nkbK_xt?>ruPlUXMZg>x5lSmW`mnO9aXh$uH z32=Lh%JCVehytok_2|$GZOFFcF2Gu+z*hlfbx$i+wgdOX^Yt!5N8?@&`v|GQ6XZ~U z%|ygbDl`!hho7Vghlti?(1$3gwz#E(mYRPNXqOA9)1z~Uf@p8hSE+7=Al00l5wus_ zO-B__zd}TbXlp+RU! z*>THYE_DDjnR9K|GHywrie6nUV&f1JJVlP^gft+`R|0b@21k9Z6`|3bvA*MDNrWg4 zgYk$+iKzP8=3We;eVFrR#gkfF|La$?0<==dRhvTg6LF2cQ3DXm1IM`%{nkQZvx)#k zIAZM`aYtJC0V30TLR!*s3)`TIVxc7PDRq~)N-Z#*2oGE_sf%Z^7|j)_*@*)yD~1i} z2#tkV$AVYtX(iyQLggXu)E6bcW!I6RG@gy44J21ssp{O0;YgvLxNeB`8izJ@5JJFp z_tj3!w1_2L2(L@k24a#}PrX8fA_fsoJYus^US6m}Q_En_?YE2i?1G4`Qq>^vtElkri~=s&$^OS=?nV zfj+0tnQf;WcZ?s%dw=}LHvF)|i256cVRi;yY;fTa%HRC(Sk5H1ve(8eunRA~(8j*= z0S9gK7)LO9QUwW_#X0OXCy}{S1Oy>?an=EsE+nXV5JHy6mXMz2o2b75;e=od@v9yg zq@_v`Sx_uGF%}X1yEAwEC)#^7=aE(`e~~h!GGCGye7y+o>KzdX=2EIeg_5CZN7hnb zNqP$$oT7!yJrb`U8q#n(!JG+4J0#h;03-m)ss!qt6 z7h_q=D(j(|r0²sJ|ciV=~yYVOAwI@lxzHMs` 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

    &)7<`R3>& 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≫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.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

    O}$G8cdR!ucO60tH1FNH>9h7{8Mt24q+BExjPSr zQG!2kFj~&|^y{1d90{Sf{^8bOM5EZ>*;M)#=H1kjslE8Fx4i*)HIce4H6Eb!56E$- zrYY65avnr?Zf!wx(wr&77iqEw5Hj0n*n@-?DEj0o`2qFj!XEPO^%wvj* zlLRBU&qlVjHj%G!;&ohi;J7lL3M9EG1PZh%1u9|tN0g`s(1Z91OGcZ>MEE=__2CU5 zF|v|nOyW8LI!^GV?8v#KOML7yxn+ z&O?cQ0HNbDF9QwMQ1{BYb+*BfRIz0mNKN{SBHx8Cjeyb=W+6liI}#s{v_>X5(z+%K zH3dx_&ee_8rfl;sqlUI^+m0EbfA~j+lPSN0I&ntaHsVhjTr@15cKYe~g%0Cr-6+q9 zIjIxrh*!fn!W?!`!wqL7eyCkk>Fq;z(QT}wgTkX5Bj<)GM>47swyQZ&Sw~5)}G%xU2)kJ=|%bp8S3l2?UGsq z(=`IlPM@!P$Jr9?*^%V$k=o}1o}e!X7@buEaiqC1D?v#5CS7kCpqAGvY)e}(6Sp2}Omh~Vjv0vvINMHz25Zr*{?^cvE}AenP3yz{CQX=*Rft6mRYVcsJR;g7f85|MujNINJeblYurM8HZp=iSjn zf;0QR6Je&3l!KzSkHB@bNef(u0-9^lw>%NUT? zsr@JrA}A`Dff)v`WP+ZY>BQ@J?!a+nJhu7Oz~+yHuZtjnFuDcj(DEz1OX$^DyiTC> z8-aw+01Sa4%pF|pT_I_6kHrYJksGX=HEn_sNTK6ie`F*M#`OWn`hc*f^Bm1b`Uusy zjOVukf%lmJsPWD0F^On}@Rg*;S#8IsSp z2AKIop{<1niFI(_9(+U5&t;JVbBa5@)6^c`zdBxXFz5@p?9*=e@OlKxpUG?5TTJ4Gia z45sSC`Zej?v(6?Y8Pg@#$!w#S4#Q~LP+M~C5>(BTH_|)D=Z7tye}>rFf}jjPo6P4{ zk}J*8XhX}4d_g4g#~ynW)8L(q4`XxA+^6HWjNps+vsV{icuDNp?{2<1wA9`MM#P?3 zX628!{w4^K3|5W8TpEwT2rGj(_7c7K)vtUxOg=_1s>xcloa2acF4jjo`+`eZhk*q8 znUt#^ z2O{a&MVo5(jx`Dg(aw!?+lyoVSJ(awla$rH>950nS~k`)Lw{oJM*LYmM>AB;BMfgs zFVSYX%(IwrWON3!C`?GWjl7J8g&r2uF-_s&#~)>$dRw!z1Sknf7N)q0d7AfBMqtVI z-PI%q7gD%$Kw3vm)XaWFvr#^$3k}I&o*V)#j?p}ACp=4&qq$qQg$KiEVN#I#TJ0VG zSAMQqs{*CCm@(iMG}5=f-Hlu*g`)P+Yn67 z=5t0G0tRu$n&nVd!5f4_1S;FCqu&JV8M>}{RxLLQ78~Jn;&ohi;J7j#O3c7xG{}w*mY50v5}Ka6OL4erE+PrUReeS0yuzYDXyAa7hUe{gW>`yPy~DtTXgtO%x+;S7 zxjNwiuzVc&~xGo}?xHme3@;P(?fD>35SdB@o0pg-0 zFVQyi+VpA>TMfr-b|o?;CTYAHj|9)W2bXnBK<0A+H#5^ophO7PKwil)5m)BRqN5}Y z^HIeYslo*0d>BX88rz}-&OFSQka3&4V_uQft~CePyC!^A&W9hFi#~|ZX?RA=fpOeA z=V}FKf84*Onyxfva2YuUJJTZC1&pix*EuTK@eBaVbGq#}za?o@bJz6L2TeVXD(mZr zB3wmPi0x?6!|}NsqixBqjk{9?+cjg>Ns(i-lLTY&MjR=}wEMMh{(xsw8KU1n!r2eV zTEkLc8Kq|SU(UaGJLXqlTlDhmSYg1UEgTf0TG1dI5df}0QNJ8+zwMT|*Sxo7%bt!v zhLiB8e&7S|OKn7d)-+V7MtqjFFt9DVs7^wqj&iDFq@#Nyg~6bgj6Cox_AK&ngm->N zQZGp9`&^i$=JifZA>xAn*eB0cSk)J(<}XygA|JDR$4~tF|6~V_E8~IC>8=a)9(gSY zJ#f$s^w_jv5Qf@@RK|}0qSIGG8j`iYHE(e6A*D;S7(~P|^2MAVAvX|7c4cTJ58Ob) zT2b*tq+hNDIT0dQRX|^Z35WZpkW|Nw!AmjD3}7$Ss}LjcC|7PEQb)| zTqdR|&am^4Y8Az}HxFWM`|DO~Vv029 z2Ji}|qwhsY&dZr^Ffa&)C!n^|3*z^g>mN_E#+RqdFMoad^0%&o7*PBYsb710Pq?wI ztaTFSz_cSPU2V%j7+sbUQZ?r#b1~U9OsPJTBb0GUaN;m{#Zu#)|Mx62hVCZ^F_TH$ zB}$p!PmRNIHECtzNz`S^!k1$Q!C=X1A;(Z5BFU2x>M_5$w?^XGPCx;{5=t?iCfyiU zoy}1?F*ntBN9h%i=vW`K({txSl)e=vWbABE5Z%n5$X+PnGlr#OJb(QsCWW@*_c1s| z)$&y<()Ye|b@;c+s7zuHoo413 z0Yl9*-~* zyBgql;&uFX;J7j#r3;ChQb$N$-N?|XohwQbDXnJ+tBu6c8={(DOAM4}t>Gjhdv&Pm z9yw!$>z3aFLdMM?qQJ7+8UkqK&W@@iOc?7LFG^HB;fWb@2FYD99h(sV`H;Pmk?{vg6> zjOcTmU|zwr@vlgnnS*0`ilJ>dCl0~@ zg0^s4vrnFf(hU1YT5cyaP);zyFJw@%d=axMe?JYuUV=ug)41Au+SpsaCX2pH@U`q6NvNqdETOe1{ z_A&B?G%pqwz&wbUYp2grj!DGe;dj3A9cHXwwky4Zyq%R#J`TJgz`^V^e+?WyILae+ zu+~Nz>a~*m-GuqEr1bn~3vVsO|Mau5_z(oOxQL_dtNB#!i_G8RrlBD6M1RB+4=b~# zs8Qk%E^(8&KQg^fypHD%99PDpGgi}t5U=?`wKWb7W|Rkk4AU3~dJKs=AK>nQ`4kAP z0Ea#bAP4D1yRL+qTfsWfPo$Hn9fO(pNl-RQTgXJ#?P^RL_iRd&=blG1vY|*UnrPIA zlq>-*5gCLGq~@97P!!3#K~Cu|-h;%3PWGtUN5D z|BR8ncWu094Iwr2KC~U?W^|D)lUv9LbiP)IHsIlyT~gVLRR_27w45}cBBj?~vM@dT z#L9>!>ck;iNgj&?-CP|t(;!y-)BjY656@?XAQ3C{40$wTX67iJv(n)>$e3%Cx(R|V z;%8^;x%cR2?wz~tWk+GzSqe_=7hv#ZDMyzUR-_7KqgE;>=pn z+-zfEIBi5xIEsgUrICa(vh9MWTYtMBz)g=eID-y9&@*Ynwp~Q;VaVDzW=kh|NS3&e^jJU+uOc%hno>_Uq#ugPkrPd#_U(K4%U}NT*Dc)nKYQYTUH!j%_C5F9bD5Q~fBy5If2ik=9*8w{M!H1`{T=aI5AavqgWKr z6yBA9GD(w10Z7u}@YN|Dg`}P#K@e5#yIwyC^BS9Q)Z)9Dw3vX1~JL< ziqi+By)XVH?KF~xPq%DuPS0&^ARB)eK-CZgqJ&7AyO-_>wZ0g;wc)RtWQ>AqBJr`8 z(hZXTut9{j?!kBf;7UZwi0-Kq?jY(W`bDyxk`*8I&p(p(v;x?SVg8z*D@BDAObwMT z2yPCgRdTQ=M@e?p8qAON96eSGP?u-Kg=jt_?IK`6q~=++x9%z;fsy-c6J3DMArE3; zevX|KGdhLj3Zkg}Ncfe2-D7j1Vt?6tD^sgDS`STWu8b%=rTH$Nrx`_`hCu;+DKNGF{Ck(o5GBpr^Lr+1vB9JQFD*yh6WKtS8^TnoVUF5$T|ED zHjb%f=j=W>9%J;pTt~o-7**(Ac&2Qchur}+d5bMndKZ6KI>k35TFm33+0Gf$?a zo1aP-o;?+yD@~O{XQzhh=hM-he|RBX`{{E++A8WbB^_&Cp1ysD1|ERBjfl@I}s8~lu2P$C!zC&H7OoJ2189z;;B zGPF)9u6Oai4WS|`YBOe3UiLfY(PQS)^efZw6~x*lxMtQHemI7U+3>l3FwLJwgR#l* zWwL5SjN!oip|BB*#OJFu^KoeKu8F~v+Ovj(G4mKdv_dBl|H+JGWNLr>#cwrA_duab zf^QbS^S1Ivl)>TK5Cnn=cuh8Dw3?2UW#e*45s+dtLi474rpzK36Lai8U2*9`bnhT;FXLohV|;pw+ZohPBZ&M@O_BlgVRKWW0|pc?Mx-X&N(bSei>& z9n%d=>Mo*e{02h5KlAx-M1fe>QefK-n71|4f;;o_OzMcPd&k?~!vtWld@f8HLf@Y% z64iut|MS1RIh}OInbDdgk4W0J)Vj+xH;XknO4M=Vz6vV0zw$ME*$e44x7_;5kN@lM zFMrGTno->H|LqIG4{%pR{_kH^RaG@MZu{4N{nwxL>C>lHBK_ZA{a@cKUc7jr3_?Z# zJRI|Hi;q6~=%eS38#iwA|IHYUjg1xa=FNNNJ@0wXO~3lpul|YGuU>iIo8I)M+rN&s z^UBZvcYn{AF=HhrU8VjcgOuT%d+xc9zWL2>{-cc477niUlb`(LH8Lcd&K+0AbH$}s z{PUR$&-xEcK2)~XhR{VI&oSD*9w{V4y%0NjF(^|+7<3^mYxA+e7T`B2M2a-5rw~&G z;Fwd`)Y8H=M+*oDAeyzS0L=trd>4Wv#c|3?3#mL^)TgSdb5LdOus}3?|HdebQoHGa^!oEoN(9QL znvM~4+gyN8>hx5#<~!-a^X8z|cceb!-xN_pZTl) zOosZzG?X$ookio*)T!sEj>g?-)z)97QKbV@Z;FG?dEJkK5N=uWt2AY7HLbV%6FQrd zX213W;TV77)-R@!BWMVQ0C48Q1=J23lX81)Pfvr0237PBO>OK-)DjW3kT7{7xk?~> zKoC8@1>Z7VhxeNOybA&pBogANDKRQdaF2va>)aF-PzM&FAe^(zp9T@-E+JP1MvP zG7a8xFR)semG{ZqoDbw4^R&Dnthlb(eQ<1k!lbEr)$jRdhupz)zV@}RedYAiPhaBw zn$>Q<{q{HYTsLjnwAKIJ6ugJm=@k_fjgI+p#^c}KS6*J;)YEF=zZ<9L^Rv!6YmwTS ztsTDbg)an${_Ssn`_3L_+SB09Yc_7&IKkhpm1O#L$CdFga6|uo{g(cpCVafUr$X;1 zw>FgjU>hNzRU4|)JIVR5%tdWOd+JTH;kU29jYydpDZjQh%J)}*_BY?V3~4JbU9;c~ z(Y>?xAehVIm(m|@Tb#b~#ZTckDh@(5XWsegt2jIVKxpmnZ@f6lvJ@4JPosxyP1pbS zPw8Fnep4C?6VT5za>m8!raQk&xt71Bd;j{!Xv@%av?`6CdTRR8)jy^Z!I<=&1@w0> zr!(Tv)9DqoE`9lX52l~~^t++TYlb=H+;>sE`IG6%MWyNHoBugFRJJsarhw+`bnP#1 zN}u@H`_srEE@bG>d0X1@hfk-EJoRGw8aC?QICm?1k4VEO%}?LI_PTW7)Kk(Y<{XR; zti2~)0V1zYzq{l4^tG>lg*t3yL8K}tT#?q?@||e=yp2}B)rae&ze^#exFGnDlLCGh zLEt5vG6)^tlKo?vlsH7`Y?xmp;`~!{iE83OdN zL0i37#)7o%T4J4!Vs07F^Y#90H9c&~4>GL^tt5s(tAy~nc(=mU>eJN!ppV5R zSu)8?n6OQ8kGha=P*AvEqAhcjQR2U_-MAu57CR2%cCRyL9X>VYq&3L7W$}C&gUxm! zV>T|kdorcoEP3&x7PW_U~3w1qun| zv9f@Ihj0^n3>>Lddv2WsdmJ+~U5x~ZK_)2&)oj>3Z2aAVrY6I8&yJ{VGF~vt?4ejy z`AjB?Fl1{LO>`B#5XN}+5lq#E+J_AwafOc0S^meDzK~{;m|KBm=CAW-rx{ecXaRp} z5J*Q-Aoa}GU!HFM#V?~AQS)JHF%GEouo&on_IjlzV-FoikQiTd(M1o~_S(NC_&tp0 zzWeTrBsP+>KVh4L*S+p_e_69;&D0*I;CE^k5^&$+dqr;V%&)Jnuk5)_#`E7jTa(xY z7hLd=_o{{1mO)12-#z#Ete(&O{D1dav}n;;n%e%mYhFI@o;mkidt4dMe>Z_w>vI;< z{Mf^b!0X&J?DUy5+^U7p6r>3gC#Iv6-8gp3ol#a_Jkz%_ZrV%^`p=Q1*F^oV7BmoZ zaYhXv31~l^YHDhuP$%O?^p~cjB1FALB6sXZ)5%XSh`9*WNXeKw5)zvl8Y5ZIE|VoN zp?Z4$G&ME`ZuY@BZ+$ljwN;Ik&YK(SqN}Ij+(!FY8eTt)5jf@^8RB_>W>}gmkD4MER z12j-W08D*gf)@X5!_NNbV~c|zD`C1enTLd%%?bkGD`PO(XW9GgRD%#ptk}Vf8Sq}F zp`;3t&{dHUQKVL-V6Jsdp+m7I15A2CjlDLMuqQY|IMae8}vFq!4A6Z5=)l#x;21p1b}U z49Gl(1N3B31ABpDm)kaNjL=exTDE~Wmh1Tw$L5Ua7l=S((PR0!q znoT3-9aJ}-mH8LkQl;=?i1kYCS+~vZdBih}9)mb>R+(8x9fxPe{Qb@c%bfhwdBI+_ zG|8yCr)-k6y`~H(Fx=dB-D+>rcTHfyFc~g7T|&4spN)*LXDvNM-tm2|TAjok?S*TK z$TRD3d^HZ9E7Np9R~XCZ78$#mmCw)|WjklTh>>Nee(9*(8WCx+cE6HS88G4B+5Scj z7T2ob1fya8mXL8giM>w`ZCAMA3Bso0x7w-9JDXKj1-i%-1aPPom=;U2WL(E*EKQ|q z(}tSIT?%uwBe8ZN-0(0tRqnZSaL!g0G0@_qspAP6niByx7P3_k$VHPeS=sVFo#d;w zkV~Y%qe<92yd&(1!2?!!FR^|f!5%p<{?O1l`_mVkNp28~sne=Q@7V~oM`q8S{bJ9xg9Z(%Hjv=u&-VRSzVel?QCN3& z&vj~EfA1OBUVH6F^;f;}*)rJGt5;7m_yO36jnh2XbDicvXctAv{()aeiM_zYkcRHN zZ%Ml6-X{Zwqu3+s5=npYo7-U?tY4`PB#>y>adgGX&FP;$`WYlzBu(-Z{N7Axo!Lhz zB&Zar&E6o0r7x}PCaeq!AeJc|K7YobA!>9wb4k z#Db!{h}S>_%oPf!x&%0=In#ikD~U>1)e!W<_zFKzkQSa3#7`5Gw>ZP>B|(U(@eGNg z1i441>}0?!L|baeI1+15Bb?QaAG%nqII2U(dq0sJN`PIP-}#x>8}XJgN)1?2=vb%f z0Ppn`MAS9+dS1>ed_gi7=Hl3~gM1cR9gp$7xidOq+z;8c|2br6IE<%mqedbFapFA; z!Z(g<)uycUk-UxPI&bE~FyTXTU(|%v(&Qsq$tY*(-evhpYCEpeJ;~OX6^4~LhGG-@ z&K*A7XYi5iBBJPI9Ng!zd2()nj5f~Af5CJZf}iN21AkEKiHJ5O1`mw?jGR-O^AQm> z*c}0B4<5tzK`xS_xu<))e9lY;>$)PkGES0v8B>isqCRg43RL zYq^KsKnRJ4sF3X_n(}1K1r(cgEmoY4&ZC~Cdk9Vo3+1)_n!0LeeSid^fOJLK7Ccs7=~W^{vVq0 zU>8hKEMt6R zQ3$z`w|{ay5jdJhYz}l{t(pLC`*v=1hn$9@~-C3SYsI_>u(qvyS4j^Z<@ zT@G4jINZDUH<&S&Aj5jCjNu%z^=51};x(CH5chbW5p(y2NSauS1lSbj2rp*5o{H@< z|1e3#{<#!PuZ&envC-C6OYpcFzHoi+x7YCeV9YV+>@(}oS!Kg%3%8zWXl~xhkNfVk zvSrCgH0Oys*>@4X&L##^;9|GQUR366`QCvdy`lTPLWkN|aBR*ln4#6V`BN<=pPztt zf4Ey8ji>5rietT8=-gbF=fr0+YXvdSZ1C7I>59uQj7k#q9(38Nl_utdS#A;X)? z%KB~ZKe*!mYkq5Y`2QbX|ImzQ#=KLm&Uy2@fm)UUL6h`>z`sJ*GVV@T7kclBs;E%dyityIz}!{p7}WvxoqGdU=l$|dJvu<2|k4JLmISv ziXU@NH(?N%Oc6C70#S_nL~K|C_vri34lU!6h=?Sa94KMUkUX5eA%$~I;CYZCmLxTl z5QiH$BfNg$w_fi*wXdLqQXHSDl+4^2NJ6B2Uxr|`n_=ydNGWkB|%)xg0WMHiW% z_iDnhL7kdT8wl>a9Lr_fX6$RyQ#8 z-Ytr#wAiam>vCU=9?U1aIEXiXM)^vB9~&)k%tm#+?3u!X`yo`azxJN85RA`t^1^8B z33Km$OnhgH4z&*j7i`wCr*V!vKN5Un0EoKJh`rA6AVzjM{B|3A{?yJ80SbKWt!m`H z3$2%TAw+n+W;wW_XPzbWdfwgdd4_{}{Xk%B;l$BY7$+Q?{zHvaPB%e(_{4Ge?iddy zWU{txGYa`Ucm`)dTtNgl$gGdqt(bj03Ioq4V5h^rPF!nnhn2dcJ|laB9Khc#R9ncZ zu{)nDKKS9j%p)rz=)6z7j@u6WLo*(Cp$Y#+ydV;mTsJ(p7z$E_8r}q8*40sY7TZTB zfTp(53c!~NY#??q++oJ}p@d}~O?#-&dw}vWg#ca@DFyO+qmI|q9pd^@5b&x z2h-zyW$(f?WGL$+52BiJMSQi9U^t8w1RIK`T+f!!ieMyNOoyiz$PBNmX(Tuy!?|$G zL#)}dSikcaFluNz`>Zq4{S@_Vsjfp4QPNfg%m|N6P9mmsUP+n#lc!Ek8@FyGq;@}* zkjt32Y#T!0e7P=igm_g9?oUV6lR_%J_g?a@h{9{eKNn%eO2bh5&@dtHo!IopLxhG7 z9-JP1;z@F!vgUBHVUEd!WpK^xWl3cjp|QgWmF2AQc^#%EoMxb)oI!LAV>T*`wQ~LN zVg0CAS3z*bVG2@`6BVRB^rp}RT&Ehg8ll?s=yAg-FVjWSvRzTE);-GlK0*B4H?Ft) z<`L#Ra_~T$;B9I1-kNj-pMoWcdbG!5GCW`;AFg1B)KMb_MQen0>o*}^QAq-gT?#8J ziMnmfp;)a0m@6Y3c;u*2Y4esXRBO&c`GbfnT*+Nz9>NLpv8vKwu04b^y$x7C0we80 zRgjUhb+OM@(w4D%8|FH%mC4IRH1BC$n1AYA{ES<}4Az82 zqDXU`tWPHFdvPTML0}Z$?4*Hx(q8%&?WwK_)1MXsg}=dcBVA6rk{Jt6N?X=bkC8oD zIQNV+?c~|vhm}z(IB23%6H+LNiuL@?%yyhs2sehOGbRV8Zz;^hT+;(5Ry;tu#IMSJ zGLF8_7WQxLiWTpjJblJ*V7RTG_=(r?+kt<0#sfZw_~*$iZphX{S&PcUxMu zas!14d#A(HgSzC+S4D)AVEETR|1}NjO&B!Y4o40iN@jIQs-IAomc8&&+Pb4Uz4hJi zhiI3lMv^e?d9(W2#cAGxS!v|xv6!85i6A?emQp!)&;EvV*=sLNt5@j1p-~&b3)Ooz z)17o0#Bc!Sl(sZ_=-|{kz9~JkY!!@9sT1T7TR}h>)s!g{Q{O(7Y3?Z?*XAu0L|jdK z?R_vZ?9&ihO@I>IHbnL*B;naYd(O!-(|)4l)^FYhA=sSikH~CfC=e7-)+o18;|8bM zGzA+wb|mXI3g}q+{h#kmTlXH0oD4~!n;}W4q?_bL7oV2~4bZB}I^B@o@-Ta#yy9vnA^xpTpBfalK zA0$Z^BbG^!%r#6tTvtfO*G<2^A@!wYb_sRBKJd@)N?-fhH`1mZ`=ZFCT3c?YwK;^b zm#4SC?e*!*GtP(-L>p*9{@a^=Pdk8pP9XM8%`}1s*vEIj^Nnfl-1+oR>IZC;rJw%n zXKB&nOA_)47piSR$Yk6wopVk%exeKa!vKG9^>@>5dgmC29r;F#SqhAm6m+HU{@^=ASWO_Ru_V=C8v4#R zzL{2S+7+EQou^Df?a#oO&wk>AY2In4r`|+1E~N+2ql+F-OBX+b)7^9POf0BrZ=T$A z-l_A_XTJQ!XmjzwIBq3Mgv7YP-X6vVZDxpCDN0NV1vXQ%^mW zuA?((Z4=BIoHKtXI1WNoF;;?4f8xXG{PWHa_D^boCe?Knr|C1MMToOu&tvPRqQtCA zf4TjS;SaC?sb-Ej3udP?Pdzz}9x(!`sVO}VGuuM*u-UUFro{v)h}cSHZA7Ncq}=-i z%5|K3&Y5XIzd@;A|A90#YmM)>?K%XK8m$K5fFMm8I|9ZxI$a5)D`g!WGl}52?{8>6 z^o`lG2kE-U{6y3q66!f;ol6Vvs%SpfOrFBFom*fkr=>sMaSyo`_zbjxGq{@1g45=w z;Yh#JXsxZ;$fUlLX3c`R?M$`pbO}9Bo8J8Px2M0{b}Lnk=cS>;hk0Yn(>$aRFz|U( z$EBs~c1JhLi!Zw@{q3)RP2cihg1#{Lk zaqPe}b^1wYyOj`Y5{?O_zvTQ2(!OmQ(uO^R*b>VAmbbqv-F@d>thFo6n|E?F8dUmG zVpglV1VZ=76H8KOvjm?-@jsi7ed-e*f#5aLtgjzTXmHxRX=|#2c{dPZKl8kc(i8~0 z;rO@y>ZbJ8H(Z_uqJ5UzKAbUZUN;`CvF`Bhv~ia{7RTXEJ_--_vmZ5T1i>g{(#{QQQe$f! ztr5ynWoZQ(1$}?;hkgEY|CWZcU%Pkhq#gXBDE2vj&fN6k3(rs`gMEhBkC`+v9oV)p z4IVL!HU)j7{dFH0M1NWqoORZj>FEdVO=GB~C>LI~=xK{?rpXfq@@HilJ$g(U2u!5e z9YlXNq~(hrOdI#1VTNi=n+#z5E$@5{J%I|-VH(Ue(jvaIX8!l;cvC+XMbIfHYnRt8iW~6 z9Jlp~H@*HQa#?cv_3!^haIX*MyV~PIZBGpHpF8jm&v=yBh0tMx`lqu`oez#9)zEyZ zmHsYOn53#`ldwZ#hWW}+<%6{9J%+hs-n?0ul?F#k;wExw%8{H0_9qN`WZ#qzvoVLG z7DTAtvpdxsfpAe1N}0O_#-qeKeCQxFoLy-ry+I18xLY}>Uurm5orWR30k9D~pp;uq z8f>vmf|eNk0dea4`UcTVibh^09pvm%rLu*r-Hy52y7Lled?ny7Z(x& zng_DZo;4E_T4q{MN+FXk5OUR45ERl40GYY0fPus=t}$d)9(c0r-VFV3>_*D6{ZX3oSyFf%U{vp zj>1F+r$GY;MZ}*POg*_4_FNe{qEL3(f-<*rc}*5ZD-(_nm5(dd?d}7&^O&m9j_04w=ivP>fq>(L|)D4p?#wn;EL1bmxhb7bmVHZeQ=E6Lj&roL!JI*J*Pc|xd7X0RnQ6m|&!@hnBQP@_rd@Qe z%zO&tuIgKr`i~fjra&+bEzoDpotO6P-I-Rew8eO1I&hHAp)lYU(iAj74Q359>r2w> z=f5|tCE9Ypkbdcb1H02qgs95iy`oxmXcy$lNzexj?3K*7v&7YxzWj-F%k6hj1-(2C z95#lWwd&M|Hs9uy?byB*hFFYX*UZ^v=HSBweti4a4+4(_z=Ro&1$Jw)1`v1xYR+nk zD$U|WMCWOWfb37|>cTq!8tEq`jVM6-oG0COO6M-CC+ zCzwuv_;G&y!!w>JEQ;jaZ(#q_M*n#ojmwrjo93J{8*|fy)OWy;bjuxg;Xm1(rc9ii zMq|3T@6KBSSle5h)7q6Q(yFza(go+8l|~Uk)84cx-SfnvFlD^!pWdJTbjxp3X=T5( zY0K7Bj!AAmiJD~~%}|iJ?)>JYefT1rnr=G$rQBLppK9shZFn&VX!SxOM zThoPCzBcWm7F-3ctiCXkgAjo_iXAr8)`yliW%|^#d;PPi5MRja-}u@fICtD}Ya$;Y z?WP|}IY@T@q9@Y@7hRBYxW8u43+dgIoZp7YX3-Omp@ESU3lUn5x$x{WPsJBh4S{Zm zN)NsJz%=%>qyfFD2!~WI^U$W=Oq=8ul6C8mimQ==%_A}*YyZxzY3>!TOJ|<>`E)Jj zv?Js_*%|cCyYEh?pL!bMC^>t5iHiFu@gq89jh=QQ`qv}zx^#tMni!YgH!z3uz52k zr<8VL`aI|MJJZSu~eC>R;*l=MhqL4hW96R03bQUJX>IZTh?vBJh?rM!Hj&k zpdl@OelsTORnY~ss`LyUAHe?Vcpu#BsGG=T)9JE8zFr>eJ5SZmFUex4H5J5?V#g-x2zW$9@;^eHz zDhV9wmrgllU>b*6Yw=?bNA|x7hE!)w?Ig7oL0~9n&b94n;~L!Z1T36?*1~l6efNc9 z)hHy@`dk>w#Bn3jsi!VXThL&tQSXl;HJ*kvxf2OmGm@s6{%A+Nk+Az|UV?#5o;)?} zB@gGowinWQ7hRY(t=R;!5V{P~Y38UZFG;KDn{pKU{PdYqagZ0L`aLT#@y$p(c2(mi z+C(4v${^Tz5U={`J?WI$(^+4ykcMrMvSVj;dgP(I(>vbs_VkC_Z-p5Qqmn~&I*89< z0D7r*K5q05$1!=?Db@()@)7a6Yf>GC!h-=udPU>MJ#zZ8Uud(As!@zcv!QOQhycR<7HV&c>hf%=6D+ zcBQEu&+AQTAkBT-S1eCuTr1OA3*#>?twR_Xl&<^fjS%Jm%%C%>DfdSkX+blvqiA_~ z8K$E?>_J}IfksxwcZHlo6U>g6^sGwc{x3stRq-pkOG8x(IbzeX%0dg z>6H!;@4a*1c8GLIz>iM)eD>rh!5Z}h$CTZ6N4ogBpTu5{duDMui6XUc8a)w>8Q&Nt z;uf4fOeOqLPdxr)svzZHC??PjV5PODDAl2j7jVr`GWpFVtH3;|fTU?|bObTJq%5G?-dxV=(&_QF&wYmNjYS$@9{3iv126i1x?cM$DjEi9rz2 zZjzVq1@0SZ2b_hY6r8ZP>Ufy|ijgnuqCb-@cs?u0qTKeNqu7xZw~#k=`ho;X?@^ zczRQMZ1IyMdD7?#ge!t*^}-%sSk;GmZtuiw00DtX48p8eNFwM>*zd=T9}DB5vR2ku&u%J2!?apzyrVn8{5rcIp^ zCWwAWs>C8t9JMhB!<*jp2Ih1OO`uP@>E_=@MA{GnG78aHPGjHdAo@z@ePIq4U2<7y zMb@u-2x3|5`WQoIHD%hA)PE?N2Qk{pl!Gw`UiOxMqRsVTq~v`ty$u29<-K~Rp(hW> z!n%=0x9^1Upn3f32S1RWU_XXI5T9ZEatQuVBCWbGlMF+%(FCN4XVBoPwBe3t(~D0( z65Azx3xhd~MDWYOPt%O4|fVLVZC zp2HZV{4$uynBhZHH5yHAO#@7>G=1T7pGwa^^E`xmNP1$?!!W5{__}(hNoXxyn2K|0 zmEK8o<)~p5bPPQ$m7{G|aaPYf^IT|jYH8D^^hy1?nNAPU7;|t>`sjaLgOYPJtz5G@ z^#?yH@m~p-r_7s^>UZo)xiG{g*0UZ9z}4UU3MQ{@X%}_-wr$^>hQLs)COsFJD@P+y zK-q;BSlp*1{rl%WNzaj%a-B;#QfHyfS5FF zm2Jbr076}sX(ruFPanNT{t5YT=UQ^YH)hZ`YPX>6_PH4@WjsmHtRD_@Tr5 zF?OFYbyPs?26L^5d}!~Qbkpx{OAUlzn><-rSrw5&RR{wzBF7zqmZ8}rFQ+9v{LtUh z${T-6B3}b*&w&wD#@feY?o~(&OPJ4D~ZhG+6+cEbw(raluzN*etjz*_{4izZo zTM3aX#*ep`vPDv#@(Nma<8!e{Xd}P9#`Sxjb2qAK^4KE$FG|t`HxSd^(%OJ#F)a41 z5A&|7n$A@C9Fx@0fkfful%yN4zcF3)mN$hzt^G&~=DpDnaiwkdj&oqzJ9lnoZ}C~| z*~eH+hrK&c*N{%a=Vb(Aa9-v!jD6d}_qU=IS2G4e0)o*X0tIBQvu4fa zoP*4wId4w`W{yn1zVA6qod-h$vv1V!;iF<*!tyb+tsKJpU;g^T&3`~p>PjO<4@svH z>O2fHqwqNZLFOoC!Fn{U^=qC>4ebT#mK%RZV9Txu(CLLBGzdm0yxGZAp@QP?oOcO~ zZ+*J%=05}T`@&>Zz?`Q{nI3yE5IpKB`dW%fw03t<+Dm}VA2D?nB82V7%=fVme*nB0 z04!liuyVjTXQvv>nWxQvCf)qUE$m-&x@*feb_p@eoG0I@sete1%0*Z`aFWG38X=nf z9es?*+cEGWD>5sl7{09$QYj8d;2N`cvVK3}o!>Afkc*IXg7N$>(DUm2@ej{<1`Zog z+tt=y(%76^+`E!8F74G(H6XwZj48op{Ltc6*w+iw?|*-Dw3Dtx!&pXA+Gtv4A3ahZ z8bvNhm5XGx_=)G!_5%fJJCdN)1e#hK)6x|?!~fBVyS zfvuo&^}zI}Kix*lf|(?-HS&D2LI@$HvjhI1H899>iYGEJLTB?!tJ0&7FHi5JUR(#w z;*Jp&cMQU*cF?a^Q`&KWL^tND`_$%R8+YtYRlPBXG}i<%jq1lB${<=JJll?T2l1l^ zMdY`%5dyty=O!fJ88BFguNn9dxz6^c^yhmqHNxNuaja^Vup`CBjq4zAr$AhqV|`X7 zC@8E*f4%on2!$XbQH6nV{hjyRm(Dr+LLBm#Ah}u=RX~z$Q88Ke_?ay9*hYA_Ns;EAljx^rx|`M#z9K>iA}68Eg-H(^QcCFh zHYyeK32RWkEuqp=HQLBn3c*HR3oqwqsQVxP{6Y{nC0zNqW;o591%>m&6r;}})(4~6 zxw|v`bzL10oE#H}^U|MgyM@TTlhJ$HT|X?6uckYwfkp^ZZqvCo`dTGVSn4<)NT(^1a}k zgE68f-Mh-n&-s^}mH7VlT`ob@E0&W}B*d``C0gPA!<6Skf?N`N}d6 zv2nrg?ckn4^gQ#fyXn(-3;Y^TQH@pLJ&6~waryVfs6Uk~f+^p7EBtAs%KafH@iyN< z>*K{lZ4wdroyM{+&x6QM?0NEFL2KWhdTUkk1xKy?>I_4@hM^RLlWVy(mE!+6*f$3? zd@yd^mLGT}^>%{S?DuC^qL@6Pxx;5vn&MW?#A)~3{<{oONs^u{~>?txEmYrMlWCMBjP)l8F08F8tO2jmrtZVhGoiLLgUSJ$bqwCDU!7u*&0U`vWWc6gvU?#+isRy*WMFP#WG?klmR z$xx`R#RxU7WJl}cD1WBK|fvXR}Yff>PeD_G|z+HG>5uamI6*}A#jX|NjefbcQF&_@ZyDt zV9H$DNECf=k3#lWWpkRV zR^RZRr@UF&N-~&04*TY$V~u3Xiorh*#+g!Vg5k>T7#_bkuv`C-R{5+4(p*0oVN=vD zweGj5?vU*W#>FfxoxQBNYBZIhB|VXTVdqdJe3Dq}eb%L8=*Ay?kgUx)PguZ+yJ&AE zvA>%wpV}8-&tom`%2lN>zIh33(#aG2d*gm6&AZUuViUuwK%-|d}r|n5vC(OEB{;Uz-_z?yqG7wRZ+C2aG!Q&0q1S=Dy)!xyyQRt6a^VKHOAS7SV1U8F z*cv(UHDmKZzHUi=L5U)2#ZpdSCFwUIuvv@wYp6G3Puy#xVjcn!WN4Wi7-%~ECQOg$ zZGZjwqHwKTY#Jg`l?_0?aQ^Ta#l+I)+tr(S!NzZ0I;p)oNF* zJ-c6eUzUzwtGGbdV`BR+srgR*ckuhv1=c<5{F<)tQxjf-uufYR0{jTuqX0z12s z0!Do@I!MX*OMBI{lZVVy`})Q)HIEKB?G!`|Kju!RKgn#o9pH(}q1QeL>%amn0bv ztPT~qrPasr+M?VvT+SA~{w`hz^IhaK6}pdlAg02#QF-x42sU8jjV-YDu0Nc!N*|I4 zRpH3eYWY?6FC_)&P7umQlKZd`#LuIr!|jmedplS)jF(wg`XTxzf8j~dM_Cb8%G^p^Y;h|32(H}Un=%hQ+h5W^BCy3 z?`=NV^(6bbsrfK^i*2Q?l!{gHxtNOh`u=2&?D}Fr$oxDZYBdENP^FrJ*q!1sY z{Bm*jP4?86_1vN^WiPk7OM$~36+g)~hUf5$e$~#O`Rjd+o4fg5zE^P~FKTpgq7uSJ zP!c94aEaI%s@|j9CW|PR@sG>F9eq33{gNE!LpD%cHM27nql)FtanrmN+;In_C*!+G z641(;4l~JmJGNkU4h4a9+I4W3CpZ;AvYh{=$28^g$xZ^O?#K&L|hDhOSz`Q3P;7W7XM5|`VUib_hDd3kv?0~z9%-Ks$0x7*Vq zDe^U_f z?p`?4*Dn_W@g>}EaJU*BU5&LMbat~fcF9Jwb;kPoX=IinS2t%}k~c6_pG{48REG&G zP;9OX8c3-8?WGf{P^*Xu)$h>#m9AraeEfky;N9)rCiv9~mku*CbM4lO=}`pVpu0Oz zL?`&v+t+dd?G~F|r(<9s#=yr{`6%zf$32A)m6es05~uZu>mT5BP~sZ04)1;hAO7au z<@)0hB?o^!Bj+B*T692dK2V~v%yp$VAr4%7h0b~^d5s>cpcFn!&Vcj8q@+_CK8yY@ zz@Ke0u}?El3WN|{y+F)ub8O|nTVG#)^x|~S7&$eS9ONi<3*YnEgFW@nsjTEXSkI33 zy=x$O_6z^!96g}Hpjrt!L#Yos!1qzf=8F7sDk35hOZ(cXwQsMzy?xMKGt=i}dYSfZ znxGv8YK6=1ybBD3dBD6{xoswjgK$XMUw*ng*^wdRGV;Fjno1hme{yT|po%*me!b(M zbKo)WHtADrNeyd|7fHVVI@(h`(`mW0WHt`^d84|jDn}D>3ctPf+dJQm_PbiFb6~% z&Z>H!!WOQXuEU4!d~xC+%_FvKJ-9*i^b|xVQK^FaIBE?PMffXBql8yIAn}wAjR#@3 zS}+-jyZ$Zi$d9IX;_x&$2Ye5Em{moN`uS))|HR0vM7MoSNEom4I9iRly6I8%JDHr5pFM!Q+G0B z10NM#n7@u>dZ@me(p*td@#*4tLkTPt-4wG+PjlW)!^_K?+7(R$uMuia#$k0iULU6X z_^qiAev0%$Y*|?^-w>;cIq?Qae@pq=g)SIO&eT<>Pz{ziSoj2Os)nEO{W*$s@Lu+s z%P%dhTMDBDC#u#_6HF0f+*_U|u0lSviZNM3WcqQx$6O`%e%X}fb~GRa-wT$!TGUzg zO+=oa|9^6Xd9=`>YOx4U5ap>Ptuf&-L zYZncZuy0&G8%mNJcB@+{Oc_FX4CG2;e&mns+P-xPkdrYng|PVJanB;no5ua3DFm#E zC9+<&{pu&*%O_TOxo8!jF!W~FRw0my#DVXo@nzz|`5+i7esi{*8M;6z;<^q>ChfPG z0W6Qm&6hzJdy?pn=k~ZGO*<}EDM`hzsTGv>bartHQk4%qmbL(Eu+1Q-{Fh% zmm+YlHCUyML2$RU!DX+dv4Pibf6T$%qB&rrdkgKl&(QLdnfSNSo~4&u)vtc9)yp-Y zNM2y0SJF78XtL6t&4I}NHs$b3ucW8Gm>8bGfuQQ}x^?gGsYXCBRfO(}&LVCKCU6R( z&qfDe9c)CtIivb}4&J-x^#oY+CodZ5j{d!6JrdX*n+PAl@BjV1)Q8gNz#(H4BxFYY z?=4M)SP}U`&lkbK$x8rS+txy_t)l%e{r}$bT?m-9V>yN^yuXJpu;YfIcibn)uO9#2 zax6#7oq-I2Ed1vH*8$qJEN!La#sBvfB+&6u%9wr8zmLGcIC+6y30m$ltN-3IL%VW-Vk8T+*@W%TE%xs%|93F{&x64Lc5~YqzbE~l5k=1>8Z7-C;19;n35xA5 ziLTW^|IXQe{{`T!NkS||gi-KIlK;m&|1Jk5jDV3!u3>!h|E#(HtpP78|L@1!ZXq&v z|DDGFt$~*2*R(9+|M!vq9~jt{w9poG*=rSbb@i1Pd1_%;sdHan-z9v%6-OSCDqyqt zQ$1S{mB3_xgGSRvSQxo$JL8#I0(bowGK3? z00f;8#fATcfz;mnzbf%0&VHX46cpGQ%+@(AuTzPF9UXGXgqEebO<`+t@ zFDBtPBvUmtHF?UZ{8rVko1_Pp0bCo`NnpW>hHrZqG)%%Qd>qjMcxTwJ!Af%?MUdpO2ttq39_ zq6W{k@>)L{(9}n+rmMrgU{?@`=|pQn&oUkLTLxd;)xyoq?XF7zKM?<#209*=hXaMf zzlsC-6wEQHT!#VxC~%hxh<^R}8?+cicC!VA0p!ohtG216gv0Ipa7EL~%h}oa5~#Z5 z-HA^5_1f6Hs}v|<1ixJez(^byPX;)_UUj!A2Gn&VxfDXb+7D!)aP*a-!F&1pb4OF( z?!5hOmq|HEr>&Bbl8EVQ{aS`-q9?bIB_hMeOe|W!X5#IKh+}H~Xz`P&f(H*CjF;+6 zQ2t65%i;+Q4NY%4ioP`}`|#`4F~{{mOtkkOd{HGbDEb3;paDMjqmzxkq1ewYHUumj z98@6zXk3{A+APSIAcda;Ao`%~@8OLGfs$F14wnHtkrJ0l0AAkg2q&Z2hk~27pvq~2 zkraZqQ#Bdq^!$?(6RUJsJ8u^^QmE-FYRhf{X|8_Tpw|f;;fAr@+1XkA7Y8>TbW)c7 z7Ht&_Ye#21Q_XPhWsMdR5HOED`Q|cMe|s|P0B6a#ohmn-beOI%#|S`<6=){8T%)T! zn**}g_`)tgQ^46(SrD~Opsb#svX74so-|48ESh`ZKYw=gIAAsf@TyVs^71;Q0?!>} z0O;8Z@adUsJ_&4gOc!=peZKFpnqnCxxm&lKv6G&clVdgntjGzUzYsJ)*e+|g>c0OK z`q*BpkE%EZLYIG+R>8p3w*!03ncjyvNcTNqnN&$Hh7ZDKagSY^3l>*iL`atH6f|+??RtV{VXI1+Y4ay75;| zd0a+jRe`_+r8VH zy;1Q@bENow%Y92p)R-polE((yLNgS_X=6#gXM1DlxshA@d*xM+c?Ntbpg0uzt)~=(1pdW-)#nR?{*gqzZ?Y8*Ck~}j`q!G;WQoL{e=`h(Nb!j zCq6U~3gA%3zK8V<%hl`#s2{RZ2m>f;Kz^q01qMbcdik3IneOHN;FSTlX_kLk#}_=R z2C6M#qujb`6go3rbbavnvtPcJ=6l;B6JEu8EOt4sVr050cud+!A;j#c153i>I@L?U zRsuP7BZ5wKM>Ugu=>D_Gr9|%$C)^-RI-9foMSUxr#7%c3OSt>@eQ)ohw1q29(i?sI z`jru2YM%{j7HrPrvG=ivVI}#nisi^VcJc)~y0zg787RDmRL$DMc1$pMHswVwh;#GH z%F3|!-tSc)*Z0uTzJ702RUJ02#g^}8m7b!IaCM6HOrZM9nV_Sz$5y(9-({rEA(|*h z`{vnKJz2axTaNZyy*fg`G5wpt>4e`8?0*M+H&zcp2g~0aqGn)bJ+V)nREh2hp6~9G z?-~Z*o(NInt=_#3`f&l=o5}0G|C_3c(m~JoTvG?bcQ@+~AJfzPeixEDq@t;@$M$aZ ze22T`QFL=w)Ye1^r4W!8u$r7nO>lW7d+xZnZ>HL&%ar{W<<#(SOuM+m0VD>0#nBGD z(Yjm1m-Ba<7ejyPs~@Qpv9Y%KF!qfMe9u>e1~MgYe>?bW=`Y+&bxDAzq^VnxTUyqt znX(0*2OVV5t$a?yvSjm7r}u-xzfzMtmR2+>?LYHjAAb7u>A;oTI=Q&#vD_iOShNkg z>iP-?Ocj}~(lQN*_*G*eIXoX9#o4JBrV%H4haY15~4ZLhbt_qlKMQ$7os zD-lu~Na>k_<8LozWo2K4wl^4`al5KV5hb*;n&zN= zum?N;Oa0WV_A|b_Za?D2GJ+AcE{EO0#*#J=bBO0;9|@-RTo;4VkrPpXI-cmvCC9~S zM(bd8UHPq4 zR|vkd%)%fPn2 zr*`IX8uUt)@gulvA9^?&2g-hz{he^B!!rkoY8&lNfgx$_GC4~@AMP?|H03jrm15$otAE+|-R`LrEfVvfW&dHeSlu#P zSy|<9Eb`IW-GrdU^Znj|VAdFlWQJe}Ygl?(>O9Qrs~WG0$VLvcI=0_IxUn~<5gEv} z)!J{`Jn1^y5{adYHRc|2QiUv*|FMlm0Pv^6&VMY#Fb>49wCE9&v#uXh`xty~Z?5~i zB)eXQ1Ru2Tp%OTK@s)(rl#UZfS8x}TE{L&1Or~LtLd!zekhBd*yx}c@cinEx;6Xfi^;B%S|gPFQp zp6}Yje%)`w%yi=Vv?r$CZ-u#av;Vz)5{gpka%fB{4*s#H&Y;e&{_{c+mOptz8R3;E z%kn~wP)zi|skm`EGtnQ#IJ^ak)MVu;jtA(mrZ+gj;JRhW1@yvVB_;qA<-figg1z+YhGC%=@kpI zw3|tr)FTVZcL4WE)yW-9r61ph*DS|uZzSZ*i9c-}Pxw$FdMoawzl)j)vY^L_|`D?qmfzGuIS=VJ{2l3Fx9^MTySc-uNV1qmFImpX^b6c z*Bys$C>Ixx$iCsa5ZcFeq2H>4XXt|?!2C|&zfW~wL$_PAIXILIH25KtZfGjroTlOM z6tpOOTLo~sN_+P{va7aCV;fB-j>@CKnVpjPg+n_$+h|3vj63gA8HA7 z>(*)exui~(OdNVBukWJyD1H;c z=6{LkT>>mcRdURKSa2yVL3~EjJ)3U+{~3up{_Qy`Tie(+p2$0{i!py6UxpqYKrn4> z`fslrQ?M9xbw`gZmZ*BM(JYAvI5l(EfYS{rv$Z!; zfIx%jV-2AXxWGWRx3|A!$pqU=0$Td+bql7%{^XxOe?TKA31A>w(`TXlC&^3HWq)5 z0Fn?lq4}Bkp0Ue-z+_TlB3|Qilqm8Dy$$#Ipp;*|dWAwGZ)3M{Ek8;L@3RTy`4Oc- zi)BaH6HNf=b6d1R9@#{R9d=K50noZKmELQ9y{RK0iMf0K{S%$+=4j_(syNK+L_DixA=ri~jb}?M=N- z!evy3*RC+UR1AIz6x4RPxjM&;Gq$i;Ez%zc_?aKy&BY5*gV|fc_3#Y!t@)Jbp~}Ce z4#Rrql|OD<6Oohvo=ikDI3!*0v%|w_%gk%3ds*-1OOY#%`0rm@^e5w@Q_D)qMN>B& zpoYTMe$53+oF+7bg?(~26fV8;RRJ8BrLx=^sSn<*UqcFgX!%^xeCXb1G#k8V*Hr$n z&G0~FeSBD+=DO81S{$_L7kIiAna1V4h$9J9;oCC4ZPIFpmk`;r2#@&VlE?fe&ij?;L34!XHhaGCk3< zZbW`56v~;5CNGeawM@Soa;*KqL!%0_o(SMr{JjfULU8qApdELNI~l=N8kiU-bwlSs zAna)-RxOL(8bGbC(KHx_=EtkTE{sKF?xvsrywCP4t`sQ{NC&(rGLw=KT4fvW@qD`ZuMttstB(f zOcL8Kdq}Z?@{W(S2BDr=rN`tL)IP_@+gSOkGx>3z3D$SAOZ$?vN8qE(WB+WT2F4ww`48PR}|OgwW<2!lvz z?JnlCvScq^n6-_~k!KPy^JaQFOhV_Q>LwiKwrNP_iyqh;Np?*j$a&KDvl}+k=R2(q zjUNeS0K4C%@$Fc?1j>d)d=nSXy$ZA{5SkPi^u(NC-d|2_ zg_eE%02#rjvAmqe2G~HdpRNsUF5H~dX8tBF#SJ6AihdK74;Z1^-TlcAjNBK4vJYMo z8s4L6!J2|e!!(&yrJw08^1P?n`-qsN%(vVXl4#XhKe}x6lFE&z*OCHPfzcyQa zk{JSg_jn0E95B7&KR8rVF{s-~ClwN6P*uT=+)Y%lmV2mYy%f{{$XlXa6Ya=;)9c85w!MfP#YO zWiuCiFL%hC#EovC`!ibUUdTW_x;p{WyAnroqfJJ7K9O*t_uB5eCH^hDgYweT`$Na1 zyjgzk0bVtU!V#8L`9W7p0B4V^hp3y57iz^3&}O-aW(PTtG|lH;mnKQx6SgAoTp(3M zNE{!xmm@WiJuaad6Xf!ccZcaVkk6)&0OM2YXde_C_Tz`0$WyGOU5_0=P7KVJt%_A=UM+jR2d6l9Wc{Id>0G;O25@cy4T)eL^i!DqrU(aCM%KVE;| zf)vJ)S$%yKG8B>ogPCi{$;iln8pSf?^IDbzp9S3AFRmQ)-2aEub$iyZd86Ud3Fo~_ zgN;|8=F|5DA<7uw5R*M_UTIF<{J_~{6oYu^*w%`2GuC~U`;Zq0s~#Ab?70N(z&hMA zJP;$4D}P8x5m0f5E_|Vl2!A>9cDLa8=eIw*7m|e+a0}&_O+Q7%#hyw!md>o6p03%# z^)7hf(JPFHiy#UZ0EO zT%kF~wgh+S3!=dm493{%*O2F}&rXk1UP8qsAH}?W)lnHJ8!5nL@>R3CIb1;L+5VaX zO1XL8b9{4tUa0S~`)J(K6WMko&+>KuB5_9L=e>=F3-=pI&c%)ARro>VHm-XZEPJ|l zmPw@(1ahJ)uF7{0PTeBmmjX9pu0KTKXCJ@7wDOT|SnyLn3=ml22gWnEF?FsVXMAv; z?jey?$pGEPT&!?((FIBJ(?9K{mDEt7dB_)nUVR`dc8JiqpZ~<}$cqGgp& zuMw7nr4cMOS{KU0`Q41q_n_b8 zk!2HYD{Uv$#7w&PVUH?zu;;{6e<77P1sP$;6TTaS*8S6Ukv6tnRFety-fm?ZQXlQcTVeYJq#@+M6dPt)Agu*nwlf!0Y zm$~rOvG0?QX8ROpae|O~-Hd(k$8SLO`QDx$tD$Ggt>h2!+JmOyZ_%^UB2JfPu+2z5^yy0rEk-1U8X%p8n9m3@EXXE7{6I?3i$46Et z+tczUYV-p)7h$#V(hHRK<4Z+i=mU%sW{i`Rk^7@N^~ud#YDLY&0C@CC}fSwSbkIod0>~s#gd<-3i(*;PJ|#%CujT1U z)eTHPKRuz#4f3J&@xBS2)bZn|-z8W+Kp?{tNEq)9wj}xe{yWkGo+)QgH+M%Y=8(zI z3fB95G`;G^u&kyS%kInzlz~+Ey+*Wq3xweNr;e@tza|9aR`o^e_C; zz{Rax5Bk%EZf~YklVPIz0xjSaXmFKY>HUNE*kX(is+?XEM-74xOrvfT(PIMn@e?J(K+5^?h zT8bei*>uvJ3}%#%j5`cEt6Y}pl6k$;A^w|a*Okj^m)}J&>)!B`5X%QE0ctM8r#LLc z^kiEz$z-pw30gy6MF|JcZT0gZyhExBA>$q5xnjY0OXX9T!ATxZU{5+{N67HD3wtSp zsLaEK6rb9Bzi4&yYak^_yDkutHoVbC&ugV9%o;WR5~CYA`{q>TRPIpjr)b#ayQ?n>4dJX02=GnwcHzEEAggAy3c5N+U#{F(8IxPQofYeGwo`OzOnl~rO zG&?FsU=hu}%fGg^JP|gwpNDl)=RIoHT(Ddqi>L&$$@Qb=-V5VM04-BO_uyE^0!Xh3 z5O|f|$}{*b%Kl(0VN}$|7!GERo>v&<+Y?t_&}l+yOrB)rTdI~vInds3hQy*eJ-{0i zTM2!`m`z8kLidD`Dab8xuRK|vMcwd>Np9_q?3YWE(;-=>PNY5uSCed&T+f!wzmqH( zZWeJYz6aEWveUnK7U}Swh3!FkXC=YOgH$xzVAxz@b?zV70%^)p&;g(DE_}X&EM~z0;l6($k7p)7{V84MBn0`Knmazr&#;5EF;(vZvFT zm)KdsR7iHw9Ph6GE!sYQ8>&$Ej}zm)dp@)TkBNLfAHthS;xi2CQ!{3)IZAwMRNVhj zKg3@FzxN8zena_R%YIWRV0{5a+NTaCSli%cWEf`u(>Tyle1?S7qojY$|G;Re5=;fJ z9dE~->{?|(YBw6w#C_Ov{t;hZZ9Fpl$JqbZxf18zuhGh_j5kU)<(-{B44JXPe;q+u z{GJ1i-nKIsJOVJt--cV7(OrUdigOfiObbXY+M}n14?VhkX053I4tV1QXT34XX<$Gg({>^3}+lOC0$IgM(x*3td`}im5iEZDVHqHD^8ef_F#iI-oAa2rku^47TjzmpedhxDI7;^7?>hQNDLQ$8 zUMB*Z)JRg`Qx|yi_g#j_fQuVA36329?d9b?e@7JrR9$uLTgF6Lp5-J<5Dcv?(EzWQ zkFR#pnG5aAEB=r^qikkljU$#T0RtVyd}XICLlC+%N6dnyDNj*S8tdB9N=kA%T5gNY z(B2zeUuk{zj#LW1Q&I1#2^KoGN+-W|_A&J02?5kAL>f0y!;7MDqKhZmQw_MwFzmx3 zB;+}`CMZxstw6&0-)O5UD0J)ijwHUWGF8;rdA z9mnRX+H=~!VJLB5Zyl;uLRVKUl-|Cr(q+#xo=AvEDW6StPk$TD%;36h=Pn{D8uxx~ zb2=g8+c(`IYMVY~C4@mze7wP_TrZQPrhBBCdt`HpRQG`2fyQmlqpjoPs`%m>T^l2P zeISfE7c1v3t3rATm0#!b)to>MVRJ>Cj!?}b!}N5DQp1_W!XhaTT@z`I;@s+z zqUsW@@l)UJAA>0=DHo|j#Wr@X zV5`<+(=od7t6pnc>t{pb(=o-)ceTb{%TRvL-Lj$-HlC*BT3My^2|T=Yq1G^7nJ#cz z7~k0Fp;JF&s_hbq9Uajad8d)rXaEO*t9O4wa-y;!cG@P+)|x*U#~2xz zlW<^#GZ%@4@qgk|Bl?RA|HO}pM8a2htvyO#tAXV{{FE&zDG7><#J#UUB-+KC%kXww ztVmVyEmWsIa%ZPJb>?EVvmNp$4^Ry+;>V8VaKGy+YAB}dhcYrTS6h9nVPs%(9b)QY zmKea$wba3!2g+7D*jcd_a&bv0xLK>uzK@HGOB+8)Z2x2CYs2mZm#IWee5=NIsH&0V z1|;{t_0Crygt2*1yUXVzA-P%gxPmb#;3_n^SFLDfVPsej}vk?D%y>m~}DyRF()KcsrhRt3;c6fzL zZ4sMZC{|osW3GeH0Q9WF~!L z!LaHEV)S`iecq|s+$3T%Rt5>B$05SR8!Q8|28F+2PW!_bQYmaT>1Xo3#&v}PwpY&B z%hX1ZI#XOyEmQk?Dn`~rKbHJmlDT=#%-2`vCND!1Q(|l}X~g>F*cQg(pOHhVtH-x) zLCOAZZtE#0f^N$F6U7BpUepH2W_uegonVMEB$R`ri zf=~s+0cG5praHN(R&D=B5S}f`ArWZvpZ0e3HcX~)p*H@G5)G|Ml83G z8OCi*0fku6;*_u&ATU*_Lj0!xo_{EO==#EFUf5)nI5lmp4;q`&Coc!K&r&P^`|; z5T!p)eO@Jx1)Z?#SD3)&J=el(oJR4K`ntca<{Siu{VWgu9v8=Utv5+QsZX#^&;>Cq zKB|h#W6bcHI7p1w&JMT0HSD_`d#W_ ztG>obKP5q@)*a4JBoS*ARI)irSQ*ghdU@TP!+b)Cc z`gBf|&OOd)aQy1m|L`KQWW| zCMGk?Yzz>RwnDSDp0X(0`P2`jz~?OxMjy?e2ux6iA7({rr19g&vWsdS!MG<6k6e@$ z1F8JB*+tD($!)AkWjH4ET^iyJo>fMXth%QrOjOTufW_<*5<+XtmqC$Hf~YTtyNWgK zRc3vIidsi*%IEZbLK9$JO{KVjZ^9!I#_CoN?iDdQ4W}6Xkd(mG=g;Q{N*Ek%lfiw4 zRtJpiQ-r5)ijSZ54fa((8;*oT3EHSH2-I{IH$U)%HdI&ZXv5FH0ksEchO3NjXPd)J)j>?lXE>?LHii7K|H~GH24&G7QX! z`<$L?R$^DdU4`YcVaxi015VooJsOI?Vi8j-CwBlfQ;;d=K2Y zG{v0do3-KK;4rk~QJVCAMORQ%F#gQeMIwc6AC+RAG`GN*0C}!sLU^}c2H4?d1kt{~O`P|g{I$KNfl@I4-)Pp`k!&1cNNXwu$&QXF669Jw>ASR%U#iGLKX zaJFGt z(9_xvBMPzXZ)TzVJwG5+71RQ6?!+ybT4sVO(w#c3Ohi~s_zRehl8Eg>ge>eJ*{?i8 zO%B~gGksQXHcrLGCaujc->SZKIpUaml_)tblSxH%Y(k`>Nxa>CA1H{!>5-Y6m)k2H zUwF~lPq!ns?A`vzIu>Ihr7~=Lr9+6cgv*{NYoIFj@ICW(&a}~c(-aP(XUFfG3dC3q z1-rn;XA+cRpUTMJ6~)JqJmTgq2#JyUP3RsavWt<%?-qQ$QVOpar)0}{ZT9?7fm*#; zxBA^02I2XaJWqXC`P4{-=Fa?Dx+O7FI@2rZ$0AFQ62GckGH|xOJC0pZi(s{26s1n$ z)lD@pM!1b(t_0H-RBUa|mQ=l#_D^OCn}|r!+>V>{erXa>_}b)4JSMwW@*_fN2HNUc z@XTlbxShgNrYXrAk7yFw{RlmM%rMRHgru>SX%}z~cB=3H|o{ zxcL#b#(3><=d09r-}<2^F<`$rxyW=DHp?PDGuDWAG9GQ;Urm=Jm^3mHu}>;VK_^f7 zZ9ds+We`CKbB?1}uV*f(Hs!?}IZg^x4NQUBPxiGLBfejl-9BIQF(uPuNzvT=W~Y32 zEDBp0B+D7g>+^h8*{hopjR@;~c$rR8&%j!?OSmtQ-FwO&hO&S9h@yX|-g7{&?AMG&4um&q%x@>1V}hO0d%_=c2Dadq z6-mz1x)rgcB5@!bwDgKbWrNGS{6n#w5s-}aO_ps^OSmJ)z}Wi)W4S02`9*y$f2V}_ zHV~`%T84Lo&r+rF;Q?)S1HvlFwn@c1`oi1#5Cqdmo&(L^ud%Sp-t7%5J|7#-sa~YW z))Ju5B)Uf!d*DE_YB3FX)ef|$RN|e~u;z4221iLO~E^+OI{byfe=l8m6#a@ zA9qR&wMVDS^c4$#+=QQo0|uks>MxtvUbmN=HGo6;cS!_}K>_nJeLzLumxz#Qr>@36 zQcmxgo8wb`+rC876}CWcMP~|&=;Y4o?GeuV7I_LNJKGxD;eO-WD`r9Kv1Fa2lMJVe zJmErT0}$L8auHjU4udR87monQLNDfkY1&(45^pynOLiimeY@AO+ci7x+iNt#(^ zx)3Th?Shw!`QN2C^oixv=XtG|gARM_Kz${rmsf8T6%*)k^!RmjtGhqb20=F7JPI@? z>7n`dY2kM9)OP>t$BFZSJ>4Xdi(>UXR6|V>`=Py^)wp{}#i`L(E8$~0pW?41#K0X|Nz)x<#?N!5kNLz0E@yGC8aN!1qdP__cqw^2 zKl^M|3ZG0>B4%-pdW&W0v$Qn1WxxF36lM}ls8MiLHG1{tdnAp>RP$kEY3LUf?UW^j zUi=IB&X+&_n2(9(InUZ2b&i9k?wan@=acDsBwUnK4#)Ca@E$qmEac6CSn2y0-;S3k zC|=1+f~uSLe3E3Z!R?PMTrxwOPcI~0etBQs+#9H;$FD)~x5_J1$5^0T429s%NeR$u zz4V9&nw_|{_{LtUibJ>N1Q)0{y=UB!&tq$%=YAu^DAr|Shlgz?rY1VLs))d znxi&~t-fkOm8A`9%SH_r%mN>-O_$44F=ojI$Qxx@Gf!~d3kiMqkx1nYAvfI!E^cIv z)e#=$OleD$==Y%vy>|t!Jt|m)hP0_zv(;{HiR?;~F~L+Om3S|u!UEYpZfvMLej@*! zHy%zdYQQESFd##0P4V8Y`)dqnhOXmeE*3ET&{(?>xl^>Ok=(8(BJvvKib_9KC{#qK zrt){ZuqiC@gWn`R&uSP=AjC+))BDZ)wZw3JzT79+j?KPoG+K0;g2r>CFsXP4qP8IO!Srk{c~>n%eGtEX%1X3fso2#A9=G|VA!WKl?zummtjFYJ z_6+>VTFg9U&dd=6%~WzVeo{*0tX3Gc zm~KeG;V92WB3*V1ICbN--sygP)m*#45kggBZCp5$V4>VwTU9&-+WuL6klo3uQaZd^ zY#XojQb&8%79|@7$rsc+=bfKvcDm*jT?z@b+l*)RvW{simBHhWFDCyL2ex^-aXJkxEioJPmf;Q)(m6uiMfbo88Bo%UjGu|ZBd6ePq zOE$K?2kfn4>tqlm;R}+7qYTmA5A|Ud3Aizst1SiBC3!yI)4f)$8WvdTv=If1Y&s>? ze%D*ZMBJ%6g?(JrK%Oug1KSu`=g$`}HJr&^kds)pR2((FZ5FfY8pXUv+do|J%g*~6 zw!7P+p9JoeiFmABtfAtx_&QbxjM@FSAEhw{q2e`Fowx|G#T>-IR1`2QCp*qj1*uOq z!^v#rBiO9Z@>NI^l{iW&GoxqmjgHi3S!}Magk9_|PwYVJzc3Zf6>D50*@~NRaZwsC zDw;B!eyM#F;B@3;E-ETw#Il&4SfT<=*9T9VR)*UxHvol_`^iNCFU%Tc$_c%i3#-9C z9NY2370}W!=IqC=46|8qd~bF<9Rf1OHBLzPq*SpYf|BBjb7+x6QGwjVl1fxPX#%I1 zu*PDXR}@t|x-&%_Ra=r)Yt3FeYY4vW6VbQci6fH8f1AE~&J)cYCdD(iAMl;+W2iS} zmMjHj_9cGBD855kaK`kuPk;NG9)!~jn(RxKlsHpw`E3dNL->V+EJ`!^z1i9Crw@fu z31t!7O&&_+cJoLxvP|K=8>a;#N`8|s1L@+kfYXK=?04&t&meT6tmEdeOVavV{tOs? z>f_-Od{#Lh^G0HKj)398k5Q{P6^(3>6YSB3v0~cHR6MQPw(DhtZSpfAF*0_?$?Do# zTBiCniBpY?;dWbJB0(EogSGTg5^_dm5A!q0C1~IGTLn>hRQJFe3VSDtjZ7&g6KB0t zQmlmpII4ZGnP(%O#;pV?mX8-{&&GE2l~ic=HpOp7c7`dHFV$9_1X_|7Tx~Ymf#md$-_IsYj@RN0NS#lk^;na_-o7>b|rZV>(1 zq&fK93v(?msl<*te3UI%m0;sWkFnPJIvY7*tmsCC1n`(`+Okn!o)K15 zSm4Hih)=-+8E?$<4jVagqzr{e*i-lZ(~g}n!tQxyjl5duNir&EjJhJ@Z~X(jZiT|D zqiY>1A5y^!zl(;Rj}zX`2T0>d!CuOXXQlt#Sb-iRKCjOh4=S%D8J94SKnMAa0gEx> zPtjh!=^4g|=l|+;FJ0FdL)3%ccz5*x59yu2IQF|dPeK`$bVWgUqLK9q6O~pLUIBr( z2?9as*>@eOC?^Rf2os_y38G5r3Qs_I%u(11%(_O*GeaRU2_nSXwr;T(URfwB^i&%q zg6uS146#m%(wa^63b!HjK*UM{OH6`VhJ>FqF}6;H4Aj<%xk~6N8qiM)Q<{~OluDSB zQYDLTr{aWHtzU1ObnV1rk9W(q!r7bwSJt%2yCSPqW3_E>=&*CnKVP1iR2Q&Uty^z% zUwqz$xg3RA3?4k#YO87`*ri&V^3Bc6w6g76Z2pQ>VjeL&^VHKKfk2kZ4GIHFZrWu1 z(_5^hs@;w{`7~MJ#w)K3+qhk!CJ#O0y^^Iox@6kgR$3-POboQbgp_xKl$tdwB>+G5 zyacidHfr=(2~H`*N?X;o%{H(=3P6%9eZolLRodu>&3;72g;y)q#B{}0tBsim;j(^i z-c)J*`zvfpguis%3R}2hg>8_f_2?sya_i&vvMQ@AsZiT8^=zUwHsNhkcFKc(bD>U* zJ|kPoj0BmA@=BX9F5gy3xS2F%yba12Y~^cLSVLunE!!c>xBB?tgJ!vxO{+I--L_U6 zF?5jCbR^nOfBFm6t;NQuk1sg)90>s%thTaJp-y?S7z>l^JexOfzL;-<9eT)2c?O%U zRrlMP8g0q;QX4RIgshi29{*j{B!yEeItC3Yl(KuIZQ8iOigy${Q>|^Tk?`Fh%X8!@ zg8N|!-XRNhVSb(!3j2x;Ypt=i!PZsOT9t&GV~;sfIJPK+O#-PxXeN&sWO-7Mo|`jA z3TJ~|aL#$Qv1Gd~U%k@9<_hE`Xq4iJ(y(;JN-I@A9(v#b@=#`2l?0p?2|X*--vxt* z+kgRsH1^VLYe}OG9hhcy<%#z6b5Gl(v128Obl4sLy359l9p~dyYh5f`N?e`BC{o1Y zB}=VVp)8XmK-HFRu}SJxB1l|PqXr@Zwt#mKnqD4z=$iN~gM_E=aC8UkKB|v8k7^Z%ymeN&i8J*Qu zq)@Jvi#GYV{oT)hVOrE-Q>RU}^Dj8hUYz}cgu*mg#3#5Qh;rSe{@N-YBbiGHP<>?S2CmX^f22_Z{n2DwGSwxZRd0v@RyBT3E*+w{X9_ zBpFtcY{2kgHdbxP)jUgsGPQv{U0T&|%WTTz$ueA2yP#a7d7VwTZEb}l z@Mh6A3Cs$q%xI%(tyR|4`nZ|3gq}6sAdv=smTXt%#aMs*zk+DSmv2xWa zH&&qJ#x(KV^CjUBr5@u+wfZVkw7FKeuF-fOKYWn2DqOWecx{&w(A1f3HSz#AS8cKZ zntz+6JZ#vo+G47Q7FAe*VpRK!-c@S86%`do(Uo_)qR8`1)LiS7w{@wM<^s)?A%oN&)BLzw{Vb(cxQ`h-MPt4u^6H2l*T@*uE`h#E z^=elim6lc5wvC%?>ZoDXArBTF{)(Cgg_gBhZec$wmLVZYN?fhz-hl@nXs;|-Y=<6p zq)nVS-sZkESDxTz%Tp*QG_XC=4E+zKD^Ur#J<;d$YcFaf_in8qSCm*--ME|-DooTs)M_S^J z%|5qw_F6IPFpFj6$o;z+$r^L;izX># zjBC8^+qP}Da`CI7;+@Uv!)kfe>Z==M9LZ2fXt9kOHq4r(j&9$yLE**yWF$CK9$1Cx zi65<8zRK3V^paN%el9<@#;Q~Z&0!Q*yf`Q+=tkUclfea}Bzh822q;I4DOWx{RMXWT z_q58|rF1-rLc&$pnC{CM6t@p>4`V3(h|vUdBgzkk1Gmv2WAGq(qtxhGeN{apLj=#0 zSCoJBUDXjVl&`1_tv&LB!z&>0Hb5XKJ^QQ^WnUqlS9Aqo9#^^SV_Nf|@Up=}r65Eh zKWXyn=#s53tF+A}<(Aj4O!45EvNUEmgUpto-J#HlZ8fqYC&&{dlhKfY1H?eGgO}zx$k_vf3 zatdUDA8gM(@r2chVQG=ItcQbKu_>vomhjObg(cmY9#+mmd7fet`syV_tlzvH)01tI zw~kQ2ybO&i@YeUHlRpW$PJqmqdr>-Nt;a`H_7_v=6bI*DCDMG_0r;T3DtEH z4)UZB4$;D*6f0?{vvkGU!xv%-hp4G;lt8DjC9Oy5kbsmd1!e5SX=-PN6aB&gg<=MY zcIRDpdp)7&gaWRU!q+N6AXh>o0?V4>DqCAz#m@N|U@vPVnHgKfq+29-A|MhH*x1;r zu)`FqP+Y=}+BSRsrNwr{;S$aU%8OB7YnwMKgiC@~)wWuDaMOJ*q_j%tOTp781*2ID zj4N*JnB*jAlsVYQT; z8m;fiv1|#eF?kQ_8s)iCi0AsHODwOjP@as{3U|{O)A(JtW}U7Tz@6n8+URRqQicq1 zrM9N7R%@fG)F0KtuT|}Du}#~zO6kkhI2L9Kc_F#DC4tgKRNDP(YX^3eyy(=~^r zB(}=?lBe-Bph#=NG;dJYwo4&vRhvsIs@&>YQm2K)P3^X7;}*-SZMA};Ld~Zng%4_7 zQoVv&BALX6O)YJ8ESdE% znj=~y?(-x?IAI7+Y-NrtMN_H1>p3g$87^#?OW=D{aN{g}BE=hf*!4pwN~{;Ad@7 zc4j}TlJdAt299*iT_mU362u8eTd_)OizK|oB%G(K{|VpI4hk|7XIRCyDjO&vF)eF= z!ahrF^pQu~P5-#X3Pf854I6GvRmGa4RZ^z5+d$DOyj%?$D+?DcwV?xwtWka0E@eJf zie`xn2nx!=#i4o9Y7Ls>>((u?h4bgD&1N|YvCEbMv1;jZH^2-V*3XtLnXk1|0~8Lb zu`5Mn&DwR69fi9Tb__EaQiReA^0bx=>$w`EIyb8SONG_4b;b6`)6ZF|@EALKwCa|o zb(3Y*PXcp|=2U~$*cGWi>onJy53^r-*+tZtj4E|IN@TQ3v1ZYydd=Y$joGqdh2u%t zsFgAw6VcIT83NS9)RAk?b(%{h>o!|zTcZT^ zEZfjnuW++$D^oaaO!Q>?=1SWjWs(K(2*-pt?I_#f#sEV2(!>uMrQqSI#DiZdC1tw| zA6sP9N!Pg8p}y`X16ihwR+Z)Q)( zk$_#Td7Q8MXk!jv%-^7J%Q3?2iN~L{O){`mu3ayMHQ&9ZE%J_a$e2)4(ja4Asn+() zu}2%&sQv` z$mV_GWA?npN^He)n>>AztxVbIMvJGOdd`La<4-(BJZ7U7yGn^^O0ylsWmY3^dCGu+ z;)@D3R)69psS(x)N1LUd=GbT*42ZUdh3@k4^^Smun{Z2poERDHQ zwrXyq^bn4V#{^!({3N_A(il_`^@&VOT=sjO1h0%Li6Y};F}l;Oq@XxS33=7~Lw*Y3 zLtzo)^H4WZ`aeCdbo76_(%|iZ*OR~3Md@A1(Nz>2MQ(Z-@K0a!!#%$)ibfT6U5kK~ z00Rc=eZwmt@b*9;C_VeAALS;G7B+~kK>MIi#QG*Ez8MeCOj)5(d}<{OV09TWYP5}; zFhR^XNkV6(LJH)4C~Hx;(RLXytE^6zT^7S1amb;*Xc5aB3-lZ631N^!Ta2`_yj;Ti zFfHgTbZV!-cpEu-ykfb>Dy*VfR$YZEh}jaZvO{T$cWkqI31Uq$ch*VaY8NACuNgv> zmMvZ;;TF+Ob(BzAuJqI7g`y!?gp(vp_8&Y*aoLwh@F948~^AgVE#*LNolIM(|PCyS9 z76asEp=i=Hw#v)3ZJk2<%H4|H(UBs>s!HKCb3FWwP_U_!r&xg$!5wuH8iWZ}>{PXX zoIDdO*lm=co2yW_N!rDS5G5>tRaIpY7PLrSeby>`Yvf6rFn*dHIP(B&kg}PAXHJ&( zCmwy&R?72)XURPqG7lEy=Sa91DMcgO*9jC39%xBYgwH$o3<>Q;vf@{XkzsF4)cOaN zEhYNQqmL6N63`_K5DJ3@`}SLJmOvw+LrM@Ke{5cG$RP(wVN{H_*3(Q@e`+HnG5%a% zh>s$iF6Lh#%kGvkE#58YZ|5F+th_NJC7epJmQYD3&HY-?y=>`1WB)Skv1a`T43H8v zOlvGgX)LuV%|IKfKHn_wC0;?iIav8qC3GjHXIb%<4N_RA+sP*!BSk_B!MDnCuZ7=L zwN3Vlgr#PL7u8RjF}cSkSMUB(!V@KkO_?!6SasS4jT1G*JyU5CU{SVf1{UEPrxk3R;lz(z+fz6*UAxVF%l_QLYh5dvlrpOzXBc&`~f?=7~ezeOfO}}PJ z5ooN*ky6CEh%PCJnpb*#=R4QhlFi%X@mgaerPOSe(7i@sJE<}Z5dOpZvScZVhaYjI zTX%DWCwY$|Tv2t$yF%C|n`tyQw_Bb<#*Q5~UF+74mDga1EtvnZ=3tA$E_c|bwaYA1 zp+$-6GYl43^p8FEC=c1h;yZrgWX0yobCQ}Zqes3AMzs<^TiP&wB>UW-Cc1LMiN{G; zuCiNiz1@Zm9jT22R%)IJJB`_X@`9q&)=4oKJ$jtC@i3)Nlmc2OPavMQrs8duBW1Z+ z^{uV#v`Q%er=NYO3?Ti5RkD5W|9wr$$40y9w%aWQZH0|BWOP9RFO>3_o!x9BWeAw4 z`8Ys|5Q^-!ZN=6suT-u)S=$sQSS9+zCM8E6bG)5>?%DR}Q%`Hnk=D128)rBD{RR(p z%*^ShzLufG1wOo-gRP(HpdG#3^UXvrlW>3cJrBxrF0p7XnbX+WLUmJS4WN+YujarXw)VRo7S$jk}b7X zqwiVrcC^ZHlP$wT<|u`~O&G8Fu~9gb*_eY4k`lSjwl7*H;TFR{qvlqf=tHL+cEq8U zpPet|t5sgh=`zG@RXFTMDJ2T^5)IczD=rj) zwQaxTT^^cxr|nYmqBOTT0})J;R2N z94^JY$<96ZTw5;M{J?{EE3{Q(+Fu0LqI}T%8i3v3`NbRhO?V-(H0&h(Og3_~(`VFfJ3po+iv6>~wLe#GC1uT-w zw=E7R@$b} zzgp$(y9UX-f;D`*#wz0-@8IZ><5X{X8P$Ii$4~GuJ_M3-m0v6ib+tY-Qx(1@P<&Cn-noG5e1kiqisOp_IS zqb*vfh3cwzOpEIa`sLX(vH+J?-fc%pVBMs#)6(2vC!KbdZwz2vQV2CR@yejwF&?x< zujk8-Rl}qV&6Hw=^0RpHLiZ#P4#PO8mNLxi7r*?iZBv`rv}33irdMihNV@t7gF=_Q zBa9n7qpX{X3o&l7RX-x^;|bcfWx2w1BsgkLHZ`UwRPtq;_wqb>Z-%<}WvJFC43;-; zXv;7gIZW#hWOW~?F@t9=Q=S9r90^^fwQ%_!)`$0~tXv^j8dohc1f*$!dW8h_yR=T~ zh1t()=Q|l(Pp$)+t<4(sO*>4C}mDcQl}XKO1=5F_GY> zCo(gWWV9I}r8ZaLL(Apy)b4M{WEwXwzVMu_UA@B2Qi##C8B-;+Z?=sJm(0l)4U_RE zD_3KTwP|bsqj?SOgU<0n7#%byRU0T==AoVo<}VOEs@9lo)mpSVUkfvHCJN>eHetdf zTfA(wZ#0vkZ4-(lxMQscTQ-8pl)SharNp?Gd~ z--3W6m}%E)#gR*3mq4&oi|!kxAXH8$mw+|gLzCDxv|P-&wyx5J@#QPm*;Xkh%@Vje zRqv*xJezgc3>zgz3Zd7jAvW`X8J3I3=;3>*5>*_9kgg3{ z7@n+H?6Fcp2+u$eg|o4~W&4&*3hgVi4YI`6RF+Dptuu9<@+R=1Q{gb$qW7-5oJk=_ zw5bmWLu``wt5%ES*C`xDXIIE0G|QDalW+;6iph0Tu6|oI?iFn8`;PoJwkXO}6qEZ!jn?WpMrbJCiP#yW-MNLU=Aa5VDb zh0;y?@WwQ2Y&T1|YN#o*3JFEkTV7DT+imTN)vpQ#*Z=-H7n-};n-%`HTmMkNTFb1!E9};Rj6j2y|nUaJ%bS-)#ktaia(>Skv0EL7f{$RpltFc zd8NjA_+O@kdbb#Bu0|UV$V)@`3t^=ab{lJ}6lzpuC8{$5E3ewx8VN7j9ZYlT?z`^v zbrhLdX|`1JdAvM*Lk16XLBj=chNV8(lmc0!N*L5>epJXKw{g`1b}F;Y+AP5>wo1EQ z^H3-5XpF71^=sDZy4IPlZCdC}@GMg7fJE28&QH~5$#+=f>vS5Loedbx3&+-5W2dwqb7BHYcys!tJ*S1J5W^A}-u&g{9`)$K(~$MeQqSAW;mb=ab1%eA}O zP@ASTA$WLs;XNfk730b`iuZP{)hg3mtdiHFPCF46R}zw{9U!&A$31u5BhvPOW5Kf+ zy~@=mTQ_aC^i$JBll%FaAKH&H;50^cZBghV;|>D~Yjk3)$!c{*3GUghhR*q*&k(E-~k zW47{x1j^4c=dZGvw!*hkkq)Ky(EayX?dCP2b&5`?WOqpUFqB4SF3}GdtFmD&iv<2H+e<7jRf>&x zQ<*Tws8OgeM`#-KDnrT@>k*e}UM*U>Oq)1tvJn|A8qW&Jlb4Ypi8q`t9l{0OB~#;b z`owW|u-32H{1@$Gmuts8g_dGS!jqgTC5`@LmqFH(;>BGrL)U^O%iW8J?nu5q=utdW z_wK;7D1cSh{l3a#wGfyktDoUJgw`r|R}4o<(VR48tcORUxTQsCj**99 zdzrnsO0mGQ3QF#(zcF4lc)}rlrNu*3PD(1db!g8}D^787HvU0b1 z_?)Poh`mCg5KtsY>A*c%y4z$KR+xqaz;zo|xsripd&cx>+No)WEYlLKMBS^!5LtVn z6C|xsN=aKnvn|%5{Kaa!#~(x8Mbud=eYr5{QkwM}x4BY-mtd=`moUiz5`x(Nd7A_u ztZalUtkt>$6rL6d|1zwSjbnhW!>9kLUOHyTua(GJ-mG}^3WYbVUcK74t?n;on6E8V ziF-rOAwO9*jT@Dt-=}?$lAQ!Bo|3|A%w?~aLb_! zFY-))16!ZgYyHbD_q`LW3o2jU1=dCnbwq85b{q{F@*=6t3*1%_IC`P0V0Uu=pk063# zv(`baTDm~tl?o?}X`>HefdJvhIBMLvw^hGAC`AP{$f$YOzaH|nP4Bz%YG2zGZM&;2 zYYEBHcxT<#RtbCyU!JWUy0k%scK@o8wO(pKL`hJz)vp*D@ED;@a&FYBRU7T^H{4+F zQ$HV|E#BE>EnNl)1W>Tkp^375ueFEdm8;akZSCIf+r@)F8v~$Hd477a4hBHjtC2qc z+u#0X8`iD1^WS~3Le`}GXr8buA_6X9tF=<5wr$=Z>-ufBMeEq=bY4=G1ffWd!fMRA z2K5}6NU+25TcdIDhu{C*=FFLAU-{}+Y^aoBS6nDxpZxI;p=z7v<{$p=msT#XXp@B6 zR?)F^(KEtw*wg}#g};P1TL{-kLHYVuzhb*v8dA>HUi$xLZ6W^5^Uv8O7hPm0pLT}tl=o`h-Sw}M zfPcpwH%m^PZFLF(tCw+yTL^x>6QcTrd=W0W0gl_X;lUlZ-DS%a&UcZ*cBjj0&d!vS z&a-S#v2M*8d*r^mY=yjXRoZZ&OvFg%ky)C;^cXuBjPO*j=7K-}Es&mhYL5D4lYQ{& z_uJ7LyPWhA$2!_p8beL3t(f<`mCCza+bS&N6=VU1(|u@=#vCJwavVbSWuwCOe*E2^ zD3tObyHs_atXyq}{(FYydW z0hUHJZ?0&8+I#9r$6J2?!P)>qyL4(y=E-X^b=ox1)^aJ zZ+77$Z@PsY>YyDMu{5>{(lauiY-y3u!CjsEw|vp^oMrRo<*Qz?{Qmvs4<9@F*6eW; zYaM{_3JC1y2n40)&FG-CG_5$#X-z09tc(|Th`#U+ubm@s+oSjG{ARfGrXoO4(|fw# zdtC6-dg8bL_>adVhuDDb_i_JmcQ-HGb?<8u!sHR@cw;L*virT8x&1rYlTVrb@;d*G z2pRb|{(XCvzVhzt_26thyQ|mDxAu8APgjrbe)pN+^)5d7jM@MD!D~{1F+K_2L-aoM z_44TJ{%qxYU4#Ys@e(b2O-iu%(`&Bm=8va^)wjOA)5N>Nd8ZG>Z`^*@PLmAPozLv_ z?(5um@=>$j{N_Ir$p>Ily5IkCb9XLC0Jqx}J{5oc{d)gKzGJ)J=f8S$55FjU(X^{z z&lhTDT-AKn9%lENFniMG{L!%Ht_dXF)+@68Z_r7KO566hdFGK99b)LCPxA^}Pjx>r-@Mg=w% zA#Xy36teb~7RX;F zYrdMLXg9UT%HI8fD-X!Z&RG(t2fIKi+zJTnR|o{9=S}F2gse;*2vMhC>VLmpUby%x z*WGZ_4{K%B!rX_YmorHqBDmrs+oe7*yn#Lu&btag_n>y@8tq31c11jx%6vgP8(tV9*5G1fP)gDOL;F zvmC{$-}dl5I+x=-Ym&8?Qv%q&GZ{mZ?!z}!ZRHWgD!bKCX^4-fZG`_IsA5Hn4rG%z z2Ij(_EUb9l6YG>b9eC)nTke6}>+Lx@E?n_Hs;U1djkMI$Jv4fA)jORQ z>4UmQ-aXa;d9OzKd3lt}4o@_U`Vc08HJj%>Cm$0LMm*S!7wL7ioyt;cuMapz_h}Ot zu@MDh%e`NElg1B2rRMtdV*Ec|s++f6#bA!~X0YulwV(!3nf~GBM`^GkcM5CP8<5gR z645F?C zxZo}s{ZsqhLkyOB^E|cXX+L*MxzTP~>0>5xC;NBL*HbIE?lBde>EV~;HHz9zIuD7% z1H~nW462i8d9oTmpxw02JN87Y5k2tr3&H{+&TD~iMTNWjE~=Z#W5{*SIq(Bx5ApN* zcQ;aPV@%Ru`qt+uoku(LN1MScDo?-3PxL1mFY;#7e#bP**J0zDvd4mgxei*3oaST-zuyJ1DbP9UK9HR=+ z*zv9vKJZNia!3h^q6vJrIi+-4^BD~$a%ZZP^^CFatuf%dg7@cUrDV$yCIT61o z`W9jq2@w$!(0%=D(>BNK>Qs=Dr{_fpl`)?XaO803g32&a#4l1n5C%x2gZ!j;5GT$W z0m6B3ce7nTf)Vvj)W!s`3Qi`6QMPJ54(@Zx<35CzGcdYDt>XmU2{1KNq3f!Fd<7B1fM)$>Xc8x5NO(Y%Ygd0E2f9MXb-lZr=6⁡_03On;dJ# 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 z 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μ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�!$-e}QR*kC?26lW}Xyj^HaCIg0B_blr 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

    slSx03V+$>je;qfCaDi<`fia*% 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 z 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 z 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 F{{VK*hEV_j diff --git a/docs/en/get-started/index.rst b/docs/en/get-started/index.rst index 31051267b3cd..8b12a0f93cb5 100644 --- a/docs/en/get-started/index.rst +++ b/docs/en/get-started/index.rst @@ -108,12 +108,12 @@ If you have one of {IDF_TARGET_NAME} official development boards listed below, y :maxdepth: 1 ESP32-DevKitC + ESP32-DevKitM-1 ESP-WROVER-KIT ESP32-PICO-KIT ESP32-Ethernet-Kit ESP32-PICO-KIT-1 ESP32-PICO-DevKitM-2 - ESP32-DevKitM-1 <../hw-reference/esp32/user-guide-devkitm-1> .. only:: esp32s2 diff --git a/docs/en/hw-reference/esp32/user-guide-devkitm-1.rst b/docs/en/hw-reference/esp32/user-guide-devkitm-1.rst deleted file mode 100644 index e0500316264d..000000000000 --- a/docs/en/hw-reference/esp32/user-guide-devkitm-1.rst +++ /dev/null @@ -1,335 +0,0 @@ -=============== -ESP32-DevKitM-1 -=============== - -:link_to_translation:`zh_CN:[中文]` - -This user guide will help you get started with ESP32-DevKitM-1 and will also provide more in-depth information. - -ESP32-DevKitM-1 is an ESP32-MINI-1/1U-based development board produced by Espressif. Most of the I/O pins are broken out to the pin headers on both sides for easy interfacing. Users can either connect peripherals with jumper wires or mount ESP32-DevKitM-1 on a breadboard. - - -+---------------------------+-------------------------------+ -| |ESP32-DevKitM-1 - front| | |ESP32-DevKitM-1 - isometric| | -+---------------------------+-------------------------------+ -| ESP32-DevKitM-1 - front | ESP32-DevKitM-1 - isometric | -+---------------------------+-------------------------------+ - -.. |ESP32-DevKitM-1 - front| image:: ../../../_static/esp32-DevKitM-1-front.png - -.. |ESP32-DevKitM-1 - isometric| image:: ../../../_static/esp32-DevKitM-1-isometric.png - - -The document consists of the following major sections: - -- `Getting started`_: Provides an overview of the ESP32-DevKitM-1 and hardware/software setup instructions to get started. -- `Hardware reference`_: Provides more detailed information about the ESP32-DevKitM-1's hardware. -- `Related Documents`_: Gives links to related documentation. - - -Getting Started -=============== - -This section describes how to get started with ESP32-DevKitM-1. It begins with a few introductory sections about the ESP32-DevKitM-1, then Section `Start Application Development`_ provides instructions on how to do the initial hardware setup and then how to flash firmware onto the ESP32-DevKitM-1. - - -Overview --------- - -This is a small and convenient development board that features: - -- `ESP32-MINI-1, or ESP32-MINI-1U module `_ -- USB-to-serial programming interface that also provides power supply for the board -- pin headers -- pushbuttons for reset and activation of Firmware Download mode -- a few other components - - -Contents and Packaging ----------------------- - -Retail Orders -^^^^^^^^^^^^^ - -If you order a few samples, each ESP32-DevKitM-1 comes in an individual package in either antistatic bag or any packaging depending on your retailer. - -For retail orders, please go to https://www.espressif.com/en/contact-us/get-samples. - - -Wholesale Orders -^^^^^^^^^^^^^^^^ - -If you order in bulk, the boards come in large cardboard boxes. - -For wholesale orders, please go to https://www.espressif.com/en/contact-us/sales-questions. - - -Description of Components -------------------------- - -The following figure and the table below describe the key components, interfaces and controls of the ESP32-DevKitM-1 board. We take the board with a ESP32-MINI-1 module as an example in the following sections. - - -.. figure:: ../../../_static/esp32-devkitm-1-v1-annotated-photo.png - :align: center - :alt: ESP32-DevKitM-1 - front - :figclass: align-center - - ESP32-DevKitM-1 - front - - -.. list-table:: - :widths: 25 75 - :header-rows: 1 - - * - Key Component - - Description - * - On-board module - - ESP32-MINI-1 module or ESP32-MINI-1U module. ESP32-MINI-1 comes with an on-board PCB antenna. ESP32-MINI-1U comes with an external antenna connector. The two modules both have a 4 MB flash in chip package. For details, please see `ESP32-MINI-1 & ESP32-MINI-1U Datasheet `_. - * - 5 V to 3.3 V LDO - - Power regulator converts 5 V to 3.3 V. - * - Boot Button - - Download button. Holding down **Boot** and then pressing **Reset** initiates Firmware Download mode for downloading firmware through the serial port. - * - Reset Button - - Reset Button - * - Micro-USB Port - - USB interface. Power supply for the board as well as the communication interface between a computer and the ESP32 chip. - * - USB-to-UART Bridge - - Single USB-UART bridge chip provides transfer rates up to 3 Mbps. - * - 3.3 V Power On LED - - Turns on when the USB is connected to the board. For details, please see the schematics in `Related Documents`_. - * - I/O Connector - - All available GPIO pins (except for the SPI bus for flash) are broken out to the pin headers on the board. Users can program ESP32 chip to enable multiple functions. - - -Start Application Development ------------------------------ - -Before powering up your ESP32-DevKitM-1, please make sure that it is in good condition with no obvious signs of damage. - - -Required Hardware -^^^^^^^^^^^^^^^^^ - -- ESP32-DevKitM-1 -- USB 2.0 cable (Standard-A to Micro-B) -- Computer running Windows, Linux, or macOS - - -Software Setup -^^^^^^^^^^^^^^ - -Please proceed to :doc:`../../get-started/index`, where Section :ref:`get-started-step-by-step` will quickly help you set up the development environment and then flash an application example onto your ESP32-DevKitM-1. - -.. attention:: - - ESP32-DevKitM-1 boards manufactured before December 2, 2021 have a single core module installed. To verify what module you have, please check module marking information in `PCN-2021-021 `_ . If your board has a single core module installed, please enable single core mode (:ref:`CONFIG_FREERTOS_UNICORE`) in :ref:`menuconfig ` before flashing your applications. - - -Hardware Reference -================== - -Block Diagram -------------- - -A block diagram below shows the components of ESP32-DevKitM-1 and their interconnections. - -.. figure:: ../../../_static/esp32-DevKitM-1_v1_SystemBlock.png - :align: center - :alt: ESP32-DevKitM-1 - :figclass: align-center - - ESP32-DevKitM-1 - - -Power Source Select -------------------- - -There are three mutually exclusive ways to provide power to the board: - -* Micro USB port, default power supply -* 5V and GND header pins -* 3V3 and GND header pins - -.. warning:: - - - The power supply must be provided using **one and only one of the options above**, otherwise the board and/or the power supply source can be damaged. - - Power supply by micro USB port is recommended. - - -Pin Descriptions ----------------- - -The table below provides the Name and Function of pins on both sides of the board. For peripheral pin configurations, please refer to `ESP32 Datasheet`_. - -.. list-table:: - :header-rows: 1 - :widths: 10 12 12 66 - - - * - No. - - Name - - Type [1]_ - - Function - * - 1 - - GND - - P - - Ground - * - 2 - - 3V3 - - P - - 3.3 V power supply - * - 3 - - I36 - - I - - GPIO36, ADC1_CH0, RTC_GPIO0 - * - 4 - - I37 - - I - - GPIO37, ADC1_CH1, RTC_GPIO1 - * - 5 - - I38 - - I - - GPIO38, ADC1_CH2, RTC_GPIO2 - * - 6 - - I39 - - I - - GPIO39, ADC1_CH3, RTC_GPIO3 - * - 7 - - RST - - I - - Reset; High: enable; Low: powers off - * - 8 - - I34 - - I - - GPIO34, ADC1_CH6, RTC_GPIO4 - * - 9 - - I35 - - I - - GPIO35, ADC1_CH7, RTC_GPIO5 - * - 10 - - IO32 - - I/O - - GPIO32, XTAL_32K_P (32.768 kHz crystal oscillator input), ADC1_CH4, TOUCH9, RTC_GPIO9 - * - 11 - - IO33 - - I/O - - GPIO33, XTAL_32K_N (32.768 kHz crystal oscillator output), ADC1_CH5, TOUCH8, RTC_GPIO8 - * - 12 - - IO25 - - I/O - - GPIO25, DAC_1, ADC2_CH8, RTC_GPIO6, EMAC_RXD0 - * - 13 - - IO26 - - I/O - - GPIO26, DAC_2, ADC2_CH9, RTC_GPIO7, EMAC_RXD1 - * - 14 - - IO27 - - I/O - - GPIO27, ADC2_CH7, TOUCH7, RTC_GPIO17, EMAC_RX_DV - * - 15 - - IO14 - - I/O - - GPIO14, ADC2_CH6, TOUCH6, RTC_GPIO16, MTMS, HSPICLK, HS2_CLK, SD_CLK, EMAC_TXD2 - * - 16 - - 5V - - P - - 5 V power supply - * - 17 - - IO12 - - I/O - - GPIO12, ADC2_CH5, TOUCH5, RTC_GPIO15, MTDI [2]_, HSPIQ, HS2_DATA2, SD_DATA2, EMAC_TXD3 - * - 18 - - IO13 - - I/O - - GPIO13, ADC2_CH4, TOUCH4, RTC_GPIO14, MTCK, HSPID, HS2_DATA3, SD_DATA3, EMAC_RX_ER - * - 19 - - IO15 - - I/O - - GPIO15, ADC2_CH3, TOUCH3, RTC_GPIO13, MTDO [2]_, HSPICS0, HS2_CMD, SD_CMD, EMAC_RXD3 - * - 20 - - IO2 - - I/O - - GPIO2 [2]_, ADC2_CH2, TOUCH2, RTC_GPIO12, HSPIWP, HS2_DATA0, SD_DATA0 - * - 21 - - IO0 - - I/O - - GPIO0 [2]_, ADC2_CH1, TOUCH1, RTC_GPIO11, CLK_OUT1, EMAC_TX_CLK - * - 22 - - IO4 - - I/O - - GPIO4, ADC2_CH0, TOUCH0, RTC_GPIO10, HSPIHD, HS2_DATA1, SD_DATA1, EMAC_TX_ER - * - 23 - - IO9 - - I/O - - GPIO9, HS1_DATA2, U1RXD, SD_DATA2 - * - 24 - - IO10 - - I/O - - GPIO10, HS1_DATA3, U1TXD, SD_DATA3 - * - 25 - - IO5 - - I/O - - GPIO5 [2]_, HS1_DATA6, VSPICS0, EMAC_RX_CLK - * - 26 - - IO18 - - I/O - - GPIO18, HS1_DATA7, VSPICLK - * - 27 - - IO23 - - I/O - - GPIO23, HS1_STROBE, VSPID - * - 28 - - IO19 - - I/O - - GPIO19, VSPIQ, U0CTS, EMAC_TXD0 - * - 29 - - IO22 - - I/O - - GPIO22, VSPIWP, U0RTS, EMAC_TXD1 - * - 30 - - IO21 - - I/O - - GPIO21, VSPIHD, EMAC_TX_EN - * - 31 - - TXD0 - - I/O - - GPIO1, U0TXD, CLK_OUT3, EMAC_RXD2 - * - 32 - - RXD0 - - I/O - - GPIO3, U0RXD, CLK_OUT2 - -.. [1] P: Power supply; I: Input; O: Output. -.. [2] MTDI, GPIO0, GPIO2, MTDO, and GPIO5 are strapping pins. These pins are used to control several chip functions depending on binary voltage values applied to the pins during chip power-up or system reset. For description and application of the strapping pins, please refer to `ESP32 Datasheet`_ > Section *Strapping Pins*. - - -Pin Layout -^^^^^^^^^^ - -.. figure:: ../../../_static/ESP32_DevKitM-1_pinlayout.png - :align: center - :scale: 43% - :alt: ESP32-DevKitM-1 (click to enlarge) - :figclass: align-center - - ESP32-DevKitM-1 (click to enlarge) - - -Hardware Revision Details -========================= - -No previous versions available. - - -Related Documents -================= - -* `ESP32-MINI-1 & ESP32-MINI-1U Datasheet `_ (PDF) -* `ESP32-DevKitM-1 Schematics `_ (PDF) -* `ESP32-DevKitM-1 PCB layout `_ (PDF) -* `ESP32-DevKitM-1 layout `_ (DXF) - You can view it with `Autodesk Viewer `_ online -* `ESP32 Datasheet `_ (PDF) -* `ESP Product Selector `_ - -For other design documentation for the board, please contact us at sales@espressif.com. diff --git a/docs/zh_CN/get-started/index.rst b/docs/zh_CN/get-started/index.rst index 76fd2d31309f..6e511ff5ad11 100644 --- a/docs/zh_CN/get-started/index.rst +++ b/docs/zh_CN/get-started/index.rst @@ -108,12 +108,12 @@ :maxdepth: 1 ESP32-DevKitC + ESP32-DevKitM-1 ESP-WROVER-KIT ESP32-PICO-KIT ESP32-Ethernet-Kit ESP32-PICO-KIT-1 ESP32-PICO-DevKitM-2 - ESP32-DevKitM-1 <../hw-reference/esp32/user-guide-devkitm-1> .. only:: esp32s2 diff --git a/docs/zh_CN/hw-reference/esp32/user-guide-devkitm-1.rst b/docs/zh_CN/hw-reference/esp32/user-guide-devkitm-1.rst deleted file mode 100644 index f23f4d7c6a54..000000000000 --- a/docs/zh_CN/hw-reference/esp32/user-guide-devkitm-1.rst +++ /dev/null @@ -1,335 +0,0 @@ -=================== -ESP32-DevKitM-1 -=================== - -:link_to_translation:`en: [English]` - -本指南将介绍如何使用 ESP32-DevKitM-1,并提供更多关于此开发板的信息。 - -ESP32-DevKitM-1 是乐鑫推出的一款基于 ESP32-MINI-1/1U 模组的入门级开发板。板上模组大部分管脚均已引出至两侧排针,用户可根据实际需求,通过跳线轻松连接多种外围设备,同时也可将开发板插在面包板上使用。 - - -+------------------------+-------------------------+ -| |ESP32-DevKitM-1-正面| | |ESP32-DevKitM-1-侧面| | -+------------------------+-------------------------+ -| ESP32-DevKitM-1-正面 | ESP32-DevKitM-1-侧面 | -+------------------------+-------------------------+ - -.. |ESP32-DevKitM-1-正面| image:: ../../../_static/esp32-DevKitM-1-front.png - -.. |ESP32-DevKitM-1-侧面| image:: ../../../_static/esp32-DevKitM-1-isometric.png - - -本指南包括: - -- `快速入门`_:提供 ESP32-DevKitM-1 的简要概述及必要的硬件和软件信息。 -- `硬件参考`_:提供 ESP32-DevKitM-1 的详细硬件信息。 -- `相关文档`_:提供相关文档的链接。 - - -快速入门 -=========== - -本节介绍如何开始使用 ESP32-DevKitM-1,主要包括三大部分:首先,介绍一些关于 ESP32-DevKitM-1 的基本信息,然后在 `应用程序开发`_ 章节介绍如何进行硬件初始化,最后介绍如何为 ESP32-DevKitM-1 烧录固件。 - - -概述 -------- - -ESP32-DevKitM-1 开发板是一款小巧实用的开发板,具备以下特色功能: - -- 集成了 `ESP32-MINI-1 或 ESP32-MINI-1U `_ 模组 -- USB 转串口编程接口同时可为开发板供电 -- 设有排针 -- 设有重置按钮和固件下载模式激活按钮 -- 以及其他组件 - - -内含组件和包装 ---------------- - -零售订单 -^^^^^^^^^^^ - -如购买样品,每个 ESP32-DevKitM-1 开发板将以防静电袋或零售商选择的其他方式包装。 - -零售订单请前往 https://www.espressif.com/zh-hans/company/contact/buy-a-sample。 - - -批量订单 -^^^^^^^^^^^ - -如批量购买,ESP32-DevKitM-1 开发板将以大纸板箱包装。 - -批量订单请前往 https://www.espressif.com/zh-hans/contact-us/sales-questions。 - - -组件介绍 ------------ - -ESP32-DevKitM-1 开发板的主要组件、接口及控制方式见下图。下文以板载 ESP32-MINI-1 的开发板为例进行说明。 - - -.. figure:: ../../../_static/esp32-devkitm-1-v1-annotated-photo.png - :align: center - :alt: ESP32-DevKitM-1 - 正面 - :figclass: align-center - - ESP32-DevKitM-1 - 正面 - - -.. list-table:: - :widths: 25 75 - :header-rows: 1 - - * - 主要组件 - - 基本介绍 - * - 板载模组 - - ESP32-MINI-1 模组或 ESP32-MINI-1U 模组。ESP32-MINI-1 带有板载 PCB 天线;ESP32-MINI-1U 带有外部天线连接器。两款模组内置的芯片均叠封 4 MB flash。更多详情,请见 `《ESP32-MINI-1 & ESP32-MINI-1U 技术规格书》 `_ - * - 5 V 转 3.3 V LDO - - 电源转换器,输入 5 V,输出 3.3 V - * - Boot 键 - - 下载按键。按下 **Boot** 键的同时按一下 **Reset** 键进入“固件下载”模式,通过串口下载固件 - * - Reset 键 - - 复位按键 - * - Micro-USB 接口 - - USB 接口,可用作开发板的供电电源或 PC 和 ESP32 芯片的通信接口 - * - USB 至 UART 桥接器 - - 单芯片 USB 至 UART 桥接器,可提供高达 3 Mbps 的传输速率 - * - 3.3 V 电源指示灯 - - 开发板连接 USB 电源后,该指示灯亮起。更多信息,请见 `相关文档`_ 中的原理图 - * - I/O 连接器 - - 所有可用 GPIO 管脚(除 Flash 的 SPI 总线)均已引出至开发板的排针。用户可对 ESP32 芯片编程,开发多种功能 - - -应用程序开发 ---------------- - -ESP32-DevKitM-1 上电前,请首先确认开发板完好无损。 - - -硬件准备 -^^^^^^^^^^^^ - -- ESP32-DevKitM-1 开发板 -- USB A / micro USB B 数据线 -- PC(Windows、Linux 或 macS) - - -软件设置 -^^^^^^^^^^^ - -现在,请前往 :doc:`../../get-started/index` 中的 :ref:`get-started-step-by-step` 章节,查看如何设置开发环境,并尝试将示例项目烧录至你的开发板。 - -.. attention:: - - 对于 2021 年 12 月 2 日之前生产的 ESP32-DevKitM-1,其搭载的模组为单核 MCU 模组。请查看 `PCN-2021-021 `_ 以确定开发板上搭载的模组是否为单核模组。对于搭载单核模组的开发板,烧录应用程序前,需要在 :ref:`menuconfig ` 中启用单核模式 (:ref:`CONFIG_FREERTOS_UNICORE`)。 - - -硬件参考 -=========== - -功能框图 ----------- - -ESP32-DevKitM-1 的主要组件和连接方式如下图所示。 - -.. figure:: ../../../_static/esp32-DevKitM-1_v1_SystemBlock.png - :align: center - :alt: ESP32-DevKitM-1 - :figclass: align-center - - ESP32-DevKitM-1 - - -电源选项 ----------- - -开发板可从以下三种供电方式中任选其一: - -* Micro USB 供电(默认) -* 5V / GND 管脚供电 -* 3V3 / GND 管脚供电 - -.. warning:: - - - 上述供电模式 **不可同时连接**,否则可能会损坏开发板和/或电源。 - - 建议选择第一种供电方式:Micro USB 端口供电。 - - -管脚描述 ----------- - -开发板两侧 I/O 管脚,其具体名称和功能见下表。外设管脚分配请参考 `《ESP32 技术规格书》`_。 - -.. list-table:: - :header-rows: 1 - :widths: 10 12 12 66 - - - * - 编号 - - 名称 - - 类型 [1]_ - - 功能 - * - 1 - - GND - - P - - 接地 - * - 2 - - 3V3 - - P - - 3.3 V 电源 - * - 3 - - I36 - - I - - GPIO36, ADC1_CH0, RTC_GPIO0 - * - 4 - - I37 - - I - - GPIO37, ADC1_CH1, RTC_GPIO1 - * - 5 - - I38 - - I - - GPIO38, ADC1_CH2, RTC_GPIO2 - * - 6 - - I39 - - I - - GPIO39, ADC1_CH3, RTC_GPIO3 - * - 7 - - RST - - I - - 复位;高电平:使能;低电平:关闭 - * - 8 - - I34 - - I - - GPIO34, ADC1_CH6, RTC_GPIO4 - * - 9 - - I35 - - I - - GPIO35, ADC1_CH7, RTC_GPIO5 - * - 10 - - IO32 - - I/O - - GPIO32, XTAL_32K_P (32.768 kHz crystal oscillator input), ADC1_CH4, TOUCH9, RTC_GPIO9 - * - 11 - - IO33 - - I/O - - GPIO33, XTAL_32K_N (32.768 kHz crystal oscillator output), ADC1_CH5, TOUCH8, RTC_GPIO8 - * - 12 - - IO25 - - I/O - - GPIO25, DAC_1, ADC2_CH8, RTC_GPIO6, EMAC_RXD0 - * - 13 - - IO26 - - I/O - - GPIO26, DAC_2, ADC2_CH9, RTC_GPIO7, EMAC_RXD1 - * - 14 - - IO27 - - I/O - - GPIO27, ADC2_CH7, TOUCH7, RTC_GPIO17, EMAC_RX_DV - * - 15 - - IO14 - - I/O - - GPIO14, ADC2_CH6, TOUCH6, RTC_GPIO16, MTMS, HSPICLK, HS2_CLK, SD_CLK, EMAC_TXD2 - * - 16 - - 5V - - P - - 5 V 电源 - * - 17 - - IO12 - - I/O - - GPIO12, ADC2_CH5, TOUCH5, RTC_GPIO15, MTDI [2]_, HSPIQ, HS2_DATA2, SD_DATA2, EMAC_TXD3 - * - 18 - - IO13 - - I/O - - GPIO13, ADC2_CH4, TOUCH4, RTC_GPIO14, MTCK, HSPID, HS2_DATA3, SD_DATA3, EMAC_RX_ER - * - 19 - - IO15 - - I/O - - GPIO15, ADC2_CH3, TOUCH3, RTC_GPIO13, MTDO [2]_, HSPICS0, HS2_CMD, SD_CMD, EMAC_RXD3 - * - 20 - - IO2 - - I/O - - GPIO2 [2]_, ADC2_CH2, TOUCH2, RTC_GPIO12, HSPIWP, HS2_DATA0, SD_DATA0 - * - 21 - - IO0 - - I/O - - GPIO0 [2]_, ADC2_CH1, TOUCH1, RTC_GPIO11, CLK_OUT1, EMAC_TX_CLK - * - 22 - - IO4 - - I/O - - GPIO4, ADC2_CH0, TOUCH0, RTC_GPIO10, HSPIHD, HS2_DATA1, SD_DATA1, EMAC_TX_ER - * - 23 - - IO9 - - I/O - - GPIO9, HS1_DATA2, U1RXD, SD_DATA2 - * - 24 - - IO10 - - I/O - - GPIO10, HS1_DATA3, U1TXD, SD_DATA3 - * - 25 - - IO5 - - I/O - - GPIO5 [2]_, HS1_DATA6, VSPICS0, EMAC_RX_CLK - * - 26 - - IO18 - - I/O - - GPIO18, HS1_DATA7, VSPICLK - * - 27 - - IO23 - - I/O - - GPIO23, HS1_STROBE, VSPID - * - 28 - - IO19 - - I/O - - GPIO19, VSPIQ, U0CTS, EMAC_TXD0 - * - 29 - - IO22 - - I/O - - GPIO22, VSPIWP, U0RTS, EMAC_TXD1 - * - 30 - - IO21 - - I/O - - GPIO21, VSPIHD, EMAC_TX_EN - * - 31 - - TXD0 - - I/O - - GPIO1, U0TXD, CLK_OUT3, EMAC_RXD2 - * - 32 - - RXD0 - - I/O - - GPIO3, U0RXD, CLK_OUT2 - -.. [1] P:电源;I:输入;O:输出。 -.. [2] MTDI、GPIO0、GPIO2、MTDO 和 GPIO5 为 Strapping 管脚。在芯片上电和系统复位过程中,Strapping 管脚根据管脚的二进制电压值控制芯片功能。Strapping 管脚的具体描述和应用,请参考 `《ESP32 技术规格书》`_ > 章节 Strapping 管脚。 - - -管脚布局 -^^^^^^^^ - -.. figure:: ../../../_static/ESP32_DevKitM-1_pinlayout.png - :align: center - :scale: 43% - :alt: ESP32-DevKitM-1 (点击放大) - :figclass: align-center - - ESP32-DevKitM-1 (点击放大) - - -硬件修订历史 -=============== - -尚无版本升级历史。 - - -相关文档 -============ - -* `《ESP32-MINI-1 & ESP32-MINI-1U 技术规格书》 `_ (PDF) -* `ESP32-DevKitM-1 原理图 `_ (PDF) -* `ESP32-DevKitM-1 PCB 布局图 `_ (PDF) -* `ESP32-DevKitM-1 布局图 `_ (DXF) - 可使用 `Autodesk Viewer `_ 查看 -* `乐鑫产品选型工具 `_ -* `《ESP32 技术规格书》 `_ (PDF) - -有关本开发板的更多设计文档,请联系我们的商务部门 sales@espressif.com。 From 024306f4bff86fe88ca7a52aad3349a89c89d190 Mon Sep 17 00:00:00 2001 From: luoxu Date: Tue, 8 Oct 2024 19:15:53 +0800 Subject: [PATCH 083/365] feat(ble_mesh): esp32c5 lib update --- components/bt/esp_ble_mesh/lib/lib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/bt/esp_ble_mesh/lib/lib b/components/bt/esp_ble_mesh/lib/lib index cba99c5a2e7f..71d0e43985db 160000 --- a/components/bt/esp_ble_mesh/lib/lib +++ b/components/bt/esp_ble_mesh/lib/lib @@ -1 +1 @@ -Subproject commit cba99c5a2e7f5d4bccb04e8f3f968dc888bb5667 +Subproject commit 71d0e43985db16125de2071a8ec084b06f072544 From 459f2517a8a9291d7d7f1309a09371b743e4e809 Mon Sep 17 00:00:00 2001 From: "sonika.rathi" Date: Tue, 17 Sep 2024 12:43:47 +0200 Subject: [PATCH 084/365] feat(fatfs): enable partition handling for sectors less than 128 --- components/fatfs/fatfsgen.py | 28 ++++--- .../fatfs/host_test/main/test_fatfs.cpp | 11 ++- .../fatfs/host_test/partition_table.csv | 4 +- components/fatfs/src/ff.c | 15 +++- .../test_apps/flash_wl/main/CMakeLists.txt | 2 +- .../main/test_fatfs_small_partition.c | 76 +++++++++++++++++++ .../fatfs/test_apps/flash_wl/partitions.csv | 1 + components/fatfs/vfs/vfs_fat_spiflash.c | 31 ++++++-- .../api-guides/file-system-considerations.rst | 2 +- docs/en/api-reference/storage/fatfs.rst | 24 ++++++ 10 files changed, 167 insertions(+), 27 deletions(-) create mode 100644 components/fatfs/test_apps/flash_wl/main/test_fatfs_small_partition.c diff --git a/components/fatfs/fatfsgen.py b/components/fatfs/fatfsgen.py index 4ab130200158..30d274f52604 100755 --- a/components/fatfs/fatfsgen.py +++ b/components/fatfs/fatfsgen.py @@ -1,10 +1,11 @@ #!/usr/bin/env python # SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD # SPDX-License-Identifier: Apache-2.0 - import os from datetime import datetime -from typing import Any, List, Optional +from typing import Any +from typing import List +from typing import Optional from fatfs_utils.boot_sector import BootSector from fatfs_utils.exceptions import NoFreeClusterException @@ -12,10 +13,16 @@ from fatfs_utils.fatfs_state import FATFSState from fatfs_utils.fs_object import Directory from fatfs_utils.long_filename_utils import get_required_lfn_entries_count -from fatfs_utils.utils import (BYTES_PER_DIRECTORY_ENTRY, FATFS_INCEPTION, FATFS_MIN_ALLOC_UNIT, - RESERVED_CLUSTERS_COUNT, FATDefaults, get_args_for_partition_generator, - get_fat_sectors_count, get_non_data_sectors_cnt, read_filesystem, - required_clusters_count) +from fatfs_utils.utils import BYTES_PER_DIRECTORY_ENTRY +from fatfs_utils.utils import FATDefaults +from fatfs_utils.utils import FATFS_INCEPTION +from fatfs_utils.utils import FATFS_MIN_ALLOC_UNIT +from fatfs_utils.utils import get_args_for_partition_generator +from fatfs_utils.utils import get_fat_sectors_count +from fatfs_utils.utils import get_non_data_sectors_cnt +from fatfs_utils.utils import read_filesystem +from fatfs_utils.utils import required_clusters_count +from fatfs_utils.utils import RESERVED_CLUSTERS_COUNT def duplicate_fat_decorator(func): # type: ignore @@ -48,14 +55,15 @@ def __init__(self, volume_label: str = FATDefaults.VOLUME_LABEL, file_sys_type: str = FATDefaults.FILE_SYS_TYPE, root_entry_count: int = FATDefaults.ROOT_ENTRIES_COUNT, - explicit_fat_type: int = None, + explicit_fat_type: Optional[int] = None, media_type: int = FATDefaults.MEDIA_TYPE) -> None: # root directory bytes should be aligned by sector size - assert (root_entry_count * BYTES_PER_DIRECTORY_ENTRY) % sector_size == 0 + assert (int(root_entry_count) * BYTES_PER_DIRECTORY_ENTRY) % sector_size == 0 # number of bytes in the root dir must be even multiple of BPB_BytsPerSec - assert ((root_entry_count * BYTES_PER_DIRECTORY_ENTRY) // sector_size) % 2 == 0 + if (int(root_entry_count) > 128): + assert ((int(root_entry_count) * BYTES_PER_DIRECTORY_ENTRY) // sector_size) % 2 == 0 - root_dir_sectors_cnt: int = (root_entry_count * BYTES_PER_DIRECTORY_ENTRY) // sector_size + root_dir_sectors_cnt: int = (int(root_entry_count) * BYTES_PER_DIRECTORY_ENTRY) // sector_size self.state: FATFSState = FATFSState(sector_size=sector_size, explicit_fat_type=explicit_fat_type, diff --git a/components/fatfs/host_test/main/test_fatfs.cpp b/components/fatfs/host_test/main/test_fatfs.cpp index a948822eef8d..88aa16e1c490 100644 --- a/components/fatfs/host_test/main/test_fatfs.cpp +++ b/components/fatfs/host_test/main/test_fatfs.cpp @@ -44,7 +44,10 @@ TEST_CASE("Create volume, open file, write and read back data", "[fatfs]") fr_result = f_fdisk(pdrv, part_list, work_area); REQUIRE(fr_result == FR_OK); - const MKFS_PARM opt = {(BYTE)FM_ANY, 0, 0, 0, 0}; + + // For host tests, include FM_SFD flag when formatting partitions smaller than 128KB. + // if n_root field of MKFS_PARM is set to 128 => 1 root directory sec and if set to 0(default 512) => 4 root directory sectors. + const MKFS_PARM opt = {(BYTE)(FM_ANY | FM_SFD), 0, 0, 128, 0}; fr_result = f_mkfs("", &opt, work_area, sizeof(work_area)); // Use default volume // Mount the volume @@ -56,7 +59,7 @@ TEST_CASE("Create volume, open file, write and read back data", "[fatfs]") REQUIRE(fr_result == FR_OK); // Generate data - uint32_t data_size = 100000; + uint32_t data_size = 1000; char *data = (char*) malloc(data_size); char *read = (char*) malloc(data_size); @@ -130,7 +133,7 @@ static void prepare_fatfs(const char* partition_label, const esp_partition_t** p fr_result = f_fdisk(_pdrv, part_list, work_area); REQUIRE(fr_result == FR_OK); - const MKFS_PARM opt = {(BYTE)FM_ANY, 0, 0, 0, 0}; + const MKFS_PARM opt = {(BYTE)(FM_ANY | FM_SFD), 0, 0, 128, 0}; fr_result = f_mkfs(drv, &opt, work_area, sizeof(work_area)); // Use default volume REQUIRE(fr_result == FR_OK); } @@ -222,7 +225,7 @@ TEST_CASE("Test mounting 2 volumes, writing data and formatting the 2nd one, rea const size_t workbuf_size = 4096; void *workbuf = ff_memalloc(workbuf_size); REQUIRE(workbuf != NULL); - const MKFS_PARM opt = {(BYTE)(FM_ANY | FM_SFD), 0, 0, 0, CONFIG_WL_SECTOR_SIZE}; + const MKFS_PARM opt = {(BYTE)(FM_ANY | FM_SFD), 0, 0, 128, CONFIG_WL_SECTOR_SIZE}; fr_result = f_mkfs(drv1, &opt, workbuf, workbuf_size); free(workbuf); workbuf = NULL; diff --git a/components/fatfs/host_test/partition_table.csv b/components/fatfs/host_test/partition_table.csv index 30d2d9092588..777a3e67e9fc 100644 --- a/components/fatfs/host_test/partition_table.csv +++ b/components/fatfs/host_test/partition_table.csv @@ -3,5 +3,5 @@ nvs, data, nvs, 0x9000, 0x6000, phy_init, data, phy, 0xf000, 0x1000, factory, app, factory, 0x10000, 1M, -storage, data, fat, , 1M, -storage2, data, fat, , 1M, +storage, data, fat, , 32k, +storage2, data, fat, , 32k, diff --git a/components/fatfs/src/ff.c b/components/fatfs/src/ff.c index 49b8d89620f9..3c3f1ace61d1 100644 --- a/components/fatfs/src/ff.c +++ b/components/fatfs/src/ff.c @@ -34,7 +34,6 @@ #error Wrong include file (ff.h). #endif - /* Limits and boundaries */ #define MAX_DIR 0x200000 /* Max size of FAT directory */ #define MAX_DIR_EX 0x10000000 /* Max size of exFAT directory */ @@ -43,6 +42,10 @@ #define MAX_FAT32 0x0FFFFFF5 /* Max FAT32 clusters (not specified, practical limit) */ #define MAX_EXFAT 0x7FFFFFFD /* Max exFAT clusters (differs from specs, implementation limit) */ +#define MIN_FAT12_SEC_VOL 4 /* Min size of the FAT sector volume + 1 FAT, 1 root dir, 1 reserved, 1 data sector */ +#define MIN_FAT12_DATA_SEC 1 /* Min FAT data sectors */ + /* Character code support macros */ #define IsUpper(c) ((c) >= 'A' && (c) <= 'Z') @@ -3318,7 +3321,7 @@ static UINT check_fs ( /* 0:FAT/FAT32 VBR, 1:exFAT VBR, 2:Not FAT and valid BS, && ld_word(fs->win + BPB_RsvdSecCnt) != 0 /* Properness of reserved sectors (MNBZ) */ && (UINT)fs->win[BPB_NumFATs] - 1 <= 1 /* Properness of FATs (1 or 2) */ && ld_word(fs->win + BPB_RootEntCnt) != 0 /* Properness of root dir entries (MNBZ) */ - && (ld_word(fs->win + BPB_TotSec16) >= 128 || ld_dword(fs->win + BPB_TotSec32) >= 0x10000) /* Properness of volume sectors (>=128) */ + && (ld_word(fs->win + BPB_TotSec16) >= MIN_FAT12_SEC_VOL || ld_dword(fs->win + BPB_TotSec32) >= 0x10000) /* Properness of volume sectors (>=MIN_FAT12_SEC_VOL) */ && ld_word(fs->win + BPB_FATSz16) != 0) { /* Properness of FAT size (MNBZ) */ return 0; /* It can be presumed an FAT VBR */ } @@ -6034,7 +6037,11 @@ FRESULT f_mkfs ( } } } - if (sz_vol < 128) LEAVE_MKFS(FR_MKFS_ABORTED); /* Check if volume size is >=128s */ + if (n_fat == 1) { + if (sz_vol < MIN_FAT12_SEC_VOL) LEAVE_MKFS(FR_MKFS_ABORTED); /* Check if volume size is >= MIN_FAT12_SEC_VOLs */ + } else { + if (sz_vol < (MIN_FAT12_SEC_VOL + 1)) LEAVE_MKFS(FR_MKFS_ABORTED); /* Check if volume size is >= (MIN_FAT12_SEC_VOL+1)s */ + } /* Now start to create an FAT volume at b_vol and sz_vol */ @@ -6265,7 +6272,7 @@ FRESULT f_mkfs ( } /* Determine number of clusters and final check of validity of the FAT sub-type */ - if (sz_vol < b_data + pau * 16 - b_vol) LEAVE_MKFS(FR_MKFS_ABORTED); /* Too small volume? */ + if (sz_vol < b_data + pau * MIN_FAT12_DATA_SEC - b_vol) LEAVE_MKFS(FR_MKFS_ABORTED); /* Too small volume? */ n_clst = ((DWORD)sz_vol - sz_rsv - sz_fat * n_fat - sz_dir) / pau; if (fsty == FS_FAT32) { if (n_clst <= MAX_FAT16) { /* Too few clusters for FAT32? */ diff --git a/components/fatfs/test_apps/flash_wl/main/CMakeLists.txt b/components/fatfs/test_apps/flash_wl/main/CMakeLists.txt index 20b600fca29f..f6501bda48f0 100644 --- a/components/fatfs/test_apps/flash_wl/main/CMakeLists.txt +++ b/components/fatfs/test_apps/flash_wl/main/CMakeLists.txt @@ -1,4 +1,4 @@ -idf_component_register(SRCS "test_fatfs_flash_wl.c" +idf_component_register(SRCS "test_fatfs_flash_wl.c" "test_fatfs_small_partition.c" INCLUDE_DIRS "." PRIV_REQUIRES unity spi_flash fatfs vfs test_fatfs_common WHOLE_ARCHIVE) diff --git a/components/fatfs/test_apps/flash_wl/main/test_fatfs_small_partition.c b/components/fatfs/test_apps/flash_wl/main/test_fatfs_small_partition.c new file mode 100644 index 000000000000..fd65a4db811b --- /dev/null +++ b/components/fatfs/test_apps/flash_wl/main/test_fatfs_small_partition.c @@ -0,0 +1,76 @@ +/* + * SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include +#include +#include +#include "unity.h" +#include "esp_vfs_fat.h" + +static wl_handle_t s_test_wl_handle; +static void test_setup(void) +{ + // With this configuration, for 32k partition size, + // 4 sectors will be used for WL and 4 sectors for FATFS + // (1 FAT, 1 root directory, 1 reserved and 1 data sector) + esp_vfs_fat_mount_config_t mount_config = { + .format_if_mount_failed = true, + .max_files = 5, + .use_one_fat = true, + }; + + TEST_ESP_OK(esp_vfs_fat_spiflash_format_cfg_rw_wl("/spiflash", "storage1", &mount_config)); + TEST_ESP_OK(esp_vfs_fat_spiflash_mount_rw_wl("/spiflash", "storage1", &mount_config, &s_test_wl_handle)); +} + +static void test_teardown(void) +{ + TEST_ESP_OK(esp_vfs_fat_spiflash_unmount_rw_wl("/spiflash", s_test_wl_handle)); +} + +static void test_write_data_sec(int num_data_sec) +{ + int fd = open("/spiflash/test.txt", O_CREAT | O_WRONLY); + TEST_ASSERT_NOT_EQUAL(-1, fd); + + // Generate data + uint32_t data_size = 4096*num_data_sec; + + char *data = (char*) malloc(data_size); + char *read_data = (char*) malloc(data_size); + + for(uint32_t i = 0; i < (data_size); i += sizeof(i)) + { + *((uint32_t*)(data + i)) = i; + } + ssize_t wr = write(fd, data, data_size); + if (num_data_sec == 1) { + TEST_ASSERT_EQUAL(data_size, wr); + } else { + TEST_ASSERT_NOT_EQUAL(data_size, wr); + } + TEST_ASSERT_EQUAL(0, close(fd)); + + fd = open("/spiflash/test.txt", O_RDONLY); + int r = read(fd, read_data, data_size); + if (num_data_sec == 1) { + TEST_ASSERT_EQUAL(data_size, r); + } else { + TEST_ASSERT_NOT_EQUAL(data_size, r); + } + TEST_ASSERT_EQUAL(0, strcmp(data, read_data)); + TEST_ASSERT_EQUAL(0, close(fd)); +} + +TEST_CASE("(WL) can format small partition and read-write data", "[fatfs][wear_levelling][timeout=120]") +{ + test_setup(); + test_write_data_sec(1); //for 1 data sectors, write and read func should work + test_write_data_sec(2); //for 2 data sectors, write and read func should fail + test_teardown(); +} diff --git a/components/fatfs/test_apps/flash_wl/partitions.csv b/components/fatfs/test_apps/flash_wl/partitions.csv index d1dcbae61db8..d68a9de0115c 100644 --- a/components/fatfs/test_apps/flash_wl/partitions.csv +++ b/components/fatfs/test_apps/flash_wl/partitions.csv @@ -2,3 +2,4 @@ factory, app, factory, 0x10000, 768k, storage, data, fat, , 528k, storage2, data, fat, , 528k, +storage1, data, fat, , 32k, diff --git a/components/fatfs/vfs/vfs_fat_spiflash.c b/components/fatfs/vfs/vfs_fat_spiflash.c index dffd7ec1bb85..7144f165f6a5 100644 --- a/components/fatfs/vfs/vfs_fat_spiflash.c +++ b/components/fatfs/vfs/vfs_fat_spiflash.c @@ -15,6 +15,10 @@ #include "wear_levelling.h" #include "diskio_wl.h" +// If the available sectors based on partition size are less than 128, +// the root directory sector should be set to 1. +#define MIN_REQ_SEC 128 + static const char* TAG = "vfs_fat_spiflash"; static vfs_fat_spiflash_ctx_t *s_ctx[FF_VOLUMES] = {}; @@ -74,7 +78,7 @@ vfs_fat_spiflash_ctx_t* get_vfs_fat_spiflash_ctx(wl_handle_t wlhandle) return NULL; } -static esp_err_t s_f_mount_rw(FATFS *fs, const char *drv, const esp_vfs_fat_mount_config_t *mount_config, vfs_fat_x_ctx_flags_t *out_flags) +static esp_err_t s_f_mount_rw(FATFS *fs, const char *drv, const esp_vfs_fat_mount_config_t *mount_config, vfs_fat_x_ctx_flags_t *out_flags, size_t sec_num) { FRESULT fresult = f_mount(fs, drv, 1); if (fresult != FR_OK) { @@ -93,7 +97,13 @@ static esp_err_t s_f_mount_rw(FATFS *fs, const char *drv, const esp_vfs_fat_moun size_t alloc_unit_size = esp_vfs_fat_get_allocation_unit_size(CONFIG_WL_SECTOR_SIZE, mount_config->allocation_unit_size); ESP_LOGI(TAG, "Formatting FATFS partition, allocation unit size=%d", alloc_unit_size); - const MKFS_PARM opt = {(BYTE)(FM_ANY | FM_SFD), (mount_config->use_one_fat ? 1 : 2), 0, 0, alloc_unit_size}; + UINT root_dir_entries; + if (CONFIG_WL_SECTOR_SIZE == 512) { + root_dir_entries = 16; + } else { + root_dir_entries = 128; + } + const MKFS_PARM opt = {(BYTE)(FM_ANY | FM_SFD), (mount_config->use_one_fat ? 1 : 2), 0, (sec_num <= MIN_REQ_SEC ? root_dir_entries : 0), alloc_unit_size}; fresult = f_mkfs(drv, &opt, workbuf, workbuf_size); free(workbuf); workbuf = NULL; @@ -157,8 +167,9 @@ esp_err_t esp_vfs_fat_spiflash_mount_rw_wl(const char* base_path, vfs_fat_x_ctx_flags_t flags = 0; + size_t sec_num = wl_size(*wl_handle) / wl_sector_size(*wl_handle); // Try to mount partition - ret = s_f_mount_rw(fs, drv, mount_config, &flags); + ret = s_f_mount_rw(fs, drv, mount_config, &flags, sec_num); if (ret != ESP_OK) { goto fail; } @@ -224,6 +235,7 @@ esp_err_t esp_vfs_fat_spiflash_format_cfg_rw_wl(const char* base_path, const cha wl_handle_t temp_handle = WL_INVALID_HANDLE; uint32_t id = FF_VOLUMES; + size_t sec_num = 0; bool found = s_get_context_id_by_label(partition_label, &id); if (!found) { @@ -239,6 +251,7 @@ esp_err_t esp_vfs_fat_spiflash_format_cfg_rw_wl(const char* base_path, const cha } ESP_RETURN_ON_ERROR(esp_vfs_fat_spiflash_mount_rw_wl(base_path, partition_label, mount_cfg, &temp_handle), TAG, "Failed to mount"); found = s_get_context_id_by_label(partition_label, &id); + sec_num = wl_size(temp_handle) / wl_sector_size(temp_handle); assert(found); if (s_ctx[id]->flags & FORMATTED_DURING_LAST_MOUNT) { ESP_LOGD(TAG, "partition was formatted during mounting, skipping another format"); @@ -250,6 +263,8 @@ esp_err_t esp_vfs_fat_spiflash_format_cfg_rw_wl(const char* base_path, const cha if (cfg) { s_ctx[id]->mount_config = *cfg; } + temp_handle = s_ctx[id]->wlhandle; + sec_num = wl_size(temp_handle) / wl_sector_size(temp_handle); } //unmount @@ -266,7 +281,13 @@ esp_err_t esp_vfs_fat_spiflash_format_cfg_rw_wl(const char* base_path, const cha } size_t alloc_unit_size = esp_vfs_fat_get_allocation_unit_size(CONFIG_WL_SECTOR_SIZE, s_ctx[id]->mount_config.allocation_unit_size); ESP_LOGI(TAG, "Formatting FATFS partition, allocation unit size=%d", alloc_unit_size); - const MKFS_PARM opt = {(BYTE)(FM_ANY | FM_SFD), (s_ctx[id]->mount_config.use_one_fat ? 1 : 2), 0, 0, alloc_unit_size}; + UINT root_dir_entries; + if (CONFIG_WL_SECTOR_SIZE == 512) { + root_dir_entries = 16; + } else { + root_dir_entries = 128; + } + const MKFS_PARM opt = {(BYTE)(FM_ANY | FM_SFD), (s_ctx[id]->mount_config.use_one_fat ? 1 : 2), 0, (sec_num <= MIN_REQ_SEC ? root_dir_entries : 0), alloc_unit_size}; fresult = f_mkfs(drv, &opt, workbuf, workbuf_size); free(workbuf); workbuf = NULL; @@ -274,7 +295,7 @@ esp_err_t esp_vfs_fat_spiflash_format_cfg_rw_wl(const char* base_path, const cha mount_back: if (partition_was_mounted) { - esp_err_t err = s_f_mount_rw(s_ctx[id]->fs, drv, &s_ctx[id]->mount_config, NULL); + esp_err_t err = s_f_mount_rw(s_ctx[id]->fs, drv, &s_ctx[id]->mount_config, NULL, sec_num); if (err != ESP_OK) { ESP_LOGE(TAG, "failed to mount back, go to recycle"); goto recycle; diff --git a/docs/en/api-guides/file-system-considerations.rst b/docs/en/api-guides/file-system-considerations.rst index a57ab01c8781..ac90b6783205 100644 --- a/docs/en/api-guides/file-system-considerations.rst +++ b/docs/en/api-guides/file-system-considerations.rst @@ -50,7 +50,7 @@ The most significant properties and features of above-mentioned file systems are - Integrated - Integrated * - Minimum partition size - - * 128 sectors With wear levelling on (WL sector=4096B): + - * 8 sectors with wear levelling on (4 FATFS sectors + 4 WL sectors with WL sector size=4096B) * plus 4 sectors at least * real number given by WL configuration (Safe, Perf) - * 6 logical blocks diff --git a/docs/en/api-reference/storage/fatfs.rst b/docs/en/api-reference/storage/fatfs.rst index f45007607ce4..3777c4f17cad 100644 --- a/docs/en/api-reference/storage/fatfs.rst +++ b/docs/en/api-reference/storage/fatfs.rst @@ -157,6 +157,30 @@ Usage:: Parameter --verbose prints detailed information from boot sector of the FatFs image to the terminal before folder structure is generated. +FATFS Minimum Partition Size and Limits +--------------------------------------- + +The FATFS component supports FAT12, FAT16, and FAT32 file system types. The file system type is determined by the number of clusters (calculated as data sectors divided by sectors per cluster) on the volume. The minimum partition size is defined by the number of sectors allocated to FAT tables, root directories and data clusters. + +* The minimum supported size for a FAT partition with wear leveling enabled is 32 KB for a sector size of 4096 bytes. For a sector size of 512 bytes, the minimum partition size varies based on the WL configuration: 20 KB for Performance mode and 28 KB for Safety mode (requiring 2 extra sectors). +* For a partition with wear leveling enabled, 4 sectors will be reserved for wear-leveling operations, and 4 sectors will be used by the FATFS (1 reserved sector, 1 FAT sector, 1 root directory sector and 1 data sector). +* Increasing the partition size will allocate additional data sectors, allowing for more storage space. +* For partition sizes less than 528 KB, 1 root directory sector will be allocated; for larger partitions, 4 root directory sectors will be used. +* By default, two FAT sectors are created, increasing the partition size by one sector to accommodate the extra FAT sector. To enable a single FAT sector, configure the `use_one_fat` option in `struct esp_vfs_fat_mount_config_t` (see/vfs/esp_vfs_fat.h). Enabling this option allows the minimum partition size to be reduced to 32 KB. +* The general formula for calculating the partition size for a wear-leveled partition is:: + + partition_size = Wear-levelling sectors * FLASH_SEC_SIZE + FATFS partition sectors * FAT_SEC_SIZE + + Where, + - Wear-leveling sectors are fixed at 4, + - FLASH_SEC_SIZE is 4096 bytes, + - FATFS partition sectors include: 1 reserved sector + FAT sectors + root directory sectors + data sectors, + - FAT_SEC_SIZE can be either 512 bytes or 4096 bytes, depending on the configuration. + +* For read-only partitions without wear leveling enabled and a sector size of 512 bytes, the minimum partition size can be reduced to as low as 2 KB. + +Please refer :doc:`File System Considerations <../../api-guides/file-system-considerations>` for further details . + High-level API Reference ------------------------ From c0fe2acd1d8d08da341280db36b215399580e746 Mon Sep 17 00:00:00 2001 From: Yuan Hong Hui Date: Thu, 19 Sep 2024 14:07:03 +0800 Subject: [PATCH 085/365] feat(ble): added pytest for ble example --- examples/bluetooth/.build-test-rules.yml | 49 +++- .../sdkconfig.ci.esp32c2_xtal26m_receiver | 3 + .../sdkconfig.ci.esp32c2_xtal26m_sender | 3 + .../ble/ble_ibeacon/sdkconfig.ci.receiver | 1 + .../ble/ble_ibeacon/sdkconfig.ci.sender | 1 + .../pytest_ble_throughput_test.py | 162 +++++++++++ .../sdkconfig.ci.esp32c2_xtal26m_notify | 7 + .../sdkconfig.ci.esp32c2_xtal26m_write | 6 + .../throughput_client/sdkconfig.ci.notify | 4 + .../throughput_client/sdkconfig.ci.write | 4 + .../sdkconfig.ci.esp32c2_xtal26m_notify | 7 + .../sdkconfig.ci.esp32c2_xtal26m_write | 6 + .../throughput_server/sdkconfig.ci.notify | 4 + .../throughput_server/sdkconfig.ci.write | 4 + .../gatt_client/sdkconfig.ci.esp32c2_xtal26m | 5 + .../ble/gatt_client/sdkconfig.ci.name | 2 + .../gatt_client/sdkconfig.defaults.esp32c2 | 4 + .../sdkconfig.ci.esp32c2_xtal26m | 4 + .../gatt_security_client/sdkconfig.ci.name | 3 + .../sdkconfig.ci.esp32c2_xtal26m | 4 + .../gatt_security_server/sdkconfig.ci.name | 3 + .../gatt_server/sdkconfig.ci.esp32c2_xtal26m | 4 + .../ble/gatt_server/sdkconfig.ci.name | 3 + .../gatt_server/sdkconfig.defaults.esp32c2 | 3 + .../bluedroid/ble/pytest_ble_test.py | 265 ++++++++++++++++++ .../sdkconfig.ci.esp32c2_xtal26m | 4 + .../ble50_security_client/sdkconfig.ci.name | 2 + .../sdkconfig.ci.esp32c2_xtal26m | 4 + .../ble50_security_server/sdkconfig.ci.name | 2 + .../periodic_adv/sdkconfig.ci.esp32c2_xtal26m | 4 + .../ble_50/periodic_adv/sdkconfig.ci.name | 2 + .../sdkconfig.ci.esp32c2_xtal26m | 4 + .../ble_50/periodic_sync/sdkconfig.ci.name | 2 + .../bluedroid/ble_50/pytest_ble50_test.py | 143 ++++++++++ 34 files changed, 727 insertions(+), 1 deletion(-) create mode 100644 examples/bluetooth/bluedroid/ble/ble_ibeacon/sdkconfig.ci.esp32c2_xtal26m_receiver create mode 100644 examples/bluetooth/bluedroid/ble/ble_ibeacon/sdkconfig.ci.esp32c2_xtal26m_sender create mode 100644 examples/bluetooth/bluedroid/ble/ble_ibeacon/sdkconfig.ci.receiver create mode 100644 examples/bluetooth/bluedroid/ble/ble_ibeacon/sdkconfig.ci.sender create mode 100644 examples/bluetooth/bluedroid/ble/ble_throughput/pytest_ble_throughput_test.py create mode 100644 examples/bluetooth/bluedroid/ble/ble_throughput/throughput_client/sdkconfig.ci.esp32c2_xtal26m_notify create mode 100644 examples/bluetooth/bluedroid/ble/ble_throughput/throughput_client/sdkconfig.ci.esp32c2_xtal26m_write create mode 100644 examples/bluetooth/bluedroid/ble/ble_throughput/throughput_client/sdkconfig.ci.notify create mode 100644 examples/bluetooth/bluedroid/ble/ble_throughput/throughput_client/sdkconfig.ci.write create mode 100644 examples/bluetooth/bluedroid/ble/ble_throughput/throughput_server/sdkconfig.ci.esp32c2_xtal26m_notify create mode 100644 examples/bluetooth/bluedroid/ble/ble_throughput/throughput_server/sdkconfig.ci.esp32c2_xtal26m_write create mode 100644 examples/bluetooth/bluedroid/ble/ble_throughput/throughput_server/sdkconfig.ci.notify create mode 100644 examples/bluetooth/bluedroid/ble/ble_throughput/throughput_server/sdkconfig.ci.write create mode 100644 examples/bluetooth/bluedroid/ble/gatt_client/sdkconfig.ci.esp32c2_xtal26m create mode 100644 examples/bluetooth/bluedroid/ble/gatt_client/sdkconfig.ci.name create mode 100644 examples/bluetooth/bluedroid/ble/gatt_security_client/sdkconfig.ci.esp32c2_xtal26m create mode 100644 examples/bluetooth/bluedroid/ble/gatt_security_client/sdkconfig.ci.name create mode 100644 examples/bluetooth/bluedroid/ble/gatt_security_server/sdkconfig.ci.esp32c2_xtal26m create mode 100644 examples/bluetooth/bluedroid/ble/gatt_security_server/sdkconfig.ci.name create mode 100644 examples/bluetooth/bluedroid/ble/gatt_server/sdkconfig.ci.esp32c2_xtal26m create mode 100644 examples/bluetooth/bluedroid/ble/gatt_server/sdkconfig.ci.name create mode 100644 examples/bluetooth/bluedroid/ble/pytest_ble_test.py create mode 100644 examples/bluetooth/bluedroid/ble_50/ble50_security_client/sdkconfig.ci.esp32c2_xtal26m create mode 100644 examples/bluetooth/bluedroid/ble_50/ble50_security_client/sdkconfig.ci.name create mode 100644 examples/bluetooth/bluedroid/ble_50/ble50_security_server/sdkconfig.ci.esp32c2_xtal26m create mode 100644 examples/bluetooth/bluedroid/ble_50/ble50_security_server/sdkconfig.ci.name create mode 100644 examples/bluetooth/bluedroid/ble_50/periodic_adv/sdkconfig.ci.esp32c2_xtal26m create mode 100644 examples/bluetooth/bluedroid/ble_50/periodic_adv/sdkconfig.ci.name create mode 100644 examples/bluetooth/bluedroid/ble_50/periodic_sync/sdkconfig.ci.esp32c2_xtal26m create mode 100644 examples/bluetooth/bluedroid/ble_50/periodic_sync/sdkconfig.ci.name create mode 100644 examples/bluetooth/bluedroid/ble_50/pytest_ble50_test.py diff --git a/examples/bluetooth/.build-test-rules.yml b/examples/bluetooth/.build-test-rules.yml index 2033d2a278a3..20f2345ef9ba 100644 --- a/examples/bluetooth/.build-test-rules.yml +++ b/examples/bluetooth/.build-test-rules.yml @@ -19,7 +19,20 @@ examples/bluetooth/bluedroid/ble: <<: *bt_default_depends disable: - if: SOC_BT_SUPPORTED != 1 - + depends_components: + - bt + - esp_phy + - nvs_flash + - esp_coex + - esp_log + - esp_console + - mbedtls + - vfs + - esp_driver_gpio + - esp_driver_i2s + - esp_driver_uart + depends_filepatterns: + - examples/bluetooth/bluedroid/ble/pytest_ble_test.py examples/bluetooth/bluedroid/ble/ble_hid_device_demo: disable: @@ -27,9 +40,43 @@ examples/bluetooth/bluedroid/ble/ble_hid_device_demo: depends_components: - esp_driver_gpio +examples/bluetooth/bluedroid/ble/ble_throughput: + <<: *bt_default_depends + disable: + - if: SOC_BT_SUPPORTED != 1 + depends_components: + - bt + - esp_phy + - nvs_flash + - esp_coex + - esp_log + - esp_console + - mbedtls + - vfs + - esp_driver_gpio + - esp_driver_i2s + - esp_driver_uart + depends_filepatterns: + - examples/bluetooth/bluedroid/ble_50/pytest_ble_throughput_test.py + examples/bluetooth/bluedroid/ble_50: + <<: *bt_default_depends disable: - if: SOC_BLE_50_SUPPORTED != 1 + depends_components: + - bt + - esp_phy + - nvs_flash + - esp_coex + - esp_log + - esp_console + - mbedtls + - vfs + - esp_driver_gpio + - esp_driver_i2s + - esp_driver_uart + depends_filepatterns: + - examples/bluetooth/bluedroid/ble_50/pytest_ble50_test.py examples/bluetooth/bluedroid/classic_bt: disable: diff --git a/examples/bluetooth/bluedroid/ble/ble_ibeacon/sdkconfig.ci.esp32c2_xtal26m_receiver b/examples/bluetooth/bluedroid/ble/ble_ibeacon/sdkconfig.ci.esp32c2_xtal26m_receiver new file mode 100644 index 000000000000..9c392443402b --- /dev/null +++ b/examples/bluetooth/bluedroid/ble/ble_ibeacon/sdkconfig.ci.esp32c2_xtal26m_receiver @@ -0,0 +1,3 @@ +CONFIG_IDF_TARGET="esp32c2" +CONFIG_XTAL_FREQ_26=y +CONFIG_IBEACON_RECEIVER=y diff --git a/examples/bluetooth/bluedroid/ble/ble_ibeacon/sdkconfig.ci.esp32c2_xtal26m_sender b/examples/bluetooth/bluedroid/ble/ble_ibeacon/sdkconfig.ci.esp32c2_xtal26m_sender new file mode 100644 index 000000000000..420137b8bace --- /dev/null +++ b/examples/bluetooth/bluedroid/ble/ble_ibeacon/sdkconfig.ci.esp32c2_xtal26m_sender @@ -0,0 +1,3 @@ +CONFIG_IDF_TARGET="esp32c2" +CONFIG_XTAL_FREQ_26=y +CONFIG_IBEACON_SENDER=y diff --git a/examples/bluetooth/bluedroid/ble/ble_ibeacon/sdkconfig.ci.receiver b/examples/bluetooth/bluedroid/ble/ble_ibeacon/sdkconfig.ci.receiver new file mode 100644 index 000000000000..b78485c510f6 --- /dev/null +++ b/examples/bluetooth/bluedroid/ble/ble_ibeacon/sdkconfig.ci.receiver @@ -0,0 +1 @@ +CONFIG_IBEACON_RECEIVER=y diff --git a/examples/bluetooth/bluedroid/ble/ble_ibeacon/sdkconfig.ci.sender b/examples/bluetooth/bluedroid/ble/ble_ibeacon/sdkconfig.ci.sender new file mode 100644 index 000000000000..d463a13eaf47 --- /dev/null +++ b/examples/bluetooth/bluedroid/ble/ble_ibeacon/sdkconfig.ci.sender @@ -0,0 +1 @@ +CONFIG_IBEACON_SENDER=y diff --git a/examples/bluetooth/bluedroid/ble/ble_throughput/pytest_ble_throughput_test.py b/examples/bluetooth/bluedroid/ble/ble_throughput/pytest_ble_throughput_test.py new file mode 100644 index 000000000000..f7194312ec80 --- /dev/null +++ b/examples/bluetooth/bluedroid/ble/ble_throughput/pytest_ble_throughput_test.py @@ -0,0 +1,162 @@ +# SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD +# SPDX-License-Identifier: CC0-1.0 +import os.path +import time +from typing import Tuple + +import pytest +from pytest_embedded_idf.dut import IdfDut + + +# Case 1: gatt write throughput test +@pytest.mark.esp32 +@pytest.mark.esp32c3 +@pytest.mark.esp32c6 +@pytest.mark.esp32c61 +@pytest.mark.esp32c5 +@pytest.mark.esp32h2 +@pytest.mark.esp32s3 +@pytest.mark.wifi_two_dut +@pytest.mark.parametrize( + 'count, app_path, config, erase_all', [ + (2, + f'{os.path.join(os.path.dirname(__file__), "throughput_server")}|{os.path.join(os.path.dirname(__file__), "throughput_client")}', + 'write', 'y'), + ], + indirect=True, +) +def test_gatt_write_throughput(app_path: str, dut: Tuple[IdfDut, IdfDut]) -> None: + server = dut[0] + client = dut[1] + client_addr = client.expect(r'Bluetooth MAC: (([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2})', timeout=30).group(1).decode('utf8') + server_addr = server.expect(r'Bluetooth MAC: (([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2})', timeout=30).group(1).decode('utf8') + + client.expect_exact('GATT client register, status 0', timeout=30) + server.expect_exact('GATT server register, status 0', timeout=30) + server.expect_exact('Advertising start successfully', timeout=30) + client.expect_exact('Scanning start successfully', timeout=30) + client.expect_exact('Device found ', timeout=30) + server.expect_exact('Service start, status 0', timeout=30) + server.expect_exact(f'Connected, conn_id 0, remote {client_addr}', timeout=30) + client.expect_exact(f'Connected, conn_id 0, remote {server_addr}', timeout=30) + client.expect_exact('MTU exchange, status 0, MTU 517', timeout=30) + server.expect_exact('MTU exchange, MTU 517', timeout=30) + client.expect_exact('Service search complete', timeout=30) + start_time = time.time() + while time.time() - start_time < 30: + throughput = int(server.expect(r'GATTC write Bit rate = (\d+) Byte/s', timeout=30).group(1).decode('utf8')) + assert throughput > 50000 or throughput < 95000 + + +# Case 2: gatt write throughput test for ESP32C2 26mhz xtal +@pytest.mark.esp32c2 +@pytest.mark.wifi_two_dut +@pytest.mark.xtal_26mhz +@pytest.mark.parametrize( + 'count, target, baud, app_path, config, erase_all', [ + (2, 'esp32c2|esp32c2', '74880', + f'{os.path.join(os.path.dirname(__file__), "throughput_server")}|{os.path.join(os.path.dirname(__file__), "throughput_client")}', + 'esp32c2_xtal26m_write', 'y'), + ], + indirect=True, +) +def test_c2_26mhz_xtal_write_throughput(app_path: str, dut: Tuple[IdfDut, IdfDut]) -> None: + server = dut[0] + client = dut[1] + client_addr = client.expect(r'Bluetooth MAC: (([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2})', timeout=30).group(1).decode('utf8') + server_addr = server.expect(r'Bluetooth MAC: (([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2})', timeout=30).group(1).decode('utf8') + + client.expect_exact('GATT client register, status 0', timeout=30) + server.expect_exact('GATT server register, status 0', timeout=30) + server.expect_exact('Advertising start successfully', timeout=30) + client.expect_exact('Scanning start successfully', timeout=30) + client.expect_exact('Device found ', timeout=30) + server.expect_exact('Service start, status 0', timeout=30) + server.expect_exact(f'Connected, conn_id 0, remote {client_addr}', timeout=30) + client.expect_exact(f'Connected, conn_id 0, remote {server_addr}', timeout=30) + client.expect_exact('MTU exchange, status 0, MTU 517', timeout=30) + server.expect_exact('MTU exchange, MTU 517', timeout=30) + client.expect_exact('Service search complete', timeout=30) + start_time = time.time() + while time.time() - start_time < 30: + throughput = int(server.expect(r'GATTC write Bit rate = (\d+) Byte/s', timeout=30).group(1).decode('utf8')) + assert throughput > 50000 or throughput < 95000 + + +# Case 3: gatt notify throughput test +@pytest.mark.esp32 +@pytest.mark.esp32c3 +@pytest.mark.esp32c6 +@pytest.mark.esp32c61 +@pytest.mark.esp32c5 +@pytest.mark.esp32h2 +@pytest.mark.esp32s3 +@pytest.mark.wifi_two_dut +@pytest.mark.parametrize( + 'count, app_path, config, erase_all', [ + (2, + f'{os.path.join(os.path.dirname(__file__), "throughput_server")}|{os.path.join(os.path.dirname(__file__), "throughput_client")}', + 'notify', 'y'), + ], + indirect=True, +) +def test_gatt_notify_throughput(app_path: str, dut: Tuple[IdfDut, IdfDut]) -> None: + server = dut[0] + client = dut[1] + client_addr = client.expect(r'Bluetooth MAC: (([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2})', timeout=30).group(1).decode('utf8') + server_addr = server.expect(r'Bluetooth MAC: (([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2})', timeout=30).group(1).decode('utf8') + + client.expect_exact('GATT client register, status 0', timeout=30) + server.expect_exact('GATT server register, status 0', timeout=30) + server.expect_exact('Advertising start successfully', timeout=30) + client.expect_exact('Scanning start successfully', timeout=30) + client.expect_exact('Device found ', timeout=30) + server.expect_exact('Service start, status 0', timeout=30) + server.expect_exact(f'Connected, conn_id 0, remote {client_addr}', timeout=30) + client.expect_exact(f'Connected, conn_id 0, remote {server_addr}', timeout=30) + client.expect_exact('MTU exchange, status 0, MTU 517', timeout=30) + server.expect_exact('MTU exchange, MTU 517', timeout=30) + client.expect_exact('Service search complete', timeout=30) + client.expect_exact('Notification register successfully', timeout=30) + server.expect_exact('Notification enable', timeout=30) + start_time = time.time() + while time.time() - start_time < 30: + throughput = int(client.expect(r'Notify Bit rate = (\d+) Byte/s', timeout=30).group(1).decode('utf8')) + assert throughput > 50000 or throughput < 95000 + + +# Case 4: gatt notify throughput test for ESP32C2 26mhz xtal +@pytest.mark.esp32c2 +@pytest.mark.wifi_two_dut +@pytest.mark.xtal_26mhz +@pytest.mark.parametrize( + 'count, target, baud, app_path, config, erase_all', [ + (2, 'esp32c2|esp32c2', '74880', + f'{os.path.join(os.path.dirname(__file__), "throughput_server")}|{os.path.join(os.path.dirname(__file__), "throughput_client")}', + 'esp32c2_xtal26m_notify', 'y'), + ], + indirect=True, +) +def test_c2_26mhz_xtal_notify_throughput(app_path: str, dut: Tuple[IdfDut, IdfDut]) -> None: + server = dut[0] + client = dut[1] + client_addr = client.expect(r'Bluetooth MAC: (([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2})', timeout=30).group(1).decode('utf8') + server_addr = server.expect(r'Bluetooth MAC: (([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2})', timeout=30).group(1).decode('utf8') + + client.expect_exact('GATT client register, status 0', timeout=30) + server.expect_exact('GATT server register, status 0', timeout=30) + server.expect_exact('Advertising start successfully', timeout=30) + client.expect_exact('Scanning start successfully', timeout=30) + client.expect_exact('Device found ', timeout=30) + server.expect_exact('Service start, status 0', timeout=30) + server.expect_exact(f'Connected, conn_id 0, remote {client_addr}', timeout=30) + client.expect_exact(f'Connected, conn_id 0, remote {server_addr}', timeout=30) + client.expect_exact('MTU exchange, status 0, MTU 517', timeout=30) + server.expect_exact('MTU exchange, MTU 517', timeout=30) + client.expect_exact('Service search complete', timeout=30) + client.expect_exact('Notification register successfully', timeout=30) + server.expect_exact('Notification enable', timeout=30) + start_time = time.time() + while time.time() - start_time < 30: + throughput = int(client.expect(r'Notify Bit rate = (\d+) Byte/s', timeout=30).group(1).decode('utf8')) + assert throughput > 50000 or throughput < 95000 diff --git a/examples/bluetooth/bluedroid/ble/ble_throughput/throughput_client/sdkconfig.ci.esp32c2_xtal26m_notify b/examples/bluetooth/bluedroid/ble/ble_throughput/throughput_client/sdkconfig.ci.esp32c2_xtal26m_notify new file mode 100644 index 000000000000..0448a5d2a501 --- /dev/null +++ b/examples/bluetooth/bluedroid/ble/ble_throughput/throughput_client/sdkconfig.ci.esp32c2_xtal26m_notify @@ -0,0 +1,7 @@ + +CONFIG_EXAMPLE_CI_ID=1 +CONFIG_IDF_TARGET="esp32c2" +CONFIG_XTAL_FREQ_26=y +CONFIG_EXAMPLE_CI_PIPELINE_ID=${CI_PIPELINE_ID} +CONFIG_EXAMPLE_GATTS_NOTIFY_THROUGHPUT=y +CONFIG_EXAMPLE_GATTC_WRITE_THROUGHPUT=n diff --git a/examples/bluetooth/bluedroid/ble/ble_throughput/throughput_client/sdkconfig.ci.esp32c2_xtal26m_write b/examples/bluetooth/bluedroid/ble/ble_throughput/throughput_client/sdkconfig.ci.esp32c2_xtal26m_write new file mode 100644 index 000000000000..5874287ec33d --- /dev/null +++ b/examples/bluetooth/bluedroid/ble/ble_throughput/throughput_client/sdkconfig.ci.esp32c2_xtal26m_write @@ -0,0 +1,6 @@ +CONFIG_EXAMPLE_CI_ID=1 +CONFIG_IDF_TARGET="esp32c2" +CONFIG_XTAL_FREQ_26=y +CONFIG_EXAMPLE_CI_PIPELINE_ID=${CI_PIPELINE_ID} +CONFIG_EXAMPLE_GATTC_WRITE_THROUGHPUT=y +CONFIG_EXAMPLE_GATTS_NOTIFY_THROUGHPUT=n diff --git a/examples/bluetooth/bluedroid/ble/ble_throughput/throughput_client/sdkconfig.ci.notify b/examples/bluetooth/bluedroid/ble/ble_throughput/throughput_client/sdkconfig.ci.notify new file mode 100644 index 000000000000..db7b616debaf --- /dev/null +++ b/examples/bluetooth/bluedroid/ble/ble_throughput/throughput_client/sdkconfig.ci.notify @@ -0,0 +1,4 @@ +CONFIG_EXAMPLE_CI_ID=1 +CONFIG_EXAMPLE_CI_PIPELINE_ID=${CI_PIPELINE_ID} +CONFIG_EXAMPLE_GATTS_NOTIFY_THROUGHPUT=y +CONFIG_EXAMPLE_GATTC_WRITE_THROUGHPUT=n diff --git a/examples/bluetooth/bluedroid/ble/ble_throughput/throughput_client/sdkconfig.ci.write b/examples/bluetooth/bluedroid/ble/ble_throughput/throughput_client/sdkconfig.ci.write new file mode 100644 index 000000000000..a47edbf18265 --- /dev/null +++ b/examples/bluetooth/bluedroid/ble/ble_throughput/throughput_client/sdkconfig.ci.write @@ -0,0 +1,4 @@ +CONFIG_EXAMPLE_CI_ID=1 +CONFIG_EXAMPLE_CI_PIPELINE_ID=${CI_PIPELINE_ID} +CONFIG_EXAMPLE_GATTC_WRITE_THROUGHPUT=y +CONFIG_EXAMPLE_GATTS_NOTIFY_THROUGHPUT=n diff --git a/examples/bluetooth/bluedroid/ble/ble_throughput/throughput_server/sdkconfig.ci.esp32c2_xtal26m_notify b/examples/bluetooth/bluedroid/ble/ble_throughput/throughput_server/sdkconfig.ci.esp32c2_xtal26m_notify new file mode 100644 index 000000000000..0448a5d2a501 --- /dev/null +++ b/examples/bluetooth/bluedroid/ble/ble_throughput/throughput_server/sdkconfig.ci.esp32c2_xtal26m_notify @@ -0,0 +1,7 @@ + +CONFIG_EXAMPLE_CI_ID=1 +CONFIG_IDF_TARGET="esp32c2" +CONFIG_XTAL_FREQ_26=y +CONFIG_EXAMPLE_CI_PIPELINE_ID=${CI_PIPELINE_ID} +CONFIG_EXAMPLE_GATTS_NOTIFY_THROUGHPUT=y +CONFIG_EXAMPLE_GATTC_WRITE_THROUGHPUT=n diff --git a/examples/bluetooth/bluedroid/ble/ble_throughput/throughput_server/sdkconfig.ci.esp32c2_xtal26m_write b/examples/bluetooth/bluedroid/ble/ble_throughput/throughput_server/sdkconfig.ci.esp32c2_xtal26m_write new file mode 100644 index 000000000000..5874287ec33d --- /dev/null +++ b/examples/bluetooth/bluedroid/ble/ble_throughput/throughput_server/sdkconfig.ci.esp32c2_xtal26m_write @@ -0,0 +1,6 @@ +CONFIG_EXAMPLE_CI_ID=1 +CONFIG_IDF_TARGET="esp32c2" +CONFIG_XTAL_FREQ_26=y +CONFIG_EXAMPLE_CI_PIPELINE_ID=${CI_PIPELINE_ID} +CONFIG_EXAMPLE_GATTC_WRITE_THROUGHPUT=y +CONFIG_EXAMPLE_GATTS_NOTIFY_THROUGHPUT=n diff --git a/examples/bluetooth/bluedroid/ble/ble_throughput/throughput_server/sdkconfig.ci.notify b/examples/bluetooth/bluedroid/ble/ble_throughput/throughput_server/sdkconfig.ci.notify new file mode 100644 index 000000000000..db7b616debaf --- /dev/null +++ b/examples/bluetooth/bluedroid/ble/ble_throughput/throughput_server/sdkconfig.ci.notify @@ -0,0 +1,4 @@ +CONFIG_EXAMPLE_CI_ID=1 +CONFIG_EXAMPLE_CI_PIPELINE_ID=${CI_PIPELINE_ID} +CONFIG_EXAMPLE_GATTS_NOTIFY_THROUGHPUT=y +CONFIG_EXAMPLE_GATTC_WRITE_THROUGHPUT=n diff --git a/examples/bluetooth/bluedroid/ble/ble_throughput/throughput_server/sdkconfig.ci.write b/examples/bluetooth/bluedroid/ble/ble_throughput/throughput_server/sdkconfig.ci.write new file mode 100644 index 000000000000..a47edbf18265 --- /dev/null +++ b/examples/bluetooth/bluedroid/ble/ble_throughput/throughput_server/sdkconfig.ci.write @@ -0,0 +1,4 @@ +CONFIG_EXAMPLE_CI_ID=1 +CONFIG_EXAMPLE_CI_PIPELINE_ID=${CI_PIPELINE_ID} +CONFIG_EXAMPLE_GATTC_WRITE_THROUGHPUT=y +CONFIG_EXAMPLE_GATTS_NOTIFY_THROUGHPUT=n diff --git a/examples/bluetooth/bluedroid/ble/gatt_client/sdkconfig.ci.esp32c2_xtal26m b/examples/bluetooth/bluedroid/ble/gatt_client/sdkconfig.ci.esp32c2_xtal26m new file mode 100644 index 000000000000..e77ed1d26cd5 --- /dev/null +++ b/examples/bluetooth/bluedroid/ble/gatt_client/sdkconfig.ci.esp32c2_xtal26m @@ -0,0 +1,5 @@ + +CONFIG_EXAMPLE_CI_ID=1 +CONFIG_IDF_TARGET="esp32c2" +CONFIG_XTAL_FREQ_26=y +CONFIG_EXAMPLE_CI_PIPELINE_ID=${CI_PIPELINE_ID} diff --git a/examples/bluetooth/bluedroid/ble/gatt_client/sdkconfig.ci.name b/examples/bluetooth/bluedroid/ble/gatt_client/sdkconfig.ci.name new file mode 100644 index 000000000000..6d9fd6470c4d --- /dev/null +++ b/examples/bluetooth/bluedroid/ble/gatt_client/sdkconfig.ci.name @@ -0,0 +1,2 @@ +CONFIG_EXAMPLE_CI_ID=1 +CONFIG_EXAMPLE_CI_PIPELINE_ID=${CI_PIPELINE_ID} diff --git a/examples/bluetooth/bluedroid/ble/gatt_client/sdkconfig.defaults.esp32c2 b/examples/bluetooth/bluedroid/ble/gatt_client/sdkconfig.defaults.esp32c2 index 298663d0a39a..9759e23400c7 100644 --- a/examples/bluetooth/bluedroid/ble/gatt_client/sdkconfig.defaults.esp32c2 +++ b/examples/bluetooth/bluedroid/ble/gatt_client/sdkconfig.defaults.esp32c2 @@ -7,3 +7,7 @@ CONFIG_BT_ENABLED=y CONFIG_BT_BLE_42_FEATURES_SUPPORTED=y # CONFIG_BT_LE_50_FEATURE_SUPPORT is not set CONFIG_BT_LE_HCI_EVT_BUF_SIZE=257 + +# XTAL Freq Config +CONFIG_XTAL_FREQ_26=y +CONFIG_XTAL_FREQ=26 diff --git a/examples/bluetooth/bluedroid/ble/gatt_security_client/sdkconfig.ci.esp32c2_xtal26m b/examples/bluetooth/bluedroid/ble/gatt_security_client/sdkconfig.ci.esp32c2_xtal26m new file mode 100644 index 000000000000..6ab0a7ab9d47 --- /dev/null +++ b/examples/bluetooth/bluedroid/ble/gatt_security_client/sdkconfig.ci.esp32c2_xtal26m @@ -0,0 +1,4 @@ +CONFIG_EXAMPLE_CI_ID=1 +CONFIG_IDF_TARGET="esp32c2" +CONFIG_XTAL_FREQ_26=y +CONFIG_EXAMPLE_CI_PIPELINE_ID=${CI_PIPELINE_ID} diff --git a/examples/bluetooth/bluedroid/ble/gatt_security_client/sdkconfig.ci.name b/examples/bluetooth/bluedroid/ble/gatt_security_client/sdkconfig.ci.name new file mode 100644 index 000000000000..d8e23a54e91e --- /dev/null +++ b/examples/bluetooth/bluedroid/ble/gatt_security_client/sdkconfig.ci.name @@ -0,0 +1,3 @@ + +CONFIG_EXAMPLE_CI_ID=1 +CONFIG_EXAMPLE_CI_PIPELINE_ID=${CI_PIPELINE_ID} diff --git a/examples/bluetooth/bluedroid/ble/gatt_security_server/sdkconfig.ci.esp32c2_xtal26m b/examples/bluetooth/bluedroid/ble/gatt_security_server/sdkconfig.ci.esp32c2_xtal26m new file mode 100644 index 000000000000..6ab0a7ab9d47 --- /dev/null +++ b/examples/bluetooth/bluedroid/ble/gatt_security_server/sdkconfig.ci.esp32c2_xtal26m @@ -0,0 +1,4 @@ +CONFIG_EXAMPLE_CI_ID=1 +CONFIG_IDF_TARGET="esp32c2" +CONFIG_XTAL_FREQ_26=y +CONFIG_EXAMPLE_CI_PIPELINE_ID=${CI_PIPELINE_ID} diff --git a/examples/bluetooth/bluedroid/ble/gatt_security_server/sdkconfig.ci.name b/examples/bluetooth/bluedroid/ble/gatt_security_server/sdkconfig.ci.name new file mode 100644 index 000000000000..d8e23a54e91e --- /dev/null +++ b/examples/bluetooth/bluedroid/ble/gatt_security_server/sdkconfig.ci.name @@ -0,0 +1,3 @@ + +CONFIG_EXAMPLE_CI_ID=1 +CONFIG_EXAMPLE_CI_PIPELINE_ID=${CI_PIPELINE_ID} diff --git a/examples/bluetooth/bluedroid/ble/gatt_server/sdkconfig.ci.esp32c2_xtal26m b/examples/bluetooth/bluedroid/ble/gatt_server/sdkconfig.ci.esp32c2_xtal26m new file mode 100644 index 000000000000..6ab0a7ab9d47 --- /dev/null +++ b/examples/bluetooth/bluedroid/ble/gatt_server/sdkconfig.ci.esp32c2_xtal26m @@ -0,0 +1,4 @@ +CONFIG_EXAMPLE_CI_ID=1 +CONFIG_IDF_TARGET="esp32c2" +CONFIG_XTAL_FREQ_26=y +CONFIG_EXAMPLE_CI_PIPELINE_ID=${CI_PIPELINE_ID} diff --git a/examples/bluetooth/bluedroid/ble/gatt_server/sdkconfig.ci.name b/examples/bluetooth/bluedroid/ble/gatt_server/sdkconfig.ci.name new file mode 100644 index 000000000000..d8e23a54e91e --- /dev/null +++ b/examples/bluetooth/bluedroid/ble/gatt_server/sdkconfig.ci.name @@ -0,0 +1,3 @@ + +CONFIG_EXAMPLE_CI_ID=1 +CONFIG_EXAMPLE_CI_PIPELINE_ID=${CI_PIPELINE_ID} diff --git a/examples/bluetooth/bluedroid/ble/gatt_server/sdkconfig.defaults.esp32c2 b/examples/bluetooth/bluedroid/ble/gatt_server/sdkconfig.defaults.esp32c2 index 7e477f7373d3..f13b703dc9fb 100644 --- a/examples/bluetooth/bluedroid/ble/gatt_server/sdkconfig.defaults.esp32c2 +++ b/examples/bluetooth/bluedroid/ble/gatt_server/sdkconfig.defaults.esp32c2 @@ -6,3 +6,6 @@ CONFIG_BT_ENABLED=y CONFIG_BT_BLE_42_FEATURES_SUPPORTED=y # CONFIG_BT_LE_50_FEATURE_SUPPORT is not set CONFIG_BT_LE_HCI_EVT_BUF_SIZE=257 +# XTAL Freq Config +CONFIG_XTAL_FREQ_26=y +CONFIG_XTAL_FREQ=26 diff --git a/examples/bluetooth/bluedroid/ble/pytest_ble_test.py b/examples/bluetooth/bluedroid/ble/pytest_ble_test.py new file mode 100644 index 000000000000..9de955b30014 --- /dev/null +++ b/examples/bluetooth/bluedroid/ble/pytest_ble_test.py @@ -0,0 +1,265 @@ +# SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD +# SPDX-License-Identifier: CC0-1.0 +import os.path +from typing import Tuple + +import pexpect +import pytest +from pytest_embedded_idf.dut import IdfDut + + +# Case 1: gatt client and gatt server test +@pytest.mark.esp32 +@pytest.mark.esp32c3 +@pytest.mark.esp32c6 +@pytest.mark.esp32c5 +@pytest.mark.esp32h2 +@pytest.mark.esp32s3 +@pytest.mark.esp32c61 +@pytest.mark.wifi_two_dut +@pytest.mark.parametrize( + 'count, app_path, config, erase_all', [ + (2, + f'{os.path.join(os.path.dirname(__file__), "gatt_server")}|{os.path.join(os.path.dirname(__file__), "gatt_client")}', + 'name', 'y'), + ], + indirect=True, +) +def test_gatt_func(app_path: str, dut: Tuple[IdfDut, IdfDut]) -> None: + gatt_client = dut[1] + gatt_server = dut[0] + gatt_client_addr = gatt_client.expect(r'Bluetooth MAC: (([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2})', timeout=30).group(1).decode('utf8') + gatt_server_addr = gatt_server.expect(r'Bluetooth MAC: (([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2})', timeout=30).group(1).decode('utf8') + gatt_client.expect_exact('GATT client register, status 0', timeout=30) + gatt_server.expect_exact('GATT server register, status 0', timeout=30) + gatt_server.expect_exact('Advertising start successfully', timeout=30) + gatt_client.expect_exact('Scanning start successfully', timeout=30) + gatt_client.expect_exact(f'Connected, conn_id 0, remote {gatt_server_addr}', timeout=30) + gatt_server.expect_exact(f'Connected, conn_id 0, remote {gatt_client_addr}', timeout=30) + gatt_client.expect_exact('Connection params update, status 0', timeout=30) + gatt_server.expect_exact('Connection params update, status 0', timeout=30) + gatt_client.expect_exact('Service discover complete', timeout=30) + gatt_client.expect_exact('Service search complete', timeout=30) + gatt_client.expect_exact('MTU exchange, status 0, MTU 500', timeout=30) + gatt_server.expect_exact('MTU exchange, MTU 500', timeout=30) + gatt_server.expect_exact('Notification enable', timeout=30) + gatt_client.expect_exact('Notification received', timeout=30) + gatt_client_output = gatt_client.expect(pexpect.TIMEOUT, timeout=10) + gatt_server_output = gatt_server.expect(pexpect.TIMEOUT, timeout=10) + assert 'rst:' not in str(gatt_client_output) and 'boot:' not in str(gatt_client_output) + assert 'rst:' not in str(gatt_server_output) and 'boot:' not in str(gatt_server_output) + assert 'Disconnected' not in str(gatt_client_output) + assert 'Disconnected' not in str(gatt_server_output) + + +# Case 2: gatt client and gatt server test for ESP32C2 26mhz xtal +@pytest.mark.esp32c2 +@pytest.mark.wifi_two_dut +@pytest.mark.xtal_26mhz +@pytest.mark.parametrize( + 'count, target, baud, app_path, config, erase_all', [ + (2, 'esp32c2|esp32c2', '74880', + f'{os.path.join(os.path.dirname(__file__), "gatt_server")}|{os.path.join(os.path.dirname(__file__), "gatt_client")}', + 'esp32c2_xtal26m', 'y'), + ], + indirect=True, +) +def test_c2_26mhz_xtal_gatt_func(app_path: str, dut: Tuple[IdfDut, IdfDut]) -> None: + gatt_client = dut[1] + gatt_server = dut[0] + gatt_client_addr = gatt_client.expect(r'Bluetooth MAC: (([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2})').group(1).decode('utf8') + gatt_server_addr = gatt_server.expect(r'Bluetooth MAC: (([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2})').group(1).decode('utf8') + gatt_client.expect_exact('GATT client register, status 0', timeout=30) + gatt_server.expect_exact('GATT server register, status 0', timeout=30) + gatt_server.expect_exact('Advertising start successfully', timeout=30) + gatt_client.expect_exact('Scanning start success', timeout=30) + gatt_client.expect_exact(f'Connected, conn_id 0, remote {gatt_server_addr}', timeout=30) + gatt_server.expect_exact(f'Connected, conn_id 0, remote {gatt_client_addr}', timeout=30) + gatt_client.expect_exact('Connection params update, status 0', timeout=30) + gatt_server.expect_exact('Connection params update, status 0', timeout=30) + gatt_client.expect_exact('Service discover complete', timeout=30) + gatt_client.expect_exact('Service search complete', timeout=30) + gatt_client.expect_exact('MTU exchange, status 0, MTU 500', timeout=30) + gatt_server.expect_exact('MTU exchange, MTU 500', timeout=30) + gatt_server.expect_exact('Notification enable', timeout=30) + gatt_client.expect_exact('Notification received', timeout=30) + gatt_client_output = gatt_client.expect(pexpect.TIMEOUT, timeout=10) + gatt_server_output = gatt_server.expect(pexpect.TIMEOUT, timeout=10) + assert 'rst:' not in str(gatt_client_output) and 'boot:' not in str(gatt_client_output) + assert 'rst:' not in str(gatt_server_output) and 'boot:' not in str(gatt_server_output) + assert 'Disconnected' not in str(gatt_client_output) + assert 'Disconnected' not in str(gatt_server_output) + + +# Case 3: gatt security server and gatt security client test +@pytest.mark.esp32 +@pytest.mark.esp32c3 +@pytest.mark.esp32c6 +@pytest.mark.esp32c5 +@pytest.mark.esp32h2 +@pytest.mark.esp32s3 +@pytest.mark.esp32c61 +@pytest.mark.wifi_two_dut +@pytest.mark.parametrize( + 'count, app_path, config, erase_all', [ + (2, + f'{os.path.join(os.path.dirname(__file__), "gatt_security_server")}|{os.path.join(os.path.dirname(__file__), "gatt_security_client")}', + 'name', 'y'), + ], + indirect=True, +) +def test_gatt_security_func(app_path: str, dut: Tuple[IdfDut, IdfDut], target: Tuple) -> None: + gatt_security_client = dut[1] + gatt_security_server = dut[0] + gatt_security_client_addr = gatt_security_client.expect(r'Bluetooth MAC: (([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2})', timeout=30).group(1).decode('utf8') + + gatt_security_client.expect_exact('GATT client register, status 0', timeout=30) + gatt_security_server.expect_exact('GATT server register, status 0', timeout=30) + gatt_security_client.expect_exact('Local privacy config successfully', timeout=30) + gatt_security_server.expect_exact('Local privacy config successfully', timeout=30) + gatt_security_server.expect_exact('Advertising start successfully', timeout=30) + gatt_security_client.expect_exact('Scanning start successfully', timeout=30) + gatt_security_client.expect_exact('Device found BE', timeout=30) + # can not get rpa_address, so not check server address + gatt_security_client.expect_exact(f'Connected, conn_id 0, remote ', timeout=30) + if target == ('esp32', 'esp32'): + gatt_security_server.expect_exact(f'Connected, conn_id 0, remote', timeout=30) + else: + gatt_security_server.expect_exact(f'Connected, conn_id 0, remote {gatt_security_client_addr}', timeout=30) + gatt_security_client.expect_exact('Key exchanged, key_type ESP_LE_KEY_PID', timeout=30) + gatt_security_client.expect_exact('Key exchanged, key_type ESP_LE_KEY_LENC', timeout=30) + gatt_security_client.expect_exact('Key exchanged, key_type ESP_LE_KEY_PENC', timeout=30) + gatt_security_client.expect_exact('Key exchanged, key_type ESP_LE_KEY_LID', timeout=30) + + gatt_security_server.expect_exact('Key exchanged, key_type ESP_LE_KEY_LENC', timeout=30) + gatt_security_server.expect_exact('Key exchanged, key_type ESP_LE_KEY_PENC', timeout=30) + gatt_security_server.expect_exact('Key exchanged, key_type ESP_LE_KEY_LID', timeout=30) + gatt_security_server.expect_exact('Key exchanged, key_type ESP_LE_KEY_PID', timeout=30) + if target == ('esp32', 'esp32'): + gatt_security_server.expect_exact(f'Authentication complete, addr_type 1, addr ', timeout=30) + else: + gatt_security_server.expect_exact(f'Authentication complete, addr_type 0, addr {gatt_security_client_addr}', timeout=30) + gatt_security_client.expect_exact(f'Authentication complete, addr_type 1, addr ', timeout=30) + gatt_security_server.expect_exact('Pairing successfully', timeout=30) + gatt_security_server.expect_exact('Bonded devices number 1', timeout=30) + gatt_security_client.expect_exact('Pairing successfully', timeout=30) + gatt_security_client.expect_exact('Service search complete', timeout=30) + gatt_security_client_output = gatt_security_client.expect(pexpect.TIMEOUT, timeout=10) + gatt_security_server_output = gatt_security_server.expect(pexpect.TIMEOUT, timeout=10) + assert 'rst:' not in str(gatt_security_client_output) and 'boot:' not in str(gatt_security_client_output) + assert 'rst:' not in str(gatt_security_server_output) and 'boot:' not in str(gatt_security_server_output) + assert 'Disconnected' not in str(gatt_security_client_output) + assert 'Disconnected' not in str(gatt_security_server_output) + + +# Case 4: gatt security server and gatt security client test for ESP32C2 26mhz xtal +@pytest.mark.esp32c2 +@pytest.mark.wifi_two_dut +@pytest.mark.xtal_26mhz +@pytest.mark.parametrize( + 'count, target, baud, app_path, config, erase_all', [ + (2, 'esp32c2|esp32c2', '74880', + f'{os.path.join(os.path.dirname(__file__), "gatt_security_server")}|{os.path.join(os.path.dirname(__file__), "gatt_security_client")}', + 'esp32c2_xtal26m', 'y'), + ], + indirect=True, +) +def test_c2_26mhz_xtal_gatt_security_func(app_path: str, dut: Tuple[IdfDut, IdfDut]) -> None: + gatt_security_client = dut[1] + gatt_security_server = dut[0] + gatt_security_client_addr = gatt_security_client.expect(r'Bluetooth MAC: (([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2})', timeout=30).group(1).decode('utf8') + + gatt_security_client.expect_exact('GATT client register, status 0', timeout=30) + gatt_security_server.expect_exact('GATT server register, status 0', timeout=30) + gatt_security_client.expect_exact('Local privacy config successfully', timeout=30) + gatt_security_server.expect_exact('Local privacy config successfully', timeout=30) + gatt_security_server.expect_exact('Advertising start successfully', timeout=30) + gatt_security_client.expect_exact('Scanning start successfully', timeout=30) + gatt_security_client.expect_exact('Device found BE', timeout=30) + # can not get rpa_address, so not check server address + gatt_security_client.expect_exact(f'Connected, conn_id 0, remote ', timeout=30) + gatt_security_server.expect_exact(f'Connected, conn_id 0, remote {gatt_security_client_addr}', timeout=30) + gatt_security_client.expect_exact('Key exchanged, key_type ESP_LE_KEY_PID', timeout=30) + gatt_security_client.expect_exact('Key exchanged, key_type ESP_LE_KEY_LENC', timeout=30) + gatt_security_client.expect_exact('Key exchanged, key_type ESP_LE_KEY_PENC', timeout=30) + gatt_security_client.expect_exact('Key exchanged, key_type ESP_LE_KEY_LID', timeout=30) + + gatt_security_server.expect_exact('Key exchanged, key_type ESP_LE_KEY_LENC', timeout=30) + gatt_security_server.expect_exact('Key exchanged, key_type ESP_LE_KEY_PENC', timeout=30) + gatt_security_server.expect_exact('Key exchanged, key_type ESP_LE_KEY_LID', timeout=30) + gatt_security_server.expect_exact('Key exchanged, key_type ESP_LE_KEY_PID', timeout=30) + gatt_security_server.expect_exact(f'Authentication complete, addr_type 0, addr {gatt_security_client_addr}', timeout=30) + gatt_security_client.expect_exact(f'Authentication complete, addr_type 1, addr ', timeout=30) + gatt_security_server.expect_exact('Pairing successfully', timeout=30) + gatt_security_server.expect_exact('Bonded devices number 1', timeout=30) + gatt_security_client.expect_exact('Pairing successfully', timeout=30) + gatt_security_client.expect_exact('Service search complete', timeout=30) + gatt_security_client_output = gatt_security_client.expect(pexpect.TIMEOUT, timeout=10) + gatt_security_server_output = gatt_security_server.expect(pexpect.TIMEOUT, timeout=10) + assert 'rst:' not in str(gatt_security_client_output) and 'boot:' not in str(gatt_security_client_output) + assert 'rst:' not in str(gatt_security_server_output) and 'boot:' not in str(gatt_security_server_output) + assert 'Disconnected' not in str(gatt_security_client_output) + assert 'Disconnected' not in str(gatt_security_server_output) + + +# Case 5: ble ibeacon test +@pytest.mark.esp32 +@pytest.mark.esp32c3 +@pytest.mark.esp32c6 +@pytest.mark.esp32c5 +@pytest.mark.esp32h2 +@pytest.mark.esp32s3 +@pytest.mark.esp32c61 +@pytest.mark.wifi_two_dut +@pytest.mark.parametrize( + 'count, app_path, config, erase_all', [ + (2, + f'{os.path.join(os.path.dirname(__file__), "ble_ibeacon")}|{os.path.join(os.path.dirname(__file__), "ble_ibeacon")}', + 'sender|receiver', 'y'), + ], + indirect=True, +) +def test_ble_ibeacon_func(app_path: str, dut: Tuple[IdfDut, IdfDut]) -> None: + ibeacon_sender = dut[0] + ibeacon_receiver = dut[1] + + ibeacon_sender_addr = ibeacon_sender.expect(r'Bluetooth MAC: (([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2})', timeout=30).group(1).decode('utf8') + + ibeacon_sender.expect_exact('Advertising start successfully', timeout=30) + ibeacon_receiver.expect_exact('Scanning start successfully', timeout=30) + ibeacon_receiver.expect_exact('iBeacon Found', timeout=30) + ibeacon_receiver.expect_exact(f'IBEACON_DEMO: Device address: {ibeacon_sender_addr}', timeout=30) + ibeacon_receiver.expect_exact('IBEACON_DEMO: Proximity UUID:', timeout=30) + ibeacon_receiver.expect_exact('Major: 0x27b7 (10167)', timeout=30) + ibeacon_receiver.expect_exact('Minor: 0xf206 (61958)', timeout=30) + ibeacon_receiver.expect_exact('Measured power (RSSI at a 1m distance):', timeout=30) + ibeacon_receiver.expect_exact('RSSI of packet: ', timeout=30) + + +# Case 5: ble ibeacon test for ESP32C2 26mhz xtal +@pytest.mark.esp32c2 +@pytest.mark.wifi_two_dut +@pytest.mark.xtal_26mhz +@pytest.mark.parametrize( + 'count, target, baud, app_path, config, erase_all', [ + (2, 'esp32c2|esp32c2', '74880', + f'{os.path.join(os.path.dirname(__file__), "ble_ibeacon")}|{os.path.join(os.path.dirname(__file__), "ble_ibeacon")}', + 'esp32c2_xtal26m_sender|esp32c2_xtal26m_receiver', 'y'), + ], + indirect=True, +) +def test_c2_26mhz_ble_ibeacon_func(app_path: str, dut: Tuple[IdfDut, IdfDut]) -> None: + ibeacon_sender = dut[0] + ibeacon_receiver = dut[1] + + ibeacon_sender_addr = ibeacon_sender.expect(r'Bluetooth MAC: (([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2})', timeout=30).group(1).decode('utf8') + + ibeacon_sender.expect_exact('Advertising start successfully', timeout=30) + ibeacon_receiver.expect_exact('Scanning start successfully', timeout=30) + ibeacon_receiver.expect_exact('iBeacon Found', timeout=30) + ibeacon_receiver.expect_exact(f'IBEACON_DEMO: Device address: {ibeacon_sender_addr}', timeout=30) + ibeacon_receiver.expect_exact('IBEACON_DEMO: Proximity UUID:', timeout=30) + ibeacon_receiver.expect_exact('Major: 0x27b7 (10167)', timeout=30) + ibeacon_receiver.expect_exact('Minor: 0xf206 (61958)', timeout=30) + ibeacon_receiver.expect_exact('Measured power (RSSI at a 1m distance):', timeout=30) + ibeacon_receiver.expect_exact('RSSI of packet: ', timeout=30) diff --git a/examples/bluetooth/bluedroid/ble_50/ble50_security_client/sdkconfig.ci.esp32c2_xtal26m b/examples/bluetooth/bluedroid/ble_50/ble50_security_client/sdkconfig.ci.esp32c2_xtal26m new file mode 100644 index 000000000000..6ab0a7ab9d47 --- /dev/null +++ b/examples/bluetooth/bluedroid/ble_50/ble50_security_client/sdkconfig.ci.esp32c2_xtal26m @@ -0,0 +1,4 @@ +CONFIG_EXAMPLE_CI_ID=1 +CONFIG_IDF_TARGET="esp32c2" +CONFIG_XTAL_FREQ_26=y +CONFIG_EXAMPLE_CI_PIPELINE_ID=${CI_PIPELINE_ID} diff --git a/examples/bluetooth/bluedroid/ble_50/ble50_security_client/sdkconfig.ci.name b/examples/bluetooth/bluedroid/ble_50/ble50_security_client/sdkconfig.ci.name new file mode 100644 index 000000000000..6d9fd6470c4d --- /dev/null +++ b/examples/bluetooth/bluedroid/ble_50/ble50_security_client/sdkconfig.ci.name @@ -0,0 +1,2 @@ +CONFIG_EXAMPLE_CI_ID=1 +CONFIG_EXAMPLE_CI_PIPELINE_ID=${CI_PIPELINE_ID} diff --git a/examples/bluetooth/bluedroid/ble_50/ble50_security_server/sdkconfig.ci.esp32c2_xtal26m b/examples/bluetooth/bluedroid/ble_50/ble50_security_server/sdkconfig.ci.esp32c2_xtal26m new file mode 100644 index 000000000000..6ab0a7ab9d47 --- /dev/null +++ b/examples/bluetooth/bluedroid/ble_50/ble50_security_server/sdkconfig.ci.esp32c2_xtal26m @@ -0,0 +1,4 @@ +CONFIG_EXAMPLE_CI_ID=1 +CONFIG_IDF_TARGET="esp32c2" +CONFIG_XTAL_FREQ_26=y +CONFIG_EXAMPLE_CI_PIPELINE_ID=${CI_PIPELINE_ID} diff --git a/examples/bluetooth/bluedroid/ble_50/ble50_security_server/sdkconfig.ci.name b/examples/bluetooth/bluedroid/ble_50/ble50_security_server/sdkconfig.ci.name new file mode 100644 index 000000000000..6d9fd6470c4d --- /dev/null +++ b/examples/bluetooth/bluedroid/ble_50/ble50_security_server/sdkconfig.ci.name @@ -0,0 +1,2 @@ +CONFIG_EXAMPLE_CI_ID=1 +CONFIG_EXAMPLE_CI_PIPELINE_ID=${CI_PIPELINE_ID} diff --git a/examples/bluetooth/bluedroid/ble_50/periodic_adv/sdkconfig.ci.esp32c2_xtal26m b/examples/bluetooth/bluedroid/ble_50/periodic_adv/sdkconfig.ci.esp32c2_xtal26m new file mode 100644 index 000000000000..6ab0a7ab9d47 --- /dev/null +++ b/examples/bluetooth/bluedroid/ble_50/periodic_adv/sdkconfig.ci.esp32c2_xtal26m @@ -0,0 +1,4 @@ +CONFIG_EXAMPLE_CI_ID=1 +CONFIG_IDF_TARGET="esp32c2" +CONFIG_XTAL_FREQ_26=y +CONFIG_EXAMPLE_CI_PIPELINE_ID=${CI_PIPELINE_ID} diff --git a/examples/bluetooth/bluedroid/ble_50/periodic_adv/sdkconfig.ci.name b/examples/bluetooth/bluedroid/ble_50/periodic_adv/sdkconfig.ci.name new file mode 100644 index 000000000000..6d9fd6470c4d --- /dev/null +++ b/examples/bluetooth/bluedroid/ble_50/periodic_adv/sdkconfig.ci.name @@ -0,0 +1,2 @@ +CONFIG_EXAMPLE_CI_ID=1 +CONFIG_EXAMPLE_CI_PIPELINE_ID=${CI_PIPELINE_ID} diff --git a/examples/bluetooth/bluedroid/ble_50/periodic_sync/sdkconfig.ci.esp32c2_xtal26m b/examples/bluetooth/bluedroid/ble_50/periodic_sync/sdkconfig.ci.esp32c2_xtal26m new file mode 100644 index 000000000000..6ab0a7ab9d47 --- /dev/null +++ b/examples/bluetooth/bluedroid/ble_50/periodic_sync/sdkconfig.ci.esp32c2_xtal26m @@ -0,0 +1,4 @@ +CONFIG_EXAMPLE_CI_ID=1 +CONFIG_IDF_TARGET="esp32c2" +CONFIG_XTAL_FREQ_26=y +CONFIG_EXAMPLE_CI_PIPELINE_ID=${CI_PIPELINE_ID} diff --git a/examples/bluetooth/bluedroid/ble_50/periodic_sync/sdkconfig.ci.name b/examples/bluetooth/bluedroid/ble_50/periodic_sync/sdkconfig.ci.name new file mode 100644 index 000000000000..6d9fd6470c4d --- /dev/null +++ b/examples/bluetooth/bluedroid/ble_50/periodic_sync/sdkconfig.ci.name @@ -0,0 +1,2 @@ +CONFIG_EXAMPLE_CI_ID=1 +CONFIG_EXAMPLE_CI_PIPELINE_ID=${CI_PIPELINE_ID} diff --git a/examples/bluetooth/bluedroid/ble_50/pytest_ble50_test.py b/examples/bluetooth/bluedroid/ble_50/pytest_ble50_test.py new file mode 100644 index 000000000000..b5b02e87f809 --- /dev/null +++ b/examples/bluetooth/bluedroid/ble_50/pytest_ble50_test.py @@ -0,0 +1,143 @@ +# SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD +# SPDX-License-Identifier: CC0-1.0 +import os.path +from typing import Tuple + +import pytest +from pytest_embedded_idf.dut import IdfDut + + +# Case 1: ble50 security client and ble50 security server test +@pytest.mark.esp32c3 +@pytest.mark.esp32c6 +@pytest.mark.esp32c5 +@pytest.mark.esp32h2 +@pytest.mark.esp32s3 +@pytest.mark.esp32c61 +@pytest.mark.wifi_two_dut +@pytest.mark.parametrize( + 'count, app_path, config, erase_all', [ + (2, + f'{os.path.join(os.path.dirname(__file__), "ble50_security_server")}|{os.path.join(os.path.dirname(__file__), "ble50_security_client")}', + 'name', 'y'), + ], + indirect=True, +) +def test_ble50_security_func(app_path: str, dut: Tuple[IdfDut, IdfDut]) -> None: + server = dut[0] + client = dut[1] + client_addr = client.expect(r'Bluetooth MAC: (([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2})', timeout=30).group(1).decode('utf8') + server_addr = server.expect(r'Bluetooth MAC: (([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2})', timeout=30).group(1).decode('utf8') + + server.expect_exact('Extended advertising params set, status 0', timeout=30) + server.expect_exact('Extended advertising data set, status 0', timeout=30) + server.expect_exact('Extended advertising start, status 0', timeout=30) + client.expect_exact('Extended scanning start successfully', timeout=30) + client.expect_exact(f'Connected, conn_id 0, remote {server_addr}', timeout=30) + server.expect_exact(f'Connected, conn_id 0, remote {client_addr}', timeout=30) + server.expect_exact('Pairing successfully', timeout=30) + client.expect_exact('Pairing successfully', timeout=30) + server.expect_exact('Bonded devices number 1', timeout=30) + server.expect_exact('Characteristic write', timeout=30) + client.expect_exact('Service discover complete', timeout=30) + client.expect_exact('Service search complete', timeout=30) + client.expect_exact('MTU exchange, status 0', timeout=30) + client.expect_exact('Descriptor write successfully', timeout=30) + + +# Case 2: ble50 security client and ble50 security server test for ESP32C2 26mhz xtal +@pytest.mark.esp32c2 +@pytest.mark.wifi_two_dut +@pytest.mark.xtal_26mhz +@pytest.mark.parametrize( + 'count, target, baud, app_path, config, erase_all', [ + (2, 'esp32c2|esp32c2', '74880', + f'{os.path.join(os.path.dirname(__file__), "ble50_security_server")}|{os.path.join(os.path.dirname(__file__), "ble50_security_client")}', + 'esp32c2_xtal26m', 'y'), + ], + indirect=True, +) +def test_c2_26mhz_xtal_ble50_security_func(app_path: str, dut: Tuple[IdfDut, IdfDut]) -> None: + server = dut[0] + client = dut[1] + client_addr = client.expect(r'Bluetooth MAC: (([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2})', timeout=30).group(1).decode('utf8') + server_addr = server.expect(r'Bluetooth MAC: (([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2})', timeout=30).group(1).decode('utf8') + + server.expect_exact('Extended advertising params set, status 0', timeout=30) + server.expect_exact('Extended advertising data set, status 0', timeout=30) + server.expect_exact('Extended advertising start, status 0', timeout=30) + client.expect_exact('Extended scanning start successfully', timeout=30) + client.expect_exact(f'Connected, conn_id 0, remote {server_addr}', timeout=30) + server.expect_exact(f'Connected, conn_id 0, remote {client_addr}', timeout=30) + server.expect_exact('Pairing successfully', timeout=30) + client.expect_exact('Pairing successfully', timeout=30) + server.expect_exact('Bonded devices number 1', timeout=30) + server.expect_exact('Characteristic write', timeout=30) + client.expect_exact('Service discover complete', timeout=30) + client.expect_exact('Service search complete', timeout=30) + client.expect_exact('MTU exchange, status 0', timeout=30) + client.expect_exact('Descriptor write successfully', timeout=30) + + +# Case 3: period_adv and period_sync test +@pytest.mark.esp32c3 +@pytest.mark.esp32c6 +@pytest.mark.esp32c5 +@pytest.mark.esp32h2 +@pytest.mark.esp32s3 +@pytest.mark.esp32c61 +@pytest.mark.wifi_two_dut +@pytest.mark.parametrize( + 'count, app_path, config, erase_all', [ + (2, + f'{os.path.join(os.path.dirname(__file__), "periodic_adv")}|{os.path.join(os.path.dirname(__file__), "periodic_sync")}', + 'name', 'y'), + ], + indirect=True, +) +def test_period_adv_sync_func(app_path: str, dut: Tuple[IdfDut, IdfDut]) -> None: + adv_dut = dut[0] + sync_dut = dut[1] + + adv_dut.expect_exact('Extended advertising params set, status 0', timeout=30) + adv_dut.expect_exact('Extended advertising random address set, status 0', timeout=30) + adv_dut.expect_exact('Extended advertising data set, status 0', timeout=30) + adv_dut.expect_exact('Extended advertising start, status 0', timeout=30) + adv_dut.expect_exact('Periodic advertising params set, status 0', timeout=30) + adv_dut.expect_exact('Periodic advertising data set, status 0', timeout=30) + adv_dut.expect_exact('Periodic advertising start, status 0', timeout=30) + sync_dut.expect_exact('Extended scanning params set, status 0', timeout=30) + sync_dut.expect_exact('Extended scanning start, status 0', timeout=30) + sync_dut.expect_exact(f'Create sync with the peer device BE', timeout=30) + sync_dut.expect_exact('Periodic advertising sync establish, status 0', timeout=30) + sync_dut.expect_exact('Periodic adv report, sync handle ', timeout=30) + + +# Case 4: period_adv and period_sync test for ESP32C2 26mhz xtal +@pytest.mark.esp32c2 +@pytest.mark.wifi_two_dut +@pytest.mark.xtal_26mhz +@pytest.mark.parametrize( + 'count, target, baud, app_path, config, erase_all', [ + (2, 'esp32c2|esp32c2', '74880', + f'{os.path.join(os.path.dirname(__file__), "periodic_adv")}|{os.path.join(os.path.dirname(__file__), "periodic_sync")}', + 'esp32c2_xtal26m', 'y'), + ], + indirect=True, +) +def test_c2_26mhz_xtal_period_adv_sync_func(app_path: str, dut: Tuple[IdfDut, IdfDut]) -> None: + adv_dut = dut[0] + sync_dut = dut[1] + + adv_dut.expect_exact('Extended advertising params set, status 0', timeout=30) + adv_dut.expect_exact('Extended advertising random address set, status 0', timeout=30) + adv_dut.expect_exact('Extended advertising data set, status 0', timeout=30) + adv_dut.expect_exact('Extended advertising start, status 0', timeout=30) + adv_dut.expect_exact('Periodic advertising params set, status 0', timeout=30) + adv_dut.expect_exact('Periodic advertising data set, status 0', timeout=30) + adv_dut.expect_exact('Periodic advertising start, status 0', timeout=30) + sync_dut.expect_exact('Extended scanning params set, status 0', timeout=30) + sync_dut.expect_exact('Extended scanning start, status 0', timeout=30) + sync_dut.expect_exact(f'Create sync with the peer device BE', timeout=30) + sync_dut.expect_exact('Periodic advertising sync establish, status 0', timeout=30) + sync_dut.expect_exact('Periodic adv report, sync handle ', timeout=30) From d19666d8e5c32232b828c1befb61d99cd798384e Mon Sep 17 00:00:00 2001 From: Peter Marcisovsky Date: Mon, 7 Oct 2024 13:51:09 +0200 Subject: [PATCH 086/365] refactor(usb_host): Update the USB component to new critical section API --- components/usb/ext_hub.c | 13 ++++++------- components/usb/hcd_dwc.c | 11 ++++++----- components/usb/hub.c | 17 ++++++++--------- components/usb/usb_host.c | 16 ++++++++-------- components/usb/usb_phy.c | 31 +++++++++++++++++-------------- components/usb/usbh.c | 18 ++++++++---------- 6 files changed, 53 insertions(+), 53 deletions(-) diff --git a/components/usb/ext_hub.c b/components/usb/ext_hub.c index 149993070c0c..1c821677f45f 100644 --- a/components/usb/ext_hub.c +++ b/components/usb/ext_hub.c @@ -9,8 +9,7 @@ #include "esp_err.h" #include "esp_log.h" #include "esp_heap_caps.h" -#include "freertos/FreeRTOS.h" -#include "freertos/task.h" +#include "esp_private/critical_section.h" #include "usb_private.h" #include "ext_hub.h" #include "ext_port.h" @@ -152,7 +151,6 @@ typedef struct { } ext_hub_driver_t; static ext_hub_driver_t *p_ext_hub_driver = NULL; -static portMUX_TYPE ext_hub_driver_lock = portMUX_INITIALIZER_UNLOCKED; const char *EXT_HUB_TAG = "EXT_HUB"; @@ -160,10 +158,11 @@ const char *EXT_HUB_TAG = "EXT_HUB"; // ------------------------------- Helpers ------------------------------------- // ----------------------------------------------------------------------------- -#define EXT_HUB_ENTER_CRITICAL() portENTER_CRITICAL(&ext_hub_driver_lock) -#define EXT_HUB_EXIT_CRITICAL() portEXIT_CRITICAL(&ext_hub_driver_lock) -#define EXT_HUB_ENTER_CRITICAL_SAFE() portENTER_CRITICAL_SAFE(&ext_hub_driver_lock) -#define EXT_HUB_EXIT_CRITICAL_SAFE() portEXIT_CRITICAL_SAFE(&ext_hub_driver_lock) +DEFINE_CRIT_SECTION_LOCK_STATIC(ext_hub_driver_lock); +#define EXT_HUB_ENTER_CRITICAL() esp_os_enter_critical(&ext_hub_driver_lock) +#define EXT_HUB_EXIT_CRITICAL() esp_os_exit_critical(&ext_hub_driver_lock) +#define EXT_HUB_ENTER_CRITICAL_SAFE() esp_os_enter_critical_safe(&ext_hub_driver_lock) +#define EXT_HUB_EXIT_CRITICAL_SAFE() esp_os_exit_critical_safe(&ext_hub_driver_lock) #define EXT_HUB_CHECK(cond, ret_val) ({ \ if (!(cond)) { \ diff --git a/components/usb/hcd_dwc.c b/components/usb/hcd_dwc.c index a5ea7d736ff4..76f031ae2102 100644 --- a/components/usb/hcd_dwc.c +++ b/components/usb/hcd_dwc.c @@ -10,6 +10,7 @@ #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "freertos/semphr.h" +#include "esp_private/critical_section.h" #include "esp_heap_caps.h" #include "esp_intr_alloc.h" #include "soc/interrupts.h" // For interrupt index @@ -84,10 +85,11 @@ const char *HCD_DWC_TAG = "HCD DWC"; -#define HCD_ENTER_CRITICAL_ISR() portENTER_CRITICAL_ISR(&hcd_lock) -#define HCD_EXIT_CRITICAL_ISR() portEXIT_CRITICAL_ISR(&hcd_lock) -#define HCD_ENTER_CRITICAL() portENTER_CRITICAL(&hcd_lock) -#define HCD_EXIT_CRITICAL() portEXIT_CRITICAL(&hcd_lock) +DEFINE_CRIT_SECTION_LOCK_STATIC(hcd_lock); +#define HCD_ENTER_CRITICAL_ISR() esp_os_enter_critical_isr(&hcd_lock) +#define HCD_EXIT_CRITICAL_ISR() esp_os_exit_critical_isr(&hcd_lock) +#define HCD_ENTER_CRITICAL() esp_os_enter_critical(&hcd_lock) +#define HCD_EXIT_CRITICAL() esp_os_exit_critical(&hcd_lock) #define HCD_CHECK(cond, ret_val) ({ \ if (!(cond)) { \ @@ -270,7 +272,6 @@ typedef struct { intr_handle_t isr_hdl; } hcd_obj_t; -static portMUX_TYPE hcd_lock = portMUX_INITIALIZER_UNLOCKED; static hcd_obj_t *s_hcd_obj = NULL; // Note: "s_" is for the static pointer // ------------------------------------------------- Forward Declare --------------------------------------------------- diff --git a/components/usb/hub.c b/components/usb/hub.c index 079a18f351af..2d328bcf39a1 100644 --- a/components/usb/hub.c +++ b/components/usb/hub.c @@ -9,10 +9,9 @@ #include #include #include -#include "freertos/FreeRTOS.h" -#include "freertos/portmacro.h" #include "esp_err.h" #include "esp_heap_caps.h" +#include "esp_private/critical_section.h" #include "esp_log.h" #include "usb_private.h" #include "hcd.h" @@ -107,16 +106,16 @@ typedef struct { } hub_driver_t; static hub_driver_t *p_hub_driver_obj = NULL; -static portMUX_TYPE hub_driver_lock = portMUX_INITIALIZER_UNLOCKED; const char *HUB_DRIVER_TAG = "HUB"; -#define HUB_DRIVER_ENTER_CRITICAL_ISR() portENTER_CRITICAL_ISR(&hub_driver_lock) -#define HUB_DRIVER_EXIT_CRITICAL_ISR() portEXIT_CRITICAL_ISR(&hub_driver_lock) -#define HUB_DRIVER_ENTER_CRITICAL() portENTER_CRITICAL(&hub_driver_lock) -#define HUB_DRIVER_EXIT_CRITICAL() portEXIT_CRITICAL(&hub_driver_lock) -#define HUB_DRIVER_ENTER_CRITICAL_SAFE() portENTER_CRITICAL_SAFE(&hub_driver_lock) -#define HUB_DRIVER_EXIT_CRITICAL_SAFE() portEXIT_CRITICAL_SAFE(&hub_driver_lock) +DEFINE_CRIT_SECTION_LOCK_STATIC(hub_driver_lock); +#define HUB_DRIVER_ENTER_CRITICAL_ISR() esp_os_enter_critical_isr(&hub_driver_lock) +#define HUB_DRIVER_EXIT_CRITICAL_ISR() esp_os_exit_critical_isr(&hub_driver_lock) +#define HUB_DRIVER_ENTER_CRITICAL() esp_os_enter_critical(&hub_driver_lock) +#define HUB_DRIVER_EXIT_CRITICAL() esp_os_exit_critical(&hub_driver_lock) +#define HUB_DRIVER_ENTER_CRITICAL_SAFE() esp_os_enter_critical_safe(&hub_driver_lock) +#define HUB_DRIVER_EXIT_CRITICAL_SAFE() esp_os_exit_critical_safe(&hub_driver_lock) #define HUB_DRIVER_CHECK(cond, ret_val) ({ \ if (!(cond)) { \ diff --git a/components/usb/usb_host.c b/components/usb/usb_host.c index 644a5e777e5c..bc41bab9089d 100644 --- a/components/usb/usb_host.c +++ b/components/usb/usb_host.c @@ -16,6 +16,7 @@ Warning: The USB Host Library API is still a beta version and may be subject to #include "freertos/task.h" #include "freertos/queue.h" #include "freertos/semphr.h" +#include "esp_private/critical_section.h" #include "esp_err.h" #include "esp_log.h" #include "esp_heap_caps.h" @@ -26,14 +27,13 @@ Warning: The USB Host Library API is still a beta version and may be subject to #include "esp_private/usb_phy.h" #include "usb/usb_host.h" -static portMUX_TYPE host_lock = portMUX_INITIALIZER_UNLOCKED; - -#define HOST_ENTER_CRITICAL_ISR() portENTER_CRITICAL_ISR(&host_lock) -#define HOST_EXIT_CRITICAL_ISR() portEXIT_CRITICAL_ISR(&host_lock) -#define HOST_ENTER_CRITICAL() portENTER_CRITICAL(&host_lock) -#define HOST_EXIT_CRITICAL() portEXIT_CRITICAL(&host_lock) -#define HOST_ENTER_CRITICAL_SAFE() portENTER_CRITICAL_SAFE(&host_lock) -#define HOST_EXIT_CRITICAL_SAFE() portEXIT_CRITICAL_SAFE(&host_lock) +DEFINE_CRIT_SECTION_LOCK_STATIC(host_lock); +#define HOST_ENTER_CRITICAL_ISR() esp_os_enter_critical_isr(&host_lock) +#define HOST_EXIT_CRITICAL_ISR() esp_os_exit_critical_isr(&host_lock) +#define HOST_ENTER_CRITICAL() esp_os_enter_critical(&host_lock) +#define HOST_EXIT_CRITICAL() esp_os_exit_critical(&host_lock) +#define HOST_ENTER_CRITICAL_SAFE() esp_os_enter_critical_safe(&host_lock) +#define HOST_EXIT_CRITICAL_SAFE() esp_os_exit_critical_safe(&host_lock) #define HOST_CHECK(cond, ret_val) ({ \ if (!(cond)) { \ diff --git a/components/usb/usb_phy.c b/components/usb/usb_phy.c index 7ae5e5f3826b..220e63173214 100644 --- a/components/usb/usb_phy.c +++ b/components/usb/usb_phy.c @@ -6,11 +6,11 @@ #include #include -#include "freertos/FreeRTOS.h" #include "esp_log.h" #include "esp_check.h" #include "esp_private/periph_ctrl.h" #include "esp_private/usb_phy.h" +#include "esp_private/critical_section.h" #include "soc/usb_dwc_periph.h" #include "hal/usb_wrap_hal.h" #include "hal/usb_serial_jtag_hal.h" @@ -61,7 +61,10 @@ typedef struct { } usb_iopin_dsc_t; static phy_ctrl_obj_t *p_phy_ctrl_obj = NULL; -static portMUX_TYPE phy_spinlock = portMUX_INITIALIZER_UNLOCKED; + +DEFINE_CRIT_SECTION_LOCK_STATIC(phy_spinlock); +#define PHY_ENTER_CRITICAL() esp_os_enter_critical(&phy_spinlock) +#define PHY_EXIT_CRITICAL() esp_os_exit_critical(&phy_spinlock) static esp_err_t phy_iopins_configure(const usb_iopin_dsc_t *usb_periph_iopins, int iopins_num) { @@ -235,29 +238,29 @@ esp_err_t usb_phy_action(usb_phy_handle_t handle, usb_phy_action_t action) static esp_err_t usb_phy_install(void) { - portENTER_CRITICAL(&phy_spinlock); + PHY_ENTER_CRITICAL(); if (p_phy_ctrl_obj) { // p_phy_ctrl_obj already installed, return immediately - portEXIT_CRITICAL(&phy_spinlock); + PHY_EXIT_CRITICAL(); return ESP_OK; } - portEXIT_CRITICAL(&phy_spinlock); + PHY_EXIT_CRITICAL(); esp_err_t ret = ESP_OK; phy_ctrl_obj_t *phy_ctrl_obj = (phy_ctrl_obj_t *) calloc(1, sizeof(phy_ctrl_obj_t)); ESP_GOTO_ON_FALSE(phy_ctrl_obj, ESP_ERR_NO_MEM, cleanup, USBPHY_TAG, "no mem for USB_PHY driver"); - portENTER_CRITICAL(&phy_spinlock); + PHY_ENTER_CRITICAL(); if (!p_phy_ctrl_obj) { p_phy_ctrl_obj = phy_ctrl_obj; p_phy_ctrl_obj->ref_count = 0; } else { // p_phy_ctrl_obj already installed, need to free resource - portEXIT_CRITICAL(&phy_spinlock); + PHY_EXIT_CRITICAL(); goto cleanup; } // Enable USB peripheral and reset the register - portEXIT_CRITICAL(&phy_spinlock); + PHY_EXIT_CRITICAL(); USB_WRAP_RCC_ATOMIC() { usb_wrap_ll_enable_bus_clock(true); usb_wrap_ll_reset_register(); @@ -281,7 +284,7 @@ esp_err_t usb_new_phy(const usb_phy_config_t *config, usb_phy_handle_t *handle_r phy_context_t *phy_context = (phy_context_t *) calloc(1, sizeof(phy_context_t)); ESP_GOTO_ON_FALSE(phy_context, ESP_ERR_NO_MEM, cleanup, USBPHY_TAG, "no mem for phy context"); - portENTER_CRITICAL(&phy_spinlock); + PHY_ENTER_CRITICAL(); usb_phy_get_phy_status(config->target, &phy_context->status); if (phy_context->status == USB_PHY_STATUS_FREE) { new_phy = true; @@ -292,7 +295,7 @@ esp_err_t usb_new_phy(const usb_phy_config_t *config, usb_phy_handle_t *handle_r p_phy_ctrl_obj->internal_phy = phy_context; } } - portEXIT_CRITICAL(&phy_spinlock); + PHY_EXIT_CRITICAL(); ESP_GOTO_ON_FALSE(new_phy, ESP_ERR_INVALID_STATE, cleanup, USBPHY_TAG, "selected PHY is in use"); phy_context->target = config->target; @@ -354,7 +357,7 @@ esp_err_t usb_new_phy(const usb_phy_config_t *config, usb_phy_handle_t *handle_r static void phy_uninstall(void) { phy_ctrl_obj_t *p_phy_ctrl_obj_free = NULL; - portENTER_CRITICAL(&phy_spinlock); + PHY_ENTER_CRITICAL(); if (p_phy_ctrl_obj->ref_count == 0) { p_phy_ctrl_obj_free = p_phy_ctrl_obj; p_phy_ctrl_obj = NULL; @@ -363,7 +366,7 @@ static void phy_uninstall(void) usb_wrap_ll_enable_bus_clock(false); } } - portEXIT_CRITICAL(&phy_spinlock); + PHY_EXIT_CRITICAL(); free(p_phy_ctrl_obj_free); } @@ -371,7 +374,7 @@ esp_err_t usb_del_phy(usb_phy_handle_t handle) { ESP_RETURN_ON_FALSE(handle, ESP_ERR_INVALID_ARG, USBPHY_TAG, "handle argument is invalid"); - portENTER_CRITICAL(&phy_spinlock); + PHY_ENTER_CRITICAL(); p_phy_ctrl_obj->ref_count--; if (handle->target == USB_PHY_TARGET_EXT) { p_phy_ctrl_obj->external_phy = NULL; @@ -380,7 +383,7 @@ esp_err_t usb_del_phy(usb_phy_handle_t handle) usb_wrap_hal_phy_disable_pull_override(&handle->wrap_hal); p_phy_ctrl_obj->internal_phy = NULL; } - portEXIT_CRITICAL(&phy_spinlock); + PHY_EXIT_CRITICAL(); free(handle->iopins); free(handle); phy_uninstall(); diff --git a/components/usb/usbh.c b/components/usb/usbh.c index c515fc01ca5c..54355ace682b 100644 --- a/components/usb/usbh.c +++ b/components/usb/usbh.c @@ -10,9 +10,8 @@ #include #include #include "freertos/FreeRTOS.h" -#include "freertos/portmacro.h" -#include "freertos/task.h" #include "freertos/semphr.h" +#include "esp_private/critical_section.h" #include "esp_err.h" #include "esp_log.h" #include "esp_heap_caps.h" @@ -117,16 +116,15 @@ typedef struct { static usbh_t *p_usbh_obj = NULL; -static portMUX_TYPE usbh_lock = portMUX_INITIALIZER_UNLOCKED; - const char *USBH_TAG = "USBH"; -#define USBH_ENTER_CRITICAL_ISR() portENTER_CRITICAL_ISR(&usbh_lock) -#define USBH_EXIT_CRITICAL_ISR() portEXIT_CRITICAL_ISR(&usbh_lock) -#define USBH_ENTER_CRITICAL() portENTER_CRITICAL(&usbh_lock) -#define USBH_EXIT_CRITICAL() portEXIT_CRITICAL(&usbh_lock) -#define USBH_ENTER_CRITICAL_SAFE() portENTER_CRITICAL_SAFE(&usbh_lock) -#define USBH_EXIT_CRITICAL_SAFE() portEXIT_CRITICAL_SAFE(&usbh_lock) +DEFINE_CRIT_SECTION_LOCK_STATIC(usbh_lock); +#define USBH_ENTER_CRITICAL_ISR() esp_os_enter_critical_isr(&usbh_lock) +#define USBH_EXIT_CRITICAL_ISR() esp_os_exit_critical_isr(&usbh_lock) +#define USBH_ENTER_CRITICAL() esp_os_enter_critical(&usbh_lock) +#define USBH_EXIT_CRITICAL() esp_os_exit_critical(&usbh_lock) +#define USBH_ENTER_CRITICAL_SAFE() esp_os_enter_critical_safe(&usbh_lock) +#define USBH_EXIT_CRITICAL_SAFE() esp_os_exit_critical_safe(&usbh_lock) #define USBH_CHECK(cond, ret_val) ({ \ if (!(cond)) { \ From 213c318e624a2886f5b839ce0d43872a309236d5 Mon Sep 17 00:00:00 2001 From: Erhan Kurubas Date: Tue, 8 Oct 2024 13:08:41 +0200 Subject: [PATCH 087/365] fix(apptrace): replace esp32p4 ctrl block into noncache-able TCM memory --- components/app_trace/port/riscv/port.c | 14 ++++++++++---- examples/system/.build-test-rules.yml | 4 ---- examples/system/app_trace_basic/README.md | 4 ++-- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/components/app_trace/port/riscv/port.c b/components/app_trace/port/riscv/port.c index 3e5ceca966c9..14fe223623c9 100644 --- a/components/app_trace/port/riscv/port.c +++ b/components/app_trace/port/riscv/port.c @@ -57,7 +57,13 @@ static bool esp_apptrace_riscv_host_data_pending(void); const static char *TAG = "esp_apptrace"; -static esp_apptrace_riscv_ctrl_block_t s_tracing_ctrl[CONFIG_FREERTOS_NUMBER_OF_CORES]; +#if SOC_CACHE_INTERNAL_MEM_VIA_L1CACHE +#define APPTRACE_DRAM_ATTR TCM_DRAM_ATTR +#else +#define APPTRACE_DRAM_ATTR +#endif + +static APPTRACE_DRAM_ATTR esp_apptrace_riscv_ctrl_block_t s_tracing_ctrl[CONFIG_FREERTOS_NUMBER_OF_CORES]; esp_apptrace_hw_t *esp_apptrace_jtag_hw_get(void **data) { @@ -92,7 +98,7 @@ esp_apptrace_hw_t *esp_apptrace_jtag_hw_get(void **data) } /* Advertises apptrace control block address to host. - This function can be overriden with custom implementation, + This function can be overridden with custom implementation, e.g. OpenOCD flasher stub use own implementation of it. */ __attribute__((weak)) int esp_apptrace_advertise_ctrl_block(void *ctrl_block_addr) { @@ -103,7 +109,7 @@ __attribute__((weak)) int esp_apptrace_advertise_ctrl_block(void *ctrl_block_add } /* Returns up buffers config. - This function can be overriden with custom implementation, + This function can be overridden with custom implementation, e.g. OpenOCD flasher stub use own implementation of it. */ __attribute__((weak)) void esp_apptrace_get_up_buffers(esp_apptrace_mem_block_t mem_blocks_cfg[2]) { @@ -165,7 +171,7 @@ static esp_err_t esp_apptrace_riscv_init(esp_apptrace_riscv_data_t *hw_data) } // notify host about control block address int res = esp_apptrace_advertise_ctrl_block(&s_tracing_ctrl[core_id]); - assert(res == 0 && "Falied to send config to host!"); + assert(res == 0 && "Failed to send config to host!"); return ESP_OK; } diff --git a/examples/system/.build-test-rules.yml b/examples/system/.build-test-rules.yml index 3152b243fde3..d0cf7db720bd 100644 --- a/examples/system/.build-test-rules.yml +++ b/examples/system/.build-test-rules.yml @@ -1,10 +1,6 @@ # Documentation: .gitlab/ci/README.md#manifest-file-to-control-the-buildtest-apps examples/system/app_trace_basic: - disable: - - if: IDF_TARGET == "esp32p4" - temporary: true - reason: not ready yet. IDF-8107 disable_test: - if: IDF_TARGET in ["esp32c6", "esp32h2", "esp32p4", "esp32c5", "esp32c61"] temporary: true diff --git a/examples/system/app_trace_basic/README.md b/examples/system/app_trace_basic/README.md index 72abab1b8da9..151e992d1a40 100644 --- a/examples/system/app_trace_basic/README.md +++ b/examples/system/app_trace_basic/README.md @@ -1,5 +1,5 @@ -| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-H2 | ESP32-S2 | ESP32-S3 | -| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | -------- | -------- | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-H2 | ESP32-P4 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | -------- | -------- | -------- | # Application Level Tracing Example (Basic) From 1723b413d64ec63bec2ee84cc36200f76ff844ab Mon Sep 17 00:00:00 2001 From: WanqQixiang Date: Wed, 9 Oct 2024 10:11:21 +0800 Subject: [PATCH 088/365] fix(openthread): Add check for ip address in DNS external resolve hook --- components/openthread/src/esp_openthread_dns64.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/openthread/src/esp_openthread_dns64.c b/components/openthread/src/esp_openthread_dns64.c index 79faa1ad9228..86d8b5fb0e53 100644 --- a/components/openthread/src/esp_openthread_dns64.c +++ b/components/openthread/src/esp_openthread_dns64.c @@ -75,7 +75,7 @@ static void dns_found_handler(const char *name, const ip_addr_t *ipaddr, void *c { dns_resolve_entry_t *resolve_entry = (dns_resolve_entry_t *)callback_arg; if (resolve_entry && resolve_entry->found) { - if (lwip_strnicmp(name, resolve_entry->name, sizeof(resolve_entry->name)) == 0) { + if (ipaddr && lwip_strnicmp(name, resolve_entry->name, sizeof(resolve_entry->name)) == 0) { ip_addr_t ipaddr_copy = *ipaddr; ip6_addr_t nat64_prefix; if (ipaddr_copy.type == IPADDR_TYPE_V4 && esp_openthread_get_nat64_prefix(&nat64_prefix) == ESP_OK) { From 858d0647e8344900daaef75d135c57476ee7579a Mon Sep 17 00:00:00 2001 From: zhoupeng Date: Tue, 8 Oct 2024 17:06:00 +0800 Subject: [PATCH 089/365] fix(pwr_glitch): Add Comment and only add power glitch reset support on esp32c5 ECO0 --- .../bootloader_support/src/esp32c5/bootloader_esp32c5.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/components/bootloader_support/src/esp32c5/bootloader_esp32c5.c b/components/bootloader_support/src/esp32c5/bootloader_esp32c5.c index 02b83fc1e8ca..d7258e52c2ce 100644 --- a/components/bootloader_support/src/esp32c5/bootloader_esp32c5.c +++ b/components/bootloader_support/src/esp32c5/bootloader_esp32c5.c @@ -94,8 +94,11 @@ static inline void bootloader_ana_reset_config(void) { //Enable BOD reset (mode1) brownout_ll_ana_reset_enable(true); - uint8_t power_glitch_dref = 0; - bootloader_power_glitch_reset_config(true, power_glitch_dref); + if (efuse_hal_chip_revision() == 0) { + // decrease power glitch reset voltage to avoid start the glitch reset + uint8_t power_glitch_dref = 0; + bootloader_power_glitch_reset_config(true, power_glitch_dref); + } } esp_err_t bootloader_init(void) From fa0c7636a515aba96212cb5e6ae60af9de5fa28d Mon Sep 17 00:00:00 2001 From: wanckl Date: Fri, 27 Sep 2024 11:41:59 +0800 Subject: [PATCH 090/365] test(driver_i2s): p4 and c5 enable multi dut test --- .../test_apps/.build-test-rules.yml | 4 ---- .../i2s_multi_dev/main/test_i2s_multi_dev.c | 8 ++++++- .../i2s_multi_dev/pytest_i2s_multi_dev.py | 3 ++- .../test_apps/test_inc/test_i2s.h | 22 +++---------------- 4 files changed, 12 insertions(+), 25 deletions(-) diff --git a/components/esp_driver_i2s/test_apps/.build-test-rules.yml b/components/esp_driver_i2s/test_apps/.build-test-rules.yml index 8ecfb0daeb2f..12a74125b1f1 100644 --- a/components/esp_driver_i2s/test_apps/.build-test-rules.yml +++ b/components/esp_driver_i2s/test_apps/.build-test-rules.yml @@ -11,10 +11,6 @@ components/esp_driver_i2s/test_apps/i2s_multi_dev: disable: - if: SOC_I2S_SUPPORTED != 1 - if: SOC_I2S_HW_VERSION_2 != 1 - disable_test: - - if: IDF_TARGET in ["esp32p4", "esp32c5"] # TODO: [ESP32C5] IDF- 10321 - temporary: true - reason: lack of runners depends_components: - esp_driver_i2s diff --git a/components/esp_driver_i2s/test_apps/i2s_multi_dev/main/test_i2s_multi_dev.c b/components/esp_driver_i2s/test_apps/i2s_multi_dev/main/test_i2s_multi_dev.c index 3f2737b0b350..5a6d02511737 100644 --- a/components/esp_driver_i2s/test_apps/i2s_multi_dev/main/test_i2s_multi_dev.c +++ b/components/esp_driver_i2s/test_apps/i2s_multi_dev/main/test_i2s_multi_dev.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Unlicense OR CC0-1.0 */ @@ -161,6 +161,9 @@ static void test_i2s_tdm_slave(uint32_t sample_rate, i2s_data_bit_width_t bit_wi if (sample_rate >= 96000) { i2s_tdm_config.clk_cfg.bclk_div = 12; } +#if SOC_I2S_SUPPORTS_APLL + i2s_tdm_config.clk_cfg.clk_src = I2S_CLK_SRC_APLL; +#endif TEST_ESP_OK(i2s_channel_init_tdm_mode(i2s_tdm_tx_handle, &i2s_tdm_config)); TEST_ESP_OK(i2s_channel_init_tdm_mode(i2s_tdm_rx_handle, &i2s_tdm_config)); @@ -254,6 +257,8 @@ static void test_i2s_tdm_slave_48k_16bits_8slots(void) TEST_CASE_MULTIPLE_DEVICES("I2S_TDM_full_duplex_test_in_48k_16bits_8slots", "[I2S_TDM]", test_i2s_tdm_master_48k_16bits_8slots, test_i2s_tdm_slave_48k_16bits_8slots); +// The max clock source APLL on P4 is 125M which can't satisfy the following config in slave mode +#if !CONFIG_IDF_TARGET_ESP32P4 static void test_i2s_tdm_master_96k_16bits_4slots(void) { test_i2s_tdm_master(96000, I2S_DATA_BIT_WIDTH_16BIT, I2S_TDM_SLOT0 | I2S_TDM_SLOT1 | I2S_TDM_SLOT2 | I2S_TDM_SLOT3); @@ -266,6 +271,7 @@ static void test_i2s_tdm_slave_96k_16bits_4slots(void) TEST_CASE_MULTIPLE_DEVICES("I2S_TDM_full_duplex_test_in_96k_16bits_4slots", "[I2S_TDM]", test_i2s_tdm_master_96k_16bits_4slots, test_i2s_tdm_slave_96k_16bits_4slots); +#endif // !CONFIG_IDF_TARGET_ESP32P4 #endif // !CONFIG_IDF_TARGET_ESP32H2 static void test_i2s_external_clk_src(bool is_master, bool is_external) diff --git a/components/esp_driver_i2s/test_apps/i2s_multi_dev/pytest_i2s_multi_dev.py b/components/esp_driver_i2s/test_apps/i2s_multi_dev/pytest_i2s_multi_dev.py index 3d53063d50e5..000bb65e3997 100644 --- a/components/esp_driver_i2s/test_apps/i2s_multi_dev/pytest_i2s_multi_dev.py +++ b/components/esp_driver_i2s/test_apps/i2s_multi_dev/pytest_i2s_multi_dev.py @@ -5,9 +5,10 @@ @pytest.mark.esp32s3 @pytest.mark.esp32c3 -# @pytest.mark.esp32c5 # TODO: [ESP32C5] IDF- 10321 +@pytest.mark.esp32c5 @pytest.mark.esp32c6 @pytest.mark.esp32h2 +@pytest.mark.esp32p4 @pytest.mark.generic_multi_device @pytest.mark.parametrize('count', [ 2, diff --git a/components/esp_driver_i2s/test_apps/test_inc/test_i2s.h b/components/esp_driver_i2s/test_apps/test_inc/test_i2s.h index cbf25114cea6..0be715c450b3 100644 --- a/components/esp_driver_i2s/test_apps/test_inc/test_i2s.h +++ b/components/esp_driver_i2s/test_apps/test_inc/test_i2s.h @@ -22,23 +22,7 @@ extern "C" { #define SLAVE_WS_IO 22 #define DATA_IN_IO 19 #define DATA_OUT_IO 18 -#elif CONFIG_IDF_TARGET_ESP32S2 -#define MASTER_MCK_IO 0 -#define MASTER_BCK_IO 4 -#define MASTER_WS_IO 5 -#define SLAVE_BCK_IO 14 -#define SLAVE_WS_IO 15 -#define DATA_IN_IO 19 -#define DATA_OUT_IO 18 -#elif CONFIG_IDF_TARGET_ESP32C3 -#define MASTER_MCK_IO 0 -#define MASTER_BCK_IO 4 -#define MASTER_WS_IO 5 -#define SLAVE_BCK_IO 14 -#define SLAVE_WS_IO 15 -#define DATA_IN_IO 19 -#define DATA_OUT_IO 18 -#elif CONFIG_IDF_TARGET_ESP32S3 +#elif CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C3 #define MASTER_MCK_IO 0 #define MASTER_BCK_IO 4 #define MASTER_WS_IO 5 @@ -50,8 +34,8 @@ extern "C" { #define MASTER_MCK_IO 51 #define MASTER_BCK_IO 45 #define MASTER_WS_IO 46 -#define SLAVE_BCK_IO 22 -#define SLAVE_WS_IO 23 +#define SLAVE_BCK_IO 49 +#define SLAVE_WS_IO 50 #define DATA_IN_IO 47 #define DATA_OUT_IO 48 #elif CONFIG_IDF_TARGET_ESP32C5 From 71dfc8ea17eab5758d77f71ca4ecf0611cbc1721 Mon Sep 17 00:00:00 2001 From: "wangtao@espressif.com" Date: Wed, 9 Oct 2024 11:36:56 +0800 Subject: [PATCH 091/365] fix(wifi): fix send deauth mac list lock free issue --- components/esp_wifi/lib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/esp_wifi/lib b/components/esp_wifi/lib index 6c96f870aeec..49187f511a18 160000 --- a/components/esp_wifi/lib +++ b/components/esp_wifi/lib @@ -1 +1 @@ -Subproject commit 6c96f870aeec6bf57b321d0fd52f95086e9e7e80 +Subproject commit 49187f511a1843ea2c3a7abc69c1186d9ea0ae7d From 514155de3b0c44bf9c3b00c31f64b3b40bc36c83 Mon Sep 17 00:00:00 2001 From: zhanghaipeng Date: Sat, 28 Sep 2024 15:33:27 +0800 Subject: [PATCH 092/365] fix(ble/bluedroid): Fixed BLE handle check for GATT API --- .../bt/host/bluedroid/api/esp_gattc_api.c | 54 +++++++++++++++---- 1 file changed, 45 insertions(+), 9 deletions(-) diff --git a/components/bt/host/bluedroid/api/esp_gattc_api.c b/components/bt/host/bluedroid/api/esp_gattc_api.c index 5f078b280987..904fb32a0cc3 100644 --- a/components/bt/host/bluedroid/api/esp_gattc_api.c +++ b/components/bt/host/bluedroid/api/esp_gattc_api.c @@ -363,10 +363,14 @@ esp_err_t esp_ble_gattc_read_char (esp_gatt_if_t gattc_if, } if (L2CA_CheckIsCongest(L2CAP_ATT_CID, p_tcb->peer_bda)) { - LOG_DEBUG("%s, the l2cap chanel is congest.", __func__); + LOG_DEBUG("%s, the l2cap channel is congest.", __func__); return ESP_FAIL; } + if (handle == 0) { + return ESP_GATT_INVALID_HANDLE; + } + msg.sig = BTC_SIG_API_CALL; msg.pid = BTC_PID_GATTC; msg.act = BTC_GATTC_ACT_READ_CHAR; @@ -400,10 +404,14 @@ esp_err_t esp_ble_gattc_read_by_type (esp_gatt_if_t gattc_if, } if (L2CA_CheckIsCongest(L2CAP_ATT_CID, p_tcb->peer_bda)) { - LOG_DEBUG("%s, the l2cap chanel is congest.", __func__); + LOG_DEBUG("%s, the l2cap channel is congest.", __func__); return ESP_FAIL; } + if (start_handle == 0 || end_handle == 0) { + return ESP_GATT_INVALID_HANDLE; + } + msg.sig = BTC_SIG_API_CALL; msg.pid = BTC_PID_GATTC; msg.act = BTC_GATTC_ACT_READ_BY_TYPE; @@ -432,7 +440,7 @@ esp_err_t esp_ble_gattc_read_multiple(esp_gatt_if_t gattc_if, } if (L2CA_CheckIsCongest(L2CAP_ATT_CID, p_tcb->peer_bda)) { - LOG_DEBUG("%s, the l2cap chanel is congest.", __func__); + LOG_DEBUG("%s, the l2cap channel is congest.", __func__); return ESP_FAIL; } @@ -468,7 +476,7 @@ esp_err_t esp_ble_gattc_read_multiple_variable(esp_gatt_if_t gattc_if, } if (L2CA_CheckIsCongest(L2CAP_ATT_CID, p_tcb->peer_bda)) { - LOG_DEBUG("%s, the l2cap chanel is congest.", __func__); + LOG_DEBUG("%s, the l2cap channel is congest.", __func__); return ESP_FAIL; } @@ -504,10 +512,14 @@ esp_err_t esp_ble_gattc_read_char_descr (esp_gatt_if_t gattc_if, } if (L2CA_CheckIsCongest(L2CAP_ATT_CID, p_tcb->peer_bda)) { - LOG_DEBUG("%s, the l2cap chanel is congest.", __func__); + LOG_DEBUG("%s, the l2cap channel is congest.", __func__); return ESP_FAIL; } + if (handle == 0) { + return ESP_GATT_INVALID_HANDLE; + } + msg.sig = BTC_SIG_API_CALL; msg.pid = BTC_PID_GATTC; msg.act = BTC_GATTC_ACT_READ_CHAR_DESCR; @@ -537,10 +549,14 @@ esp_err_t esp_ble_gattc_write_char(esp_gatt_if_t gattc_if, } if (L2CA_CheckIsCongest(L2CAP_ATT_CID, p_tcb->peer_bda)) { - LOG_DEBUG("%s, the l2cap chanel is congest.", __func__); + LOG_DEBUG("%s, the l2cap channel is congest.", __func__); return ESP_FAIL; } + if (handle == 0) { + return ESP_GATT_INVALID_HANDLE; + } + msg.sig = BTC_SIG_API_CALL; msg.pid = BTC_PID_GATTC; msg.act = BTC_GATTC_ACT_WRITE_CHAR; @@ -576,10 +592,14 @@ esp_err_t esp_ble_gattc_write_char_descr (esp_gatt_if_t gattc_if, } if (L2CA_CheckIsCongest(L2CAP_ATT_CID, p_tcb->peer_bda)) { - LOG_DEBUG("%s, the l2cap chanel is congest.", __func__); + LOG_DEBUG("%s, the l2cap channel is congest.", __func__); return ESP_FAIL; } + if (handle == 0) { + return ESP_GATT_INVALID_HANDLE; + } + msg.sig = BTC_SIG_API_CALL; msg.pid = BTC_PID_GATTC; msg.act = BTC_GATTC_ACT_WRITE_CHAR_DESCR; @@ -615,10 +635,14 @@ esp_err_t esp_ble_gattc_prepare_write(esp_gatt_if_t gattc_if, } if (L2CA_CheckIsCongest(L2CAP_ATT_CID, p_tcb->peer_bda)) { - LOG_DEBUG("%s, the l2cap chanel is congest.", __func__); + LOG_DEBUG("%s, the l2cap channel is congest.", __func__); return ESP_FAIL; } + if (handle == 0) { + return ESP_GATT_INVALID_HANDLE; + } + msg.sig = BTC_SIG_API_CALL; msg.pid = BTC_PID_GATTC; msg.act = BTC_GATTC_ACT_PREPARE_WRITE; @@ -652,10 +676,14 @@ esp_err_t esp_ble_gattc_prepare_write_char_descr(esp_gatt_if_t gattc_if, } if (L2CA_CheckIsCongest(L2CAP_ATT_CID, p_tcb->peer_bda)) { - LOG_DEBUG("%s, the l2cap chanel is congest.", __func__); + LOG_DEBUG("%s, the l2cap channel is congest.", __func__); return ESP_FAIL; } + if (handle == 0) { + return ESP_GATT_INVALID_HANDLE; + } + msg.sig = BTC_SIG_API_CALL; msg.pid = BTC_PID_GATTC; msg.act = BTC_GATTC_ACT_PREPARE_WRITE_CHAR_DESCR; @@ -694,6 +722,10 @@ esp_err_t esp_ble_gattc_register_for_notify (esp_gatt_if_t gattc_if, ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); + if (handle == 0) { + return ESP_GATT_INVALID_HANDLE; + } + msg.sig = BTC_SIG_API_CALL; msg.pid = BTC_PID_GATTC; msg.act = BTC_GATTC_ACT_REG_FOR_NOTIFY; @@ -712,6 +744,10 @@ esp_err_t esp_ble_gattc_unregister_for_notify (esp_gatt_if_t gattc_if, ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); + if (handle == 0) { + return ESP_GATT_INVALID_HANDLE; + } + msg.sig = BTC_SIG_API_CALL; msg.pid = BTC_PID_GATTC; msg.act = BTC_GATTC_ACT_UNREG_FOR_NOTIFY; From 9e3a846356b9bed3b3189bbb212e943f3a89a156 Mon Sep 17 00:00:00 2001 From: "harshal.patil" Date: Thu, 3 Oct 2024 11:23:24 +0530 Subject: [PATCH 093/365] ci(esp_security): Enable crypto drivers test app build only for supported targets --- .../test_apps/.build-test-rules.yml | 6 ++---- .../test_apps/crypto_drivers/README.md | 4 ++-- .../crypto_drivers/main/CMakeLists.txt | 17 +++++++++++++---- .../test_apps/crypto_drivers/main/test_ds.c | 3 --- .../test_apps/crypto_drivers/main/test_hmac.c | 4 ---- .../crypto_drivers/main/test_key_mgr.c | 2 -- .../crypto_drivers/pytest_crypto_drivers.py | 17 ++++++++--------- 7 files changed, 25 insertions(+), 28 deletions(-) diff --git a/components/esp_security/test_apps/.build-test-rules.yml b/components/esp_security/test_apps/.build-test-rules.yml index abfc86a2c5da..baac155ce356 100644 --- a/components/esp_security/test_apps/.build-test-rules.yml +++ b/components/esp_security/test_apps/.build-test-rules.yml @@ -1,7 +1,5 @@ # Documentation: .gitlab/ci/README.md#manifest-file-to-control-the-buildtest-apps components/esp_security/test_apps/crypto_drivers: - disable: - - if: IDF_TARGET in ["esp32c61"] - temporary: true - reason: Support for ESP32C61 is yet to be added. + enable: + - if: ((SOC_HMAC_SUPPORTED == 1) or (SOC_DIG_SIGN_SUPPORTED == 1)) or (SOC_KEY_MANAGER_SUPPORTED == 1) diff --git a/components/esp_security/test_apps/crypto_drivers/README.md b/components/esp_security/test_apps/crypto_drivers/README.md index 351f5fdebc72..1dfe1331b41a 100644 --- a/components/esp_security/test_apps/crypto_drivers/README.md +++ b/components/esp_security/test_apps/crypto_drivers/README.md @@ -1,3 +1,3 @@ -| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-H2 | ESP32-P4 | ESP32-S2 | ESP32-S3 | -| ----------------- | ----- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | +| Supported Targets | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-H2 | ESP32-P4 | ESP32-S2 | ESP32-S3 | +| ----------------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | diff --git a/components/esp_security/test_apps/crypto_drivers/main/CMakeLists.txt b/components/esp_security/test_apps/crypto_drivers/main/CMakeLists.txt index 674856755475..b6ae16ae0a92 100644 --- a/components/esp_security/test_apps/crypto_drivers/main/CMakeLists.txt +++ b/components/esp_security/test_apps/crypto_drivers/main/CMakeLists.txt @@ -1,7 +1,16 @@ -set(srcs "test_app_main.c" - "test_ds.c" - "test_hmac.c" - "test_key_mgr.c") +set(srcs "test_app_main.c") + +if(CONFIG_SOC_HMAC_SUPPORTED) + list(APPEND srcs "test_hmac.c") +endif() + +if(CONFIG_SOC_DIG_SIGN_SUPPORTED) + list(APPEND srcs "test_ds.c") +endif() + +if(CONFIG_SOC_KEY_MANAGER_SUPPORTED) + list(APPEND srcs "test_key_mgr.c") +endif() idf_component_register(SRCS ${srcs} REQUIRES unity efuse test_utils spi_flash esp_security diff --git a/components/esp_security/test_apps/crypto_drivers/main/test_ds.c b/components/esp_security/test_apps/crypto_drivers/main/test_ds.c index d631c7dd3580..576e23fd6272 100644 --- a/components/esp_security/test_apps/crypto_drivers/main/test_ds.c +++ b/components/esp_security/test_apps/crypto_drivers/main/test_ds.c @@ -8,8 +8,6 @@ #include "unity.h" #include "soc/soc_caps.h" - -#if SOC_DIG_SIGN_SUPPORTED #include "rom/efuse.h" #if CONFIG_IDF_TARGET_ESP32S2 #include "esp32s2/rom/digital_signature.h" @@ -438,4 +436,3 @@ TEST_CASE("Digital Signature Invalid Data (FPGA only)", "[hw_crypto] [ds]") } #endif // CONFIG_IDF_ENV_FPGA -#endif // SOC_DIG_SIGN_SUPPORTED diff --git a/components/esp_security/test_apps/crypto_drivers/main/test_hmac.c b/components/esp_security/test_apps/crypto_drivers/main/test_hmac.c index 9c20debc5299..61fd9fb1c035 100644 --- a/components/esp_security/test_apps/crypto_drivers/main/test_hmac.c +++ b/components/esp_security/test_apps/crypto_drivers/main/test_hmac.c @@ -8,8 +8,6 @@ #include "esp_efuse.h" #include "esp_efuse_table.h" #include "esp_log.h" - -#if SOC_HMAC_SUPPORTED #include "esp_hmac.h" #if CONFIG_IDF_ENV_FPGA @@ -1315,5 +1313,3 @@ TEST_CASE("HMAC key out of range", "[hw_crypto]") TEST_ASSERT_EQUAL(ESP_ERR_INVALID_ARG, esp_hmac_calculate(HMAC_KEY0 - 1, message, 47, hmac)); TEST_ASSERT_EQUAL(ESP_ERR_INVALID_ARG, esp_hmac_calculate(HMAC_KEY5 + 1, message, 47, hmac)); } - -#endif // SOC_HMAC_SUPPORTED diff --git a/components/esp_security/test_apps/crypto_drivers/main/test_key_mgr.c b/components/esp_security/test_apps/crypto_drivers/main/test_key_mgr.c index 4484a9fde5e0..1fdb5b28f198 100644 --- a/components/esp_security/test_apps/crypto_drivers/main/test_key_mgr.c +++ b/components/esp_security/test_apps/crypto_drivers/main/test_key_mgr.c @@ -7,7 +7,6 @@ #include "unity.h" #include "soc/soc_caps.h" -#if SOC_KEY_MANAGER_SUPPORTED #include "esp_partition.h" #include "esp_flash.h" #include "esp_log.h" @@ -143,4 +142,3 @@ TEST_CASE("Key Manager random mode: ECDSA key deployment", "[hw_crypto] [key_mgr esp_ret = esp_key_mgr_deploy_key_in_random_mode(&key_config, &key_info); TEST_ASSERT_EQUAL(ESP_OK, esp_ret); } -#endif diff --git a/components/esp_security/test_apps/crypto_drivers/pytest_crypto_drivers.py b/components/esp_security/test_apps/crypto_drivers/pytest_crypto_drivers.py index e0709970c50b..44435595f06c 100644 --- a/components/esp_security/test_apps/crypto_drivers/pytest_crypto_drivers.py +++ b/components/esp_security/test_apps/crypto_drivers/pytest_crypto_drivers.py @@ -1,17 +1,16 @@ -# SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD +# SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD # SPDX-License-Identifier: CC0-1.0 import pytest from pytest_embedded import Dut +@pytest.mark.esp32s2 +@pytest.mark.esp32s3 +@pytest.mark.esp32c3 +@pytest.mark.esp32c6 +@pytest.mark.esp32h2 +@pytest.mark.esp32p4 +@pytest.mark.esp32c5 @pytest.mark.generic -@pytest.mark.temp_skip_ci(targets=['esp32c61'], reason='Support for ESP32C61 is yet to be added.') # TODO: [ESP32C61] IDF-10987 -@pytest.mark.parametrize( - 'config', - [ - pytest.param('default', marks=[pytest.mark.supported_targets]), - ], - indirect=True, -) def test_crypto_drivers(dut: Dut) -> None: dut.run_all_single_board_cases(timeout=180) From e12c261b1b2713aaa374f3fcb67a7f2ebf66d5eb Mon Sep 17 00:00:00 2001 From: "harshal.patil" Date: Thu, 3 Oct 2024 15:17:22 +0530 Subject: [PATCH 094/365] ci(esp_security): Add config to enable FPGA-related tests --- .../test_apps/crypto_drivers/main/Kconfig.projbuild | 9 +++++++++ .../esp_security/test_apps/crypto_drivers/main/test_ds.c | 4 ++-- .../test_apps/crypto_drivers/main/test_hmac.c | 4 ++-- components/hal/test_apps/crypto/README.md | 3 ++- components/hal/test_apps/crypto/main/Kconfig.projbuild | 8 ++++++++ components/hal/test_apps/crypto/main/app_main.c | 4 ++-- .../test_apps/crypto/main/key_manager/test_key_manager.c | 6 +++--- 7 files changed, 28 insertions(+), 10 deletions(-) create mode 100644 components/esp_security/test_apps/crypto_drivers/main/Kconfig.projbuild diff --git a/components/esp_security/test_apps/crypto_drivers/main/Kconfig.projbuild b/components/esp_security/test_apps/crypto_drivers/main/Kconfig.projbuild new file mode 100644 index 000000000000..7cdf8c00fa6f --- /dev/null +++ b/components/esp_security/test_apps/crypto_drivers/main/Kconfig.projbuild @@ -0,0 +1,9 @@ +menu "ESP Security Tests" + config ESP_SECURITY_ENABLE_FPGA_TESTS + bool "Allow enabling the esp_security tests that require burning efuses" + default y if IDF_ENV_FPGA + default n + help + This includes the esp_security tests that actually require burning some efuses. + It is better to run these tests on an FPGA to avoid mistakenly burning eFuses. +endmenu diff --git a/components/esp_security/test_apps/crypto_drivers/main/test_ds.c b/components/esp_security/test_apps/crypto_drivers/main/test_ds.c index 576e23fd6272..13d53308be69 100644 --- a/components/esp_security/test_apps/crypto_drivers/main/test_ds.c +++ b/components/esp_security/test_apps/crypto_drivers/main/test_ds.c @@ -255,7 +255,7 @@ TEST_CASE("Digital Signature Blocking HMAC key out of range", "[hw_crypto] [ds]" TEST_ASSERT_EQUAL(ESP_ERR_INVALID_ARG, esp_ds_sign(message, &ds_data, HMAC_KEY0 - 1, signature_data)); } -#if CONFIG_IDF_ENV_FPGA +#if CONFIG_ESP_SECURITY_ENABLE_FPGA_TESTS static void burn_hmac_keys(void) { @@ -435,4 +435,4 @@ TEST_CASE("Digital Signature Invalid Data (FPGA only)", "[hw_crypto] [ds]") } } -#endif // CONFIG_IDF_ENV_FPGA +#endif // CONFIG_ESP_SECURITY_ENABLE_FPGA_TESTS diff --git a/components/esp_security/test_apps/crypto_drivers/main/test_hmac.c b/components/esp_security/test_apps/crypto_drivers/main/test_hmac.c index 61fd9fb1c035..8f8ccf39ef4b 100644 --- a/components/esp_security/test_apps/crypto_drivers/main/test_hmac.c +++ b/components/esp_security/test_apps/crypto_drivers/main/test_hmac.c @@ -10,7 +10,7 @@ #include "esp_log.h" #include "esp_hmac.h" -#if CONFIG_IDF_ENV_FPGA +#if CONFIG_ESP_SECURITY_ENABLE_FPGA_TESTS /* Allow testing varying message lengths (truncating the same message) for various results */ @@ -1297,7 +1297,7 @@ TEST_CASE("HMAC 'upstream' wait lock", "[hw_crypto]") } } -#endif // CONFIG_IDF_ENV_FPGA +#endif // CONFIG_ESP_SECURITY_ENABLE_FPGA_TESTS /** * This test is just a parameter test and does not write any keys to efuse. diff --git a/components/hal/test_apps/crypto/README.md b/components/hal/test_apps/crypto/README.md index 4e2c6f4f57a3..3b25adda8abb 100644 --- a/components/hal/test_apps/crypto/README.md +++ b/components/hal/test_apps/crypto/README.md @@ -67,7 +67,8 @@ This contains tests for the following features of the crypto peripherals: - SHA-512/256 - SHA-512/t -> **_NOTE:_** The verification tests for the HMAC and Digital Signature peripherals would get exercised in only in an FPGA environment. +> **_NOTE:_** The verification tests for the HMAC and Digital Signature peripherals would get exercised only by enabling the example config in an FPGA environment. + # Burning the HMAC key The HMAC tests need an HMAC key to be burned in the `BLOCK_KEY3` and `BLOCK_KEY4` of the efuses. As this verification application is independent of the efuse component, the user needs to manually burn the keys and their key purposes using `espefuse.py`. diff --git a/components/hal/test_apps/crypto/main/Kconfig.projbuild b/components/hal/test_apps/crypto/main/Kconfig.projbuild index 051c5bae14bc..ee68e84f19b9 100644 --- a/components/hal/test_apps/crypto/main/Kconfig.projbuild +++ b/components/hal/test_apps/crypto/main/Kconfig.projbuild @@ -1,6 +1,14 @@ menu "Test App Configuration" + config CRYPTO_TEST_APP_ENABLE_FPGA_TESTS + bool "Allow enabling the crypto tests that require burning efuses" + default y if IDF_ENV_FPGA + default n + help + This includes the crypto tests that actually require burning some efuses. + It is better to run these tests on an FPGA to avoid mistakenly burning eFuses. + config CRYPTO_TEST_APP_ENABLE_DS_TESTS bool "Enable DS Peripheral test cases" default y diff --git a/components/hal/test_apps/crypto/main/app_main.c b/components/hal/test_apps/crypto/main/app_main.c index 460445a343a5..87dcee3d8efb 100644 --- a/components/hal/test_apps/crypto/main/app_main.c +++ b/components/hal/test_apps/crypto/main/app_main.c @@ -34,7 +34,7 @@ static void run_all_tests(void) RUN_TEST_GROUP(key_manager); #endif -#if CONFIG_IDF_ENV_FPGA +#if CONFIG_CRYPTO_TEST_APP_ENABLE_FPGA_TESTS #if CONFIG_SOC_HMAC_SUPPORTED && CONFIG_CRYPTO_TEST_APP_ENABLE_HMAC_TESTS RUN_TEST_GROUP(hmac); @@ -48,7 +48,7 @@ static void run_all_tests(void) RUN_TEST_GROUP(ecdsa) #endif -#endif /* CONFIG_IDF_ENV_FPGA */ +#endif /* CONFIG_CRYPTO_TEST_APP_ENABLE_FPGA_TESTS */ } static void test_task(void *pvParameters) diff --git a/components/hal/test_apps/crypto/main/key_manager/test_key_manager.c b/components/hal/test_apps/crypto/main/key_manager/test_key_manager.c index ca424eb13213..2def4096e8f5 100644 --- a/components/hal/test_apps/crypto/main/key_manager/test_key_manager.c +++ b/components/hal/test_apps/crypto/main/key_manager/test_key_manager.c @@ -263,7 +263,7 @@ static void key_mgr_test_ecdsa_random_mode(void) TEST_ASSERT_EQUAL(ESP_OK, esp_key_mgr_deactivate_key(key_recovery_info.key_type)); } -#if CONFIG_IDF_ENV_FPGA +#if CONFIG_CRYPTO_TEST_APP_ENABLE_FPGA_TESTS static void test_xts_aes_key_random_mode(void) { @@ -351,7 +351,7 @@ TEST(key_manager, ecdsa_key_random_deployment) key_mgr_test_ecdsa_random_mode(); } -#if CONFIG_IDF_ENV_FPGA +#if CONFIG_CRYPTO_TEST_APP_ENABLE_FPGA_TESTS TEST(key_manager, xts_key_random_deployment) { key_mgr_test_xts_aes_128_random_mode(); @@ -367,7 +367,7 @@ TEST_GROUP_RUNNER(key_manager) RUN_TEST_CASE(key_manager, xts_key_ecdh0_deployment); RUN_TEST_CASE(key_manager, ecdsa_key_ecdh0_deployment); RUN_TEST_CASE(key_manager, ecdsa_key_random_deployment); -#if CONFIG_IDF_ENV_FPGA +#if CONFIG_CRYPTO_TEST_APP_ENABLE_FPGA_TESTS RUN_TEST_CASE(key_manager, xts_key_random_deployment); #endif From aebf7009193b0c60c43681841f5dbd40c4428f87 Mon Sep 17 00:00:00 2001 From: morris Date: Fri, 27 Sep 2024 16:34:13 +0800 Subject: [PATCH 095/365] refactor(freertos): rename SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY and move to freertos --- .../esp_common/sdkconfig.ci.xip_psram_esp32p4 | 2 +- .../esp_common/sdkconfig.ci.xip_psram_esp32s2 | 2 +- .../esp_common/sdkconfig.ci.xip_psram_esp32s3 | 2 +- components/esp_hw_support/esp_memory_utils.c | 2 +- .../esp_hw_support/include/esp_memory_utils.h | 4 +- .../esp_pm/sdkconfig.ci.pm_xip_psram_esp32s2 | 2 +- .../esp_pm/sdkconfig.ci.pm_xip_psram_esp32s3 | 2 +- components/esp_psram/esp32/Kconfig.spiram | 13 -- components/esp_psram/esp32c5/Kconfig.spiram | 10 -- components/esp_psram/esp32c61/Kconfig.spiram | 10 -- components/esp_psram/esp32p4/Kconfig.spiram | 11 -- components/esp_psram/esp32s2/Kconfig.spiram | 10 -- components/esp_psram/esp32s3/Kconfig.spiram | 10 -- .../esp_psram/test_apps/.build-test-rules.yml | 8 - .../psram_no_malloc_task_stack/CMakeLists.txt | 7 - .../psram_no_malloc_task_stack/README.md | 2 - .../main/CMakeLists.txt | 3 - .../main/test_psram_no_malloc_task_stack.c | 82 --------- .../pytest_psram_no_malloc_task_stack.py | 11 -- .../sdkconfig.defaults | 4 - .../port/soc/esp32/system_internal.c | 4 +- .../port/soc/esp32s2/system_internal.c | 4 +- .../port/soc/esp32s3/system_internal.c | 4 +- .../main/test_reset_reason.c | 4 +- .../esp_system_unity_tests/sdkconfig.ci.psram | 2 +- .../sdkconfig.ci.psram_with_pd_top | 2 +- components/espcoredump/Kconfig | 2 +- .../src/port/riscv/core_dump_port.c | 6 +- .../src/port/xtensa/core_dump_port.c | 2 +- components/freertos/Kconfig | 27 +++ components/freertos/heap_idf.c | 2 +- components/freertos/sdkconfig.rename | 1 + .../freertos/misc/test_idf_additions.c | 4 +- .../test_apps/freertos/pytest_freertos.py | 2 +- .../test_apps/freertos/sdkconfig.ci.psram | 2 +- components/mbedtls/test_apps/main/test_aes.c | 168 +++++++++--------- .../mbedtls/test_apps/main/test_mbedtls_sha.c | 4 +- .../test_apps/sdkconfig.ci.psram_all_ext | 2 +- .../sdkconfig.ci.psram_all_ext_esp32p4_200m | 2 +- docs/en/api-guides/external-ram.rst | 2 +- .../inc/external-ram-esp32-notes.rst | 2 +- docs/zh_CN/api-guides/external-ram.rst | 2 +- .../inc/external-ram-esp32-notes.rst | 2 +- .../system/panic/main/include/test_panic.h | 2 +- .../system/panic/main/test_app_main.c | 2 +- .../test_apps/system/panic/main/test_panic.c | 4 +- ...g.ci.coredump_flash_extram_stack_bss_esp32 | 2 +- ...ci.coredump_flash_extram_stack_bss_esp32s2 | 2 +- ...ci.coredump_flash_extram_stack_bss_esp32s3 | 2 +- ....ci.coredump_flash_extram_stack_heap_esp32 | 2 +- ...i.coredump_flash_extram_stack_heap_esp32s2 | 2 +- ...i.coredump_flash_extram_stack_heap_esp32s3 | 2 +- 52 files changed, 158 insertions(+), 311 deletions(-) delete mode 100644 components/esp_psram/test_apps/psram_no_malloc_task_stack/CMakeLists.txt delete mode 100644 components/esp_psram/test_apps/psram_no_malloc_task_stack/README.md delete mode 100644 components/esp_psram/test_apps/psram_no_malloc_task_stack/main/CMakeLists.txt delete mode 100644 components/esp_psram/test_apps/psram_no_malloc_task_stack/main/test_psram_no_malloc_task_stack.c delete mode 100644 components/esp_psram/test_apps/psram_no_malloc_task_stack/pytest_psram_no_malloc_task_stack.py delete mode 100644 components/esp_psram/test_apps/psram_no_malloc_task_stack/sdkconfig.defaults diff --git a/components/esp_common/test_apps/esp_common/sdkconfig.ci.xip_psram_esp32p4 b/components/esp_common/test_apps/esp_common/sdkconfig.ci.xip_psram_esp32p4 index 0d33cfbf8f43..5470efa12084 100644 --- a/components/esp_common/test_apps/esp_common/sdkconfig.ci.xip_psram_esp32p4 +++ b/components/esp_common/test_apps/esp_common/sdkconfig.ci.xip_psram_esp32p4 @@ -5,4 +5,4 @@ CONFIG_SPIRAM=y CONFIG_SPIRAM_XIP_FROM_PSRAM=y CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY=y CONFIG_SPIRAM_ALLOW_NOINIT_SEG_EXTERNAL_MEMORY=y -CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y +CONFIG_FREERTOS_TASK_CREATE_ALLOW_EXT_MEM=y diff --git a/components/esp_common/test_apps/esp_common/sdkconfig.ci.xip_psram_esp32s2 b/components/esp_common/test_apps/esp_common/sdkconfig.ci.xip_psram_esp32s2 index fd9b7e865c3c..3c7418b55d97 100644 --- a/components/esp_common/test_apps/esp_common/sdkconfig.ci.xip_psram_esp32s2 +++ b/components/esp_common/test_apps/esp_common/sdkconfig.ci.xip_psram_esp32s2 @@ -5,4 +5,4 @@ CONFIG_SPIRAM=y CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY=y CONFIG_SPIRAM_ALLOW_NOINIT_SEG_EXTERNAL_MEMORY=y CONFIG_SPIRAM_RODATA=y -CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y +CONFIG_FREERTOS_TASK_CREATE_ALLOW_EXT_MEM=y diff --git a/components/esp_common/test_apps/esp_common/sdkconfig.ci.xip_psram_esp32s3 b/components/esp_common/test_apps/esp_common/sdkconfig.ci.xip_psram_esp32s3 index 3b1db1f233fd..53125cb9b8ba 100644 --- a/components/esp_common/test_apps/esp_common/sdkconfig.ci.xip_psram_esp32s3 +++ b/components/esp_common/test_apps/esp_common/sdkconfig.ci.xip_psram_esp32s3 @@ -5,4 +5,4 @@ CONFIG_SPIRAM=y CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY=y CONFIG_SPIRAM_ALLOW_NOINIT_SEG_EXTERNAL_MEMORY=y CONFIG_SPIRAM_RODATA=y -CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y +CONFIG_FREERTOS_TASK_CREATE_ALLOW_EXT_MEM=y diff --git a/components/esp_hw_support/esp_memory_utils.c b/components/esp_hw_support/esp_memory_utils.c index 766ca5a2c183..62627cbcb970 100644 --- a/components/esp_hw_support/esp_memory_utils.c +++ b/components/esp_hw_support/esp_memory_utils.c @@ -67,7 +67,7 @@ bool esp_ptr_external_ram(const void *p) #endif //CONFIG_SPIRAM } -#if CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY +#if CONFIG_FREERTOS_TASK_CREATE_ALLOW_EXT_MEM bool esp_stack_ptr_in_extram(uint32_t sp) { //Check if stack ptr is on PSRAM, and 16 byte aligned. diff --git a/components/esp_hw_support/include/esp_memory_utils.h b/components/esp_hw_support/include/esp_memory_utils.h index 427dc4912eaf..d17d6f269655 100644 --- a/components/esp_hw_support/include/esp_memory_utils.h +++ b/components/esp_hw_support/include/esp_memory_utils.h @@ -352,7 +352,7 @@ inline static bool esp_stack_ptr_in_dram(uint32_t sp) return !(sp < SOC_DRAM_LOW + 0x10 || sp > SOC_DRAM_HIGH - 0x10 || ((sp & 0xF) != 0)); } -#if CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY +#if CONFIG_FREERTOS_TASK_CREATE_ALLOW_EXT_MEM /** * @brief Check if the stack pointer is in external ram * @@ -374,7 +374,7 @@ __attribute__((always_inline)) inline static bool esp_stack_ptr_is_sane(uint32_t sp) { return esp_stack_ptr_in_dram(sp) -#if CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY +#if CONFIG_FREERTOS_TASK_CREATE_ALLOW_EXT_MEM || esp_stack_ptr_in_extram(sp) #endif #if CONFIG_ESP_SYSTEM_ALLOW_RTC_FAST_MEM_AS_HEAP diff --git a/components/esp_pm/test_apps/esp_pm/sdkconfig.ci.pm_xip_psram_esp32s2 b/components/esp_pm/test_apps/esp_pm/sdkconfig.ci.pm_xip_psram_esp32s2 index 51f7a5a04519..8345d72b95f7 100644 --- a/components/esp_pm/test_apps/esp_pm/sdkconfig.ci.pm_xip_psram_esp32s2 +++ b/components/esp_pm/test_apps/esp_pm/sdkconfig.ci.pm_xip_psram_esp32s2 @@ -1,6 +1,6 @@ CONFIG_IDF_TARGET="esp32s2" CONFIG_SPIRAM=y -CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y +CONFIG_FREERTOS_TASK_CREATE_ALLOW_EXT_MEM=y CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY=y CONFIG_SPIRAM_FETCH_INSTRUCTIONS=y CONFIG_SPIRAM_RODATA=y diff --git a/components/esp_pm/test_apps/esp_pm/sdkconfig.ci.pm_xip_psram_esp32s3 b/components/esp_pm/test_apps/esp_pm/sdkconfig.ci.pm_xip_psram_esp32s3 index 31f93b587662..7669b3050c80 100644 --- a/components/esp_pm/test_apps/esp_pm/sdkconfig.ci.pm_xip_psram_esp32s3 +++ b/components/esp_pm/test_apps/esp_pm/sdkconfig.ci.pm_xip_psram_esp32s3 @@ -1,6 +1,6 @@ CONFIG_IDF_TARGET="esp32s3" CONFIG_SPIRAM=y -CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y +CONFIG_FREERTOS_TASK_CREATE_ALLOW_EXT_MEM=y CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY=y CONFIG_SPIRAM_FETCH_INSTRUCTIONS=y CONFIG_SPIRAM_RODATA=y diff --git a/components/esp_psram/esp32/Kconfig.spiram b/components/esp_psram/esp32/Kconfig.spiram index f7eb1725a45e..04c32ff5faf1 100644 --- a/components/esp_psram/esp32/Kconfig.spiram +++ b/components/esp_psram/esp32/Kconfig.spiram @@ -259,19 +259,6 @@ menu "SPI RAM config" any himem calls, the reservation is not done and the original amount of memory will be available to malloc/esp_heap_alloc_caps. - config SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY - bool "Allow external memory as an argument to xTaskCreateStatic" - default n - depends on SPIRAM_USE_CAPS_ALLOC || SPIRAM_USE_MALLOC - help - Because some bits of the ESP32 code environment cannot be recompiled with the cache workaround, - normally tasks cannot be safely run with their stack residing in external memory; for this reason - xTaskCreate (and related task creaton functions) always allocate stack in internal memory and - xTaskCreateStatic will check if the memory passed to it is in internal memory. If you have a task that - needs a large amount of stack and does not call on ROM code in any way (no direct calls, but also no - Bluetooth/WiFi), you can try enable this to cause xTaskCreateStatic to allow tasks stack in external - memory. - choice SPIRAM_OCCUPY_SPI_HOST prompt "SPI host to use for 32MBit PSRAM" default SPIRAM_OCCUPY_VSPI_HOST diff --git a/components/esp_psram/esp32c5/Kconfig.spiram b/components/esp_psram/esp32c5/Kconfig.spiram index 75e0ec8da9df..ca941e8f1d55 100644 --- a/components/esp_psram/esp32c5/Kconfig.spiram +++ b/components/esp_psram/esp32c5/Kconfig.spiram @@ -17,16 +17,6 @@ menu "SPI RAM config" endchoice - config SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY - bool "Allow external memory as an argument to xTaskCreateStatic" - default y - help - Accessing memory in SPIRAM has certain restrictions, so task stacks allocated by xTaskCreate - are by default allocated from internal RAM. - - This option allows for passing memory allocated from SPIRAM to be passed to xTaskCreateStatic. - This should only be used for tasks where the stack is never accessed while the cache is disabled. - choice SPIRAM_SPEED prompt "Set RAM clock speed" default SPIRAM_SPEED_40M diff --git a/components/esp_psram/esp32c61/Kconfig.spiram b/components/esp_psram/esp32c61/Kconfig.spiram index 0ef577983fd9..fefbd96463cb 100644 --- a/components/esp_psram/esp32c61/Kconfig.spiram +++ b/components/esp_psram/esp32c61/Kconfig.spiram @@ -17,16 +17,6 @@ menu "SPI RAM config" endchoice - config SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY - bool "Allow external memory as an argument to xTaskCreateStatic" - default y - help - Accessing memory in SPIRAM has certain restrictions, so task stacks allocated by xTaskCreate - are by default allocated from internal RAM. - - This option allows for passing memory allocated from SPIRAM to be passed to xTaskCreateStatic. - This should only be used for tasks where the stack is never accessed while the cache is disabled. - choice SPIRAM_SPEED prompt "Set RAM clock speed" default SPIRAM_SPEED_40M diff --git a/components/esp_psram/esp32p4/Kconfig.spiram b/components/esp_psram/esp32p4/Kconfig.spiram index f17fb795eeca..821188d2f3ff 100644 --- a/components/esp_psram/esp32p4/Kconfig.spiram +++ b/components/esp_psram/esp32p4/Kconfig.spiram @@ -91,17 +91,6 @@ menu "PSRAM config" If enabled, 1/8 of the PSRAM total size will be reserved for error-correcting code. - config SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY - bool "Allow external memory as an argument to xTaskCreateStatic" - default y - help - Accessing memory in PSRAM has certain restrictions, so task stacks allocated by xTaskCreate - are by default allocated from internal RAM. - - This option allows for passing memory allocated from PSRAM to be passed to xTaskCreateStatic. - This should only be used for tasks where the stack is never accessed while the L2Cache is - disabled, e.g. during SPI Flash operations - source "$IDF_PATH/components/esp_psram/Kconfig.spiram.common" # insert non-chip-specific items here endmenu diff --git a/components/esp_psram/esp32s2/Kconfig.spiram b/components/esp_psram/esp32s2/Kconfig.spiram index 1af865756aaf..6135222a5af4 100644 --- a/components/esp_psram/esp32s2/Kconfig.spiram +++ b/components/esp_psram/esp32s2/Kconfig.spiram @@ -29,16 +29,6 @@ menu "SPI RAM config" bool "ESP-PSRAM64 or LY68L6400" endchoice - config SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY - bool "Allow external memory as an argument to xTaskCreateStatic" - default y - help - Accessing memory in SPIRAM has certain restrictions, so task stacks allocated by xTaskCreate - are by default allocated from internal RAM. - - This option allows for passing memory allocated from SPIRAM to be passed to xTaskCreateStatic. - This should only be used for tasks where the stack is never accessed while the cache is disabled. - config SPIRAM_CLK_IO int default 30 diff --git a/components/esp_psram/esp32s3/Kconfig.spiram b/components/esp_psram/esp32s3/Kconfig.spiram index 466343762973..1bf74912d0c7 100644 --- a/components/esp_psram/esp32s3/Kconfig.spiram +++ b/components/esp_psram/esp32s3/Kconfig.spiram @@ -38,16 +38,6 @@ menu "SPI RAM config" bool "ESP-PSRAM64 , LY68L6400 or APS6408" endchoice - config SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY - bool "Allow external memory as an argument to xTaskCreateStatic" - default y - help - Accessing memory in SPIRAM has certain restrictions, so task stacks allocated by xTaskCreate - are by default allocated from internal RAM. - - This option allows for passing memory allocated from SPIRAM to be passed to xTaskCreateStatic. - This should only be used for tasks where the stack is never accessed while the cache is disabled. - config SPIRAM_CLK_IO int default 30 diff --git a/components/esp_psram/test_apps/.build-test-rules.yml b/components/esp_psram/test_apps/.build-test-rules.yml index 88e270873461..c9b865f3012b 100644 --- a/components/esp_psram/test_apps/.build-test-rules.yml +++ b/components/esp_psram/test_apps/.build-test-rules.yml @@ -9,11 +9,3 @@ components/esp_psram/test_apps/psram: - esp_driver_gpio - esp_driver_spi - spi_flash - - -components/esp_psram/test_apps/psram_no_malloc_task_stack: - enable: - - if: IDF_TARGET in ["esp32", "esp32p4"] - depends_components: - - esp_psram - - freertos diff --git a/components/esp_psram/test_apps/psram_no_malloc_task_stack/CMakeLists.txt b/components/esp_psram/test_apps/psram_no_malloc_task_stack/CMakeLists.txt deleted file mode 100644 index 9debb1681bd8..000000000000 --- a/components/esp_psram/test_apps/psram_no_malloc_task_stack/CMakeLists.txt +++ /dev/null @@ -1,7 +0,0 @@ -# The following five lines of boilerplate have to be in your project's -# CMakeLists in this exact order for cmake to work correctly -cmake_minimum_required(VERSION 3.16) - -include($ENV{IDF_PATH}/tools/cmake/project.cmake) -set(COMPONENTS main) -project(psram_no_malloc_task_stack) diff --git a/components/esp_psram/test_apps/psram_no_malloc_task_stack/README.md b/components/esp_psram/test_apps/psram_no_malloc_task_stack/README.md deleted file mode 100644 index 4873c15b15b5..000000000000 --- a/components/esp_psram/test_apps/psram_no_malloc_task_stack/README.md +++ /dev/null @@ -1,2 +0,0 @@ -| Supported Targets | ESP32 | ESP32-P4 | -| ----------------- | ----- | -------- | diff --git a/components/esp_psram/test_apps/psram_no_malloc_task_stack/main/CMakeLists.txt b/components/esp_psram/test_apps/psram_no_malloc_task_stack/main/CMakeLists.txt deleted file mode 100644 index 90939ebf279b..000000000000 --- a/components/esp_psram/test_apps/psram_no_malloc_task_stack/main/CMakeLists.txt +++ /dev/null @@ -1,3 +0,0 @@ -idf_component_register(SRCS "test_psram_no_malloc_task_stack.c" - INCLUDE_DIRS "." - PRIV_REQUIRES unity esp_psram freertos heap) diff --git a/components/esp_psram/test_apps/psram_no_malloc_task_stack/main/test_psram_no_malloc_task_stack.c b/components/esp_psram/test_apps/psram_no_malloc_task_stack/main/test_psram_no_malloc_task_stack.c deleted file mode 100644 index d0c48c608d25..000000000000 --- a/components/esp_psram/test_apps/psram_no_malloc_task_stack/main/test_psram_no_malloc_task_stack.c +++ /dev/null @@ -1,82 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Unlicense OR CC0-1.0 - */ -#include -#include "esp_log.h" -#include "unity.h" -#include "unity_test_runner.h" -#include "unity_test_utils_memory.h" -#include "unity_test_utils.h" -#include "esp_heap_caps.h" -#include "esp_memory_utils.h" -#include "freertos/FreeRTOS.h" -#include "freertos/task.h" - -static const char* TAG = "psram_no_malloc_task_stack_test"; - -#define STACK_SIZE 4096 -#define WAIT_TICKS 2 -#define TEST_TASK_PRIORITY 6 // relatively high priority to let task finish quickly - -void setUp(void) -{ - unity_utils_set_leak_level(0); - unity_utils_record_free_mem(); -} - -void tearDown(void) -{ - unity_utils_evaluate_leaks(); -} - -static uint8_t *stack_memory; -static StaticTask_t *tcb_memory; -static bool is_external; -static SemaphoreHandle_t task_waiter; - -static void test_task(void *arg) -{ - int dummy = 47; - is_external = esp_ptr_external_ram(&dummy); - xSemaphoreGive(task_waiter); - vTaskDelay(portMAX_DELAY); -} - -TEST_CASE("FreeRTOS task with stack on SPIRAM works", "[psram]") -{ - stack_memory = heap_caps_malloc(STACK_SIZE, MALLOC_CAP_8BIT | MALLOC_CAP_SPIRAM); - TEST_ASSERT_NOT_NULL(stack_memory); - tcb_memory = heap_caps_malloc(sizeof(StaticTask_t), MALLOC_CAP_8BIT); - TEST_ASSERT_NOT_NULL(tcb_memory); - task_waiter = xSemaphoreCreateBinary(); - TEST_ASSERT_NOT_NULL(task_waiter); - - TaskHandle_t task = xTaskCreateStatic(test_task, - "heap caps static", - STACK_SIZE, - NULL, - TEST_TASK_PRIORITY, - stack_memory, - tcb_memory); - TEST_ASSERT_NOT_NULL(task); - - TEST_ASSERT_EQUAL(pdTRUE, xSemaphoreTake(task_waiter, WAIT_TICKS)); - - TEST_ASSERT_EQUAL(true, is_external); - - // use unity_utils_task_delete() to avoid deleting stack of a still running task - unity_utils_task_delete(task); - - vSemaphoreDelete(task_waiter); - heap_caps_free(tcb_memory); - heap_caps_free(stack_memory); -} - -void app_main(void) -{ - ESP_LOGI(TAG, "Running PSRAM task stack test app with SPIRAM_USE_CAPS_ALLOC"); - - unity_run_menu(); -} diff --git a/components/esp_psram/test_apps/psram_no_malloc_task_stack/pytest_psram_no_malloc_task_stack.py b/components/esp_psram/test_apps/psram_no_malloc_task_stack/pytest_psram_no_malloc_task_stack.py deleted file mode 100644 index 298f6f93c872..000000000000 --- a/components/esp_psram/test_apps/psram_no_malloc_task_stack/pytest_psram_no_malloc_task_stack.py +++ /dev/null @@ -1,11 +0,0 @@ -# SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD -# SPDX-License-Identifier: CC0-1.0 -import pytest -from pytest_embedded import Dut - - -@pytest.mark.esp32 -@pytest.mark.esp32p4 -@pytest.mark.generic -def test_psram_no_malloc_task_stack(dut: Dut) -> None: - dut.run_all_single_board_cases() diff --git a/components/esp_psram/test_apps/psram_no_malloc_task_stack/sdkconfig.defaults b/components/esp_psram/test_apps/psram_no_malloc_task_stack/sdkconfig.defaults deleted file mode 100644 index 5e67e04b0c44..000000000000 --- a/components/esp_psram/test_apps/psram_no_malloc_task_stack/sdkconfig.defaults +++ /dev/null @@ -1,4 +0,0 @@ -CONFIG_ESP_TASK_WDT_EN=n -CONFIG_SPIRAM=y -CONFIG_SPIRAM_USE_CAPS_ALLOC=y -CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y diff --git a/components/esp_system/port/soc/esp32/system_internal.c b/components/esp_system/port/soc/esp32/system_internal.c index 75cae925114a..da76aa90d1a6 100644 --- a/components/esp_system/port/soc/esp32/system_internal.c +++ b/components/esp_system/port/soc/esp32/system_internal.c @@ -97,9 +97,9 @@ void IRAM_ATTR esp_restart_noos(void) wdt_hal_disable(&wdt1_context); wdt_hal_write_protect_enable(&wdt1_context); -#ifdef CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY +#ifdef CONFIG_FREERTOS_TASK_CREATE_ALLOW_EXT_MEM if (esp_ptr_external_ram(esp_cpu_get_sp())) { - // If stack_addr is from External Memory (CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY is used) + // If stack_addr is from External Memory (CONFIG_FREERTOS_TASK_CREATE_ALLOW_EXT_MEM is used) // then need to switch SP to Internal Memory otherwise // we will get the "Cache disabled but cached memory region accessed" error after Cache_Read_Disable. uint32_t new_sp = SOC_DRAM_LOW + (SOC_DRAM_HIGH - SOC_DRAM_LOW) / 2; diff --git a/components/esp_system/port/soc/esp32s2/system_internal.c b/components/esp_system/port/soc/esp32s2/system_internal.c index 3de3bafdf187..8eb6c0325c25 100644 --- a/components/esp_system/port/soc/esp32s2/system_internal.c +++ b/components/esp_system/port/soc/esp32s2/system_internal.c @@ -85,9 +85,9 @@ void IRAM_ATTR esp_restart_noos(void) wdt_hal_disable(&wdt1_context); wdt_hal_write_protect_enable(&wdt1_context); -#ifdef CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY +#ifdef CONFIG_FREERTOS_TASK_CREATE_ALLOW_EXT_MEM if (esp_ptr_external_ram(esp_cpu_get_sp())) { - // If stack_addr is from External Memory (CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY is used) + // If stack_addr is from External Memory (CONFIG_FREERTOS_TASK_CREATE_ALLOW_EXT_MEM is used) // then need to switch SP to Internal Memory otherwise // we will get the "Cache disabled but cached memory region accessed" error after Cache_Read_Disable. uint32_t new_sp = ALIGN_DOWN(_bss_end, 16); diff --git a/components/esp_system/port/soc/esp32s3/system_internal.c b/components/esp_system/port/soc/esp32s3/system_internal.c index ebdaccbcb25f..f0edae876cbb 100644 --- a/components/esp_system/port/soc/esp32s3/system_internal.c +++ b/components/esp_system/port/soc/esp32s3/system_internal.c @@ -92,9 +92,9 @@ void IRAM_ATTR esp_restart_noos(void) wdt_hal_disable(&wdt1_context); wdt_hal_write_protect_enable(&wdt1_context); -#ifdef CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY +#ifdef CONFIG_FREERTOS_TASK_CREATE_ALLOW_EXT_MEM if (esp_ptr_external_ram(esp_cpu_get_sp())) { - // If stack_addr is from External Memory (CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY is used) + // If stack_addr is from External Memory (CONFIG_FREERTOS_TASK_CREATE_ALLOW_EXT_MEM is used) // then need to switch SP to Internal Memory otherwise // we will get the "Cache disabled but cached memory region accessed" error after Cache_Read_Disable. uint32_t new_sp = ALIGN_DOWN(_bss_end, 16); diff --git a/components/esp_system/test_apps/esp_system_unity_tests/main/test_reset_reason.c b/components/esp_system/test_apps/esp_system_unity_tests/main/test_reset_reason.c index 3008f15b62cd..491c3299b45b 100644 --- a/components/esp_system/test_apps/esp_system_unity_tests/main/test_reset_reason.c +++ b/components/esp_system/test_apps/esp_system_unity_tests/main/test_reset_reason.c @@ -318,7 +318,7 @@ TEST_CASE_MULTIPLE_STAGES("reset reason ESP_RST_BROWNOUT after brownout event", do_brownout, check_reset_reason_brownout); -#ifdef CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY +#ifdef CONFIG_FREERTOS_TASK_CREATE_ALLOW_EXT_MEM #ifndef CONFIG_FREERTOS_UNICORE #if CONFIG_IDF_TARGET_ARCH_XTENSA #include "xt_instr_macros.h" @@ -402,6 +402,6 @@ TEST_CASE_MULTIPLE_STAGES("reset reason ESP_RST_PANIC after an exception in a ta #endif //CONFIG_IDF_TARGET_ARCH_XTENSA #endif // CONFIG_FREERTOS_UNICORE -#endif // CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY +#endif // CONFIG_FREERTOS_TASK_CREATE_ALLOW_EXT_MEM /* Not tested here: ESP_RST_SDIO */ diff --git a/components/esp_system/test_apps/esp_system_unity_tests/sdkconfig.ci.psram b/components/esp_system/test_apps/esp_system_unity_tests/sdkconfig.ci.psram index 482bcd8baa53..f29df53fffe5 100644 --- a/components/esp_system/test_apps/esp_system_unity_tests/sdkconfig.ci.psram +++ b/components/esp_system/test_apps/esp_system_unity_tests/sdkconfig.ci.psram @@ -1,2 +1,2 @@ CONFIG_SPIRAM=y -CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y +CONFIG_FREERTOS_TASK_CREATE_ALLOW_EXT_MEM=y diff --git a/components/esp_system/test_apps/esp_system_unity_tests/sdkconfig.ci.psram_with_pd_top b/components/esp_system/test_apps/esp_system_unity_tests/sdkconfig.ci.psram_with_pd_top index 440009beb18b..d1b0d3024436 100644 --- a/components/esp_system/test_apps/esp_system_unity_tests/sdkconfig.ci.psram_with_pd_top +++ b/components/esp_system/test_apps/esp_system_unity_tests/sdkconfig.ci.psram_with_pd_top @@ -1,4 +1,4 @@ CONFIG_SPIRAM=y -CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y +CONFIG_FREERTOS_TASK_CREATE_ALLOW_EXT_MEM=y CONFIG_PM_POWER_DOWN_CPU_IN_LIGHT_SLEEP=y CONFIG_PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP=y diff --git a/components/espcoredump/Kconfig b/components/espcoredump/Kconfig index c19b0eabbaeb..90b806d96aa5 100644 --- a/components/espcoredump/Kconfig +++ b/components/espcoredump/Kconfig @@ -108,7 +108,7 @@ menu "Core dump" config ESP_COREDUMP_USE_STACK_SIZE bool - default y if ESP_COREDUMP_ENABLE_TO_FLASH && SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY + default y if ESP_COREDUMP_ENABLE_TO_FLASH && FREERTOS_TASK_CREATE_ALLOW_EXT_MEM default n help Force the use of a custom DRAM stack for coredump when Task stacks can be in PSRAM. diff --git a/components/espcoredump/src/port/riscv/core_dump_port.c b/components/espcoredump/src/port/riscv/core_dump_port.c index 60a2ac39546a..7d872ce62e55 100644 --- a/components/espcoredump/src/port/riscv/core_dump_port.c +++ b/components/espcoredump/src/port/riscv/core_dump_port.c @@ -37,7 +37,7 @@ const static char TAG[] __attribute__((unused)) = "esp_core_dump_port"; /** * Union representing the registers of the CPU as they will be written * in the core dump. - * Registers can be adressed with their names thanks to the structure, or as + * Registers can be addressed with their names thanks to the structure, or as * an array of 32 words. */ #define RISCV_GP_REGS_COUNT 32 @@ -222,7 +222,7 @@ uint32_t esp_core_dump_get_isr_stack_end(void) static inline bool esp_core_dump_task_stack_end_is_sane(uint32_t sp) { return esp_ptr_in_dram((void *)sp) -#if CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY +#if CONFIG_FREERTOS_TASK_CREATE_ALLOW_EXT_MEM || esp_stack_ptr_in_extram(sp) #endif #if CONFIG_ESP_SYSTEM_ALLOW_RTC_FAST_MEM_AS_HEAP @@ -315,7 +315,7 @@ bool esp_core_dump_mem_seg_is_sane(uint32_t addr, uint32_t sz) } /** - * Get the task's registers dump when the panic occured. + * Get the task's registers dump when the panic occurred. * Returns the size, in bytes, of the data pointed by reg_dumps. * The data pointed by reg_dump are allocated statically, thus, they must be * used (or copied) before calling this function again. diff --git a/components/espcoredump/src/port/xtensa/core_dump_port.c b/components/espcoredump/src/port/xtensa/core_dump_port.c index cee4c1ebc1e0..8efae60d576e 100644 --- a/components/espcoredump/src/port/xtensa/core_dump_port.c +++ b/components/espcoredump/src/port/xtensa/core_dump_port.c @@ -299,7 +299,7 @@ uint32_t esp_core_dump_get_isr_stack_end(void) static inline bool esp_core_dump_task_stack_end_is_sane(uint32_t sp) { return esp_ptr_in_dram((void *)sp) -#if CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY +#if CONFIG_FREERTOS_TASK_CREATE_ALLOW_EXT_MEM || esp_stack_ptr_in_extram(sp) #endif #if CONFIG_ESP_SYSTEM_ALLOW_RTC_FAST_MEM_AS_HEAP diff --git a/components/freertos/Kconfig b/components/freertos/Kconfig index ba0bb786f48b..dec261a93c85 100644 --- a/components/freertos/Kconfig +++ b/components/freertos/Kconfig @@ -573,6 +573,33 @@ menu "FreeRTOS" endmenu # Port + menu "Extra" + + config FREERTOS_TASK_CREATE_ALLOW_EXT_MEM + depends on SPIRAM + depends on FREERTOS_SUPPORT_STATIC_ALLOCATION + bool "Allow external memory as an argument to xTaskCreateStatic (READ HELP)" + default n if IDF_TARGET_ESP32 + default y + help + Accessing memory in PSRAM has certain restrictions, so task stacks allocated by xTaskCreate + are by default allocated from internal RAM. + + This option allows for passing memory allocated from SPIRAM to be passed to xTaskCreateStatic. + This should only be used for tasks where the stack is never accessed while the cache is disabled. + + Extra notes for ESP32: + + Because some bits of the ESP32 code environment cannot be recompiled with the cache workaround, + normally tasks cannot be safely run with their stack residing in external memory; for this reason + xTaskCreate (and related task creation functions) always allocate stack in internal memory and + xTaskCreateStatic will check if the memory passed to it is in internal memory. + If you have a task that needs a large amount of stack and does not call on ROM code in any way + (no direct calls, but also no Bluetooth/WiFi), you can try enable this to + cause xTaskCreateStatic to allow tasks stack in external memory. + + endmenu # Extra + # Hidden or compatibility options config FREERTOS_PORT diff --git a/components/freertos/heap_idf.c b/components/freertos/heap_idf.c index 57ff845f742f..60974047097e 100644 --- a/components/freertos/heap_idf.c +++ b/components/freertos/heap_idf.c @@ -99,7 +99,7 @@ bool xPortcheckValidStackMem(const void * ptr) #if CONFIG_IDF_TARGET_LINUX return true; #else /* CONFIG_IDF_TARGET_LINUX */ -#ifdef CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY +#ifdef CONFIG_FREERTOS_TASK_CREATE_ALLOW_EXT_MEM return esp_ptr_byte_accessible(ptr); #else return esp_ptr_internal(ptr) && esp_ptr_byte_accessible(ptr); diff --git a/components/freertos/sdkconfig.rename b/components/freertos/sdkconfig.rename index 5720544d0e79..da4c466482ae 100644 --- a/components/freertos/sdkconfig.rename +++ b/components/freertos/sdkconfig.rename @@ -5,3 +5,4 @@ CONFIG_ENABLE_STATIC_TASK_CLEAN_UP_HOOK CONFIG_FREERTOS_ENABLE_STATIC_TASK_C CONFIG_TIMER_TASK_PRIORITY CONFIG_FREERTOS_TIMER_TASK_PRIORITY CONFIG_TIMER_TASK_STACK_DEPTH CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH CONFIG_TIMER_QUEUE_LENGTH CONFIG_FREERTOS_TIMER_QUEUE_LENGTH +CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY CONFIG_FREERTOS_TASK_CREATE_ALLOW_EXT_MEM diff --git a/components/freertos/test_apps/freertos/misc/test_idf_additions.c b/components/freertos/test_apps/freertos/misc/test_idf_additions.c index 2f4d4a1fb769..5c5c3d69adda 100644 --- a/components/freertos/test_apps/freertos/misc/test_idf_additions.c +++ b/components/freertos/test_apps/freertos/misc/test_idf_additions.c @@ -89,7 +89,7 @@ TEST_CASE("IDF additions: Task creation with memory caps and self deletion", "[f xTaskNotifyGive(task_handle); } -#if CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY +#if CONFIG_FREERTOS_TASK_CREATE_ALLOW_EXT_MEM TEST_CASE("IDF additions: Task creation with SPIRAM memory caps and self deletion stress test", "[freertos]") { @@ -115,7 +115,7 @@ TEST_CASE("IDF additions: Task creation with SPIRAM memory caps and self deletio } } -#endif /* CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY */ +#endif /* CONFIG_FREERTOS_TASK_CREATE_ALLOW_EXT_MEM */ #if ( CONFIG_FREERTOS_NUMBER_OF_CORES > 1 ) diff --git a/components/freertos/test_apps/freertos/pytest_freertos.py b/components/freertos/test_apps/freertos/pytest_freertos.py index ff27e9bc354f..e2cdb05bd2c8 100644 --- a/components/freertos/test_apps/freertos/pytest_freertos.py +++ b/components/freertos/test_apps/freertos/pytest_freertos.py @@ -7,7 +7,7 @@ CONFIGS = [ pytest.param('default', marks=[pytest.mark.supported_targets,]), pytest.param('freertos_options', marks=[pytest.mark.supported_targets]), - pytest.param('psram', marks=[pytest.mark.esp32]), + pytest.param('psram', marks=[pytest.mark.esp32, pytest.mark.esp32s3, pytest.mark.esp32p4, pytest.mark.esp32c5]), pytest.param('single_core', marks=[pytest.mark.esp32, pytest.mark.esp32p4]), # TODO: [ESP32C5] IDF-10335 # TODO: [ESP32C61] IDF-11146 diff --git a/components/freertos/test_apps/freertos/sdkconfig.ci.psram b/components/freertos/test_apps/freertos/sdkconfig.ci.psram index 1e3309831549..776e127a2aa4 100644 --- a/components/freertos/test_apps/freertos/sdkconfig.ci.psram +++ b/components/freertos/test_apps/freertos/sdkconfig.ci.psram @@ -5,7 +5,7 @@ CONFIG_IDF_TARGET="esp32" # Enable SPIRAM CONFIG_SPIRAM=y CONFIG_SPIRAM_OCCUPY_NO_HOST=y -CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y +CONFIG_FREERTOS_TASK_CREATE_ALLOW_EXT_MEM=y # Disable encrypted flash reads/writes to save IRAM in this build configuration CONFIG_SPI_FLASH_ENABLE_ENCRYPTED_READ_WRITE=n diff --git a/components/mbedtls/test_apps/main/test_aes.c b/components/mbedtls/test_apps/main/test_aes.c index 5ac71e82ec90..e95313c26651 100644 --- a/components/mbedtls/test_apps/main/test_aes.c +++ b/components/mbedtls/test_apps/main/test_aes.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Unlicense OR CC0-1.0 */ @@ -67,7 +67,7 @@ static const uint8_t iv[] = { print(as_c_array(plain)) ct = encryptor.update(plain) + encryptor.finalize() - print("Chipertext: {}".format(as_c_array(ct))) + print("Ciphertext: {}".format(as_c_array(ct))) */ TEST_CASE("mbedtls CBC AES-256 test", "[aes]") { @@ -85,11 +85,11 @@ TEST_CASE("mbedtls CBC AES-256 test", "[aes]") memcpy(nonce, iv, 16); // allocate internal memory - uint8_t *chipertext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); + uint8_t *ciphertext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); uint8_t *plaintext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); uint8_t *decryptedtext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); - TEST_ASSERT_NOT_NULL(chipertext); + TEST_ASSERT_NOT_NULL(ciphertext); TEST_ASSERT_NOT_NULL(plaintext); TEST_ASSERT_NOT_NULL(decryptedtext); @@ -100,19 +100,19 @@ TEST_CASE("mbedtls CBC AES-256 test", "[aes]") memset(decryptedtext, 0x0, SZ); // Encrypt - mbedtls_aes_crypt_cbc(&ctx, MBEDTLS_AES_ENCRYPT, SZ, nonce, plaintext, chipertext); - TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher_end, chipertext + SZ - 32, 32); + mbedtls_aes_crypt_cbc(&ctx, MBEDTLS_AES_ENCRYPT, SZ, nonce, plaintext, ciphertext); + TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher_end, ciphertext + SZ - 32, 32); // Decrypt memcpy(nonce, iv, 16); mbedtls_aes_setkey_dec(&ctx, key_256, 256); - mbedtls_aes_crypt_cbc(&ctx, MBEDTLS_AES_DECRYPT, SZ, nonce, chipertext, decryptedtext); + mbedtls_aes_crypt_cbc(&ctx, MBEDTLS_AES_DECRYPT, SZ, nonce, ciphertext, decryptedtext); TEST_ASSERT_EQUAL_HEX8_ARRAY(plaintext, decryptedtext, SZ); mbedtls_aes_free(&ctx); free(plaintext); - free(chipertext); + free(ciphertext); free(decryptedtext); } @@ -134,11 +134,11 @@ TEST_CASE("mbedtls CBC AES-256 DMA buffer align test", "[aes]") memcpy(nonce, iv, 16); // allocate internal memory - uint8_t *chipertext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); + uint8_t *ciphertext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); uint8_t *plaintext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); uint8_t *decryptedtext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); - TEST_ASSERT_NOT_NULL(chipertext); + TEST_ASSERT_NOT_NULL(ciphertext); TEST_ASSERT_NOT_NULL(plaintext); TEST_ASSERT_NOT_NULL(decryptedtext); @@ -149,19 +149,19 @@ TEST_CASE("mbedtls CBC AES-256 DMA buffer align test", "[aes]") memset(decryptedtext, 0x0, SZ); // Encrypt - mbedtls_aes_crypt_cbc(&ctx, MBEDTLS_AES_ENCRYPT, SZ, nonce, plaintext, chipertext); - TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher_end, chipertext + SZ - 32, 32); + mbedtls_aes_crypt_cbc(&ctx, MBEDTLS_AES_ENCRYPT, SZ, nonce, plaintext, ciphertext); + TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher_end, ciphertext + SZ - 32, 32); // Decrypt memcpy(nonce, iv, 16); mbedtls_aes_setkey_dec(&ctx, key_256, 256); - mbedtls_aes_crypt_cbc(&ctx, MBEDTLS_AES_DECRYPT, SZ, nonce, chipertext, decryptedtext); + mbedtls_aes_crypt_cbc(&ctx, MBEDTLS_AES_DECRYPT, SZ, nonce, ciphertext, decryptedtext); TEST_ASSERT_EQUAL_HEX8_ARRAY(plaintext, decryptedtext, SZ); mbedtls_aes_free(&ctx); free(plaintext); - free(chipertext); + free(ciphertext); free(decryptedtext); } @@ -183,11 +183,11 @@ TEST_CASE("mbedtls CTR AES-256 test", "[aes]") memcpy(nonce, iv, 16); // allocate internal memory - uint8_t *chipertext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); + uint8_t *ciphertext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); uint8_t *plaintext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); uint8_t *decryptedtext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); - TEST_ASSERT_NOT_NULL(chipertext); + TEST_ASSERT_NOT_NULL(ciphertext); TEST_ASSERT_NOT_NULL(plaintext); TEST_ASSERT_NOT_NULL(decryptedtext); @@ -198,19 +198,19 @@ TEST_CASE("mbedtls CTR AES-256 test", "[aes]") memset(decryptedtext, 0x0, SZ); // Encrypt - mbedtls_aes_crypt_ctr(&ctx, SZ, &nc_off, nonce, stream_block, plaintext, chipertext); - TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher_end, chipertext + SZ - 32, 32); + mbedtls_aes_crypt_ctr(&ctx, SZ, &nc_off, nonce, stream_block, plaintext, ciphertext); + TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher_end, ciphertext + SZ - 32, 32); // Decrypt nc_off = 0; memcpy(nonce, iv, 16); - mbedtls_aes_crypt_ctr(&ctx, SZ, &nc_off, nonce, stream_block, chipertext, decryptedtext); + mbedtls_aes_crypt_ctr(&ctx, SZ, &nc_off, nonce, stream_block, ciphertext, decryptedtext); TEST_ASSERT_EQUAL_HEX8_ARRAY(plaintext, decryptedtext, SZ); mbedtls_aes_free(&ctx); free(plaintext); - free(chipertext); + free(ciphertext); free(decryptedtext); } @@ -231,11 +231,11 @@ TEST_CASE("mbedtls OFB AES-256 test", "[aes]") memcpy(nonce, iv, 16); // allocate internal memory - uint8_t *chipertext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); + uint8_t *ciphertext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); uint8_t *plaintext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); uint8_t *decryptedtext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); - TEST_ASSERT_NOT_NULL(chipertext); + TEST_ASSERT_NOT_NULL(ciphertext); TEST_ASSERT_NOT_NULL(plaintext); TEST_ASSERT_NOT_NULL(decryptedtext); @@ -246,19 +246,19 @@ TEST_CASE("mbedtls OFB AES-256 test", "[aes]") memset(decryptedtext, 0x0, SZ); // Encrypt - mbedtls_aes_crypt_ofb(&ctx, SZ, &nc_off, nonce, plaintext, chipertext); - TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher_end, chipertext + SZ - 32, 32); + mbedtls_aes_crypt_ofb(&ctx, SZ, &nc_off, nonce, plaintext, ciphertext); + TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher_end, ciphertext + SZ - 32, 32); // Decrypt nc_off = 0; memcpy(nonce, iv, 16); - mbedtls_aes_crypt_ofb(&ctx, SZ, &nc_off, nonce, chipertext, decryptedtext); + mbedtls_aes_crypt_ofb(&ctx, SZ, &nc_off, nonce, ciphertext, decryptedtext); TEST_ASSERT_EQUAL_HEX8_ARRAY(plaintext, decryptedtext, SZ); mbedtls_aes_free(&ctx); free(plaintext); - free(chipertext); + free(ciphertext); free(decryptedtext); } @@ -278,11 +278,11 @@ TEST_CASE("mbedtls CFB-8 AES-256 test", "[aes]") memcpy(nonce, iv, 16); // allocate internal memory - uint8_t *chipertext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); + uint8_t *ciphertext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); uint8_t *plaintext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); uint8_t *decryptedtext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); - TEST_ASSERT_NOT_NULL(chipertext); + TEST_ASSERT_NOT_NULL(ciphertext); TEST_ASSERT_NOT_NULL(plaintext); TEST_ASSERT_NOT_NULL(decryptedtext); @@ -293,18 +293,18 @@ TEST_CASE("mbedtls CFB-8 AES-256 test", "[aes]") memset(decryptedtext, 0x0, SZ); // Encrypt - mbedtls_aes_crypt_cfb8(&ctx, MBEDTLS_AES_ENCRYPT, SZ, nonce, plaintext, chipertext); - TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher_end, chipertext + SZ - 32, 32); + mbedtls_aes_crypt_cfb8(&ctx, MBEDTLS_AES_ENCRYPT, SZ, nonce, plaintext, ciphertext); + TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher_end, ciphertext + SZ - 32, 32); // Decrypt memcpy(nonce, iv, 16); - mbedtls_aes_crypt_cfb8(&ctx, MBEDTLS_AES_DECRYPT, SZ, nonce, chipertext, decryptedtext); + mbedtls_aes_crypt_cfb8(&ctx, MBEDTLS_AES_DECRYPT, SZ, nonce, ciphertext, decryptedtext); TEST_ASSERT_EQUAL_HEX8_ARRAY(plaintext, decryptedtext, SZ); mbedtls_aes_free(&ctx); free(plaintext); - free(chipertext); + free(ciphertext); free(decryptedtext); } @@ -325,11 +325,11 @@ TEST_CASE("mbedtls CFB-128 AES-256 test", "[aes]") memcpy(nonce, iv, 16); // allocate internal memory - uint8_t *chipertext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); + uint8_t *ciphertext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); uint8_t *plaintext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); uint8_t *decryptedtext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); - TEST_ASSERT_NOT_NULL(chipertext); + TEST_ASSERT_NOT_NULL(ciphertext); TEST_ASSERT_NOT_NULL(plaintext); TEST_ASSERT_NOT_NULL(decryptedtext); @@ -340,19 +340,19 @@ TEST_CASE("mbedtls CFB-128 AES-256 test", "[aes]") memset(decryptedtext, 0x0, SZ); // Encrypt - mbedtls_aes_crypt_cfb128(&ctx, MBEDTLS_AES_ENCRYPT, SZ, &nc_off, nonce, plaintext, chipertext); - TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher_end, chipertext + SZ - 32, 32); + mbedtls_aes_crypt_cfb128(&ctx, MBEDTLS_AES_ENCRYPT, SZ, &nc_off, nonce, plaintext, ciphertext); + TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher_end, ciphertext + SZ - 32, 32); // Decrypt nc_off = 0; memcpy(nonce, iv, 16); - mbedtls_aes_crypt_cfb128(&ctx, MBEDTLS_AES_DECRYPT, SZ, &nc_off, nonce, chipertext, decryptedtext); + mbedtls_aes_crypt_cfb128(&ctx, MBEDTLS_AES_DECRYPT, SZ, &nc_off, nonce, ciphertext, decryptedtext); TEST_ASSERT_EQUAL_HEX8_ARRAY(plaintext, decryptedtext, SZ); mbedtls_aes_free(&ctx); free(plaintext); - free(chipertext); + free(ciphertext); free(decryptedtext); } @@ -401,11 +401,11 @@ static void aes_ctr_stream_test(void) memset(key, 0x44, 16); // allocate internal memory - uint8_t *chipertext = heap_caps_malloc(SZ, MALLOC_CAP_DMA | MALLOC_CAP_8BIT | MALLOC_CAP_INTERNAL); + uint8_t *ciphertext = heap_caps_malloc(SZ, MALLOC_CAP_DMA | MALLOC_CAP_8BIT | MALLOC_CAP_INTERNAL); uint8_t *plaintext = heap_caps_malloc(SZ, MALLOC_CAP_DMA | MALLOC_CAP_8BIT | MALLOC_CAP_INTERNAL); uint8_t *decryptedtext = heap_caps_malloc(SZ, MALLOC_CAP_DMA | MALLOC_CAP_8BIT | MALLOC_CAP_INTERNAL); - TEST_ASSERT_NOT_NULL(chipertext); + TEST_ASSERT_NOT_NULL(ciphertext); TEST_ASSERT_NOT_NULL(plaintext); TEST_ASSERT_NOT_NULL(decryptedtext); @@ -419,7 +419,7 @@ static void aes_ctr_stream_test(void) for (int bytes_to_process = 1; bytes_to_process < SZ; bytes_to_process++) { ESP_LOGD("test", "bytes_to_process %d", bytes_to_process); memset(nonce, 0xEE, 16); - memset(chipertext, 0x0, SZ); + memset(ciphertext, 0x0, SZ); memset(decryptedtext, 0x0, SZ); size_t offset = 0; @@ -429,12 +429,12 @@ static void aes_ctr_stream_test(void) size_t length = (idx + bytes_to_process > SZ) ? (SZ - idx) : bytes_to_process; mbedtls_aes_crypt_ctr(&ctx, length, &offset, nonce, - stream_block, plaintext + idx, chipertext + idx ); + stream_block, plaintext + idx, ciphertext + idx ); } ESP_LOG_BUFFER_HEXDUMP("expected", expected_cipher, SZ, ESP_LOG_DEBUG); - ESP_LOG_BUFFER_HEXDUMP("actual ", chipertext, SZ, ESP_LOG_DEBUG); + ESP_LOG_BUFFER_HEXDUMP("actual ", ciphertext, SZ, ESP_LOG_DEBUG); - TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher, chipertext, SZ); + TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher, ciphertext, SZ); // Decrypt memset(nonce, 0xEE, 16); @@ -444,7 +444,7 @@ static void aes_ctr_stream_test(void) // Limit length of last call to avoid exceeding buffer size size_t length = (idx + bytes_to_process > SZ) ? (SZ - idx) : bytes_to_process; mbedtls_aes_crypt_ctr(&ctx, length, &offset, nonce, - stream_block, chipertext + idx, decryptedtext + idx ); + stream_block, ciphertext + idx, decryptedtext + idx ); } ESP_LOG_BUFFER_HEXDUMP("decrypted", decryptedtext, SZ, ESP_LOG_DEBUG); TEST_ASSERT_EQUAL_HEX8_ARRAY(plaintext, decryptedtext, SZ); @@ -452,7 +452,7 @@ static void aes_ctr_stream_test(void) mbedtls_aes_free(&ctx); free(plaintext); - free(chipertext); + free(ciphertext); free(decryptedtext); } @@ -505,11 +505,11 @@ TEST_CASE("mbedtls OFB stream test", "[aes]") memset(key, 0x44, 16); // allocate internal memory - uint8_t *chipertext = heap_caps_malloc(SZ, MALLOC_CAP_DMA | MALLOC_CAP_8BIT | MALLOC_CAP_INTERNAL); + uint8_t *ciphertext = heap_caps_malloc(SZ, MALLOC_CAP_DMA | MALLOC_CAP_8BIT | MALLOC_CAP_INTERNAL); uint8_t *plaintext = heap_caps_malloc(SZ, MALLOC_CAP_DMA | MALLOC_CAP_8BIT | MALLOC_CAP_INTERNAL); uint8_t *decryptedtext = heap_caps_malloc(SZ, MALLOC_CAP_DMA | MALLOC_CAP_8BIT | MALLOC_CAP_INTERNAL); - TEST_ASSERT_NOT_NULL(chipertext); + TEST_ASSERT_NOT_NULL(ciphertext); TEST_ASSERT_NOT_NULL(plaintext); TEST_ASSERT_NOT_NULL(decryptedtext); @@ -529,10 +529,10 @@ TEST_CASE("mbedtls OFB stream test", "[aes]") for (int idx = 0; idx < SZ; idx = idx + bytes_to_process) { // Limit length of last call to avoid exceeding buffer size size_t length = ( (idx + bytes_to_process) > SZ) ? (SZ - idx) : bytes_to_process; - mbedtls_aes_crypt_ofb(&ctx, length, &offset, iv, plaintext + idx, chipertext + idx); + mbedtls_aes_crypt_ofb(&ctx, length, &offset, iv, plaintext + idx, ciphertext + idx); } - TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher, chipertext, SZ); + TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher, ciphertext, SZ); // Decrypt memset(iv, 0xEE, 16); @@ -541,14 +541,14 @@ TEST_CASE("mbedtls OFB stream test", "[aes]") for (int idx = 0; idx < SZ; idx = idx + bytes_to_process) { // Limit length of last call to avoid exceeding buffer size size_t length = (idx + bytes_to_process > SZ) ? (SZ - idx) : bytes_to_process; - mbedtls_aes_crypt_ofb(&ctx, length, &offset, iv, chipertext + idx, decryptedtext + idx); + mbedtls_aes_crypt_ofb(&ctx, length, &offset, iv, ciphertext + idx, decryptedtext + idx); } TEST_ASSERT_EQUAL_HEX8_ARRAY(plaintext, decryptedtext, SZ); } mbedtls_aes_free(&ctx); free(plaintext); - free(chipertext); + free(ciphertext); free(decryptedtext); } @@ -595,11 +595,11 @@ TEST_CASE("mbedtls CFB8 stream test", "[aes]") memset(key, 0x44, 16); // allocate internal memory - uint8_t *chipertext = heap_caps_malloc(SZ, MALLOC_CAP_DMA | MALLOC_CAP_8BIT | MALLOC_CAP_INTERNAL); + uint8_t *ciphertext = heap_caps_malloc(SZ, MALLOC_CAP_DMA | MALLOC_CAP_8BIT | MALLOC_CAP_INTERNAL); uint8_t *plaintext = heap_caps_malloc(SZ, MALLOC_CAP_DMA | MALLOC_CAP_8BIT | MALLOC_CAP_INTERNAL); uint8_t *decryptedtext = heap_caps_malloc(SZ, MALLOC_CAP_DMA | MALLOC_CAP_8BIT | MALLOC_CAP_INTERNAL); - TEST_ASSERT_NOT_NULL(chipertext); + TEST_ASSERT_NOT_NULL(ciphertext); TEST_ASSERT_NOT_NULL(plaintext); TEST_ASSERT_NOT_NULL(decryptedtext); @@ -616,16 +616,16 @@ TEST_CASE("mbedtls CFB8 stream test", "[aes]") for (int idx = 0; idx < SZ; idx = idx + bytes_to_process) { // Limit length of last call to avoid exceeding buffer size size_t length = ( (idx + bytes_to_process) > SZ) ? (SZ - idx) : bytes_to_process; - mbedtls_aes_crypt_cfb8(&ctx, MBEDTLS_AES_ENCRYPT, length, iv, plaintext + idx, chipertext + idx); + mbedtls_aes_crypt_cfb8(&ctx, MBEDTLS_AES_ENCRYPT, length, iv, plaintext + idx, ciphertext + idx); } - TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher, chipertext, SZ); + TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher, ciphertext, SZ); memset(iv, 0xEE, 16); for (int idx = 0; idx < SZ; idx = idx + bytes_to_process) { // Limit length of last call to avoid exceeding buffer size size_t length = ( (idx + bytes_to_process) > SZ) ? (SZ - idx) : bytes_to_process; - mbedtls_aes_crypt_cfb8(&ctx, MBEDTLS_AES_DECRYPT, length, iv, chipertext + idx, decryptedtext + idx); + mbedtls_aes_crypt_cfb8(&ctx, MBEDTLS_AES_DECRYPT, length, iv, ciphertext + idx, decryptedtext + idx); } TEST_ASSERT_EQUAL_HEX8_ARRAY(plaintext, decryptedtext, SZ); @@ -633,7 +633,7 @@ TEST_CASE("mbedtls CFB8 stream test", "[aes]") mbedtls_aes_free(&ctx); free(plaintext); - free(chipertext); + free(ciphertext); free(decryptedtext); } @@ -680,11 +680,11 @@ TEST_CASE("mbedtls CFB128 stream test", "[aes]") memset(key, 0x44, 16); // allocate internal memory - uint8_t *chipertext = heap_caps_malloc(SZ, MALLOC_CAP_DMA | MALLOC_CAP_8BIT | MALLOC_CAP_INTERNAL); + uint8_t *ciphertext = heap_caps_malloc(SZ, MALLOC_CAP_DMA | MALLOC_CAP_8BIT | MALLOC_CAP_INTERNAL); uint8_t *plaintext = heap_caps_malloc(SZ, MALLOC_CAP_DMA | MALLOC_CAP_8BIT | MALLOC_CAP_INTERNAL); uint8_t *decryptedtext = heap_caps_malloc(SZ, MALLOC_CAP_DMA | MALLOC_CAP_8BIT | MALLOC_CAP_INTERNAL); - TEST_ASSERT_NOT_NULL(chipertext); + TEST_ASSERT_NOT_NULL(ciphertext); TEST_ASSERT_NOT_NULL(plaintext); TEST_ASSERT_NOT_NULL(decryptedtext); @@ -703,24 +703,24 @@ TEST_CASE("mbedtls CFB128 stream test", "[aes]") for (int idx = 0; idx < SZ; idx = idx + bytes_to_process) { // Limit length of last call to avoid exceeding buffer size size_t length = ( (idx + bytes_to_process) > SZ) ? (SZ - idx) : bytes_to_process; - mbedtls_aes_crypt_cfb128(&ctx, MBEDTLS_AES_ENCRYPT, length, &offset, iv, plaintext + idx, chipertext + idx); + mbedtls_aes_crypt_cfb128(&ctx, MBEDTLS_AES_ENCRYPT, length, &offset, iv, plaintext + idx, ciphertext + idx); } - TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher, chipertext, SZ); + TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher, ciphertext, SZ); offset = 0; memset(iv, 0xEE, 16); for (int idx = 0; idx < SZ; idx = idx + bytes_to_process) { // Limit length of last call to avoid exceeding buffer size size_t length = ( (idx + bytes_to_process) > SZ) ? (SZ - idx) : bytes_to_process; - mbedtls_aes_crypt_cfb128(&ctx, MBEDTLS_AES_DECRYPT, length, &offset, iv, chipertext + idx, decryptedtext + idx); + mbedtls_aes_crypt_cfb128(&ctx, MBEDTLS_AES_DECRYPT, length, &offset, iv, ciphertext + idx, decryptedtext + idx); } TEST_ASSERT_EQUAL_HEX8_ARRAY(plaintext, decryptedtext, SZ); mbedtls_aes_free(&ctx); free(plaintext); - free(chipertext); + free(ciphertext); free(decryptedtext); } @@ -804,11 +804,11 @@ TEST_CASE("mbedtls OFB, chained DMA descriptors", "[aes]") memcpy(nonce, iv, 16); // allocate internal memory - uint8_t *chipertext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); + uint8_t *ciphertext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); uint8_t *plaintext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); uint8_t *decryptedtext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT|MALLOC_CAP_INTERNAL); - TEST_ASSERT_NOT_NULL(chipertext); + TEST_ASSERT_NOT_NULL(ciphertext); TEST_ASSERT_NOT_NULL(plaintext); TEST_ASSERT_NOT_NULL(decryptedtext); @@ -819,20 +819,20 @@ TEST_CASE("mbedtls OFB, chained DMA descriptors", "[aes]") memset(decryptedtext, 0x0, SZ); // Encrypt - mbedtls_aes_crypt_ofb(&ctx, SZ, &nc_off, nonce, plaintext, chipertext); - TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher_end, chipertext + SZ - 32, 32); + mbedtls_aes_crypt_ofb(&ctx, SZ, &nc_off, nonce, plaintext, ciphertext); + TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher_end, ciphertext + SZ - 32, 32); // Decrypt nc_off = 0; memcpy(nonce, iv, 16); - mbedtls_aes_crypt_ofb(&ctx, SZ, &nc_off, nonce, chipertext, decryptedtext); + mbedtls_aes_crypt_ofb(&ctx, SZ, &nc_off, nonce, ciphertext, decryptedtext); TEST_ASSERT_EQUAL_HEX8_ARRAY(plaintext, decryptedtext, SZ); mbedtls_aes_free(&ctx); free(plaintext); - free(chipertext); + free(ciphertext); free(decryptedtext); } @@ -858,11 +858,11 @@ void aes_ctr_alignment_test(uint32_t input_buf_caps, uint32_t output_buf_caps) memset(key, 0x1E, 16); // allocate memory according the requested caps - uint8_t *chipertext = heap_caps_malloc(SZ + ALIGNMENT_SIZE_BYTES, output_buf_caps); + uint8_t *ciphertext = heap_caps_malloc(SZ + ALIGNMENT_SIZE_BYTES, output_buf_caps); uint8_t *plaintext = heap_caps_malloc(SZ + ALIGNMENT_SIZE_BYTES, input_buf_caps); uint8_t *decryptedtext = heap_caps_malloc(SZ, MALLOC_CAP_DMA | MALLOC_CAP_8BIT | MALLOC_CAP_INTERNAL); - TEST_ASSERT_NOT_NULL(chipertext); + TEST_ASSERT_NOT_NULL(ciphertext); TEST_ASSERT_NOT_NULL(plaintext); TEST_ASSERT_NOT_NULL(decryptedtext); @@ -877,14 +877,14 @@ void aes_ctr_alignment_test(uint32_t input_buf_caps, uint32_t output_buf_caps) // Encrypt with input buffer in external ram offset = 0; memset(nonce, 0x2F, 16); - mbedtls_aes_crypt_ctr(&ctx, SZ, &offset, nonce, stream_block, plaintext + i, chipertext + i); - TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher_ctr_end, chipertext + i + SZ - 32, 32); + mbedtls_aes_crypt_ctr(&ctx, SZ, &offset, nonce, stream_block, plaintext + i, ciphertext + i); + TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher_ctr_end, ciphertext + i + SZ - 32, 32); // Decrypt offset = 0; memset(nonce, 0x2F, 16); // Decrypt with input buffer in instruction memory, the crypto DMA can't access this - mbedtls_aes_crypt_ctr(&ctx, SZ, &offset, nonce, stream_block, chipertext + i, decryptedtext); + mbedtls_aes_crypt_ctr(&ctx, SZ, &offset, nonce, stream_block, ciphertext + i, decryptedtext); TEST_ASSERT_EQUAL_HEX8_ARRAY(plaintext, decryptedtext, SZ); @@ -892,7 +892,7 @@ void aes_ctr_alignment_test(uint32_t input_buf_caps, uint32_t output_buf_caps) mbedtls_aes_free(&ctx); free(plaintext); - free(chipertext); + free(ciphertext); free(decryptedtext); } @@ -1483,10 +1483,10 @@ void aes_ext_flash_ctr_test(uint32_t output_buf_caps) memset(nonce, 0x2F, 16); memset(key, 0x1E, 16); - uint8_t *chipertext = heap_caps_malloc(SZ, output_buf_caps); + uint8_t *ciphertext = heap_caps_malloc(SZ, output_buf_caps); uint8_t *decryptedtext = heap_caps_malloc(SZ, MALLOC_CAP_8BIT | MALLOC_CAP_DMA | MALLOC_CAP_INTERNAL); - TEST_ASSERT_NOT_NULL(chipertext); + TEST_ASSERT_NOT_NULL(ciphertext); TEST_ASSERT_NOT_NULL(decryptedtext); mbedtls_aes_init(&ctx); @@ -1497,19 +1497,19 @@ void aes_ext_flash_ctr_test(uint32_t output_buf_caps) // Encrypt with input buffer in external flash offset = 0; memset(nonce, 0x2F, 16); - mbedtls_aes_crypt_ctr(&ctx, SZ, &offset, nonce, stream_block, long_input, chipertext); - TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher_long_input_end, chipertext + SZ - 32, 32); + mbedtls_aes_crypt_ctr(&ctx, SZ, &offset, nonce, stream_block, long_input, ciphertext); + TEST_ASSERT_EQUAL_HEX8_ARRAY(expected_cipher_long_input_end, ciphertext + SZ - 32, 32); // Decrypt offset = 0; memset(nonce, 0x2F, 16); // Decrypt with input buffer in external flash, the crypto DMA can't access this - mbedtls_aes_crypt_ctr(&ctx, SZ, &offset, nonce, stream_block, chipertext, decryptedtext); + mbedtls_aes_crypt_ctr(&ctx, SZ, &offset, nonce, stream_block, ciphertext, decryptedtext); TEST_ASSERT_EQUAL_HEX8_ARRAY(long_input, decryptedtext, SZ); mbedtls_aes_free(&ctx); - free(chipertext); + free(ciphertext); free(decryptedtext); } @@ -1563,7 +1563,7 @@ TEST_CASE("mbedtls AES stack in RTC RAM", "[mbedtls]") #endif //CONFIG_ESP_SYSTEM_RTC_FAST_MEM_AS_HEAP_DEPCHECK -#if CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY && CONFIG_SPIRAM_USE_MALLOC +#if CONFIG_FREERTOS_TASK_CREATE_ALLOW_EXT_MEM && CONFIG_SPIRAM_USE_MALLOC TEST_CASE("mbedtls AES stack in PSRAM", "[mbedtls]") { @@ -1585,4 +1585,4 @@ TEST_CASE("mbedtls AES stack in PSRAM", "[mbedtls]") vSemaphoreDelete(done_sem); } -#endif //CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY && CONFIG_SPIRAM_USE_MALLOC +#endif //CONFIG_FREERTOS_TASK_CREATE_ALLOW_EXT_MEM && CONFIG_SPIRAM_USE_MALLOC diff --git a/components/mbedtls/test_apps/main/test_mbedtls_sha.c b/components/mbedtls/test_apps/main/test_mbedtls_sha.c index 003b35db8b5a..55e0a65e0985 100644 --- a/components/mbedtls/test_apps/main/test_mbedtls_sha.c +++ b/components/mbedtls/test_apps/main/test_mbedtls_sha.c @@ -587,7 +587,7 @@ TEST_CASE("mbedtls SHA stack in RTC RAM", "[mbedtls]") #endif //CONFIG_ESP_SYSTEM_RTC_FAST_MEM_AS_HEAP_DEPCHECK -#if CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY && CONFIG_SPIRAM_USE_MALLOC +#if CONFIG_FREERTOS_TASK_CREATE_ALLOW_EXT_MEM && CONFIG_SPIRAM_USE_MALLOC TEST_CASE("mbedtls SHA stack in PSRAM", "[mbedtls]") { @@ -609,4 +609,4 @@ TEST_CASE("mbedtls SHA stack in PSRAM", "[mbedtls]") vSemaphoreDelete(done_sem); } -#endif //CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY && CONFIG_SPIRAM_USE_MALLOC +#endif //CONFIG_FREERTOS_TASK_CREATE_ALLOW_EXT_MEM && CONFIG_SPIRAM_USE_MALLOC diff --git a/components/mbedtls/test_apps/sdkconfig.ci.psram_all_ext b/components/mbedtls/test_apps/sdkconfig.ci.psram_all_ext index ad3452cf7b86..cd0e64116c8b 100644 --- a/components/mbedtls/test_apps/sdkconfig.ci.psram_all_ext +++ b/components/mbedtls/test_apps/sdkconfig.ci.psram_all_ext @@ -1,4 +1,4 @@ CONFIG_SPIRAM=y CONFIG_ESP_INT_WDT_TIMEOUT_MS=800 -CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y +CONFIG_FREERTOS_TASK_CREATE_ALLOW_EXT_MEM=y CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL=0 diff --git a/components/mbedtls/test_apps/sdkconfig.ci.psram_all_ext_esp32p4_200m b/components/mbedtls/test_apps/sdkconfig.ci.psram_all_ext_esp32p4_200m index 1c29e19bb931..6ed71c76e361 100644 --- a/components/mbedtls/test_apps/sdkconfig.ci.psram_all_ext_esp32p4_200m +++ b/components/mbedtls/test_apps/sdkconfig.ci.psram_all_ext_esp32p4_200m @@ -1,7 +1,7 @@ CONFIG_IDF_TARGET="esp32p4" CONFIG_SPIRAM=y CONFIG_ESP_INT_WDT_TIMEOUT_MS=800 -CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y +CONFIG_FREERTOS_TASK_CREATE_ALLOW_EXT_MEM=y CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL=0 CONFIG_IDF_EXPERIMENTAL_FEATURES=y diff --git a/docs/en/api-guides/external-ram.rst b/docs/en/api-guides/external-ram.rst index f8cebef14d42..2869531dbe20 100644 --- a/docs/en/api-guides/external-ram.rst +++ b/docs/en/api-guides/external-ram.rst @@ -213,7 +213,7 @@ External RAM use has the following restrictions: - In general, external RAM will not be used as task stack memory. :cpp:func:`xTaskCreate` and similar functions will always allocate internal memory for stack and task TCBs. -The option :ref:`CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY` can be used to allow placing task stacks into external memory. In these cases :cpp:func:`xTaskCreateStatic` must be used to specify a task stack buffer allocated from external memory, otherwise task stacks will still be allocated from internal memory. +The option :ref:`CONFIG_FREERTOS_TASK_CREATE_ALLOW_EXT_MEM` can be used to allow placing task stacks into external memory. In these cases :cpp:func:`xTaskCreateStatic` must be used to specify a task stack buffer allocated from external memory, otherwise task stacks will still be allocated from internal memory. Failure to Initialize diff --git a/docs/en/api-guides/inc/external-ram-esp32-notes.rst b/docs/en/api-guides/inc/external-ram-esp32-notes.rst index ac8f8d4764ce..b914ebd81657 100644 --- a/docs/en/api-guides/inc/external-ram-esp32-notes.rst +++ b/docs/en/api-guides/inc/external-ram-esp32-notes.rst @@ -1,4 +1,4 @@ -* Regarding stacks in PSRAM: For tasks that do not call ROM code in any way (directly or indirectly), the :ref:`CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY` option will eliminate the check in :cpp:func:`xTaskCreateStatic`, allowing a task's stack to be in external RAM. However, using this is **not advised**. +* Regarding stacks in PSRAM: For tasks that do not call ROM code in any way (directly or indirectly), the :ref:`CONFIG_FREERTOS_TASK_CREATE_ALLOW_EXT_MEM` option will eliminate the check in :cpp:func:`xTaskCreateStatic`, allowing a task's stack to be in external RAM. However, using this is **not advised**. * When used at 80 MHz clock speed, external RAM must also occupy either the HSPI or VSPI bus. Select which SPI host will be used by :ref:`CONFIG_SPIRAM_OCCUPY_SPI_HOST`. diff --git a/docs/zh_CN/api-guides/external-ram.rst b/docs/zh_CN/api-guides/external-ram.rst index 92bfa9eafcd6..7793385b285f 100644 --- a/docs/zh_CN/api-guides/external-ram.rst +++ b/docs/zh_CN/api-guides/external-ram.rst @@ -211,7 +211,7 @@ ESP-IDF 启动过程中,片外 RAM 被映射到数据虚拟地址空间,该 - 一般来说,片外 RAM 不会用作任务堆栈存储器。:cpp:func:`xTaskCreate` 及类似函数始终会为堆栈和任务 TCB 分配片上储存器。 -可以使用 :ref:`CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY` 选项将任务堆栈放入片外存储器。这时,必须使用 :cpp:func:`xTaskCreateStatic` 指定从片外存储器分配的任务堆栈缓冲区,否则任务堆栈将仍从片上存储器分配。 +可以使用 :ref:`CONFIG_FREERTOS_TASK_CREATE_ALLOW_EXT_MEM` 选项将任务堆栈放入片外存储器。这时,必须使用 :cpp:func:`xTaskCreateStatic` 指定从片外存储器分配的任务堆栈缓冲区,否则任务堆栈将仍从片上存储器分配。 初始化失败 diff --git a/docs/zh_CN/api-guides/inc/external-ram-esp32-notes.rst b/docs/zh_CN/api-guides/inc/external-ram-esp32-notes.rst index 6d93693c8de2..6c7186a32817 100644 --- a/docs/zh_CN/api-guides/inc/external-ram-esp32-notes.rst +++ b/docs/zh_CN/api-guides/inc/external-ram-esp32-notes.rst @@ -1,4 +1,4 @@ -* PSRAM 中的栈:对于不以任何直接或间接方式调用 ROM 中代码的任务,选项 :ref:`CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY` 会取消 :cpp:func:`xTaskCreateStatic` 中的检查,允许任务栈存放在外部 RAM 中。但 **不建议** 使用此选项。 +* PSRAM 中的栈:对于不以任何直接或间接方式调用 ROM 中代码的任务,选项 :ref:`CONFIG_FREERTOS_TASK_CREATE_ALLOW_EXT_MEM` 会取消 :cpp:func:`xTaskCreateStatic` 中的检查,允许任务栈存放在外部 RAM 中。但 **不建议** 使用此选项。 * 在以 80 MHz 时钟速度运行时,外部 RAM 还必须占用 HSPI 或 VSPI 总线。设置 :ref:`CONFIG_SPIRAM_OCCUPY_SPI_HOST` 选项可以选择使用的 SPI 主机。 diff --git a/tools/test_apps/system/panic/main/include/test_panic.h b/tools/test_apps/system/panic/main/include/test_panic.h index 71733add77e4..32d051265544 100644 --- a/tools/test_apps/system/panic/main/include/test_panic.h +++ b/tools/test_apps/system/panic/main/include/test_panic.h @@ -31,7 +31,7 @@ void test_hw_stack_guard_cpu1(void); #endif // CONFIG_FREERTOS_UNICORE #endif // CONFIG_ESP_SYSTEM_HW_STACK_GUARD -#if CONFIG_ESP_COREDUMP_ENABLE_TO_FLASH && CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY +#if CONFIG_ESP_COREDUMP_ENABLE_TO_FLASH && CONFIG_FREERTOS_TASK_CREATE_ALLOW_EXT_MEM void test_panic_extram_stack_heap(void); #if CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY void test_panic_extram_stack_bss(void); diff --git a/tools/test_apps/system/panic/main/test_app_main.c b/tools/test_apps/system/panic/main/test_app_main.c index b55f7de76526..a824e25e5bd1 100644 --- a/tools/test_apps/system/panic/main/test_app_main.c +++ b/tools/test_apps/system/panic/main/test_app_main.c @@ -95,7 +95,7 @@ void app_main(void) HANDLE_TEST(test_name, test_hw_stack_guard_cpu1); #endif // CONFIG_FREERTOS_UNICORE #endif // CONFIG_ESP_SYSTEM_HW_STACK_GUARD -#if CONFIG_ESP_COREDUMP_ENABLE_TO_FLASH && CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY +#if CONFIG_ESP_COREDUMP_ENABLE_TO_FLASH && CONFIG_FREERTOS_TASK_CREATE_ALLOW_EXT_MEM HANDLE_TEST(test_name, test_panic_extram_stack_heap); #if CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY HANDLE_TEST(test_name, test_panic_extram_stack_bss); diff --git a/tools/test_apps/system/panic/main/test_panic.c b/tools/test_apps/system/panic/main/test_panic.c index 6f58469d826b..eafc9daddfee 100644 --- a/tools/test_apps/system/panic/main/test_panic.c +++ b/tools/test_apps/system/panic/main/test_panic.c @@ -96,7 +96,7 @@ void test_hw_stack_guard_cpu1(void) #endif // CONFIG_FREERTOS_UNICORE #endif // CONFIG_ESP_SYSTEM_HW_STACK_GUARD -#if CONFIG_ESP_COREDUMP_ENABLE_TO_FLASH && CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY +#if CONFIG_ESP_COREDUMP_ENABLE_TO_FLASH && CONFIG_FREERTOS_TASK_CREATE_ALLOW_EXT_MEM static void stack_in_extram(void* arg) { (void) arg; @@ -130,7 +130,7 @@ void test_panic_extram_stack_bss(void) vTaskDelay(1000); } #endif -#endif // ESP_COREDUMP_ENABLE_TO_FLASH && SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY +#endif // ESP_COREDUMP_ENABLE_TO_FLASH && FREERTOS_TASK_CREATE_ALLOW_EXT_MEM #if !CONFIG_FREERTOS_UNICORE diff --git a/tools/test_apps/system/panic/sdkconfig.ci.coredump_flash_extram_stack_bss_esp32 b/tools/test_apps/system/panic/sdkconfig.ci.coredump_flash_extram_stack_bss_esp32 index 26769c3c5981..065b49d68b24 100644 --- a/tools/test_apps/system/panic/sdkconfig.ci.coredump_flash_extram_stack_bss_esp32 +++ b/tools/test_apps/system/panic/sdkconfig.ci.coredump_flash_extram_stack_bss_esp32 @@ -5,7 +5,7 @@ CONFIG_ESP_COREDUMP_CHECKSUM_SHA256=y # We need to have the coredump info log CONFIG_LOG_DEFAULT_LEVEL_INFO=y CONFIG_SPIRAM=y -CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y +CONFIG_FREERTOS_TASK_CREATE_ALLOW_EXT_MEM=y CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY=y CONFIG_ESP_COREDUMP_USE_STACK_SIZE=y CONFIG_ESP_COREDUMP_CAPTURE_DRAM=y diff --git a/tools/test_apps/system/panic/sdkconfig.ci.coredump_flash_extram_stack_bss_esp32s2 b/tools/test_apps/system/panic/sdkconfig.ci.coredump_flash_extram_stack_bss_esp32s2 index ad1a91fa8119..7c372f58f2c2 100644 --- a/tools/test_apps/system/panic/sdkconfig.ci.coredump_flash_extram_stack_bss_esp32s2 +++ b/tools/test_apps/system/panic/sdkconfig.ci.coredump_flash_extram_stack_bss_esp32s2 @@ -5,7 +5,7 @@ CONFIG_ESP_COREDUMP_CHECKSUM_SHA256=y # We need to have the coredump info log CONFIG_LOG_DEFAULT_LEVEL_INFO=y CONFIG_SPIRAM=y -CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y +CONFIG_FREERTOS_TASK_CREATE_ALLOW_EXT_MEM=y CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY=y CONFIG_ESP_COREDUMP_USE_STACK_SIZE=y CONFIG_ESP_COREDUMP_CAPTURE_DRAM=y diff --git a/tools/test_apps/system/panic/sdkconfig.ci.coredump_flash_extram_stack_bss_esp32s3 b/tools/test_apps/system/panic/sdkconfig.ci.coredump_flash_extram_stack_bss_esp32s3 index 46903a022352..a1533240cb6b 100644 --- a/tools/test_apps/system/panic/sdkconfig.ci.coredump_flash_extram_stack_bss_esp32s3 +++ b/tools/test_apps/system/panic/sdkconfig.ci.coredump_flash_extram_stack_bss_esp32s3 @@ -5,7 +5,7 @@ CONFIG_ESP_COREDUMP_CHECKSUM_SHA256=y # We need to have the coredump info log CONFIG_LOG_DEFAULT_LEVEL_INFO=y CONFIG_SPIRAM=y -CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y +CONFIG_FREERTOS_TASK_CREATE_ALLOW_EXT_MEM=y CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY=y CONFIG_ESP_COREDUMP_USE_STACK_SIZE=y CONFIG_ESP_COREDUMP_CAPTURE_DRAM=y diff --git a/tools/test_apps/system/panic/sdkconfig.ci.coredump_flash_extram_stack_heap_esp32 b/tools/test_apps/system/panic/sdkconfig.ci.coredump_flash_extram_stack_heap_esp32 index 18391318a374..a98716641a9a 100644 --- a/tools/test_apps/system/panic/sdkconfig.ci.coredump_flash_extram_stack_heap_esp32 +++ b/tools/test_apps/system/panic/sdkconfig.ci.coredump_flash_extram_stack_heap_esp32 @@ -5,5 +5,5 @@ CONFIG_ESP_COREDUMP_CHECKSUM_SHA256=y # We need to have the coredump info log CONFIG_LOG_DEFAULT_LEVEL_INFO=y CONFIG_SPIRAM=y -CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y +CONFIG_FREERTOS_TASK_CREATE_ALLOW_EXT_MEM=y CONFIG_ESP_COREDUMP_USE_STACK_SIZE=y diff --git a/tools/test_apps/system/panic/sdkconfig.ci.coredump_flash_extram_stack_heap_esp32s2 b/tools/test_apps/system/panic/sdkconfig.ci.coredump_flash_extram_stack_heap_esp32s2 index 981803c0be23..dddebf12c098 100644 --- a/tools/test_apps/system/panic/sdkconfig.ci.coredump_flash_extram_stack_heap_esp32s2 +++ b/tools/test_apps/system/panic/sdkconfig.ci.coredump_flash_extram_stack_heap_esp32s2 @@ -5,5 +5,5 @@ CONFIG_ESP_COREDUMP_CHECKSUM_SHA256=y # We need to have the coredump info log CONFIG_LOG_DEFAULT_LEVEL_INFO=y CONFIG_SPIRAM=y -CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y +CONFIG_FREERTOS_TASK_CREATE_ALLOW_EXT_MEM=y CONFIG_ESP_COREDUMP_USE_STACK_SIZE=y diff --git a/tools/test_apps/system/panic/sdkconfig.ci.coredump_flash_extram_stack_heap_esp32s3 b/tools/test_apps/system/panic/sdkconfig.ci.coredump_flash_extram_stack_heap_esp32s3 index ff952817bde2..552021189427 100644 --- a/tools/test_apps/system/panic/sdkconfig.ci.coredump_flash_extram_stack_heap_esp32s3 +++ b/tools/test_apps/system/panic/sdkconfig.ci.coredump_flash_extram_stack_heap_esp32s3 @@ -5,5 +5,5 @@ CONFIG_ESP_COREDUMP_CHECKSUM_SHA256=y # We need to have the coredump info log CONFIG_LOG_DEFAULT_LEVEL_INFO=y CONFIG_SPIRAM=y -CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y +CONFIG_FREERTOS_TASK_CREATE_ALLOW_EXT_MEM=y CONFIG_ESP_COREDUMP_USE_STACK_SIZE=y From a7ebec84feae7662f40eb3a9f94cc97f6a3911e1 Mon Sep 17 00:00:00 2001 From: laokaiyao Date: Fri, 6 Sep 2024 17:27:24 +0800 Subject: [PATCH 096/365] refactor(soc): sort esp32h2 soc headers --- .../esp32c5/include/soc/usb_serial_jtag_reg.h | 2 +- .../include/soc/usb_serial_jtag_struct.h | 2 +- .../soc/esp32h2/include/soc/dport_access.h | 3 +- .../soc/esp32h2/include/soc/interrupt_reg.h | 4 +- components/soc/esp32h2/include/soc/soc.h | 2 +- .../soc/esp32h2/include/soc/system_reg.h | 2 +- components/soc/esp32h2/register/soc/.gitkeep | 0 .../{include => register}/soc/aes_reg.h | 0 .../{include => register}/soc/aes_struct.h | 0 .../soc/apb_saradc_reg.h | 0 .../soc/apb_saradc_struct.h | 0 .../soc/assist_debug_reg.h | 12 ++-- .../soc/assist_debug_struct.h | 18 +++--- .../{include => register}/soc/cache_reg.h | 8 +-- .../{include => register}/soc/cache_struct.h | 8 +-- .../{include => register}/soc/clint_reg.h | 0 .../{include => register}/soc/ds_reg.h | 0 .../{include => register}/soc/ds_struct.h | 0 .../{include => register}/soc/ecc_mult_reg.h | 4 +- .../soc/ecc_mult_struct.h | 4 +- .../{include => register}/soc/ecdsa_reg.h | 6 +- .../{include => register}/soc/ecdsa_struct.h | 6 +- .../{include => register}/soc/efuse_reg.h | 8 +-- .../{include => register}/soc/efuse_struct.h | 6 +- .../{include => register}/soc/extmem_reg.h | 38 +++++------ .../{include => register}/soc/extmem_struct.h | 8 +-- .../{include => register}/soc/gdma_reg.h | 0 .../{include => register}/soc/gdma_struct.h | 0 .../{include => register}/soc/gpio_ext_reg.h | 0 .../soc/gpio_ext_struct.h | 0 .../{include => register}/soc/gpio_reg.h | 0 .../{include => register}/soc/gpio_struct.h | 0 .../{include => register}/soc/hmac_reg.h | 0 .../{include => register}/soc/hmac_struct.h | 0 .../{include => register}/soc/hp_apm_reg.h | 0 .../{include => register}/soc/hp_apm_struct.h | 0 .../{include => register}/soc/hp_system_reg.h | 2 +- .../soc/hp_system_struct.h | 2 +- .../soc/i2c_ana_mst_reg.h | 0 .../{include => register}/soc/i2c_reg.h | 0 .../{include => register}/soc/i2c_struct.h | 0 .../{include => register}/soc/i2s_reg.h | 2 +- .../{include => register}/soc/i2s_struct.h | 2 +- .../soc/ieee802154_reg.h | 0 .../soc/ieee802154_struct.h | 0 .../soc/interrupt_matrix_reg.h | 0 .../soc/interrupt_matrix_struct.h | 0 .../{include => register}/soc/intpri_reg.h | 0 .../{include => register}/soc/intpri_struct.h | 0 .../{include => register}/soc/io_mux_reg.h | 4 +- .../{include => register}/soc/ledc_reg.h | 0 .../{include => register}/soc/ledc_struct.h | 0 .../soc/lp_analog_peri_reg.h | 0 .../soc/lp_analog_peri_struct.h | 0 .../{include => register}/soc/lp_aon_reg.h | 0 .../{include => register}/soc/lp_aon_struct.h | 0 .../{include => register}/soc/lp_apm0_reg.h | 0 .../soc/lp_apm0_struct.h | 0 .../{include => register}/soc/lp_apm_reg.h | 0 .../{include => register}/soc/lp_apm_struct.h | 0 .../{include => register}/soc/lp_clkrst_reg.h | 0 .../soc/lp_clkrst_struct.h | 0 .../{include => register}/soc/lp_timer_reg.h | 0 .../soc/lp_timer_struct.h | 0 .../{include => register}/soc/lp_wdt_reg.h | 0 .../{include => register}/soc/lp_wdt_struct.h | 0 .../{include => register}/soc/lpperi_reg.h | 0 .../{include => register}/soc/lpperi_struct.h | 0 .../{include => register}/soc/mcpwm_reg.h | 12 ++-- .../{include => register}/soc/mcpwm_struct.h | 4 +- .../soc/mem_monitor_reg.h | 8 +-- .../soc/mem_monitor_struct.h | 8 +-- .../{include => register}/soc/parl_io_reg.h | 8 +-- .../soc/parl_io_struct.h | 8 +-- .../{include => register}/soc/pau_reg.h | 0 .../{include => register}/soc/pau_struct.h | 0 .../{include => register}/soc/pcnt_reg.h | 0 .../{include => register}/soc/pcnt_struct.h | 0 .../{include => register}/soc/pcr_reg.h | 38 +++++------ .../{include => register}/soc/pcr_struct.h | 38 +++++------ .../{include => register}/soc/plic_reg.h | 0 .../{include => register}/soc/pmu_reg.h | 0 .../{include => register}/soc/pmu_struct.h | 0 .../{include => register}/soc/reg_base.h | 0 .../{include => register}/soc/rmt_reg.h | 0 .../{include => register}/soc/rmt_struct.h | 0 .../{include => register}/soc/rsa_reg.h | 0 .../{include => register}/soc/rsa_struct.h | 0 .../{include => register}/soc/sha_reg.h | 2 +- .../{include => register}/soc/sha_struct.h | 0 .../{include => register}/soc/soc_etm_reg.h | 0 .../soc/soc_etm_struct.h | 0 .../{include => register}/soc/spi_mem_reg.h | 64 +++++++++---------- .../soc/spi_mem_struct.h | 10 +-- .../{include => register}/soc/spi_reg.h | 4 +- .../{include => register}/soc/spi_struct.h | 4 +- .../{include => register}/soc/systimer_reg.h | 0 .../soc/systimer_struct.h | 0 .../{include => register}/soc/tee_reg.h | 0 .../{include => register}/soc/tee_struct.h | 0 .../soc/timer_group_reg.h | 0 .../soc/timer_group_struct.h | 0 .../{include => register}/soc/trace_reg.h | 2 +- .../{include => register}/soc/trace_struct.h | 2 +- .../{include => register}/soc/twai_reg.h | 0 .../{include => register}/soc/twai_struct.h | 0 .../{include => register}/soc/uart_reg.h | 10 +-- .../{include => register}/soc/uart_struct.h | 10 +-- .../{include => register}/soc/uhci_reg.h | 0 .../{include => register}/soc/uhci_struct.h | 0 .../soc/usb_serial_jtag_reg.h | 2 +- .../soc/usb_serial_jtag_struct.h | 0 .../{include => register}/soc/xts_aes_reg.h | 6 +- .../soc/esp32p4/include/soc/usb_wrap_struct.h | 2 +- 114 files changed, 197 insertions(+), 198 deletions(-) delete mode 100644 components/soc/esp32h2/register/soc/.gitkeep rename components/soc/esp32h2/{include => register}/soc/aes_reg.h (100%) rename components/soc/esp32h2/{include => register}/soc/aes_struct.h (100%) rename components/soc/esp32h2/{include => register}/soc/apb_saradc_reg.h (100%) rename components/soc/esp32h2/{include => register}/soc/apb_saradc_struct.h (100%) rename components/soc/esp32h2/{include => register}/soc/assist_debug_reg.h (99%) rename components/soc/esp32h2/{include => register}/soc/assist_debug_struct.h (98%) rename components/soc/esp32h2/{include => register}/soc/cache_reg.h (99%) rename components/soc/esp32h2/{include => register}/soc/cache_struct.h (99%) rename components/soc/esp32h2/{include => register}/soc/clint_reg.h (100%) rename components/soc/esp32h2/{include => register}/soc/ds_reg.h (100%) rename components/soc/esp32h2/{include => register}/soc/ds_struct.h (100%) rename components/soc/esp32h2/{include => register}/soc/ecc_mult_reg.h (97%) rename components/soc/esp32h2/{include => register}/soc/ecc_mult_struct.h (96%) rename components/soc/esp32h2/{include => register}/soc/ecdsa_reg.h (97%) rename components/soc/esp32h2/{include => register}/soc/ecdsa_struct.h (97%) rename components/soc/esp32h2/{include => register}/soc/efuse_reg.h (99%) rename components/soc/esp32h2/{include => register}/soc/efuse_struct.h (99%) rename components/soc/esp32h2/{include => register}/soc/extmem_reg.h (98%) rename components/soc/esp32h2/{include => register}/soc/extmem_struct.h (99%) rename components/soc/esp32h2/{include => register}/soc/gdma_reg.h (100%) rename components/soc/esp32h2/{include => register}/soc/gdma_struct.h (100%) rename components/soc/esp32h2/{include => register}/soc/gpio_ext_reg.h (100%) rename components/soc/esp32h2/{include => register}/soc/gpio_ext_struct.h (100%) rename components/soc/esp32h2/{include => register}/soc/gpio_reg.h (100%) rename components/soc/esp32h2/{include => register}/soc/gpio_struct.h (100%) rename components/soc/esp32h2/{include => register}/soc/hmac_reg.h (100%) rename components/soc/esp32h2/{include => register}/soc/hmac_struct.h (100%) rename components/soc/esp32h2/{include => register}/soc/hp_apm_reg.h (100%) rename components/soc/esp32h2/{include => register}/soc/hp_apm_struct.h (100%) rename components/soc/esp32h2/{include => register}/soc/hp_system_reg.h (99%) rename components/soc/esp32h2/{include => register}/soc/hp_system_struct.h (99%) rename components/soc/esp32h2/{include => register}/soc/i2c_ana_mst_reg.h (100%) rename components/soc/esp32h2/{include => register}/soc/i2c_reg.h (100%) rename components/soc/esp32h2/{include => register}/soc/i2c_struct.h (100%) rename components/soc/esp32h2/{include => register}/soc/i2s_reg.h (99%) rename components/soc/esp32h2/{include => register}/soc/i2s_struct.h (99%) rename components/soc/esp32h2/{include => register}/soc/ieee802154_reg.h (100%) rename components/soc/esp32h2/{include => register}/soc/ieee802154_struct.h (100%) rename components/soc/esp32h2/{include => register}/soc/interrupt_matrix_reg.h (100%) rename components/soc/esp32h2/{include => register}/soc/interrupt_matrix_struct.h (100%) rename components/soc/esp32h2/{include => register}/soc/intpri_reg.h (100%) rename components/soc/esp32h2/{include => register}/soc/intpri_struct.h (100%) rename components/soc/esp32h2/{include => register}/soc/io_mux_reg.h (99%) rename components/soc/esp32h2/{include => register}/soc/ledc_reg.h (100%) rename components/soc/esp32h2/{include => register}/soc/ledc_struct.h (100%) rename components/soc/esp32h2/{include => register}/soc/lp_analog_peri_reg.h (100%) rename components/soc/esp32h2/{include => register}/soc/lp_analog_peri_struct.h (100%) rename components/soc/esp32h2/{include => register}/soc/lp_aon_reg.h (100%) rename components/soc/esp32h2/{include => register}/soc/lp_aon_struct.h (100%) rename components/soc/esp32h2/{include => register}/soc/lp_apm0_reg.h (100%) rename components/soc/esp32h2/{include => register}/soc/lp_apm0_struct.h (100%) rename components/soc/esp32h2/{include => register}/soc/lp_apm_reg.h (100%) rename components/soc/esp32h2/{include => register}/soc/lp_apm_struct.h (100%) rename components/soc/esp32h2/{include => register}/soc/lp_clkrst_reg.h (100%) rename components/soc/esp32h2/{include => register}/soc/lp_clkrst_struct.h (100%) rename components/soc/esp32h2/{include => register}/soc/lp_timer_reg.h (100%) rename components/soc/esp32h2/{include => register}/soc/lp_timer_struct.h (100%) rename components/soc/esp32h2/{include => register}/soc/lp_wdt_reg.h (100%) rename components/soc/esp32h2/{include => register}/soc/lp_wdt_struct.h (100%) rename components/soc/esp32h2/{include => register}/soc/lpperi_reg.h (100%) rename components/soc/esp32h2/{include => register}/soc/lpperi_struct.h (100%) rename components/soc/esp32h2/{include => register}/soc/mcpwm_reg.h (99%) rename components/soc/esp32h2/{include => register}/soc/mcpwm_struct.h (99%) rename components/soc/esp32h2/{include => register}/soc/mem_monitor_reg.h (98%) rename components/soc/esp32h2/{include => register}/soc/mem_monitor_struct.h (98%) rename components/soc/esp32h2/{include => register}/soc/parl_io_reg.h (98%) rename components/soc/esp32h2/{include => register}/soc/parl_io_struct.h (98%) rename components/soc/esp32h2/{include => register}/soc/pau_reg.h (100%) rename components/soc/esp32h2/{include => register}/soc/pau_struct.h (100%) rename components/soc/esp32h2/{include => register}/soc/pcnt_reg.h (100%) rename components/soc/esp32h2/{include => register}/soc/pcnt_struct.h (100%) rename components/soc/esp32h2/{include => register}/soc/pcr_reg.h (99%) rename components/soc/esp32h2/{include => register}/soc/pcr_struct.h (98%) rename components/soc/esp32h2/{include => register}/soc/plic_reg.h (100%) rename components/soc/esp32h2/{include => register}/soc/pmu_reg.h (100%) rename components/soc/esp32h2/{include => register}/soc/pmu_struct.h (100%) rename components/soc/esp32h2/{include => register}/soc/reg_base.h (100%) rename components/soc/esp32h2/{include => register}/soc/rmt_reg.h (100%) rename components/soc/esp32h2/{include => register}/soc/rmt_struct.h (100%) rename components/soc/esp32h2/{include => register}/soc/rsa_reg.h (100%) rename components/soc/esp32h2/{include => register}/soc/rsa_struct.h (100%) rename components/soc/esp32h2/{include => register}/soc/sha_reg.h (98%) rename components/soc/esp32h2/{include => register}/soc/sha_struct.h (100%) rename components/soc/esp32h2/{include => register}/soc/soc_etm_reg.h (100%) rename components/soc/esp32h2/{include => register}/soc/soc_etm_struct.h (100%) rename components/soc/esp32h2/{include => register}/soc/spi_mem_reg.h (99%) rename components/soc/esp32h2/{include => register}/soc/spi_mem_struct.h (99%) rename components/soc/esp32h2/{include => register}/soc/spi_reg.h (99%) rename components/soc/esp32h2/{include => register}/soc/spi_struct.h (99%) rename components/soc/esp32h2/{include => register}/soc/systimer_reg.h (100%) rename components/soc/esp32h2/{include => register}/soc/systimer_struct.h (100%) rename components/soc/esp32h2/{include => register}/soc/tee_reg.h (100%) rename components/soc/esp32h2/{include => register}/soc/tee_struct.h (100%) rename components/soc/esp32h2/{include => register}/soc/timer_group_reg.h (100%) rename components/soc/esp32h2/{include => register}/soc/timer_group_struct.h (100%) rename components/soc/esp32h2/{include => register}/soc/trace_reg.h (99%) rename components/soc/esp32h2/{include => register}/soc/trace_struct.h (99%) rename components/soc/esp32h2/{include => register}/soc/twai_reg.h (100%) rename components/soc/esp32h2/{include => register}/soc/twai_struct.h (100%) rename components/soc/esp32h2/{include => register}/soc/uart_reg.h (99%) rename components/soc/esp32h2/{include => register}/soc/uart_struct.h (99%) rename components/soc/esp32h2/{include => register}/soc/uhci_reg.h (100%) rename components/soc/esp32h2/{include => register}/soc/uhci_struct.h (100%) rename components/soc/esp32h2/{include => register}/soc/usb_serial_jtag_reg.h (99%) rename components/soc/esp32h2/{include => register}/soc/usb_serial_jtag_struct.h (100%) rename components/soc/esp32h2/{include => register}/soc/xts_aes_reg.h (98%) diff --git a/components/soc/esp32c5/include/soc/usb_serial_jtag_reg.h b/components/soc/esp32c5/include/soc/usb_serial_jtag_reg.h index 5a8b1d4a06ff..255d08ed4bb9 100644 --- a/components/soc/esp32c5/include/soc/usb_serial_jtag_reg.h +++ b/components/soc/esp32c5/include/soc/usb_serial_jtag_reg.h @@ -653,7 +653,7 @@ extern "C" { #define USB_SERIAL_JTAG_TEST_ENABLE_V 0x00000001U #define USB_SERIAL_JTAG_TEST_ENABLE_S 0 /** USB_SERIAL_JTAG_TEST_USB_OE : R/W; bitpos: [1]; default: 0; - * USB pad one in test + * USB pad oen in test */ #define USB_SERIAL_JTAG_TEST_USB_OE (BIT(1)) #define USB_SERIAL_JTAG_TEST_USB_OE_M (USB_SERIAL_JTAG_TEST_USB_OE_V << USB_SERIAL_JTAG_TEST_USB_OE_S) diff --git a/components/soc/esp32c5/include/soc/usb_serial_jtag_struct.h b/components/soc/esp32c5/include/soc/usb_serial_jtag_struct.h index 21e8d68b2099..603db37ff623 100644 --- a/components/soc/esp32c5/include/soc/usb_serial_jtag_struct.h +++ b/components/soc/esp32c5/include/soc/usb_serial_jtag_struct.h @@ -130,7 +130,7 @@ typedef union { */ uint32_t test_enable:1; /** test_usb_oe : R/W; bitpos: [1]; default: 0; - * USB pad one in test + * USB pad oen in test */ uint32_t test_usb_oe:1; /** test_tx_dp : R/W; bitpos: [2]; default: 0; diff --git a/components/soc/esp32h2/include/soc/dport_access.h b/components/soc/esp32h2/include/soc/dport_access.h index bc42aa9fecce..70f97e86b482 100644 --- a/components/soc/esp32h2/include/soc/dport_access.h +++ b/components/soc/esp32h2/include/soc/dport_access.h @@ -7,8 +7,7 @@ #pragma once #include -#include "soc.h" -#include "uart_reg.h" +#include "soc/soc.h" #ifdef __cplusplus extern "C" { diff --git a/components/soc/esp32h2/include/soc/interrupt_reg.h b/components/soc/esp32h2/include/soc/interrupt_reg.h index 1eb4721c8403..4faef7949b9a 100644 --- a/components/soc/esp32h2/include/soc/interrupt_reg.h +++ b/components/soc/esp32h2/include/soc/interrupt_reg.h @@ -5,8 +5,8 @@ */ #pragma once -#include "interrupt_matrix_reg.h" -#include "plic_reg.h" +#include "soc/interrupt_matrix_reg.h" +#include "soc/plic_reg.h" #include "soc/soc_caps.h" #define INTERRUPT_PRIO_REG(n) (PLIC_MXINT0_PRI_REG + (n)*4) diff --git a/components/soc/esp32h2/include/soc/soc.h b/components/soc/esp32h2/include/soc/soc.h index f3d2b2a90417..b35b9cc15fa0 100644 --- a/components/soc/esp32h2/include/soc/soc.h +++ b/components/soc/esp32h2/include/soc/soc.h @@ -12,7 +12,7 @@ #endif #include "esp_bit_defs.h" -#include "reg_base.h" +#include "soc/reg_base.h" #define PRO_CPU_NUM (0) diff --git a/components/soc/esp32h2/include/soc/system_reg.h b/components/soc/esp32h2/include/soc/system_reg.h index 6a52d2da700b..b2cb6089eecc 100644 --- a/components/soc/esp32h2/include/soc/system_reg.h +++ b/components/soc/esp32h2/include/soc/system_reg.h @@ -5,7 +5,7 @@ */ #include "soc/hp_system_reg.h" -#include "intpri_reg.h" +#include "soc/intpri_reg.h" // ESP32H2-TODO : TODO: IDF-5720 #define SYSTEM_CPU_INTR_FROM_CPU_0_REG INTPRI_CPU_INTR_FROM_CPU_0_REG diff --git a/components/soc/esp32h2/register/soc/.gitkeep b/components/soc/esp32h2/register/soc/.gitkeep deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/components/soc/esp32h2/include/soc/aes_reg.h b/components/soc/esp32h2/register/soc/aes_reg.h similarity index 100% rename from components/soc/esp32h2/include/soc/aes_reg.h rename to components/soc/esp32h2/register/soc/aes_reg.h diff --git a/components/soc/esp32h2/include/soc/aes_struct.h b/components/soc/esp32h2/register/soc/aes_struct.h similarity index 100% rename from components/soc/esp32h2/include/soc/aes_struct.h rename to components/soc/esp32h2/register/soc/aes_struct.h diff --git a/components/soc/esp32h2/include/soc/apb_saradc_reg.h b/components/soc/esp32h2/register/soc/apb_saradc_reg.h similarity index 100% rename from components/soc/esp32h2/include/soc/apb_saradc_reg.h rename to components/soc/esp32h2/register/soc/apb_saradc_reg.h diff --git a/components/soc/esp32h2/include/soc/apb_saradc_struct.h b/components/soc/esp32h2/register/soc/apb_saradc_struct.h similarity index 100% rename from components/soc/esp32h2/include/soc/apb_saradc_struct.h rename to components/soc/esp32h2/register/soc/apb_saradc_struct.h diff --git a/components/soc/esp32h2/include/soc/assist_debug_reg.h b/components/soc/esp32h2/register/soc/assist_debug_reg.h similarity index 99% rename from components/soc/esp32h2/include/soc/assist_debug_reg.h rename to components/soc/esp32h2/register/soc/assist_debug_reg.h index 8e0426dc6f57..d2b947d9466a 100644 --- a/components/soc/esp32h2/include/soc/assist_debug_reg.h +++ b/components/soc/esp32h2/register/soc/assist_debug_reg.h @@ -92,7 +92,7 @@ extern "C" { #define ASSIST_DEBUG_CORE_0_IRAM0_EXCEPTION_MONITOR_ENA_V 0x00000001U #define ASSIST_DEBUG_CORE_0_IRAM0_EXCEPTION_MONITOR_ENA_S 10 /** ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_ENA : R/W; bitpos: [11]; default: 0; - * DBUS busy monitor enbale + * DBUS busy monitor enable */ #define ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_ENA (BIT(11)) #define ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_ENA_M (ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_ENA_V << ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_ENA_S) @@ -270,7 +270,7 @@ extern "C" { #define ASSIST_DEBUG_CORE_0_IRAM0_EXCEPTION_MONITOR_RLS_V 0x00000001U #define ASSIST_DEBUG_CORE_0_IRAM0_EXCEPTION_MONITOR_RLS_S 10 /** ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_RLS : R/W; bitpos: [11]; default: 0; - * DBUS busy monitor interrupt enbale + * DBUS busy monitor interrupt enable */ #define ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_RLS (BIT(11)) #define ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_RLS_M (ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_RLS_V << ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_RLS_S) @@ -491,7 +491,7 @@ extern "C" { */ #define ASSIST_DEBUG_CORE_0_SP_MIN_REG (DR_REG_ASSIST_DEBUG_BASE + 0x38) /** ASSIST_DEBUG_CORE_0_SP_MIN : R/W; bitpos: [31:0]; default: 0; - * core0 sp region configuration regsiter + * core0 sp region configuration register */ #define ASSIST_DEBUG_CORE_0_SP_MIN 0xFFFFFFFFU #define ASSIST_DEBUG_CORE_0_SP_MIN_M (ASSIST_DEBUG_CORE_0_SP_MIN_V << ASSIST_DEBUG_CORE_0_SP_MIN_S) @@ -515,7 +515,7 @@ extern "C" { */ #define ASSIST_DEBUG_CORE_0_SP_PC_REG (DR_REG_ASSIST_DEBUG_BASE + 0x40) /** ASSIST_DEBUG_CORE_0_SP_PC : RO; bitpos: [31:0]; default: 0; - * This regsiter stores the PC when trigger stack monitor. + * This register stores the PC when trigger stack monitor. */ #define ASSIST_DEBUG_CORE_0_SP_PC 0xFFFFFFFFU #define ASSIST_DEBUG_CORE_0_SP_PC_M (ASSIST_DEBUG_CORE_0_SP_PC_V << ASSIST_DEBUG_CORE_0_SP_PC_S) @@ -542,7 +542,7 @@ extern "C" { #define ASSIST_DEBUG_CORE_0_RCD_PDEBUGEN_S 1 /** ASSIST_DEBUG_CORE_0_RCD_PDEBUGPC_REG register - * record status regsiter + * record status register */ #define ASSIST_DEBUG_CORE_0_RCD_PDEBUGPC_REG (DR_REG_ASSIST_DEBUG_BASE + 0x48) /** ASSIST_DEBUG_CORE_0_RCD_PDEBUGPC : RO; bitpos: [31:0]; default: 0; @@ -554,7 +554,7 @@ extern "C" { #define ASSIST_DEBUG_CORE_0_RCD_PDEBUGPC_S 0 /** ASSIST_DEBUG_CORE_0_RCD_PDEBUGSP_REG register - * record status regsiter + * record status register */ #define ASSIST_DEBUG_CORE_0_RCD_PDEBUGSP_REG (DR_REG_ASSIST_DEBUG_BASE + 0x4c) /** ASSIST_DEBUG_CORE_0_RCD_PDEBUGSP : RO; bitpos: [31:0]; default: 0; diff --git a/components/soc/esp32h2/include/soc/assist_debug_struct.h b/components/soc/esp32h2/register/soc/assist_debug_struct.h similarity index 98% rename from components/soc/esp32h2/include/soc/assist_debug_struct.h rename to components/soc/esp32h2/register/soc/assist_debug_struct.h index c03f57922921..62323e8dbc1c 100644 --- a/components/soc/esp32h2/include/soc/assist_debug_struct.h +++ b/components/soc/esp32h2/register/soc/assist_debug_struct.h @@ -61,7 +61,7 @@ typedef union { */ uint32_t core_0_iram0_exception_monitor_ena:1; /** core_0_dram0_exception_monitor_ena : R/W; bitpos: [11]; default: 0; - * DBUS busy monitor enbale + * DBUS busy monitor enable */ uint32_t core_0_dram0_exception_monitor_ena:1; uint32_t reserved_12:20; @@ -205,7 +205,7 @@ typedef union { typedef union { struct { /** core_0_sp_min : R/W; bitpos: [31:0]; default: 0; - * core0 sp region configuration regsiter + * core0 sp region configuration register */ uint32_t core_0_sp_min:32; }; @@ -231,7 +231,7 @@ typedef union { typedef union { struct { /** core_0_sp_pc : RO; bitpos: [31:0]; default: 0; - * This regsiter stores the PC when trigger stack monitor. + * This register stores the PC when trigger stack monitor. */ uint32_t core_0_sp_pc:32; }; @@ -348,7 +348,7 @@ typedef union { */ uint32_t core_0_iram0_exception_monitor_rls:1; /** core_0_dram0_exception_monitor_rls : R/W; bitpos: [11]; default: 0; - * DBUS busy monitor interrupt enbale + * DBUS busy monitor interrupt enable */ uint32_t core_0_dram0_exception_monitor_rls:1; uint32_t reserved_12:20; @@ -415,7 +415,7 @@ typedef union { } assist_debug_core_0_intr_clr_reg_t; -/** Group: pc reording configuration register */ +/** Group: pc recording configuration register */ /** Type of core_0_rcd_en register * record enable configuration register */ @@ -435,9 +435,9 @@ typedef union { } assist_debug_core_0_rcd_en_reg_t; -/** Group: pc reording status register */ +/** Group: pc recording status register */ /** Type of core_0_rcd_pdebugpc register - * record status regsiter + * record status register */ typedef union { struct { @@ -450,7 +450,7 @@ typedef union { } assist_debug_core_0_rcd_pdebugpc_reg_t; /** Type of core_0_rcd_pdebugsp register - * record status regsiter + * record status register */ typedef union { struct { @@ -463,7 +463,7 @@ typedef union { } assist_debug_core_0_rcd_pdebugsp_reg_t; -/** Group: exception monitor regsiter */ +/** Group: exception monitor register */ /** Type of core_0_iram0_exception_monitor_0 register * exception monitor status register0 */ diff --git a/components/soc/esp32h2/include/soc/cache_reg.h b/components/soc/esp32h2/register/soc/cache_reg.h similarity index 99% rename from components/soc/esp32h2/include/soc/cache_reg.h rename to components/soc/esp32h2/register/soc/cache_reg.h index d811eda10af9..30181edf326d 100644 --- a/components/soc/esp32h2/include/soc/cache_reg.h +++ b/components/soc/esp32h2/register/soc/cache_reg.h @@ -4185,7 +4185,7 @@ extern "C" { #define CACHE_L1_UNALLOCATE_BUFFER_CLEAR_REG (DR_REG_CACHE_BASE + 0x244) /** CACHE_L1_ICACHE0_UNALLOC_CLR : HRO; bitpos: [0]; default: 0; * The bit is used to clear the unallocate request buffer of l1 icache0 where the - * unallocate request is responsed but not completed. + * unallocate request is responded but not completed. */ #define CACHE_L1_ICACHE0_UNALLOC_CLR (BIT(0)) #define CACHE_L1_ICACHE0_UNALLOC_CLR_M (CACHE_L1_ICACHE0_UNALLOC_CLR_V << CACHE_L1_ICACHE0_UNALLOC_CLR_S) @@ -4193,7 +4193,7 @@ extern "C" { #define CACHE_L1_ICACHE0_UNALLOC_CLR_S 0 /** CACHE_L1_ICACHE1_UNALLOC_CLR : HRO; bitpos: [1]; default: 0; * The bit is used to clear the unallocate request buffer of l1 icache1 where the - * unallocate request is responsed but not completed. + * unallocate request is responded but not completed. */ #define CACHE_L1_ICACHE1_UNALLOC_CLR (BIT(1)) #define CACHE_L1_ICACHE1_UNALLOC_CLR_M (CACHE_L1_ICACHE1_UNALLOC_CLR_V << CACHE_L1_ICACHE1_UNALLOC_CLR_S) @@ -4215,7 +4215,7 @@ extern "C" { #define CACHE_L1_ICACHE3_UNALLOC_CLR_S 3 /** CACHE_L1_CACHE_UNALLOC_CLR : R/W; bitpos: [4]; default: 0; * The bit is used to clear the unallocate request buffer of l1 cache where the - * unallocate request is responsed but not completed. + * unallocate request is responded but not completed. */ #define CACHE_L1_CACHE_UNALLOC_CLR (BIT(4)) #define CACHE_L1_CACHE_UNALLOC_CLR_M (CACHE_L1_CACHE_UNALLOC_CLR_V << CACHE_L1_CACHE_UNALLOC_CLR_S) @@ -6025,7 +6025,7 @@ extern "C" { #define CACHE_L2_UNALLOCATE_BUFFER_CLEAR_REG (DR_REG_CACHE_BASE + 0x390) /** CACHE_L2_CACHE_UNALLOC_CLR : HRO; bitpos: [5]; default: 0; * The bit is used to clear the unallocate request buffer of l2 icache where the - * unallocate request is responsed but not completed. + * unallocate request is responded but not completed. */ #define CACHE_L2_CACHE_UNALLOC_CLR (BIT(5)) #define CACHE_L2_CACHE_UNALLOC_CLR_M (CACHE_L2_CACHE_UNALLOC_CLR_V << CACHE_L2_CACHE_UNALLOC_CLR_S) diff --git a/components/soc/esp32h2/include/soc/cache_struct.h b/components/soc/esp32h2/register/soc/cache_struct.h similarity index 99% rename from components/soc/esp32h2/include/soc/cache_struct.h rename to components/soc/esp32h2/register/soc/cache_struct.h index 7398f887ab67..32ec8a069c75 100644 --- a/components/soc/esp32h2/include/soc/cache_struct.h +++ b/components/soc/esp32h2/register/soc/cache_struct.h @@ -5115,12 +5115,12 @@ typedef union { struct { /** l1_icache0_unalloc_clr : HRO; bitpos: [0]; default: 0; * The bit is used to clear the unallocate request buffer of l1 icache0 where the - * unallocate request is responsed but not completed. + * unallocate request is responded but not completed. */ uint32_t l1_icache0_unalloc_clr:1; /** l1_icache1_unalloc_clr : HRO; bitpos: [1]; default: 0; * The bit is used to clear the unallocate request buffer of l1 icache1 where the - * unallocate request is responsed but not completed. + * unallocate request is responded but not completed. */ uint32_t l1_icache1_unalloc_clr:1; /** l1_icache2_unalloc_clr : HRO; bitpos: [2]; default: 0; @@ -5133,7 +5133,7 @@ typedef union { uint32_t l1_icache3_unalloc_clr:1; /** l1_cache_unalloc_clr : R/W; bitpos: [4]; default: 0; * The bit is used to clear the unallocate request buffer of l1 cache where the - * unallocate request is responsed but not completed. + * unallocate request is responded but not completed. */ uint32_t l1_cache_unalloc_clr:1; uint32_t reserved_5:27; @@ -5149,7 +5149,7 @@ typedef union { uint32_t reserved_0:5; /** l2_cache_unalloc_clr : HRO; bitpos: [5]; default: 0; * The bit is used to clear the unallocate request buffer of l2 icache where the - * unallocate request is responsed but not completed. + * unallocate request is responded but not completed. */ uint32_t l2_cache_unalloc_clr:1; uint32_t reserved_6:26; diff --git a/components/soc/esp32h2/include/soc/clint_reg.h b/components/soc/esp32h2/register/soc/clint_reg.h similarity index 100% rename from components/soc/esp32h2/include/soc/clint_reg.h rename to components/soc/esp32h2/register/soc/clint_reg.h diff --git a/components/soc/esp32h2/include/soc/ds_reg.h b/components/soc/esp32h2/register/soc/ds_reg.h similarity index 100% rename from components/soc/esp32h2/include/soc/ds_reg.h rename to components/soc/esp32h2/register/soc/ds_reg.h diff --git a/components/soc/esp32h2/include/soc/ds_struct.h b/components/soc/esp32h2/register/soc/ds_struct.h similarity index 100% rename from components/soc/esp32h2/include/soc/ds_struct.h rename to components/soc/esp32h2/register/soc/ds_struct.h diff --git a/components/soc/esp32h2/include/soc/ecc_mult_reg.h b/components/soc/esp32h2/register/soc/ecc_mult_reg.h similarity index 97% rename from components/soc/esp32h2/include/soc/ecc_mult_reg.h rename to components/soc/esp32h2/register/soc/ecc_mult_reg.h index 5d7fa6c1c30b..bd6084940fe0 100644 --- a/components/soc/esp32h2/include/soc/ecc_mult_reg.h +++ b/components/soc/esp32h2/register/soc/ecc_mult_reg.h @@ -64,7 +64,7 @@ extern "C" { */ #define ECC_MULT_CONF_REG (DR_REG_ECC_MULT_BASE + 0x1c) /** ECC_MULT_START : R/W/SC; bitpos: [0]; default: 0; - * Write 1 to start caculation of ECC Accelerator. This bit will be self-cleared after + * Write 1 to start calculation of ECC Accelerator. This bit will be self-cleared after * the caculatrion is done. */ #define ECC_MULT_START (BIT(0)) @@ -97,7 +97,7 @@ extern "C" { * The work mode bits of ECC Accelerator. 0: Point Mult Mode. 1: Reserved. 2: Point * verification mode. 3: Point Verif+mult mode. 4: Jacobian Point Mult Mode. 5: Point * Add Mode. 6: Jacobian Point Verification Mode. 7: Point Verif + Jacobian Mult Mode. - * 8: mod addition. 9. mod substraction. 10: mod multiplication. 11: mod division. + * 8: mod addition. 9. mod subtraction. 10: mod multiplication. 11: mod division. */ #define ECC_MULT_WORK_MODE 0x0000000FU #define ECC_MULT_WORK_MODE_M (ECC_MULT_WORK_MODE_V << ECC_MULT_WORK_MODE_S) diff --git a/components/soc/esp32h2/include/soc/ecc_mult_struct.h b/components/soc/esp32h2/register/soc/ecc_mult_struct.h similarity index 96% rename from components/soc/esp32h2/include/soc/ecc_mult_struct.h rename to components/soc/esp32h2/register/soc/ecc_mult_struct.h index f1596693a8d0..a9f458c5d968 100644 --- a/components/soc/esp32h2/include/soc/ecc_mult_struct.h +++ b/components/soc/esp32h2/register/soc/ecc_mult_struct.h @@ -79,7 +79,7 @@ typedef union { typedef union { struct { /** start : R/W/SC; bitpos: [0]; default: 0; - * Write 1 to start caculation of ECC Accelerator. This bit will be self-cleared after + * Write 1 to start calculation of ECC Accelerator. This bit will be self-cleared after * the caculatrion is done. */ uint32_t start:1; @@ -100,7 +100,7 @@ typedef union { * The work mode bits of ECC Accelerator. 0: Point Mult Mode. 1: Reserved. 2: Point * verification mode. 3: Point Verif+mult mode. 4: Jacobian Point Mult Mode. 5: Point * Add Mode. 6: Jacobian Point Verification Mode. 7: Point Verif + Jacobian Mult Mode. - * 8: mod addition. 9. mod substraction. 10: mod multiplication. 11: mod division. + * 8: mod addition. 9. mod subtraction. 10: mod multiplication. 11: mod division. */ uint32_t work_mode:4; /** security_mode : R/W; bitpos: [8]; default: 0; diff --git a/components/soc/esp32h2/include/soc/ecdsa_reg.h b/components/soc/esp32h2/register/soc/ecdsa_reg.h similarity index 97% rename from components/soc/esp32h2/include/soc/ecdsa_reg.h rename to components/soc/esp32h2/register/soc/ecdsa_reg.h index 62f2e1ad96d1..88f19ad16ce0 100644 --- a/components/soc/esp32h2/include/soc/ecdsa_reg.h +++ b/components/soc/esp32h2/register/soc/ecdsa_reg.h @@ -140,7 +140,7 @@ extern "C" { */ #define ECDSA_START_REG (DR_REG_ECDSA_BASE + 0x1c) /** ECDSA_START : WT; bitpos: [0]; default: 0; - * Write 1 to start caculation of ECDSA Accelerator. This bit will be self-cleared + * Write 1 to start calculation of ECDSA Accelerator. This bit will be self-cleared * after configuration. */ #define ECDSA_START (BIT(0)) @@ -220,7 +220,7 @@ extern "C" { */ #define ECDSA_SHA_START_REG (DR_REG_ECDSA_BASE + 0x210) /** ECDSA_SHA_START : WT; bitpos: [0]; default: 0; - * Write 1 to start the first caculation of SHA Calculator in ECDSA Accelerator. This + * Write 1 to start the first calculation of SHA Calculator in ECDSA Accelerator. This * bit will be self-cleared after configuration. */ #define ECDSA_SHA_START (BIT(0)) @@ -233,7 +233,7 @@ extern "C" { */ #define ECDSA_SHA_CONTINUE_REG (DR_REG_ECDSA_BASE + 0x214) /** ECDSA_SHA_CONTINUE : WT; bitpos: [0]; default: 0; - * Write 1 to start the latter caculation of SHA Calculator in ECDSA Accelerator. This + * Write 1 to start the latter calculation of SHA Calculator in ECDSA Accelerator. This * bit will be self-cleared after configuration. */ #define ECDSA_SHA_CONTINUE (BIT(0)) diff --git a/components/soc/esp32h2/include/soc/ecdsa_struct.h b/components/soc/esp32h2/register/soc/ecdsa_struct.h similarity index 97% rename from components/soc/esp32h2/include/soc/ecdsa_struct.h rename to components/soc/esp32h2/register/soc/ecdsa_struct.h index dcdd806f8ff5..ca9076e5526c 100644 --- a/components/soc/esp32h2/include/soc/ecdsa_struct.h +++ b/components/soc/esp32h2/register/soc/ecdsa_struct.h @@ -48,7 +48,7 @@ typedef union { typedef union { struct { /** start : WT; bitpos: [0]; default: 0; - * Write 1 to start caculation of ECDSA Accelerator. This bit will be self-cleared + * Write 1 to start calculation of ECDSA Accelerator. This bit will be self-cleared * after configuration. */ uint32_t start:1; @@ -214,7 +214,7 @@ typedef union { typedef union { struct { /** sha_start : WT; bitpos: [0]; default: 0; - * Write 1 to start the first caculation of SHA Calculator in ECDSA Accelerator. This + * Write 1 to start the first calculation of SHA Calculator in ECDSA Accelerator. This * bit will be self-cleared after configuration. */ uint32_t sha_start:1; @@ -229,7 +229,7 @@ typedef union { typedef union { struct { /** sha_continue : WT; bitpos: [0]; default: 0; - * Write 1 to start the latter caculation of SHA Calculator in ECDSA Accelerator. This + * Write 1 to start the latter calculation of SHA Calculator in ECDSA Accelerator. This * bit will be self-cleared after configuration. */ uint32_t sha_continue:1; diff --git a/components/soc/esp32h2/include/soc/efuse_reg.h b/components/soc/esp32h2/register/soc/efuse_reg.h similarity index 99% rename from components/soc/esp32h2/include/soc/efuse_reg.h rename to components/soc/esp32h2/register/soc/efuse_reg.h index 532514d58761..915c37d84817 100644 --- a/components/soc/esp32h2/include/soc/efuse_reg.h +++ b/components/soc/esp32h2/register/soc/efuse_reg.h @@ -7,7 +7,7 @@ #include #include "soc/soc.h" -#include "efuse_defs.h" +#include "soc/efuse_defs.h" #ifdef __cplusplus extern "C" { #endif @@ -261,14 +261,14 @@ extern "C" { #define EFUSE_DIS_DOWNLOAD_MANUAL_ENCRYPT_V 0x00000001U #define EFUSE_DIS_DOWNLOAD_MANUAL_ENCRYPT_S 20 /** EFUSE_USB_DREFH : RO; bitpos: [22:21]; default: 0; - * Represents the single-end input threhold vrefh, 1.76 V to 2 V with step of 80 mV. + * Represents the single-end input threshold vrefh, 1.76 V to 2 V with step of 80 mV. */ #define EFUSE_USB_DREFH 0x00000003U #define EFUSE_USB_DREFH_M (EFUSE_USB_DREFH_V << EFUSE_USB_DREFH_S) #define EFUSE_USB_DREFH_V 0x00000003U #define EFUSE_USB_DREFH_S 21 /** EFUSE_USB_DREFL : RO; bitpos: [24:23]; default: 0; - * Represents the single-end input threhold vrefl, 1.76 V to 2 V with step of 80 mV. + * Represents the single-end input threshold vrefl, 1.76 V to 2 V with step of 80 mV. */ #define EFUSE_USB_DREFL 0x00000003U #define EFUSE_USB_DREFL_M (EFUSE_USB_DREFL_V << EFUSE_USB_DREFL_S) @@ -2355,7 +2355,7 @@ extern "C" { #define EFUSE_CLK_EN_S 16 /** EFUSE_CONF_REG register - * eFuse operation mode configuraiton register + * eFuse operation mode configuration register */ #define EFUSE_CONF_REG (DR_REG_EFUSE_BASE + 0x1cc) /** EFUSE_OP_CODE : R/W; bitpos: [15:0]; default: 0; diff --git a/components/soc/esp32h2/include/soc/efuse_struct.h b/components/soc/esp32h2/register/soc/efuse_struct.h similarity index 99% rename from components/soc/esp32h2/include/soc/efuse_struct.h rename to components/soc/esp32h2/register/soc/efuse_struct.h index c64eaa140c8d..ab4c17e47501 100644 --- a/components/soc/esp32h2/include/soc/efuse_struct.h +++ b/components/soc/esp32h2/register/soc/efuse_struct.h @@ -236,11 +236,11 @@ typedef union { */ uint32_t dis_download_manual_encrypt:1; /** usb_drefh : RO; bitpos: [22:21]; default: 0; - * Represents the single-end input threhold vrefh, 1.76 V to 2 V with step of 80 mV. + * Represents the single-end input threshold vrefh, 1.76 V to 2 V with step of 80 mV. */ uint32_t usb_drefh:2; /** usb_drefl : RO; bitpos: [24:23]; default: 0; - * Represents the single-end input threhold vrefl, 1.76 V to 2 V with step of 80 mV. + * Represents the single-end input threshold vrefl, 1.76 V to 2 V with step of 80 mV. */ uint32_t usb_drefl:2; /** usb_exchg_pins : RO; bitpos: [25]; default: 0; @@ -2007,7 +2007,7 @@ typedef union { } efuse_clk_reg_t; /** Type of conf register - * eFuse operation mode configuraiton register + * eFuse operation mode configuration register */ typedef union { struct { diff --git a/components/soc/esp32h2/include/soc/extmem_reg.h b/components/soc/esp32h2/register/soc/extmem_reg.h similarity index 98% rename from components/soc/esp32h2/include/soc/extmem_reg.h rename to components/soc/esp32h2/register/soc/extmem_reg.h index b53ab4673141..c277ae582c24 100644 --- a/components/soc/esp32h2/include/soc/extmem_reg.h +++ b/components/soc/esp32h2/register/soc/extmem_reg.h @@ -10,7 +10,7 @@ #ifdef __cplusplus extern "C" { #endif -#include "soc.h" +#include "soc/soc.h" #define CACHE_L1_CACHE_CTRL_REG (DR_REG_CACHE_BASE + 0x4) /* CACHE_L1_CACHE_SHUT_BUS1 : R/W ;bitpos:[1] ;default: 1'h0 ; */ @@ -250,8 +250,8 @@ ould be used together with CACHE_LOCK_ADDR_REG.*/ #define CACHE_SYNC_DONE_S 4 /* CACHE_WRITEBACK_INVALIDATE_ENA : R/W/SC ;bitpos:[3] ;default: 1'h0 ; */ /*description: The bit is used to enable writeback-invalidate operation. It will be cleared by -hardware after writeback-invalidate operation done. Note that this bit and the o -ther sync-bits (invalidate_ena, clean_ena, writeback_ena) are mutually exclusive +hardware after writeback-invalidate operation done. Note that this bit and the +other sync-bits (invalidate_ena, clean_ena, writeback_ena) are mutually exclusive , that is, those bits can not be set to 1 at the same time..*/ #define CACHE_WRITEBACK_INVALIDATE_ENA (BIT(3)) #define CACHE_WRITEBACK_INVALIDATE_ENA_M (BIT(3)) @@ -269,16 +269,16 @@ those bits can not be set to 1 at the same time..*/ /* CACHE_CLEAN_ENA : R/W/SC ;bitpos:[1] ;default: 1'h0 ; */ /*description: The bit is used to enable clean operation. It will be cleared by hardware after clean operation done. Note that this bit and the other sync-bits (invalidate_ena -, writeback_ena, writeback_invalidate_ena) are mutually exclusive, that is, thos -e bits can not be set to 1 at the same time..*/ +, writeback_ena, writeback_invalidate_ena) are mutually exclusive, that is, those +bits can not be set to 1 at the same time..*/ #define CACHE_CLEAN_ENA (BIT(1)) #define CACHE_CLEAN_ENA_M (BIT(1)) #define CACHE_CLEAN_ENA_V 0x1 #define CACHE_CLEAN_ENA_S 1 /* CACHE_INVALIDATE_ENA : R/W/SC ;bitpos:[0] ;default: 1'h1 ; */ /*description: The bit is used to enable invalidate operation. It will be cleared by hardware a -fter invalidate operation done. Note that this bit and the other sync-bits (clea -n_ena, writeback_ena, writeback_invalidate_ena) are mutually exclusive, that is, +after invalidate operation done. Note that this bit and the other sync-bits (clean_ena, +writeback_ena, writeback_invalidate_ena) are mutually exclusive, that is, those bits can not be set to 1 at the same time..*/ #define CACHE_INVALIDATE_ENA (BIT(0)) #define CACHE_INVALIDATE_ENA_M (BIT(0)) @@ -499,15 +499,15 @@ SCT3_ADDR and L1_CACHE_AUTOLOAD_SCT3_ENA..*/ #define CACHE_L1_CACHE_ACS_CNT_INT_CLR_REG (DR_REG_CACHE_BASE + 0x15C) /* CACHE_L1_BUS1_OVF_INT_CLR : WT ;bitpos:[5] ;default: 1'b0 ; */ -/*description: The bit is used to clear counters overflow interrupt and counters in L1-DCache d -ue to bus1 accesses L1-DCache..*/ +/*description: The bit is used to clear counters overflow interrupt and counters in L1-DCache +due to bus1 accesses L1-DCache..*/ #define CACHE_L1_BUS1_OVF_INT_CLR (BIT(5)) #define CACHE_L1_BUS1_OVF_INT_CLR_M (BIT(5)) #define CACHE_L1_BUS1_OVF_INT_CLR_V 0x1 #define CACHE_L1_BUS1_OVF_INT_CLR_S 5 /* CACHE_L1_BUS0_OVF_INT_CLR : WT ;bitpos:[4] ;default: 1'b0 ; */ -/*description: The bit is used to clear counters overflow interrupt and counters in L1-DCache d -ue to bus0 accesses L1-DCache..*/ +/*description: The bit is used to clear counters overflow interrupt and counters in L1-DCache +due to bus0 accesses L1-DCache..*/ #define CACHE_L1_BUS0_OVF_INT_CLR (BIT(4)) #define CACHE_L1_BUS0_OVF_INT_CLR_M (BIT(4)) #define CACHE_L1_BUS0_OVF_INT_CLR_V 0x1 @@ -573,8 +573,8 @@ o cpu accesses L1-DCache..*/ #define CACHE_L1_CACHE_ACS_FAIL_INT_ST_REG (DR_REG_CACHE_BASE + 0x174) /* CACHE_L1_CACHE_FAIL_INT_ST : RO ;bitpos:[4] ;default: 1'b0 ; */ -/*description: The bit indicates the interrupt status of access fail that occurs in L1-DCache d -ue to cpu accesses L1-DCache..*/ +/*description: The bit indicates the interrupt status of access fail that occurs in L1-DCache +due to cpu accesses L1-DCache..*/ #define CACHE_L1_CACHE_FAIL_INT_ST (BIT(4)) #define CACHE_L1_CACHE_FAIL_INT_ST_M (BIT(4)) #define CACHE_L1_CACHE_FAIL_INT_ST_V 0x1 @@ -787,7 +787,7 @@ ror occurs..*/ #define CACHE_SYNC_ERR_INT_ST_V 0x1 #define CACHE_SYNC_ERR_INT_ST_S 13 /* CACHE_L1_CACHE_PLD_ERR_INT_ST : RO ;bitpos:[11] ;default: 1'b0 ; */ -/*description: The bit indicates the status of the interrupt of L1-Cache preload-operation erro +/*description: The bit indicates the status of the interrupt of L1-Cache preload-operation error r..*/ #define CACHE_L1_CACHE_PLD_ERR_INT_ST (BIT(11)) #define CACHE_L1_CACHE_PLD_ERR_INT_ST_M (BIT(11)) @@ -825,7 +825,7 @@ load-operation is done..*/ #define CACHE_L1_CACHE_SYNC_RST_CTRL_REG (DR_REG_CACHE_BASE + 0x238) /* CACHE_L1_CACHE_SYNC_RST : R/W ;bitpos:[4] ;default: 1'b0 ; */ -/*description: set this bit to reset sync-logic inside L1-Cache. Recommend that this should onl +/*description: set this bit to reset sync-logic inside L1-Cache. Recommend that this should only y be used to initialize sync-logic when some fatal error of sync-logic occurs..*/ #define CACHE_L1_CACHE_SYNC_RST (BIT(4)) #define CACHE_L1_CACHE_SYNC_RST_M (BIT(4)) @@ -855,7 +855,7 @@ rks in L1-Cache..*/ #define CACHE_L1_UNALLOCATE_BUFFER_CLEAR_REG (DR_REG_CACHE_BASE + 0x244) /* CACHE_L1_CACHE_UNALLOC_CLR : R/W ;bitpos:[4] ;default: 1'b0 ; */ /*description: The bit is used to clear the unallocate request buffer of l1 cache where the una -llocate request is responsed but not completed..*/ +llocate request is responded but not completed..*/ #define CACHE_L1_CACHE_UNALLOC_CLR (BIT(4)) #define CACHE_L1_CACHE_UNALLOC_CLR_M (BIT(4)) #define CACHE_L1_CACHE_UNALLOC_CLR_V 0x1 @@ -870,7 +870,7 @@ th the others fields inside this register..*/ #define CACHE_L1_CACHE_MEM_OBJECT_V 0x1 #define CACHE_L1_CACHE_MEM_OBJECT_S 10 /* CACHE_L1_CACHE_TAG_OBJECT : R/W ;bitpos:[4] ;default: 1'b0 ; */ -/*description: Set this bit to set L1-Cache tag memory as object. This bit should be onehot wit +/*description: Set this bit to set L1-Cache tag memory as object. This bit should be onehot with h the others fields inside this register..*/ #define CACHE_L1_CACHE_TAG_OBJECT (BIT(4)) #define CACHE_L1_CACHE_TAG_OBJECT_M (BIT(4)) @@ -888,8 +888,8 @@ h the others fields inside this register..*/ #define CACHE_L1_CACHE_VADDR_REG (DR_REG_CACHE_BASE + 0x250) /* CACHE_L1_CACHE_VADDR : R/W ;bitpos:[31:0] ;default: 32'h40000000 ; */ -/*description: Those bits stores the virtual address which will decide where inside the specifi -ed tag memory object will be accessed..*/ +/*description: Those bits stores the virtual address which will decide where inside the specified +tag memory object will be accessed..*/ #define CACHE_L1_CACHE_VADDR 0xFFFFFFFF #define CACHE_L1_CACHE_VADDR_M ((CACHE_L1_CACHE_VADDR_V)<<(CACHE_L1_CACHE_VADDR_S)) #define CACHE_L1_CACHE_VADDR_V 0xFFFFFFFF diff --git a/components/soc/esp32h2/include/soc/extmem_struct.h b/components/soc/esp32h2/register/soc/extmem_struct.h similarity index 99% rename from components/soc/esp32h2/include/soc/extmem_struct.h rename to components/soc/esp32h2/register/soc/extmem_struct.h index d309e09235e4..d43c5fcee3d7 100644 --- a/components/soc/esp32h2/include/soc/extmem_struct.h +++ b/components/soc/esp32h2/register/soc/extmem_struct.h @@ -5115,12 +5115,12 @@ typedef union { struct { /** l1_icache0_unalloc_clr : HRO; bitpos: [0]; default: 0; * The bit is used to clear the unallocate request buffer of l1 icache0 where the - * unallocate request is responsed but not completed. + * unallocate request is responded but not completed. */ uint32_t l1_icache0_unalloc_clr:1; /** l1_icache1_unalloc_clr : HRO; bitpos: [1]; default: 0; * The bit is used to clear the unallocate request buffer of l1 icache1 where the - * unallocate request is responsed but not completed. + * unallocate request is responded but not completed. */ uint32_t l1_icache1_unalloc_clr:1; /** l1_icache2_unalloc_clr : HRO; bitpos: [2]; default: 0; @@ -5133,7 +5133,7 @@ typedef union { uint32_t l1_icache3_unalloc_clr:1; /** l1_cache_unalloc_clr : R/W; bitpos: [4]; default: 0; * The bit is used to clear the unallocate request buffer of l1 cache where the - * unallocate request is responsed but not completed. + * unallocate request is responded but not completed. */ uint32_t l1_cache_unalloc_clr:1; uint32_t reserved_5:27; @@ -5149,7 +5149,7 @@ typedef union { uint32_t reserved_0:5; /** l2_cache_unalloc_clr : HRO; bitpos: [5]; default: 0; * The bit is used to clear the unallocate request buffer of l2 icache where the - * unallocate request is responsed but not completed. + * unallocate request is responded but not completed. */ uint32_t l2_cache_unalloc_clr:1; uint32_t reserved_6:26; diff --git a/components/soc/esp32h2/include/soc/gdma_reg.h b/components/soc/esp32h2/register/soc/gdma_reg.h similarity index 100% rename from components/soc/esp32h2/include/soc/gdma_reg.h rename to components/soc/esp32h2/register/soc/gdma_reg.h diff --git a/components/soc/esp32h2/include/soc/gdma_struct.h b/components/soc/esp32h2/register/soc/gdma_struct.h similarity index 100% rename from components/soc/esp32h2/include/soc/gdma_struct.h rename to components/soc/esp32h2/register/soc/gdma_struct.h diff --git a/components/soc/esp32h2/include/soc/gpio_ext_reg.h b/components/soc/esp32h2/register/soc/gpio_ext_reg.h similarity index 100% rename from components/soc/esp32h2/include/soc/gpio_ext_reg.h rename to components/soc/esp32h2/register/soc/gpio_ext_reg.h diff --git a/components/soc/esp32h2/include/soc/gpio_ext_struct.h b/components/soc/esp32h2/register/soc/gpio_ext_struct.h similarity index 100% rename from components/soc/esp32h2/include/soc/gpio_ext_struct.h rename to components/soc/esp32h2/register/soc/gpio_ext_struct.h diff --git a/components/soc/esp32h2/include/soc/gpio_reg.h b/components/soc/esp32h2/register/soc/gpio_reg.h similarity index 100% rename from components/soc/esp32h2/include/soc/gpio_reg.h rename to components/soc/esp32h2/register/soc/gpio_reg.h diff --git a/components/soc/esp32h2/include/soc/gpio_struct.h b/components/soc/esp32h2/register/soc/gpio_struct.h similarity index 100% rename from components/soc/esp32h2/include/soc/gpio_struct.h rename to components/soc/esp32h2/register/soc/gpio_struct.h diff --git a/components/soc/esp32h2/include/soc/hmac_reg.h b/components/soc/esp32h2/register/soc/hmac_reg.h similarity index 100% rename from components/soc/esp32h2/include/soc/hmac_reg.h rename to components/soc/esp32h2/register/soc/hmac_reg.h diff --git a/components/soc/esp32h2/include/soc/hmac_struct.h b/components/soc/esp32h2/register/soc/hmac_struct.h similarity index 100% rename from components/soc/esp32h2/include/soc/hmac_struct.h rename to components/soc/esp32h2/register/soc/hmac_struct.h diff --git a/components/soc/esp32h2/include/soc/hp_apm_reg.h b/components/soc/esp32h2/register/soc/hp_apm_reg.h similarity index 100% rename from components/soc/esp32h2/include/soc/hp_apm_reg.h rename to components/soc/esp32h2/register/soc/hp_apm_reg.h diff --git a/components/soc/esp32h2/include/soc/hp_apm_struct.h b/components/soc/esp32h2/register/soc/hp_apm_struct.h similarity index 100% rename from components/soc/esp32h2/include/soc/hp_apm_struct.h rename to components/soc/esp32h2/register/soc/hp_apm_struct.h diff --git a/components/soc/esp32h2/include/soc/hp_system_reg.h b/components/soc/esp32h2/register/soc/hp_system_reg.h similarity index 99% rename from components/soc/esp32h2/include/soc/hp_system_reg.h rename to components/soc/esp32h2/register/soc/hp_system_reg.h index 1660509115eb..842750731d83 100644 --- a/components/soc/esp32h2/include/soc/hp_system_reg.h +++ b/components/soc/esp32h2/register/soc/hp_system_reg.h @@ -78,7 +78,7 @@ extern "C" { * 0: anti-DPA disable. 1~3: anti-DPA enable with different security level. The larger * the number, the stronger the ability to resist DPA attacks and the higher the * security level, but it will increase the computational overhead of the hardware - * crypto-accelerators. Only avaliable if HP_SYSTEM_SEC_DPA_CFG_SEL is 0. + * crypto-accelerators. Only available if HP_SYSTEM_SEC_DPA_CFG_SEL is 0. */ #define HP_SYSTEM_SEC_DPA_LEVEL 0x00000003U #define HP_SYSTEM_SEC_DPA_LEVEL_M (HP_SYSTEM_SEC_DPA_LEVEL_V << HP_SYSTEM_SEC_DPA_LEVEL_S) diff --git a/components/soc/esp32h2/include/soc/hp_system_struct.h b/components/soc/esp32h2/register/soc/hp_system_struct.h similarity index 99% rename from components/soc/esp32h2/include/soc/hp_system_struct.h rename to components/soc/esp32h2/register/soc/hp_system_struct.h index 575349312bc0..4dcaf9550036 100644 --- a/components/soc/esp32h2/include/soc/hp_system_struct.h +++ b/components/soc/esp32h2/register/soc/hp_system_struct.h @@ -70,7 +70,7 @@ typedef union { * 0: anti-DPA disable. 1~3: anti-DPA enable with different security level. The larger * the number, the stronger the ability to resist DPA attacks and the higher the * security level, but it will increase the computational overhead of the hardware - * crypto-accelerators. Only avaliable if HP_SYS_SEC_DPA_CFG_SEL is 0. + * crypto-accelerators. Only available if HP_SYS_SEC_DPA_CFG_SEL is 0. */ uint32_t sec_dpa_level:2; /** sec_dpa_cfg_sel : R/W; bitpos: [2]; default: 0; diff --git a/components/soc/esp32h2/include/soc/i2c_ana_mst_reg.h b/components/soc/esp32h2/register/soc/i2c_ana_mst_reg.h similarity index 100% rename from components/soc/esp32h2/include/soc/i2c_ana_mst_reg.h rename to components/soc/esp32h2/register/soc/i2c_ana_mst_reg.h diff --git a/components/soc/esp32h2/include/soc/i2c_reg.h b/components/soc/esp32h2/register/soc/i2c_reg.h similarity index 100% rename from components/soc/esp32h2/include/soc/i2c_reg.h rename to components/soc/esp32h2/register/soc/i2c_reg.h diff --git a/components/soc/esp32h2/include/soc/i2c_struct.h b/components/soc/esp32h2/register/soc/i2c_struct.h similarity index 100% rename from components/soc/esp32h2/include/soc/i2c_struct.h rename to components/soc/esp32h2/register/soc/i2c_struct.h diff --git a/components/soc/esp32h2/include/soc/i2s_reg.h b/components/soc/esp32h2/register/soc/i2s_reg.h similarity index 99% rename from components/soc/esp32h2/include/soc/i2s_reg.h rename to components/soc/esp32h2/register/soc/i2s_reg.h index b79bdd298c3d..95b982407e6d 100644 --- a/components/soc/esp32h2/include/soc/i2s_reg.h +++ b/components/soc/esp32h2/register/soc/i2s_reg.h @@ -320,7 +320,7 @@ extern "C" { #define I2S_TX_SLAVE_MOD_V 0x00000001U #define I2S_TX_SLAVE_MOD_S 3 /** I2S_TX_STOP_EN : R/W; bitpos: [4]; default: 1; - * Set this bit to stop disable output BCK signal and WS signal when tx FIFO is emtpy + * Set this bit to stop disable output BCK signal and WS signal when tx FIFO is empty */ #define I2S_TX_STOP_EN (BIT(4)) #define I2S_TX_STOP_EN_M (I2S_TX_STOP_EN_V << I2S_TX_STOP_EN_S) diff --git a/components/soc/esp32h2/include/soc/i2s_struct.h b/components/soc/esp32h2/register/soc/i2s_struct.h similarity index 99% rename from components/soc/esp32h2/include/soc/i2s_struct.h rename to components/soc/esp32h2/register/soc/i2s_struct.h index 34f876838f86..0a01bf6f670b 100644 --- a/components/soc/esp32h2/include/soc/i2s_struct.h +++ b/components/soc/esp32h2/register/soc/i2s_struct.h @@ -459,7 +459,7 @@ typedef union { */ uint32_t tx_slave_mod:1; /** tx_stop_en : R/W; bitpos: [4]; default: 1; - * Set this bit to stop disable output BCK signal and WS signal when tx FIFO is emtpy + * Set this bit to stop disable output BCK signal and WS signal when tx FIFO is empty */ uint32_t tx_stop_en:1; /** tx_chan_equal : R/W; bitpos: [5]; default: 0; diff --git a/components/soc/esp32h2/include/soc/ieee802154_reg.h b/components/soc/esp32h2/register/soc/ieee802154_reg.h similarity index 100% rename from components/soc/esp32h2/include/soc/ieee802154_reg.h rename to components/soc/esp32h2/register/soc/ieee802154_reg.h diff --git a/components/soc/esp32h2/include/soc/ieee802154_struct.h b/components/soc/esp32h2/register/soc/ieee802154_struct.h similarity index 100% rename from components/soc/esp32h2/include/soc/ieee802154_struct.h rename to components/soc/esp32h2/register/soc/ieee802154_struct.h diff --git a/components/soc/esp32h2/include/soc/interrupt_matrix_reg.h b/components/soc/esp32h2/register/soc/interrupt_matrix_reg.h similarity index 100% rename from components/soc/esp32h2/include/soc/interrupt_matrix_reg.h rename to components/soc/esp32h2/register/soc/interrupt_matrix_reg.h diff --git a/components/soc/esp32h2/include/soc/interrupt_matrix_struct.h b/components/soc/esp32h2/register/soc/interrupt_matrix_struct.h similarity index 100% rename from components/soc/esp32h2/include/soc/interrupt_matrix_struct.h rename to components/soc/esp32h2/register/soc/interrupt_matrix_struct.h diff --git a/components/soc/esp32h2/include/soc/intpri_reg.h b/components/soc/esp32h2/register/soc/intpri_reg.h similarity index 100% rename from components/soc/esp32h2/include/soc/intpri_reg.h rename to components/soc/esp32h2/register/soc/intpri_reg.h diff --git a/components/soc/esp32h2/include/soc/intpri_struct.h b/components/soc/esp32h2/register/soc/intpri_struct.h similarity index 100% rename from components/soc/esp32h2/include/soc/intpri_struct.h rename to components/soc/esp32h2/register/soc/intpri_struct.h diff --git a/components/soc/esp32h2/include/soc/io_mux_reg.h b/components/soc/esp32h2/register/soc/io_mux_reg.h similarity index 99% rename from components/soc/esp32h2/include/soc/io_mux_reg.h rename to components/soc/esp32h2/register/soc/io_mux_reg.h index 5db79e1673a6..4bbb466906a6 100644 --- a/components/soc/esp32h2/include/soc/io_mux_reg.h +++ b/components/soc/esp32h2/register/soc/io_mux_reg.h @@ -5,7 +5,7 @@ */ #pragma once -#include "soc.h" +#include "soc/soc.h" /* The following are the bit fields for PERIPHS_IO_MUX_x_U registers */ /* Output enable in sleep mode */ @@ -79,7 +79,7 @@ #define HYS_EN_S 16 /* HYS_SEL : R/W; bitpos: [17]; default: 0; * Select enabling signals of the pad from software and efuse hardware. - * 1: Select enabling siganl from software. + * 1: Select enabling signal from software. * 0: Select enabling signal from efuse hardware. */ #define HYS_SEL (BIT(17)) diff --git a/components/soc/esp32h2/include/soc/ledc_reg.h b/components/soc/esp32h2/register/soc/ledc_reg.h similarity index 100% rename from components/soc/esp32h2/include/soc/ledc_reg.h rename to components/soc/esp32h2/register/soc/ledc_reg.h diff --git a/components/soc/esp32h2/include/soc/ledc_struct.h b/components/soc/esp32h2/register/soc/ledc_struct.h similarity index 100% rename from components/soc/esp32h2/include/soc/ledc_struct.h rename to components/soc/esp32h2/register/soc/ledc_struct.h diff --git a/components/soc/esp32h2/include/soc/lp_analog_peri_reg.h b/components/soc/esp32h2/register/soc/lp_analog_peri_reg.h similarity index 100% rename from components/soc/esp32h2/include/soc/lp_analog_peri_reg.h rename to components/soc/esp32h2/register/soc/lp_analog_peri_reg.h diff --git a/components/soc/esp32h2/include/soc/lp_analog_peri_struct.h b/components/soc/esp32h2/register/soc/lp_analog_peri_struct.h similarity index 100% rename from components/soc/esp32h2/include/soc/lp_analog_peri_struct.h rename to components/soc/esp32h2/register/soc/lp_analog_peri_struct.h diff --git a/components/soc/esp32h2/include/soc/lp_aon_reg.h b/components/soc/esp32h2/register/soc/lp_aon_reg.h similarity index 100% rename from components/soc/esp32h2/include/soc/lp_aon_reg.h rename to components/soc/esp32h2/register/soc/lp_aon_reg.h diff --git a/components/soc/esp32h2/include/soc/lp_aon_struct.h b/components/soc/esp32h2/register/soc/lp_aon_struct.h similarity index 100% rename from components/soc/esp32h2/include/soc/lp_aon_struct.h rename to components/soc/esp32h2/register/soc/lp_aon_struct.h diff --git a/components/soc/esp32h2/include/soc/lp_apm0_reg.h b/components/soc/esp32h2/register/soc/lp_apm0_reg.h similarity index 100% rename from components/soc/esp32h2/include/soc/lp_apm0_reg.h rename to components/soc/esp32h2/register/soc/lp_apm0_reg.h diff --git a/components/soc/esp32h2/include/soc/lp_apm0_struct.h b/components/soc/esp32h2/register/soc/lp_apm0_struct.h similarity index 100% rename from components/soc/esp32h2/include/soc/lp_apm0_struct.h rename to components/soc/esp32h2/register/soc/lp_apm0_struct.h diff --git a/components/soc/esp32h2/include/soc/lp_apm_reg.h b/components/soc/esp32h2/register/soc/lp_apm_reg.h similarity index 100% rename from components/soc/esp32h2/include/soc/lp_apm_reg.h rename to components/soc/esp32h2/register/soc/lp_apm_reg.h diff --git a/components/soc/esp32h2/include/soc/lp_apm_struct.h b/components/soc/esp32h2/register/soc/lp_apm_struct.h similarity index 100% rename from components/soc/esp32h2/include/soc/lp_apm_struct.h rename to components/soc/esp32h2/register/soc/lp_apm_struct.h diff --git a/components/soc/esp32h2/include/soc/lp_clkrst_reg.h b/components/soc/esp32h2/register/soc/lp_clkrst_reg.h similarity index 100% rename from components/soc/esp32h2/include/soc/lp_clkrst_reg.h rename to components/soc/esp32h2/register/soc/lp_clkrst_reg.h diff --git a/components/soc/esp32h2/include/soc/lp_clkrst_struct.h b/components/soc/esp32h2/register/soc/lp_clkrst_struct.h similarity index 100% rename from components/soc/esp32h2/include/soc/lp_clkrst_struct.h rename to components/soc/esp32h2/register/soc/lp_clkrst_struct.h diff --git a/components/soc/esp32h2/include/soc/lp_timer_reg.h b/components/soc/esp32h2/register/soc/lp_timer_reg.h similarity index 100% rename from components/soc/esp32h2/include/soc/lp_timer_reg.h rename to components/soc/esp32h2/register/soc/lp_timer_reg.h diff --git a/components/soc/esp32h2/include/soc/lp_timer_struct.h b/components/soc/esp32h2/register/soc/lp_timer_struct.h similarity index 100% rename from components/soc/esp32h2/include/soc/lp_timer_struct.h rename to components/soc/esp32h2/register/soc/lp_timer_struct.h diff --git a/components/soc/esp32h2/include/soc/lp_wdt_reg.h b/components/soc/esp32h2/register/soc/lp_wdt_reg.h similarity index 100% rename from components/soc/esp32h2/include/soc/lp_wdt_reg.h rename to components/soc/esp32h2/register/soc/lp_wdt_reg.h diff --git a/components/soc/esp32h2/include/soc/lp_wdt_struct.h b/components/soc/esp32h2/register/soc/lp_wdt_struct.h similarity index 100% rename from components/soc/esp32h2/include/soc/lp_wdt_struct.h rename to components/soc/esp32h2/register/soc/lp_wdt_struct.h diff --git a/components/soc/esp32h2/include/soc/lpperi_reg.h b/components/soc/esp32h2/register/soc/lpperi_reg.h similarity index 100% rename from components/soc/esp32h2/include/soc/lpperi_reg.h rename to components/soc/esp32h2/register/soc/lpperi_reg.h diff --git a/components/soc/esp32h2/include/soc/lpperi_struct.h b/components/soc/esp32h2/register/soc/lpperi_struct.h similarity index 100% rename from components/soc/esp32h2/include/soc/lpperi_struct.h rename to components/soc/esp32h2/register/soc/lpperi_struct.h diff --git a/components/soc/esp32h2/include/soc/mcpwm_reg.h b/components/soc/esp32h2/register/soc/mcpwm_reg.h similarity index 99% rename from components/soc/esp32h2/include/soc/mcpwm_reg.h rename to components/soc/esp32h2/register/soc/mcpwm_reg.h index f851de75ceeb..a14ba71be368 100644 --- a/components/soc/esp32h2/include/soc/mcpwm_reg.h +++ b/components/soc/esp32h2/register/soc/mcpwm_reg.h @@ -894,7 +894,7 @@ extern "C" { #define MCPWM_DB0_RED_S 0 /** MCPWM_CARRIER0_CFG_REG register - * Carrier enable and configuratoin + * Carrier enable and configuration */ #define MCPWM_CARRIER0_CFG_REG (DR_REG_MCPWM_BASE + 0x64) /** MCPWM_CHOPPER0_EN : R/W; bitpos: [0]; default: 0; @@ -1575,7 +1575,7 @@ extern "C" { #define MCPWM_DB1_RED_S 0 /** MCPWM_CARRIER1_CFG_REG register - * Carrier enable and configuratoin + * Carrier enable and configuration */ #define MCPWM_CARRIER1_CFG_REG (DR_REG_MCPWM_BASE + 0x9c) /** MCPWM_CHOPPER1_EN : R/W; bitpos: [0]; default: 0; @@ -2256,7 +2256,7 @@ extern "C" { #define MCPWM_DB2_RED_S 0 /** MCPWM_CARRIER2_CFG_REG register - * Carrier enable and configuratoin + * Carrier enable and configuration */ #define MCPWM_CARRIER2_CFG_REG (DR_REG_MCPWM_BASE + 0xd4) /** MCPWM_CHOPPER2_EN : R/W; bitpos: [0]; default: 0; @@ -2621,7 +2621,7 @@ extern "C" { #define MCPWM_CAP0_MODE_V 0x00000003U #define MCPWM_CAP0_MODE_S 1 /** MCPWM_CAP0_PRESCALE : R/W; bitpos: [10:3]; default: 0; - * Value of prescaling on possitive edge of CAP0. Prescale value = PWM_CAP0_PRESCALE + + * Value of prescaling on positive edge of CAP0. Prescale value = PWM_CAP0_PRESCALE + * 1 */ #define MCPWM_CAP0_PRESCALE 0x000000FFU @@ -2664,7 +2664,7 @@ extern "C" { #define MCPWM_CAP1_MODE_V 0x00000003U #define MCPWM_CAP1_MODE_S 1 /** MCPWM_CAP1_PRESCALE : R/W; bitpos: [10:3]; default: 0; - * Value of prescaling on possitive edge of CAP1. Prescale value = PWM_CAP1_PRESCALE + + * Value of prescaling on positive edge of CAP1. Prescale value = PWM_CAP1_PRESCALE + * 1 */ #define MCPWM_CAP1_PRESCALE 0x000000FFU @@ -2707,7 +2707,7 @@ extern "C" { #define MCPWM_CAP2_MODE_V 0x00000003U #define MCPWM_CAP2_MODE_S 1 /** MCPWM_CAP2_PRESCALE : R/W; bitpos: [10:3]; default: 0; - * Value of prescaling on possitive edge of CAP2. Prescale value = PWM_CAP2_PRESCALE + + * Value of prescaling on positive edge of CAP2. Prescale value = PWM_CAP2_PRESCALE + * 1 */ #define MCPWM_CAP2_PRESCALE 0x000000FFU diff --git a/components/soc/esp32h2/include/soc/mcpwm_struct.h b/components/soc/esp32h2/register/soc/mcpwm_struct.h similarity index 99% rename from components/soc/esp32h2/include/soc/mcpwm_struct.h rename to components/soc/esp32h2/register/soc/mcpwm_struct.h index 1a91a623f6bc..5fe75f3c99e0 100644 --- a/components/soc/esp32h2/include/soc/mcpwm_struct.h +++ b/components/soc/esp32h2/register/soc/mcpwm_struct.h @@ -462,7 +462,7 @@ typedef union { } mcpwm_dt_red_cfg_reg_t; /** Type of carrier_cfg register - * Carrier enable and configuratoin + * Carrier enable and configuration */ typedef union { struct { @@ -734,7 +734,7 @@ typedef union { */ uint32_t capn_mode:2; /** capn_prescale : R/W; bitpos: [10:3]; default: 0; - * Value of prescaling on possitive edge of CAPn. Prescale value = PWM_CAP0_PRESCALE + + * Value of prescaling on positive edge of CAPn. Prescale value = PWM_CAP0_PRESCALE + * 1 */ uint32_t capn_prescale:8; diff --git a/components/soc/esp32h2/include/soc/mem_monitor_reg.h b/components/soc/esp32h2/register/soc/mem_monitor_reg.h similarity index 98% rename from components/soc/esp32h2/include/soc/mem_monitor_reg.h rename to components/soc/esp32h2/register/soc/mem_monitor_reg.h index bbddf93b89a8..1a90e585be1c 100644 --- a/components/soc/esp32h2/include/soc/mem_monitor_reg.h +++ b/components/soc/esp32h2/register/soc/mem_monitor_reg.h @@ -12,7 +12,7 @@ extern "C" { #endif /** MEM_MONITOR_LOG_SETTING_REG register - * log config regsiter + * log config register */ #define MEM_MONITOR_LOG_SETTING_REG (DR_REG_MEM_MONITOR_BASE + 0x0) /** MEM_MONITOR_LOG_ENA : R/W; bitpos: [2:0]; default: 0; @@ -39,7 +39,7 @@ extern "C" { #define MEM_MONITOR_LOG_MEM_LOOP_ENABLE_S 7 /** MEM_MONITOR_LOG_CHECK_DATA_REG register - * check data regsiter + * check data register */ #define MEM_MONITOR_LOG_CHECK_DATA_REG (DR_REG_MEM_MONITOR_BASE + 0x4) /** MEM_MONITOR_LOG_CHECK_DATA : R/W; bitpos: [31:0]; default: 0; @@ -64,7 +64,7 @@ extern "C" { #define MEM_MONITOR_LOG_DATA_MASK_S 0 /** MEM_MONITOR_LOG_MIN_REG register - * log boundary regsiter + * log boundary register */ #define MEM_MONITOR_LOG_MIN_REG (DR_REG_MEM_MONITOR_BASE + 0xc) /** MEM_MONITOR_LOG_MIN : R/W; bitpos: [31:0]; default: 0; @@ -76,7 +76,7 @@ extern "C" { #define MEM_MONITOR_LOG_MIN_S 0 /** MEM_MONITOR_LOG_MAX_REG register - * log boundary regsiter + * log boundary register */ #define MEM_MONITOR_LOG_MAX_REG (DR_REG_MEM_MONITOR_BASE + 0x10) /** MEM_MONITOR_LOG_MAX : R/W; bitpos: [31:0]; default: 0; diff --git a/components/soc/esp32h2/include/soc/mem_monitor_struct.h b/components/soc/esp32h2/register/soc/mem_monitor_struct.h similarity index 98% rename from components/soc/esp32h2/include/soc/mem_monitor_struct.h rename to components/soc/esp32h2/register/soc/mem_monitor_struct.h index 8d4628467f77..ef63ca9c2648 100644 --- a/components/soc/esp32h2/include/soc/mem_monitor_struct.h +++ b/components/soc/esp32h2/register/soc/mem_monitor_struct.h @@ -12,7 +12,7 @@ extern "C" { /** Group: configuration registers */ /** Type of log_setting register - * log config regsiter + * log config register */ typedef union { struct { @@ -35,7 +35,7 @@ typedef union { } mem_monitor_log_setting_reg_t; /** Type of log_check_data register - * check data regsiter + * check data register */ typedef union { struct { @@ -63,7 +63,7 @@ typedef union { } mem_monitor_log_data_mask_reg_t; /** Type of log_min register - * log boundary regsiter + * log boundary register */ typedef union { struct { @@ -76,7 +76,7 @@ typedef union { } mem_monitor_log_min_reg_t; /** Type of log_max register - * log boundary regsiter + * log boundary register */ typedef union { struct { diff --git a/components/soc/esp32h2/include/soc/parl_io_reg.h b/components/soc/esp32h2/register/soc/parl_io_reg.h similarity index 98% rename from components/soc/esp32h2/include/soc/parl_io_reg.h rename to components/soc/esp32h2/register/soc/parl_io_reg.h index 810530ded7b9..d68f5191cb2b 100644 --- a/components/soc/esp32h2/include/soc/parl_io_reg.h +++ b/components/soc/esp32h2/register/soc/parl_io_reg.h @@ -252,7 +252,7 @@ extern "C" { #define PARL_IO_TX_READY_S 31 /** PARL_IO_INT_ENA_REG register - * Parallel IO interrupt enable singal configuration register. + * Parallel IO interrupt enable signal configuration register. */ #define PARL_IO_INT_ENA_REG (DR_REG_PARL_IO_BASE + 0x28) /** PARL_IO_TX_FIFO_REMPTY_INT_ENA : R/W; bitpos: [0]; default: 0; @@ -278,7 +278,7 @@ extern "C" { #define PARL_IO_TX_EOF_INT_ENA_S 2 /** PARL_IO_INT_RAW_REG register - * Parallel IO interrupt raw singal status register. + * Parallel IO interrupt raw signal status register. */ #define PARL_IO_INT_RAW_REG (DR_REG_PARL_IO_BASE + 0x2c) /** PARL_IO_TX_FIFO_REMPTY_INT_RAW : R/WTC/SS; bitpos: [0]; default: 0; @@ -304,7 +304,7 @@ extern "C" { #define PARL_IO_TX_EOF_INT_RAW_S 2 /** PARL_IO_INT_ST_REG register - * Parallel IO interrupt singal status register. + * Parallel IO interrupt signal status register. */ #define PARL_IO_INT_ST_REG (DR_REG_PARL_IO_BASE + 0x30) /** PARL_IO_TX_FIFO_REMPTY_INT_ST : RO; bitpos: [0]; default: 0; @@ -330,7 +330,7 @@ extern "C" { #define PARL_IO_TX_EOF_INT_ST_S 2 /** PARL_IO_INT_CLR_REG register - * Parallel IO interrupt clear singal configuration register. + * Parallel IO interrupt clear signal configuration register. */ #define PARL_IO_INT_CLR_REG (DR_REG_PARL_IO_BASE + 0x34) /** PARL_IO_TX_FIFO_REMPTY_INT_CLR : WT; bitpos: [0]; default: 0; diff --git a/components/soc/esp32h2/include/soc/parl_io_struct.h b/components/soc/esp32h2/register/soc/parl_io_struct.h similarity index 98% rename from components/soc/esp32h2/include/soc/parl_io_struct.h rename to components/soc/esp32h2/register/soc/parl_io_struct.h index 97dc285531d6..6e501e6c5795 100644 --- a/components/soc/esp32h2/include/soc/parl_io_struct.h +++ b/components/soc/esp32h2/register/soc/parl_io_struct.h @@ -251,7 +251,7 @@ typedef union { /** Group: PARL_IO Interrupt Configuration and Status */ /** Type of int_ena register - * Parallel IO interrupt enable singal configuration register. + * Parallel IO interrupt enable signal configuration register. */ typedef union { struct { @@ -273,7 +273,7 @@ typedef union { } parl_io_int_ena_reg_t; /** Type of int_raw register - * Parallel IO interrupt raw singal status register. + * Parallel IO interrupt raw signal status register. */ typedef union { struct { @@ -295,7 +295,7 @@ typedef union { } parl_io_int_raw_reg_t; /** Type of int_st register - * Parallel IO interrupt singal status register. + * Parallel IO interrupt signal status register. */ typedef union { struct { @@ -317,7 +317,7 @@ typedef union { } parl_io_int_st_reg_t; /** Type of int_clr register - * Parallel IO interrupt clear singal configuration register. + * Parallel IO interrupt clear signal configuration register. */ typedef union { struct { diff --git a/components/soc/esp32h2/include/soc/pau_reg.h b/components/soc/esp32h2/register/soc/pau_reg.h similarity index 100% rename from components/soc/esp32h2/include/soc/pau_reg.h rename to components/soc/esp32h2/register/soc/pau_reg.h diff --git a/components/soc/esp32h2/include/soc/pau_struct.h b/components/soc/esp32h2/register/soc/pau_struct.h similarity index 100% rename from components/soc/esp32h2/include/soc/pau_struct.h rename to components/soc/esp32h2/register/soc/pau_struct.h diff --git a/components/soc/esp32h2/include/soc/pcnt_reg.h b/components/soc/esp32h2/register/soc/pcnt_reg.h similarity index 100% rename from components/soc/esp32h2/include/soc/pcnt_reg.h rename to components/soc/esp32h2/register/soc/pcnt_reg.h diff --git a/components/soc/esp32h2/include/soc/pcnt_struct.h b/components/soc/esp32h2/register/soc/pcnt_struct.h similarity index 100% rename from components/soc/esp32h2/include/soc/pcnt_struct.h rename to components/soc/esp32h2/register/soc/pcnt_struct.h diff --git a/components/soc/esp32h2/include/soc/pcr_reg.h b/components/soc/esp32h2/register/soc/pcr_reg.h similarity index 99% rename from components/soc/esp32h2/include/soc/pcr_reg.h rename to components/soc/esp32h2/register/soc/pcr_reg.h index f44d7a31ea5d..02d26df2db3e 100644 --- a/components/soc/esp32h2/include/soc/pcr_reg.h +++ b/components/soc/esp32h2/register/soc/pcr_reg.h @@ -229,7 +229,7 @@ extern "C" { #define PCR_MSPI_CLK_CONF_REG (DR_REG_PCR_BASE + 0x1c) /** PCR_MSPI_FAST_DIV_NUM : R/W; bitpos: [7:0]; default: 0; * Set as one within (0,1,2) to generate div1(default)/div2/div4 of low-speed - * clock-source to drive clk_mspi_fast. Only avaiable whe the clck-source is a + * clock-source to drive clk_mspi_fast. Only available when the clck-source is a * low-speed clock-source such as XTAL/FOSC. */ #define PCR_MSPI_FAST_DIV_NUM 0x000000FFU @@ -1331,7 +1331,7 @@ extern "C" { #define PCR_PVT_MONITOR_FUNC_CLK_DIV_NUM_V 0x0000000FU #define PCR_PVT_MONITOR_FUNC_CLK_DIV_NUM_S 0 /** PCR_PVT_MONITOR_FUNC_CLK_SEL : R/W; bitpos: [20]; default: 0; - * set this field to select clock-source. 0: XTAL, 1(default): 160MHz drived by SPLL + * set this field to select clock-source. 0: XTAL, 1(default): 160MHz driven by SPLL * divided by 3. */ #define PCR_PVT_MONITOR_FUNC_CLK_SEL (BIT(20)) @@ -1904,8 +1904,8 @@ extern "C" { */ #define PCR_CPU_FREQ_CONF_REG (DR_REG_PCR_BASE + 0x114) /** PCR_CPU_DIV_NUM : R/W; bitpos: [7:0]; default: 0; - * Set this field to generate clk_cpu drived by clk_hproot. The clk_cpu is - * div1(default)/div2/div4 of clk_hproot. This field is only avaliable for low-speed + * Set this field to generate clk_cpu driven by clk_hproot. The clk_cpu is + * div1(default)/div2/div4 of clk_hproot. This field is only available for low-speed * clock-source such as XTAL/FOSC, and should be used together with PCR_AHB_DIV_NUM. */ #define PCR_CPU_DIV_NUM 0x000000FFU @@ -1918,8 +1918,8 @@ extern "C" { */ #define PCR_AHB_FREQ_CONF_REG (DR_REG_PCR_BASE + 0x118) /** PCR_AHB_DIV_NUM : R/W; bitpos: [7:0]; default: 0; - * Set this field to generate clk_ahb drived by clk_hproot. The clk_ahb is - * div1(default)/div2/div4/div8 of clk_hproot. This field is only avaliable for + * Set this field to generate clk_ahb driven by clk_hproot. The clk_ahb is + * div1(default)/div2/div4/div8 of clk_hproot. This field is only available for * low-speed clock-source such as XTAL/FOSC, and should be used together with * PCR_CPU_DIV_NUM. */ @@ -1946,7 +1946,7 @@ extern "C" { #define PCR_APB_DECREASE_DIV_NUM_V 0x000000FFU #define PCR_APB_DECREASE_DIV_NUM_S 0 /** PCR_APB_DIV_NUM : R/W; bitpos: [15:8]; default: 0; - * Set as one within (0,1,3) to generate clk_apb drived by clk_ahb. The clk_apb is + * Set as one within (0,1,3) to generate clk_apb driven by clk_ahb. The clk_apb is * div1(default)/div2/div4 of clk_ahb. */ #define PCR_APB_DIV_NUM 0x000000FFU @@ -1978,48 +1978,48 @@ extern "C" { */ #define PCR_PLL_DIV_CLK_EN_REG (DR_REG_PCR_BASE + 0x124) /** PCR_PLL_240M_CLK_EN : R/W; bitpos: [0]; default: 1; - * This field is used to open 96 MHz clock (SPLL) drived from SPLL. 0: close, 1: - * open(default). Only avaliable when high-speed clock-source SPLL is active. + * This field is used to open 96 MHz clock (SPLL) driven from SPLL. 0: close, 1: + * open(default). Only available when high-speed clock-source SPLL is active. */ #define PCR_PLL_240M_CLK_EN (BIT(0)) #define PCR_PLL_240M_CLK_EN_M (PCR_PLL_240M_CLK_EN_V << PCR_PLL_240M_CLK_EN_S) #define PCR_PLL_240M_CLK_EN_V 0x00000001U #define PCR_PLL_240M_CLK_EN_S 0 /** PCR_PLL_160M_CLK_EN : R/W; bitpos: [1]; default: 1; - * This field is used to open 64 MHz clock (div3 of SPLL) drived from SPLL. 0: close, - * 1: open(default). Only avaliable when high-speed clock-source SPLL is active. + * This field is used to open 64 MHz clock (div3 of SPLL) driven from SPLL. 0: close, + * 1: open(default). Only available when high-speed clock-source SPLL is active. */ #define PCR_PLL_160M_CLK_EN (BIT(1)) #define PCR_PLL_160M_CLK_EN_M (PCR_PLL_160M_CLK_EN_V << PCR_PLL_160M_CLK_EN_S) #define PCR_PLL_160M_CLK_EN_V 0x00000001U #define PCR_PLL_160M_CLK_EN_S 1 /** PCR_PLL_120M_CLK_EN : R/W; bitpos: [2]; default: 1; - * This field is used to open 48 MHz clock (div4 of SPLL) drived from SPLL. 0: close, - * 1: open(default). Only avaliable when high-speed clock-source SPLL is active. + * This field is used to open 48 MHz clock (div4 of SPLL) driven from SPLL. 0: close, + * 1: open(default). Only available when high-speed clock-source SPLL is active. */ #define PCR_PLL_120M_CLK_EN (BIT(2)) #define PCR_PLL_120M_CLK_EN_M (PCR_PLL_120M_CLK_EN_V << PCR_PLL_120M_CLK_EN_S) #define PCR_PLL_120M_CLK_EN_V 0x00000001U #define PCR_PLL_120M_CLK_EN_S 2 /** PCR_PLL_80M_CLK_EN : R/W; bitpos: [3]; default: 1; - * This field is used to open 32 MHz clock (div6 of SPLL) drived from SPLL. 0: close, - * 1: open(default). Only avaliable when high-speed clock-source SPLL is active. + * This field is used to open 32 MHz clock (div6 of SPLL) driven from SPLL. 0: close, + * 1: open(default). Only available when high-speed clock-source SPLL is active. */ #define PCR_PLL_80M_CLK_EN (BIT(3)) #define PCR_PLL_80M_CLK_EN_M (PCR_PLL_80M_CLK_EN_V << PCR_PLL_80M_CLK_EN_S) #define PCR_PLL_80M_CLK_EN_V 0x00000001U #define PCR_PLL_80M_CLK_EN_S 3 /** PCR_PLL_48M_CLK_EN : R/W; bitpos: [4]; default: 1; - * This field is used to open 16 MHz clock (div10 of SPLL) drived from SPLL. 0: close, - * 1: open(default). Only avaliable when high-speed clock-source SPLL is active. + * This field is used to open 16 MHz clock (div10 of SPLL) driven from SPLL. 0: close, + * 1: open(default). Only available when high-speed clock-source SPLL is active. */ #define PCR_PLL_48M_CLK_EN (BIT(4)) #define PCR_PLL_48M_CLK_EN_M (PCR_PLL_48M_CLK_EN_V << PCR_PLL_48M_CLK_EN_S) #define PCR_PLL_48M_CLK_EN_V 0x00000001U #define PCR_PLL_48M_CLK_EN_S 4 /** PCR_PLL_40M_CLK_EN : R/W; bitpos: [5]; default: 1; - * This field is used to open 8 MHz clock (div12 of SPLL) drived from SPLL. 0: close, - * 1: open(default). Only avaliable when high-speed clock-source SPLL is active. + * This field is used to open 8 MHz clock (div12 of SPLL) driven from SPLL. 0: close, + * 1: open(default). Only available when high-speed clock-source SPLL is active. */ #define PCR_PLL_40M_CLK_EN (BIT(5)) #define PCR_PLL_40M_CLK_EN_M (PCR_PLL_40M_CLK_EN_V << PCR_PLL_40M_CLK_EN_S) diff --git a/components/soc/esp32h2/include/soc/pcr_struct.h b/components/soc/esp32h2/register/soc/pcr_struct.h similarity index 98% rename from components/soc/esp32h2/include/soc/pcr_struct.h rename to components/soc/esp32h2/register/soc/pcr_struct.h index 31e49c232cc8..cf1a690ac30f 100644 --- a/components/soc/esp32h2/include/soc/pcr_struct.h +++ b/components/soc/esp32h2/register/soc/pcr_struct.h @@ -192,7 +192,7 @@ typedef union { struct { /** mspi_fast_div_num : R/W; bitpos: [7:0]; default: 0; * Set as one within (0,1,2) to generate div1(default)/div2/div4 of low-speed - * clock-source to drive clk_mspi_fast. Only avaiable whe the clck-source is a + * clock-source to drive clk_mspi_fast. Only available when the clck-source is a * low-speed clock-source such as XTAL/FOSC. */ uint32_t mspi_fast_div_num:8; @@ -1067,7 +1067,7 @@ typedef union { uint32_t pvt_monitor_func_clk_div_num:4; uint32_t reserved_4:16; /** pvt_monitor_func_clk_sel : R/W; bitpos: [20]; default: 0; - * set this field to select clock-source. 0: XTAL, 1(default): 160MHz drived by SPLL + * set this field to select clock-source. 0: XTAL, 1(default): 160MHz driven by SPLL * divided by 3. */ uint32_t pvt_monitor_func_clk_sel:1; @@ -1573,8 +1573,8 @@ typedef union { typedef union { struct { /** cpu_div_num : R/W; bitpos: [7:0]; default: 0; - * Set this field to generate clk_cpu drived by clk_hproot. The clk_cpu is - * div1(default)/div2/div4 of clk_hproot. This field is only avaliable for low-speed + * Set this field to generate clk_cpu driven by clk_hproot. The clk_cpu is + * div1(default)/div2/div4 of clk_hproot. This field is only available for low-speed * clock-source such as XTAL/FOSC, and should be used together with PCR_AHB_DIV_NUM. */ uint32_t cpu_div_num:8; @@ -1589,8 +1589,8 @@ typedef union { typedef union { struct { /** ahb_div_num : R/W; bitpos: [7:0]; default: 0; - * Set this field to generate clk_ahb drived by clk_hproot. The clk_ahb is - * div1(default)/div2/div4/div8 of clk_hproot. This field is only avaliable for + * Set this field to generate clk_ahb driven by clk_hproot. The clk_ahb is + * div1(default)/div2/div4/div8 of clk_hproot. This field is only available for * low-speed clock-source such as XTAL/FOSC, and should be used together with * PCR_CPU_DIV_NUM. */ @@ -1616,7 +1616,7 @@ typedef union { */ uint32_t apb_decrease_div_num:8; /** apb_div_num : R/W; bitpos: [15:8]; default: 0; - * Set as one within (0,1,3) to generate clk_apb drived by clk_ahb. The clk_apb is + * Set as one within (0,1,3) to generate clk_apb driven by clk_ahb. The clk_apb is * div1(default)/div2/div4 of clk_ahb. */ uint32_t apb_div_num:8; @@ -1631,33 +1631,33 @@ typedef union { typedef union { struct { /** pll_240m_clk_en : R/W; bitpos: [0]; default: 1; - * This field is used to open 96 MHz clock (SPLL) drived from SPLL. 0: close, 1: - * open(default). Only avaliable when high-speed clock-source SPLL is active. + * This field is used to open 96 MHz clock (SPLL) driven from SPLL. 0: close, 1: + * open(default). Only available when high-speed clock-source SPLL is active. */ uint32_t pll_240m_clk_en:1; /** pll_160m_clk_en : R/W; bitpos: [1]; default: 1; - * This field is used to open 64 MHz clock (div3 of SPLL) drived from SPLL. 0: close, - * 1: open(default). Only avaliable when high-speed clock-source SPLL is active. + * This field is used to open 64 MHz clock (div3 of SPLL) driven from SPLL. 0: close, + * 1: open(default). Only available when high-speed clock-source SPLL is active. */ uint32_t pll_160m_clk_en:1; /** pll_120m_clk_en : R/W; bitpos: [2]; default: 1; - * This field is used to open 48 MHz clock (div4 of SPLL) drived from SPLL. 0: close, - * 1: open(default). Only avaliable when high-speed clock-source SPLL is active. + * This field is used to open 48 MHz clock (div4 of SPLL) driven from SPLL. 0: close, + * 1: open(default). Only available when high-speed clock-source SPLL is active. */ uint32_t pll_120m_clk_en:1; /** pll_80m_clk_en : R/W; bitpos: [3]; default: 1; - * This field is used to open 32 MHz clock (div6 of SPLL) drived from SPLL. 0: close, - * 1: open(default). Only avaliable when high-speed clock-source SPLL is active. + * This field is used to open 32 MHz clock (div6 of SPLL) driven from SPLL. 0: close, + * 1: open(default). Only available when high-speed clock-source SPLL is active. */ uint32_t pll_80m_clk_en:1; /** pll_48m_clk_en : R/W; bitpos: [4]; default: 1; - * This field is used to open 16 MHz clock (div10 of SPLL) drived from SPLL. 0: close, - * 1: open(default). Only avaliable when high-speed clock-source SPLL is active. + * This field is used to open 16 MHz clock (div10 of SPLL) driven from SPLL. 0: close, + * 1: open(default). Only available when high-speed clock-source SPLL is active. */ uint32_t pll_48m_clk_en:1; /** pll_40m_clk_en : R/W; bitpos: [5]; default: 1; - * This field is used to open 8 MHz clock (div12 of SPLL) drived from SPLL. 0: close, - * 1: open(default). Only avaliable when high-speed clock-source SPLL is active. + * This field is used to open 8 MHz clock (div12 of SPLL) driven from SPLL. 0: close, + * 1: open(default). Only available when high-speed clock-source SPLL is active. */ uint32_t pll_40m_clk_en:1; uint32_t reserved_6:26; diff --git a/components/soc/esp32h2/include/soc/plic_reg.h b/components/soc/esp32h2/register/soc/plic_reg.h similarity index 100% rename from components/soc/esp32h2/include/soc/plic_reg.h rename to components/soc/esp32h2/register/soc/plic_reg.h diff --git a/components/soc/esp32h2/include/soc/pmu_reg.h b/components/soc/esp32h2/register/soc/pmu_reg.h similarity index 100% rename from components/soc/esp32h2/include/soc/pmu_reg.h rename to components/soc/esp32h2/register/soc/pmu_reg.h diff --git a/components/soc/esp32h2/include/soc/pmu_struct.h b/components/soc/esp32h2/register/soc/pmu_struct.h similarity index 100% rename from components/soc/esp32h2/include/soc/pmu_struct.h rename to components/soc/esp32h2/register/soc/pmu_struct.h diff --git a/components/soc/esp32h2/include/soc/reg_base.h b/components/soc/esp32h2/register/soc/reg_base.h similarity index 100% rename from components/soc/esp32h2/include/soc/reg_base.h rename to components/soc/esp32h2/register/soc/reg_base.h diff --git a/components/soc/esp32h2/include/soc/rmt_reg.h b/components/soc/esp32h2/register/soc/rmt_reg.h similarity index 100% rename from components/soc/esp32h2/include/soc/rmt_reg.h rename to components/soc/esp32h2/register/soc/rmt_reg.h diff --git a/components/soc/esp32h2/include/soc/rmt_struct.h b/components/soc/esp32h2/register/soc/rmt_struct.h similarity index 100% rename from components/soc/esp32h2/include/soc/rmt_struct.h rename to components/soc/esp32h2/register/soc/rmt_struct.h diff --git a/components/soc/esp32h2/include/soc/rsa_reg.h b/components/soc/esp32h2/register/soc/rsa_reg.h similarity index 100% rename from components/soc/esp32h2/include/soc/rsa_reg.h rename to components/soc/esp32h2/register/soc/rsa_reg.h diff --git a/components/soc/esp32h2/include/soc/rsa_struct.h b/components/soc/esp32h2/register/soc/rsa_struct.h similarity index 100% rename from components/soc/esp32h2/include/soc/rsa_struct.h rename to components/soc/esp32h2/register/soc/rsa_struct.h diff --git a/components/soc/esp32h2/include/soc/sha_reg.h b/components/soc/esp32h2/register/soc/sha_reg.h similarity index 98% rename from components/soc/esp32h2/include/soc/sha_reg.h rename to components/soc/esp32h2/register/soc/sha_reg.h index b5a4529f4e13..633d53446c7a 100644 --- a/components/soc/esp32h2/include/soc/sha_reg.h +++ b/components/soc/esp32h2/register/soc/sha_reg.h @@ -156,7 +156,7 @@ extern "C" { #define SHA_DATE_S 0 /** SHA_H_MEM register - * Sha H memory which contains intermediate hash or finial hash. + * Sha H memory which contains intermediate hash or final hash. */ #define SHA_H_MEM_REG (DR_REG_SHA_BASE + 0x40) #define SHA_H_MEM_SIZE_BYTES 64 diff --git a/components/soc/esp32h2/include/soc/sha_struct.h b/components/soc/esp32h2/register/soc/sha_struct.h similarity index 100% rename from components/soc/esp32h2/include/soc/sha_struct.h rename to components/soc/esp32h2/register/soc/sha_struct.h diff --git a/components/soc/esp32h2/include/soc/soc_etm_reg.h b/components/soc/esp32h2/register/soc/soc_etm_reg.h similarity index 100% rename from components/soc/esp32h2/include/soc/soc_etm_reg.h rename to components/soc/esp32h2/register/soc/soc_etm_reg.h diff --git a/components/soc/esp32h2/include/soc/soc_etm_struct.h b/components/soc/esp32h2/register/soc/soc_etm_struct.h similarity index 100% rename from components/soc/esp32h2/include/soc/soc_etm_struct.h rename to components/soc/esp32h2/register/soc/soc_etm_struct.h diff --git a/components/soc/esp32h2/include/soc/spi_mem_reg.h b/components/soc/esp32h2/register/soc/spi_mem_reg.h similarity index 99% rename from components/soc/esp32h2/include/soc/spi_mem_reg.h rename to components/soc/esp32h2/register/soc/spi_mem_reg.h index adb74b0e0b54..1f084a0acc12 100644 --- a/components/soc/esp32h2/include/soc/spi_mem_reg.h +++ b/components/soc/esp32h2/register/soc/spi_mem_reg.h @@ -5,7 +5,7 @@ */ #pragma once -#include "soc.h" +#include "soc/soc.h" #ifdef __cplusplus extern "C" { @@ -93,23 +93,23 @@ he bit will be cleared once the operation done.1: enable 0: disable..*/ #define SPI_MEM_FLASH_DP_S 21 /* SPI_MEM_FLASH_RES : R/W/SC ;bitpos:[20] ;default: 1'b0 ; */ /*description: This bit combined with reg_resandres bit releases Flash from the power-down stat -e or high performance mode and obtains the devices ID. The bit will be cleared o -nce the operation done.1: enable 0: disable..*/ +e or high performance mode and obtains the devices ID. The bit will be cleared once +the operation done.1: enable 0: disable..*/ #define SPI_MEM_FLASH_RES (BIT(20)) #define SPI_MEM_FLASH_RES_M (BIT(20)) #define SPI_MEM_FLASH_RES_V 0x1 #define SPI_MEM_FLASH_RES_S 20 /* SPI_MEM_FLASH_HPM : R/W/SC ;bitpos:[19] ;default: 1'b0 ; */ -/*description: Drive Flash into high performance mode. The bit will be cleared once the operat -ion done.1: enable 0: disable..*/ +/*description: Drive Flash into high performance mode. The bit will be cleared once the operation +done.1: enable 0: disable..*/ #define SPI_MEM_FLASH_HPM (BIT(19)) #define SPI_MEM_FLASH_HPM_M (BIT(19)) #define SPI_MEM_FLASH_HPM_V 0x1 #define SPI_MEM_FLASH_HPM_S 19 /* SPI_MEM_USR : HRO ;bitpos:[18] ;default: 1'b0 ; */ -/*description: SPI0 USR_CMD start bit, only used when SPI_MEM_AXI_REQ_EN is cleared. An operat -ion will be triggered when the bit is set. The bit will be cleared once the oper -ation done.1: enable 0: disable..*/ +/*description: SPI0 USR_CMD start bit, only used when SPI_MEM_AXI_REQ_EN is cleared. An operation +will be triggered when the bit is set. The bit will be cleared once the operation +done.1: enable 0: disable..*/ #define SPI_MEM_USR (BIT(18)) #define SPI_MEM_USR_M (BIT(18)) #define SPI_MEM_USR_V 0x1 @@ -123,9 +123,9 @@ peration done.1: enable 0: disable..*/ #define SPI_MEM_FLASH_PE_V 0x1 #define SPI_MEM_FLASH_PE_S 17 /* SPI_MEM_SLV_ST : RO ;bitpos:[7:4] ;default: 4'b0 ; */ -/*description: The current status of SPI0 slave FSM: mspi_st. 0: idle state, 1: preparation sta -te, 2: send command state, 3: send address state, 4: wait state, 5: read data st -ate, 6:write data state, 7: done state, 8: read data end state..*/ +/*description: The current status of SPI0 slave FSM: mspi_st. 0: idle state, 1: preparation +state, 2: send command state, 3: send address state, 4: wait state, 5: read data state +, 6:write data state, 7: done state, 8: read data end state..*/ #define SPI_MEM_SLV_ST 0x0000000F #define SPI_MEM_SLV_ST_M ((SPI_MEM_SLV_ST_V)<<(SPI_MEM_SLV_ST_S)) #define SPI_MEM_SLV_ST_V 0xF @@ -157,7 +157,7 @@ lways 1. 0: Others..*/ #define SPI_MEM_DATA_IE_ALWAYS_ON_V 0x1 #define SPI_MEM_DATA_IE_ALWAYS_ON_S 31 /* SPI_MEM_DQS_IE_ALWAYS_ON : HRO ;bitpos:[30] ;default: 1'b0 ; */ -/*description: When accesses to flash, 1: the IE signals of pads connected to SPI_DQS are alway +/*description: When accesses to flash, 1: the IE signals of pads connected to SPI_DQS are always s 1. 0: Others..*/ #define SPI_MEM_DQS_IE_ALWAYS_ON (BIT(30)) #define SPI_MEM_DQS_IE_ALWAYS_ON_M (BIT(30)) @@ -229,14 +229,14 @@ UT and SPI_MEM_FREAD_DOUT. 1: enable 0: disable..*/ #define SPI_MEM_FASTRD_MODE_V 0x1 #define SPI_MEM_FASTRD_MODE_S 13 /* SPI_MEM_TX_CRC_EN : HRO ;bitpos:[11] ;default: 1'b0 ; */ -/*description: For SPI1, enable crc32 when writing encrypted data to flash. 1: enable 0:disabl +/*description: For SPI1, enable crc32 when writing encrypted data to flash. 1: enable 0:disable e.*/ #define SPI_MEM_TX_CRC_EN (BIT(11)) #define SPI_MEM_TX_CRC_EN_M (BIT(11)) #define SPI_MEM_TX_CRC_EN_V 0x1 #define SPI_MEM_TX_CRC_EN_S 11 /* SPI_MEM_FCS_CRC_EN : HRO ;bitpos:[10] ;default: 1'b0 ; */ -/*description: For SPI1, initialize crc32 module before writing encrypted data to flash. Activ +/*description: For SPI1, initialize crc32 module before writing encrypted data to flash. Active e low..*/ #define SPI_MEM_FCS_CRC_EN (BIT(10)) #define SPI_MEM_FCS_CRC_EN_M (BIT(10)) @@ -392,7 +392,7 @@ y the real AXI read data back. 0: When ARSIZE 0~1, MSPI reply SLV_ERR..*/ /* SPI_MEM_CLK_MODE : R/W ;bitpos:[1:0] ;default: 2'h0 ; */ /*description: SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delaye d one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inacti -ve 3: SPI clock is alwasy on..*/ +ve 3: SPI clock is always on..*/ #define SPI_MEM_CLK_MODE 0x00000003 #define SPI_MEM_CLK_MODE_M ((SPI_MEM_CLK_MODE_V)<<(SPI_MEM_CLK_MODE_S)) #define SPI_MEM_CLK_MODE_V 0x3 @@ -422,8 +422,8 @@ whether there is an ECC region or not..*/ #define SPI_MEM_SPLIT_TRANS_EN_V 0x1 #define SPI_MEM_SPLIT_TRANS_EN_S 24 /* SPI_MEM_ECC_16TO18_BYTE_EN : HRO ;bitpos:[14] ;default: 1'b0 ; */ -/*description: Set this bit to enable SPI0 and SPI1 ECC 16 bytes data with 2 ECC bytes mode whe -n accesses flash..*/ +/*description: Set this bit to enable SPI0 and SPI1 ECC 16 bytes data with 2 ECC bytes mode when +accesses flash..*/ #define SPI_MEM_ECC_16TO18_BYTE_EN (BIT(14)) #define SPI_MEM_ECC_16TO18_BYTE_EN_M (BIT(14)) #define SPI_MEM_ECC_16TO18_BYTE_EN_V 0x1 @@ -803,8 +803,8 @@ he register value shall be (bit_num-1)..*/ #define SPI_MEM_SRAM_RDUMMY_CYCLELEN_V 0x3F #define SPI_MEM_SRAM_RDUMMY_CYCLELEN_S 6 /* SPI_MEM_CACHE_SRAM_USR_RCMD : HRO ;bitpos:[5] ;default: 1'b1 ; */ -/*description: For SPI0, In the external RAM mode cache read external RAM for user define comma -nd..*/ +/*description: For SPI0, In the external RAM mode cache read external RAM for user define command +..*/ #define SPI_MEM_CACHE_SRAM_USR_RCMD (BIT(5)) #define SPI_MEM_CACHE_SRAM_USR_RCMD_M (BIT(5)) #define SPI_MEM_CACHE_SRAM_USR_RCMD_V 0x1 @@ -1011,7 +1011,7 @@ e for sram..*/ #define SPI_MEM_SRAM_CLK_REG(i) (REG_SPI_MEM_BASE(i) + 0x50) /* SPI_MEM_SCLK_EQU_SYSCLK : HRO ;bitpos:[31] ;default: 1'b0 ; */ -/*description: For SPI0 external RAM interface, 1: spi_mem_clk is eqaul to system 0: spi_mem_c +/*description: For SPI0 external RAM interface, 1: spi_mem_clk is equal to system 0: spi_mem_c lk is divided from system clock..*/ #define SPI_MEM_SCLK_EQU_SYSCLK (BIT(31)) #define SPI_MEM_SCLK_EQU_SYSCLK_M (BIT(31)) @@ -1269,7 +1269,7 @@ out, status_in[15:0] is valid when two bytes of data are read out), SUS/SUS1/SUS #define SPI_MEM_FLASH_PES_EN_S 5 /* SPI_MEM_PES_PER_EN : R/W ;bitpos:[4] ;default: 1'b0 ; */ /*description: Set this bit to enable PES end triggers PER transfer option. If this bit is 0, a -pplication should send PER after PES is done..*/ +application should send PER after PES is done..*/ #define SPI_MEM_PES_PER_EN (BIT(4)) #define SPI_MEM_PES_PER_EN_M (BIT(4)) #define SPI_MEM_PES_PER_EN_V 0x1 @@ -1291,8 +1291,8 @@ resume command is sent..*/ #define SPI_MEM_FLASH_PER_WAIT_EN_V 0x1 #define SPI_MEM_FLASH_PER_WAIT_EN_S 2 /* SPI_MEM_FLASH_PES : R/W/SC ;bitpos:[1] ;default: 1'b0 ; */ -/*description: program erase suspend bit, program erase suspend operation will be triggered whe -n the bit is set. The bit will be cleared once the operation done.1: enable 0: d +/*description: program erase suspend bit, program erase suspend operation will be triggered when +the bit is set. The bit will be cleared once the operation done.1: enable 0: d isable..*/ #define SPI_MEM_FLASH_PES (BIT(1)) #define SPI_MEM_FLASH_PES_M (BIT(1)) @@ -1536,7 +1536,7 @@ mmand is sent. 0: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4) SPI_CLK cycles #define SPI_MEM_INT_RAW_REG(i) (REG_SPI_MEM_BASE(i) + 0xC8) /* SPI_MEM_BROWN_OUT_INT_RAW : R/WTC/SS ;bitpos:[10] ;default: 1'b0 ; */ /*description: The raw bit for SPI_MEM_BROWN_OUT_INT interrupt. 1: Triggered condition is that -chip is loosing power and RTC module sends out brown out close flash request to +chip is losing power and RTC module sends out brown out close flash request to SPI1. After SPI1 sends out suspend command to flash, this interrupt is triggered and MSPI returns to idle state. 0: Others..*/ #define SPI_MEM_BROWN_OUT_INT_RAW (BIT(10)) @@ -1580,8 +1580,8 @@ his bit is triggered when the error times of SPI0/1 ECC read external RAM are eq ual or bigger than SPI_MEM_ECC_ERR_INT_NUM. When SPI_FMEM_ECC_ERR_INT_EN and SP I_SMEM_ECC_ERR_INT_EN are set, this bit is triggered when the total error times of SPI0/1 ECC read external RAM and flash are equal or bigger than SPI_MEM_ECC_E -RR_INT_NUM. When SPI_FMEM_ECC_ERR_INT_EN and SPI_SMEM_ECC_ERR_INT_EN are cleare -d, this bit will not be triggered..*/ +RR_INT_NUM. When SPI_FMEM_ECC_ERR_INT_EN and SPI_SMEM_ECC_ERR_INT_EN are clearer, +this bit will not be triggered..*/ #define SPI_MEM_ECC_ERR_INT_RAW (BIT(5)) #define SPI_MEM_ECC_ERR_INT_RAW_M (BIT(5)) #define SPI_MEM_ECC_ERR_INT_RAW_V 0x1 @@ -2371,9 +2371,9 @@ and RDATA_AFIFO are empty and spi0_mst_st is IDLE..*/ #define SPI_MEM_ALL_FIFO_EMPTY_V 0x1 #define SPI_MEM_ALL_FIFO_EMPTY_S 26 /* SPI_MEM_AXI_ERR_ADDR : R/SS/WTC ;bitpos:[25:0] ;default: 26'h0 ; */ -/*description: This bits show the first AXI write/read invalid error or AXI write flash error a -ddress. It is cleared by when SPI_MEM_AXI_WADDR_ERR_INT_CLR, SPI_MEM_AXI_WR_FLAS -H_ERR_IN_CLR or SPI_MEM_AXI_RADDR_ERR_IN_CLR bit is set..*/ +/*description: This bits show the first AXI write/read invalid error or AXI write flash error +address. It is cleared by when SPI_MEM_AXI_WADDR_ERR_INT_CLR, SPI_MEM_AXI_WR_FLASH_ERR_IN_CLR +or SPI_MEM_AXI_RADDR_ERR_IN_CLR bit is set..*/ #define SPI_MEM_AXI_ERR_ADDR 0x03FFFFFF #define SPI_MEM_AXI_ERR_ADDR_M ((SPI_MEM_AXI_ERR_ADDR_V)<<(SPI_MEM_AXI_ERR_ADDR_S)) #define SPI_MEM_AXI_ERR_ADDR_V 0x3FFFFFF @@ -2679,7 +2679,7 @@ ations..*/ #define SPI_MEM_SMEM_TIMING_CALI_V 0x1 #define SPI_MEM_SMEM_TIMING_CALI_S 1 /* SPI_MEM_SMEM_TIMING_CLK_ENA : HRO ;bitpos:[0] ;default: 1'b1 ; */ -/*description: For sram, the bit is used to enable timing adjust clock for all reading operatio +/*description: For sram, the bit is used to enable timing adjust clock for all reading operation ns..*/ #define SPI_MEM_SMEM_TIMING_CLK_ENA (BIT(0)) #define SPI_MEM_SMEM_TIMING_CLK_ENA_M (BIT(0)) @@ -2937,8 +2937,8 @@ SPI core clock cycles..*/ #define SPI_MEM_SMEM_CS_HOLD_DELAY_V 0x3F #define SPI_MEM_SMEM_CS_HOLD_DELAY_S 25 /* SPI_MEM_SMEM_ECC_16TO18_BYTE_EN : HRO ;bitpos:[16] ;default: 1'b0 ; */ -/*description: Set this bit to enable SPI0 and SPI1 ECC 16 bytes data with 2 ECC bytes mode whe -n accesses external RAM..*/ +/*description: Set this bit to enable SPI0 and SPI1 ECC 16 bytes data with 2 ECC bytes mode when +accesses external RAM..*/ #define SPI_MEM_SMEM_ECC_16TO18_BYTE_EN (BIT(16)) #define SPI_MEM_SMEM_ECC_16TO18_BYTE_EN_M (BIT(16)) #define SPI_MEM_SMEM_ECC_16TO18_BYTE_EN_V 0x1 diff --git a/components/soc/esp32h2/include/soc/spi_mem_struct.h b/components/soc/esp32h2/register/soc/spi_mem_struct.h similarity index 99% rename from components/soc/esp32h2/include/soc/spi_mem_struct.h rename to components/soc/esp32h2/register/soc/spi_mem_struct.h index 95578484588d..45810eb9afab 100644 --- a/components/soc/esp32h2/include/soc/spi_mem_struct.h +++ b/components/soc/esp32h2/register/soc/spi_mem_struct.h @@ -9,7 +9,7 @@ #ifdef __cplusplus extern "C" { #endif -#include "soc.h" +#include "soc/soc.h" typedef volatile struct spi_mem_dev_s { union { @@ -70,7 +70,7 @@ typedef volatile struct spi_mem_dev_s { } ctrl; union { struct { - uint32_t clk_mode : 2; /*SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delayed one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3: SPI clock is alwasy on.*/ + uint32_t clk_mode : 2; /*SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delayed one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3: SPI clock is always on.*/ uint32_t cs_hold_dly_res : 10; /*After RES/DP/HPM command is sent, SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 512) SPI_CLK cycles.*/ uint32_t reserved2 : 9; /*reserved*/ uint32_t reg_ar_size0_1_support_en : 1; /*1: MSPI supports ARSIZE 0~3. When ARSIZE =0~2, MSPI read address is 4*n and reply the real AXI read data back. 0: When ARSIZE 0~1, MSPI reply SLV_ERR.*/ @@ -272,7 +272,7 @@ typedef volatile struct spi_mem_dev_s { uint32_t sclkcnt_h : 8; /*For SPI0 external RAM interface, it must be floor((spi_mem_clkcnt_N+1)/2-1).*/ uint32_t sclkcnt_n : 8; /*For SPI0 external RAM interface, it is the divider of spi_mem_clk. So spi_mem_clk frequency is system/(spi_mem_clkcnt_N+1)*/ uint32_t reserved24 : 7; /*reserved*/ - uint32_t sclk_equ_sysclk : 1; /*For SPI0 external RAM interface, 1: spi_mem_clk is eqaul to system 0: spi_mem_clk is divided from system clock.*/ + uint32_t sclk_equ_sysclk : 1; /*For SPI0 external RAM interface, 1: spi_mem_clk is equal to system 0: spi_mem_clk is divided from system clock.*/ }; uint32_t val; } sram_clk; @@ -389,7 +389,7 @@ typedef volatile struct spi_mem_dev_s { uint32_t axi_raddr_err : 1; /*The raw bit for SPI_MEM_AXI_RADDR_ERR_INT interrupt. 1: Triggered when AXI read address is invalid by compared to MMU configuration. 0: Others.*/ uint32_t axi_wr_flash_err : 1; /*The raw bit for SPI_MEM_AXI_WR_FALSH_ERR_INT interrupt. 1: Triggered when AXI write flash request is received. 0: Others.*/ uint32_t axi_waddr_err : 1; /*The raw bit for SPI_MEM_AXI_WADDR_ERR_INT interrupt. 1: Triggered when AXI write address is invalid by compared to MMU configuration. 0: Others.*/ - uint32_t brown_out : 1; /*The raw bit for SPI_MEM_BROWN_OUT_INT interrupt. 1: Triggered condition is that chip is loosing power and RTC module sends out brown out close flash request to SPI1. After SPI1 sends out suspend command to flash, this interrupt is triggered and MSPI returns to idle state. 0: Others.*/ + uint32_t brown_out : 1; /*The raw bit for SPI_MEM_BROWN_OUT_INT interrupt. 1: Triggered condition is that chip is losing power and RTC module sends out brown out close flash request to SPI1. After SPI1 sends out suspend command to flash, this interrupt is triggered and MSPI returns to idle state. 0: Others.*/ uint32_t reserved11 : 21; /*reserved*/ }; uint32_t val; @@ -1026,7 +1026,7 @@ typedef volatile struct spi_mem_dev_s { } mmu_power_ctrl; union { struct { - uint32_t reg_crypt_security_level : 3; /*Set the security level of spi mem cryption. 0: Shut off cryption DPA funtion. 1-7: The bigger the number is, the more secure the cryption is. (Note that the performance of cryption will decrease together with this number increasing)*/ + uint32_t reg_crypt_security_level : 3; /*Set the security level of spi mem cryption. 0: Shut off cryption DPA function. 1-7: The bigger the number is, the more secure the cryption is. (Note that the performance of cryption will decrease together with this number increasing)*/ uint32_t reg_crypt_calc_d_dpa_en : 1; /*Only available when SPI_CRYPT_SECURITY_LEVEL is not 0. 1: Enable DPA in the calculation that using key 1 or key 2. 0: Enable DPA only in the calculation that using key 1.*/ uint32_t reg_crypt_dpa_selectister : 1; /*1: MSPI XTS DPA clock gate is controlled by SPI_CRYPT_CALC_D_DPA_EN and SPI_CRYPT_SECURITY_LEVEL. 0: Controlled by efuse bits.*/ uint32_t reserved5 : 27; /*reserved*/ diff --git a/components/soc/esp32h2/include/soc/spi_reg.h b/components/soc/esp32h2/register/soc/spi_reg.h similarity index 99% rename from components/soc/esp32h2/include/soc/spi_reg.h rename to components/soc/esp32h2/register/soc/spi_reg.h index 126b6b53243c..44c7cf23dffe 100644 --- a/components/soc/esp32h2/include/soc/spi_reg.h +++ b/components/soc/esp32h2/register/soc/spi_reg.h @@ -221,7 +221,7 @@ extern "C" { #define SPI_CLKDIV_PRE_V 0x0000000FU #define SPI_CLKDIV_PRE_S 18 /** SPI_CLK_EQU_SYSCLK : R/W; bitpos: [31]; default: 1; - * In the master mode 1: spi_clk is eqaul to system 0: spi_clk is divided from system + * In the master mode 1: spi_clk is equal to system 0: spi_clk is divided from system * clock. Can be configured in CONF state. */ #define SPI_CLK_EQU_SYSCLK (BIT(31)) @@ -1950,7 +1950,7 @@ extern "C" { /** SPI_CLK_MODE : R/W; bitpos: [1:0]; default: 0; * SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delayed * one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3: - * SPI clock is alwasy on. Can be configured in CONF state. + * SPI clock is always on. Can be configured in CONF state. */ #define SPI_CLK_MODE 0x00000003U #define SPI_CLK_MODE_M (SPI_CLK_MODE_V << SPI_CLK_MODE_S) diff --git a/components/soc/esp32h2/include/soc/spi_struct.h b/components/soc/esp32h2/register/soc/spi_struct.h similarity index 99% rename from components/soc/esp32h2/include/soc/spi_struct.h rename to components/soc/esp32h2/register/soc/spi_struct.h index de7705f92c91..76644890a568 100644 --- a/components/soc/esp32h2/include/soc/spi_struct.h +++ b/components/soc/esp32h2/register/soc/spi_struct.h @@ -511,7 +511,7 @@ typedef union { /** clk_mode : R/W; bitpos: [1:0]; default: 0; * SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delayed * one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3: - * SPI clock is alwasy on. Can be configured in CONF state. + * SPI clock is always on. Can be configured in CONF state. */ uint32_t clk_mode:2; /** clk_mode_13 : R/W; bitpos: [2]; default: 0; @@ -624,7 +624,7 @@ typedef union { uint32_t clkdiv_pre:4; uint32_t reserved_22:9; /** clk_equ_sysclk : R/W; bitpos: [31]; default: 1; - * In the master mode 1: spi_clk is eqaul to system 0: spi_clk is divided from system + * In the master mode 1: spi_clk is equal to system 0: spi_clk is divided from system * clock. Can be configured in CONF state. */ uint32_t clk_equ_sysclk:1; diff --git a/components/soc/esp32h2/include/soc/systimer_reg.h b/components/soc/esp32h2/register/soc/systimer_reg.h similarity index 100% rename from components/soc/esp32h2/include/soc/systimer_reg.h rename to components/soc/esp32h2/register/soc/systimer_reg.h diff --git a/components/soc/esp32h2/include/soc/systimer_struct.h b/components/soc/esp32h2/register/soc/systimer_struct.h similarity index 100% rename from components/soc/esp32h2/include/soc/systimer_struct.h rename to components/soc/esp32h2/register/soc/systimer_struct.h diff --git a/components/soc/esp32h2/include/soc/tee_reg.h b/components/soc/esp32h2/register/soc/tee_reg.h similarity index 100% rename from components/soc/esp32h2/include/soc/tee_reg.h rename to components/soc/esp32h2/register/soc/tee_reg.h diff --git a/components/soc/esp32h2/include/soc/tee_struct.h b/components/soc/esp32h2/register/soc/tee_struct.h similarity index 100% rename from components/soc/esp32h2/include/soc/tee_struct.h rename to components/soc/esp32h2/register/soc/tee_struct.h diff --git a/components/soc/esp32h2/include/soc/timer_group_reg.h b/components/soc/esp32h2/register/soc/timer_group_reg.h similarity index 100% rename from components/soc/esp32h2/include/soc/timer_group_reg.h rename to components/soc/esp32h2/register/soc/timer_group_reg.h diff --git a/components/soc/esp32h2/include/soc/timer_group_struct.h b/components/soc/esp32h2/register/soc/timer_group_struct.h similarity index 100% rename from components/soc/esp32h2/include/soc/timer_group_struct.h rename to components/soc/esp32h2/register/soc/timer_group_struct.h diff --git a/components/soc/esp32h2/include/soc/trace_reg.h b/components/soc/esp32h2/register/soc/trace_reg.h similarity index 99% rename from components/soc/esp32h2/include/soc/trace_reg.h rename to components/soc/esp32h2/register/soc/trace_reg.h index a5c3eda9dc77..b363fbd1f8eb 100644 --- a/components/soc/esp32h2/include/soc/trace_reg.h +++ b/components/soc/esp32h2/register/soc/trace_reg.h @@ -154,7 +154,7 @@ extern "C" { #define TRACE_TRIGGER_OFF_V 0x00000001U #define TRACE_TRIGGER_OFF_S 1 /** TRACE_MEM_LOOP : R/W; bitpos: [2]; default: 1; - * if this reg is 1, trace will loop wrtie trace_mem. If is 0, when mem_current_addr + * if this reg is 1, trace will loop write trace_mem. If is 0, when mem_current_addr * at mem_end_addr, it will stop at the mem_end_addr */ #define TRACE_MEM_LOOP (BIT(2)) diff --git a/components/soc/esp32h2/include/soc/trace_struct.h b/components/soc/esp32h2/register/soc/trace_struct.h similarity index 99% rename from components/soc/esp32h2/include/soc/trace_struct.h rename to components/soc/esp32h2/register/soc/trace_struct.h index 41677de42885..365ac45dd06a 100644 --- a/components/soc/esp32h2/include/soc/trace_struct.h +++ b/components/soc/esp32h2/register/soc/trace_struct.h @@ -156,7 +156,7 @@ typedef union { */ uint32_t trigger_off:1; /** mem_loop : R/W; bitpos: [2]; default: 1; - * if this reg is 1, trace will loop wrtie trace_mem. If is 0, when mem_current_addr + * if this reg is 1, trace will loop write trace_mem. If is 0, when mem_current_addr * at mem_end_addr, it will stop at the mem_end_addr */ uint32_t mem_loop:1; diff --git a/components/soc/esp32h2/include/soc/twai_reg.h b/components/soc/esp32h2/register/soc/twai_reg.h similarity index 100% rename from components/soc/esp32h2/include/soc/twai_reg.h rename to components/soc/esp32h2/register/soc/twai_reg.h diff --git a/components/soc/esp32h2/include/soc/twai_struct.h b/components/soc/esp32h2/register/soc/twai_struct.h similarity index 100% rename from components/soc/esp32h2/include/soc/twai_struct.h rename to components/soc/esp32h2/register/soc/twai_struct.h diff --git a/components/soc/esp32h2/include/soc/uart_reg.h b/components/soc/esp32h2/register/soc/uart_reg.h similarity index 99% rename from components/soc/esp32h2/include/soc/uart_reg.h rename to components/soc/esp32h2/register/soc/uart_reg.h index 5c8d8c01f9f9..a8c550dfbb1a 100644 --- a/components/soc/esp32h2/include/soc/uart_reg.h +++ b/components/soc/esp32h2/register/soc/uart_reg.h @@ -100,7 +100,7 @@ extern "C" { #define UART_RXFIFO_TOUT_INT_RAW_V 0x00000001U #define UART_RXFIFO_TOUT_INT_RAW_S 8 /** UART_SW_XON_INT_RAW : R/WTC/SS; bitpos: [9]; default: 0; - * This interrupt raw bit turns to high level when receiver recevies Xon char when + * This interrupt raw bit turns to high level when receiver receives Xon char when * uart_sw_flow_con_en is set to 1. */ #define UART_SW_XON_INT_RAW (BIT(9)) @@ -285,7 +285,7 @@ extern "C" { #define UART_TX_BRK_DONE_INT_ST_V 0x00000001U #define UART_TX_BRK_DONE_INT_ST_S 12 /** UART_TX_BRK_IDLE_DONE_INT_ST : RO; bitpos: [13]; default: 0; - * This is the stauts bit for tx_brk_idle_done_int_raw when tx_brk_idle_done_int_ena + * This is the status bit for tx_brk_idle_done_int_raw when tx_brk_idle_done_int_ena * is set to 1. */ #define UART_TX_BRK_IDLE_DONE_INT_ST (BIT(13)) @@ -760,7 +760,7 @@ extern "C" { #define UART_STOP_BIT_NUM_V 0x00000003U #define UART_STOP_BIT_NUM_S 4 /** UART_TXD_BRK : R/W; bitpos: [6]; default: 0; - * Set this bit to enbale transmitter to send NULL when the process of sending data + * Set this bit to enable transmitter to send NULL when the process of sending data * is done. */ #define UART_TXD_BRK (BIT(6)) @@ -1326,7 +1326,7 @@ extern "C" { */ #define UART_TOUT_CONF_SYNC_REG(i) (REG_UART_BASE(i) + 0x64) /** UART_RX_TOUT_EN : R/W; bitpos: [0]; default: 0; - * This is the enble bit for uart receiver's timeout function. + * This is the enable bit for uart receiver's timeout function. */ #define UART_RX_TOUT_EN (BIT(0)) #define UART_RX_TOUT_EN_M (UART_RX_TOUT_EN_V << UART_RX_TOUT_EN_S) @@ -1450,7 +1450,7 @@ extern "C" { */ #define UART_HIGHPULSE_REG(i) (REG_UART_BASE(i) + 0x80) /** UART_HIGHPULSE_MIN_CNT : RO; bitpos: [11:0]; default: 4095; - * This register stores the value of the maxinum duration time for the high level + * This register stores the value of the maximum duration time for the high level * pulse. It is used in baud rate-detect process. */ #define UART_HIGHPULSE_MIN_CNT 0x00000FFFU diff --git a/components/soc/esp32h2/include/soc/uart_struct.h b/components/soc/esp32h2/register/soc/uart_struct.h similarity index 99% rename from components/soc/esp32h2/include/soc/uart_struct.h rename to components/soc/esp32h2/register/soc/uart_struct.h index 467f86ff5a44..b1ae4a2b419d 100644 --- a/components/soc/esp32h2/include/soc/uart_struct.h +++ b/components/soc/esp32h2/register/soc/uart_struct.h @@ -49,7 +49,7 @@ typedef union { typedef union { struct { /** rx_tout_en : R/W; bitpos: [0]; default: 0; - * This is the enble bit for uart receiver's timeout function. + * This is the enable bit for uart receiver's timeout function. */ uint32_t rx_tout_en:1; /** rx_tout_flow_dis : R/W; bitpos: [1]; default: 0; @@ -120,7 +120,7 @@ typedef union { */ uint32_t rxfifo_tout:1; /** sw_xon : R/WTC/SS; bitpos: [9]; default: 0; - * This interrupt raw bit turns to high level when receiver recevies Xon char when + * This interrupt raw bit turns to high level when receiver receives Xon char when * uart_sw_flow_con_en is set to 1. */ uint32_t sw_xon:1; @@ -238,7 +238,7 @@ typedef union { */ uint32_t tx_brk_done:1; /** tx_brk_idle_done : RO; bitpos: [13]; default: 0; - * This is the stauts bit for tx_brk_idle_done_int_raw when tx_brk_idle_done_int_ena + * This is the status bit for tx_brk_idle_done_int_raw when tx_brk_idle_done_int_ena * is set to 1. */ uint32_t tx_brk_idle_done:1; @@ -515,7 +515,7 @@ typedef union { */ uint32_t stop_bit_num:2; /** txd_brk : R/W; bitpos: [6]; default: 0; - * Set this bit to enbale transmitter to send NULL when the process of sending data + * Set this bit to enable transmitter to send NULL when the process of sending data * is done. */ uint32_t txd_brk:1; @@ -1120,7 +1120,7 @@ typedef union { typedef union { struct { /** highpulse_min_cnt : RO; bitpos: [11:0]; default: 4095; - * This register stores the value of the maxinum duration time for the high level + * This register stores the value of the maximum duration time for the high level * pulse. It is used in baud rate-detect process. */ uint32_t highpulse_min_cnt:12; diff --git a/components/soc/esp32h2/include/soc/uhci_reg.h b/components/soc/esp32h2/register/soc/uhci_reg.h similarity index 100% rename from components/soc/esp32h2/include/soc/uhci_reg.h rename to components/soc/esp32h2/register/soc/uhci_reg.h diff --git a/components/soc/esp32h2/include/soc/uhci_struct.h b/components/soc/esp32h2/register/soc/uhci_struct.h similarity index 100% rename from components/soc/esp32h2/include/soc/uhci_struct.h rename to components/soc/esp32h2/register/soc/uhci_struct.h diff --git a/components/soc/esp32h2/include/soc/usb_serial_jtag_reg.h b/components/soc/esp32h2/register/soc/usb_serial_jtag_reg.h similarity index 99% rename from components/soc/esp32h2/include/soc/usb_serial_jtag_reg.h rename to components/soc/esp32h2/register/soc/usb_serial_jtag_reg.h index eb4b8a1e039a..e188eea91118 100644 --- a/components/soc/esp32h2/include/soc/usb_serial_jtag_reg.h +++ b/components/soc/esp32h2/register/soc/usb_serial_jtag_reg.h @@ -1144,7 +1144,7 @@ extern "C" { #define USB_SERIAL_JTAG_SERIAL_OUT_AFIFO_RESET_RD_V 0x00000001U #define USB_SERIAL_JTAG_SERIAL_OUT_AFIFO_RESET_RD_S 3 /** USB_SERIAL_JTAG_SERIAL_OUT_AFIFO_REMPTY : RO; bitpos: [4]; default: 1; - * CDC_ACM OUTOUT async FIFO empty signal in read clock domain. + * CDC_ACM OUTPUT async FIFO empty signal in read clock domain. */ #define USB_SERIAL_JTAG_SERIAL_OUT_AFIFO_REMPTY (BIT(4)) #define USB_SERIAL_JTAG_SERIAL_OUT_AFIFO_REMPTY_M (USB_SERIAL_JTAG_SERIAL_OUT_AFIFO_REMPTY_V << USB_SERIAL_JTAG_SERIAL_OUT_AFIFO_REMPTY_S) diff --git a/components/soc/esp32h2/include/soc/usb_serial_jtag_struct.h b/components/soc/esp32h2/register/soc/usb_serial_jtag_struct.h similarity index 100% rename from components/soc/esp32h2/include/soc/usb_serial_jtag_struct.h rename to components/soc/esp32h2/register/soc/usb_serial_jtag_struct.h diff --git a/components/soc/esp32h2/include/soc/xts_aes_reg.h b/components/soc/esp32h2/register/soc/xts_aes_reg.h similarity index 98% rename from components/soc/esp32h2/include/soc/xts_aes_reg.h rename to components/soc/esp32h2/register/soc/xts_aes_reg.h index ab5f66583ed9..921701bc7421 100644 --- a/components/soc/esp32h2/include/soc/xts_aes_reg.h +++ b/components/soc/esp32h2/register/soc/xts_aes_reg.h @@ -32,7 +32,7 @@ s. Please do not use this field..*/ #define XTS_AES_DESTINATION_REG(i) (REG_SPI_MEM_BASE(i) + 0x344) /* XTS_AES_DESTINATION : R/W ;bitpos:[0] ;default: 1'b0 ; */ -/*description: This bit stores the destination parameter which will be used in manual encryptio +/*description: This bit stores the destination parameter which will be used in manual encryption n calculation. 0: flash(default), 1: psram(reserved). Only default value can be used..*/ #define XTS_AES_DESTINATION (BIT(0)) @@ -54,7 +54,7 @@ size parameter..*/ /* XTS_AES_TRIGGER : WT ;bitpos:[0] ;default: 1'b0 ; */ /*description: Set this bit to trigger the process of manual encryption calculation. This actio n should only be asserted when manual encryption status is 0. After this action, - manual encryption status becomes 1. After calculation is done, manual encryptio + manual encryption status becomes 1. After calculation is done, manual encryption n status becomes 2..*/ #define XTS_AES_TRIGGER (BIT(0)) #define XTS_AES_TRIGGER_M (BIT(0)) @@ -116,7 +116,7 @@ ing key 1..*/ #define XTS_AES_CRYPT_CALC_D_DPA_EN_V 0x1 #define XTS_AES_CRYPT_CALC_D_DPA_EN_S 3 /* XTS_AES_CRYPT_SECURITY_LEVEL : R/W ;bitpos:[2:0] ;default: 3'd7 ; */ -/*description: Set the security level of spi mem cryption. 0: Shut off cryption DPA funtion. 1- +/*description: Set the security level of spi mem cryption. 0: Shut off cryption DPA function. 1- 7: The bigger the number is, the more secure the cryption is. (Note that the per formance of cryption will decrease together with this number increasing).*/ #define XTS_AES_CRYPT_SECURITY_LEVEL 0x00000007 diff --git a/components/soc/esp32p4/include/soc/usb_wrap_struct.h b/components/soc/esp32p4/include/soc/usb_wrap_struct.h index b5f36b526dba..dd1b234e3426 100644 --- a/components/soc/esp32p4/include/soc/usb_wrap_struct.h +++ b/components/soc/esp32p4/include/soc/usb_wrap_struct.h @@ -121,7 +121,7 @@ typedef union { */ uint32_t test_enable:1; /** test_usb_wrap_oe : R/W; bitpos: [1]; default: 0; - * USB pad one in test. + * USB pad oen in test. */ uint32_t test_usb_wrap_oe:1; /** test_tx_dp : R/W; bitpos: [2]; default: 0; From 35953a6ea7fdf8a247289739ea5d61a75e975793 Mon Sep 17 00:00:00 2001 From: Frantisek Hrbata Date: Tue, 8 Oct 2024 16:51:48 +0200 Subject: [PATCH 097/365] fix(ldgen): enable default name SORT in linker fragment Currently, the `SORT` flag mandates the inclusion of at least the `sort_by_first` argument in the grammar, despite the documentation[1] indicating that `SORT` can be utilized without any arguments, defaulting to sorting input sections by name. Fix this by modifying the grammar to allow a default `SORT` and update a test accordingly. [1] https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-guides/ linker-script-generation.html Signed-off-by: Frantisek Hrbata --- tools/ldgen/ldgen/fragments.py | 43 ++++++++++++++++++++++-------- tools/ldgen/test/test_fragments.py | 4 ++- 2 files changed, 35 insertions(+), 12 deletions(-) diff --git a/tools/ldgen/ldgen/fragments.py b/tools/ldgen/ldgen/fragments.py index 0acd81f605d8..80cc167e207a 100644 --- a/tools/ldgen/ldgen/fragments.py +++ b/tools/ldgen/ldgen/fragments.py @@ -1,13 +1,34 @@ # -# SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD +# SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD # SPDX-License-Identifier: Apache-2.0 # - -from typing import Any, Dict, List, Optional, Set, Tuple, Union - -from pyparsing import (Combine, Forward, Group, IndentedBlock, Keyword, LineEnd, Literal, OneOrMore, Opt, - ParseFatalException, SkipTo, Suppress, Word, ZeroOrMore, alphanums, alphas, delimited_list, - nums, rest_of_line) +from typing import Any +from typing import Dict +from typing import List +from typing import Optional +from typing import Set +from typing import Tuple +from typing import Union + +from pyparsing import alphanums +from pyparsing import alphas +from pyparsing import Combine +from pyparsing import delimited_list +from pyparsing import Forward +from pyparsing import Group +from pyparsing import IndentedBlock +from pyparsing import Keyword +from pyparsing import LineEnd +from pyparsing import Literal +from pyparsing import nums +from pyparsing import OneOrMore +from pyparsing import Opt +from pyparsing import ParseFatalException +from pyparsing import rest_of_line +from pyparsing import SkipTo +from pyparsing import Suppress +from pyparsing import Word +from pyparsing import ZeroOrMore class Empty: @@ -227,11 +248,11 @@ class Sort(EntryFlag): _keywords = Keyword('name') | Keyword('alignment') | Keyword('init_priority') SORT = (Keyword('SORT').suppress() + Suppress('(') - + _keywords.set_results_name('first') - + Opt(Suppress(',') + _keywords.set_results_name('second')) + + Opt(_keywords.set_results_name('first') + + Opt(Suppress(',') + _keywords.set_results_name('second'))) + Suppress(')')) - def __init__(self, first: str, second: Optional[str] = None): + def __init__(self, first: Optional[str] = None, second: Optional[str] = None): self.first = first self.second = second @@ -244,7 +265,7 @@ def __eq__(self, other): @staticmethod def parse(toks): - return Sort(toks.first, toks.second or None) + return Sort(toks.first or None, toks.second or None) class Flag: diff --git a/tools/ldgen/test/test_fragments.py b/tools/ldgen/test/test_fragments.py index 9cc3899e989c..c7e72892eef4 100755 --- a/tools/ldgen/test/test_fragments.py +++ b/tools/ldgen/test/test_fragments.py @@ -705,6 +705,7 @@ def test_sort_flag(self): archive: libmain.a entries: obj1 (default); + text->flash_text SORT(), text->flash_text SORT(name), rodata->flash_rodata SORT(alignment), data->dram0_data SORT(init_priority), @@ -717,7 +718,8 @@ def test_sort_flag(self): fragment_file = parse_fragment_file(test_fragment, self.sdkconfig) fragment = fragment_file.fragments[0] - expected = [Flag('text', 'flash_text', [Sort('name')]), + expected = [Flag('text', 'flash_text', [Sort()]), + Flag('text', 'flash_text', [Sort('name')]), Flag('rodata', 'flash_rodata', [Sort('alignment')]), Flag('data', 'dram0_data', [Sort('init_priority')]), Flag('bss', 'dram0_bss', [Sort('name', 'alignment')]), From e9bd3c01f00cc8d2e9765e8fd72c04f341b1b485 Mon Sep 17 00:00:00 2001 From: Armando Date: Fri, 27 Sep 2024 11:26:24 +0800 Subject: [PATCH 098/365] change(flash): flash ops sanitizer --- tools/test_apps/system/panic/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/test_apps/system/panic/CMakeLists.txt b/tools/test_apps/system/panic/CMakeLists.txt index 3305b7b4f6f6..e9db4327f57b 100644 --- a/tools/test_apps/system/panic/CMakeLists.txt +++ b/tools/test_apps/system/panic/CMakeLists.txt @@ -17,7 +17,7 @@ if(CONFIG_TEST_MEMPROT) endif() endif() -if(NOT CONFIG_TEST_MEMPROT AND NOT CONFIG_ESP_COREDUMP_CAPTURE_DRAM AND NOT CONFIG_SPIRAM) +if(NOT CONFIG_TEST_MEMPROT AND NOT CONFIG_ESP_COREDUMP_CAPTURE_DRAM) # Enable UBSAN checks # # shift-base sanitizer is disabled due to the following pattern found in register header files: From b6e558d55d60fa3dcab0208e769becd5fcb95b54 Mon Sep 17 00:00:00 2001 From: "C.S.M" Date: Wed, 9 Oct 2024 16:23:23 +0800 Subject: [PATCH 099/365] fix(i2c_master): fix the sleep retention number on p4 --- components/soc/esp32p4/include/soc/retention_periph_defs.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/components/soc/esp32p4/include/soc/retention_periph_defs.h b/components/soc/esp32p4/include/soc/retention_periph_defs.h index 37c04d2071b9..48cf71404c6e 100644 --- a/components/soc/esp32p4/include/soc/retention_periph_defs.h +++ b/components/soc/esp32p4/include/soc/retention_periph_defs.h @@ -40,12 +40,12 @@ typedef enum periph_retention_module { SLEEP_RETENTION_MODULE_AXI_DMA_CH0 = 16, SLEEP_RETENTION_MODULE_AXI_DMA_CH1 = 17, SLEEP_RETENTION_MODULE_AXI_DMA_CH2 = 18, - SLEEP_RETENTION_MODULE_I2C0 = 19, - SLEEP_RETENTION_MODULE_I2C1 = 20, SLEEP_RETENTION_MODULE_I2S0 = 19, SLEEP_RETENTION_MODULE_I2S1 = 20, SLEEP_RETENTION_MODULE_I2S2 = 21, + SLEEP_RETENTION_MODULE_I2C0 = 22, + SLEEP_RETENTION_MODULE_I2C1 = 23, SLEEP_RETENTION_MODULE_MAX = 31 } periph_retention_module_t; From 418583a5be0c4bd06b4d25a6d6391aba68a5ff04 Mon Sep 17 00:00:00 2001 From: Roman Leonov Date: Wed, 9 Oct 2024 11:05:21 +0200 Subject: [PATCH 100/365] fix(usb_host_lib): Returned task suspend --- .../peripherals/usb/host/usb_host_lib/main/class_driver.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/peripherals/usb/host/usb_host_lib/main/class_driver.c b/examples/peripherals/usb/host/usb_host_lib/main/class_driver.c index 3b7077986f29..5a89e40dea3a 100644 --- a/examples/peripherals/usb/host/usb_host_lib/main/class_driver.c +++ b/examples/peripherals/usb/host/usb_host_lib/main/class_driver.c @@ -206,7 +206,7 @@ void class_driver_task(void *arg) SemaphoreHandle_t mux_lock = xSemaphoreCreateMutex(); if (mux_lock == NULL) { ESP_LOGE(TAG, "Unable to create class driver mutex"); - vTaskDelete(NULL); + vTaskSuspend(NULL); return; } @@ -256,7 +256,7 @@ void class_driver_task(void *arg) if (mux_lock != NULL) { vSemaphoreDelete(mux_lock); } - vTaskDelete(NULL); + vTaskSuspend(NULL); } void class_driver_client_deregister(void) From 04f757686f1fe4edd55472c8cd4a824ec5d1f29e Mon Sep 17 00:00:00 2001 From: weiyuhan Date: Wed, 9 Oct 2024 17:37:20 +0800 Subject: [PATCH 101/365] docs(ble): Updated one feature name in feature status table --- docs/docs_not_updated/esp32c5.txt | 33 ------------------- docs/docs_not_updated/esp32c61.txt | 33 ------------------- .../ble/ble-feature-support-status.rst | 32 +++++++++--------- .../ble/host-feature-support-status.rst | 2 +- docs/en/api-guides/ble/overview.rst | 4 +-- .../ble/ble-feature-support-status.rst | 32 +++++++++--------- .../ble/host-feature-support-status.rst | 2 +- docs/zh_CN/api-guides/ble/overview.rst | 4 +-- 8 files changed, 38 insertions(+), 104 deletions(-) diff --git a/docs/docs_not_updated/esp32c5.txt b/docs/docs_not_updated/esp32c5.txt index 78e9f9ee899b..7a8cf3a65db4 100644 --- a/docs/docs_not_updated/esp32c5.txt +++ b/docs/docs_not_updated/esp32c5.txt @@ -1,19 +1,12 @@ api-guides/low-power-mode.rst api-guides/RF_calibration.rst api-guides/deep-sleep-stub.rst -api-guides/blufi.rst api-guides/coexist.rst api-guides/wifi.rst -api-guides/bluetooth.rst api-guides/wireshark-user-guide.rst api-guides/esp-wifi-mesh.rst api-guides/inc/external-ram-esp32-notes.rst api-guides/current-consumption-measurement-modules.rst -api-guides/esp-ble-mesh/ble-mesh-index.rst -api-guides/esp-ble-mesh/ble-mesh-feature-list.rst -api-guides/esp-ble-mesh/ble-mesh-terminology.rst -api-guides/esp-ble-mesh/ble-mesh-architecture.rst -api-guides/esp-ble-mesh/ble-mesh-faq.rst api-guides/wifi-security.rst api-guides/openthread.rst api-reference/template.rst @@ -57,32 +50,6 @@ api-reference/system/async_memcpy.rst api-reference/system/power_management.rst api-reference/system/inc/power_management_esp32c5.rst api-reference/system/mm.rst -api-reference/bluetooth/esp_spp.rst -api-reference/bluetooth/esp_l2cap_bt.rst -api-reference/bluetooth/esp_hidd.rst -api-reference/bluetooth/esp_avrc.rst -api-reference/bluetooth/controller_vhci.rst -api-reference/bluetooth/esp_bt_defs.rst -api-reference/bluetooth/esp_hf_ag.rst -api-reference/bluetooth/esp_bt_main.rst -api-reference/bluetooth/esp_bt_device.rst -api-reference/bluetooth/esp_hidh.rst -api-reference/bluetooth/esp_gatts.rst -api-reference/bluetooth/esp_gattc.rst -api-reference/bluetooth/esp_sdp.rst -api-reference/bluetooth/bt_common.rst -api-reference/bluetooth/nimble/index.rst -api-reference/bluetooth/esp_hf_client.rst -api-reference/bluetooth/esp_a2dp.rst -api-reference/bluetooth/esp_blufi.rst -api-reference/bluetooth/bt_le.rst -api-reference/bluetooth/esp_hf_defs.rst -api-reference/bluetooth/esp_gap_bt.rst -api-reference/bluetooth/esp_gatt_defs.rst -api-reference/bluetooth/esp-ble-mesh.rst -api-reference/bluetooth/index.rst -api-reference/bluetooth/esp_gap_ble.rst -api-reference/bluetooth/classic_bt.rst api-reference/index.rst api-reference/protocols/esp_serial_slave_link.rst api-reference/protocols/esp_crt_bundle.rst diff --git a/docs/docs_not_updated/esp32c61.txt b/docs/docs_not_updated/esp32c61.txt index 7dfeaed03e79..192d4199bf77 100644 --- a/docs/docs_not_updated/esp32c61.txt +++ b/docs/docs_not_updated/esp32c61.txt @@ -7,23 +7,16 @@ api-guides/app_trace.rst api-guides/low-power-mode.rst api-guides/RF_calibration.rst api-guides/deep-sleep-stub.rst -api-guides/blufi.rst api-guides/lwip.rst api-guides/coexist.rst api-guides/wifi.rst api-guides/usb-otg-console.rst -api-guides/bluetooth.rst api-guides/wireshark-user-guide.rst api-guides/esp-wifi-mesh.rst api-guides/core_dump.rst api-guides/inc/external-ram-esp32-notes.rst api-guides/dfu.rst api-guides/current-consumption-measurement-modules.rst -api-guides/esp-ble-mesh/ble-mesh-index.rst -api-guides/esp-ble-mesh/ble-mesh-feature-list.rst -api-guides/esp-ble-mesh/ble-mesh-terminology.rst -api-guides/esp-ble-mesh/ble-mesh-architecture.rst -api-guides/esp-ble-mesh/ble-mesh-faq.rst api-guides/wifi-security.rst api-guides/index.rst api-guides/openthread.rst @@ -131,32 +124,6 @@ api-reference/system/inc/power_management_esp32c2.rst api-reference/system/inc/show-efuse-table_ESP32-S2.rst api-reference/system/mm.rst api-reference/system/index.rst -api-reference/bluetooth/esp_spp.rst -api-reference/bluetooth/esp_l2cap_bt.rst -api-reference/bluetooth/esp_hidd.rst -api-reference/bluetooth/esp_avrc.rst -api-reference/bluetooth/controller_vhci.rst -api-reference/bluetooth/esp_bt_defs.rst -api-reference/bluetooth/esp_hf_ag.rst -api-reference/bluetooth/esp_bt_main.rst -api-reference/bluetooth/esp_bt_device.rst -api-reference/bluetooth/esp_hidh.rst -api-reference/bluetooth/esp_gatts.rst -api-reference/bluetooth/esp_gattc.rst -api-reference/bluetooth/esp_sdp.rst -api-reference/bluetooth/bt_common.rst -api-reference/bluetooth/nimble/index.rst -api-reference/bluetooth/esp_hf_client.rst -api-reference/bluetooth/esp_a2dp.rst -api-reference/bluetooth/esp_blufi.rst -api-reference/bluetooth/bt_le.rst -api-reference/bluetooth/esp_hf_defs.rst -api-reference/bluetooth/esp_gap_bt.rst -api-reference/bluetooth/esp_gatt_defs.rst -api-reference/bluetooth/esp-ble-mesh.rst -api-reference/bluetooth/index.rst -api-reference/bluetooth/esp_gap_ble.rst -api-reference/bluetooth/classic_bt.rst api-reference/error-codes.rst api-reference/index.rst api-reference/protocols/icmp_echo.rst diff --git a/docs/en/api-guides/ble/ble-feature-support-status.rst b/docs/en/api-guides/ble/ble-feature-support-status.rst index 01a7aa5b3cc4..a750483ad3ff 100644 --- a/docs/en/api-guides/ble/ble-feature-support-status.rst +++ b/docs/en/api-guides/ble/ble-feature-support-status.rst @@ -162,7 +162,7 @@ If none of our chip series meet your needs, please contact `customer support tea - |experimental| - |experimental| * - - - Advertising Channel Index + - Randomized Advertising Channel Indexing - |unsupported| - |NA| - |NA| @@ -171,19 +171,19 @@ If none of our chip series meet your needs, please contact `customer support tea - .. only:: esp32 or esp32c3 or esp32s3 |unsupported| - .. only:: esp32c6 or esp32h2 or esp32c2 or esp32c5 + .. only:: esp32c6 or esp32h2 or esp32c2 or esp32c5 or esp32c61 |experimental| - .. only:: esp32 or esp32c3 or esp32s3 |unsupported| - .. only:: esp32c6 or esp32h2 or esp32c2 or esp32c5 + .. only:: esp32c6 or esp32h2 or esp32c2 or esp32c5 or esp32c61 |experimental| - .. only:: esp32 or esp32c3 or esp32s3 |unsupported| - .. only:: esp32c6 or esp32h2 or esp32c2 or esp32c5 + .. only:: esp32c6 or esp32h2 or esp32c2 or esp32c5 or esp32c61 |experimental| * - .. centered:: |5.2| @@ -201,14 +201,14 @@ If none of our chip series meet your needs, please contact `customer support tea - .. only:: esp32 or esp32c2 |unsupported| - .. only:: esp32c6 or esp32h2 or esp32c3 or esp32s3 or esp32c5 + .. only:: esp32c6 or esp32h2 or esp32c3 or esp32s3 or esp32c5 or esp32c61 |experimental| - |unsupported| - .. only:: esp32 or esp32c2 |unsupported| - .. only:: esp32c6 or esp32h2 or esp32c3 or esp32s3 or esp32c5 + .. only:: esp32c6 or esp32h2 or esp32c3 or esp32s3 or esp32c5 or esp31c61 |experimental| * - .. centered:: |5.3| @@ -216,31 +216,31 @@ If none of our chip series meet your needs, please contact `customer support tea - .. only:: esp32 or esp32c3 or esp32s3 |unsupported| - .. only:: esp32c6 or esp32c2 or esp32h2 or esp32c5 + .. only:: esp32c6 or esp32c2 or esp32h2 or esp32c5 or esp32c61 |supported| - .. only:: esp32 or esp32c3 or esp32s3 |unsupported| - .. only:: esp32c6 or esp32c2 or esp32h2 or esp32c5 + .. only:: esp32c6 or esp32c2 or esp32h2 or esp32c5 or esp32c61 |supported| - .. only:: esp32 or esp32c3 or esp32s3 |unsupported| - .. only:: esp32c6 or esp32c2 or esp32h2 or esp32c5 + .. only:: esp32c6 or esp32c2 or esp32h2 or esp32c5 or esp32c61 |supported| * - - LE Enhanced Connection Update (Connection Subrating) - - .. only:: esp32 or esp32c6 or esp32c2 or esp32h2 or esp32c5 + - .. only:: esp32 or esp32c6 or esp32c2 or esp32h2 or esp32c5 or esp32c61 |unsupported| .. only:: esp32c3 or esp32s3 |experimental| - |unsupported| - - .. only:: esp32 or esp32c6 or esp32c2 or esp32h2 or esp32c5 + - .. only:: esp32 or esp32c6 or esp32c2 or esp32h2 or esp32c5 or esp32c61 |unsupported| .. only:: esp32c3 or esp32s3 @@ -251,31 +251,31 @@ If none of our chip series meet your needs, please contact `customer support tea - .. only:: esp32 or esp32c3 or esp32s3 or esp32c2 |unsupported| - .. only:: esp32c6 or esp32h2 or esp32c5 + .. only:: esp32c6 or esp32h2 or esp32c5 or esp32c61 |experimental| - .. only:: esp32 or esp32c3 or esp32s3 or esp32c2 |unsupported| - .. only:: esp32c6 or esp32h2 or esp32c5 + .. only:: esp32c6 or esp32h2 or esp32c5 or esp32c61 |experimental| - .. only:: esp32 or esp32c3 or esp32s3 or esp32c2 |unsupported| - .. only:: esp32c6 or esp32h2 or esp32c5 + .. only:: esp32c6 or esp32h2 or esp32c5 or esp32c61 |experimental| * - .. centered:: |5.4| - Advertising Coding Selection - - .. only:: esp32 or esp32c6 or esp32c2 or esp32h2 or esp32c5 + - .. only:: esp32 or esp32c6 or esp32c2 or esp32h2 or esp32c5 or esp32c61 |unsupported| .. only:: esp32c3 or esp32s3 |experimental| - |unsupported| - - .. only:: esp32 or esp32c6 or esp32c2 or esp32h2 or esp32c5 + - .. only:: esp32 or esp32c6 or esp32c2 or esp32h2 or esp32c5 or esp31c61 |unsupported| .. only:: esp32c3 or esp32s3 diff --git a/docs/en/api-guides/ble/host-feature-support-status.rst b/docs/en/api-guides/ble/host-feature-support-status.rst index 1900dca3a6f2..75c5c4425ece 100644 --- a/docs/en/api-guides/ble/host-feature-support-status.rst +++ b/docs/en/api-guides/ble/host-feature-support-status.rst @@ -79,7 +79,7 @@ If none of our chip series meet your needs, please contact `customer support tea - |experimental| - |experimental| * - - - Advertising Channel Index + - Randomized Advertising Channel Indexing - |NA| - |NA| * - diff --git a/docs/en/api-guides/ble/overview.rst b/docs/en/api-guides/ble/overview.rst index e360d210cd4c..9058f82c8a65 100644 --- a/docs/en/api-guides/ble/overview.rst +++ b/docs/en/api-guides/ble/overview.rst @@ -13,13 +13,13 @@ This document provides an architecture overview of the Bluetooth Low Energy (Blu {IDF_TARGET_NAME} supports Bluetooth 5.0 (LE) and is certified for Bluetooth LE 5.4. -.. only:: esp32c2 or esp32c6 or esp32h2 +.. only:: esp32c2 or esp32c6 or esp32h2 or esp32c5 or esp32c61 {IDF_TARGET_NAME} supports Bluetooth 5.0 (LE) and is certified for Bluetooth LE 5.3. The Bluetooth LE stack in ESP-IDF is a layered architecture that enables Bluetooth functionality on {IDF_TARGET_NAME} chip series. The table below shows its architecture. -.. only:: esp32 or esp32s3 or esp32c3 or esp32c6 +.. only:: esp32 or esp32s3 or esp32c3 or esp32c6 or esp32c5 or esp32c61 .. figure:: ../../../_static/bluetooth-architecture.png :align: center diff --git a/docs/zh_CN/api-guides/ble/ble-feature-support-status.rst b/docs/zh_CN/api-guides/ble/ble-feature-support-status.rst index 60d3919ebb2a..288f0edfe733 100644 --- a/docs/zh_CN/api-guides/ble/ble-feature-support-status.rst +++ b/docs/zh_CN/api-guides/ble/ble-feature-support-status.rst @@ -162,7 +162,7 @@ - |experimental| - |experimental| * - - - Advertising Channel Index + - Randomized Advertising Channel Indexing - |unsupported| - |NA| - |NA| @@ -171,19 +171,19 @@ - .. only:: esp32 or esp32c3 or esp32s3 |unsupported| - .. only:: esp32c6 or esp32h2 or esp32c2 or esp32c5 + .. only:: esp32c6 or esp32h2 or esp32c2 or esp32c5 or esp32c61 |experimental| - .. only:: esp32 or esp32c3 or esp32s3 |unsupported| - .. only:: esp32c6 or esp32h2 or esp32c2 or esp32c5 + .. only:: esp32c6 or esp32h2 or esp32c2 or esp32c5 or esp32c61 |experimental| - .. only:: esp32 or esp32c3 or esp32s3 |unsupported| - .. only:: esp32c6 or esp32h2 or esp32c2 or esp32c5 + .. only:: esp32c6 or esp32h2 or esp32c2 or esp32c5 or esp32c61 |experimental| * - .. centered:: |5.2| @@ -201,14 +201,14 @@ - .. only:: esp32 or esp32c2 |unsupported| - .. only:: esp32c6 or esp32h2 or esp32c3 or esp32s3 or esp32c5 + .. only:: esp32c6 or esp32h2 or esp32c3 or esp32s3 or esp32c5 or esp32c61 |experimental| - |unsupported| - .. only:: esp32 or esp32c2 |unsupported| - .. only:: esp32c6 or esp32h2 or esp32c3 or esp32s3 or esp32c5 + .. only:: esp32c6 or esp32h2 or esp32c3 or esp32s3 or esp32c5 or esp32c61 |experimental| * - .. centered:: |5.3| @@ -216,31 +216,31 @@ - .. only:: esp32 or esp32c3 or esp32s3 |unsupported| - .. only:: esp32c6 or esp32c2 or esp32h2 or esp32c5 + .. only:: esp32c6 or esp32c2 or esp32h2 or esp32c5 or esp32c61 |supported| - .. only:: esp32 or esp32c3 or esp32s3 |unsupported| - .. only:: esp32c6 or esp32c2 or esp32h2 or esp32c5 + .. only:: esp32c6 or esp32c2 or esp32h2 or esp32c5 or esp32c61 |supported| - .. only:: esp32 or esp32c3 or esp32s3 |unsupported| - .. only:: esp32c6 or esp32c2 or esp32h2 or esp32c5 + .. only:: esp32c6 or esp32c2 or esp32h2 or esp32c5 or esp32c61 |supported| * - - LE Enhanced Connection Update (Connection Subrating) - - .. only:: esp32 or esp32c6 or esp32c2 or esp32h2 or esp32c5 + - .. only:: esp32 or esp32c6 or esp32c2 or esp32h2 or esp32c5 or esp32c61 |unsupported| .. only:: esp32c3 or esp32s3 |experimental| - |unsupported| - - .. only:: esp32 or esp32c6 or esp32c2 or esp32h2 or esp32c5 + - .. only:: esp32 or esp32c6 or esp32c2 or esp32h2 or esp32c5 or esp32c61 |unsupported| .. only:: esp32c3 or esp32s3 @@ -251,31 +251,31 @@ - .. only:: esp32 or esp32c3 or esp32s3 or esp32c2 |unsupported| - .. only:: esp32c6 or esp32h2 or esp32c5 + .. only:: esp32c6 or esp32h2 or esp32c5 or esp32c61 |experimental| - .. only:: esp32 or esp32c3 or esp32s3 or esp32c2 |unsupported| - .. only:: esp32c6 or esp32h2 or esp32c5 + .. only:: esp32c6 or esp32h2 or esp32c5 or esp32c61 |experimental| - .. only:: esp32 or esp32c3 or esp32s3 or esp32c2 |unsupported| - .. only:: esp32c6 or esp32h2 or esp32c5 + .. only:: esp32c6 or esp32h2 or esp32c5 or esp32c61 |experimental| * - .. centered:: |5.4| - Advertising Coding Selection - - .. only:: esp32 or esp32c6 or esp32c2 or esp32h2 or esp32c5 + - .. only:: esp32 or esp32c6 or esp32c2 or esp32h2 or esp32c5 or esp32c61 |unsupported| .. only:: esp32c3 or esp32s3 |experimental| - |unsupported| - - .. only:: esp32 or esp32c6 or esp32c2 or esp32h2 or esp32c5 + - .. only:: esp32 or esp32c6 or esp32c2 or esp32h2 or esp32c5 or esp32c61 |unsupported| .. only:: esp32c3 or esp32s3 diff --git a/docs/zh_CN/api-guides/ble/host-feature-support-status.rst b/docs/zh_CN/api-guides/ble/host-feature-support-status.rst index 2acb0855b376..d1134e17e5b9 100644 --- a/docs/zh_CN/api-guides/ble/host-feature-support-status.rst +++ b/docs/zh_CN/api-guides/ble/host-feature-support-status.rst @@ -79,7 +79,7 @@ ESP 主机主要功能支持状态 - |experimental| - |experimental| * - - - Advertising Channel Index + - Randomized Advertising Channel Indexing - |NA| - |NA| * - diff --git a/docs/zh_CN/api-guides/ble/overview.rst b/docs/zh_CN/api-guides/ble/overview.rst index 62dbc36db09f..d9997eef481b 100644 --- a/docs/zh_CN/api-guides/ble/overview.rst +++ b/docs/zh_CN/api-guides/ble/overview.rst @@ -13,13 +13,13 @@ {IDF_TARGET_NAME} 支持蓝牙 5.0 (LE),并且已经获得蓝牙 LE 5.4 认证。 -.. only:: esp32c2 or esp32c6 or esp32h2 +.. only:: esp32c2 or esp32c6 or esp32h2 or esp32c5 or esp32c61 {IDF_TARGET_NAME} 支持蓝牙 5.0 (LE),并且已经获得蓝牙 LE 5.3 认证。 ESP-IDF 中的低功耗蓝牙协议栈是一个分层架构,可在 {IDF_TARGET_NAME} 系列芯片上实现低功耗蓝牙功能,详见下。 -.. only:: esp32 or esp32s3 or esp32c3 or esp32c6 +.. only:: esp32 or esp32s3 or esp32c3 or esp32c6 or esp32c5 or esp32c61 .. figure:: ../../../_static/bluetooth-architecture.png :align: center From 0592bb68883a8ef66fae6d3e9741e476f40fe9c0 Mon Sep 17 00:00:00 2001 From: Konstantin Kondrashov Date: Wed, 9 Oct 2024 12:22:06 +0300 Subject: [PATCH 102/365] fix(examples): Fix flash_enc_wifi test in pytest_simple_ota --- .../system/ota/simple_ota_example/pytest_simple_ota.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/examples/system/ota/simple_ota_example/pytest_simple_ota.py b/examples/system/ota/simple_ota_example/pytest_simple_ota.py index c7c1992f0326..bbc7d27be62f 100644 --- a/examples/system/ota/simple_ota_example/pytest_simple_ota.py +++ b/examples/system/ota/simple_ota_example/pytest_simple_ota.py @@ -225,6 +225,11 @@ def test_examples_protocol_simple_ota_example_with_flash_encryption_wifi(dut: Du 2. Fetch OTA image over HTTPS 3. Reboot with the new OTA image """ + # CONFIG_PARTITION_TABLE_TWO_OTA_ENCRYPTED_NVS==y, it includes partitions_two_ota_encr_nvs.csv + FACTORY_ADDRESS = '0x20000' + OTA_0_ADDRESS = '0x120000' + # OTA_1_ADDRESS = '0x220000' + # start test # Erase flash dut.serial.erase_flash() @@ -234,7 +239,7 @@ def test_examples_protocol_simple_ota_example_with_flash_encryption_wifi(dut: Du thread1.daemon = True thread1.start() try: - dut.expect(f'Loaded app from partition at offset {OTA_0_ADDRESS}', timeout=30) + dut.expect(f'Loaded app from partition at offset {FACTORY_ADDRESS}', timeout=30) dut.expect('Flash encryption mode is DEVELOPMENT', timeout=10) # Parse IP address of STA env_name = 'flash_encryption_wifi_high_traffic' if dut.app.sdkconfig.get('EXAMPLE_WIFI_SSID_PWD_FROM_STDIN') is True else None @@ -245,7 +250,7 @@ def test_examples_protocol_simple_ota_example_with_flash_encryption_wifi(dut: Du dut.write(f'https://{host_ip}:8000/simple_ota.bin') dut.expect('OTA Succeed, Rebooting...', timeout=60) # after reboot - dut.expect(f'Loaded app from partition at offset {OTA_1_ADDRESS}', timeout=30) + dut.expect(f'Loaded app from partition at offset {OTA_0_ADDRESS}', timeout=30) dut.expect('Flash encryption mode is DEVELOPMENT', timeout=10) dut.expect('OTA example app_main start', timeout=10) finally: From 81dd3aab1be8af25a901f29fd2dd821767bf191d Mon Sep 17 00:00:00 2001 From: Linda Date: Wed, 9 Oct 2024 16:01:36 +0800 Subject: [PATCH 103/365] docs: fix a typo in I2C RTC clock name --- docs/en/api-reference/peripherals/i2c.rst | 2 +- docs/zh_CN/api-reference/peripherals/i2c.rst | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/api-reference/peripherals/i2c.rst b/docs/en/api-reference/peripherals/i2c.rst index dd35c6322b54..2fbbdfc4b773 100644 --- a/docs/en/api-reference/peripherals/i2c.rst +++ b/docs/en/api-reference/peripherals/i2c.rst @@ -44,7 +44,7 @@ I2C Clock Configuration - :cpp:enumerator:`i2c_clock_source_t::I2C_CLK_SRC_DEFAULT`: Default I2C source clock. :SOC_I2C_SUPPORT_XTAL: - :cpp:enumerator:`i2c_clock_source_t::I2C_CLK_SRC_XTAL`: External crystal for I2C clock source. - :SOC_I2C_SUPPORT_RTC: - :cpp:enumerator:`i2c_clock_source_t::I2C_CLK_RC_FAST`: Internal 20 MHz RC oscillator for I2C clock source. + :SOC_I2C_SUPPORT_RTC: - :cpp:enumerator:`i2c_clock_source_t::I2C_CLK_SRC_RC_FAST`: Internal 20 MHz RC oscillator for I2C clock source. :SOC_I2C_SUPPORT_APB: - :cpp:enumerator:`i2c_clock_source_t::I2C_CLK_SRC_APB`: APB clock as I2C clock source. :SOC_I2C_SUPPORT_REF_TICK: - :cpp:enumerator:`i2c_clock_source_t::I2C_CLK_SRC_REF_TICK`: 1 MHZ clock. diff --git a/docs/zh_CN/api-reference/peripherals/i2c.rst b/docs/zh_CN/api-reference/peripherals/i2c.rst index e515082f6182..f00095fdd868 100644 --- a/docs/zh_CN/api-reference/peripherals/i2c.rst +++ b/docs/zh_CN/api-reference/peripherals/i2c.rst @@ -44,7 +44,7 @@ I2C 时钟配置 - :cpp:enumerator:`i2c_clock_source_t::I2C_CLK_SRC_DEFAULT`:默认的 I2C 时钟源。 :SOC_I2C_SUPPORT_XTAL: - :cpp:enumerator:`i2c_clock_source_t::I2C_CLK_SRC_XTAL`:以外部晶振作为 I2C 时钟源。 - :SOC_I2C_SUPPORT_RTC: - :cpp:enumerator:`i2c_clock_source_t::I2C_CLK_RC_FAST`:以内部 20 MHz RC 振荡器作为 I2C 时钟源。 + :SOC_I2C_SUPPORT_RTC: - :cpp:enumerator:`i2c_clock_source_t::I2C_CLK_SRC_RC_FAST`:以内部 20 MHz RC 振荡器作为 I2C 时钟源。 :SOC_I2C_SUPPORT_APB: - :cpp:enumerator:`i2c_clock_source_t::I2C_CLK_SRC_APB`:以 APB 时钟作为 I2C 时钟源。 :SOC_I2C_SUPPORT_REF_TICK: - :cpp:enumerator:`i2c_clock_source_t::I2C_CLK_SRC_REF_TICK`:1 MHZ 时钟。 From 0797f580bc6a4ecba1677f6a5513bc4d2ea46d67 Mon Sep 17 00:00:00 2001 From: "nilesh.kale" Date: Mon, 7 Oct 2024 14:32:53 +0530 Subject: [PATCH 104/365] fix: updated pytest for https_server example as per config option --- .../simple/pytest_https_server_simple.py | 51 +++++++++---------- 1 file changed, 25 insertions(+), 26 deletions(-) diff --git a/examples/protocols/https_server/simple/pytest_https_server_simple.py b/examples/protocols/https_server/simple/pytest_https_server_simple.py index 86aa6a3f42f4..b86fafde337e 100644 --- a/examples/protocols/https_server/simple/pytest_https_server_simple.py +++ b/examples/protocols/https_server/simple/pytest_https_server_simple.py @@ -1,8 +1,7 @@ #!/usr/bin/env python # -# SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD +# SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD # SPDX-License-Identifier: Apache-2.0 - import http.client import logging import os @@ -149,22 +148,22 @@ def test_examples_protocol_https_server_simple(dut: Dut) -> None: logging.info('Response obtained does not match with correct response') raise RuntimeError('Failed to test SSL connection') - current_cipher = dut.expect(r'Current Ciphersuite(.*)', timeout=5)[0] - logging.info('Current Ciphersuite {}'.format(current_cipher)) - - # Close the connection - conn.close() + if dut.app.sdkconfig.get('CONFIG_EXAMPLE_ENABLE_HTTPS_USER_CALLBACK') is True: + current_cipher = dut.expect(r'Current Ciphersuite(.*)', timeout=5)[0] + logging.info('Current Ciphersuite {}'.format(current_cipher)) - logging.info('Checking user callback: Obtaining client certificate...') + logging.info('Checking user callback: Obtaining client certificate...') - serial_number = dut.expect(r'serial number\s*:([^\n]*)', timeout=5)[0] - issuer_name = dut.expect(r'issuer name\s*:([^\n]*)', timeout=5)[0] - expiry = dut.expect(r'expires on ((.*)\d{4}\-(0?[1-9]|1[012])\-(0?[1-9]|[12][0-9]|3[01])*)', timeout=5)[1].decode() + serial_number = dut.expect(r'serial number\s*:([^\n]*)', timeout=5)[0] + issuer_name = dut.expect(r'issuer name\s*:([^\n]*)', timeout=5)[0] + expiry = dut.expect(r'expires on ((.*)\d{4}\-(0?[1-9]|1[012])\-(0?[1-9]|[12][0-9]|3[01])*)', timeout=5)[1].decode() - logging.info('Serial No. {}'.format(serial_number)) - logging.info('Issuer Name {}'.format(issuer_name)) - logging.info('Expires on {}'.format(expiry)) + logging.info('Serial No. {}'.format(serial_number)) + logging.info('Issuer Name {}'.format(issuer_name)) + logging.info('Expires on {}'.format(expiry)) + # Close the connection + conn.close() logging.info('Correct response obtained') logging.info('SSL connection test successful\nClosing the connection') @@ -220,21 +219,21 @@ def test_examples_protocol_https_server_simple_dynamic_buffers(dut: Dut) -> None logging.info('Response obtained does not match with correct response') raise RuntimeError('Failed to test SSL connection') - current_cipher = dut.expect(r'Current Ciphersuite(.*)', timeout=5)[0] - logging.info('Current Ciphersuite {}'.format(current_cipher)) + if dut.app.sdkconfig.get('CONFIG_EXAMPLE_ENABLE_HTTPS_USER_CALLBACK') is True: + current_cipher = dut.expect(r'Current Ciphersuite(.*)', timeout=5)[0] + logging.info('Current Ciphersuite {}'.format(current_cipher)) - # Close the connection - conn.close() - - logging.info('Checking user callback: Obtaining client certificate...') + logging.info('Checking user callback: Obtaining client certificate...') - serial_number = dut.expect(r'serial number\s*:([^\n]*)', timeout=5)[0] - issuer_name = dut.expect(r'issuer name\s*:([^\n]*)', timeout=5)[0] - expiry = dut.expect(r'expires on\s*:((.*)\d{4}\-(0?[1-9]|1[012])\-(0?[1-9]|[12][0-9]|3[01])*)', timeout=5)[1].decode() + serial_number = dut.expect(r'serial number\s*:([^\n]*)', timeout=5)[0] + issuer_name = dut.expect(r'issuer name\s*:([^\n]*)', timeout=5)[0] + expiry = dut.expect(r'expires on\s*:((.*)\d{4}\-(0?[1-9]|1[012])\-(0?[1-9]|[12][0-9]|3[01])*)', timeout=5)[1].decode() - logging.info('Serial No. : {}'.format(serial_number)) - logging.info('Issuer Name : {}'.format(issuer_name)) - logging.info('Expires on : {}'.format(expiry)) + logging.info('Serial No. : {}'.format(serial_number)) + logging.info('Issuer Name : {}'.format(issuer_name)) + logging.info('Expires on : {}'.format(expiry)) + # Close the connection + conn.close() logging.info('Correct response obtained') logging.info('SSL connection test successful\nClosing the connection') From d8e31eb6d01a6a472b293564be65a657e2197490 Mon Sep 17 00:00:00 2001 From: Hanno Date: Sun, 9 Jul 2023 23:37:40 +0200 Subject: [PATCH 105/365] feat(mbedtls/esp_crt_bundle): Reduced RAM & stack use of cert bundle Closes https://github.com/espressif/esp-idf/pull/13204 Signed-off-by: harshal.patil --- components/mbedtls/CMakeLists.txt | 2 +- .../mbedtls/esp_crt_bundle/esp_crt_bundle.c | 341 ++++++++++++------ .../mbedtls/esp_crt_bundle/gen_crt_bundle.py | 37 +- .../test_gen_crt_bundle/baltimore_crt_bundle | Bin 392 -> 394 bytes .../test_gen_crt_bundle/entrust_crt_bundle | Bin 479 -> 481 bytes .../test_apps/main/crts/server_cert_bundle | Bin 400 -> 402 bytes 6 files changed, 256 insertions(+), 124 deletions(-) diff --git a/components/mbedtls/CMakeLists.txt b/components/mbedtls/CMakeLists.txt index 93cb165b4345..94033218cef4 100644 --- a/components/mbedtls/CMakeLists.txt +++ b/components/mbedtls/CMakeLists.txt @@ -61,7 +61,7 @@ if(CONFIG_MBEDTLS_CERTIFICATE_BUNDLE) list(APPEND crt_paths ${custom_bundle_path}) endif() - list(APPEND args --input ${crt_paths} -q) + list(APPEND args --input ${crt_paths} -q --max-certs "${CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_MAX_CERTS}") get_filename_component(crt_bundle ${bundle_name} diff --git a/components/mbedtls/esp_crt_bundle/esp_crt_bundle.c b/components/mbedtls/esp_crt_bundle/esp_crt_bundle.c index 2da385008778..ef2e85542f55 100644 --- a/components/mbedtls/esp_crt_bundle/esp_crt_bundle.c +++ b/components/mbedtls/esp_crt_bundle/esp_crt_bundle.c @@ -1,15 +1,54 @@ /* - * SPDX-FileCopyrightText: 2018-2022 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2018-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ #include #include +#include + +#include "esp_check.h" #include "esp_crt_bundle.h" #include "esp_log.h" -#define BUNDLE_HEADER_OFFSET 2 -#define CRT_HEADER_OFFSET 4 +#include "mbedtls/pk.h" +#include "mbedtls/oid.h" +#include "mbedtls/asn1.h" + +/* + Format of certificate bundle: + First, n uint32 "offset" entries, each describing the start of one certificate's data in terms of + bytes from the beginning of the bundle. This offset list is immediately followed by the 1st...n-th + certificate data. Hence, the first offset entry, i.e. the uint32 at the very start of the bundle, + is equal to the size of the offset list in bytes and therefore the # of certificates in the bundle + is [first offset]/sizeof(uint32_t) + [offset of 1st certificate](u32) + [offset of 2nd certificate](u32) + ... + [offset of n-th certificate](u32) + [1st certificate](variable) + ... + [n-th certificate](variable) + + Structure of each certificate: + [length of CN](u16) + [length of key](u16) + [CN](variable) + [key](variable) + + The offset list is used for fast random access to any certificate by index. + For verification, a certificate is looked up by its CN via binary search; for this reason, + the offset list *must* be sorted by CN (ascending) and the first certificate must be the + one with the least CN in the bundle, so that the first offset in the list still refers to the + first certificate after the list (see above). + +*/ + +#define CRT_NAME_LEN_OFFSET 0 //MBEDTLS_PRIVATE(sig_pk))) { - ESP_LOGE(TAG, "Simple compare failed"); - ret = -1; + if ( unlikely( !mbedtls_pk_can_do( &pubkey, child->MBEDTLS_PRIVATE(sig_pk)) ) ) { + ESP_LOGE(TAG, "Unsuitable public key"); + ret = MBEDTLS_ERR_PK_TYPE_MISMATCH; goto cleanup; } md_info = mbedtls_md_info_from_type(child->MBEDTLS_PRIVATE(sig_md)); - if ( (ret = mbedtls_md( md_info, child->tbs.p, child->tbs.len, hash )) != 0 ) { - ESP_LOGE(TAG, "Internal mbedTLS error %X", ret); + + if( unlikely( md_info == NULL) ) { + ESP_LOGE(TAG, "Unknown message digest"); + ret = MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE; goto cleanup; } - if ( (ret = mbedtls_pk_verify_ext( child->MBEDTLS_PRIVATE(sig_pk), child->MBEDTLS_PRIVATE(sig_opts), &parent.pk, - child->MBEDTLS_PRIVATE(sig_md), hash, mbedtls_md_get_size( md_info ), - child->MBEDTLS_PRIVATE(sig).p, child->MBEDTLS_PRIVATE(sig).len )) != 0 ) { + unsigned char hash[MBEDTLS_MD_MAX_SIZE]; + const unsigned char md_size = mbedtls_md_get_size(md_info); - ESP_LOGE(TAG, "PK verify failed with error %X", ret); + if ((ret = mbedtls_md(md_info, child->tbs.p, child->tbs.len, hash)) != 0) { + ESP_LOGE(TAG, "MD failed with error 0x%x", -ret); + goto cleanup; + } + + if ( unlikely( (ret = mbedtls_pk_verify_ext(child->MBEDTLS_PRIVATE(sig_pk), child->MBEDTLS_PRIVATE(sig_opts), &pubkey, + child->MBEDTLS_PRIVATE(sig_md), hash, md_size, + child->MBEDTLS_PRIVATE(sig).p, child->MBEDTLS_PRIVATE(sig).len)) != 0 ) ) { + ESP_LOGE(TAG, "PK verify failed with error 0x%x", -ret); goto cleanup; } -cleanup: - mbedtls_x509_crt_free(&parent); +cleanup: + mbedtls_pk_free(&pubkey); return ret; } +static cert_t esp_crt_find_cert(const unsigned char* const issuer, const size_t issuer_len) +{ + if (unlikely( issuer == NULL || issuer_len == 0 )) { + return NULL; + } + + int start = 0; + int end = esp_crt_get_certcount(s_crt_bundle)-1; + int middle = (start + end) / 2; + + cert_t cert = NULL; + size_t cert_name_len = 0; + + /* Look for the certificate using binary search on subject name */ + while (start <= end) { + cert = esp_crt_get_cert(s_crt_bundle, middle); + cert_name_len = esp_crt_get_name_len(cert); + + // Issuers are in DER encoding, with lengths encoded in the content; if valid DER, differing lengths + // are reflected in differing content. + // Still, we won't try to memcmp beyond the given length: + int cmp_res = memcmp(issuer, esp_crt_get_name(cert), MIN(issuer_len, cert_name_len) ); + + if ( unlikely( cmp_res == 0 ) ) { + return cert; + } else if (cmp_res < 0) { + end = middle - 1; + } else { + start = middle + 1; + } + middle = (start + end) / 2; + } + + return NULL; +} + /* This callback is called for every certificate in the chain. If the chain * is proper each intermediate certificate is validated through its parent @@ -81,9 +204,9 @@ static int esp_crt_check_signature(mbedtls_x509_crt *child, const uint8_t *pub_k * only verify the first untrusted link in the chain is signed by the * root certificate in the trusted bundle */ -int esp_crt_verify_callback(void *buf, mbedtls_x509_crt *crt, int depth, uint32_t *flags) +int esp_crt_verify_callback(void *buf, mbedtls_x509_crt* const crt, const int depth, uint32_t* const flags) { - mbedtls_x509_crt *child = crt; + const mbedtls_x509_crt* const child = crt; /* It's OK for a trusted cert to have a weak signature hash alg. as we already trust this certificate */ @@ -93,121 +216,119 @@ int esp_crt_verify_callback(void *buf, mbedtls_x509_crt *crt, int depth, uint32_ return 0; } - - if (s_crt_bundle.crts == NULL) { + if( unlikely( s_crt_bundle == NULL ) ) { ESP_LOGE(TAG, "No certificates in bundle"); return MBEDTLS_ERR_X509_FATAL_ERROR; } - ESP_LOGD(TAG, "%d certificates in bundle", s_crt_bundle.num_certs); + ESP_LOGD(TAG, "%" PRIu16 " certificates in bundle", (uint16_t)esp_crt_get_certcount(s_crt_bundle)); - size_t name_len = 0; - const uint8_t *crt_name; + cert_t cert = esp_crt_find_cert(child->issuer_raw.p, child->issuer_raw.len); - bool crt_found = false; - int start = 0; - int end = s_crt_bundle.num_certs - 1; - int middle = (end - start) / 2; + if ( likely( cert != NULL ) ) { - /* Look for the certificate using binary search on subject name */ - while (start <= end) { - name_len = s_crt_bundle.crts[middle][0] << 8 | s_crt_bundle.crts[middle][1]; - crt_name = s_crt_bundle.crts[middle] + CRT_HEADER_OFFSET; + const int ret = esp_crt_check_signature(child, esp_crt_get_key(cert), esp_crt_get_key_len(cert)); - int cmp_res = memcmp(child->issuer_raw.p, crt_name, name_len ); - if (cmp_res == 0) { - crt_found = true; - break; - } else if (cmp_res < 0) { - end = middle - 1; + if ( likely( ret == 0 ) ) { + ESP_LOGI(TAG, "Certificate validated"); + *flags = 0; + return 0; } else { - start = middle + 1; + ESP_LOGE(TAG, "Certificate matched but signature verification failed"); +#if (CONFIG_LOG_DEFAULT_LEVEL_DEBUG || CONFIG_LOG_DEFAULT_LEVEL_VERBOSE) + char *cert_name = malloc((esp_crt_get_name_len(cert) + 1) * sizeof(char)); + if (cert_name) { + memcpy(cert_name, esp_crt_get_name(cert), esp_crt_get_name_len(cert)); + cert_name[esp_crt_get_name_len(cert)] = '\0'; + ESP_LOGE(TAG, "Certificate matched with %s but signature verification failed", cert_name); + free(cert_name); + } +#endif } - middle = (start + end) / 2; - } - int ret = MBEDTLS_ERR_X509_FATAL_ERROR; - if (crt_found) { - size_t key_len = s_crt_bundle.crts[middle][2] << 8 | s_crt_bundle.crts[middle][3]; - ret = esp_crt_check_signature(child, s_crt_bundle.crts[middle] + CRT_HEADER_OFFSET + name_len, key_len); - } - - if (ret == 0) { - ESP_LOGI(TAG, "Certificate validated"); - *flags = 0; - return 0; + } else { + ESP_LOGI(TAG, "No matching trusted root certificate found"); } ESP_LOGE(TAG, "Failed to verify certificate"); - return MBEDTLS_ERR_X509_FATAL_ERROR; + return MBEDTLS_ERR_X509_CERT_VERIFY_FAILED; } - -/* Initialize the bundle into an array so we can do binary search for certs, - the bundle generated by the python utility is already presorted by subject name +/** + * @brief Perform some consistency checks on the user-provided bundle data to try and make sure + * it actually is a certificate bundle. + * + * @param x509_bundle pointer to the bundle data + * @param bundle_size size of bundle data + * @return true the given bundle data is consistent + * @return false the given bundle data is invalid */ -static esp_err_t esp_crt_bundle_init(const uint8_t *x509_bundle, size_t bundle_size) +static bool esp_crt_check_bundle(const uint8_t* const x509_bundle, const size_t bundle_size) { - if (bundle_size < BUNDLE_HEADER_OFFSET + CRT_HEADER_OFFSET) { - ESP_LOGE(TAG, "Invalid certificate bundle"); - return ESP_ERR_INVALID_ARG; + if (unlikely( x509_bundle == NULL || bundle_size <= (sizeof(uint32_t) + CRT_HEADER_SIZE)) ) { + // Bundle is too small for even one offset and one certificate + return false; } - uint16_t num_certs = (x509_bundle[0] << 8) | x509_bundle[1]; - if (num_certs > CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_MAX_CERTS) { - ESP_LOGE(TAG, "No. of certs in the certificate bundle = %d exceeds\n" - "Max allowed certificates in the certificate bundle = %d\n" - "Please update the menuconfig option with appropriate value", num_certs, CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_MAX_CERTS); - return ESP_ERR_INVALID_ARG; + // Pointer to the first offset entry + const uint32_t* offsets = (const uint32_t*)x509_bundle; + + if(unlikely( offsets[0] == 0 || (offsets[0] % sizeof(uint32_t)) != 0) ) { + // First offset is invalid. + // The first certificate must start after N uint32_t offset values. + return false; } - const uint8_t **crts = calloc(num_certs, sizeof(x509_bundle)); - if (crts == NULL) { - ESP_LOGE(TAG, "Unable to allocate memory for bundle"); - return ESP_ERR_NO_MEM; + if(unlikely( offsets[0] >= bundle_size )) { + // First cert starts beyond end of bundle + return false; } - const uint8_t *cur_crt; - /* This is the maximum region that is allowed to access */ - const uint8_t *bundle_end = x509_bundle + bundle_size; - cur_crt = x509_bundle + BUNDLE_HEADER_OFFSET; + const uint32_t num_certs = esp_crt_get_certcount(x509_bundle); - for (int i = 0; i < num_certs; i++) { - crts[i] = cur_crt; - if (cur_crt + CRT_HEADER_OFFSET > bundle_end) { - ESP_LOGE(TAG, "Invalid certificate bundle"); - free(crts); - return ESP_ERR_INVALID_ARG; + if(unlikely( num_certs > CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_MAX_CERTS )) { + ESP_LOGE(TAG, "Cert bundle certificates exceed max allowed certificates"); + return false; + } + + // Check all offsets for consistency with certificate data + for (uint32_t i = 0; i < num_certs-1; ++i ) { + const uint32_t off = offsets[i]; + cert_t cert = x509_bundle + off; + // The next offset in the list must point to right after the current cert + const uint32_t expected_next_offset = off + esp_crt_get_len(cert); + + if( unlikely( offsets[i+1] != expected_next_offset || expected_next_offset >= bundle_size ) ) { + return false; } - size_t name_len = cur_crt[0] << 8 | cur_crt[1]; - size_t key_len = cur_crt[2] << 8 | cur_crt[3]; - cur_crt = cur_crt + CRT_HEADER_OFFSET + name_len + key_len; } - if (cur_crt > bundle_end) { - ESP_LOGE(TAG, "Invalid certificate bundle"); - free(crts); + // All checks passed. + return true; +} + +/* + the bundle generated by the python utility is already presorted by subject name + */ +static esp_err_t esp_crt_bundle_init(const uint8_t* const x509_bundle, const size_t bundle_size) +{ + if ( likely( esp_crt_check_bundle(x509_bundle, bundle_size) ) ) { + s_crt_bundle = x509_bundle; + return ESP_OK; + } else { return ESP_ERR_INVALID_ARG; } - - /* The previous crt bundle is only updated when initialization of the - * current crt_bundle is successful */ - /* Free previous crt_bundle */ - free(s_crt_bundle.crts); - s_crt_bundle.num_certs = num_certs; - s_crt_bundle.crts = crts; - return ESP_OK; } esp_err_t esp_crt_bundle_attach(void *conf) { esp_err_t ret = ESP_OK; // If no bundle has been set by the user then use the bundle embedded in the binary - if (s_crt_bundle.crts == NULL) { + if (s_crt_bundle == NULL) { ret = esp_crt_bundle_init(x509_crt_imported_bundle_bin_start, x509_crt_imported_bundle_bin_end - x509_crt_imported_bundle_bin_start); } - if (ret != ESP_OK) { + if ( unlikely(ret != ESP_OK) ) { ESP_LOGE(TAG, "Failed to attach bundle"); return ret; } @@ -218,8 +339,7 @@ esp_err_t esp_crt_bundle_attach(void *conf) * cacert_ptr passes non-NULL check during handshake */ mbedtls_ssl_config *ssl_conf = (mbedtls_ssl_config *)conf; - mbedtls_x509_crt_init(&s_dummy_crt); - mbedtls_ssl_conf_ca_chain(ssl_conf, &s_dummy_crt, NULL); + mbedtls_ssl_conf_ca_chain(ssl_conf, (mbedtls_x509_crt*)&s_dummy_crt, NULL); mbedtls_ssl_conf_verify(ssl_conf, esp_crt_verify_callback, NULL); } @@ -228,8 +348,7 @@ esp_err_t esp_crt_bundle_attach(void *conf) void esp_crt_bundle_detach(mbedtls_ssl_config *conf) { - free(s_crt_bundle.crts); - s_crt_bundle.crts = NULL; + s_crt_bundle = NULL; if (conf) { mbedtls_ssl_conf_verify(conf, NULL, NULL); } diff --git a/components/mbedtls/esp_crt_bundle/gen_crt_bundle.py b/components/mbedtls/esp_crt_bundle/gen_crt_bundle.py index 0211514a4609..2e5bca544b19 100755 --- a/components/mbedtls/esp_crt_bundle/gen_crt_bundle.py +++ b/components/mbedtls/esp_crt_bundle/gen_crt_bundle.py @@ -8,18 +8,16 @@ # The bundle will have the format: number of certificates; crt 1 subject name length; crt 1 public key length; # crt 1 subject name; crt 1 public key; crt 2... # -# SPDX-FileCopyrightText: 2018-2022 Espressif Systems (Shanghai) CO LTD +# SPDX-FileCopyrightText: 2018-2024 Espressif Systems (Shanghai) CO LTD # SPDX-License-Identifier: Apache-2.0 - -from __future__ import with_statement - import argparse import csv import os import re import struct import sys -from io import open + +DEFAULT_CERT_BUNDLE_MAX_CERTS = 200 try: from cryptography import x509 @@ -54,9 +52,6 @@ def __init__(self): self.certificates = [] self.compressed_crts = [] - if os.path.isfile(ca_bundle_bin_file): - os.remove(ca_bundle_bin_file) - def add_from_path(self, crts_path): found = False @@ -116,11 +111,21 @@ def add_from_der(self, crt_str): self.certificates.append(x509.load_der_x509_certificate(crt_str, default_backend())) status('Successfully added 1 certificate') - def create_bundle(self): + def create_bundle(self, max_certs=DEFAULT_CERT_BUNDLE_MAX_CERTS): + if max_certs < len(self.certificates): + critical(f'No. of certs in the certificate bundle = {len(self.certificates)} exceeds\n \ + Max allowed certificates in the certificate bundle = {max_certs} \ + Please update the menuconfig option with appropriate value') + raise ValueError + # Sort certificates in order to do binary search when looking up certificates self.certificates = sorted(self.certificates, key=lambda cert: cert.subject.public_bytes(default_backend())) - bundle = struct.pack('>H', len(self.certificates)) + # List of offsets in bytes from the start of the bundle to each certificate inside + offsets = [] + len_offsets = 4 * len(self.certificates) # final size of the offsets list + + bundle = b'' for crt in self.certificates: """ Read the public key as DER format """ @@ -132,12 +137,18 @@ def create_bundle(self): name_len = len(sub_name_der) key_len = len(pub_key_der) - len_data = struct.pack('>HH', name_len, key_len) + len_data = struct.pack('Vgx$? diff --git a/components/mbedtls/test_apps/main/crts/server_cert_bundle b/components/mbedtls/test_apps/main/crts/server_cert_bundle index 0b7f09aa06da459957cb5c4df81df1876b9597b8..5a0a2f139f52aa4576798324076a533e2a8457a2 100644 GIT binary patch delta 17 YcmbQhJc*fug@J(~g+YyRBU=|E02>tp0ssI2 delta 15 WcmbQlJb{^wfsrAFQEekf7b5@{_X7U_ From b097eb12b38894f34ca2a05ea2d07bbada2f840a Mon Sep 17 00:00:00 2001 From: "harshal.patil" Date: Fri, 28 Jun 2024 11:15:40 +0530 Subject: [PATCH 106/365] ci(mbedtls/esp_crt_bundle): Format esp_crt_bundle.c using astyle --- .../mbedtls/esp_crt_bundle/esp_crt_bundle.c | 70 +++++++++++-------- 1 file changed, 40 insertions(+), 30 deletions(-) diff --git a/components/mbedtls/esp_crt_bundle/esp_crt_bundle.c b/components/mbedtls/esp_crt_bundle/esp_crt_bundle.c index ef2e85542f55..dc75d0cff42a 100644 --- a/components/mbedtls/esp_crt_bundle/esp_crt_bundle.c +++ b/components/mbedtls/esp_crt_bundle/esp_crt_bundle.c @@ -65,7 +65,8 @@ typedef const uint8_t* cert_t; static bundle_t s_crt_bundle; // Read a 16-bit value stored in little-endian format from the given address -static uint16_t get16_le (const uint8_t* ptr) { +static uint16_t get16_le(const uint8_t* ptr) +{ #if defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) return *((const uint16_t*)ptr); #else @@ -73,31 +74,38 @@ static uint16_t get16_le (const uint8_t* ptr) { #endif } -static uint16_t esp_crt_get_name_len(const cert_t cert) { +static uint16_t esp_crt_get_name_len(const cert_t cert) +{ return get16_le(cert + CRT_NAME_LEN_OFFSET); } -static const uint8_t* esp_crt_get_name(const cert_t cert) { +static const uint8_t* esp_crt_get_name(const cert_t cert) +{ return cert + CRT_NAME_OFFSET; } -static uint16_t esp_crt_get_key_len(const cert_t cert) { +static uint16_t esp_crt_get_key_len(const cert_t cert) +{ return get16_le(cert + CRT_KEY_LEN_OFFSET); } -static const uint8_t* esp_crt_get_key(const cert_t cert) { +static const uint8_t* esp_crt_get_key(const cert_t cert) +{ return esp_crt_get_name(cert) + esp_crt_get_name_len(cert); } -static uint16_t esp_crt_get_len(const cert_t cert) { +static uint16_t esp_crt_get_len(const cert_t cert) +{ return CRT_HEADER_SIZE + esp_crt_get_name_len(cert) + esp_crt_get_key_len(cert); } -static uint32_t esp_crt_get_cert_offset(const bundle_t bundle, const uint32_t index) { +static uint32_t esp_crt_get_cert_offset(const bundle_t bundle, const uint32_t index) +{ return ((const uint32_t*)bundle)[index]; } -static uint32_t esp_crt_get_certcount(const bundle_t bundle) { +static uint32_t esp_crt_get_certcount(const bundle_t bundle) +{ // Offset of 1st certificate == end of offset list == size of offset list == # of certs * sizeof(uint32_t) return esp_crt_get_cert_offset(bundle, 0) / sizeof(uint32_t); } @@ -109,7 +117,8 @@ static uint32_t esp_crt_get_certcount(const bundle_t bundle) { * @param index of the certificate; must be less than \c esp_crt_get_certcount(...) ! * @return pointer to the certificate */ -static cert_t esp_crt_get_cert(const bundle_t bundle, const uint32_t index) { +static cert_t esp_crt_get_cert(const bundle_t bundle, const uint32_t index) +{ return bundle + esp_crt_get_cert_offset(bundle, index); } @@ -121,13 +130,13 @@ static int esp_crt_check_signature(const mbedtls_x509_crt* child, const uint8_t* mbedtls_pk_init(&pubkey); - if ( unlikely( (ret = mbedtls_pk_parse_public_key(&pubkey, pub_key_buf, pub_key_len)) != 0 ) ) { + if (unlikely((ret = mbedtls_pk_parse_public_key(&pubkey, pub_key_buf, pub_key_len)) != 0)) { ESP_LOGE(TAG, "PK parse failed with error 0x%x", -ret); goto cleanup; } // Fast check to avoid expensive computations when not necessary - if ( unlikely( !mbedtls_pk_can_do( &pubkey, child->MBEDTLS_PRIVATE(sig_pk)) ) ) { + if (unlikely(!mbedtls_pk_can_do(&pubkey, child->MBEDTLS_PRIVATE(sig_pk)))) { ESP_LOGE(TAG, "Unsuitable public key"); ret = MBEDTLS_ERR_PK_TYPE_MISMATCH; goto cleanup; @@ -135,7 +144,7 @@ static int esp_crt_check_signature(const mbedtls_x509_crt* child, const uint8_t* md_info = mbedtls_md_info_from_type(child->MBEDTLS_PRIVATE(sig_md)); - if( unlikely( md_info == NULL) ) { + if (unlikely(md_info == NULL)) { ESP_LOGE(TAG, "Unknown message digest"); ret = MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE; goto cleanup; @@ -149,9 +158,9 @@ static int esp_crt_check_signature(const mbedtls_x509_crt* child, const uint8_t* goto cleanup; } - if ( unlikely( (ret = mbedtls_pk_verify_ext(child->MBEDTLS_PRIVATE(sig_pk), child->MBEDTLS_PRIVATE(sig_opts), &pubkey, - child->MBEDTLS_PRIVATE(sig_md), hash, md_size, - child->MBEDTLS_PRIVATE(sig).p, child->MBEDTLS_PRIVATE(sig).len)) != 0 ) ) { + if (unlikely((ret = mbedtls_pk_verify_ext(child->MBEDTLS_PRIVATE(sig_pk), child->MBEDTLS_PRIVATE(sig_opts), &pubkey, + child->MBEDTLS_PRIVATE(sig_md), hash, md_size, + child->MBEDTLS_PRIVATE(sig).p, child->MBEDTLS_PRIVATE(sig).len)) != 0)) { ESP_LOGE(TAG, "PK verify failed with error 0x%x", -ret); goto cleanup; } @@ -163,12 +172,12 @@ static int esp_crt_check_signature(const mbedtls_x509_crt* child, const uint8_t* static cert_t esp_crt_find_cert(const unsigned char* const issuer, const size_t issuer_len) { - if (unlikely( issuer == NULL || issuer_len == 0 )) { + if (unlikely(issuer == NULL || issuer_len == 0)) { return NULL; } int start = 0; - int end = esp_crt_get_certcount(s_crt_bundle)-1; + int end = esp_crt_get_certcount(s_crt_bundle) - 1; int middle = (start + end) / 2; cert_t cert = NULL; @@ -182,9 +191,9 @@ static cert_t esp_crt_find_cert(const unsigned char* const issuer, const size_t // Issuers are in DER encoding, with lengths encoded in the content; if valid DER, differing lengths // are reflected in differing content. // Still, we won't try to memcmp beyond the given length: - int cmp_res = memcmp(issuer, esp_crt_get_name(cert), MIN(issuer_len, cert_name_len) ); + int cmp_res = memcmp(issuer, esp_crt_get_name(cert), MIN(issuer_len, cert_name_len)); - if ( unlikely( cmp_res == 0 ) ) { + if (unlikely(cmp_res == 0)) { return cert; } else if (cmp_res < 0) { end = middle - 1; @@ -216,7 +225,8 @@ int esp_crt_verify_callback(void *buf, mbedtls_x509_crt* const crt, const int de return 0; } - if( unlikely( s_crt_bundle == NULL ) ) { + + if (unlikely(s_crt_bundle == NULL)) { ESP_LOGE(TAG, "No certificates in bundle"); return MBEDTLS_ERR_X509_FATAL_ERROR; } @@ -225,11 +235,11 @@ int esp_crt_verify_callback(void *buf, mbedtls_x509_crt* const crt, const int de cert_t cert = esp_crt_find_cert(child->issuer_raw.p, child->issuer_raw.len); - if ( likely( cert != NULL ) ) { + if (likely(cert != NULL)) { const int ret = esp_crt_check_signature(child, esp_crt_get_key(cert), esp_crt_get_key_len(cert)); - if ( likely( ret == 0 ) ) { + if (likely(ret == 0)) { ESP_LOGI(TAG, "Certificate validated"); *flags = 0; return 0; @@ -265,7 +275,7 @@ int esp_crt_verify_callback(void *buf, mbedtls_x509_crt* const crt, const int de */ static bool esp_crt_check_bundle(const uint8_t* const x509_bundle, const size_t bundle_size) { - if (unlikely( x509_bundle == NULL || bundle_size <= (sizeof(uint32_t) + CRT_HEADER_SIZE)) ) { + if (unlikely(x509_bundle == NULL || bundle_size <= (sizeof(uint32_t) + CRT_HEADER_SIZE))) { // Bundle is too small for even one offset and one certificate return false; } @@ -273,32 +283,32 @@ static bool esp_crt_check_bundle(const uint8_t* const x509_bundle, const size_t // Pointer to the first offset entry const uint32_t* offsets = (const uint32_t*)x509_bundle; - if(unlikely( offsets[0] == 0 || (offsets[0] % sizeof(uint32_t)) != 0) ) { + if (unlikely(offsets[0] == 0 || (offsets[0] % sizeof(uint32_t)) != 0)) { // First offset is invalid. // The first certificate must start after N uint32_t offset values. return false; } - if(unlikely( offsets[0] >= bundle_size )) { + if (unlikely(offsets[0] >= bundle_size)) { // First cert starts beyond end of bundle return false; } const uint32_t num_certs = esp_crt_get_certcount(x509_bundle); - if(unlikely( num_certs > CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_MAX_CERTS )) { + if (unlikely(num_certs > CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_MAX_CERTS)) { ESP_LOGE(TAG, "Cert bundle certificates exceed max allowed certificates"); return false; } // Check all offsets for consistency with certificate data - for (uint32_t i = 0; i < num_certs-1; ++i ) { + for (uint32_t i = 0; i < num_certs - 1; ++i) { const uint32_t off = offsets[i]; cert_t cert = x509_bundle + off; // The next offset in the list must point to right after the current cert const uint32_t expected_next_offset = off + esp_crt_get_len(cert); - if( unlikely( offsets[i+1] != expected_next_offset || expected_next_offset >= bundle_size ) ) { + if (unlikely(offsets[i + 1] != expected_next_offset || expected_next_offset >= bundle_size)) { return false; } } @@ -312,7 +322,7 @@ static bool esp_crt_check_bundle(const uint8_t* const x509_bundle, const size_t */ static esp_err_t esp_crt_bundle_init(const uint8_t* const x509_bundle, const size_t bundle_size) { - if ( likely( esp_crt_check_bundle(x509_bundle, bundle_size) ) ) { + if (likely(esp_crt_check_bundle(x509_bundle, bundle_size))) { s_crt_bundle = x509_bundle; return ESP_OK; } else { @@ -328,7 +338,7 @@ esp_err_t esp_crt_bundle_attach(void *conf) ret = esp_crt_bundle_init(x509_crt_imported_bundle_bin_start, x509_crt_imported_bundle_bin_end - x509_crt_imported_bundle_bin_start); } - if ( unlikely(ret != ESP_OK) ) { + if (unlikely(ret != ESP_OK)) { ESP_LOGE(TAG, "Failed to attach bundle"); return ret; } From 20fff296e4eb65389b4468442b6a514d9b5716f3 Mon Sep 17 00:00:00 2001 From: "harshal.patil" Date: Mon, 15 Jul 2024 20:14:31 +0530 Subject: [PATCH 107/365] test(mbedtls): Update custom cert bundle init API - bound checking testcase - Support the newer cert bundle format in the test --- .../test_apps/main/test_esp_crt_bundle.c | 133 +++++++++++++----- 1 file changed, 96 insertions(+), 37 deletions(-) diff --git a/components/mbedtls/test_apps/main/test_esp_crt_bundle.c b/components/mbedtls/test_apps/main/test_esp_crt_bundle.c index 777af0425bdd..4b4ae1f927b0 100644 --- a/components/mbedtls/test_apps/main/test_esp_crt_bundle.c +++ b/components/mbedtls/test_apps/main/test_esp_crt_bundle.c @@ -6,8 +6,9 @@ * * SPDX-License-Identifier: Apache-2.0 * - * SPDX-FileContributor: 2019-2022 Espressif Systems (Shanghai) CO LTD + * SPDX-FileContributor: 2019-2024 Espressif Systems (Shanghai) CO LTD */ +#include #include "esp_err.h" #include "esp_log.h" @@ -41,6 +42,7 @@ extern const uint8_t server_cert_chain_pem_end[] asm("_binary_server_cert_chai extern const uint8_t server_pk_start[] asm("_binary_prvtkey_pem_start"); extern const uint8_t server_pk_end[] asm("_binary_prvtkey_pem_end"); +// `server_cert_bundle_corrupt` is created by generating the cert bundle using `server_root.pem` extern const uint8_t server_cert_bundle_start[] asm("_binary_server_cert_bundle_start"); extern const uint8_t server_cert_bundle_end[] asm("_binary_server_cert_bundle_end"); @@ -272,7 +274,7 @@ void client_task(void *pvParameters) goto exit; } - /* Test with default crt bundle that doesnt contain the ca crt */ + /* Test with default crt bundle that does not contain the ca crt */ ESP_LOGI(TAG, "Connecting to %s:%s...", SERVER_ADDRESS, SERVER_PORT); if ((ret = mbedtls_net_connect(&client.client_fd, SERVER_ADDRESS, SERVER_PORT, MBEDTLS_NET_PROTO_TCP)) != 0) { ESP_LOGE(TAG, "mbedtls_net_connect returned -%x", -ret); @@ -300,7 +302,7 @@ void client_task(void *pvParameters) } else { ESP_LOGE(TAG, "Certificate verification failed!"); } - TEST_ASSERT(res == ESP_CRT_VALIDATE_FAIL); + TEST_ASSERT_EQUAL(ESP_CRT_VALIDATE_FAIL, res); // Reset session before new connection mbedtls_ssl_close_notify(&client.ssl); @@ -338,7 +340,7 @@ void client_task(void *pvParameters) } else { ESP_LOGE(TAG, "Certificate verification failed!"); } - TEST_ASSERT(res == ESP_CRT_VALIDATE_OK); + TEST_ASSERT_EQUAL(ESP_CRT_VALIDATE_OK, res); // Reset session before new connection mbedtls_ssl_close_notify(&client.ssl); @@ -406,7 +408,7 @@ TEST_CASE("custom certificate bundle - weak hash", "[mbedtls]") mbedtls_x509_crt_init( &crt ); mbedtls_x509_crt_parse(&crt, bad_md_crt_pem_start, bad_md_crt_pem_end - bad_md_crt_pem_start); - TEST_ASSERT(mbedtls_x509_crt_verify(&crt, NULL, NULL, NULL, &flags, esp_crt_verify_callback, NULL) == 0); + TEST_ASSERT_EQUAL(0, mbedtls_x509_crt_verify(&crt, NULL, NULL, NULL, &flags, esp_crt_verify_callback, NULL)); mbedtls_x509_crt_free(&crt); @@ -426,62 +428,119 @@ TEST_CASE("custom certificate bundle - wrong signature", "[mbedtls]") /* esp32.com cert chain where 1 byte in the signature is changed */ printf("Testing certificate with wrong signature\n"); mbedtls_x509_crt_parse(&crt, wrong_sig_crt_pem_start, wrong_sig_crt_pem_end - wrong_sig_crt_pem_start); - TEST_ASSERT(mbedtls_x509_crt_verify(&crt, NULL, NULL, NULL, &flags, esp_crt_verify_callback, NULL) != 0); + TEST_ASSERT_NOT_EQUAL(0, mbedtls_x509_crt_verify(&crt, NULL, NULL, NULL, &flags, esp_crt_verify_callback, NULL)); mbedtls_x509_crt_free(&crt); mbedtls_x509_crt_init( &crt ); /* the correct esp32.com cert chain*/ printf("Testing certificate with correct signature\n"); mbedtls_x509_crt_parse(&crt, correct_sig_crt_pem_start, correct_sig_crt_pem_end - correct_sig_crt_pem_start); - TEST_ASSERT(mbedtls_x509_crt_verify(&crt, NULL, NULL, NULL, &flags, esp_crt_verify_callback, NULL) == 0); + TEST_ASSERT_EQUAL(0, mbedtls_x509_crt_verify(&crt, NULL, NULL, NULL, &flags, esp_crt_verify_callback, NULL)); mbedtls_x509_crt_free(&crt); esp_crt_bundle_detach(NULL); } -TEST_CASE("custom certificate bundle init API - bound checking", "[mbedtls]") +TEST_CASE("custom certificate bundle init API - bound checking - NULL certificate bundle", "[mbedtls]") { + esp_err_t esp_ret; + + /* The API should fail when NULL is passed as the bundle */ + esp_ret = esp_crt_bundle_set(NULL, 0); + TEST_ASSERT_EQUAL(ESP_ERR_INVALID_ARG, esp_ret); +} - uint8_t test_bundle[256] = {0}; +TEST_CASE("custom certificate bundle init API - bound checking - Invalid size of certificate bundle", "[mbedtls]") +{ + uint8_t test_bundle[1024] = {0}; esp_err_t esp_ret; + /* The API should fail with bundle size given as 1 */ esp_ret = esp_crt_bundle_set(test_bundle, 1); - TEST_ASSERT( esp_ret == ESP_ERR_INVALID_ARG); + TEST_ASSERT_EQUAL(ESP_ERR_INVALID_ARG, esp_ret); +} + +TEST_CASE("custom certificate bundle init API - bound checking - Invalid first certificate offset", "[mbedtls]") +{ + uint8_t test_bundle[1024] = {0}; + esp_err_t esp_ret; + + /* Check that the esp_crt_bundle_set API will not accept + * the first offset to be invalid */ + + /* The first certificate must start after N uint32_t offset values, + * thus, it cannot start from the 0th position */ + test_bundle[0] = 0; + esp_ret = esp_crt_bundle_set(test_bundle, sizeof(test_bundle)); + TEST_ASSERT_EQUAL(ESP_ERR_INVALID_ARG, esp_ret); + + /* The first certificate must start after N uint32_t offset values, thus, + * the offset from where the it would start should be divisible by sizeof(uint32_t) */ + test_bundle[0] = 1; + esp_ret = esp_crt_bundle_set(test_bundle, sizeof(test_bundle)); + TEST_ASSERT_EQUAL(ESP_ERR_INVALID_ARG, esp_ret); + + /* Check that the esp_crt_bundle_set API will not accept a bundle + * which in which the first cert starts beyond end of bundle*/ + uint8_t *dummy_test_bundle = test_bundle + sizeof(uint32_t); + + esp_ret = esp_crt_bundle_set(dummy_test_bundle, sizeof(test_bundle)); + TEST_ASSERT_EQUAL(ESP_ERR_INVALID_ARG, esp_ret); +} + +TEST_CASE("custom certificate bundle init API - bound checking - Certificates count overflow", "[mbedtls]") +{ + uint8_t test_bundle[1024] = {0}; + esp_err_t esp_ret; + + memset(test_bundle, 0, sizeof(test_bundle)); /* Check that the esp_crt_bundle_set API will not accept a bundle * which has more no. of certs than configured in * CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_MAX_CERTS */ + *((uint32_t*) test_bundle) = ((CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_MAX_CERTS + 1) * sizeof(uint32_t)); - uint8_t rand; - esp_fill_random(&rand, 1); - test_bundle[0] = rand; + esp_ret = esp_crt_bundle_set(test_bundle, sizeof(test_bundle)); + TEST_ASSERT_EQUAL(ESP_ERR_INVALID_ARG, esp_ret); - /* Make sure that the number of certs will always be greater than - * CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_MAX_CERTS */ - test_bundle[1] = rand + CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_MAX_CERTS; + esp_crt_bundle_detach(NULL); +} + +TEST_CASE("custom certificate bundle init API - bound checking - Incorrect certificate offset", "[mbedtls]") +{ + uint8_t test_bundle[1024] = {0}; + esp_err_t esp_ret; + + memset(test_bundle, 0, sizeof(test_bundle)); + + /* Check that the esp_crt_bundle_set API will not accept a bundle where + all offsets are not consistent with certificate data */ + + /* + | offset 1 | offset 2 | Cert 1 name len | Cert 1 key len | Cert 1 name | Cert 1 key | Cert 2 name len | ..... | + | ----- offsets ----- | + | ---------------------- Certificate 1 ---------------------- | + | ---- Certificate 2 ---- | + */ + + *((uint32_t*) &test_bundle[0]) = (2 * sizeof(uint32_t)); + *((uint16_t*) &test_bundle[8]) = 2; // Cert 1 name len + *((uint16_t*) &test_bundle[10]) = 4; // Cert 1 key len + + /* Correct offset of certificate 2 should be + = 2 * sizeof(uint32_t) (Offsets of 2 certs) + 2 * sizeof(uint16_t) (Cert name and len) + 2 (Cert 1 name len) + 4 (Cert 1 key len); + = 18 + */ + *((uint32_t*) &test_bundle[4]) = 16; // Incorrect certificate 2 offset esp_ret = esp_crt_bundle_set(test_bundle, sizeof(test_bundle)); - TEST_ASSERT( esp_ret == ESP_ERR_INVALID_ARG); + TEST_ASSERT_EQUAL(ESP_ERR_INVALID_ARG, esp_ret); - /* The API should fail with bundle_size < BUNDLE_HEADER_OFFSET (2) + CRT_HEADER_OFFSET (4) */ - test_bundle[0] = 0; - test_bundle[1] = 1; /* set num_certs = 1 */ - esp_ret = esp_crt_bundle_set(test_bundle, 5); - TEST_ASSERT(esp_ret == ESP_ERR_INVALID_ARG); - - /* Cert number is greater than actual certs present, The API should fail */ - /* Actual No. of certs present in bundle = 1, setting num_certs to 5 */ - test_bundle[1] = 5; /* num_certs */ - test_bundle[3] = 5; /* cert_1_name_len */ - test_bundle[5] = 10; /* cert_1_pub_key_len */ - /* Actual bundle size becomes BUNDLE_HEADER_OFFSET (2) + CRT_HEADER_OFFSET (4) + cert_1_name_len(5) + cert_1_pub_key_len(10) - * i.e. 21 bytes */ - esp_ret = esp_crt_bundle_set(test_bundle, 21); - TEST_ASSERT(esp_ret == ESP_ERR_INVALID_ARG); - - /* The API should fail if bundle_size < BUNDLE_HEADER_OFFSET (2) + CRT_HEADER_OFFSET (4) + cert_1_name_len(5) + cert_1_pub_key_len(10) */ - esp_ret = esp_crt_bundle_set(test_bundle, 20); - TEST_ASSERT(esp_ret == ESP_ERR_INVALID_ARG); + /* Check that the esp_crt_bundle_set API will not accept a bundle where + all offsets are not consistency with certificate data and the certificate + offsets exceeds the bundle size */ + *((uint32_t*) &test_bundle[4]) = sizeof(test_bundle) + 1; // Offset exceeds the test_bundle size - esp_crt_bundle_detach(NULL); + esp_ret = esp_crt_bundle_set(test_bundle, sizeof(test_bundle)); + TEST_ASSERT_EQUAL(ESP_ERR_INVALID_ARG, esp_ret); } From 0702fb82b0021e4812f4715febcddfbf3f534785 Mon Sep 17 00:00:00 2001 From: "harshal.patil" Date: Mon, 15 Jul 2024 17:42:20 +0530 Subject: [PATCH 108/365] ci(examples/protocols): Add more testing connections in the x509 bundle example - This adds a test to try connecting to the domains that use the most common certificate authorities with the default full cert bundle --- .../main/https_x509_bundle_example_main.c | 13 +++++++ .../pytest_https_x509_bundle.py | 36 ++++++++++--------- .../sdkconfig.ci.default_crt_bundle | 10 ++++++ 3 files changed, 42 insertions(+), 17 deletions(-) create mode 100644 examples/protocols/https_x509_bundle/sdkconfig.ci.default_crt_bundle diff --git a/examples/protocols/https_x509_bundle/main/https_x509_bundle_example_main.c b/examples/protocols/https_x509_bundle/main/https_x509_bundle_example_main.c index 966aa8173e39..33e3040cf909 100644 --- a/examples/protocols/https_x509_bundle/main/https_x509_bundle_example_main.c +++ b/examples/protocols/https_x509_bundle/main/https_x509_bundle_example_main.c @@ -43,11 +43,24 @@ #include "esp_tls.h" #include "esp_crt_bundle.h" +#if CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_FULL +#define MAX_URLS 9 +#else #define MAX_URLS 2 +#endif static const char *web_urls[MAX_URLS] = { "https://www.howsmyssl.com/a/check", "https://espressif.com", +#if CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_FULL + "https://letsencrypt.org", + "https://www.identrust.com", + "https://www.globalsign.com", + "https://www.sectigo.com", + "https://www.digicert.com", + "https://www.godaddy.com", + "https://rainmaker.espressif.com", // Amazon +#endif }; static const char *TAG = "example"; diff --git a/examples/protocols/https_x509_bundle/pytest_https_x509_bundle.py b/examples/protocols/https_x509_bundle/pytest_https_x509_bundle.py index 12ef0d1f1d2f..2e6aa598106e 100644 --- a/examples/protocols/https_x509_bundle/pytest_https_x509_bundle.py +++ b/examples/protocols/https_x509_bundle/pytest_https_x509_bundle.py @@ -1,10 +1,9 @@ -# SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD +# SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD # SPDX-License-Identifier: Unlicense OR CC0-1.0 import logging import os import pytest -from common_test_methods import get_env_config_variable from pytest_embedded import Dut @@ -21,17 +20,11 @@ def test_examples_protocol_https_x509_bundle(dut: Dut) -> None: binary_file = os.path.join(dut.app.binary_path, 'https_x509_bundle.bin') bin_size = os.path.getsize(binary_file) logging.info('https_x509_bundle_bin_size : {}KB'.format(bin_size // 1024)) - # Connect to AP - if dut.app.sdkconfig.get('EXAMPLE_WIFI_SSID_PWD_FROM_STDIN') is True: - dut.expect('Please input ssid password:') - env_name = 'wifi_ap' - ap_ssid = get_env_config_variable(env_name, 'ap_ssid') - ap_password = get_env_config_variable(env_name, 'ap_password') - dut.write(f'{ap_ssid} {ap_password}') dut.expect(r'IPv4 address: (\d+\.\d+\.\d+\.\d+)[^\d]', timeout=30) # start test num_URLS = int(dut.expect(r'Connecting to (\d+) URLs', timeout=30)[1].decode()) - dut.expect(r'Connection established to ([\s\S]*)', timeout=30) + for _ in range(num_URLS): + dut.expect(r'Connection established to ([\s\S]*)', timeout=30) dut.expect('Completed {} connections'.format(num_URLS), timeout=60) @@ -44,15 +37,24 @@ def test_examples_protocol_https_x509_bundle_dynamic_buffer(dut: Dut) -> None: binary_file = os.path.join(dut.app.binary_path, 'https_x509_bundle.bin') bin_size = os.path.getsize(binary_file) logging.info('https_x509_bundle_bin_size : {}KB'.format(bin_size // 1024)) - # Connect to AP - if dut.app.sdkconfig.get('EXAMPLE_WIFI_SSID_PWD_FROM_STDIN') is True: - dut.expect('Please input ssid password:') - env_name = 'wifi_ap' - ap_ssid = get_env_config_variable(env_name, 'ap_ssid') - ap_password = get_env_config_variable(env_name, 'ap_password') - dut.write(f'{ap_ssid} {ap_password}') dut.expect(r'IPv4 address: (\d+\.\d+\.\d+\.\d+)[^\d]', timeout=30) # start test num_URLS = int(dut.expect(r'Connecting to (\d+) URLs', timeout=30)[1].decode()) dut.expect(r'Connection established to ([\s\S]*)', timeout=30) dut.expect('Completed {} connections'.format(num_URLS), timeout=60) + + +@pytest.mark.esp32 +@pytest.mark.ethernet +@pytest.mark.parametrize('config', ['default_crt_bundle',], indirect=True) +def test_examples_protocol_https_x509_bundle_default_crt_bundle_stress_test(dut: Dut) -> None: + # check and log bin size + binary_file = os.path.join(dut.app.binary_path, 'https_x509_bundle.bin') + bin_size = os.path.getsize(binary_file) + logging.info('https_x509_bundle_bin_size : {}KB'.format(bin_size // 1024)) + dut.expect(r'IPv4 address: (\d+\.\d+\.\d+\.\d+)[^\d]', timeout=30) + # start test + num_URLS = int(dut.expect(r'Connecting to (\d+) URLs', timeout=30)[1].decode()) + for _ in range(num_URLS): + dut.expect(r'Connection established to ([\s\S]*)', timeout=30) + dut.expect('Completed {} connections'.format(num_URLS), timeout=60) diff --git a/examples/protocols/https_x509_bundle/sdkconfig.ci.default_crt_bundle b/examples/protocols/https_x509_bundle/sdkconfig.ci.default_crt_bundle new file mode 100644 index 000000000000..3f3ad687e400 --- /dev/null +++ b/examples/protocols/https_x509_bundle/sdkconfig.ci.default_crt_bundle @@ -0,0 +1,10 @@ +CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_FULL=y + +CONFIG_EXAMPLE_CONNECT_ETHERNET=y +CONFIG_EXAMPLE_CONNECT_WIFI=n +CONFIG_EXAMPLE_USE_INTERNAL_ETHERNET=y +CONFIG_EXAMPLE_ETH_PHY_IP101=y +CONFIG_EXAMPLE_ETH_MDC_GPIO=23 +CONFIG_EXAMPLE_ETH_MDIO_GPIO=18 +CONFIG_EXAMPLE_ETH_PHY_RST_GPIO=5 +CONFIG_EXAMPLE_ETH_PHY_ADDR=1 From 2d6188ea765a4e842ef381cabcc8d4b79f575665 Mon Sep 17 00:00:00 2001 From: Sarvesh Bodakhe Date: Mon, 30 Sep 2024 15:25:10 +0530 Subject: [PATCH 109/365] feat(wifi): Add checks for public headers for esp32c5, esp32c61 and esp32_host Add md5sum integrity check for public header files for esp32c5, esp32c61 and esp32_host libraries. --- components/esp_wifi/test_md5/test_md5.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/esp_wifi/test_md5/test_md5.sh b/components/esp_wifi/test_md5/test_md5.sh index 98c29f77322a..788a8744b7e8 100755 --- a/components/esp_wifi/test_md5/test_md5.sh +++ b/components/esp_wifi/test_md5/test_md5.sh @@ -22,7 +22,7 @@ case $IDF_TARGET in esp32s3) PREFIX=xtensa-esp32s3-elf- ;; - esp32c2|esp32c3|esp32c6) + esp32c2|esp32c3|esp32c6|esp32c5|esp32_host|esp32c61) PREFIX=riscv32-esp-elf- ;; *) From 5cab997c15cee0d124f682a5b608547870603301 Mon Sep 17 00:00:00 2001 From: Sarvesh Bodakhe Date: Mon, 30 Sep 2024 16:09:09 +0530 Subject: [PATCH 110/365] ci: Add md5 checksum validation for WiFi public header files for new chips Add MD5 checksum validation for public header files of the following new chips: esp32c5, esp32c6, and esp32_host. --- .gitlab/ci/pre_check.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitlab/ci/pre_check.yml b/.gitlab/ci/pre_check.yml index 7bf24fb158fd..62a513389004 100644 --- a/.gitlab/ci/pre_check.yml +++ b/.gitlab/ci/pre_check.yml @@ -44,6 +44,9 @@ check_blobs: - IDF_TARGET=esp32c2 $IDF_PATH/components/esp_wifi/test_md5/test_md5.sh - IDF_TARGET=esp32c3 $IDF_PATH/components/esp_wifi/test_md5/test_md5.sh - IDF_TARGET=esp32c6 $IDF_PATH/components/esp_wifi/test_md5/test_md5.sh + - IDF_TARGET=esp32c5 $IDF_PATH/components/esp_wifi/test_md5/test_md5.sh + - IDF_TARGET=esp32c61 $IDF_PATH/components/esp_wifi/test_md5/test_md5.sh + - IDF_TARGET=esp32_host $IDF_PATH/components/esp_wifi/test_md5/test_md5.sh # Check if Coexistence library header files match between IDF and the version used when compiling the libraries - IDF_TARGET=esp32 $IDF_PATH/components/esp_coex/test_md5/test_md5.sh - IDF_TARGET=esp32s2 $IDF_PATH/components/esp_coex/test_md5/test_md5.sh From 8b4ebea87299b777758328ee04c9a66d8cabf582 Mon Sep 17 00:00:00 2001 From: Sarvesh Bodakhe Date: Tue, 8 Oct 2024 10:20:06 +0530 Subject: [PATCH 111/365] ci: Add md5 checksum validation for COEX public header files for new chips Add MD5 checksum validation for public header files of the following new chips: esp32c5 and esp32c61. --- .gitlab/ci/pre_check.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitlab/ci/pre_check.yml b/.gitlab/ci/pre_check.yml index 62a513389004..31dfb072664c 100644 --- a/.gitlab/ci/pre_check.yml +++ b/.gitlab/ci/pre_check.yml @@ -55,6 +55,8 @@ check_blobs: - IDF_TARGET=esp32c3 $IDF_PATH/components/esp_coex/test_md5/test_md5.sh - IDF_TARGET=esp32c6 $IDF_PATH/components/esp_coex/test_md5/test_md5.sh - IDF_TARGET=esp32h2 $IDF_PATH/components/esp_coex/test_md5/test_md5.sh + - IDF_TARGET=esp32c5 $IDF_PATH/components/esp_coex/test_md5/test_md5.sh + - IDF_TARGET=esp32c61 $IDF_PATH/components/esp_coex/test_md5/test_md5.sh # Check if Wi-Fi, PHY, BT blobs contain references to specific symbols - bash $IDF_PATH/tools/ci/check_blobs.sh From 1ddc11448e338c5eed05503aaaf6afcfab069d4d Mon Sep 17 00:00:00 2001 From: shenmengjing Date: Thu, 20 Jun 2024 17:46:22 +0800 Subject: [PATCH 112/365] docs: Provide Chinese translation for sd_pullup_requirements --- .../peripherals/sd_pullup_requirements.rst | 127 +++--- .../peripherals/sd_pullup_requirements.rst | 361 +++++++++++++++++- 2 files changed, 440 insertions(+), 48 deletions(-) diff --git a/docs/en/api-reference/peripherals/sd_pullup_requirements.rst b/docs/en/api-reference/peripherals/sd_pullup_requirements.rst index 399d5f424ac3..21e8e1e5ed93 100644 --- a/docs/en/api-reference/peripherals/sd_pullup_requirements.rst +++ b/docs/en/api-reference/peripherals/sd_pullup_requirements.rst @@ -1,9 +1,11 @@ SD Pull-up Requirements ======================= +:link_to_translation:`zh_CN:[中文]` + Espressif hardware products are designed for multiple use cases which may require different pull states on pins. For this reason, the pull state of particular pins on certain products needs to be adjusted to provide the pull-ups required in the SD bus. -SD pull-up requirements apply to cases where {IDF_TARGET_NAME} uses the SPI or SDMMC controller to communicate with SD cards. When an SD card is operating in SPI mode or 1-bit SD mode, the CMD and DATA (DAT0 - DAT3) lines of the SD bus must be pulled up by 10 kOhm resistors. SD cards and SDIO devices should also have pull-ups on all above-mentioned lines (regardless of whether these lines are connected to the host) in order to prevent them from entering a wrong state. +SD pull-up requirements apply to cases where {IDF_TARGET_NAME} uses the SPI or SDMMC controller to communicate with SD cards. When an SD card is operating in SPI mode or 1-bit SD mode, the CMD and DATA (DAT0 - DAT3) lines of the SD bus must be pulled up by 10 kΩ resistors. SD cards and SDIO devices should also have pull-ups on all above-mentioned lines (regardless of whether these lines are connected to the host) in order to prevent them from entering a wrong state. .. only:: esp32 @@ -11,13 +13,13 @@ SD pull-up requirements apply to cases where {IDF_TARGET_NAME} uses the SPI or S .. todo:: - Add a diagram of the Bus lines and pullups + Add a diagram of the bus lines and pullups This document has the following structure: -- `Overview of compatibility`_ between the default pull states on pins of Espressif's products and the states required by the SD bus -- `Solutions`_ - ideas on how to resolve compatibility issues -- `Related information`_ - other relevant information +- :ref:`compatibility_overview_espressif_hw_sdio` between the default pull states on pins of Espressif's products and the states required by the SD bus +- :ref:`sdio_solutions` - ideas on how to resolve compatibility issues +- :ref:`related_info_sdio` - other relevant information .. _compatibility_overview_espressif_hw_sdio: @@ -28,11 +30,11 @@ Overview of Compatibility This section provides an overview of compatibility issues that might occur when using SDIO (secure digital input output). Since the SD bus needs to be connected to pull-ups, these issues should be resolved regardless of whether they are related to master (host) or slave (device). Each issue has links to its respective solution. A solution for a host and device may differ. -Systems on a Chip (SoCs) -^^^^^^^^^^^^^^^^^^^^^^^^ - .. only:: esp32 + Systems on a Chip (SoCs) + ^^^^^^^^^^^^^^^^^^^^^^^^ + - ESP32 (except for D2WD versions, see `ESP32 datasheet `_): - :ref:`sd_pull-up_no_pull-ups` @@ -45,33 +47,34 @@ Systems on a Chip (SoCs) .. only:: SOC_SDMMC_USE_GPIO_MATRIX - {IDF_TARGET_NAME} SDMMC host controller allows using any of GPIOs for any of SD interface signals. However, it is recommended to avoid using strapping GPIOs, GPIOs with internal weak pull-downs and GPIOs commonly used for other purposes to prevent conflicts: + Systems on a Chip (SoCs) + ^^^^^^^^^^^^^^^^^^^^^^^^ -.. only:: esp32s3 + {IDF_TARGET_NAME} SDMMC host controller allows using any of GPIOs for any of SD interface signals. However, it is recommended to avoid using strapping GPIOs, GPIOs with internal weak pull-downs and GPIOs commonly used for other purposes to prevent conflicts. - - GPIO0 (strapping pin) - - GPIO45, GPIO46 (strapping pins, internal weak pulldown) - - GPIO26 - GPIO32 (commonly used for SPI Flash and PSRAM) - - GPIO33 - GPIO37 (when using chips and modules with Octal SPI Flash or Octal PSRAM) - - GPIO43, GPIO44 (GPIOs used for UART0 by default) - - GPIO19, GPIO20 (GPIOs used for USB by default) + .. only:: esp32s3 + - GPIO0 (strapping pin) + - GPIO45, GPIO46 (strapping pins, internal weak pulldown) + - GPIO26 - GPIO32 (commonly used for SPI flash and PSRAM) + - GPIO33 - GPIO37 (when using chips and modules with octal SPI flash or octal PSRAM) + - GPIO43, GPIO44 (GPIOs used for UART0 by default) + - GPIO19, GPIO20 (GPIOs used for USB by default) -Systems in Packages (SIP) -^^^^^^^^^^^^^^^^^^^^^^^^^ .. only:: esp32 + Systems in Packages (SIP) + ^^^^^^^^^^^^^^^^^^^^^^^^^ + - ESP32-PICO-D4: - :ref:`sd_pull-up_no_pull-ups` - :ref:`strapping_conflicts_dat2` -Modules -^^^^^^^ - -.. only:: esp32 + Modules + ^^^^^^^ - ESP32-WROOM-32 Series, including ESP32-WROOM-32, ESP32-WROOM-32D, ESP32-WROOM-32U, and ESP32-SOLO-1 @@ -88,12 +91,12 @@ Modules - :ref:`strapping_conflicts_dat2` -.. _sdio_dev_kits: +.. only:: esp32 -Development Boards -^^^^^^^^^^^^^^^^^^ + .. _sdio_dev_kits: -.. only:: esp32 + Development Boards + ^^^^^^^^^^^^^^^^^^ - ESP32-PICO-KIT, including PICO-KIT v4.1, v4.0, and v3 @@ -132,6 +135,11 @@ Development Boards .. only:: esp32s3 + .. _sdio_dev_kits: + + Development Boards + ^^^^^^^^^^^^^^^^^^ + - ESP32-S3-DevKitC-1 - :ref:`sd_pull-up_no_pull-ups` @@ -154,6 +162,8 @@ Development Boards Please make sure that your SDIO host provides necessary pull-ups for all SD bus signals. +.. _sdio_solutions: + Solutions --------- @@ -162,10 +172,19 @@ Solutions No Pull-ups ^^^^^^^^^^^ -If you use a development board without pull-ups, you can do the following: +.. only:: esp32 or esp32s3 -- If your host and slave device are on separate boards, replace one of them with a board that has pull-ups. For the list of Espressif's development boards with pull-ups, go to :ref:`sdio_dev_kits`. -- Attach external pull-ups by connecting each pin which requires a pull-up to VDD via a 10 kOhm resistor. + When using a development board without pull-ups: + + - If your host and slave device are on separate boards, replace one of them with a board that has pull-ups. For the list of Espressif's development boards with pull-ups, go to :ref:`sdio_dev_kits`. + - Attach external pull-ups by connecting each pin which requires a pull-up to VDD via a 10 kΩ resistor. + +.. only:: not esp32 and not esp32s3 + + When using a development board without pull-ups: + + - If your host and slave device are on separate boards, replace one of them with a board that has pull-ups. + - Attach external pull-ups by connecting each pin which requires a pull-up to VDD via a 10 kΩ resistor. .. only:: esp32 @@ -180,7 +199,7 @@ If you use a development board without pull-ups, you can do the following: - Use SPI mode - Perform one of the following actions on the GPIO13 pin: - Remove the pull-down resistors - - Attach a pull-up resistor of less than 5 kOhm (2 kOhm suggested) + - Attach a pull-up resistor of less than 5 kΩ (2 kΩ suggested) - Pull it up or drive it high either by using the host or with 3.3 V on VDD in 1-bit SD mode @@ -219,20 +238,20 @@ If you use a development board without pull-ups, you can do the following: BURN VDD_SDIO setting complete. - To check the status of the eFuses, run:: + To check the status of the eFuses, run: - .. code-block:: + .. code-block:: none idf.py efuse-summary - If running from an automated flashing script, it is better to use standalone eFuse tool, ``espefuse.py``. This tool also has an option ``--do-not-confirm`` to burn eFuses without confirmation. + If running from an automated flashing script, it is better to use standalone eFuse tool ``espefuse.py``. This tool also has an option ``--do-not-confirm`` to burn eFuses without confirmation. For more details, see **{IDF_TARGET_NAME} Technical Reference Manual** [`PDF <{IDF_TARGET_TRM_EN_URL}#efuse>`__]. - 2. **If using 1-bit SD mode or SPI mode**, disconnect the DAT2 pin and make sure it is pulled high. For this, do one the following: + 2. **If using 1-bit SD mode or SPI mode**, disconnect the DAT2 pin and make sure it is pulled high. For this, you have the following options: - - Leave the host's DAT2 floating and directly connect the slave's DAT2 to VDD. - - For a slave device, build a firmware with the option ``SDIO_SLAVE_FLAG_DAT2_DISABLED`` and re-flash your device. This option helps avoid slave detecting on the DAT2 line. Note that 4-bit SD mode is no longer supported by the standard Card Common Control Register (CCCR); however, the host is not aware of that. The use of 4-bit SD mode has to be disabled on the host's side. + - Leave the host's DAT2 floating and directly connect the slave's DAT2 to VDD. + - For a slave device, build a firmware with the option ``SDIO_SLAVE_FLAG_DAT2_DISABLED`` and re-flash your device. This option helps avoid slave detecting on the DAT2 line. Note that 4-bit SD mode is no longer supported by the standard Card Common Control Register (CCCR); however, the host is not aware of that. The use of 4-bit SD mode has to be disabled on the host's side. .. _no_pull-up_on_gpio12: @@ -240,7 +259,7 @@ If you use a development board without pull-ups, you can do the following: No Pull-up on GPIO12 ^^^^^^^^^^^^^^^^^^^^ - Your module is compatible with the SDIO protocol. Just connect GPIO12 to VDD via a 10 kOhm resistor. + Your module is compatible with the SDIO protocol. Just connect GPIO12 to VDD via a 10 kΩ resistor. .. _gpio2_strapping_pin: @@ -248,25 +267,25 @@ If you use a development board without pull-ups, you can do the following: Download Mode Not Working (minor issue) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - When the GPIO2 pin is pulled high in accordance with the SD pull-up requirements, you cannot enter Download mode because GPIO2 is a bootstrapping pin which in this case must be pulled low. + When the GPIO2 pin is pulled high in accordance with the SD pull-up requirements, you can not enter download mode because GPIO2 is a bootstrapping pin which in this case must be pulled low. - There are the following solutions: + There are following solutions: - - For boards that require shorting the GPIO0 and GPIO2 pins with a jumper, put the jumper in place, and the auto-reset circuit pulls GPIO2 low along with GPIO0 before entering Download mode. + - For boards that require shorting the GPIO0 and GPIO2 pins with a jumper, put the jumper in place, and the auto-reset circuit pulls GPIO2 low along with GPIO0 before entering download mode. - For boards with components attached to their GPIO2 pin (such as pull-down resistors and/or LEDs), check the schematic of your development board for anything connected to GPIO2. - **LEDs** would not affect operation in most cases. - **Pull-down resistors** can interfere with DAT0 signals and must be removed. - If the above solutions do not work for you, please determine if it is the host or slave device that has pull-ups affecting their GPIO2, then locate these pull-ups and remove them. + If above solutions do not work for you, please determine if it is the host or slave device that has pull-ups affecting their GPIO2, then locate these pull-ups and remove them. -.. _related_info_sdio: +.. only:: esp32 -Related Information -------------------- + .. _related_info_sdio: -.. only:: esp32 + Related Information + ------------------- .. _mtdi_strapping_pin: @@ -287,9 +306,9 @@ Related Information Internal Pull-ups and Strapping Requirements ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - Using external resistors is always preferable. However, Espressif's products have internal weak pull-up and pull-down resistors which can be enabled and used instead of external ones. Please keep in mind that this solution cannot guarantee reliable SDIO communication. + Using external resistors is always preferable. However, Espressif's products have internal weak pull-up and pull-down resistors which can be enabled and used instead of external ones. Please keep in mind that this solution can not guarantee reliable SDIO communication. - With that said, the information about these internal pull-ups and strapping requirements can still be useful. Espressif hardware products have different weak internal pull-ups/pull-downs connected to CMD and DATA pins. The table below shows the default pull-up and pull-down states of the CMD and DATA pins. + With that said, the information about these internal pull-ups and strapping requirements can still be useful. Espressif hardware products have different weak internal pull-ups and pull-downs connected to CMD and DATA pins. The table below shows the default pull-up and pull-down states of the CMD and DATA pins. The following abbreviations are used in the table: @@ -325,3 +344,17 @@ Related Information - DAT3 - WPU - + +.. only:: not esp32 + + .. _related_info_sdio: + + Related Information + ------------------- + + Internal Pull-ups and Strapping Requirements + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + Using external resistors is always preferable. However, Espressif's products have internal weak pull-up and pull-down resistors which can be enabled and used instead of external ones. Please keep in mind that this solution can not guarantee reliable SDIO communication. + + Generally it's not recommended to reuse strapping pins for SDIO purposes. The pullup and pulldown requirements of SD and strapping may conflict with each other. See datasheet for the strapping pins of {IDF_TARGET}. diff --git a/docs/zh_CN/api-reference/peripherals/sd_pullup_requirements.rst b/docs/zh_CN/api-reference/peripherals/sd_pullup_requirements.rst index 4b57be13f5da..16f88d6884e8 100644 --- a/docs/zh_CN/api-reference/peripherals/sd_pullup_requirements.rst +++ b/docs/zh_CN/api-reference/peripherals/sd_pullup_requirements.rst @@ -1 +1,360 @@ -.. include:: ../../../en/api-reference/peripherals/sd_pullup_requirements.rst +SD 上拉需求 +=========== + +:link_to_translation:`en:[English]` + +乐鑫硬件产品适用于多种场景,这些场景可能需要不同的管脚上拉状态。因此,要调整某些产品的特定管脚上拉状态,为 SD 总线提供所需的上拉电阻。 + +{IDF_TARGET_NAME} 使用 SPI 或 SDMMC 控制器与 SD 卡通信时,需要满足 SD 卡的上拉需求。当 SD 卡在 SPI 模式或 1 位 SD 模式下运行时,SD 总线的 CMD 和 DATA (DAT0 - DAT3) 线必须通过 10 kΩ 电阻上拉。SD 卡和 SDIO 设备也应在上述所有管脚(无论是否连接到主机)上有上拉电阻,以防设备进入错误状态。 + +.. only:: esp32 + + 默认情况下,如果 flash 电压为 3.3 V,则 MTDI strapping 管脚与 DAT2 线的上拉电阻不兼容。详情请参阅 :ref:`mtdi_strapping_pin`。 + +.. todo:: + + Add a diagram of the bus lines and pullups + +本文档涵盖以下章节内容: + +- :ref:`compatibility_overview_espressif_hw_sdio` - 简要介绍乐鑫产品管脚的默认上拉状态与 SD 总线所需状态之间的兼容性 +- :ref:`sdio_solutions` - 解决兼容性问题的方案 +- :ref:`related_info_sdio` - 其他相关信息 + + +.. _compatibility_overview_espressif_hw_sdio: + +兼容性概述 +---------- + +本节概述了在使用安全数字输入输出 (SDIO) 时可能出现的兼容性问题。SD 总线需要连接上拉电阻,因此要妥善解决与主机设备及从机设备有关的兼容性问题。下面每个问题都有相应解决方案的链接,主机设备和从机设备的解决方案可能有所不同。 + + +.. only:: esp32 + + 片上系统 (SoCs) + ^^^^^^^^^^^^^^^ + + - ESP32(除 D2WD 版本外,请参阅 `ESP32 技术规格书 `_): + + - :ref:`sd_pull-up_no_pull-ups` + - 带有 3.3 V flash 芯片的模组,请参阅 :ref:`strapping_conflicts_dat2` + + - ESP32-D2WD: + + - :ref:`sd_pull-up_no_pull-ups` + - :ref:`no_pull-up_on_gpio12` + +.. only:: SOC_SDMMC_USE_GPIO_MATRIX + + 片上系统 (SoCs) + ^^^^^^^^^^^^^^^ + + {IDF_TARGET_NAME} SDMMC 主机控制器允许 SD 接口信号使用所有 GPIO。但建议避免使用 strapping GPIO、带内部弱下拉的 GPIO 以及通常用于其他用途的 GPIO,以防出现冲突。 + + .. only:: esp32s3 + + - GPIO0(strapping 管脚) + - GPIO45、GPIO46(strapping 管脚,内部弱下拉) + - GPIO26 - GPIO32(通常用于 SPI flash 和 PSRAM) + - GPIO33 - GPIO37(用于带有八线 SPI flash 或八线 PSRAM 的芯片和模组) + - GPIO43、GPIO44(默认用于 UART0 的 GPIO) + - GPIO19、GPIO20(默认用于 USB 的 GPIO) + + +.. only:: esp32 + + 系统级封装 (SIP) + ^^^^^^^^^^^^^^^^ + + - ESP32-PICO-D4: + + - :ref:`sd_pull-up_no_pull-ups` + - :ref:`strapping_conflicts_dat2` + + + 模组 + ^^^^ + + - ESP32-WROOM-32 系列模组,包括 ESP32-WROOM-32、ESP32-WROOM-32D、ESP32-WROOM-32U 和 ESP32-SOLO-1 + + - :ref:`sd_pull-up_no_pull-ups` + - :ref:`strapping_conflicts_dat2` + + - ESP32-WROVER 系列模组,包括 ESP32-WROVER 和 ESP32-WROVER-I + + - :ref:`sd_pull-up_no_pull-ups` + + - ESP32-WROVER-B 系列模组,包括 ESP32-WROVER-B 和 ESP32-WROVER-IB + + - :ref:`sd_pull-up_no_pull-ups` + - :ref:`strapping_conflicts_dat2` + + +.. only:: esp32 + + .. _sdio_dev_kits: + + 开发板 + ^^^^^^ + + - ESP32-PICO-KIT,包括 PICO-KIT v4.1、v4.0 和 v3 + + - :ref:`sd_pull-up_no_pull-ups` + - :ref:`strapping_conflicts_dat2` + - :ref:`gpio2_strapping_pin` + + - ESP32-DevKitC,包括 ESP32-DevKitC v4 和 v2 + + - :ref:`sd_pull-up_no_pull-ups` + - :ref:`strapping_conflicts_dat2` + - :ref:`gpio2_strapping_pin` + + - ESP-WROVER-KIT + + - 提供所需的上拉电阻 + - :ref:`pull-up_conflicts_on_gpio13` (v4.1、v3、v2 和 v1) + - :ref:`strapping_conflicts_dat2` (v4.1、v2 和 v1) + - :ref:`gpio2_strapping_pin` (v2 和 v1) + + 通过查看安装在开发板上的模组,可以确定所使用的 ESP32-WROVER-KIT 的版本: + + - ESP32-WROVER-B 对应 v4.1 版本 + - ESP32-WROVER 对应 v3 版本 + - ESP32-WROOM-32 对应 v1 和 v2 版本 + + - ESP32-LyraTD-MSC + + - 提供所需的上拉电阻 + - :ref:`strapping_conflicts_dat2` + + - ESP32-LyraT + + - 提供所需的上拉电阻 + - :ref:`pull-up_conflicts_on_gpio13` + +.. only:: esp32s3 + + .. _sdio_dev_kits: + + 开发板 + ^^^^^^ + + - ESP32-S3-DevKitC-1 + + - :ref:`sd_pull-up_no_pull-ups` + + - ESP32-S3-USB-OTG + + - 该开发板可在单线和四线 SD 模式或 SPI 模式下使用。 + - 在 GPIO 33-38 上提供所需的上拉电阻。 + + - ESP32-S3-EYE + + - 该开发板仅限于单线 SD 模式下使用。 + - 在 GPIO 38-40 上提供所需的上拉电阻。 + +.. only:: SOC_SDIO_SLAVE_SUPPORTED + + 非乐鑫主机 + ^^^^^^^^^^ + + 请确保 SDIO 主机为所有 SD 总线信号提供必要的上拉电阻。 + + +.. _sdio_solutions: + +解决方案 +-------- + +.. _sd_pull-up_no_pull-ups: + +无上拉电阻 +^^^^^^^^^^ + +.. only:: esp32 or esp32s3 + + 如果所使用的开发板没有上拉电阻,可以执行以下操作: + + - 如果主机设备和从机设备在不同的开发板上,将其中一块开发板换为带有上拉电阻的开发板。如需了解哪些乐鑫开发板带有上拉电阻,请参阅 :ref:`sdio_dev_kits`。 + - 用一个 10 kΩ 的电阻将每个需要上拉的管脚连接到 VDD,从而附加外部上拉电阻。 + +.. only:: not esp32 and not esp32s3 + + 如果所使用的开发板没有上拉电阻,可以执行以下操作: + + - 如果主机设备和从机设备在不同的开发板上,将其中一块开发板换为带有上拉电阻的开发板。 + - 用一个 10 kΩ 的电阻将每个需要上拉的管脚连接到 VDD,从而附加外部上拉电阻。 + +.. only:: esp32 + + .. _pull-up_conflicts_on_gpio13: + + GPIO13 上拉冲突 + ^^^^^^^^^^^^^^^ + + 如果所用设备的 DAT3 没有正确上拉,可以参考下列操作: + + - 使用 1 位 SD 模式并将设备的 DAT3 连接到 VDD + - 使用 SPI 模式 + - 对 GPIO13 管脚执行以下操作之一: + - 移除下拉电阻 + - 附加小于 5 kΩ 的上拉电阻(建议使用 2 kΩ 的电阻) + - 在 1 位 SD 模式下,通过主机、或是通过 VDD 上的 3.3 V 电压,将管脚拉高或驱动到高电平。 + + + .. _strapping_conflicts_dat2: + + Bootstrap 与 SDIO 在 DAT2 上的冲突 + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + ESP32 的启动 strapping 需求与 SDIO 协议之间存在冲突。详情请参阅 :ref:`mtdi_strapping_pin`。 + + 要解决此冲突,可参考以下选项: + + 1.(推荐)烧录选择 flash 电压的 eFuse。该操作会将内部调节器的输出电压永久配置为 3.3 V,并且 GPIO12 将不再用作 strapping 管脚。烧录完成后,将上拉电阻连接到 GPIO12。 + + .. warning:: + + 烧录 eFuse 是不可逆的!上述问题清单可能已经过时,因此请确保要烧录的模组内嵌 3.3 V flash 芯片,可前往 https://www.espressif.com/ 进行确认。如果在带有 1.8 V flash 芯片的模组上烧录 3.3 V eFuse,模组将停止工作。 + + 如果确定要烧录 eFuse,请转到 ESP-IDF 目录下,通过 ``espefuse.py`` 工具运行以下命令: + + .. code-block:: bash + + components/esptool_py/esptool/espefuse.py set_flash_voltage 3.3V + + 此命令将烧录 ``XPD_SDIO_TIEH``、``XPD_SDIO_FORCE`` 和 ``XPD_SDIO_REG`` eFuse。当以上三个 eFuse 被烧录为 1 时,内部 VDD_SDIO flash 电压调节器将被永久设置为 3.3 V。如果烧录成功,将看到以下日志: + + .. code-block:: bash + + espefuse.py v2.6 + Connecting.... + + Enable internal flash voltage regulator (VDD_SDIO) to 3.3 V. + The following eFuses are burned: XPD_SDIO_FORCE, XPD_SDIO_REG, XPD_SDIO_TIEH. + This is an irreversible operation. + Type 'BURN' (all capitals) to continue. + BURN + VDD_SDIO setting complete. + + 要检查 eFuse 的状态,请运行: + + .. code-block:: none + + idf.py efuse-summary + + 如果运行自动烧录脚本,最好使用独立的 eFuse 工具 ``espefuse.py``。此工具还具有 ``--do-not-confirm`` 选项,可在无需确认的情况下烧录 eFuse。 + + 有关烧录 eFuse 的更多信息,请参阅 **{IDF_TARGET_NAME} 技术参考手册** [`PDF <{IDF_TARGET_TRM_CN_URL}#efuse>`__]。 + + 2. **如果使用 1 位 SD 模式或 SPI 模式**,请断开 DAT2 管脚并确保其被拉高。可以采取下列两个选项之一: + + - 使主机的 DAT2 管脚悬空,并将从机设备的 DAT2 直接连接到 VDD。 + - 对于从机设备,构建具有 ``SDIO_SLAVE_FLAG_DAT2_DISABLED`` 选项的固件并重新烧录设备,此选项可避免从机设备检测 DAT2 线。请注意,CCCR 寄存器将不再支持 4 位 SD 模式,但主机并不知晓这一点,因此必须在主机端禁用 4 位 SD 模式。 + + + .. _no_pull-up_on_gpio12: + + GPIO12 无上拉电阻 + ^^^^^^^^^^^^^^^^^ + + 所用模组与 SDIO 协议兼容,只需通过 10 kΩ 电阻将 GPIO12 连接到 VDD 即可。 + + + .. _gpio2_strapping_pin: + + 下载模式不起效(次要问题) + ^^^^^^^^^^^^^^^^^^^^^^^^^^ + + 当 GPIO2 管脚根据 SD 上拉需求被拉高时,将无法进入下载模式,因为 GPIO2 是一个 strapping 管脚,下载模式下必须被拉低。 + + 可参考以下解决方案: + + - 对于需要用跳线短接 GPIO0 和 GPIO2 管脚的开发板,跳线连接完成后,自动复位电路会在进入下载模式前将 GPIO2 与 GPIO0 一起拉低。 + - 对于 GPIO2 管脚上连有组件(例如下拉电阻和/或 LED)的开发板,请查看开发板的原理图,确认连接到 GPIO2 上组件的具体情况。 + + - **LED** 大多数情况下不会影响操作。 + - **下拉电阻** 可能会干扰 DAT0 信号,必须移除。 + + 如果上述解决方案无效,请检查主机或从机设备是否带有会影响 GPIO2 的上拉电阻,如有,将其移除。 + + +.. only:: esp32 + + .. _related_info_sdio: + + 相关信息 + -------- + + .. _mtdi_strapping_pin: + + MTDI strapping 管脚 + ^^^^^^^^^^^^^^^^^^^ + + MTDI (GPIO12) 为 strapping 管脚,用于选择内部调节器 (VDD_SDIO) 的输出电压,为 flash 芯片供电。该管脚带有内部下拉电阻,因此若处于未连接状态,MTDI 管脚将在启动时读取低电平,选择默认的 3.3 V 操作。 + + 除 ESP32-WROVER-B 外的所有 ESP32-WROVER 模组都使用 1.8 V flash,并在 GPIO12 上有内部上拉电阻。使用 3.3 V flash 的其他模组在 GPIO12 管脚上没有上拉电阻,并在芯片内部 GPIO12 管脚默认使能弱下拉。 + + 为 GPIO12 添加上拉电阻以进行 SD 卡操作时,请考虑以下事项: + + - 在不使用内部调节器 (VDD_SDIO) 为 flash 供电的开发板上,GPIO12 可以被拉高。 + - 在使用 1.8 V flash 芯片的开发板上,复位时 GPIO12 需要被拉高,这与 SD 卡操作完全兼容。 + - 在使用内部调节器和 3.3 V flash 芯片的开发板上,复位时 GPIO12 必须被拉低,这与 SD 卡操作不兼容。有关乐鑫开发板与 SD 卡操作之间的兼容性问题,详情请参阅 :ref:`compatibility_overview_espressif_hw_sdio`。 + + + 内部上拉和 strapping 需求 + ^^^^^^^^^^^^^^^^^^^^^^^^^ + + 使用外部电阻始终是更优选择。乐鑫产品中的内部弱上拉和下拉电阻启用后可以代替外部电阻,但此解决方案并不能保证可靠的 SDIO 通信。 + + 话虽如此,有关内部上拉和 strapping 需求的信息仍有一些参考价值。乐鑫硬件产品不同管脚(CMD 和 DATA 等)的内部弱上拉和弱下拉电阻的默认连接情况不同。下表展示了 CMD 和 DATA 管脚的默认上拉和下拉状态。 + + 表中使用了以下缩写: + + - **WPU**:SoC 内部的弱上拉电阻 + - **WPD**:SoC 内部的弱下拉电阻 + - **PU**:位于乐鑫模组内部、SoC 外部的上拉电阻 + + .. list-table:: CMD 和 DATA 管脚的默认上拉和下拉状态 + :widths: 25 25 25 25 + :header-rows: 1 + + * - GPIO 编号 + - 管脚名 + - 启动状态 + - strapping 需求 + * - **15** + - CMD + - WPU + - + * - **2** + - DAT0 + - WPD + - 下载模式要求低电平 + * - **4** + - DAT1 + - WPD + - + * - **12** + - DAT2 + - 使用 1.8 V flash 时为 PU;3.3 V flash 时为 WPD + - 使用 1.8 V flash 时要求高电平;3.3 V flash 时要求低电平 + * - **13** + - DAT3 + - WPU + - + +.. only:: not esp32 + + .. _related_info_sdio: + + 相关信息 + -------- + + 内部上拉和 strapping 需求 + ^^^^^^^^^^^^^^^^^^^^^^^^^ + + 使用外部电阻始终是更优选择。乐鑫产品中的内部弱上拉和下拉电阻启用后可以代替外部电阻,但此解决方案并不能保证可靠的 SDIO 通信。 + + 通常不建议将 strapping 管脚重复用于 SDIO 功能。SD 和 strapping 管脚的上拉、下拉需求可能会相互冲突。有关 {IDF_TARGET} strapping 管脚的详细信息,请参阅技术规格书。 From 0722aa82092a2de3a1226569441aa8ea9dacd312 Mon Sep 17 00:00:00 2001 From: morris Date: Tue, 24 Sep 2024 18:42:00 +0800 Subject: [PATCH 113/365] feat(etm): support sleep retention --- components/esp_hw_support/esp_etm.c | 70 +++++++++++++++++-- components/esp_hw_support/include/esp_etm.h | 8 ++- components/soc/CMakeLists.txt | 4 ++ components/soc/esp32c5/etm_periph.c | 44 ++++++++++++ .../esp32c5/include/soc/Kconfig.soc_caps.in | 4 ++ .../include/soc/retention_periph_defs.h | 3 + components/soc/esp32c5/include/soc/soc_caps.h | 1 + components/soc/esp32c6/etm_periph.c | 44 ++++++++++++ .../esp32c6/include/soc/Kconfig.soc_caps.in | 4 ++ .../include/soc/retention_periph_defs.h | 3 + components/soc/esp32c6/include/soc/soc_caps.h | 1 + components/soc/esp32c61/etm_periph.c | 44 ++++++++++++ .../include/soc/retention_periph_defs.h | 3 + .../soc/esp32c61/include/soc/soc_caps.h | 1 + components/soc/esp32h2/etm_periph.c | 44 ++++++++++++ .../esp32h2/include/soc/Kconfig.soc_caps.in | 4 ++ .../include/soc/retention_periph_defs.h | 3 + components/soc/esp32h2/include/soc/soc_caps.h | 1 + components/soc/esp32p4/etm_periph.c | 44 ++++++++++++ .../esp32p4/include/soc/Kconfig.soc_caps.in | 4 ++ .../include/soc/retention_periph_defs.h | 9 ++- components/soc/esp32p4/include/soc/soc_caps.h | 1 + components/soc/include/soc/etm_periph.h | 32 +++++++++ components/soc/include/soc/regdma.h | 2 + docs/en/api-reference/peripherals/etm.rst | 12 ++++ .../api-reference/system/power_management.rst | 4 +- docs/zh_CN/api-reference/peripherals/etm.rst | 12 ++++ .../api-reference/system/power_management.rst | 4 +- 28 files changed, 397 insertions(+), 13 deletions(-) create mode 100644 components/soc/esp32c5/etm_periph.c create mode 100644 components/soc/esp32c6/etm_periph.c create mode 100644 components/soc/esp32c61/etm_periph.c create mode 100644 components/soc/esp32h2/etm_periph.c create mode 100644 components/soc/esp32p4/etm_periph.c create mode 100644 components/soc/include/soc/etm_periph.h diff --git a/components/esp_hw_support/esp_etm.c b/components/esp_hw_support/esp_etm.c index 9dfbfc6cb40e..b8ae6349b7c1 100644 --- a/components/esp_hw_support/esp_etm.c +++ b/components/esp_hw_support/esp_etm.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -16,7 +16,7 @@ #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "soc/soc_caps.h" -#include "soc/periph_defs.h" +#include "soc/etm_periph.h" #include "esp_log.h" #include "esp_check.h" #include "esp_heap_caps.h" @@ -25,10 +25,13 @@ #include "hal/etm_ll.h" #include "esp_private/periph_ctrl.h" #include "esp_private/etm_interface.h" +#include "esp_private/sleep_retention.h" #define ETM_MEM_ALLOC_CAPS MALLOC_CAP_DEFAULT -#if CONFIG_IDF_TARGET_ESP32P4 +#define ETM_USE_RETENTION_LINK (SOC_ETM_SUPPORT_SLEEP_RETENTION && CONFIG_PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP) + +#if !SOC_RCC_IS_INDEPENDENT // Reset and Clock Control registers are mixing with other peripherals, so we need to use a critical section #define ETM_RCC_ATOMIC() PERIPH_RCC_ATOMIC() #else @@ -70,6 +73,32 @@ struct esp_etm_channel_t { // ETM driver platform, it's always a singleton static etm_platform_t s_platform; +#if ETM_USE_RETENTION_LINK +static esp_err_t etm_create_sleep_retention_link_cb(void *arg) +{ + etm_group_t *group = (etm_group_t *)arg; + int group_id = group->group_id; + esp_err_t err = sleep_retention_entries_create(etm_reg_retention_info[group_id].regdma_entry_array, + etm_reg_retention_info[group_id].array_size, + REGDMA_LINK_PRI_ETM, etm_reg_retention_info[group_id].module); + return err; +} + +static void etm_create_retention_module(etm_group_t *group) +{ + int group_id = group->group_id; + sleep_retention_module_t module = etm_reg_retention_info[group_id].module; + _lock_acquire(&s_platform.mutex); + if ((sleep_retention_get_inited_modules() & BIT(module)) && !(sleep_retention_get_created_modules() & BIT(module))) { + if (sleep_retention_module_allocate(module) != ESP_OK) { + // even though the sleep retention module create failed, ETM driver should still work, so just warning here + ESP_LOGW(TAG, "create retention link failed %d, power domain won't be turned off during sleep", group_id); + } + } + _lock_release(&s_platform.mutex); +} +#endif // ETM_USE_RETENTION_LINK + static etm_group_t *etm_acquire_group_handle(int group_id) { bool new_group = false; @@ -90,7 +119,22 @@ static etm_group_t *etm_acquire_group_handle(int group_id) etm_ll_enable_bus_clock(group_id, true); etm_ll_reset_register(group_id); } - +#if ETM_USE_RETENTION_LINK + sleep_retention_module_t module = etm_reg_retention_info[group_id].module; + sleep_retention_module_init_param_t init_param = { + .cbs = { + .create = { + .handle = etm_create_sleep_retention_link_cb, + .arg = group, + }, + }, + .depends = BIT(SLEEP_RETENTION_MODULE_CLOCK_SYSTEM) + }; + if (sleep_retention_module_init(module, &init_param) != ESP_OK) { + // even though the sleep retention module init failed, ETM driver may still work, so just warning here + ESP_LOGW(TAG, "init sleep retention failed %d, power domain may be turned off during sleep", group_id); + } +#endif // ETM_USE_RETENTION_LINK // initialize HAL context etm_hal_init(&group->hal); } @@ -129,6 +173,15 @@ static void etm_release_group_handle(etm_group_t *group) _lock_release(&s_platform.mutex); if (do_deinitialize) { +#if ETM_USE_RETENTION_LINK + sleep_retention_module_t module = etm_reg_retention_info[group_id].module; + if (sleep_retention_get_created_modules() & BIT(module)) { + sleep_retention_module_free(module); + } + if (sleep_retention_get_inited_modules() & BIT(module)) { + sleep_retention_module_deinit(module); + } +#endif free(group); ESP_LOGD(TAG, "del group (%d)", group_id); } @@ -192,6 +245,9 @@ esp_err_t esp_etm_new_channel(const esp_etm_channel_config_t *config, esp_etm_ch esp_err_t ret = ESP_OK; esp_etm_channel_t *chan = NULL; ESP_GOTO_ON_FALSE(config && ret_chan, ESP_ERR_INVALID_ARG, err, TAG, "invalid args"); +#if !SOC_ETM_SUPPORT_SLEEP_RETENTION + ESP_RETURN_ON_FALSE(config->flags.allow_pd == 0, ESP_ERR_NOT_SUPPORTED, TAG, "not able to power down in light sleep"); +#endif // SOC_ETM_SUPPORT_SLEEP_RETENTION chan = heap_caps_calloc(1, sizeof(esp_etm_channel_t), ETM_MEM_ALLOC_CAPS); ESP_GOTO_ON_FALSE(chan, ESP_ERR_NO_MEM, err, TAG, "no mem for channel"); @@ -201,6 +257,12 @@ esp_err_t esp_etm_new_channel(const esp_etm_channel_config_t *config, esp_etm_ch int group_id = group->group_id; int chan_id = chan->chan_id; +#if ETM_USE_RETENTION_LINK + if (config->flags.allow_pd != 0) { + etm_create_retention_module(group); + } +#endif // ETM_USE_RETENTION_LINK + chan->fsm = ETM_CHAN_FSM_INIT; ESP_LOGD(TAG, "new etm channel (%d,%d) at %p", group_id, chan_id, chan); *ret_chan = chan; diff --git a/components/esp_hw_support/include/esp_etm.h b/components/esp_hw_support/include/esp_etm.h index c0757abf8aba..daa97d76c32c 100644 --- a/components/esp_hw_support/include/esp_etm.h +++ b/components/esp_hw_support/include/esp_etm.h @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -32,7 +32,11 @@ typedef struct esp_etm_task_t *esp_etm_task_handle_t; * @brief ETM channel configuration */ typedef struct { - + /// Extra configuration flags for ETM channel + struct etm_chan_flags { + uint32_t allow_pd : 1; /*!< If set, driver allows the power domain to be powered off when system enters sleep mode. + This can save power, but at the expense of more RAM being consumed to save register context. */ + } flags; /*!< ETM channel flags */ } esp_etm_channel_config_t; /** diff --git a/components/soc/CMakeLists.txt b/components/soc/CMakeLists.txt index 765cde298b77..59822b467f31 100644 --- a/components/soc/CMakeLists.txt +++ b/components/soc/CMakeLists.txt @@ -47,6 +47,10 @@ if(CONFIG_SOC_EMAC_SUPPORTED) list(APPEND srcs "${target_folder}/emac_periph.c") endif() +if(CONFIG_SOC_ETM_SUPPORTED) + list(APPEND srcs "${target_folder}/etm_periph.c") +endif() + if(CONFIG_SOC_GDMA_SUPPORTED) list(APPEND srcs "${target_folder}/gdma_periph.c") endif() diff --git a/components/soc/esp32c5/etm_periph.c b/components/soc/esp32c5/etm_periph.c new file mode 100644 index 000000000000..7b268c443a55 --- /dev/null +++ b/components/soc/esp32c5/etm_periph.c @@ -0,0 +1,44 @@ +/* + * SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include "soc/etm_periph.h" +#include "soc/soc_etm_reg.h" + +/** + * ETM Registers to be saved during sleep retention + * - Channel configuration registers, e.g.: SOC_ETM_CH0_EVT_ID_REG, SOC_ETM_CH0_TASK_ID_REG +*/ +#define ETM_RETENTION_REGS_CNT ((SOC_ETM_CH49_TASK_ID_REG - SOC_ETM_CH0_EVT_ID_REG) / 4 + 1) + +static const regdma_entries_config_t etm_regdma_entries[] = { + // backup stage: save the status of enabled channels + // restore stage: store the enabled channels + [0] = { + .config = REGDMA_LINK_CONTINUOUS_INIT(REGDMA_ETM_LINK(0x00), + SOC_ETM_CH_ENA_AD0_REG, SOC_ETM_CH_ENA_AD0_SET_REG, 1, 0, 0), + .owner = ENTRY(0) | ENTRY(2), + }, + [1] = { + .config = REGDMA_LINK_CONTINUOUS_INIT(REGDMA_ETM_LINK(0x01), + SOC_ETM_CH_ENA_AD1_REG, SOC_ETM_CH_ENA_AD1_SET_REG, 1, 0, 0), + .owner = ENTRY(0) | ENTRY(2), + }, + // backup stage: save configuration registers + // restore stage: restore the configuration registers + [2] = { + .config = REGDMA_LINK_CONTINUOUS_INIT(REGDMA_ETM_LINK(0x02), + SOC_ETM_CH0_EVT_ID_REG, SOC_ETM_CH0_EVT_ID_REG, ETM_RETENTION_REGS_CNT, 0, 0), + .owner = ENTRY(0) | ENTRY(2), + }, +}; + +const etm_reg_retention_info_t etm_reg_retention_info[SOC_ETM_GROUPS] = { + [0] = { + .module = SLEEP_RETENTION_MODULE_ETM0, + .regdma_entry_array = etm_regdma_entries, + .array_size = ARRAY_SIZE(etm_regdma_entries) + }, +}; diff --git a/components/soc/esp32c5/include/soc/Kconfig.soc_caps.in b/components/soc/esp32c5/include/soc/Kconfig.soc_caps.in index 23a96312324b..3ca17508c5da 100644 --- a/components/soc/esp32c5/include/soc/Kconfig.soc_caps.in +++ b/components/soc/esp32c5/include/soc/Kconfig.soc_caps.in @@ -463,6 +463,10 @@ config SOC_ETM_CHANNELS_PER_GROUP int default 50 +config SOC_ETM_SUPPORT_SLEEP_RETENTION + bool + default y + config SOC_GPIO_PORT int default 1 diff --git a/components/soc/esp32c5/include/soc/retention_periph_defs.h b/components/soc/esp32c5/include/soc/retention_periph_defs.h index 02002a7d0fe5..b21f1d3edeae 100644 --- a/components/soc/esp32c5/include/soc/retention_periph_defs.h +++ b/components/soc/esp32c5/include/soc/retention_periph_defs.h @@ -37,6 +37,7 @@ typedef enum periph_retention_module { SLEEP_RETENTION_MODULE_UART0 = 14, SLEEP_RETENTION_MODULE_UART1 = 15, SLEEP_RETENTION_MODULE_I2S0 = 16, + SLEEP_RETENTION_MODULE_ETM0 = 17, /* modem module, which includes WiFi, BLE and 802.15.4 */ SLEEP_RETENTION_MODULE_WIFI_MAC = 26, @@ -76,6 +77,7 @@ typedef enum periph_retention_module_bitmap { SLEEP_RETENTION_MODULE_BM_UART0 = BIT(SLEEP_RETENTION_MODULE_UART0), SLEEP_RETENTION_MODULE_BM_UART1 = BIT(SLEEP_RETENTION_MODULE_UART1), SLEEP_RETENTION_MODULE_BM_I2S0 = BIT(SLEEP_RETENTION_MODULE_I2S0), + SLEEP_RETENTION_MODULE_BM_ETM0 = BIT(SLEEP_RETENTION_MODULE_ETM0), SLEEP_RETENTION_MODULE_BM_GDMA_CH0 = BIT(SLEEP_RETENTION_MODULE_GDMA_CH0), SLEEP_RETENTION_MODULE_BM_GDMA_CH1 = BIT(SLEEP_RETENTION_MODULE_GDMA_CH1), @@ -97,6 +99,7 @@ typedef enum periph_retention_module_bitmap { | SLEEP_RETENTION_MODULE_BM_UART0 \ | SLEEP_RETENTION_MODULE_BM_UART1 \ | SLEEP_RETENTION_MODULE_BM_I2S0 \ + | SLEEP_RETENTION_MODULE_BM_ETM0 \ ) #ifdef __cplusplus } diff --git a/components/soc/esp32c5/include/soc/soc_caps.h b/components/soc/esp32c5/include/soc/soc_caps.h index c8f1619ce982..b98bce60b930 100644 --- a/components/soc/esp32c5/include/soc/soc_caps.h +++ b/components/soc/esp32c5/include/soc/soc_caps.h @@ -191,6 +191,7 @@ /*-------------------------- ETM CAPS --------------------------------------*/ #define SOC_ETM_GROUPS 1U // Number of ETM groups #define SOC_ETM_CHANNELS_PER_GROUP 50 // Number of ETM channels in the group +#define SOC_ETM_SUPPORT_SLEEP_RETENTION 1 // Support sleep retention /*-------------------------- GPIO CAPS ---------------------------------------*/ // ESP32-C5 has 1 GPIO peripheral diff --git a/components/soc/esp32c6/etm_periph.c b/components/soc/esp32c6/etm_periph.c new file mode 100644 index 000000000000..7b268c443a55 --- /dev/null +++ b/components/soc/esp32c6/etm_periph.c @@ -0,0 +1,44 @@ +/* + * SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include "soc/etm_periph.h" +#include "soc/soc_etm_reg.h" + +/** + * ETM Registers to be saved during sleep retention + * - Channel configuration registers, e.g.: SOC_ETM_CH0_EVT_ID_REG, SOC_ETM_CH0_TASK_ID_REG +*/ +#define ETM_RETENTION_REGS_CNT ((SOC_ETM_CH49_TASK_ID_REG - SOC_ETM_CH0_EVT_ID_REG) / 4 + 1) + +static const regdma_entries_config_t etm_regdma_entries[] = { + // backup stage: save the status of enabled channels + // restore stage: store the enabled channels + [0] = { + .config = REGDMA_LINK_CONTINUOUS_INIT(REGDMA_ETM_LINK(0x00), + SOC_ETM_CH_ENA_AD0_REG, SOC_ETM_CH_ENA_AD0_SET_REG, 1, 0, 0), + .owner = ENTRY(0) | ENTRY(2), + }, + [1] = { + .config = REGDMA_LINK_CONTINUOUS_INIT(REGDMA_ETM_LINK(0x01), + SOC_ETM_CH_ENA_AD1_REG, SOC_ETM_CH_ENA_AD1_SET_REG, 1, 0, 0), + .owner = ENTRY(0) | ENTRY(2), + }, + // backup stage: save configuration registers + // restore stage: restore the configuration registers + [2] = { + .config = REGDMA_LINK_CONTINUOUS_INIT(REGDMA_ETM_LINK(0x02), + SOC_ETM_CH0_EVT_ID_REG, SOC_ETM_CH0_EVT_ID_REG, ETM_RETENTION_REGS_CNT, 0, 0), + .owner = ENTRY(0) | ENTRY(2), + }, +}; + +const etm_reg_retention_info_t etm_reg_retention_info[SOC_ETM_GROUPS] = { + [0] = { + .module = SLEEP_RETENTION_MODULE_ETM0, + .regdma_entry_array = etm_regdma_entries, + .array_size = ARRAY_SIZE(etm_regdma_entries) + }, +}; diff --git a/components/soc/esp32c6/include/soc/Kconfig.soc_caps.in b/components/soc/esp32c6/include/soc/Kconfig.soc_caps.in index b07201194296..396d8ff0e079 100644 --- a/components/soc/esp32c6/include/soc/Kconfig.soc_caps.in +++ b/components/soc/esp32c6/include/soc/Kconfig.soc_caps.in @@ -459,6 +459,10 @@ config SOC_ETM_CHANNELS_PER_GROUP int default 50 +config SOC_ETM_SUPPORT_SLEEP_RETENTION + bool + default y + config SOC_GPIO_PORT int default 1 diff --git a/components/soc/esp32c6/include/soc/retention_periph_defs.h b/components/soc/esp32c6/include/soc/retention_periph_defs.h index 5cdbc108e812..5bba74ce3531 100644 --- a/components/soc/esp32c6/include/soc/retention_periph_defs.h +++ b/components/soc/esp32c6/include/soc/retention_periph_defs.h @@ -37,6 +37,7 @@ typedef enum periph_retention_module { SLEEP_RETENTION_MODULE_UART0 = 14, SLEEP_RETENTION_MODULE_UART1 = 15, SLEEP_RETENTION_MODULE_I2S0 = 16, + SLEEP_RETENTION_MODULE_ETM0 = 17, /* Modem module, which includes WiFi, BLE and 802.15.4 */ SLEEP_RETENTION_MODULE_WIFI_MAC = 26, @@ -70,6 +71,7 @@ typedef enum periph_retention_module_bitmap { SLEEP_RETENTION_MODULE_BM_UART0 = BIT(SLEEP_RETENTION_MODULE_UART0), SLEEP_RETENTION_MODULE_BM_UART1 = BIT(SLEEP_RETENTION_MODULE_UART1), SLEEP_RETENTION_MODULE_BM_I2S0 = BIT(SLEEP_RETENTION_MODULE_I2S0), + SLEEP_RETENTION_MODULE_BM_ETM0 = BIT(SLEEP_RETENTION_MODULE_ETM0), /* modem module, which includes WiFi, BLE and 802.15.4 */ SLEEP_RETENTION_MODULE_BM_WIFI_MAC = BIT(SLEEP_RETENTION_MODULE_WIFI_MAC), SLEEP_RETENTION_MODULE_BM_WIFI_BB = BIT(SLEEP_RETENTION_MODULE_WIFI_BB), @@ -93,6 +95,7 @@ typedef enum periph_retention_module_bitmap { | SLEEP_RETENTION_MODULE_BM_UART0 \ | SLEEP_RETENTION_MODULE_BM_UART1 \ | SLEEP_RETENTION_MODULE_BM_I2S0 \ + | SLEEP_RETENTION_MODULE_BM_ETM0 \ ) #ifdef __cplusplus diff --git a/components/soc/esp32c6/include/soc/soc_caps.h b/components/soc/esp32c6/include/soc/soc_caps.h index e887e6856144..70835692ee81 100644 --- a/components/soc/esp32c6/include/soc/soc_caps.h +++ b/components/soc/esp32c6/include/soc/soc_caps.h @@ -178,6 +178,7 @@ /*-------------------------- ETM CAPS --------------------------------------*/ #define SOC_ETM_GROUPS 1U // Number of ETM groups #define SOC_ETM_CHANNELS_PER_GROUP 50 // Number of ETM channels in the group +#define SOC_ETM_SUPPORT_SLEEP_RETENTION 1 // Support sleep retention /*-------------------------- GPIO CAPS ---------------------------------------*/ // ESP32-C6 has 1 GPIO peripheral diff --git a/components/soc/esp32c61/etm_periph.c b/components/soc/esp32c61/etm_periph.c new file mode 100644 index 000000000000..7b268c443a55 --- /dev/null +++ b/components/soc/esp32c61/etm_periph.c @@ -0,0 +1,44 @@ +/* + * SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include "soc/etm_periph.h" +#include "soc/soc_etm_reg.h" + +/** + * ETM Registers to be saved during sleep retention + * - Channel configuration registers, e.g.: SOC_ETM_CH0_EVT_ID_REG, SOC_ETM_CH0_TASK_ID_REG +*/ +#define ETM_RETENTION_REGS_CNT ((SOC_ETM_CH49_TASK_ID_REG - SOC_ETM_CH0_EVT_ID_REG) / 4 + 1) + +static const regdma_entries_config_t etm_regdma_entries[] = { + // backup stage: save the status of enabled channels + // restore stage: store the enabled channels + [0] = { + .config = REGDMA_LINK_CONTINUOUS_INIT(REGDMA_ETM_LINK(0x00), + SOC_ETM_CH_ENA_AD0_REG, SOC_ETM_CH_ENA_AD0_SET_REG, 1, 0, 0), + .owner = ENTRY(0) | ENTRY(2), + }, + [1] = { + .config = REGDMA_LINK_CONTINUOUS_INIT(REGDMA_ETM_LINK(0x01), + SOC_ETM_CH_ENA_AD1_REG, SOC_ETM_CH_ENA_AD1_SET_REG, 1, 0, 0), + .owner = ENTRY(0) | ENTRY(2), + }, + // backup stage: save configuration registers + // restore stage: restore the configuration registers + [2] = { + .config = REGDMA_LINK_CONTINUOUS_INIT(REGDMA_ETM_LINK(0x02), + SOC_ETM_CH0_EVT_ID_REG, SOC_ETM_CH0_EVT_ID_REG, ETM_RETENTION_REGS_CNT, 0, 0), + .owner = ENTRY(0) | ENTRY(2), + }, +}; + +const etm_reg_retention_info_t etm_reg_retention_info[SOC_ETM_GROUPS] = { + [0] = { + .module = SLEEP_RETENTION_MODULE_ETM0, + .regdma_entry_array = etm_regdma_entries, + .array_size = ARRAY_SIZE(etm_regdma_entries) + }, +}; diff --git a/components/soc/esp32c61/include/soc/retention_periph_defs.h b/components/soc/esp32c61/include/soc/retention_periph_defs.h index 5bc404860b7a..6883ac14522d 100644 --- a/components/soc/esp32c61/include/soc/retention_periph_defs.h +++ b/components/soc/esp32c61/include/soc/retention_periph_defs.h @@ -33,6 +33,7 @@ typedef enum periph_retention_module { SLEEP_RETENTION_MODULE_I2C0 = 12, SLEEP_RETENTION_MODULE_UART0 = 14, SLEEP_RETENTION_MODULE_UART1 = 15, + SLEEP_RETENTION_MODULE_ETM0 = 16, /* Modem module, which includes WiFi, BLE and 802.15.4 */ SLEEP_RETENTION_MODULE_WIFI_MAC = 26, @@ -62,6 +63,7 @@ typedef enum periph_retention_module_bitmap { SLEEP_RETENTION_MODULE_BM_I2C0 = BIT(SLEEP_RETENTION_MODULE_I2C0), SLEEP_RETENTION_MODULE_BM_UART0 = BIT(SLEEP_RETENTION_MODULE_UART0), SLEEP_RETENTION_MODULE_BM_UART1 = BIT(SLEEP_RETENTION_MODULE_UART1), + SLEEP_RETENTION_MODULE_BM_ETM0 = BIT(SLEEP_RETENTION_MODULE_ETM0), /* modem module, which includes WiFi, BLE and 802.15.4 */ SLEEP_RETENTION_MODULE_BM_WIFI_MAC = BIT(SLEEP_RETENTION_MODULE_WIFI_MAC), SLEEP_RETENTION_MODULE_BM_WIFI_BB = BIT(SLEEP_RETENTION_MODULE_WIFI_BB), @@ -81,6 +83,7 @@ typedef enum periph_retention_module_bitmap { | SLEEP_RETENTION_MODULE_BM_I2C0 \ | SLEEP_RETENTION_MODULE_BM_UART0 \ | SLEEP_RETENTION_MODULE_BM_UART1 \ + | SLEEP_RETENTION_MODULE_BM_ETM0 \ ) #ifdef __cplusplus diff --git a/components/soc/esp32c61/include/soc/soc_caps.h b/components/soc/esp32c61/include/soc/soc_caps.h index 34a34bdb91dd..5e70aafba195 100644 --- a/components/soc/esp32c61/include/soc/soc_caps.h +++ b/components/soc/esp32c61/include/soc/soc_caps.h @@ -154,6 +154,7 @@ /*-------------------------- ETM CAPS --------------------------------------*/ #define SOC_ETM_GROUPS 1U // Number of ETM groups #define SOC_ETM_CHANNELS_PER_GROUP 50 // Number of ETM channels in the group +// #define SOC_ETM_SUPPORT_SLEEP_RETENTION 1 // Support sleep retention /*-------------------------- GPIO CAPS ---------------------------------------*/ // ESP32-C61 has 1 GPIO peripheral diff --git a/components/soc/esp32h2/etm_periph.c b/components/soc/esp32h2/etm_periph.c new file mode 100644 index 000000000000..7b268c443a55 --- /dev/null +++ b/components/soc/esp32h2/etm_periph.c @@ -0,0 +1,44 @@ +/* + * SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include "soc/etm_periph.h" +#include "soc/soc_etm_reg.h" + +/** + * ETM Registers to be saved during sleep retention + * - Channel configuration registers, e.g.: SOC_ETM_CH0_EVT_ID_REG, SOC_ETM_CH0_TASK_ID_REG +*/ +#define ETM_RETENTION_REGS_CNT ((SOC_ETM_CH49_TASK_ID_REG - SOC_ETM_CH0_EVT_ID_REG) / 4 + 1) + +static const regdma_entries_config_t etm_regdma_entries[] = { + // backup stage: save the status of enabled channels + // restore stage: store the enabled channels + [0] = { + .config = REGDMA_LINK_CONTINUOUS_INIT(REGDMA_ETM_LINK(0x00), + SOC_ETM_CH_ENA_AD0_REG, SOC_ETM_CH_ENA_AD0_SET_REG, 1, 0, 0), + .owner = ENTRY(0) | ENTRY(2), + }, + [1] = { + .config = REGDMA_LINK_CONTINUOUS_INIT(REGDMA_ETM_LINK(0x01), + SOC_ETM_CH_ENA_AD1_REG, SOC_ETM_CH_ENA_AD1_SET_REG, 1, 0, 0), + .owner = ENTRY(0) | ENTRY(2), + }, + // backup stage: save configuration registers + // restore stage: restore the configuration registers + [2] = { + .config = REGDMA_LINK_CONTINUOUS_INIT(REGDMA_ETM_LINK(0x02), + SOC_ETM_CH0_EVT_ID_REG, SOC_ETM_CH0_EVT_ID_REG, ETM_RETENTION_REGS_CNT, 0, 0), + .owner = ENTRY(0) | ENTRY(2), + }, +}; + +const etm_reg_retention_info_t etm_reg_retention_info[SOC_ETM_GROUPS] = { + [0] = { + .module = SLEEP_RETENTION_MODULE_ETM0, + .regdma_entry_array = etm_regdma_entries, + .array_size = ARRAY_SIZE(etm_regdma_entries) + }, +}; diff --git a/components/soc/esp32h2/include/soc/Kconfig.soc_caps.in b/components/soc/esp32h2/include/soc/Kconfig.soc_caps.in index 0a59f3a8d664..1330fbf23324 100644 --- a/components/soc/esp32h2/include/soc/Kconfig.soc_caps.in +++ b/components/soc/esp32h2/include/soc/Kconfig.soc_caps.in @@ -467,6 +467,10 @@ config SOC_ETM_CHANNELS_PER_GROUP int default 50 +config SOC_ETM_SUPPORT_SLEEP_RETENTION + bool + default y + config SOC_GPIO_PORT int default 1 diff --git a/components/soc/esp32h2/include/soc/retention_periph_defs.h b/components/soc/esp32h2/include/soc/retention_periph_defs.h index 819af3a2b354..372e43e981c9 100644 --- a/components/soc/esp32h2/include/soc/retention_periph_defs.h +++ b/components/soc/esp32h2/include/soc/retention_periph_defs.h @@ -38,6 +38,7 @@ typedef enum periph_retention_module { SLEEP_RETENTION_MODULE_UART0 = 15, SLEEP_RETENTION_MODULE_UART1 = 16, SLEEP_RETENTION_MODULE_I2S0 = 17, + SLEEP_RETENTION_MODULE_ETM0 = 18, /* Modem module, which includes BLE and 802.15.4 */ SLEEP_RETENTION_MODULE_BLE_MAC = 28, @@ -70,6 +71,7 @@ typedef enum periph_retention_module_bitmap { SLEEP_RETENTION_MODULE_BM_UART0 = BIT(SLEEP_RETENTION_MODULE_UART0), SLEEP_RETENTION_MODULE_BM_UART1 = BIT(SLEEP_RETENTION_MODULE_UART1), SLEEP_RETENTION_MODULE_BM_I2S0 = BIT(SLEEP_RETENTION_MODULE_I2S0), + SLEEP_RETENTION_MODULE_BM_ETM0 = BIT(SLEEP_RETENTION_MODULE_ETM0), /* modem module, which includes BLE and 802.15.4 */ SLEEP_RETENTION_MODULE_BM_BLE_MAC = BIT(SLEEP_RETENTION_MODULE_BLE_MAC), SLEEP_RETENTION_MODULE_BM_BT_BB = BIT(SLEEP_RETENTION_MODULE_BT_BB), @@ -92,6 +94,7 @@ typedef enum periph_retention_module_bitmap { | SLEEP_RETENTION_MODULE_BM_UART0 \ | SLEEP_RETENTION_MODULE_BM_UART1 \ | SLEEP_RETENTION_MODULE_BM_I2S0 \ + | SLEEP_RETENTION_MODULE_BM_ETM0 \ ) #ifdef __cplusplus diff --git a/components/soc/esp32h2/include/soc/soc_caps.h b/components/soc/esp32h2/include/soc/soc_caps.h index 2f28d6c6a62e..26110b48eba6 100644 --- a/components/soc/esp32h2/include/soc/soc_caps.h +++ b/components/soc/esp32h2/include/soc/soc_caps.h @@ -181,6 +181,7 @@ /*-------------------------- ETM CAPS --------------------------------------*/ #define SOC_ETM_GROUPS 1U // Number of ETM groups #define SOC_ETM_CHANNELS_PER_GROUP 50 // Number of ETM channels in the group +#define SOC_ETM_SUPPORT_SLEEP_RETENTION 1 // Support sleep retention /*-------------------------- GPIO CAPS ---------------------------------------*/ // ESP32-H2 has 1 GPIO peripheral diff --git a/components/soc/esp32p4/etm_periph.c b/components/soc/esp32p4/etm_periph.c new file mode 100644 index 000000000000..f7b28b02bf7d --- /dev/null +++ b/components/soc/esp32p4/etm_periph.c @@ -0,0 +1,44 @@ +/* + * SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include "soc/etm_periph.h" +#include "soc/soc_etm_reg.h" + +/** + * ETM Registers to be saved during sleep retention + * - Channel configuration registers, e.g.: SOC_ETM_CH0_EVT_ID_REG, SOC_ETM_CH0_TASK_ID_REG +*/ +#define ETM_RETENTION_REGS_CNT ((SOC_ETM_CH49_TASK_ID_REG - SOC_ETM_CH0_EVT_ID_REG) / 4 + 1) + +static const regdma_entries_config_t etm_regdma_entries[] = { + // backup stage: save the status of enabled channels + // restore stage: store the enabled channels + [0] = { + .config = REGDMA_LINK_CONTINUOUS_INIT(REGDMA_ETM_LINK(0x00), + SOC_ETM_CH_ENA_AD0_REG, SOC_ETM_CH_ENA_AD0_SET_REG, 1, 0, 0), + .owner = ENTRY(0), + }, + [1] = { + .config = REGDMA_LINK_CONTINUOUS_INIT(REGDMA_ETM_LINK(0x01), + SOC_ETM_CH_ENA_AD1_REG, SOC_ETM_CH_ENA_AD1_SET_REG, 1, 0, 0), + .owner = ENTRY(0), + }, + // backup stage: save configuration registers + // restore stage: restore the configuration registers + [2] = { + .config = REGDMA_LINK_CONTINUOUS_INIT(REGDMA_ETM_LINK(0x02), + SOC_ETM_CH0_EVT_ID_REG, SOC_ETM_CH0_EVT_ID_REG, ETM_RETENTION_REGS_CNT, 0, 0), + .owner = ENTRY(0), + }, +}; + +const etm_reg_retention_info_t etm_reg_retention_info[SOC_ETM_GROUPS] = { + [0] = { + .module = SLEEP_RETENTION_MODULE_ETM0, + .regdma_entry_array = etm_regdma_entries, + .array_size = ARRAY_SIZE(etm_regdma_entries) + }, +}; diff --git a/components/soc/esp32p4/include/soc/Kconfig.soc_caps.in b/components/soc/esp32p4/include/soc/Kconfig.soc_caps.in index cefa4d0350fd..f8319e722ee2 100644 --- a/components/soc/esp32p4/include/soc/Kconfig.soc_caps.in +++ b/components/soc/esp32p4/include/soc/Kconfig.soc_caps.in @@ -595,6 +595,10 @@ config SOC_ETM_CHANNELS_PER_GROUP int default 50 +config SOC_ETM_SUPPORT_SLEEP_RETENTION + bool + default y + config SOC_GPIO_PORT int default 1 diff --git a/components/soc/esp32p4/include/soc/retention_periph_defs.h b/components/soc/esp32p4/include/soc/retention_periph_defs.h index 48cf71404c6e..ab603ed24a85 100644 --- a/components/soc/esp32p4/include/soc/retention_periph_defs.h +++ b/components/soc/esp32p4/include/soc/retention_periph_defs.h @@ -46,6 +46,7 @@ typedef enum periph_retention_module { SLEEP_RETENTION_MODULE_I2S2 = 21, SLEEP_RETENTION_MODULE_I2C0 = 22, SLEEP_RETENTION_MODULE_I2C1 = 23, + SLEEP_RETENTION_MODULE_ETM0 = 24, SLEEP_RETENTION_MODULE_MAX = 31 } periph_retention_module_t; @@ -79,6 +80,7 @@ typedef enum periph_retention_module_bitmap { SLEEP_RETENTION_MODULE_BM_I2S0 = BIT(SLEEP_RETENTION_MODULE_I2S0), SLEEP_RETENTION_MODULE_BM_I2S1 = BIT(SLEEP_RETENTION_MODULE_I2S1), SLEEP_RETENTION_MODULE_BM_I2S2 = BIT(SLEEP_RETENTION_MODULE_I2S2), + SLEEP_RETENTION_MODULE_BM_ETM0 = BIT(SLEEP_RETENTION_MODULE_ETM0), SLEEP_RETENTION_MODULE_BM_ALL = (uint32_t)-1 } periph_retention_module_bitmap_t; @@ -100,9 +102,10 @@ typedef enum periph_retention_module_bitmap { | SLEEP_RETENTION_MODULE_BM_UART3 \ | SLEEP_RETENTION_MODULE_BM_UART4 \ | SLEEP_RETENTION_MODULE_BM_RMT0 \ - | SLEEP_RETENTION_MODULE_BM_I2S0 \ - | SLEEP_RETENTION_MODULE_BM_I2S1 \ - | SLEEP_RETENTION_MODULE_BM_I2S2 \ + | SLEEP_RETENTION_MODULE_BM_I2S0 \ + | SLEEP_RETENTION_MODULE_BM_I2S1 \ + | SLEEP_RETENTION_MODULE_BM_I2S2 \ + | SLEEP_RETENTION_MODULE_BM_ETM0 \ ) #ifdef __cplusplus diff --git a/components/soc/esp32p4/include/soc/soc_caps.h b/components/soc/esp32p4/include/soc/soc_caps.h index ba380964b4fd..a8a90bda8676 100644 --- a/components/soc/esp32p4/include/soc/soc_caps.h +++ b/components/soc/esp32p4/include/soc/soc_caps.h @@ -221,6 +221,7 @@ /*-------------------------- ETM CAPS --------------------------------------*/ #define SOC_ETM_GROUPS 1U // Number of ETM groups #define SOC_ETM_CHANNELS_PER_GROUP 50 // Number of ETM channels in the group +#define SOC_ETM_SUPPORT_SLEEP_RETENTION 1 // Support sleep retention /*-------------------------- GPIO CAPS ---------------------------------------*/ // ESP32-P4 has 1 GPIO peripheral diff --git a/components/soc/include/soc/etm_periph.h b/components/soc/include/soc/etm_periph.h new file mode 100644 index 000000000000..f7168ff71731 --- /dev/null +++ b/components/soc/include/soc/etm_periph.h @@ -0,0 +1,32 @@ +/* + * SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#pragma once + +#include "soc/soc_caps.h" +#include "soc/regdma.h" + +#if SOC_ETM_SUPPORT_SLEEP_RETENTION +#include "soc/retention_periph_defs.h" +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#if SOC_ETM_SUPPORT_SLEEP_RETENTION +typedef struct { + periph_retention_module_t module; + const regdma_entries_config_t *regdma_entry_array; + uint32_t array_size; +} etm_reg_retention_info_t; + +extern const etm_reg_retention_info_t etm_reg_retention_info[SOC_ETM_GROUPS]; +#endif // SOC_ETM_SUPPORT_SLEEP_RETENTION + +#ifdef __cplusplus +} +#endif diff --git a/components/soc/include/soc/regdma.h b/components/soc/include/soc/regdma.h index c3c62081f002..15186cbb95a8 100644 --- a/components/soc/include/soc/regdma.h +++ b/components/soc/include/soc/regdma.h @@ -54,6 +54,7 @@ extern "C" { #define REGDMA_TG0_TIMER_LINK(_pri) ((0x1C << 8) | _pri) #define REGDMA_TG1_TIMER_LINK(_pri) ((0x1D << 8) | _pri) #define REGDMA_I2S_LINK(_pri) ((0x1E << 8) | _pri) +#define REGDMA_ETM_LINK(_pri) ((0x1F << 8) | _pri) #define REGDMA_MODEM_FE_LINK(_pri) ((0xFF << 8) | _pri) #define REGDMA_LINK_PRI_SYS_CLK REGDMA_LINK_PRI_0 @@ -68,6 +69,7 @@ extern "C" { #define REGDMA_LINK_PRI_IEEE802154 REGDMA_LINK_PRI_GENERAL_PERIPH #define REGDMA_LINK_PRI_GDMA REGDMA_LINK_PRI_GENERAL_PERIPH #define REGDMA_LINK_PRI_RMT REGDMA_LINK_PRI_GENERAL_PERIPH +#define REGDMA_LINK_PRI_ETM REGDMA_LINK_PRI_GENERAL_PERIPH #define REGDMA_LINK_PRI_GPTIMER REGDMA_LINK_PRI_GENERAL_PERIPH #define REGDMA_LINK_PRI_I2C REGDMA_LINK_PRI_GENERAL_PERIPH #define REGDMA_LINK_PRI_I2S REGDMA_LINK_PRI_GENERAL_PERIPH diff --git a/docs/en/api-reference/peripherals/etm.rst b/docs/en/api-reference/peripherals/etm.rst index b5a6a963dddd..a462082e83c7 100644 --- a/docs/en/api-reference/peripherals/etm.rst +++ b/docs/en/api-reference/peripherals/etm.rst @@ -32,6 +32,7 @@ The following sections of this document cover the typical steps to configure and - :ref:`etm-event` - describes how to allocate a new ETM event handle or fetch an existing handle from various peripherals. - :ref:`etm-task` - describes how to allocate a new ETM task handle or fetch an existing handle from various peripherals. - :ref:`etm-channel-control` - describes common ETM channel control functions. +- :ref:`etm-power-management` - describes the options and strategies provided by the driver in order to save power. - :ref:`etm-thread-safety` - lists which APIs are guaranteed to be thread-safe by the driver. - :ref:`etm-kconfig-options` - lists the supported Kconfig options that can be used to make a different effect on driver behavior. @@ -131,6 +132,17 @@ To check if the ETM channels are set with proper events and tasks, you can call The digital ID printed in the dump information is defined in the ``soc/soc_etm_source.h`` file. +.. _etm-power-management: + +Power Management +^^^^^^^^^^^^^^^^ + +When power management is enabled, i.e., :ref:`CONFIG_PM_ENABLE` is on, the system may adjust or disable the clock source, and power off the ETM peripheral before going to sleep. As a result, the existing connection between events and tasks will be lost, and the ETM channels can't work correctly after wake up. So by default, the driver will acquire a power management lock internally to forbid the system from powering off the ETM peripheral. + +.. only:: SOC_ETM_SUPPORT_SLEEP_RETENTION + + If you want to save more power, you can set :cpp:member:`esp_etm_channel_config_t::etm_chan_flags::allow_pd` to ``true``. Then ETM registers will be backed up before sleep and restored after wake up. Please note, enabling this option will increase the memory consumption for saving the register context. + .. _etm-thread-safety: Thread Safety diff --git a/docs/en/api-reference/system/power_management.rst b/docs/en/api-reference/system/power_management.rst index 8a7b9c37ba80..f583b86718c8 100644 --- a/docs/en/api-reference/system/power_management.rst +++ b/docs/en/api-reference/system/power_management.rst @@ -148,10 +148,11 @@ The following peripheral drivers are not aware of DFS yet. Applications need to - INT_MTX - TEE/APM - IO_MUX / GPIO - - Timer Group 0 & Timer Group 1 - SPI0/1 - SYSTIMER + :SOC_TIMER_SUPPORT_SLEEP_RETENTION: - GPTimer :SOC_RMT_SUPPORT_SLEEP_RETENTION: - RMT + :SOC_ETM_SUPPORT_SLEEP_RETENTION: - ETM :SOC_I2C_SUPPORT_SLEEP_RETENTION: - I2C :SOC_I2S_SUPPORT_SLEEP_RETENTION: - I2S :SOC_UART_SUPPORT_SLEEP_RETENTION: - All UARTs @@ -160,7 +161,6 @@ The following peripheral drivers are not aware of DFS yet. Applications need to .. list:: - - ETM - ASSIST_DEBUG - Trace - Crypto: AES/ECC/HMAC/RSA/SHA/DS/XTA_AES/ECDSA diff --git a/docs/zh_CN/api-reference/peripherals/etm.rst b/docs/zh_CN/api-reference/peripherals/etm.rst index 9c1967dcadd3..448b1be6c69a 100644 --- a/docs/zh_CN/api-reference/peripherals/etm.rst +++ b/docs/zh_CN/api-reference/peripherals/etm.rst @@ -32,6 +32,7 @@ ETM 模块具有多个通道,这些通道支持用户根据需要进行配置 - :ref:`etm-event` - 介绍如何分配新的 ETM 事件句柄,以及如何从不同外设获取现有句柄。 - :ref:`etm-task` - 介绍如何分配新的 ETM 任务句柄,以及如何从不同外设获取现有句柄。 - :ref:`etm-channel-control` - 介绍常见的 ETM 通道控制函数。 +- :ref:`etm-power-management` - 介绍了驱动针对功耗管理提供的选项和策略。 - :ref:`etm-thread-safety` - 列出了驱动程序中始终线程安全的 API。 - :ref:`etm-kconfig-options` - 列出了 ETM 支持的 Kconfig 选项,这些选项对驱动程序的行为会产生不同影响。 @@ -131,6 +132,17 @@ ETM 通道分析 以上输出信息打印的数字 ID 在 ``soc/soc_etm_source.h`` 文件中定义。 +.. _etm-power-management: + +电源管理 +^^^^^^^^ + +当启用电源管理时,即 :ref:`CONFIG_PM_ENABLE` 打开的时候,系统可能会调整或禁用时钟源,并在进入睡眠前关闭 ETM 外设依赖的电源。这会导致事件和任务之间的连接信息被丢失,ETM 通道在唤醒后无法正常工作。因此,默认情况下,驱动程序会获取电源管理锁,以禁止系统关闭 ETM 外设。 + +.. only:: SOC_ETM_SUPPORT_SLEEP_RETENTION + + 如果你想节省更多电量,可以将 :cpp:member:`esp_etm_channel_config_t::etm_chan_flags::allow_pd` 设置为 ``true``。ETM 寄存器将在睡眠前备份,并在唤醒后恢复。请注意,启用此选项会增加内存消耗,用于保存寄存器上下文。 + .. _etm-thread-safety: 线程安全 diff --git a/docs/zh_CN/api-reference/system/power_management.rst b/docs/zh_CN/api-reference/system/power_management.rst index 6d1e464abc05..3ea51dc30bb6 100644 --- a/docs/zh_CN/api-reference/system/power_management.rst +++ b/docs/zh_CN/api-reference/system/power_management.rst @@ -148,19 +148,19 @@ ESP-IDF 中集成的电源管理算法可以根据应用程序组件的需求, - INT_MTX - TEE/APM - IO_MUX / GPIO - - Timer Group 0 & Timer Group 1 - SPI0/1 - SYSTIMER + :SOC_TIMER_SUPPORT_SLEEP_RETENTION: - GPTimer :SOC_RMT_SUPPORT_SLEEP_RETENTION: - RMT :SOC_I2C_SUPPORT_SLEEP_RETENTION: - I2C :SOC_I2S_SUPPORT_SLEEP_RETENTION: - I2S + :SOC_ETM_SUPPORT_SLEEP_RETENTION: - ETM :SOC_UART_SUPPORT_SLEEP_RETENTION: - All UARTs 以下外设尚未支持: .. list:: - - ETM - ASSIST_DEBUG - Trace - Crypto: AES/ECC/HMAC/RSA/SHA/DS/XTA_AES/ECDSA From 05cb70cc3a0ad4fe666a7c360f9366c5c8f815d9 Mon Sep 17 00:00:00 2001 From: morris Date: Thu, 10 Oct 2024 11:43:20 +0800 Subject: [PATCH 114/365] refactor(rmt): define retention module in the soc layer --- components/esp_driver_rmt/src/rmt_common.c | 30 +++++++++------------ components/esp_driver_rmt/src/rmt_private.h | 4 --- components/hal/esp32c5/include/hal/rmt_ll.h | 2 -- components/hal/esp32c6/include/hal/rmt_ll.h | 2 -- components/hal/esp32h2/include/hal/rmt_ll.h | 2 -- components/hal/esp32p4/include/hal/rmt_ll.h | 2 -- components/soc/esp32c5/rmt_periph.c | 1 + components/soc/esp32c6/rmt_periph.c | 1 + components/soc/esp32h2/rmt_periph.c | 1 + components/soc/esp32p4/rmt_periph.c | 1 + components/soc/include/soc/rmt_periph.h | 5 ++++ 11 files changed, 22 insertions(+), 29 deletions(-) diff --git a/components/esp_driver_rmt/src/rmt_common.c b/components/esp_driver_rmt/src/rmt_common.c index d2b6f856f6ff..7a3cf11ca3d9 100644 --- a/components/esp_driver_rmt/src/rmt_common.c +++ b/components/esp_driver_rmt/src/rmt_common.c @@ -75,7 +75,7 @@ rmt_group_t *rmt_acquire_group_handle(int group_id) rmt_ll_reset_register(group_id); } #if RMT_USE_RETENTION_LINK - sleep_retention_module_t module = RMT_LL_SLEEP_RETENTION_MODULE_ID(group_id); + sleep_retention_module_t module = rmt_reg_retention_info[group_id].module; sleep_retention_module_init_param_t init_param = { .cbs = { .create = { @@ -85,9 +85,7 @@ rmt_group_t *rmt_acquire_group_handle(int group_id) }, .depends = BIT(SLEEP_RETENTION_MODULE_CLOCK_SYSTEM) }; - if (sleep_retention_module_init(module, &init_param) == ESP_OK) { - group->sleep_retention_module = module; - } else { + if (sleep_retention_module_init(module, &init_param) != ESP_OK) { // even though the sleep retention module init failed, RMT driver should still work, so just warning here ESP_LOGW(TAG, "init sleep retention failed %d, power domain may be turned off during sleep", group_id); } @@ -147,11 +145,12 @@ void rmt_release_group_handle(rmt_group_t *group) if (do_deinitialize) { #if RMT_USE_RETENTION_LINK - if (group->sleep_retention_module) { - if (group->retention_link_created) { - sleep_retention_module_free(group->sleep_retention_module); - } - sleep_retention_module_deinit(group->sleep_retention_module); + sleep_retention_module_t module = rmt_reg_retention_info[group_id].module; + if (sleep_retention_get_created_modules() & BIT(module)) { + sleep_retention_module_free(module); + } + if (sleep_retention_get_inited_modules() & BIT(module)) { + sleep_retention_module_deinit(module); } #endif free(group); @@ -303,24 +302,21 @@ static esp_err_t rmt_create_sleep_retention_link_cb(void *arg) { rmt_group_t *group = (rmt_group_t *)arg; int group_id = group->group_id; - sleep_retention_module_t module = group->sleep_retention_module; esp_err_t err = sleep_retention_entries_create(rmt_reg_retention_info[group_id].regdma_entry_array, rmt_reg_retention_info[group_id].array_size, - REGDMA_LINK_PRI_RMT, module); + REGDMA_LINK_PRI_RMT, rmt_reg_retention_info[group_id].module); return err; } void rmt_create_retention_module(rmt_group_t *group) { - sleep_retention_module_t module = group->sleep_retention_module; - + int group_id = group->group_id; + sleep_retention_module_t module = rmt_reg_retention_info[group_id].module; _lock_acquire(&s_platform.mutex); - if (group->retention_link_created == false) { + if ((sleep_retention_get_inited_modules() & BIT(module)) && !(sleep_retention_get_created_modules() & BIT(module))) { if (sleep_retention_module_allocate(module) != ESP_OK) { // even though the sleep retention module create failed, RMT driver should still work, so just warning here - ESP_LOGW(TAG, "create retention link failed, power domain can't be turned off"); - } else { - group->retention_link_created = true; + ESP_LOGW(TAG, "create retention link failed, power domain won't be turned off during sleep"); } } _lock_release(&s_platform.mutex); diff --git a/components/esp_driver_rmt/src/rmt_private.h b/components/esp_driver_rmt/src/rmt_private.h index 017ed9d9ab6d..16efc8ca9eba 100644 --- a/components/esp_driver_rmt/src/rmt_private.h +++ b/components/esp_driver_rmt/src/rmt_private.h @@ -119,10 +119,6 @@ struct rmt_group_t { rmt_rx_channel_t *rx_channels[SOC_RMT_RX_CANDIDATES_PER_GROUP]; // array of RMT RX channels rmt_sync_manager_t *sync_manager; // sync manager, this can be extended into an array if there're more sync controllers in one RMT group int intr_priority; // RMT interrupt priority -#if RMT_USE_RETENTION_LINK - sleep_retention_module_t sleep_retention_module; // sleep retention module - bool retention_link_created; // mark if the retention link is created -#endif }; struct rmt_channel_t { diff --git a/components/hal/esp32c5/include/hal/rmt_ll.h b/components/hal/esp32c5/include/hal/rmt_ll.h index 053e27d0e9b4..0e54a0b37867 100644 --- a/components/hal/esp32c5/include/hal/rmt_ll.h +++ b/components/hal/esp32c5/include/hal/rmt_ll.h @@ -38,8 +38,6 @@ extern "C" { #define RMT_LL_MAX_FILTER_VALUE 255 #define RMT_LL_MAX_IDLE_VALUE 32767 -#define RMT_LL_SLEEP_RETENTION_MODULE_ID(group_id) (SLEEP_RETENTION_MODULE_RMT0) - typedef enum { RMT_LL_MEM_OWNER_SW = 0, RMT_LL_MEM_OWNER_HW = 1, diff --git a/components/hal/esp32c6/include/hal/rmt_ll.h b/components/hal/esp32c6/include/hal/rmt_ll.h index 247d63e5fe80..9fdc75764e0b 100644 --- a/components/hal/esp32c6/include/hal/rmt_ll.h +++ b/components/hal/esp32c6/include/hal/rmt_ll.h @@ -38,8 +38,6 @@ extern "C" { #define RMT_LL_MAX_FILTER_VALUE 255 #define RMT_LL_MAX_IDLE_VALUE 32767 -#define RMT_LL_SLEEP_RETENTION_MODULE_ID(group_id) (SLEEP_RETENTION_MODULE_RMT0) - typedef enum { RMT_LL_MEM_OWNER_SW = 0, RMT_LL_MEM_OWNER_HW = 1, diff --git a/components/hal/esp32h2/include/hal/rmt_ll.h b/components/hal/esp32h2/include/hal/rmt_ll.h index a3179addba59..4ebb3a1e0628 100644 --- a/components/hal/esp32h2/include/hal/rmt_ll.h +++ b/components/hal/esp32h2/include/hal/rmt_ll.h @@ -38,8 +38,6 @@ extern "C" { #define RMT_LL_MAX_FILTER_VALUE 255 #define RMT_LL_MAX_IDLE_VALUE 32767 -#define RMT_LL_SLEEP_RETENTION_MODULE_ID(group_id) (SLEEP_RETENTION_MODULE_RMT0) - typedef enum { RMT_LL_MEM_OWNER_SW = 0, RMT_LL_MEM_OWNER_HW = 1, diff --git a/components/hal/esp32p4/include/hal/rmt_ll.h b/components/hal/esp32p4/include/hal/rmt_ll.h index affcc3eeacd9..105aa426925e 100644 --- a/components/hal/esp32p4/include/hal/rmt_ll.h +++ b/components/hal/esp32p4/include/hal/rmt_ll.h @@ -33,8 +33,6 @@ extern "C" { #define RMT_LL_EVENT_TX_MASK(channel) (RMT_LL_EVENT_TX_DONE(channel) | RMT_LL_EVENT_TX_THRES(channel) | RMT_LL_EVENT_TX_LOOP_END(channel)) #define RMT_LL_EVENT_RX_MASK(channel) (RMT_LL_EVENT_RX_DONE(channel) | RMT_LL_EVENT_RX_THRES(channel)) -#define RMT_LL_SLEEP_RETENTION_MODULE_ID(group_id) (SLEEP_RETENTION_MODULE_RMT0) - #define RMT_LL_MAX_LOOP_COUNT_PER_BATCH 1023 #define RMT_LL_MAX_FILTER_VALUE 255 #define RMT_LL_MAX_IDLE_VALUE 32767 diff --git a/components/soc/esp32c5/rmt_periph.c b/components/soc/esp32c5/rmt_periph.c index 87c00ebd260c..aa92c87aea32 100644 --- a/components/soc/esp32c5/rmt_periph.c +++ b/components/soc/esp32c5/rmt_periph.c @@ -60,6 +60,7 @@ static const regdma_entries_config_t rmt_regdma_entries[] = { const rmt_reg_retention_info_t rmt_reg_retention_info[SOC_RMT_GROUPS] = { [0] = { + .module = SLEEP_RETENTION_MODULE_RMT0, .regdma_entry_array = rmt_regdma_entries, .array_size = ARRAY_SIZE(rmt_regdma_entries) }, diff --git a/components/soc/esp32c6/rmt_periph.c b/components/soc/esp32c6/rmt_periph.c index 7ca8a5ddcbd6..c08da463f299 100644 --- a/components/soc/esp32c6/rmt_periph.c +++ b/components/soc/esp32c6/rmt_periph.c @@ -60,6 +60,7 @@ static const regdma_entries_config_t rmt_regdma_entries[] = { const rmt_reg_retention_info_t rmt_reg_retention_info[SOC_RMT_GROUPS] = { [0] = { + .module = SLEEP_RETENTION_MODULE_RMT0, .regdma_entry_array = rmt_regdma_entries, .array_size = ARRAY_SIZE(rmt_regdma_entries) }, diff --git a/components/soc/esp32h2/rmt_periph.c b/components/soc/esp32h2/rmt_periph.c index 7ca8a5ddcbd6..c08da463f299 100644 --- a/components/soc/esp32h2/rmt_periph.c +++ b/components/soc/esp32h2/rmt_periph.c @@ -60,6 +60,7 @@ static const regdma_entries_config_t rmt_regdma_entries[] = { const rmt_reg_retention_info_t rmt_reg_retention_info[SOC_RMT_GROUPS] = { [0] = { + .module = SLEEP_RETENTION_MODULE_RMT0, .regdma_entry_array = rmt_regdma_entries, .array_size = ARRAY_SIZE(rmt_regdma_entries) }, diff --git a/components/soc/esp32p4/rmt_periph.c b/components/soc/esp32p4/rmt_periph.c index ec8625bc9450..e838ccb182a1 100644 --- a/components/soc/esp32p4/rmt_periph.c +++ b/components/soc/esp32p4/rmt_periph.c @@ -76,6 +76,7 @@ static const regdma_entries_config_t rmt_regdma_entries[] = { const rmt_reg_retention_info_t rmt_reg_retention_info[SOC_RMT_GROUPS] = { [0] = { + .module = SLEEP_RETENTION_MODULE_RMT0, .regdma_entry_array = rmt_regdma_entries, .array_size = ARRAY_SIZE(rmt_regdma_entries) }, diff --git a/components/soc/include/soc/rmt_periph.h b/components/soc/include/soc/rmt_periph.h index a85b5930a220..bb35a67b8635 100644 --- a/components/soc/include/soc/rmt_periph.h +++ b/components/soc/include/soc/rmt_periph.h @@ -10,6 +10,10 @@ #include "soc/periph_defs.h" #include "soc/regdma.h" +#if SOC_RMT_SUPPORT_SLEEP_RETENTION +#include "soc/retention_periph_defs.h" +#endif + #ifdef __cplusplus extern "C" { #endif @@ -32,6 +36,7 @@ extern const rmt_signal_conn_t rmt_periph_signals; #if SOC_RMT_SUPPORT_SLEEP_RETENTION typedef struct { + periph_retention_module_t module; const regdma_entries_config_t *regdma_entry_array; uint32_t array_size; } rmt_reg_retention_info_t; From a4f783d4071e8dab4e5013b6728f1b9a12bec1a3 Mon Sep 17 00:00:00 2001 From: morris Date: Thu, 10 Oct 2024 11:33:36 +0800 Subject: [PATCH 115/365] test(gptimer): added etm sleep retention test --- .../esp_driver_gptimer/src/gptimer_common.c | 30 ++-- .../esp_driver_gptimer/src/gptimer_priv.h | 4 - .../gptimer/main/test_gptimer_sleep.c | 134 ++++++++++++++++++ 3 files changed, 147 insertions(+), 21 deletions(-) diff --git a/components/esp_driver_gptimer/src/gptimer_common.c b/components/esp_driver_gptimer/src/gptimer_common.c index 928ce3c84ad2..8338ebb2f491 100644 --- a/components/esp_driver_gptimer/src/gptimer_common.c +++ b/components/esp_driver_gptimer/src/gptimer_common.c @@ -27,24 +27,21 @@ static esp_err_t gptimer_create_sleep_retention_link_cb(void *arg) { gptimer_group_t *group = (gptimer_group_t *)arg; int group_id = group->group_id; - sleep_retention_module_t module = group->sleep_retention_module; esp_err_t err = sleep_retention_entries_create(tg_timer_reg_retention_info[group_id].regdma_entry_array, tg_timer_reg_retention_info[group_id].array_size, - REGDMA_LINK_PRI_GPTIMER, module); - ESP_RETURN_ON_ERROR(err, TAG, "create retention link failed"); - return ESP_OK; + REGDMA_LINK_PRI_GPTIMER, tg_timer_reg_retention_info[group_id].module); + return err; } void gptimer_create_retention_module(gptimer_group_t *group) { - sleep_retention_module_t module = group->sleep_retention_module; + int group_id = group->group_id; + sleep_retention_module_t module = tg_timer_reg_retention_info[group_id].module; _lock_acquire(&s_platform.mutex); - if (group->retention_link_created == false) { + if ((sleep_retention_get_inited_modules() & BIT(module)) && !(sleep_retention_get_created_modules() & BIT(module))) { if (sleep_retention_module_allocate(module) != ESP_OK) { // even though the sleep retention module create failed, GPTimer driver should still work, so just warning here - ESP_LOGW(TAG, "create retention module for group %d retention, power domain can't turn off", group->group_id); - } else { - group->retention_link_created = true; + ESP_LOGW(TAG, "create retention link failed %d, power domain won't be turned off during sleep", group_id); } } _lock_release(&s_platform.mutex); @@ -97,9 +94,7 @@ gptimer_group_t *gptimer_acquire_group_handle(int group_id) }, .depends = BIT(SLEEP_RETENTION_MODULE_CLOCK_SYSTEM) }; - if (sleep_retention_module_init(module, &init_param) == ESP_OK) { - group->sleep_retention_module = module; - } else { + if (sleep_retention_module_init(module, &init_param) != ESP_OK) { // even though the sleep retention module init failed, RMT driver should still work, so just warning here ESP_LOGW(TAG, "init sleep retention failed %d, power domain may be turned off during sleep", group_id); } @@ -132,11 +127,12 @@ void gptimer_release_group_handle(gptimer_group_t *group) } } #if GPTIMER_USE_RETENTION_LINK - if (group->sleep_retention_module) { - if (group->retention_link_created) { - sleep_retention_module_free(group->sleep_retention_module); - } - sleep_retention_module_deinit(group->sleep_retention_module); + sleep_retention_module_t module = tg_timer_reg_retention_info[group_id].module; + if (sleep_retention_get_created_modules() & BIT(module)) { + sleep_retention_module_free(module); + } + if (sleep_retention_get_inited_modules() & BIT(module)) { + sleep_retention_module_deinit(module); } #endif free(group); diff --git a/components/esp_driver_gptimer/src/gptimer_priv.h b/components/esp_driver_gptimer/src/gptimer_priv.h index 3c117af44f9d..b5d4d1c0e662 100644 --- a/components/esp_driver_gptimer/src/gptimer_priv.h +++ b/components/esp_driver_gptimer/src/gptimer_priv.h @@ -59,10 +59,6 @@ typedef struct gptimer_group_t { int group_id; portMUX_TYPE spinlock; // to protect per-group register level concurrent access gptimer_t *timers[SOC_TIMER_GROUP_TIMERS_PER_GROUP]; -#if GPTIMER_USE_RETENTION_LINK - sleep_retention_module_t sleep_retention_module; // sleep retention module - bool retention_link_created; // mark if the retention link is created -#endif } gptimer_group_t; typedef enum { diff --git a/components/esp_driver_gptimer/test_apps/gptimer/main/test_gptimer_sleep.c b/components/esp_driver_gptimer/test_apps/gptimer/main/test_gptimer_sleep.c index 34a437159898..5b7e5879d57a 100644 --- a/components/esp_driver_gptimer/test_apps/gptimer/main/test_gptimer_sleep.c +++ b/components/esp_driver_gptimer/test_apps/gptimer/main/test_gptimer_sleep.c @@ -10,6 +10,8 @@ #include "freertos/task.h" #include "unity.h" #include "driver/gptimer.h" +#include "driver/gpio_etm.h" +#include "driver/gpio.h" #include "soc/soc_caps.h" #include "esp_sleep.h" #include "esp_private/sleep_cpu.h" @@ -117,3 +119,135 @@ TEST_CASE("gptimer can work after light sleep", "[gptimer]") test_gptimer_sleep_retention(true); #endif } + +#if SOC_TIMER_SUPPORT_ETM +/** + * @brief Test the GPTimer and ETM subsystem can still work after light sleep + * + * @param back_up_before_sleep Whether to back up GPTimer registers before sleep + */ +static void test_gptimer_etm_sleep_retention(bool back_up_before_sleep) +{ + const uint32_t output_gpio = 1; + // GPTimer alarm ---> ETM channel A ---> GPTimer alarm re-enable + // GPTimer alarm ---> ETM channel B ---> GPIO toggle + printf("allocate etm channel\r\n"); + esp_etm_channel_config_t etm_config = { + .flags.allow_pd = back_up_before_sleep, + }; + esp_etm_channel_handle_t etm_channel_a, etm_channel_b; + TEST_ESP_OK(esp_etm_new_channel(&etm_config, &etm_channel_a)); + TEST_ESP_OK(esp_etm_new_channel(&etm_config, &etm_channel_b)); + + printf("initialize gpio\r\n"); + gpio_config_t task_gpio_config = { + .intr_type = GPIO_INTR_DISABLE, + .mode = GPIO_MODE_OUTPUT, + .pin_bit_mask = 1ULL << output_gpio, + }; + TEST_ESP_OK(gpio_config(&task_gpio_config)); + + printf("create a gptimer\r\n"); + gptimer_handle_t gptimer = NULL; + gptimer_config_t timer_config = { + .clk_src = GPTIMER_CLK_SRC_DEFAULT, + .direction = GPTIMER_COUNT_UP, + .resolution_hz = 1 * 1000 * 1000, // 1MHz, 1 tick = 1us + .flags.backup_before_sleep = back_up_before_sleep, + }; + TEST_ESP_OK(gptimer_new_timer(&timer_config, &gptimer)); + + printf("get gptimer etm event and task handle\r\n"); + esp_etm_event_handle_t gptimer_event = NULL; + gptimer_etm_event_config_t gptimer_etm_event_conf = { + .event_type = GPTIMER_ETM_EVENT_ALARM_MATCH, + }; + TEST_ESP_OK(gptimer_new_etm_event(gptimer, &gptimer_etm_event_conf, &gptimer_event)); + esp_etm_task_handle_t gptimer_task = NULL; + gptimer_etm_task_config_t gptimer_etm_task_conf = { + .task_type = GPTIMER_ETM_TASK_EN_ALARM, + }; + TEST_ESP_OK(gptimer_new_etm_task(gptimer, &gptimer_etm_task_conf, & gptimer_task)); + + printf("connect event and task to the channel a\r\n"); + TEST_ESP_OK(esp_etm_channel_connect(etm_channel_a, gptimer_event, gptimer_task)); + + printf("enable etm channels\r\n"); + TEST_ESP_OK(esp_etm_channel_enable(etm_channel_a)); + TEST_ESP_OK(esp_etm_channel_enable(etm_channel_b)); + + printf("set timer alarm action\r\n"); + gptimer_alarm_config_t alarm_config = { + .reload_count = 0, + .alarm_count = 100, // 100us per alarm event + .flags.auto_reload_on_alarm = true, + }; + TEST_ESP_OK(gptimer_set_alarm_action(gptimer, &alarm_config)); + + // before going to sleep, ensure the gptimer is not enabled yet, otherwise it will acquire power management lock + + esp_sleep_context_t sleep_ctx; + esp_sleep_set_sleep_context(&sleep_ctx); + printf("go to light sleep for 2 seconds\r\n"); +#if ESP_SLEEP_POWER_DOWN_CPU + TEST_ESP_OK(sleep_cpu_configure(true)); +#endif + TEST_ESP_OK(esp_sleep_enable_timer_wakeup(2 * 1000 * 1000)); + TEST_ESP_OK(esp_light_sleep_start()); + + printf("Waked up! Let's see if GPTimer and ETM can still work...\r\n"); +#if ESP_SLEEP_POWER_DOWN_CPU + TEST_ESP_OK(sleep_cpu_configure(false)); +#endif + + printf("check if the sleep happened as expected\r\n"); + TEST_ASSERT_EQUAL(0, sleep_ctx.sleep_request_result); +#if SOC_RMT_SUPPORT_SLEEP_RETENTION + // check if the power domain also is powered down + TEST_ASSERT_EQUAL(back_up_before_sleep ? PMU_SLEEP_PD_TOP : 0, (sleep_ctx.sleep_flags) & PMU_SLEEP_PD_TOP); +#endif + esp_sleep_set_sleep_context(NULL); + + printf("enable and start timer\r\n"); + TEST_ESP_OK(gptimer_enable(gptimer)); + TEST_ESP_OK(gptimer_start(gptimer)); + + printf("allocate GPIO etm task\r\n"); + esp_etm_task_handle_t gpio_task = NULL; + gpio_etm_task_config_t gpio_task_config = { + .action = GPIO_ETM_TASK_ACTION_TOG, + }; + TEST_ESP_OK(gpio_new_etm_task(&gpio_task_config, &gpio_task)); + // set gpio number for the gpio etm primitives + TEST_ESP_OK(gpio_etm_task_add_gpio(gpio_task, output_gpio)); + printf("connect event and task to the channel b\r\n"); + TEST_ESP_OK(esp_etm_channel_connect(etm_channel_b, gptimer_event, gpio_task)); + + // delay sometime for us to view the waveform, should see a 5KHz square waveform + vTaskDelay(pdMS_TO_TICKS(1000)); + + // delete gptimer + TEST_ESP_OK(gptimer_stop(gptimer)); + TEST_ESP_OK(gptimer_disable(gptimer)); + TEST_ESP_OK(gptimer_del_timer(gptimer)); + + // delete etm primitives + TEST_ESP_OK(gpio_etm_task_rm_gpio(gpio_task, output_gpio)); + TEST_ESP_OK(esp_etm_del_task(gpio_task)); + TEST_ESP_OK(esp_etm_del_task(gptimer_task)); + TEST_ESP_OK(esp_etm_del_event(gptimer_event)); + TEST_ESP_OK(esp_etm_channel_disable(etm_channel_a)); + TEST_ESP_OK(esp_etm_channel_disable(etm_channel_b)); + TEST_ESP_OK(esp_etm_del_channel(etm_channel_a)); + TEST_ESP_OK(esp_etm_del_channel(etm_channel_b)); +} + +TEST_CASE("gptimer and ETM can work after light sleep", "[gptimer]") +{ + test_gptimer_etm_sleep_retention(false); +#if SOC_TIMER_SUPPORT_SLEEP_RETENTION && SOC_ETM_SUPPORT_SLEEP_RETENTION + test_gptimer_etm_sleep_retention(true); +#endif +} + +#endif // SOC_TIMER_SUPPORT_ETM From 2c500dd5eb0af4bb5cbb697a89c857681cb7e5e8 Mon Sep 17 00:00:00 2001 From: akshat Date: Thu, 10 Oct 2024 11:19:44 +0530 Subject: [PATCH 116/365] fix(wifi): Prevent overwriting of scan parameters in consecutive scans --- components/esp_wifi/lib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/esp_wifi/lib b/components/esp_wifi/lib index 49187f511a18..903d1e428f1b 160000 --- a/components/esp_wifi/lib +++ b/components/esp_wifi/lib @@ -1 +1 @@ -Subproject commit 49187f511a1843ea2c3a7abc69c1186d9ea0ae7d +Subproject commit 903d1e428f1b08806070be4dc7a39118a4f7e417 From b7d445389dc6a18475befab9fdbc92a49f8f0b49 Mon Sep 17 00:00:00 2001 From: shenmengjing Date: Fri, 6 Sep 2024 10:56:58 +0800 Subject: [PATCH 117/365] docs: Update CN translation for ulp-lp-core.rst --- docs/en/api-reference/system/ulp-lp-core.rst | 128 ++++++------ .../api-reference/system/ulp-lp-core.rst | 192 +++++++++++++----- 2 files changed, 198 insertions(+), 122 deletions(-) diff --git a/docs/en/api-reference/system/ulp-lp-core.rst b/docs/en/api-reference/system/ulp-lp-core.rst index 1e91c49c69d2..0e8a7ca2fec1 100644 --- a/docs/en/api-reference/system/ulp-lp-core.rst +++ b/docs/en/api-reference/system/ulp-lp-core.rst @@ -1,11 +1,11 @@ -ULP LP-Core Coprocessor Programming +ULP LP Core Coprocessor Programming =================================== :link_to_translation:`zh_CN:[中文]` -The ULP LP-Core (Low-power core) coprocessor is a variant of the ULP present in {IDF_TARGET_NAME}. It features ultra-low power consumption while also being able to stay powered on while the main CPU stays in low-power modes. This enables the LP-Core coprocessor to handle tasks like GPIO or sensor readings while the main CPU is in sleep mode, resulting in significant overall power savings for the entire system. +The ULP LP core (Low-power core) coprocessor is a variant of the ULP present in {IDF_TARGET_NAME}. It features ultra-low power consumption while also being able to stay powered on while the main CPU stays in low-power modes. This enables the LP core coprocessor to handle tasks like GPIO or sensor readings while the main CPU is in sleep mode, resulting in significant overall power savings for the entire system. -The ULP LP-Core coprocessor has the following features: +The ULP LP core coprocessor has the following features: * A RV32I (32-bit RISC-V ISA) processor, with the multiplication/division (M), atomic (A), and compressed (C) extensions. * Interrupt controller. @@ -13,15 +13,15 @@ The ULP LP-Core coprocessor has the following features: * Can access all of the High-power (HP) SRAM and peripherals when the entire system is active. * Can access the Low-power (LP) SRAM and peripherals when the HP system is in sleep mode. -Compiling Code for the ULP LP-Core +Compiling Code for the ULP LP Core ---------------------------------- -The ULP LP-Core code is compiled together with your ESP-IDF project as a separate binary and automatically embedded into the main project binary. There are two ways to achieve this: +The ULP LP core code is compiled together with your ESP-IDF project as a separate binary and automatically embedded into the main project binary. There are two ways to achieve this: Using ``ulp_embed_binary`` ~~~~~~~~~~~~~~~~~~~~~~~~~~~ -1. Place the ULP LP-Core code, written in C or assembly (with the ``.S`` extension), in a dedicated directory within the component directory, such as ``ulp/``. +1. Place the ULP LP core code, written in C or assembly (with the ``.S`` extension), in a dedicated directory within the component directory, such as ``ulp/``. 2. After registering the component in the ``CMakeLists.txt`` file, call the ``ulp_embed_binary`` function. Here is an example: @@ -41,7 +41,7 @@ The first argument to ``ulp_embed_binary`` specifies the ULP binary name. The na Using a Custom CMake Project ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -It is also possible to create a custom CMake project for the LP-Core. This gives more control over the build process and allows you to set compile options, link external libraries and all other things that are possible with a regular CMake project. +It is also possible to create a custom CMake project for the LP core. This gives more control over the build process and allows you to set compile options, link external libraries and all other things that are possible with a regular CMake project. To do this, add the ULP project as an external project in your component ``CMakeLists.txt`` file: @@ -90,7 +90,7 @@ Building Your Project To compile and build your project: -1. Enable both :ref:`CONFIG_ULP_COPROC_ENABLED` and :ref:`CONFIG_ULP_COPROC_TYPE` in menuconfig, and set :ref:`CONFIG_ULP_COPROC_TYPE` to ``CONFIG_ULP_COPROC_TYPE_LP_CORE``. The :ref:`CONFIG_ULP_COPROC_RESERVE_MEM` option reserves RTC memory for the ULP, and must be set to a value big enough to store both the ULP LP-Core code and data. If the application components contain multiple ULP programs, then the size of the RTC memory must be sufficient to hold the largest one. +1. Enable both :ref:`CONFIG_ULP_COPROC_ENABLED` and :ref:`CONFIG_ULP_COPROC_TYPE` in menuconfig, and set :ref:`CONFIG_ULP_COPROC_TYPE` to ``CONFIG_ULP_COPROC_TYPE_LP_CORE``. The :ref:`CONFIG_ULP_COPROC_RESERVE_MEM` option reserves RTC memory for the ULP, and must be set to a value big enough to store both the ULP LP core code and data. If the application components contain multiple ULP programs, then the size of the RTC memory must be sufficient to hold the largest one. 2. Build the application as usual (e.g., ``idf.py app``). @@ -113,12 +113,12 @@ During the build process, the following steps are taken to build ULP program: .. _ulp-lp-core-access-variables: -Accessing the ULP LP-Core Program Variables +Accessing the ULP LP Core Program Variables ------------------------------------------- -Global symbols defined in the ULP LP-Core program may be used inside the main program. +Global symbols defined in the ULP LP core program may be used inside the main program. -For example, the ULP LP-Core program may define a variable ``measurement_count`` which defines the number of GPIO measurements the program needs to make before waking up the chip from Deep-sleep. +For example, the ULP LP core program may define a variable ``measurement_count`` which defines the number of GPIO measurements the program needs to make before waking up the chip from Deep-sleep. .. code-block:: c @@ -132,7 +132,7 @@ For example, the ULP LP-Core program may define a variable ``measurement_count`` ...do something. } -The main program can access the global ULP LP-Core program variables as the build system makes this possible by generating the ``${ULP_APP_NAME}.h`` and ``${ULP_APP_NAME}.ld`` files which define the global symbols present in the ULP LP-Core program. Each global symbol defined in the ULP LP-Core program is included in these files and are prefixed with ``ulp_``. +The main program can access the global ULP LP core program variables as the build system makes this possible by generating the ``${ULP_APP_NAME}.h`` and ``${ULP_APP_NAME}.ld`` files which define the global symbols present in the ULP LP core program. Each global symbol defined in the ULP LP core program is included in these files and are prefixed with ``ulp_``. The header file contains the declaration of the symbol: @@ -148,7 +148,7 @@ The generated linker script file defines the locations of symbols in LP_MEM: PROVIDE ( ulp_measurement_count = 0x50000060 ); -To access the ULP LP-Core program variables from the main program, the generated header file should be included using an ``include`` statement. This allows the ULP LP-Core program variables to be accessed as regular variables. +To access the ULP LP core program variables from the main program, the generated header file should be included using an ``include`` statement. This allows the ULP LP core program variables to be accessed as regular variables. .. code-block:: c @@ -160,15 +160,15 @@ To access the ULP LP-Core program variables from the main program, the generated .. note:: - Variables declared in the global scope of the LP-Core program reside in either the ``.bss`` or ``.data`` section of the binary. These sections are initialized when the LP-Core binary is loaded and executed. Accessing these variables from the main program on the HP-Core before the first LP-Core run may result in undefined behavior. + Variables declared in the global scope of the LP core program reside in either the ``.bss`` or ``.data`` section of the binary. These sections are initialized when the LP core binary is loaded and executed. Accessing these variables from the main program on the HP-Core before the first LP core run may result in undefined behavior. -Starting the ULP LP-Core Program +Starting the ULP LP Core Program -------------------------------- -To run a ULP LP-Core program, the main application needs to load the ULP program into RTC memory using the :cpp:func:`ulp_lp_core_load_binary` function, and then start it using the :cpp:func:`ulp_lp_core_run` function. +To run a ULP LP core program, the main application needs to load the ULP program into RTC memory using the :cpp:func:`ulp_lp_core_load_binary` function, and then start it using the :cpp:func:`ulp_lp_core_run` function. -Each ULP LP-Core program is embedded into the ESP-IDF application as a binary blob. The application can reference this blob and load it in the following way (supposed ULP_APP_NAME was defined to ``ulp_app_name``): +Each ULP LP core program is embedded into the ESP-IDF application as a binary blob. The application can reference this blob and load it in the following way (supposed ULP_APP_NAME was defined to ``ulp_app_name``): .. code-block:: c @@ -191,17 +191,17 @@ Once the program is loaded into LP memory, the application can be configured and ESP_ERROR_CHECK( ulp_lp_core_run(&cfg) ); -ULP LP-Core Program Flow +ULP LP Core Program Flow ------------------------ -How the ULP LP-Core coprocessor is started depends on the wake-up source selected in :cpp:type:`ulp_lp_core_cfg_t`. The most common use-case is for the ULP to periodically wake up, do some measurements before either waking up the main CPU or going back to sleep again. +How the ULP LP core coprocessor is started depends on the wake-up source selected in :cpp:type:`ulp_lp_core_cfg_t`. The most common use-case is for the ULP to periodically wake up, do some measurements before either waking up the main CPU or going back to sleep again. The ULP has the following wake-up sources: - * :c:macro:`ULP_LP_CORE_WAKEUP_SOURCE_HP_CPU` - LP Core can be woken up by the HP CPU. - * :c:macro:`ULP_LP_CORE_WAKEUP_SOURCE_LP_TIMER` - LP Core can be woken up by the LP timer. - * :c:macro:`ULP_LP_CORE_WAKEUP_SOURCE_ETM` - LP Core can be woken up by a ETM event. (Not yet supported) - * :c:macro:`ULP_LP_CORE_WAKEUP_SOURCE_LP_IO` - LP Core can be woken up when LP IO level changes. (Not yet supported) - * :c:macro:`ULP_LP_CORE_WAKEUP_SOURCE_LP_UART` - LP Core can be woken up after receiving a certain number of UART RX pulses. (Not yet supported) + * :c:macro:`ULP_LP_CORE_WAKEUP_SOURCE_HP_CPU` - LP core can be woken up by the HP CPU. + * :c:macro:`ULP_LP_CORE_WAKEUP_SOURCE_LP_TIMER` - LP core can be woken up by the LP timer. + * :c:macro:`ULP_LP_CORE_WAKEUP_SOURCE_ETM` - LP core can be woken up by a ETM event. (Not yet supported) + * :c:macro:`ULP_LP_CORE_WAKEUP_SOURCE_LP_IO` - LP core can be woken up when LP IO level changes. (Not yet supported) + * :c:macro:`ULP_LP_CORE_WAKEUP_SOURCE_LP_UART` - LP core can be woken up after receiving a certain number of UART RX pulses. (Not yet supported) When the ULP is woken up, it will go through the following steps: @@ -215,10 +215,10 @@ When the ULP is woken up, it will go through the following steps: #. Call :cpp:func:`ulp_lp_core_halt` -ULP LP-Core Peripheral Support +ULP LP Core Peripheral Support ------------------------------ -To enhance the capabilities of the ULP LP-Core coprocessor, it has access to peripherals that operate in the low-power domain. The ULP LP-Core coprocessor can interact with these peripherals when the main CPU is in sleep mode, and can wake up the main CPU once a wake-up condition is reached. The following peripherals are supported: +To enhance the capabilities of the ULP LP core coprocessor, it has access to peripherals that operate in the low-power domain. The ULP LP core coprocessor can interact with these peripherals when the main CPU is in sleep mode, and can wake up the main CPU once a wake-up condition is reached. The following peripherals are supported: .. list:: @@ -229,10 +229,10 @@ To enhance the capabilities of the ULP LP-Core coprocessor, it has access to per .. only:: CONFIG_ESP_ROM_HAS_LP_ROM - ULP LP-Core ROM + ULP LP Core ROM --------------- - The ULP LP-Core ROM is a small pre-built piece of code located in LP-ROM, which can't be modified. Similar to the bootloader ROM code ran by the main CPU, this code is executed when the ULP LP-Core coprocessor is started. The ROM code initializes the ULP LP-Core coprocessor and then jumps to the user program. The ROM code also prints boot messages if the LP UART has been initialized. + The ULP LP core ROM is a small pre-built piece of code located in LP-ROM, which can't be modified. Similar to the bootloader ROM code ran by the main CPU, this code is executed when the ULP LP core coprocessor is started. The ROM code initializes the ULP LP core coprocessor and then jumps to the user program. The ROM code also prints boot messages if the LP UART has been initialized. The ROM code is not executed if :cpp:member:`ulp_lp_core_cfg_t::skip_lp_rom_boot` is set to true. This is useful when you need the ULP to wake-up as quickly as possible and the extra overhead of initializing and printing is unwanted. @@ -244,12 +244,12 @@ To enhance the capabilities of the ULP LP-Core coprocessor, it has access to per Since these functions are already present in LP-ROM no matter what, using these in your program allows you to reduce the RAM footprint of your ULP application. -ULP LP-Core Interrupts +ULP LP Core Interrupts ---------------------- -The LP-Core coprocessor can be configured to handle interrupts from various sources. Examples of such interrupts could be LP IO low/high or LP timer interrupts. To register a handler for an interrupt, simply override any of the weak handlers provided by IDF. A complete list of handlers can be found in :component_file:`ulp_lp_core_interrupts.h `. For details on which interrupts are available on a specific target, please consult **{IDF_TARGET_NAME} Technical Reference Manual** [`PDF <{IDF_TARGET_TRM_EN_URL}#ulp>`__]. +The LP core coprocessor can be configured to handle interrupts from various sources. Examples of such interrupts could be LP IO low/high or LP timer interrupts. To register a handler for an interrupt, simply override any of the weak handlers provided by IDF. A complete list of handlers can be found in :component_file:`ulp_lp_core_interrupts.h `. For details on which interrupts are available on a specific target, please consult **{IDF_TARGET_NAME} Technical Reference Manual** [`PDF <{IDF_TARGET_TRM_EN_URL}#ulp>`__]. -For example, to override the handler for the LP IO interrupt, you can define the following function in your ULP LP-Core code: +For example, to override the handler for the LP IO interrupt, you can define the following function in your ULP LP core code: .. code-block:: c @@ -260,39 +260,40 @@ For example, to override the handler for the LP IO interrupt, you can define the :c:macro:`LP_CORE_ISR_ATTR` is a macro that is used to define the interrupt handler function. This macro ensures that registers are saved and restored correctly when the interrupt handler is called. -In addition to configuring the interrupt related registers for the interrupt source you want to handle, you also need to enable the interrupts globally in the LP-Core interrupt controller. This can be done using the :cpp:func:`ulp_lp_core_intr_enable` function. +In addition to configuring the interrupt related registers for the interrupt source you want to handle, you also need to enable the interrupts globally in the LP core interrupt controller. This can be done using the :cpp:func:`ulp_lp_core_intr_enable` function. -ULP LP-Core Clock Configuration +ULP LP Core Clock Configuration ------------------------------- + {IDF_TARGET_XTAL_FREQ:default="Not updated", esp32c5="48 MHz", esp32p4="40 MHz"} -The ULP LP-Core clock source is based on the system clock ``LP_FAST_CLK``, see `TRM <{IDF_TARGET_TRM_EN_URL}>`__ > ``Reset and Clock`` for more details. +The ULP LP Core clock source is based on the system clock ``LP_FAST_CLK``, see `TRM <{IDF_TARGET_TRM_EN_URL}>`__ > ``Reset and Clock`` for more details. .. only:: SOC_CLK_LP_FAST_SUPPORT_XTAL - On {IDF_TARGET_NAME} ``LP_FAST_CLK`` supports using the external {IDF_TARGET_XTAL_FREQ} crystal (XTAL) as the source for ``LP_FAST_CLK``, which allows the ULP LP-Core to run at a higher frequency than with the default ``RTC_FAST_CLOCK`` which runs at around 20 MHz. The drawback is that this clock is normally powered down during sleep to reduce power consumption, with it selected XTAL will also stay powered on during sleep, increasing power consumption. If you only plan to use the LP-Core as a co-processor while the HP-Core is active, then this option can be used to increase both the performance and the frequency stability of the LP-Core. + On {IDF_TARGET_NAME}, ``LP_FAST_CLK`` supports using the external {IDF_TARGET_XTAL_FREQ} crystal (XTAL) as its clock source. This allows the ULP LP Core to run at a higher frequency than with the default ``RTC_FAST_CLOCK``, which runs at around 20 MHz. However, there is a trade-off: this clock is normally powered down during sleep to reduce power consumption, but if XTAL is selected as the source, it will remain powered up during sleep, which increases power consumption. If you only plan to use the LP Core as a coprocessor while the HP Core is active, then selecting XTAL can enhance both the performance and frequency stability of the LP Core. - To enable this feature set :ref:`CONFIG_RTC_FAST_CLK_SRC` to ``CONFIG_RTC_FAST_CLK_SRC_XTAL``. + To enable this feature, set :ref:`CONFIG_RTC_FAST_CLK_SRC` to ``CONFIG_RTC_FAST_CLK_SRC_XTAL``. Debugging ULP LP-Core Applications ---------------------------------- -When programming the LP-Core, it can sometimes be challenging to figure out why the program is not behaving as expected. Here are some strategies to help you debug your LP-Core program: +When programming the LP core, it can sometimes be challenging to figure out why the program is not behaving as expected. Here are some strategies to help you debug your LP core program: -* Use the LP-UART to print: the LP-Core has access to the LP-UART peripheral, which can be used for printing information independently of the main CPU sleep state. See :example:`system/ulp/lp_core/lp_uart/lp_uart_print` for an example of how to use this driver. +* Use the LP-UART to print: the LP core has access to the LP-UART peripheral, which can be used for printing information independently of the main CPU sleep state. See :example:`system/ulp/lp_core/lp_uart/lp_uart_print` for an example of how to use this driver. -* Routing :cpp:func:`lp_core_printf` to the HP-Core console UART with :ref:`CONFIG_ULP_HP_UART_CONSOLE_PRINT`. This allows you to easily print LP-Core information to the already connected HP-Core console UART. The drawback of this approach is that it requires the main CPU to be awake and since there is no synchronization between the LP and HP cores, the output may be interleaved. +* Routing :cpp:func:`lp_core_printf` to the HP-Core console UART with :ref:`CONFIG_ULP_HP_UART_CONSOLE_PRINT`. This allows you to easily print LP core information to the already connected HP-Core console UART. The drawback of this approach is that it requires the main CPU to be awake and since there is no synchronization between the LP and HP cores, the output may be interleaved. * Share program state through shared variables: as described in :ref:`ulp-lp-core-access-variables`, both the main CPU and the ULP core can easily access global variables in RTC memory. Writing state information to such a variable from the ULP and reading it from the main CPU can help you discern what is happening on the ULP core. The downside of this approach is that it requires the main CPU to be awake, which will not always be the case. Keeping the main CPU awake might even, in some cases, mask problems, as some issues may only occur when certain power domains are powered down. -* Panic handler: the LP-Core has a panic handler that can dump the state of the LP-Core registers by the LP-UART when an exception is detected. To enable the panic handler, set the :ref:`CONFIG_ULP_PANIC_OUTPUT_ENABLE` option to ``y``. This option can be kept disabled to reduce LP-RAM usage by the LP-Core application. To recover a backtrace from the panic dump, it is possible to use esp-idf-monitor_., e.g.: +* Panic handler: the LP core has a panic handler that can dump the state of the LP core registers by the LP-UART when an exception is detected. To enable the panic handler, set the :ref:`CONFIG_ULP_PANIC_OUTPUT_ENABLE` option to ``y``. This option can be kept disabled to reduce LP-RAM usage by the LP core application. To recover a backtrace from the panic dump, it is possible to use esp-idf-monitor_., e.g.: .. code-block:: bash python -m esp_idf_monitor --toolchain-prefix riscv32-esp-elf- --target {IDF_TARGET_NAME} --decode-panic backtrace PATH_TO_ULP_ELF_FILE -Debugging ULP LP-Core Applications with GDB and OpenOCD +Debugging ULP LP Core Applications with GDB and OpenOCD ------------------------------------------------------- It is also possible to debug code running on LP core using GDB and OpenOCD as you usually do for HP cores, but it has some specifics and limitations. @@ -307,7 +308,7 @@ Run OpenOCD with special config file for LP core debugging support. And then run openocd -f board/{IDF_TARGET_PATH_NAME}-lpcore-builtin.cfg riscv32-esp-elf-gdb -x gdbinit -``gdbinit`` file contents with inline comments is below. For more details see the next section. +Below is the ``gdbinit`` file content with inline comments. For more details, see the next section. .. code-block:: bash @@ -339,17 +340,17 @@ LP Core Debugging Specifics .. list:: - #. For convenient debugging you may need to add `-O0` compile option for ULP app in its CMakeLists.txt. See :example:`system/ulp/lp_core/debugging/` how to do this. - :not esp32p4: #. LP core supports limited set of HW exceptions, so, for example, writing at address `0x0` will not cause a panic as it would be for the code running on HP core. This can be overcome to some extent by enabling undefined behavior sanitizer for LP core application, so `ubsan` can help to catch some errors. But note that it will increase code size significantly and it can happen that application won't fit into RTC RAM. To enable `ubsan` for ULP app add `-fsanitize=undefined -fno-sanitize=shift-base` compile option to its CMakeLists.txt. See :example:`system/ulp/lp_core/debugging/` how to do this. - #. To be able to debug program running on LP core debug info and symbols need to be loaded to GDB. It can be done via GDB command line or in ``gdbinit`` file. See section above. - #. Upon startup LP core application is loaded into RAM, so all SW breakpoints set before that moment will get overwritten. The best moment to set breakpoints for LP core application is to do this when LP core program reaches `main` function. - #. When using IDEs it can be that it does not support breakpoint actions/commands configuration shown in ``gdbinit`` above, so in this case you have to preset all breakpoints before debug session start and disable all of them except for ``main``. When program is stopped at ``main`` manually enable remaining breakpoints and resume execution. + #. For convenient debugging, you may need to add ``-O0`` compile option for ULP app in its ``CMakeLists.txt``. See :example:`system/ulp/lp_core/debugging/` on how to do this. + :not esp32p4: #. LP core supports limited set of HW exceptions, so, for example, writing at address `0x0` will not cause a panic as it would be for the code running on HP core. This can be overcome to some extent by enabling undefined behavior sanitizer for LP core application, so `ubsan` can help to catch some errors. But note that it will increase code size significantly and it can happen that application won't fit into RTC RAM. To enable `ubsan` for ULP app, add ``-fsanitize=undefined -fno-sanitize=shift-base`` compile option to its ``CMakeLists.txt``. See :example:`system/ulp/lp_core/debugging/` on how to do this. + #. To be able to debug program running on LP core, debugging information and symbols need to be loaded to GDB. It can be done via GDB command line or in ``gdbinit`` file. See section above. + #. Upon startup, LP core application is loaded into RAM, so all SW breakpoints set before that moment will get overwritten. The best moment to set breakpoints for LP core application is to do this when LP core program reaches `main` function. + #. When using IDEs, it may lack support for configuring breakpoint actions or commands shown in ``gdbinit`` above. Consequently, you have to preset all breakpoints before debug session start and disable all of them except for ``main``. When program stops at ``main``, enable the remaining breakpoints and resume execution manually. Limitations ~~~~~~~~~~~ -#. Currently debugging is not supported when either HP or LP core enters any sleep mode. So it limits available debugging scenarios. -#. FreeRTOS support in OpenOCD is disabled when debugging LP core, so you won't be able to see tasks running in the system. Instead there will be several threads representing HP and LP cores: +#. Currently, debugging is not supported when either HP or LP core enters any sleep mode. So it limits available debugging scenarios. +#. FreeRTOS support in OpenOCD is disabled when debugging LP core, so you won't be able to see tasks running in the system. Instead, there will be several threads representing HP and LP cores: .. code-block:: bash @@ -360,28 +361,23 @@ Limitations * 2 Thread 2 "{IDF_TARGET_PATH_NAME}.cpu1" (Name: {IDF_TARGET_PATH_NAME}.cpu1, state: breakpoint) do_things (max=1000000000) at /home/user/projects/esp/esp-idf/examples/system/ulp/lp_core/debugging/main/lp_core/main.c:21 -#. When setting HW breakpoint in GDB it is set on both cores, so the number of available HW breakpoints is limited to the number of them supported by LP core ({IDF_TARGET_SOC_CPU_BREAKPOINTS_NUM} for {IDF_TARGET_NAME}). -#. OpenOCD flash support is disabled. It does not matter for LP core application because it is run completely from RAM and GDB can use SW breakpoints for it. But if you want to set a breakpoint on function from flash used by the code running on HP core (e.g. `app_main`) you should request to set HW breakpoint explicitly via ``hb`` / ``thb`` GDB commands. -#. Since main and ULP programs are linked as separate binaries it is possible for them to have global symbols (functions, variables) with the same name. When you set breakpoint for such a functions using its name GDB will set breakpoints for all of them. It could lead to the problems when one of the function is located in the flash because currently flash support is disabled in OpenOCD when debugging LP core. In that case you can use source line or address based breakpoints. +#. When setting HW breakpoint in GDB, it is set on both cores, so the number of available HW breakpoints is limited to the number of them supported by LP core ({IDF_TARGET_SOC_CPU_BREAKPOINTS_NUM} for {IDF_TARGET_NAME}). +#. OpenOCD flash support is disabled. It does not matter for LP core application because it is run completely from RAM and GDB can use SW breakpoints for it. But if you want to set a breakpoint on function from flash used by the code running on HP core (e.g., `app_main`), you should request to set HW breakpoint explicitly via ``hb`` and ``thb`` GDB commands. +#. Since the main and ULP programs are linked as separate binaries, it is possible for them to have global symbols (such as functions or variables) with the same name. If you set a breakpoint using the function name, GDB will apply it to all instances of that function. This can cause issues if one of the functions is located in the flash, as OpenOCD currently doesn't support flash when debugging the LP core. In such cases, you can set breakpoints using the source line or the function's memory address instead. Application Examples -------------------- -* :example:`system/ulp/lp_core/gpio` polls GPIO while main CPU is in Deep-sleep. - -.. only:: esp32c6 - - * :example:`system/ulp/lp_core/lp_i2c` reads external I2C ambient light sensor (BH1750) while the main CPU is in Deep-sleep and wakes up the main CPU once a threshold is met. - -* :example:`system/ulp/lp_core/lp_uart/lp_uart_echo` reads data written to a serial console and echoes it back. This example demonstrates the usage of the LP UART driver running on the LP core. - -* :example:`system/ulp/lp_core/lp_uart/lp_uart_print` shows how to print various statements from a program running on the LP core. - -* :example:`system/ulp/lp_core/interrupt` shows how to register an interrupt handler on the LP core to receive an interrupt triggered by the main CPU. -* :example:`system/ulp/lp_core/gpio_intr_pulse_counter` shows how to use GPIO interrupts to count pulses while the main CPU is in Deep-sleep mode. +.. list:: -* :example:`system/ulp/lp_core/build_system/` demonstrates how to include custom ``CMakeLists.txt`` file for the ULP app. -* :example:`system/ulp/lp_core/debugging` shows how to debug code running on LP core using GDB and OpenOCD. + - :example:`system/ulp/lp_core/gpio` polls GPIO while main CPU is in Deep-sleep. + :esp32c6: - :example:`system/ulp/lp_core/lp_i2c` reads external I2C ambient light sensor (BH1750) while the main CPU is in Deep-sleep and wakes up the main CPU once a threshold is met. + - :example:`system/ulp/lp_core/lp_uart/lp_uart_echo` reads data written to a serial console and echoes it back. This example demonstrates the usage of the LP UART driver running on the LP core. + - :example:`system/ulp/lp_core/lp_uart/lp_uart_print` shows how to print various statements from a program running on the LP core. + - :example:`system/ulp/lp_core/interrupt` shows how to register an interrupt handler on the LP core to receive an interrupt triggered by the main CPU. + - :example:`system/ulp/lp_core/gpio_intr_pulse_counter` shows how to use GPIO interrupts to count pulses while the main CPU is in Deep-sleep mode. + - :example:`system/ulp/lp_core/build_system/` demonstrates how to include custom ``CMakeLists.txt`` file for the ULP app. + - :example:`system/ulp/lp_core/debugging` shows how to debug code running on LP core using GDB and OpenOCD. API Reference ------------- diff --git a/docs/zh_CN/api-reference/system/ulp-lp-core.rst b/docs/zh_CN/api-reference/system/ulp-lp-core.rst index 70cd7ec870b9..4ffeca4ad747 100644 --- a/docs/zh_CN/api-reference/system/ulp-lp-core.rst +++ b/docs/zh_CN/api-reference/system/ulp-lp-core.rst @@ -1,11 +1,11 @@ -ULP LP-Core 协处理器编程 -=================================== +ULP LP 内核协处理器编程 +======================= :link_to_translation:`en:[English]` -ULP LP-Core(低功耗内核)协处理器是 {IDF_TARGET_NAME} 中 ULP 的一个变型。它具有超低功耗,同时还能在主 CPU 处于低功耗模式时保持运行。因此,LP-Core 协处理器能够在主 CPU 处于睡眠模式时处理 GPIO 或传感器读取等任务,从而显著降低整个系统的整体功耗。 +ULP LP 内核 (Low-power core) 协处理器是 {IDF_TARGET_NAME} 中 ULP 的一个变型。它具有超低功耗,同时还能在主 CPU 处于低功耗模式时保持运行。因此,LP 内核协处理器能够在主 CPU 处于睡眠模式时处理 GPIO 或传感器读取等任务,从而显著降低整个系统的整体功耗。 -ULP LP-Core 协处理器具有以下功能: +ULP LP 内核协处理器具有以下功能: * RV32I 处理器(32 位 RISC-V ISA),支持乘法/除法 (M)、原子 (A) 和压缩 (C) 扩展。 * 中断控制器。 @@ -13,17 +13,17 @@ ULP LP-Core 协处理器具有以下功能: * 当整个系统处于 active 模式时,可以访问所有的高功耗 (HP) SRAM 和外设。 * 当 HP 系统处于睡眠模式时,可以访问低功耗 (LP) SRAM 和外设。 -编译 ULP LP-Core 代码 ----------------------------------- +编译 ULP LP 内核代码 +-------------------- -ULP LP-Core 代码会与 ESP-IDF 项目共同编译,生成一个单独的二进制文件,并自动嵌入到主项目的二进制文件中。编译可通过以下两种方式实现: +ULP LP 内核代码会与 ESP-IDF 项目共同编译,生成一个单独的二进制文件,并自动嵌入到主项目的二进制文件中。编译可通过以下两种方式实现: 使用 ``ulp_embed_binary`` ~~~~~~~~~~~~~~~~~~~~~~~~~ -1. 将用 C 语言或汇编语言编写的 ULP LP-Core 代码(带有 ``.S`` 扩展名)放在组件目录下的专用目录中,例如 ``ulp/``。 +1. 将用 C 语言或汇编语言编写的 ULP LP 内核代码(带有 ``.S`` 扩展名)放在组件目录下的专用目录中,例如 ``ulp/``。 -2. 在 CMakeLists.txt 文件中注册组件后,调用 ``ulp_embed_binary`` 函数。例如: +2. 在 ``CMakeLists.txt`` 文件中注册组件后,调用 ``ulp_embed_binary`` 函数。例如: .. code-block:: cmake @@ -41,7 +41,7 @@ ULP LP-Core 代码会与 ESP-IDF 项目共同编译,生成一个单独的二 使用自定义的 CMake 项目 ~~~~~~~~~~~~~~~~~~~~~~~ -也可以为 LP-Core 创建自定义的 CMake 项目,从而更好地控制构建过程,并实现常规 CMake 项目的操作,例如设置编译选项、链接外部库等。 +也可以为 LP 内核创建自定义的 CMake 项目,从而更好地控制构建过程,并实现常规 CMake 项目的操作,例如设置编译选项、链接外部库等。 请在组件的 ``CMakeLists.txt`` 文件中将 ULP 项目添加为外部项目: @@ -90,7 +90,7 @@ ULP LP-Core 代码会与 ESP-IDF 项目共同编译,生成一个单独的二 若想编译和构建项目,请执行以下操作: -1. 在 menuconfig 中启用 :ref:`CONFIG_ULP_COPROC_ENABLED` 和 :ref:`CONFIG_ULP_COPROC_TYPE` 选项,并将 :ref:`CONFIG_ULP_COPROC_TYPE` 设置为 ``CONFIG_ULP_COPROC_TYPE_LP_CORE``。:ref:`CONFIG_ULP_COPROC_RESERVE_MEM` 选项为 ULP 保留 RTC 内存,因此必须设置为一个足够大的值,以存储 ULP LP-Core 代码和数据。如果应用程序组件包含多个 ULP 程序,那么 RTC 内存的大小必须足够容纳其中最大的程序。 +1. 在 menuconfig 中启用 :ref:`CONFIG_ULP_COPROC_ENABLED` 和 :ref:`CONFIG_ULP_COPROC_TYPE` 选项,并将 :ref:`CONFIG_ULP_COPROC_TYPE` 设置为 ``CONFIG_ULP_COPROC_TYPE_LP_CORE``。:ref:`CONFIG_ULP_COPROC_RESERVE_MEM` 选项为 ULP 保留 RTC 内存,因此必须设置为一个足够大的值,以存储 ULP LP 内核代码和数据。如果应用程序组件包含多个 ULP 程序,那么 RTC 内存的大小必须足够容纳其中最大的程序。 2. 按照常规步骤构建应用程序(例如 ``idf.py app``)。 @@ -113,12 +113,12 @@ ULP LP-Core 代码会与 ESP-IDF 项目共同编译,生成一个单独的二 .. _ulp-lp-core-access-variables: -访问 ULP LP-Core 程序变量 -------------------------------------------- +访问 ULP LP 内核程序变量 +------------------------ -在主程序中可以使用在 ULP LP-Core 程序中定义的全局符号。 +在主程序中可以使用在 ULP LP 内核程序中定义的全局符号。 -例如,ULP LP-Core 程序定义了一个变量 ``measurement_count``,用来表示程序从深度睡眠中唤醒芯片前所需的 GPIO 测量次数。 +例如,ULP LP 内核程序定义了一个变量 ``measurement_count``,用来表示程序从深度睡眠中唤醒芯片前所需的 GPIO 测量次数。 .. code-block:: c @@ -132,7 +132,7 @@ ULP LP-Core 代码会与 ESP-IDF 项目共同编译,生成一个单独的二 ...do something. } -主程序可以访问 ULP LP-Core 程序全局变量,这是因为构建系统生成了 ``${ULP_APP_NAME}.h`` 和 ``${ULP_APP_NAME}.ld`` 文件,文件中定义了 ULP LP-Core 程序中现有的的全局符号。在 ULP LP-Core 程序中定义的每个全局符号都包含在这两个文件中,并具有前缀 ``ulp_``。 +主程序可以访问 ULP LP 内核程序全局变量,这是因为构建系统生成了 ``${ULP_APP_NAME}.h`` 和 ``${ULP_APP_NAME}.ld`` 文件,文件中定义了 ULP LP 内核程序中现有的的全局符号。在 ULP LP 内核程序中定义的每个全局符号都包含在这两个文件中,并具有前缀 ``ulp_``。 头文件中包含符号的声明: @@ -148,7 +148,7 @@ ULP LP-Core 代码会与 ESP-IDF 项目共同编译,生成一个单独的二 PROVIDE ( ulp_measurement_count = 0x50000060 ); -要从主程序访问 ULP LP-Core 程序变量,应使用 ``include`` 语句将生成的头文件包含在主程序中,这样就可以像访问常规变量一样访问 ULP LP-Core 程序变量。 +要从主程序访问 ULP LP 内核程序变量,应使用 ``include`` 语句将生成的头文件包含在主程序中,这样就可以像访问常规变量一样访问 ULP LP 内核程序变量。 .. code-block:: c @@ -160,15 +160,15 @@ ULP LP-Core 代码会与 ESP-IDF 项目共同编译,生成一个单独的二 .. note:: - LP-Core 程序全局变量存储在二进制文件的 ``.bss`` 或者 ``.data`` 部分。这些部分在加载和执行 LP-Core 二进制文件时被初始化。在首次运行 LP-Core 之前,从 HP-Core 主程序访问这些变量可能会导致未定义行为。 + LP 内核程序全局变量存储在二进制文件的 ``.bss`` 或者 ``.data`` 部分。这些部分在加载和执行 LP 内核二进制文件时被初始化。在首次运行 LP 内核之前,从 HP-Core 主程序访问这些变量可能会导致未定义行为。 -启动 ULP LP-Core 程序 --------------------------------- +启动 ULP LP 内核程序 +-------------------- -要运行 ULP LP-Core 程序,主应用程序需要先使用 :cpp:func:`ulp_lp_core_load_binary` 函数将 ULP 程序加载到 RTC 内存中,然后使用 :cpp:func:`ulp_lp_core_run` 函数进行启动。 +要运行 ULP LP 内核程序,主应用程序需要先使用 :cpp:func:`ulp_lp_core_load_binary` 函数将 ULP 程序加载到 RTC 内存中,然后使用 :cpp:func:`ulp_lp_core_run` 函数进行启动。 -每个 ULP LP-Core 程序以二进制 blob 的形式嵌入到 ESP-IDF 应用程序中。应用程序可以按照如下方式引用和加载该 blob(假设 ULP_APP_NAME 被定义为 ``ulp_app_name``): +每个 ULP LP 内核程序以二进制 blob 的形式嵌入到 ESP-IDF 应用程序中。应用程序可以按照如下方式引用和加载该 blob(假设 ULP_APP_NAME 被定义为 ``ulp_app_name``): .. code-block:: c @@ -191,10 +191,10 @@ ULP LP-Core 代码会与 ESP-IDF 项目共同编译,生成一个单独的二 ESP_ERROR_CHECK( ulp_lp_core_run(&cfg) ); -ULP LP-Core 程序流程 ------------------------- +ULP LP 内核程序流程 +------------------- -ULP LP-Core 协处理器如何启动取决于 :cpp:type:`ulp_lp_core_cfg_t` 中选择的唤醒源。最常见的用例是 ULP 定期唤醒,在进行一些测量后唤醒主 CPU,或者再次进入睡眠状态。 +ULP LP 内核协处理器如何启动取决于 :cpp:type:`ulp_lp_core_cfg_t` 中选择的唤醒源。最常见的用例是 ULP 定期唤醒,在进行一些测量后唤醒主 CPU,或者再次进入睡眠状态。 ULP 有以下唤醒源: * :c:macro:`ULP_LP_CORE_WAKEUP_SOURCE_HP_CPU` - LP 内核可以被 HP CPU 唤醒。 @@ -215,10 +215,10 @@ ULP 被唤醒时会经历以下步骤: #. 调用 :cpp:func:`ulp_lp_core_halt` -ULP LP-Core 支持的外设 ------------------------------- +ULP LP 内核支持的外设 +--------------------- -为了增强 ULP LP-Core 协处理器的功能,它可以访问在低功耗电源域运行的外设。ULP LP-Core 协处理器可以在主 CPU 处于睡眠模式时与这些外设进行交互,并在达到唤醒条件时唤醒主 CPU。以下为支持的外设: +为了增强 ULP LP 内核协处理器的功能,它可以访问在低功耗电源域运行的外设。ULP LP 内核协处理器可以在主 CPU 处于睡眠模式时与这些外设进行交互,并在达到唤醒条件时唤醒主 CPU。以下为支持的外设: .. list:: @@ -229,14 +229,14 @@ ULP LP-Core 支持的外设 .. only:: CONFIG_ESP_ROM_HAS_LP_ROM - ULP LP-Core ROM + ULP LP 内核 ROM --------------- - ULP LP-Core ROM 是位于 LP-ROM 中的一小段预编译代码,用户无法修改。与主 CPU 运行的引导加载程序 ROM 代码类似,ULP LP-Core ROM 也在 ULP LP-Core 协处理器启动时执行。该 ROM 代码会初始化 ULP LP-Core 协处理器,随后跳转到用户程序。如果已初始化 LP UART,该 ROM 代码还会打印启动信息。 + ULP LP 内核 ROM 是位于 LP-ROM 中的一小段预编译代码,用户无法修改。与主 CPU 运行的引导加载程序 ROM 代码类似,ULP LP 内核 ROM 也在 ULP LP 内核协处理器启动时执行。该 ROM 代码会初始化 ULP LP 内核协处理器,随后跳转到用户程序。如果已初始化 LP UART,该 ROM 代码还会打印启动信息。 - 如果已将 :cpp:member:`ulp_lp_core_cfg_t::skip_lp_rom_boot` 设置为真,则不会执行 ULP LP-Core ROM 代码。如需尽快唤醒 ULP,同时避免初始化和信息打印产生额外开销,则可使用这一功能。 + 如果已将 :cpp:member:`ulp_lp_core_cfg_t::skip_lp_rom_boot` 设置为真,则不会执行 ULP LP 内核 ROM 代码。如需尽快唤醒 ULP,同时避免初始化和信息打印产生额外开销,则可使用这一功能。 - 除上述启动代码,ULP LP-Core ROM 代码还提供以下功能和接口: + 除上述启动代码,ULP LP 内核 ROM 代码还提供以下功能和接口: * :component_file:`ROM.ld 接口 ` * :component_file:`newlib.ld 接口 ` @@ -244,12 +244,12 @@ ULP LP-Core 支持的外设 在任何情况下,这些函数都存在于 LP-ROM 中,因此在程序中使用这些函数可以减少 ULP 应用程序的 RAM 占用。 -ULP LP-Core 中断 ----------------- +ULP LP 内核中断 +--------------- -配置 LP-Core 协处理器,可以处理各种类型的中断,例如 LP IO 低/高电平中断或是 LP 定时器中断。只需重写 IDF 提供的任何一个弱处理函数,就可以注册一个中断处理程序。所有处理程序可见 :component_file:`ulp_lp_core_interrupts.h `。有关特定目标可使用的中断的详细信息,请参阅 **{IDF_TARGET_NAME} 技术参考手册** [`PDF <{IDF_TARGET_TRM_CN_URL}#ulp>`__]。 +配置 LP 内核协处理器,可以处理各种类型的中断,例如 LP IO 低/高电平中断或是 LP 定时器中断。只需重写 IDF 提供的任何一个弱处理函数,就可以注册一个中断处理程序。所有处理程序可见 :component_file:`ulp_lp_core_interrupts.h `。有关特定目标可使用的中断的详细信息,请参阅 **{IDF_TARGET_NAME} 技术参考手册** [`PDF <{IDF_TARGET_TRM_CN_URL}#ulp>`__]。 -例如,要重写 LP IO 中断的处理程序,可以在 ULP LP-Core 代码中定义以下函数: +例如,要重写 LP IO 中断的处理程序,可以在 ULP LP 内核代码中定义以下函数: .. code-block:: c @@ -260,50 +260,130 @@ ULP LP-Core 中断 :c:macro:`LP_CORE_ISR_ATTR` 宏用于定义中断处理函数,可确保调用中断处理程序时妥善保存并恢复寄存器。 -除了为需要处理的中断源配置相关的中断寄存器外,还要调用 :cpp:func:`ulp_lp_core_intr_enable` 函数,在 LP-Core 中断控制器中使能全局中断。 +除了为需要处理的中断源配置相关的中断寄存器外,还要调用 :cpp:func:`ulp_lp_core_intr_enable` 函数,在 LP 内核中断控制器中使能全局中断。 + +ULP LP 内核时钟配置 +------------------- -调试 ULP LP-Core 应用程序 -------------------------- +{IDF_TARGET_XTAL_FREQ:default="未更新", esp32c5="48 MHz", esp32p4="40 MHz"} -在编程 LP-Core 时,有时很难弄清楚程序未按预期运行的原因。请参考以下策略,调试 LP-Core 程序: +ULP LP 内核的时钟源来自系统时钟 ``LP_FAST_CLK``,详情请参见 `技术参考手册 <{IDF_TARGET_TRM_CN_URL}>`__ > ``复位和时钟``。 -* 使用 LP-UART 打印:LP-Core 可以访问 LP-UART 外设,在主 CPU 处于睡眠状态时独立打印信息。有关使用此驱动程序的示例,请参阅 :example:`system/ulp/lp_core/lp_uart/lp_uart_print`。 +.. only:: SOC_CLK_LP_FAST_SUPPORT_XTAL -* 通过 :ref:`CONFIG_ULP_HP_UART_CONSOLE_PRINT`,将 :cpp:func:`lp_core_printf` 路由到 HP-Core 控制台 UART,可以轻松地将 LP-Core 信息打印到已经连接的 HP-Core 控制台 UART。此方法的缺点是需要主 CPU 处于唤醒状态,并且由于 LP 核与 HP 核未同步,输出可能会交错。 + 在 {IDF_TARGET_NAME} 上,``LP_FAST_CLK`` 支持使用外部 {IDF_TARGET_XTAL_FREQ} 晶振 (XTAL) 作为其时钟源。默认时钟源 ``RTC_FAST_CLOCK`` 的运行频率约为 20 MHz,使用外部晶振时钟后,ULP LP 内核将以更高的频率运行。缺点在于,``LP_FAST_CLK`` 在休眠期间通常会断电以减少功耗,而选择 XTAL 作为时钟源后,休眠期间时钟仍将保持通电,造成功耗增加。因此,如果仅希望在 HP 内核活动时将 LP 内核用作协处理器,则可以使用 XTAL 以提高 LP 内核的性能和频率稳定性。 + + 要启用此功能,请将 :ref:`CONFIG_RTC_FAST_CLK_SRC` 设置为 ``CONFIG_RTC_FAST_CLK_SRC_XTAL``。 + + +调试 ULP LP 内核应用程序 +------------------------ + +在编程 LP 内核时,有时很难弄清楚程序未按预期运行的原因。请参考以下策略,调试 LP 内核程序: + +* 使用 LP-UART 打印:LP 内核可以访问 LP-UART 外设,在主 CPU 处于睡眠状态时独立打印信息。有关使用此驱动程序的示例,请参阅 :example:`system/ulp/lp_core/lp_uart/lp_uart_print`。 + +* 通过 :ref:`CONFIG_ULP_HP_UART_CONSOLE_PRINT`,将 :cpp:func:`lp_core_printf` 路由到 HP-Core 控制台 UART,可以轻松地将 LP 内核信息打印到已经连接的 HP-Core 控制台 UART。此方法的缺点是需要主 CPU 处于唤醒状态,并且由于 LP 内核与 HP 内未同步,输出可能会交错。 * 通过共享变量共享程序状态:如 :ref:`ulp-lp-core-access-variables` 所述,主 CPU 和 ULP 内核都可以轻松访问 RTC 内存中的全局变量。若想了解 ULP 内核的运行状态,可以将状态信息从 ULP 写入变量中,并通过主 CPU 读取信息。这种方法的缺点在于它需要主 CPU 一直处于唤醒状态,而这通常很难实现。另外,若主 CPU 一直处于唤醒状态,可能会掩盖某些问题,因为部分问题只会在特定电源域断电时发生。 -* 紧急处理程序:当检测到异常时,LP-Core 的紧急处理程序会把 LP-Core 寄存器的状态通过 LP-UART 发送出去。将 :ref:`CONFIG_ULP_PANIC_OUTPUT_ENABLE` 选项设置为 ``y``,可以启用紧急处理程序。禁用此选项将减少 LP-Core 应用程序的 LP-RAM 使用量。若想从紧急转储中解析栈回溯,可以使用 esp-idf-monitor_,例如: +* 紧急处理程序:当检测到异常时,LP 内核的紧急处理程序会把 LP 内核寄存器的状态通过 LP-UART 发送出去。将 :ref:`CONFIG_ULP_PANIC_OUTPUT_ENABLE` 选项设置为 ``y``,可以启用紧急处理程序。禁用此选项将减少 LP 内核应用程序的 LP-RAM 使用量。若想从紧急转储中解析栈回溯,可以使用 esp-idf-monitor_,例如: .. code-block:: bash python -m esp_idf_monitor --toolchain-prefix riscv32-esp-elf- --target {IDF_TARGET_NAME} --decode-panic backtrace PATH_TO_ULP_ELF_FILE +调试 ULP LP 内核应用程序:使用 GDB 和 OpenOCD +---------------------------------------------- -应用示例 --------- +与调试 HP 内核类似,也可以用 GDB 和 OpenOCD 来调试 LP 内核上的代码,但要注意其特殊之处和限制条件。 + +调试会话 +~~~~~~~~ -* :example:`system/ulp/lp_core/gpio` 展示了 ULP LP-Core 协处理器在主 CPU 深度睡眠时轮询 GPIO。 +使用支持 LP 内核调试的特殊配置文件来运行 OpenOCD,然后用特殊的 ``gdbinit`` 文件运行 GDB。 + +.. code-block:: bash + + openocd -f board/{IDF_TARGET_PATH_NAME}-lpcore-builtin.cfg + riscv32-esp-elf-gdb -x gdbinit + +以下是带有内联注释的 ``gdbinit`` 文件内容,详细信息请参考下一章节。 + +.. code-block:: bash + + # 连接到目标 + target extended-remote :3333 + # 重置芯片 + mon reset halt + maintenance flush register-cache + # 添加 ULP 程序的符号和调试信息 + add-symbol + # 设置临时硬件断点 + # 如果需要的断点数量超过硬件支持的数量 + thb main + commands + # 在这里设置断点 + # 此时 ULP 程序已加载到 RAM 中 + # 若无可用的硬件断点插槽,GDB 将设置软件断点 + b func1 + b func2 + b func3 + # 恢复执行 + c + end + # 重置后启动主程序 + c + +LP 内核调试特性 +~~~~~~~~~~~~~~~ -.. only:: esp32c6 +.. list:: - * :example:`system/ulp/lp_core/lp_i2c` 展示了 ULP LP-Core 协处理器在主 CPU 深度睡眠时读取外部 I2C 环境光传感器 (BH1750),并在达到阈值时唤醒主 CPU。 + #. 为了方便调试,请在 ULP 应用的 ``CMakeLists.txt`` 文件中添加 ``-O0`` 编译选项。具体操作步骤请参见 :example:`system/ulp/lp_core/debugging/`。 + :not esp32p4: #. LP 内核支持的硬件异常类型有限,例如,写入地址 `0x0` 不会像在 HP 内核上一样造成系统崩溃。启用 LP 内核应用程序的未定义行为检测器 (`ubsan`) 可以捕捉一些错误,从而在一定程度上弥补这一限制。但请注意,这将显著增加代码量,可能会导致应用程序超出 RTC RAM 的容量限制。要启用 `ubsan`,请在 ``CMakeLists.txt`` 文件中添加 ``-fsanitize=undefined -fno-sanitize=shift-base`` 编译选项。具体操作步骤请参见 :example:`system/ulp/lp_core/debugging/`。 + #. 为了调试运行在 LP 内核上的程序,需要先将调试信息和符号加载到 GDB 中。这可以通过 GDB 命令行或在 ``gdbinit`` 文件中完成。具体操作步骤请参见上文。 + #. LP 内核应用程序会在启时会加载到 RAM 中,在此之前设置的所有软件断点都会被覆盖。设置 LP 内核应用断点的最佳时机是在 LP 内核程序运行至 ``main`` 函数之时。 + #. 使用 IDE 时,可能无法配置上述 ``gdbinit`` 文件中的断点操作或命令。因此,请在调试会话开始前预设并禁用所有断点,只保留 ``main`` 函数处的断点。当程序在 ``main`` 处停止时,手动启用其余断点并恢复执行。 -* :example:`system/ulp/lp_core/lp_uart/lp_uart_echo` 展示了低功耗内核上运行的 LP UART 驱动程序如何读取并回显写入串行控制台的数据。 +限制 +~~~~ -* :example:`system/ulp/lp_core/lp_uart/lp_uart_print` 展示了如何在低功耗内核上使用串口打印功能。 +#. 调试场景有限制:目前,当 HP 内核或 LP 内核进入睡眠模式时,将无法调适。 +#. 调试 内核时,OpenOCD 不支持 FreeRTOS,因此无法看到系统中正在运行的任务,但会有几个线程代表 HP 和 LP 内核: -* :example:`system/ulp/lp_core/interrupt` 展示了如何在 LP 内核上注册中断处理程序,接收由主 CPU 触发的中断。 +.. code-block:: bash -* :example:`system/ulp/lp_core/gpio_intr_pulse_counter` 展示了如何在主 CPU 处于 Deep-sleep 模式时,使用 GPIO 中断为脉冲计数。 + (gdb) info thread + Id Target Id Frame + 1 Thread 1 "{IDF_TARGET_PATH_NAME}.cpu0" (Name: {IDF_TARGET_PATH_NAME}.cpu0, state: debug-request) 0x40803772 in esp_cpu_wait_for_intr () + at /home/user/projects/esp/esp-idf/components/esp_hw_support/cpu.c:64 + * 2 Thread 2 "{IDF_TARGET_PATH_NAME}.cpu1" (Name: {IDF_TARGET_PATH_NAME}.cpu1, state: breakpoint) do_things (max=1000000000) + at /home/user/projects/esp/esp-idf/examples/system/ulp/lp_core/debugging/main/lp_core/main.c:21 -* :example:`system/ulp/lp_core/build_system/` 演示了如何为 ULP 应用程序添加自定义的 ``CMakeLists.txt`` 文件。 +#. 在 GDB 中设置硬件断点时,这些断点会同时应用到两个内核上,因此可用的硬件断点数量受 LP 内核支持数量({IDF_TARGET_NAME} 有 {IDF_TARGET_SOC_CPU_BREAKPOINTS_NUM} 个)所限。 +#. OpenOCD 的 flash 支持被禁用。LP 内核应用程序完全在 RAM 中运行,且 GDB 可以为其使用软件断点,因而该限制无关紧要。但若想在 HP 内核运行的代码中调用的 flash 函数(例如 `app_main`)上设置断点,则需要通过 ``hb`` 和 ``thb`` GDB 命令显式请求设置硬件断点。 +#. 由于主程序和 ULP 程序被链接为独立的二进制文件,它们可能会拥有相同名称的全局符号(如函数或变量)。若通过函数名称设置断点,则 GDB 将为所有同名函数设置断点。在调试 LP 内核时,OpenOCD 不支持 flash,因此如果上述函数位于 flash 中,可能会引发问题。此时建议通过源代码行号或函数的内存地址来设置断点。 + +应用示例 +-------- + +.. list:: + + - :example:`system/ulp/lp_core/gpio` 展示了 ULP LP 内核协处理器在主 CPU 深度睡眠时轮询 GPIO。 + :esp32c6: - :example:`system/ulp/lp_core/lp_i2c` 展示了 ULP LP 内核协处理器在主 CPU 深度睡眠时读取外部 I2C 环境光传感器 (BH1750),并在达到阈值时唤醒主 CPU。 + - :example:`system/ulp/lp_core/lp_uart/lp_uart_echo` 展示了低功耗内核上运行的 LP UART 驱动程序如何读取并回显写入串行控制台的数据。 + - :example:`system/ulp/lp_core/lp_uart/lp_uart_print` 展示了如何在低功耗内核上使用串口打印功能。 + - :example:`system/ulp/lp_core/interrupt` 展示了如何在 LP 内核上注册中断处理程序,接收由主 CPU 触发的中断。 + - :example:`system/ulp/lp_core/gpio_intr_pulse_counter` 展示了如何在主 CPU 处于 Deep-sleep 模式时,使用 GPIO 中断为脉冲计数。 + - :example:`system/ulp/lp_core/build_system/` 演示了如何为 ULP 应用程序添加自定义的 ``CMakeLists.txt`` 文件。 + - :example:`system/ulp/lp_core/debugging` 演示了如何使用 GDB 和 OpenOCD 来调试运行在 LP 内核上的代码。 API 参考 -------------- +-------- 主 CPU API 参考 -~~~~~~~~~~~~~~~~~~~~~~ +~~~~~~~~~~~~~~~ .. include-build-file:: inc/ulp_lp_core.inc .. include-build-file:: inc/lp_core_i2c.inc @@ -320,7 +400,7 @@ API 参考 .. include-build-file:: inc/lp_core_types.inc LP 内核 API 参考 -~~~~~~~~~~~~~~~~~~~~~~ +~~~~~~~~~~~~~~~~ .. include-build-file:: inc/ulp_lp_core_utils.inc .. include-build-file:: inc/ulp_lp_core_gpio.inc From 6f306e2dbde9ead3de2f158fe370e08a4037046a Mon Sep 17 00:00:00 2001 From: GengYuchao Date: Thu, 10 Oct 2024 14:42:17 +0800 Subject: [PATCH 118/365] feat: Enable direction finding feature in nimble host only mode --- components/bt/host/nimble/Kconfig.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/bt/host/nimble/Kconfig.in b/components/bt/host/nimble/Kconfig.in index cfde045be4d0..6984cc02923a 100644 --- a/components/bt/host/nimble/Kconfig.in +++ b/components/bt/host/nimble/Kconfig.in @@ -648,7 +648,7 @@ config BT_NIMBLE_PERIODIC_ADV_ENH config BT_NIMBLE_AOA_AOD bool "Direction Finding" - depends on BT_NIMBLE_50_FEATURE_SUPPORT && SOC_BLE_CTE_SUPPORTED + depends on BT_NIMBLE_50_FEATURE_SUPPORT && (BT_CONTROLLER_DISABLED || SOC_BLE_CTE_SUPPORTED) default n help Enable support for Connectionless and Connection Oriented Direction Finding From 611fb654ce44966c6e24f1e08d47ac0bc60adf19 Mon Sep 17 00:00:00 2001 From: morris Date: Sat, 21 Sep 2024 23:02:27 +0800 Subject: [PATCH 119/365] refactor(lcd): clean up GPIO initialization --- .../include/esp_private/gpio.h | 11 +++ components/esp_driver_gpio/src/gpio.c | 2 +- components/esp_lcd/Kconfig | 2 +- components/esp_lcd/i80/esp_lcd_panel_io_i2s.c | 30 ++++---- components/esp_lcd/i80/esp_lcd_panel_io_i80.c | 69 +++++++++---------- components/esp_lcd/include/esp_lcd_io_i80.h | 2 +- components/esp_lcd/linker.lf | 7 +- .../esp_lcd/priv_include/esp_lcd_common.h | 2 + components/esp_lcd/rgb/esp_lcd_panel_rgb.c | 38 +++++----- .../test_apps/rgb_lcd/sdkconfig.ci.iram_safe | 3 - 10 files changed, 81 insertions(+), 85 deletions(-) diff --git a/components/esp_driver_gpio/include/esp_private/gpio.h b/components/esp_driver_gpio/include/esp_private/gpio.h index b2186295c0a5..2e06192f633c 100644 --- a/components/esp_driver_gpio/include/esp_private/gpio.h +++ b/components/esp_driver_gpio/include/esp_private/gpio.h @@ -52,6 +52,17 @@ esp_err_t gpio_sleep_pupd_config_unapply(gpio_num_t gpio_num); */ esp_err_t gpio_func_sel(gpio_num_t gpio_num, uint32_t func); +/** + * @brief Enable output for an IO + * + * @param gpio_num GPIO number + * + * @return + * - ESP_OK Success + * - ESP_ERR_INVALID_ARG GPIO number error + */ +esp_err_t gpio_output_enable(gpio_num_t gpio_num); + /** * @brief Disable output for an IO * diff --git a/components/esp_driver_gpio/src/gpio.c b/components/esp_driver_gpio/src/gpio.c index cffca8e8e834..a63ab11375aa 100644 --- a/components/esp_driver_gpio/src/gpio.c +++ b/components/esp_driver_gpio/src/gpio.c @@ -211,7 +211,7 @@ esp_err_t gpio_output_disable(gpio_num_t gpio_num) return ESP_OK; } -static esp_err_t gpio_output_enable(gpio_num_t gpio_num) +esp_err_t gpio_output_enable(gpio_num_t gpio_num) { GPIO_CHECK(GPIO_IS_VALID_OUTPUT_GPIO(gpio_num), "GPIO output gpio_num error", ESP_ERR_INVALID_ARG); gpio_hal_matrix_out_default(gpio_context.gpio_hal, gpio_num); // No peripheral output signal routed to the pin, just as a simple GPIO output diff --git a/components/esp_lcd/Kconfig b/components/esp_lcd/Kconfig index 1e6ee9407cb1..76d9aaa8aefe 100644 --- a/components/esp_lcd/Kconfig +++ b/components/esp_lcd/Kconfig @@ -12,6 +12,7 @@ menu "LCD and Touch Panel" if SOC_LCD_RGB_SUPPORTED config LCD_RGB_ISR_IRAM_SAFE bool "RGB LCD ISR IRAM-Safe" + select GDMA_ISR_IRAM_SAFE # bounce buffer mode relies on GDMA EOF interrupt default n help Ensure the LCD interrupt is IRAM-Safe by allowing the interrupt handler to be @@ -22,7 +23,6 @@ menu "LCD and Touch Panel" config LCD_RGB_RESTART_IN_VSYNC bool "Restart transmission in VSYNC" default n - select GDMA_CTRL_FUNC_IN_IRAM # need to restart GDMA in the LCD ISR help Reset the GDMA channel every VBlank to stop permanent desyncs from happening. Only need to enable it when in your application, the DMA can't deliver data diff --git a/components/esp_lcd/i80/esp_lcd_panel_io_i2s.c b/components/esp_lcd/i80/esp_lcd_panel_io_i2s.c index 0851381033e4..e5cbf45a654f 100644 --- a/components/esp_lcd/i80/esp_lcd_panel_io_i2s.c +++ b/components/esp_lcd/i80/esp_lcd_panel_io_i2s.c @@ -39,14 +39,12 @@ #include "esp_private/periph_ctrl.h" #include "esp_private/i2s_platform.h" #include "esp_private/gdma_link.h" +#include "esp_private/gpio.h" #include "soc/lcd_periph.h" #include "hal/i2s_hal.h" #include "hal/i2s_ll.h" #include "hal/i2s_types.h" -// the DMA descriptor used by esp32 and esp32s2, each descriptor can carry 4095 bytes at most -#define LCD_DMA_DESCRIPTOR_BUFFER_MAX_SIZE 4095 - static const char *TAG = "lcd_panel.io.i80"; typedef struct esp_lcd_i80_bus_t esp_lcd_i80_bus_t; @@ -61,7 +59,7 @@ static esp_err_t i2s_lcd_init_dma_link(esp_lcd_i80_bus_handle_t bus); static esp_err_t i2s_lcd_configure_gpio(esp_lcd_i80_bus_handle_t bus, const esp_lcd_i80_bus_config_t *bus_config); static void i2s_lcd_trigger_quick_trans_done_event(esp_lcd_i80_bus_handle_t bus); static void lcd_i80_switch_devices(lcd_panel_io_i80_t *cur_device, lcd_panel_io_i80_t *next_device); -static void lcd_default_isr_handler(void *args); +static void i2s_lcd_default_isr_handler(void *args); static esp_err_t panel_io_i80_register_event_callbacks(esp_lcd_panel_io_handle_t io, const esp_lcd_panel_io_callbacks_t *cbs, void *user_ctx); struct esp_lcd_i80_bus_t { @@ -188,7 +186,7 @@ esp_err_t esp_lcd_new_i80_bus(const esp_lcd_i80_bus_config_t *bus_config, esp_lc int isr_flags = LCD_I80_INTR_ALLOC_FLAGS | ESP_INTR_FLAG_SHARED | ESP_INTR_FLAG_LOWMED; ret = esp_intr_alloc_intrstatus(lcd_periph_i2s_signals.buses[bus->bus_id].irq_id, isr_flags, (uint32_t)i2s_ll_get_intr_status_reg(bus->hal.dev), - I2S_LL_EVENT_TX_EOF, lcd_default_isr_handler, bus, &bus->intr); + I2S_LL_EVENT_TX_EOF, i2s_lcd_default_isr_handler, bus, &bus->intr); ESP_GOTO_ON_ERROR(ret, err, TAG, "install interrupt failed"); i2s_ll_enable_intr(bus->hal.dev, I2S_LL_EVENT_TX_EOF, false); // disable interrupt temporarily i2s_ll_clear_intr_status(bus->hal.dev, I2S_LL_EVENT_TX_EOF); // clear pending interrupt @@ -317,8 +315,8 @@ esp_err_t esp_lcd_new_panel_io_i80(esp_lcd_i80_bus_handle_t bus, const esp_lcd_p if (io_config->cs_gpio_num >= 0) { // CS signal is controlled by software gpio_set_level(io_config->cs_gpio_num, !io_config->flags.cs_active_high); // de-assert by default - gpio_set_direction(io_config->cs_gpio_num, GPIO_MODE_OUTPUT); - gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[io_config->cs_gpio_num], PIN_FUNC_GPIO); + gpio_func_sel(io_config->cs_gpio_num, PIN_FUNC_GPIO); + gpio_output_enable(io_config->cs_gpio_num); } *ret_io = &(i80_device->base); ESP_LOGD(TAG, "new i80 lcd panel io @%p on bus(%d), pclk=%"PRIu32"Hz", i80_device, bus->bus_id, i80_device->pclk_hz); @@ -362,9 +360,8 @@ static esp_err_t panel_io_i80_del(esp_lcd_panel_io_t *io) LIST_REMOVE(i80_device, device_list_entry); portEXIT_CRITICAL(&bus->spinlock); - // reset CS GPIO if (i80_device->cs_gpio_num >= 0) { - gpio_reset_pin(i80_device->cs_gpio_num); + gpio_output_disable(i80_device->cs_gpio_num); } ESP_LOGD(TAG, "del i80 lcd panel io @%p", i80_device); @@ -648,7 +645,7 @@ static esp_err_t panel_io_i80_tx_color(esp_lcd_panel_io_t *io, int lcd_cmd, cons xQueueSend(next_device->trans_queue, &trans_desc, portMAX_DELAY); next_device->num_trans_inflight++; // enable interrupt and go into isr handler, where we fetch the transactions from trans_queue and start it - // we will go into `lcd_default_isr_handler` almost at once, because the "trans done" event is active at the moment + // we will go into `i2s_lcd_default_isr_handler` almost at once, because the "trans done" event is active at the moment esp_intr_enable(bus->intr); return ESP_OK; } @@ -698,21 +695,20 @@ static esp_err_t i2s_lcd_configure_gpio(esp_lcd_i80_bus_handle_t bus, const esp_ // connect peripheral signals via GPIO matrix // data line for (size_t i = 0; i < bus_config->bus_width; i++) { - gpio_set_direction(bus_config->data_gpio_nums[i], GPIO_MODE_OUTPUT); + gpio_func_sel(bus_config->data_gpio_nums[i], PIN_FUNC_GPIO); + // the esp_rom_gpio_connect_out_signal function will also help enable the output path properly #if SOC_I2S_TRANS_SIZE_ALIGN_WORD esp_rom_gpio_connect_out_signal(bus_config->data_gpio_nums[i], lcd_periph_i2s_signals.buses[bus_id].data_sigs[i + 8], false, false); #else esp_rom_gpio_connect_out_signal(bus_config->data_gpio_nums[i], lcd_periph_i2s_signals.buses[bus_id].data_sigs[i + SOC_I2S_MAX_DATA_WIDTH - bus_config->bus_width], false, false); #endif - gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[bus_config->data_gpio_nums[i]], PIN_FUNC_GPIO); } // WR signal (pclk) - gpio_set_direction(bus_config->wr_gpio_num, GPIO_MODE_OUTPUT); + gpio_func_sel(bus_config->wr_gpio_num, PIN_FUNC_GPIO); esp_rom_gpio_connect_out_signal(bus_config->wr_gpio_num, lcd_periph_i2s_signals.buses[bus_id].wr_sig, true, false); - gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[bus_config->wr_gpio_num], PIN_FUNC_GPIO); // DC signal is controlled by software, set as general purpose IO - gpio_set_direction(bus_config->dc_gpio_num, GPIO_MODE_OUTPUT); - gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[bus_config->dc_gpio_num], PIN_FUNC_GPIO); + gpio_func_sel(bus_config->dc_gpio_num, PIN_FUNC_GPIO); + gpio_output_enable(bus_config->dc_gpio_num); return ESP_OK; } @@ -756,7 +752,7 @@ static void lcd_i80_switch_devices(lcd_panel_io_i80_t *cur_device, lcd_panel_io_ bus->cur_device = next_device; } -static IRAM_ATTR void lcd_default_isr_handler(void *args) +static IRAM_ATTR void i2s_lcd_default_isr_handler(void *args) { esp_lcd_i80_bus_t *bus = (esp_lcd_i80_bus_t *)args; lcd_i80_trans_descriptor_t *trans_desc = NULL; diff --git a/components/esp_lcd/i80/esp_lcd_panel_io_i80.c b/components/esp_lcd/i80/esp_lcd_panel_io_i80.c index 96b8fb4ca8b5..d7a29f445041 100644 --- a/components/esp_lcd/i80/esp_lcd_panel_io_i80.c +++ b/components/esp_lcd/i80/esp_lcd_panel_io_i80.c @@ -43,8 +43,6 @@ #include "hal/cache_ll.h" #include "hal/cache_hal.h" -#define LCD_DMA_DESCRIPTOR_BUFFER_MAX_SIZE 4095 - #if defined(SOC_GDMA_TRIG_PERIPH_LCD0_BUS) && (SOC_GDMA_TRIG_PERIPH_LCD0_BUS == SOC_GDMA_BUS_AHB) #define LCD_GDMA_NEW_CHANNEL gdma_new_ahb_channel #define LCD_GDMA_DESCRIPTOR_ALIGN 4 @@ -76,7 +74,7 @@ static esp_err_t lcd_i80_select_periph_clock(esp_lcd_i80_bus_handle_t bus, lcd_c static esp_err_t lcd_i80_bus_configure_gpio(esp_lcd_i80_bus_handle_t bus, const esp_lcd_i80_bus_config_t *bus_config); static void lcd_i80_switch_devices(lcd_panel_io_i80_t *cur_device, lcd_panel_io_i80_t *next_device); static void lcd_start_transaction(esp_lcd_i80_bus_t *bus, lcd_i80_trans_descriptor_t *trans_desc); -static void lcd_default_isr_handler(void *args); +static void i80_lcd_default_isr_handler(void *args); static esp_err_t panel_io_i80_register_event_callbacks(esp_lcd_panel_io_handle_t io, const esp_lcd_panel_io_callbacks_t *cbs, void *user_ctx); struct esp_lcd_i80_bus_t { @@ -157,18 +155,6 @@ esp_err_t esp_lcd_new_i80_bus(const esp_lcd_i80_bus_config_t *bus_config, esp_lc // allocate i80 bus memory bus = heap_caps_calloc(1, sizeof(esp_lcd_i80_bus_t), LCD_I80_MEM_ALLOC_CAPS); ESP_GOTO_ON_FALSE(bus, ESP_ERR_NO_MEM, err, TAG, "no mem for i80 bus"); - size_t num_dma_nodes = bus_config->max_transfer_bytes / LCD_DMA_DESCRIPTOR_BUFFER_MAX_SIZE + 1; - // create DMA link list - gdma_link_list_config_t dma_link_config = { - .buffer_alignment = 1, // no special buffer alignment for LCD TX buffer - .item_alignment = LCD_GDMA_DESCRIPTOR_ALIGN, - .num_items = num_dma_nodes, - .flags = { - .check_owner = true, - }, - }; - ESP_GOTO_ON_ERROR(gdma_new_link_list(&dma_link_config, &bus->dma_link), err, TAG, "create DMA link list failed"); - bus->num_dma_nodes = num_dma_nodes; bus->bus_width = bus_config->bus_width; bus->bus_id = -1; // allocate the format buffer from internal memory, with DMA capability @@ -208,7 +194,7 @@ esp_err_t esp_lcd_new_i80_bus(const esp_lcd_i80_bus_config_t *bus_config, esp_lc int isr_flags = LCD_I80_INTR_ALLOC_FLAGS | ESP_INTR_FLAG_SHARED | ESP_INTR_FLAG_LOWMED; ret = esp_intr_alloc_intrstatus(lcd_periph_i80_signals.buses[bus_id].irq_id, isr_flags, (uint32_t)lcd_ll_get_interrupt_status_reg(bus->hal.dev), - LCD_LL_EVENT_TRANS_DONE, lcd_default_isr_handler, bus, &bus->intr); + LCD_LL_EVENT_TRANS_DONE, i80_lcd_default_isr_handler, bus, &bus->intr); ESP_GOTO_ON_ERROR(ret, err, TAG, "install interrupt failed"); lcd_ll_enable_interrupt(bus->hal.dev, LCD_LL_EVENT_TRANS_DONE, false); // disable all interrupts lcd_ll_clear_interrupt_status(bus->hal.dev, UINT32_MAX); // clear pending interrupt @@ -355,9 +341,10 @@ esp_err_t esp_lcd_new_panel_io_i80(esp_lcd_i80_bus_handle_t bus, const esp_lcd_p // we only configure the CS GPIO as output, don't connect to the peripheral signal at the moment // we will connect the CS GPIO to peripheral signal when switching devices in lcd_i80_switch_devices() if (io_config->cs_gpio_num >= 0) { - gpio_set_level(io_config->cs_gpio_num, !io_config->flags.cs_active_high); - gpio_set_direction(io_config->cs_gpio_num, GPIO_MODE_OUTPUT); + // CS signal is controlled by software + gpio_set_level(io_config->cs_gpio_num, !io_config->flags.cs_active_high); // de-assert by default gpio_func_sel(io_config->cs_gpio_num, PIN_FUNC_GPIO); + gpio_output_enable(io_config->cs_gpio_num); } *ret_io = &(i80_device->base); ESP_LOGD(TAG, "new i80 lcd panel io @%p on bus(%d)", i80_device, bus->bus_id); @@ -393,9 +380,8 @@ static esp_err_t panel_io_i80_del(esp_lcd_panel_io_t *io) LIST_REMOVE(i80_device, device_list_entry); portEXIT_CRITICAL(&bus->spinlock); - // reset CS to normal GPIO if (i80_device->cs_gpio_num >= 0) { - gpio_reset_pin(i80_device->cs_gpio_num); + gpio_output_disable(i80_device->cs_gpio_num); } ESP_LOGD(TAG, "del i80 lcd panel io @%p", i80_device); @@ -572,7 +558,7 @@ static esp_err_t panel_io_i80_tx_color(esp_lcd_panel_io_t *io, int lcd_cmd, cons xQueueSend(i80_device->trans_queue, &trans_desc, portMAX_DELAY); i80_device->num_trans_inflight++; // enable interrupt and go into isr handler, where we fetch the transactions from trans_queue and start it - // we will go into `lcd_default_isr_handler` almost at once, because the "trans done" event is active at the moment + // we will go into `i80_lcd_default_isr_handler` almost at once, because the "trans done" event is active at the moment esp_intr_enable(bus->intr); return ESP_OK; } @@ -609,7 +595,7 @@ static esp_err_t lcd_i80_init_dma_link(esp_lcd_i80_bus_handle_t bus, const esp_l .direction = GDMA_CHANNEL_DIRECTION_TX, }; ret = LCD_GDMA_NEW_CHANNEL(&dma_chan_config, &bus->dma_chan); - ESP_GOTO_ON_ERROR(ret, err, TAG, "alloc DMA channel failed"); + ESP_RETURN_ON_ERROR(ret, TAG, "alloc DMA channel failed"); gdma_connect(bus->dma_chan, GDMA_MAKE_TRIGGER(GDMA_TRIG_PERIPH_LCD, 0)); gdma_strategy_config_t strategy_config = { .auto_update_desc = true, @@ -621,14 +607,23 @@ static esp_err_t lcd_i80_init_dma_link(esp_lcd_i80_bus_handle_t bus, const esp_l .max_data_burst_size = bus_config->dma_burst_size ? bus_config->dma_burst_size : 16, // Enable DMA burst transfer for better performance .access_ext_mem = true, // the LCD can carry pixel buffer from the external memory }; - ESP_GOTO_ON_ERROR(gdma_config_transfer(bus->dma_chan, &trans_cfg), err, TAG, "config DMA transfer failed"); + ESP_RETURN_ON_ERROR(gdma_config_transfer(bus->dma_chan, &trans_cfg), TAG, "config DMA transfer failed"); gdma_get_alignment_constraints(bus->dma_chan, &bus->int_mem_align, &bus->ext_mem_align); + + size_t num_dma_nodes = bus_config->max_transfer_bytes / LCD_DMA_DESCRIPTOR_BUFFER_MAX_SIZE + 1; + // create DMA link list + gdma_link_list_config_t dma_link_config = { + .buffer_alignment = MAX(bus->int_mem_align, bus->ext_mem_align), + .item_alignment = LCD_GDMA_DESCRIPTOR_ALIGN, + .num_items = num_dma_nodes, + .flags = { + .check_owner = true, + }, + }; + ESP_RETURN_ON_ERROR(gdma_new_link_list(&dma_link_config, &bus->dma_link), TAG, "create DMA link list failed"); + bus->num_dma_nodes = num_dma_nodes; + return ESP_OK; -err: - if (bus->dma_chan) { - gdma_del_channel(bus->dma_chan); - } - return ret; } void *esp_lcd_i80_alloc_draw_buffer(esp_lcd_panel_io_handle_t io, size_t size, uint32_t caps) @@ -660,17 +655,18 @@ static esp_err_t lcd_i80_bus_configure_gpio(esp_lcd_i80_bus_handle_t bus, const // Set the number of output data lines lcd_ll_set_data_wire_width(bus->hal.dev, bus_config->bus_width); // connect peripheral signals via GPIO matrix + // data lines for (size_t i = 0; i < bus_config->bus_width; i++) { - gpio_set_direction(bus_config->data_gpio_nums[i], GPIO_MODE_OUTPUT); - esp_rom_gpio_connect_out_signal(bus_config->data_gpio_nums[i], lcd_periph_i80_signals.buses[bus_id].data_sigs[i], false, false); gpio_func_sel(bus_config->data_gpio_nums[i], PIN_FUNC_GPIO); + // the esp_rom_gpio_connect_out_signal function will also help enable the output path properly + esp_rom_gpio_connect_out_signal(bus_config->data_gpio_nums[i], lcd_periph_i80_signals.buses[bus_id].data_sigs[i], false, false); } - gpio_set_direction(bus_config->dc_gpio_num, GPIO_MODE_OUTPUT); - esp_rom_gpio_connect_out_signal(bus_config->dc_gpio_num, lcd_periph_i80_signals.buses[bus_id].dc_sig, false, false); + // D/C signal gpio_func_sel(bus_config->dc_gpio_num, PIN_FUNC_GPIO); - gpio_set_direction(bus_config->wr_gpio_num, GPIO_MODE_OUTPUT); - esp_rom_gpio_connect_out_signal(bus_config->wr_gpio_num, lcd_periph_i80_signals.buses[bus_id].wr_sig, false, false); + esp_rom_gpio_connect_out_signal(bus_config->dc_gpio_num, lcd_periph_i80_signals.buses[bus_id].dc_sig, false, false); + // WR signal (PCLK) gpio_func_sel(bus_config->wr_gpio_num, PIN_FUNC_GPIO); + esp_rom_gpio_connect_out_signal(bus_config->wr_gpio_num, lcd_periph_i80_signals.buses[bus_id].wr_sig, false, false); return ESP_OK; } @@ -722,8 +718,7 @@ static void lcd_i80_switch_devices(lcd_panel_io_i80_t *cur_device, lcd_panel_io_ lcd_ll_set_dc_level(bus->hal.dev, next_device->dc_levels.dc_idle_level, next_device->dc_levels.dc_cmd_level, next_device->dc_levels.dc_dummy_level, next_device->dc_levels.dc_data_level); if (cur_device && cur_device->cs_gpio_num >= 0) { - // disconnect current CS GPIO from peripheral signal - esp_rom_gpio_connect_out_signal(cur_device->cs_gpio_num, SIG_GPIO_OUT_IDX, false, false); + gpio_output_disable(cur_device->cs_gpio_num); } if (next_device->cs_gpio_num >= 0) { // connect CS signal to the new device @@ -733,7 +728,7 @@ static void lcd_i80_switch_devices(lcd_panel_io_i80_t *cur_device, lcd_panel_io_ } } -IRAM_ATTR static void lcd_default_isr_handler(void *args) +IRAM_ATTR static void i80_lcd_default_isr_handler(void *args) { esp_lcd_i80_bus_t *bus = (esp_lcd_i80_bus_t *)args; lcd_i80_trans_descriptor_t *trans_desc = NULL; diff --git a/components/esp_lcd/include/esp_lcd_io_i80.h b/components/esp_lcd/include/esp_lcd_io_i80.h index 7b6bd90422f1..f2885390f5fe 100644 --- a/components/esp_lcd/include/esp_lcd_io_i80.h +++ b/components/esp_lcd/include/esp_lcd_io_i80.h @@ -30,7 +30,7 @@ typedef struct { size_t bus_width; /*!< Number of data lines, 8 or 16 */ size_t max_transfer_bytes; /*!< Maximum transfer size, this determines the length of internal DMA link */ union { - size_t psram_trans_align; /*!< DMA transfer alignment for data allocated from PSRAM */ + size_t psram_trans_align __attribute__((deprecated)); /*!< DMA transfer alignment for data allocated from PSRAM */ size_t dma_burst_size; /*!< DMA burst size, in bytes */ }; size_t sram_trans_align __attribute__((deprecated)); /*!< DMA transfer alignment for data allocated from SRAM */ diff --git a/components/esp_lcd/linker.lf b/components/esp_lcd/linker.lf index 6e3aa0d3cda7..513429d536e5 100644 --- a/components/esp_lcd/linker.lf +++ b/components/esp_lcd/linker.lf @@ -1,8 +1,9 @@ -[mapping:esp_lcd_driver] -archive: libesp_lcd.a +[mapping:esp_lcd_gdma] +archive: libesp_hw_support.a entries: if LCD_RGB_ISR_IRAM_SAFE = y: - esp_lcd_common: lcd_com_mount_dma_data (noflash) + gdma: gdma_reset (noflash) + gdma: gdma_start (noflash) [mapping:esp_lcd_hal] archive: libhal.a diff --git a/components/esp_lcd/priv_include/esp_lcd_common.h b/components/esp_lcd/priv_include/esp_lcd_common.h index a7b8ae6161ef..b57d37a787c7 100644 --- a/components/esp_lcd/priv_include/esp_lcd_common.h +++ b/components/esp_lcd/priv_include/esp_lcd_common.h @@ -33,6 +33,8 @@ extern "C" { #define LCD_CLOCK_SRC_ATOMIC() #endif +#define LCD_DMA_DESCRIPTOR_BUFFER_MAX_SIZE 4095 + #if SOC_LCDCAM_SUPPORTED typedef enum { diff --git a/components/esp_lcd/rgb/esp_lcd_panel_rgb.c b/components/esp_lcd/rgb/esp_lcd_panel_rgb.c index 60165fc1c532..f105ddf7cc4a 100644 --- a/components/esp_lcd/rgb/esp_lcd_panel_rgb.c +++ b/components/esp_lcd/rgb/esp_lcd_panel_rgb.c @@ -28,17 +28,17 @@ #include "soc/soc_caps.h" #include "esp_clk_tree.h" #include "hal/dma_types.h" -#include "hal/gpio_hal.h" #include "esp_private/gdma.h" #include "driver/gpio.h" #include "esp_bit_defs.h" #include "esp_private/esp_clk_tree_common.h" #include "esp_private/periph_ctrl.h" +#include "esp_private/gpio.h" #include "esp_psram.h" #include "esp_lcd_common.h" #include "esp_memory_utils.h" #include "soc/lcd_periph.h" -#include "soc/soc_caps.h" +#include "soc/io_mux_reg.h" #include "hal/lcd_hal.h" #include "hal/lcd_ll.h" #include "hal/cache_hal.h" @@ -84,7 +84,7 @@ static esp_err_t lcd_rgb_create_dma_channel(esp_rgb_panel_t *panel); static void lcd_rgb_panel_init_trans_link(esp_rgb_panel_t *panel); static esp_err_t lcd_rgb_panel_configure_gpio(esp_rgb_panel_t *panel, const esp_lcd_rgb_panel_config_t *panel_config); static void lcd_rgb_panel_start_transmission(esp_rgb_panel_t *rgb_panel); -static void lcd_default_isr_handler(void *args); +static void rgb_lcd_default_isr_handler(void *args); struct esp_rgb_panel_t { esp_lcd_panel_t base; // Base class of generic lcd panel @@ -336,7 +336,7 @@ esp_err_t esp_lcd_new_rgb_panel(const esp_lcd_rgb_panel_config_t *rgb_panel_conf int isr_flags = LCD_RGB_INTR_ALLOC_FLAGS | ESP_INTR_FLAG_SHARED | ESP_INTR_FLAG_LOWMED; ret = esp_intr_alloc_intrstatus(lcd_periph_rgb_signals.panels[panel_id].irq_id, isr_flags, (uint32_t)lcd_ll_get_interrupt_status_reg(rgb_panel->hal.dev), - LCD_LL_EVENT_VSYNC_END, lcd_default_isr_handler, rgb_panel, &rgb_panel->intr); + LCD_LL_EVENT_VSYNC_END, rgb_lcd_default_isr_handler, rgb_panel, &rgb_panel->intr); ESP_GOTO_ON_ERROR(ret, err, TAG, "install interrupt failed"); lcd_ll_enable_interrupt(rgb_panel->hal.dev, LCD_LL_EVENT_VSYNC_END, false); // disable all interrupts lcd_ll_clear_interrupt_status(rgb_panel->hal.dev, UINT32_MAX); // clear pending interrupt @@ -848,51 +848,45 @@ static esp_err_t rgb_panel_disp_on_off(esp_lcd_panel_t *panel, bool on_off) return ESP_OK; } -static esp_err_t lcd_rgb_panel_configure_gpio(esp_rgb_panel_t *panel, const esp_lcd_rgb_panel_config_t *panel_config) +static esp_err_t lcd_rgb_panel_configure_gpio(esp_rgb_panel_t *rgb_panel, const esp_lcd_rgb_panel_config_t *panel_config) { - int panel_id = panel->panel_id; + int panel_id = rgb_panel->panel_id; // Set the number of output data lines - lcd_ll_set_data_wire_width(panel->hal.dev, panel_config->data_width); + lcd_ll_set_data_wire_width(rgb_panel->hal.dev, panel_config->data_width); // connect peripheral signals via GPIO matrix for (size_t i = 0; i < panel_config->data_width; i++) { if (panel_config->data_gpio_nums[i] >= 0) { - gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[panel_config->data_gpio_nums[i]], PIN_FUNC_GPIO); - gpio_set_direction(panel_config->data_gpio_nums[i], GPIO_MODE_OUTPUT); + gpio_func_sel(panel_config->data_gpio_nums[i], PIN_FUNC_GPIO); esp_rom_gpio_connect_out_signal(panel_config->data_gpio_nums[i], lcd_periph_rgb_signals.panels[panel_id].data_sigs[i], false, false); } } if (panel_config->hsync_gpio_num >= 0) { - gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[panel_config->hsync_gpio_num], PIN_FUNC_GPIO); - gpio_set_direction(panel_config->hsync_gpio_num, GPIO_MODE_OUTPUT); + gpio_func_sel(panel_config->hsync_gpio_num, PIN_FUNC_GPIO); esp_rom_gpio_connect_out_signal(panel_config->hsync_gpio_num, lcd_periph_rgb_signals.panels[panel_id].hsync_sig, false, false); } if (panel_config->vsync_gpio_num >= 0) { - gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[panel_config->vsync_gpio_num], PIN_FUNC_GPIO); - gpio_set_direction(panel_config->vsync_gpio_num, GPIO_MODE_OUTPUT); + gpio_func_sel(panel_config->vsync_gpio_num, PIN_FUNC_GPIO); esp_rom_gpio_connect_out_signal(panel_config->vsync_gpio_num, lcd_periph_rgb_signals.panels[panel_id].vsync_sig, false, false); } // PCLK may not be necessary in some cases (i.e. VGA output) if (panel_config->pclk_gpio_num >= 0) { - gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[panel_config->pclk_gpio_num], PIN_FUNC_GPIO); - gpio_set_direction(panel_config->pclk_gpio_num, GPIO_MODE_OUTPUT); + gpio_func_sel(panel_config->pclk_gpio_num, PIN_FUNC_GPIO); esp_rom_gpio_connect_out_signal(panel_config->pclk_gpio_num, lcd_periph_rgb_signals.panels[panel_id].pclk_sig, false, false); } // DE signal might not be necessary for some RGB LCD if (panel_config->de_gpio_num >= 0) { - gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[panel_config->de_gpio_num], PIN_FUNC_GPIO); - gpio_set_direction(panel_config->de_gpio_num, GPIO_MODE_OUTPUT); + gpio_func_sel(panel_config->de_gpio_num, PIN_FUNC_GPIO); esp_rom_gpio_connect_out_signal(panel_config->de_gpio_num, lcd_periph_rgb_signals.panels[panel_id].de_sig, false, false); } - // disp enable GPIO is optional + // disp enable GPIO is optional, it is a general purpose output GPIO if (panel_config->disp_gpio_num >= 0) { - gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[panel_config->disp_gpio_num], PIN_FUNC_GPIO); - gpio_set_direction(panel_config->disp_gpio_num, GPIO_MODE_OUTPUT); - esp_rom_gpio_connect_out_signal(panel_config->disp_gpio_num, SIG_GPIO_OUT_IDX, false, false); + gpio_func_sel(panel_config->disp_gpio_num, PIN_FUNC_GPIO); + gpio_output_enable(panel_config->disp_gpio_num); } return ESP_OK; } @@ -1147,7 +1141,7 @@ IRAM_ATTR static void lcd_rgb_panel_try_update_pclk(esp_rgb_panel_t *rgb_panel) portEXIT_CRITICAL_ISR(&rgb_panel->spinlock); } -IRAM_ATTR static void lcd_default_isr_handler(void *args) +IRAM_ATTR static void rgb_lcd_default_isr_handler(void *args) { esp_rgb_panel_t *rgb_panel = (esp_rgb_panel_t *)args; bool need_yield = false; diff --git a/components/esp_lcd/test_apps/rgb_lcd/sdkconfig.ci.iram_safe b/components/esp_lcd/test_apps/rgb_lcd/sdkconfig.ci.iram_safe index 0643ce8884a5..a0efad79df16 100644 --- a/components/esp_lcd/test_apps/rgb_lcd/sdkconfig.ci.iram_safe +++ b/components/esp_lcd/test_apps/rgb_lcd/sdkconfig.ci.iram_safe @@ -1,8 +1,5 @@ CONFIG_COMPILER_DUMP_RTL_FILES=y CONFIG_LCD_RGB_ISR_IRAM_SAFE=y -CONFIG_GDMA_CTRL_FUNC_IN_IRAM=y -# bounce buffer mode relies on GDMA EOF interrupt to be service-able -CONFIG_GDMA_ISR_IRAM_SAFE=y CONFIG_COMPILER_OPTIMIZATION_NONE=y # silent the error check, as the error string are stored in rodata, causing RTL check failure CONFIG_COMPILER_OPTIMIZATION_CHECKS_SILENT=y From d6ac628f7ae9d354f5672d1ae0e3eb71a7f82d4b Mon Sep 17 00:00:00 2001 From: morris Date: Thu, 10 Oct 2024 15:56:55 +0800 Subject: [PATCH 120/365] change(esp_rom): comment out conflict gpio functions The GPIO function names has conflict with the public API used by esp_driver_gpio component. For now, we simply comment out the conflict ones. Later, we should consider reusing the GPIO rom APIs. --- components/esp_rom/esp32c2/ld/esp32c2.rom.ld | 4 ++-- components/esp_rom/esp32c3/ld/esp32c3.rom.ld | 4 ++-- components/esp_rom/esp32c5/ld/esp32c5.rom.ld | 4 ++-- components/esp_rom/esp32c6/ld/esp32c6.rom.ld | 4 ++-- components/esp_rom/esp32c61/ld/esp32c61.rom.ld | 4 ++-- components/esp_rom/esp32h2/ld/esp32h2.rom.ld | 4 ++-- components/esp_rom/esp32p4/ld/esp32p4.rom.ld | 4 ++-- components/esp_rom/esp32p4/ld/esp32p4lp.rom.ld | 4 ++-- components/esp_rom/esp32s3/ld/esp32s3.rom.ld | 4 ++-- 9 files changed, 18 insertions(+), 18 deletions(-) diff --git a/components/esp_rom/esp32c2/ld/esp32c2.rom.ld b/components/esp_rom/esp32c2/ld/esp32c2.rom.ld index 5aad6135888f..dd40a0253b9f 100644 --- a/components/esp_rom/esp32c2/ld/esp32c2.rom.ld +++ b/components/esp_rom/esp32c2/ld/esp32c2.rom.ld @@ -361,8 +361,8 @@ ets_get_xtal_freq = 0x40000784; gpio_input_get = 0x40000788; gpio_matrix_in = 0x4000078c; gpio_matrix_out = 0x40000790; -gpio_output_disable = 0x40000794; -gpio_output_enable = 0x40000798; +/* gpio_output_disable = 0x40000794; */ +/* gpio_output_enable = 0x40000798; */ gpio_output_set = 0x4000079c; gpio_pad_hold = 0x400007a0; gpio_pad_input_disable = 0x400007a4; diff --git a/components/esp_rom/esp32c3/ld/esp32c3.rom.ld b/components/esp_rom/esp32c3/ld/esp32c3.rom.ld index 559f5cade6e7..1299d2f21a68 100644 --- a/components/esp_rom/esp32c3/ld/esp32c3.rom.ld +++ b/components/esp_rom/esp32c3/ld/esp32c3.rom.ld @@ -366,8 +366,8 @@ ets_get_xtal_freq = 0x40000598; gpio_input_get = 0x4000059c; gpio_matrix_in = 0x400005a0; gpio_matrix_out = 0x400005a4; -gpio_output_disable = 0x400005a8; -gpio_output_enable = 0x400005ac; +/* gpio_output_disable = 0x400005a8; */ +/* gpio_output_enable = 0x400005ac; */ gpio_output_set = 0x400005b0; gpio_pad_hold = 0x400005b4; gpio_pad_input_disable = 0x400005b8; diff --git a/components/esp_rom/esp32c5/ld/esp32c5.rom.ld b/components/esp_rom/esp32c5/ld/esp32c5.rom.ld index 3f5b833a297d..7f5148d682f8 100644 --- a/components/esp_rom/esp32c5/ld/esp32c5.rom.ld +++ b/components/esp_rom/esp32c5/ld/esp32c5.rom.ld @@ -258,8 +258,8 @@ gpio_get_input_level = 0x4000070c; gpio_matrix_in = 0x40000710; gpio_matrix_out = 0x40000714; gpio_bypass_matrix_in = 0x40000718; -gpio_output_disable = 0x4000071c; -gpio_output_enable = 0x40000720; +/* gpio_output_disable = 0x4000071c; */ +/* gpio_output_enable = 0x40000720; */ gpio_pad_input_disable = 0x40000724; gpio_pad_input_enable = 0x40000728; gpio_pad_pulldown = 0x4000072c; diff --git a/components/esp_rom/esp32c6/ld/esp32c6.rom.ld b/components/esp_rom/esp32c6/ld/esp32c6.rom.ld index f8ea9d4d3e46..2af963d50873 100644 --- a/components/esp_rom/esp32c6/ld/esp32c6.rom.ld +++ b/components/esp_rom/esp32c6/ld/esp32c6.rom.ld @@ -238,8 +238,8 @@ ets_clk_mspi_apb_wait_ready = 0x400006d0; gpio_input_get = 0x400006d4; gpio_matrix_in = 0x400006d8; gpio_matrix_out = 0x400006dc; -gpio_output_disable = 0x400006e0; -gpio_output_enable = 0x400006e4; +/* gpio_output_disable = 0x400006e0; */ +/* gpio_output_enable = 0x400006e4; */ gpio_output_set = 0x400006e8; gpio_pad_hold = 0x400006ec; gpio_pad_input_disable = 0x400006f0; diff --git a/components/esp_rom/esp32c61/ld/esp32c61.rom.ld b/components/esp_rom/esp32c61/ld/esp32c61.rom.ld index 7ef283388df1..645b536924c7 100644 --- a/components/esp_rom/esp32c61/ld/esp32c61.rom.ld +++ b/components/esp_rom/esp32c61/ld/esp32c61.rom.ld @@ -260,8 +260,8 @@ gpio_get_input_level = 0x400006f0; gpio_matrix_in = 0x400006f4; gpio_matrix_out = 0x400006f8; gpio_bypass_matrix_in = 0x400006fc; -gpio_output_disable = 0x40000700; -gpio_output_enable = 0x40000704; +/* gpio_output_disable = 0x40000700; */ +/* gpio_output_enable = 0x40000704; */ gpio_pad_input_disable = 0x40000708; gpio_pad_input_enable = 0x4000070c; gpio_pad_pulldown = 0x40000710; diff --git a/components/esp_rom/esp32h2/ld/esp32h2.rom.ld b/components/esp_rom/esp32h2/ld/esp32h2.rom.ld index 8000e80f1c25..b7b8775614eb 100644 --- a/components/esp_rom/esp32h2/ld/esp32h2.rom.ld +++ b/components/esp_rom/esp32h2/ld/esp32h2.rom.ld @@ -226,8 +226,8 @@ ets_clk_get_cpu_freq = 0x4000069c; gpio_input_get = 0x400006a0; gpio_matrix_in = 0x400006a4; gpio_matrix_out = 0x400006a8; -gpio_output_disable = 0x400006ac; -gpio_output_enable = 0x400006b0; +/* gpio_output_disable = 0x400006ac; */ +/* gpio_output_enable = 0x400006b0; */ gpio_output_set = 0x400006b4; gpio_pad_hold = 0x400006b8; gpio_pad_input_disable = 0x400006bc; diff --git a/components/esp_rom/esp32p4/ld/esp32p4.rom.ld b/components/esp_rom/esp32p4/ld/esp32p4.rom.ld index 6b8f14bf60e7..1ddf2b794516 100644 --- a/components/esp_rom/esp32p4/ld/esp32p4.rom.ld +++ b/components/esp_rom/esp32p4/ld/esp32p4.rom.ld @@ -301,8 +301,8 @@ gpio_get_input_level = 0x4fc00568; gpio_matrix_in = 0x4fc0056c; gpio_matrix_out = 0x4fc00570; gpio_bypass_matrix_in = 0x4fc00574; -gpio_output_disable = 0x4fc00578; -gpio_output_enable = 0x4fc0057c; +/* gpio_output_disable = 0x4fc00578; */ +/* gpio_output_enable = 0x4fc0057c; */ gpio_pad_input_disable = 0x4fc00580; gpio_pad_input_enable = 0x4fc00584; gpio_pad_pulldown = 0x4fc00588; diff --git a/components/esp_rom/esp32p4/ld/esp32p4lp.rom.ld b/components/esp_rom/esp32p4/ld/esp32p4lp.rom.ld index ad9dbf3971be..7fba13bd4bd8 100644 --- a/components/esp_rom/esp32p4/ld/esp32p4lp.rom.ld +++ b/components/esp_rom/esp32p4/ld/esp32p4lp.rom.ld @@ -44,8 +44,8 @@ gpio_matrix_in = 0x501000d4; gpio_matrix_out = 0x501000d8; gpio_bypass_matrix_in = 0x501000dc; gpio_output_disable = 0x501000e0; -gpio_output_enable = 0x501000e4; -gpio_pad_input_disable = 0x501000e8; +/* gpio_output_enable = 0x501000e4; */ +/* gpio_pad_input_disable = 0x501000e8; */ gpio_pad_input_enable = 0x501000ec; gpio_pad_pulldown = 0x501000f0; gpio_pad_pullup = 0x501000f4; diff --git a/components/esp_rom/esp32s3/ld/esp32s3.rom.ld b/components/esp_rom/esp32s3/ld/esp32s3.rom.ld index a8818575a66e..0b277966fa05 100644 --- a/components/esp_rom/esp32s3/ld/esp32s3.rom.ld +++ b/components/esp_rom/esp32s3/ld/esp32s3.rom.ld @@ -458,8 +458,8 @@ ets_get_xtal_freq = 0x40001a7c; gpio_input_get = 0x40001a88; gpio_matrix_in = 0x40001a94; gpio_matrix_out = 0x40001aa0; -gpio_output_disable = 0x40001aac; -gpio_output_enable = 0x40001ab8; +/* gpio_output_disable = 0x40001aac; */ +/* gpio_output_enable = 0x40001ab8; */ gpio_output_set = 0x40001ac4; gpio_pad_hold = 0x40001ad0; gpio_pad_input_disable = 0x40001adc; From 6d85d86fe198ca3af86a4c3290202d699815c61d Mon Sep 17 00:00:00 2001 From: Jin Cheng Date: Thu, 26 Sep 2024 14:20:16 +0800 Subject: [PATCH 121/365] Revert "Disable sniff mode during (e)SCO connection." This reverts commit 39a5eb84f3c6e48cce8cecd25927ad6b1e0fe383. --- components/bt/host/bluedroid/bta/dm/bta_dm_cfg.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/components/bt/host/bluedroid/bta/dm/bta_dm_cfg.c b/components/bt/host/bluedroid/bta/dm/bta_dm_cfg.c index a4792ce8469a..d19fca0d6e2b 100644 --- a/components/bt/host/bluedroid/bta/dm/bta_dm_cfg.c +++ b/components/bt/host/bluedroid/bta/dm/bta_dm_cfg.c @@ -231,9 +231,9 @@ tBTA_DM_PM_TYPE_QUALIFIER tBTA_DM_PM_SPEC bta_dm_pm_spec[BTA_DM_NUM_PM_SPEC] = { {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open, active */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close sniff */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ + {{BTA_DM_PM_SNIFF3, 7000 + BTA_DM_PM_SPEC_TO_OFFSET}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open, active */ + {{BTA_DM_PM_SNIFF, 7000 + BTA_DM_PM_SPEC_TO_OFFSET}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close sniff */ + {{BTA_DM_PM_SNIFF, 7000 + BTA_DM_PM_SPEC_TO_OFFSET}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ {{BTA_DM_PM_RETRY, 7000 + BTA_DM_PM_SPEC_TO_OFFSET}, {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ } From 9872a7bbd124869a71706ff44e3ebce21866d4d5 Mon Sep 17 00:00:00 2001 From: Jin Cheng Date: Thu, 26 Sep 2024 14:20:12 +0800 Subject: [PATCH 122/365] fix(bt/bluedroid): fixed AG and HF client cannot enter/exit sniff mode --- components/bt/host/bluedroid/bta/dm/bta_dm_cfg.c | 10 +++++----- .../host/bluedroid/bta/hf_client/bta_hf_client_act.c | 2 ++ .../bt/host/bluedroid/bta/include/bta/bta_api.h | 12 ++++++++++++ 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/components/bt/host/bluedroid/bta/dm/bta_dm_cfg.c b/components/bt/host/bluedroid/bta/dm/bta_dm_cfg.c index d19fca0d6e2b..81bbd4667f86 100644 --- a/components/bt/host/bluedroid/bta/dm/bta_dm_cfg.c +++ b/components/bt/host/bluedroid/bta/dm/bta_dm_cfg.c @@ -151,13 +151,13 @@ tBTA_DM_PM_TYPE_QUALIFIER tBTA_DM_PM_SPEC bta_dm_pm_spec[BTA_DM_NUM_PM_SPEC] = { (BTA_DM_PM_SSR2), /* the SSR entry */ #endif { - {{BTA_DM_PM_SNIFF_A2DP_IDX, 7000 + BTA_DM_PM_SPEC_TO_OFFSET}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn open sniff */ + {{BTA_DM_PM_SNIFF_AG_OPEN_IDX, 7000 + BTA_DM_PM_SPEC_TO_OFFSET}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn open sniff */ {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ {{BTA_DM_PM_SNIFF_SCO_OPEN_IDX, 7000 + BTA_DM_PM_SPEC_TO_OFFSET}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open, active */ - {{BTA_DM_PM_SNIFF_A2DP_IDX, 7000 + BTA_DM_PM_SPEC_TO_OFFSET}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close sniff */ - {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ + {{BTA_DM_PM_SNIFF_SCO_CLOSE_IDX, 7000 + BTA_DM_PM_SPEC_TO_OFFSET}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close sniff */ + {{BTA_DM_PM_SNIFF_AG_IDLE_IDX, 7000 + BTA_DM_PM_SPEC_TO_OFFSET}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ {{BTA_DM_PM_RETRY, 7000 + BTA_DM_PM_SPEC_TO_OFFSET}, {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ } @@ -409,7 +409,7 @@ tBTA_DM_SSR_SPEC bta_dm_ssr_spec[] = { /*max_lat, min_rmt_to, min_loc_to*/ {0, 0, 0}, /* BTA_DM_PM_SSR0 - do not use SSR */ {0, 0, 2}, /* BTA_DM_PM_SSR1 - HH, can NOT share entry with any other profile, - seting default max latency and min remote timeout as 0, + setting default max latency and min remote timeout as 0, and always read individual device preference from HH module */ {1200, 2, 2}, /* BTA_DM_PM_SSR2 - others (as long as sniff is allowed)*/ {360, 160, 1600} /* BTA_DM_PM_SSR3 - HD */ @@ -466,7 +466,7 @@ tBTA_DM_EIR_CONF bta_dm_eir_cfg = { { /* mask of UUID list in EIR */ 0xFFFFFFFF, /* LSB is the first UUID of the first 32 UUIDs in BTM_EIR_UUID_LKUP_TBL */ 0xFFFFFFFF /* LSB is the first UUID of the next 32 UUIDs in BTM_EIR_UUID_LKUP_TBL */ - /* BTM_EIR_UUID_LKUP_TBL can be overrided */ + /* BTM_EIR_UUID_LKUP_TBL can be overridden */ }, #endif // BTA_EIR_CANNED_UUID_LIST FALSE, /* Not included TX power*/ diff --git a/components/bt/host/bluedroid/bta/hf_client/bta_hf_client_act.c b/components/bt/host/bluedroid/bta/hf_client/bta_hf_client_act.c index 0e0c43addf66..930f30a57d45 100644 --- a/components/bt/host/bluedroid/bta/hf_client/bta_hf_client_act.c +++ b/components/bt/host/bluedroid/bta/hf_client/bta_hf_client_act.c @@ -511,7 +511,9 @@ void bta_hf_client_rfc_data(tBTA_HF_CLIENT_DATA *p_data) break; } + bta_sys_busy(BTA_ID_HS, 1, bta_hf_client_cb.scb.peer_addr); bta_hf_client_at_parse(buf, len); + bta_sys_idle(BTA_ID_HS, 1, bta_hf_client_cb.scb.peer_addr); /* no more data to read, we're done */ if (len < BTA_HF_CLIENT_RFC_READ_MAX) { diff --git a/components/bt/host/bluedroid/bta/include/bta/bta_api.h b/components/bt/host/bluedroid/bta/include/bta/bta_api.h index 32dc716bc65d..2ba9707de5fe 100644 --- a/components/bt/host/bluedroid/bta/include/bta/bta_api.h +++ b/components/bt/host/bluedroid/bta/include/bta/bta_api.h @@ -1351,10 +1351,22 @@ typedef UINT8 tBTA_DM_PM_ACTION; #define BTA_DM_PM_SNIFF_HD_IDLE_IDX BTA_DM_PM_SNIFF4 #endif +#ifndef BTA_DM_PM_SNIFF_AG_OPEN_IDX +#define BTA_DM_PM_SNIFF_AG_OPEN_IDX BTA_DM_PM_SNIFF +#endif + +#ifndef BTA_DM_PM_SNIFF_AG_IDLE_IDX +#define BTA_DM_PM_SNIFF_AG_IDLE_IDX BTA_DM_PM_SNIFF +#endif + #ifndef BTA_DM_PM_SNIFF_SCO_OPEN_IDX #define BTA_DM_PM_SNIFF_SCO_OPEN_IDX BTA_DM_PM_SNIFF3 #endif +#ifndef BTA_DM_PM_SNIFF_SCO_CLOSE_IDX +#define BTA_DM_PM_SNIFF_SCO_CLOSE_IDX BTA_DM_PM_SNIFF +#endif + #ifndef BTA_DM_PM_SNIFF_HD_ACTIVE_IDX #define BTA_DM_PM_SNIFF_HD_ACTIVE_IDX BTA_DM_PM_SNIFF5 #endif From 3dc0f88dc691a7c0ca138db79e0e40e0a04f4d5c Mon Sep 17 00:00:00 2001 From: "hrushikesh.bhosale" Date: Thu, 10 Oct 2024 14:11:18 +0530 Subject: [PATCH 123/365] fix(protocols): Erased the storage partition for http_server ci test Added api to erase storage partition for http_server ci test --- .../file_serving/pytest_http_server_file_serving.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/examples/protocols/http_server/file_serving/pytest_http_server_file_serving.py b/examples/protocols/http_server/file_serving/pytest_http_server_file_serving.py index 66f1faa9db4a..ff0c0e8ef55d 100644 --- a/examples/protocols/http_server/file_serving/pytest_http_server_file_serving.py +++ b/examples/protocols/http_server/file_serving/pytest_http_server_file_serving.py @@ -31,11 +31,12 @@ def test_examples_protocol_http_server_file_serving(dut: Dut) -> None: binary_file = os.path.join(dut.app.binary_path, 'file_server.bin') bin_size = os.path.getsize(binary_file) logging.info('file_server_bin_size : {}KB'.format(bin_size // 1024)) - logging.info('Erasing the flash on the chip') + logging.info('Erasing the storage partition on the chip') + dut.serial.erase_partition('storage') # Upload binary and start testing logging.info('Starting http file serving simple test app') - dut.expect('Initializing SPIFFS', timeout=30) + dut.expect('Initializing SPIFFS', timeout=60) if dut.app.sdkconfig.get('EXAMPLE_WIFI_SSID_PWD_FROM_STDIN') is True: dut.expect('Please input ssid password:') From 84ba1a323c9873957cb691ae97c67b337157595c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Rohl=C3=ADnek?= Date: Wed, 29 May 2024 14:12:43 +0200 Subject: [PATCH 124/365] fix(storage/fatfs): move test app to correct directory --- examples/storage/.build-test-rules.yml | 8 -------- examples/storage/README.md | 1 - tools/test_apps/storage/.build-test-rules.yml | 8 ++++++++ .../test_apps}/storage/fatfsgen/CMakeLists.txt | 0 {examples => tools/test_apps}/storage/fatfsgen/README.md | 0 .../test_apps}/storage/fatfsgen/fatfs_image/hello.txt | 0 .../test_apps}/storage/fatfsgen/fatfs_image/sub/test.txt | 0 .../fatfsgen/fatfs_long_name_image/hellolongname.txt | 0 .../sublongnames/testlongfilenames.txt | 0 .../test_apps}/storage/fatfsgen/main/CMakeLists.txt | 0 .../test_apps}/storage/fatfsgen/main/Kconfig.projbuild | 0 .../storage/fatfsgen/main/fatfsgen_example_main.c | 0 .../test_apps}/storage/fatfsgen/partitions_example.csv | 0 .../storage/fatfsgen/pytest_fatfsgen_example.py | 0 .../fatfsgen/sdkconfig.ci.test_read_only_partition_gen | 0 .../sdkconfig.ci.test_read_only_partition_gen_default_dt | 0 .../fatfsgen/sdkconfig.ci.test_read_only_partition_gen_ln | 0 ...dkconfig.ci.test_read_only_partition_gen_ln_default_dt | 0 .../fatfsgen/sdkconfig.ci.test_read_write_partition_gen | 0 .../sdkconfig.ci.test_read_write_partition_gen_default_dt | 0 .../sdkconfig.ci.test_read_write_partition_gen_ln | 0 ...kconfig.ci.test_read_write_partition_gen_ln_default_dt | 0 .../test_apps}/storage/fatfsgen/sdkconfig.defaults | 0 23 files changed, 8 insertions(+), 9 deletions(-) rename {examples => tools/test_apps}/storage/fatfsgen/CMakeLists.txt (100%) rename {examples => tools/test_apps}/storage/fatfsgen/README.md (100%) rename {examples => tools/test_apps}/storage/fatfsgen/fatfs_image/hello.txt (100%) rename {examples => tools/test_apps}/storage/fatfsgen/fatfs_image/sub/test.txt (100%) rename {examples => tools/test_apps}/storage/fatfsgen/fatfs_long_name_image/hellolongname.txt (100%) rename {examples => tools/test_apps}/storage/fatfsgen/fatfs_long_name_image/sublongnames/testlongfilenames.txt (100%) rename {examples => tools/test_apps}/storage/fatfsgen/main/CMakeLists.txt (100%) rename {examples => tools/test_apps}/storage/fatfsgen/main/Kconfig.projbuild (100%) rename {examples => tools/test_apps}/storage/fatfsgen/main/fatfsgen_example_main.c (100%) rename {examples => tools/test_apps}/storage/fatfsgen/partitions_example.csv (100%) rename {examples => tools/test_apps}/storage/fatfsgen/pytest_fatfsgen_example.py (100%) rename {examples => tools/test_apps}/storage/fatfsgen/sdkconfig.ci.test_read_only_partition_gen (100%) rename {examples => tools/test_apps}/storage/fatfsgen/sdkconfig.ci.test_read_only_partition_gen_default_dt (100%) rename {examples => tools/test_apps}/storage/fatfsgen/sdkconfig.ci.test_read_only_partition_gen_ln (100%) rename {examples => tools/test_apps}/storage/fatfsgen/sdkconfig.ci.test_read_only_partition_gen_ln_default_dt (100%) rename {examples => tools/test_apps}/storage/fatfsgen/sdkconfig.ci.test_read_write_partition_gen (100%) rename {examples => tools/test_apps}/storage/fatfsgen/sdkconfig.ci.test_read_write_partition_gen_default_dt (100%) rename {examples => tools/test_apps}/storage/fatfsgen/sdkconfig.ci.test_read_write_partition_gen_ln (100%) rename {examples => tools/test_apps}/storage/fatfsgen/sdkconfig.ci.test_read_write_partition_gen_ln_default_dt (100%) rename {examples => tools/test_apps}/storage/fatfsgen/sdkconfig.defaults (100%) diff --git a/examples/storage/.build-test-rules.yml b/examples/storage/.build-test-rules.yml index 4e7e8c66cbe3..341e0f595a88 100644 --- a/examples/storage/.build-test-rules.yml +++ b/examples/storage/.build-test-rules.yml @@ -34,14 +34,6 @@ examples/storage/ext_flash_fatfs: temporary: true reason: lack of runners -examples/storage/fatfsgen: - depends_components: - - fatfs - - vfs - disable_test: - - if: IDF_TARGET != "esp32" - reason: only one target needed - examples/storage/nvs_rw_blob: depends_components: - nvs_flash diff --git a/examples/storage/README.md b/examples/storage/README.md index bb5c821fe89d..4705e7261512 100644 --- a/examples/storage/README.md +++ b/examples/storage/README.md @@ -10,7 +10,6 @@ The examples are grouped into sub-directories by category. Each category directo * `custom_flash_driver` example demonstrates how to implement your own flash chip driver by overriding the default driver. * `emmc` example demonstrates how to use an eMMC chip with an ESP device. * `ext_flash_fatfs` example demonstrates how to use FATFS partition with external SPI FLASH chip. -* `fatfsgen` example demonstrates how to use FATFS partition * `nvs_rw_blob` example demonstrates how to read and write a single integer value and a blob (binary large object) using NVS to preserve them between ESP module restarts. * `nvs_rw_value` example demonstrates how to read and write a single integer value using NVS. * `nvs_rw_value_cxx` example demonstrates how to read and write a single integer value using NVS (it uses the C++ NVS handle API). diff --git a/tools/test_apps/storage/.build-test-rules.yml b/tools/test_apps/storage/.build-test-rules.yml index d27c0ab8933f..f0ab55097ce2 100644 --- a/tools/test_apps/storage/.build-test-rules.yml +++ b/tools/test_apps/storage/.build-test-rules.yml @@ -1,5 +1,13 @@ # Documentation: .gitlab/ci/README.md#manifest-file-to-control-the-buildtest-apps +tools/test_apps/storage/fatfsgen: + depends_components: + - fatfs + - vfs + disable_test: + - if: IDF_TARGET != "esp32" + reason: only one target needed + tools/test_apps/storage/partition_table_readonly: disable_test: - if: IDF_TARGET not in ["esp32", "esp32c3"] diff --git a/examples/storage/fatfsgen/CMakeLists.txt b/tools/test_apps/storage/fatfsgen/CMakeLists.txt similarity index 100% rename from examples/storage/fatfsgen/CMakeLists.txt rename to tools/test_apps/storage/fatfsgen/CMakeLists.txt diff --git a/examples/storage/fatfsgen/README.md b/tools/test_apps/storage/fatfsgen/README.md similarity index 100% rename from examples/storage/fatfsgen/README.md rename to tools/test_apps/storage/fatfsgen/README.md diff --git a/examples/storage/fatfsgen/fatfs_image/hello.txt b/tools/test_apps/storage/fatfsgen/fatfs_image/hello.txt similarity index 100% rename from examples/storage/fatfsgen/fatfs_image/hello.txt rename to tools/test_apps/storage/fatfsgen/fatfs_image/hello.txt diff --git a/examples/storage/fatfsgen/fatfs_image/sub/test.txt b/tools/test_apps/storage/fatfsgen/fatfs_image/sub/test.txt similarity index 100% rename from examples/storage/fatfsgen/fatfs_image/sub/test.txt rename to tools/test_apps/storage/fatfsgen/fatfs_image/sub/test.txt diff --git a/examples/storage/fatfsgen/fatfs_long_name_image/hellolongname.txt b/tools/test_apps/storage/fatfsgen/fatfs_long_name_image/hellolongname.txt similarity index 100% rename from examples/storage/fatfsgen/fatfs_long_name_image/hellolongname.txt rename to tools/test_apps/storage/fatfsgen/fatfs_long_name_image/hellolongname.txt diff --git a/examples/storage/fatfsgen/fatfs_long_name_image/sublongnames/testlongfilenames.txt b/tools/test_apps/storage/fatfsgen/fatfs_long_name_image/sublongnames/testlongfilenames.txt similarity index 100% rename from examples/storage/fatfsgen/fatfs_long_name_image/sublongnames/testlongfilenames.txt rename to tools/test_apps/storage/fatfsgen/fatfs_long_name_image/sublongnames/testlongfilenames.txt diff --git a/examples/storage/fatfsgen/main/CMakeLists.txt b/tools/test_apps/storage/fatfsgen/main/CMakeLists.txt similarity index 100% rename from examples/storage/fatfsgen/main/CMakeLists.txt rename to tools/test_apps/storage/fatfsgen/main/CMakeLists.txt diff --git a/examples/storage/fatfsgen/main/Kconfig.projbuild b/tools/test_apps/storage/fatfsgen/main/Kconfig.projbuild similarity index 100% rename from examples/storage/fatfsgen/main/Kconfig.projbuild rename to tools/test_apps/storage/fatfsgen/main/Kconfig.projbuild diff --git a/examples/storage/fatfsgen/main/fatfsgen_example_main.c b/tools/test_apps/storage/fatfsgen/main/fatfsgen_example_main.c similarity index 100% rename from examples/storage/fatfsgen/main/fatfsgen_example_main.c rename to tools/test_apps/storage/fatfsgen/main/fatfsgen_example_main.c diff --git a/examples/storage/fatfsgen/partitions_example.csv b/tools/test_apps/storage/fatfsgen/partitions_example.csv similarity index 100% rename from examples/storage/fatfsgen/partitions_example.csv rename to tools/test_apps/storage/fatfsgen/partitions_example.csv diff --git a/examples/storage/fatfsgen/pytest_fatfsgen_example.py b/tools/test_apps/storage/fatfsgen/pytest_fatfsgen_example.py similarity index 100% rename from examples/storage/fatfsgen/pytest_fatfsgen_example.py rename to tools/test_apps/storage/fatfsgen/pytest_fatfsgen_example.py diff --git a/examples/storage/fatfsgen/sdkconfig.ci.test_read_only_partition_gen b/tools/test_apps/storage/fatfsgen/sdkconfig.ci.test_read_only_partition_gen similarity index 100% rename from examples/storage/fatfsgen/sdkconfig.ci.test_read_only_partition_gen rename to tools/test_apps/storage/fatfsgen/sdkconfig.ci.test_read_only_partition_gen diff --git a/examples/storage/fatfsgen/sdkconfig.ci.test_read_only_partition_gen_default_dt b/tools/test_apps/storage/fatfsgen/sdkconfig.ci.test_read_only_partition_gen_default_dt similarity index 100% rename from examples/storage/fatfsgen/sdkconfig.ci.test_read_only_partition_gen_default_dt rename to tools/test_apps/storage/fatfsgen/sdkconfig.ci.test_read_only_partition_gen_default_dt diff --git a/examples/storage/fatfsgen/sdkconfig.ci.test_read_only_partition_gen_ln b/tools/test_apps/storage/fatfsgen/sdkconfig.ci.test_read_only_partition_gen_ln similarity index 100% rename from examples/storage/fatfsgen/sdkconfig.ci.test_read_only_partition_gen_ln rename to tools/test_apps/storage/fatfsgen/sdkconfig.ci.test_read_only_partition_gen_ln diff --git a/examples/storage/fatfsgen/sdkconfig.ci.test_read_only_partition_gen_ln_default_dt b/tools/test_apps/storage/fatfsgen/sdkconfig.ci.test_read_only_partition_gen_ln_default_dt similarity index 100% rename from examples/storage/fatfsgen/sdkconfig.ci.test_read_only_partition_gen_ln_default_dt rename to tools/test_apps/storage/fatfsgen/sdkconfig.ci.test_read_only_partition_gen_ln_default_dt diff --git a/examples/storage/fatfsgen/sdkconfig.ci.test_read_write_partition_gen b/tools/test_apps/storage/fatfsgen/sdkconfig.ci.test_read_write_partition_gen similarity index 100% rename from examples/storage/fatfsgen/sdkconfig.ci.test_read_write_partition_gen rename to tools/test_apps/storage/fatfsgen/sdkconfig.ci.test_read_write_partition_gen diff --git a/examples/storage/fatfsgen/sdkconfig.ci.test_read_write_partition_gen_default_dt b/tools/test_apps/storage/fatfsgen/sdkconfig.ci.test_read_write_partition_gen_default_dt similarity index 100% rename from examples/storage/fatfsgen/sdkconfig.ci.test_read_write_partition_gen_default_dt rename to tools/test_apps/storage/fatfsgen/sdkconfig.ci.test_read_write_partition_gen_default_dt diff --git a/examples/storage/fatfsgen/sdkconfig.ci.test_read_write_partition_gen_ln b/tools/test_apps/storage/fatfsgen/sdkconfig.ci.test_read_write_partition_gen_ln similarity index 100% rename from examples/storage/fatfsgen/sdkconfig.ci.test_read_write_partition_gen_ln rename to tools/test_apps/storage/fatfsgen/sdkconfig.ci.test_read_write_partition_gen_ln diff --git a/examples/storage/fatfsgen/sdkconfig.ci.test_read_write_partition_gen_ln_default_dt b/tools/test_apps/storage/fatfsgen/sdkconfig.ci.test_read_write_partition_gen_ln_default_dt similarity index 100% rename from examples/storage/fatfsgen/sdkconfig.ci.test_read_write_partition_gen_ln_default_dt rename to tools/test_apps/storage/fatfsgen/sdkconfig.ci.test_read_write_partition_gen_ln_default_dt diff --git a/examples/storage/fatfsgen/sdkconfig.defaults b/tools/test_apps/storage/fatfsgen/sdkconfig.defaults similarity index 100% rename from examples/storage/fatfsgen/sdkconfig.defaults rename to tools/test_apps/storage/fatfsgen/sdkconfig.defaults From b9a54fb1f3f9fc992f5db142b30f130212d6c156 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Rohl=C3=ADnek?= Date: Wed, 29 May 2024 10:10:38 +0200 Subject: [PATCH 125/365] feat(storage/fatfs): add minimal FatFS example --- examples/storage/.build-test-rules.yml | 8 ++ examples/storage/README.md | 1 + examples/storage/fatfs_basic/CMakeLists.txt | 6 ++ examples/storage/fatfs_basic/README.md | 43 +++++++++ .../storage/fatfs_basic/main/CMakeLists.txt | 2 + .../fatfs_basic/main/fat_example_main.c | 87 +++++++++++++++++++ .../fatfs_basic/partitions_example.csv | 6 ++ .../storage/fatfs_basic/pytest_fat_example.py | 17 ++++ .../storage/fatfs_basic/sdkconfig.defaults | 4 + 9 files changed, 174 insertions(+) create mode 100644 examples/storage/fatfs_basic/CMakeLists.txt create mode 100644 examples/storage/fatfs_basic/README.md create mode 100644 examples/storage/fatfs_basic/main/CMakeLists.txt create mode 100644 examples/storage/fatfs_basic/main/fat_example_main.c create mode 100644 examples/storage/fatfs_basic/partitions_example.csv create mode 100644 examples/storage/fatfs_basic/pytest_fat_example.py create mode 100644 examples/storage/fatfs_basic/sdkconfig.defaults diff --git a/examples/storage/.build-test-rules.yml b/examples/storage/.build-test-rules.yml index 341e0f595a88..a15e95e333b8 100644 --- a/examples/storage/.build-test-rules.yml +++ b/examples/storage/.build-test-rules.yml @@ -34,6 +34,14 @@ examples/storage/ext_flash_fatfs: temporary: true reason: lack of runners +examples/storage/fatfs_basic: + depends_components: + - fatfs + - vfs + disable_test: + - if: IDF_TARGET != "esp32" + reason: only one target needed + examples/storage/nvs_rw_blob: depends_components: - nvs_flash diff --git a/examples/storage/README.md b/examples/storage/README.md index 4705e7261512..ade0b883a1a0 100644 --- a/examples/storage/README.md +++ b/examples/storage/README.md @@ -7,6 +7,7 @@ This directory contains a range of examples ESP-IDF projects. These are intended The examples are grouped into sub-directories by category. Each category directory contains one or more example projects: +* `fatfs_basic` minimal example of FatFS usage on SPI FLASH * `custom_flash_driver` example demonstrates how to implement your own flash chip driver by overriding the default driver. * `emmc` example demonstrates how to use an eMMC chip with an ESP device. * `ext_flash_fatfs` example demonstrates how to use FATFS partition with external SPI FLASH chip. diff --git a/examples/storage/fatfs_basic/CMakeLists.txt b/examples/storage/fatfs_basic/CMakeLists.txt new file mode 100644 index 000000000000..1c0c2b8a1a2a --- /dev/null +++ b/examples/storage/fatfs_basic/CMakeLists.txt @@ -0,0 +1,6 @@ +# The following lines of boilerplate have to be in your project's CMakeLists +# in this exact order for cmake to work correctly +cmake_minimum_required(VERSION 3.16) + +include($ENV{IDF_PATH}/tools/cmake/project.cmake) +project(fatfsgen) diff --git a/examples/storage/fatfs_basic/README.md b/examples/storage/fatfs_basic/README.md new file mode 100644 index 000000000000..0ee84f105dfb --- /dev/null +++ b/examples/storage/fatfs_basic/README.md @@ -0,0 +1,43 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-H2 | ESP32-P4 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | + +# FATFS minimal example + +(See the README.md file in the upper level 'examples' directory for more information about examples.) + +This example demonstrates the minimal setup required to store persistent data on SPI Flash using the FAT filesystem. +Beware that the minimal required size of the flash is 4 MB. + +## How to use example + +### Build and flash + +To run the example, type the following command: + +```CMake +# CMake +idf.py -p PORT flash monitor +``` + +(To exit the serial monitor, type ``Ctrl-]``.) + +See the Getting Started Guide for full steps to configure and use ESP-IDF to build projects. + +## Example output + +Here is the example's console output: + +``` +... +I (339) example: Mounting FAT filesystem +I (339) example: Filesystem mounted +I (339) example: Opening file +I (729) example: File written +I (729) example: Reading file +I (739) example: Read from file: 'This is written by the device' +I (739) example: Unmounting FAT filesystem +I (849) example: Done +``` + +The logic of the example is contained in a [single source file](./main/fat_example_main.c), +and it should be relatively simple to match points in its execution with the log outputs above. diff --git a/examples/storage/fatfs_basic/main/CMakeLists.txt b/examples/storage/fatfs_basic/main/CMakeLists.txt new file mode 100644 index 000000000000..827c3c2e8e0f --- /dev/null +++ b/examples/storage/fatfs_basic/main/CMakeLists.txt @@ -0,0 +1,2 @@ +idf_component_register(SRCS "fat_example_main.c" + INCLUDE_DIRS ".") diff --git a/examples/storage/fatfs_basic/main/fat_example_main.c b/examples/storage/fatfs_basic/main/fat_example_main.c new file mode 100644 index 000000000000..2a57821e70dc --- /dev/null +++ b/examples/storage/fatfs_basic/main/fat_example_main.c @@ -0,0 +1,87 @@ +/* + * SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Unlicense OR CC0-1.0 + */ + +#include +#include +#include +#include "esp_vfs.h" +#include "esp_vfs_fat.h" +#include "sdkconfig.h" + +static const char *TAG = "example"; + +// Mount path for the partition +const char *base_path = "/spiflash"; + +// Handle of the wear levelling library instance +static wl_handle_t s_wl_handle = WL_INVALID_HANDLE; + +void app_main(void) +{ + ESP_LOGI(TAG, "Mounting FAT filesystem"); + // To mount device we need name of device partition, define base_path + // and allow format partition in case if it is new one and was not formatted before + const esp_vfs_fat_mount_config_t mount_config = { + .max_files = 4, // Number of files that can be open at a time + .format_if_mount_failed = true, // If true, try to format the partition if mount fails + .allocation_unit_size = CONFIG_WL_SECTOR_SIZE, // Size of allocation unit, cluster size. + .use_one_fat = false, // Use only one FAT table (reduce memory usage), but decrease reliability of file system in case of power failure. + }; + + esp_err_t err = esp_vfs_fat_spiflash_mount_rw_wl(base_path, "storage", &mount_config, &s_wl_handle); + + if (err != ESP_OK) { + ESP_LOGE(TAG, "Failed to mount FATFS (%s)", esp_err_to_name(err)); + return; + } + + ESP_LOGI(TAG, "Filesystem mounted"); + + ESP_LOGI(TAG, "Opening file"); + + const char *filename = "/spiflash/example.txt"; + + FILE *f = fopen(filename, "wb"); + if (f == NULL) { + perror("fopen"); + ESP_LOGE(TAG, "Failed to open file for writing"); + return; + } + + fprintf(f, "This is written by the device"); + fclose(f); + + ESP_LOGI(TAG, "File written"); + + // Open file for reading + ESP_LOGI(TAG, "Reading file"); + + f = fopen(filename, "r"); + if (f == NULL) { + ESP_LOGE(TAG, "Failed to open file for reading"); + return; + } + + char line[128]; + + fgets(line, sizeof(line), f); + fclose(f); + + // strip newline + char *pos = strchr(line, '\n'); + if (pos) { + *pos = '\0'; + } + + ESP_LOGI(TAG, "Read from file: '%s'", line); + + // Unmount FATFS + ESP_LOGI(TAG, "Unmounting FAT filesystem"); + + ESP_ERROR_CHECK(esp_vfs_fat_spiflash_unmount_rw_wl(base_path, s_wl_handle)); + + ESP_LOGI(TAG, "Done"); +} diff --git a/examples/storage/fatfs_basic/partitions_example.csv b/examples/storage/fatfs_basic/partitions_example.csv new file mode 100644 index 000000000000..1c79321a107c --- /dev/null +++ b/examples/storage/fatfs_basic/partitions_example.csv @@ -0,0 +1,6 @@ +# Name, Type, SubType, Offset, Size, Flags +# Note: if you have increased the bootloader size, make sure to update the offsets to avoid overlap +nvs, data, nvs, 0x9000, 0x6000, +phy_init, data, phy, 0xf000, 0x1000, +factory, app, factory, 0x10000, 1M, +storage, data, fat, , 1M, diff --git a/examples/storage/fatfs_basic/pytest_fat_example.py b/examples/storage/fatfs_basic/pytest_fat_example.py new file mode 100644 index 000000000000..7abafe062de2 --- /dev/null +++ b/examples/storage/fatfs_basic/pytest_fat_example.py @@ -0,0 +1,17 @@ +# SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD +# SPDX-License-Identifier: Unlicense OR CC0-1.0 +import pytest +from pytest_embedded import Dut + + +@pytest.mark.esp32 +@pytest.mark.generic +def test_examples_fatfs_basic(dut: Dut) -> None: + dut.expect('example: Mounting FAT filesystem', timeout=90) + dut.expect('example: Filesystem mounted', timeout=90) + dut.expect('example: Opening file', timeout=90) + dut.expect('example: File written', timeout=90) + dut.expect('example: Reading file', timeout=90) + dut.expect('example: Read from file: \'This is written by the device\'', timeout=90) + dut.expect('example: Unmounting FAT filesystem', timeout=90) + dut.expect('example: Done', timeout=90) diff --git a/examples/storage/fatfs_basic/sdkconfig.defaults b/examples/storage/fatfs_basic/sdkconfig.defaults new file mode 100644 index 000000000000..47363c32d517 --- /dev/null +++ b/examples/storage/fatfs_basic/sdkconfig.defaults @@ -0,0 +1,4 @@ +CONFIG_PARTITION_TABLE_CUSTOM=y +CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions_example.csv" +CONFIG_PARTITION_TABLE_FILENAME="partitions_example.csv" +CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y From f633839eceffd424c20dacbec8f597ed46d1294e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Rohl=C3=ADnek?= Date: Mon, 3 Jun 2024 08:22:52 +0200 Subject: [PATCH 126/365] feat(storage/fatfs): add advanced example for fatfs --- examples/storage/.build-test-rules.yml | 8 + examples/storage/README.md | 1 + .../storage/fatfs_advanced/CMakeLists.txt | 6 + examples/storage/fatfs_advanced/README.md | 69 +++++++++ .../filegeneratedonhost.txt | 1 + .../subdirectoryfromhost/innerfile.txt | 1 + .../fatfs_advanced/main/CMakeLists.txt | 26 ++++ .../fatfs_advanced/main/Kconfig.projbuild | 24 +++ .../main/fatfs_advanced_example_main.c | 138 ++++++++++++++++++ .../fatfs_advanced/partitions_example.csv | 6 + .../pytest_fatfs_advanced_example.py | 112 ++++++++++++++ .../sdkconfig.ci.test_read_only_partition_gen | 5 + ...ci.test_read_only_partition_gen_default_dt | 6 + ...sdkconfig.ci.test_read_write_partition_gen | 5 + ...i.test_read_write_partition_gen_default_dt | 6 + .../storage/fatfs_advanced/sdkconfig.defaults | 7 + 16 files changed, 421 insertions(+) create mode 100644 examples/storage/fatfs_advanced/CMakeLists.txt create mode 100644 examples/storage/fatfs_advanced/README.md create mode 100644 examples/storage/fatfs_advanced/fatfs_long_name_image/filegeneratedonhost.txt create mode 100644 examples/storage/fatfs_advanced/fatfs_long_name_image/subdirectoryfromhost/innerfile.txt create mode 100644 examples/storage/fatfs_advanced/main/CMakeLists.txt create mode 100644 examples/storage/fatfs_advanced/main/Kconfig.projbuild create mode 100644 examples/storage/fatfs_advanced/main/fatfs_advanced_example_main.c create mode 100644 examples/storage/fatfs_advanced/partitions_example.csv create mode 100644 examples/storage/fatfs_advanced/pytest_fatfs_advanced_example.py create mode 100644 examples/storage/fatfs_advanced/sdkconfig.ci.test_read_only_partition_gen create mode 100644 examples/storage/fatfs_advanced/sdkconfig.ci.test_read_only_partition_gen_default_dt create mode 100644 examples/storage/fatfs_advanced/sdkconfig.ci.test_read_write_partition_gen create mode 100644 examples/storage/fatfs_advanced/sdkconfig.ci.test_read_write_partition_gen_default_dt create mode 100644 examples/storage/fatfs_advanced/sdkconfig.defaults diff --git a/examples/storage/.build-test-rules.yml b/examples/storage/.build-test-rules.yml index a15e95e333b8..5999ae95eac0 100644 --- a/examples/storage/.build-test-rules.yml +++ b/examples/storage/.build-test-rules.yml @@ -34,6 +34,14 @@ examples/storage/ext_flash_fatfs: temporary: true reason: lack of runners +examples/storage/fatfs_advanced: + depends_components: + - fatfs + - vfs + disable_test: + - if: IDF_TARGET != "esp32" + reason: only one target needed + examples/storage/fatfs_basic: depends_components: - fatfs diff --git a/examples/storage/README.md b/examples/storage/README.md index ade0b883a1a0..ebfb75833d59 100644 --- a/examples/storage/README.md +++ b/examples/storage/README.md @@ -8,6 +8,7 @@ This directory contains a range of examples ESP-IDF projects. These are intended The examples are grouped into sub-directories by category. Each category directory contains one or more example projects: * `fatfs_basic` minimal example of FatFS usage on SPI FLASH +* `fatfs_advanced` example demonstrates how to use advanced features for working with FatFS such as automatic partition generation * `custom_flash_driver` example demonstrates how to implement your own flash chip driver by overriding the default driver. * `emmc` example demonstrates how to use an eMMC chip with an ESP device. * `ext_flash_fatfs` example demonstrates how to use FATFS partition with external SPI FLASH chip. diff --git a/examples/storage/fatfs_advanced/CMakeLists.txt b/examples/storage/fatfs_advanced/CMakeLists.txt new file mode 100644 index 000000000000..1c0c2b8a1a2a --- /dev/null +++ b/examples/storage/fatfs_advanced/CMakeLists.txt @@ -0,0 +1,6 @@ +# The following lines of boilerplate have to be in your project's CMakeLists +# in this exact order for cmake to work correctly +cmake_minimum_required(VERSION 3.16) + +include($ENV{IDF_PATH}/tools/cmake/project.cmake) +project(fatfsgen) diff --git a/examples/storage/fatfs_advanced/README.md b/examples/storage/fatfs_advanced/README.md new file mode 100644 index 000000000000..34ab038fc54f --- /dev/null +++ b/examples/storage/fatfs_advanced/README.md @@ -0,0 +1,69 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-H2 | ESP32-P4 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | + +# FATFS partition generation example + +(See the README.md file in the upper level 'examples' directory for more information about examples.) + +This example demonstrates how to use the FATFS partition +generation tool [fatfsgen.py](../../../components/fatfs/fatfsgen.py) to automatically create a FATFS +filesystem image from the contents of a host folder during build, with an option of +automatically flashing the created image on invocation of `idf.py -p PORT flash` as well as usage of long file names for FATFS. +Beware that the minimal required size of the flash is 4 MB. +You can specify using menuconfig weather example will use read-only or read-write mode. The default option is read-write mode. +To change it just use menuconfig: + +```shell +idf.py menuconfig +``` + +Then select `Example Configuration` a chose `Mode for generated FATFS image` either `Read-Write Mode` or `Read-Only Mode`. +`Read-Only` option indicates generating raw fatfs image without wear levelling support. +On the other hand, for `Read-Write` the generated fatfs image will support wear levelling thus can be mounted in read-write mode. + + +The following gives an overview of the example: + +1. There is a directory `fatfs_image` from which the FATFS filesystem image will be created. + +2. The function `fatfs_create_rawflash_image` is used to specify that a FATFS image +should be created during build for the `storage` partition. +For CMake, it is called from [the main component's CMakeLists.txt](./main/CMakeLists.txt). +`FLASH_IN_PROJECT` specifies that the created image +should be flashed on invocation of `idf.py -p PORT flash` together with app, bootloader, partition table, etc. +The image is created on the example's build directory with the output filename `storage.bin`. + +3. Upon invocation of `idf.py -p PORT flash monitor`, application loads and +finds there is already a valid FATFS filesystem in the `storage` partition with files same as those in `fatfs_image` directory. The application is then +able to read those files. + +## How to use example + +### Build and flash + +To run the example, type the following command: + +```CMake +# CMake +idf.py -p PORT flash monitor +``` + +(To exit the serial monitor, type ``Ctrl-]``.) + +See the Getting Started Guide for full steps to configure and use ESP-IDF to build projects. + +## Example output + +Here is the example's console output: + +``` +... +I (322) example: Mounting FAT filesystem +I (332) example: Reading file +I (332) example: Read from file: 'this is test' +I (332) example: Unmounting FAT filesystem +I (342) example: Done +``` + +The logic of the example is contained in a [single source file](./main/fatfsgen_example_main.c), +and it should be relatively simple to match points in its execution with the log outputs above. diff --git a/examples/storage/fatfs_advanced/fatfs_long_name_image/filegeneratedonhost.txt b/examples/storage/fatfs_advanced/fatfs_long_name_image/filegeneratedonhost.txt new file mode 100644 index 000000000000..33f47c9b1db9 --- /dev/null +++ b/examples/storage/fatfs_advanced/fatfs_long_name_image/filegeneratedonhost.txt @@ -0,0 +1 @@ +This is generated on the host; it has long name diff --git a/examples/storage/fatfs_advanced/fatfs_long_name_image/subdirectoryfromhost/innerfile.txt b/examples/storage/fatfs_advanced/fatfs_long_name_image/subdirectoryfromhost/innerfile.txt new file mode 100644 index 000000000000..84505e3d3e72 --- /dev/null +++ b/examples/storage/fatfs_advanced/fatfs_long_name_image/subdirectoryfromhost/innerfile.txt @@ -0,0 +1 @@ +this is test; it has long name diff --git a/examples/storage/fatfs_advanced/main/CMakeLists.txt b/examples/storage/fatfs_advanced/main/CMakeLists.txt new file mode 100644 index 000000000000..28eed4c7c32f --- /dev/null +++ b/examples/storage/fatfs_advanced/main/CMakeLists.txt @@ -0,0 +1,26 @@ +idf_component_register(SRCS "fatfs_advanced_example_main.c" + INCLUDE_DIRS ".") + +# Create a FATFS image from the contents of the 'fatfs_image' directory +# that fits the partition named 'storage'. FLASH_IN_PROJECT indicates that +# the generated image should be flashed when the entire project is flashed to +# the target with 'idf.py -p PORT flash'. +# If read-only mode is set (CONFIG_EXAMPLE_FATFS_MODE_READ_ONLY) +# the generated image will be raw without wear levelling support. +# Otherwise it will support wear levelling and thus enable read-write mounting of the image in the device. + +set(image ../fatfs_long_name_image) + +if(CONFIG_EXAMPLE_FATFS_MODE_READ_ONLY) + if(CONFIG_EXAMPLE_FATFS_DEFAULT_DATETIME) + fatfs_create_rawflash_image(storage ${image} FLASH_IN_PROJECT) + else() + fatfs_create_rawflash_image(storage ${image} FLASH_IN_PROJECT PRESERVE_TIME) + endif() +else() + if(CONFIG_EXAMPLE_FATFS_DEFAULT_DATETIME) + fatfs_create_spiflash_image(storage ${image} FLASH_IN_PROJECT) + else() + fatfs_create_spiflash_image(storage ${image} FLASH_IN_PROJECT PRESERVE_TIME) + endif() +endif() diff --git a/examples/storage/fatfs_advanced/main/Kconfig.projbuild b/examples/storage/fatfs_advanced/main/Kconfig.projbuild new file mode 100644 index 000000000000..b715c917b845 --- /dev/null +++ b/examples/storage/fatfs_advanced/main/Kconfig.projbuild @@ -0,0 +1,24 @@ +menu "Example Configuration" + + config EXAMPLE_FATFS_MODE_READ_ONLY + bool "Read only mode for generated FATFS image" + default n + help + If read-only mode is set, the generated fatfs image will be raw (without wear levelling support). + Otherwise it will support wear levelling that enables read-write mounting. + + config EXAMPLE_FATFS_WRITE_COUNT + int "Number of volumes" + default 1 + range 1 600 + help + Number of writes to the file (for testing purposes). + + config EXAMPLE_FATFS_DEFAULT_DATETIME + bool "Default modification date and time for generated FATFS image" + default n + help + If default datetime is set, all files created in the generated FATFS partition have default time + equal to FATFS origin time (1 January 1980) + +endmenu diff --git a/examples/storage/fatfs_advanced/main/fatfs_advanced_example_main.c b/examples/storage/fatfs_advanced/main/fatfs_advanced_example_main.c new file mode 100644 index 000000000000..3d8032b163ed --- /dev/null +++ b/examples/storage/fatfs_advanced/main/fatfs_advanced_example_main.c @@ -0,0 +1,138 @@ +/* + * SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Unlicense OR CC0-1.0 + */ + +#include +#include +#include +#include +#include "esp_vfs.h" +#include "esp_vfs_fat.h" +#include "sdkconfig.h" + +static const char *TAG = "example"; + +// Mount path for the partition +const char *base_path = "/spiflash"; + +void write_file(const char *filename, const char *data) +{ + ESP_LOGI(TAG, "Opening file '%s' for writing", filename); + + FILE *f = fopen(filename, "w"); + if (f == NULL) { + ESP_LOGE(TAG, "Failed to open file for writing: %s", strerror(errno)); + return; + } + + ESP_LOGI(TAG, "Writing to file"); + + fputs(data, f); + + ESP_LOGI(TAG, "File written"); + + ESP_LOGI(TAG, "Closing file"); + fclose(f); +} + +void read_file(const char *filename) +{ + ESP_LOGI(TAG, "Opening file '%s' for reading", filename); + + FILE *f = fopen(filename, "r"); + if (f == NULL) { + ESP_LOGE(TAG, "Failed to open file for reading: %s", strerror(errno)); + return; + } + + ESP_LOGI(TAG, "Reading from file"); + + char line[128]; + fgets(line, sizeof(line), f); + + // strip newline + char *pos = strchr(line, '\n'); + if (pos) { + *pos = '\0'; // strip newline + } + + ESP_LOGI(TAG, "Read from file: '%s'", line); + + ESP_LOGI(TAG, "Closing file '%s'", filename); + fclose(f); +} + +void stat_file(const char *filename) +{ + + struct stat info; + struct tm timeinfo; + char buffer[32]; + + ESP_LOGI(TAG, "Stating file '%s' for modification time", filename); + + if(stat(filename, &info) < 0){ + ESP_LOGE(TAG, "Failed to read file stats: %s", strerror(errno)); + return; + } + localtime_r(&info.st_mtime, &timeinfo); + strftime(buffer, sizeof(buffer), "%Y-%m-%d", &timeinfo); + + ESP_LOGI(TAG, "The file '%s' was modified at date: %s", filename, buffer); +} + +void app_main(void) +{ + ESP_LOGI(TAG, "Mounting FAT filesystem"); + + // To mount device we need name of device partition, define base_path + // and allow format partition in case if it is new one and was not formatted before + const esp_vfs_fat_mount_config_t mount_config = { + .max_files = 4, + .format_if_mount_failed = false, + .allocation_unit_size = CONFIG_WL_SECTOR_SIZE, + .use_one_fat = false, + }; + + esp_err_t err; + +#ifdef CONFIG_EXAMPLE_FATFS_MODE_READ_ONLY + err = esp_vfs_fat_spiflash_mount_ro(base_path, "storage", &mount_config); +#else // CONFIG_EXAMPLE_FATFS_MODE_READ_ONLY + + // Handle of the wear levelling library instance + wl_handle_t wl_handle = WL_INVALID_HANDLE; + err = esp_vfs_fat_spiflash_mount_rw_wl(base_path, "storage", &mount_config, &wl_handle); +#endif // CONFIG_EXAMPLE_FATFS_MODE_READ_ONLY + + if (err != ESP_OK) { + ESP_LOGE(TAG, "Failed to mount FATFS (%s)python $IDF_PATH/tools/ci/ci_build_apps.py . --target esp32 -vv --pytest-apps", esp_err_to_name(err)); + return; + } + + // Read contents of a file + read_file("/spiflash/filegeneratedonhost.txt"); + + +#ifndef CONFIG_EXAMPLE_FATFS_MODE_READ_ONLY + // Create and write to a file + write_file("/spiflash/messagefromthedevice.txt", "This is written by the device"); + read_file("/spiflash/messagefromthedevice.txt"); +#endif // CONFIG_EXAMPLE_FATFS_MODE_READ_ONLY + + // Check when the file was last modified + stat_file("/spiflash/subdirectoryfromhost/innerfile.txt"); + + // Unmount FATFS + ESP_LOGI(TAG, "Unmounting FAT filesystem"); + +#ifdef CONFIG_EXAMPLE_FATFS_MODE_READ_ONLY + ESP_ERROR_CHECK(esp_vfs_fat_spiflash_unmount_ro(base_path, "storage")); +#else // CONFIG_EXAMPLE_FATFS_MODE_READ_ONLY + ESP_ERROR_CHECK(esp_vfs_fat_spiflash_unmount_rw_wl(base_path, wl_handle)); +#endif // CONFIG_EXAMPLE_FATFS_MODE_READ_ONLY + + ESP_LOGI(TAG, "Done"); +} diff --git a/examples/storage/fatfs_advanced/partitions_example.csv b/examples/storage/fatfs_advanced/partitions_example.csv new file mode 100644 index 000000000000..1c79321a107c --- /dev/null +++ b/examples/storage/fatfs_advanced/partitions_example.csv @@ -0,0 +1,6 @@ +# Name, Type, SubType, Offset, Size, Flags +# Note: if you have increased the bootloader size, make sure to update the offsets to avoid overlap +nvs, data, nvs, 0x9000, 0x6000, +phy_init, data, phy, 0xf000, 0x1000, +factory, app, factory, 0x10000, 1M, +storage, data, fat, , 1M, diff --git a/examples/storage/fatfs_advanced/pytest_fatfs_advanced_example.py b/examples/storage/fatfs_advanced/pytest_fatfs_advanced_example.py new file mode 100644 index 000000000000..ea7f491a8f75 --- /dev/null +++ b/examples/storage/fatfs_advanced/pytest_fatfs_advanced_example.py @@ -0,0 +1,112 @@ +# SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD +# SPDX-License-Identifier: Unlicense OR CC0-1.0 +import re +from datetime import datetime +from typing import List + +import pytest +from pytest_embedded import Dut + + +@pytest.mark.esp32 +@pytest.mark.generic +@pytest.mark.parametrize( + 'config', + [ + 'test_read_only_partition_gen', + 'test_read_only_partition_gen_default_dt', + 'test_read_write_partition_gen', + 'test_read_write_partition_gen_default_dt', + ], + indirect=True, +) +def test_examples_fatfs_advanced(config: str, dut: Dut) -> None: + # Expects list of strings sequentially + def expect_all(msg_list: List[str], to: int) -> None: + for msg in msg_list: + dut.expect(msg, timeout=to) + + # Expects prefix string followed by date in the format 'yyyy-mm-dd' + def expect_date(prefix: str, to: int) -> datetime: + expect_str = prefix + '(\\d+)-(\\d+)-(\\d+)' + match_ = dut.expect(re.compile(str.encode(expect_str)), timeout=to) + year_ = int(match_[1].decode()) + month_ = int(match_[2].decode()) + day_ = int(match_[3].decode()) + return datetime(year_, month_, day_) + + # Calculates absolute difference in days between date_reference and date_actual. + # Raises exception if difference exceeds tolerance + def evaluate_dates( + date_reference: datetime, date_actual: datetime, days_tolerance: int + ) -> None: + td = date_actual - date_reference + if abs(td.days) > days_tolerance: + raise Exception( + f'Too big date difference. Actual: {date_actual}, reference: {date_reference}, tolerance: {days_tolerance} day(s)' + ) + + # Expect timeout + timeout = 20 + + # We tolerate 30 days difference between actual file creation and date when test was executed. + tolerance = 30 + + expected_date = ( + datetime(1980, 1, 1) if config.endswith('default_dt') else datetime.today() + ) + + base_path = '/spiflash/' + folder_name = 'subdirectoryfromhost/' + read_filename = base_path + 'filegeneratedonhost.txt' + write_filename = base_path + 'messagefromthedevice.txt' + stat_filename = base_path + folder_name + 'innerfile.txt' + + dut.expect('example: Mounting FAT filesystem', timeout=timeout) + + # Check read + expect_all( + [ + f'example: Opening file \'{read_filename}\' for reading', + f'example: Reading from file', + 'example: Read from file: \'This is generated on the host; it has long name\'', + f'example: Closing file \'{read_filename}\'', + ], + timeout, + ) + + # Check write + if config.startswith('test_read_write'): + expect_all( + [ + f'example: Opening file \'{write_filename}\' for writing', + 'example: Writing to file', + 'example: File written', + 'example: Closing file', + f'example: Opening file \'{write_filename}\' for reading', + f'example: Reading from file', + 'example: Read from file: \'This is written by the device\'', + f'example: Closing file \'{write_filename}\'', + ], + timeout, + ) + + # Check date using stat + dut.expect( + f'example: Stating file \'{stat_filename}\' for modification time', timeout=timeout + ) + + actual_date = expect_date( + f'The file \'{stat_filename}\' was modified at date: ', timeout + ) + + evaluate_dates(expected_date, actual_date, tolerance) + + # Finish + expect_all( + [ + 'example: Unmounting FAT filesystem', + 'example: Done', + ], + timeout, + ) diff --git a/examples/storage/fatfs_advanced/sdkconfig.ci.test_read_only_partition_gen b/examples/storage/fatfs_advanced/sdkconfig.ci.test_read_only_partition_gen new file mode 100644 index 000000000000..21a7938068cd --- /dev/null +++ b/examples/storage/fatfs_advanced/sdkconfig.ci.test_read_only_partition_gen @@ -0,0 +1,5 @@ +CONFIG_EXAMPLE_FATFS_MODE_READ_ONLY=y +CONFIG_FATFS_LFN_HEAP=y +CONFIG_FATFS_LFN_STACK=n +CONFIG_FATFS_LFN_NONE=n +CONFIG_EXAMPLE_FATFS_WRITE_COUNT=300 diff --git a/examples/storage/fatfs_advanced/sdkconfig.ci.test_read_only_partition_gen_default_dt b/examples/storage/fatfs_advanced/sdkconfig.ci.test_read_only_partition_gen_default_dt new file mode 100644 index 000000000000..ed0be2575bab --- /dev/null +++ b/examples/storage/fatfs_advanced/sdkconfig.ci.test_read_only_partition_gen_default_dt @@ -0,0 +1,6 @@ +CONFIG_EXAMPLE_FATFS_MODE_READ_ONLY=y +CONFIG_FATFS_LFN_HEAP=y +CONFIG_FATFS_LFN_STACK=n +CONFIG_FATFS_LFN_NONE=n +CONFIG_EXAMPLE_FATFS_DEFAULT_DATETIME=y +CONFIG_EXAMPLE_FATFS_WRITE_COUNT=300 diff --git a/examples/storage/fatfs_advanced/sdkconfig.ci.test_read_write_partition_gen b/examples/storage/fatfs_advanced/sdkconfig.ci.test_read_write_partition_gen new file mode 100644 index 000000000000..4ffa5532339b --- /dev/null +++ b/examples/storage/fatfs_advanced/sdkconfig.ci.test_read_write_partition_gen @@ -0,0 +1,5 @@ +CONFIG_EXAMPLE_FATFS_MODE_READ_ONLY=n +CONFIG_FATFS_LFN_HEAP=y +CONFIG_FATFS_LFN_STACK=n +CONFIG_FATFS_LFN_NONE=n +CONFIG_EXAMPLE_FATFS_WRITE_COUNT=300 diff --git a/examples/storage/fatfs_advanced/sdkconfig.ci.test_read_write_partition_gen_default_dt b/examples/storage/fatfs_advanced/sdkconfig.ci.test_read_write_partition_gen_default_dt new file mode 100644 index 000000000000..6413768f3e55 --- /dev/null +++ b/examples/storage/fatfs_advanced/sdkconfig.ci.test_read_write_partition_gen_default_dt @@ -0,0 +1,6 @@ +CONFIG_EXAMPLE_FATFS_MODE_READ_ONLY=n +CONFIG_FATFS_LFN_HEAP=y +CONFIG_FATFS_LFN_STACK=n +CONFIG_FATFS_LFN_NONE=n +CONFIG_EXAMPLE_FATFS_DEFAULT_DATETIME=y +CONFIG_EXAMPLE_FATFS_WRITE_COUNT=300 diff --git a/examples/storage/fatfs_advanced/sdkconfig.defaults b/examples/storage/fatfs_advanced/sdkconfig.defaults new file mode 100644 index 000000000000..e5ac9375337f --- /dev/null +++ b/examples/storage/fatfs_advanced/sdkconfig.defaults @@ -0,0 +1,7 @@ +CONFIG_PARTITION_TABLE_CUSTOM=y +CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions_example.csv" +CONFIG_PARTITION_TABLE_FILENAME="partitions_example.csv" +CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y +CONFIG_FATFS_LFN_HEAP=y +CONFIG_FATFS_LFN_NONE=n +CONFIG_FATFS_LFN_STACK=n From 85b5869053e2ba928c3b5553379fa605f85fd491 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Rohl=C3=ADnek?= Date: Mon, 5 Aug 2024 14:09:09 +0200 Subject: [PATCH 127/365] feat(storage/fatfs): restructure basic example --- examples/storage/.build-test-rules.yml | 8 ------- examples/storage/fatfs/.build-test-rules.yml | 9 ++++++++ .../getting_started}/CMakeLists.txt | 0 .../getting_started}/README.md | 23 ++++++++++--------- .../fatfs/getting_started/main/CMakeLists.txt | 2 ++ .../main/fatfs_getting_started_main.c} | 6 ++--- .../getting_started}/partitions_example.csv | 0 .../pytest_fatfs_getting_started_example.py} | 4 ++-- .../getting_started}/sdkconfig.defaults | 0 .../storage/fatfs_basic/main/CMakeLists.txt | 2 -- 10 files changed, 28 insertions(+), 26 deletions(-) create mode 100644 examples/storage/fatfs/.build-test-rules.yml rename examples/storage/{fatfs_basic => fatfs/getting_started}/CMakeLists.txt (100%) rename examples/storage/{fatfs_basic => fatfs/getting_started}/README.md (67%) create mode 100644 examples/storage/fatfs/getting_started/main/CMakeLists.txt rename examples/storage/{fatfs_basic/main/fat_example_main.c => fatfs/getting_started/main/fatfs_getting_started_main.c} (93%) rename examples/storage/{fatfs_basic => fatfs/getting_started}/partitions_example.csv (100%) rename examples/storage/{fatfs_basic/pytest_fat_example.py => fatfs/getting_started/pytest_fatfs_getting_started_example.py} (81%) rename examples/storage/{fatfs_basic => fatfs/getting_started}/sdkconfig.defaults (100%) delete mode 100644 examples/storage/fatfs_basic/main/CMakeLists.txt diff --git a/examples/storage/.build-test-rules.yml b/examples/storage/.build-test-rules.yml index 5999ae95eac0..8ec3101a5a36 100644 --- a/examples/storage/.build-test-rules.yml +++ b/examples/storage/.build-test-rules.yml @@ -42,14 +42,6 @@ examples/storage/fatfs_advanced: - if: IDF_TARGET != "esp32" reason: only one target needed -examples/storage/fatfs_basic: - depends_components: - - fatfs - - vfs - disable_test: - - if: IDF_TARGET != "esp32" - reason: only one target needed - examples/storage/nvs_rw_blob: depends_components: - nvs_flash diff --git a/examples/storage/fatfs/.build-test-rules.yml b/examples/storage/fatfs/.build-test-rules.yml new file mode 100644 index 000000000000..f652dd52d8eb --- /dev/null +++ b/examples/storage/fatfs/.build-test-rules.yml @@ -0,0 +1,9 @@ +# Documentation: .gitlab/ci/README.md#manifest-file-to-control-the-buildtest-apps + +examples/storage/fatfs: + depends_components: + - fatfs + - vfs + disable_test: + - if: IDF_TARGET != "esp32" + reason: only one target needed diff --git a/examples/storage/fatfs_basic/CMakeLists.txt b/examples/storage/fatfs/getting_started/CMakeLists.txt similarity index 100% rename from examples/storage/fatfs_basic/CMakeLists.txt rename to examples/storage/fatfs/getting_started/CMakeLists.txt diff --git a/examples/storage/fatfs_basic/README.md b/examples/storage/fatfs/getting_started/README.md similarity index 67% rename from examples/storage/fatfs_basic/README.md rename to examples/storage/fatfs/getting_started/README.md index 0ee84f105dfb..626f9323cbb0 100644 --- a/examples/storage/fatfs_basic/README.md +++ b/examples/storage/fatfs/getting_started/README.md @@ -1,5 +1,5 @@ -| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-H2 | ESP32-P4 | ESP32-S2 | ESP32-S3 | -| ----------------- | ----- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-H2 | ESP32-P4 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | -------- | -------- | -------- | # FATFS minimal example @@ -29,15 +29,16 @@ Here is the example's console output: ``` ... -I (339) example: Mounting FAT filesystem -I (339) example: Filesystem mounted -I (339) example: Opening file -I (729) example: File written -I (729) example: Reading file -I (739) example: Read from file: 'This is written by the device' -I (739) example: Unmounting FAT filesystem -I (849) example: Done +I (321) example: Mounting FAT filesystem +I (331) example: Filesystem mounted +I (331) example: Opening file +I (731) example: File written +I (731) example: Reading file +I (741) example: Read from file: 'Hello World!' +I (741) example: Unmounting FAT filesystem +I (851) example: Done +... ``` -The logic of the example is contained in a [single source file](./main/fat_example_main.c), +The logic of the example is contained in a [single source file](./main/fatfs_getting_started_main.c), and it should be relatively simple to match points in its execution with the log outputs above. diff --git a/examples/storage/fatfs/getting_started/main/CMakeLists.txt b/examples/storage/fatfs/getting_started/main/CMakeLists.txt new file mode 100644 index 000000000000..fec5d19cadad --- /dev/null +++ b/examples/storage/fatfs/getting_started/main/CMakeLists.txt @@ -0,0 +1,2 @@ +idf_component_register(SRCS "fatfs_getting_started_main.c" + INCLUDE_DIRS ".") diff --git a/examples/storage/fatfs_basic/main/fat_example_main.c b/examples/storage/fatfs/getting_started/main/fatfs_getting_started_main.c similarity index 93% rename from examples/storage/fatfs_basic/main/fat_example_main.c rename to examples/storage/fatfs/getting_started/main/fatfs_getting_started_main.c index 2a57821e70dc..ae8529160e04 100644 --- a/examples/storage/fatfs_basic/main/fat_example_main.c +++ b/examples/storage/fatfs/getting_started/main/fatfs_getting_started_main.c @@ -31,8 +31,8 @@ void app_main(void) .use_one_fat = false, // Use only one FAT table (reduce memory usage), but decrease reliability of file system in case of power failure. }; + // Mount FATFS filesystem located on "storage" partition in read-write mode esp_err_t err = esp_vfs_fat_spiflash_mount_rw_wl(base_path, "storage", &mount_config, &s_wl_handle); - if (err != ESP_OK) { ESP_LOGE(TAG, "Failed to mount FATFS (%s)", esp_err_to_name(err)); return; @@ -46,12 +46,12 @@ void app_main(void) FILE *f = fopen(filename, "wb"); if (f == NULL) { - perror("fopen"); + perror("fopen"); // Print reason why fopen failed ESP_LOGE(TAG, "Failed to open file for writing"); return; } - fprintf(f, "This is written by the device"); + fprintf(f, "Hello World!\n"); fclose(f); ESP_LOGI(TAG, "File written"); diff --git a/examples/storage/fatfs_basic/partitions_example.csv b/examples/storage/fatfs/getting_started/partitions_example.csv similarity index 100% rename from examples/storage/fatfs_basic/partitions_example.csv rename to examples/storage/fatfs/getting_started/partitions_example.csv diff --git a/examples/storage/fatfs_basic/pytest_fat_example.py b/examples/storage/fatfs/getting_started/pytest_fatfs_getting_started_example.py similarity index 81% rename from examples/storage/fatfs_basic/pytest_fat_example.py rename to examples/storage/fatfs/getting_started/pytest_fatfs_getting_started_example.py index 7abafe062de2..e7f9d7d78a72 100644 --- a/examples/storage/fatfs_basic/pytest_fat_example.py +++ b/examples/storage/fatfs/getting_started/pytest_fatfs_getting_started_example.py @@ -6,12 +6,12 @@ @pytest.mark.esp32 @pytest.mark.generic -def test_examples_fatfs_basic(dut: Dut) -> None: +def test_examples_fatfs_getting_started(dut: Dut) -> None: dut.expect('example: Mounting FAT filesystem', timeout=90) dut.expect('example: Filesystem mounted', timeout=90) dut.expect('example: Opening file', timeout=90) dut.expect('example: File written', timeout=90) dut.expect('example: Reading file', timeout=90) - dut.expect('example: Read from file: \'This is written by the device\'', timeout=90) + dut.expect('example: Read from file: \'Hello World!\'', timeout=90) dut.expect('example: Unmounting FAT filesystem', timeout=90) dut.expect('example: Done', timeout=90) diff --git a/examples/storage/fatfs_basic/sdkconfig.defaults b/examples/storage/fatfs/getting_started/sdkconfig.defaults similarity index 100% rename from examples/storage/fatfs_basic/sdkconfig.defaults rename to examples/storage/fatfs/getting_started/sdkconfig.defaults diff --git a/examples/storage/fatfs_basic/main/CMakeLists.txt b/examples/storage/fatfs_basic/main/CMakeLists.txt deleted file mode 100644 index 827c3c2e8e0f..000000000000 --- a/examples/storage/fatfs_basic/main/CMakeLists.txt +++ /dev/null @@ -1,2 +0,0 @@ -idf_component_register(SRCS "fat_example_main.c" - INCLUDE_DIRS ".") From 587290567d8a6df7820e0f809c55a17385c479f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Rohl=C3=ADnek?= Date: Mon, 5 Aug 2024 14:12:16 +0200 Subject: [PATCH 128/365] feat(storage/fatfs): restructure advanced example --- examples/storage/.build-test-rules.yml | 8 - .../fs_operations}/CMakeLists.txt | 0 .../storage/fatfs/fs_operations/README.md | 94 ++++++++ .../fatfs/fs_operations/main/CMakeLists.txt | 2 + .../main/fatfs_fs_operations_example_main.c | 207 ++++++++++++++++++ .../fs_operations}/partitions_example.csv | 0 .../pytest_fatfs_fs_operations_example.py | 80 +++++++ .../fs_operations}/sdkconfig.defaults | 0 examples/storage/fatfs_advanced/README.md | 69 ------ .../filegeneratedonhost.txt | 1 - .../subdirectoryfromhost/innerfile.txt | 1 - .../fatfs_advanced/main/CMakeLists.txt | 26 --- .../fatfs_advanced/main/Kconfig.projbuild | 24 -- .../main/fatfs_advanced_example_main.c | 138 ------------ .../pytest_fatfs_advanced_example.py | 112 ---------- .../sdkconfig.ci.test_read_only_partition_gen | 5 - ...ci.test_read_only_partition_gen_default_dt | 6 - ...sdkconfig.ci.test_read_write_partition_gen | 5 - ...i.test_read_write_partition_gen_default_dt | 6 - 19 files changed, 383 insertions(+), 401 deletions(-) rename examples/storage/{fatfs_advanced => fatfs/fs_operations}/CMakeLists.txt (100%) create mode 100644 examples/storage/fatfs/fs_operations/README.md create mode 100644 examples/storage/fatfs/fs_operations/main/CMakeLists.txt create mode 100644 examples/storage/fatfs/fs_operations/main/fatfs_fs_operations_example_main.c rename examples/storage/{fatfs_advanced => fatfs/fs_operations}/partitions_example.csv (100%) create mode 100644 examples/storage/fatfs/fs_operations/pytest_fatfs_fs_operations_example.py rename examples/storage/{fatfs_advanced => fatfs/fs_operations}/sdkconfig.defaults (100%) delete mode 100644 examples/storage/fatfs_advanced/README.md delete mode 100644 examples/storage/fatfs_advanced/fatfs_long_name_image/filegeneratedonhost.txt delete mode 100644 examples/storage/fatfs_advanced/fatfs_long_name_image/subdirectoryfromhost/innerfile.txt delete mode 100644 examples/storage/fatfs_advanced/main/CMakeLists.txt delete mode 100644 examples/storage/fatfs_advanced/main/Kconfig.projbuild delete mode 100644 examples/storage/fatfs_advanced/main/fatfs_advanced_example_main.c delete mode 100644 examples/storage/fatfs_advanced/pytest_fatfs_advanced_example.py delete mode 100644 examples/storage/fatfs_advanced/sdkconfig.ci.test_read_only_partition_gen delete mode 100644 examples/storage/fatfs_advanced/sdkconfig.ci.test_read_only_partition_gen_default_dt delete mode 100644 examples/storage/fatfs_advanced/sdkconfig.ci.test_read_write_partition_gen delete mode 100644 examples/storage/fatfs_advanced/sdkconfig.ci.test_read_write_partition_gen_default_dt diff --git a/examples/storage/.build-test-rules.yml b/examples/storage/.build-test-rules.yml index 8ec3101a5a36..341e0f595a88 100644 --- a/examples/storage/.build-test-rules.yml +++ b/examples/storage/.build-test-rules.yml @@ -34,14 +34,6 @@ examples/storage/ext_flash_fatfs: temporary: true reason: lack of runners -examples/storage/fatfs_advanced: - depends_components: - - fatfs - - vfs - disable_test: - - if: IDF_TARGET != "esp32" - reason: only one target needed - examples/storage/nvs_rw_blob: depends_components: - nvs_flash diff --git a/examples/storage/fatfs_advanced/CMakeLists.txt b/examples/storage/fatfs/fs_operations/CMakeLists.txt similarity index 100% rename from examples/storage/fatfs_advanced/CMakeLists.txt rename to examples/storage/fatfs/fs_operations/CMakeLists.txt diff --git a/examples/storage/fatfs/fs_operations/README.md b/examples/storage/fatfs/fs_operations/README.md new file mode 100644 index 000000000000..e11f3077b502 --- /dev/null +++ b/examples/storage/fatfs/fs_operations/README.md @@ -0,0 +1,94 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-H2 | ESP32-P4 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | -------- | -------- | -------- | + +# FATFS Filesystem Operations Example + +(See the README.md file in the upper level 'examples' directory for more information about examples.) + +This example demonstrates some of the POSIX functions available for working with the FATFS filesystem. +Including basic read and write operations, as well as creating moving, and deleting files and directories. + +## Overview + +1. Partition labeled `storage` is mounted (and formatted if necessary) as FATFS filesystem to `/spiflash` mountpoint. + +2. All existing files and directories in the root directory are deleted. + +3. File `hello.txt` is created and written to. + +4. File `hello.txt` is inspected using `fstat` function showing file size and last modification time. + +5. File `hello.txt` is written to again, appending to the end of the file. + +6. File `hello.txt` is read from and the contents are printed to the console. + +7. New directory `new_dir` is created. + +8. All files and directories in the root directory are listed. + +9. File `hello.txt` is moved and renamed to `new_dir/hello_renamed.txt`. + +## How to use example + +### Build and flash + +To run the example, type the following command: + +```CMake +# CMake +idf.py -p PORT flash monitor +``` + +(To exit the serial monitor, type ``Ctrl-]``.) + +See the Getting Started Guide for full steps to configure and use ESP-IDF to build projects. + +## Example output + +Here is the example's console output: + +``` +... +I (323) example: Mounting FAT filesystem +I (333) example: Deleting everything in /spiflash: +I (333) example: Deleting everything in /spiflash/new_dir: +I (673) example: Creating a file +I (683) example: Writing to the file +I (733) example: File stats: + File size: 13 bytes + File modification time: Thu Jan 1 00:00:00 1970 + +I (743) example: Wait for 1 seconds +I (1743) example: Write more to the file +I (1743) example: File stats: + File size: 26 bytes + File modification time: Thu Jan 1 00:00:00 1970 + +I (1743) example: Go to the beginning of the file +I (1753) example: Reading from file: +Hello World! +Hello World! + +I (1753) example: Closing file +I (1993) example: Listing files in /spiflash: +/spiflash: + file : hello.txt +I (1993) example: Creating a new directory +I (2383) example: Listing files in /spiflash: +/spiflash: + file : hello.txt + directory: new_dir +I (2383) example: Rename a file +I (2503) example: Listing files in /spiflash: +/spiflash: + directory: new_dir +I (2503) example: Listing files in /spiflash/new_dir: +/spiflash/new_dir: + file : hello_renamed.txt +I (2513) example: Unmounting FAT filesystem +I (2643) example: Done +... +``` + +The logic of the example is contained in a [single source file](./main/fatfs_fs_operations_example_main.c), +and it should be relatively simple to match points in its execution with the log outputs above. diff --git a/examples/storage/fatfs/fs_operations/main/CMakeLists.txt b/examples/storage/fatfs/fs_operations/main/CMakeLists.txt new file mode 100644 index 000000000000..a5ae965fc4cd --- /dev/null +++ b/examples/storage/fatfs/fs_operations/main/CMakeLists.txt @@ -0,0 +1,2 @@ +idf_component_register(SRCS "fatfs_fs_operations_example_main.c" + INCLUDE_DIRS ".") diff --git a/examples/storage/fatfs/fs_operations/main/fatfs_fs_operations_example_main.c b/examples/storage/fatfs/fs_operations/main/fatfs_fs_operations_example_main.c new file mode 100644 index 000000000000..c2dd5bc226a9 --- /dev/null +++ b/examples/storage/fatfs/fs_operations/main/fatfs_fs_operations_example_main.c @@ -0,0 +1,207 @@ +/* + * SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Unlicense OR CC0-1.0 + */ + +#include +#include +#include +#include +#include +#include +#include +#include "esp_vfs.h" +#include "esp_vfs_fat.h" +#include "sdkconfig.h" + +static const char *TAG = "example"; + +// Mount path for the partition +static const char *base_path = "/spiflash"; + +// File name +static const char *filename = "/spiflash/hello.txt"; + +// Function to dump contents of a directory +static void list_dir(const char *path); + +// Best effort recursive function to clean a directory +static void clean_dir(const char *path); + +void app_main(void) +{ + ESP_LOGI(TAG, "Mounting FAT filesystem"); + + // To mount device we need name of device partition, define base_path + // and allow format partition in case if it is new one and was not formatted before + const esp_vfs_fat_mount_config_t mount_config = { + .max_files = 4, + .format_if_mount_failed = true, + .allocation_unit_size = CONFIG_WL_SECTOR_SIZE, + .use_one_fat = false, + }; + + wl_handle_t wl_handle = WL_INVALID_HANDLE; + + esp_err_t err = ESP_OK; + + err = esp_vfs_fat_spiflash_mount_rw_wl(base_path, "storage", &mount_config, &wl_handle); + if (err != ESP_OK) { + ESP_LOGE(TAG, "Failed to mount FATFS (%s)", esp_err_to_name(err)); + return; + } + + // Ensure the working directory is empty + clean_dir(base_path); + + ESP_LOGI(TAG, "Creating a file"); + + // Unlike C standard library which uses FILE*, POSIX API uses file descriptors for file operations + int fd = open(filename, O_RDWR | O_CREAT | O_TRUNC, 0); + if (fd < 0) { + ESP_LOGE(TAG, "Failed to open file for writing"); + return; + } + + ESP_LOGI(TAG, "Writing to the file"); + const char *text = "Hello World!\n"; + write(fd, text, strlen(text)); + + struct stat info; + // We have to use `stat` instead of `fstat`, because `fstat` currently isn't fully supported + if (stat(filename, &info) < 0) { + ESP_LOGE(TAG, "Failed to stat file: %s", strerror(errno)); + close(fd); + return; + } + + ESP_LOGI( + TAG, + "File stats:\n" + "\tFile size: %ld bytes\n" + "\tFile modification time: %s", + info.st_size, + ctime(&info.st_mtime) + ); + + ESP_LOGI(TAG, "Wait for 3 seconds"); + sleep(3); + + ESP_LOGI(TAG, "Write more to the file"); + write(fd, text, strlen(text)); + + ESP_LOGI(TAG, "Force cached data and metadata to the filesystem"); + fsync(fd); + + if (stat(filename, &info) < 0) { + ESP_LOGE(TAG, "Failed to stat file: %s", strerror(errno)); + close(fd); + return; + } + + ESP_LOGI( + TAG, + "File stats:\n" + "\tFile size: %ld bytes\n" + "\tFile modification time: %s", + info.st_size, + ctime(&info.st_mtime) + ); + + ESP_LOGI(TAG, "Go to the beginning of the file"); + lseek(fd, 0, SEEK_SET); + + ESP_LOGI(TAG, "Reading from file:"); + + char buf[128] = {0}; + + ssize_t len = read(fd, buf, sizeof(buf) - 1); + if (len < 0) { + ESP_LOGE(TAG, "Failed to read file: %s", strerror(errno)); + close(fd); + return; + } + + printf("%.*s\n", len, buf); + + ESP_LOGI(TAG, "Closing file"); + close(fd); + + // List files in the directory + list_dir(base_path); + + ESP_LOGI(TAG, "Creating a new directory"); + if (mkdir("/spiflash/new_dir", 0777) < 0) { + ESP_LOGE(TAG, "Failed to create a new directory: %s", strerror(errno)); + return; + } + + // List files in the directory + list_dir(base_path); + + ESP_LOGI(TAG, "Rename a file"); + + if (rename(filename, "/spiflash/new_dir/hello_renamed.txt") < 0) { + ESP_LOGE(TAG, "Failed to rename file: %s", strerror(errno)); + return; + } + + // List files in the directory + list_dir(base_path); + list_dir("/spiflash/new_dir"); + + ESP_LOGI(TAG, "Unmounting FAT filesystem"); + ESP_ERROR_CHECK(esp_vfs_fat_spiflash_unmount_rw_wl(base_path, wl_handle)); + + ESP_LOGI(TAG, "Done"); +} + +void list_dir(const char *path) +{ + ESP_LOGI(TAG, "Listing files in %s:", path); + + DIR *dir = opendir(path); + if (!dir) { + ESP_LOGE(TAG, "Failed to open directory: %s", strerror(errno)); + return; + } + + printf("%s:\n", path); + struct dirent *entry; + while ((entry = readdir(dir)) != NULL) { + printf( + " %s: %s\n", + (entry->d_type == DT_DIR) + ? "directory" + : "file ", + entry->d_name + ); + } + + closedir(dir); +} + +void clean_dir(const char *path) +{ + ESP_LOGI(TAG, "Deleting everything in %s:", path); + + DIR *dir = opendir(path); + if (!dir) { + ESP_LOGE(TAG, "Failed to open directory: %s", strerror(errno)); + return; + } + + struct dirent *entry; + while ((entry = readdir(dir)) != NULL) { + char full_path[64] = {0}; + snprintf(full_path, sizeof(full_path), "%.20s/%.40s", path, entry->d_name); + if (entry->d_type == DT_DIR) + clean_dir(full_path); + if (remove(full_path) != 0) { + ESP_LOGE(TAG, "Failed to remove %s: %s", full_path, strerror(errno)); + } + } + + closedir(dir); +} diff --git a/examples/storage/fatfs_advanced/partitions_example.csv b/examples/storage/fatfs/fs_operations/partitions_example.csv similarity index 100% rename from examples/storage/fatfs_advanced/partitions_example.csv rename to examples/storage/fatfs/fs_operations/partitions_example.csv diff --git a/examples/storage/fatfs/fs_operations/pytest_fatfs_fs_operations_example.py b/examples/storage/fatfs/fs_operations/pytest_fatfs_fs_operations_example.py new file mode 100644 index 000000000000..4067c80d134c --- /dev/null +++ b/examples/storage/fatfs/fs_operations/pytest_fatfs_fs_operations_example.py @@ -0,0 +1,80 @@ +# SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD +# SPDX-License-Identifier: Unlicense OR CC0-1.0 +from datetime import datetime +from typing import List + +import pytest +from pytest_embedded import Dut + + +@pytest.mark.esp32 +@pytest.mark.generic +def test_examples_fatfs_fs_operations(config: str, dut: Dut) -> None: + # Expects list of strings sequentially + def expect_all(msg_list: List[str], to: int) -> None: + for msg in msg_list: + dut.expect(msg, timeout=to) + + def parse_date() -> datetime: + months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] + + pattern = r'([A-Z][a-z]{2}) ([A-Z][a-z]{2}) ([ \d]\d) (\d{2}):(\d{2}):(\d{2}) (\d{4})' + + match = dut.expect(pattern) + return datetime( + month=months.index(match[2].decode('utf-8')) + 1, + day=int(match[3]), + hour=int(match[4]), + minute=int(match[5]), + second=int(match[6]), + year=int(match[7]), + ) + + expect_all( + [ + 'example: Mounting FAT filesystem', + 'example: Creating a file', + 'example: Writing to the file', + 'example: File stats:', + 'File size:', + ], + 5 + ) + + original = parse_date() + + expect_all( + [ + 'example: Wait for 3 seconds', + 'example: Write more to the file', + 'example: Force cached data and metadata to the filesystem', + 'File size:', + ], + 5 + ) + + updated = parse_date() + + assert updated > original + + expect_all( + [ + 'example: Go to the beginning of the file', + 'example: Reading from file', + 'Hello World!', + 'Hello World!', + 'example: Closing file', + 'example: Listing files in /spiflash:', + 'hello.txt', + 'example: Creating a new directory', + 'example: Listing files in /spiflash:', + 'hello.txt', + 'new_dir', + 'example: Rename a file', + 'example: Listing files in /spiflash:', + 'new_dir', + 'example: Listing files in /spiflash/new_dir:', + 'hello_renamed.txt', + ], + 5 + ) diff --git a/examples/storage/fatfs_advanced/sdkconfig.defaults b/examples/storage/fatfs/fs_operations/sdkconfig.defaults similarity index 100% rename from examples/storage/fatfs_advanced/sdkconfig.defaults rename to examples/storage/fatfs/fs_operations/sdkconfig.defaults diff --git a/examples/storage/fatfs_advanced/README.md b/examples/storage/fatfs_advanced/README.md deleted file mode 100644 index 34ab038fc54f..000000000000 --- a/examples/storage/fatfs_advanced/README.md +++ /dev/null @@ -1,69 +0,0 @@ -| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-H2 | ESP32-P4 | ESP32-S2 | ESP32-S3 | -| ----------------- | ----- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | - -# FATFS partition generation example - -(See the README.md file in the upper level 'examples' directory for more information about examples.) - -This example demonstrates how to use the FATFS partition -generation tool [fatfsgen.py](../../../components/fatfs/fatfsgen.py) to automatically create a FATFS -filesystem image from the contents of a host folder during build, with an option of -automatically flashing the created image on invocation of `idf.py -p PORT flash` as well as usage of long file names for FATFS. -Beware that the minimal required size of the flash is 4 MB. -You can specify using menuconfig weather example will use read-only or read-write mode. The default option is read-write mode. -To change it just use menuconfig: - -```shell -idf.py menuconfig -``` - -Then select `Example Configuration` a chose `Mode for generated FATFS image` either `Read-Write Mode` or `Read-Only Mode`. -`Read-Only` option indicates generating raw fatfs image without wear levelling support. -On the other hand, for `Read-Write` the generated fatfs image will support wear levelling thus can be mounted in read-write mode. - - -The following gives an overview of the example: - -1. There is a directory `fatfs_image` from which the FATFS filesystem image will be created. - -2. The function `fatfs_create_rawflash_image` is used to specify that a FATFS image -should be created during build for the `storage` partition. -For CMake, it is called from [the main component's CMakeLists.txt](./main/CMakeLists.txt). -`FLASH_IN_PROJECT` specifies that the created image -should be flashed on invocation of `idf.py -p PORT flash` together with app, bootloader, partition table, etc. -The image is created on the example's build directory with the output filename `storage.bin`. - -3. Upon invocation of `idf.py -p PORT flash monitor`, application loads and -finds there is already a valid FATFS filesystem in the `storage` partition with files same as those in `fatfs_image` directory. The application is then -able to read those files. - -## How to use example - -### Build and flash - -To run the example, type the following command: - -```CMake -# CMake -idf.py -p PORT flash monitor -``` - -(To exit the serial monitor, type ``Ctrl-]``.) - -See the Getting Started Guide for full steps to configure and use ESP-IDF to build projects. - -## Example output - -Here is the example's console output: - -``` -... -I (322) example: Mounting FAT filesystem -I (332) example: Reading file -I (332) example: Read from file: 'this is test' -I (332) example: Unmounting FAT filesystem -I (342) example: Done -``` - -The logic of the example is contained in a [single source file](./main/fatfsgen_example_main.c), -and it should be relatively simple to match points in its execution with the log outputs above. diff --git a/examples/storage/fatfs_advanced/fatfs_long_name_image/filegeneratedonhost.txt b/examples/storage/fatfs_advanced/fatfs_long_name_image/filegeneratedonhost.txt deleted file mode 100644 index 33f47c9b1db9..000000000000 --- a/examples/storage/fatfs_advanced/fatfs_long_name_image/filegeneratedonhost.txt +++ /dev/null @@ -1 +0,0 @@ -This is generated on the host; it has long name diff --git a/examples/storage/fatfs_advanced/fatfs_long_name_image/subdirectoryfromhost/innerfile.txt b/examples/storage/fatfs_advanced/fatfs_long_name_image/subdirectoryfromhost/innerfile.txt deleted file mode 100644 index 84505e3d3e72..000000000000 --- a/examples/storage/fatfs_advanced/fatfs_long_name_image/subdirectoryfromhost/innerfile.txt +++ /dev/null @@ -1 +0,0 @@ -this is test; it has long name diff --git a/examples/storage/fatfs_advanced/main/CMakeLists.txt b/examples/storage/fatfs_advanced/main/CMakeLists.txt deleted file mode 100644 index 28eed4c7c32f..000000000000 --- a/examples/storage/fatfs_advanced/main/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -idf_component_register(SRCS "fatfs_advanced_example_main.c" - INCLUDE_DIRS ".") - -# Create a FATFS image from the contents of the 'fatfs_image' directory -# that fits the partition named 'storage'. FLASH_IN_PROJECT indicates that -# the generated image should be flashed when the entire project is flashed to -# the target with 'idf.py -p PORT flash'. -# If read-only mode is set (CONFIG_EXAMPLE_FATFS_MODE_READ_ONLY) -# the generated image will be raw without wear levelling support. -# Otherwise it will support wear levelling and thus enable read-write mounting of the image in the device. - -set(image ../fatfs_long_name_image) - -if(CONFIG_EXAMPLE_FATFS_MODE_READ_ONLY) - if(CONFIG_EXAMPLE_FATFS_DEFAULT_DATETIME) - fatfs_create_rawflash_image(storage ${image} FLASH_IN_PROJECT) - else() - fatfs_create_rawflash_image(storage ${image} FLASH_IN_PROJECT PRESERVE_TIME) - endif() -else() - if(CONFIG_EXAMPLE_FATFS_DEFAULT_DATETIME) - fatfs_create_spiflash_image(storage ${image} FLASH_IN_PROJECT) - else() - fatfs_create_spiflash_image(storage ${image} FLASH_IN_PROJECT PRESERVE_TIME) - endif() -endif() diff --git a/examples/storage/fatfs_advanced/main/Kconfig.projbuild b/examples/storage/fatfs_advanced/main/Kconfig.projbuild deleted file mode 100644 index b715c917b845..000000000000 --- a/examples/storage/fatfs_advanced/main/Kconfig.projbuild +++ /dev/null @@ -1,24 +0,0 @@ -menu "Example Configuration" - - config EXAMPLE_FATFS_MODE_READ_ONLY - bool "Read only mode for generated FATFS image" - default n - help - If read-only mode is set, the generated fatfs image will be raw (without wear levelling support). - Otherwise it will support wear levelling that enables read-write mounting. - - config EXAMPLE_FATFS_WRITE_COUNT - int "Number of volumes" - default 1 - range 1 600 - help - Number of writes to the file (for testing purposes). - - config EXAMPLE_FATFS_DEFAULT_DATETIME - bool "Default modification date and time for generated FATFS image" - default n - help - If default datetime is set, all files created in the generated FATFS partition have default time - equal to FATFS origin time (1 January 1980) - -endmenu diff --git a/examples/storage/fatfs_advanced/main/fatfs_advanced_example_main.c b/examples/storage/fatfs_advanced/main/fatfs_advanced_example_main.c deleted file mode 100644 index 3d8032b163ed..000000000000 --- a/examples/storage/fatfs_advanced/main/fatfs_advanced_example_main.c +++ /dev/null @@ -1,138 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Unlicense OR CC0-1.0 - */ - -#include -#include -#include -#include -#include "esp_vfs.h" -#include "esp_vfs_fat.h" -#include "sdkconfig.h" - -static const char *TAG = "example"; - -// Mount path for the partition -const char *base_path = "/spiflash"; - -void write_file(const char *filename, const char *data) -{ - ESP_LOGI(TAG, "Opening file '%s' for writing", filename); - - FILE *f = fopen(filename, "w"); - if (f == NULL) { - ESP_LOGE(TAG, "Failed to open file for writing: %s", strerror(errno)); - return; - } - - ESP_LOGI(TAG, "Writing to file"); - - fputs(data, f); - - ESP_LOGI(TAG, "File written"); - - ESP_LOGI(TAG, "Closing file"); - fclose(f); -} - -void read_file(const char *filename) -{ - ESP_LOGI(TAG, "Opening file '%s' for reading", filename); - - FILE *f = fopen(filename, "r"); - if (f == NULL) { - ESP_LOGE(TAG, "Failed to open file for reading: %s", strerror(errno)); - return; - } - - ESP_LOGI(TAG, "Reading from file"); - - char line[128]; - fgets(line, sizeof(line), f); - - // strip newline - char *pos = strchr(line, '\n'); - if (pos) { - *pos = '\0'; // strip newline - } - - ESP_LOGI(TAG, "Read from file: '%s'", line); - - ESP_LOGI(TAG, "Closing file '%s'", filename); - fclose(f); -} - -void stat_file(const char *filename) -{ - - struct stat info; - struct tm timeinfo; - char buffer[32]; - - ESP_LOGI(TAG, "Stating file '%s' for modification time", filename); - - if(stat(filename, &info) < 0){ - ESP_LOGE(TAG, "Failed to read file stats: %s", strerror(errno)); - return; - } - localtime_r(&info.st_mtime, &timeinfo); - strftime(buffer, sizeof(buffer), "%Y-%m-%d", &timeinfo); - - ESP_LOGI(TAG, "The file '%s' was modified at date: %s", filename, buffer); -} - -void app_main(void) -{ - ESP_LOGI(TAG, "Mounting FAT filesystem"); - - // To mount device we need name of device partition, define base_path - // and allow format partition in case if it is new one and was not formatted before - const esp_vfs_fat_mount_config_t mount_config = { - .max_files = 4, - .format_if_mount_failed = false, - .allocation_unit_size = CONFIG_WL_SECTOR_SIZE, - .use_one_fat = false, - }; - - esp_err_t err; - -#ifdef CONFIG_EXAMPLE_FATFS_MODE_READ_ONLY - err = esp_vfs_fat_spiflash_mount_ro(base_path, "storage", &mount_config); -#else // CONFIG_EXAMPLE_FATFS_MODE_READ_ONLY - - // Handle of the wear levelling library instance - wl_handle_t wl_handle = WL_INVALID_HANDLE; - err = esp_vfs_fat_spiflash_mount_rw_wl(base_path, "storage", &mount_config, &wl_handle); -#endif // CONFIG_EXAMPLE_FATFS_MODE_READ_ONLY - - if (err != ESP_OK) { - ESP_LOGE(TAG, "Failed to mount FATFS (%s)python $IDF_PATH/tools/ci/ci_build_apps.py . --target esp32 -vv --pytest-apps", esp_err_to_name(err)); - return; - } - - // Read contents of a file - read_file("/spiflash/filegeneratedonhost.txt"); - - -#ifndef CONFIG_EXAMPLE_FATFS_MODE_READ_ONLY - // Create and write to a file - write_file("/spiflash/messagefromthedevice.txt", "This is written by the device"); - read_file("/spiflash/messagefromthedevice.txt"); -#endif // CONFIG_EXAMPLE_FATFS_MODE_READ_ONLY - - // Check when the file was last modified - stat_file("/spiflash/subdirectoryfromhost/innerfile.txt"); - - // Unmount FATFS - ESP_LOGI(TAG, "Unmounting FAT filesystem"); - -#ifdef CONFIG_EXAMPLE_FATFS_MODE_READ_ONLY - ESP_ERROR_CHECK(esp_vfs_fat_spiflash_unmount_ro(base_path, "storage")); -#else // CONFIG_EXAMPLE_FATFS_MODE_READ_ONLY - ESP_ERROR_CHECK(esp_vfs_fat_spiflash_unmount_rw_wl(base_path, wl_handle)); -#endif // CONFIG_EXAMPLE_FATFS_MODE_READ_ONLY - - ESP_LOGI(TAG, "Done"); -} diff --git a/examples/storage/fatfs_advanced/pytest_fatfs_advanced_example.py b/examples/storage/fatfs_advanced/pytest_fatfs_advanced_example.py deleted file mode 100644 index ea7f491a8f75..000000000000 --- a/examples/storage/fatfs_advanced/pytest_fatfs_advanced_example.py +++ /dev/null @@ -1,112 +0,0 @@ -# SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD -# SPDX-License-Identifier: Unlicense OR CC0-1.0 -import re -from datetime import datetime -from typing import List - -import pytest -from pytest_embedded import Dut - - -@pytest.mark.esp32 -@pytest.mark.generic -@pytest.mark.parametrize( - 'config', - [ - 'test_read_only_partition_gen', - 'test_read_only_partition_gen_default_dt', - 'test_read_write_partition_gen', - 'test_read_write_partition_gen_default_dt', - ], - indirect=True, -) -def test_examples_fatfs_advanced(config: str, dut: Dut) -> None: - # Expects list of strings sequentially - def expect_all(msg_list: List[str], to: int) -> None: - for msg in msg_list: - dut.expect(msg, timeout=to) - - # Expects prefix string followed by date in the format 'yyyy-mm-dd' - def expect_date(prefix: str, to: int) -> datetime: - expect_str = prefix + '(\\d+)-(\\d+)-(\\d+)' - match_ = dut.expect(re.compile(str.encode(expect_str)), timeout=to) - year_ = int(match_[1].decode()) - month_ = int(match_[2].decode()) - day_ = int(match_[3].decode()) - return datetime(year_, month_, day_) - - # Calculates absolute difference in days between date_reference and date_actual. - # Raises exception if difference exceeds tolerance - def evaluate_dates( - date_reference: datetime, date_actual: datetime, days_tolerance: int - ) -> None: - td = date_actual - date_reference - if abs(td.days) > days_tolerance: - raise Exception( - f'Too big date difference. Actual: {date_actual}, reference: {date_reference}, tolerance: {days_tolerance} day(s)' - ) - - # Expect timeout - timeout = 20 - - # We tolerate 30 days difference between actual file creation and date when test was executed. - tolerance = 30 - - expected_date = ( - datetime(1980, 1, 1) if config.endswith('default_dt') else datetime.today() - ) - - base_path = '/spiflash/' - folder_name = 'subdirectoryfromhost/' - read_filename = base_path + 'filegeneratedonhost.txt' - write_filename = base_path + 'messagefromthedevice.txt' - stat_filename = base_path + folder_name + 'innerfile.txt' - - dut.expect('example: Mounting FAT filesystem', timeout=timeout) - - # Check read - expect_all( - [ - f'example: Opening file \'{read_filename}\' for reading', - f'example: Reading from file', - 'example: Read from file: \'This is generated on the host; it has long name\'', - f'example: Closing file \'{read_filename}\'', - ], - timeout, - ) - - # Check write - if config.startswith('test_read_write'): - expect_all( - [ - f'example: Opening file \'{write_filename}\' for writing', - 'example: Writing to file', - 'example: File written', - 'example: Closing file', - f'example: Opening file \'{write_filename}\' for reading', - f'example: Reading from file', - 'example: Read from file: \'This is written by the device\'', - f'example: Closing file \'{write_filename}\'', - ], - timeout, - ) - - # Check date using stat - dut.expect( - f'example: Stating file \'{stat_filename}\' for modification time', timeout=timeout - ) - - actual_date = expect_date( - f'The file \'{stat_filename}\' was modified at date: ', timeout - ) - - evaluate_dates(expected_date, actual_date, tolerance) - - # Finish - expect_all( - [ - 'example: Unmounting FAT filesystem', - 'example: Done', - ], - timeout, - ) diff --git a/examples/storage/fatfs_advanced/sdkconfig.ci.test_read_only_partition_gen b/examples/storage/fatfs_advanced/sdkconfig.ci.test_read_only_partition_gen deleted file mode 100644 index 21a7938068cd..000000000000 --- a/examples/storage/fatfs_advanced/sdkconfig.ci.test_read_only_partition_gen +++ /dev/null @@ -1,5 +0,0 @@ -CONFIG_EXAMPLE_FATFS_MODE_READ_ONLY=y -CONFIG_FATFS_LFN_HEAP=y -CONFIG_FATFS_LFN_STACK=n -CONFIG_FATFS_LFN_NONE=n -CONFIG_EXAMPLE_FATFS_WRITE_COUNT=300 diff --git a/examples/storage/fatfs_advanced/sdkconfig.ci.test_read_only_partition_gen_default_dt b/examples/storage/fatfs_advanced/sdkconfig.ci.test_read_only_partition_gen_default_dt deleted file mode 100644 index ed0be2575bab..000000000000 --- a/examples/storage/fatfs_advanced/sdkconfig.ci.test_read_only_partition_gen_default_dt +++ /dev/null @@ -1,6 +0,0 @@ -CONFIG_EXAMPLE_FATFS_MODE_READ_ONLY=y -CONFIG_FATFS_LFN_HEAP=y -CONFIG_FATFS_LFN_STACK=n -CONFIG_FATFS_LFN_NONE=n -CONFIG_EXAMPLE_FATFS_DEFAULT_DATETIME=y -CONFIG_EXAMPLE_FATFS_WRITE_COUNT=300 diff --git a/examples/storage/fatfs_advanced/sdkconfig.ci.test_read_write_partition_gen b/examples/storage/fatfs_advanced/sdkconfig.ci.test_read_write_partition_gen deleted file mode 100644 index 4ffa5532339b..000000000000 --- a/examples/storage/fatfs_advanced/sdkconfig.ci.test_read_write_partition_gen +++ /dev/null @@ -1,5 +0,0 @@ -CONFIG_EXAMPLE_FATFS_MODE_READ_ONLY=n -CONFIG_FATFS_LFN_HEAP=y -CONFIG_FATFS_LFN_STACK=n -CONFIG_FATFS_LFN_NONE=n -CONFIG_EXAMPLE_FATFS_WRITE_COUNT=300 diff --git a/examples/storage/fatfs_advanced/sdkconfig.ci.test_read_write_partition_gen_default_dt b/examples/storage/fatfs_advanced/sdkconfig.ci.test_read_write_partition_gen_default_dt deleted file mode 100644 index 6413768f3e55..000000000000 --- a/examples/storage/fatfs_advanced/sdkconfig.ci.test_read_write_partition_gen_default_dt +++ /dev/null @@ -1,6 +0,0 @@ -CONFIG_EXAMPLE_FATFS_MODE_READ_ONLY=n -CONFIG_FATFS_LFN_HEAP=y -CONFIG_FATFS_LFN_STACK=n -CONFIG_FATFS_LFN_NONE=n -CONFIG_EXAMPLE_FATFS_DEFAULT_DATETIME=y -CONFIG_EXAMPLE_FATFS_WRITE_COUNT=300 From 33788de97955d9e57508313661099c9cf39e66fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Rohl=C3=ADnek?= Date: Mon, 5 Aug 2024 14:16:58 +0200 Subject: [PATCH 129/365] feat(storage/fatfs): restructure ext_flash example --- examples/storage/.build-test-rules.yml | 15 --------------- .../storage/ext_flash_fatfs/main/CMakeLists.txt | 1 - examples/storage/fatfs/.build-test-rules.yml | 15 +++++++++++++++ .../ext_flash}/CMakeLists.txt | 0 .../ext_flash}/README.md | 0 .../storage/fatfs/ext_flash/main/CMakeLists.txt | 1 + .../main/fatfs_ext_flash_example_main.c} | 5 +++++ .../ext_flash/pytest_fatfs_ext_flash.py} | 2 -- tools/ci/check_copyright_ignore.txt | 1 - 9 files changed, 21 insertions(+), 19 deletions(-) delete mode 100644 examples/storage/ext_flash_fatfs/main/CMakeLists.txt rename examples/storage/{ext_flash_fatfs => fatfs/ext_flash}/CMakeLists.txt (100%) rename examples/storage/{ext_flash_fatfs => fatfs/ext_flash}/README.md (100%) create mode 100644 examples/storage/fatfs/ext_flash/main/CMakeLists.txt rename examples/storage/{ext_flash_fatfs/main/ext_flash_fatfs_example_main.c => fatfs/ext_flash/main/fatfs_ext_flash_example_main.c} (98%) rename examples/storage/{ext_flash_fatfs/pytest_ext_flash_fatfs.py => fatfs/ext_flash/pytest_fatfs_ext_flash.py} (99%) diff --git a/examples/storage/.build-test-rules.yml b/examples/storage/.build-test-rules.yml index 341e0f595a88..967d8ed5b8ed 100644 --- a/examples/storage/.build-test-rules.yml +++ b/examples/storage/.build-test-rules.yml @@ -19,21 +19,6 @@ examples/storage/emmc: - if: IDF_TARGET == "esp32s3" reason: only support on esp32s3 -examples/storage/ext_flash_fatfs: - depends_components: - - fatfs - - vfs - - spi_flash - - driver - disable: - - if: IDF_TARGET in ["esp32p4", "esp32c5", "esp32c61"] - temporary: true - reason: not supported on p4 and c5 # TODO: [ESP32C5] IDF-8715, [ESP32C61] IDF-9314 - disable_test: - - if: IDF_TARGET not in ["esp32"] - temporary: true - reason: lack of runners - examples/storage/nvs_rw_blob: depends_components: - nvs_flash diff --git a/examples/storage/ext_flash_fatfs/main/CMakeLists.txt b/examples/storage/ext_flash_fatfs/main/CMakeLists.txt deleted file mode 100644 index c8a5c30e46be..000000000000 --- a/examples/storage/ext_flash_fatfs/main/CMakeLists.txt +++ /dev/null @@ -1 +0,0 @@ -idf_component_register(SRCS "ext_flash_fatfs_example_main.c") diff --git a/examples/storage/fatfs/.build-test-rules.yml b/examples/storage/fatfs/.build-test-rules.yml index f652dd52d8eb..4f3ae3aa16a7 100644 --- a/examples/storage/fatfs/.build-test-rules.yml +++ b/examples/storage/fatfs/.build-test-rules.yml @@ -7,3 +7,18 @@ examples/storage/fatfs: disable_test: - if: IDF_TARGET != "esp32" reason: only one target needed + +examples/storage/fatfs/ext_flash: + depends_components: + - fatfs + - vfs + - spi_flash + - driver + disable: + - if: IDF_TARGET in ["esp32p4", "esp32c5", "esp32c61"] + temporary: true + reason: not supported on p4 and c5 # TODO: [ESP32C5] IDF-8715, [ESP32C61] IDF-9314 + disable_test: + - if: IDF_TARGET not in ["esp32"] + temporary: true + reason: lack of runners diff --git a/examples/storage/ext_flash_fatfs/CMakeLists.txt b/examples/storage/fatfs/ext_flash/CMakeLists.txt similarity index 100% rename from examples/storage/ext_flash_fatfs/CMakeLists.txt rename to examples/storage/fatfs/ext_flash/CMakeLists.txt diff --git a/examples/storage/ext_flash_fatfs/README.md b/examples/storage/fatfs/ext_flash/README.md similarity index 100% rename from examples/storage/ext_flash_fatfs/README.md rename to examples/storage/fatfs/ext_flash/README.md diff --git a/examples/storage/fatfs/ext_flash/main/CMakeLists.txt b/examples/storage/fatfs/ext_flash/main/CMakeLists.txt new file mode 100644 index 000000000000..dea52d1cb4a5 --- /dev/null +++ b/examples/storage/fatfs/ext_flash/main/CMakeLists.txt @@ -0,0 +1 @@ +idf_component_register(SRCS "fatfs_ext_flash_example_main.c") diff --git a/examples/storage/ext_flash_fatfs/main/ext_flash_fatfs_example_main.c b/examples/storage/fatfs/ext_flash/main/fatfs_ext_flash_example_main.c similarity index 98% rename from examples/storage/ext_flash_fatfs/main/ext_flash_fatfs_example_main.c rename to examples/storage/fatfs/ext_flash/main/fatfs_ext_flash_example_main.c index aa2a2c0990b9..4e10057d10f0 100644 --- a/examples/storage/ext_flash_fatfs/main/ext_flash_fatfs_example_main.c +++ b/examples/storage/fatfs/ext_flash/main/fatfs_ext_flash_example_main.c @@ -1,3 +1,8 @@ +/* + * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Unlicense OR CC0-1.0 + */ /* Example of FAT filesystem on external Flash. This example code is in the Public Domain (or CC0 licensed, at your option.) diff --git a/examples/storage/ext_flash_fatfs/pytest_ext_flash_fatfs.py b/examples/storage/fatfs/ext_flash/pytest_fatfs_ext_flash.py similarity index 99% rename from examples/storage/ext_flash_fatfs/pytest_ext_flash_fatfs.py rename to examples/storage/fatfs/ext_flash/pytest_fatfs_ext_flash.py index afe81763a3ab..56dd334a49aa 100644 --- a/examples/storage/ext_flash_fatfs/pytest_ext_flash_fatfs.py +++ b/examples/storage/fatfs/ext_flash/pytest_fatfs_ext_flash.py @@ -1,7 +1,5 @@ # SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD # SPDX-License-Identifier: Unlicense OR CC0-1.0 - - import pytest from pytest_embedded import Dut diff --git a/tools/ci/check_copyright_ignore.txt b/tools/ci/check_copyright_ignore.txt index f605b7cd0543..8ffb0dc2e2ae 100644 --- a/tools/ci/check_copyright_ignore.txt +++ b/tools/ci/check_copyright_ignore.txt @@ -1023,7 +1023,6 @@ examples/security/flash_encryption/main/flash_encrypt_main.c examples/storage/custom_flash_driver/components/custom_chip_driver/chip_drivers.c examples/storage/custom_flash_driver/components/custom_chip_driver/spi_flash_chip_eon.c examples/storage/custom_flash_driver/main/main.c -examples/storage/ext_flash_fatfs/main/ext_flash_fatfs_example_main.c examples/storage/nvs_rw_blob/main/nvs_blob_example_main.c examples/storage/nvs_rw_value/main/nvs_value_example_main.c examples/storage/nvs_rw_value_cxx/main/nvs_value_example_main.cpp From d43669b2d7bb9c88a669eab661cff56aef730f0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Rohl=C3=ADnek?= Date: Thu, 8 Aug 2024 10:13:41 +0200 Subject: [PATCH 130/365] feat(storage/fatfs): restructure fatfsgen example --- .../storage/fatfs/fatfsgen/CMakeLists.txt | 6 ++ examples/storage/fatfs/fatfsgen/README.md | 69 ++++++++++++++ .../fatfsgen/fatfs_image/hellolongname.txt | 1 + .../fatfs_image/subdir/testlongfilenames.txt | 1 + .../fatfs/fatfsgen/main/CMakeLists.txt | 18 ++++ .../fatfs/fatfsgen/main/Kconfig.projbuild | 10 ++ .../fatfsgen/main/fatfsgen_example_main.c | 92 +++++++++++++++++++ .../fatfs/fatfsgen/partitions_example.csv | 6 ++ .../fatfsgen/pytest_fatfs_fatfsgen_example.py | 72 +++++++++++++++ ...kconfig.ci.test_read_only_partition_gen_ln | 4 + ...config.ci.test_read_write_partition_gen_ln | 4 + .../storage/fatfs/fatfsgen/sdkconfig.defaults | 4 + 12 files changed, 287 insertions(+) create mode 100644 examples/storage/fatfs/fatfsgen/CMakeLists.txt create mode 100644 examples/storage/fatfs/fatfsgen/README.md create mode 100644 examples/storage/fatfs/fatfsgen/fatfs_image/hellolongname.txt create mode 100644 examples/storage/fatfs/fatfsgen/fatfs_image/subdir/testlongfilenames.txt create mode 100644 examples/storage/fatfs/fatfsgen/main/CMakeLists.txt create mode 100644 examples/storage/fatfs/fatfsgen/main/Kconfig.projbuild create mode 100644 examples/storage/fatfs/fatfsgen/main/fatfsgen_example_main.c create mode 100644 examples/storage/fatfs/fatfsgen/partitions_example.csv create mode 100644 examples/storage/fatfs/fatfsgen/pytest_fatfs_fatfsgen_example.py create mode 100644 examples/storage/fatfs/fatfsgen/sdkconfig.ci.test_read_only_partition_gen_ln create mode 100644 examples/storage/fatfs/fatfsgen/sdkconfig.ci.test_read_write_partition_gen_ln create mode 100644 examples/storage/fatfs/fatfsgen/sdkconfig.defaults diff --git a/examples/storage/fatfs/fatfsgen/CMakeLists.txt b/examples/storage/fatfs/fatfsgen/CMakeLists.txt new file mode 100644 index 000000000000..1c0c2b8a1a2a --- /dev/null +++ b/examples/storage/fatfs/fatfsgen/CMakeLists.txt @@ -0,0 +1,6 @@ +# The following lines of boilerplate have to be in your project's CMakeLists +# in this exact order for cmake to work correctly +cmake_minimum_required(VERSION 3.16) + +include($ENV{IDF_PATH}/tools/cmake/project.cmake) +project(fatfsgen) diff --git a/examples/storage/fatfs/fatfsgen/README.md b/examples/storage/fatfs/fatfsgen/README.md new file mode 100644 index 000000000000..aa203d8356d8 --- /dev/null +++ b/examples/storage/fatfs/fatfsgen/README.md @@ -0,0 +1,69 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-H2 | ESP32-P4 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | -------- | -------- | -------- | + +# FATFS partition generation example + +(See the README.md file in the upper level 'examples' directory for more information about examples.) + +This example demonstrates how to use the FATFS partition +generation tool [fatfsgen.py](../../../components/fatfs/fatfsgen.py) to automatically create a FATFS +filesystem image from the contents of a host folder during build, with an option of +automatically flashing the created image on invocation of `idf.py -p PORT flash`. +Beware that the minimal required size of the flash is 4 MB. +You can specify using menuconfig weather example will use read-only or read-write mode. The default option is read-write mode. +To change it just use menuconfig: + +```shell +idf.py menuconfig +``` + +Then select `Example Configuration` a chose `Mode for generated FATFS image` either `Read-Write Mode` or `Read-Only Mode`. +`Read-Only` option indicates generating raw fatfs image without wear levelling support. +On the other hand, for `Read-Write` the generated fatfs image will support wear levelling thus can be mounted in read-write mode. + + +The following gives an overview of the example: + +1. There is a directory `fatfs_long_name_image` from which the FATFS filesystem image will be created. + +2. Based on the RO/RW configuration either `fatfs_create_rawflash_image` or `fatfs_create_spiflash_image` respectively, +is used to specify that a FATFS image should be created during build for the `storage` partition. +For CMake, it is called from [the main component's CMakeLists.txt](./main/CMakeLists.txt). +`FLASH_IN_PROJECT` specifies that the created image +should be flashed on invocation of `idf.py -p PORT flash` together with app, bootloader, partition table, etc. +The image is created on the example's build directory with the output filename `storage.bin`. + +3. Upon invocation of `idf.py -p PORT flash monitor`, application loads and +finds there is already a valid FATFS filesystem in the `storage` partition with files same as those in `fatfs_image` directory. The application is then +able to read those files. + +## How to use example + +### Build and flash + +To run the example, type the following command: + +```CMake +# CMake +idf.py -p PORT flash monitor +``` + +(To exit the serial monitor, type ``Ctrl-]``.) + +See the Getting Started Guide for full steps to configure and use ESP-IDF to build projects. + +## Example output + +Here is the example's console output: + +``` +... +I (322) example: Mounting FAT filesystem +I (332) example: Reading file +I (332) example: Read from file: 'this is test' +I (332) example: Unmounting FAT filesystem +I (342) example: Done +``` + +The logic of the example is contained in a [single source file](./main/fatfsgen_example_main.c), +and it should be relatively simple to match points in its execution with the log outputs above. diff --git a/examples/storage/fatfs/fatfsgen/fatfs_image/hellolongname.txt b/examples/storage/fatfs/fatfsgen/fatfs_image/hellolongname.txt new file mode 100644 index 000000000000..45caad272569 --- /dev/null +++ b/examples/storage/fatfs/fatfsgen/fatfs_image/hellolongname.txt @@ -0,0 +1 @@ +This is generated on the host; long name it has diff --git a/examples/storage/fatfs/fatfsgen/fatfs_image/subdir/testlongfilenames.txt b/examples/storage/fatfs/fatfsgen/fatfs_image/subdir/testlongfilenames.txt new file mode 100644 index 000000000000..e8c8c6d51ffb --- /dev/null +++ b/examples/storage/fatfs/fatfsgen/fatfs_image/subdir/testlongfilenames.txt @@ -0,0 +1 @@ +this is test; long name it has diff --git a/examples/storage/fatfs/fatfsgen/main/CMakeLists.txt b/examples/storage/fatfs/fatfsgen/main/CMakeLists.txt new file mode 100644 index 000000000000..1b625a37226d --- /dev/null +++ b/examples/storage/fatfs/fatfsgen/main/CMakeLists.txt @@ -0,0 +1,18 @@ +idf_component_register(SRCS "fatfsgen_example_main.c" + INCLUDE_DIRS ".") + +# Create a FATFS image from the contents of the 'fatfs_long_name_image' directory +# that fits the partition named 'storage'. FLASH_IN_PROJECT indicates that +# the generated image should be flashed when the entire project is flashed to +# the target with 'idf.py -p PORT flash'. +# If read-only mode is set (CONFIG_EXAMPLE_FATFS_MODE_READ_ONLY) +# the generated image will be raw without wear levelling support. +# Otherwise it will support wear levelling and thus enable read-write mounting of the image in the device. + +set(image ../fatfs_image) + +if(CONFIG_EXAMPLE_FATFS_MODE_READ_ONLY) + fatfs_create_rawflash_image(storage ${image} FLASH_IN_PROJECT PRESERVE_TIME) +else() + fatfs_create_spiflash_image(storage ${image} FLASH_IN_PROJECT PRESERVE_TIME) +endif() diff --git a/examples/storage/fatfs/fatfsgen/main/Kconfig.projbuild b/examples/storage/fatfs/fatfsgen/main/Kconfig.projbuild new file mode 100644 index 000000000000..ef79d394562b --- /dev/null +++ b/examples/storage/fatfs/fatfsgen/main/Kconfig.projbuild @@ -0,0 +1,10 @@ +menu "Example Configuration" + + config EXAMPLE_FATFS_MODE_READ_ONLY + bool "Read only mode for generated FATFS image" + default y + help + If read-only mode is set, the generated fatfs image will be raw (without wear levelling support). + Otherwise it will support wear levelling that enables read-write mounting. + +endmenu diff --git a/examples/storage/fatfs/fatfsgen/main/fatfsgen_example_main.c b/examples/storage/fatfs/fatfsgen/main/fatfsgen_example_main.c new file mode 100644 index 000000000000..abc01a900a89 --- /dev/null +++ b/examples/storage/fatfs/fatfsgen/main/fatfsgen_example_main.c @@ -0,0 +1,92 @@ +/* + * SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Unlicense OR CC0-1.0 + */ + +#include +#include +#include +#include "esp_vfs.h" +#include "esp_vfs_fat.h" +#include "esp_err.h" +#include "sdkconfig.h" + +static const char *TAG = "example"; + +// Mount path for the partition +const char *base_path = "/spiflash"; + + +void app_main(void) +{ + // To mount device we need name of device partition, define base_path + // and allow format partition in case if it is new one and was not formatted before + const esp_vfs_fat_mount_config_t mount_config = { + .max_files = 4, + .format_if_mount_failed = false, + .allocation_unit_size = CONFIG_WL_SECTOR_SIZE, + .use_one_fat = false, + }; + +#if CONFIG_EXAMPLE_FATFS_MODE_READ_ONLY + ESP_LOGI(TAG, "Mounting FAT filesystem in read-only mode"); + esp_err_t err = esp_vfs_fat_spiflash_mount_ro(base_path, "storage", &mount_config); +#else + ESP_LOGI(TAG, "Mounting FAT filesystem in read/write mode"); + static wl_handle_t wl_handle = WL_INVALID_HANDLE; + esp_err_t err = esp_vfs_fat_spiflash_mount_rw_wl(base_path, "storage", &mount_config, &wl_handle); +#endif + + if (err != ESP_OK) { + ESP_LOGE(TAG, "Failed to mount FATFS (%s)", esp_err_to_name(err)); + return; + } + + char line[128]; + + FILE *f; + char *pos; + ESP_LOGI(TAG, "Reading file"); + + const char *host_filename1 = "/spiflash/subdir/testlongfilenames.txt"; + + struct stat info; + struct tm timeinfo; + char buffer[32]; + + if(stat(host_filename1, &info) < 0){ + ESP_LOGE(TAG, "Failed to read file stats"); + return; + } + localtime_r(&info.st_mtime, &timeinfo); + strftime(buffer, sizeof(buffer), "%Y-%m-%d", &timeinfo); + + ESP_LOGI(TAG, "The file '%s' was modified at date: %s", host_filename1, buffer); + + + f = fopen(host_filename1, "rb"); + if (f == NULL) { + ESP_LOGE(TAG, "Failed to open file for reading"); + return; + } + fgets(line, sizeof(line), f); + fclose(f); + // strip newline + pos = strchr(line, '\n'); + if (pos) { + *pos = '\0'; + } + ESP_LOGI(TAG, "Read from file: '%s'", line); + + // Unmount FATFS + ESP_LOGI(TAG, "Unmounting FAT filesystem"); + +#if CONFIG_EXAMPLE_FATFS_MODE_READ_ONLY + ESP_ERROR_CHECK(esp_vfs_fat_spiflash_unmount_ro(base_path, "storage")); +#else + ESP_ERROR_CHECK(esp_vfs_fat_spiflash_unmount_rw_wl(base_path, wl_handle)); +#endif + + ESP_LOGI(TAG, "Done"); +} diff --git a/examples/storage/fatfs/fatfsgen/partitions_example.csv b/examples/storage/fatfs/fatfsgen/partitions_example.csv new file mode 100644 index 000000000000..a3fee302e29b --- /dev/null +++ b/examples/storage/fatfs/fatfsgen/partitions_example.csv @@ -0,0 +1,6 @@ +# Name, Type, SubType, Offset, Size, Flags +# Note: if you have increased the bootloader size, make sure to update the offsets to avoid overlap +nvs, data, nvs, 0x9000, 0x6000, +phy_init, data, phy, 0xf000, 0x1000, +factory, app, factory, 0x10000, 1M, +storage, data, fat, , 1M, diff --git a/examples/storage/fatfs/fatfsgen/pytest_fatfs_fatfsgen_example.py b/examples/storage/fatfs/fatfsgen/pytest_fatfs_fatfsgen_example.py new file mode 100644 index 000000000000..e0966604ebeb --- /dev/null +++ b/examples/storage/fatfs/fatfsgen/pytest_fatfs_fatfsgen_example.py @@ -0,0 +1,72 @@ +# SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD +# SPDX-License-Identifier: Unlicense OR CC0-1.0 +import os +import re +from datetime import datetime +from typing import List + +import pytest +from pytest_embedded import Dut + +idf_path = os.environ['IDF_PATH'] # get value of IDF_PATH from environment +parttool_dir = os.path.join(idf_path, 'components', 'partition_table') + + +@pytest.mark.esp32 +@pytest.mark.generic +@pytest.mark.parametrize('config', ['test_read_only_partition_gen_ln', + 'test_read_write_partition_gen_ln', + ], indirect=True) +def test_examples_fatfs_fatfsgen(config: str, dut: Dut) -> None: + # Expects list of strings sequentially + def expect_all(msg_list: List[str], to: int) -> None: + for msg in msg_list: + dut.expect(msg, timeout=to) + + # Expects prefix string followed by date in the format 'yyyy-mm-dd' + def expect_date(prefix: str, to: int) -> datetime: + expect_str = prefix + '(\\d+)-(\\d+)-(\\d+)' + match_ = dut.expect(re.compile(str.encode(expect_str)), timeout=to) + year_ = int(match_[1].decode()) + month_ = int(match_[2].decode()) + day_ = int(match_[3].decode()) + return datetime(year_, month_, day_) + + # Calculates absolute difference in days between date_reference and date_actual. + # Raises exception if difference exceeds tolerance + def evaluate_dates(date_reference: datetime, date_actual: datetime, days_tolerance: int) -> None: + td = date_actual - date_reference + if abs(td.days) > days_tolerance: + raise Exception(f'Too big date difference. Actual: {date_actual}, reference: {date_reference}, tolerance: {days_tolerance} day(s)') + + # Expect timeout + timeout = 20 + + # We tolerate 30 days difference between actual file creation and date when test was executed. + tolerance = 30 + filename = 'sublongnames/testlongfilenames.txt' + date_ref = datetime.today() + + if config in ['test_read_write_partition_gen']: + filename_expected = f'/spiflash/{filename}' + expect_all(['example: Mounting FAT filesystem', + 'example: Opening file', + 'example: File written', + 'example: Reading file', + 'example: Read from file: \'This is written by the device\'', + 'example: Reading file'], timeout) + date_act = expect_date(f'The file \'{filename_expected}\' was modified at date: ', timeout) + evaluate_dates(date_ref, date_act, tolerance) + expect_all(['example: Read from file: \'This is generated on the host\'', + 'example: Unmounting FAT filesystem', + 'example: Done'], timeout) + + elif config in ['test_read_only_partition_gen']: + filename_expected = f'/spiflash/{filename}' + expect_all(['example: Mounting FAT filesystem', + 'example: Reading file'], timeout) + date_act = expect_date(f'The file \'{filename_expected}\' was modified at date: ', timeout) + evaluate_dates(date_ref, date_act, tolerance) + expect_all(['example: Read from file: \'this is test\'', + 'example: Unmounting FAT filesystem', + 'example: Done'], timeout) diff --git a/examples/storage/fatfs/fatfsgen/sdkconfig.ci.test_read_only_partition_gen_ln b/examples/storage/fatfs/fatfsgen/sdkconfig.ci.test_read_only_partition_gen_ln new file mode 100644 index 000000000000..5122126dcbc5 --- /dev/null +++ b/examples/storage/fatfs/fatfsgen/sdkconfig.ci.test_read_only_partition_gen_ln @@ -0,0 +1,4 @@ +CONFIG_EXAMPLE_FATFS_MODE_READ_ONLY=y +CONFIG_FATFS_LFN_HEAP=y +CONFIG_FATFS_LFN_NONE=n +CONFIG_FATFS_LFN_STACK=n diff --git a/examples/storage/fatfs/fatfsgen/sdkconfig.ci.test_read_write_partition_gen_ln b/examples/storage/fatfs/fatfsgen/sdkconfig.ci.test_read_write_partition_gen_ln new file mode 100644 index 000000000000..33a0ccfad3d4 --- /dev/null +++ b/examples/storage/fatfs/fatfsgen/sdkconfig.ci.test_read_write_partition_gen_ln @@ -0,0 +1,4 @@ +CONFIG_EXAMPLE_FATFS_MODE_READ_ONLY=n +CONFIG_FATFS_LFN_HEAP=y +CONFIG_FATFS_LFN_NONE=n +CONFIG_FATFS_LFN_STACK=n diff --git a/examples/storage/fatfs/fatfsgen/sdkconfig.defaults b/examples/storage/fatfs/fatfsgen/sdkconfig.defaults new file mode 100644 index 000000000000..7dd3c63608f0 --- /dev/null +++ b/examples/storage/fatfs/fatfsgen/sdkconfig.defaults @@ -0,0 +1,4 @@ +CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y +CONFIG_PARTITION_TABLE_CUSTOM=y +CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions_example.csv" +CONFIG_FATFS_LFN_HEAP=y From 46982e69da245da50119c3ee6446abc23f922a56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Rohl=C3=ADnek?= Date: Tue, 3 Sep 2024 13:30:45 +0200 Subject: [PATCH 131/365] feat(storage/vfs): update example references in documentation --- docs/en/api-reference/storage/fatfs.rst | 4 +- docs/en/api-reference/storage/index.rst | 64 ++++++++++++++++++------- 2 files changed, 49 insertions(+), 19 deletions(-) diff --git a/docs/en/api-reference/storage/fatfs.rst b/docs/en/api-reference/storage/fatfs.rst index f45007607ce4..20bdbac6a327 100644 --- a/docs/en/api-reference/storage/fatfs.rst +++ b/docs/en/api-reference/storage/fatfs.rst @@ -123,7 +123,7 @@ If you decide for any reason to use ``fatfs_create_rawflash_image`` (without wea The arguments of the function are as follows: -#. partition - the name of the partition as defined in the partition table (e.g., :example_file:`storage/fatfsgen/partitions_example.csv`). +#. partition - the name of the partition as defined in the partition table (e.g., :example_file:`storage/fatfs/fatfsgen/partitions_example.csv`). #. base_dir - the directory that will be encoded to FatFs partition and optionally flashed into the device. Beware that you have to specify the suitable size of the partition in the partition table. @@ -139,7 +139,7 @@ For example:: If FLASH_IN_PROJECT is not specified, the image will still be generated, but you will have to flash it manually using ``esptool.py`` or a custom build system target. -For an example, see :example:`storage/fatfsgen`. +For an example, see :example:`storage/fatfs/fatfsgen`. .. _fatfs-partition-analyzer: diff --git a/docs/en/api-reference/storage/index.rst b/docs/en/api-reference/storage/index.rst index 19bf5b6b9291..22d5197fcb3f 100644 --- a/docs/en/api-reference/storage/index.rst +++ b/docs/en/api-reference/storage/index.rst @@ -37,22 +37,15 @@ For information about storage security, please refer to :doc:`Storage Security < wear-levelling storage-security.rst -.. list-table:: Code Examples for Storage API +Examples +-------- + +.. list-table:: NVS API examples :widths: 25 75 :header-rows: 0 * - **Code Example** - **Description** - * - :doc:`fatfs` - - - * - :example:`wear_leveling ` - - Demonstrates using FATFS over wear leveling on internal flash. - * - :example:`ext_flash_fatfs ` - - Demonstrates using FATFS over wear leveling on external flash. - * - :example:`fatfsgen ` - - Demonstrates the capabilities of Python-based tooling for FATFS images available on host computers. - * - :doc:`nvs_flash` - - * - :example:`nvs_rw_blob ` - Shows the use of the C-style API to read and write blob data types in NVS flash. * - :example:`nvs_rw_value ` @@ -61,20 +54,57 @@ For information about storage security, please refer to :doc:`Storage Security < - Shows the use of the C++-style API to read and write integer data types in NVS flash. * - :example:`nvsgen ` - Demonstrates how to use the Python-based NVS image generation tool to create an NVS partition image from the contents of a CSV file. - * - :doc:`spiffs` - - + +.. list-table:: Common Filesystem API + :widths: 25 75 + :header-rows: 0 + + * - **Code Example** + - **Description** + * - :example:`fatfs/getting_started ` + - Demonstrates basic common file API(stdio.h) usage over internal flash using FATFS. + * - :example:`fatfs/fs_operations ` + - Demonstrates POSIX API for filesystem manipulation, such as moving, removing and renaming files. + +.. list-table:: FATFS API examples + :widths: 25 75 + :header-rows: 0 + + * - :example:`fatfsgen ` + - Demonstrates the capabilities of Python-based tooling for FATFS images available on host computers. + * - :example:`ext_flash_fatfs ` + - Demonstrates using FATFS over wear leveling on external flash. + * - :example:`wear_leveling ` + - Demonstrates using FATFS over wear leveling on internal flash. + +.. list-table:: SPIFFS API examples + :widths: 25 75 + :header-rows: 0 + + * - **Code Example** + - **Description** * - :example:`spiffs ` - Shows the use of the SPIFFS API to initialize the filesystem and work with files using POSIX functions. * - :example:`spiffsgen ` - Demonstrates the capabilities of Python-based tooling for SPIFFS images available on host computers. - * - :doc:`partition` - - + +.. list-table:: Partition API examples + :widths: 25 75 + :header-rows: 0 + + * - **Code Example** + - **Description** * - :example:`partition_api ` - Provides an overview of API functions to look up particular partitions, perform basic I/O operations, and use partitions via CPU memory mapping. * - :example:`parttool ` - Demonstrates the capabilities of Python-based tooling for partition images available on host computers. - * - :doc:`vfs` - - + +.. list-table:: VFS related examples + :widths: 25 75 + :header-rows: 0 + + * - **Code Example** + - **Description** * - :example:`littlefs ` - Shows the use of the LittleFS component to initialize the filesystem and work with a file using POSIX functions. * - :example:`semihost_vfs ` From ebe5ac900bc17be361f0d2f78754b60116f475bf Mon Sep 17 00:00:00 2001 From: renpeiying Date: Wed, 18 Sep 2024 14:39:24 +0800 Subject: [PATCH 132/365] docs: Update CN translation for api-reference/storage/index.rst --- docs/en/api-reference/storage/index.rst | 4 +- docs/zh_CN/api-reference/storage/index.rst | 66 ++++++++++++++++------ 2 files changed, 52 insertions(+), 18 deletions(-) diff --git a/docs/en/api-reference/storage/index.rst b/docs/en/api-reference/storage/index.rst index 22d5197fcb3f..f3f184270f26 100644 --- a/docs/en/api-reference/storage/index.rst +++ b/docs/en/api-reference/storage/index.rst @@ -62,7 +62,7 @@ Examples * - **Code Example** - **Description** * - :example:`fatfs/getting_started ` - - Demonstrates basic common file API(stdio.h) usage over internal flash using FATFS. + - Demonstrates basic common file API (stdio.h) usage over internal flash using FATFS. * - :example:`fatfs/fs_operations ` - Demonstrates POSIX API for filesystem manipulation, such as moving, removing and renaming files. @@ -70,6 +70,8 @@ Examples :widths: 25 75 :header-rows: 0 + * - **Code Example** + - **Description** * - :example:`fatfsgen ` - Demonstrates the capabilities of Python-based tooling for FATFS images available on host computers. * - :example:`ext_flash_fatfs ` diff --git a/docs/zh_CN/api-reference/storage/index.rst b/docs/zh_CN/api-reference/storage/index.rst index 0687d98c054e..820987a555fa 100644 --- a/docs/zh_CN/api-reference/storage/index.rst +++ b/docs/zh_CN/api-reference/storage/index.rst @@ -37,44 +37,76 @@ wear-levelling storage-security.rst +示例 +---- + .. list-table:: 存储 API 相关例程 :widths: 25 75 :header-rows: 0 * - **例程** - **描述** - * - :doc:`fatfs` - - - * - :example:`wear_leveling ` - - 演示了如何在内部 flash 上使用 FATFS 磨损均衡。 - * - :example:`ext_flash_fatfs ` - - 演示了如何在外部 flash 上使用 FATFS 磨损均衡。 - * - :example:`fatfsgen ` - - 演示了在主机计算机上使用 Python 工具生成 FATFS 镜像的功能。 - * - :doc:`nvs_flash` - - * - :example:`nvs_rw_blob ` - 演示了如何在 NVS flash 中使用 C 语言 API 读写 blob 数据类型。 * - :example:`nvs_rw_value ` - 演示了如何在 NVS flash 中使用 C 语言 API 读写整数数据类型。 - * - :example:`nvs_rw_value_cxx ` + * - :example:`nvs_rw_value ` - 演示了如何在 NVS flash 中使用 C++ 语言 API 读写整数数据类型。 * - :example:`nvsgen ` - 演示了如何使用基于 Python 的 NVS 镜像生成工具,根据 CSV 文件内容创建 NVS 分区镜像。 - * - :doc:`spiffs` - - + +.. list-table:: 常用文件系统 API + :widths: 25 75 + :header-rows: 0 + + * - **代码示例** + - **描述** + * - :example:`fatfs/getting_started ` + - 演示了使用 FATFS 库在内部 flash 上应用标准文件 API (stdio.h)。 + * - :example:`fatfs/fs_operations ` + - 演示了使用 POSIX API 进行文件系统操作,如移动、删除和重命名文件等。 + +.. list-table:: FATFS API 示例 + :widths: 25 75 + :header-rows: 0 + + * - **代码示例** + - **描述** + * - :example:`fatfsgen ` + - 演示了在主机上使用 Python 工具生成 FATFS 镜像的相关功能。 + * - :example:`ext_flash_fatfs ` + - 演示了在外部 flash 上使用带有损耗均衡功能的 FATFS。 + * - :example:`wear_leveling ` + - 演示了在内部 flash 上使用带有损耗均衡功能的 FATFS。 + +.. list-table:: SPIFFS API 示例 + :widths: 25 75 + :header-rows: 0 + + * - **代码示例** + - **描述** * - :example:`spiffs ` - 演示了如何使用 SPIFFS API 初始化文件系统,并使用 POSIX 函数处理文件。 * - :example:`spiffsgen ` - 演示了在主机计算机上使用 Python 工具生成 SPIFFS 镜像的功能。 - * - :doc:`partition` - - + +.. list-table:: 分区 API 示例 + :widths: 25 75 + :header-rows: 0 + + * - **代码示例** + - **描述** * - :example:`partition_api ` - 介绍了用于查找特定分区、执行基本 I/O 操作以及通过 CPU 内存映射使用分区的 API 函数。 * - :example:`parttool ` - 演示了在主机计算机上使用 Python 工具生成分区镜像的功能。 - * - :doc:`vfs` - - + +.. list-table:: VFS 相关示例 + :widths: 25 75 + :header-rows: 0 + + * - **代码示例** + - **描述** * - :example:`littlefs ` - 演示了如何使用 LittleFS 组件初始化文件系统,并使用 POSIX 函数处理文件。 * - :example:`semihost_vfs ` From 908c4c7ce632d107c942cd99d6a0a1dbf8691429 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Rohl=C3=ADnek?= Date: Wed, 18 Sep 2024 10:13:01 +0200 Subject: [PATCH 133/365] docs(storage/fatfs): fix fatfs example links in docs --- docs/en/api-guides/file-system-considerations.rst | 2 +- docs/en/api-guides/performance/speed.rst | 4 ++-- docs/zh_CN/api-guides/performance/speed.rst | 4 ++-- docs/zh_CN/api-reference/storage/fatfs.rst | 4 ++-- docs/zh_CN/api-reference/storage/index.rst | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/en/api-guides/file-system-considerations.rst b/docs/en/api-guides/file-system-considerations.rst index a57ab01c8781..2cf5c176614c 100644 --- a/docs/en/api-guides/file-system-considerations.rst +++ b/docs/en/api-guides/file-system-considerations.rst @@ -105,7 +105,7 @@ The most supported file system, recommended for common applications - file/direc **Examples:** * :example:`storage/sd_card`: access the SD card which uses the FAT file system -* :example:`storage/ext_flash_fatfs`: access the external flash chip which uses the FAT file system +* :example:`storage/fatfs/ext_flash`: access the external flash chip which uses the FAT file system .. _spiffs-fs-section: diff --git a/docs/en/api-guides/performance/speed.rst b/docs/en/api-guides/performance/speed.rst index 0cce05a57178..c374a3274622 100644 --- a/docs/en/api-guides/performance/speed.rst +++ b/docs/en/api-guides/performance/speed.rst @@ -301,9 +301,9 @@ Improving I/O Performance Using standard C library functions like ``fread`` and ``fwrite`` instead of platform-specific unbuffered syscalls such as ``read`` and ``write``, may result in slower performance. -The ``fread`` and ``fwrite`` functions are designed for portability rather than speed, introducing some overhead due to their buffered nature. Check the example :example:`storage/fatfsgen` to see how to use these two functions. +The ``fread`` and ``fwrite`` functions are designed for portability rather than speed, introducing some overhead due to their buffered nature. Check the example :example:`storage/fatfs/getting_started` to see how to use these two functions. -In contrast, the ``read`` and ``write`` functions are standard POSIX APIs that can be used directly when working with FatFs through VFS, with ESP-IDF handling the underlying implementation. Check the example :example:`storage/perf_benchmark` to see how to use the two functions. +In contrast, the ``read`` and ``write`` functions are standard POSIX APIs that can be used directly when working with FatFs through VFS, with ESP-IDF handling the underlying implementation. Check the example :example:`storage/fatfs/fs_operations` to see how to use the two functions. Additional tips are provided below, and further details can be found in :doc:`/api-reference/storage/fatfs`. diff --git a/docs/zh_CN/api-guides/performance/speed.rst b/docs/zh_CN/api-guides/performance/speed.rst index 25601b4dadf8..55f0a2da747f 100644 --- a/docs/zh_CN/api-guides/performance/speed.rst +++ b/docs/zh_CN/api-guides/performance/speed.rst @@ -301,9 +301,9 @@ ESP-IDF 支持动态 :doc:`/api-reference/system/intr_alloc` 和中断抢占。 使用标准 C 库函数,如 ``fread`` 和 ``fwrite``,相较于使用平台特定的不带缓冲系统调用,如 ``read`` 和 ``write``,可能会导致 I/O 性能下降。 -``fread`` 与 ``fwrite`` 函数是为可移植性而设计的,而非速度,其缓冲性质会引入一些额外的开销。关于如何使用这两个函数,请参考示例 :example:`storage/fatfsgen`。 +``fread`` 与 ``fwrite`` 函数是为可移植性而设计的,而非速度,其缓冲性质会引入一些额外的开销。关于如何使用这两个函数,请参考示例 :example:`storage/fatfs/getting_started`。 -与之相比,``read`` 与 ``write`` 函数是标准的 POSIX API,可直接通过 VFS 处理 FatFs,由 ESP-IDF 负责底层实现。关于如何使用这两个函数,请参考示例 :example:`storage/perf_benchmark`。 +与之相比,``read`` 与 ``write`` 函数是标准的 POSIX API,可直接通过 VFS 处理 FatFs,由 ESP-IDF 负责底层实现。关于如何使用这两个函数,请参考示例 :example:`storage/fatfs/fs_operations`。 下面提供了一些提示,更多信息请见 :doc:`/api-reference/storage/fatfs`。 diff --git a/docs/zh_CN/api-reference/storage/fatfs.rst b/docs/zh_CN/api-reference/storage/fatfs.rst index 65f281bd790c..bc3671659f89 100644 --- a/docs/zh_CN/api-reference/storage/fatfs.rst +++ b/docs/zh_CN/api-reference/storage/fatfs.rst @@ -123,7 +123,7 @@ FatFs 分区生成器 该函数的参数如下: -#. partition - 分区的名称,需要在分区表中定义(如 :example_file:`storage/fatfsgen/partitions_example.csv`)。 +#. partition - 分区的名称,需要在分区表中定义(如 :example_file:`storage/fatfs/fatfsgen/partitions_example.csv`)。 #. base_dir - 目录名称,该目录会被编码为 FatFs 分区,也可以选择将其被烧录进设备。但注意必须在分区表中指定合适的分区大小。 @@ -139,7 +139,7 @@ FatFs 分区生成器 没有指定 FLASH_IN_PROJECT 时也可以生成分区镜像,但是用户需要使用 ``esptool.py`` 或自定义的构建系统目标对其手动烧录。 -相关示例请查看 :example:`storage/fatfsgen`。 +相关示例请查看 :example:`storage/fatfs/fatfsgen`。 .. _fatfs-partition-analyzer: diff --git a/docs/zh_CN/api-reference/storage/index.rst b/docs/zh_CN/api-reference/storage/index.rst index 820987a555fa..b643c2b7de81 100644 --- a/docs/zh_CN/api-reference/storage/index.rst +++ b/docs/zh_CN/api-reference/storage/index.rst @@ -74,7 +74,7 @@ - **描述** * - :example:`fatfsgen ` - 演示了在主机上使用 Python 工具生成 FATFS 镜像的相关功能。 - * - :example:`ext_flash_fatfs ` + * - :example:`ext_flash_fatfs ` - 演示了在外部 flash 上使用带有损耗均衡功能的 FATFS。 * - :example:`wear_leveling ` - 演示了在内部 flash 上使用带有损耗均衡功能的 FATFS。 From bcc060b98e81b1ddfa39a00f45f40636c3cb6d78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Rohl=C3=ADnek?= Date: Fri, 20 Sep 2024 09:42:27 +0200 Subject: [PATCH 134/365] docs(storage/fatfs): fix relative links in fatfs examples --- examples/storage/fatfs/ext_flash/README.md | 2 +- examples/storage/fatfs/fatfsgen/README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/storage/fatfs/ext_flash/README.md b/examples/storage/fatfs/ext_flash/README.md index 0014bd8d3146..349fd1ba3ee3 100644 --- a/examples/storage/fatfs/ext_flash/README.md +++ b/examples/storage/fatfs/ext_flash/README.md @@ -5,7 +5,7 @@ (See the README.md file in the upper level 'examples' directory for more information about examples.) -This example is similar to the [wear levelling](../wear_levelling/README.md) example, except that it uses an external SPI Flash chip. This can be useful if you need to add more storage to a module with only 4 MB flash size. +This example is similar to the [wear levelling](../../wear_levelling/README.md) example, except that it uses an external SPI Flash chip. This can be useful if you need to add more storage to a module with only 4 MB flash size. The flow of the example is as follows: diff --git a/examples/storage/fatfs/fatfsgen/README.md b/examples/storage/fatfs/fatfsgen/README.md index aa203d8356d8..772cf9cd8e80 100644 --- a/examples/storage/fatfs/fatfsgen/README.md +++ b/examples/storage/fatfs/fatfsgen/README.md @@ -6,7 +6,7 @@ (See the README.md file in the upper level 'examples' directory for more information about examples.) This example demonstrates how to use the FATFS partition -generation tool [fatfsgen.py](../../../components/fatfs/fatfsgen.py) to automatically create a FATFS +generation tool [fatfsgen.py](../../../../components/fatfs/fatfsgen.py) to automatically create a FATFS filesystem image from the contents of a host folder during build, with an option of automatically flashing the created image on invocation of `idf.py -p PORT flash`. Beware that the minimal required size of the flash is 4 MB. From 5ccc9d19787057679f28850ce57a1b88b6f0d278 Mon Sep 17 00:00:00 2001 From: Euripedes Rocha Date: Thu, 10 Oct 2024 10:49:36 +0200 Subject: [PATCH 135/365] ci(mqtt): Set partition to large for c6 on custom outbox example Example failed to build on CI for c6 target due to partition size. --- examples/protocols/mqtt/custom_outbox/sdkconfig.ci.esp32c6 | 1 + 1 file changed, 1 insertion(+) create mode 100644 examples/protocols/mqtt/custom_outbox/sdkconfig.ci.esp32c6 diff --git a/examples/protocols/mqtt/custom_outbox/sdkconfig.ci.esp32c6 b/examples/protocols/mqtt/custom_outbox/sdkconfig.ci.esp32c6 new file mode 100644 index 000000000000..1686559de403 --- /dev/null +++ b/examples/protocols/mqtt/custom_outbox/sdkconfig.ci.esp32c6 @@ -0,0 +1 @@ +CONFIG_PARTITION_TABLE_SINGLE_APP_LARGE=y From 66ebdd0b32b191783e1ce8d3155b06b488d6afea Mon Sep 17 00:00:00 2001 From: "hrushikesh.bhosale" Date: Thu, 10 Oct 2024 11:43:21 +0530 Subject: [PATCH 136/365] feat(ota): Added support of otatool for esp32c61 Enabled the test for esp32c61 for otatool --- examples/system/.build-test-rules.yml | 10 ++-------- examples/system/ota/otatool/README.md | 4 ++-- examples/system/ota/otatool/pytest_otatool.py | 9 +-------- 3 files changed, 5 insertions(+), 18 deletions(-) diff --git a/examples/system/.build-test-rules.yml b/examples/system/.build-test-rules.yml index 3152b243fde3..ec614792289b 100644 --- a/examples/system/.build-test-rules.yml +++ b/examples/system/.build-test-rules.yml @@ -173,14 +173,8 @@ examples/system/ota/native_ota_example: - protocol_examples_common examples/system/ota/otatool: - disable: - - if: IDF_TARGET in ["esp32h2"] - temporary: true - reason: target esp32h2 is not supported yet - disable_test: - - if: IDF_TARGET in ["esp32c61"] - reason: target esp32c61 is not supported yet - + enable: + - if: INCLUDE_DEFAULT == 1 or IDF_TARGET in ["esp32c5", "esp32c61"] examples/system/ota/pre_encrypted_ota: disable: diff --git a/examples/system/ota/otatool/README.md b/examples/system/ota/otatool/README.md index 255b22320037..859fb55977c2 100644 --- a/examples/system/ota/otatool/README.md +++ b/examples/system/ota/otatool/README.md @@ -1,5 +1,5 @@ -| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-P4 | ESP32-S2 | ESP32-S3 | -| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | -------- | -------- | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-H2 | ESP32-P4 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | -------- | -------- | -------- | # OTA Tool Example diff --git a/examples/system/ota/otatool/pytest_otatool.py b/examples/system/ota/otatool/pytest_otatool.py index 8a9d0b21af78..c07703473696 100644 --- a/examples/system/ota/otatool/pytest_otatool.py +++ b/examples/system/ota/otatool/pytest_otatool.py @@ -26,14 +26,7 @@ def _real_test_func(dut: Dut) -> None: subprocess.check_call([sys.executable, script_path, '--binary', binary_path]) -@pytest.mark.esp32 -@pytest.mark.esp32s2 -@pytest.mark.esp32c3 -@pytest.mark.esp32s3 -@pytest.mark.esp32c5 -# @pytest.mark.esp32c61 #IDF-11309 -@pytest.mark.esp32c6 -@pytest.mark.esp32p4 +@pytest.mark.supported_targets @pytest.mark.generic def test_otatool_example(dut: Dut) -> None: _real_test_func(dut) From b12ea21f49ca2d4b48f1f37c7f5e37f65a5fc31a Mon Sep 17 00:00:00 2001 From: Rahul Tank Date: Tue, 8 Oct 2024 13:57:23 +0530 Subject: [PATCH 137/365] fix(nimble): Update sbom file to correct nimble version --- components/bt/host/nimble/nimble | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/bt/host/nimble/nimble b/components/bt/host/nimble/nimble index 87dd8bdc0374..24ff17de7c07 160000 --- a/components/bt/host/nimble/nimble +++ b/components/bt/host/nimble/nimble @@ -1 +1 @@ -Subproject commit 87dd8bdc0374572bfde0067b068fafb7bf2374e1 +Subproject commit 24ff17de7c07d53f2db2940052c52bfc48f8414c From fef1d6278eee34e2ca2a3c3232cfb02a620c83e0 Mon Sep 17 00:00:00 2001 From: renpeiying Date: Mon, 23 Sep 2024 14:53:27 +0800 Subject: [PATCH 138/365] docs: update CN trans according to review --- docs/zh_CN/api-reference/storage/index.rst | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/zh_CN/api-reference/storage/index.rst b/docs/zh_CN/api-reference/storage/index.rst index b643c2b7de81..3b71db1be00f 100644 --- a/docs/zh_CN/api-reference/storage/index.rst +++ b/docs/zh_CN/api-reference/storage/index.rst @@ -62,9 +62,9 @@ * - **代码示例** - **描述** * - :example:`fatfs/getting_started ` - - 演示了使用 FATFS 库在内部 flash 上应用标准文件 API (stdio.h)。 + - 演示了如何使用 FATFS 库在内部 flash 上应用标准文件 API (stdio.h)。 * - :example:`fatfs/fs_operations ` - - 演示了使用 POSIX API 进行文件系统操作,如移动、删除和重命名文件等。 + - 演示了如何使用 POSIX API 进行文件系统操作,如移动、删除和重命名文件等。 .. list-table:: FATFS API 示例 :widths: 25 75 @@ -75,13 +75,13 @@ * - :example:`fatfsgen ` - 演示了在主机上使用 Python 工具生成 FATFS 镜像的相关功能。 * - :example:`ext_flash_fatfs ` - - 演示了在外部 flash 上使用带有损耗均衡功能的 FATFS。 + - 演示了在外部 flash 上使用带有磨损均衡功能的 FATFS。 * - :example:`wear_leveling ` - - 演示了在内部 flash 上使用带有损耗均衡功能的 FATFS。 + - 演示了在内部 flash 上使用带有磨损均衡功能的 FATFS。 .. list-table:: SPIFFS API 示例 :widths: 25 75 - :header-rows: 0 + :header-rows: 0 * - **代码示例** - **描述** From ff4620fd70a20e43cbb12e446c9baeb4d3fd407a Mon Sep 17 00:00:00 2001 From: Sajia Date: Sun, 29 Sep 2024 18:30:30 +0530 Subject: [PATCH 139/365] fix(wifi): Add a check on hostapd instance while handling an Auth frame --- components/wpa_supplicant/esp_supplicant/src/esp_wpa3.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/components/wpa_supplicant/esp_supplicant/src/esp_wpa3.c b/components/wpa_supplicant/esp_supplicant/src/esp_wpa3.c index 76fa0f5f32ed..e66b2a745d86 100644 --- a/components/wpa_supplicant/esp_supplicant/src/esp_wpa3.c +++ b/components/wpa_supplicant/esp_supplicant/src/esp_wpa3.c @@ -647,6 +647,9 @@ bool wpa3_hostap_auth_deinit(void) static int wpa3_hostap_handle_auth(u8 *buf, size_t len, u32 auth_transaction, u16 status, u8 *bssid) { struct hostapd_data *hapd = (struct hostapd_data *)esp_wifi_get_hostap_private_internal(); + if (!hapd) { + return ESP_FAIL; + } struct sta_info *sta = ap_get_sta(hapd, bssid); if (auth_transaction == SAE_MSG_COMMIT) { if (sta && sta->sae_commit_processing) { From 13e52cfa213c1caadf021b2f99e7305db2982dd2 Mon Sep 17 00:00:00 2001 From: laokaiyao Date: Fri, 11 Oct 2024 11:19:45 +0800 Subject: [PATCH 140/365] fix(touch): fixed the deep sleep wakeup issue on P4 --- .../hw_ver3/touch_version_specific.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/components/esp_driver_touch_sens/hw_ver3/touch_version_specific.c b/components/esp_driver_touch_sens/hw_ver3/touch_version_specific.c index ebf9acecdd6a..e9335d39652b 100644 --- a/components/esp_driver_touch_sens/hw_ver3/touch_version_specific.c +++ b/components/esp_driver_touch_sens/hw_ver3/touch_version_specific.c @@ -331,8 +331,9 @@ esp_err_t touch_sensor_config_sleep_wakeup(touch_sensor_handle_t sens_handle, co ESP_ERR_INVALID_ARG, err, TAG, "Invalid sleep level"); /* Enabled touch sensor as wake-up source */ ESP_GOTO_ON_ERROR(esp_sleep_enable_touchpad_wakeup(), err, TAG, "Failed to enable touch sensor wakeup"); -#if SOC_PM_SUPPORT_RC_FAST_PD - ESP_GOTO_ON_ERROR(esp_sleep_pd_config(ESP_PD_DOMAIN_RC_FAST, ESP_PD_OPTION_ON), err, TAG, "Failed to keep touch sensor module clock during the sleep"); +#if SOC_PM_SUPPORT_RTC_PERIPH_PD + // Keep ESP_PD_DOMAIN_RTC_PERIPH power domain on during the light/deep sleep, so that to keep the touch sensor working + ESP_GOTO_ON_ERROR(esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON), err, TAG, "Failed to keep touch sensor module clock during the sleep"); #endif /* If set the deep sleep channel (i.e., enable deep sleep wake-up), @@ -360,10 +361,10 @@ esp_err_t touch_sensor_config_sleep_wakeup(touch_sensor_handle_t sens_handle, co } else { /* Disable the touch sensor as wake-up source */ esp_sleep_disable_wakeup_source(ESP_SLEEP_WAKEUP_TOUCHPAD); -#if SOC_PM_SUPPORT_RC_FAST_PD - esp_sleep_pd_config(ESP_PD_DOMAIN_RC_FAST, ESP_PD_OPTION_AUTO); +#if SOC_PM_SUPPORT_RTC_PERIPH_PD + esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_AUTO); #endif - + sens_handle->deep_slp_chan = NULL; sens_handle->sleep_en = false; } From aa7b7f225accfcef21fd1a05d6ec1d851d12a4c8 Mon Sep 17 00:00:00 2001 From: Lou Tianhao Date: Tue, 24 Sep 2024 11:04:12 +0800 Subject: [PATCH 141/365] change(esp_hw_support): change modem clock implementation --- components/esp_hw_support/modem_clock.c | 2 +- components/hal/esp32c5/modem_clock_hal.c | 8 ++++---- components/hal/esp32c6/modem_clock_hal.c | 2 +- components/hal/esp32c61/modem_clock_hal.c | 8 ++++---- components/hal/esp32h2/modem_clock_hal.c | 2 +- components/hal/include/hal/modem_clock_hal.h | 2 +- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/components/esp_hw_support/modem_clock.c b/components/esp_hw_support/modem_clock.c index 63066d6302f1..cd3f68a3e11e 100644 --- a/components/esp_hw_support/modem_clock.c +++ b/components/esp_hw_support/modem_clock.c @@ -108,7 +108,7 @@ static void IRAM_ATTR modem_clock_coex_configure(modem_clock_context_t *ctx, boo static void IRAM_ATTR modem_clock_modem_adc_common_fe_configure(modem_clock_context_t *ctx, bool enable) { - modem_clock_hal_enable_modem_adc_common_fe_clock(ctx->hal, enable); + modem_clock_hal_enable_modem_common_fe_clock(ctx->hal, enable); } static void IRAM_ATTR modem_clock_modem_private_fe_configure(modem_clock_context_t *ctx, bool enable) diff --git a/components/hal/esp32c5/modem_clock_hal.c b/components/hal/esp32c5/modem_clock_hal.c index 0c6370faa08b..554aaa94735e 100644 --- a/components/hal/esp32c5/modem_clock_hal.c +++ b/components/hal/esp32c5/modem_clock_hal.c @@ -101,12 +101,9 @@ uint32_t IRAM_ATTR modem_clock_hal_get_clock_domain_icg_bitmap(modem_clock_hal_c return bitmap; } -void IRAM_ATTR modem_clock_hal_enable_modem_adc_common_fe_clock(modem_clock_hal_context_t *hal, bool enable) +void IRAM_ATTR modem_clock_hal_enable_modem_common_fe_clock(modem_clock_hal_context_t *hal, bool enable) { if (enable) { - modem_syscon_ll_enable_fe_adc_clock(hal->syscon_dev, enable); - modem_syscon_ll_enable_fe_dac_clock(hal->syscon_dev, enable); - modem_syscon_ll_enable_fe_pwdet_clock(hal->syscon_dev, enable); modem_syscon_ll_enable_fe_apb_clock(hal->syscon_dev, enable); modem_syscon_ll_enable_fe_80m_clock(hal->syscon_dev, enable); } @@ -116,6 +113,9 @@ void IRAM_ATTR modem_clock_hal_enable_modem_private_fe_clock(modem_clock_hal_con { if (enable) { modem_syscon_ll_enable_fe_160m_clock(hal->syscon_dev, enable); + modem_syscon_ll_enable_fe_dac_clock(hal->syscon_dev, enable); + modem_syscon_ll_enable_fe_pwdet_clock(hal->syscon_dev, enable); + modem_syscon_ll_enable_fe_adc_clock(hal->syscon_dev, enable); } } diff --git a/components/hal/esp32c6/modem_clock_hal.c b/components/hal/esp32c6/modem_clock_hal.c index ed242febec45..7901b829dab0 100644 --- a/components/hal/esp32c6/modem_clock_hal.c +++ b/components/hal/esp32c6/modem_clock_hal.c @@ -101,7 +101,7 @@ uint32_t IRAM_ATTR modem_clock_hal_get_clock_domain_icg_bitmap(modem_clock_hal_c return bitmap; } -void IRAM_ATTR modem_clock_hal_enable_modem_adc_common_fe_clock(modem_clock_hal_context_t *hal, bool enable) +void IRAM_ATTR modem_clock_hal_enable_modem_common_fe_clock(modem_clock_hal_context_t *hal, bool enable) { if (enable) { modem_syscon_ll_enable_fe_apb_clock(hal->syscon_dev, enable); diff --git a/components/hal/esp32c61/modem_clock_hal.c b/components/hal/esp32c61/modem_clock_hal.c index fe84dcfb850d..3af99192403a 100644 --- a/components/hal/esp32c61/modem_clock_hal.c +++ b/components/hal/esp32c61/modem_clock_hal.c @@ -101,12 +101,9 @@ uint32_t IRAM_ATTR modem_clock_hal_get_clock_domain_icg_bitmap(modem_clock_hal_c return bitmap; } -void IRAM_ATTR modem_clock_hal_enable_modem_adc_common_fe_clock(modem_clock_hal_context_t *hal, bool enable) +void IRAM_ATTR modem_clock_hal_enable_modem_common_fe_clock(modem_clock_hal_context_t *hal, bool enable) { if (enable) { - modem_syscon_ll_enable_fe_adc_clock(hal->syscon_dev, enable); - modem_syscon_ll_enable_fe_dac_clock(hal->syscon_dev, enable); - modem_syscon_ll_enable_fe_pwdet_clock(hal->syscon_dev, enable); modem_syscon_ll_enable_fe_apb_clock(hal->syscon_dev, enable); modem_syscon_ll_enable_fe_80m_clock(hal->syscon_dev, enable); } @@ -116,6 +113,9 @@ void IRAM_ATTR modem_clock_hal_enable_modem_private_fe_clock(modem_clock_hal_con { if (enable) { modem_syscon_ll_enable_fe_160m_clock(hal->syscon_dev, enable); + modem_syscon_ll_enable_fe_adc_clock(hal->syscon_dev, enable); + modem_syscon_ll_enable_fe_dac_clock(hal->syscon_dev, enable); + modem_syscon_ll_enable_fe_pwdet_clock(hal->syscon_dev, enable); } } diff --git a/components/hal/esp32h2/modem_clock_hal.c b/components/hal/esp32h2/modem_clock_hal.c index 879e694d2a4a..851e0c01ffc3 100644 --- a/components/hal/esp32h2/modem_clock_hal.c +++ b/components/hal/esp32h2/modem_clock_hal.c @@ -19,7 +19,7 @@ typedef enum { MODEM_CLOCK_EXT32K_CODE = 2 } modem_clock_32k_clk_src_code_t; -void IRAM_ATTR modem_clock_hal_enable_modem_adc_common_fe_clock(modem_clock_hal_context_t *hal, bool enable) +void IRAM_ATTR modem_clock_hal_enable_modem_common_fe_clock(modem_clock_hal_context_t *hal, bool enable) { modem_syscon_ll_enable_fe_apb_clock(hal->syscon_dev, enable); modem_syscon_ll_enable_fe_32m_clock(hal->syscon_dev, enable); diff --git a/components/hal/include/hal/modem_clock_hal.h b/components/hal/include/hal/modem_clock_hal.h index dfc5009741b2..ec04d18d718e 100644 --- a/components/hal/include/hal/modem_clock_hal.h +++ b/components/hal/include/hal/modem_clock_hal.h @@ -29,7 +29,7 @@ void modem_clock_hal_set_clock_domain_icg_bitmap(modem_clock_hal_context_t *hal, uint32_t modem_clock_hal_get_clock_domain_icg_bitmap(modem_clock_hal_context_t *hal, modem_clock_domain_t domain); #endif -void modem_clock_hal_enable_modem_adc_common_fe_clock(modem_clock_hal_context_t *hal, bool enable); +void modem_clock_hal_enable_modem_common_fe_clock(modem_clock_hal_context_t *hal, bool enable); void modem_clock_hal_enable_modem_private_fe_clock(modem_clock_hal_context_t *hal, bool enable); #if SOC_BT_SUPPORTED From 0738314308ad36a73601ddb8bb82f1dcbfe1f550 Mon Sep 17 00:00:00 2001 From: Ondrej Kosta Date: Thu, 19 Sep 2024 15:54:26 +0200 Subject: [PATCH 142/365] feat(esp_eth): added new generic PHY driver --- components/esp_eth/CMakeLists.txt | 1 + components/esp_eth/include/esp_eth_phy.h | 44 ++++-- .../esp_eth/include/esp_eth_phy_802_3.h | 29 ++-- .../esp_eth/src/phy/esp_eth_phy_802_3.c | 129 +++++++++++++++--- .../esp_eth/src/phy/esp_eth_phy_generic.c | 37 +++++ .../esp_eth/src/phy/esp_eth_phy_ip101.c | 19 ++- .../esp_eth/src/phy/esp_eth_phy_lan87xx.c | 22 +-- .../esp_eth/src/phy/esp_eth_phy_rtl8201.c | 22 ++- docs/en/api-reference/network/esp_eth.rst | 20 ++- .../Kconfig.projbuild | 9 ++ .../protocol_examples_common/eth_connect.c | 4 +- .../ethernet_init/Kconfig.projbuild | 9 ++ .../components/ethernet_init/ethernet_init.c | 4 +- examples/ethernet/basic/pytest_eth_basic.py | 1 + .../basic/sdkconfig.ci.default_generic | 11 ++ 15 files changed, 283 insertions(+), 78 deletions(-) create mode 100644 components/esp_eth/src/phy/esp_eth_phy_generic.c create mode 100644 examples/ethernet/basic/sdkconfig.ci.default_generic diff --git a/components/esp_eth/CMakeLists.txt b/components/esp_eth/CMakeLists.txt index 132f01a30110..6a6941397d6e 100644 --- a/components/esp_eth/CMakeLists.txt +++ b/components/esp_eth/CMakeLists.txt @@ -30,6 +30,7 @@ if(CONFIG_ETH_ENABLED) list(APPEND srcs "src/mac/esp_eth_mac_esp.c" "src/mac/esp_eth_mac_esp_dma.c" "src/mac/esp_eth_mac_esp_gpio.c" + "src/phy/esp_eth_phy_generic.c" "src/phy/esp_eth_phy_dp83848.c" "src/phy/esp_eth_phy_ip101.c" "src/phy/esp_eth_phy_ksz80xx.c" diff --git a/components/esp_eth/include/esp_eth_phy.h b/components/esp_eth/include/esp_eth_phy.h index 82c16aef41d0..109a8014dc4f 100644 --- a/components/esp_eth/include/esp_eth_phy.h +++ b/components/esp_eth/include/esp_eth_phy.h @@ -13,7 +13,8 @@ extern "C" { #endif -#define ESP_ETH_PHY_ADDR_AUTO (-1) +#define ESP_ETH_PHY_ADDR_AUTO (-1) +#define ESP_ETH_NO_POST_HW_RESET_DELAY (-1) /** * @brief Auto-negotiation control commands @@ -273,24 +274,45 @@ struct esp_eth_phy_s { * */ typedef struct { - int32_t phy_addr; /*!< PHY address, set -1 to enable PHY address detection at initialization stage */ - uint32_t reset_timeout_ms; /*!< Reset timeout value (Unit: ms) */ - uint32_t autonego_timeout_ms; /*!< Auto-negotiation timeout value (Unit: ms) */ - int reset_gpio_num; /*!< Reset GPIO number, -1 means no hardware reset */ + int32_t phy_addr; /*!< PHY address, set -1 to enable PHY address detection at initialization stage */ + uint32_t reset_timeout_ms; /*!< Reset timeout value (Unit: ms) */ + uint32_t autonego_timeout_ms; /*!< Auto-negotiation timeout value (Unit: ms) */ + int reset_gpio_num; /*!< Reset GPIO number, -1 means no hardware reset */ + int32_t hw_reset_assert_time_us; /*!< Time the reset pin is asserted (Unit: us), 0 to use chip specific default */ + int32_t post_hw_reset_delay_ms; /*!< Time to wait after the HW reset (Unit: ms), 0 to use chip specific default, -1 means no wait */ } eth_phy_config_t; /** * @brief Default configuration for Ethernet PHY object * */ -#define ETH_PHY_DEFAULT_CONFIG() \ - { \ - .phy_addr = ESP_ETH_PHY_ADDR_AUTO, \ - .reset_timeout_ms = 100, \ - .autonego_timeout_ms = 4000, \ - .reset_gpio_num = 5, \ +#define ETH_PHY_DEFAULT_CONFIG() \ + { \ + .phy_addr = ESP_ETH_PHY_ADDR_AUTO, \ + .reset_timeout_ms = 100, \ + .autonego_timeout_ms = 4000, \ + .reset_gpio_num = 5, \ + .hw_reset_assert_time_us = 0, \ + .post_hw_reset_delay_ms = 0 \ } +/** +* @brief Create a PHY instance of generic chip which conforms with IEEE 802.3 +* +* @note Default reset timing configuration is set conservatively( @c DEFAULT_PHY_RESET_ASSERTION_TIME_US ). +* If you need faster response and your chip supports it, configure it via @c config parameter. +* +* @warning While basic functionality should always work, some specific features might be limited, +* even if the PHY meets IEEE 802.3 standard. A typical example is loopback functionality, +* where certain PHYs may require setting a specific speed mode to operate correctly. +* +* @param[in] config configuration of PHY +* @return +* - instance: create PHY instance successfully +* - NULL: create PHY instance failed because some error occurred + */ +esp_eth_phy_t *esp_eth_phy_new_generic(const eth_phy_config_t *config); + /** * @brief Create a PHY instance of IP101 * diff --git a/components/esp_eth/include/esp_eth_phy_802_3.h b/components/esp_eth/include/esp_eth_phy_802_3.h index 0cc83ed1390c..e90646bd37d8 100644 --- a/components/esp_eth/include/esp_eth_phy_802_3.h +++ b/components/esp_eth/include/esp_eth_phy_802_3.h @@ -19,13 +19,15 @@ extern "C" { * */ typedef struct { - esp_eth_phy_t parent; /*!< Parent Ethernet PHY instance */ - esp_eth_mediator_t *eth; /*!< Mediator of Ethernet driver */ - int addr; /*!< PHY address */ - uint32_t reset_timeout_ms; /*!< Reset timeout value (Unit: ms) */ - uint32_t autonego_timeout_ms; /*!< Auto-negotiation timeout value (Unit: ms) */ - eth_link_t link_status; /*!< Current Link status */ - int reset_gpio_num; /*!< Reset GPIO number, -1 means no hardware reset */ + esp_eth_phy_t parent; /*!< Parent Ethernet PHY instance */ + esp_eth_mediator_t *eth; /*!< Mediator of Ethernet driver */ + int addr; /*!< PHY address */ + uint32_t reset_timeout_ms; /*!< Reset timeout value (Unit: ms) */ + uint32_t autonego_timeout_ms; /*!< Auto-negotiation timeout value (Unit: ms) */ + eth_link_t link_status; /*!< Current Link status */ + int reset_gpio_num; /*!< Reset GPIO number, -1 means no hardware reset */ + int32_t hw_reset_assert_time_us; /*!< Time the reset pin is asserted (Unit: us) */ + int32_t post_hw_reset_delay_ms; /*!< Time to wait after the HW reset (Unit: ms) */ } phy_802_3_t; /** @@ -73,6 +75,16 @@ esp_err_t esp_eth_phy_802_3_reset(phy_802_3_t *phy_802_3); */ esp_err_t esp_eth_phy_802_3_autonego_ctrl(phy_802_3_t *phy_802_3, eth_phy_autoneg_cmd_t cmd, bool *autonego_en_stat); +/** + * @brief Retrieve link status and propagate the status to higher layers if the status changed + * + * @param phy_802_3 IEEE 802.3 PHY object infostructure + * @return + * - ESP_OK: Ethernet PHY link status retrieved successfully + * - ESP_FAIL: Error occurred during reading registry + */ +esp_err_t esp_eth_phy_802_3_updt_link_dup_spd(phy_802_3_t *phy_802_3); + /** * @brief Power control of Ethernet PHY * @@ -183,7 +195,7 @@ esp_err_t esp_eth_phy_802_3_deinit(phy_802_3_t *phy_802_3); * * @param phy_802_3 IEEE 802.3 PHY object infostructure * @return - * - ESP_OK: Ethrnet PHY infostructure deleted + * - ESP_OK: Ethernet PHY infostructure deleted */ esp_err_t esp_eth_phy_802_3_del(phy_802_3_t *phy_802_3); @@ -194,6 +206,7 @@ esp_err_t esp_eth_phy_802_3_del(phy_802_3_t *phy_802_3); * @param reset_assert_us Hardware reset pin assertion time * @return * - ESP_OK: reset Ethernet PHY successfully + * - ESP_ERR_NOT_ALLOWED: reset GPIO not defined */ esp_err_t esp_eth_phy_802_3_reset_hw(phy_802_3_t *phy_802_3, uint32_t reset_assert_us); diff --git a/components/esp_eth/src/phy/esp_eth_phy_802_3.c b/components/esp_eth/src/phy/esp_eth_phy_802_3.c index f120821187f1..b0c22cb53f46 100644 --- a/components/esp_eth/src/phy/esp_eth_phy_802_3.c +++ b/components/esp_eth/src/phy/esp_eth_phy_802_3.c @@ -16,11 +16,14 @@ #include "esp_rom_sys.h" #include "esp_eth_phy_802_3.h" -// Default reset assertion time is selected to be 100us as it is most commonly used value among PHY chips. +// Default reset assertion time is selected to be 100us as it is most commonly used value among ESP-IDF supported PHY chips. #define PHY_RESET_ASSERTION_TIME_US 100 static const char *TAG = "eth_phy_802_3"; +// TODO: IDF-11362 (should be renamed to esp_eth_phy_802_3_reset_hw with the next major release) +static esp_err_t esp_eth_phy_802_3_reset_hw_internal(phy_802_3_t *phy_802_3); + static esp_err_t set_mediator(esp_eth_phy_t *phy, esp_eth_mediator_t *eth) { phy_802_3_t *phy_802_3 = esp_eth_phy_into_phy_802_3(phy); @@ -33,10 +36,10 @@ static esp_err_t reset(esp_eth_phy_t *phy) return esp_eth_phy_802_3_reset(phy_802_3); } -static esp_err_t reset_hw_default(esp_eth_phy_t *phy) +static esp_err_t reset_hw(esp_eth_phy_t *phy) { phy_802_3_t *phy_802_3 = esp_eth_phy_into_phy_802_3(phy); - return esp_eth_phy_802_3_reset_hw(phy_802_3, PHY_RESET_ASSERTION_TIME_US); + return esp_eth_phy_802_3_reset_hw_internal(phy_802_3); } static esp_err_t autonego_ctrl(esp_eth_phy_t *phy, eth_phy_autoneg_cmd_t cmd, bool *autonego_en_stat) @@ -93,6 +96,14 @@ static esp_err_t set_link(esp_eth_phy_t *phy, eth_link_t link) return esp_eth_phy_802_3_set_link(phy_802_3, link); } +static esp_err_t get_link(esp_eth_phy_t *phy) +{ + phy_802_3_t *phy_802_3 = esp_eth_phy_into_phy_802_3(phy); + + /* Update information about link, speed, duplex */ + return esp_eth_phy_802_3_updt_link_dup_spd(phy_802_3); +} + static esp_err_t init(esp_eth_phy_t *phy) { phy_802_3_t *phy_802_3 = esp_eth_phy_into_phy_802_3(phy); @@ -143,21 +154,6 @@ esp_err_t esp_eth_phy_802_3_reset(phy_802_3_t *phy_802_3) return ret; } -/** - * @brief PHY hardware reset with default assert time - * - * @note Default reset assertion time is selected to be 100us as it is most commonly used value among PHY chips. - * If your PHY chip requires different value, redefine the `reset_hw` function in derived PHY specific driver structure. - * - * @param phy Ethernet PHY instance - * @return - * - ESP_OK on success - */ -esp_err_t esp_eth_phy_802_3_reset_hw_default(phy_802_3_t *phy_802_3) -{ - return esp_eth_phy_802_3_reset_hw(phy_802_3, PHY_RESET_ASSERTION_TIME_US); -} - esp_err_t esp_eth_phy_802_3_autonego_ctrl(phy_802_3_t *phy_802_3, eth_phy_autoneg_cmd_t cmd, bool *autonego_en_stat) { esp_err_t ret = ESP_OK; @@ -220,6 +216,67 @@ esp_err_t esp_eth_phy_802_3_autonego_ctrl(phy_802_3_t *phy_802_3, eth_phy_autone return ret; } +esp_err_t esp_eth_phy_802_3_updt_link_dup_spd(phy_802_3_t *phy_802_3) +{ + esp_err_t ret = ESP_OK; + esp_eth_mediator_t *eth = phy_802_3->eth; + uint32_t addr = phy_802_3->addr; + eth_speed_t speed = ETH_SPEED_10M; + eth_duplex_t duplex = ETH_DUPLEX_HALF; + uint32_t peer_pause_ability = false; + bmcr_reg_t bmcr; + bmsr_reg_t bmsr; + anar_reg_t anar; + anlpar_reg_t anlpar; + + ESP_GOTO_ON_ERROR(eth->phy_reg_read(eth, addr, ETH_PHY_BMSR_REG_ADDR, &(bmsr.val)), err, TAG, "read BMSR failed"); + eth_link_t link = bmsr.link_status ? ETH_LINK_UP : ETH_LINK_DOWN; + /* check if link status changed */ + if (phy_802_3->link_status != link) { + /* when link up, read negotiation result */ + if (link == ETH_LINK_UP) { + ESP_GOTO_ON_ERROR(eth->phy_reg_read(eth, addr, ETH_PHY_BMCR_REG_ADDR, &(bmcr.val)), err, TAG, "read BMCR failed"); + ESP_GOTO_ON_ERROR(eth->phy_reg_read(eth, addr, ETH_PHY_ANAR_REG_ADDR, &(anar.val)), err, TAG, "read ANAR failed"); + ESP_GOTO_ON_ERROR(eth->phy_reg_read(eth, addr, ETH_PHY_ANLPAR_REG_ADDR, &(anlpar.val)), err, TAG, "read ANLPAR failed"); + if (bmcr.en_auto_nego) { + if (anar.base100_tx_fd && anlpar.base100_tx_fd) { + speed = ETH_SPEED_100M; + duplex = ETH_DUPLEX_FULL; + } else if (anar.base100_tx && anlpar.base100_tx) { + speed = ETH_SPEED_100M; + duplex = ETH_DUPLEX_HALF; + } else if (anar.base10_t_fd && anlpar.base10_t_fd) { + speed = ETH_SPEED_10M; + duplex = ETH_DUPLEX_FULL; + } else if (anar.base10_t && anlpar.base10_t) { + speed = ETH_SPEED_10M; + duplex = ETH_DUPLEX_HALF; + } else { + ESP_GOTO_ON_FALSE(false, ESP_FAIL, err, TAG, "invalid auto-nego speed/duplex advertising"); + } + } else { + speed = bmcr.speed_select ? ETH_SPEED_100M : ETH_SPEED_10M; + duplex = bmcr.duplex_mode ? ETH_DUPLEX_FULL : ETH_DUPLEX_HALF; + } + + ESP_GOTO_ON_ERROR(eth->on_state_changed(eth, ETH_STATE_SPEED, (void *)speed), err, TAG, "change speed failed"); + ESP_GOTO_ON_ERROR(eth->on_state_changed(eth, ETH_STATE_DUPLEX, (void *)duplex), err, TAG, "change duplex failed"); + /* if we're in duplex mode, and peer has the flow control ability */ + if (duplex == ETH_DUPLEX_FULL && anlpar.symmetric_pause) { + peer_pause_ability = 1; + } else { + peer_pause_ability = 0; + } + ESP_GOTO_ON_ERROR(eth->on_state_changed(eth, ETH_STATE_PAUSE, (void *)peer_pause_ability), err, TAG, "change pause ability failed"); + } + ESP_GOTO_ON_ERROR(eth->on_state_changed(eth, ETH_STATE_LINK, (void *)link), err, TAG, "change link failed"); + phy_802_3->link_status = link; + } + return ESP_OK; +err: + return ret; +} + esp_err_t esp_eth_phy_802_3_pwrctl(phy_802_3_t *phy_802_3, bool enable) { esp_err_t ret = ESP_OK; @@ -392,8 +449,28 @@ esp_err_t esp_eth_phy_802_3_reset_hw(phy_802_3_t *phy_802_3, uint32_t reset_asse vTaskDelay(pdMS_TO_TICKS(reset_assert_us/1000)); } gpio_set_level(phy_802_3->reset_gpio_num, 1); + return ESP_OK; } - return ESP_OK; + return ESP_ERR_NOT_ALLOWED; +} + +/** + * @brief Hardware reset with internal timing configuration defined during initialization + * + * @param phy_802_3 IEEE 802.3 PHY object infostructure + * @return + * - ESP_OK: reset Ethernet PHY successfully + * - ESP_ERR_NOT_ALLOWED: reset GPIO not defined + */ +static esp_err_t esp_eth_phy_802_3_reset_hw_internal(phy_802_3_t *phy_802_3) +{ + esp_err_t ret = ESP_OK; + if ((ret = esp_eth_phy_802_3_reset_hw(phy_802_3, phy_802_3->hw_reset_assert_time_us)) == ESP_OK) { + if (phy_802_3->post_hw_reset_delay_ms > 0) { + vTaskDelay(pdMS_TO_TICKS(phy_802_3->post_hw_reset_delay_ms)); + } + } + return ret; } esp_err_t esp_eth_phy_802_3_detect_phy_addr(esp_eth_mediator_t *eth, int *detected_addr) @@ -601,9 +678,19 @@ esp_err_t esp_eth_phy_802_3_obj_config_init(phy_802_3_t *phy_802_3, const eth_ph phy_802_3->reset_timeout_ms = config->reset_timeout_ms; phy_802_3->reset_gpio_num = config->reset_gpio_num; phy_802_3->autonego_timeout_ms = config->autonego_timeout_ms; + if (config->hw_reset_assert_time_us > 0) { + phy_802_3->hw_reset_assert_time_us = config->hw_reset_assert_time_us; + } else { + phy_802_3->hw_reset_assert_time_us = PHY_RESET_ASSERTION_TIME_US; + } + if (config->post_hw_reset_delay_ms > 0) { + phy_802_3->post_hw_reset_delay_ms = config->post_hw_reset_delay_ms; + } else { + phy_802_3->post_hw_reset_delay_ms = ESP_ETH_NO_POST_HW_RESET_DELAY; + } phy_802_3->parent.reset = reset; - phy_802_3->parent.reset_hw = reset_hw_default; + phy_802_3->parent.reset_hw = reset_hw; phy_802_3->parent.init = init; phy_802_3->parent.deinit = deinit; phy_802_3->parent.set_mediator = set_mediator; @@ -617,7 +704,7 @@ esp_err_t esp_eth_phy_802_3_obj_config_init(phy_802_3_t *phy_802_3, const eth_ph phy_802_3->parent.set_duplex = set_duplex; phy_802_3->parent.del = del; phy_802_3->parent.set_link = set_link; - phy_802_3->parent.get_link = NULL; + phy_802_3->parent.get_link = get_link; phy_802_3->parent.custom_ioctl = NULL; err: diff --git a/components/esp_eth/src/phy/esp_eth_phy_generic.c b/components/esp_eth/src/phy/esp_eth_phy_generic.c new file mode 100644 index 000000000000..0003758bf866 --- /dev/null +++ b/components/esp_eth/src/phy/esp_eth_phy_generic.c @@ -0,0 +1,37 @@ +/* + * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include "esp_log.h" +#include "esp_check.h" +#include "esp_eth.h" +#include "esp_eth_phy_802_3.h" + +static const char *TAG = "eth_phy_generic"; + +// Default reset timing is intentionally conservative +#define DEFAULT_PHY_GENERIC_RESET_ASSERTION_TIME_US 10000 +#define DEFAULT_PHY_GENERIC_POST_RESET_DELAY_MS 500 + +esp_eth_phy_t *esp_eth_phy_new_generic(const eth_phy_config_t *config) +{ + esp_eth_phy_t *ret = NULL; + phy_802_3_t *phy_802_3 = calloc(1, sizeof(phy_802_3_t)); + eth_phy_config_t phy_802_3_config = *config; + // default chip specific configuration if not defined by user + if (config->hw_reset_assert_time_us == 0) { + phy_802_3_config.hw_reset_assert_time_us = DEFAULT_PHY_GENERIC_RESET_ASSERTION_TIME_US; + } + if (config->post_hw_reset_delay_ms == 0) { + phy_802_3_config.post_hw_reset_delay_ms = DEFAULT_PHY_GENERIC_POST_RESET_DELAY_MS; + } + ESP_GOTO_ON_FALSE(esp_eth_phy_802_3_obj_config_init(phy_802_3, &phy_802_3_config) == ESP_OK, + NULL, err, TAG, "configuration initialization of PHY 802.3 failed"); + + return &phy_802_3->parent; +err: + return ret; +} diff --git a/components/esp_eth/src/phy/esp_eth_phy_ip101.c b/components/esp_eth/src/phy/esp_eth_phy_ip101.c index e66fb78b93e5..42fce95b3177 100644 --- a/components/esp_eth/src/phy/esp_eth_phy_ip101.c +++ b/components/esp_eth/src/phy/esp_eth_phy_ip101.c @@ -173,14 +173,6 @@ static esp_err_t ip101_get_link(esp_eth_phy_t *phy) return ret; } -static esp_err_t ip101_reset_hw(esp_eth_phy_t *phy) -{ - phy_802_3_t *phy_802_3 = esp_eth_phy_into_phy_802_3(phy); - esp_err_t ret = esp_eth_phy_802_3_reset_hw(phy_802_3, IP101_PHY_RESET_ASSERTION_TIME_US); - vTaskDelay(pdMS_TO_TICKS(IP101_PHY_POST_RESET_INIT_TIME_MS)); - return ret; -} - static esp_err_t ip101_init(esp_eth_phy_t *phy) { esp_err_t ret = ESP_OK; @@ -206,13 +198,20 @@ esp_eth_phy_t *esp_eth_phy_new_ip101(const eth_phy_config_t *config) esp_eth_phy_t *ret = NULL; phy_ip101_t *ip101 = calloc(1, sizeof(phy_ip101_t)); ESP_GOTO_ON_FALSE(ip101, NULL, err, TAG, "calloc ip101 failed"); - ESP_GOTO_ON_FALSE(esp_eth_phy_802_3_obj_config_init(&ip101->phy_802_3, config) == ESP_OK, + eth_phy_config_t ip101_config = *config; + // default chip specific configuration + if (config->hw_reset_assert_time_us == 0) { + ip101_config.hw_reset_assert_time_us = IP101_PHY_RESET_ASSERTION_TIME_US; + } + if (config->post_hw_reset_delay_ms == 0) { + ip101_config.post_hw_reset_delay_ms = IP101_PHY_POST_RESET_INIT_TIME_MS; + } + ESP_GOTO_ON_FALSE(esp_eth_phy_802_3_obj_config_init(&ip101->phy_802_3, &ip101_config) == ESP_OK, NULL, err, TAG, "configuration initialization of PHY 802.3 failed"); // redefine functions which need to be customized for sake of IP101 ip101->phy_802_3.parent.init = ip101_init; ip101->phy_802_3.parent.get_link = ip101_get_link; - ip101->phy_802_3.parent.reset_hw = ip101_reset_hw; return &ip101->phy_802_3.parent; err: diff --git a/components/esp_eth/src/phy/esp_eth_phy_lan87xx.c b/components/esp_eth/src/phy/esp_eth_phy_lan87xx.c index d6f8e148fd1d..1d9f666f9a7a 100644 --- a/components/esp_eth/src/phy/esp_eth_phy_lan87xx.c +++ b/components/esp_eth/src/phy/esp_eth_phy_lan87xx.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2019-2023 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2019-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -14,6 +14,9 @@ static const char *TAG = "lan87xx"; +/* It was observed that assert nRST signal on LAN87xx needs to be a little longer than the minimum specified in datasheet */ +#define LAN87XX_PHY_RESET_ASSERTION_TIME_US 150 + /***************List of Supported Models***************/ // See Microchip's Application Note AN25.3 summarizing differences among below models @@ -287,12 +290,6 @@ static esp_err_t lan87xx_get_link(esp_eth_phy_t *phy) return ret; } -static esp_err_t lan87xx_reset_hw(esp_eth_phy_t *phy) -{ - /* It was observed that assert nRST signal on LAN87xx needs to be a little longer than the minimum specified in datasheet */ - return esp_eth_phy_802_3_reset_hw(esp_eth_phy_into_phy_802_3(phy), 150); -} - static esp_err_t lan87xx_autonego_ctrl(esp_eth_phy_t *phy, eth_phy_autoneg_cmd_t cmd, bool *autonego_en_stat) { esp_err_t ret = ESP_OK; @@ -366,11 +363,18 @@ esp_eth_phy_t *esp_eth_phy_new_lan87xx(const eth_phy_config_t *config) esp_eth_phy_t *ret = NULL; phy_lan87xx_t *lan87xx = calloc(1, sizeof(phy_lan87xx_t)); ESP_GOTO_ON_FALSE(lan87xx, NULL, err, TAG, "calloc lan87xx failed"); - ESP_GOTO_ON_FALSE(esp_eth_phy_802_3_obj_config_init(&lan87xx->phy_802_3, config) == ESP_OK, + eth_phy_config_t lan87xx_config = *config; + // default chip specific configuration + if (config->hw_reset_assert_time_us == 0) { + lan87xx_config.hw_reset_assert_time_us = LAN87XX_PHY_RESET_ASSERTION_TIME_US; + } + if (config->post_hw_reset_delay_ms == 0) { + lan87xx_config.post_hw_reset_delay_ms = ESP_ETH_NO_POST_HW_RESET_DELAY; + } + ESP_GOTO_ON_FALSE(esp_eth_phy_802_3_obj_config_init(&lan87xx->phy_802_3, &lan87xx_config) == ESP_OK, NULL, err, TAG, "configuration initialization of PHY 802.3 failed"); // redefine functions which need to be customized for sake of LAN87xx - lan87xx->phy_802_3.parent.reset_hw = lan87xx_reset_hw; lan87xx->phy_802_3.parent.init = lan87xx_init; lan87xx->phy_802_3.parent.get_link = lan87xx_get_link; lan87xx->phy_802_3.parent.autonego_ctrl = lan87xx_autonego_ctrl; diff --git a/components/esp_eth/src/phy/esp_eth_phy_rtl8201.c b/components/esp_eth/src/phy/esp_eth_phy_rtl8201.c index 4f3a9337b4fa..c2bf0900e3a5 100644 --- a/components/esp_eth/src/phy/esp_eth_phy_rtl8201.c +++ b/components/esp_eth/src/phy/esp_eth_phy_rtl8201.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2019-2023 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2019-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -149,15 +149,6 @@ static esp_err_t rtl8201_loopback(esp_eth_phy_t *phy, bool enable) return ret; } -static esp_err_t rtl8201_reset_hw(esp_eth_phy_t *phy) -{ - phy_802_3_t *phy_802_3 = esp_eth_phy_into_phy_802_3(phy); - esp_err_t ret = esp_eth_phy_802_3_reset_hw(phy_802_3, RTL8201_PHY_RESET_ASSERTION_TIME_US); - vTaskDelay(pdMS_TO_TICKS(RTL8201_PHY_POST_RESET_INIT_TIME_MS)); - return ret; -} - - static esp_err_t rtl8201_init(esp_eth_phy_t *phy) { esp_err_t ret = ESP_OK; @@ -183,7 +174,15 @@ esp_eth_phy_t *esp_eth_phy_new_rtl8201(const eth_phy_config_t *config) esp_eth_phy_t *ret = NULL; phy_rtl8201_t *rtl8201 = calloc(1, sizeof(phy_rtl8201_t)); ESP_GOTO_ON_FALSE(rtl8201, NULL, err, TAG, "calloc rtl8201 failed"); - ESP_GOTO_ON_FALSE(esp_eth_phy_802_3_obj_config_init(&rtl8201->phy_802_3, config) == ESP_OK, + eth_phy_config_t rtl8201_config = *config; + // default chip specific configuration + if (config->hw_reset_assert_time_us == 0) { + rtl8201_config.hw_reset_assert_time_us = RTL8201_PHY_RESET_ASSERTION_TIME_US; + } + if (config->post_hw_reset_delay_ms == 0) { + rtl8201_config.post_hw_reset_delay_ms = RTL8201_PHY_POST_RESET_INIT_TIME_MS; + } + ESP_GOTO_ON_FALSE(esp_eth_phy_802_3_obj_config_init(&rtl8201->phy_802_3, &rtl8201_config) == ESP_OK, NULL, err, TAG, "configuration initialization of PHY 802.3 failed"); // redefine functions which need to be customized for sake of RTL8201 @@ -191,7 +190,6 @@ esp_eth_phy_t *esp_eth_phy_new_rtl8201(const eth_phy_config_t *config) rtl8201->phy_802_3.parent.get_link = rtl8201_get_link; rtl8201->phy_802_3.parent.autonego_ctrl = rtl8201_autonego_ctrl; rtl8201->phy_802_3.parent.loopback = rtl8201_loopback; - rtl8201->phy_802_3.parent.reset_hw = rtl8201_reset_hw; return &rtl8201->phy_802_3.parent; err: diff --git a/docs/en/api-reference/network/esp_eth.rst b/docs/en/api-reference/network/esp_eth.rst index bf22ff5b8c39..ced34bb9822f 100644 --- a/docs/en/api-reference/network/esp_eth.rst +++ b/docs/en/api-reference/network/esp_eth.rst @@ -269,6 +269,10 @@ Configuration for PHY is described in :cpp:class:`eth_phy_config_t`, including: * :cpp:member:`eth_phy_config_t::reset_gpio_num`: if your board also connects the PHY reset pin to one of the GPIO, then set it here. Otherwise, set this field to ``-1``. + * :cpp:member:`eth_phy_config_t::hw_reset_assert_time_us`: Time the PHY reset pin is asserted in usec. Set this field to ``0`` to use chip specific default timing. + + * :cpp:member:`eth_phy_config_t::post_hw_reset_delay_ms`: Time to wait after the PHY hardware reset is done in msec. Set this field to ``0`` to use chip specific default timing. Set this field to ``-1`` to not wait after the PHY hardware reset. + ESP-IDF provides a default configuration for MAC and PHY in macro :c:macro:`ETH_MAC_DEFAULT_CONFIG` and :c:macro:`ETH_PHY_DEFAULT_CONFIG`. @@ -288,19 +292,23 @@ The Ethernet driver is implemented in an Object-Oriented style. Any operation on eth_mac_config_t mac_config = ETH_MAC_DEFAULT_CONFIG(); // apply default common MAC configuration eth_esp32_emac_config_t esp32_emac_config = ETH_ESP32_EMAC_DEFAULT_CONFIG(); // apply default vendor-specific MAC configuration - esp32_emac_config.smi_mdc_gpio_num = CONFIG_EXAMPLE_ETH_MDC_GPIO; // alter the GPIO used for MDC signal - esp32_emac_config.smi_mdio_gpio_num = CONFIG_EXAMPLE_ETH_MDIO_GPIO; // alter the GPIO used for MDIO signal + esp32_emac_config.smi_gpio.mdc_num = CONFIG_EXAMPLE_ETH_MDC_GPIO; // alter the GPIO used for MDC signal + esp32_emac_config.smi_gpio.mdio_num = CONFIG_EXAMPLE_ETH_MDIO_GPIO; // alter the GPIO used for MDIO signa esp_eth_mac_t *mac = esp_eth_mac_new_esp32(&esp32_emac_config, &mac_config); // create MAC instance eth_phy_config_t phy_config = ETH_PHY_DEFAULT_CONFIG(); // apply default PHY configuration phy_config.phy_addr = CONFIG_EXAMPLE_ETH_PHY_ADDR; // alter the PHY address according to your board design phy_config.reset_gpio_num = CONFIG_EXAMPLE_ETH_PHY_RST_GPIO; // alter the GPIO used for PHY reset - esp_eth_phy_t *phy = esp_eth_phy_new_ip101(&phy_config); // create PHY instance - // ESP-IDF officially supports several different Ethernet PHY chip driver + esp_eth_phy_t *phy = esp_eth_phy_new_generic(&phy_config); // create generic PHY instance + // ESP-IDF officially supports several different specific Ethernet PHY chip driver + // esp_eth_phy_t *phy = esp_eth_phy_new_ip101(&phy_config); // esp_eth_phy_t *phy = esp_eth_phy_new_rtl8201(&phy_config); // esp_eth_phy_t *phy = esp_eth_phy_new_lan8720(&phy_config); // esp_eth_phy_t *phy = esp_eth_phy_new_dp83848(&phy_config); + .. note:: + Any Ethernet PHY chip compliant with IEEE 802.3 can be used when creating new PHY instance with :cpp:func:`esp_eth_phy_new_generic`. However, while basic functionality should always work, some specific features might be limited, even if the PHY meets IEEE 802.3 standard. A typical example is loopback functionality, where certain PHYs may require setting a specific speed mode to operate correctly. If this is the concern and you need PHY driver specifically tailored to your chip needs, use drivers for PHY chips the ESP-IDF already officially supports or consult with :ref:`Custom PHY Driver ` section to create a new custom driver. + Optional Runtime MAC Clock Configuration ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -557,10 +565,12 @@ Application Examples Advanced Topics --------------- +.. _custom-phy-driver: + Custom PHY Driver ^^^^^^^^^^^^^^^^^ -There are multiple PHY manufacturers with wide portfolios of chips available. The ESP-IDF already supports several PHY chips however one can easily get to a point where none of them satisfies the user's actual needs due to price, features, stock availability, etc. +There are multiple PHY manufacturers with wide portfolios of chips available. The ESP-IDF supports ``Generic PHY`` and also several specific PHY chips however one can easily get to a point where none of them satisfies the user's actual needs due to price, features, stock availability, etc. Luckily, a management interface between EMAC and PHY is standardized by IEEE 802.3 in Section 22.2.4 Management Functions. It defines provisions of the so-called "MII Management Interface" to control the PHY and gather status from the PHY. A set of management registers is defined to control chip behavior, link properties, auto-negotiation configuration, etc. This basic management functionality is addressed by :component_file:`esp_eth/src/phy/esp_eth_phy_802_3.c` in ESP-IDF and so it makes the creation of a new custom PHY chip driver quite a simple task. diff --git a/examples/common_components/protocol_examples_common/Kconfig.projbuild b/examples/common_components/protocol_examples_common/Kconfig.projbuild index 800f136a09c9..a890bfbe07f3 100644 --- a/examples/common_components/protocol_examples_common/Kconfig.projbuild +++ b/examples/common_components/protocol_examples_common/Kconfig.projbuild @@ -183,6 +183,15 @@ menu "Example Connection Configuration" help Select the Ethernet PHY device to use in the example. + config EXAMPLE_ETH_PHY_GENERIC + bool "Generic 802.3 PHY" + help + Any Ethernet PHY chip compliant with IEEE 802.3 can be used. However, while + basic functionality should always work, some specific features might be limited, + even if the PHY meets IEEE 802.3 standard. A typical example is loopback + functionality, where certain PHYs may require setting a specific speed mode to + operate correctly. + config EXAMPLE_ETH_PHY_IP101 bool "IP101" help diff --git a/examples/common_components/protocol_examples_common/eth_connect.c b/examples/common_components/protocol_examples_common/eth_connect.c index 8e89dbe28eb3..86e856527c2b 100644 --- a/examples/common_components/protocol_examples_common/eth_connect.c +++ b/examples/common_components/protocol_examples_common/eth_connect.c @@ -103,7 +103,9 @@ static esp_netif_t *eth_start(void) esp32_emac_config.smi_gpio.mdc_num = CONFIG_EXAMPLE_ETH_MDC_GPIO; esp32_emac_config.smi_gpio.mdio_num = CONFIG_EXAMPLE_ETH_MDIO_GPIO; s_mac = esp_eth_mac_new_esp32(&esp32_emac_config, &mac_config); -#if CONFIG_EXAMPLE_ETH_PHY_IP101 +#if CONFIG_EXAMPLE_ETH_PHY_GENERIC + s_phy = esp_eth_phy_new_generic(&phy_config); +#elif CONFIG_EXAMPLE_ETH_PHY_IP101 s_phy = esp_eth_phy_new_ip101(&phy_config); #elif CONFIG_EXAMPLE_ETH_PHY_RTL8201 s_phy = esp_eth_phy_new_rtl8201(&phy_config); diff --git a/examples/ethernet/basic/components/ethernet_init/Kconfig.projbuild b/examples/ethernet/basic/components/ethernet_init/Kconfig.projbuild index caca0c4211a0..325908b57537 100644 --- a/examples/ethernet/basic/components/ethernet_init/Kconfig.projbuild +++ b/examples/ethernet/basic/components/ethernet_init/Kconfig.projbuild @@ -17,6 +17,15 @@ menu "Example Ethernet Configuration" help Select the Ethernet PHY device to use in the example. + config EXAMPLE_ETH_PHY_GENERIC + bool "Generic 802.3 PHY" + help + Any Ethernet PHY chip compliant with IEEE 802.3 can be used. However, while + basic functionality should always work, some specific features might be limited, + even if the PHY meets IEEE 802.3 standard. A typical example is loopback + functionality, where certain PHYs may require setting a specific speed mode to + operate correctly. + config EXAMPLE_ETH_PHY_IP101 bool "IP101" help diff --git a/examples/ethernet/basic/components/ethernet_init/ethernet_init.c b/examples/ethernet/basic/components/ethernet_init/ethernet_init.c index b34304e4a372..831e8cb2079d 100644 --- a/examples/ethernet/basic/components/ethernet_init/ethernet_init.c +++ b/examples/ethernet/basic/components/ethernet_init/ethernet_init.c @@ -83,7 +83,9 @@ static esp_eth_handle_t eth_init_internal(esp_eth_mac_t **mac_out, esp_eth_phy_t // Create new ESP32 Ethernet MAC instance esp_eth_mac_t *mac = esp_eth_mac_new_esp32(&esp32_emac_config, &mac_config); // Create new PHY instance based on board configuration -#if CONFIG_EXAMPLE_ETH_PHY_IP101 +#if CONFIG_EXAMPLE_ETH_PHY_GENERIC + esp_eth_phy_t *phy = esp_eth_phy_new_generic(&phy_config); +#elif CONFIG_EXAMPLE_ETH_PHY_IP101 esp_eth_phy_t *phy = esp_eth_phy_new_ip101(&phy_config); #elif CONFIG_EXAMPLE_ETH_PHY_RTL8201 esp_eth_phy_t *phy = esp_eth_phy_new_rtl8201(&phy_config); diff --git a/examples/ethernet/basic/pytest_eth_basic.py b/examples/ethernet/basic/pytest_eth_basic.py index 44ce6db4af2f..74c5a2ac63fe 100644 --- a/examples/ethernet/basic/pytest_eth_basic.py +++ b/examples/ethernet/basic/pytest_eth_basic.py @@ -10,6 +10,7 @@ @pytest.mark.esp32 @pytest.mark.parametrize('config', [ pytest.param('default_ip101', marks=[pytest.mark.ethernet_router]), + pytest.param('default_generic', marks=[pytest.mark.ethernet_router]), pytest.param('default_dm9051', marks=[pytest.mark.eth_dm9051]), ], indirect=True) def test_esp_eth_basic( diff --git a/examples/ethernet/basic/sdkconfig.ci.default_generic b/examples/ethernet/basic/sdkconfig.ci.default_generic new file mode 100644 index 000000000000..dae839a7c87d --- /dev/null +++ b/examples/ethernet/basic/sdkconfig.ci.default_generic @@ -0,0 +1,11 @@ +CONFIG_EXAMPLE_USE_INTERNAL_ETHERNET=y +CONFIG_EXAMPLE_ETH_PHY_GENERIC=y +CONFIG_EXAMPLE_ETH_MDC_GPIO=23 +CONFIG_EXAMPLE_ETH_MDIO_GPIO=18 +CONFIG_EXAMPLE_ETH_PHY_RST_GPIO=5 +CONFIG_EXAMPLE_ETH_PHY_ADDR=1 + +CONFIG_ETH_ENABLED=y +CONFIG_ETH_USE_ESP32_EMAC=y +CONFIG_ETH_PHY_INTERFACE_RMII=y +CONFIG_ETH_RMII_CLK_INPUT=y From c079f30295f35f30b8a18490d4095b52c32e7b9b Mon Sep 17 00:00:00 2001 From: laokaiyao Date: Fri, 6 Sep 2024 16:36:02 +0800 Subject: [PATCH 143/365] refactor(soc): sort esp32c3 soc headers --- .../soc/esp32c3/include/soc/dport_access.h | 3 +- .../soc/esp32c3/include/soc/interrupt_reg.h | 2 +- components/soc/esp32c3/include/soc/soc.h | 2 +- components/soc/esp32c3/register/soc/.gitkeep | 0 .../{include => register}/soc/apb_ctrl_reg.h | 2 +- .../soc/apb_ctrl_struct.h | 0 .../soc/apb_saradc_reg.h | 20 ++++--------- .../soc/apb_saradc_struct.h | 0 .../soc/assist_debug_reg.h | 20 ++++--------- .../{include => register}/soc/efuse_reg.h | 4 +-- .../{include => register}/soc/efuse_struct.h | 2 +- .../{include => register}/soc/extmem_reg.h | 20 ++++--------- .../{include => register}/soc/gdma_reg.h | 0 .../{include => register}/soc/gdma_struct.h | 0 .../{include => register}/soc/gpio_reg.h | 20 ++++--------- .../{include => register}/soc/gpio_sd_reg.h | 2 +- .../soc/gpio_sd_struct.h | 0 .../{include => register}/soc/gpio_struct.h | 18 ++++------- .../{include => register}/soc/i2c_reg.h | 20 ++++--------- .../{include => register}/soc/i2c_struct.h | 2 +- .../{include => register}/soc/i2s_reg.h | 4 +-- .../{include => register}/soc/i2s_struct.h | 2 +- .../soc/interrupt_core0_reg.h | 20 ++++--------- .../{include => register}/soc/io_mux_reg.h | 2 +- .../{include => register}/soc/ledc_reg.h | 20 ++++--------- .../{include => register}/soc/ledc_struct.h | 0 .../{include => register}/soc/nrx_reg.h | 18 ++++------- .../{include => register}/soc/reg_base.h | 2 +- .../{include => register}/soc/rmt_reg.h | 2 +- .../{include => register}/soc/rmt_struct.h | 0 .../{include => register}/soc/rtc_cntl_reg.h | 12 ++++---- .../soc/rtc_cntl_struct.h | 10 +++---- .../{include => register}/soc/rtc_i2c_reg.h | 20 ++++--------- .../soc/rtc_i2c_struct.h | 0 .../{include => register}/soc/sensitive_reg.h | 20 ++++--------- .../soc/sensitive_struct.h | 20 ++++--------- .../{include => register}/soc/spi_mem_reg.h | 22 +++++--------- .../soc/spi_mem_struct.h | 2 +- .../{include => register}/soc/spi_reg.h | 18 +++++------ .../{include => register}/soc/spi_struct.h | 4 +-- .../{include => register}/soc/syscon_reg.h | 4 +-- .../{include => register}/soc/syscon_struct.h | 0 .../{include => register}/soc/system_reg.h | 2 +- .../{include => register}/soc/system_struct.h | 2 +- .../{include => register}/soc/systimer_reg.h | 15 ++-------- .../soc/systimer_struct.h | 15 ++-------- .../soc/timer_group_reg.h | 0 .../soc/timer_group_struct.h | 0 .../{include => register}/soc/twai_struct.h | 0 .../{include => register}/soc/uart_reg.h | 30 +++++++------------ .../{include => register}/soc/uart_struct.h | 10 +++---- .../{include => register}/soc/uhci_reg.h | 20 ++++--------- .../{include => register}/soc/uhci_struct.h | 0 .../soc/usb_serial_jtag_reg.h | 10 +++---- .../soc/usb_serial_jtag_struct.h | 20 ++++--------- .../{include => register}/soc/xts_aes_reg.h | 2 +- tools/ci/check_copyright_ignore.txt | 26 ---------------- 57 files changed, 159 insertions(+), 332 deletions(-) delete mode 100644 components/soc/esp32c3/register/soc/.gitkeep rename components/soc/esp32c3/{include => register}/soc/apb_ctrl_reg.h (99%) rename components/soc/esp32c3/{include => register}/soc/apb_ctrl_struct.h (100%) rename components/soc/esp32c3/{include => register}/soc/apb_saradc_reg.h (97%) rename components/soc/esp32c3/{include => register}/soc/apb_saradc_struct.h (100%) rename components/soc/esp32c3/{include => register}/soc/assist_debug_reg.h (98%) rename components/soc/esp32c3/{include => register}/soc/efuse_reg.h (99%) rename components/soc/esp32c3/{include => register}/soc/efuse_struct.h (99%) rename components/soc/esp32c3/{include => register}/soc/extmem_reg.h (98%) rename components/soc/esp32c3/{include => register}/soc/gdma_reg.h (100%) rename components/soc/esp32c3/{include => register}/soc/gdma_struct.h (100%) rename components/soc/esp32c3/{include => register}/soc/gpio_reg.h (99%) rename components/soc/esp32c3/{include => register}/soc/gpio_sd_reg.h (99%) rename components/soc/esp32c3/{include => register}/soc/gpio_sd_struct.h (100%) rename components/soc/esp32c3/{include => register}/soc/gpio_struct.h (94%) rename components/soc/esp32c3/{include => register}/soc/i2c_reg.h (98%) rename components/soc/esp32c3/{include => register}/soc/i2c_struct.h (99%) rename components/soc/esp32c3/{include => register}/soc/i2s_reg.h (99%) rename components/soc/esp32c3/{include => register}/soc/i2s_struct.h (99%) rename components/soc/esp32c3/{include => register}/soc/interrupt_core0_reg.h (98%) rename components/soc/esp32c3/{include => register}/soc/io_mux_reg.h (99%) rename components/soc/esp32c3/{include => register}/soc/ledc_reg.h (98%) rename components/soc/esp32c3/{include => register}/soc/ledc_struct.h (100%) rename components/soc/esp32c3/{include => register}/soc/nrx_reg.h (67%) rename components/soc/esp32c3/{include => register}/soc/reg_base.h (97%) rename components/soc/esp32c3/{include => register}/soc/rmt_reg.h (99%) rename components/soc/esp32c3/{include => register}/soc/rmt_struct.h (100%) rename components/soc/esp32c3/{include => register}/soc/rtc_cntl_reg.h (99%) rename components/soc/esp32c3/{include => register}/soc/rtc_cntl_struct.h (99%) rename components/soc/esp32c3/{include => register}/soc/rtc_i2c_reg.h (97%) rename components/soc/esp32c3/{include => register}/soc/rtc_i2c_struct.h (100%) rename components/soc/esp32c3/{include => register}/soc/sensitive_reg.h (99%) rename components/soc/esp32c3/{include => register}/soc/sensitive_struct.h (99%) rename components/soc/esp32c3/{include => register}/soc/spi_mem_reg.h (98%) rename components/soc/esp32c3/{include => register}/soc/spi_mem_struct.h (99%) rename components/soc/esp32c3/{include => register}/soc/spi_reg.h (99%) rename components/soc/esp32c3/{include => register}/soc/spi_struct.h (99%) rename components/soc/esp32c3/{include => register}/soc/syscon_reg.h (99%) rename components/soc/esp32c3/{include => register}/soc/syscon_struct.h (100%) rename components/soc/esp32c3/{include => register}/soc/system_reg.h (99%) rename components/soc/esp32c3/{include => register}/soc/system_struct.h (99%) rename components/soc/esp32c3/{include => register}/soc/systimer_reg.h (97%) rename components/soc/esp32c3/{include => register}/soc/systimer_struct.h (94%) rename components/soc/esp32c3/{include => register}/soc/timer_group_reg.h (100%) rename components/soc/esp32c3/{include => register}/soc/timer_group_struct.h (100%) rename components/soc/esp32c3/{include => register}/soc/twai_struct.h (100%) rename components/soc/esp32c3/{include => register}/soc/uart_reg.h (98%) rename components/soc/esp32c3/{include => register}/soc/uart_struct.h (98%) rename components/soc/esp32c3/{include => register}/soc/uhci_reg.h (97%) rename components/soc/esp32c3/{include => register}/soc/uhci_struct.h (100%) rename components/soc/esp32c3/{include => register}/soc/usb_serial_jtag_reg.h (99%) rename components/soc/esp32c3/{include => register}/soc/usb_serial_jtag_struct.h (96%) rename components/soc/esp32c3/{include => register}/soc/xts_aes_reg.h (98%) diff --git a/components/soc/esp32c3/include/soc/dport_access.h b/components/soc/esp32c3/include/soc/dport_access.h index 5a847ca48423..e499a791bdd6 100644 --- a/components/soc/esp32c3/include/soc/dport_access.h +++ b/components/soc/esp32c3/include/soc/dport_access.h @@ -8,8 +8,7 @@ #define _DPORT_ACCESS_H_ #include -#include "soc.h" -#include "uart_reg.h" +#include "soc/soc.h" #ifdef __cplusplus extern "C" { diff --git a/components/soc/esp32c3/include/soc/interrupt_reg.h b/components/soc/esp32c3/include/soc/interrupt_reg.h index 749a2e921671..d02c2d5c20ce 100644 --- a/components/soc/esp32c3/include/soc/interrupt_reg.h +++ b/components/soc/esp32c3/include/soc/interrupt_reg.h @@ -5,7 +5,7 @@ */ #pragma once -#include "interrupt_core0_reg.h" +#include "soc/interrupt_core0_reg.h" #define INTERRUPT_CURRENT_CORE_INT_THRESH_REG INTERRUPT_CORE0_CPU_INT_THRESH_REG #define INTERRUPT_PRIO_REG(n) (INTERRUPT_CORE0_CPU_INT_PRI_0_REG + (n)*4) diff --git a/components/soc/esp32c3/include/soc/soc.h b/components/soc/esp32c3/include/soc/soc.h index d661c4eb126d..1b47dd70fb1b 100644 --- a/components/soc/esp32c3/include/soc/soc.h +++ b/components/soc/esp32c3/include/soc/soc.h @@ -12,7 +12,7 @@ #endif #include "esp_bit_defs.h" -#include "reg_base.h" +#include "soc/reg_base.h" #define PRO_CPU_NUM (0) diff --git a/components/soc/esp32c3/register/soc/.gitkeep b/components/soc/esp32c3/register/soc/.gitkeep deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/components/soc/esp32c3/include/soc/apb_ctrl_reg.h b/components/soc/esp32c3/register/soc/apb_ctrl_reg.h similarity index 99% rename from components/soc/esp32c3/include/soc/apb_ctrl_reg.h rename to components/soc/esp32c3/register/soc/apb_ctrl_reg.h index cb1966505e8d..f7fb4f1ba97b 100644 --- a/components/soc/esp32c3/include/soc/apb_ctrl_reg.h +++ b/components/soc/esp32c3/register/soc/apb_ctrl_reg.h @@ -11,7 +11,7 @@ #ifdef __cplusplus extern "C" { #endif -#include "soc.h" +#include "soc/soc.h" #define APB_CTRL_SYSCLK_CONF_REG (DR_REG_APB_CTRL_BASE + 0x000) /* APB_CTRL_RST_TICK_CNT : R/W ;bitpos:[12] ;default: 1'b0 ; */ /*description: */ diff --git a/components/soc/esp32c3/include/soc/apb_ctrl_struct.h b/components/soc/esp32c3/register/soc/apb_ctrl_struct.h similarity index 100% rename from components/soc/esp32c3/include/soc/apb_ctrl_struct.h rename to components/soc/esp32c3/register/soc/apb_ctrl_struct.h diff --git a/components/soc/esp32c3/include/soc/apb_saradc_reg.h b/components/soc/esp32c3/register/soc/apb_saradc_reg.h similarity index 97% rename from components/soc/esp32c3/include/soc/apb_saradc_reg.h rename to components/soc/esp32c3/register/soc/apb_saradc_reg.h index 69785ca84da6..87deea2d3e97 100644 --- a/components/soc/esp32c3/include/soc/apb_saradc_reg.h +++ b/components/soc/esp32c3/register/soc/apb_saradc_reg.h @@ -1,16 +1,8 @@ -// Copyright 2020 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2020-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #ifndef _SOC_APB_SARADC_REG_H_ #define _SOC_APB_SARADC_REG_H_ @@ -18,7 +10,7 @@ #ifdef __cplusplus extern "C" { #endif -#include "soc.h" +#include "soc/soc.h" #define APB_SARADC_CTRL_REG (DR_REG_APB_SARADC_BASE + 0x000) /* APB_SARADC_WAIT_ARB_CYCLE : R/W ;bitpos:[31:30] ;default: 2'd1 ; */ /*description: wait arbit signal stable after sar_done*/ diff --git a/components/soc/esp32c3/include/soc/apb_saradc_struct.h b/components/soc/esp32c3/register/soc/apb_saradc_struct.h similarity index 100% rename from components/soc/esp32c3/include/soc/apb_saradc_struct.h rename to components/soc/esp32c3/register/soc/apb_saradc_struct.h diff --git a/components/soc/esp32c3/include/soc/assist_debug_reg.h b/components/soc/esp32c3/register/soc/assist_debug_reg.h similarity index 98% rename from components/soc/esp32c3/include/soc/assist_debug_reg.h rename to components/soc/esp32c3/register/soc/assist_debug_reg.h index 2b13d1f5f416..615964bd7400 100644 --- a/components/soc/esp32c3/include/soc/assist_debug_reg.h +++ b/components/soc/esp32c3/register/soc/assist_debug_reg.h @@ -1,16 +1,8 @@ -// Copyright 2020 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2020-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #ifndef _SOC_ASSIST_DEBUG_REG_H_ #define _SOC_ASSIST_DEBUG_REG_H_ @@ -18,7 +10,7 @@ #ifdef __cplusplus extern "C" { #endif -#include "soc.h" +#include "soc/soc.h" #define ASSIST_DEBUG_CORE_0_INTR_ENA_REG (DR_REG_ASSIST_DEBUG_BASE + 0x000) /* ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_ENA : R/W ;bitpos:[11] ;default: 1'b0 ; */ /*description: */ diff --git a/components/soc/esp32c3/include/soc/efuse_reg.h b/components/soc/esp32c3/register/soc/efuse_reg.h similarity index 99% rename from components/soc/esp32c3/include/soc/efuse_reg.h rename to components/soc/esp32c3/register/soc/efuse_reg.h index 4d6781c976b6..39db7b9abb46 100644 --- a/components/soc/esp32c3/include/soc/efuse_reg.h +++ b/components/soc/esp32c3/register/soc/efuse_reg.h @@ -7,7 +7,7 @@ #include #include "soc/soc.h" -#include "efuse_defs.h" +#include "soc/efuse_defs.h" #ifdef __cplusplus extern "C" { #endif @@ -2376,7 +2376,7 @@ extern "C" { #define EFUSE_CLK_EN_S 16 /** EFUSE_CONF_REG register - * eFuse operation mode configuraiton register; + * eFuse operation mode configuration register; */ #define EFUSE_CONF_REG (DR_REG_EFUSE_BASE + 0x1cc) /** EFUSE_OP_CODE : R/W; bitpos: [15:0]; default: 0; diff --git a/components/soc/esp32c3/include/soc/efuse_struct.h b/components/soc/esp32c3/register/soc/efuse_struct.h similarity index 99% rename from components/soc/esp32c3/include/soc/efuse_struct.h rename to components/soc/esp32c3/register/soc/efuse_struct.h index 99f8c39ec576..f12563cebd0e 100644 --- a/components/soc/esp32c3/include/soc/efuse_struct.h +++ b/components/soc/esp32c3/register/soc/efuse_struct.h @@ -2015,7 +2015,7 @@ typedef union { } efuse_clk_reg_t; /** Type of conf register - * eFuse operation mode configuraiton register; + * eFuse operation mode configuration register; */ typedef union { struct { diff --git a/components/soc/esp32c3/include/soc/extmem_reg.h b/components/soc/esp32c3/register/soc/extmem_reg.h similarity index 98% rename from components/soc/esp32c3/include/soc/extmem_reg.h rename to components/soc/esp32c3/register/soc/extmem_reg.h index 71ab60f6400f..7a94ea7e66ba 100644 --- a/components/soc/esp32c3/include/soc/extmem_reg.h +++ b/components/soc/esp32c3/register/soc/extmem_reg.h @@ -1,16 +1,8 @@ -// Copyright 2020 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2020-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #ifndef _SOC_EXTMEM_REG_H_ #define _SOC_EXTMEM_REG_H_ @@ -18,7 +10,7 @@ #ifdef __cplusplus extern "C" { #endif -#include "soc.h" +#include "soc/soc.h" #define EXTMEM_ICACHE_CTRL_REG (DR_REG_EXTMEM_BASE + 0x000) /* EXTMEM_ICACHE_ENABLE : R/W ;bitpos:[0] ;default: 1'b0 ; */ /*description: The bit is used to activate the data cache. 0: disable 1: enable*/ diff --git a/components/soc/esp32c3/include/soc/gdma_reg.h b/components/soc/esp32c3/register/soc/gdma_reg.h similarity index 100% rename from components/soc/esp32c3/include/soc/gdma_reg.h rename to components/soc/esp32c3/register/soc/gdma_reg.h diff --git a/components/soc/esp32c3/include/soc/gdma_struct.h b/components/soc/esp32c3/register/soc/gdma_struct.h similarity index 100% rename from components/soc/esp32c3/include/soc/gdma_struct.h rename to components/soc/esp32c3/register/soc/gdma_struct.h diff --git a/components/soc/esp32c3/include/soc/gpio_reg.h b/components/soc/esp32c3/register/soc/gpio_reg.h similarity index 99% rename from components/soc/esp32c3/include/soc/gpio_reg.h rename to components/soc/esp32c3/register/soc/gpio_reg.h index a674277f9940..b92e195e36de 100644 --- a/components/soc/esp32c3/include/soc/gpio_reg.h +++ b/components/soc/esp32c3/register/soc/gpio_reg.h @@ -1,16 +1,8 @@ -// Copyright 2020 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2020-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #ifndef _SOC_GPIO_REG_H_ #define _SOC_GPIO_REG_H_ @@ -18,7 +10,7 @@ #ifdef __cplusplus extern "C" { #endif -#include "soc.h" +#include "soc/soc.h" #define GPIO_PIN_CONFIG_MSB 12 #define GPIO_PIN_CONFIG_LSB 11 #define GPIO_PIN_CONFIG_MASK 0x00001800 diff --git a/components/soc/esp32c3/include/soc/gpio_sd_reg.h b/components/soc/esp32c3/register/soc/gpio_sd_reg.h similarity index 99% rename from components/soc/esp32c3/include/soc/gpio_sd_reg.h rename to components/soc/esp32c3/register/soc/gpio_sd_reg.h index 3c72df5d4040..57d66a44c0c2 100644 --- a/components/soc/esp32c3/include/soc/gpio_sd_reg.h +++ b/components/soc/esp32c3/register/soc/gpio_sd_reg.h @@ -6,7 +6,7 @@ #pragma once -#include "soc.h" +#include "soc/soc.h" #ifdef __cplusplus extern "C" { diff --git a/components/soc/esp32c3/include/soc/gpio_sd_struct.h b/components/soc/esp32c3/register/soc/gpio_sd_struct.h similarity index 100% rename from components/soc/esp32c3/include/soc/gpio_sd_struct.h rename to components/soc/esp32c3/register/soc/gpio_sd_struct.h diff --git a/components/soc/esp32c3/include/soc/gpio_struct.h b/components/soc/esp32c3/register/soc/gpio_struct.h similarity index 94% rename from components/soc/esp32c3/include/soc/gpio_struct.h rename to components/soc/esp32c3/register/soc/gpio_struct.h index 45f5e55412c7..1fbb0779b477 100644 --- a/components/soc/esp32c3/include/soc/gpio_struct.h +++ b/components/soc/esp32c3/register/soc/gpio_struct.h @@ -1,16 +1,8 @@ -// Copyright 2020 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2020-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #ifndef _SOC_GPIO_STRUCT_H_ #define _SOC_GPIO_STRUCT_H_ #include diff --git a/components/soc/esp32c3/include/soc/i2c_reg.h b/components/soc/esp32c3/register/soc/i2c_reg.h similarity index 98% rename from components/soc/esp32c3/include/soc/i2c_reg.h rename to components/soc/esp32c3/register/soc/i2c_reg.h index 6a45d008276d..03ec35dad0f7 100644 --- a/components/soc/esp32c3/include/soc/i2c_reg.h +++ b/components/soc/esp32c3/register/soc/i2c_reg.h @@ -1,16 +1,8 @@ -// Copyright 2020 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2020-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #ifndef _SOC_I2C_REG_H_ #define _SOC_I2C_REG_H_ @@ -18,7 +10,7 @@ #ifdef __cplusplus extern "C" { #endif -#include "soc.h" +#include "soc/soc.h" #define I2C_SCL_LOW_PERIOD_REG(i) (REG_I2C_BASE(i) + 0x0) /* I2C_SCL_LOW_PERIOD : R/W ;bitpos:[8:0] ;default: 9'b0 ; */ diff --git a/components/soc/esp32c3/include/soc/i2c_struct.h b/components/soc/esp32c3/register/soc/i2c_struct.h similarity index 99% rename from components/soc/esp32c3/include/soc/i2c_struct.h rename to components/soc/esp32c3/register/soc/i2c_struct.h index 1009fedd6e07..eb32d5a9cf98 100644 --- a/components/soc/esp32c3/include/soc/i2c_struct.h +++ b/components/soc/esp32c3/register/soc/i2c_struct.h @@ -10,7 +10,7 @@ #ifdef __cplusplus extern "C" { #endif -#include "soc.h" +#include "soc/soc.h" typedef volatile struct i2c_dev_s { union { diff --git a/components/soc/esp32c3/include/soc/i2s_reg.h b/components/soc/esp32c3/register/soc/i2s_reg.h similarity index 99% rename from components/soc/esp32c3/include/soc/i2s_reg.h rename to components/soc/esp32c3/register/soc/i2s_reg.h index 2b3ed91f6106..7412fe1a13d1 100644 --- a/components/soc/esp32c3/include/soc/i2s_reg.h +++ b/components/soc/esp32c3/register/soc/i2s_reg.h @@ -10,7 +10,7 @@ #ifdef __cplusplus extern "C" { #endif -#include "soc.h" +#include "soc/soc.h" #define I2S_INT_RAW_REG(i) (REG_I2S_BASE(i) + 0x000c) /* I2S_TX_HUNG_INT_RAW : RO ;bitpos:[3] ;default: 1'b0 ; */ /*description: The raw interrupt status bit for the i2s_tx_hung_int interrupt*/ @@ -280,7 +280,7 @@ extern "C" { #define I2S_TX_LEFT_ALIGN_S 15 /* I2S_TX_STOP_EN : R/W ;bitpos:[13] ;default: 1'h1 ; */ /*description: Set this bit to stop disable output BCK signal and WS signal - when tx FIFO is emtpy*/ + when tx FIFO is empty*/ #define I2S_TX_STOP_EN (BIT(13)) #define I2S_TX_STOP_EN_M (BIT(13)) #define I2S_TX_STOP_EN_V 0x1 diff --git a/components/soc/esp32c3/include/soc/i2s_struct.h b/components/soc/esp32c3/register/soc/i2s_struct.h similarity index 99% rename from components/soc/esp32c3/include/soc/i2s_struct.h rename to components/soc/esp32c3/register/soc/i2s_struct.h index e0c10e91e977..29093ad2d97e 100644 --- a/components/soc/esp32c3/include/soc/i2s_struct.h +++ b/components/soc/esp32c3/register/soc/i2s_struct.h @@ -95,7 +95,7 @@ typedef volatile struct i2s_dev_s { uint32_t tx_mono_fst_vld: 1; /*1: The first channel data value is valid in I2S TX mono mode. 0: The second channel data value is valid in I2S TX mono mode.*/ uint32_t tx_pcm_conf: 2; /*I2S TX compress/decompress configuration bit. & 0 (atol): A-Law decompress 1 (ltoa) : A-Law compress 2 (utol) : u-Law decompress 3 (ltou) : u-Law compress. &*/ uint32_t tx_pcm_bypass: 1; /*Set this bit to bypass Compress/Decompress module for transmitted data.*/ - uint32_t tx_stop_en: 1; /*Set this bit to stop disable output BCK signal and WS signal when tx FIFO is emtpy*/ + uint32_t tx_stop_en: 1; /*Set this bit to stop disable output BCK signal and WS signal when tx FIFO is empty*/ uint32_t reserved14: 1; uint32_t tx_left_align: 1; /*1: I2S TX left alignment mode. 0: I2S TX right alignment mode.*/ uint32_t tx_24_fill_en: 1; /*1: Sent 32 bits in 24 channel bits mode. 0: Sent 24 bits in 24 channel bits mode*/ diff --git a/components/soc/esp32c3/include/soc/interrupt_core0_reg.h b/components/soc/esp32c3/register/soc/interrupt_core0_reg.h similarity index 98% rename from components/soc/esp32c3/include/soc/interrupt_core0_reg.h rename to components/soc/esp32c3/register/soc/interrupt_core0_reg.h index f606cdafcafb..f587f5c73c15 100644 --- a/components/soc/esp32c3/include/soc/interrupt_core0_reg.h +++ b/components/soc/esp32c3/register/soc/interrupt_core0_reg.h @@ -1,16 +1,8 @@ -// Copyright 2020 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2020-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #ifndef _SOC_INTERRUPT_CORE0_REG_H_ #define _SOC_INTERRUPT_CORE0_REG_H_ @@ -18,7 +10,7 @@ #ifdef __cplusplus extern "C" { #endif -#include "soc.h" +#include "soc/soc.h" #define DR_REG_INTERRUPT_CORE0_BASE DR_REG_INTERRUPT_BASE diff --git a/components/soc/esp32c3/include/soc/io_mux_reg.h b/components/soc/esp32c3/register/soc/io_mux_reg.h similarity index 99% rename from components/soc/esp32c3/include/soc/io_mux_reg.h rename to components/soc/esp32c3/register/soc/io_mux_reg.h index f5abe8ee5e81..a85a3434dd04 100644 --- a/components/soc/esp32c3/include/soc/io_mux_reg.h +++ b/components/soc/esp32c3/register/soc/io_mux_reg.h @@ -6,7 +6,7 @@ #ifndef _SOC_IO_MUX_REG_H_ #define _SOC_IO_MUX_REG_H_ -#include "soc.h" +#include "soc/soc.h" /* The following are the bit fields for PERIPHS_IO_MUX_x_U registers */ /* Output enable in sleep mode */ diff --git a/components/soc/esp32c3/include/soc/ledc_reg.h b/components/soc/esp32c3/register/soc/ledc_reg.h similarity index 98% rename from components/soc/esp32c3/include/soc/ledc_reg.h rename to components/soc/esp32c3/register/soc/ledc_reg.h index 0cc9334130b2..c956e9e7dadc 100644 --- a/components/soc/esp32c3/include/soc/ledc_reg.h +++ b/components/soc/esp32c3/register/soc/ledc_reg.h @@ -1,16 +1,8 @@ -// Copyright 2020 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2020-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #ifndef _SOC_LEDC_REG_H_ #define _SOC_LEDC_REG_H_ @@ -18,7 +10,7 @@ #ifdef __cplusplus extern "C" { #endif -#include "soc.h" +#include "soc/soc.h" #define LEDC_LSCH0_CONF0_REG (DR_REG_LEDC_BASE + 0x0000) /* LEDC_OVF_CNT_RESET_LSCH0 : WO ;bitpos:[16] ;default: 1'b0 ; */ /*description: */ diff --git a/components/soc/esp32c3/include/soc/ledc_struct.h b/components/soc/esp32c3/register/soc/ledc_struct.h similarity index 100% rename from components/soc/esp32c3/include/soc/ledc_struct.h rename to components/soc/esp32c3/register/soc/ledc_struct.h diff --git a/components/soc/esp32c3/include/soc/nrx_reg.h b/components/soc/esp32c3/register/soc/nrx_reg.h similarity index 67% rename from components/soc/esp32c3/include/soc/nrx_reg.h rename to components/soc/esp32c3/register/soc/nrx_reg.h index d80cb2a1785b..16e6e148497e 100644 --- a/components/soc/esp32c3/include/soc/nrx_reg.h +++ b/components/soc/esp32c3/register/soc/nrx_reg.h @@ -1,16 +1,8 @@ -// Copyright 2015-2020 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #pragma once diff --git a/components/soc/esp32c3/include/soc/reg_base.h b/components/soc/esp32c3/register/soc/reg_base.h similarity index 97% rename from components/soc/esp32c3/include/soc/reg_base.h rename to components/soc/esp32c3/register/soc/reg_base.h index 4ec808f0ab97..cf38bd9dbda9 100644 --- a/components/soc/esp32c3/include/soc/reg_base.h +++ b/components/soc/esp32c3/register/soc/reg_base.h @@ -46,5 +46,5 @@ #define DR_REG_USB_SERIAL_JTAG_BASE 0x60043000 #define DR_REG_XTS_AES_BASE 0x600CC000 -/* For backward compatability with the older register names */ +/* For backward compatibility with the older register names */ #define DR_REG_AES_XTS_BASE DR_REG_XTS_AES_BASE diff --git a/components/soc/esp32c3/include/soc/rmt_reg.h b/components/soc/esp32c3/register/soc/rmt_reg.h similarity index 99% rename from components/soc/esp32c3/include/soc/rmt_reg.h rename to components/soc/esp32c3/register/soc/rmt_reg.h index 106fc786495b..1ac39c2af352 100644 --- a/components/soc/esp32c3/include/soc/rmt_reg.h +++ b/components/soc/esp32c3/register/soc/rmt_reg.h @@ -5,7 +5,7 @@ */ #pragma once -#include "soc.h" +#include "soc/soc.h" #ifdef __cplusplus extern "C" { diff --git a/components/soc/esp32c3/include/soc/rmt_struct.h b/components/soc/esp32c3/register/soc/rmt_struct.h similarity index 100% rename from components/soc/esp32c3/include/soc/rmt_struct.h rename to components/soc/esp32c3/register/soc/rmt_struct.h diff --git a/components/soc/esp32c3/include/soc/rtc_cntl_reg.h b/components/soc/esp32c3/register/soc/rtc_cntl_reg.h similarity index 99% rename from components/soc/esp32c3/include/soc/rtc_cntl_reg.h rename to components/soc/esp32c3/register/soc/rtc_cntl_reg.h index 433ca196b3c7..e67f6ed93d8a 100644 --- a/components/soc/esp32c3/include/soc/rtc_cntl_reg.h +++ b/components/soc/esp32c3/register/soc/rtc_cntl_reg.h @@ -9,7 +9,7 @@ #ifdef __cplusplus extern "C" { #endif -#include "soc.h" +#include "soc/soc.h" #define RTC_CNTL_TIME0_REG RTC_CNTL_TIME_LOW0_REG #define RTC_CNTL_TIME1_REG RTC_CNTL_TIME_HIGH0_REG @@ -567,7 +567,7 @@ extern "C" { #define RTC_CNTL_BBPLL_CAL_INT_ENA_V 0x1 #define RTC_CNTL_BBPLL_CAL_INT_ENA_S 20 /* RTC_CNTL_GLITCH_DET_INT_ENA : R/W ;bitpos:[19] ;default: 1'b0 ; */ -/*description: enbale gitch det interrupt*/ +/*description: enable gitch det interrupt*/ #define RTC_CNTL_GLITCH_DET_INT_ENA (BIT(19)) #define RTC_CNTL_GLITCH_DET_INT_ENA_M (BIT(19)) #define RTC_CNTL_GLITCH_DET_INT_ENA_V 0x1 @@ -1712,7 +1712,7 @@ extern "C" { #define RTC_CNTL_SWD_AUTO_FEED_EN_V 0x1 #define RTC_CNTL_SWD_AUTO_FEED_EN_S 31 /* RTC_CNTL_SWD_DISABLE : R/W ;bitpos:[30] ;default: 1'b0 ; */ -/*description: disabel SWD*/ +/*description: disable SWD*/ #define RTC_CNTL_SWD_DISABLE (BIT(30)) #define RTC_CNTL_SWD_DISABLE_M (BIT(30)) #define RTC_CNTL_SWD_DISABLE_V 0x1 @@ -2138,7 +2138,7 @@ extern "C" { #define RTC_CNTL_XTAL32K_RESTART_WAIT_V 0xFFFF #define RTC_CNTL_XTAL32K_RESTART_WAIT_S 4 /* RTC_CNTL_XTAL32K_RETURN_WAIT : R/W ;bitpos:[3:0] ;default: 4'h0 ; */ -/*description: cycles to wait to return noral xtal 32k*/ +/*description: cycles to wait to return normal xtal 32k*/ #define RTC_CNTL_XTAL32K_RETURN_WAIT 0x0000000F #define RTC_CNTL_XTAL32K_RETURN_WAIT_M ((RTC_CNTL_XTAL32K_RETURN_WAIT_V)<<(RTC_CNTL_XTAL32K_RETURN_WAIT_S)) #define RTC_CNTL_XTAL32K_RETURN_WAIT_V 0xF @@ -2192,7 +2192,7 @@ extern "C" { #define RTC_CNTL_BBPLL_CAL_INT_ENA_W1TS_V 0x1 #define RTC_CNTL_BBPLL_CAL_INT_ENA_W1TS_S 20 /* RTC_CNTL_GLITCH_DET_INT_ENA_W1TS : WO ;bitpos:[19] ;default: 1'b0 ; */ -/*description: enbale gitch det interrupt*/ +/*description: enable gitch det interrupt*/ #define RTC_CNTL_GLITCH_DET_INT_ENA_W1TS (BIT(19)) #define RTC_CNTL_GLITCH_DET_INT_ENA_W1TS_M (BIT(19)) #define RTC_CNTL_GLITCH_DET_INT_ENA_W1TS_V 0x1 @@ -2248,7 +2248,7 @@ extern "C" { #define RTC_CNTL_BBPLL_CAL_INT_ENA_W1TC_V 0x1 #define RTC_CNTL_BBPLL_CAL_INT_ENA_W1TC_S 20 /* RTC_CNTL_GLITCH_DET_INT_ENA_W1TC : WO ;bitpos:[19] ;default: 1'b0 ; */ -/*description: enbale gitch det interrupt*/ +/*description: enable gitch det interrupt*/ #define RTC_CNTL_GLITCH_DET_INT_ENA_W1TC (BIT(19)) #define RTC_CNTL_GLITCH_DET_INT_ENA_W1TC_M (BIT(19)) #define RTC_CNTL_GLITCH_DET_INT_ENA_W1TC_V 0x1 diff --git a/components/soc/esp32c3/include/soc/rtc_cntl_struct.h b/components/soc/esp32c3/register/soc/rtc_cntl_struct.h similarity index 99% rename from components/soc/esp32c3/include/soc/rtc_cntl_struct.h rename to components/soc/esp32c3/register/soc/rtc_cntl_struct.h index 8b6bd3ad5090..5c57701f695c 100644 --- a/components/soc/esp32c3/include/soc/rtc_cntl_struct.h +++ b/components/soc/esp32c3/register/soc/rtc_cntl_struct.h @@ -195,7 +195,7 @@ typedef volatile struct rtc_cntl_dev_s { uint32_t rtc_swd: 1; /*enable super watch dog interrupt*/ uint32_t rtc_xtal32k_dead: 1; /*enable xtal32k_dead interrupt*/ uint32_t reserved17: 2; /*enable touch timeout interrupt*/ - uint32_t rtc_glitch_det: 1; /*enbale gitch det interrupt*/ + uint32_t rtc_glitch_det: 1; /*enable gitch det interrupt*/ uint32_t rtc_bbpll_cal: 1; uint32_t reserved21: 11; }; @@ -498,7 +498,7 @@ typedef volatile struct rtc_cntl_dev_s { uint32_t swd_signal_width:10; /*adjust signal width send to swd*/ uint32_t swd_rst_flag_clr: 1; /*reset swd reset flag*/ uint32_t swd_feed: 1; /*Sw feed swd*/ - uint32_t swd_disable: 1; /*disabel SWD*/ + uint32_t swd_disable: 1; /*disable SWD*/ uint32_t swd_auto_feed_en: 1; /*automatically feed swd when int comes*/ }; uint32_t val; @@ -591,7 +591,7 @@ typedef volatile struct rtc_cntl_dev_s { uint32_t xtal32k_clk_factor; /*xtal 32k watch dog backup clock factor*/ union { struct { - uint32_t xtal32k_return_wait: 4; /*cycles to wait to return noral xtal 32k*/ + uint32_t xtal32k_return_wait: 4; /*cycles to wait to return normal xtal 32k*/ uint32_t xtal32k_restart_wait:16; /*cycles to wait to repower on xtal 32k*/ uint32_t xtal32k_wdt_timeout: 8; /*If no clock detected for this amount of time*/ uint32_t xtal32k_stable_thres: 4; /*if restarted xtal32k period is smaller than this*/ @@ -647,7 +647,7 @@ typedef volatile struct rtc_cntl_dev_s { uint32_t rtc_swd_w1ts: 1; /*enable super watch dog interrupt*/ uint32_t rtc_xtal32k_dead_w1ts: 1; /*enable xtal32k_dead interrupt*/ uint32_t reserved17: 2; - uint32_t rtc_glitch_det_w1ts: 1; /*enbale gitch det interrupt*/ + uint32_t rtc_glitch_det_w1ts: 1; /*enable gitch det interrupt*/ uint32_t rtc_bbpll_cal_w1ts: 1; uint32_t reserved21: 11; }; @@ -666,7 +666,7 @@ typedef volatile struct rtc_cntl_dev_s { uint32_t rtc_swd_w1tc: 1; /*enable super watch dog interrupt*/ uint32_t rtc_xtal32k_dead_w1tc: 1; /*enable xtal32k_dead interrupt*/ uint32_t reserved17: 2; - uint32_t rtc_glitch_det_w1tc: 1; /*enbale gitch det interrupt*/ + uint32_t rtc_glitch_det_w1tc: 1; /*enable gitch det interrupt*/ uint32_t rtc_bbpll_cal_w1tc: 1; uint32_t reserved21: 11; }; diff --git a/components/soc/esp32c3/include/soc/rtc_i2c_reg.h b/components/soc/esp32c3/register/soc/rtc_i2c_reg.h similarity index 97% rename from components/soc/esp32c3/include/soc/rtc_i2c_reg.h rename to components/soc/esp32c3/register/soc/rtc_i2c_reg.h index 52bdefc0e56e..eba7d42df633 100644 --- a/components/soc/esp32c3/include/soc/rtc_i2c_reg.h +++ b/components/soc/esp32c3/register/soc/rtc_i2c_reg.h @@ -1,16 +1,8 @@ -// Copyright 2020 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2020-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #ifndef _SOC_RTC_I2C_REG_H_ #define _SOC_RTC_I2C_REG_H_ @@ -18,7 +10,7 @@ #ifdef __cplusplus extern "C" { #endif -#include "soc.h" +#include "soc/soc.h" #define RTC_I2C_SCL_LOW_PERIOD_REG (DR_REG_RTC_I2C_BASE + 0x0000) /* RTC_I2C_SCL_LOW_PERIOD : R/W ;bitpos:[19:0] ;default: 20'h100 ; */ /*description: time period that scl = 0*/ diff --git a/components/soc/esp32c3/include/soc/rtc_i2c_struct.h b/components/soc/esp32c3/register/soc/rtc_i2c_struct.h similarity index 100% rename from components/soc/esp32c3/include/soc/rtc_i2c_struct.h rename to components/soc/esp32c3/register/soc/rtc_i2c_struct.h diff --git a/components/soc/esp32c3/include/soc/sensitive_reg.h b/components/soc/esp32c3/register/soc/sensitive_reg.h similarity index 99% rename from components/soc/esp32c3/include/soc/sensitive_reg.h rename to components/soc/esp32c3/register/soc/sensitive_reg.h index e1ce7d93ef7e..18fcf2e8db96 100644 --- a/components/soc/esp32c3/include/soc/sensitive_reg.h +++ b/components/soc/esp32c3/register/soc/sensitive_reg.h @@ -1,16 +1,8 @@ -// Copyright 2020 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2020-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #ifndef _SOC_SENSITIVE_REG_H_ #define _SOC_SENSITIVE_REG_H_ @@ -18,7 +10,7 @@ #ifdef __cplusplus extern "C" { #endif -#include "soc.h" +#include "soc/soc.h" #define SENSITIVE_ROM_TABLE_LOCK_REG (DR_REG_SENSITIVE_BASE + 0x000) /* SENSITIVE_ROM_TABLE_LOCK : R/W ;bitpos:[0] ;default: 1'b0 ; */ /*description: */ diff --git a/components/soc/esp32c3/include/soc/sensitive_struct.h b/components/soc/esp32c3/register/soc/sensitive_struct.h similarity index 99% rename from components/soc/esp32c3/include/soc/sensitive_struct.h rename to components/soc/esp32c3/register/soc/sensitive_struct.h index ba860e45cd74..d71d81fc4dcb 100644 --- a/components/soc/esp32c3/include/soc/sensitive_struct.h +++ b/components/soc/esp32c3/register/soc/sensitive_struct.h @@ -1,16 +1,8 @@ -// Copyright 2020 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2020-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #ifndef _SOC_SENSITIVE_STRUCT_H_ #define _SOC_SENSITIVE_STRUCT_H_ @@ -18,7 +10,7 @@ #ifdef __cplusplus extern "C" { #endif -#include "soc.h" +#include "soc/soc.h" typedef volatile struct sensitive_dev_s { union { diff --git a/components/soc/esp32c3/include/soc/spi_mem_reg.h b/components/soc/esp32c3/register/soc/spi_mem_reg.h similarity index 98% rename from components/soc/esp32c3/include/soc/spi_mem_reg.h rename to components/soc/esp32c3/register/soc/spi_mem_reg.h index fcf3e292481f..22d6b26377e7 100644 --- a/components/soc/esp32c3/include/soc/spi_mem_reg.h +++ b/components/soc/esp32c3/register/soc/spi_mem_reg.h @@ -1,16 +1,8 @@ -// Copyright 2020 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2020-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #ifndef _SOC_SPI_MEM_REG_H_ #define _SOC_SPI_MEM_REG_H_ @@ -18,7 +10,7 @@ #ifdef __cplusplus extern "C" { #endif -#include "soc.h" +#include "soc/soc.h" #define SPI_MEM_CMD_REG(i) (REG_SPI_MEM_BASE(i) + 0x000) /* SPI_MEM_FLASH_READ : R/W/SC ;bitpos:[31] ;default: 1'b0 ; */ /*description: Read flash enable. Read flash operation will be triggered when @@ -270,7 +262,7 @@ extern "C" { #define SPI_MEM_CS_HOLD_DLY_RES_S 2 /* SPI_MEM_CLK_MODE : R/W ;bitpos:[1:0] ;default: 2'h0 ; */ /*description: SPI clock mode bits. 0: SPI clock is off when CS inactive 1: - SPI clock is delayed one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3: SPI clock is alwasy on.*/ + SPI clock is delayed one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3: SPI clock is always on.*/ #define SPI_MEM_CLK_MODE 0x00000003 #define SPI_MEM_CLK_MODE_M ((SPI_MEM_CLK_MODE_V)<<(SPI_MEM_CLK_MODE_S)) #define SPI_MEM_CLK_MODE_V 0x3 diff --git a/components/soc/esp32c3/include/soc/spi_mem_struct.h b/components/soc/esp32c3/register/soc/spi_mem_struct.h similarity index 99% rename from components/soc/esp32c3/include/soc/spi_mem_struct.h rename to components/soc/esp32c3/register/soc/spi_mem_struct.h index d816a9a290ad..95a0aae1ecf0 100644 --- a/components/soc/esp32c3/include/soc/spi_mem_struct.h +++ b/components/soc/esp32c3/register/soc/spi_mem_struct.h @@ -63,7 +63,7 @@ typedef volatile struct spi_mem_dev_s { } ctrl; union { struct { - uint32_t clk_mode: 2; /*SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delayed one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3: SPI clock is alwasy on.*/ + uint32_t clk_mode: 2; /*SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delayed one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3: SPI clock is always on.*/ uint32_t cs_hold_dly_res: 10; /*After RES/DP/HPM command is sent SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 512) SPI_CLK cycles.*/ uint32_t reserved2: 18; /*reserved*/ uint32_t rxfifo_rst: 1; /*SPI0 RX FIFO reset signal.*/ diff --git a/components/soc/esp32c3/include/soc/spi_reg.h b/components/soc/esp32c3/register/soc/spi_reg.h similarity index 99% rename from components/soc/esp32c3/include/soc/spi_reg.h rename to components/soc/esp32c3/register/soc/spi_reg.h index 361f58ba5c55..e8e9fec283f2 100644 --- a/components/soc/esp32c3/include/soc/spi_reg.h +++ b/components/soc/esp32c3/register/soc/spi_reg.h @@ -6,7 +6,7 @@ #ifndef _SOC_SPI_REG_H_ #define _SOC_SPI_REG_H_ -#include "soc.h" +#include "soc/soc.h" #ifdef __cplusplus extern "C" { @@ -138,7 +138,7 @@ be configured in CONF state..*/ #define SPI_CLOCK_REG(i) (REG_SPI_BASE(i) + 0xC) /* SPI_CLK_EQU_SYSCLK : R/W ;bitpos:[31] ;default: 1'b1 ; */ -/*description: In the master mode 1: spi_clk is eqaul to system 0: spi_clk is divided from syst +/*description: In the master mode 1: spi_clk is equal to system 0: spi_clk is divided from syst em clock. Can be configured in CONF state..*/ #define SPI_CLK_EQU_SYSCLK (BIT(31)) #define SPI_CLK_EQU_SYSCLK_M (BIT(31)) @@ -175,15 +175,15 @@ e 0. Can be configured in CONF state..*/ #define SPI_USER_REG(i) (REG_SPI_BASE(i) + 0x10) /* SPI_USR_COMMAND : R/W ;bitpos:[31] ;default: 1'b1 ; */ -/*description: This bit enable the command phase of an operation. Can be configured in CONF sta -te..*/ +/*description: This bit enable the command phase of an operation. Can be configured in CONF +state..*/ #define SPI_USR_COMMAND (BIT(31)) #define SPI_USR_COMMAND_M (BIT(31)) #define SPI_USR_COMMAND_V 0x1 #define SPI_USR_COMMAND_S 31 /* SPI_USR_ADDR : R/W ;bitpos:[30] ;default: 1'b0 ; */ -/*description: This bit enable the address phase of an operation. Can be configured in CONF sta -te..*/ +/*description: This bit enable the address phase of an operation. Can be configured in CONF +state..*/ #define SPI_USR_ADDR (BIT(30)) #define SPI_USR_ADDR_M (BIT(30)) #define SPI_USR_ADDR_V 0x1 @@ -357,7 +357,7 @@ n be configured in CONF state..*/ #define SPI_USR_COMMAND_BITLEN_S 28 /* SPI_MST_REMPTY_ERR_END_EN : R/W ;bitpos:[27] ;default: 1'b1 ; */ /*description: 1: SPI transfer is ended when SPI TX AFIFO read empty error is valid in GP-SPI m -aster FD/HD-mode. 0: SPI transfer is not ended when SPI TX AFIFO read empty erro +aster FD/HD-mode. 0: SPI transfer is not ended when SPI TX AFIFO read empty error r is valid in GP-SPI master FD/HD-mode..*/ #define SPI_MST_REMPTY_ERR_END_EN (BIT(27)) #define SPI_MST_REMPTY_ERR_END_EN_M (BIT(27)) @@ -927,7 +927,7 @@ AFIFO read-empty error when SPI outputs data in master mode. 0: Others..*/ #define SPI_SLV_CMD_ERR_INT_RAW_V 0x1 #define SPI_SLV_CMD_ERR_INT_RAW_S 16 /* SPI_SLV_BUF_ADDR_ERR_INT_RAW : R/W/WTC/SS ;bitpos:[15] ;default: 1'b0 ; */ -/*description: The raw bit for SPI_SLV_BUF_ADDR_ERR_INT interrupt. 1: The accessing data addres +/*description: The raw bit for SPI_SLV_BUF_ADDR_ERR_INT interrupt. 1: The accessing data address s of the current SPI slave mode CPU controlled FD, Wr_BUF or Rd_BUF transmission is bigger than 63. 0: Others..*/ #define SPI_SLV_BUF_ADDR_ERR_INT_RAW (BIT(15)) @@ -1370,7 +1370,7 @@ dge 0: output data at tsck posedge .*/ /* SPI_CLK_MODE : R/W ;bitpos:[1:0] ;default: 2'b0 ; */ /*description: SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delaye d one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inacti -ve 3: SPI clock is alwasy on. Can be configured in CONF state..*/ +ve 3: SPI clock is always on. Can be configured in CONF state..*/ #define SPI_CLK_MODE 0x00000003 #define SPI_CLK_MODE_M ((SPI_CLK_MODE_V)<<(SPI_CLK_MODE_S)) #define SPI_CLK_MODE_V 0x3 diff --git a/components/soc/esp32c3/include/soc/spi_struct.h b/components/soc/esp32c3/register/soc/spi_struct.h similarity index 99% rename from components/soc/esp32c3/include/soc/spi_struct.h rename to components/soc/esp32c3/register/soc/spi_struct.h index 8cb6a7ee97ab..88d7476caf98 100644 --- a/components/soc/esp32c3/include/soc/spi_struct.h +++ b/components/soc/esp32c3/register/soc/spi_struct.h @@ -55,7 +55,7 @@ typedef volatile struct spi_dev_s { uint32_t clkcnt_n : 6; /*In the master mode it is the divider of spi_clk. So spi_clk frequency is system/(spi_clkdiv_pre+1)/(spi_clkcnt_N+1). Can be configured in CONF state.*/ uint32_t clkdiv_pre : 4; /*In the master mode it is pre-divider of spi_clk. Can be configured in CONF state.*/ uint32_t reserved22 : 9; /*reserved*/ - uint32_t clk_equ_sysclk : 1; /*In the master mode 1: spi_clk is eqaul to system 0: spi_clk is divided from system clock. Can be configured in CONF state.*/ + uint32_t clk_equ_sysclk : 1; /*In the master mode 1: spi_clk is equal to system 0: spi_clk is divided from system clock. Can be configured in CONF state.*/ }; uint32_t val; } clock; @@ -317,7 +317,7 @@ typedef volatile struct spi_dev_s { uint32_t reserved_dc; union { struct { - uint32_t clk_mode : 2; /*SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delayed one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3: SPI clock is alwasy on. Can be configured in CONF state.*/ + uint32_t clk_mode : 2; /*SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delayed one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3: SPI clock is always on. Can be configured in CONF state.*/ uint32_t clk_mode_13 : 1; /*{CPOL, CPHA},1: support spi clk mode 1 and 3, first edge output data B[0]/B[7]. 0: support spi clk mode 0 and 2, first edge output data B[1]/B[6].*/ uint32_t rsck_data_out : 1; /*It saves half a cycle when tsck is the same as rsck. 1: output data at rsck posedge 0: output data at tsck posedge */ uint32_t reserved4 : 4; /*reserved*/ diff --git a/components/soc/esp32c3/include/soc/syscon_reg.h b/components/soc/esp32c3/register/soc/syscon_reg.h similarity index 99% rename from components/soc/esp32c3/include/soc/syscon_reg.h rename to components/soc/esp32c3/register/soc/syscon_reg.h index e61f84eda350..1aff9a57484d 100644 --- a/components/soc/esp32c3/include/soc/syscon_reg.h +++ b/components/soc/esp32c3/register/soc/syscon_reg.h @@ -10,7 +10,7 @@ #ifdef __cplusplus extern "C" { #endif -#include "soc.h" +#include "soc/soc.h" #define SYSCON_SYSCLK_CONF_REG (DR_REG_SYSCON_BASE + 0x000) /* SYSCON_RST_TICK_CNT : R/W ;bitpos:[12] ;default: 1'b0 ; */ /*description: */ @@ -206,7 +206,7 @@ extern "C" { #define SYSTEM_MACPWR_RST BIT(8) #define SYSTEM_RW_BTMAC_RST BIT(9) /* Bluetooth MAC */ #define SYSTEM_RW_BTLP_RST BIT(10) /* Bluetooth Low Power Module */ -#define SYSTEM_RW_BTMAC_REG_RST BIT(11) /* Bluetooth MAC Regsiters */ +#define SYSTEM_RW_BTMAC_REG_RST BIT(11) /* Bluetooth MAC Registers */ #define SYSTEM_RW_BTLP_REG_RST BIT(12) /* Bluetooth Low Power Registers */ #define SYSTEM_BTBB_REG_RST BIT(13) /* Bluetooth Baseband Registers */ diff --git a/components/soc/esp32c3/include/soc/syscon_struct.h b/components/soc/esp32c3/register/soc/syscon_struct.h similarity index 100% rename from components/soc/esp32c3/include/soc/syscon_struct.h rename to components/soc/esp32c3/register/soc/syscon_struct.h diff --git a/components/soc/esp32c3/include/soc/system_reg.h b/components/soc/esp32c3/register/soc/system_reg.h similarity index 99% rename from components/soc/esp32c3/include/soc/system_reg.h rename to components/soc/esp32c3/register/soc/system_reg.h index 7bcb904214df..7302066bbc85 100644 --- a/components/soc/esp32c3/include/soc/system_reg.h +++ b/components/soc/esp32c3/register/soc/system_reg.h @@ -10,7 +10,7 @@ #ifdef __cplusplus extern "C" { #endif -#include "soc.h" +#include "soc/soc.h" #define SYSTEM_CPU_PERI_CLK_EN_REG (DR_REG_SYSTEM_BASE + 0x000) /* SYSTEM_CLK_EN_DEDICATED_GPIO : R/W ;bitpos:[7] ;default: 1'b0 ; */ /*description: */ diff --git a/components/soc/esp32c3/include/soc/system_struct.h b/components/soc/esp32c3/register/soc/system_struct.h similarity index 99% rename from components/soc/esp32c3/include/soc/system_struct.h rename to components/soc/esp32c3/register/soc/system_struct.h index f4cb995aa224..bc2c1b3a2403 100644 --- a/components/soc/esp32c3/include/soc/system_struct.h +++ b/components/soc/esp32c3/register/soc/system_struct.h @@ -10,7 +10,7 @@ #ifdef __cplusplus extern "C" { #endif -#include "soc.h" +#include "soc/soc.h" typedef volatile struct system_dev_s { union { diff --git a/components/soc/esp32c3/include/soc/systimer_reg.h b/components/soc/esp32c3/register/soc/systimer_reg.h similarity index 97% rename from components/soc/esp32c3/include/soc/systimer_reg.h rename to components/soc/esp32c3/register/soc/systimer_reg.h index 4e9f64fffa8d..55316915df15 100644 --- a/components/soc/esp32c3/include/soc/systimer_reg.h +++ b/components/soc/esp32c3/register/soc/systimer_reg.h @@ -1,16 +1,7 @@ -/** Copyright 2021 Espressif Systems (Shanghai) PTE LTD +/* + * SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/components/soc/esp32c3/include/soc/systimer_struct.h b/components/soc/esp32c3/register/soc/systimer_struct.h similarity index 94% rename from components/soc/esp32c3/include/soc/systimer_struct.h rename to components/soc/esp32c3/register/soc/systimer_struct.h index 47e7b7d30c28..cf10afab1c34 100644 --- a/components/soc/esp32c3/include/soc/systimer_struct.h +++ b/components/soc/esp32c3/register/soc/systimer_struct.h @@ -1,16 +1,7 @@ -/** Copyright 2021 Espressif Systems (Shanghai) PTE LTD +/* + * SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/components/soc/esp32c3/include/soc/timer_group_reg.h b/components/soc/esp32c3/register/soc/timer_group_reg.h similarity index 100% rename from components/soc/esp32c3/include/soc/timer_group_reg.h rename to components/soc/esp32c3/register/soc/timer_group_reg.h diff --git a/components/soc/esp32c3/include/soc/timer_group_struct.h b/components/soc/esp32c3/register/soc/timer_group_struct.h similarity index 100% rename from components/soc/esp32c3/include/soc/timer_group_struct.h rename to components/soc/esp32c3/register/soc/timer_group_struct.h diff --git a/components/soc/esp32c3/include/soc/twai_struct.h b/components/soc/esp32c3/register/soc/twai_struct.h similarity index 100% rename from components/soc/esp32c3/include/soc/twai_struct.h rename to components/soc/esp32c3/register/soc/twai_struct.h diff --git a/components/soc/esp32c3/include/soc/uart_reg.h b/components/soc/esp32c3/register/soc/uart_reg.h similarity index 98% rename from components/soc/esp32c3/include/soc/uart_reg.h rename to components/soc/esp32c3/register/soc/uart_reg.h index a0d6c72735bd..c26bab99382f 100644 --- a/components/soc/esp32c3/include/soc/uart_reg.h +++ b/components/soc/esp32c3/register/soc/uart_reg.h @@ -1,16 +1,8 @@ -// Copyright 2020 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2020-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #ifndef _SOC_UART_REG_H_ #define _SOC_UART_REG_H_ @@ -18,7 +10,7 @@ #ifdef __cplusplus extern "C" { #endif -#include "soc.h" +#include "soc/soc.h" #define UART_FIFO_REG(i) (REG_UART_BASE(i) + 0x0) /* UART_RXFIFO_RD_BYTE : RO ;bitpos:[7:0] ;default: 8'b0 ; */ /*description: UART $n accesses FIFO via this register.*/ @@ -99,7 +91,7 @@ extern "C" { #define UART_SW_XOFF_INT_RAW_V 0x1 #define UART_SW_XOFF_INT_RAW_S 10 /* UART_SW_XON_INT_RAW : R/WTC/SS ;bitpos:[9] ;default: 1'b0 ; */ -/*description: This interrupt raw bit turns to high level when receiver recevies +/*description: This interrupt raw bit turns to high level when receiver receives Xon char when uart_sw_flow_con_en is set to 1.*/ #define UART_SW_XON_INT_RAW (BIT(9)) #define UART_SW_XON_INT_RAW_M (BIT(9)) @@ -212,7 +204,7 @@ extern "C" { #define UART_TX_DONE_INT_ST_V 0x1 #define UART_TX_DONE_INT_ST_S 14 /* UART_TX_BRK_IDLE_DONE_INT_ST : RO ;bitpos:[13] ;default: 1'b0 ; */ -/*description: This is the stauts bit for tx_brk_idle_done_int_raw when tx_brk_idle_done_int_ena +/*description: This is the status bit for tx_brk_idle_done_int_raw when tx_brk_idle_done_int_ena is set to 1.*/ #define UART_TX_BRK_IDLE_DONE_INT_ST (BIT(13)) #define UART_TX_BRK_IDLE_DONE_INT_ST_M (BIT(13)) @@ -751,7 +743,7 @@ extern "C" { #define UART_IRDA_DPLX_V 0x1 #define UART_IRDA_DPLX_S 9 /* UART_TXD_BRK : R/W ;bitpos:[8] ;default: 1'b0 ; */ -/*description: Set this bit to enbale transmitter to send NULL when the process +/*description: Set this bit to enable transmitter to send NULL when the process of sending data is done.*/ #define UART_TXD_BRK (BIT(8)) #define UART_TXD_BRK_M (BIT(8)) @@ -798,7 +790,7 @@ extern "C" { #define UART_CONF1_REG(i) (REG_UART_BASE(i) + 0x24) /* UART_RX_TOUT_EN : R/W ;bitpos:[21] ;default: 1'b0 ; */ -/*description: This is the enble bit for uart receiver's timeout function.*/ +/*description: This is the enable bit for uart receiver's timeout function.*/ #define UART_RX_TOUT_EN (BIT(21)) #define UART_RX_TOUT_EN_M (BIT(21)) #define UART_RX_TOUT_EN_V 0x1 @@ -847,7 +839,7 @@ extern "C" { #define UART_HIGHPULSE_REG(i) (REG_UART_BASE(i) + 0x2C) /* UART_HIGHPULSE_MIN_CNT : RO ;bitpos:[11:0] ;default: 12'hFFF ; */ -/*description: This register stores the value of the maxinum duration time +/*description: This register stores the value of the maximum duration time for the high level pulse. It is used in baud rate-detect process.*/ #define UART_HIGHPULSE_MIN_CNT 0x00000FFF #define UART_HIGHPULSE_MIN_CNT_M ((UART_HIGHPULSE_MIN_CNT_V)<<(UART_HIGHPULSE_MIN_CNT_S)) diff --git a/components/soc/esp32c3/include/soc/uart_struct.h b/components/soc/esp32c3/register/soc/uart_struct.h similarity index 98% rename from components/soc/esp32c3/include/soc/uart_struct.h rename to components/soc/esp32c3/register/soc/uart_struct.h index b14191f3ff0a..8c76d475fb2c 100644 --- a/components/soc/esp32c3/include/soc/uart_struct.h +++ b/components/soc/esp32c3/register/soc/uart_struct.h @@ -28,7 +28,7 @@ typedef volatile struct uart_dev_s { uint32_t cts_chg: 1; /*This interrupt raw bit turns to high level when receiver detects the edge change of CTSn signal.*/ uint32_t brk_det: 1; /*This interrupt raw bit turns to high level when receiver detects a 0 after the stop bit.*/ uint32_t rxfifo_tout: 1; /*This interrupt raw bit turns to high level when receiver takes more time than rx_tout_thrhd to receive a byte.*/ - uint32_t sw_xon: 1; /*This interrupt raw bit turns to high level when receiver recevies Xon char when uart_sw_flow_con_en is set to 1.*/ + uint32_t sw_xon: 1; /*This interrupt raw bit turns to high level when receiver receives Xon char when uart_sw_flow_con_en is set to 1.*/ uint32_t sw_xoff: 1; /*This interrupt raw bit turns to high level when receiver receives Xoff char when uart_sw_flow_con_en is set to 1.*/ uint32_t glitch_det: 1; /*This interrupt raw bit turns to high level when receiver detects a glitch in the middle of a start bit.*/ uint32_t tx_brk_done: 1; /*This interrupt raw bit turns to high level when transmitter completes sending NULL characters after all data in Tx-FIFO are sent.*/ @@ -58,7 +58,7 @@ typedef volatile struct uart_dev_s { uint32_t sw_xoff: 1; /*This is the status bit for sw_xoff_int_raw when sw_xoff_int_ena is set to 1.*/ uint32_t glitch_det: 1; /*This is the status bit for glitch_det_int_raw when glitch_det_int_ena is set to 1.*/ uint32_t tx_brk_done: 1; /*This is the status bit for tx_brk_done_int_raw when tx_brk_done_int_ena is set to 1.*/ - uint32_t tx_brk_idle_done: 1; /*This is the stauts bit for tx_brk_idle_done_int_raw when tx_brk_idle_done_int_ena is set to 1.*/ + uint32_t tx_brk_idle_done: 1; /*This is the status bit for tx_brk_idle_done_int_raw when tx_brk_idle_done_int_ena is set to 1.*/ uint32_t tx_done: 1; /*This is the status bit for tx_done_int_raw when tx_done_int_ena is set to 1.*/ uint32_t rs485_parity_err: 1; /*This is the status bit for rs485_parity_err_int_raw when rs485_parity_int_ena is set to 1.*/ uint32_t rs485_frm_err: 1; /*This is the status bit for rs485_frm_err_int_raw when rs485_fm_err_int_ena is set to 1.*/ @@ -161,7 +161,7 @@ typedef volatile struct uart_dev_s { uint32_t stop_bit_num: 2; /*This register is used to set the length of stop bit.*/ uint32_t sw_rts: 1; /*This register is used to configure the software rts signal which is used in software flow control.*/ uint32_t sw_dtr: 1; /*This register is used to configure the software dtr signal which is used in software flow control.*/ - uint32_t txd_brk: 1; /*Set this bit to enbale transmitter to send NULL when the process of sending data is done.*/ + uint32_t txd_brk: 1; /*Set this bit to enable transmitter to send NULL when the process of sending data is done.*/ uint32_t irda_dplx: 1; /*Set this bit to enable IrDA loopback mode.*/ uint32_t irda_tx_en: 1; /*This is the start enable bit for IrDA transmitter.*/ uint32_t irda_wctl: 1; /*1'h1: The IrDA transmitter's 11th bit is the same as 10th bit. 1'h0: Set IrDA transmitter's 11th bit to 0.*/ @@ -193,7 +193,7 @@ typedef volatile struct uart_dev_s { uint32_t dis_rx_dat_ovf: 1; /*Disable UART Rx data overflow detect.*/ uint32_t rx_tout_flow_dis: 1; /*Set this bit to stop accumulating idle_cnt when hardware flow control works.*/ uint32_t rx_flow_en: 1; /*This is the flow enable bit for UART receiver.*/ - uint32_t rx_tout_en: 1; /*This is the enble bit for uart receiver's timeout function.*/ + uint32_t rx_tout_en: 1; /*This is the enable bit for uart receiver's timeout function.*/ uint32_t reserved22: 10; }; uint32_t val; @@ -207,7 +207,7 @@ typedef volatile struct uart_dev_s { } lowpulse; union { struct { - uint32_t min_cnt: 12; /*This register stores the value of the maxinum duration time for the high level pulse. It is used in baud rate-detect process.*/ + uint32_t min_cnt: 12; /*This register stores the value of the maximum duration time for the high level pulse. It is used in baud rate-detect process.*/ uint32_t reserved12: 20; /*Reserved*/ }; uint32_t val; diff --git a/components/soc/esp32c3/include/soc/uhci_reg.h b/components/soc/esp32c3/register/soc/uhci_reg.h similarity index 97% rename from components/soc/esp32c3/include/soc/uhci_reg.h rename to components/soc/esp32c3/register/soc/uhci_reg.h index 3a41dedb8008..f387de7963ac 100644 --- a/components/soc/esp32c3/include/soc/uhci_reg.h +++ b/components/soc/esp32c3/register/soc/uhci_reg.h @@ -1,16 +1,8 @@ -// Copyright 2020 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2020-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #ifndef _SOC_UHCI_REG_H_ #define _SOC_UHCI_REG_H_ @@ -18,7 +10,7 @@ #ifdef __cplusplus extern "C" { #endif -#include "soc.h" +#include "soc/soc.h" #define UHCI_CONF0_REG(i) (REG_UHCI_BASE(i) + 0x0) /* UHCI_UART_RX_BRK_EOF_EN : R/W ;bitpos:[12] ;default: 1'b0 ; */ /*description: If this bit is set to 1 UHCI will end payload receive process diff --git a/components/soc/esp32c3/include/soc/uhci_struct.h b/components/soc/esp32c3/register/soc/uhci_struct.h similarity index 100% rename from components/soc/esp32c3/include/soc/uhci_struct.h rename to components/soc/esp32c3/register/soc/uhci_struct.h diff --git a/components/soc/esp32c3/include/soc/usb_serial_jtag_reg.h b/components/soc/esp32c3/register/soc/usb_serial_jtag_reg.h similarity index 99% rename from components/soc/esp32c3/include/soc/usb_serial_jtag_reg.h rename to components/soc/esp32c3/register/soc/usb_serial_jtag_reg.h index f4cf387fe6c7..6d908baec1b9 100644 --- a/components/soc/esp32c3/include/soc/usb_serial_jtag_reg.h +++ b/components/soc/esp32c3/register/soc/usb_serial_jtag_reg.h @@ -1,9 +1,9 @@ - -/** Copyright 2021 Espressif Systems (Shanghai) Co. Ltd. - * SPDX-License-Identifier: Apache-2.0 +/* + * SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 */ - #pragma once #include @@ -155,7 +155,7 @@ extern "C" { #define USB_SERIAL_JTAG_TEST_ENABLE_V 0x00000001 #define USB_SERIAL_JTAG_TEST_ENABLE_S 0 /* USB_SERIAL_JTAG_TEST_USB_OE : R/W; bitpos: [1]; default: 0; - * USB pad oen in + * USB pad one in * test */ #define USB_SERIAL_JTAG_TEST_USB_OE (BIT(1)) diff --git a/components/soc/esp32c3/include/soc/usb_serial_jtag_struct.h b/components/soc/esp32c3/register/soc/usb_serial_jtag_struct.h similarity index 96% rename from components/soc/esp32c3/include/soc/usb_serial_jtag_struct.h rename to components/soc/esp32c3/register/soc/usb_serial_jtag_struct.h index c1cfced04bbf..98b15060a425 100644 --- a/components/soc/esp32c3/include/soc/usb_serial_jtag_struct.h +++ b/components/soc/esp32c3/register/soc/usb_serial_jtag_struct.h @@ -1,16 +1,8 @@ -// Copyright 2021 Espressif Systems (Shanghai) Co. Ltd. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #ifndef _SOC_USB_SERIAL_JTAG_STRUCT_H_ #define _SOC_USB_SERIAL_JTAG_STRUCT_H_ @@ -18,7 +10,7 @@ #ifdef __cplusplus extern "C" { #endif -#include "soc.h" +#include "soc/soc.h" typedef volatile struct usb_serial_jtag_dev_s { union { diff --git a/components/soc/esp32c3/include/soc/xts_aes_reg.h b/components/soc/esp32c3/register/soc/xts_aes_reg.h similarity index 98% rename from components/soc/esp32c3/include/soc/xts_aes_reg.h rename to components/soc/esp32c3/register/soc/xts_aes_reg.h index 9845d0b05829..6a6e64539c5a 100644 --- a/components/soc/esp32c3/include/soc/xts_aes_reg.h +++ b/components/soc/esp32c3/register/soc/xts_aes_reg.h @@ -119,7 +119,7 @@ extern "C" { #define XTS_AES_DATE_V 0x3FFFFFFFU #define XTS_AES_DATE_S 0 -/* For backward compatability with the older register names */ +/* For backward compatibility with the older register names */ #define AES_XTS_PLAIN_BASE XTS_AES_PLAIN_MEM #define AES_XTS_SIZE_REG XTS_AES_LINESIZE_REG #define AES_XTS_DESTINATION_REG XTS_AES_DESTINATION_REG diff --git a/tools/ci/check_copyright_ignore.txt b/tools/ci/check_copyright_ignore.txt index f605b7cd0543..51fb864c98c4 100644 --- a/tools/ci/check_copyright_ignore.txt +++ b/tools/ci/check_copyright_ignore.txt @@ -524,32 +524,6 @@ components/soc/esp32/include/soc/touch_sensor_channel.h components/soc/esp32/include/soc/uart_pins.h components/soc/esp32/include/soc/wdev_reg.h components/soc/esp32/ledc_periph.c -components/soc/esp32c3/include/soc/apb_saradc_reg.h -components/soc/esp32c3/include/soc/assist_debug_reg.h -components/soc/esp32c3/include/soc/bb_reg.h -components/soc/esp32c3/include/soc/boot_mode.h -components/soc/esp32c3/include/soc/extmem_reg.h -components/soc/esp32c3/include/soc/fe_reg.h -components/soc/esp32c3/include/soc/gpio_reg.h -components/soc/esp32c3/include/soc/gpio_struct.h -components/soc/esp32c3/include/soc/i2c_reg.h -components/soc/esp32c3/include/soc/interrupt_core0_reg.h -components/soc/esp32c3/include/soc/ledc_reg.h -components/soc/esp32c3/include/soc/nrx_reg.h -components/soc/esp32c3/include/soc/reset_reasons.h -components/soc/esp32c3/include/soc/rtc_i2c_reg.h -components/soc/esp32c3/include/soc/sensitive_reg.h -components/soc/esp32c3/include/soc/sensitive_struct.h -components/soc/esp32c3/include/soc/soc_pins.h -components/soc/esp32c3/include/soc/spi_mem_reg.h -components/soc/esp32c3/include/soc/systimer_reg.h -components/soc/esp32c3/include/soc/systimer_struct.h -components/soc/esp32c3/include/soc/uart_pins.h -components/soc/esp32c3/include/soc/uart_reg.h -components/soc/esp32c3/include/soc/uhci_reg.h -components/soc/esp32c3/include/soc/usb_serial_jtag_reg.h -components/soc/esp32c3/include/soc/usb_serial_jtag_struct.h -components/soc/esp32c3/include/soc/wdev_reg.h components/soc/esp32c3/interrupts.c components/soc/esp32c3/ledc_periph.c components/soc/esp32s2/adc_periph.c From c3e0dd610a889b22575adc0f5ed385771aed114a Mon Sep 17 00:00:00 2001 From: laokaiyao Date: Wed, 25 Sep 2024 14:33:50 +0800 Subject: [PATCH 144/365] refactor(soc): sort esp32s3 soc headers --- .../soc/esp32s3/include/soc/dport_reg.h | 13 +-- components/soc/esp32s3/include/soc/soc.h | 2 +- .../soc/esp32s3/include/soc/usb_dwc_struct.h | 2 +- components/soc/esp32s3/register/soc/.gitkeep | 0 .../{include => register}/soc/apb_ctrl_reg.h | 2 +- .../soc/apb_ctrl_struct.h | 0 .../soc/apb_saradc_reg.h | 20 +--- .../soc/apb_saradc_struct.h | 0 .../soc/assist_debug_reg.h | 20 +--- .../soc/assist_debug_struct.h | 18 +-- .../{include => register}/soc/efuse_reg.h | 6 +- .../{include => register}/soc/efuse_struct.h | 4 +- .../{include => register}/soc/extmem_reg.h | 58 ++++------ .../{include => register}/soc/extmem_struct.h | 18 +-- .../{include => register}/soc/gdma_reg.h | 2 +- .../{include => register}/soc/gdma_struct.h | 0 .../{include => register}/soc/gpio_reg.h | 22 ++-- .../{include => register}/soc/gpio_sd_reg.h | 2 +- .../soc/gpio_sd_struct.h | 0 .../{include => register}/soc/gpio_struct.h | 0 .../{include => register}/soc/hinf_reg.h | 20 +--- .../{include => register}/soc/hinf_struct.h | 18 +-- .../{include => register}/soc/host_reg.h | 20 +--- .../{include => register}/soc/host_struct.h | 20 +--- .../{include => register}/soc/i2c_reg.h | 15 +-- .../{include => register}/soc/i2c_struct.h | 15 +-- .../{include => register}/soc/i2s_reg.h | 34 +++--- .../{include => register}/soc/i2s_struct.h | 2 +- .../soc/interrupt_core0_reg.h | 20 +--- .../soc/interrupt_core0_struct.h | 18 +-- .../soc/interrupt_core1_reg.h | 20 +--- .../soc/interrupt_core1_struct.h | 18 +-- .../{include => register}/soc/io_mux_reg.h | 2 +- .../{include => register}/soc/lcd_cam_reg.h | 0 .../soc/lcd_cam_struct.h | 0 .../{include => register}/soc/ledc_reg.h | 22 ++-- .../{include => register}/soc/ledc_struct.h | 18 +-- .../{include => register}/soc/mcpwm_reg.h | 14 +-- .../{include => register}/soc/mcpwm_struct.h | 4 +- .../{include => register}/soc/pcnt_reg.h | 0 .../{include => register}/soc/pcnt_struct.h | 0 .../soc/peri_backup_reg.h | 20 +--- .../soc/peri_backup_struct.h | 18 +-- .../{include => register}/soc/reg_base.h | 0 .../{include => register}/soc/rmt_reg.h | 0 .../{include => register}/soc/rmt_struct.h | 0 .../{include => register}/soc/rtc_cntl_reg.h | 2 +- .../soc/rtc_cntl_struct.h | 10 +- .../{include => register}/soc/rtc_i2c_reg.h | 15 +-- .../soc/rtc_i2c_struct.h | 15 +-- .../{include => register}/soc/rtc_io_reg.h | 108 ++++++++---------- .../{include => register}/soc/rtc_io_struct.h | 18 +-- .../{include => register}/soc/sdmmc_reg.h | 20 +--- .../{include => register}/soc/sdmmc_struct.h | 0 .../{include => register}/soc/sens_reg.h | 2 +- .../{include => register}/soc/sens_struct.h | 0 .../{include => register}/soc/sensitive_reg.h | 20 +--- .../soc/sensitive_struct.h | 18 +-- .../{include => register}/soc/spi_mem_reg.h | 64 +++++------ .../soc/spi_mem_struct.h | 20 +--- .../{include => register}/soc/spi_reg.h | 36 +++--- .../{include => register}/soc/spi_struct.h | 22 ++-- .../{include => register}/soc/syscon_reg.h | 4 +- .../{include => register}/soc/syscon_struct.h | 18 +-- .../{include => register}/soc/system_reg.h | 20 +--- .../{include => register}/soc/system_struct.h | 18 +-- .../{include => register}/soc/systimer_reg.h | 15 +-- .../soc/systimer_struct.h | 15 +-- .../soc/timer_group_reg.h | 15 +-- .../soc/timer_group_struct.h | 0 .../{include => register}/soc/twai_struct.h | 0 .../{include => register}/soc/uart_reg.h | 25 ++-- .../{include => register}/soc/uart_struct.h | 25 ++-- .../{include => register}/soc/uhci_reg.h | 20 +--- .../{include => register}/soc/uhci_struct.h | 0 .../{include => register}/soc/usb_reg.h | 62 +++++----- .../soc/usb_serial_jtag_reg.h | 14 +-- .../soc/usb_serial_jtag_struct.h | 20 +--- .../{include => register}/soc/usb_struct.h | 2 +- .../{include => register}/soc/usb_wrap_reg.h | 20 +--- .../soc/usb_wrap_struct.h | 15 +-- .../soc/world_controller_reg.h | 0 .../soc/world_controller_struct.h | 0 tools/ci/check_copyright_ignore.txt | 53 --------- 84 files changed, 415 insertions(+), 823 deletions(-) delete mode 100644 components/soc/esp32s3/register/soc/.gitkeep rename components/soc/esp32s3/{include => register}/soc/apb_ctrl_reg.h (99%) rename components/soc/esp32s3/{include => register}/soc/apb_ctrl_struct.h (100%) rename components/soc/esp32s3/{include => register}/soc/apb_saradc_reg.h (97%) rename components/soc/esp32s3/{include => register}/soc/apb_saradc_struct.h (100%) rename components/soc/esp32s3/{include => register}/soc/assist_debug_reg.h (99%) rename components/soc/esp32s3/{include => register}/soc/assist_debug_struct.h (96%) rename components/soc/esp32s3/{include => register}/soc/efuse_reg.h (99%) rename components/soc/esp32s3/{include => register}/soc/efuse_struct.h (99%) rename components/soc/esp32s3/{include => register}/soc/extmem_reg.h (98%) rename components/soc/esp32s3/{include => register}/soc/extmem_struct.h (98%) rename components/soc/esp32s3/{include => register}/soc/gdma_reg.h (99%) rename components/soc/esp32s3/{include => register}/soc/gdma_struct.h (100%) rename components/soc/esp32s3/{include => register}/soc/gpio_reg.h (99%) rename components/soc/esp32s3/{include => register}/soc/gpio_sd_reg.h (99%) rename components/soc/esp32s3/{include => register}/soc/gpio_sd_struct.h (100%) rename components/soc/esp32s3/{include => register}/soc/gpio_struct.h (100%) rename components/soc/esp32s3/{include => register}/soc/hinf_reg.h (93%) rename components/soc/esp32s3/{include => register}/soc/hinf_struct.h (84%) rename components/soc/esp32s3/{include => register}/soc/host_reg.h (99%) rename components/soc/esp32s3/{include => register}/soc/host_struct.h (97%) rename components/soc/esp32s3/{include => register}/soc/i2c_reg.h (99%) rename components/soc/esp32s3/{include => register}/soc/i2c_struct.h (98%) rename components/soc/esp32s3/{include => register}/soc/i2s_reg.h (98%) rename components/soc/esp32s3/{include => register}/soc/i2s_struct.h (99%) rename components/soc/esp32s3/{include => register}/soc/interrupt_core0_reg.h (98%) rename components/soc/esp32s3/{include => register}/soc/interrupt_core0_struct.h (98%) rename components/soc/esp32s3/{include => register}/soc/interrupt_core1_reg.h (98%) rename components/soc/esp32s3/{include => register}/soc/interrupt_core1_struct.h (98%) rename components/soc/esp32s3/{include => register}/soc/io_mux_reg.h (99%) rename components/soc/esp32s3/{include => register}/soc/lcd_cam_reg.h (100%) rename components/soc/esp32s3/{include => register}/soc/lcd_cam_struct.h (100%) rename components/soc/esp32s3/{include => register}/soc/ledc_reg.h (98%) rename components/soc/esp32s3/{include => register}/soc/ledc_struct.h (92%) rename components/soc/esp32s3/{include => register}/soc/mcpwm_reg.h (99%) rename components/soc/esp32s3/{include => register}/soc/mcpwm_struct.h (99%) rename components/soc/esp32s3/{include => register}/soc/pcnt_reg.h (100%) rename components/soc/esp32s3/{include => register}/soc/pcnt_struct.h (100%) rename components/soc/esp32s3/{include => register}/soc/peri_backup_reg.h (92%) rename components/soc/esp32s3/{include => register}/soc/peri_backup_struct.h (85%) rename components/soc/esp32s3/{include => register}/soc/reg_base.h (100%) rename components/soc/esp32s3/{include => register}/soc/rmt_reg.h (100%) rename components/soc/esp32s3/{include => register}/soc/rmt_struct.h (100%) rename components/soc/esp32s3/{include => register}/soc/rtc_cntl_reg.h (99%) rename components/soc/esp32s3/{include => register}/soc/rtc_cntl_struct.h (99%) rename components/soc/esp32s3/{include => register}/soc/rtc_i2c_reg.h (98%) rename components/soc/esp32s3/{include => register}/soc/rtc_i2c_struct.h (96%) rename components/soc/esp32s3/{include => register}/soc/rtc_io_reg.h (98%) rename components/soc/esp32s3/{include => register}/soc/rtc_io_struct.h (95%) rename components/soc/esp32s3/{include => register}/soc/sdmmc_reg.h (85%) rename components/soc/esp32s3/{include => register}/soc/sdmmc_struct.h (100%) rename components/soc/esp32s3/{include => register}/soc/sens_reg.h (99%) rename components/soc/esp32s3/{include => register}/soc/sens_struct.h (100%) rename components/soc/esp32s3/{include => register}/soc/sensitive_reg.h (99%) rename components/soc/esp32s3/{include => register}/soc/sensitive_struct.h (99%) rename components/soc/esp32s3/{include => register}/soc/spi_mem_reg.h (98%) rename components/soc/esp32s3/{include => register}/soc/spi_mem_struct.h (98%) rename components/soc/esp32s3/{include => register}/soc/spi_reg.h (98%) rename components/soc/esp32s3/{include => register}/soc/spi_struct.h (98%) rename components/soc/esp32s3/{include => register}/soc/syscon_reg.h (99%) rename components/soc/esp32s3/{include => register}/soc/syscon_struct.h (96%) rename components/soc/esp32s3/{include => register}/soc/system_reg.h (98%) rename components/soc/esp32s3/{include => register}/soc/system_struct.h (98%) rename components/soc/esp32s3/{include => register}/soc/systimer_reg.h (97%) rename components/soc/esp32s3/{include => register}/soc/systimer_struct.h (94%) rename components/soc/esp32s3/{include => register}/soc/timer_group_reg.h (97%) rename components/soc/esp32s3/{include => register}/soc/timer_group_struct.h (100%) rename components/soc/esp32s3/{include => register}/soc/twai_struct.h (100%) rename components/soc/esp32s3/{include => register}/soc/uart_reg.h (98%) rename components/soc/esp32s3/{include => register}/soc/uart_struct.h (97%) rename components/soc/esp32s3/{include => register}/soc/uhci_reg.h (97%) rename components/soc/esp32s3/{include => register}/soc/uhci_struct.h (100%) rename components/soc/esp32s3/{include => register}/soc/usb_reg.h (99%) rename components/soc/esp32s3/{include => register}/soc/usb_serial_jtag_reg.h (99%) rename components/soc/esp32s3/{include => register}/soc/usb_serial_jtag_struct.h (96%) rename components/soc/esp32s3/{include => register}/soc/usb_struct.h (98%) rename components/soc/esp32s3/{include => register}/soc/usb_wrap_reg.h (93%) rename components/soc/esp32s3/{include => register}/soc/usb_wrap_struct.h (95%) rename components/soc/esp32s3/{include => register}/soc/world_controller_reg.h (100%) rename components/soc/esp32s3/{include => register}/soc/world_controller_struct.h (100%) diff --git a/components/soc/esp32s3/include/soc/dport_reg.h b/components/soc/esp32s3/include/soc/dport_reg.h index e17afb79b5c2..e9f3de4c442d 100644 --- a/components/soc/esp32s3/include/soc/dport_reg.h +++ b/components/soc/esp32s3/include/soc/dport_reg.h @@ -5,20 +5,19 @@ */ #pragma once -#include "soc.h" +#include "soc/interrupt_reg.h" +#include "soc/system_reg.h" +#include "soc/sensitive_reg.h" +#include "soc/soc.h" + #ifdef __cplusplus extern "C" { #endif -#include "interrupt_reg.h" -#include "system_reg.h" -#include "sensitive_reg.h" -#include "soc.h" - #define DPORT_DATE_REG SYSTEM_DATE_REG #ifndef __ASSEMBLER__ -#include "dport_access.h" +#include "soc/dport_access.h" #endif #ifdef __cplusplus diff --git a/components/soc/esp32s3/include/soc/soc.h b/components/soc/esp32s3/include/soc/soc.h index 056c6d9f4e5d..78a29ee2c309 100644 --- a/components/soc/esp32s3/include/soc/soc.h +++ b/components/soc/esp32s3/include/soc/soc.h @@ -12,7 +12,7 @@ #endif #include "esp_bit_defs.h" -#include "reg_base.h" +#include "soc/reg_base.h" #define PRO_CPU_NUM (0) #define APP_CPU_NUM (1) diff --git a/components/soc/esp32s3/include/soc/usb_dwc_struct.h b/components/soc/esp32s3/include/soc/usb_dwc_struct.h index 5fd5800715e8..70f73e37b7a8 100644 --- a/components/soc/esp32s3/include/soc/usb_dwc_struct.h +++ b/components/soc/esp32s3/include/soc/usb_dwc_struct.h @@ -33,7 +33,7 @@ typedef union { uint32_t hnpreq: 1; uint32_t hstsethnpen: 1; uint32_t devhnpen: 1; - uint32_t ehen: 1; + uint32_t ehen: 1; // codespell:ignore ehen uint32_t reserved_13: 2; uint32_t dbncefltrbypass: 1; uint32_t conidsts: 1; diff --git a/components/soc/esp32s3/register/soc/.gitkeep b/components/soc/esp32s3/register/soc/.gitkeep deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/components/soc/esp32s3/include/soc/apb_ctrl_reg.h b/components/soc/esp32s3/register/soc/apb_ctrl_reg.h similarity index 99% rename from components/soc/esp32s3/include/soc/apb_ctrl_reg.h rename to components/soc/esp32s3/register/soc/apb_ctrl_reg.h index 845394f702ea..809463766aea 100644 --- a/components/soc/esp32s3/include/soc/apb_ctrl_reg.h +++ b/components/soc/esp32s3/register/soc/apb_ctrl_reg.h @@ -8,7 +8,7 @@ #warning "apb_ctrl_reg is deprecated due to duplicated with syscon_reg, please use syscon_reg instead, they are same" -#include "soc.h" +#include "soc/soc.h" #ifdef __cplusplus extern "C" { #endif diff --git a/components/soc/esp32s3/include/soc/apb_ctrl_struct.h b/components/soc/esp32s3/register/soc/apb_ctrl_struct.h similarity index 100% rename from components/soc/esp32s3/include/soc/apb_ctrl_struct.h rename to components/soc/esp32s3/register/soc/apb_ctrl_struct.h diff --git a/components/soc/esp32s3/include/soc/apb_saradc_reg.h b/components/soc/esp32s3/register/soc/apb_saradc_reg.h similarity index 97% rename from components/soc/esp32s3/include/soc/apb_saradc_reg.h rename to components/soc/esp32s3/register/soc/apb_saradc_reg.h index b9c88f225470..61d99974db4d 100644 --- a/components/soc/esp32s3/include/soc/apb_saradc_reg.h +++ b/components/soc/esp32s3/register/soc/apb_saradc_reg.h @@ -1,21 +1,13 @@ -// Copyright 2017-2021 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2017-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #ifndef _SOC_APB_SARADC_REG_H_ #define _SOC_APB_SARADC_REG_H_ -#include "soc.h" +#include "soc/soc.h" #ifdef __cplusplus extern "C" { #endif diff --git a/components/soc/esp32s3/include/soc/apb_saradc_struct.h b/components/soc/esp32s3/register/soc/apb_saradc_struct.h similarity index 100% rename from components/soc/esp32s3/include/soc/apb_saradc_struct.h rename to components/soc/esp32s3/register/soc/apb_saradc_struct.h diff --git a/components/soc/esp32s3/include/soc/assist_debug_reg.h b/components/soc/esp32s3/register/soc/assist_debug_reg.h similarity index 99% rename from components/soc/esp32s3/include/soc/assist_debug_reg.h rename to components/soc/esp32s3/register/soc/assist_debug_reg.h index 0bf71c44d33e..35a89cadabb5 100644 --- a/components/soc/esp32s3/include/soc/assist_debug_reg.h +++ b/components/soc/esp32s3/register/soc/assist_debug_reg.h @@ -1,21 +1,13 @@ -// Copyright 2017-2021 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2017-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #ifndef _SOC_ASSIST_DEBUG_REG_H_ #define _SOC_ASSIST_DEBUG_REG_H_ -#include "soc.h" +#include "soc/soc.h" #ifdef __cplusplus extern "C" { #endif diff --git a/components/soc/esp32s3/include/soc/assist_debug_struct.h b/components/soc/esp32s3/register/soc/assist_debug_struct.h similarity index 96% rename from components/soc/esp32s3/include/soc/assist_debug_struct.h rename to components/soc/esp32s3/register/soc/assist_debug_struct.h index a6152af468c6..a66c4ecb772b 100644 --- a/components/soc/esp32s3/include/soc/assist_debug_struct.h +++ b/components/soc/esp32s3/register/soc/assist_debug_struct.h @@ -1,16 +1,8 @@ -// Copyright 2017-2021 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2017-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #ifndef _SOC_ASSIST_DEBUG_STRUCT_H_ #define _SOC_ASSIST_DEBUG_STRUCT_H_ diff --git a/components/soc/esp32s3/include/soc/efuse_reg.h b/components/soc/esp32s3/register/soc/efuse_reg.h similarity index 99% rename from components/soc/esp32s3/include/soc/efuse_reg.h rename to components/soc/esp32s3/register/soc/efuse_reg.h index c4b8a5ed47a5..0c89dd3808ea 100644 --- a/components/soc/esp32s3/include/soc/efuse_reg.h +++ b/components/soc/esp32s3/register/soc/efuse_reg.h @@ -7,7 +7,7 @@ #include #include "soc/soc.h" -#include "efuse_defs.h" +#include "soc/efuse_defs.h" #ifdef __cplusplus extern "C" { #endif @@ -553,7 +553,7 @@ extern "C" { #define EFUSE_DIS_DIRECT_BOOT_V 0x00000001U #define EFUSE_DIS_DIRECT_BOOT_S 1 /** EFUSE_DIS_USB_SERIAL_JTAG_ROM_PRINT : RO; bitpos: [2]; default: 0; - * Selectes the default UART print channel. 0: UART0. 1: UART1. + * Selects the default UART print channel. 0: UART0. 1: UART1. */ #define EFUSE_DIS_USB_SERIAL_JTAG_ROM_PRINT (BIT(2)) #define EFUSE_DIS_USB_SERIAL_JTAG_ROM_PRINT_M (EFUSE_DIS_USB_SERIAL_JTAG_ROM_PRINT_V << EFUSE_DIS_USB_SERIAL_JTAG_ROM_PRINT_S) @@ -2638,7 +2638,7 @@ extern "C" { #define EFUSE_CLK_EN_S 16 /** EFUSE_CONF_REG register - * eFuse operation mode configuraiton register + * eFuse operation mode configuration register */ #define EFUSE_CONF_REG (DR_REG_EFUSE_BASE + 0x1cc) /** EFUSE_OP_CODE : R/W; bitpos: [15:0]; default: 0; diff --git a/components/soc/esp32s3/include/soc/efuse_struct.h b/components/soc/esp32s3/register/soc/efuse_struct.h similarity index 99% rename from components/soc/esp32s3/include/soc/efuse_struct.h rename to components/soc/esp32s3/register/soc/efuse_struct.h index a3c589f543c9..2b2639c7522d 100644 --- a/components/soc/esp32s3/include/soc/efuse_struct.h +++ b/components/soc/esp32s3/register/soc/efuse_struct.h @@ -423,7 +423,7 @@ typedef union { */ uint32_t dis_direct_boot:1; /** dis_usb_serial_jtag_rom_print : RO; bitpos: [2]; default: 0; - * Selectes the default UART print channel. 0: UART0. 1: UART1. + * Selects the default UART print channel. 0: UART0. 1: UART1. */ uint32_t dis_usb_serial_jtag_rom_print:1; /** flash_ecc_mode : RO; bitpos: [3]; default: 0; @@ -2163,7 +2163,7 @@ typedef union { } efuse_clk_reg_t; /** Type of conf register - * eFuse operation mode configuraiton register + * eFuse operation mode configuration register */ typedef union { struct { diff --git a/components/soc/esp32s3/include/soc/extmem_reg.h b/components/soc/esp32s3/register/soc/extmem_reg.h similarity index 98% rename from components/soc/esp32s3/include/soc/extmem_reg.h rename to components/soc/esp32s3/register/soc/extmem_reg.h index 5763ec6df774..4929c47f86c2 100644 --- a/components/soc/esp32s3/include/soc/extmem_reg.h +++ b/components/soc/esp32s3/register/soc/extmem_reg.h @@ -1,21 +1,13 @@ -// Copyright 2017-2021 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2017-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #ifndef _SOC_EXTMEM_REG_H_ #define _SOC_EXTMEM_REG_H_ -#include "soc.h" +#include "soc/soc.h" #ifdef __cplusplus extern "C" { #endif @@ -112,15 +104,15 @@ which is combined with DCACHE_PRELOCK_SCT0_SIZE_REG.*/ #define EXTMEM_DCACHE_PRELOCK_SCT_SIZE_REG (DR_REG_EXTMEM_BASE + 0x18) /* EXTMEM_DCACHE_PRELOCK_SCT0_SIZE : R/W ;bitpos:[31:16] ;default: 16'h0 ; */ -/*description: The bits are used to configure the first length of data locking, which is combin -ed with DCACHE_PRELOCK_SCT0_ADDR_REG.*/ +/*description: The bits are used to configure the first length of data locking, which is +combined with DCACHE_PRELOCK_SCT0_ADDR_REG.*/ #define EXTMEM_DCACHE_PRELOCK_SCT0_SIZE 0x0000FFFF #define EXTMEM_DCACHE_PRELOCK_SCT0_SIZE_M ((EXTMEM_DCACHE_PRELOCK_SCT0_SIZE_V)<<(EXTMEM_DCACHE_PRELOCK_SCT0_SIZE_S)) #define EXTMEM_DCACHE_PRELOCK_SCT0_SIZE_V 0xFFFF #define EXTMEM_DCACHE_PRELOCK_SCT0_SIZE_S 16 /* EXTMEM_DCACHE_PRELOCK_SCT1_SIZE : R/W ;bitpos:[15:0] ;default: 16'h0 ; */ -/*description: The bits are used to configure the second length of data locking, which is combi -ned with DCACHE_PRELOCK_SCT1_ADDR_REG.*/ +/*description: The bits are used to configure the second length of data locking, which is +combined with DCACHE_PRELOCK_SCT1_ADDR_REG.*/ #define EXTMEM_DCACHE_PRELOCK_SCT1_SIZE 0x0000FFFF #define EXTMEM_DCACHE_PRELOCK_SCT1_SIZE_M ((EXTMEM_DCACHE_PRELOCK_SCT1_SIZE_V)<<(EXTMEM_DCACHE_PRELOCK_SCT1_SIZE_S)) #define EXTMEM_DCACHE_PRELOCK_SCT1_SIZE_V 0xFFFF @@ -189,7 +181,7 @@ ter writeback operation done..*/ #define EXTMEM_DCACHE_WRITEBACK_ENA_S 1 /* EXTMEM_DCACHE_INVALIDATE_ENA : R/W ;bitpos:[0] ;default: 1'b1 ; */ /*description: The bit is used to enable invalidate operation. It will be cleared by hardware a -fter invalidate operation done..*/ +after invalidate operation done..*/ #define EXTMEM_DCACHE_INVALIDATE_ENA (BIT(0)) #define EXTMEM_DCACHE_INVALIDATE_ENA_M (BIT(0)) #define EXTMEM_DCACHE_INVALIDATE_ENA_V 0x1 @@ -342,8 +334,8 @@ ache_autoload_done. 1: enable, 0: disable. .*/ #define EXTMEM_DCACHE_AUTOLOAD_SCT0_ADDR_REG (DR_REG_EXTMEM_BASE + 0x50) /* EXTMEM_DCACHE_AUTOLOAD_SCT0_ADDR : R/W ;bitpos:[31:0] ;default: 32'b0 ; */ -/*description: The bits are used to configure the start virtual address of the first section fo -r autoload operation. It should be combined with dcache_autoload_sct0_ena..*/ +/*description: The bits are used to configure the start virtual address of the first section +for autoload operation. It should be combined with dcache_autoload_sct0_ena..*/ #define EXTMEM_DCACHE_AUTOLOAD_SCT0_ADDR 0xFFFFFFFF #define EXTMEM_DCACHE_AUTOLOAD_SCT0_ADDR_M ((EXTMEM_DCACHE_AUTOLOAD_SCT0_ADDR_V)<<(EXTMEM_DCACHE_AUTOLOAD_SCT0_ADDR_S)) #define EXTMEM_DCACHE_AUTOLOAD_SCT0_ADDR_V 0xFFFFFFFF @@ -472,15 +464,15 @@ which is combined with ICACHE_PRELOCK_SCT0_SIZE_REG.*/ #define EXTMEM_ICACHE_PRELOCK_SCT_SIZE_REG (DR_REG_EXTMEM_BASE + 0x78) /* EXTMEM_ICACHE_PRELOCK_SCT0_SIZE : R/W ;bitpos:[31:16] ;default: 16'h0 ; */ -/*description: The bits are used to configure the first length of data locking, which is combin -ed with ICACHE_PRELOCK_SCT0_ADDR_REG.*/ +/*description: The bits are used to configure the first length of data locking, which is +combined with ICACHE_PRELOCK_SCT0_ADDR_REG.*/ #define EXTMEM_ICACHE_PRELOCK_SCT0_SIZE 0x0000FFFF #define EXTMEM_ICACHE_PRELOCK_SCT0_SIZE_M ((EXTMEM_ICACHE_PRELOCK_SCT0_SIZE_V)<<(EXTMEM_ICACHE_PRELOCK_SCT0_SIZE_S)) #define EXTMEM_ICACHE_PRELOCK_SCT0_SIZE_V 0xFFFF #define EXTMEM_ICACHE_PRELOCK_SCT0_SIZE_S 16 /* EXTMEM_ICACHE_PRELOCK_SCT1_SIZE : R/W ;bitpos:[15:0] ;default: 16'h0 ; */ -/*description: The bits are used to configure the second length of data locking, which is combi -ned with ICACHE_PRELOCK_SCT1_ADDR_REG.*/ +/*description: The bits are used to configure the second length of data locking, which is +combined with ICACHE_PRELOCK_SCT1_ADDR_REG.*/ #define EXTMEM_ICACHE_PRELOCK_SCT1_SIZE 0x0000FFFF #define EXTMEM_ICACHE_PRELOCK_SCT1_SIZE_M ((EXTMEM_ICACHE_PRELOCK_SCT1_SIZE_V)<<(EXTMEM_ICACHE_PRELOCK_SCT1_SIZE_S)) #define EXTMEM_ICACHE_PRELOCK_SCT1_SIZE_V 0xFFFF @@ -535,7 +527,7 @@ counts of cache block. It should be combined with ICACHE_LOCK_ADDR_REG..*/ #define EXTMEM_ICACHE_SYNC_DONE_S 1 /* EXTMEM_ICACHE_INVALIDATE_ENA : R/W ;bitpos:[0] ;default: 1'b1 ; */ /*description: The bit is used to enable invalidate operation. It will be cleared by hardware a -fter invalidate operation done..*/ +after invalidate operation done..*/ #define EXTMEM_ICACHE_INVALIDATE_ENA (BIT(0)) #define EXTMEM_ICACHE_INVALIDATE_ENA_M (BIT(0)) #define EXTMEM_ICACHE_INVALIDATE_ENA_V 0x1 @@ -655,8 +647,8 @@ ache_autoload_done. 1: enable, 0: disable. .*/ #define EXTMEM_ICACHE_AUTOLOAD_SCT0_ADDR_REG (DR_REG_EXTMEM_BASE + 0xA4) /* EXTMEM_ICACHE_AUTOLOAD_SCT0_ADDR : R/W ;bitpos:[31:0] ;default: 32'b0 ; */ -/*description: The bits are used to configure the start virtual address of the first section fo -r autoload operation. It should be combined with icache_autoload_sct0_ena..*/ +/*description: The bits are used to configure the start virtual address of the first section +for autoload operation. It should be combined with icache_autoload_sct0_ena..*/ #define EXTMEM_ICACHE_AUTOLOAD_SCT0_ADDR 0xFFFFFFFF #define EXTMEM_ICACHE_AUTOLOAD_SCT0_ADDR_M ((EXTMEM_ICACHE_AUTOLOAD_SCT0_ADDR_V)<<(EXTMEM_ICACHE_AUTOLOAD_SCT0_ADDR_S)) #define EXTMEM_ICACHE_AUTOLOAD_SCT0_ADDR_V 0xFFFFFFFF @@ -855,7 +847,7 @@ cks all have been occupied by occupy-mode..*/ #define EXTMEM_IBUS_CNT_OVF_INT_CLR_V 0x1 #define EXTMEM_IBUS_CNT_OVF_INT_CLR_S 7 /* EXTMEM_DCACHE_OCCUPY_EXC_INT_CLR : WOD ;bitpos:[6] ;default: 1'b0 ; */ -/*description: The bit is used to clear interrupt by dcache trying to replace a line whose bloc +/*description: The bit is used to clear interrupt by dcache trying to replace a line whose block ks all have been occupied by occupy-mode..*/ #define EXTMEM_DCACHE_OCCUPY_EXC_INT_CLR (BIT(6)) #define EXTMEM_DCACHE_OCCUPY_EXC_INT_CLR_M (BIT(6)) @@ -914,7 +906,7 @@ w..*/ #define EXTMEM_DBUS_ACS_FLASH_MISS_CNT_OVF_ST_V 0x1 #define EXTMEM_DBUS_ACS_FLASH_MISS_CNT_OVF_ST_S 10 /* EXTMEM_DBUS_ACS_CNT_OVF_ST : RO ;bitpos:[9] ;default: 1'b0 ; */ -/*description: The bit is used to indicate interrupt by dbus access flash/spiram counter overfl +/*description: The bit is used to indicate interrupt by dbus access flash/spiram counter overflow ow..*/ #define EXTMEM_DBUS_ACS_CNT_OVF_ST (BIT(9)) #define EXTMEM_DBUS_ACS_CNT_OVF_ST_M (BIT(9)) @@ -928,7 +920,7 @@ verflow..*/ #define EXTMEM_IBUS_ACS_MISS_CNT_OVF_ST_V 0x1 #define EXTMEM_IBUS_ACS_MISS_CNT_OVF_ST_S 8 /* EXTMEM_IBUS_ACS_CNT_OVF_ST : RO ;bitpos:[7] ;default: 1'b0 ; */ -/*description: The bit is used to indicate interrupt by ibus access flash/spiram counter overfl +/*description: The bit is used to indicate interrupt by ibus access flash/spiram counter overflow ow..*/ #define EXTMEM_IBUS_ACS_CNT_OVF_ST (BIT(7)) #define EXTMEM_IBUS_ACS_CNT_OVF_ST_M (BIT(7)) @@ -1642,8 +1634,8 @@ the others fields inside this register..*/ #define EXTMEM_CACHE_VADDR_REG (DR_REG_EXTMEM_BASE + 0x188) /* EXTMEM_CACHE_VADDR : R/W ;bitpos:[31:0] ;default: 32'h00000000 ; */ -/*description: Those bits stores the virtual address which will decide where inside the specifi -ed tag memory object will be accessed..*/ +/*description: Those bits stores the virtual address which will decide where inside the +specified tag memory object will be accessed..*/ #define EXTMEM_CACHE_VADDR 0xFFFFFFFF #define EXTMEM_CACHE_VADDR_M ((EXTMEM_CACHE_VADDR_V)<<(EXTMEM_CACHE_VADDR_S)) #define EXTMEM_CACHE_VADDR_V 0xFFFFFFFF diff --git a/components/soc/esp32s3/include/soc/extmem_struct.h b/components/soc/esp32s3/register/soc/extmem_struct.h similarity index 98% rename from components/soc/esp32s3/include/soc/extmem_struct.h rename to components/soc/esp32s3/register/soc/extmem_struct.h index 58ca64629426..8e2a9aad3c25 100644 --- a/components/soc/esp32s3/include/soc/extmem_struct.h +++ b/components/soc/esp32s3/register/soc/extmem_struct.h @@ -1,16 +1,8 @@ -// Copyright 2017-2021 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2017-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #ifndef _SOC_EXTMEM_STRUCT_H_ #define _SOC_EXTMEM_STRUCT_H_ diff --git a/components/soc/esp32s3/include/soc/gdma_reg.h b/components/soc/esp32s3/register/soc/gdma_reg.h similarity index 99% rename from components/soc/esp32s3/include/soc/gdma_reg.h rename to components/soc/esp32s3/register/soc/gdma_reg.h index 53e76bdc6ff0..7c37c513ef9e 100644 --- a/components/soc/esp32s3/include/soc/gdma_reg.h +++ b/components/soc/esp32s3/register/soc/gdma_reg.h @@ -7,7 +7,7 @@ #define _SOC_GDMA_REG_H_ -#include "soc.h" +#include "soc/soc.h" #ifdef __cplusplus extern "C" { #endif diff --git a/components/soc/esp32s3/include/soc/gdma_struct.h b/components/soc/esp32s3/register/soc/gdma_struct.h similarity index 100% rename from components/soc/esp32s3/include/soc/gdma_struct.h rename to components/soc/esp32s3/register/soc/gdma_struct.h diff --git a/components/soc/esp32s3/include/soc/gpio_reg.h b/components/soc/esp32s3/register/soc/gpio_reg.h similarity index 99% rename from components/soc/esp32s3/include/soc/gpio_reg.h rename to components/soc/esp32s3/register/soc/gpio_reg.h index 39656ffce35c..8a109f6dd200 100644 --- a/components/soc/esp32s3/include/soc/gpio_reg.h +++ b/components/soc/esp32s3/register/soc/gpio_reg.h @@ -1,26 +1,18 @@ -// Copyright 2017-2021 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2017-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #ifndef _SOC_GPIO_REG_H_ #define _SOC_GPIO_REG_H_ -#include "soc.h" +#include "soc/soc.h" #ifdef __cplusplus extern "C" { #endif -#include "soc.h" +#include "soc/soc.h" #define GPIO_PIN_CONFIG_MSB 12 #define GPIO_PIN_CONFIG_LSB 11 diff --git a/components/soc/esp32s3/include/soc/gpio_sd_reg.h b/components/soc/esp32s3/register/soc/gpio_sd_reg.h similarity index 99% rename from components/soc/esp32s3/include/soc/gpio_sd_reg.h rename to components/soc/esp32s3/register/soc/gpio_sd_reg.h index 4aa1fe8f86f6..f171b12dae5b 100644 --- a/components/soc/esp32s3/include/soc/gpio_sd_reg.h +++ b/components/soc/esp32s3/register/soc/gpio_sd_reg.h @@ -6,7 +6,7 @@ #pragma once -#include "soc.h" +#include "soc/soc.h" #ifdef __cplusplus extern "C" { diff --git a/components/soc/esp32s3/include/soc/gpio_sd_struct.h b/components/soc/esp32s3/register/soc/gpio_sd_struct.h similarity index 100% rename from components/soc/esp32s3/include/soc/gpio_sd_struct.h rename to components/soc/esp32s3/register/soc/gpio_sd_struct.h diff --git a/components/soc/esp32s3/include/soc/gpio_struct.h b/components/soc/esp32s3/register/soc/gpio_struct.h similarity index 100% rename from components/soc/esp32s3/include/soc/gpio_struct.h rename to components/soc/esp32s3/register/soc/gpio_struct.h diff --git a/components/soc/esp32s3/include/soc/hinf_reg.h b/components/soc/esp32s3/register/soc/hinf_reg.h similarity index 93% rename from components/soc/esp32s3/include/soc/hinf_reg.h rename to components/soc/esp32s3/register/soc/hinf_reg.h index 212fe817ca2e..d419cf129e01 100644 --- a/components/soc/esp32s3/include/soc/hinf_reg.h +++ b/components/soc/esp32s3/register/soc/hinf_reg.h @@ -1,19 +1,11 @@ -// Copyright 2015-2020 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #pragma once -#include "soc.h" +#include "soc/soc.h" #define HINF_CFG_DATA0_REG (DR_REG_HINF_BASE + 0x0) /* HINF_DEVICE_ID_FN1 : R/W ;bitpos:[31:16] ;default: 16'h2222 ; */ diff --git a/components/soc/esp32s3/include/soc/hinf_struct.h b/components/soc/esp32s3/register/soc/hinf_struct.h similarity index 84% rename from components/soc/esp32s3/include/soc/hinf_struct.h rename to components/soc/esp32s3/register/soc/hinf_struct.h index 965f8bd43c1e..cf0713461bff 100644 --- a/components/soc/esp32s3/include/soc/hinf_struct.h +++ b/components/soc/esp32s3/register/soc/hinf_struct.h @@ -1,16 +1,8 @@ -// Copyright 2015-2020 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #pragma once #include diff --git a/components/soc/esp32s3/include/soc/host_reg.h b/components/soc/esp32s3/register/soc/host_reg.h similarity index 99% rename from components/soc/esp32s3/include/soc/host_reg.h rename to components/soc/esp32s3/register/soc/host_reg.h index afcd67d85f28..4dc04161fcae 100644 --- a/components/soc/esp32s3/include/soc/host_reg.h +++ b/components/soc/esp32s3/register/soc/host_reg.h @@ -1,21 +1,13 @@ -// Copyright 2017-2021 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2017-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #ifndef _SOC_HOST_REG_H_ #define _SOC_HOST_REG_H_ -#include "soc.h" +#include "soc/soc.h" #ifdef __cplusplus extern "C" { #endif diff --git a/components/soc/esp32s3/include/soc/host_struct.h b/components/soc/esp32s3/register/soc/host_struct.h similarity index 97% rename from components/soc/esp32s3/include/soc/host_struct.h rename to components/soc/esp32s3/register/soc/host_struct.h index 1a6b89e28175..79a830ef1454 100644 --- a/components/soc/esp32s3/include/soc/host_struct.h +++ b/components/soc/esp32s3/register/soc/host_struct.h @@ -1,16 +1,8 @@ -// Copyright 2017-2021 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2017-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #ifndef _SOC_HOST_STRUCT_H_ #define _SOC_HOST_STRUCT_H_ @@ -459,7 +451,7 @@ typedef volatile struct host_dev_s { uint32_t reserved_f0; union { struct { - uint32_t infor : 20; + uint32_t infor : 20; // codespell:ignore infor uint32_t reserved20 : 12; }; uint32_t val; diff --git a/components/soc/esp32s3/include/soc/i2c_reg.h b/components/soc/esp32s3/register/soc/i2c_reg.h similarity index 99% rename from components/soc/esp32s3/include/soc/i2c_reg.h rename to components/soc/esp32s3/register/soc/i2c_reg.h index 5d19afa1c32a..0585f139b325 100644 --- a/components/soc/esp32s3/include/soc/i2c_reg.h +++ b/components/soc/esp32s3/register/soc/i2c_reg.h @@ -1,16 +1,7 @@ -/** Copyright 2021 Espressif Systems (Shanghai) PTE LTD +/* + * SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/components/soc/esp32s3/include/soc/i2c_struct.h b/components/soc/esp32s3/register/soc/i2c_struct.h similarity index 98% rename from components/soc/esp32s3/include/soc/i2c_struct.h rename to components/soc/esp32s3/register/soc/i2c_struct.h index 807ffa508d14..fe3695f44fd5 100644 --- a/components/soc/esp32s3/include/soc/i2c_struct.h +++ b/components/soc/esp32s3/register/soc/i2c_struct.h @@ -1,16 +1,7 @@ -/** Copyright 2021 Espressif Systems (Shanghai) CO LTD +/* + * SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/components/soc/esp32s3/include/soc/i2s_reg.h b/components/soc/esp32s3/register/soc/i2s_reg.h similarity index 98% rename from components/soc/esp32s3/include/soc/i2s_reg.h rename to components/soc/esp32s3/register/soc/i2s_reg.h index 3200bd25bc8a..162938443437 100644 --- a/components/soc/esp32s3/include/soc/i2s_reg.h +++ b/components/soc/esp32s3/register/soc/i2s_reg.h @@ -7,7 +7,7 @@ #define _SOC_I2S_REG_H_ -#include "soc.h" +#include "soc/soc.h" #ifdef __cplusplus extern "C" { #endif @@ -151,7 +151,7 @@ MSB is received first..*/ #define I2S_RX_BIT_ORDER_S 18 /* I2S_RX_WS_IDLE_POL : R/W ;bitpos:[17] ;default: 1'h0 ; */ /*description: 0: WS should be 0 when receiving left channel data, and WS is 1in right channel. - 1: WS should be 1 when receiving left channel data, and WS is 0in right channe + 1: WS should be 1 when receiving left channel data, and WS is 0in right channel l. .*/ #define I2S_RX_WS_IDLE_POL (BIT(17)) #define I2S_RX_WS_IDLE_POL_M (BIT(17)) @@ -330,7 +330,7 @@ his bit will be cleared by hardware after update register done..*/ #define I2S_TX_UPDATE_S 8 /* I2S_TX_BIG_ENDIAN : R/W ;bitpos:[7] ;default: 1'b0 ; */ /*description: I2S Tx byte endian, 1: low addr value to high addr. 0: low addr with low addr v -alue..*/ +value..*/ #define I2S_TX_BIG_ENDIAN (BIT(7)) #define I2S_TX_BIG_ENDIAN_M (BIT(7)) #define I2S_TX_BIG_ENDIAN_V 0x1 @@ -530,7 +530,7 @@ I2S_RX_CLKM_DIV_YN1 is 1. .*/ #define I2S_RX_CLKM_DIV_YN1_V 0x1 #define I2S_RX_CLKM_DIV_YN1_S 27 /* I2S_RX_CLKM_DIV_X : R/W ;bitpos:[26:18] ;default: 9'h0 ; */ -/*description: For b <= a/2, the value of I2S_RX_CLKM_DIV_X is (a/b) - 1. For b > a/2, the valu +/*description: For b <= a/2, the value of I2S_RX_CLKM_DIV_X is (a/b) - 1. For b > a/2, the value e of I2S_RX_CLKM_DIV_X is (a/(a-b)) - 1. .*/ #define I2S_RX_CLKM_DIV_X 0x000001FF #define I2S_RX_CLKM_DIV_X_M ((I2S_RX_CLKM_DIV_X_V)<<(I2S_RX_CLKM_DIV_X_S)) @@ -560,7 +560,7 @@ I2S_TX_CLKM_DIV_YN1 is 1. .*/ #define I2S_TX_CLKM_DIV_YN1_V 0x1 #define I2S_TX_CLKM_DIV_YN1_S 27 /* I2S_TX_CLKM_DIV_X : R/W ;bitpos:[26:18] ;default: 9'h0 ; */ -/*description: For b <= a/2, the value of I2S_TX_CLKM_DIV_X is (a/b) - 1. For b > a/2, the valu +/*description: For b <= a/2, the value of I2S_TX_CLKM_DIV_X is (a/b) - 1. For b > a/2, the value e of I2S_TX_CLKM_DIV_X is (a/(a-b)) - 1. .*/ #define I2S_TX_CLKM_DIV_X 0x000001FF #define I2S_TX_CLKM_DIV_X_M ((I2S_TX_CLKM_DIV_X_V)<<(I2S_TX_CLKM_DIV_X_S)) @@ -747,56 +747,56 @@ T12_5[2:0]).*/ #define I2S_RX_TDM_CHAN8_EN_V 0x1 #define I2S_RX_TDM_CHAN8_EN_S 8 /* I2S_RX_TDM_PDM_CHAN7_EN : R/W ;bitpos:[7] ;default: 1'h1 ; */ -/*description: 1: Enable the valid data input of I2S RX TDM or PDM channel $n. 0: Disable, jus +/*description: 1: Enable the valid data input of I2S RX TDM or PDM channel $n. 0: Disable, just t input 0 in this channel..*/ #define I2S_RX_TDM_PDM_CHAN7_EN (BIT(7)) #define I2S_RX_TDM_PDM_CHAN7_EN_M (BIT(7)) #define I2S_RX_TDM_PDM_CHAN7_EN_V 0x1 #define I2S_RX_TDM_PDM_CHAN7_EN_S 7 /* I2S_RX_TDM_PDM_CHAN6_EN : R/W ;bitpos:[6] ;default: 1'h1 ; */ -/*description: 1: Enable the valid data input of I2S RX TDM or PDM channel $n. 0: Disable, jus +/*description: 1: Enable the valid data input of I2S RX TDM or PDM channel $n. 0: Disable, just t input 0 in this channel..*/ #define I2S_RX_TDM_PDM_CHAN6_EN (BIT(6)) #define I2S_RX_TDM_PDM_CHAN6_EN_M (BIT(6)) #define I2S_RX_TDM_PDM_CHAN6_EN_V 0x1 #define I2S_RX_TDM_PDM_CHAN6_EN_S 6 /* I2S_RX_TDM_PDM_CHAN5_EN : R/W ;bitpos:[5] ;default: 1'h1 ; */ -/*description: 1: Enable the valid data input of I2S RX TDM or PDM channel $n. 0: Disable, jus +/*description: 1: Enable the valid data input of I2S RX TDM or PDM channel $n. 0: Disable, just t input 0 in this channel..*/ #define I2S_RX_TDM_PDM_CHAN5_EN (BIT(5)) #define I2S_RX_TDM_PDM_CHAN5_EN_M (BIT(5)) #define I2S_RX_TDM_PDM_CHAN5_EN_V 0x1 #define I2S_RX_TDM_PDM_CHAN5_EN_S 5 /* I2S_RX_TDM_PDM_CHAN4_EN : R/W ;bitpos:[4] ;default: 1'h1 ; */ -/*description: 1: Enable the valid data input of I2S RX TDM or PDM channel $n. 0: Disable, jus +/*description: 1: Enable the valid data input of I2S RX TDM or PDM channel $n. 0: Disable, just t input 0 in this channel..*/ #define I2S_RX_TDM_PDM_CHAN4_EN (BIT(4)) #define I2S_RX_TDM_PDM_CHAN4_EN_M (BIT(4)) #define I2S_RX_TDM_PDM_CHAN4_EN_V 0x1 #define I2S_RX_TDM_PDM_CHAN4_EN_S 4 /* I2S_RX_TDM_PDM_CHAN3_EN : R/W ;bitpos:[3] ;default: 1'h1 ; */ -/*description: 1: Enable the valid data input of I2S RX TDM or PDM channel $n. 0: Disable, jus +/*description: 1: Enable the valid data input of I2S RX TDM or PDM channel $n. 0: Disable, just t input 0 in this channel..*/ #define I2S_RX_TDM_PDM_CHAN3_EN (BIT(3)) #define I2S_RX_TDM_PDM_CHAN3_EN_M (BIT(3)) #define I2S_RX_TDM_PDM_CHAN3_EN_V 0x1 #define I2S_RX_TDM_PDM_CHAN3_EN_S 3 /* I2S_RX_TDM_PDM_CHAN2_EN : R/W ;bitpos:[2] ;default: 1'h1 ; */ -/*description: 1: Enable the valid data input of I2S RX TDM or PDM channel $n. 0: Disable, jus +/*description: 1: Enable the valid data input of I2S RX TDM or PDM channel $n. 0: Disable, just t input 0 in this channel..*/ #define I2S_RX_TDM_PDM_CHAN2_EN (BIT(2)) #define I2S_RX_TDM_PDM_CHAN2_EN_M (BIT(2)) #define I2S_RX_TDM_PDM_CHAN2_EN_V 0x1 #define I2S_RX_TDM_PDM_CHAN2_EN_S 2 /* I2S_RX_TDM_PDM_CHAN1_EN : R/W ;bitpos:[1] ;default: 1'h1 ; */ -/*description: 1: Enable the valid data input of I2S RX TDM or PDM channel $n. 0: Disable, jus +/*description: 1: Enable the valid data input of I2S RX TDM or PDM channel $n. 0: Disable, just t input 0 in this channel..*/ #define I2S_RX_TDM_PDM_CHAN1_EN (BIT(1)) #define I2S_RX_TDM_PDM_CHAN1_EN_M (BIT(1)) #define I2S_RX_TDM_PDM_CHAN1_EN_V 0x1 #define I2S_RX_TDM_PDM_CHAN1_EN_S 1 /* I2S_RX_TDM_PDM_CHAN0_EN : R/W ;bitpos:[0] ;default: 1'h1 ; */ -/*description: 1: Enable the valid data input of I2S RX TDM or PDM channel $n. 0: Disable, jus +/*description: 1: Enable the valid data input of I2S RX TDM or PDM channel $n. 0: Disable, just t input 0 in this channel..*/ #define I2S_RX_TDM_PDM_CHAN0_EN (BIT(0)) #define I2S_RX_TDM_PDM_CHAN0_EN_M (BIT(0)) @@ -805,8 +805,8 @@ t input 0 in this channel..*/ #define I2S_TX_TDM_CTRL_REG(i) (REG_I2S_BASE(i) + 0x54) /* I2S_TX_TDM_SKIP_MSK_EN : R/W ;bitpos:[20] ;default: 1'b0 ; */ -/*description: When DMA TX buffer stores the data of (REG_TX_TDM_TOT_CHAN_NUM + 1) channels, a -nd only the data of the enabled channels is sent, then this bit should be set. C +/*description: When DMA TX buffer stores the data of (REG_TX_TDM_TOT_CHAN_NUM + 1) channels, +and only the data of the enabled channels is sent, then this bit should be set. C lear it when all the data stored in DMA TX buffer is for enabled channels..*/ #define I2S_TX_TDM_SKIP_MSK_EN (BIT(20)) #define I2S_TX_TDM_SKIP_MSK_EN_M (BIT(20)) @@ -1041,8 +1041,8 @@ delay by neg edge. 3: not used..*/ #define I2S_LC_FIFO_TIMEOUT_ENA_V 0x1 #define I2S_LC_FIFO_TIMEOUT_ENA_S 11 /* I2S_LC_FIFO_TIMEOUT_SHIFT : R/W ;bitpos:[10:8] ;default: 3'b0 ; */ -/*description: The bits are used to scale tick counter threshold. The tick counter is reset whe -n counter value >= 88000/2^i2s_lc_fifo_timeout_shift.*/ +/*description: The bits are used to scale tick counter threshold. The tick counter is reset +when counter value >= 88000/2^i2s_lc_fifo_timeout_shift.*/ #define I2S_LC_FIFO_TIMEOUT_SHIFT 0x00000007 #define I2S_LC_FIFO_TIMEOUT_SHIFT_M ((I2S_LC_FIFO_TIMEOUT_SHIFT_V)<<(I2S_LC_FIFO_TIMEOUT_SHIFT_S)) #define I2S_LC_FIFO_TIMEOUT_SHIFT_V 0x7 diff --git a/components/soc/esp32s3/include/soc/i2s_struct.h b/components/soc/esp32s3/register/soc/i2s_struct.h similarity index 99% rename from components/soc/esp32s3/include/soc/i2s_struct.h rename to components/soc/esp32s3/register/soc/i2s_struct.h index 2ad9b84d5128..c7500479b10b 100644 --- a/components/soc/esp32s3/include/soc/i2s_struct.h +++ b/components/soc/esp32s3/register/soc/i2s_struct.h @@ -97,7 +97,7 @@ typedef volatile struct i2s_dev_s { uint32_t tx_mono_fst_vld : 1; /*1: The first channel data value is valid in I2S TX mono mode. 0: The second channel data value is valid in I2S TX mono mode.*/ uint32_t tx_pcm_conf : 2; /*I2S TX compress/decompress configuration bit. & 0 (atol): A-Law decompress, 1 (ltoa) : A-Law compress, 2 (utol) : u-Law decompress, 3 (ltou) : u-Law compress. &*/ uint32_t tx_pcm_bypass : 1; /*Set this bit to bypass Compress/Decompress module for transmitted data.*/ - uint32_t tx_stop_en : 1; /*Set this bit to stop disable output BCK signal and WS signal when tx FIFO is emtpy*/ + uint32_t tx_stop_en : 1; /*Set this bit to stop disable output BCK signal and WS signal when tx FIFO is empty*/ uint32_t reserved14 : 1; /* Reserved*/ uint32_t tx_left_align : 1; /*1: I2S TX left alignment mode. 0: I2S TX right alignment mode.*/ uint32_t tx_24_fill_en : 1; /*1: Sent 32 bits in 24 channel bits mode. 0: Sent 24 bits in 24 channel bits mode*/ diff --git a/components/soc/esp32s3/include/soc/interrupt_core0_reg.h b/components/soc/esp32s3/register/soc/interrupt_core0_reg.h similarity index 98% rename from components/soc/esp32s3/include/soc/interrupt_core0_reg.h rename to components/soc/esp32s3/register/soc/interrupt_core0_reg.h index f686720be442..132bb9f98ed0 100644 --- a/components/soc/esp32s3/include/soc/interrupt_core0_reg.h +++ b/components/soc/esp32s3/register/soc/interrupt_core0_reg.h @@ -1,21 +1,13 @@ -// Copyright 2017-2021 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2017-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #ifndef _SOC_INTERRUPT_CORE0_REG_H_ #define _SOC_INTERRUPT_CORE0_REG_H_ -#include "soc.h" +#include "soc/soc.h" #ifdef __cplusplus extern "C" { #endif diff --git a/components/soc/esp32s3/include/soc/interrupt_core0_struct.h b/components/soc/esp32s3/register/soc/interrupt_core0_struct.h similarity index 98% rename from components/soc/esp32s3/include/soc/interrupt_core0_struct.h rename to components/soc/esp32s3/register/soc/interrupt_core0_struct.h index aa27462fb00c..4a9094950683 100644 --- a/components/soc/esp32s3/include/soc/interrupt_core0_struct.h +++ b/components/soc/esp32s3/register/soc/interrupt_core0_struct.h @@ -1,16 +1,8 @@ -// Copyright 2017-2021 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2017-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #ifndef _SOC_INTERRUPT_CORE0_STRUCT_H_ #define _SOC_INTERRUPT_CORE0_STRUCT_H_ #include diff --git a/components/soc/esp32s3/include/soc/interrupt_core1_reg.h b/components/soc/esp32s3/register/soc/interrupt_core1_reg.h similarity index 98% rename from components/soc/esp32s3/include/soc/interrupt_core1_reg.h rename to components/soc/esp32s3/register/soc/interrupt_core1_reg.h index 82d77e2f0d1b..854106dbf528 100644 --- a/components/soc/esp32s3/include/soc/interrupt_core1_reg.h +++ b/components/soc/esp32s3/register/soc/interrupt_core1_reg.h @@ -1,21 +1,13 @@ -// Copyright 2017-2021 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2017-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #ifndef _SOC_INTERRUPT_CORE1_REG_H_ #define _SOC_INTERRUPT_CORE1_REG_H_ -#include "soc.h" +#include "soc/soc.h" #ifdef __cplusplus extern "C" { #endif diff --git a/components/soc/esp32s3/include/soc/interrupt_core1_struct.h b/components/soc/esp32s3/register/soc/interrupt_core1_struct.h similarity index 98% rename from components/soc/esp32s3/include/soc/interrupt_core1_struct.h rename to components/soc/esp32s3/register/soc/interrupt_core1_struct.h index d4dee29ae508..850cc4dc7772 100644 --- a/components/soc/esp32s3/include/soc/interrupt_core1_struct.h +++ b/components/soc/esp32s3/register/soc/interrupt_core1_struct.h @@ -1,16 +1,8 @@ -// Copyright 2017-2021 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2017-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #ifndef _SOC_INTERRUPT_CORE1_STRUCT_H_ #define _SOC_INTERRUPT_CORE1_STRUCT_H_ #include diff --git a/components/soc/esp32s3/include/soc/io_mux_reg.h b/components/soc/esp32s3/register/soc/io_mux_reg.h similarity index 99% rename from components/soc/esp32s3/include/soc/io_mux_reg.h rename to components/soc/esp32s3/register/soc/io_mux_reg.h index 3ca2cd04989e..fa72d3630649 100644 --- a/components/soc/esp32s3/include/soc/io_mux_reg.h +++ b/components/soc/esp32s3/register/soc/io_mux_reg.h @@ -5,7 +5,7 @@ */ #pragma once -#include "soc.h" +#include "soc/soc.h" /* The following are the bit fields for PERIPHS_IO_MUX_x_U registers */ /* Output enable in sleep mode */ diff --git a/components/soc/esp32s3/include/soc/lcd_cam_reg.h b/components/soc/esp32s3/register/soc/lcd_cam_reg.h similarity index 100% rename from components/soc/esp32s3/include/soc/lcd_cam_reg.h rename to components/soc/esp32s3/register/soc/lcd_cam_reg.h diff --git a/components/soc/esp32s3/include/soc/lcd_cam_struct.h b/components/soc/esp32s3/register/soc/lcd_cam_struct.h similarity index 100% rename from components/soc/esp32s3/include/soc/lcd_cam_struct.h rename to components/soc/esp32s3/register/soc/lcd_cam_struct.h diff --git a/components/soc/esp32s3/include/soc/ledc_reg.h b/components/soc/esp32s3/register/soc/ledc_reg.h similarity index 98% rename from components/soc/esp32s3/include/soc/ledc_reg.h rename to components/soc/esp32s3/register/soc/ledc_reg.h index 23f5a5f88999..1a4d70e26357 100644 --- a/components/soc/esp32s3/include/soc/ledc_reg.h +++ b/components/soc/esp32s3/register/soc/ledc_reg.h @@ -1,24 +1,16 @@ -// Copyright 2017-2020 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2017-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #pragma once -#include "soc.h" +#include "soc/soc.h" #ifdef __cplusplus extern "C" { #endif -#include "soc.h" +#include "soc/soc.h" #define LEDC_LSCH0_CONF0_REG (DR_REG_LEDC_BASE + 0x0000) /* LEDC_OVF_CNT_RESET_ST_LSCH0 : RO ;bitpos:[17] ;default: 1'b0 ; */ diff --git a/components/soc/esp32s3/include/soc/ledc_struct.h b/components/soc/esp32s3/register/soc/ledc_struct.h similarity index 92% rename from components/soc/esp32s3/include/soc/ledc_struct.h rename to components/soc/esp32s3/register/soc/ledc_struct.h index 85cea78e5826..c3e0765a4008 100644 --- a/components/soc/esp32s3/include/soc/ledc_struct.h +++ b/components/soc/esp32s3/register/soc/ledc_struct.h @@ -1,16 +1,8 @@ -// Copyright 2017-2020 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2017-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #pragma once #include diff --git a/components/soc/esp32s3/include/soc/mcpwm_reg.h b/components/soc/esp32s3/register/soc/mcpwm_reg.h similarity index 99% rename from components/soc/esp32s3/include/soc/mcpwm_reg.h rename to components/soc/esp32s3/register/soc/mcpwm_reg.h index 6a370aa6910e..c8e749dac0cb 100644 --- a/components/soc/esp32s3/include/soc/mcpwm_reg.h +++ b/components/soc/esp32s3/register/soc/mcpwm_reg.h @@ -1,5 +1,5 @@ /** - * SPDX-FileCopyrightText: 2021 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -921,7 +921,7 @@ extern "C" { #define MCPWM_DT0_RED_S 0 /** MCPWM_CARRIER0_CFG_REG register - * PWM generator 0 carrier enable and configuratoin + * PWM generator 0 carrier enable and configuration */ #define MCPWM_CARRIER0_CFG_REG(i) (DR_REG_MCPWM_BASE(i) + 0x64) /** MCPWM_CARRIER0_EN : R/W; bitpos: [0]; default: 0; @@ -1625,7 +1625,7 @@ extern "C" { #define MCPWM_DT1_RED_S 0 /** MCPWM_CARRIER1_CFG_REG register - * PWM generator 1 carrier enable and configuratoin + * PWM generator 1 carrier enable and configuration */ #define MCPWM_CARRIER1_CFG_REG(i) (DR_REG_MCPWM_BASE(i) + 0x9c) /** MCPWM_CARRIER1_EN : R/W; bitpos: [0]; default: 0; @@ -2328,7 +2328,7 @@ extern "C" { #define MCPWM_DT2_RED_S 0 /** MCPWM_CARRIER2_CFG_REG register - * PWM generator 2 carrier enable and configuratoin + * PWM generator 2 carrier enable and configuration */ #define MCPWM_CARRIER2_CFG_REG(i) (DR_REG_MCPWM_BASE(i) + 0xd4) /** MCPWM_CARRIER2_EN : R/W; bitpos: [0]; default: 0; @@ -2693,7 +2693,7 @@ extern "C" { #define MCPWM_CAP0_MODE_V 0x00000003U #define MCPWM_CAP0_MODE_S 1 /** MCPWM_CAP0_PRESCALE : R/W; bitpos: [10:3]; default: 0; - * Value of prescaling on possitive edge of CAP0. Prescale value = PWM_CAP0_PRESCALE + + * Value of prescaling on positive edge of CAP0. Prescale value = PWM_CAP0_PRESCALE + * 1 */ #define MCPWM_CAP0_PRESCALE 0x000000FFU @@ -2736,7 +2736,7 @@ extern "C" { #define MCPWM_CAP1_MODE_V 0x00000003U #define MCPWM_CAP1_MODE_S 1 /** MCPWM_CAP1_PRESCALE : R/W; bitpos: [10:3]; default: 0; - * Value of prescaling on possitive edge of CAP1. Prescale value = PWM_CAP1_PRESCALE + + * Value of prescaling on positive edge of CAP1. Prescale value = PWM_CAP1_PRESCALE + * 1 */ #define MCPWM_CAP1_PRESCALE 0x000000FFU @@ -2779,7 +2779,7 @@ extern "C" { #define MCPWM_CAP2_MODE_V 0x00000003U #define MCPWM_CAP2_MODE_S 1 /** MCPWM_CAP2_PRESCALE : R/W; bitpos: [10:3]; default: 0; - * Value of prescaling on possitive edge of CAP2. Prescale value = PWM_CAP2_PRESCALE + + * Value of prescaling on positive edge of CAP2. Prescale value = PWM_CAP2_PRESCALE + * 1 */ #define MCPWM_CAP2_PRESCALE 0x000000FFU diff --git a/components/soc/esp32s3/include/soc/mcpwm_struct.h b/components/soc/esp32s3/register/soc/mcpwm_struct.h similarity index 99% rename from components/soc/esp32s3/include/soc/mcpwm_struct.h rename to components/soc/esp32s3/register/soc/mcpwm_struct.h index e2f4d32eba9f..9040142e67ee 100644 --- a/components/soc/esp32s3/include/soc/mcpwm_struct.h +++ b/components/soc/esp32s3/register/soc/mcpwm_struct.h @@ -474,7 +474,7 @@ typedef union { } mcpwm_dt_red_cfg_reg_t; /** Type of carrier_cfg register - * PWM generator carrier enable and configuratoin + * PWM generator carrier enable and configuration */ typedef union { struct { @@ -746,7 +746,7 @@ typedef union { */ uint32_t capn_mode: 2; /** capn_prescale : R/W; bitpos: [10:3]; default: 0; - * Value of prescaling on possitive edge of CAPn. Prescale value = PWM_CAPn_PRESCALE + + * Value of prescaling on positive edge of CAPn. Prescale value = PWM_CAPn_PRESCALE + * 1 */ uint32_t capn_prescale: 8; diff --git a/components/soc/esp32s3/include/soc/pcnt_reg.h b/components/soc/esp32s3/register/soc/pcnt_reg.h similarity index 100% rename from components/soc/esp32s3/include/soc/pcnt_reg.h rename to components/soc/esp32s3/register/soc/pcnt_reg.h diff --git a/components/soc/esp32s3/include/soc/pcnt_struct.h b/components/soc/esp32s3/register/soc/pcnt_struct.h similarity index 100% rename from components/soc/esp32s3/include/soc/pcnt_struct.h rename to components/soc/esp32s3/register/soc/pcnt_struct.h diff --git a/components/soc/esp32s3/include/soc/peri_backup_reg.h b/components/soc/esp32s3/register/soc/peri_backup_reg.h similarity index 92% rename from components/soc/esp32s3/include/soc/peri_backup_reg.h rename to components/soc/esp32s3/register/soc/peri_backup_reg.h index 71907355b0cc..b627104fc3b2 100644 --- a/components/soc/esp32s3/include/soc/peri_backup_reg.h +++ b/components/soc/esp32s3/register/soc/peri_backup_reg.h @@ -1,21 +1,13 @@ -// Copyright 2017-2021 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2017-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #ifndef _SOC_PERI_BACKUP_REG_H_ #define _SOC_PERI_BACKUP_REG_H_ -#include "soc.h" +#include "soc/soc.h" #ifdef __cplusplus extern "C" { #endif diff --git a/components/soc/esp32s3/include/soc/peri_backup_struct.h b/components/soc/esp32s3/register/soc/peri_backup_struct.h similarity index 85% rename from components/soc/esp32s3/include/soc/peri_backup_struct.h rename to components/soc/esp32s3/register/soc/peri_backup_struct.h index 20d6673f2ec2..bc0563f71569 100644 --- a/components/soc/esp32s3/include/soc/peri_backup_struct.h +++ b/components/soc/esp32s3/register/soc/peri_backup_struct.h @@ -1,16 +1,8 @@ -// Copyright 2017-2021 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2017-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #ifndef _SOC_PERI_BACKUP_STRUCT_H_ #define _SOC_PERI_BACKUP_STRUCT_H_ diff --git a/components/soc/esp32s3/include/soc/reg_base.h b/components/soc/esp32s3/register/soc/reg_base.h similarity index 100% rename from components/soc/esp32s3/include/soc/reg_base.h rename to components/soc/esp32s3/register/soc/reg_base.h diff --git a/components/soc/esp32s3/include/soc/rmt_reg.h b/components/soc/esp32s3/register/soc/rmt_reg.h similarity index 100% rename from components/soc/esp32s3/include/soc/rmt_reg.h rename to components/soc/esp32s3/register/soc/rmt_reg.h diff --git a/components/soc/esp32s3/include/soc/rmt_struct.h b/components/soc/esp32s3/register/soc/rmt_struct.h similarity index 100% rename from components/soc/esp32s3/include/soc/rmt_struct.h rename to components/soc/esp32s3/register/soc/rmt_struct.h diff --git a/components/soc/esp32s3/include/soc/rtc_cntl_reg.h b/components/soc/esp32s3/register/soc/rtc_cntl_reg.h similarity index 99% rename from components/soc/esp32s3/include/soc/rtc_cntl_reg.h rename to components/soc/esp32s3/register/soc/rtc_cntl_reg.h index 33e0fd40629d..00958eb0dba1 100644 --- a/components/soc/esp32s3/include/soc/rtc_cntl_reg.h +++ b/components/soc/esp32s3/register/soc/rtc_cntl_reg.h @@ -8,7 +8,7 @@ #define _SOC_RTC_CNTL_REG_H_ -#include "soc.h" +#include "soc/soc.h" #ifdef __cplusplus extern "C" { #endif diff --git a/components/soc/esp32s3/include/soc/rtc_cntl_struct.h b/components/soc/esp32s3/register/soc/rtc_cntl_struct.h similarity index 99% rename from components/soc/esp32s3/include/soc/rtc_cntl_struct.h rename to components/soc/esp32s3/register/soc/rtc_cntl_struct.h index 56e5f2d47e8c..7ef1825ebdf4 100644 --- a/components/soc/esp32s3/include/soc/rtc_cntl_struct.h +++ b/components/soc/esp32s3/register/soc/rtc_cntl_struct.h @@ -207,7 +207,7 @@ typedef volatile struct rtc_cntl_dev_s { uint32_t rtc_xtal32k_dead : 1; /*enable xtal32k_dead interrupt*/ uint32_t rtc_cocpu_trap : 1; /*enable cocpu trap interrupt*/ uint32_t rtc_touch_timeout : 1; /*enable touch timeout interrupt*/ - uint32_t rtc_glitch_det : 1; /*enbale gitch det interrupt*/ + uint32_t rtc_glitch_det : 1; /*enable gitch det interrupt*/ uint32_t rtc_touch_approach_loop_done : 1; uint32_t reserved21 : 11; }; @@ -565,7 +565,7 @@ typedef volatile struct rtc_cntl_dev_s { uint32_t swd_signal_width : 10; /*adjust signal width send to swd*/ uint32_t swd_rst_flag_clr : 1; /*reset swd reset flag*/ uint32_t swd_feed : 1; /*Sw feed swd*/ - uint32_t swd_disable : 1; /*disabel SWD*/ + uint32_t swd_disable : 1; /*disable SWD*/ uint32_t swd_auto_feed_en : 1; /*automatically feed swd when int comes*/ }; uint32_t val; @@ -689,7 +689,7 @@ typedef volatile struct rtc_cntl_dev_s { uint32_t xtal32k_clk_factor; union { struct { - uint32_t xtal32k_return_wait : 4; /*cycles to wait to return noral xtal 32k*/ + uint32_t xtal32k_return_wait : 4; /*cycles to wait to return normal xtal 32k*/ uint32_t xtal32k_restart_wait : 16; /*cycles to wait to repower on xtal 32k*/ uint32_t xtal32k_wdt_timeout : 8; /*If no clock detected for this amount of time*/ uint32_t xtal32k_stable_thres : 4; /*if restarted xtal32k period is smaller than this*/ @@ -894,7 +894,7 @@ typedef volatile struct rtc_cntl_dev_s { uint32_t rtc_xtal32k_dead_w1ts : 1; /*enable xtal32k_dead interrupt*/ uint32_t rtc_cocpu_trap_w1ts : 1; /*enable cocpu trap interrupt*/ uint32_t rtc_touch_timeout_w1ts : 1; /*enable touch timeout interrupt*/ - uint32_t rtc_glitch_det_w1ts : 1; /*enbale gitch det interrupt*/ + uint32_t rtc_glitch_det_w1ts : 1; /*enable gitch det interrupt*/ uint32_t rtc_touch_approach_loop_done_w1ts: 1; uint32_t reserved21 : 11; }; @@ -921,7 +921,7 @@ typedef volatile struct rtc_cntl_dev_s { uint32_t rtc_xtal32k_dead_w1tc : 1; /*enable xtal32k_dead interrupt*/ uint32_t rtc_cocpu_trap_w1tc : 1; /*enable cocpu trap interrupt*/ uint32_t rtc_touch_timeout_w1tc : 1; /*enable touch timeout interrupt*/ - uint32_t rtc_glitch_det_w1tc : 1; /*enbale gitch det interrupt*/ + uint32_t rtc_glitch_det_w1tc : 1; /*enable gitch det interrupt*/ uint32_t rtc_touch_approach_loop_done_w1tc: 1; uint32_t reserved21 : 11; }; diff --git a/components/soc/esp32s3/include/soc/rtc_i2c_reg.h b/components/soc/esp32s3/register/soc/rtc_i2c_reg.h similarity index 98% rename from components/soc/esp32s3/include/soc/rtc_i2c_reg.h rename to components/soc/esp32s3/register/soc/rtc_i2c_reg.h index 322f28192e22..ba10ed023300 100644 --- a/components/soc/esp32s3/include/soc/rtc_i2c_reg.h +++ b/components/soc/esp32s3/register/soc/rtc_i2c_reg.h @@ -1,16 +1,7 @@ -/** Copyright 2021 Espressif Systems (Shanghai) PTE LTD +/* + * SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/components/soc/esp32s3/include/soc/rtc_i2c_struct.h b/components/soc/esp32s3/register/soc/rtc_i2c_struct.h similarity index 96% rename from components/soc/esp32s3/include/soc/rtc_i2c_struct.h rename to components/soc/esp32s3/register/soc/rtc_i2c_struct.h index 2bac2fa5804a..0d42c68906d9 100644 --- a/components/soc/esp32s3/include/soc/rtc_i2c_struct.h +++ b/components/soc/esp32s3/register/soc/rtc_i2c_struct.h @@ -1,16 +1,7 @@ -/** Copyright 2021 Espressif Systems (Shanghai) PTE LTD +/* + * SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/components/soc/esp32s3/include/soc/rtc_io_reg.h b/components/soc/esp32s3/register/soc/rtc_io_reg.h similarity index 98% rename from components/soc/esp32s3/include/soc/rtc_io_reg.h rename to components/soc/esp32s3/register/soc/rtc_io_reg.h index a324329117a9..0ce66dde6136 100644 --- a/components/soc/esp32s3/include/soc/rtc_io_reg.h +++ b/components/soc/esp32s3/register/soc/rtc_io_reg.h @@ -1,21 +1,13 @@ -// Copyright 2017-2021 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2017-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #ifndef _SOC_RTC_IO_REG_H_ #define _SOC_RTC_IO_REG_H_ -#include "soc.h" +#include "soc/soc.h" #ifdef __cplusplus extern "C" { #endif @@ -109,8 +101,8 @@ extern "C" { #define RTC_GPIO_PIN0_WAKEUP_ENABLE_S 10 /* RTC_GPIO_PIN0_INT_TYPE : R/W ;bitpos:[9:7] ;default: 0 ; */ /*description: if set to 0: GPIO interrupt disable, if set to 1: rising edge trigger, if set -to 2: falling edge trigger, if set to 3: any edge trigger, if set to 4: low leve -l trigger, if set to 5: high level trigger.*/ +to 2: falling edge trigger, if set to 3: any edge trigger, if set to 4: low +level trigger, if set to 5: high level trigger.*/ #define RTC_GPIO_PIN0_INT_TYPE 0x00000007 #define RTC_GPIO_PIN0_INT_TYPE_M ((RTC_GPIO_PIN0_INT_TYPE_V)<<(RTC_GPIO_PIN0_INT_TYPE_S)) #define RTC_GPIO_PIN0_INT_TYPE_V 0x7 @@ -131,8 +123,8 @@ l trigger, if set to 5: high level trigger.*/ #define RTC_GPIO_PIN1_WAKEUP_ENABLE_S 10 /* RTC_GPIO_PIN1_INT_TYPE : R/W ;bitpos:[9:7] ;default: 0 ; */ /*description: if set to 0: GPIO interrupt disable, if set to 1: rising edge trigger, if set -to 2: falling edge trigger, if set to 3: any edge trigger, if set to 4: low leve -l trigger, if set to 5: high level trigger.*/ +to 2: falling edge trigger, if set to 3: any edge trigger, if set to 4: low +level trigger, if set to 5: high level trigger.*/ #define RTC_GPIO_PIN1_INT_TYPE 0x00000007 #define RTC_GPIO_PIN1_INT_TYPE_M ((RTC_GPIO_PIN1_INT_TYPE_V)<<(RTC_GPIO_PIN1_INT_TYPE_S)) #define RTC_GPIO_PIN1_INT_TYPE_V 0x7 @@ -153,8 +145,8 @@ l trigger, if set to 5: high level trigger.*/ #define RTC_GPIO_PIN2_WAKEUP_ENABLE_S 10 /* RTC_GPIO_PIN2_INT_TYPE : R/W ;bitpos:[9:7] ;default: 0 ; */ /*description: if set to 0: GPIO interrupt disable, if set to 1: rising edge trigger, if set -to 2: falling edge trigger, if set to 3: any edge trigger, if set to 4: low leve -l trigger, if set to 5: high level trigger.*/ +to 2: falling edge trigger, if set to 3: any edge trigger, if set to 4: low +level trigger, if set to 5: high level trigger.*/ #define RTC_GPIO_PIN2_INT_TYPE 0x00000007 #define RTC_GPIO_PIN2_INT_TYPE_M ((RTC_GPIO_PIN2_INT_TYPE_V)<<(RTC_GPIO_PIN2_INT_TYPE_S)) #define RTC_GPIO_PIN2_INT_TYPE_V 0x7 @@ -175,8 +167,8 @@ l trigger, if set to 5: high level trigger.*/ #define RTC_GPIO_PIN3_WAKEUP_ENABLE_S 10 /* RTC_GPIO_PIN3_INT_TYPE : R/W ;bitpos:[9:7] ;default: 0 ; */ /*description: if set to 0: GPIO interrupt disable, if set to 1: rising edge trigger, if set -to 2: falling edge trigger, if set to 3: any edge trigger, if set to 4: low leve -l trigger, if set to 5: high level trigger.*/ +to 2: falling edge trigger, if set to 3: any edge trigger, if set to 4: low +level trigger, if set to 5: high level trigger.*/ #define RTC_GPIO_PIN3_INT_TYPE 0x00000007 #define RTC_GPIO_PIN3_INT_TYPE_M ((RTC_GPIO_PIN3_INT_TYPE_V)<<(RTC_GPIO_PIN3_INT_TYPE_S)) #define RTC_GPIO_PIN3_INT_TYPE_V 0x7 @@ -197,8 +189,8 @@ l trigger, if set to 5: high level trigger.*/ #define RTC_GPIO_PIN4_WAKEUP_ENABLE_S 10 /* RTC_GPIO_PIN4_INT_TYPE : R/W ;bitpos:[9:7] ;default: 0 ; */ /*description: if set to 0: GPIO interrupt disable, if set to 1: rising edge trigger, if set -to 2: falling edge trigger, if set to 3: any edge trigger, if set to 4: low leve -l trigger, if set to 5: high level trigger.*/ +to 2: falling edge trigger, if set to 3: any edge trigger, if set to 4: low +level trigger, if set to 5: high level trigger.*/ #define RTC_GPIO_PIN4_INT_TYPE 0x00000007 #define RTC_GPIO_PIN4_INT_TYPE_M ((RTC_GPIO_PIN4_INT_TYPE_V)<<(RTC_GPIO_PIN4_INT_TYPE_S)) #define RTC_GPIO_PIN4_INT_TYPE_V 0x7 @@ -219,8 +211,8 @@ l trigger, if set to 5: high level trigger.*/ #define RTC_GPIO_PIN5_WAKEUP_ENABLE_S 10 /* RTC_GPIO_PIN5_INT_TYPE : R/W ;bitpos:[9:7] ;default: 0 ; */ /*description: if set to 0: GPIO interrupt disable, if set to 1: rising edge trigger, if set -to 2: falling edge trigger, if set to 3: any edge trigger, if set to 4: low leve -l trigger, if set to 5: high level trigger.*/ +to 2: falling edge trigger, if set to 3: any edge trigger, if set to 4: low +level trigger, if set to 5: high level trigger.*/ #define RTC_GPIO_PIN5_INT_TYPE 0x00000007 #define RTC_GPIO_PIN5_INT_TYPE_M ((RTC_GPIO_PIN5_INT_TYPE_V)<<(RTC_GPIO_PIN5_INT_TYPE_S)) #define RTC_GPIO_PIN5_INT_TYPE_V 0x7 @@ -241,8 +233,8 @@ l trigger, if set to 5: high level trigger.*/ #define RTC_GPIO_PIN6_WAKEUP_ENABLE_S 10 /* RTC_GPIO_PIN6_INT_TYPE : R/W ;bitpos:[9:7] ;default: 0 ; */ /*description: if set to 0: GPIO interrupt disable, if set to 1: rising edge trigger, if set -to 2: falling edge trigger, if set to 3: any edge trigger, if set to 4: low leve -l trigger, if set to 5: high level trigger.*/ +to 2: falling edge trigger, if set to 3: any edge trigger, if set to 4: low +level trigger, if set to 5: high level trigger.*/ #define RTC_GPIO_PIN6_INT_TYPE 0x00000007 #define RTC_GPIO_PIN6_INT_TYPE_M ((RTC_GPIO_PIN6_INT_TYPE_V)<<(RTC_GPIO_PIN6_INT_TYPE_S)) #define RTC_GPIO_PIN6_INT_TYPE_V 0x7 @@ -263,8 +255,8 @@ l trigger, if set to 5: high level trigger.*/ #define RTC_GPIO_PIN7_WAKEUP_ENABLE_S 10 /* RTC_GPIO_PIN7_INT_TYPE : R/W ;bitpos:[9:7] ;default: 0 ; */ /*description: if set to 0: GPIO interrupt disable, if set to 1: rising edge trigger, if set -to 2: falling edge trigger, if set to 3: any edge trigger, if set to 4: low leve -l trigger, if set to 5: high level trigger.*/ +to 2: falling edge trigger, if set to 3: any edge trigger, if set to 4: low +level trigger, if set to 5: high level trigger.*/ #define RTC_GPIO_PIN7_INT_TYPE 0x00000007 #define RTC_GPIO_PIN7_INT_TYPE_M ((RTC_GPIO_PIN7_INT_TYPE_V)<<(RTC_GPIO_PIN7_INT_TYPE_S)) #define RTC_GPIO_PIN7_INT_TYPE_V 0x7 @@ -285,8 +277,8 @@ l trigger, if set to 5: high level trigger.*/ #define RTC_GPIO_PIN8_WAKEUP_ENABLE_S 10 /* RTC_GPIO_PIN8_INT_TYPE : R/W ;bitpos:[9:7] ;default: 0 ; */ /*description: if set to 0: GPIO interrupt disable, if set to 1: rising edge trigger, if set -to 2: falling edge trigger, if set to 3: any edge trigger, if set to 4: low leve -l trigger, if set to 5: high level trigger.*/ +to 2: falling edge trigger, if set to 3: any edge trigger, if set to 4: low +level trigger, if set to 5: high level trigger.*/ #define RTC_GPIO_PIN8_INT_TYPE 0x00000007 #define RTC_GPIO_PIN8_INT_TYPE_M ((RTC_GPIO_PIN8_INT_TYPE_V)<<(RTC_GPIO_PIN8_INT_TYPE_S)) #define RTC_GPIO_PIN8_INT_TYPE_V 0x7 @@ -307,8 +299,8 @@ l trigger, if set to 5: high level trigger.*/ #define RTC_GPIO_PIN9_WAKEUP_ENABLE_S 10 /* RTC_GPIO_PIN9_INT_TYPE : R/W ;bitpos:[9:7] ;default: 0 ; */ /*description: if set to 0: GPIO interrupt disable, if set to 1: rising edge trigger, if set -to 2: falling edge trigger, if set to 3: any edge trigger, if set to 4: low leve -l trigger, if set to 5: high level trigger.*/ +to 2: falling edge trigger, if set to 3: any edge trigger, if set to 4: low +level trigger, if set to 5: high level trigger.*/ #define RTC_GPIO_PIN9_INT_TYPE 0x00000007 #define RTC_GPIO_PIN9_INT_TYPE_M ((RTC_GPIO_PIN9_INT_TYPE_V)<<(RTC_GPIO_PIN9_INT_TYPE_S)) #define RTC_GPIO_PIN9_INT_TYPE_V 0x7 @@ -329,8 +321,8 @@ l trigger, if set to 5: high level trigger.*/ #define RTC_GPIO_PIN10_WAKEUP_ENABLE_S 10 /* RTC_GPIO_PIN10_INT_TYPE : R/W ;bitpos:[9:7] ;default: 0 ; */ /*description: if set to 0: GPIO interrupt disable, if set to 1: rising edge trigger, if set -to 2: falling edge trigger, if set to 3: any edge trigger, if set to 4: low leve -l trigger, if set to 5: high level trigger.*/ +to 2: falling edge trigger, if set to 3: any edge trigger, if set to 4: low +level trigger, if set to 5: high level trigger.*/ #define RTC_GPIO_PIN10_INT_TYPE 0x00000007 #define RTC_GPIO_PIN10_INT_TYPE_M ((RTC_GPIO_PIN10_INT_TYPE_V)<<(RTC_GPIO_PIN10_INT_TYPE_S)) #define RTC_GPIO_PIN10_INT_TYPE_V 0x7 @@ -351,8 +343,8 @@ l trigger, if set to 5: high level trigger.*/ #define RTC_GPIO_PIN11_WAKEUP_ENABLE_S 10 /* RTC_GPIO_PIN11_INT_TYPE : R/W ;bitpos:[9:7] ;default: 0 ; */ /*description: if set to 0: GPIO interrupt disable, if set to 1: rising edge trigger, if set -to 2: falling edge trigger, if set to 3: any edge trigger, if set to 4: low leve -l trigger, if set to 5: high level trigger.*/ +to 2: falling edge trigger, if set to 3: any edge trigger, if set to 4: low +level trigger, if set to 5: high level trigger.*/ #define RTC_GPIO_PIN11_INT_TYPE 0x00000007 #define RTC_GPIO_PIN11_INT_TYPE_M ((RTC_GPIO_PIN11_INT_TYPE_V)<<(RTC_GPIO_PIN11_INT_TYPE_S)) #define RTC_GPIO_PIN11_INT_TYPE_V 0x7 @@ -373,8 +365,8 @@ l trigger, if set to 5: high level trigger.*/ #define RTC_GPIO_PIN12_WAKEUP_ENABLE_S 10 /* RTC_GPIO_PIN12_INT_TYPE : R/W ;bitpos:[9:7] ;default: 0 ; */ /*description: if set to 0: GPIO interrupt disable, if set to 1: rising edge trigger, if set -to 2: falling edge trigger, if set to 3: any edge trigger, if set to 4: low leve -l trigger, if set to 5: high level trigger.*/ +to 2: falling edge trigger, if set to 3: any edge trigger, if set to 4: low +level trigger, if set to 5: high level trigger.*/ #define RTC_GPIO_PIN12_INT_TYPE 0x00000007 #define RTC_GPIO_PIN12_INT_TYPE_M ((RTC_GPIO_PIN12_INT_TYPE_V)<<(RTC_GPIO_PIN12_INT_TYPE_S)) #define RTC_GPIO_PIN12_INT_TYPE_V 0x7 @@ -395,8 +387,8 @@ l trigger, if set to 5: high level trigger.*/ #define RTC_GPIO_PIN13_WAKEUP_ENABLE_S 10 /* RTC_GPIO_PIN13_INT_TYPE : R/W ;bitpos:[9:7] ;default: 0 ; */ /*description: if set to 0: GPIO interrupt disable, if set to 1: rising edge trigger, if set -to 2: falling edge trigger, if set to 3: any edge trigger, if set to 4: low leve -l trigger, if set to 5: high level trigger.*/ +to 2: falling edge trigger, if set to 3: any edge trigger, if set to 4: low +level trigger, if set to 5: high level trigger.*/ #define RTC_GPIO_PIN13_INT_TYPE 0x00000007 #define RTC_GPIO_PIN13_INT_TYPE_M ((RTC_GPIO_PIN13_INT_TYPE_V)<<(RTC_GPIO_PIN13_INT_TYPE_S)) #define RTC_GPIO_PIN13_INT_TYPE_V 0x7 @@ -417,8 +409,8 @@ l trigger, if set to 5: high level trigger.*/ #define RTC_GPIO_PIN14_WAKEUP_ENABLE_S 10 /* RTC_GPIO_PIN14_INT_TYPE : R/W ;bitpos:[9:7] ;default: 0 ; */ /*description: if set to 0: GPIO interrupt disable, if set to 1: rising edge trigger, if set -to 2: falling edge trigger, if set to 3: any edge trigger, if set to 4: low leve -l trigger, if set to 5: high level trigger.*/ +to 2: falling edge trigger, if set to 3: any edge trigger, if set to 4: low +level trigger, if set to 5: high level trigger.*/ #define RTC_GPIO_PIN14_INT_TYPE 0x00000007 #define RTC_GPIO_PIN14_INT_TYPE_M ((RTC_GPIO_PIN14_INT_TYPE_V)<<(RTC_GPIO_PIN14_INT_TYPE_S)) #define RTC_GPIO_PIN14_INT_TYPE_V 0x7 @@ -439,8 +431,8 @@ l trigger, if set to 5: high level trigger.*/ #define RTC_GPIO_PIN15_WAKEUP_ENABLE_S 10 /* RTC_GPIO_PIN15_INT_TYPE : R/W ;bitpos:[9:7] ;default: 0 ; */ /*description: if set to 0: GPIO interrupt disable, if set to 1: rising edge trigger, if set -to 2: falling edge trigger, if set to 3: any edge trigger, if set to 4: low leve -l trigger, if set to 5: high level trigger.*/ +to 2: falling edge trigger, if set to 3: any edge trigger, if set to 4: low +level trigger, if set to 5: high level trigger.*/ #define RTC_GPIO_PIN15_INT_TYPE 0x00000007 #define RTC_GPIO_PIN15_INT_TYPE_M ((RTC_GPIO_PIN15_INT_TYPE_V)<<(RTC_GPIO_PIN15_INT_TYPE_S)) #define RTC_GPIO_PIN15_INT_TYPE_V 0x7 @@ -461,8 +453,8 @@ l trigger, if set to 5: high level trigger.*/ #define RTC_GPIO_PIN16_WAKEUP_ENABLE_S 10 /* RTC_GPIO_PIN16_INT_TYPE : R/W ;bitpos:[9:7] ;default: 0 ; */ /*description: if set to 0: GPIO interrupt disable, if set to 1: rising edge trigger, if set -to 2: falling edge trigger, if set to 3: any edge trigger, if set to 4: low leve -l trigger, if set to 5: high level trigger.*/ +to 2: falling edge trigger, if set to 3: any edge trigger, if set to 4: low +level trigger, if set to 5: high level trigger.*/ #define RTC_GPIO_PIN16_INT_TYPE 0x00000007 #define RTC_GPIO_PIN16_INT_TYPE_M ((RTC_GPIO_PIN16_INT_TYPE_V)<<(RTC_GPIO_PIN16_INT_TYPE_S)) #define RTC_GPIO_PIN16_INT_TYPE_V 0x7 @@ -483,8 +475,8 @@ l trigger, if set to 5: high level trigger.*/ #define RTC_GPIO_PIN17_WAKEUP_ENABLE_S 10 /* RTC_GPIO_PIN17_INT_TYPE : R/W ;bitpos:[9:7] ;default: 0 ; */ /*description: if set to 0: GPIO interrupt disable, if set to 1: rising edge trigger, if set -to 2: falling edge trigger, if set to 3: any edge trigger, if set to 4: low leve -l trigger, if set to 5: high level trigger.*/ +to 2: falling edge trigger, if set to 3: any edge trigger, if set to 4: low +level trigger, if set to 5: high level trigger.*/ #define RTC_GPIO_PIN17_INT_TYPE 0x00000007 #define RTC_GPIO_PIN17_INT_TYPE_M ((RTC_GPIO_PIN17_INT_TYPE_V)<<(RTC_GPIO_PIN17_INT_TYPE_S)) #define RTC_GPIO_PIN17_INT_TYPE_V 0x7 @@ -505,8 +497,8 @@ l trigger, if set to 5: high level trigger.*/ #define RTC_GPIO_PIN18_WAKEUP_ENABLE_S 10 /* RTC_GPIO_PIN18_INT_TYPE : R/W ;bitpos:[9:7] ;default: 0 ; */ /*description: if set to 0: GPIO interrupt disable, if set to 1: rising edge trigger, if set -to 2: falling edge trigger, if set to 3: any edge trigger, if set to 4: low leve -l trigger, if set to 5: high level trigger.*/ +to 2: falling edge trigger, if set to 3: any edge trigger, if set to 4: low +level trigger, if set to 5: high level trigger.*/ #define RTC_GPIO_PIN18_INT_TYPE 0x00000007 #define RTC_GPIO_PIN18_INT_TYPE_M ((RTC_GPIO_PIN18_INT_TYPE_V)<<(RTC_GPIO_PIN18_INT_TYPE_S)) #define RTC_GPIO_PIN18_INT_TYPE_V 0x7 @@ -527,8 +519,8 @@ l trigger, if set to 5: high level trigger.*/ #define RTC_GPIO_PIN19_WAKEUP_ENABLE_S 10 /* RTC_GPIO_PIN19_INT_TYPE : R/W ;bitpos:[9:7] ;default: 0 ; */ /*description: if set to 0: GPIO interrupt disable, if set to 1: rising edge trigger, if set -to 2: falling edge trigger, if set to 3: any edge trigger, if set to 4: low leve -l trigger, if set to 5: high level trigger.*/ +to 2: falling edge trigger, if set to 3: any edge trigger, if set to 4: low +level trigger, if set to 5: high level trigger.*/ #define RTC_GPIO_PIN19_INT_TYPE 0x00000007 #define RTC_GPIO_PIN19_INT_TYPE_M ((RTC_GPIO_PIN19_INT_TYPE_V)<<(RTC_GPIO_PIN19_INT_TYPE_S)) #define RTC_GPIO_PIN19_INT_TYPE_V 0x7 @@ -549,8 +541,8 @@ l trigger, if set to 5: high level trigger.*/ #define RTC_GPIO_PIN20_WAKEUP_ENABLE_S 10 /* RTC_GPIO_PIN20_INT_TYPE : R/W ;bitpos:[9:7] ;default: 0 ; */ /*description: if set to 0: GPIO interrupt disable, if set to 1: rising edge trigger, if set -to 2: falling edge trigger, if set to 3: any edge trigger, if set to 4: low leve -l trigger, if set to 5: high level trigger.*/ +to 2: falling edge trigger, if set to 3: any edge trigger, if set to 4: low +level trigger, if set to 5: high level trigger.*/ #define RTC_GPIO_PIN20_INT_TYPE 0x00000007 #define RTC_GPIO_PIN20_INT_TYPE_M ((RTC_GPIO_PIN20_INT_TYPE_V)<<(RTC_GPIO_PIN20_INT_TYPE_S)) #define RTC_GPIO_PIN20_INT_TYPE_V 0x7 @@ -571,8 +563,8 @@ l trigger, if set to 5: high level trigger.*/ #define RTC_GPIO_PIN21_WAKEUP_ENABLE_S 10 /* RTC_GPIO_PIN21_INT_TYPE : R/W ;bitpos:[9:7] ;default: 0 ; */ /*description: if set to 0: GPIO interrupt disable, if set to 1: rising edge trigger, if set -to 2: falling edge trigger, if set to 3: any edge trigger, if set to 4: low leve -l trigger, if set to 5: high level trigger.*/ +to 2: falling edge trigger, if set to 3: any edge trigger, if set to 4: low +level trigger, if set to 5: high level trigger.*/ #define RTC_GPIO_PIN21_INT_TYPE 0x00000007 #define RTC_GPIO_PIN21_INT_TYPE_M ((RTC_GPIO_PIN21_INT_TYPE_V)<<(RTC_GPIO_PIN21_INT_TYPE_S)) #define RTC_GPIO_PIN21_INT_TYPE_V 0x7 diff --git a/components/soc/esp32s3/include/soc/rtc_io_struct.h b/components/soc/esp32s3/register/soc/rtc_io_struct.h similarity index 95% rename from components/soc/esp32s3/include/soc/rtc_io_struct.h rename to components/soc/esp32s3/register/soc/rtc_io_struct.h index 1154be038b3a..d91204e18da2 100644 --- a/components/soc/esp32s3/include/soc/rtc_io_struct.h +++ b/components/soc/esp32s3/register/soc/rtc_io_struct.h @@ -1,16 +1,8 @@ -// Copyright 2017-2021 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2017-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #ifndef _SOC_RTC_IO_STRUCT_H_ #define _SOC_RTC_IO_STRUCT_H_ diff --git a/components/soc/esp32s3/include/soc/sdmmc_reg.h b/components/soc/esp32s3/register/soc/sdmmc_reg.h similarity index 85% rename from components/soc/esp32s3/include/soc/sdmmc_reg.h rename to components/soc/esp32s3/register/soc/sdmmc_reg.h index 41c191eb68ff..4d0a141781d0 100644 --- a/components/soc/esp32s3/include/soc/sdmmc_reg.h +++ b/components/soc/esp32s3/register/soc/sdmmc_reg.h @@ -1,19 +1,11 @@ -// Copyright 2015-2020 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #pragma once -#include "soc.h" +#include "soc/soc.h" #define SDMMC_CTRL_REG (DR_REG_SDMMC_BASE + 0x00) #define SDMMC_PWREN_REG (DR_REG_SDMMC_BASE + 0x04) diff --git a/components/soc/esp32s3/include/soc/sdmmc_struct.h b/components/soc/esp32s3/register/soc/sdmmc_struct.h similarity index 100% rename from components/soc/esp32s3/include/soc/sdmmc_struct.h rename to components/soc/esp32s3/register/soc/sdmmc_struct.h diff --git a/components/soc/esp32s3/include/soc/sens_reg.h b/components/soc/esp32s3/register/soc/sens_reg.h similarity index 99% rename from components/soc/esp32s3/include/soc/sens_reg.h rename to components/soc/esp32s3/register/soc/sens_reg.h index ca14d862dc92..350804cf20ef 100644 --- a/components/soc/esp32s3/include/soc/sens_reg.h +++ b/components/soc/esp32s3/register/soc/sens_reg.h @@ -7,7 +7,7 @@ #define _SOC_SENS_REG_H_ -#include "soc.h" +#include "soc/soc.h" #ifdef __cplusplus extern "C" { #endif diff --git a/components/soc/esp32s3/include/soc/sens_struct.h b/components/soc/esp32s3/register/soc/sens_struct.h similarity index 100% rename from components/soc/esp32s3/include/soc/sens_struct.h rename to components/soc/esp32s3/register/soc/sens_struct.h diff --git a/components/soc/esp32s3/include/soc/sensitive_reg.h b/components/soc/esp32s3/register/soc/sensitive_reg.h similarity index 99% rename from components/soc/esp32s3/include/soc/sensitive_reg.h rename to components/soc/esp32s3/register/soc/sensitive_reg.h index a3393c5c0561..3c17e73cce0c 100644 --- a/components/soc/esp32s3/include/soc/sensitive_reg.h +++ b/components/soc/esp32s3/register/soc/sensitive_reg.h @@ -1,21 +1,13 @@ -// Copyright 2017-2021 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2017-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #ifndef _SOC_SENSITIVE_REG_H_ #define _SOC_SENSITIVE_REG_H_ -#include "soc.h" +#include "soc/soc.h" #ifdef __cplusplus extern "C" { #endif diff --git a/components/soc/esp32s3/include/soc/sensitive_struct.h b/components/soc/esp32s3/register/soc/sensitive_struct.h similarity index 99% rename from components/soc/esp32s3/include/soc/sensitive_struct.h rename to components/soc/esp32s3/register/soc/sensitive_struct.h index e9919cb0a69b..c6102c055b56 100644 --- a/components/soc/esp32s3/include/soc/sensitive_struct.h +++ b/components/soc/esp32s3/register/soc/sensitive_struct.h @@ -1,16 +1,8 @@ -// Copyright 2017-2021 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2017-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #ifndef _SOC_SENSITIVE_STRUCT_H_ #define _SOC_SENSITIVE_STRUCT_H_ diff --git a/components/soc/esp32s3/include/soc/spi_mem_reg.h b/components/soc/esp32s3/register/soc/spi_mem_reg.h similarity index 98% rename from components/soc/esp32s3/include/soc/spi_mem_reg.h rename to components/soc/esp32s3/register/soc/spi_mem_reg.h index aa4639ed8d80..16a8ec5f9c5d 100644 --- a/components/soc/esp32s3/include/soc/spi_mem_reg.h +++ b/components/soc/esp32s3/register/soc/spi_mem_reg.h @@ -1,21 +1,13 @@ -// Copyright 2017-2021 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2017-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #ifndef _SOC_SPI_MEM_REG_H_ #define _SOC_SPI_MEM_REG_H_ -#include "soc.h" +#include "soc/soc.h" #ifdef __cplusplus extern "C" { #endif @@ -209,14 +201,14 @@ QUAD or SPI_MEM_FREAD_DUAL is set..*/ #define SPI_MEM_FASTRD_MODE_V 0x1 #define SPI_MEM_FASTRD_MODE_S 13 /* SPI_MEM_TX_CRC_EN : R/W ;bitpos:[11] ;default: 1'b0 ; */ -/*description: For SPI1, enable crc32 when writing encrypted data to flash. 1: enable 0:disabl +/*description: For SPI1, enable crc32 when writing encrypted data to flash. 1: enable 0:disable e.*/ #define SPI_MEM_TX_CRC_EN (BIT(11)) #define SPI_MEM_TX_CRC_EN_M (BIT(11)) #define SPI_MEM_TX_CRC_EN_V 0x1 #define SPI_MEM_TX_CRC_EN_S 11 /* SPI_MEM_FCS_CRC_EN : R/W ;bitpos:[10] ;default: 1'b0 ; */ -/*description: For SPI1, initialize crc32 module before writing encrypted data to flash. Activ +/*description: For SPI1, initialize crc32 module before writing encrypted data to flash. Active e low..*/ #define SPI_MEM_FCS_CRC_EN (BIT(10)) #define SPI_MEM_FCS_CRC_EN_M (BIT(10)) @@ -826,8 +818,8 @@ tive 1: SPI_CLK is delayed one cycle after CS inactive 2: SPI_CLK is delayed two #define SPI_MEM_SRAM_DRD_CMD_REG(i) (REG_SPI_MEM_BASE(i) + 0x48) /* SPI_MEM_CACHE_SRAM_USR_RD_CMD_BITLEN : R/W ;bitpos:[31:28] ;default: 4'h0 ; */ -/*description: When SPI0 reads Ext_RAM, it is the length in bits of CMD phase. The register val -ue shall be (bit_num-1)..*/ +/*description: When SPI0 reads Ext_RAM, it is the length in bits of CMD phase. The register +value shall be (bit_num-1)..*/ #define SPI_MEM_CACHE_SRAM_USR_RD_CMD_BITLEN 0x0000000F #define SPI_MEM_CACHE_SRAM_USR_RD_CMD_BITLEN_M ((SPI_MEM_CACHE_SRAM_USR_RD_CMD_BITLEN_V)<<(SPI_MEM_CACHE_SRAM_USR_RD_CMD_BITLEN_S)) #define SPI_MEM_CACHE_SRAM_USR_RD_CMD_BITLEN_V 0xF @@ -1072,8 +1064,8 @@ ES command is sent..*/ #define SPI_MEM_FLASH_PER_WAIT_EN_V 0x1 #define SPI_MEM_FLASH_PER_WAIT_EN_S 2 /* SPI_MEM_FLASH_PES : R/W/SS/SC ;bitpos:[1] ;default: 1'b0 ; */ -/*description: program erase suspend bit, program erase suspend operation will be triggered whe -n the bit is set. The bit will be cleared once the operation done.1: enable 0: d +/*description: program erase suspend bit, program erase suspend operation will be triggered +when the bit is set. The bit will be cleared once the operation done.1: enable 0: d isable. .*/ #define SPI_MEM_FLASH_PES (BIT(1)) #define SPI_MEM_FLASH_PES_M (BIT(1)) @@ -1166,7 +1158,7 @@ PI_MEM_TIMING_CALI bit is set..*/ #define SPI_MEM_EXTRA_DUMMY_CYCLELEN_V 0x7 #define SPI_MEM_EXTRA_DUMMY_CYCLELEN_S 2 /* SPI_MEM_TIMING_CALI : R/W ;bitpos:[1] ;default: 1'b0 ; */ -/*description: Set this bit to add extra SPI_CLK cycles in DUMMY phase for all reading operatio +/*description: Set this bit to add extra SPI_CLK cycles in DUMMY phase for all reading operation ns..*/ #define SPI_MEM_TIMING_CALI (BIT(1)) #define SPI_MEM_TIMING_CALI_M (BIT(1)) @@ -1174,7 +1166,7 @@ ns..*/ #define SPI_MEM_TIMING_CALI_S 1 /* SPI_MEM_TIMING_CLK_ENA : R/W ;bitpos:[0] ;default: 1'b0 ; */ /*description: Set this bit to power on HCLK. When PLL is powered on, the frequency of HCLK equ -als to that of PLL. Otherwise, the frequency equals to that of XTAL..*/ +also to that of PLL. Otherwise, the frequency equals to that of XTAL..*/ #define SPI_MEM_TIMING_CLK_ENA (BIT(0)) #define SPI_MEM_TIMING_CLK_ENA_M (BIT(0)) #define SPI_MEM_TIMING_CLK_ENA_V 0x1 @@ -1245,8 +1237,8 @@ cles at HCLK negative edge and one cycle at MSPI_CORE_CLK negative edge..*/ /*description: SPI_HD input delay mode. 0: No delay. 1: Delay for (SPI_MEM_DIN$n_NUM+1) cycles at MSPI_CORE_CLK negative edge. 2: Delay for (SPI_MEM_DIN$n_NUM+1) cycles at HCL K positive edge and one cycle at MSPI_CORE_CLK positive edge. 3: Delay for (SPI_ -MEM_DIN$n_NUM+1) cycles at HCLK positive edge and one cycle at MSPI_CORE_CLK neg -ative edge. 4: Delay for (SPI_MEM_DIN$n_NUM+1) cycles at HCLK negative edge and +MEM_DIN$n_NUM+1) cycles at HCLK positive edge and one cycle at MSPI_CORE_CLK +nagetive edge. 4: Delay for (SPI_MEM_DIN$n_NUM+1) cycles at HCLK negative edge and one cycle at MSPI_CORE_CLK positive edge. 5: Delay for (SPI_MEM_DIN$n_NUM+1) cyc les at HCLK negative edge and one cycle at MSPI_CORE_CLK negative edge..*/ #define SPI_MEM_DIN3_MODE 0x00000007 @@ -1257,8 +1249,8 @@ les at HCLK negative edge and one cycle at MSPI_CORE_CLK negative edge..*/ /*description: SPI_WP input delay mode. 0: No delay. 1: Delay for (SPI_MEM_DIN$n_NUM+1) cycles at MSPI_CORE_CLK negative edge. 2: Delay for (SPI_MEM_DIN$n_NUM+1) cycles at HCL K positive edge and one cycle at MSPI_CORE_CLK positive edge. 3: Delay for (SPI_ -MEM_DIN$n_NUM+1) cycles at HCLK positive edge and one cycle at MSPI_CORE_CLK neg -ative edge. 4: Delay for (SPI_MEM_DIN$n_NUM+1) cycles at HCLK negative edge and +MEM_DIN$n_NUM+1) cycles at HCLK positive edge and one cycle at MSPI_CORE_CLK +nagetive edge. 4: Delay for (SPI_MEM_DIN$n_NUM+1) cycles at HCLK negative edge and one cycle at MSPI_CORE_CLK positive edge. 5: Delay for (SPI_MEM_DIN$n_NUM+1) cyc les at HCLK negative edge and one cycle at MSPI_CORE_CLK negative edge..*/ #define SPI_MEM_DIN2_MODE 0x00000007 @@ -1420,7 +1412,7 @@ esses to Ext_RAM. Active when SPI_SMEM_TIMING_CALI bit is set..*/ #define SPI_MEM_SPI_SMEM_EXTRA_DUMMY_CYCLELEN_V 0x7 #define SPI_MEM_SPI_SMEM_EXTRA_DUMMY_CYCLELEN_S 2 /* SPI_MEM_SPI_SMEM_TIMING_CALI : R/W ;bitpos:[1] ;default: 1'b0 ; */ -/*description: Set this bit to add extra SPI_CLK cycles in DUMMY phase for all reading operatio +/*description: Set this bit to add extra SPI_CLK cycles in DUMMY phase for all reading operation ns..*/ #define SPI_MEM_SPI_SMEM_TIMING_CALI (BIT(1)) #define SPI_MEM_SPI_SMEM_TIMING_CALI_M (BIT(1)) @@ -1428,7 +1420,7 @@ ns..*/ #define SPI_MEM_SPI_SMEM_TIMING_CALI_S 1 /* SPI_MEM_SPI_SMEM_TIMING_CLK_ENA : R/W ;bitpos:[0] ;default: 1'b0 ; */ /*description: Set this bit to power on HCLK. When PLL is powered on, the frequency of HCLK equ -als to that of PLL. Otherwise, the frequency equals to that of XTAL..*/ +also to that of PLL. Otherwise, the frequency equals to that of XTAL..*/ #define SPI_MEM_SPI_SMEM_TIMING_CLK_ENA (BIT(0)) #define SPI_MEM_SPI_SMEM_TIMING_CLK_ENA_M (BIT(0)) #define SPI_MEM_SPI_SMEM_TIMING_CLK_ENA_V 0x1 @@ -1524,8 +1516,8 @@ and one cycle at MSPI_CORE_CLK positive edge. 5: Delay for (SPI_SMEM_DIN$n_NUM+1 at MSPI_CORE_CLK negative edge. 2: Delay for (SPI_SMEM_DIN$n_NUM+1) cycles at HC LK positive edge and one cycle at MSPI_CORE_CLK positive edge. 3: Delay for (SPI _SMEM_DIN$n_NUM+1) cycles at HCLK positive edge and one cycle at MSPI_CORE_CLK n -egative edge. 4: Delay for (SPI_SMEM_DIN$n_NUM+1) cycles at HCLK negative edge a -nd one cycle at MSPI_CORE_CLK positive edge. 5: Delay for (SPI_SMEM_DIN$n_NUM+1) +egative edge. 4: Delay for (SPI_SMEM_DIN$n_NUM+1) cycles at HCLK negative edge +and one cycle at MSPI_CORE_CLK positive edge. 5: Delay for (SPI_SMEM_DIN$n_NUM+1) cycles at HCLK negative edge and one cycle at MSPI_CORE_CLK negative edge..*/ #define SPI_MEM_SPI_SMEM_DIN1_MODE 0x00000007 #define SPI_MEM_SPI_SMEM_DIN1_MODE_M ((SPI_MEM_SPI_SMEM_DIN1_MODE_V)<<(SPI_MEM_SPI_SMEM_DIN1_MODE_S)) @@ -1536,8 +1528,8 @@ nd one cycle at MSPI_CORE_CLK positive edge. 5: Delay for (SPI_SMEM_DIN$n_NUM+1) at MSPI_CORE_CLK negative edge. 2: Delay for (SPI_SMEM_DIN$n_NUM+1) cycles at HC LK positive edge and one cycle at MSPI_CORE_CLK positive edge. 3: Delay for (SPI _SMEM_DIN$n_NUM+1) cycles at HCLK positive edge and one cycle at MSPI_CORE_CLK n -egative edge. 4: Delay for (SPI_SMEM_DIN$n_NUM+1) cycles at HCLK negative edge a -nd one cycle at MSPI_CORE_CLK positive edge. 5: Delay for (SPI_SMEM_DIN$n_NUM+1) +egative edge. 4: Delay for (SPI_SMEM_DIN$n_NUM+1) cycles at HCLK negative edge +and one cycle at MSPI_CORE_CLK positive edge. 5: Delay for (SPI_SMEM_DIN$n_NUM+1) cycles at HCLK negative edge and one cycle at MSPI_CORE_CLK negative edge..*/ #define SPI_MEM_SPI_SMEM_DIN0_MODE 0x00000007 #define SPI_MEM_SPI_SMEM_DIN0_MODE_M ((SPI_MEM_SPI_SMEM_DIN0_MODE_V)<<(SPI_MEM_SPI_SMEM_DIN0_MODE_S)) @@ -1708,8 +1700,8 @@ INT_CLR bit..*/ #define SPI_MEM_ECC_BYTE_ERR_V 0x1 #define SPI_MEM_ECC_BYTE_ERR_S 16 /* SPI_MEM_ECC_CHK_ERR_BIT : R/SS/WTC ;bitpos:[15:13] ;default: 3'd0 ; */ -/*description: When SPI_MEM_ECC_BYTE_ERR is set, these bits show the error bit number of ECC by -te..*/ +/*description: When SPI_MEM_ECC_BYTE_ERR is set, these bits show the error bit number of ECC +byte..*/ #define SPI_MEM_ECC_CHK_ERR_BIT 0x00000007 #define SPI_MEM_ECC_CHK_ERR_BIT_M ((SPI_MEM_ECC_CHK_ERR_BIT_V)<<(SPI_MEM_ECC_CHK_ERR_BIT_S)) #define SPI_MEM_ECC_CHK_ERR_BIT_V 0x7 @@ -2126,7 +2118,7 @@ or times of SPI0/1 ECC read flash are equal or bigger than APB_CTRL_ECC_ERR_INT_ NUM. When APB_CTRL_FECC_ERR_INT_EN is cleared and APB_CTRL_SECC_ERR_INT_EN is s et, this bit is triggered when the error times of SPI0/1 ECC read external RAM a re equal or bigger than APB_CTRL_ECC_ERR_INT_NUM. When APB_CTRL_FECC_ERR_INT_EN -and APB_CTRL_SECC_ERR_INT_EN are set, this bit is triggered when the total erro +and APB_CTRL_SECC_ERR_INT_EN are set, this bit is triggered when the total error r times of SPI0/1 ECC read external RAM and flash are equal or bigger than APB_C TRL_ECC_ERR_INT_NUM. When APB_CTRL_FECC_ERR_INT_EN and APB_CTRL_SECC_ERR_INT_EN are cleared, this bit will not be triggered..*/ @@ -2136,7 +2128,7 @@ TRL_ECC_ERR_INT_NUM. When APB_CTRL_FECC_ERR_INT_EN and APB_CTRL_SECC_ERR_INT_EN #define SPI_MEM_ECC_ERR_INT_RAW_S 4 /* SPI_MEM_BROWN_OUT_INT_RAW : R/WTC/SS ;bitpos:[3] ;default: 1'b0 ; */ /*description: The raw bit for SPI_MEM_BROWN_OUT_INT interrupt. 1: Triggered condition is that -chip is loosing power and RTC module sends out brown out close flash request to +chip is losing power and RTC module sends out brown out close flash request to SPI1. After SPI1 sends out suspend command to flash, this interrupt is triggered and MSPI returns to idle state. 0: Others..*/ #define SPI_MEM_BROWN_OUT_INT_RAW (BIT(3)) diff --git a/components/soc/esp32s3/include/soc/spi_mem_struct.h b/components/soc/esp32s3/register/soc/spi_mem_struct.h similarity index 98% rename from components/soc/esp32s3/include/soc/spi_mem_struct.h rename to components/soc/esp32s3/register/soc/spi_mem_struct.h index aa6f388653c4..07d352bb184c 100644 --- a/components/soc/esp32s3/include/soc/spi_mem_struct.h +++ b/components/soc/esp32s3/register/soc/spi_mem_struct.h @@ -1,16 +1,8 @@ -// Copyright 2017-2021 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2017-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #ifndef _SOC_SPI_MEM_STRUCT_H_ #define _SOC_SPI_MEM_STRUCT_H_ @@ -551,7 +543,7 @@ typedef volatile struct spi_mem_dev_s { uint32_t per_end_int_raw : 1; /*The raw bit for SPI_MEM_PER_END_INT interrupt. 1: Triggered when Auto Resume command (0x7A) is sent and flash is resumed successfully. 0: Others.*/ uint32_t pes_end_int_raw : 1; /*The raw bit for SPI_MEM_PES_END_INT interrupt.1: Triggered when Auto Suspend command (0x75) is sent and flash is suspended successfully. 0: Others.*/ uint32_t total_trans_end_int_raw : 1; /*The raw bit for SPI_MEM_TOTAL_TRANS_END_INT interrupt. 1: Triggered when SPI1 transfer is done and flash is already idle. When WRSR/PP/SE/BE/CE is sent and PES/PER command is sent, this bit is set when WRSR/PP/SE/BE/CE is success. 0: Others.*/ - uint32_t brown_out_int_raw : 1; /*The raw bit for SPI_MEM_BROWN_OUT_INT interrupt. 1: Triggered condition is that chip is loosing power and RTC module sends out brown out close flash request to SPI1. After SPI1 sends out suspend command to flash, this interrupt is triggered and MSPI returns to idle state. 0: Others.*/ + uint32_t brown_out_int_raw : 1; /*The raw bit for SPI_MEM_BROWN_OUT_INT interrupt. 1: Triggered condition is that chip is losing power and RTC module sends out brown out close flash request to SPI1. After SPI1 sends out suspend command to flash, this interrupt is triggered and MSPI returns to idle state. 0: Others.*/ uint32_t ecc_err_int_raw : 1; /*The raw bit for SPI_MEM_ECC_ERR_INT interrupt. When APB_CTRL_FECC_ERR_INT_EN is set and APB_CTRL_SECC_ERR_INT_EN is cleared, this bit is triggered when the error times of SPI0/1 ECC read flash are equal or bigger than APB_CTRL_ECC_ERR_INT_NUM. When APB_CTRL_FECC_ERR_INT_EN is cleared and APB_CTRL_SECC_ERR_INT_EN is set, this bit is triggered when the error times of SPI0/1 ECC read external RAM are equal or bigger than APB_CTRL_ECC_ERR_INT_NUM. When APB_CTRL_FECC_ERR_INT_EN and APB_CTRL_SECC_ERR_INT_EN are set, this bit is triggered when the total error times of SPI0/1 ECC read external RAM and flash are equal or bigger than APB_CTRL_ECC_ERR_INT_NUM. When APB_CTRL_FECC_ERR_INT_EN and APB_CTRL_SECC_ERR_INT_EN are cleared, this bit will not be triggered.*/ uint32_t reserved5 : 27; /*reserved*/ }; diff --git a/components/soc/esp32s3/include/soc/spi_reg.h b/components/soc/esp32s3/register/soc/spi_reg.h similarity index 98% rename from components/soc/esp32s3/include/soc/spi_reg.h rename to components/soc/esp32s3/register/soc/spi_reg.h index 533158870aef..a58705471249 100644 --- a/components/soc/esp32s3/include/soc/spi_reg.h +++ b/components/soc/esp32s3/register/soc/spi_reg.h @@ -1,21 +1,13 @@ -// Copyright 2017-2021 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2017-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #ifndef _SOC_SPI_REG_H_ #define _SOC_SPI_REG_H_ -#include "soc.h" +#include "soc/soc.h" #ifdef __cplusplus extern "C" { #endif @@ -167,7 +159,7 @@ e, the FSPI bus signals are output. Can be configured in CONF state..*/ #define SPI_CLOCK_REG(i) (REG_SPI_BASE(i) + 0xC) /* SPI_CLK_EQU_SYSCLK : R/W ;bitpos:[31] ;default: 1'b1 ; */ -/*description: In the master mode 1: spi_clk is eqaul to system 0: spi_clk is divided from syst +/*description: In the master mode 1: spi_clk is equal to system 0: spi_clk is divided from syst em clock. Can be configured in CONF state..*/ #define SPI_CLK_EQU_SYSCLK (BIT(31)) #define SPI_CLK_EQU_SYSCLK_M (BIT(31)) @@ -204,15 +196,15 @@ e 0. Can be configured in CONF state..*/ #define SPI_USER_REG(i) (REG_SPI_BASE(i) + 0x10) /* SPI_USR_COMMAND : R/W ;bitpos:[31] ;default: 1'b1 ; */ -/*description: This bit enable the command phase of an operation. Can be configured in CONF sta -te..*/ +/*description: This bit enable the command phase of an operation. Can be configured in CONF +state..*/ #define SPI_USR_COMMAND (BIT(31)) #define SPI_USR_COMMAND_M (BIT(31)) #define SPI_USR_COMMAND_V 0x1 #define SPI_USR_COMMAND_S 31 /* SPI_USR_ADDR : R/W ;bitpos:[30] ;default: 1'b0 ; */ -/*description: This bit enable the address phase of an operation. Can be configured in CONF sta -te..*/ +/*description: This bit enable the address phase of an operation. Can be configured in CONF +state..*/ #define SPI_USR_ADDR (BIT(30)) #define SPI_USR_ADDR_M (BIT(30)) #define SPI_USR_ADDR_V 0x1 @@ -400,7 +392,7 @@ n be configured in CONF state..*/ #define SPI_USR_COMMAND_BITLEN_S 28 /* SPI_MST_REMPTY_ERR_END_EN : R/W ;bitpos:[27] ;default: 1'b1 ; */ /*description: 1: SPI transfer is ended when SPI TX AFIFO read empty error is valid in GP-SPI m -aster FD/HD-mode. 0: SPI transfer is not ended when SPI TX AFIFO read empty erro +aster FD/HD-mode. 0: SPI transfer is not ended when SPI TX AFIFO read empty error r is valid in GP-SPI master FD/HD-mode..*/ #define SPI_MST_REMPTY_ERR_END_EN (BIT(27)) #define SPI_MST_REMPTY_ERR_END_EN_M (BIT(27)) @@ -1121,7 +1113,7 @@ AFIFO read-empty error when SPI outputs data in master mode. 0: Others..*/ #define SPI_SLV_CMD_ERR_INT_RAW_V 0x1 #define SPI_SLV_CMD_ERR_INT_RAW_S 16 /* SPI_SLV_BUF_ADDR_ERR_INT_RAW : R/WTC/SS ;bitpos:[15] ;default: 1'b0 ; */ -/*description: The raw bit for SPI_SLV_BUF_ADDR_ERR_INT interrupt. 1: The accessing data addres +/*description: The raw bit for SPI_SLV_BUF_ADDR_ERR_INT interrupt. 1: The accessing data address s of the current SPI slave mode CPU controlled FD, Wr_BUF or Rd_BUF transmission is bigger than 63. 0: Others..*/ #define SPI_SLV_BUF_ADDR_ERR_INT_RAW (BIT(15)) @@ -1692,7 +1684,7 @@ dge 0: output data at tsck posedge .*/ /* SPI_CLK_MODE : R/W ;bitpos:[1:0] ;default: 2'b0 ; */ /*description: SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delaye d one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inacti -ve 3: SPI clock is alwasy on. Can be configured in CONF state..*/ +ve 3: SPI clock is always on. Can be configured in CONF state..*/ #define SPI_CLK_MODE 0x00000003 #define SPI_CLK_MODE_M ((SPI_CLK_MODE_V)<<(SPI_CLK_MODE_S)) #define SPI_CLK_MODE_V 0x3 diff --git a/components/soc/esp32s3/include/soc/spi_struct.h b/components/soc/esp32s3/register/soc/spi_struct.h similarity index 98% rename from components/soc/esp32s3/include/soc/spi_struct.h rename to components/soc/esp32s3/register/soc/spi_struct.h index 2a3abd257c17..e9d62932e2b5 100644 --- a/components/soc/esp32s3/include/soc/spi_struct.h +++ b/components/soc/esp32s3/register/soc/spi_struct.h @@ -1,16 +1,8 @@ -// Copyright 2017-2021 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2017-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #ifndef _SOC_SPI_STRUCT_H_ #define _SOC_SPI_STRUCT_H_ @@ -66,7 +58,7 @@ typedef volatile struct spi_dev_s { uint32_t clkcnt_n : 6; /*In the master mode it is the divider of spi_clk. So spi_clk frequency is system/(spi_clkdiv_pre+1)/(spi_clkcnt_N+1). Can be configured in CONF state.*/ uint32_t clkdiv_pre : 4; /*In the master mode it is pre-divider of spi_clk. Can be configured in CONF state.*/ uint32_t reserved22 : 9; /*reserved*/ - uint32_t clk_equ_sysclk : 1; /*In the master mode 1: spi_clk is eqaul to system 0: spi_clk is divided from system clock. Can be configured in CONF state.*/ + uint32_t clk_equ_sysclk : 1; /*In the master mode 1: spi_clk is equal to system 0: spi_clk is divided from system clock. Can be configured in CONF state.*/ }; uint32_t val; } clock; @@ -374,7 +366,7 @@ typedef volatile struct spi_dev_s { uint32_t reserved_dc; union { struct { - uint32_t clk_mode : 2; /*SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delayed one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3: SPI clock is alwasy on. Can be configured in CONF state.*/ + uint32_t clk_mode : 2; /*SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delayed one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3: SPI clock is always on. Can be configured in CONF state.*/ uint32_t clk_mode_13 : 1; /*{CPOL, CPHA},1: support spi clk mode 1 and 3, first edge output data B[0]/B[7]. 0: support spi clk mode 0 and 2, first edge output data B[1]/B[6].*/ uint32_t rsck_data_out : 1; /*It saves half a cycle when tsck is the same as rsck. 1: output data at rsck posedge 0: output data at tsck posedge */ uint32_t reserved4 : 4; /*reserved*/ diff --git a/components/soc/esp32s3/include/soc/syscon_reg.h b/components/soc/esp32s3/register/soc/syscon_reg.h similarity index 99% rename from components/soc/esp32s3/include/soc/syscon_reg.h rename to components/soc/esp32s3/register/soc/syscon_reg.h index e22f18c92ee5..75a58fcdb521 100644 --- a/components/soc/esp32s3/include/soc/syscon_reg.h +++ b/components/soc/esp32s3/register/soc/syscon_reg.h @@ -7,7 +7,7 @@ #define _SOC_SYSCON_REG_H_ -#include "soc.h" +#include "soc/soc.h" #ifdef __cplusplus extern "C" { #endif @@ -210,7 +210,7 @@ extern "C" { #define SYSTEM_MACPWR_RST BIT(8) #define SYSTEM_RW_BTMAC_RST BIT(9) /* Bluetooth MAC */ #define SYSTEM_RW_BTLP_RST BIT(10) /* Bluetooth Low Power Module */ -#define SYSTEM_RW_BTMAC_REG_RST BIT(11) /* Bluetooth MAC Regsiters */ +#define SYSTEM_RW_BTMAC_REG_RST BIT(11) /* Bluetooth MAC Registers */ #define SYSTEM_RW_BTLP_REG_RST BIT(12) /* Bluetooth Low Power Registers */ #define SYSTEM_BTBB_REG_RST BIT(13) /* Bluetooth Baseband Registers */ diff --git a/components/soc/esp32s3/include/soc/syscon_struct.h b/components/soc/esp32s3/register/soc/syscon_struct.h similarity index 96% rename from components/soc/esp32s3/include/soc/syscon_struct.h rename to components/soc/esp32s3/register/soc/syscon_struct.h index a392939e4226..e01c71534973 100644 --- a/components/soc/esp32s3/include/soc/syscon_struct.h +++ b/components/soc/esp32s3/register/soc/syscon_struct.h @@ -1,16 +1,8 @@ -// Copyright 2017-2021 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2017-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #ifndef _SOC_SYSCON_STRUCT_H_ #define _SOC_SYSCON_STRUCT_H_ diff --git a/components/soc/esp32s3/include/soc/system_reg.h b/components/soc/esp32s3/register/soc/system_reg.h similarity index 98% rename from components/soc/esp32s3/include/soc/system_reg.h rename to components/soc/esp32s3/register/soc/system_reg.h index 49a02b007eb0..736e90a84a45 100644 --- a/components/soc/esp32s3/include/soc/system_reg.h +++ b/components/soc/esp32s3/register/soc/system_reg.h @@ -1,21 +1,13 @@ -// Copyright 2017-2021 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2017-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #ifndef _SOC_SYSTEM_REG_H_ #define _SOC_SYSTEM_REG_H_ -#include "soc.h" +#include "soc/soc.h" #ifdef __cplusplus extern "C" { #endif diff --git a/components/soc/esp32s3/include/soc/system_struct.h b/components/soc/esp32s3/register/soc/system_struct.h similarity index 98% rename from components/soc/esp32s3/include/soc/system_struct.h rename to components/soc/esp32s3/register/soc/system_struct.h index 6c4ce1f11824..b0e5f2a712e3 100644 --- a/components/soc/esp32s3/include/soc/system_struct.h +++ b/components/soc/esp32s3/register/soc/system_struct.h @@ -1,16 +1,8 @@ -// Copyright 2017-2021 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2017-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #ifndef _SOC_SYSTEM_STRUCT_H_ #define _SOC_SYSTEM_STRUCT_H_ diff --git a/components/soc/esp32s3/include/soc/systimer_reg.h b/components/soc/esp32s3/register/soc/systimer_reg.h similarity index 97% rename from components/soc/esp32s3/include/soc/systimer_reg.h rename to components/soc/esp32s3/register/soc/systimer_reg.h index 869012065b04..45873735b429 100644 --- a/components/soc/esp32s3/include/soc/systimer_reg.h +++ b/components/soc/esp32s3/register/soc/systimer_reg.h @@ -1,16 +1,7 @@ -/** Copyright 2021 Espressif Systems (Shanghai) PTE LTD +/* + * SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/components/soc/esp32s3/include/soc/systimer_struct.h b/components/soc/esp32s3/register/soc/systimer_struct.h similarity index 94% rename from components/soc/esp32s3/include/soc/systimer_struct.h rename to components/soc/esp32s3/register/soc/systimer_struct.h index a28ef359f167..4216561c3c28 100644 --- a/components/soc/esp32s3/include/soc/systimer_struct.h +++ b/components/soc/esp32s3/register/soc/systimer_struct.h @@ -1,16 +1,7 @@ -/** Copyright 2021 Espressif Systems (Shanghai) PTE LTD +/* + * SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/components/soc/esp32s3/include/soc/timer_group_reg.h b/components/soc/esp32s3/register/soc/timer_group_reg.h similarity index 97% rename from components/soc/esp32s3/include/soc/timer_group_reg.h rename to components/soc/esp32s3/register/soc/timer_group_reg.h index 7252d2506735..e712afc168f0 100644 --- a/components/soc/esp32s3/include/soc/timer_group_reg.h +++ b/components/soc/esp32s3/register/soc/timer_group_reg.h @@ -1,16 +1,7 @@ -/** Copyright 2021 Espressif Systems (Shanghai) PTE LTD +/* + * SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/components/soc/esp32s3/include/soc/timer_group_struct.h b/components/soc/esp32s3/register/soc/timer_group_struct.h similarity index 100% rename from components/soc/esp32s3/include/soc/timer_group_struct.h rename to components/soc/esp32s3/register/soc/timer_group_struct.h diff --git a/components/soc/esp32s3/include/soc/twai_struct.h b/components/soc/esp32s3/register/soc/twai_struct.h similarity index 100% rename from components/soc/esp32s3/include/soc/twai_struct.h rename to components/soc/esp32s3/register/soc/twai_struct.h diff --git a/components/soc/esp32s3/include/soc/uart_reg.h b/components/soc/esp32s3/register/soc/uart_reg.h similarity index 98% rename from components/soc/esp32s3/include/soc/uart_reg.h rename to components/soc/esp32s3/register/soc/uart_reg.h index 73c2d80b9d8b..ecae7cb64629 100644 --- a/components/soc/esp32s3/include/soc/uart_reg.h +++ b/components/soc/esp32s3/register/soc/uart_reg.h @@ -1,16 +1,7 @@ -/** Copyright 2021 Espressif Systems (Shanghai) PTE LTD +/* + * SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once @@ -109,7 +100,7 @@ extern "C" { #define UART_RXFIFO_TOUT_INT_RAW_V 0x00000001U #define UART_RXFIFO_TOUT_INT_RAW_S 8 /** UART_SW_XON_INT_RAW : R/WTC/SS; bitpos: [9]; default: 0; - * This interrupt raw bit turns to high level when receiver recevies Xon char when + * This interrupt raw bit turns to high level when receiver receives Xon char when * uart_sw_flow_con_en is set to 1. */ #define UART_SW_XON_INT_RAW (BIT(9)) @@ -294,7 +285,7 @@ extern "C" { #define UART_TX_BRK_DONE_INT_ST_V 0x00000001U #define UART_TX_BRK_DONE_INT_ST_S 12 /** UART_TX_BRK_IDLE_DONE_INT_ST : RO; bitpos: [13]; default: 0; - * This is the stauts bit for tx_brk_idle_done_int_raw when tx_brk_idle_done_int_ena + * This is the status bit for tx_brk_idle_done_int_raw when tx_brk_idle_done_int_ena * is set to 1. */ #define UART_TX_BRK_IDLE_DONE_INT_ST (BIT(13)) @@ -785,7 +776,7 @@ extern "C" { #define UART_SW_DTR_V 0x00000001U #define UART_SW_DTR_S 7 /** UART_TXD_BRK : R/W; bitpos: [8]; default: 0; - * Set this bit to enbale transmitter to send NULL when the process of sending data + * Set this bit to enable transmitter to send NULL when the process of sending data * is done. */ #define UART_TXD_BRK (BIT(8)) @@ -978,7 +969,7 @@ extern "C" { #define UART_RX_FLOW_EN_V 0x00000001U #define UART_RX_FLOW_EN_S 22 /** UART_RX_TOUT_EN : R/W; bitpos: [23]; default: 0; - * This is the enble bit for uart receiver's timeout function. + * This is the enable bit for uart receiver's timeout function. */ #define UART_RX_TOUT_EN (BIT(23)) #define UART_RX_TOUT_EN_M (UART_RX_TOUT_EN_V << UART_RX_TOUT_EN_S) @@ -1003,7 +994,7 @@ extern "C" { */ #define UART_HIGHPULSE_REG(i) (REG_UART_BASE(i) + 0x2c) /** UART_HIGHPULSE_MIN_CNT : RO; bitpos: [11:0]; default: 4095; - * This register stores the value of the maxinum duration time for the high level + * This register stores the value of the maximum duration time for the high level * pulse. It is used in baud rate-detect process. */ #define UART_HIGHPULSE_MIN_CNT 0x00000FFFU diff --git a/components/soc/esp32s3/include/soc/uart_struct.h b/components/soc/esp32s3/register/soc/uart_struct.h similarity index 97% rename from components/soc/esp32s3/include/soc/uart_struct.h rename to components/soc/esp32s3/register/soc/uart_struct.h index 23d6d15450e1..a5e7dc12e00b 100644 --- a/components/soc/esp32s3/include/soc/uart_struct.h +++ b/components/soc/esp32s3/register/soc/uart_struct.h @@ -1,16 +1,7 @@ -/** Copyright 2021 Espressif Systems (Shanghai) PTE LTD +/* + * SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once @@ -129,7 +120,7 @@ typedef union { */ uint32_t rxfifo_tout_int_raw:1; /** sw_xon_int_raw : R/WTC/SS; bitpos: [9]; default: 0; - * This interrupt raw bit turns to high level when receiver recevies Xon char when + * This interrupt raw bit turns to high level when receiver receives Xon char when * uart_sw_flow_con_en is set to 1. */ uint32_t sw_xon_int_raw:1; @@ -247,7 +238,7 @@ typedef union { */ uint32_t tx_brk_done_int_st:1; /** tx_brk_idle_done_int_st : RO; bitpos: [13]; default: 0; - * This is the stauts bit for tx_brk_idle_done_int_raw when tx_brk_idle_done_int_ena + * This is the status bit for tx_brk_idle_done_int_raw when tx_brk_idle_done_int_ena * is set to 1. */ uint32_t tx_brk_idle_done_int_st:1; @@ -534,7 +525,7 @@ typedef union { */ uint32_t sw_dtr:1; /** txd_brk : R/W; bitpos: [8]; default: 0; - * Set this bit to enbale transmitter to send NULL when the process of sending data + * Set this bit to enable transmitter to send NULL when the process of sending data * is done. */ uint32_t txd_brk:1; @@ -654,7 +645,7 @@ typedef union { */ uint32_t rx_flow_en:1; /** rx_tout_en : R/W; bitpos: [23]; default: 0; - * This is the enble bit for uart receiver's timeout function. + * This is the enable bit for uart receiver's timeout function. */ uint32_t rx_tout_en:1; uint32_t reserved_24:8; @@ -1001,7 +992,7 @@ typedef union { typedef union { struct { /** highpulse_min_cnt : RO; bitpos: [11:0]; default: 4095; - * This register stores the value of the maxinum duration time for the high level + * This register stores the value of the maximum duration time for the high level * pulse. It is used in baud rate-detect process. */ uint32_t highpulse_min_cnt:12; diff --git a/components/soc/esp32s3/include/soc/uhci_reg.h b/components/soc/esp32s3/register/soc/uhci_reg.h similarity index 97% rename from components/soc/esp32s3/include/soc/uhci_reg.h rename to components/soc/esp32s3/register/soc/uhci_reg.h index 280bafd55c71..19fefc9f35ea 100644 --- a/components/soc/esp32s3/include/soc/uhci_reg.h +++ b/components/soc/esp32s3/register/soc/uhci_reg.h @@ -1,21 +1,13 @@ -// Copyright 2017-2021 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2017-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #ifndef _SOC_UHCI_REG_H_ #define _SOC_UHCI_REG_H_ -#include "soc.h" +#include "soc/soc.h" #ifdef __cplusplus extern "C" { #endif diff --git a/components/soc/esp32s3/include/soc/uhci_struct.h b/components/soc/esp32s3/register/soc/uhci_struct.h similarity index 100% rename from components/soc/esp32s3/include/soc/uhci_struct.h rename to components/soc/esp32s3/register/soc/uhci_struct.h diff --git a/components/soc/esp32s3/include/soc/usb_reg.h b/components/soc/esp32s3/register/soc/usb_reg.h similarity index 99% rename from components/soc/esp32s3/include/soc/usb_reg.h rename to components/soc/esp32s3/register/soc/usb_reg.h index 90bc61d71ac6..d98ebf419b65 100644 --- a/components/soc/esp32s3/include/soc/usb_reg.h +++ b/components/soc/esp32s3/register/soc/usb_reg.h @@ -8,7 +8,7 @@ #include #include "soc/soc.h" -#include "soc.h" +#include "soc/soc.h" #ifdef __cplusplus extern "C" { #endif @@ -608,7 +608,7 @@ extern "C" { #define USB_H_LSPDDEV0_V 0x00000001 #define USB_H_LSPDDEV0_S 17 /** USB_H_EPTYPE0 : R/W; bitpos: [20:18]; default: 0; - * 0x0 (CTRL): Contro + * 0x0 (CTRL): Control * 0x1 (ISOC): Isochronous * 0x2 (BULK): Bulk * 0x3 (INTERR): Interrupt @@ -647,7 +647,7 @@ extern "C" { #define USB_H_ODDFRM0_S 29 /** USB_H_CHDIS0 : R/W; bitpos: [30]; default: 0; * Channel Disable - * 0x0 : Transmit/Recieve norma + * 0x0 : Transmit/Receive norma * 0x1 : Stop transmitting/receiving data on channel */ #define USB_H_CHDIS0 (BIT(30)) @@ -720,7 +720,7 @@ extern "C" { #define USB_H_LSPDDEV1_V 0x00000001 #define USB_H_LSPDDEV1_S 17 /** USB_H_EPTYPE1 : R/W; bitpos: [20:18]; default: 0; - * 0x0 (CTRL): Contro + * 0x0 (CTRL): Control * 0x1 (ISOC): Isochronous * 0x2 (BULK): Bulk * 0x3 (INTERR): Interrupt @@ -759,7 +759,7 @@ extern "C" { #define USB_H_ODDFRM1_S 29 /** USB_H_CHDIS1 : R/W; bitpos: [30]; default: 0; * Channel Disable - * 0x0 : Transmit/Recieve norma + * 0x0 : Transmit/Receive norma * 0x1 : Stop transmitting/receiving data on channel */ #define USB_H_CHDIS1 (BIT(30)) @@ -832,7 +832,7 @@ extern "C" { #define USB_H_LSPDDEV2_V 0x00000001 #define USB_H_LSPDDEV2_S 17 /** USB_H_EPTYPE2 : R/W; bitpos: [20:18]; default: 0; - * 0x0 (CTRL): Contro + * 0x0 (CTRL): Control * 0x1 (ISOC): Isochronous * 0x2 (BULK): Bulk * 0x3 (INTERR): Interrupt @@ -871,7 +871,7 @@ extern "C" { #define USB_H_ODDFRM2_S 29 /** USB_H_CHDIS2 : R/W; bitpos: [30]; default: 0; * Channel Disable - * 0x0 : Transmit/Recieve norma + * 0x0 : Transmit/Receive norma * 0x1 : Stop transmitting/receiving data on channel */ #define USB_H_CHDIS2 (BIT(30)) @@ -944,7 +944,7 @@ extern "C" { #define USB_H_LSPDDEV3_V 0x00000001 #define USB_H_LSPDDEV3_S 17 /** USB_H_EPTYPE3 : R/W; bitpos: [20:18]; default: 0; - * 0x0 (CTRL): Contro + * 0x0 (CTRL): Control * 0x1 (ISOC): Isochronous * 0x2 (BULK): Bulk * 0x3 (INTERR): Interrupt @@ -983,7 +983,7 @@ extern "C" { #define USB_H_ODDFRM3_S 29 /** USB_H_CHDIS3 : R/W; bitpos: [30]; default: 0; * Channel Disable - * 0x0 : Transmit/Recieve norma + * 0x0 : Transmit/Receive norma * 0x1 : Stop transmitting/receiving data on channel */ #define USB_H_CHDIS3 (BIT(30)) @@ -1056,7 +1056,7 @@ extern "C" { #define USB_H_LSPDDEV4_V 0x00000001 #define USB_H_LSPDDEV4_S 17 /** USB_H_EPTYPE4 : R/W; bitpos: [20:18]; default: 0; - * 0x0 (CTRL): Contro + * 0x0 (CTRL): Control * 0x1 (ISOC): Isochronous * 0x2 (BULK): Bulk * 0x3 (INTERR): Interrupt @@ -1095,7 +1095,7 @@ extern "C" { #define USB_H_ODDFRM4_S 29 /** USB_H_CHDIS4 : R/W; bitpos: [30]; default: 0; * Channel Disable - * 0x0 : Transmit/Recieve norma + * 0x0 : Transmit/Receive norma * 0x1 : Stop transmitting/receiving data on channel */ #define USB_H_CHDIS4 (BIT(30)) @@ -1168,7 +1168,7 @@ extern "C" { #define USB_H_LSPDDEV5_V 0x00000001 #define USB_H_LSPDDEV5_S 17 /** USB_H_EPTYPE5 : R/W; bitpos: [20:18]; default: 0; - * 0x0 (CTRL): Contro + * 0x0 (CTRL): Control * 0x1 (ISOC): Isochronous * 0x2 (BULK): Bulk * 0x3 (INTERR): Interrupt @@ -1207,7 +1207,7 @@ extern "C" { #define USB_H_ODDFRM5_S 29 /** USB_H_CHDIS5 : R/W; bitpos: [30]; default: 0; * Channel Disable - * 0x0 : Transmit/Recieve norma + * 0x0 : Transmit/Receive norma * 0x1 : Stop transmitting/receiving data on channel */ #define USB_H_CHDIS5 (BIT(30)) @@ -1280,7 +1280,7 @@ extern "C" { #define USB_H_LSPDDEV6_V 0x00000001 #define USB_H_LSPDDEV6_S 17 /** USB_H_EPTYPE6 : R/W; bitpos: [20:18]; default: 0; - * 0x0 (CTRL): Contro + * 0x0 (CTRL): Control * 0x1 (ISOC): Isochronous * 0x2 (BULK): Bulk * 0x3 (INTERR): Interrupt @@ -1319,7 +1319,7 @@ extern "C" { #define USB_H_ODDFRM6_S 29 /** USB_H_CHDIS6 : R/W; bitpos: [30]; default: 0; * Channel Disable - * 0x0 : Transmit/Recieve norma + * 0x0 : Transmit/Receive norma * 0x1 : Stop transmitting/receiving data on channel */ #define USB_H_CHDIS6 (BIT(30)) @@ -1392,7 +1392,7 @@ extern "C" { #define USB_H_LSPDDEV7_V 0x00000001 #define USB_H_LSPDDEV7_S 17 /** USB_H_EPTYPE7 : R/W; bitpos: [20:18]; default: 0; - * 0x0 (CTRL): Contro + * 0x0 (CTRL): Control * 0x1 (ISOC): Isochronous * 0x2 (BULK): Bulk * 0x3 (INTERR): Interrupt @@ -1431,7 +1431,7 @@ extern "C" { #define USB_H_ODDFRM7_S 29 /** USB_H_CHDIS7 : R/W; bitpos: [30]; default: 0; * Channel Disable - * 0x0 : Transmit/Recieve norma + * 0x0 : Transmit/Receive norma * 0x1 : Stop transmitting/receiving data on channel */ #define USB_H_CHDIS7 (BIT(30)) @@ -1476,7 +1476,7 @@ extern "C" { /** USB_NZSTSOUTHSHK : R/W; bitpos: [2]; default: 0; * 1'b0: Send the received OUT packet to the application (zero-length or non-zero * length) and send a handshake based on NAK and STALL bits for the endpoint in the - * Devce Endpoint Control Register + * Device Endpoint Control Register * 1'b1: Send a STALL handshake on a nonzero-length status OUT transaction and do not * send the received OUT packet to the application */ @@ -1488,7 +1488,7 @@ extern "C" { * This bit can be set only if FS PHY interface is selected. * Otherwise, this bit needs to be set to zero. * 1'b0: USB 1.1 Full-Speed Serial transiver not selected - * 1'b1: If FS PHY interface is choosen and this bit is set, the PHY clock during Suspend + * 1'b1: If FS PHY interface is chosen and this bit is set, the PHY clock during Suspend * must be switched from 48 MHz to 32 KHz */ #define USB_ENA32KHZSUSP (BIT(3)) @@ -1580,7 +1580,7 @@ extern "C" { #define USB_DCTL_REG (SOC_DPORT_USB_BASE + 0x804) /** USB_RMTWKUPSIG : R/W; bitpos: [0]; default: 0; * 0x0 : Core does not send Remote Wakeup Signaling - * 0x1 : Core sends Remote Wakeup Signalin + * 0x1 : Core sends Remote Wakeup Signaling */ #define USB_RMTWKUPSIG (BIT(0)) #define USB_RMTWKUPSIG_M (USB_RMTWKUPSIG_V << USB_RMTWKUPSIG_S) @@ -4729,7 +4729,7 @@ extern "C" { #define USB_H_NACK0_S 4 /** USB_H_ACK0 : R/W1C; bitpos: [5]; default: 0; * 1'b0: No ACK Response Received or Transmitted Interrupt - * 1'b1: ACK Response Received or Transmitted Interrup + * 1'b1: ACK Response Received or Transmitted Interrupt */ #define USB_H_ACK0 (BIT(5)) #define USB_H_ACK0_M (USB_H_ACK0_V << USB_H_ACK0_S) @@ -4965,7 +4965,7 @@ extern "C" { #define USB_H_NACK1_S 4 /** USB_H_ACK1 : R/W1C; bitpos: [5]; default: 0; * 1'b0: No ACK Response Received or Transmitted Interrupt - * 1'b1: ACK Response Received or Transmitted Interrup + * 1'b1: ACK Response Received or Transmitted Interrupt */ #define USB_H_ACK1 (BIT(5)) #define USB_H_ACK1_M (USB_H_ACK1_V << USB_H_ACK1_S) @@ -5201,7 +5201,7 @@ extern "C" { #define USB_H_NACK2_S 4 /** USB_H_ACK2 : R/W1C; bitpos: [5]; default: 0; * 1'b0: No ACK Response Received or Transmitted Interrupt - * 1'b1: ACK Response Received or Transmitted Interrup + * 1'b1: ACK Response Received or Transmitted Interrupt */ #define USB_H_ACK2 (BIT(5)) #define USB_H_ACK2_M (USB_H_ACK2_V << USB_H_ACK2_S) @@ -5437,7 +5437,7 @@ extern "C" { #define USB_H_NACK3_S 4 /** USB_H_ACK3 : R/W1C; bitpos: [5]; default: 0; * 1'b0: No ACK Response Received or Transmitted Interrupt - * 1'b1: ACK Response Received or Transmitted Interrup + * 1'b1: ACK Response Received or Transmitted Interrupt */ #define USB_H_ACK3 (BIT(5)) #define USB_H_ACK3_M (USB_H_ACK3_V << USB_H_ACK3_S) @@ -5673,7 +5673,7 @@ extern "C" { #define USB_H_NACK4_S 4 /** USB_H_ACK4 : R/W1C; bitpos: [5]; default: 0; * 1'b0: No ACK Response Received or Transmitted Interrupt - * 1'b1: ACK Response Received or Transmitted Interrup + * 1'b1: ACK Response Received or Transmitted Interrupt */ #define USB_H_ACK4 (BIT(5)) #define USB_H_ACK4_M (USB_H_ACK4_V << USB_H_ACK4_S) @@ -5909,7 +5909,7 @@ extern "C" { #define USB_H_NACK5_S 4 /** USB_H_ACK5 : R/W1C; bitpos: [5]; default: 0; * 1'b0: No ACK Response Received or Transmitted Interrupt - * 1'b1: ACK Response Received or Transmitted Interrup + * 1'b1: ACK Response Received or Transmitted Interrupt */ #define USB_H_ACK5 (BIT(5)) #define USB_H_ACK5_M (USB_H_ACK5_V << USB_H_ACK5_S) @@ -6145,7 +6145,7 @@ extern "C" { #define USB_H_NACK6_S 4 /** USB_H_ACK6 : R/W1C; bitpos: [5]; default: 0; * 1'b0: No ACK Response Received or Transmitted Interrupt - * 1'b1: ACK Response Received or Transmitted Interrup + * 1'b1: ACK Response Received or Transmitted Interrupt */ #define USB_H_ACK6 (BIT(5)) #define USB_H_ACK6_M (USB_H_ACK6_V << USB_H_ACK6_S) @@ -6381,7 +6381,7 @@ extern "C" { #define USB_H_NACK7_S 4 /** USB_H_ACK7 : R/W1C; bitpos: [5]; default: 0; * 1'b0: No ACK Response Received or Transmitted Interrupt - * 1'b1: ACK Response Received or Transmitted Interrup + * 1'b1: ACK Response Received or Transmitted Interrupt */ #define USB_H_ACK7 (BIT(5)) #define USB_H_ACK7_M (USB_H_ACK7_V << USB_H_ACK7_S) @@ -8915,9 +8915,9 @@ extern "C" { #define USB_AHBSINGLE_V 0x00000001 #define USB_AHBSINGLE_S 23 /** USB_INVDESCENDIANESS : R/W; bitpos: [24]; default: 0; - * Invert Descriptor Endianess + * Invert Descriptor Endianness * 1'b0: Descriptor Endianness is same as AHB Master Endianness - * 1'b1:Invert Descriptor Endianess according to AHB Master endianness + * 1'b1:Invert Descriptor Endianness according to AHB Master endianness */ #define USB_INVDESCENDIANESS (BIT(24)) #define USB_INVDESCENDIANESS_M (USB_INVDESCENDIANESS_V << USB_INVDESCENDIANESS_S) @@ -9678,7 +9678,7 @@ extern "C" { /** USB_GSNPSID_REG register - * Synopsys ID Register + * ID Register */ #define USB_GSNPSID_REG (SOC_DPORT_USB_BASE + 0x40) /** USB_SYNOPSYSID : RO; bitpos: [32:0]; default: 1330921482; diff --git a/components/soc/esp32s3/include/soc/usb_serial_jtag_reg.h b/components/soc/esp32s3/register/soc/usb_serial_jtag_reg.h similarity index 99% rename from components/soc/esp32s3/include/soc/usb_serial_jtag_reg.h rename to components/soc/esp32s3/register/soc/usb_serial_jtag_reg.h index 5774f2d711ae..2338bc6a4de4 100644 --- a/components/soc/esp32s3/include/soc/usb_serial_jtag_reg.h +++ b/components/soc/esp32s3/register/soc/usb_serial_jtag_reg.h @@ -9,7 +9,7 @@ #ifdef __cplusplus extern "C" { #endif -#include "soc.h" +#include "soc/soc.h" #define USB_SERIAL_JTAG_EP1_REG (DR_REG_USB_SERIAL_JTAG_BASE + 0x0) /* USB_SERIAL_JTAG_RDWR_BYTE : R/W ;bitpos:[7:0] ;default: 8'h0 ; */ @@ -31,8 +31,8 @@ ived, then read data from UART Rx FIFO..*/ #define USB_SERIAL_JTAG_SERIAL_OUT_EP_DATA_AVAIL_V 0x1 #define USB_SERIAL_JTAG_SERIAL_OUT_EP_DATA_AVAIL_S 2 /* USB_SERIAL_JTAG_SERIAL_IN_EP_DATA_FREE : RO ;bitpos:[1] ;default: 1'b1 ; */ -/*description: 1'b1: Indicate UART Tx FIFO is not full and can write data into in. After writin -g USB_SERIAL_JTAG_WR_DONE, this bit would be 0 until data in UART Tx FIFO is read by +/*description: 1'b1: Indicate UART Tx FIFO is not full and can write data into in. After +writing USB_SERIAL_JTAG_WR_DONE, this bit would be 0 until data in UART Tx FIFO is read by USB Host..*/ #define USB_SERIAL_JTAG_SERIAL_IN_EP_DATA_FREE (BIT(1)) #define USB_SERIAL_JTAG_SERIAL_IN_EP_DATA_FREE_M (BIT(1)) @@ -117,8 +117,8 @@ eived..*/ #define USB_SERIAL_JTAG_SOF_INT_RAW_V 0x1 #define USB_SERIAL_JTAG_SOF_INT_RAW_S 1 /* USB_SERIAL_JTAG_JTAG_IN_FLUSH_INT_RAW : R/WTC/SS ;bitpos:[0] ;default: 1'b0 ; */ -/*description: The raw interrupt bit turns to high level when flush cmd is received for IN endp -oint 2 of JTAG..*/ +/*description: The raw interrupt bit turns to high level when flush cmd is received for IN +endpoint 2 of JTAG..*/ #define USB_SERIAL_JTAG_JTAG_IN_FLUSH_INT_RAW (BIT(0)) #define USB_SERIAL_JTAG_JTAG_IN_FLUSH_INT_RAW_M (BIT(0)) #define USB_SERIAL_JTAG_JTAG_IN_FLUSH_INT_RAW_V 0x1 @@ -146,7 +146,7 @@ pt..*/ #define USB_SERIAL_JTAG_USB_BUS_RESET_INT_ST_V 0x1 #define USB_SERIAL_JTAG_USB_BUS_RESET_INT_ST_S 9 /* USB_SERIAL_JTAG_IN_TOKEN_REC_IN_EP1_INT_ST : RO ;bitpos:[8] ;default: 1'b0 ; */ -/*description: The raw interrupt status bit for the USB_SERIAL_JTAG_IN_TOKEN_REC_IN_EP1_INT interrup +/*description: The raw interrupt status bit for the USB_SERIAL_JTAG_IN_TOKEN_REC_IN_EP1_INT interrupt t..*/ #define USB_SERIAL_JTAG_IN_TOKEN_REC_IN_EP1_INT_ST (BIT(8)) #define USB_SERIAL_JTAG_IN_TOKEN_REC_IN_EP1_INT_ST_M (BIT(8)) @@ -183,7 +183,7 @@ t..*/ #define USB_SERIAL_JTAG_SERIAL_IN_EMPTY_INT_ST_V 0x1 #define USB_SERIAL_JTAG_SERIAL_IN_EMPTY_INT_ST_S 3 /* USB_SERIAL_JTAG_SERIAL_OUT_RECV_PKT_INT_ST : RO ;bitpos:[2] ;default: 1'b0 ; */ -/*description: The raw interrupt status bit for the USB_SERIAL_JTAG_SERIAL_OUT_RECV_PKT_INT interrup +/*description: The raw interrupt status bit for the USB_SERIAL_JTAG_SERIAL_OUT_RECV_PKT_INT interrupt t..*/ #define USB_SERIAL_JTAG_SERIAL_OUT_RECV_PKT_INT_ST (BIT(2)) #define USB_SERIAL_JTAG_SERIAL_OUT_RECV_PKT_INT_ST_M (BIT(2)) diff --git a/components/soc/esp32s3/include/soc/usb_serial_jtag_struct.h b/components/soc/esp32s3/register/soc/usb_serial_jtag_struct.h similarity index 96% rename from components/soc/esp32s3/include/soc/usb_serial_jtag_struct.h rename to components/soc/esp32s3/register/soc/usb_serial_jtag_struct.h index 539717f267b6..aeb3bb47caa2 100644 --- a/components/soc/esp32s3/include/soc/usb_serial_jtag_struct.h +++ b/components/soc/esp32s3/register/soc/usb_serial_jtag_struct.h @@ -1,16 +1,8 @@ -// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2017-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #ifndef _SOC_USB_SERIAL_JTAG_STRUCT_H_ #define _SOC_USB_SERIAL_JTAG_STRUCT_H_ @@ -18,7 +10,7 @@ #ifdef __cplusplus extern "C" { #endif -#include "soc.h" +#include "soc/soc.h" typedef volatile struct usb_serial_jtag_dev_s { union { diff --git a/components/soc/esp32s3/include/soc/usb_struct.h b/components/soc/esp32s3/register/soc/usb_struct.h similarity index 98% rename from components/soc/esp32s3/include/soc/usb_struct.h rename to components/soc/esp32s3/register/soc/usb_struct.h index 697c79e416fc..a07aa34f533c 100644 --- a/components/soc/esp32s3/include/soc/usb_struct.h +++ b/components/soc/esp32s3/register/soc/usb_struct.h @@ -50,7 +50,7 @@ typedef struct usb_reg { volatile uint32_t gnptxfsiz; // 0x0028 Non-periodic Transmit FIFO Size Register volatile uint32_t gnptxsts; // 0x002c Non-periodic Transmit FIFO/Queue Status Register uint32_t reserved_0x0030_0x0040[4]; // 0x0030 to 0x0040 - volatile uint32_t gsnpsid; // 0x0040 Synopsys ID Register + volatile uint32_t gsnpsid; // 0x0040 ID Register volatile uint32_t ghwcfg1; // 0x0044 User Hardware Configuration 1 Register volatile uint32_t ghwcfg2; // 0x0048 User Hardware Configuration 2 Register volatile uint32_t ghwcfg3; // 0x004c User Hardware Configuration 3 Register diff --git a/components/soc/esp32s3/include/soc/usb_wrap_reg.h b/components/soc/esp32s3/register/soc/usb_wrap_reg.h similarity index 93% rename from components/soc/esp32s3/include/soc/usb_wrap_reg.h rename to components/soc/esp32s3/register/soc/usb_wrap_reg.h index 45502289cdfa..9b8ea950a240 100644 --- a/components/soc/esp32s3/include/soc/usb_wrap_reg.h +++ b/components/soc/esp32s3/register/soc/usb_wrap_reg.h @@ -1,21 +1,13 @@ -// Copyright 2017-2021 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2017-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #ifndef _SOC_USB_WRAP_REG_H_ #define _SOC_USB_WRAP_REG_H_ -#include "soc.h" +#include "soc/soc.h" #ifdef __cplusplus extern "C" { #endif diff --git a/components/soc/esp32s3/include/soc/usb_wrap_struct.h b/components/soc/esp32s3/register/soc/usb_wrap_struct.h similarity index 95% rename from components/soc/esp32s3/include/soc/usb_wrap_struct.h rename to components/soc/esp32s3/register/soc/usb_wrap_struct.h index 71013fe25f7b..9f440d17e9aa 100644 --- a/components/soc/esp32s3/include/soc/usb_wrap_struct.h +++ b/components/soc/esp32s3/register/soc/usb_wrap_struct.h @@ -1,16 +1,7 @@ -/** Copyright 2020 Espressif Systems (Shanghai) PTE LTD +/* + * SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/components/soc/esp32s3/include/soc/world_controller_reg.h b/components/soc/esp32s3/register/soc/world_controller_reg.h similarity index 100% rename from components/soc/esp32s3/include/soc/world_controller_reg.h rename to components/soc/esp32s3/register/soc/world_controller_reg.h diff --git a/components/soc/esp32s3/include/soc/world_controller_struct.h b/components/soc/esp32s3/register/soc/world_controller_struct.h similarity index 100% rename from components/soc/esp32s3/include/soc/world_controller_struct.h rename to components/soc/esp32s3/register/soc/world_controller_struct.h diff --git a/tools/ci/check_copyright_ignore.txt b/tools/ci/check_copyright_ignore.txt index f605b7cd0543..d90fd8540bcd 100644 --- a/tools/ci/check_copyright_ignore.txt +++ b/tools/ci/check_copyright_ignore.txt @@ -565,60 +565,7 @@ components/soc/esp32s2/include/soc/touch_sensor_pins.h components/soc/esp32s2/include/soc/uart_pins.h components/soc/esp32s2/include/soc/wdev_reg.h components/soc/esp32s2/ledc_periph.c -components/soc/esp32s3/include/soc/apb_saradc_reg.h -components/soc/esp32s3/include/soc/assist_debug_reg.h -components/soc/esp32s3/include/soc/assist_debug_struct.h -components/soc/esp32s3/include/soc/bb_reg.h -components/soc/esp32s3/include/soc/boot_mode.h -components/soc/esp32s3/include/soc/extmem_reg.h -components/soc/esp32s3/include/soc/extmem_struct.h -components/soc/esp32s3/include/soc/fe_reg.h -components/soc/esp32s3/include/soc/gpio_reg.h -components/soc/esp32s3/include/soc/hinf_reg.h -components/soc/esp32s3/include/soc/hinf_struct.h -components/soc/esp32s3/include/soc/host_reg.h -components/soc/esp32s3/include/soc/host_struct.h -components/soc/esp32s3/include/soc/i2c_reg.h -components/soc/esp32s3/include/soc/i2c_struct.h -components/soc/esp32s3/include/soc/interrupt_core0_reg.h -components/soc/esp32s3/include/soc/interrupt_core0_struct.h -components/soc/esp32s3/include/soc/interrupt_core1_reg.h -components/soc/esp32s3/include/soc/interrupt_core1_struct.h -components/soc/esp32s3/include/soc/interrupt_struct.h -components/soc/esp32s3/include/soc/ledc_reg.h -components/soc/esp32s3/include/soc/ledc_struct.h components/soc/esp32s3/include/soc/mpu_caps.h -components/soc/esp32s3/include/soc/nrx_reg.h -components/soc/esp32s3/include/soc/peri_backup_reg.h -components/soc/esp32s3/include/soc/peri_backup_struct.h -components/soc/esp32s3/include/soc/reset_reasons.h -components/soc/esp32s3/include/soc/rtc_i2c_reg.h -components/soc/esp32s3/include/soc/rtc_i2c_struct.h -components/soc/esp32s3/include/soc/rtc_io_reg.h -components/soc/esp32s3/include/soc/rtc_io_struct.h -components/soc/esp32s3/include/soc/sdmmc_pins.h -components/soc/esp32s3/include/soc/sdmmc_reg.h -components/soc/esp32s3/include/soc/sensitive_reg.h -components/soc/esp32s3/include/soc/sensitive_struct.h -components/soc/esp32s3/include/soc/soc_ulp.h -components/soc/esp32s3/include/soc/spi_mem_reg.h -components/soc/esp32s3/include/soc/spi_mem_struct.h -components/soc/esp32s3/include/soc/spi_reg.h -components/soc/esp32s3/include/soc/spi_struct.h -components/soc/esp32s3/include/soc/syscon_struct.h -components/soc/esp32s3/include/soc/system_reg.h -components/soc/esp32s3/include/soc/system_struct.h -components/soc/esp32s3/include/soc/systimer_reg.h -components/soc/esp32s3/include/soc/systimer_struct.h -components/soc/esp32s3/include/soc/touch_channel.h -components/soc/esp32s3/include/soc/uart_pins.h -components/soc/esp32s3/include/soc/uart_reg.h -components/soc/esp32s3/include/soc/uart_struct.h -components/soc/esp32s3/include/soc/uhci_reg.h -components/soc/esp32s3/include/soc/usb_serial_jtag_struct.h -components/soc/esp32s3/include/soc/usb_wrap_reg.h -components/soc/esp32s3/include/soc/usb_wrap_struct.h -components/soc/esp32s3/include/soc/wdev_reg.h components/soc/esp32s3/ledc_periph.c components/soc/include/soc/gpio_periph.h components/soc/include/soc/ledc_periph.h From 25bd7a670cc013f73528c18846864bb88ca09d6e Mon Sep 17 00:00:00 2001 From: laokaiyao Date: Fri, 6 Sep 2024 18:39:50 +0800 Subject: [PATCH 145/365] refactor(soc): sort esp32c61 soc headers --- components/soc/esp32c61/include/soc/dport_access.h | 1 - components/soc/esp32c61/include/soc/soc.h | 2 +- components/soc/esp32c61/include/soc/system_reg.h | 2 +- components/soc/esp32c61/register/soc/.gitkeep | 0 .../esp32c61/{include => register}/soc/ahb_dma_reg.h | 0 .../{include => register}/soc/ahb_dma_struct.h | 0 .../{include => register}/soc/apb_saradc_reg.h | 0 .../{include => register}/soc/apb_saradc_struct.h | 0 .../{include => register}/soc/assist_debug_reg.h | 4 ++-- .../{include => register}/soc/assist_debug_struct.h | 10 +++++----- .../soc/esp32c61/{include => register}/soc/cache_reg.h | 8 ++++---- .../esp32c61/{include => register}/soc/cache_struct.h | 8 ++++---- .../soc/esp32c61/{include => register}/soc/clic_reg.h | 0 .../soc/esp32c61/{include => register}/soc/clint_reg.h | 0 .../esp32c61/{include => register}/soc/ecc_mult_reg.h | 0 .../{include => register}/soc/ecc_mult_struct.h | 0 .../soc/esp32c61/{include => register}/soc/ecdsa_reg.h | 6 +++--- .../esp32c61/{include => register}/soc/ecdsa_struct.h | 6 +++--- .../soc/esp32c61/{include => register}/soc/efuse_reg.h | 0 .../esp32c61/{include => register}/soc/efuse_struct.h | 0 .../esp32c61/{include => register}/soc/gpio_ext_reg.h | 2 +- .../{include => register}/soc/gpio_ext_struct.h | 2 +- .../soc/esp32c61/{include => register}/soc/gpio_reg.h | 0 .../esp32c61/{include => register}/soc/gpio_struct.h | 0 .../esp32c61/{include => register}/soc/hp_apm_reg.h | 0 .../esp32c61/{include => register}/soc/hp_apm_struct.h | 0 .../esp32c61/{include => register}/soc/hp_system_reg.h | 0 .../{include => register}/soc/hp_system_struct.h | 0 .../{include => register}/soc/i2c_ana_mst_reg.h | 0 .../soc/esp32c61/{include => register}/soc/i2c_reg.h | 0 .../esp32c61/{include => register}/soc/i2c_struct.h | 0 .../soc/esp32c61/{include => register}/soc/i2s_reg.h | 2 +- .../esp32c61/{include => register}/soc/i2s_struct.h | 2 +- .../{include => register}/soc/interrupt_matrix_reg.h | 0 .../soc/interrupt_matrix_struct.h | 0 .../esp32c61/{include => register}/soc/intpri_reg.h | 0 .../esp32c61/{include => register}/soc/intpri_struct.h | 0 .../esp32c61/{include => register}/soc/io_mux_reg.h | 0 .../esp32c61/{include => register}/soc/io_mux_struct.h | 0 .../soc/esp32c61/{include => register}/soc/ledc_reg.h | 0 .../esp32c61/{include => register}/soc/ledc_struct.h | 0 .../{include => register}/soc/lp_analog_peri_reg.h | 0 .../{include => register}/soc/lp_analog_peri_struct.h | 0 .../esp32c61/{include => register}/soc/lp_aon_reg.h | 0 .../esp32c61/{include => register}/soc/lp_aon_struct.h | 0 .../esp32c61/{include => register}/soc/lp_apm_reg.h | 0 .../esp32c61/{include => register}/soc/lp_apm_struct.h | 0 .../esp32c61/{include => register}/soc/lp_clkrst_reg.h | 2 +- .../{include => register}/soc/lp_clkrst_struct.h | 2 +- .../esp32c61/{include => register}/soc/lp_gpio_reg.h | 0 .../{include => register}/soc/lp_gpio_struct.h | 0 .../esp32c61/{include => register}/soc/lp_iomux_reg.h | 0 .../{include => register}/soc/lp_iomux_struct.h | 0 .../esp32c61/{include => register}/soc/lp_tee_reg.h | 0 .../esp32c61/{include => register}/soc/lp_tee_struct.h | 0 .../esp32c61/{include => register}/soc/lp_timer_reg.h | 0 .../{include => register}/soc/lp_timer_struct.h | 0 .../esp32c61/{include => register}/soc/lp_wdt_reg.h | 0 .../esp32c61/{include => register}/soc/lp_wdt_struct.h | 0 .../esp32c61/{include => register}/soc/lpperi_reg.h | 0 .../esp32c61/{include => register}/soc/lpperi_struct.h | 0 .../{include => register}/soc/mem_monitor_reg.h | 0 .../{include => register}/soc/mem_monitor_struct.h | 0 .../soc/esp32c61/{include => register}/soc/pau_reg.h | 0 .../esp32c61/{include => register}/soc/pau_struct.h | 0 .../soc/esp32c61/{include => register}/soc/pcr_reg.h | 0 .../esp32c61/{include => register}/soc/pcr_struct.h | 0 .../soc/esp32c61/{include => register}/soc/pmu_reg.h | 0 .../esp32c61/{include => register}/soc/pmu_struct.h | 2 +- .../soc/esp32c61/{include => register}/soc/pvt_reg.h | 0 .../esp32c61/{include => register}/soc/pvt_struct.h | 0 .../soc/esp32c61/{include => register}/soc/reg_base.h | 0 .../soc/esp32c61/{include => register}/soc/sha_reg.h | 2 +- .../esp32c61/{include => register}/soc/sha_struct.h | 0 .../esp32c61/{include => register}/soc/soc_etm_reg.h | 0 .../{include => register}/soc/soc_etm_struct.h | 0 .../esp32c61/{include => register}/soc/spi1_mem_reg.h | 0 .../{include => register}/soc/spi1_mem_struct.h | 0 .../esp32c61/{include => register}/soc/spi_mem_c_reg.h | 0 .../{include => register}/soc/spi_mem_c_struct.h | 0 .../soc/esp32c61/{include => register}/soc/spi_reg.h | 2 +- .../esp32c61/{include => register}/soc/spi_struct.h | 2 +- .../esp32c61/{include => register}/soc/systimer_reg.h | 0 .../{include => register}/soc/systimer_struct.h | 0 .../soc/esp32c61/{include => register}/soc/tee_reg.h | 0 .../esp32c61/{include => register}/soc/tee_struct.h | 0 .../{include => register}/soc/timer_group_reg.h | 0 .../{include => register}/soc/timer_group_struct.h | 0 .../soc/esp32c61/{include => register}/soc/trace_reg.h | 10 +++++----- .../esp32c61/{include => register}/soc/trace_struct.h | 10 +++++----- .../soc/esp32c61/{include => register}/soc/uart_reg.h | 0 .../esp32c61/{include => register}/soc/uart_struct.h | 0 .../{include => register}/soc/usb_serial_jtag_reg.h | 2 +- .../{include => register}/soc/usb_serial_jtag_struct.h | 0 .../esp32c61/{include => register}/soc/xts_aes_reg.h | 6 +++--- 95 files changed, 47 insertions(+), 48 deletions(-) delete mode 100644 components/soc/esp32c61/register/soc/.gitkeep rename components/soc/esp32c61/{include => register}/soc/ahb_dma_reg.h (100%) rename components/soc/esp32c61/{include => register}/soc/ahb_dma_struct.h (100%) rename components/soc/esp32c61/{include => register}/soc/apb_saradc_reg.h (100%) rename components/soc/esp32c61/{include => register}/soc/apb_saradc_struct.h (100%) rename components/soc/esp32c61/{include => register}/soc/assist_debug_reg.h (99%) rename components/soc/esp32c61/{include => register}/soc/assist_debug_struct.h (99%) rename components/soc/esp32c61/{include => register}/soc/cache_reg.h (99%) rename components/soc/esp32c61/{include => register}/soc/cache_struct.h (99%) rename components/soc/esp32c61/{include => register}/soc/clic_reg.h (100%) rename components/soc/esp32c61/{include => register}/soc/clint_reg.h (100%) rename components/soc/esp32c61/{include => register}/soc/ecc_mult_reg.h (100%) rename components/soc/esp32c61/{include => register}/soc/ecc_mult_struct.h (100%) rename components/soc/esp32c61/{include => register}/soc/ecdsa_reg.h (98%) rename components/soc/esp32c61/{include => register}/soc/ecdsa_struct.h (97%) rename components/soc/esp32c61/{include => register}/soc/efuse_reg.h (100%) rename components/soc/esp32c61/{include => register}/soc/efuse_struct.h (100%) rename components/soc/esp32c61/{include => register}/soc/gpio_ext_reg.h (99%) rename components/soc/esp32c61/{include => register}/soc/gpio_ext_struct.h (99%) rename components/soc/esp32c61/{include => register}/soc/gpio_reg.h (100%) rename components/soc/esp32c61/{include => register}/soc/gpio_struct.h (100%) rename components/soc/esp32c61/{include => register}/soc/hp_apm_reg.h (100%) rename components/soc/esp32c61/{include => register}/soc/hp_apm_struct.h (100%) rename components/soc/esp32c61/{include => register}/soc/hp_system_reg.h (100%) rename components/soc/esp32c61/{include => register}/soc/hp_system_struct.h (100%) rename components/soc/esp32c61/{include => register}/soc/i2c_ana_mst_reg.h (100%) rename components/soc/esp32c61/{include => register}/soc/i2c_reg.h (100%) rename components/soc/esp32c61/{include => register}/soc/i2c_struct.h (100%) rename components/soc/esp32c61/{include => register}/soc/i2s_reg.h (99%) rename components/soc/esp32c61/{include => register}/soc/i2s_struct.h (99%) rename components/soc/esp32c61/{include => register}/soc/interrupt_matrix_reg.h (100%) rename components/soc/esp32c61/{include => register}/soc/interrupt_matrix_struct.h (100%) rename components/soc/esp32c61/{include => register}/soc/intpri_reg.h (100%) rename components/soc/esp32c61/{include => register}/soc/intpri_struct.h (100%) rename components/soc/esp32c61/{include => register}/soc/io_mux_reg.h (100%) rename components/soc/esp32c61/{include => register}/soc/io_mux_struct.h (100%) rename components/soc/esp32c61/{include => register}/soc/ledc_reg.h (100%) rename components/soc/esp32c61/{include => register}/soc/ledc_struct.h (100%) rename components/soc/esp32c61/{include => register}/soc/lp_analog_peri_reg.h (100%) rename components/soc/esp32c61/{include => register}/soc/lp_analog_peri_struct.h (100%) rename components/soc/esp32c61/{include => register}/soc/lp_aon_reg.h (100%) rename components/soc/esp32c61/{include => register}/soc/lp_aon_struct.h (100%) rename components/soc/esp32c61/{include => register}/soc/lp_apm_reg.h (100%) rename components/soc/esp32c61/{include => register}/soc/lp_apm_struct.h (100%) rename components/soc/esp32c61/{include => register}/soc/lp_clkrst_reg.h (99%) rename components/soc/esp32c61/{include => register}/soc/lp_clkrst_struct.h (99%) rename components/soc/esp32c61/{include => register}/soc/lp_gpio_reg.h (100%) rename components/soc/esp32c61/{include => register}/soc/lp_gpio_struct.h (100%) rename components/soc/esp32c61/{include => register}/soc/lp_iomux_reg.h (100%) rename components/soc/esp32c61/{include => register}/soc/lp_iomux_struct.h (100%) rename components/soc/esp32c61/{include => register}/soc/lp_tee_reg.h (100%) rename components/soc/esp32c61/{include => register}/soc/lp_tee_struct.h (100%) rename components/soc/esp32c61/{include => register}/soc/lp_timer_reg.h (100%) rename components/soc/esp32c61/{include => register}/soc/lp_timer_struct.h (100%) rename components/soc/esp32c61/{include => register}/soc/lp_wdt_reg.h (100%) rename components/soc/esp32c61/{include => register}/soc/lp_wdt_struct.h (100%) rename components/soc/esp32c61/{include => register}/soc/lpperi_reg.h (100%) rename components/soc/esp32c61/{include => register}/soc/lpperi_struct.h (100%) rename components/soc/esp32c61/{include => register}/soc/mem_monitor_reg.h (100%) rename components/soc/esp32c61/{include => register}/soc/mem_monitor_struct.h (100%) rename components/soc/esp32c61/{include => register}/soc/pau_reg.h (100%) rename components/soc/esp32c61/{include => register}/soc/pau_struct.h (100%) rename components/soc/esp32c61/{include => register}/soc/pcr_reg.h (100%) rename components/soc/esp32c61/{include => register}/soc/pcr_struct.h (100%) rename components/soc/esp32c61/{include => register}/soc/pmu_reg.h (100%) rename components/soc/esp32c61/{include => register}/soc/pmu_struct.h (99%) rename components/soc/esp32c61/{include => register}/soc/pvt_reg.h (100%) rename components/soc/esp32c61/{include => register}/soc/pvt_struct.h (100%) rename components/soc/esp32c61/{include => register}/soc/reg_base.h (100%) rename components/soc/esp32c61/{include => register}/soc/sha_reg.h (98%) rename components/soc/esp32c61/{include => register}/soc/sha_struct.h (100%) rename components/soc/esp32c61/{include => register}/soc/soc_etm_reg.h (100%) rename components/soc/esp32c61/{include => register}/soc/soc_etm_struct.h (100%) rename components/soc/esp32c61/{include => register}/soc/spi1_mem_reg.h (100%) rename components/soc/esp32c61/{include => register}/soc/spi1_mem_struct.h (100%) rename components/soc/esp32c61/{include => register}/soc/spi_mem_c_reg.h (100%) rename components/soc/esp32c61/{include => register}/soc/spi_mem_c_struct.h (100%) rename components/soc/esp32c61/{include => register}/soc/spi_reg.h (99%) rename components/soc/esp32c61/{include => register}/soc/spi_struct.h (99%) rename components/soc/esp32c61/{include => register}/soc/systimer_reg.h (100%) rename components/soc/esp32c61/{include => register}/soc/systimer_struct.h (100%) rename components/soc/esp32c61/{include => register}/soc/tee_reg.h (100%) rename components/soc/esp32c61/{include => register}/soc/tee_struct.h (100%) rename components/soc/esp32c61/{include => register}/soc/timer_group_reg.h (100%) rename components/soc/esp32c61/{include => register}/soc/timer_group_struct.h (100%) rename components/soc/esp32c61/{include => register}/soc/trace_reg.h (98%) rename components/soc/esp32c61/{include => register}/soc/trace_struct.h (98%) rename components/soc/esp32c61/{include => register}/soc/uart_reg.h (100%) rename components/soc/esp32c61/{include => register}/soc/uart_struct.h (100%) rename components/soc/esp32c61/{include => register}/soc/usb_serial_jtag_reg.h (99%) rename components/soc/esp32c61/{include => register}/soc/usb_serial_jtag_struct.h (100%) rename components/soc/esp32c61/{include => register}/soc/xts_aes_reg.h (98%) diff --git a/components/soc/esp32c61/include/soc/dport_access.h b/components/soc/esp32c61/include/soc/dport_access.h index 85bdb9e6b8f4..feacddca4682 100644 --- a/components/soc/esp32c61/include/soc/dport_access.h +++ b/components/soc/esp32c61/include/soc/dport_access.h @@ -9,7 +9,6 @@ #include #include "soc.h" -#include "uart_reg.h" #ifdef __cplusplus extern "C" { diff --git a/components/soc/esp32c61/include/soc/soc.h b/components/soc/esp32c61/include/soc/soc.h index cd1b6e7537f5..ca6ee32e0319 100644 --- a/components/soc/esp32c61/include/soc/soc.h +++ b/components/soc/esp32c61/include/soc/soc.h @@ -12,7 +12,7 @@ #endif #include "esp_bit_defs.h" -#include "reg_base.h" +#include "soc/reg_base.h" #define PRO_CPU_NUM (0) diff --git a/components/soc/esp32c61/include/soc/system_reg.h b/components/soc/esp32c61/include/soc/system_reg.h index 4577fecbeb79..690bb496eb83 100644 --- a/components/soc/esp32c61/include/soc/system_reg.h +++ b/components/soc/esp32c61/include/soc/system_reg.h @@ -6,6 +6,6 @@ #include "soc/hp_system_reg.h" -#include "intpri_reg.h" +#include "soc/intpri_reg.h" #define SYSTEM_CPU_INTR_FROM_CPU_0_REG INTPRI_CPU_INTR_FROM_CPU_0_REG #define SYSTEM_CPU_INTR_FROM_CPU_0 INTPRI_CPU_INTR_FROM_CPU_0 diff --git a/components/soc/esp32c61/register/soc/.gitkeep b/components/soc/esp32c61/register/soc/.gitkeep deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/components/soc/esp32c61/include/soc/ahb_dma_reg.h b/components/soc/esp32c61/register/soc/ahb_dma_reg.h similarity index 100% rename from components/soc/esp32c61/include/soc/ahb_dma_reg.h rename to components/soc/esp32c61/register/soc/ahb_dma_reg.h diff --git a/components/soc/esp32c61/include/soc/ahb_dma_struct.h b/components/soc/esp32c61/register/soc/ahb_dma_struct.h similarity index 100% rename from components/soc/esp32c61/include/soc/ahb_dma_struct.h rename to components/soc/esp32c61/register/soc/ahb_dma_struct.h diff --git a/components/soc/esp32c61/include/soc/apb_saradc_reg.h b/components/soc/esp32c61/register/soc/apb_saradc_reg.h similarity index 100% rename from components/soc/esp32c61/include/soc/apb_saradc_reg.h rename to components/soc/esp32c61/register/soc/apb_saradc_reg.h diff --git a/components/soc/esp32c61/include/soc/apb_saradc_struct.h b/components/soc/esp32c61/register/soc/apb_saradc_struct.h similarity index 100% rename from components/soc/esp32c61/include/soc/apb_saradc_struct.h rename to components/soc/esp32c61/register/soc/apb_saradc_struct.h diff --git a/components/soc/esp32c61/include/soc/assist_debug_reg.h b/components/soc/esp32c61/register/soc/assist_debug_reg.h similarity index 99% rename from components/soc/esp32c61/include/soc/assist_debug_reg.h rename to components/soc/esp32c61/register/soc/assist_debug_reg.h index 4b7e6b6ff558..042490974ba6 100644 --- a/components/soc/esp32c61/include/soc/assist_debug_reg.h +++ b/components/soc/esp32c61/register/soc/assist_debug_reg.h @@ -115,7 +115,7 @@ extern "C" { #define ASSIST_DEBUG_CORE_0_IRAM0_EXCEPTION_MONITOR_ENA_V 0x00000001U #define ASSIST_DEBUG_CORE_0_IRAM0_EXCEPTION_MONITOR_ENA_S 10 /** ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_ENA : R/W; bitpos: [11]; default: 0; - * DBUS busy monitor enbale + * DBUS busy monitor enable */ #define ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_ENA (BIT(11)) #define ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_ENA_M (ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_ENA_V << ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_ENA_S) @@ -295,7 +295,7 @@ extern "C" { #define ASSIST_DEBUG_CORE_0_IRAM0_EXCEPTION_MONITOR_INTR_ENA_V 0x00000001U #define ASSIST_DEBUG_CORE_0_IRAM0_EXCEPTION_MONITOR_INTR_ENA_S 10 /** ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_INTR_ENA : R/W; bitpos: [11]; default: 0; - * DBUS busy monitor interrupt enbale + * DBUS busy monitor interrupt enable */ #define ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_INTR_ENA (BIT(11)) #define ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_INTR_ENA_M (ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_INTR_ENA_V << ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_INTR_ENA_S) diff --git a/components/soc/esp32c61/include/soc/assist_debug_struct.h b/components/soc/esp32c61/register/soc/assist_debug_struct.h similarity index 99% rename from components/soc/esp32c61/include/soc/assist_debug_struct.h rename to components/soc/esp32c61/register/soc/assist_debug_struct.h index 243b6959aa01..ca55d0cb8f60 100644 --- a/components/soc/esp32c61/include/soc/assist_debug_struct.h +++ b/components/soc/esp32c61/register/soc/assist_debug_struct.h @@ -83,7 +83,7 @@ typedef union { */ uint32_t core_0_iram0_exception_monitor_ena:1; /** core_0_dram0_exception_monitor_ena : R/W; bitpos: [11]; default: 0; - * DBUS busy monitor enbale + * DBUS busy monitor enable */ uint32_t core_0_dram0_exception_monitor_ena:1; uint32_t reserved_12:20; @@ -372,7 +372,7 @@ typedef union { */ uint32_t core_0_iram0_exception_monitor_intr_ena:1; /** core_0_dram0_exception_monitor_intr_ena : R/W; bitpos: [11]; default: 0; - * DBUS busy monitor interrupt enbale + * DBUS busy monitor interrupt enable */ uint32_t core_0_dram0_exception_monitor_intr_ena:1; uint32_t reserved_12:20; @@ -441,7 +441,7 @@ typedef union { } assist_debug_core_0_intr_clr_reg_t; -/** Group: pc reording configuration register */ +/** Group: pc recording configuration register */ /** Type of core_0_rcd_en register * HP CPU PC logging enable register */ @@ -465,7 +465,7 @@ typedef union { } assist_debug_core_0_rcd_en_reg_t; -/** Group: pc reording status register */ +/** Group: pc recording status register */ /** Type of core_0_rcd_pdebugpc register * PC logging register */ @@ -493,7 +493,7 @@ typedef union { } assist_debug_core_0_rcd_pdebugsp_reg_t; -/** Group: exception monitor regsiter */ +/** Group: exception monitor register */ /** Type of core_0_iram0_exception_monitor_0 register * exception monitor status register0 */ diff --git a/components/soc/esp32c61/include/soc/cache_reg.h b/components/soc/esp32c61/register/soc/cache_reg.h similarity index 99% rename from components/soc/esp32c61/include/soc/cache_reg.h rename to components/soc/esp32c61/register/soc/cache_reg.h index 98390f8e1ae0..d0e294a28cb4 100644 --- a/components/soc/esp32c61/include/soc/cache_reg.h +++ b/components/soc/esp32c61/register/soc/cache_reg.h @@ -4077,7 +4077,7 @@ extern "C" { #define CACHE_L1_UNALLOCATE_BUFFER_CLEAR_REG (DR_REG_CACHE_BASE + 0x254) /** CACHE_L1_ICACHE0_UNALLOC_CLR : HRO; bitpos: [0]; default: 0; * The bit is used to clear the unallocate request buffer of l1 icache0 where the - * unallocate request is responsed but not completed. + * unallocate request is responded but not completed. */ #define CACHE_L1_ICACHE0_UNALLOC_CLR (BIT(0)) #define CACHE_L1_ICACHE0_UNALLOC_CLR_M (CACHE_L1_ICACHE0_UNALLOC_CLR_V << CACHE_L1_ICACHE0_UNALLOC_CLR_S) @@ -4085,7 +4085,7 @@ extern "C" { #define CACHE_L1_ICACHE0_UNALLOC_CLR_S 0 /** CACHE_L1_ICACHE1_UNALLOC_CLR : HRO; bitpos: [1]; default: 0; * The bit is used to clear the unallocate request buffer of l1 icache1 where the - * unallocate request is responsed but not completed. + * unallocate request is responded but not completed. */ #define CACHE_L1_ICACHE1_UNALLOC_CLR (BIT(1)) #define CACHE_L1_ICACHE1_UNALLOC_CLR_M (CACHE_L1_ICACHE1_UNALLOC_CLR_V << CACHE_L1_ICACHE1_UNALLOC_CLR_S) @@ -4107,7 +4107,7 @@ extern "C" { #define CACHE_L1_ICACHE3_UNALLOC_CLR_S 3 /** CACHE_L1_CACHE_UNALLOC_CLR : R/W; bitpos: [4]; default: 0; * The bit is used to clear the unallocate request buffer of l1 cache where the - * unallocate request is responsed but not completed. + * unallocate request is responded but not completed. */ #define CACHE_L1_CACHE_UNALLOC_CLR (BIT(4)) #define CACHE_L1_CACHE_UNALLOC_CLR_M (CACHE_L1_CACHE_UNALLOC_CLR_V << CACHE_L1_CACHE_UNALLOC_CLR_S) @@ -5937,7 +5937,7 @@ extern "C" { #define CACHE_L2_UNALLOCATE_BUFFER_CLEAR_REG (DR_REG_CACHE_BASE + 0x3b0) /** CACHE_L2_CACHE_UNALLOC_CLR : HRO; bitpos: [5]; default: 0; * The bit is used to clear the unallocate request buffer of l2 icache where the - * unallocate request is responsed but not completed. + * unallocate request is responded but not completed. */ #define CACHE_L2_CACHE_UNALLOC_CLR (BIT(5)) #define CACHE_L2_CACHE_UNALLOC_CLR_M (CACHE_L2_CACHE_UNALLOC_CLR_V << CACHE_L2_CACHE_UNALLOC_CLR_S) diff --git a/components/soc/esp32c61/include/soc/cache_struct.h b/components/soc/esp32c61/register/soc/cache_struct.h similarity index 99% rename from components/soc/esp32c61/include/soc/cache_struct.h rename to components/soc/esp32c61/register/soc/cache_struct.h index f98620a26b33..408c01c2c784 100644 --- a/components/soc/esp32c61/include/soc/cache_struct.h +++ b/components/soc/esp32c61/register/soc/cache_struct.h @@ -5100,12 +5100,12 @@ typedef union { struct { /** l1_icache0_unalloc_clr : HRO; bitpos: [0]; default: 0; * The bit is used to clear the unallocate request buffer of l1 icache0 where the - * unallocate request is responsed but not completed. + * unallocate request is responded but not completed. */ uint32_t l1_icache0_unalloc_clr:1; /** l1_icache1_unalloc_clr : HRO; bitpos: [1]; default: 0; * The bit is used to clear the unallocate request buffer of l1 icache1 where the - * unallocate request is responsed but not completed. + * unallocate request is responded but not completed. */ uint32_t l1_icache1_unalloc_clr:1; /** l1_icache2_unalloc_clr : HRO; bitpos: [2]; default: 0; @@ -5118,7 +5118,7 @@ typedef union { uint32_t l1_icache3_unalloc_clr:1; /** l1_cache_unalloc_clr : R/W; bitpos: [4]; default: 0; * The bit is used to clear the unallocate request buffer of l1 cache where the - * unallocate request is responsed but not completed. + * unallocate request is responded but not completed. */ uint32_t l1_cache_unalloc_clr:1; uint32_t reserved_5:27; @@ -5134,7 +5134,7 @@ typedef union { uint32_t reserved_0:5; /** l2_cache_unalloc_clr : HRO; bitpos: [5]; default: 0; * The bit is used to clear the unallocate request buffer of l2 icache where the - * unallocate request is responsed but not completed. + * unallocate request is responded but not completed. */ uint32_t l2_cache_unalloc_clr:1; uint32_t reserved_6:26; diff --git a/components/soc/esp32c61/include/soc/clic_reg.h b/components/soc/esp32c61/register/soc/clic_reg.h similarity index 100% rename from components/soc/esp32c61/include/soc/clic_reg.h rename to components/soc/esp32c61/register/soc/clic_reg.h diff --git a/components/soc/esp32c61/include/soc/clint_reg.h b/components/soc/esp32c61/register/soc/clint_reg.h similarity index 100% rename from components/soc/esp32c61/include/soc/clint_reg.h rename to components/soc/esp32c61/register/soc/clint_reg.h diff --git a/components/soc/esp32c61/include/soc/ecc_mult_reg.h b/components/soc/esp32c61/register/soc/ecc_mult_reg.h similarity index 100% rename from components/soc/esp32c61/include/soc/ecc_mult_reg.h rename to components/soc/esp32c61/register/soc/ecc_mult_reg.h diff --git a/components/soc/esp32c61/include/soc/ecc_mult_struct.h b/components/soc/esp32c61/register/soc/ecc_mult_struct.h similarity index 100% rename from components/soc/esp32c61/include/soc/ecc_mult_struct.h rename to components/soc/esp32c61/register/soc/ecc_mult_struct.h diff --git a/components/soc/esp32c61/include/soc/ecdsa_reg.h b/components/soc/esp32c61/register/soc/ecdsa_reg.h similarity index 98% rename from components/soc/esp32c61/include/soc/ecdsa_reg.h rename to components/soc/esp32c61/register/soc/ecdsa_reg.h index aca4b64b199f..4893390ced6e 100644 --- a/components/soc/esp32c61/include/soc/ecdsa_reg.h +++ b/components/soc/esp32c61/register/soc/ecdsa_reg.h @@ -211,7 +211,7 @@ extern "C" { */ #define ECDSA_START_REG (DR_REG_ECDSA_BASE + 0x1c) /** ECDSA_START : WT; bitpos: [0]; default: 0; - * Write 1 to start caculation of ECDSA Accelerator. This bit will be self-cleared + * Write 1 to start calculation of ECDSA Accelerator. This bit will be self-cleared * after configuration. */ #define ECDSA_START (BIT(0)) @@ -299,7 +299,7 @@ extern "C" { */ #define ECDSA_SHA_START_REG (DR_REG_ECDSA_BASE + 0x210) /** ECDSA_SHA_START : WT; bitpos: [0]; default: 0; - * Write 1 to start the first caculation of SHA Calculator in ECDSA Accelerator. This + * Write 1 to start the first calculation of SHA Calculator in ECDSA Accelerator. This * bit will be self-cleared after configuration. */ #define ECDSA_SHA_START (BIT(0)) @@ -312,7 +312,7 @@ extern "C" { */ #define ECDSA_SHA_CONTINUE_REG (DR_REG_ECDSA_BASE + 0x214) /** ECDSA_SHA_CONTINUE : WT; bitpos: [0]; default: 0; - * Write 1 to start the latter caculation of SHA Calculator in ECDSA Accelerator. This + * Write 1 to start the latter calculation of SHA Calculator in ECDSA Accelerator. This * bit will be self-cleared after configuration. */ #define ECDSA_SHA_CONTINUE (BIT(0)) diff --git a/components/soc/esp32c61/include/soc/ecdsa_struct.h b/components/soc/esp32c61/register/soc/ecdsa_struct.h similarity index 97% rename from components/soc/esp32c61/include/soc/ecdsa_struct.h rename to components/soc/esp32c61/register/soc/ecdsa_struct.h index bed383c9da04..858a4ffc5f84 100644 --- a/components/soc/esp32c61/include/soc/ecdsa_struct.h +++ b/components/soc/esp32c61/register/soc/ecdsa_struct.h @@ -57,7 +57,7 @@ typedef union { typedef union { struct { /** start : WT; bitpos: [0]; default: 0; - * Write 1 to start caculation of ECDSA Accelerator. This bit will be self-cleared + * Write 1 to start calculation of ECDSA Accelerator. This bit will be self-cleared * after configuration. */ uint32_t start:1; @@ -260,7 +260,7 @@ typedef union { typedef union { struct { /** sha_start : WT; bitpos: [0]; default: 0; - * Write 1 to start the first caculation of SHA Calculator in ECDSA Accelerator. This + * Write 1 to start the first calculation of SHA Calculator in ECDSA Accelerator. This * bit will be self-cleared after configuration. */ uint32_t sha_start:1; @@ -275,7 +275,7 @@ typedef union { typedef union { struct { /** sha_continue : WT; bitpos: [0]; default: 0; - * Write 1 to start the latter caculation of SHA Calculator in ECDSA Accelerator. This + * Write 1 to start the latter calculation of SHA Calculator in ECDSA Accelerator. This * bit will be self-cleared after configuration. */ uint32_t sha_continue:1; diff --git a/components/soc/esp32c61/include/soc/efuse_reg.h b/components/soc/esp32c61/register/soc/efuse_reg.h similarity index 100% rename from components/soc/esp32c61/include/soc/efuse_reg.h rename to components/soc/esp32c61/register/soc/efuse_reg.h diff --git a/components/soc/esp32c61/include/soc/efuse_struct.h b/components/soc/esp32c61/register/soc/efuse_struct.h similarity index 100% rename from components/soc/esp32c61/include/soc/efuse_struct.h rename to components/soc/esp32c61/register/soc/efuse_struct.h diff --git a/components/soc/esp32c61/include/soc/gpio_ext_reg.h b/components/soc/esp32c61/register/soc/gpio_ext_reg.h similarity index 99% rename from components/soc/esp32c61/include/soc/gpio_ext_reg.h rename to components/soc/esp32c61/register/soc/gpio_ext_reg.h index 26effdee28ff..2385576c3336 100644 --- a/components/soc/esp32c61/include/soc/gpio_ext_reg.h +++ b/components/soc/esp32c61/register/soc/gpio_ext_reg.h @@ -37,7 +37,7 @@ extern "C" { #define GPIO_EXT_XPD_COMP_0_V 0x00000001U #define GPIO_EXT_XPD_COMP_0_S 0 /** GPIO_EXT_MODE_COMP_0 : R/W; bitpos: [1]; default: 0; - * Configures the reference voltage for analog PAD voltage comparater.. \\ + * Configures the reference voltage for analog PAD voltage comparator.. \\ * 0: Reference voltage is the internal reference voltage, meanwhile GPIO8 PAD can be * used as a regular GPIO\\ * 1: Reference voltage is the voltage on the GPIO8 PAD\\ diff --git a/components/soc/esp32c61/include/soc/gpio_ext_struct.h b/components/soc/esp32c61/register/soc/gpio_ext_struct.h similarity index 99% rename from components/soc/esp32c61/include/soc/gpio_ext_struct.h rename to components/soc/esp32c61/register/soc/gpio_ext_struct.h index f02a5fec8a1d..a31ace9505ec 100644 --- a/components/soc/esp32c61/include/soc/gpio_ext_struct.h +++ b/components/soc/esp32c61/register/soc/gpio_ext_struct.h @@ -39,7 +39,7 @@ typedef union { */ uint32_t xpd_comp_0:1; /** mode_comp_0 : R/W; bitpos: [1]; default: 0; - * Configures the reference voltage for analog PAD voltage comparater.. \\ + * Configures the reference voltage for analog PAD voltage comparator.. \\ * 0: Reference voltage is the internal reference voltage, meanwhile GPIO8 PAD can be * used as a regular GPIO\\ * 1: Reference voltage is the voltage on the GPIO8 PAD\\ diff --git a/components/soc/esp32c61/include/soc/gpio_reg.h b/components/soc/esp32c61/register/soc/gpio_reg.h similarity index 100% rename from components/soc/esp32c61/include/soc/gpio_reg.h rename to components/soc/esp32c61/register/soc/gpio_reg.h diff --git a/components/soc/esp32c61/include/soc/gpio_struct.h b/components/soc/esp32c61/register/soc/gpio_struct.h similarity index 100% rename from components/soc/esp32c61/include/soc/gpio_struct.h rename to components/soc/esp32c61/register/soc/gpio_struct.h diff --git a/components/soc/esp32c61/include/soc/hp_apm_reg.h b/components/soc/esp32c61/register/soc/hp_apm_reg.h similarity index 100% rename from components/soc/esp32c61/include/soc/hp_apm_reg.h rename to components/soc/esp32c61/register/soc/hp_apm_reg.h diff --git a/components/soc/esp32c61/include/soc/hp_apm_struct.h b/components/soc/esp32c61/register/soc/hp_apm_struct.h similarity index 100% rename from components/soc/esp32c61/include/soc/hp_apm_struct.h rename to components/soc/esp32c61/register/soc/hp_apm_struct.h diff --git a/components/soc/esp32c61/include/soc/hp_system_reg.h b/components/soc/esp32c61/register/soc/hp_system_reg.h similarity index 100% rename from components/soc/esp32c61/include/soc/hp_system_reg.h rename to components/soc/esp32c61/register/soc/hp_system_reg.h diff --git a/components/soc/esp32c61/include/soc/hp_system_struct.h b/components/soc/esp32c61/register/soc/hp_system_struct.h similarity index 100% rename from components/soc/esp32c61/include/soc/hp_system_struct.h rename to components/soc/esp32c61/register/soc/hp_system_struct.h diff --git a/components/soc/esp32c61/include/soc/i2c_ana_mst_reg.h b/components/soc/esp32c61/register/soc/i2c_ana_mst_reg.h similarity index 100% rename from components/soc/esp32c61/include/soc/i2c_ana_mst_reg.h rename to components/soc/esp32c61/register/soc/i2c_ana_mst_reg.h diff --git a/components/soc/esp32c61/include/soc/i2c_reg.h b/components/soc/esp32c61/register/soc/i2c_reg.h similarity index 100% rename from components/soc/esp32c61/include/soc/i2c_reg.h rename to components/soc/esp32c61/register/soc/i2c_reg.h diff --git a/components/soc/esp32c61/include/soc/i2c_struct.h b/components/soc/esp32c61/register/soc/i2c_struct.h similarity index 100% rename from components/soc/esp32c61/include/soc/i2c_struct.h rename to components/soc/esp32c61/register/soc/i2c_struct.h diff --git a/components/soc/esp32c61/include/soc/i2s_reg.h b/components/soc/esp32c61/register/soc/i2s_reg.h similarity index 99% rename from components/soc/esp32c61/include/soc/i2s_reg.h rename to components/soc/esp32c61/register/soc/i2s_reg.h index a7f16f4d6123..b82a41f3218a 100644 --- a/components/soc/esp32c61/include/soc/i2s_reg.h +++ b/components/soc/esp32c61/register/soc/i2s_reg.h @@ -320,7 +320,7 @@ extern "C" { #define I2S_TX_SLAVE_MOD_V 0x00000001U #define I2S_TX_SLAVE_MOD_S 3 /** I2S_TX_STOP_EN : R/W; bitpos: [4]; default: 1; - * Set this bit to stop disable output BCK signal and WS signal when tx FIFO is emtpy + * Set this bit to stop disable output BCK signal and WS signal when tx FIFO is empty */ #define I2S_TX_STOP_EN (BIT(4)) #define I2S_TX_STOP_EN_M (I2S_TX_STOP_EN_V << I2S_TX_STOP_EN_S) diff --git a/components/soc/esp32c61/include/soc/i2s_struct.h b/components/soc/esp32c61/register/soc/i2s_struct.h similarity index 99% rename from components/soc/esp32c61/include/soc/i2s_struct.h rename to components/soc/esp32c61/register/soc/i2s_struct.h index a0ff42939e78..9cb119af5e61 100644 --- a/components/soc/esp32c61/include/soc/i2s_struct.h +++ b/components/soc/esp32c61/register/soc/i2s_struct.h @@ -410,7 +410,7 @@ typedef union { */ uint32_t tx_slave_mod:1; /** tx_stop_en : R/W; bitpos: [4]; default: 1; - * Set this bit to stop disable output BCK signal and WS signal when tx FIFO is emtpy + * Set this bit to stop disable output BCK signal and WS signal when tx FIFO is empty */ uint32_t tx_stop_en:1; /** tx_chan_equal : R/W; bitpos: [5]; default: 0; diff --git a/components/soc/esp32c61/include/soc/interrupt_matrix_reg.h b/components/soc/esp32c61/register/soc/interrupt_matrix_reg.h similarity index 100% rename from components/soc/esp32c61/include/soc/interrupt_matrix_reg.h rename to components/soc/esp32c61/register/soc/interrupt_matrix_reg.h diff --git a/components/soc/esp32c61/include/soc/interrupt_matrix_struct.h b/components/soc/esp32c61/register/soc/interrupt_matrix_struct.h similarity index 100% rename from components/soc/esp32c61/include/soc/interrupt_matrix_struct.h rename to components/soc/esp32c61/register/soc/interrupt_matrix_struct.h diff --git a/components/soc/esp32c61/include/soc/intpri_reg.h b/components/soc/esp32c61/register/soc/intpri_reg.h similarity index 100% rename from components/soc/esp32c61/include/soc/intpri_reg.h rename to components/soc/esp32c61/register/soc/intpri_reg.h diff --git a/components/soc/esp32c61/include/soc/intpri_struct.h b/components/soc/esp32c61/register/soc/intpri_struct.h similarity index 100% rename from components/soc/esp32c61/include/soc/intpri_struct.h rename to components/soc/esp32c61/register/soc/intpri_struct.h diff --git a/components/soc/esp32c61/include/soc/io_mux_reg.h b/components/soc/esp32c61/register/soc/io_mux_reg.h similarity index 100% rename from components/soc/esp32c61/include/soc/io_mux_reg.h rename to components/soc/esp32c61/register/soc/io_mux_reg.h diff --git a/components/soc/esp32c61/include/soc/io_mux_struct.h b/components/soc/esp32c61/register/soc/io_mux_struct.h similarity index 100% rename from components/soc/esp32c61/include/soc/io_mux_struct.h rename to components/soc/esp32c61/register/soc/io_mux_struct.h diff --git a/components/soc/esp32c61/include/soc/ledc_reg.h b/components/soc/esp32c61/register/soc/ledc_reg.h similarity index 100% rename from components/soc/esp32c61/include/soc/ledc_reg.h rename to components/soc/esp32c61/register/soc/ledc_reg.h diff --git a/components/soc/esp32c61/include/soc/ledc_struct.h b/components/soc/esp32c61/register/soc/ledc_struct.h similarity index 100% rename from components/soc/esp32c61/include/soc/ledc_struct.h rename to components/soc/esp32c61/register/soc/ledc_struct.h diff --git a/components/soc/esp32c61/include/soc/lp_analog_peri_reg.h b/components/soc/esp32c61/register/soc/lp_analog_peri_reg.h similarity index 100% rename from components/soc/esp32c61/include/soc/lp_analog_peri_reg.h rename to components/soc/esp32c61/register/soc/lp_analog_peri_reg.h diff --git a/components/soc/esp32c61/include/soc/lp_analog_peri_struct.h b/components/soc/esp32c61/register/soc/lp_analog_peri_struct.h similarity index 100% rename from components/soc/esp32c61/include/soc/lp_analog_peri_struct.h rename to components/soc/esp32c61/register/soc/lp_analog_peri_struct.h diff --git a/components/soc/esp32c61/include/soc/lp_aon_reg.h b/components/soc/esp32c61/register/soc/lp_aon_reg.h similarity index 100% rename from components/soc/esp32c61/include/soc/lp_aon_reg.h rename to components/soc/esp32c61/register/soc/lp_aon_reg.h diff --git a/components/soc/esp32c61/include/soc/lp_aon_struct.h b/components/soc/esp32c61/register/soc/lp_aon_struct.h similarity index 100% rename from components/soc/esp32c61/include/soc/lp_aon_struct.h rename to components/soc/esp32c61/register/soc/lp_aon_struct.h diff --git a/components/soc/esp32c61/include/soc/lp_apm_reg.h b/components/soc/esp32c61/register/soc/lp_apm_reg.h similarity index 100% rename from components/soc/esp32c61/include/soc/lp_apm_reg.h rename to components/soc/esp32c61/register/soc/lp_apm_reg.h diff --git a/components/soc/esp32c61/include/soc/lp_apm_struct.h b/components/soc/esp32c61/register/soc/lp_apm_struct.h similarity index 100% rename from components/soc/esp32c61/include/soc/lp_apm_struct.h rename to components/soc/esp32c61/register/soc/lp_apm_struct.h diff --git a/components/soc/esp32c61/include/soc/lp_clkrst_reg.h b/components/soc/esp32c61/register/soc/lp_clkrst_reg.h similarity index 99% rename from components/soc/esp32c61/include/soc/lp_clkrst_reg.h rename to components/soc/esp32c61/register/soc/lp_clkrst_reg.h index 55d2fb2315f7..755a7c3c6358 100644 --- a/components/soc/esp32c61/include/soc/lp_clkrst_reg.h +++ b/components/soc/esp32c61/register/soc/lp_clkrst_reg.h @@ -211,7 +211,7 @@ extern "C" { #define LP_CLKRST_ANA_PERI_RESET_EN_S 31 /** LP_CLKRST_RESET_CAUSE_REG register - * Represents the reset casue + * Represents the reset cause */ #define LP_CLKRST_RESET_CAUSE_REG (DR_REG_LP_CLKRST_BASE + 0x10) /** LP_CLKRST_RESET_CAUSE : RO; bitpos: [4:0]; default: 0; diff --git a/components/soc/esp32c61/include/soc/lp_clkrst_struct.h b/components/soc/esp32c61/register/soc/lp_clkrst_struct.h similarity index 99% rename from components/soc/esp32c61/include/soc/lp_clkrst_struct.h rename to components/soc/esp32c61/register/soc/lp_clkrst_struct.h index 685b52458723..2c69f169a576 100644 --- a/components/soc/esp32c61/include/soc/lp_clkrst_struct.h +++ b/components/soc/esp32c61/register/soc/lp_clkrst_struct.h @@ -171,7 +171,7 @@ typedef union { } lp_clkrst_lp_rst_en_reg_t; /** Type of reset_cause register - * Represents the reset casue + * Represents the reset cause */ typedef union { struct { diff --git a/components/soc/esp32c61/include/soc/lp_gpio_reg.h b/components/soc/esp32c61/register/soc/lp_gpio_reg.h similarity index 100% rename from components/soc/esp32c61/include/soc/lp_gpio_reg.h rename to components/soc/esp32c61/register/soc/lp_gpio_reg.h diff --git a/components/soc/esp32c61/include/soc/lp_gpio_struct.h b/components/soc/esp32c61/register/soc/lp_gpio_struct.h similarity index 100% rename from components/soc/esp32c61/include/soc/lp_gpio_struct.h rename to components/soc/esp32c61/register/soc/lp_gpio_struct.h diff --git a/components/soc/esp32c61/include/soc/lp_iomux_reg.h b/components/soc/esp32c61/register/soc/lp_iomux_reg.h similarity index 100% rename from components/soc/esp32c61/include/soc/lp_iomux_reg.h rename to components/soc/esp32c61/register/soc/lp_iomux_reg.h diff --git a/components/soc/esp32c61/include/soc/lp_iomux_struct.h b/components/soc/esp32c61/register/soc/lp_iomux_struct.h similarity index 100% rename from components/soc/esp32c61/include/soc/lp_iomux_struct.h rename to components/soc/esp32c61/register/soc/lp_iomux_struct.h diff --git a/components/soc/esp32c61/include/soc/lp_tee_reg.h b/components/soc/esp32c61/register/soc/lp_tee_reg.h similarity index 100% rename from components/soc/esp32c61/include/soc/lp_tee_reg.h rename to components/soc/esp32c61/register/soc/lp_tee_reg.h diff --git a/components/soc/esp32c61/include/soc/lp_tee_struct.h b/components/soc/esp32c61/register/soc/lp_tee_struct.h similarity index 100% rename from components/soc/esp32c61/include/soc/lp_tee_struct.h rename to components/soc/esp32c61/register/soc/lp_tee_struct.h diff --git a/components/soc/esp32c61/include/soc/lp_timer_reg.h b/components/soc/esp32c61/register/soc/lp_timer_reg.h similarity index 100% rename from components/soc/esp32c61/include/soc/lp_timer_reg.h rename to components/soc/esp32c61/register/soc/lp_timer_reg.h diff --git a/components/soc/esp32c61/include/soc/lp_timer_struct.h b/components/soc/esp32c61/register/soc/lp_timer_struct.h similarity index 100% rename from components/soc/esp32c61/include/soc/lp_timer_struct.h rename to components/soc/esp32c61/register/soc/lp_timer_struct.h diff --git a/components/soc/esp32c61/include/soc/lp_wdt_reg.h b/components/soc/esp32c61/register/soc/lp_wdt_reg.h similarity index 100% rename from components/soc/esp32c61/include/soc/lp_wdt_reg.h rename to components/soc/esp32c61/register/soc/lp_wdt_reg.h diff --git a/components/soc/esp32c61/include/soc/lp_wdt_struct.h b/components/soc/esp32c61/register/soc/lp_wdt_struct.h similarity index 100% rename from components/soc/esp32c61/include/soc/lp_wdt_struct.h rename to components/soc/esp32c61/register/soc/lp_wdt_struct.h diff --git a/components/soc/esp32c61/include/soc/lpperi_reg.h b/components/soc/esp32c61/register/soc/lpperi_reg.h similarity index 100% rename from components/soc/esp32c61/include/soc/lpperi_reg.h rename to components/soc/esp32c61/register/soc/lpperi_reg.h diff --git a/components/soc/esp32c61/include/soc/lpperi_struct.h b/components/soc/esp32c61/register/soc/lpperi_struct.h similarity index 100% rename from components/soc/esp32c61/include/soc/lpperi_struct.h rename to components/soc/esp32c61/register/soc/lpperi_struct.h diff --git a/components/soc/esp32c61/include/soc/mem_monitor_reg.h b/components/soc/esp32c61/register/soc/mem_monitor_reg.h similarity index 100% rename from components/soc/esp32c61/include/soc/mem_monitor_reg.h rename to components/soc/esp32c61/register/soc/mem_monitor_reg.h diff --git a/components/soc/esp32c61/include/soc/mem_monitor_struct.h b/components/soc/esp32c61/register/soc/mem_monitor_struct.h similarity index 100% rename from components/soc/esp32c61/include/soc/mem_monitor_struct.h rename to components/soc/esp32c61/register/soc/mem_monitor_struct.h diff --git a/components/soc/esp32c61/include/soc/pau_reg.h b/components/soc/esp32c61/register/soc/pau_reg.h similarity index 100% rename from components/soc/esp32c61/include/soc/pau_reg.h rename to components/soc/esp32c61/register/soc/pau_reg.h diff --git a/components/soc/esp32c61/include/soc/pau_struct.h b/components/soc/esp32c61/register/soc/pau_struct.h similarity index 100% rename from components/soc/esp32c61/include/soc/pau_struct.h rename to components/soc/esp32c61/register/soc/pau_struct.h diff --git a/components/soc/esp32c61/include/soc/pcr_reg.h b/components/soc/esp32c61/register/soc/pcr_reg.h similarity index 100% rename from components/soc/esp32c61/include/soc/pcr_reg.h rename to components/soc/esp32c61/register/soc/pcr_reg.h diff --git a/components/soc/esp32c61/include/soc/pcr_struct.h b/components/soc/esp32c61/register/soc/pcr_struct.h similarity index 100% rename from components/soc/esp32c61/include/soc/pcr_struct.h rename to components/soc/esp32c61/register/soc/pcr_struct.h diff --git a/components/soc/esp32c61/include/soc/pmu_reg.h b/components/soc/esp32c61/register/soc/pmu_reg.h similarity index 100% rename from components/soc/esp32c61/include/soc/pmu_reg.h rename to components/soc/esp32c61/register/soc/pmu_reg.h diff --git a/components/soc/esp32c61/include/soc/pmu_struct.h b/components/soc/esp32c61/register/soc/pmu_struct.h similarity index 99% rename from components/soc/esp32c61/include/soc/pmu_struct.h rename to components/soc/esp32c61/register/soc/pmu_struct.h index 3e2f9fb16f6f..e59470be4e90 100644 --- a/components/soc/esp32c61/include/soc/pmu_struct.h +++ b/components/soc/esp32c61/register/soc/pmu_struct.h @@ -11,7 +11,7 @@ extern "C" { #endif -#include "soc.h" +#include "soc/soc.h" #include "soc/pmu_reg.h" typedef union { diff --git a/components/soc/esp32c61/include/soc/pvt_reg.h b/components/soc/esp32c61/register/soc/pvt_reg.h similarity index 100% rename from components/soc/esp32c61/include/soc/pvt_reg.h rename to components/soc/esp32c61/register/soc/pvt_reg.h diff --git a/components/soc/esp32c61/include/soc/pvt_struct.h b/components/soc/esp32c61/register/soc/pvt_struct.h similarity index 100% rename from components/soc/esp32c61/include/soc/pvt_struct.h rename to components/soc/esp32c61/register/soc/pvt_struct.h diff --git a/components/soc/esp32c61/include/soc/reg_base.h b/components/soc/esp32c61/register/soc/reg_base.h similarity index 100% rename from components/soc/esp32c61/include/soc/reg_base.h rename to components/soc/esp32c61/register/soc/reg_base.h diff --git a/components/soc/esp32c61/include/soc/sha_reg.h b/components/soc/esp32c61/register/soc/sha_reg.h similarity index 98% rename from components/soc/esp32c61/include/soc/sha_reg.h rename to components/soc/esp32c61/register/soc/sha_reg.h index ab9f346e774c..4dd7f4a2d9d5 100644 --- a/components/soc/esp32c61/include/soc/sha_reg.h +++ b/components/soc/esp32c61/register/soc/sha_reg.h @@ -161,7 +161,7 @@ extern "C" { #define SHA_DATE_S 0 /** SHA_H_MEM register - * Sha H memory which contains intermediate hash or finial hash. + * Sha H memory which contains intermediate hash or final hash. */ #define SHA_H_MEM (DR_REG_SHA_BASE + 0x40) #define SHA_H_MEM_SIZE_BYTES 64 diff --git a/components/soc/esp32c61/include/soc/sha_struct.h b/components/soc/esp32c61/register/soc/sha_struct.h similarity index 100% rename from components/soc/esp32c61/include/soc/sha_struct.h rename to components/soc/esp32c61/register/soc/sha_struct.h diff --git a/components/soc/esp32c61/include/soc/soc_etm_reg.h b/components/soc/esp32c61/register/soc/soc_etm_reg.h similarity index 100% rename from components/soc/esp32c61/include/soc/soc_etm_reg.h rename to components/soc/esp32c61/register/soc/soc_etm_reg.h diff --git a/components/soc/esp32c61/include/soc/soc_etm_struct.h b/components/soc/esp32c61/register/soc/soc_etm_struct.h similarity index 100% rename from components/soc/esp32c61/include/soc/soc_etm_struct.h rename to components/soc/esp32c61/register/soc/soc_etm_struct.h diff --git a/components/soc/esp32c61/include/soc/spi1_mem_reg.h b/components/soc/esp32c61/register/soc/spi1_mem_reg.h similarity index 100% rename from components/soc/esp32c61/include/soc/spi1_mem_reg.h rename to components/soc/esp32c61/register/soc/spi1_mem_reg.h diff --git a/components/soc/esp32c61/include/soc/spi1_mem_struct.h b/components/soc/esp32c61/register/soc/spi1_mem_struct.h similarity index 100% rename from components/soc/esp32c61/include/soc/spi1_mem_struct.h rename to components/soc/esp32c61/register/soc/spi1_mem_struct.h diff --git a/components/soc/esp32c61/include/soc/spi_mem_c_reg.h b/components/soc/esp32c61/register/soc/spi_mem_c_reg.h similarity index 100% rename from components/soc/esp32c61/include/soc/spi_mem_c_reg.h rename to components/soc/esp32c61/register/soc/spi_mem_c_reg.h diff --git a/components/soc/esp32c61/include/soc/spi_mem_c_struct.h b/components/soc/esp32c61/register/soc/spi_mem_c_struct.h similarity index 100% rename from components/soc/esp32c61/include/soc/spi_mem_c_struct.h rename to components/soc/esp32c61/register/soc/spi_mem_c_struct.h diff --git a/components/soc/esp32c61/include/soc/spi_reg.h b/components/soc/esp32c61/register/soc/spi_reg.h similarity index 99% rename from components/soc/esp32c61/include/soc/spi_reg.h rename to components/soc/esp32c61/register/soc/spi_reg.h index 66a09daf9f39..a0e934fcc242 100644 --- a/components/soc/esp32c61/include/soc/spi_reg.h +++ b/components/soc/esp32c61/register/soc/spi_reg.h @@ -273,7 +273,7 @@ extern "C" { /** SPI_CLK_EQU_SYSCLK : R/W; bitpos: [31]; default: 1; * Configures whether or not the SPI_CLK is equal to APB_CLK in master transfer.\\ * 0: SPI_CLK is divided from APB_CLK.\\ - * 1: SPI_CLK is eqaul to APB_CLK.\\ + * 1: SPI_CLK is equal to APB_CLK.\\ * Can be configured in CONF state. */ #define SPI_CLK_EQU_SYSCLK (BIT(31)) diff --git a/components/soc/esp32c61/include/soc/spi_struct.h b/components/soc/esp32c61/register/soc/spi_struct.h similarity index 99% rename from components/soc/esp32c61/include/soc/spi_struct.h rename to components/soc/esp32c61/register/soc/spi_struct.h index 7b84c9d658da..88690647ed5e 100644 --- a/components/soc/esp32c61/include/soc/spi_struct.h +++ b/components/soc/esp32c61/register/soc/spi_struct.h @@ -819,7 +819,7 @@ typedef union { /** clk_equ_sysclk : R/W; bitpos: [31]; default: 1; * Configures whether or not the SPI_CLK is equal to APB_CLK in master transfer.\\ * 0: SPI_CLK is divided from APB_CLK.\\ - * 1: SPI_CLK is eqaul to APB_CLK.\\ + * 1: SPI_CLK is equal to APB_CLK.\\ * Can be configured in CONF state. */ uint32_t clk_equ_sysclk:1; diff --git a/components/soc/esp32c61/include/soc/systimer_reg.h b/components/soc/esp32c61/register/soc/systimer_reg.h similarity index 100% rename from components/soc/esp32c61/include/soc/systimer_reg.h rename to components/soc/esp32c61/register/soc/systimer_reg.h diff --git a/components/soc/esp32c61/include/soc/systimer_struct.h b/components/soc/esp32c61/register/soc/systimer_struct.h similarity index 100% rename from components/soc/esp32c61/include/soc/systimer_struct.h rename to components/soc/esp32c61/register/soc/systimer_struct.h diff --git a/components/soc/esp32c61/include/soc/tee_reg.h b/components/soc/esp32c61/register/soc/tee_reg.h similarity index 100% rename from components/soc/esp32c61/include/soc/tee_reg.h rename to components/soc/esp32c61/register/soc/tee_reg.h diff --git a/components/soc/esp32c61/include/soc/tee_struct.h b/components/soc/esp32c61/register/soc/tee_struct.h similarity index 100% rename from components/soc/esp32c61/include/soc/tee_struct.h rename to components/soc/esp32c61/register/soc/tee_struct.h diff --git a/components/soc/esp32c61/include/soc/timer_group_reg.h b/components/soc/esp32c61/register/soc/timer_group_reg.h similarity index 100% rename from components/soc/esp32c61/include/soc/timer_group_reg.h rename to components/soc/esp32c61/register/soc/timer_group_reg.h diff --git a/components/soc/esp32c61/include/soc/timer_group_struct.h b/components/soc/esp32c61/register/soc/timer_group_struct.h similarity index 100% rename from components/soc/esp32c61/include/soc/timer_group_struct.h rename to components/soc/esp32c61/register/soc/timer_group_struct.h diff --git a/components/soc/esp32c61/include/soc/trace_reg.h b/components/soc/esp32c61/register/soc/trace_reg.h similarity index 98% rename from components/soc/esp32c61/include/soc/trace_reg.h rename to components/soc/esp32c61/register/soc/trace_reg.h index 1abfbbcd0453..785965af2c75 100644 --- a/components/soc/esp32c61/include/soc/trace_reg.h +++ b/components/soc/esp32c61/register/soc/trace_reg.h @@ -76,7 +76,7 @@ extern "C" { #define TRACE_FIFO_EMPTY_S 0 /** TRACE_WORK_STATUS : RO; bitpos: [2:1]; default: 0; * Represent the state of the encoder: \\0: Idle state \\1: Working state\\ 2: Wait - * state becasue hart is halted or in reset \\3: Lost state\\ + * state because hart is halted or in reset \\3: Lost state\\ */ #define TRACE_WORK_STATUS 0x00000003U #define TRACE_WORK_STATUS_M (TRACE_WORK_STATUS_V << TRACE_WORK_STATUS_S) @@ -186,7 +186,7 @@ extern "C" { #define TRACE_DM_TRIGGER_ENA_V 0x00000001U #define TRACE_DM_TRIGGER_ENA_S 0 /** TRACE_RESET_ENA : R/W; bitpos: [1]; default: 0; - * Configure whether to reset, when enabeld, if cpu have reset, the encoder will + * Configure whether to reset, when enabled, if cpu have reset, the encoder will * output a packet to report the address of the last instruction, and upon reset * deassertion, the encoder start again.\\0: Disable\\0: Enable\\ */ @@ -216,7 +216,7 @@ extern "C" { #define TRACE_FULL_ADDRESS_V 0x00000001U #define TRACE_FULL_ADDRESS_S 4 /** TRACE_IMPLICIT_EXCEPT : R/W; bitpos: [5]; default: 0; - * Configure whether or not enabel implicit exception mode. When enabled,, do not sent + * Configure whether or not enable implicit exception mode. When enabled,, do not sent * exception address, only exception cause in exception packets.\\1: enabled\\0: * disabled\\ */ @@ -418,7 +418,7 @@ extern "C" { */ #define TRACE_AHB_CONFIG_REG (DR_REG_TRACE_BASE + 0x40) /** TRACE_HBURST : R/W; bitpos: [2:0]; default: 0; - * Configures the AHB burst mode. \\0: SIGNLE \\1: INCR(length not defined) \\2:INCR4 + * Configures the AHB burst mode. \\0: SINGLE \\1: INCR(length not defined) \\2:INCR4 * \\4:INCR8 \\Others:Invalid */ #define TRACE_HBURST 0x00000007U @@ -440,7 +440,7 @@ extern "C" { /** TRACE_CLK_EN : R/W; bitpos: [0]; default: 1; * Configures register clock gating. \\0: Support clock only when the application * writes registers to save power. \\1:Always force the clock on for registers \\ This - * bit does't affect register access. + * bit doesn't affect register access. */ #define TRACE_CLK_EN (BIT(0)) #define TRACE_CLK_EN_M (TRACE_CLK_EN_V << TRACE_CLK_EN_S) diff --git a/components/soc/esp32c61/include/soc/trace_struct.h b/components/soc/esp32c61/register/soc/trace_struct.h similarity index 98% rename from components/soc/esp32c61/include/soc/trace_struct.h rename to components/soc/esp32c61/register/soc/trace_struct.h index a8337ed0fdb9..1b73fe2666f5 100644 --- a/components/soc/esp32c61/include/soc/trace_struct.h +++ b/components/soc/esp32c61/register/soc/trace_struct.h @@ -81,7 +81,7 @@ typedef union { uint32_t fifo_empty:1; /** work_status : RO; bitpos: [2:1]; default: 0; * Represent the state of the encoder: \\0: Idle state \\1: Working state\\ 2: Wait - * state becasue hart is halted or in reset \\3: Lost state\\ + * state because hart is halted or in reset \\3: Lost state\\ */ uint32_t work_status:2; uint32_t reserved_3:29; @@ -184,7 +184,7 @@ typedef union { */ uint32_t dm_trigger_ena:1; /** reset_ena : R/W; bitpos: [1]; default: 0; - * Configure whether to reset, when enabeld, if cpu have reset, the encoder will + * Configure whether to reset, when enabled, if cpu have reset, the encoder will * output a packet to report the address of the last instruction, and upon reset * deassertion, the encoder start again.\\0: Disable\\0: Enable\\ */ @@ -202,7 +202,7 @@ typedef union { */ uint32_t full_address:1; /** implicit_except : R/W; bitpos: [5]; default: 0; - * Configure whether or not enabel implicit exception mode. When enabled,, do not sent + * Configure whether or not enable implicit exception mode. When enabled,, do not sent * exception address, only exception cause in exception packets.\\1: enabled\\0: * disabled\\ */ @@ -381,7 +381,7 @@ typedef union { typedef union { struct { /** hburst : R/W; bitpos: [2:0]; default: 0; - * Configures the AHB burst mode. \\0: SIGNLE \\1: INCR(length not defined) \\2:INCR4 + * Configures the AHB burst mode. \\0: SINGLE \\1: INCR(length not defined) \\2:INCR4 * \\4:INCR8 \\Others:Invalid */ uint32_t hburst:3; @@ -404,7 +404,7 @@ typedef union { /** clk_en : R/W; bitpos: [0]; default: 1; * Configures register clock gating. \\0: Support clock only when the application * writes registers to save power. \\1:Always force the clock on for registers \\ This - * bit does't affect register access. + * bit doesn't affect register access. */ uint32_t clk_en:1; uint32_t reserved_1:31; diff --git a/components/soc/esp32c61/include/soc/uart_reg.h b/components/soc/esp32c61/register/soc/uart_reg.h similarity index 100% rename from components/soc/esp32c61/include/soc/uart_reg.h rename to components/soc/esp32c61/register/soc/uart_reg.h diff --git a/components/soc/esp32c61/include/soc/uart_struct.h b/components/soc/esp32c61/register/soc/uart_struct.h similarity index 100% rename from components/soc/esp32c61/include/soc/uart_struct.h rename to components/soc/esp32c61/register/soc/uart_struct.h diff --git a/components/soc/esp32c61/include/soc/usb_serial_jtag_reg.h b/components/soc/esp32c61/register/soc/usb_serial_jtag_reg.h similarity index 99% rename from components/soc/esp32c61/include/soc/usb_serial_jtag_reg.h rename to components/soc/esp32c61/register/soc/usb_serial_jtag_reg.h index e9e9b8337331..255d08ed4bb9 100644 --- a/components/soc/esp32c61/include/soc/usb_serial_jtag_reg.h +++ b/components/soc/esp32c61/register/soc/usb_serial_jtag_reg.h @@ -1144,7 +1144,7 @@ extern "C" { #define USB_SERIAL_JTAG_SERIAL_OUT_AFIFO_RESET_RD_V 0x00000001U #define USB_SERIAL_JTAG_SERIAL_OUT_AFIFO_RESET_RD_S 3 /** USB_SERIAL_JTAG_SERIAL_OUT_AFIFO_REMPTY : RO; bitpos: [4]; default: 1; - * CDC_ACM OUTOUT async FIFO empty signal in read clock domain. + * CDC_ACM OUTPUT async FIFO empty signal in read clock domain. */ #define USB_SERIAL_JTAG_SERIAL_OUT_AFIFO_REMPTY (BIT(4)) #define USB_SERIAL_JTAG_SERIAL_OUT_AFIFO_REMPTY_M (USB_SERIAL_JTAG_SERIAL_OUT_AFIFO_REMPTY_V << USB_SERIAL_JTAG_SERIAL_OUT_AFIFO_REMPTY_S) diff --git a/components/soc/esp32c61/include/soc/usb_serial_jtag_struct.h b/components/soc/esp32c61/register/soc/usb_serial_jtag_struct.h similarity index 100% rename from components/soc/esp32c61/include/soc/usb_serial_jtag_struct.h rename to components/soc/esp32c61/register/soc/usb_serial_jtag_struct.h diff --git a/components/soc/esp32c61/include/soc/xts_aes_reg.h b/components/soc/esp32c61/register/soc/xts_aes_reg.h similarity index 98% rename from components/soc/esp32c61/include/soc/xts_aes_reg.h rename to components/soc/esp32c61/register/soc/xts_aes_reg.h index 55e0e19beb1c..c3e08778d13a 100644 --- a/components/soc/esp32c61/include/soc/xts_aes_reg.h +++ b/components/soc/esp32c61/register/soc/xts_aes_reg.h @@ -32,7 +32,7 @@ s. Please do not use this field..*/ #define XTS_AES_DESTINATION_REG(i) (REG_SPI_MEM_BASE(i) + 0x344) /* XTS_AES_DESTINATION : R/W ;bitpos:[0] ;default: 1'b0 ; */ -/*description: This bit stores the destination parameter which will be used in manual encryptio +/*description: This bit stores the destination parameter which will be used in manual encryption n calculation. 0: flash(default), 1: psram(reserved). Only default value can be used..*/ #define XTS_AES_DESTINATION (BIT(0)) @@ -54,7 +54,7 @@ size parameter..*/ /* XTS_AES_TRIGGER : WT ;bitpos:[0] ;default: 1'b0 ; */ /*description: Set this bit to trigger the process of manual encryption calculation. This actio n should only be asserted when manual encryption status is 0. After this action, - manual encryption status becomes 1. After calculation is done, manual encryptio + manual encryption status becomes 1. After calculation is done, manual encryption n status becomes 2..*/ #define XTS_AES_TRIGGER (BIT(0)) #define XTS_AES_TRIGGER_M (BIT(0)) @@ -115,7 +115,7 @@ ing key 1..*/ #define XTS_AES_CRYPT_CALC_D_DPA_EN_V 0x1 #define XTS_AES_CRYPT_CALC_D_DPA_EN_S 3 /* XTS_AES_CRYPT_SECURITY_LEVEL : R/W ;bitpos:[2:0] ;default: 3'd7 ; */ -/*description: Set the security level of spi mem cryption. 0: Shut off cryption DPA funtion. 1- +/*description: Set the security level of spi mem cryption. 0: Shut off cryption DPA function. 1- 7: The bigger the number is, the more secure the cryption is. (Note that the per formance of cryption will decrease together with this number increasing).*/ #define XTS_AES_CRYPT_SECURITY_LEVEL 0x00000007 From 55493e933eeb4d1627158a094b48c54c56b05e52 Mon Sep 17 00:00:00 2001 From: laokaiyao Date: Fri, 6 Sep 2024 17:55:53 +0800 Subject: [PATCH 146/365] refactor(soc): sort esp32p4 soc headers --- .../soc/esp32p4/include/soc/dport_access.h | 1 - .../soc/esp32p4/include/soc/reset_reasons.h | 2 +- components/soc/esp32p4/include/soc/soc.h | 2 +- .../soc/esp32p4/include/soc/usb_dwc_struct.h | 2 +- components/soc/esp32p4/register/soc/.gitkeep | 0 .../{include => register}/soc/adc_reg.h | 0 .../{include => register}/soc/adc_struct.h | 0 .../{include => register}/soc/aes_reg.h | 0 .../{include => register}/soc/aes_struct.h | 0 .../{include => register}/soc/ahb_dma_reg.h | 0 .../soc/ahb_dma_struct.h | 0 .../soc/assist_debug_reg.h | 16 +++++------ .../soc/assist_debug_struct.h | 22 +++++++-------- .../{include => register}/soc/axi_dma_reg.h | 20 ++++++------- .../soc/axi_dma_struct.h | 0 .../soc/bitscrambler_reg.h | 4 +-- .../soc/bitscrambler_struct.h | 4 +-- .../{include => register}/soc/cache_reg.h | 8 +++--- .../{include => register}/soc/cache_struct.h | 0 .../{include => register}/soc/dma2d_reg.h | 0 .../{include => register}/soc/dma2d_struct.h | 0 .../{include => register}/soc/dma_pms_reg.h | 0 .../soc/dma_pms_struct.h | 0 .../{include => register}/soc/ds_reg.h | 0 .../{include => register}/soc/ds_struct.h | 0 .../{include => register}/soc/dw_gdma_reg.h | 0 .../soc/dw_gdma_struct.h | 0 .../{include => register}/soc/ecc_mult_reg.h | 4 +-- .../soc/ecc_mult_struct.h | 4 +-- .../{include => register}/soc/ecdsa_reg.h | 6 ++-- .../{include => register}/soc/ecdsa_struct.h | 6 ++-- .../{include => register}/soc/efuse_reg.h | 2 +- .../{include => register}/soc/efuse_struct.h | 0 .../soc/emac_dma_struct.h | 0 .../soc/emac_mac_struct.h | 0 .../{include => register}/soc/gpio_ext_reg.h | 0 .../soc/gpio_ext_struct.h | 0 .../{include => register}/soc/gpio_reg.h | 4 +-- .../{include => register}/soc/gpio_struct.h | 4 +-- .../{include => register}/soc/h264_dma_reg.h | 0 .../soc/h264_dma_struct.h | 0 .../{include => register}/soc/h264_reg.h | 0 .../{include => register}/soc/h264_struct.h | 0 .../{include => register}/soc/hmac_reg.h | 0 .../{include => register}/soc/hmac_struct.h | 0 .../soc/hp2lp_peri_pms_reg.h | 0 .../soc/hp2lp_peri_pms_struct.h | 0 .../soc/hp_peri_pms_reg.h | 0 .../soc/hp_peri_pms_struct.h | 0 .../soc/hp_sys_clkrst_reg.h | 0 .../soc/hp_sys_clkrst_struct.h | 0 .../{include => register}/soc/hp_system_reg.h | 26 ++++++++--------- .../soc/hp_system_struct.h | 28 +++++++++---------- .../{include => register}/soc/huk_reg.h | 0 .../{include => register}/soc/huk_struct.h | 0 .../soc/i2c_ana_mst_reg.h | 0 .../soc/i2c_ana_mst_struct.h | 0 .../{include => register}/soc/i2c_reg.h | 0 .../{include => register}/soc/i2c_struct.h | 0 .../{include => register}/soc/i2s_reg.h | 2 +- .../{include => register}/soc/i2s_struct.h | 2 +- .../soc/i3c_mst_mem_reg.h | 0 .../soc/i3c_mst_mem_struct.h | 0 .../{include => register}/soc/i3c_mst_reg.h | 0 .../soc/i3c_mst_struct.h | 0 .../{include => register}/soc/i3c_slv_reg.h | 2 +- .../soc/i3c_slv_struct.h | 6 ++-- .../soc/icm_sys_qos_reg.h | 0 .../soc/icm_sys_qos_struct.h | 0 .../{include => register}/soc/icm_sys_reg.h | 0 .../soc/icm_sys_struct.h | 0 .../soc/interrupt_core0_reg.h | 0 .../soc/interrupt_core0_struct.h | 0 .../soc/interrupt_core1_reg.h | 0 .../soc/interrupt_core1_struct.h | 0 .../{include => register}/soc/io_mux_reg.h | 2 +- .../{include => register}/soc/io_mux_struct.h | 0 .../soc/iomux_mspi_pin_reg.h | 0 .../soc/iomux_mspi_pin_struct.h | 0 .../{include => register}/soc/isp_reg.h | 28 +++++++++---------- .../{include => register}/soc/isp_struct.h | 0 .../{include => register}/soc/jpeg_reg.h | 0 .../{include => register}/soc/jpeg_struct.h | 0 .../{include => register}/soc/keymng_reg.h | 0 .../{include => register}/soc/keymng_struct.h | 0 .../soc/l2mem_monitor_reg.h | 0 .../soc/l2mem_monitor_struct.h | 10 +++---- .../{include => register}/soc/lcd_cam_reg.h | 0 .../soc/lcd_cam_struct.h | 0 .../{include => register}/soc/ledc_reg.h | 0 .../{include => register}/soc/ledc_struct.h | 0 .../soc/lp2hp_peri_pms_reg.h | 0 .../soc/lp2hp_peri_pms_struct.h | 0 .../{include => register}/soc/lp_adc_reg.h | 0 .../{include => register}/soc/lp_adc_struct.h | 0 .../soc/lp_analog_peri_reg.h | 0 .../soc/lp_analog_peri_struct.h | 0 .../{include => register}/soc/lp_clkrst_reg.h | 2 +- .../soc/lp_clkrst_struct.h | 2 +- .../{include => register}/soc/lp_gpio_reg.h | 0 .../soc/lp_gpio_struct.h | 0 .../{include => register}/soc/lp_i2c_reg.h | 0 .../{include => register}/soc/lp_i2c_struct.h | 0 .../{include => register}/soc/lp_i2s_reg.h | 0 .../{include => register}/soc/lp_i2s_struct.h | 0 .../{include => register}/soc/lp_intr_reg.h | 0 .../soc/lp_intr_struct.h | 0 .../{include => register}/soc/lp_iomux_reg.h | 0 .../soc/lp_iomux_struct.h | 0 .../soc/lp_mailbox_reg.h | 0 .../soc/lp_mailbox_struct.h | 0 .../soc/lp_peri_pms_reg.h | 0 .../soc/lp_peri_pms_struct.h | 0 .../{include => register}/soc/lp_spi_reg.h | 4 +-- .../{include => register}/soc/lp_spi_struct.h | 0 .../{include => register}/soc/lp_system_reg.h | 0 .../soc/lp_system_struct.h | 0 .../{include => register}/soc/lp_timer_reg.h | 0 .../soc/lp_timer_struct.h | 0 .../{include => register}/soc/lp_uart_reg.h | 8 +++--- .../soc/lp_uart_struct.h | 8 +++--- .../{include => register}/soc/lp_wdt_reg.h | 0 .../{include => register}/soc/lp_wdt_struct.h | 0 .../{include => register}/soc/lpperi_reg.h | 0 .../{include => register}/soc/lpperi_struct.h | 0 .../{include => register}/soc/mcpwm_reg.h | 6 ++-- .../{include => register}/soc/mcpwm_struct.h | 2 +- .../soc/mipi_csi_bridge_reg.h | 0 .../soc/mipi_csi_bridge_struct.h | 0 .../soc/mipi_csi_host_reg.h | 0 .../soc/mipi_csi_host_struct.h | 0 .../soc/mipi_dsi_bridge_reg.h | 0 .../soc/mipi_dsi_bridge_struct.h | 0 .../soc/mipi_dsi_host_reg.h | 0 .../soc/mipi_dsi_host_struct.h | 0 .../{include => register}/soc/parl_io_reg.h | 8 +++--- .../soc/parl_io_struct.h | 8 +++--- .../{include => register}/soc/pau_reg.h | 0 .../{include => register}/soc/pau_struct.h | 0 .../{include => register}/soc/pcnt_reg.h | 0 .../{include => register}/soc/pcnt_struct.h | 0 .../{include => register}/soc/pmu_reg.h | 0 .../{include => register}/soc/pmu_struct.h | 0 .../{include => register}/soc/ppa_reg.h | 6 ++-- .../{include => register}/soc/ppa_struct.h | 6 ++-- .../{include => register}/soc/pvt_reg.h | 0 .../{include => register}/soc/pvt_struct.h | 0 .../{include => register}/soc/reg_base.h | 0 .../{include => register}/soc/rmt_reg.h | 0 .../{include => register}/soc/rmt_struct.h | 0 .../{include => register}/soc/rsa_reg.h | 0 .../{include => register}/soc/rsa_struct.h | 0 .../soc/rtclockcali_reg.h | 16 +++++------ .../soc/rtclockcali_struct.h | 16 +++++------ .../{include => register}/soc/sdmmc_reg.h | 12 ++++---- .../{include => register}/soc/sdmmc_struct.h | 12 ++++---- .../{include => register}/soc/sha_reg.h | 2 +- .../{include => register}/soc/sha_struct.h | 0 .../{include => register}/soc/soc_etm_reg.h | 0 .../soc/soc_etm_struct.h | 0 .../soc/spi1_mem_c_reg.h | 4 +-- .../soc/spi1_mem_c_struct.h | 4 +-- .../soc/spi1_mem_s_reg.h | 4 +-- .../soc/spi1_mem_s_struct.h | 4 +-- .../{include => register}/soc/spi_mem_c_reg.h | 4 +-- .../soc/spi_mem_c_struct.h | 4 +-- .../{include => register}/soc/spi_mem_s_reg.h | 6 ++-- .../soc/spi_mem_s_struct.h | 6 ++-- .../{include => register}/soc/spi_reg.h | 4 +-- .../{include => register}/soc/spi_struct.h | 4 +-- .../{include => register}/soc/systimer_reg.h | 0 .../soc/systimer_struct.h | 0 .../soc/tcm_monitor_reg.h | 10 +++---- .../soc/tcm_monitor_struct.h | 10 +++---- .../soc/timer_group_reg.h | 0 .../soc/timer_group_struct.h | 0 .../{include => register}/soc/touch_reg.h | 0 .../{include => register}/soc/touch_struct.h | 0 .../{include => register}/soc/trace_reg.h | 0 .../{include => register}/soc/trace_struct.h | 0 .../{include => register}/soc/tsens_reg.h | 0 .../{include => register}/soc/tsens_struct.h | 0 .../{include => register}/soc/twai_reg.h | 0 .../{include => register}/soc/twai_struct.h | 0 .../{include => register}/soc/uart_reg.h | 10 +++---- .../{include => register}/soc/uart_struct.h | 10 +++---- .../{include => register}/soc/uhci_reg.h | 0 .../{include => register}/soc/uhci_struct.h | 0 .../soc/usb_serial_jtag_reg.h | 2 +- .../soc/usb_serial_jtag_struct.h | 0 .../{include => register}/soc/usb_wrap_reg.h | 0 .../soc/usb_wrap_struct.h | 0 192 files changed, 210 insertions(+), 211 deletions(-) delete mode 100644 components/soc/esp32p4/register/soc/.gitkeep rename components/soc/esp32p4/{include => register}/soc/adc_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/adc_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/aes_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/aes_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/ahb_dma_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/ahb_dma_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/assist_debug_reg.h (99%) rename components/soc/esp32p4/{include => register}/soc/assist_debug_struct.h (98%) rename components/soc/esp32p4/{include => register}/soc/axi_dma_reg.h (99%) rename components/soc/esp32p4/{include => register}/soc/axi_dma_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/bitscrambler_reg.h (99%) rename components/soc/esp32p4/{include => register}/soc/bitscrambler_struct.h (99%) rename components/soc/esp32p4/{include => register}/soc/cache_reg.h (99%) rename components/soc/esp32p4/{include => register}/soc/cache_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/dma2d_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/dma2d_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/dma_pms_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/dma_pms_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/ds_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/ds_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/dw_gdma_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/dw_gdma_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/ecc_mult_reg.h (97%) rename components/soc/esp32p4/{include => register}/soc/ecc_mult_struct.h (96%) rename components/soc/esp32p4/{include => register}/soc/ecdsa_reg.h (98%) rename components/soc/esp32p4/{include => register}/soc/ecdsa_struct.h (97%) rename components/soc/esp32p4/{include => register}/soc/efuse_reg.h (99%) rename components/soc/esp32p4/{include => register}/soc/efuse_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/emac_dma_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/emac_mac_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/gpio_ext_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/gpio_ext_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/gpio_reg.h (99%) rename components/soc/esp32p4/{include => register}/soc/gpio_struct.h (99%) rename components/soc/esp32p4/{include => register}/soc/h264_dma_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/h264_dma_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/h264_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/h264_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/hmac_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/hmac_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/hp2lp_peri_pms_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/hp2lp_peri_pms_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/hp_peri_pms_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/hp_peri_pms_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/hp_sys_clkrst_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/hp_sys_clkrst_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/hp_system_reg.h (99%) rename components/soc/esp32p4/{include => register}/soc/hp_system_struct.h (98%) rename components/soc/esp32p4/{include => register}/soc/huk_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/huk_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/i2c_ana_mst_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/i2c_ana_mst_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/i2c_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/i2c_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/i2s_reg.h (99%) rename components/soc/esp32p4/{include => register}/soc/i2s_struct.h (99%) rename components/soc/esp32p4/{include => register}/soc/i3c_mst_mem_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/i3c_mst_mem_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/i3c_mst_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/i3c_mst_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/i3c_slv_reg.h (99%) rename components/soc/esp32p4/{include => register}/soc/i3c_slv_struct.h (99%) rename components/soc/esp32p4/{include => register}/soc/icm_sys_qos_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/icm_sys_qos_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/icm_sys_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/icm_sys_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/interrupt_core0_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/interrupt_core0_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/interrupt_core1_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/interrupt_core1_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/io_mux_reg.h (99%) rename components/soc/esp32p4/{include => register}/soc/io_mux_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/iomux_mspi_pin_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/iomux_mspi_pin_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/isp_reg.h (99%) rename components/soc/esp32p4/{include => register}/soc/isp_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/jpeg_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/jpeg_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/keymng_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/keymng_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/l2mem_monitor_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/l2mem_monitor_struct.h (98%) rename components/soc/esp32p4/{include => register}/soc/lcd_cam_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/lcd_cam_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/ledc_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/ledc_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/lp2hp_peri_pms_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/lp2hp_peri_pms_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/lp_adc_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/lp_adc_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/lp_analog_peri_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/lp_analog_peri_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/lp_clkrst_reg.h (99%) rename components/soc/esp32p4/{include => register}/soc/lp_clkrst_struct.h (99%) rename components/soc/esp32p4/{include => register}/soc/lp_gpio_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/lp_gpio_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/lp_i2c_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/lp_i2c_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/lp_i2s_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/lp_i2s_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/lp_intr_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/lp_intr_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/lp_iomux_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/lp_iomux_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/lp_mailbox_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/lp_mailbox_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/lp_peri_pms_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/lp_peri_pms_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/lp_spi_reg.h (99%) rename components/soc/esp32p4/{include => register}/soc/lp_spi_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/lp_system_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/lp_system_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/lp_timer_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/lp_timer_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/lp_uart_reg.h (99%) rename components/soc/esp32p4/{include => register}/soc/lp_uart_struct.h (99%) rename components/soc/esp32p4/{include => register}/soc/lp_wdt_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/lp_wdt_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/lpperi_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/lpperi_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/mcpwm_reg.h (99%) rename components/soc/esp32p4/{include => register}/soc/mcpwm_struct.h (99%) rename components/soc/esp32p4/{include => register}/soc/mipi_csi_bridge_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/mipi_csi_bridge_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/mipi_csi_host_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/mipi_csi_host_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/mipi_dsi_bridge_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/mipi_dsi_bridge_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/mipi_dsi_host_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/mipi_dsi_host_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/parl_io_reg.h (98%) rename components/soc/esp32p4/{include => register}/soc/parl_io_struct.h (98%) rename components/soc/esp32p4/{include => register}/soc/pau_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/pau_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/pcnt_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/pcnt_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/pmu_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/pmu_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/ppa_reg.h (99%) rename components/soc/esp32p4/{include => register}/soc/ppa_struct.h (99%) rename components/soc/esp32p4/{include => register}/soc/pvt_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/pvt_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/reg_base.h (100%) rename components/soc/esp32p4/{include => register}/soc/rmt_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/rmt_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/rsa_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/rsa_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/rtclockcali_reg.h (98%) rename components/soc/esp32p4/{include => register}/soc/rtclockcali_struct.h (97%) rename components/soc/esp32p4/{include => register}/soc/sdmmc_reg.h (99%) rename components/soc/esp32p4/{include => register}/soc/sdmmc_struct.h (99%) rename components/soc/esp32p4/{include => register}/soc/sha_reg.h (98%) rename components/soc/esp32p4/{include => register}/soc/sha_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/soc_etm_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/soc_etm_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/spi1_mem_c_reg.h (99%) rename components/soc/esp32p4/{include => register}/soc/spi1_mem_c_struct.h (99%) rename components/soc/esp32p4/{include => register}/soc/spi1_mem_s_reg.h (99%) rename components/soc/esp32p4/{include => register}/soc/spi1_mem_s_struct.h (99%) rename components/soc/esp32p4/{include => register}/soc/spi_mem_c_reg.h (99%) rename components/soc/esp32p4/{include => register}/soc/spi_mem_c_struct.h (99%) rename components/soc/esp32p4/{include => register}/soc/spi_mem_s_reg.h (99%) rename components/soc/esp32p4/{include => register}/soc/spi_mem_s_struct.h (99%) rename components/soc/esp32p4/{include => register}/soc/spi_reg.h (99%) rename components/soc/esp32p4/{include => register}/soc/spi_struct.h (99%) rename components/soc/esp32p4/{include => register}/soc/systimer_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/systimer_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/tcm_monitor_reg.h (98%) rename components/soc/esp32p4/{include => register}/soc/tcm_monitor_struct.h (98%) rename components/soc/esp32p4/{include => register}/soc/timer_group_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/timer_group_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/touch_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/touch_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/trace_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/trace_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/tsens_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/tsens_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/twai_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/twai_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/uart_reg.h (99%) rename components/soc/esp32p4/{include => register}/soc/uart_struct.h (99%) rename components/soc/esp32p4/{include => register}/soc/uhci_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/uhci_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/usb_serial_jtag_reg.h (99%) rename components/soc/esp32p4/{include => register}/soc/usb_serial_jtag_struct.h (100%) rename components/soc/esp32p4/{include => register}/soc/usb_wrap_reg.h (100%) rename components/soc/esp32p4/{include => register}/soc/usb_wrap_struct.h (100%) diff --git a/components/soc/esp32p4/include/soc/dport_access.h b/components/soc/esp32p4/include/soc/dport_access.h index 3747073d224c..189fc786b837 100644 --- a/components/soc/esp32p4/include/soc/dport_access.h +++ b/components/soc/esp32p4/include/soc/dport_access.h @@ -9,7 +9,6 @@ #include #include "soc.h" -#include "uart_reg.h" #ifdef __cplusplus extern "C" { diff --git a/components/soc/esp32p4/include/soc/reset_reasons.h b/components/soc/esp32p4/include/soc/reset_reasons.h index 39b792e549e9..4e6952d555be 100644 --- a/components/soc/esp32p4/include/soc/reset_reasons.h +++ b/components/soc/esp32p4/include/soc/reset_reasons.h @@ -45,7 +45,7 @@ typedef enum { RESET_REASON_CORE_USB_JTAG = 0x16, // USB Serial/JTAG controller's JTAG resets the digital core RESET_REASON_CORE_USB_UART = 0x17, // USB Serial/JTAG controller's UART resets the digital core RESET_REASON_CPU_JTAG = 0x18, // Triggered when a reset command from JTAG is received - RESET_REASON_CPU_LOCKUP = 0x1A, // Triggered when the CPU enters lockup (exception inside the execption handler would cause this) + RESET_REASON_CPU_LOCKUP = 0x1A, // Triggered when the CPU enters lockup (exception inside the exception handler would cause this) } soc_reset_reason_t; diff --git a/components/soc/esp32p4/include/soc/soc.h b/components/soc/esp32p4/include/soc/soc.h index baf879c9e5e4..e8e79a9d07db 100644 --- a/components/soc/esp32p4/include/soc/soc.h +++ b/components/soc/esp32p4/include/soc/soc.h @@ -12,7 +12,7 @@ #endif #include "esp_bit_defs.h" -#include "reg_base.h" +#include "soc/reg_base.h" #define PRO_CPU_NUM (0) diff --git a/components/soc/esp32p4/include/soc/usb_dwc_struct.h b/components/soc/esp32p4/include/soc/usb_dwc_struct.h index 728be16b0f66..206d566277e7 100644 --- a/components/soc/esp32p4/include/soc/usb_dwc_struct.h +++ b/components/soc/esp32p4/include/soc/usb_dwc_struct.h @@ -33,7 +33,7 @@ typedef union { uint32_t hnpreq: 1; uint32_t hstsethnpen: 1; uint32_t devhnpen: 1; - uint32_t ehen: 1; + uint32_t ehen: 1; // codespell:ignore ehen uint32_t reserved_13: 2; uint32_t dbncefltrbypass: 1; uint32_t conidsts: 1; diff --git a/components/soc/esp32p4/register/soc/.gitkeep b/components/soc/esp32p4/register/soc/.gitkeep deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/components/soc/esp32p4/include/soc/adc_reg.h b/components/soc/esp32p4/register/soc/adc_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/adc_reg.h rename to components/soc/esp32p4/register/soc/adc_reg.h diff --git a/components/soc/esp32p4/include/soc/adc_struct.h b/components/soc/esp32p4/register/soc/adc_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/adc_struct.h rename to components/soc/esp32p4/register/soc/adc_struct.h diff --git a/components/soc/esp32p4/include/soc/aes_reg.h b/components/soc/esp32p4/register/soc/aes_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/aes_reg.h rename to components/soc/esp32p4/register/soc/aes_reg.h diff --git a/components/soc/esp32p4/include/soc/aes_struct.h b/components/soc/esp32p4/register/soc/aes_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/aes_struct.h rename to components/soc/esp32p4/register/soc/aes_struct.h diff --git a/components/soc/esp32p4/include/soc/ahb_dma_reg.h b/components/soc/esp32p4/register/soc/ahb_dma_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/ahb_dma_reg.h rename to components/soc/esp32p4/register/soc/ahb_dma_reg.h diff --git a/components/soc/esp32p4/include/soc/ahb_dma_struct.h b/components/soc/esp32p4/register/soc/ahb_dma_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/ahb_dma_struct.h rename to components/soc/esp32p4/register/soc/ahb_dma_struct.h diff --git a/components/soc/esp32p4/include/soc/assist_debug_reg.h b/components/soc/esp32p4/register/soc/assist_debug_reg.h similarity index 99% rename from components/soc/esp32p4/include/soc/assist_debug_reg.h rename to components/soc/esp32p4/register/soc/assist_debug_reg.h index 89c49a9cc6fc..f8f13c353191 100644 --- a/components/soc/esp32p4/include/soc/assist_debug_reg.h +++ b/components/soc/esp32p4/register/soc/assist_debug_reg.h @@ -435,7 +435,7 @@ extern "C" { */ #define ASSIST_DEBUG_CORE_0_SP_MIN_REG (DR_REG_ASSIST_DEBUG_BASE + 0x38) /** ASSIST_DEBUG_CORE_0_SP_MIN : R/W; bitpos: [31:0]; default: 0; - * core0 sp region configuration regsiter + * core0 sp region configuration register */ #define ASSIST_DEBUG_CORE_0_SP_MIN 0xFFFFFFFFU #define ASSIST_DEBUG_CORE_0_SP_MIN_M (ASSIST_DEBUG_CORE_0_SP_MIN_V << ASSIST_DEBUG_CORE_0_SP_MIN_S) @@ -459,7 +459,7 @@ extern "C" { */ #define ASSIST_DEBUG_CORE_0_SP_PC_REG (DR_REG_ASSIST_DEBUG_BASE + 0x40) /** ASSIST_DEBUG_CORE_0_SP_PC : RO; bitpos: [31:0]; default: 0; - * This regsiter stores the PC when trigger stack monitor. + * This register stores the PC when trigger stack monitor. */ #define ASSIST_DEBUG_CORE_0_SP_PC 0xFFFFFFFFU #define ASSIST_DEBUG_CORE_0_SP_PC_M (ASSIST_DEBUG_CORE_0_SP_PC_V << ASSIST_DEBUG_CORE_0_SP_PC_S) @@ -486,7 +486,7 @@ extern "C" { #define ASSIST_DEBUG_CORE_0_RCD_PDEBUGEN_S 1 /** ASSIST_DEBUG_CORE_0_RCD_PDEBUGPC_REG register - * record status regsiter + * record status register */ #define ASSIST_DEBUG_CORE_0_RCD_PDEBUGPC_REG (DR_REG_ASSIST_DEBUG_BASE + 0x48) /** ASSIST_DEBUG_CORE_0_RCD_PDEBUGPC : RO; bitpos: [31:0]; default: 0; @@ -498,7 +498,7 @@ extern "C" { #define ASSIST_DEBUG_CORE_0_RCD_PDEBUGPC_S 0 /** ASSIST_DEBUG_CORE_0_RCD_PDEBUGSP_REG register - * record status regsiter + * record status register */ #define ASSIST_DEBUG_CORE_0_RCD_PDEBUGSP_REG (DR_REG_ASSIST_DEBUG_BASE + 0x4c) /** ASSIST_DEBUG_CORE_0_RCD_PDEBUGSP : RO; bitpos: [31:0]; default: 0; @@ -1103,7 +1103,7 @@ extern "C" { */ #define ASSIST_DEBUG_CORE_1_SP_MIN_REG (DR_REG_ASSIST_DEBUG_BASE + 0xb8) /** ASSIST_DEBUG_CORE_1_SP_MIN : R/W; bitpos: [31:0]; default: 0; - * core1 sp region configuration regsiter + * core1 sp region configuration register */ #define ASSIST_DEBUG_CORE_1_SP_MIN 0xFFFFFFFFU #define ASSIST_DEBUG_CORE_1_SP_MIN_M (ASSIST_DEBUG_CORE_1_SP_MIN_V << ASSIST_DEBUG_CORE_1_SP_MIN_S) @@ -1127,7 +1127,7 @@ extern "C" { */ #define ASSIST_DEBUG_CORE_1_SP_PC_REG (DR_REG_ASSIST_DEBUG_BASE + 0xc0) /** ASSIST_DEBUG_CORE_1_SP_PC : RO; bitpos: [31:0]; default: 0; - * This regsiter stores the PC when trigger stack monitor. + * This register stores the PC when trigger stack monitor. */ #define ASSIST_DEBUG_CORE_1_SP_PC 0xFFFFFFFFU #define ASSIST_DEBUG_CORE_1_SP_PC_M (ASSIST_DEBUG_CORE_1_SP_PC_V << ASSIST_DEBUG_CORE_1_SP_PC_S) @@ -1154,7 +1154,7 @@ extern "C" { #define ASSIST_DEBUG_CORE_1_RCD_PDEBUGEN_S 1 /** ASSIST_DEBUG_CORE_1_RCD_PDEBUGPC_REG register - * record status regsiter + * record status register */ #define ASSIST_DEBUG_CORE_1_RCD_PDEBUGPC_REG (DR_REG_ASSIST_DEBUG_BASE + 0xc8) /** ASSIST_DEBUG_CORE_1_RCD_PDEBUGPC : RO; bitpos: [31:0]; default: 0; @@ -1166,7 +1166,7 @@ extern "C" { #define ASSIST_DEBUG_CORE_1_RCD_PDEBUGPC_S 0 /** ASSIST_DEBUG_CORE_1_RCD_PDEBUGSP_REG register - * record status regsiter + * record status register */ #define ASSIST_DEBUG_CORE_1_RCD_PDEBUGSP_REG (DR_REG_ASSIST_DEBUG_BASE + 0xcc) /** ASSIST_DEBUG_CORE_1_RCD_PDEBUGSP : RO; bitpos: [31:0]; default: 0; diff --git a/components/soc/esp32p4/include/soc/assist_debug_struct.h b/components/soc/esp32p4/register/soc/assist_debug_struct.h similarity index 98% rename from components/soc/esp32p4/include/soc/assist_debug_struct.h rename to components/soc/esp32p4/register/soc/assist_debug_struct.h index 88dd72df88e6..645e5a1cf081 100644 --- a/components/soc/esp32p4/include/soc/assist_debug_struct.h +++ b/components/soc/esp32p4/register/soc/assist_debug_struct.h @@ -197,7 +197,7 @@ typedef union { typedef union { struct { /** core_0_sp_min : R/W; bitpos: [31:0]; default: 0; - * core0 sp region configuration regsiter + * core0 sp region configuration register */ uint32_t core_0_sp_min:32; }; @@ -223,7 +223,7 @@ typedef union { typedef union { struct { /** core_0_sp_pc : RO; bitpos: [31:0]; default: 0; - * This regsiter stores the PC when trigger stack monitor. + * This register stores the PC when trigger stack monitor. */ uint32_t core_0_sp_pc:32; }; @@ -416,7 +416,7 @@ typedef union { typedef union { struct { /** core_1_sp_min : R/W; bitpos: [31:0]; default: 0; - * core1 sp region configuration regsiter + * core1 sp region configuration register */ uint32_t core_1_sp_min:32; }; @@ -442,7 +442,7 @@ typedef union { typedef union { struct { /** core_1_sp_pc : RO; bitpos: [31:0]; default: 0; - * This regsiter stores the PC when trigger stack monitor. + * This register stores the PC when trigger stack monitor. */ uint32_t core_1_sp_pc:32; }; @@ -752,7 +752,7 @@ typedef union { } assist_debug_core_1_intr_clr_reg_t; -/** Group: pc reording configuration register */ +/** Group: pc recording configuration register */ /** Type of core_0_rcd_en register * record enable configuration register */ @@ -790,9 +790,9 @@ typedef union { } assist_debug_core_1_rcd_en_reg_t; -/** Group: pc reording status register */ +/** Group: pc recording status register */ /** Type of core_0_rcd_pdebugpc register - * record status regsiter + * record status register */ typedef union { struct { @@ -805,7 +805,7 @@ typedef union { } assist_debug_core_0_rcd_pdebugpc_reg_t; /** Type of core_0_rcd_pdebugsp register - * record status regsiter + * record status register */ typedef union { struct { @@ -818,7 +818,7 @@ typedef union { } assist_debug_core_0_rcd_pdebugsp_reg_t; /** Type of core_1_rcd_pdebugpc register - * record status regsiter + * record status register */ typedef union { struct { @@ -831,7 +831,7 @@ typedef union { } assist_debug_core_1_rcd_pdebugpc_reg_t; /** Type of core_1_rcd_pdebugsp register - * record status regsiter + * record status register */ typedef union { struct { @@ -844,7 +844,7 @@ typedef union { } assist_debug_core_1_rcd_pdebugsp_reg_t; -/** Group: exception monitor regsiter */ +/** Group: exception monitor register */ /** Type of core_0_iram0_exception_monitor_0 register * exception monitor status register0 */ diff --git a/components/soc/esp32p4/include/soc/axi_dma_reg.h b/components/soc/esp32p4/register/soc/axi_dma_reg.h similarity index 99% rename from components/soc/esp32p4/include/soc/axi_dma_reg.h rename to components/soc/esp32p4/register/soc/axi_dma_reg.h index e3dfc907dbd3..8f2775e79592 100644 --- a/components/soc/esp32p4/include/soc/axi_dma_reg.h +++ b/components/soc/esp32p4/register/soc/axi_dma_reg.h @@ -770,7 +770,7 @@ extern "C" { #define AXI_DMA_RX_CH_ARB_WEIGH_CH0_V 0x0000000FU #define AXI_DMA_RX_CH_ARB_WEIGH_CH0_S 4 /** AXI_DMA_RX_ARB_WEIGH_OPT_DIR_CH0 : R/W; bitpos: [8]; default: 0; - * 0: mean not optimazation weight function ,1: mean optimazation + * 0: mean not optimization weight function ,1: mean optimization */ #define AXI_DMA_RX_ARB_WEIGH_OPT_DIR_CH0 (BIT(8)) #define AXI_DMA_RX_ARB_WEIGH_OPT_DIR_CH0_M (AXI_DMA_RX_ARB_WEIGH_OPT_DIR_CH0_V << AXI_DMA_RX_ARB_WEIGH_OPT_DIR_CH0_S) @@ -1654,7 +1654,7 @@ extern "C" { #define AXI_DMA_RX_CH_ARB_WEIGH_CH1_V 0x0000000FU #define AXI_DMA_RX_CH_ARB_WEIGH_CH1_S 4 /** AXI_DMA_RX_ARB_WEIGH_OPT_DIR_CH1 : R/W; bitpos: [8]; default: 0; - * 0: mean not optimazation weight function ,1: mean optimazation + * 0: mean not optimization weight function ,1: mean optimization */ #define AXI_DMA_RX_ARB_WEIGH_OPT_DIR_CH1 (BIT(8)) #define AXI_DMA_RX_ARB_WEIGH_OPT_DIR_CH1_M (AXI_DMA_RX_ARB_WEIGH_OPT_DIR_CH1_V << AXI_DMA_RX_ARB_WEIGH_OPT_DIR_CH1_S) @@ -2538,7 +2538,7 @@ extern "C" { #define AXI_DMA_RX_CH_ARB_WEIGH_CH2_V 0x0000000FU #define AXI_DMA_RX_CH_ARB_WEIGH_CH2_S 4 /** AXI_DMA_RX_ARB_WEIGH_OPT_DIR_CH2 : R/W; bitpos: [8]; default: 0; - * 0: mean not optimazation weight function ,1: mean optimazation + * 0: mean not optimization weight function ,1: mean optimization */ #define AXI_DMA_RX_ARB_WEIGH_OPT_DIR_CH2 (BIT(8)) #define AXI_DMA_RX_ARB_WEIGH_OPT_DIR_CH2_M (AXI_DMA_RX_ARB_WEIGH_OPT_DIR_CH2_V << AXI_DMA_RX_ARB_WEIGH_OPT_DIR_CH2_S) @@ -3384,7 +3384,7 @@ extern "C" { #define AXI_DMA_TX_CH_ARB_WEIGH_CH0_V 0x0000000FU #define AXI_DMA_TX_CH_ARB_WEIGH_CH0_S 4 /** AXI_DMA_TX_ARB_WEIGH_OPT_DIR_CH0 : R/W; bitpos: [8]; default: 0; - * 0: mean not optimazation weight function ,1: mean optimazation + * 0: mean not optimization weight function ,1: mean optimization */ #define AXI_DMA_TX_ARB_WEIGH_OPT_DIR_CH0 (BIT(8)) #define AXI_DMA_TX_ARB_WEIGH_OPT_DIR_CH0_M (AXI_DMA_TX_ARB_WEIGH_OPT_DIR_CH0_V << AXI_DMA_TX_ARB_WEIGH_OPT_DIR_CH0_S) @@ -4230,7 +4230,7 @@ extern "C" { #define AXI_DMA_TX_CH_ARB_WEIGH_CH1_V 0x0000000FU #define AXI_DMA_TX_CH_ARB_WEIGH_CH1_S 4 /** AXI_DMA_TX_ARB_WEIGH_OPT_DIR_CH1 : R/W; bitpos: [8]; default: 0; - * 0: mean not optimazation weight function ,1: mean optimazation + * 0: mean not optimization weight function ,1: mean optimization */ #define AXI_DMA_TX_ARB_WEIGH_OPT_DIR_CH1 (BIT(8)) #define AXI_DMA_TX_ARB_WEIGH_OPT_DIR_CH1_M (AXI_DMA_TX_ARB_WEIGH_OPT_DIR_CH1_V << AXI_DMA_TX_ARB_WEIGH_OPT_DIR_CH1_S) @@ -5076,7 +5076,7 @@ extern "C" { #define AXI_DMA_TX_CH_ARB_WEIGH_CH2_V 0x0000000FU #define AXI_DMA_TX_CH_ARB_WEIGH_CH2_S 4 /** AXI_DMA_TX_ARB_WEIGH_OPT_DIR_CH2 : R/W; bitpos: [8]; default: 0; - * 0: mean not optimazation weight function ,1: mean optimazation + * 0: mean not optimization weight function ,1: mean optimization */ #define AXI_DMA_TX_ARB_WEIGH_OPT_DIR_CH2 (BIT(8)) #define AXI_DMA_TX_ARB_WEIGH_OPT_DIR_CH2_M (AXI_DMA_TX_ARB_WEIGH_OPT_DIR_CH2_V << AXI_DMA_TX_ARB_WEIGH_OPT_DIR_CH2_S) @@ -5490,11 +5490,11 @@ extern "C" { #define AXI_DMA_RDN_ECO_LOW_S 0 /** AXI_DMA_WRESP_CNT_REG register - * AXI wr responce cnt register. + * AXI wr response cnt register. */ #define AXI_DMA_WRESP_CNT_REG (DR_REG_AXI_DMA_BASE + 0x2b8) /** AXI_DMA_WRESP_CNT : RO; bitpos: [3:0]; default: 0; - * axi wr responce cnt reg. + * axi wr response cnt reg. */ #define AXI_DMA_WRESP_CNT 0x0000000FU #define AXI_DMA_WRESP_CNT_M (AXI_DMA_WRESP_CNT_V << AXI_DMA_WRESP_CNT_S) @@ -5502,11 +5502,11 @@ extern "C" { #define AXI_DMA_WRESP_CNT_S 0 /** AXI_DMA_RRESP_CNT_REG register - * AXI wr responce cnt register. + * AXI wr response cnt register. */ #define AXI_DMA_RRESP_CNT_REG (DR_REG_AXI_DMA_BASE + 0x2bc) /** AXI_DMA_RRESP_CNT : RO; bitpos: [3:0]; default: 0; - * axi rd responce cnt reg. + * axi rd response cnt reg. */ #define AXI_DMA_RRESP_CNT 0x0000000FU #define AXI_DMA_RRESP_CNT_M (AXI_DMA_RRESP_CNT_V << AXI_DMA_RRESP_CNT_S) diff --git a/components/soc/esp32p4/include/soc/axi_dma_struct.h b/components/soc/esp32p4/register/soc/axi_dma_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/axi_dma_struct.h rename to components/soc/esp32p4/register/soc/axi_dma_struct.h diff --git a/components/soc/esp32p4/include/soc/bitscrambler_reg.h b/components/soc/esp32p4/register/soc/bitscrambler_reg.h similarity index 99% rename from components/soc/esp32p4/include/soc/bitscrambler_reg.h rename to components/soc/esp32p4/register/soc/bitscrambler_reg.h index 44bfc3c87457..4b8fbe5df572 100644 --- a/components/soc/esp32p4/include/soc/bitscrambler_reg.h +++ b/components/soc/esp32p4/register/soc/bitscrambler_reg.h @@ -216,7 +216,7 @@ extern "C" { #define BITSCRAMBLER_TX_COND_MODE_S 4 /** BITSCRAMBLER_TX_FETCH_MODE : R/W; bitpos: [5]; default: 0; * write this bit to set the bitscrambler tx core fetch instruction mode, 0: prefetch - * by reset, 1: fetch by instrutions + * by reset, 1: fetch by instructions */ #define BITSCRAMBLER_TX_FETCH_MODE (BIT(5)) #define BITSCRAMBLER_TX_FETCH_MODE_M (BITSCRAMBLER_TX_FETCH_MODE_V << BITSCRAMBLER_TX_FETCH_MODE_S) @@ -291,7 +291,7 @@ extern "C" { #define BITSCRAMBLER_RX_COND_MODE_S 4 /** BITSCRAMBLER_RX_FETCH_MODE : R/W; bitpos: [5]; default: 0; * write this bit to set the bitscrambler rx core fetch instruction mode, 0: prefetch - * by reset, 1: fetch by instrutions + * by reset, 1: fetch by instructions */ #define BITSCRAMBLER_RX_FETCH_MODE (BIT(5)) #define BITSCRAMBLER_RX_FETCH_MODE_M (BITSCRAMBLER_RX_FETCH_MODE_V << BITSCRAMBLER_RX_FETCH_MODE_S) diff --git a/components/soc/esp32p4/include/soc/bitscrambler_struct.h b/components/soc/esp32p4/register/soc/bitscrambler_struct.h similarity index 99% rename from components/soc/esp32p4/include/soc/bitscrambler_struct.h rename to components/soc/esp32p4/register/soc/bitscrambler_struct.h index 007c244d5050..6a451171ba11 100644 --- a/components/soc/esp32p4/include/soc/bitscrambler_struct.h +++ b/components/soc/esp32p4/register/soc/bitscrambler_struct.h @@ -208,7 +208,7 @@ typedef union { uint32_t tx_cond_mode:1; /** tx_fetch_mode : R/W; bitpos: [5]; default: 0; * write this bit to set the bitscrambler tx core fetch instruction mode, 0: prefetch - * by reset, 1: fetch by instrutions + * by reset, 1: fetch by instructions */ uint32_t tx_fetch_mode:1; /** tx_halt_mode : R/W; bitpos: [6]; default: 0; @@ -261,7 +261,7 @@ typedef union { uint32_t rx_cond_mode:1; /** rx_fetch_mode : R/W; bitpos: [5]; default: 0; * write this bit to set the bitscrambler rx core fetch instruction mode, 0: prefetch - * by reset, 1: fetch by instrutions + * by reset, 1: fetch by instructions */ uint32_t rx_fetch_mode:1; /** rx_halt_mode : R/W; bitpos: [6]; default: 0; diff --git a/components/soc/esp32p4/include/soc/cache_reg.h b/components/soc/esp32p4/register/soc/cache_reg.h similarity index 99% rename from components/soc/esp32p4/include/soc/cache_reg.h rename to components/soc/esp32p4/register/soc/cache_reg.h index b3cc3cd039c7..e80afcd41bd2 100644 --- a/components/soc/esp32p4/include/soc/cache_reg.h +++ b/components/soc/esp32p4/register/soc/cache_reg.h @@ -4270,7 +4270,7 @@ extern "C" { #define CACHE_L1_UNALLOCATE_BUFFER_CLEAR_REG (DR_REG_CACHE_BASE + 0x258) /** CACHE_L1_ICACHE0_UNALLOC_CLR : R/W; bitpos: [0]; default: 0; * The bit is used to clear the unallocate request buffer of l1 icache0 where the - * unallocate request is responsed but not completed. + * unallocate request is responded but not completed. */ #define CACHE_L1_ICACHE0_UNALLOC_CLR (BIT(0)) #define CACHE_L1_ICACHE0_UNALLOC_CLR_M (CACHE_L1_ICACHE0_UNALLOC_CLR_V << CACHE_L1_ICACHE0_UNALLOC_CLR_S) @@ -4278,7 +4278,7 @@ extern "C" { #define CACHE_L1_ICACHE0_UNALLOC_CLR_S 0 /** CACHE_L1_ICACHE1_UNALLOC_CLR : R/W; bitpos: [1]; default: 0; * The bit is used to clear the unallocate request buffer of l1 icache1 where the - * unallocate request is responsed but not completed. + * unallocate request is responded but not completed. */ #define CACHE_L1_ICACHE1_UNALLOC_CLR (BIT(1)) #define CACHE_L1_ICACHE1_UNALLOC_CLR_M (CACHE_L1_ICACHE1_UNALLOC_CLR_V << CACHE_L1_ICACHE1_UNALLOC_CLR_S) @@ -4300,7 +4300,7 @@ extern "C" { #define CACHE_L1_ICACHE3_UNALLOC_CLR_S 3 /** CACHE_L1_DCACHE_UNALLOC_CLR : R/W; bitpos: [4]; default: 0; * The bit is used to clear the unallocate request buffer of l1 dcache where the - * unallocate request is responsed but not completed. + * unallocate request is responded but not completed. */ #define CACHE_L1_DCACHE_UNALLOC_CLR (BIT(4)) #define CACHE_L1_DCACHE_UNALLOC_CLR_M (CACHE_L1_DCACHE_UNALLOC_CLR_V << CACHE_L1_DCACHE_UNALLOC_CLR_S) @@ -6156,7 +6156,7 @@ extern "C" { #define CACHE_L2_UNALLOCATE_BUFFER_CLEAR_REG (DR_REG_CACHE_BASE + 0x3b8) /** CACHE_L2_CACHE_UNALLOC_CLR : R/W; bitpos: [5]; default: 0; * The bit is used to clear the unallocate request buffer of l2 icache where the - * unallocate request is responsed but not completed. + * unallocate request is responded but not completed. */ #define CACHE_L2_CACHE_UNALLOC_CLR (BIT(5)) #define CACHE_L2_CACHE_UNALLOC_CLR_M (CACHE_L2_CACHE_UNALLOC_CLR_V << CACHE_L2_CACHE_UNALLOC_CLR_S) diff --git a/components/soc/esp32p4/include/soc/cache_struct.h b/components/soc/esp32p4/register/soc/cache_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/cache_struct.h rename to components/soc/esp32p4/register/soc/cache_struct.h diff --git a/components/soc/esp32p4/include/soc/dma2d_reg.h b/components/soc/esp32p4/register/soc/dma2d_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/dma2d_reg.h rename to components/soc/esp32p4/register/soc/dma2d_reg.h diff --git a/components/soc/esp32p4/include/soc/dma2d_struct.h b/components/soc/esp32p4/register/soc/dma2d_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/dma2d_struct.h rename to components/soc/esp32p4/register/soc/dma2d_struct.h diff --git a/components/soc/esp32p4/include/soc/dma_pms_reg.h b/components/soc/esp32p4/register/soc/dma_pms_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/dma_pms_reg.h rename to components/soc/esp32p4/register/soc/dma_pms_reg.h diff --git a/components/soc/esp32p4/include/soc/dma_pms_struct.h b/components/soc/esp32p4/register/soc/dma_pms_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/dma_pms_struct.h rename to components/soc/esp32p4/register/soc/dma_pms_struct.h diff --git a/components/soc/esp32p4/include/soc/ds_reg.h b/components/soc/esp32p4/register/soc/ds_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/ds_reg.h rename to components/soc/esp32p4/register/soc/ds_reg.h diff --git a/components/soc/esp32p4/include/soc/ds_struct.h b/components/soc/esp32p4/register/soc/ds_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/ds_struct.h rename to components/soc/esp32p4/register/soc/ds_struct.h diff --git a/components/soc/esp32p4/include/soc/dw_gdma_reg.h b/components/soc/esp32p4/register/soc/dw_gdma_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/dw_gdma_reg.h rename to components/soc/esp32p4/register/soc/dw_gdma_reg.h diff --git a/components/soc/esp32p4/include/soc/dw_gdma_struct.h b/components/soc/esp32p4/register/soc/dw_gdma_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/dw_gdma_struct.h rename to components/soc/esp32p4/register/soc/dw_gdma_struct.h diff --git a/components/soc/esp32p4/include/soc/ecc_mult_reg.h b/components/soc/esp32p4/register/soc/ecc_mult_reg.h similarity index 97% rename from components/soc/esp32p4/include/soc/ecc_mult_reg.h rename to components/soc/esp32p4/register/soc/ecc_mult_reg.h index 2bec4bb8c79a..54033489df3d 100644 --- a/components/soc/esp32p4/include/soc/ecc_mult_reg.h +++ b/components/soc/esp32p4/register/soc/ecc_mult_reg.h @@ -64,7 +64,7 @@ extern "C" { */ #define ECC_MULT_CONF_REG (DR_REG_ECC_MULT_BASE + 0x1c) /** ECC_MULT_START : R/W/SC; bitpos: [0]; default: 0; - * Write 1 to start caculation of ECC Accelerator. This bit will be self-cleared after + * Write 1 to start calculation of ECC Accelerator. This bit will be self-cleared after * the caculatrion is done. */ #define ECC_MULT_START (BIT(0)) @@ -97,7 +97,7 @@ extern "C" { * The work mode bits of ECC Accelerator. 0: Point Mult Mode. 1: Reserved. 2: Point * verification mode. 3: Point Verif+mult mode. 4: Jacobian Point Mult Mode. 5: Point * Add Mode. 6: Jacobian Point Verification Mode. 7: Point Verif + Jacobian Mult Mode. - * 8: mod addition. 9. mod substraction. 10: mod multiplication. 11: mod division. + * 8: mod addition. 9. mod subtraction. 10: mod multiplication. 11: mod division. */ #define ECC_MULT_WORK_MODE 0x0000000FU #define ECC_MULT_WORK_MODE_M (ECC_MULT_WORK_MODE_V << ECC_MULT_WORK_MODE_S) diff --git a/components/soc/esp32p4/include/soc/ecc_mult_struct.h b/components/soc/esp32p4/register/soc/ecc_mult_struct.h similarity index 96% rename from components/soc/esp32p4/include/soc/ecc_mult_struct.h rename to components/soc/esp32p4/register/soc/ecc_mult_struct.h index 5754a9e3cdd4..d868fcc8f1fa 100644 --- a/components/soc/esp32p4/include/soc/ecc_mult_struct.h +++ b/components/soc/esp32p4/register/soc/ecc_mult_struct.h @@ -77,7 +77,7 @@ typedef union { typedef union { struct { /** start : R/W/SC; bitpos: [0]; default: 0; - * Write 1 to start caculation of ECC Accelerator. This bit will be self-cleared after + * Write 1 to start calculation of ECC Accelerator. This bit will be self-cleared after * the caculatrion is done. */ uint32_t start:1; @@ -98,7 +98,7 @@ typedef union { * The work mode bits of ECC Accelerator. 0: Point Mult Mode. 1: Reserved. 2: Point * verification mode. 3: Point Verif+mult mode. 4: Jacobian Point Mult Mode. 5: Point * Add Mode. 6: Jacobian Point Verification Mode. 7: Point Verif + Jacobian Mult Mode. - * 8: mod addition. 9. mod substraction. 10: mod multiplication. 11: mod division. + * 8: mod addition. 9. mod subtraction. 10: mod multiplication. 11: mod division. */ uint32_t work_mode:4; /** security_mode : R/W; bitpos: [8]; default: 0; diff --git a/components/soc/esp32p4/include/soc/ecdsa_reg.h b/components/soc/esp32p4/register/soc/ecdsa_reg.h similarity index 98% rename from components/soc/esp32p4/include/soc/ecdsa_reg.h rename to components/soc/esp32p4/register/soc/ecdsa_reg.h index 6e09925e0907..b5cc4f696af7 100644 --- a/components/soc/esp32p4/include/soc/ecdsa_reg.h +++ b/components/soc/esp32p4/register/soc/ecdsa_reg.h @@ -155,7 +155,7 @@ extern "C" { */ #define ECDSA_START_REG (DR_REG_ECDSA_BASE + 0x1c) /** ECDSA_START : WT; bitpos: [0]; default: 0; - * Write 1 to start caculation of ECDSA Accelerator. This bit will be self-cleared + * Write 1 to start calculation of ECDSA Accelerator. This bit will be self-cleared * after configuration. */ #define ECDSA_START (BIT(0)) @@ -243,7 +243,7 @@ extern "C" { */ #define ECDSA_SHA_START_REG (DR_REG_ECDSA_BASE + 0x210) /** ECDSA_SHA_START : WT; bitpos: [0]; default: 0; - * Write 1 to start the first caculation of SHA Calculator in ECDSA Accelerator. This + * Write 1 to start the first calculation of SHA Calculator in ECDSA Accelerator. This * bit will be self-cleared after configuration. */ #define ECDSA_SHA_START (BIT(0)) @@ -256,7 +256,7 @@ extern "C" { */ #define ECDSA_SHA_CONTINUE_REG (DR_REG_ECDSA_BASE + 0x214) /** ECDSA_SHA_CONTINUE : WT; bitpos: [0]; default: 0; - * Write 1 to start the latter caculation of SHA Calculator in ECDSA Accelerator. This + * Write 1 to start the latter calculation of SHA Calculator in ECDSA Accelerator. This * bit will be self-cleared after configuration. */ #define ECDSA_SHA_CONTINUE (BIT(0)) diff --git a/components/soc/esp32p4/include/soc/ecdsa_struct.h b/components/soc/esp32p4/register/soc/ecdsa_struct.h similarity index 97% rename from components/soc/esp32p4/include/soc/ecdsa_struct.h rename to components/soc/esp32p4/register/soc/ecdsa_struct.h index 1d39f1ad04d9..67e226f86d59 100644 --- a/components/soc/esp32p4/include/soc/ecdsa_struct.h +++ b/components/soc/esp32p4/register/soc/ecdsa_struct.h @@ -57,7 +57,7 @@ typedef union { typedef union { struct { /** start : WT; bitpos: [0]; default: 0; - * Write 1 to start caculation of ECDSA Accelerator. This bit will be self-cleared + * Write 1 to start calculation of ECDSA Accelerator. This bit will be self-cleared * after configuration. */ uint32_t start:1; @@ -228,7 +228,7 @@ typedef union { typedef union { struct { /** sha_start : WT; bitpos: [0]; default: 0; - * Write 1 to start the first caculation of SHA Calculator in ECDSA Accelerator. This + * Write 1 to start the first calculation of SHA Calculator in ECDSA Accelerator. This * bit will be self-cleared after configuration. */ uint32_t sha_start:1; @@ -243,7 +243,7 @@ typedef union { typedef union { struct { /** sha_continue : WT; bitpos: [0]; default: 0; - * Write 1 to start the latter caculation of SHA Calculator in ECDSA Accelerator. This + * Write 1 to start the latter calculation of SHA Calculator in ECDSA Accelerator. This * bit will be self-cleared after configuration. */ uint32_t sha_continue:1; diff --git a/components/soc/esp32p4/include/soc/efuse_reg.h b/components/soc/esp32p4/register/soc/efuse_reg.h similarity index 99% rename from components/soc/esp32p4/include/soc/efuse_reg.h rename to components/soc/esp32p4/register/soc/efuse_reg.h index 310bdaa73f6e..f26a3c342e8c 100644 --- a/components/soc/esp32p4/include/soc/efuse_reg.h +++ b/components/soc/esp32p4/register/soc/efuse_reg.h @@ -7,7 +7,7 @@ #include #include "soc/soc.h" -#include "efuse_defs.h" +#include "soc/efuse_defs.h" #ifdef __cplusplus extern "C" { #endif diff --git a/components/soc/esp32p4/include/soc/efuse_struct.h b/components/soc/esp32p4/register/soc/efuse_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/efuse_struct.h rename to components/soc/esp32p4/register/soc/efuse_struct.h diff --git a/components/soc/esp32p4/include/soc/emac_dma_struct.h b/components/soc/esp32p4/register/soc/emac_dma_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/emac_dma_struct.h rename to components/soc/esp32p4/register/soc/emac_dma_struct.h diff --git a/components/soc/esp32p4/include/soc/emac_mac_struct.h b/components/soc/esp32p4/register/soc/emac_mac_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/emac_mac_struct.h rename to components/soc/esp32p4/register/soc/emac_mac_struct.h diff --git a/components/soc/esp32p4/include/soc/gpio_ext_reg.h b/components/soc/esp32p4/register/soc/gpio_ext_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/gpio_ext_reg.h rename to components/soc/esp32p4/register/soc/gpio_ext_reg.h diff --git a/components/soc/esp32p4/include/soc/gpio_ext_struct.h b/components/soc/esp32p4/register/soc/gpio_ext_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/gpio_ext_struct.h rename to components/soc/esp32p4/register/soc/gpio_ext_struct.h diff --git a/components/soc/esp32p4/include/soc/gpio_reg.h b/components/soc/esp32p4/register/soc/gpio_reg.h similarity index 99% rename from components/soc/esp32p4/include/soc/gpio_reg.h rename to components/soc/esp32p4/register/soc/gpio_reg.h index 014c37539402..06b161299296 100644 --- a/components/soc/esp32p4/include/soc/gpio_reg.h +++ b/components/soc/esp32p4/register/soc/gpio_reg.h @@ -12151,11 +12151,11 @@ extern "C" { #define GPIO_SEND_SEQ_S 0 /** GPIO_RECIVE_SEQ_REG register - * High speed sdio pad bist recive sequence + * High speed sdio pad bist receive sequence */ #define GPIO_RECIVE_SEQ_REG (DR_REG_GPIO_BASE + 0x71c) /** GPIO_RECIVE_SEQ : RO; bitpos: [31:0]; default: 0; - * High speed sdio pad bist recive sequence + * High speed sdio pad bist receive sequence */ #define GPIO_RECIVE_SEQ 0xFFFFFFFFU #define GPIO_RECIVE_SEQ_M (GPIO_RECIVE_SEQ_V << GPIO_RECIVE_SEQ_S) diff --git a/components/soc/esp32p4/include/soc/gpio_struct.h b/components/soc/esp32p4/register/soc/gpio_struct.h similarity index 99% rename from components/soc/esp32p4/include/soc/gpio_struct.h rename to components/soc/esp32p4/register/soc/gpio_struct.h index 052c0b9a6db6..5a9cab91712f 100644 --- a/components/soc/esp32p4/include/soc/gpio_struct.h +++ b/components/soc/esp32p4/register/soc/gpio_struct.h @@ -580,12 +580,12 @@ typedef union { } gpio_send_seq_reg_t; /** Type of recive_seq register - * High speed sdio pad bist recive sequence + * High speed sdio pad bist receive sequence */ typedef union { struct { /** recive_seq : RO; bitpos: [31:0]; default: 0; - * High speed sdio pad bist recive sequence + * High speed sdio pad bist receive sequence */ uint32_t recive_seq:32; }; diff --git a/components/soc/esp32p4/include/soc/h264_dma_reg.h b/components/soc/esp32p4/register/soc/h264_dma_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/h264_dma_reg.h rename to components/soc/esp32p4/register/soc/h264_dma_reg.h diff --git a/components/soc/esp32p4/include/soc/h264_dma_struct.h b/components/soc/esp32p4/register/soc/h264_dma_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/h264_dma_struct.h rename to components/soc/esp32p4/register/soc/h264_dma_struct.h diff --git a/components/soc/esp32p4/include/soc/h264_reg.h b/components/soc/esp32p4/register/soc/h264_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/h264_reg.h rename to components/soc/esp32p4/register/soc/h264_reg.h diff --git a/components/soc/esp32p4/include/soc/h264_struct.h b/components/soc/esp32p4/register/soc/h264_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/h264_struct.h rename to components/soc/esp32p4/register/soc/h264_struct.h diff --git a/components/soc/esp32p4/include/soc/hmac_reg.h b/components/soc/esp32p4/register/soc/hmac_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/hmac_reg.h rename to components/soc/esp32p4/register/soc/hmac_reg.h diff --git a/components/soc/esp32p4/include/soc/hmac_struct.h b/components/soc/esp32p4/register/soc/hmac_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/hmac_struct.h rename to components/soc/esp32p4/register/soc/hmac_struct.h diff --git a/components/soc/esp32p4/include/soc/hp2lp_peri_pms_reg.h b/components/soc/esp32p4/register/soc/hp2lp_peri_pms_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/hp2lp_peri_pms_reg.h rename to components/soc/esp32p4/register/soc/hp2lp_peri_pms_reg.h diff --git a/components/soc/esp32p4/include/soc/hp2lp_peri_pms_struct.h b/components/soc/esp32p4/register/soc/hp2lp_peri_pms_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/hp2lp_peri_pms_struct.h rename to components/soc/esp32p4/register/soc/hp2lp_peri_pms_struct.h diff --git a/components/soc/esp32p4/include/soc/hp_peri_pms_reg.h b/components/soc/esp32p4/register/soc/hp_peri_pms_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/hp_peri_pms_reg.h rename to components/soc/esp32p4/register/soc/hp_peri_pms_reg.h diff --git a/components/soc/esp32p4/include/soc/hp_peri_pms_struct.h b/components/soc/esp32p4/register/soc/hp_peri_pms_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/hp_peri_pms_struct.h rename to components/soc/esp32p4/register/soc/hp_peri_pms_struct.h diff --git a/components/soc/esp32p4/include/soc/hp_sys_clkrst_reg.h b/components/soc/esp32p4/register/soc/hp_sys_clkrst_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/hp_sys_clkrst_reg.h rename to components/soc/esp32p4/register/soc/hp_sys_clkrst_reg.h diff --git a/components/soc/esp32p4/include/soc/hp_sys_clkrst_struct.h b/components/soc/esp32p4/register/soc/hp_sys_clkrst_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/hp_sys_clkrst_struct.h rename to components/soc/esp32p4/register/soc/hp_sys_clkrst_struct.h diff --git a/components/soc/esp32p4/include/soc/hp_system_reg.h b/components/soc/esp32p4/register/soc/hp_system_reg.h similarity index 99% rename from components/soc/esp32p4/include/soc/hp_system_reg.h rename to components/soc/esp32p4/register/soc/hp_system_reg.h index ec9b55a793a2..e5d5a228e621 100644 --- a/components/soc/esp32p4/include/soc/hp_system_reg.h +++ b/components/soc/esp32p4/register/soc/hp_system_reg.h @@ -39,7 +39,7 @@ extern "C" { */ #define HP_SYSTEM_CPU_INT_FROM_CPU_0_REG (DR_REG_HP_SYS_BASE + 0x10) /** HP_SYSTEM_CPU_INT_FROM_CPU_0 : R/W; bitpos: [0]; default: 0; - * set 1 will triger a interrupt + * set 1 will trigger a interrupt */ #define HP_SYSTEM_CPU_INT_FROM_CPU_0 (BIT(0)) #define HP_SYSTEM_CPU_INT_FROM_CPU_0_M (HP_SYSTEM_CPU_INT_FROM_CPU_0_V << HP_SYSTEM_CPU_INT_FROM_CPU_0_S) @@ -51,7 +51,7 @@ extern "C" { */ #define HP_SYSTEM_CPU_INT_FROM_CPU_1_REG (DR_REG_HP_SYS_BASE + 0x14) /** HP_SYSTEM_CPU_INT_FROM_CPU_1 : R/W; bitpos: [0]; default: 0; - * set 1 will triger a interrupt + * set 1 will trigger a interrupt */ #define HP_SYSTEM_CPU_INT_FROM_CPU_1 (BIT(0)) #define HP_SYSTEM_CPU_INT_FROM_CPU_1_M (HP_SYSTEM_CPU_INT_FROM_CPU_1_V << HP_SYSTEM_CPU_INT_FROM_CPU_1_S) @@ -63,7 +63,7 @@ extern "C" { */ #define HP_SYSTEM_CPU_INT_FROM_CPU_2_REG (DR_REG_HP_SYS_BASE + 0x18) /** HP_SYSTEM_CPU_INT_FROM_CPU_2 : R/W; bitpos: [0]; default: 0; - * set 1 will triger a interrupt + * set 1 will trigger a interrupt */ #define HP_SYSTEM_CPU_INT_FROM_CPU_2 (BIT(0)) #define HP_SYSTEM_CPU_INT_FROM_CPU_2_M (HP_SYSTEM_CPU_INT_FROM_CPU_2_V << HP_SYSTEM_CPU_INT_FROM_CPU_2_S) @@ -75,7 +75,7 @@ extern "C" { */ #define HP_SYSTEM_CPU_INT_FROM_CPU_3_REG (DR_REG_HP_SYS_BASE + 0x1c) /** HP_SYSTEM_CPU_INT_FROM_CPU_3 : R/W; bitpos: [0]; default: 0; - * set 1 will triger a interrupt + * set 1 will trigger a interrupt */ #define HP_SYSTEM_CPU_INT_FROM_CPU_3 (BIT(0)) #define HP_SYSTEM_CPU_INT_FROM_CPU_3_M (HP_SYSTEM_CPU_INT_FROM_CPU_3_V << HP_SYSTEM_CPU_INT_FROM_CPU_3_S) @@ -87,7 +87,7 @@ extern "C" { */ #define HP_SYSTEM_CACHE_CLK_CONFIG_REG (DR_REG_HP_SYS_BASE + 0x20) /** HP_SYSTEM_REG_L2_CACHE_CLK_ON : R/W; bitpos: [0]; default: 1; - * l2 cahce clk enable + * l2 cache clk enable */ #define HP_SYSTEM_REG_L2_CACHE_CLK_ON (BIT(0)) #define HP_SYSTEM_REG_L2_CACHE_CLK_ON_M (HP_SYSTEM_REG_L2_CACHE_CLK_ON_V << HP_SYSTEM_REG_L2_CACHE_CLK_ON_S) @@ -269,7 +269,7 @@ extern "C" { */ #define HP_SYSTEM_PROBEA_CTRL_REG (DR_REG_HP_SYS_BASE + 0x50) /** HP_SYSTEM_REG_PROBE_A_MOD_SEL : R/W; bitpos: [15:0]; default: 0; - * Tihs field is used to selec probe_group from probe_group0 to probe_group15 for + * This field is used to selec probe_group from probe_group0 to probe_group15 for * module's probe_out[31:0] in a mode */ #define HP_SYSTEM_REG_PROBE_A_MOD_SEL 0x0000FFFFU @@ -277,21 +277,21 @@ extern "C" { #define HP_SYSTEM_REG_PROBE_A_MOD_SEL_V 0x0000FFFFU #define HP_SYSTEM_REG_PROBE_A_MOD_SEL_S 0 /** HP_SYSTEM_REG_PROBE_A_TOP_SEL : R/W; bitpos: [23:16]; default: 0; - * Tihs field is used to selec module's probe_out[31:0] as probe out in a mode + * This field is used to selec module's probe_out[31:0] as probe out in a mode */ #define HP_SYSTEM_REG_PROBE_A_TOP_SEL 0x000000FFU #define HP_SYSTEM_REG_PROBE_A_TOP_SEL_M (HP_SYSTEM_REG_PROBE_A_TOP_SEL_V << HP_SYSTEM_REG_PROBE_A_TOP_SEL_S) #define HP_SYSTEM_REG_PROBE_A_TOP_SEL_V 0x000000FFU #define HP_SYSTEM_REG_PROBE_A_TOP_SEL_S 16 /** HP_SYSTEM_REG_PROBE_L_SEL : R/W; bitpos: [25:24]; default: 0; - * Tihs field is used to selec probe_out[31:16] + * This field is used to selec probe_out[31:16] */ #define HP_SYSTEM_REG_PROBE_L_SEL 0x00000003U #define HP_SYSTEM_REG_PROBE_L_SEL_M (HP_SYSTEM_REG_PROBE_L_SEL_V << HP_SYSTEM_REG_PROBE_L_SEL_S) #define HP_SYSTEM_REG_PROBE_L_SEL_V 0x00000003U #define HP_SYSTEM_REG_PROBE_L_SEL_S 24 /** HP_SYSTEM_REG_PROBE_H_SEL : R/W; bitpos: [27:26]; default: 0; - * Tihs field is used to selec probe_out[31:16] + * This field is used to selec probe_out[31:16] */ #define HP_SYSTEM_REG_PROBE_H_SEL 0x00000003U #define HP_SYSTEM_REG_PROBE_H_SEL_M (HP_SYSTEM_REG_PROBE_H_SEL_V << HP_SYSTEM_REG_PROBE_H_SEL_S) @@ -310,7 +310,7 @@ extern "C" { */ #define HP_SYSTEM_PROBEB_CTRL_REG (DR_REG_HP_SYS_BASE + 0x54) /** HP_SYSTEM_REG_PROBE_B_MOD_SEL : R/W; bitpos: [15:0]; default: 0; - * Tihs field is used to selec probe_group from probe_group0 to probe_group15 for + * This field is used to selec probe_group from probe_group0 to probe_group15 for * module's probe_out[31:0] in b mode. */ #define HP_SYSTEM_REG_PROBE_B_MOD_SEL 0x0000FFFFU @@ -318,7 +318,7 @@ extern "C" { #define HP_SYSTEM_REG_PROBE_B_MOD_SEL_V 0x0000FFFFU #define HP_SYSTEM_REG_PROBE_B_MOD_SEL_S 0 /** HP_SYSTEM_REG_PROBE_B_TOP_SEL : R/W; bitpos: [23:16]; default: 0; - * Tihs field is used to select module's probe_out[31:0] as probe_out in b mode + * This field is used to select module's probe_out[31:0] as probe_out in b mode */ #define HP_SYSTEM_REG_PROBE_B_TOP_SEL 0x000000FFU #define HP_SYSTEM_REG_PROBE_B_TOP_SEL_M (HP_SYSTEM_REG_PROBE_B_TOP_SEL_V << HP_SYSTEM_REG_PROBE_B_TOP_SEL_S) @@ -1069,7 +1069,7 @@ extern "C" { */ #define HP_SYSTEM_BITSCRAMBLER_PERI_SEL_REG (DR_REG_HP_SYS_BASE + 0x140) /** HP_SYSTEM_BITSCRAMBLER_PERI_RX_SEL : R/W; bitpos: [3:0]; default: 15; - * Set this field to sel peri with DMA RX interface to connec with bitscrambler: 4'h0 + * Set this field to sel peri with DMA RX interface to connect with bitscrambler: 4'h0 * : lcd_cam, 4'h1: gpspi2, 4'h2: gpspi3, 4'h3: parl_io, 4'h4: aes, 4'h5: sha, 4'h6: * adc, 4'h7: i2s0, 4'h8: i2s1, 4'h9: i2s2, 4'ha: i3c_mst, 4'hb: uhci0, 4'hc: RMT, * else : none @@ -1079,7 +1079,7 @@ extern "C" { #define HP_SYSTEM_BITSCRAMBLER_PERI_RX_SEL_V 0x0000000FU #define HP_SYSTEM_BITSCRAMBLER_PERI_RX_SEL_S 0 /** HP_SYSTEM_BITSCRAMBLER_PERI_TX_SEL : R/W; bitpos: [7:4]; default: 15; - * Set this field to sel peri with DMA TX interface to connec with bitscrambler: 4'h0 + * Set this field to sel peri with DMA TX interface to connect with bitscrambler: 4'h0 * : lcd_cam, 4'h1: gpspi2, 4'h2: gpspi3, 4'h3: parl_io, 4'h4: aes, 4'h5: sha, 4'h6: * adc, 4'h7: i2s0, 4'h8: i2s1, 4'h9: i2s2, 4'ha: i3c_mst, 4'hb: uhci0, 4'hc: RMT, * else : none diff --git a/components/soc/esp32p4/include/soc/hp_system_struct.h b/components/soc/esp32p4/register/soc/hp_system_struct.h similarity index 98% rename from components/soc/esp32p4/include/soc/hp_system_struct.h rename to components/soc/esp32p4/register/soc/hp_system_struct.h index 628ef31ef4f8..4e3d23f78abb 100644 --- a/components/soc/esp32p4/include/soc/hp_system_struct.h +++ b/components/soc/esp32p4/register/soc/hp_system_struct.h @@ -48,7 +48,7 @@ typedef union { typedef union { struct { /** cpu_int_from_cpu_0 : R/W; bitpos: [0]; default: 0; - * set 1 will triger a interrupt + * set 1 will trigger a interrupt */ uint32_t cpu_int_from_cpu_0:1; uint32_t reserved_1:31; @@ -64,7 +64,7 @@ typedef union { typedef union { struct { /** cpu_int_from_cpu_1 : R/W; bitpos: [0]; default: 0; - * set 1 will triger a interrupt + * set 1 will trigger a interrupt */ uint32_t cpu_int_from_cpu_1:1; uint32_t reserved_1:31; @@ -80,7 +80,7 @@ typedef union { typedef union { struct { /** cpu_int_from_cpu_2 : R/W; bitpos: [0]; default: 0; - * set 1 will triger a interrupt + * set 1 will trigger a interrupt */ uint32_t cpu_int_from_cpu_2:1; uint32_t reserved_1:31; @@ -96,7 +96,7 @@ typedef union { typedef union { struct { /** cpu_int_from_cpu_3 : R/W; bitpos: [0]; default: 0; - * set 1 will triger a interrupt + * set 1 will trigger a interrupt */ uint32_t cpu_int_from_cpu_3:1; uint32_t reserved_1:31; @@ -112,7 +112,7 @@ typedef union { typedef union { struct { /** reg_l2_cache_clk_on : R/W; bitpos: [0]; default: 1; - * l2 cahce clk enable + * l2 cache clk enable */ uint32_t reg_l2_cache_clk_on:1; /** reg_l1_d_cache_clk_on : R/W; bitpos: [1]; default: 1; @@ -283,20 +283,20 @@ typedef union { typedef union { struct { /** reg_probe_a_mod_sel : R/W; bitpos: [15:0]; default: 0; - * Tihs field is used to selec probe_group from probe_group0 to probe_group15 for + * This field is used to selec probe_group from probe_group0 to probe_group15 for * module's probe_out[31:0] in a mode */ uint32_t reg_probe_a_mod_sel:16; /** reg_probe_a_top_sel : R/W; bitpos: [23:16]; default: 0; - * Tihs field is used to selec module's probe_out[31:0] as probe out in a mode + * This field is used to selec module's probe_out[31:0] as probe out in a mode */ uint32_t reg_probe_a_top_sel:8; /** reg_probe_l_sel : R/W; bitpos: [25:24]; default: 0; - * Tihs field is used to selec probe_out[31:16] + * This field is used to selec probe_out[31:16] */ uint32_t reg_probe_l_sel:2; /** reg_probe_h_sel : R/W; bitpos: [27:26]; default: 0; - * Tihs field is used to selec probe_out[31:16] + * This field is used to selec probe_out[31:16] */ uint32_t reg_probe_h_sel:2; /** reg_probe_global_en : R/W; bitpos: [28]; default: 0; @@ -316,12 +316,12 @@ typedef union { typedef union { struct { /** reg_probe_b_mod_sel : R/W; bitpos: [15:0]; default: 0; - * Tihs field is used to selec probe_group from probe_group0 to probe_group15 for + * This field is used to selec probe_group from probe_group0 to probe_group15 for * module's probe_out[31:0] in b mode. */ uint32_t reg_probe_b_mod_sel:16; /** reg_probe_b_top_sel : R/W; bitpos: [23:16]; default: 0; - * Tihs field is used to select module's probe_out[31:0] as probe_out in b mode + * This field is used to select module's probe_out[31:0] as probe_out in b mode */ uint32_t reg_probe_b_top_sel:8; /** reg_probe_b_en : R/W; bitpos: [24]; default: 0; @@ -834,7 +834,7 @@ typedef union { } hp_system_tcm_rdn_eco_high_reg_t; -/** Group: HP GPIO DED HOLD CTRL REG */ +/** Group: HP GPIO DEAD HOLD CTRL REG */ /** Type of gpio_ded_hold_ctrl register * NA */ @@ -1021,14 +1021,14 @@ typedef union { typedef union { struct { /** bitscrambler_peri_rx_sel : R/W; bitpos: [3:0]; default: 15; - * Set this field to sel peri with DMA RX interface to connec with bitscrambler: 4'h0 + * Set this field to sel peri with DMA RX interface to connect with bitscrambler: 4'h0 * : lcd_cam, 4'h1: gpspi2, 4'h2: gpspi3, 4'h3: parl_io, 4'h4: aes, 4'h5: sha, 4'h6: * adc, 4'h7: i2s0, 4'h8: i2s1, 4'h9: i2s2, 4'ha: i3c_mst, 4'hb: uhci0, 4'hc: RMT, * else : none */ uint32_t bitscrambler_peri_rx_sel:4; /** bitscrambler_peri_tx_sel : R/W; bitpos: [7:4]; default: 15; - * Set this field to sel peri with DMA TX interface to connec with bitscrambler: 4'h0 + * Set this field to sel peri with DMA TX interface to connect with bitscrambler: 4'h0 * : lcd_cam, 4'h1: gpspi2, 4'h2: gpspi3, 4'h3: parl_io, 4'h4: aes, 4'h5: sha, 4'h6: * adc, 4'h7: i2s0, 4'h8: i2s1, 4'h9: i2s2, 4'ha: i3c_mst, 4'hb: uhci0, 4'hc: RMT, * else : none diff --git a/components/soc/esp32p4/include/soc/huk_reg.h b/components/soc/esp32p4/register/soc/huk_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/huk_reg.h rename to components/soc/esp32p4/register/soc/huk_reg.h diff --git a/components/soc/esp32p4/include/soc/huk_struct.h b/components/soc/esp32p4/register/soc/huk_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/huk_struct.h rename to components/soc/esp32p4/register/soc/huk_struct.h diff --git a/components/soc/esp32p4/include/soc/i2c_ana_mst_reg.h b/components/soc/esp32p4/register/soc/i2c_ana_mst_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/i2c_ana_mst_reg.h rename to components/soc/esp32p4/register/soc/i2c_ana_mst_reg.h diff --git a/components/soc/esp32p4/include/soc/i2c_ana_mst_struct.h b/components/soc/esp32p4/register/soc/i2c_ana_mst_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/i2c_ana_mst_struct.h rename to components/soc/esp32p4/register/soc/i2c_ana_mst_struct.h diff --git a/components/soc/esp32p4/include/soc/i2c_reg.h b/components/soc/esp32p4/register/soc/i2c_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/i2c_reg.h rename to components/soc/esp32p4/register/soc/i2c_reg.h diff --git a/components/soc/esp32p4/include/soc/i2c_struct.h b/components/soc/esp32p4/register/soc/i2c_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/i2c_struct.h rename to components/soc/esp32p4/register/soc/i2c_struct.h diff --git a/components/soc/esp32p4/include/soc/i2s_reg.h b/components/soc/esp32p4/register/soc/i2s_reg.h similarity index 99% rename from components/soc/esp32p4/include/soc/i2s_reg.h rename to components/soc/esp32p4/register/soc/i2s_reg.h index cf9267487d13..88ada789e789 100644 --- a/components/soc/esp32p4/include/soc/i2s_reg.h +++ b/components/soc/esp32p4/register/soc/i2s_reg.h @@ -320,7 +320,7 @@ extern "C" { #define I2S_TX_SLAVE_MOD_V 0x00000001U #define I2S_TX_SLAVE_MOD_S 3 /** I2S_TX_STOP_EN : R/W; bitpos: [4]; default: 1; - * Set this bit to stop disable output BCK signal and WS signal when tx FIFO is emtpy + * Set this bit to stop disable output BCK signal and WS signal when tx FIFO is empty */ #define I2S_TX_STOP_EN (BIT(4)) #define I2S_TX_STOP_EN_M (I2S_TX_STOP_EN_V << I2S_TX_STOP_EN_S) diff --git a/components/soc/esp32p4/include/soc/i2s_struct.h b/components/soc/esp32p4/register/soc/i2s_struct.h similarity index 99% rename from components/soc/esp32p4/include/soc/i2s_struct.h rename to components/soc/esp32p4/register/soc/i2s_struct.h index 6e05f6a2eb86..191b9dc6a1bb 100644 --- a/components/soc/esp32p4/include/soc/i2s_struct.h +++ b/components/soc/esp32p4/register/soc/i2s_struct.h @@ -496,7 +496,7 @@ typedef union { */ uint32_t tx_slave_mod:1; /** tx_stop_en : R/W; bitpos: [4]; default: 1; - * Set this bit to stop disable output BCK signal and WS signal when tx FIFO is emtpy + * Set this bit to stop disable output BCK signal and WS signal when tx FIFO is empty */ uint32_t tx_stop_en:1; /** tx_chan_equal : R/W; bitpos: [5]; default: 0; diff --git a/components/soc/esp32p4/include/soc/i3c_mst_mem_reg.h b/components/soc/esp32p4/register/soc/i3c_mst_mem_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/i3c_mst_mem_reg.h rename to components/soc/esp32p4/register/soc/i3c_mst_mem_reg.h diff --git a/components/soc/esp32p4/include/soc/i3c_mst_mem_struct.h b/components/soc/esp32p4/register/soc/i3c_mst_mem_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/i3c_mst_mem_struct.h rename to components/soc/esp32p4/register/soc/i3c_mst_mem_struct.h diff --git a/components/soc/esp32p4/include/soc/i3c_mst_reg.h b/components/soc/esp32p4/register/soc/i3c_mst_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/i3c_mst_reg.h rename to components/soc/esp32p4/register/soc/i3c_mst_reg.h diff --git a/components/soc/esp32p4/include/soc/i3c_mst_struct.h b/components/soc/esp32p4/register/soc/i3c_mst_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/i3c_mst_struct.h rename to components/soc/esp32p4/register/soc/i3c_mst_struct.h diff --git a/components/soc/esp32p4/include/soc/i3c_slv_reg.h b/components/soc/esp32p4/register/soc/i3c_slv_reg.h similarity index 99% rename from components/soc/esp32p4/include/soc/i3c_slv_reg.h rename to components/soc/esp32p4/register/soc/i3c_slv_reg.h index a5684d88e0e5..335ec44fc206 100644 --- a/components/soc/esp32p4/include/soc/i3c_slv_reg.h +++ b/components/soc/esp32p4/register/soc/i3c_slv_reg.h @@ -103,7 +103,7 @@ extern "C" { #define I3C_SLV_STNOTSTOP_V 0x00000001U #define I3C_SLV_STNOTSTOP_S 0 /** I3C_SLV_STMSG : RO; bitpos: [1]; default: 0; - * Is 1 if this bus Slave is listening to the bus traffic or repsonding, If + * Is 1 if this bus Slave is listening to the bus traffic or responding, If * STNOSTOP=1, then this will be 0 when a non-matching address seen until next * respeated START it STOP. */ diff --git a/components/soc/esp32p4/include/soc/i3c_slv_struct.h b/components/soc/esp32p4/register/soc/i3c_slv_struct.h similarity index 99% rename from components/soc/esp32p4/include/soc/i3c_slv_struct.h rename to components/soc/esp32p4/register/soc/i3c_slv_struct.h index 125ca7d62779..7df80af89422 100644 --- a/components/soc/esp32p4/include/soc/i3c_slv_struct.h +++ b/components/soc/esp32p4/register/soc/i3c_slv_struct.h @@ -83,7 +83,7 @@ typedef union { */ uint32_t stnotstop:1; /** stmsg : RO; bitpos: [1]; default: 0; - * Is 1 if this bus Slave is listening to the bus traffic or repsonding, If + * Is 1 if this bus Slave is listening to the bus traffic or responding, If * STNOSTOP=1, then this will be 0 when a non-matching address seen until next * respeated START it STOP. */ @@ -459,10 +459,10 @@ typedef union { */ typedef union { struct { - /** capablities : RO; bitpos: [31:0]; default: 2081684508; + /** capabilities : RO; bitpos: [31:0]; default: 2081684508; * NA */ - uint32_t capablities:32; + uint32_t capabilities:32; }; uint32_t val; } i3c_slv_capabilities_reg_t; diff --git a/components/soc/esp32p4/include/soc/icm_sys_qos_reg.h b/components/soc/esp32p4/register/soc/icm_sys_qos_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/icm_sys_qos_reg.h rename to components/soc/esp32p4/register/soc/icm_sys_qos_reg.h diff --git a/components/soc/esp32p4/include/soc/icm_sys_qos_struct.h b/components/soc/esp32p4/register/soc/icm_sys_qos_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/icm_sys_qos_struct.h rename to components/soc/esp32p4/register/soc/icm_sys_qos_struct.h diff --git a/components/soc/esp32p4/include/soc/icm_sys_reg.h b/components/soc/esp32p4/register/soc/icm_sys_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/icm_sys_reg.h rename to components/soc/esp32p4/register/soc/icm_sys_reg.h diff --git a/components/soc/esp32p4/include/soc/icm_sys_struct.h b/components/soc/esp32p4/register/soc/icm_sys_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/icm_sys_struct.h rename to components/soc/esp32p4/register/soc/icm_sys_struct.h diff --git a/components/soc/esp32p4/include/soc/interrupt_core0_reg.h b/components/soc/esp32p4/register/soc/interrupt_core0_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/interrupt_core0_reg.h rename to components/soc/esp32p4/register/soc/interrupt_core0_reg.h diff --git a/components/soc/esp32p4/include/soc/interrupt_core0_struct.h b/components/soc/esp32p4/register/soc/interrupt_core0_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/interrupt_core0_struct.h rename to components/soc/esp32p4/register/soc/interrupt_core0_struct.h diff --git a/components/soc/esp32p4/include/soc/interrupt_core1_reg.h b/components/soc/esp32p4/register/soc/interrupt_core1_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/interrupt_core1_reg.h rename to components/soc/esp32p4/register/soc/interrupt_core1_reg.h diff --git a/components/soc/esp32p4/include/soc/interrupt_core1_struct.h b/components/soc/esp32p4/register/soc/interrupt_core1_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/interrupt_core1_struct.h rename to components/soc/esp32p4/register/soc/interrupt_core1_struct.h diff --git a/components/soc/esp32p4/include/soc/io_mux_reg.h b/components/soc/esp32p4/register/soc/io_mux_reg.h similarity index 99% rename from components/soc/esp32p4/include/soc/io_mux_reg.h rename to components/soc/esp32p4/register/soc/io_mux_reg.h index 02440af90307..d7eba33c2cfc 100644 --- a/components/soc/esp32p4/include/soc/io_mux_reg.h +++ b/components/soc/esp32p4/register/soc/io_mux_reg.h @@ -5,7 +5,7 @@ */ #pragma once -#include "soc.h" +#include "soc/soc.h" /* The following are the bit fields for PERIPHS_IO_MUX_x_U registers */ /* Output enable in sleep mode */ diff --git a/components/soc/esp32p4/include/soc/io_mux_struct.h b/components/soc/esp32p4/register/soc/io_mux_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/io_mux_struct.h rename to components/soc/esp32p4/register/soc/io_mux_struct.h diff --git a/components/soc/esp32p4/include/soc/iomux_mspi_pin_reg.h b/components/soc/esp32p4/register/soc/iomux_mspi_pin_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/iomux_mspi_pin_reg.h rename to components/soc/esp32p4/register/soc/iomux_mspi_pin_reg.h diff --git a/components/soc/esp32p4/include/soc/iomux_mspi_pin_struct.h b/components/soc/esp32p4/register/soc/iomux_mspi_pin_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/iomux_mspi_pin_struct.h rename to components/soc/esp32p4/register/soc/iomux_mspi_pin_struct.h diff --git a/components/soc/esp32p4/include/soc/isp_reg.h b/components/soc/esp32p4/register/soc/isp_reg.h similarity index 99% rename from components/soc/esp32p4/include/soc/isp_reg.h rename to components/soc/esp32p4/register/soc/isp_reg.h index 13749f014c8f..c1c42d64aafe 100644 --- a/components/soc/esp32p4/include/soc/isp_reg.h +++ b/components/soc/esp32p4/register/soc/isp_reg.h @@ -521,56 +521,56 @@ extern "C" { */ #define ISP_BF_GAU0_REG (DR_REG_ISP_BASE + 0x30) /** ISP_GAU_TEMPLATE21 : R/W; bitpos: [3:0]; default: 15; - * this field configures index 21 of gausian template + * this field configures index 21 of gaussian template */ #define ISP_GAU_TEMPLATE21 0x0000000FU #define ISP_GAU_TEMPLATE21_M (ISP_GAU_TEMPLATE21_V << ISP_GAU_TEMPLATE21_S) #define ISP_GAU_TEMPLATE21_V 0x0000000FU #define ISP_GAU_TEMPLATE21_S 0 /** ISP_GAU_TEMPLATE20 : R/W; bitpos: [7:4]; default: 15; - * this field configures index 20 of gausian template + * this field configures index 20 of gaussian template */ #define ISP_GAU_TEMPLATE20 0x0000000FU #define ISP_GAU_TEMPLATE20_M (ISP_GAU_TEMPLATE20_V << ISP_GAU_TEMPLATE20_S) #define ISP_GAU_TEMPLATE20_V 0x0000000FU #define ISP_GAU_TEMPLATE20_S 4 /** ISP_GAU_TEMPLATE12 : R/W; bitpos: [11:8]; default: 15; - * this field configures index 12 of gausian template + * this field configures index 12 of gaussian template */ #define ISP_GAU_TEMPLATE12 0x0000000FU #define ISP_GAU_TEMPLATE12_M (ISP_GAU_TEMPLATE12_V << ISP_GAU_TEMPLATE12_S) #define ISP_GAU_TEMPLATE12_V 0x0000000FU #define ISP_GAU_TEMPLATE12_S 8 /** ISP_GAU_TEMPLATE11 : R/W; bitpos: [15:12]; default: 15; - * this field configures index 11 of gausian template + * this field configures index 11 of gaussian template */ #define ISP_GAU_TEMPLATE11 0x0000000FU #define ISP_GAU_TEMPLATE11_M (ISP_GAU_TEMPLATE11_V << ISP_GAU_TEMPLATE11_S) #define ISP_GAU_TEMPLATE11_V 0x0000000FU #define ISP_GAU_TEMPLATE11_S 12 /** ISP_GAU_TEMPLATE10 : R/W; bitpos: [19:16]; default: 15; - * this field configures index 10 of gausian template + * this field configures index 10 of gaussian template */ #define ISP_GAU_TEMPLATE10 0x0000000FU #define ISP_GAU_TEMPLATE10_M (ISP_GAU_TEMPLATE10_V << ISP_GAU_TEMPLATE10_S) #define ISP_GAU_TEMPLATE10_V 0x0000000FU #define ISP_GAU_TEMPLATE10_S 16 /** ISP_GAU_TEMPLATE02 : R/W; bitpos: [23:20]; default: 15; - * this field configures index 02 of gausian template + * this field configures index 02 of gaussian template */ #define ISP_GAU_TEMPLATE02 0x0000000FU #define ISP_GAU_TEMPLATE02_M (ISP_GAU_TEMPLATE02_V << ISP_GAU_TEMPLATE02_S) #define ISP_GAU_TEMPLATE02_V 0x0000000FU #define ISP_GAU_TEMPLATE02_S 20 /** ISP_GAU_TEMPLATE01 : R/W; bitpos: [27:24]; default: 15; - * this field configures index 01 of gausian template + * this field configures index 01 of gaussian template */ #define ISP_GAU_TEMPLATE01 0x0000000FU #define ISP_GAU_TEMPLATE01_M (ISP_GAU_TEMPLATE01_V << ISP_GAU_TEMPLATE01_S) #define ISP_GAU_TEMPLATE01_V 0x0000000FU #define ISP_GAU_TEMPLATE01_S 24 /** ISP_GAU_TEMPLATE00 : R/W; bitpos: [31:28]; default: 15; - * this field configures index 00 of gausian template + * this field configures index 00 of gaussian template */ #define ISP_GAU_TEMPLATE00 0x0000000FU #define ISP_GAU_TEMPLATE00_M (ISP_GAU_TEMPLATE00_V << ISP_GAU_TEMPLATE00_S) @@ -582,7 +582,7 @@ extern "C" { */ #define ISP_BF_GAU1_REG (DR_REG_ISP_BASE + 0x34) /** ISP_GAU_TEMPLATE22 : R/W; bitpos: [3:0]; default: 15; - * this field configures index 22 of gausian template + * this field configures index 22 of gaussian template */ #define ISP_GAU_TEMPLATE22 0x0000000FU #define ISP_GAU_TEMPLATE22_M (ISP_GAU_TEMPLATE22_V << ISP_GAU_TEMPLATE22_S) @@ -2584,7 +2584,7 @@ extern "C" { #define ISP_AE_MONITOR_TH_V 0x000000FFU #define ISP_AE_MONITOR_TH_S 8 /** ISP_AE_MONITOR_PERIOD : R/W; bitpos: [21:16]; default: 0; - * this field cnfigures ae monitor frame period + * this field configures ae monitor frame period */ #define ISP_AE_MONITOR_PERIOD 0x0000003FU #define ISP_AE_MONITOR_PERIOD_M (ISP_AE_MONITOR_PERIOD_V << ISP_AE_MONITOR_PERIOD_S) @@ -3030,7 +3030,7 @@ extern "C" { */ #define ISP_DMA_CNTL_REG (DR_REG_ISP_BASE + 0x10c) /** ISP_DMA_EN : WT; bitpos: [0]; default: 0; - * write 1 to triger dma to get 1 frame + * write 1 to trigger dma to get 1 frame */ #define ISP_DMA_EN (BIT(0)) #define ISP_DMA_EN_M (ISP_DMA_EN_V << ISP_DMA_EN_S) @@ -3090,7 +3090,7 @@ extern "C" { */ #define ISP_CAM_CNTL_REG (DR_REG_ISP_BASE + 0x114) /** ISP_CAM_EN : R/W; bitpos: [0]; default: 0; - * write 1 to start recive camera data, write 0 to disable + * write 1 to start receive camera data, write 0 to disable */ #define ISP_CAM_EN (BIT(0)) #define ISP_CAM_EN_M (ISP_CAM_EN_V << ISP_CAM_EN_S) @@ -3111,7 +3111,7 @@ extern "C" { #define ISP_CAM_RESET_V 0x00000001U #define ISP_CAM_RESET_S 2 /** ISP_CAM_CLK_INV : R/W; bitpos: [3]; default: 0; - * this bit configures the invertion of cam clk from pad. 0: not invert cam clk, 1: + * this bit configures the inversion of cam clk from pad. 0: not invert cam clk, 1: * invert cam clk */ #define ISP_CAM_CLK_INV (BIT(3)) @@ -3487,7 +3487,7 @@ extern "C" { */ #define ISP_AWB_MODE_REG (DR_REG_ISP_BASE + 0x164) /** ISP_AWB_MODE : R/W; bitpos: [1:0]; default: 3; - * this field configures awb algo sel. 00: none sellected. 01: sel algo0. 10: sel + * this field configures awb algo sel. 00: none selected. 01: sel algo0. 10: sel * algo1. 11: sel both algo0 and algo1 */ #define ISP_AWB_MODE 0x00000003U diff --git a/components/soc/esp32p4/include/soc/isp_struct.h b/components/soc/esp32p4/register/soc/isp_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/isp_struct.h rename to components/soc/esp32p4/register/soc/isp_struct.h diff --git a/components/soc/esp32p4/include/soc/jpeg_reg.h b/components/soc/esp32p4/register/soc/jpeg_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/jpeg_reg.h rename to components/soc/esp32p4/register/soc/jpeg_reg.h diff --git a/components/soc/esp32p4/include/soc/jpeg_struct.h b/components/soc/esp32p4/register/soc/jpeg_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/jpeg_struct.h rename to components/soc/esp32p4/register/soc/jpeg_struct.h diff --git a/components/soc/esp32p4/include/soc/keymng_reg.h b/components/soc/esp32p4/register/soc/keymng_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/keymng_reg.h rename to components/soc/esp32p4/register/soc/keymng_reg.h diff --git a/components/soc/esp32p4/include/soc/keymng_struct.h b/components/soc/esp32p4/register/soc/keymng_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/keymng_struct.h rename to components/soc/esp32p4/register/soc/keymng_struct.h diff --git a/components/soc/esp32p4/include/soc/l2mem_monitor_reg.h b/components/soc/esp32p4/register/soc/l2mem_monitor_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/l2mem_monitor_reg.h rename to components/soc/esp32p4/register/soc/l2mem_monitor_reg.h diff --git a/components/soc/esp32p4/include/soc/l2mem_monitor_struct.h b/components/soc/esp32p4/register/soc/l2mem_monitor_struct.h similarity index 98% rename from components/soc/esp32p4/include/soc/l2mem_monitor_struct.h rename to components/soc/esp32p4/register/soc/l2mem_monitor_struct.h index c88691215af4..e3e1abf3761d 100644 --- a/components/soc/esp32p4/include/soc/l2mem_monitor_struct.h +++ b/components/soc/esp32p4/register/soc/l2mem_monitor_struct.h @@ -12,7 +12,7 @@ extern "C" { /** Group: configuration registers */ /** Type of log_setting register - * log config regsiter + * log config register */ typedef union { struct { @@ -43,7 +43,7 @@ typedef union { } mem_monitor_log_setting_reg_t; /** Type of log_setting1 register - * log config regsiter + * log config register */ typedef union { struct { @@ -61,7 +61,7 @@ typedef union { } mem_monitor_log_setting1_reg_t; /** Type of log_check_data register - * check data regsiter + * check data register */ typedef union { struct { @@ -89,7 +89,7 @@ typedef union { } mem_monitor_log_data_mask_reg_t; /** Type of log_min register - * log boundary regsiter + * log boundary register */ typedef union { struct { @@ -102,7 +102,7 @@ typedef union { } mem_monitor_log_min_reg_t; /** Type of log_max register - * log boundary regsiter + * log boundary register */ typedef union { struct { diff --git a/components/soc/esp32p4/include/soc/lcd_cam_reg.h b/components/soc/esp32p4/register/soc/lcd_cam_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/lcd_cam_reg.h rename to components/soc/esp32p4/register/soc/lcd_cam_reg.h diff --git a/components/soc/esp32p4/include/soc/lcd_cam_struct.h b/components/soc/esp32p4/register/soc/lcd_cam_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/lcd_cam_struct.h rename to components/soc/esp32p4/register/soc/lcd_cam_struct.h diff --git a/components/soc/esp32p4/include/soc/ledc_reg.h b/components/soc/esp32p4/register/soc/ledc_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/ledc_reg.h rename to components/soc/esp32p4/register/soc/ledc_reg.h diff --git a/components/soc/esp32p4/include/soc/ledc_struct.h b/components/soc/esp32p4/register/soc/ledc_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/ledc_struct.h rename to components/soc/esp32p4/register/soc/ledc_struct.h diff --git a/components/soc/esp32p4/include/soc/lp2hp_peri_pms_reg.h b/components/soc/esp32p4/register/soc/lp2hp_peri_pms_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/lp2hp_peri_pms_reg.h rename to components/soc/esp32p4/register/soc/lp2hp_peri_pms_reg.h diff --git a/components/soc/esp32p4/include/soc/lp2hp_peri_pms_struct.h b/components/soc/esp32p4/register/soc/lp2hp_peri_pms_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/lp2hp_peri_pms_struct.h rename to components/soc/esp32p4/register/soc/lp2hp_peri_pms_struct.h diff --git a/components/soc/esp32p4/include/soc/lp_adc_reg.h b/components/soc/esp32p4/register/soc/lp_adc_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/lp_adc_reg.h rename to components/soc/esp32p4/register/soc/lp_adc_reg.h diff --git a/components/soc/esp32p4/include/soc/lp_adc_struct.h b/components/soc/esp32p4/register/soc/lp_adc_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/lp_adc_struct.h rename to components/soc/esp32p4/register/soc/lp_adc_struct.h diff --git a/components/soc/esp32p4/include/soc/lp_analog_peri_reg.h b/components/soc/esp32p4/register/soc/lp_analog_peri_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/lp_analog_peri_reg.h rename to components/soc/esp32p4/register/soc/lp_analog_peri_reg.h diff --git a/components/soc/esp32p4/include/soc/lp_analog_peri_struct.h b/components/soc/esp32p4/register/soc/lp_analog_peri_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/lp_analog_peri_struct.h rename to components/soc/esp32p4/register/soc/lp_analog_peri_struct.h diff --git a/components/soc/esp32p4/include/soc/lp_clkrst_reg.h b/components/soc/esp32p4/register/soc/lp_clkrst_reg.h similarity index 99% rename from components/soc/esp32p4/include/soc/lp_clkrst_reg.h rename to components/soc/esp32p4/register/soc/lp_clkrst_reg.h index de3f17820c11..a771250be620 100644 --- a/components/soc/esp32p4/include/soc/lp_clkrst_reg.h +++ b/components/soc/esp32p4/register/soc/lp_clkrst_reg.h @@ -829,7 +829,7 @@ extern "C" { #define LP_CLKRST_HP_FOSC_20M_CLK_EN_V 0x00000001U #define LP_CLKRST_HP_FOSC_20M_CLK_EN_S 24 /** LP_CLKRST_HP_XTAL_40M_CLK_EN : R/W; bitpos: [25]; default: 1; - * XTAL 40M Clock Enalbe. + * XTAL 40M Clock Enable. */ #define LP_CLKRST_HP_XTAL_40M_CLK_EN (BIT(25)) #define LP_CLKRST_HP_XTAL_40M_CLK_EN_M (LP_CLKRST_HP_XTAL_40M_CLK_EN_V << LP_CLKRST_HP_XTAL_40M_CLK_EN_S) diff --git a/components/soc/esp32p4/include/soc/lp_clkrst_struct.h b/components/soc/esp32p4/register/soc/lp_clkrst_struct.h similarity index 99% rename from components/soc/esp32p4/include/soc/lp_clkrst_struct.h rename to components/soc/esp32p4/register/soc/lp_clkrst_struct.h index 2e2246001f4b..b21775966a18 100644 --- a/components/soc/esp32p4/include/soc/lp_clkrst_struct.h +++ b/components/soc/esp32p4/register/soc/lp_clkrst_struct.h @@ -611,7 +611,7 @@ typedef union { */ uint32_t hp_fosc_20m_clk_en:1; /** hp_xtal_40m_clk_en : R/W; bitpos: [25]; default: 1; - * XTAL 40M Clock Enalbe. + * XTAL 40M Clock Enable. */ uint32_t hp_xtal_40m_clk_en:1; /** hp_cpll_400m_clk_en : R/W; bitpos: [26]; default: 1; diff --git a/components/soc/esp32p4/include/soc/lp_gpio_reg.h b/components/soc/esp32p4/register/soc/lp_gpio_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/lp_gpio_reg.h rename to components/soc/esp32p4/register/soc/lp_gpio_reg.h diff --git a/components/soc/esp32p4/include/soc/lp_gpio_struct.h b/components/soc/esp32p4/register/soc/lp_gpio_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/lp_gpio_struct.h rename to components/soc/esp32p4/register/soc/lp_gpio_struct.h diff --git a/components/soc/esp32p4/include/soc/lp_i2c_reg.h b/components/soc/esp32p4/register/soc/lp_i2c_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/lp_i2c_reg.h rename to components/soc/esp32p4/register/soc/lp_i2c_reg.h diff --git a/components/soc/esp32p4/include/soc/lp_i2c_struct.h b/components/soc/esp32p4/register/soc/lp_i2c_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/lp_i2c_struct.h rename to components/soc/esp32p4/register/soc/lp_i2c_struct.h diff --git a/components/soc/esp32p4/include/soc/lp_i2s_reg.h b/components/soc/esp32p4/register/soc/lp_i2s_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/lp_i2s_reg.h rename to components/soc/esp32p4/register/soc/lp_i2s_reg.h diff --git a/components/soc/esp32p4/include/soc/lp_i2s_struct.h b/components/soc/esp32p4/register/soc/lp_i2s_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/lp_i2s_struct.h rename to components/soc/esp32p4/register/soc/lp_i2s_struct.h diff --git a/components/soc/esp32p4/include/soc/lp_intr_reg.h b/components/soc/esp32p4/register/soc/lp_intr_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/lp_intr_reg.h rename to components/soc/esp32p4/register/soc/lp_intr_reg.h diff --git a/components/soc/esp32p4/include/soc/lp_intr_struct.h b/components/soc/esp32p4/register/soc/lp_intr_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/lp_intr_struct.h rename to components/soc/esp32p4/register/soc/lp_intr_struct.h diff --git a/components/soc/esp32p4/include/soc/lp_iomux_reg.h b/components/soc/esp32p4/register/soc/lp_iomux_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/lp_iomux_reg.h rename to components/soc/esp32p4/register/soc/lp_iomux_reg.h diff --git a/components/soc/esp32p4/include/soc/lp_iomux_struct.h b/components/soc/esp32p4/register/soc/lp_iomux_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/lp_iomux_struct.h rename to components/soc/esp32p4/register/soc/lp_iomux_struct.h diff --git a/components/soc/esp32p4/include/soc/lp_mailbox_reg.h b/components/soc/esp32p4/register/soc/lp_mailbox_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/lp_mailbox_reg.h rename to components/soc/esp32p4/register/soc/lp_mailbox_reg.h diff --git a/components/soc/esp32p4/include/soc/lp_mailbox_struct.h b/components/soc/esp32p4/register/soc/lp_mailbox_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/lp_mailbox_struct.h rename to components/soc/esp32p4/register/soc/lp_mailbox_struct.h diff --git a/components/soc/esp32p4/include/soc/lp_peri_pms_reg.h b/components/soc/esp32p4/register/soc/lp_peri_pms_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/lp_peri_pms_reg.h rename to components/soc/esp32p4/register/soc/lp_peri_pms_reg.h diff --git a/components/soc/esp32p4/include/soc/lp_peri_pms_struct.h b/components/soc/esp32p4/register/soc/lp_peri_pms_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/lp_peri_pms_struct.h rename to components/soc/esp32p4/register/soc/lp_peri_pms_struct.h diff --git a/components/soc/esp32p4/include/soc/lp_spi_reg.h b/components/soc/esp32p4/register/soc/lp_spi_reg.h similarity index 99% rename from components/soc/esp32p4/include/soc/lp_spi_reg.h rename to components/soc/esp32p4/register/soc/lp_spi_reg.h index c00998b2b82f..5892adfe42cf 100644 --- a/components/soc/esp32p4/include/soc/lp_spi_reg.h +++ b/components/soc/esp32p4/register/soc/lp_spi_reg.h @@ -126,7 +126,7 @@ extern "C" { #define LP_REG_CLKDIV_PRE_V 0x0000000FU #define LP_REG_CLKDIV_PRE_S 18 /** LP_REG_CLK_EQU_SYSCLK : R/W; bitpos: [31]; default: 1; - * In the master mode 1: spi_clk is eqaul to system 0: spi_clk is divided from system + * In the master mode 1: spi_clk is equal to system 0: spi_clk is divided from system * clock. Can be configured in CONF state. */ #define LP_REG_CLK_EQU_SYSCLK (BIT(31)) @@ -1208,7 +1208,7 @@ extern "C" { /** LP_REG_CLK_MODE : R/W; bitpos: [1:0]; default: 0; * SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delayed * one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3: - * SPI clock is alwasy on. Can be configured in CONF state. + * SPI clock is always on. Can be configured in CONF state. */ #define LP_REG_CLK_MODE 0x00000003U #define LP_REG_CLK_MODE_M (LP_REG_CLK_MODE_V << LP_REG_CLK_MODE_S) diff --git a/components/soc/esp32p4/include/soc/lp_spi_struct.h b/components/soc/esp32p4/register/soc/lp_spi_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/lp_spi_struct.h rename to components/soc/esp32p4/register/soc/lp_spi_struct.h diff --git a/components/soc/esp32p4/include/soc/lp_system_reg.h b/components/soc/esp32p4/register/soc/lp_system_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/lp_system_reg.h rename to components/soc/esp32p4/register/soc/lp_system_reg.h diff --git a/components/soc/esp32p4/include/soc/lp_system_struct.h b/components/soc/esp32p4/register/soc/lp_system_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/lp_system_struct.h rename to components/soc/esp32p4/register/soc/lp_system_struct.h diff --git a/components/soc/esp32p4/include/soc/lp_timer_reg.h b/components/soc/esp32p4/register/soc/lp_timer_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/lp_timer_reg.h rename to components/soc/esp32p4/register/soc/lp_timer_reg.h diff --git a/components/soc/esp32p4/include/soc/lp_timer_struct.h b/components/soc/esp32p4/register/soc/lp_timer_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/lp_timer_struct.h rename to components/soc/esp32p4/register/soc/lp_timer_struct.h diff --git a/components/soc/esp32p4/include/soc/lp_uart_reg.h b/components/soc/esp32p4/register/soc/lp_uart_reg.h similarity index 99% rename from components/soc/esp32p4/include/soc/lp_uart_reg.h rename to components/soc/esp32p4/register/soc/lp_uart_reg.h index 0a5ba491f401..d488866f781e 100644 --- a/components/soc/esp32p4/include/soc/lp_uart_reg.h +++ b/components/soc/esp32p4/register/soc/lp_uart_reg.h @@ -100,7 +100,7 @@ extern "C" { #define LP_UART_RXFIFO_TOUT_INT_RAW_V 0x00000001U #define LP_UART_RXFIFO_TOUT_INT_RAW_S 8 /** LP_UART_SW_XON_INT_RAW : R/WTC/SS; bitpos: [9]; default: 0; - * This interrupt raw bit turns to high level when receiver recevies Xon char when + * This interrupt raw bit turns to high level when receiver receives Xon char when * uart_sw_flow_con_en is set to 1. */ #define LP_UART_SW_XON_INT_RAW (BIT(9)) @@ -261,7 +261,7 @@ extern "C" { #define LP_UART_TX_BRK_DONE_INT_ST_V 0x00000001U #define LP_UART_TX_BRK_DONE_INT_ST_S 12 /** LP_UART_TX_BRK_IDLE_DONE_INT_ST : RO; bitpos: [13]; default: 0; - * This is the stauts bit for tx_brk_idle_done_int_raw when tx_brk_idle_done_int_ena + * This is the status bit for tx_brk_idle_done_int_raw when tx_brk_idle_done_int_ena * is set to 1. */ #define LP_UART_TX_BRK_IDLE_DONE_INT_ST (BIT(13)) @@ -671,7 +671,7 @@ extern "C" { #define LP_UART_STOP_BIT_NUM_V 0x00000003U #define LP_UART_STOP_BIT_NUM_S 4 /** LP_UART_TXD_BRK : R/W; bitpos: [6]; default: 0; - * Set this bit to enbale transmitter to send NULL when the process of sending data + * Set this bit to enable transmitter to send NULL when the process of sending data * is done. */ #define LP_UART_TXD_BRK (BIT(6)) @@ -1151,7 +1151,7 @@ extern "C" { */ #define LP_UART_TOUT_CONF_SYNC_REG (DR_REG_LP_UART_BASE + 0x64) /** LP_UART_RX_TOUT_EN : R/W; bitpos: [0]; default: 0; - * This is the enble bit for uart receiver's timeout function. + * This is the enable bit for uart receiver's timeout function. */ #define LP_UART_RX_TOUT_EN (BIT(0)) #define LP_UART_RX_TOUT_EN_M (LP_UART_RX_TOUT_EN_V << LP_UART_RX_TOUT_EN_S) diff --git a/components/soc/esp32p4/include/soc/lp_uart_struct.h b/components/soc/esp32p4/register/soc/lp_uart_struct.h similarity index 99% rename from components/soc/esp32p4/include/soc/lp_uart_struct.h rename to components/soc/esp32p4/register/soc/lp_uart_struct.h index 5bd4d605c0bc..d86d6a0d91d0 100644 --- a/components/soc/esp32p4/include/soc/lp_uart_struct.h +++ b/components/soc/esp32p4/register/soc/lp_uart_struct.h @@ -50,7 +50,7 @@ typedef union { typedef union { struct { /** rx_tout_en : R/W; bitpos: [0]; default: 0; - * This is the enble bit for uart receiver's timeout function. + * This is the enable bit for uart receiver's timeout function. */ uint32_t rx_tout_en:1; /** rx_tout_flow_dis : R/W; bitpos: [1]; default: 0; @@ -121,7 +121,7 @@ typedef union { */ uint32_t rxfifo_tout_int_raw:1; /** sw_xon_int_raw : R/WTC/SS; bitpos: [9]; default: 0; - * This interrupt raw bit turns to high level when receiver recevies Xon char when + * This interrupt raw bit turns to high level when receiver receives Xon char when * uart_sw_flow_con_en is set to 1. */ uint32_t sw_xon_int_raw:1; @@ -225,7 +225,7 @@ typedef union { */ uint32_t tx_brk_done_int_st:1; /** tx_brk_idle_done_int_st : RO; bitpos: [13]; default: 0; - * This is the stauts bit for tx_brk_idle_done_int_raw when tx_brk_idle_done_int_ena + * This is the status bit for tx_brk_idle_done_int_raw when tx_brk_idle_done_int_ena * is set to 1. */ uint32_t tx_brk_idle_done_int_st:1; @@ -467,7 +467,7 @@ typedef union { */ uint32_t stop_bit_num:2; /** txd_brk : R/W; bitpos: [6]; default: 0; - * Set this bit to enbale transmitter to send NULL when the process of sending data + * Set this bit to enable transmitter to send NULL when the process of sending data * is done. */ uint32_t txd_brk:1; diff --git a/components/soc/esp32p4/include/soc/lp_wdt_reg.h b/components/soc/esp32p4/register/soc/lp_wdt_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/lp_wdt_reg.h rename to components/soc/esp32p4/register/soc/lp_wdt_reg.h diff --git a/components/soc/esp32p4/include/soc/lp_wdt_struct.h b/components/soc/esp32p4/register/soc/lp_wdt_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/lp_wdt_struct.h rename to components/soc/esp32p4/register/soc/lp_wdt_struct.h diff --git a/components/soc/esp32p4/include/soc/lpperi_reg.h b/components/soc/esp32p4/register/soc/lpperi_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/lpperi_reg.h rename to components/soc/esp32p4/register/soc/lpperi_reg.h diff --git a/components/soc/esp32p4/include/soc/lpperi_struct.h b/components/soc/esp32p4/register/soc/lpperi_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/lpperi_struct.h rename to components/soc/esp32p4/register/soc/lpperi_struct.h diff --git a/components/soc/esp32p4/include/soc/mcpwm_reg.h b/components/soc/esp32p4/register/soc/mcpwm_reg.h similarity index 99% rename from components/soc/esp32p4/include/soc/mcpwm_reg.h rename to components/soc/esp32p4/register/soc/mcpwm_reg.h index e526c38e6052..8534b7f33457 100644 --- a/components/soc/esp32p4/include/soc/mcpwm_reg.h +++ b/components/soc/esp32p4/register/soc/mcpwm_reg.h @@ -2764,7 +2764,7 @@ extern "C" { #define MCPWM_CAP0_MODE_V 0x00000003U #define MCPWM_CAP0_MODE_S 1 /** MCPWM_CAP0_PRESCALE : R/W; bitpos: [10:3]; default: 0; - * Configures prescale value on possitive edge of CAP0. Prescale value = + * Configures prescale value on positive edge of CAP0. Prescale value = * PWM_CAP0_PRESCALE + 1 */ #define MCPWM_CAP0_PRESCALE 0x000000FFU @@ -2809,7 +2809,7 @@ extern "C" { #define MCPWM_CAP0_MODE_V 0x00000003U #define MCPWM_CAP0_MODE_S 1 /** MCPWM_CAP0_PRESCALE : R/W; bitpos: [10:3]; default: 0; - * Configures prescale value on possitive edge of CAP1. Prescale value = + * Configures prescale value on positive edge of CAP1. Prescale value = * PWM_CAP1_PRESCALE + 1 */ #define MCPWM_CAP0_PRESCALE 0x000000FFU @@ -2854,7 +2854,7 @@ extern "C" { #define MCPWM_CAP0_MODE_V 0x00000003U #define MCPWM_CAP0_MODE_S 1 /** MCPWM_CAP0_PRESCALE : R/W; bitpos: [10:3]; default: 0; - * Configures prescale value on possitive edge of CAP2. Prescale value = + * Configures prescale value on positive edge of CAP2. Prescale value = * PWM_CAP2_PRESCALE + 1 */ #define MCPWM_CAP0_PRESCALE 0x000000FFU diff --git a/components/soc/esp32p4/include/soc/mcpwm_struct.h b/components/soc/esp32p4/register/soc/mcpwm_struct.h similarity index 99% rename from components/soc/esp32p4/include/soc/mcpwm_struct.h rename to components/soc/esp32p4/register/soc/mcpwm_struct.h index 2b72d044e1a5..71a4864a9c38 100644 --- a/components/soc/esp32p4/include/soc/mcpwm_struct.h +++ b/components/soc/esp32p4/register/soc/mcpwm_struct.h @@ -780,7 +780,7 @@ typedef union { */ uint32_t capn_mode:2; /** capn_prescale : R/W; bitpos: [10:3]; default: 0; - * Configures prescale value on possitive edge of CAPn. Prescale value = + * Configures prescale value on positive edge of CAPn. Prescale value = * PWM_CAPn_PRESCALE + 1 */ uint32_t capn_prescale:8; diff --git a/components/soc/esp32p4/include/soc/mipi_csi_bridge_reg.h b/components/soc/esp32p4/register/soc/mipi_csi_bridge_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/mipi_csi_bridge_reg.h rename to components/soc/esp32p4/register/soc/mipi_csi_bridge_reg.h diff --git a/components/soc/esp32p4/include/soc/mipi_csi_bridge_struct.h b/components/soc/esp32p4/register/soc/mipi_csi_bridge_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/mipi_csi_bridge_struct.h rename to components/soc/esp32p4/register/soc/mipi_csi_bridge_struct.h diff --git a/components/soc/esp32p4/include/soc/mipi_csi_host_reg.h b/components/soc/esp32p4/register/soc/mipi_csi_host_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/mipi_csi_host_reg.h rename to components/soc/esp32p4/register/soc/mipi_csi_host_reg.h diff --git a/components/soc/esp32p4/include/soc/mipi_csi_host_struct.h b/components/soc/esp32p4/register/soc/mipi_csi_host_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/mipi_csi_host_struct.h rename to components/soc/esp32p4/register/soc/mipi_csi_host_struct.h diff --git a/components/soc/esp32p4/include/soc/mipi_dsi_bridge_reg.h b/components/soc/esp32p4/register/soc/mipi_dsi_bridge_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/mipi_dsi_bridge_reg.h rename to components/soc/esp32p4/register/soc/mipi_dsi_bridge_reg.h diff --git a/components/soc/esp32p4/include/soc/mipi_dsi_bridge_struct.h b/components/soc/esp32p4/register/soc/mipi_dsi_bridge_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/mipi_dsi_bridge_struct.h rename to components/soc/esp32p4/register/soc/mipi_dsi_bridge_struct.h diff --git a/components/soc/esp32p4/include/soc/mipi_dsi_host_reg.h b/components/soc/esp32p4/register/soc/mipi_dsi_host_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/mipi_dsi_host_reg.h rename to components/soc/esp32p4/register/soc/mipi_dsi_host_reg.h diff --git a/components/soc/esp32p4/include/soc/mipi_dsi_host_struct.h b/components/soc/esp32p4/register/soc/mipi_dsi_host_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/mipi_dsi_host_struct.h rename to components/soc/esp32p4/register/soc/mipi_dsi_host_struct.h diff --git a/components/soc/esp32p4/include/soc/parl_io_reg.h b/components/soc/esp32p4/register/soc/parl_io_reg.h similarity index 98% rename from components/soc/esp32p4/include/soc/parl_io_reg.h rename to components/soc/esp32p4/register/soc/parl_io_reg.h index 74a528017d98..812470334d86 100644 --- a/components/soc/esp32p4/include/soc/parl_io_reg.h +++ b/components/soc/esp32p4/register/soc/parl_io_reg.h @@ -260,7 +260,7 @@ extern "C" { #define PARL_IO_TX_READY_S 31 /** PARL_IO_INT_ENA_REG register - * Parallel IO interrupt enable singal configuration register. + * Parallel IO interrupt enable signal configuration register. */ #define PARL_IO_INT_ENA_REG (DR_REG_PARL_IO_BASE + 0x28) /** PARL_IO_TX_FIFO_REMPTY_INT_ENA : R/W; bitpos: [0]; default: 0; @@ -286,7 +286,7 @@ extern "C" { #define PARL_IO_TX_EOF_INT_ENA_S 2 /** PARL_IO_INT_RAW_REG register - * Parallel IO interrupt raw singal status register. + * Parallel IO interrupt raw signal status register. */ #define PARL_IO_INT_RAW_REG (DR_REG_PARL_IO_BASE + 0x2c) /** PARL_IO_TX_FIFO_REMPTY_INT_RAW : R/WTC/SS; bitpos: [0]; default: 0; @@ -312,7 +312,7 @@ extern "C" { #define PARL_IO_TX_EOF_INT_RAW_S 2 /** PARL_IO_INT_ST_REG register - * Parallel IO interrupt singal status register. + * Parallel IO interrupt signal status register. */ #define PARL_IO_INT_ST_REG (DR_REG_PARL_IO_BASE + 0x30) /** PARL_IO_TX_FIFO_REMPTY_INT_ST : RO; bitpos: [0]; default: 0; @@ -338,7 +338,7 @@ extern "C" { #define PARL_IO_TX_EOF_INT_ST_S 2 /** PARL_IO_INT_CLR_REG register - * Parallel IO interrupt clear singal configuration register. + * Parallel IO interrupt clear signal configuration register. */ #define PARL_IO_INT_CLR_REG (DR_REG_PARL_IO_BASE + 0x34) /** PARL_IO_TX_FIFO_REMPTY_INT_CLR : WT; bitpos: [0]; default: 0; diff --git a/components/soc/esp32p4/include/soc/parl_io_struct.h b/components/soc/esp32p4/register/soc/parl_io_struct.h similarity index 98% rename from components/soc/esp32p4/include/soc/parl_io_struct.h rename to components/soc/esp32p4/register/soc/parl_io_struct.h index aea2cb383b8c..7304e7be2c58 100644 --- a/components/soc/esp32p4/include/soc/parl_io_struct.h +++ b/components/soc/esp32p4/register/soc/parl_io_struct.h @@ -256,7 +256,7 @@ typedef union { /** Group: PARL_IO Interrupt Configuration and Status */ /** Type of int_ena register - * Parallel IO interrupt enable singal configuration register. + * Parallel IO interrupt enable signal configuration register. */ typedef union { struct { @@ -278,7 +278,7 @@ typedef union { } parl_io_int_ena_reg_t; /** Type of int_raw register - * Parallel IO interrupt raw singal status register. + * Parallel IO interrupt raw signal status register. */ typedef union { struct { @@ -300,7 +300,7 @@ typedef union { } parl_io_int_raw_reg_t; /** Type of int_st register - * Parallel IO interrupt singal status register. + * Parallel IO interrupt signal status register. */ typedef union { struct { @@ -322,7 +322,7 @@ typedef union { } parl_io_int_st_reg_t; /** Type of int_clr register - * Parallel IO interrupt clear singal configuration register. + * Parallel IO interrupt clear signal configuration register. */ typedef union { struct { diff --git a/components/soc/esp32p4/include/soc/pau_reg.h b/components/soc/esp32p4/register/soc/pau_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/pau_reg.h rename to components/soc/esp32p4/register/soc/pau_reg.h diff --git a/components/soc/esp32p4/include/soc/pau_struct.h b/components/soc/esp32p4/register/soc/pau_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/pau_struct.h rename to components/soc/esp32p4/register/soc/pau_struct.h diff --git a/components/soc/esp32p4/include/soc/pcnt_reg.h b/components/soc/esp32p4/register/soc/pcnt_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/pcnt_reg.h rename to components/soc/esp32p4/register/soc/pcnt_reg.h diff --git a/components/soc/esp32p4/include/soc/pcnt_struct.h b/components/soc/esp32p4/register/soc/pcnt_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/pcnt_struct.h rename to components/soc/esp32p4/register/soc/pcnt_struct.h diff --git a/components/soc/esp32p4/include/soc/pmu_reg.h b/components/soc/esp32p4/register/soc/pmu_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/pmu_reg.h rename to components/soc/esp32p4/register/soc/pmu_reg.h diff --git a/components/soc/esp32p4/include/soc/pmu_struct.h b/components/soc/esp32p4/register/soc/pmu_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/pmu_struct.h rename to components/soc/esp32p4/register/soc/pmu_struct.h diff --git a/components/soc/esp32p4/include/soc/ppa_reg.h b/components/soc/esp32p4/register/soc/ppa_reg.h similarity index 99% rename from components/soc/esp32p4/include/soc/ppa_reg.h rename to components/soc/esp32p4/register/soc/ppa_reg.h index 2b17794d771c..a7a64aa44fba 100644 --- a/components/soc/esp32p4/include/soc/ppa_reg.h +++ b/components/soc/esp32p4/register/soc/ppa_reg.h @@ -645,21 +645,21 @@ extern "C" { */ #define PPA_CK_DEFAULT_REG (DR_REG_PPA_BASE + 0x60) /** PPA_COLORKEY_DEFAULT_B : R/W; bitpos: [7:0]; default: 0; - * default B channle value of color key + * default B channel value of color key */ #define PPA_COLORKEY_DEFAULT_B 0x000000FFU #define PPA_COLORKEY_DEFAULT_B_M (PPA_COLORKEY_DEFAULT_B_V << PPA_COLORKEY_DEFAULT_B_S) #define PPA_COLORKEY_DEFAULT_B_V 0x000000FFU #define PPA_COLORKEY_DEFAULT_B_S 0 /** PPA_COLORKEY_DEFAULT_G : R/W; bitpos: [15:8]; default: 0; - * default G channle value of color key + * default G channel value of color key */ #define PPA_COLORKEY_DEFAULT_G 0x000000FFU #define PPA_COLORKEY_DEFAULT_G_M (PPA_COLORKEY_DEFAULT_G_V << PPA_COLORKEY_DEFAULT_G_S) #define PPA_COLORKEY_DEFAULT_G_V 0x000000FFU #define PPA_COLORKEY_DEFAULT_G_S 8 /** PPA_COLORKEY_DEFAULT_R : R/W; bitpos: [23:16]; default: 0; - * default R channle value of color key + * default R channel value of color key */ #define PPA_COLORKEY_DEFAULT_R 0x000000FFU #define PPA_COLORKEY_DEFAULT_R_M (PPA_COLORKEY_DEFAULT_R_V << PPA_COLORKEY_DEFAULT_R_S) diff --git a/components/soc/esp32p4/include/soc/ppa_struct.h b/components/soc/esp32p4/register/soc/ppa_struct.h similarity index 99% rename from components/soc/esp32p4/include/soc/ppa_struct.h rename to components/soc/esp32p4/register/soc/ppa_struct.h index 5aa064b90144..abcc3dc0a7dd 100644 --- a/components/soc/esp32p4/include/soc/ppa_struct.h +++ b/components/soc/esp32p4/register/soc/ppa_struct.h @@ -446,15 +446,15 @@ typedef union { typedef union { struct { /** colorkey_default_b : R/W; bitpos: [7:0]; default: 0; - * default B channle value of color key + * default B channel value of color key */ uint32_t colorkey_default_b:8; /** colorkey_default_g : R/W; bitpos: [15:8]; default: 0; - * default G channle value of color key + * default G channel value of color key */ uint32_t colorkey_default_g:8; /** colorkey_default_r : R/W; bitpos: [23:16]; default: 0; - * default R channle value of color key + * default R channel value of color key */ uint32_t colorkey_default_r:8; /** colorkey_fg_bg_reverse : R/W; bitpos: [24]; default: 0; diff --git a/components/soc/esp32p4/include/soc/pvt_reg.h b/components/soc/esp32p4/register/soc/pvt_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/pvt_reg.h rename to components/soc/esp32p4/register/soc/pvt_reg.h diff --git a/components/soc/esp32p4/include/soc/pvt_struct.h b/components/soc/esp32p4/register/soc/pvt_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/pvt_struct.h rename to components/soc/esp32p4/register/soc/pvt_struct.h diff --git a/components/soc/esp32p4/include/soc/reg_base.h b/components/soc/esp32p4/register/soc/reg_base.h similarity index 100% rename from components/soc/esp32p4/include/soc/reg_base.h rename to components/soc/esp32p4/register/soc/reg_base.h diff --git a/components/soc/esp32p4/include/soc/rmt_reg.h b/components/soc/esp32p4/register/soc/rmt_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/rmt_reg.h rename to components/soc/esp32p4/register/soc/rmt_reg.h diff --git a/components/soc/esp32p4/include/soc/rmt_struct.h b/components/soc/esp32p4/register/soc/rmt_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/rmt_struct.h rename to components/soc/esp32p4/register/soc/rmt_struct.h diff --git a/components/soc/esp32p4/include/soc/rsa_reg.h b/components/soc/esp32p4/register/soc/rsa_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/rsa_reg.h rename to components/soc/esp32p4/register/soc/rsa_reg.h diff --git a/components/soc/esp32p4/include/soc/rsa_struct.h b/components/soc/esp32p4/register/soc/rsa_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/rsa_struct.h rename to components/soc/esp32p4/register/soc/rsa_struct.h diff --git a/components/soc/esp32p4/include/soc/rtclockcali_reg.h b/components/soc/esp32p4/register/soc/rtclockcali_reg.h similarity index 98% rename from components/soc/esp32p4/include/soc/rtclockcali_reg.h rename to components/soc/esp32p4/register/soc/rtclockcali_reg.h index 329ef154c4d2..d9794fe943b6 100644 --- a/components/soc/esp32p4/include/soc/rtclockcali_reg.h +++ b/components/soc/esp32p4/register/soc/rtclockcali_reg.h @@ -267,21 +267,21 @@ extern "C" { #define RTCLOCKCALI_DREQ_UPDATE_V 0x00000001U #define RTCLOCKCALI_DREQ_UPDATE_S 0 /** RTCLOCKCALI_DREQ_INIT_32K : WT; bitpos: [2]; default: 0; - * Initialize the vaule of 32K OSC dfreq setting. + * Initialize the value of 32K OSC dfreq setting. */ #define RTCLOCKCALI_DREQ_INIT_32K (BIT(2)) #define RTCLOCKCALI_DREQ_INIT_32K_M (RTCLOCKCALI_DREQ_INIT_32K_V << RTCLOCKCALI_DREQ_INIT_32K_S) #define RTCLOCKCALI_DREQ_INIT_32K_V 0x00000001U #define RTCLOCKCALI_DREQ_INIT_32K_S 2 /** RTCLOCKCALI_DREQ_INIT_FOSC : WT; bitpos: [3]; default: 0; - * Initialize the vaule of FOSC dfreq setting. + * Initialize the value of FOSC dfreq setting. */ #define RTCLOCKCALI_DREQ_INIT_FOSC (BIT(3)) #define RTCLOCKCALI_DREQ_INIT_FOSC_M (RTCLOCKCALI_DREQ_INIT_FOSC_V << RTCLOCKCALI_DREQ_INIT_FOSC_S) #define RTCLOCKCALI_DREQ_INIT_FOSC_V 0x00000001U #define RTCLOCKCALI_DREQ_INIT_FOSC_S 3 /** RTCLOCKCALI_DREQ_INIT_SOSC : WT; bitpos: [4]; default: 0; - * Initialize the vaule of SOSC dfreq setting. + * Initialize the value of SOSC dfreq setting. */ #define RTCLOCKCALI_DREQ_INIT_SOSC (BIT(4)) #define RTCLOCKCALI_DREQ_INIT_SOSC_M (RTCLOCKCALI_DREQ_INIT_SOSC_V << RTCLOCKCALI_DREQ_INIT_SOSC_S) @@ -312,21 +312,21 @@ extern "C" { #define RTCLOCKCALI_SOSC_DFREQ_SEL_V 0x00000001U #define RTCLOCKCALI_SOSC_DFREQ_SEL_S 7 /** RTCLOCKCALI_FINE_STEP : R/W; bitpos: [15:8]; default: 1; - * Frequncy fine step. + * Frequency fine step. */ #define RTCLOCKCALI_FINE_STEP 0x000000FFU #define RTCLOCKCALI_FINE_STEP_M (RTCLOCKCALI_FINE_STEP_V << RTCLOCKCALI_FINE_STEP_S) #define RTCLOCKCALI_FINE_STEP_V 0x000000FFU #define RTCLOCKCALI_FINE_STEP_S 8 /** RTCLOCKCALI_COARSE_STEP_FAST : R/W; bitpos: [23:16]; default: 8; - * Frequncy coarse step,use to decrease calibration time. + * Frequency coarse step,use to decrease calibration time. */ #define RTCLOCKCALI_COARSE_STEP_FAST 0x000000FFU #define RTCLOCKCALI_COARSE_STEP_FAST_M (RTCLOCKCALI_COARSE_STEP_FAST_V << RTCLOCKCALI_COARSE_STEP_FAST_S) #define RTCLOCKCALI_COARSE_STEP_FAST_V 0x000000FFU #define RTCLOCKCALI_COARSE_STEP_FAST_S 16 /** RTCLOCKCALI_COARSE_STEP_SLOW : R/W; bitpos: [31:24]; default: 8; - * Frequncy coarse step,use to decrease calibration time. + * Frequency coarse step,use to decrease calibration time. */ #define RTCLOCKCALI_COARSE_STEP_SLOW 0x000000FFU #define RTCLOCKCALI_COARSE_STEP_SLOW_M (RTCLOCKCALI_COARSE_STEP_SLOW_V << RTCLOCKCALI_COARSE_STEP_SLOW_S) @@ -409,14 +409,14 @@ extern "C" { */ #define RTCLOCKCALI_INT_RAW_REG (DR_REG_RTCLOCKCALI_BASE + 0x38) /** RTCLOCKCALI_XTAL_TIMEOUT_INT_RAW : R/WTC/SS; bitpos: [29]; default: 0; - * Indicate the xtal timeout once happend . + * Indicate the xtal timeout once happened . */ #define RTCLOCKCALI_XTAL_TIMEOUT_INT_RAW (BIT(29)) #define RTCLOCKCALI_XTAL_TIMEOUT_INT_RAW_M (RTCLOCKCALI_XTAL_TIMEOUT_INT_RAW_V << RTCLOCKCALI_XTAL_TIMEOUT_INT_RAW_S) #define RTCLOCKCALI_XTAL_TIMEOUT_INT_RAW_V 0x00000001U #define RTCLOCKCALI_XTAL_TIMEOUT_INT_RAW_S 29 /** RTCLOCKCALI_CALI_TIMEOUT_INT_RAW : R/WTC/SS; bitpos: [30]; default: 0; - * Indicate the calibration timeout once happend . + * Indicate the calibration timeout once happened . */ #define RTCLOCKCALI_CALI_TIMEOUT_INT_RAW (BIT(30)) #define RTCLOCKCALI_CALI_TIMEOUT_INT_RAW_M (RTCLOCKCALI_CALI_TIMEOUT_INT_RAW_V << RTCLOCKCALI_CALI_TIMEOUT_INT_RAW_S) diff --git a/components/soc/esp32p4/include/soc/rtclockcali_struct.h b/components/soc/esp32p4/register/soc/rtclockcali_struct.h similarity index 97% rename from components/soc/esp32p4/include/soc/rtclockcali_struct.h rename to components/soc/esp32p4/register/soc/rtclockcali_struct.h index 358ab21fc80a..3898c7629381 100644 --- a/components/soc/esp32p4/include/soc/rtclockcali_struct.h +++ b/components/soc/esp32p4/register/soc/rtclockcali_struct.h @@ -107,15 +107,15 @@ typedef union { uint32_t dreq_update:1; uint32_t reserved_1:1; /** dreq_init_32k : WT; bitpos: [2]; default: 0; - * Initialize the vaule of 32K OSC dfreq setting. + * Initialize the value of 32K OSC dfreq setting. */ uint32_t dreq_init_32k:1; /** dreq_init_fosc : WT; bitpos: [3]; default: 0; - * Initialize the vaule of FOSC dfreq setting. + * Initialize the value of FOSC dfreq setting. */ uint32_t dreq_init_fosc:1; /** dreq_init_sosc : WT; bitpos: [4]; default: 0; - * Initialize the vaule of SOSC dfreq setting. + * Initialize the value of SOSC dfreq setting. */ uint32_t dreq_init_sosc:1; /** rc32k_dfreq_sel : R/W; bitpos: [5]; default: 0; @@ -134,15 +134,15 @@ typedef union { */ uint32_t sosc_dfreq_sel:1; /** fine_step : R/W; bitpos: [15:8]; default: 1; - * Frequncy fine step. + * Frequency fine step. */ uint32_t fine_step:8; /** coarse_step_fast : R/W; bitpos: [23:16]; default: 8; - * Frequncy coarse step,use to decrease calibration time. + * Frequency coarse step,use to decrease calibration time. */ uint32_t coarse_step_fast:8; /** coarse_step_slow : R/W; bitpos: [31:24]; default: 8; - * Frequncy coarse step,use to decrease calibration time. + * Frequency coarse step,use to decrease calibration time. */ uint32_t coarse_step_slow:8; }; @@ -218,11 +218,11 @@ typedef union { struct { uint32_t reserved_0:29; /** xtal_timeout_int_raw : R/WTC/SS; bitpos: [29]; default: 0; - * Indicate the xtal timeout once happend . + * Indicate the xtal timeout once happened . */ uint32_t xtal_timeout_int_raw:1; /** cali_timeout_int_raw : R/WTC/SS; bitpos: [30]; default: 0; - * Indicate the calibration timeout once happend . + * Indicate the calibration timeout once happened . */ uint32_t cali_timeout_int_raw:1; /** cali_done_int_raw : R/WTC/SS; bitpos: [31]; default: 0; diff --git a/components/soc/esp32p4/include/soc/sdmmc_reg.h b/components/soc/esp32p4/register/soc/sdmmc_reg.h similarity index 99% rename from components/soc/esp32p4/include/soc/sdmmc_reg.h rename to components/soc/esp32p4/register/soc/sdmmc_reg.h index f8ba68d49fef..536a95e4ef9a 100644 --- a/components/soc/esp32p4/include/soc/sdmmc_reg.h +++ b/components/soc/esp32p4/register/soc/sdmmc_reg.h @@ -893,7 +893,7 @@ extern "C" { #define SDHOST_BUS_TYPE_REG_V 0x00000001U #define SDHOST_BUS_TYPE_REG_S 6 /** SDHOST_DATA_WIDTH_REG : RO; bitpos: [9:7]; default: 1; - * Regisger data widht is 32. + * Regisger data width is 32. */ #define SDHOST_DATA_WIDTH_REG 0x00000007U #define SDHOST_DATA_WIDTH_REG_M (SDHOST_DATA_WIDTH_REG_V << SDHOST_DATA_WIDTH_REG_S) @@ -907,7 +907,7 @@ extern "C" { #define SDHOST_ADDR_WIDTH_REG_V 0x0000003FU #define SDHOST_ADDR_WIDTH_REG_S 10 /** SDHOST_DMA_WIDTH_REG : RO; bitpos: [20:18]; default: 1; - * DMA data witdth is 32. + * DMA data width is 32. */ #define SDHOST_DMA_WIDTH_REG 0x00000007U #define SDHOST_DMA_WIDTH_REG_M (SDHOST_DMA_WIDTH_REG_V << SDHOST_DMA_WIDTH_REG_S) @@ -921,7 +921,7 @@ extern "C" { #define SDHOST_RAM_INDISE_REG_V 0x00000001U #define SDHOST_RAM_INDISE_REG_S 21 /** SDHOST_HOLD_REG : RO; bitpos: [22]; default: 1; - * Have a hold regiser in data path . + * Have a hold register in data path . */ #define SDHOST_HOLD_REG (BIT(22)) #define SDHOST_HOLD_REG_M (SDHOST_HOLD_REG_V << SDHOST_HOLD_REG_S) @@ -940,9 +940,9 @@ extern "C" { */ #define SDHOST_UHS_REG (DR_REG_SDHOST_BASE + 0x74) /** SDHOST_DDR_REG : R/W; bitpos: [17:16]; default: 0; - * DDR mode selecton,1 bit for each card. - * 0-Non-DDR mdoe. - * 1-DDR mdoe. + * DDR mode selection,1 bit for each card. + * 0-Non-DDR mode. + * 1-DDR mode. */ #define SDHOST_DDR_REG 0x00000003U #define SDHOST_DDR_REG_M (SDHOST_DDR_REG_V << SDHOST_DDR_REG_S) diff --git a/components/soc/esp32p4/include/soc/sdmmc_struct.h b/components/soc/esp32p4/register/soc/sdmmc_struct.h similarity index 99% rename from components/soc/esp32p4/include/soc/sdmmc_struct.h rename to components/soc/esp32p4/register/soc/sdmmc_struct.h index f9b5a5ed77b1..10318d6c9c72 100644 --- a/components/soc/esp32p4/include/soc/sdmmc_struct.h +++ b/components/soc/esp32p4/register/soc/sdmmc_struct.h @@ -870,7 +870,7 @@ typedef union { */ uint32_t bus_type_reg:1; /** data_width_reg : RO; bitpos: [9:7]; default: 1; - * Regisger data widht is 32. + * Regisger data width is 32. */ uint32_t data_width_reg:3; /** addr_width_reg : RO; bitpos: [15:10]; default: 19; @@ -879,7 +879,7 @@ typedef union { uint32_t addr_width_reg:6; uint32_t reserved_16:2; /** dma_width_reg : RO; bitpos: [20:18]; default: 1; - * DMA data witdth is 32. + * DMA data width is 32. */ uint32_t dma_width_reg:3; /** ram_indise_reg : RO; bitpos: [21]; default: 0; @@ -887,7 +887,7 @@ typedef union { */ uint32_t ram_indise_reg:1; /** hold_reg : RO; bitpos: [22]; default: 1; - * Have a hold regiser in data path . + * Have a hold register in data path . */ uint32_t hold_reg:1; uint32_t reserved_23:1; @@ -909,9 +909,9 @@ typedef union { struct { uint32_t reserved_0:16; /** ddr : R/W; bitpos: [17:16]; default: 0; - * DDR mode selecton,1 bit for each card. - * 0-Non-DDR mdoe. - * 1-DDR mdoe. + * DDR mode selection,1 bit for each card. + * 0-Non-DDR mode. + * 1-DDR mode. */ uint32_t ddr:2; uint32_t reserved_18:14; diff --git a/components/soc/esp32p4/include/soc/sha_reg.h b/components/soc/esp32p4/register/soc/sha_reg.h similarity index 98% rename from components/soc/esp32p4/include/soc/sha_reg.h rename to components/soc/esp32p4/register/soc/sha_reg.h index 888da914b300..40f4d53dfb07 100644 --- a/components/soc/esp32p4/include/soc/sha_reg.h +++ b/components/soc/esp32p4/register/soc/sha_reg.h @@ -156,7 +156,7 @@ extern "C" { #define SHA_DATE_S 0 /** SHA_H_MEM register - * Sha H memory which contains intermediate hash or finial hash. + * Sha H memory which contains intermediate hash or final hash. */ #define SHA_H_MEM (DR_REG_SHA_BASE + 0x40) #define SHA_H_MEM_SIZE_BYTES 64 diff --git a/components/soc/esp32p4/include/soc/sha_struct.h b/components/soc/esp32p4/register/soc/sha_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/sha_struct.h rename to components/soc/esp32p4/register/soc/sha_struct.h diff --git a/components/soc/esp32p4/include/soc/soc_etm_reg.h b/components/soc/esp32p4/register/soc/soc_etm_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/soc_etm_reg.h rename to components/soc/esp32p4/register/soc/soc_etm_reg.h diff --git a/components/soc/esp32p4/include/soc/soc_etm_struct.h b/components/soc/esp32p4/register/soc/soc_etm_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/soc_etm_struct.h rename to components/soc/esp32p4/register/soc/soc_etm_struct.h diff --git a/components/soc/esp32p4/include/soc/spi1_mem_c_reg.h b/components/soc/esp32p4/register/soc/spi1_mem_c_reg.h similarity index 99% rename from components/soc/esp32p4/include/soc/spi1_mem_c_reg.h rename to components/soc/esp32p4/register/soc/spi1_mem_c_reg.h index e3bfc692140c..eab9fa8a7e31 100644 --- a/components/soc/esp32p4/include/soc/spi1_mem_c_reg.h +++ b/components/soc/esp32p4/register/soc/spi1_mem_c_reg.h @@ -321,7 +321,7 @@ extern "C" { /** SPI1_MEM_C_CLK_MODE : R/W; bitpos: [1:0]; default: 0; * SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delayed * one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3: - * SPI clock is alwasy on. + * SPI clock is always on. */ #define SPI1_MEM_C_CLK_MODE 0x00000003U #define SPI1_MEM_C_CLK_MODE_M (SPI1_MEM_C_CLK_MODE_V << SPI1_MEM_C_CLK_MODE_S) @@ -1268,7 +1268,7 @@ extern "C" { #define SPI1_MEM_C_MST_ST_END_INT_RAW_S 4 /** SPI1_MEM_C_BROWN_OUT_INT_RAW : R/WTC/SS; bitpos: [10]; default: 0; * The raw bit for SPI1_MEM_C_BROWN_OUT_INT interrupt. 1: Triggered condition is that - * chip is loosing power and RTC module sends out brown out close flash request to + * chip is losing power and RTC module sends out brown out close flash request to * SPI1. After SPI1 sends out suspend command to flash, this interrupt is triggered * and MSPI returns to idle state. 0: Others. */ diff --git a/components/soc/esp32p4/include/soc/spi1_mem_c_struct.h b/components/soc/esp32p4/register/soc/spi1_mem_c_struct.h similarity index 99% rename from components/soc/esp32p4/include/soc/spi1_mem_c_struct.h rename to components/soc/esp32p4/register/soc/spi1_mem_c_struct.h index b78578c0825a..6b08445b576d 100644 --- a/components/soc/esp32p4/include/soc/spi1_mem_c_struct.h +++ b/components/soc/esp32p4/register/soc/spi1_mem_c_struct.h @@ -334,7 +334,7 @@ typedef union { /** clk_mode : R/W; bitpos: [1:0]; default: 0; * SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delayed * one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3: - * SPI clock is alwasy on. + * SPI clock is always on. */ uint32_t clk_mode:2; /** cs_hold_dly_res : R/W; bitpos: [11:2]; default: 1023; @@ -912,7 +912,7 @@ typedef union { uint32_t reserved_5:5; /** brown_out_int_raw : R/WTC/SS; bitpos: [10]; default: 0; * The raw bit for SPI1_MEM_C_BROWN_OUT_INT interrupt. 1: Triggered condition is that - * chip is loosing power and RTC module sends out brown out close flash request to + * chip is losing power and RTC module sends out brown out close flash request to * SPI1. After SPI1 sends out suspend command to flash, this interrupt is triggered * and MSPI returns to idle state. 0: Others. */ diff --git a/components/soc/esp32p4/include/soc/spi1_mem_s_reg.h b/components/soc/esp32p4/register/soc/spi1_mem_s_reg.h similarity index 99% rename from components/soc/esp32p4/include/soc/spi1_mem_s_reg.h rename to components/soc/esp32p4/register/soc/spi1_mem_s_reg.h index 8aa91923ec71..9bc4517be9ab 100644 --- a/components/soc/esp32p4/include/soc/spi1_mem_s_reg.h +++ b/components/soc/esp32p4/register/soc/spi1_mem_s_reg.h @@ -321,7 +321,7 @@ extern "C" { /** SPI1_MEM_S_CLK_MODE : R/W; bitpos: [1:0]; default: 0; * SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delayed * one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3: - * SPI clock is alwasy on. + * SPI clock is always on. */ #define SPI1_MEM_S_CLK_MODE 0x00000003U #define SPI1_MEM_S_CLK_MODE_M (SPI1_MEM_S_CLK_MODE_V << SPI1_MEM_S_CLK_MODE_S) @@ -1268,7 +1268,7 @@ extern "C" { #define SPI1_MEM_S_MST_ST_END_INT_RAW_S 4 /** SPI1_MEM_S_BROWN_OUT_INT_RAW : R/WTC/SS; bitpos: [10]; default: 0; * The raw bit for SPI1_MEM_S_BROWN_OUT_INT interrupt. 1: Triggered condition is that - * chip is loosing power and RTC module sends out brown out close flash request to + * chip is losing power and RTC module sends out brown out close flash request to * SPI1. After SPI1 sends out suspend command to flash, this interrupt is triggered * and MSPI returns to idle state. 0: Others. */ diff --git a/components/soc/esp32p4/include/soc/spi1_mem_s_struct.h b/components/soc/esp32p4/register/soc/spi1_mem_s_struct.h similarity index 99% rename from components/soc/esp32p4/include/soc/spi1_mem_s_struct.h rename to components/soc/esp32p4/register/soc/spi1_mem_s_struct.h index c2bb46eb9d2d..5cbe96076bab 100644 --- a/components/soc/esp32p4/include/soc/spi1_mem_s_struct.h +++ b/components/soc/esp32p4/register/soc/spi1_mem_s_struct.h @@ -334,7 +334,7 @@ typedef union { /** clk_mode : R/W; bitpos: [1:0]; default: 0; * SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delayed * one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3: - * SPI clock is alwasy on. + * SPI clock is always on. */ uint32_t clk_mode:2; /** cs_hold_dly_res : R/W; bitpos: [11:2]; default: 1023; @@ -1123,7 +1123,7 @@ typedef union { uint32_t reserved_5:5; /** brown_out_int_raw : R/WTC/SS; bitpos: [10]; default: 0; * The raw bit for SPI1_MEM_S_BROWN_OUT_INT interrupt. 1: Triggered condition is that - * chip is loosing power and RTC module sends out brown out close flash request to + * chip is losing power and RTC module sends out brown out close flash request to * SPI1. After SPI1 sends out suspend command to flash, this interrupt is triggered * and MSPI returns to idle state. 0: Others. */ diff --git a/components/soc/esp32p4/include/soc/spi_mem_c_reg.h b/components/soc/esp32p4/register/soc/spi_mem_c_reg.h similarity index 99% rename from components/soc/esp32p4/include/soc/spi_mem_c_reg.h rename to components/soc/esp32p4/register/soc/spi_mem_c_reg.h index 89ff7ae94899..4b5c8c54e52f 100644 --- a/components/soc/esp32p4/include/soc/spi_mem_c_reg.h +++ b/components/soc/esp32p4/register/soc/spi_mem_c_reg.h @@ -199,7 +199,7 @@ extern "C" { /** SPI_MEM_C_CLK_MODE : R/W; bitpos: [1:0]; default: 0; * SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delayed * one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3: - * SPI clock is alwasy on. + * SPI clock is always on. */ #define SPI_MEM_C_CLK_MODE 0x00000003U #define SPI_MEM_C_CLK_MODE_M (SPI_MEM_C_CLK_MODE_V << SPI_MEM_C_CLK_MODE_S) @@ -2694,7 +2694,7 @@ extern "C" { */ #define SPI_MEM_C_DPA_CTRL_REG (DR_REG_FLASH_SPI0_BASE + 0x388) /** SPI_MEM_C_CRYPT_SECURITY_LEVEL : R/W; bitpos: [2:0]; default: 7; - * Set the security level of spi mem cryption. 0: Shut off cryption DPA funtion. 1-7: + * Set the security level of spi mem cryption. 0: Shut off cryption DPA function. 1-7: * The bigger the number is, the more secure the cryption is. (Note that the * performance of cryption will decrease together with this number increasing) */ diff --git a/components/soc/esp32p4/include/soc/spi_mem_c_struct.h b/components/soc/esp32p4/register/soc/spi_mem_c_struct.h similarity index 99% rename from components/soc/esp32p4/include/soc/spi_mem_c_struct.h rename to components/soc/esp32p4/register/soc/spi_mem_c_struct.h index c694be7e0a31..61abcf05911f 100644 --- a/components/soc/esp32p4/include/soc/spi_mem_c_struct.h +++ b/components/soc/esp32p4/register/soc/spi_mem_c_struct.h @@ -167,7 +167,7 @@ typedef union { /** clk_mode : R/W; bitpos: [1:0]; default: 0; * SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delayed * one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3: - * SPI clock is alwasy on. + * SPI clock is always on. */ uint32_t clk_mode:2; uint32_t reserved_2:19; @@ -1908,7 +1908,7 @@ typedef union { typedef union { struct { /** crypt_security_level : R/W; bitpos: [2:0]; default: 7; - * Set the security level of spi mem cryption. 0: Shut off cryption DPA funtion. 1-7: + * Set the security level of spi mem cryption. 0: Shut off cryption DPA function. 1-7: * The bigger the number is, the more secure the cryption is. (Note that the * performance of cryption will decrease together with this number increasing) */ diff --git a/components/soc/esp32p4/include/soc/spi_mem_s_reg.h b/components/soc/esp32p4/register/soc/spi_mem_s_reg.h similarity index 99% rename from components/soc/esp32p4/include/soc/spi_mem_s_reg.h rename to components/soc/esp32p4/register/soc/spi_mem_s_reg.h index 4e81aa49b4f7..ec83145c7719 100644 --- a/components/soc/esp32p4/include/soc/spi_mem_s_reg.h +++ b/components/soc/esp32p4/register/soc/spi_mem_s_reg.h @@ -199,7 +199,7 @@ extern "C" { /** SPI_MEM_S_CLK_MODE : R/W; bitpos: [1:0]; default: 0; * SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delayed * one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3: - * SPI clock is alwasy on. + * SPI clock is always on. */ #define SPI_MEM_S_CLK_MODE 0x00000003U #define SPI_MEM_S_CLK_MODE_M (SPI_MEM_S_CLK_MODE_V << SPI_MEM_S_CLK_MODE_S) @@ -945,7 +945,7 @@ extern "C" { #define SPI_MEM_S_SCLKCNT_N_V 0x000000FFU #define SPI_MEM_S_SCLKCNT_N_S 16 /** SPI_MEM_S_SCLK_EQU_SYSCLK : R/W; bitpos: [31]; default: 0; - * For SPI0 external RAM interface, 1: spi_mem_clk is eqaul to system 0: spi_mem_clk + * For SPI0 external RAM interface, 1: spi_mem_clk is equal to system 0: spi_mem_clk * is divided from system clock. */ #define SPI_MEM_S_SCLK_EQU_SYSCLK (BIT(31)) @@ -3461,7 +3461,7 @@ extern "C" { */ #define SPI_MEM_S_DPA_CTRL_REG (DR_REG_PSRAM_MSPI0_BASE + 0x388) /** SPI_MEM_S_CRYPT_SECURITY_LEVEL : R/W; bitpos: [2:0]; default: 7; - * Set the security level of spi mem cryption. 0: Shut off cryption DPA funtion. 1-7: + * Set the security level of spi mem cryption. 0: Shut off cryption DPA function. 1-7: * The bigger the number is, the more secure the cryption is. (Note that the * performance of cryption will decrease together with this number increasing) */ diff --git a/components/soc/esp32p4/include/soc/spi_mem_s_struct.h b/components/soc/esp32p4/register/soc/spi_mem_s_struct.h similarity index 99% rename from components/soc/esp32p4/include/soc/spi_mem_s_struct.h rename to components/soc/esp32p4/register/soc/spi_mem_s_struct.h index 691b30c6d7d0..4948325c47ce 100644 --- a/components/soc/esp32p4/include/soc/spi_mem_s_struct.h +++ b/components/soc/esp32p4/register/soc/spi_mem_s_struct.h @@ -167,7 +167,7 @@ typedef union { /** mem_clk_mode : R/W; bitpos: [1:0]; default: 0; * SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delayed * one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3: - * SPI clock is alwasy on. + * SPI clock is always on. */ uint32_t mem_clk_mode:2; uint32_t reserved_2:19; @@ -504,7 +504,7 @@ typedef union { uint32_t mem_sclkcnt_n:8; uint32_t reserved_24:7; /** mem_sclk_equ_sysclk : R/W; bitpos: [31]; default: 0; - * For SPI0 external RAM interface, 1: spi_mem_s_clk is eqaul to system 0: spi_mem_s_clk + * For SPI0 external RAM interface, 1: spi_mem_s_clk is equal to system 0: spi_mem_s_clk * is divided from system clock. */ uint32_t mem_sclk_equ_sysclk:1; @@ -2446,7 +2446,7 @@ typedef union { typedef union { struct { /** crypt_security_level : R/W; bitpos: [2:0]; default: 7; - * Set the security level of spi mem cryption. 0: Shut off cryption DPA funtion. 1-7: + * Set the security level of spi mem cryption. 0: Shut off cryption DPA function. 1-7: * The bigger the number is, the more secure the cryption is. (Note that the * performance of cryption will decrease together with this number increasing) */ diff --git a/components/soc/esp32p4/include/soc/spi_reg.h b/components/soc/esp32p4/register/soc/spi_reg.h similarity index 99% rename from components/soc/esp32p4/include/soc/spi_reg.h rename to components/soc/esp32p4/register/soc/spi_reg.h index 61a1858b0965..ffce14740eee 100644 --- a/components/soc/esp32p4/include/soc/spi_reg.h +++ b/components/soc/esp32p4/register/soc/spi_reg.h @@ -225,7 +225,7 @@ extern "C" { #define SPI_CLKDIV_PRE_V 0x0000000FU #define SPI_CLKDIV_PRE_S 18 /** SPI_CLK_EQU_SYSCLK : R/W; bitpos: [31]; default: 1; - * In the master mode 1: spi_clk is eqaul to system 0: spi_clk is divided from system + * In the master mode 1: spi_clk is equal to system 0: spi_clk is divided from system * clock. Can be configured in CONF state. */ #define SPI_CLK_EQU_SYSCLK (BIT(31)) @@ -1978,7 +1978,7 @@ extern "C" { /** SPI_CLK_MODE : R/W; bitpos: [1:0]; default: 0; * SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delayed * one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3: - * SPI clock is alwasy on. Can be configured in CONF state. + * SPI clock is always on. Can be configured in CONF state. */ #define SPI_CLK_MODE 0x00000003U #define SPI_CLK_MODE_M (SPI_CLK_MODE_V << SPI_CLK_MODE_S) diff --git a/components/soc/esp32p4/include/soc/spi_struct.h b/components/soc/esp32p4/register/soc/spi_struct.h similarity index 99% rename from components/soc/esp32p4/include/soc/spi_struct.h rename to components/soc/esp32p4/register/soc/spi_struct.h index 66929cd3a071..8d004e60e1db 100644 --- a/components/soc/esp32p4/include/soc/spi_struct.h +++ b/components/soc/esp32p4/register/soc/spi_struct.h @@ -511,7 +511,7 @@ typedef union { /** clk_mode : R/W; bitpos: [1:0]; default: 0; * SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delayed * one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3: - * SPI clock is alwasy on. Can be configured in CONF state. + * SPI clock is always on. Can be configured in CONF state. */ uint32_t clk_mode:2; /** clk_mode_13 : R/W; bitpos: [2]; default: 0; @@ -629,7 +629,7 @@ typedef union { uint32_t clkdiv_pre:4; uint32_t reserved_22:9; /** clk_equ_sysclk : R/W; bitpos: [31]; default: 1; - * In the master mode 1: spi_clk is eqaul to system 0: spi_clk is divided from system + * In the master mode 1: spi_clk is equal to system 0: spi_clk is divided from system * clock. Can be configured in CONF state. */ uint32_t clk_equ_sysclk:1; diff --git a/components/soc/esp32p4/include/soc/systimer_reg.h b/components/soc/esp32p4/register/soc/systimer_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/systimer_reg.h rename to components/soc/esp32p4/register/soc/systimer_reg.h diff --git a/components/soc/esp32p4/include/soc/systimer_struct.h b/components/soc/esp32p4/register/soc/systimer_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/systimer_struct.h rename to components/soc/esp32p4/register/soc/systimer_struct.h diff --git a/components/soc/esp32p4/include/soc/tcm_monitor_reg.h b/components/soc/esp32p4/register/soc/tcm_monitor_reg.h similarity index 98% rename from components/soc/esp32p4/include/soc/tcm_monitor_reg.h rename to components/soc/esp32p4/register/soc/tcm_monitor_reg.h index d89fc3009cce..f04f761def9c 100644 --- a/components/soc/esp32p4/include/soc/tcm_monitor_reg.h +++ b/components/soc/esp32p4/register/soc/tcm_monitor_reg.h @@ -12,7 +12,7 @@ extern "C" { #endif /** MEM_MONITOR_LOG_SETTING_REG register - * log config regsiter + * log config register */ #define MEM_MONITOR_LOG_SETTING_REG (DR_REG_MEM_MONITOR_BASE + 0x0) /** MEM_MONITOR_LOG_MODE : R/W; bitpos: [3:0]; default: 0; @@ -53,7 +53,7 @@ extern "C" { #define MEM_MONITOR_LOG_DMA_1_ENA_S 24 /** MEM_MONITOR_LOG_SETTING1_REG register - * log config regsiter + * log config register */ #define MEM_MONITOR_LOG_SETTING1_REG (DR_REG_MEM_MONITOR_BASE + 0x4) /** MEM_MONITOR_LOG_DMA_2_ENA : R/W; bitpos: [7:0]; default: 0; @@ -72,7 +72,7 @@ extern "C" { #define MEM_MONITOR_LOG_DMA_3_ENA_S 8 /** MEM_MONITOR_LOG_CHECK_DATA_REG register - * check data regsiter + * check data register */ #define MEM_MONITOR_LOG_CHECK_DATA_REG (DR_REG_MEM_MONITOR_BASE + 0x8) /** MEM_MONITOR_LOG_CHECK_DATA : R/W; bitpos: [31:0]; default: 0; @@ -97,7 +97,7 @@ extern "C" { #define MEM_MONITOR_LOG_DATA_MASK_S 0 /** MEM_MONITOR_LOG_MIN_REG register - * log boundary regsiter + * log boundary register */ #define MEM_MONITOR_LOG_MIN_REG (DR_REG_MEM_MONITOR_BASE + 0x10) /** MEM_MONITOR_LOG_MIN : R/W; bitpos: [31:0]; default: 0; @@ -109,7 +109,7 @@ extern "C" { #define MEM_MONITOR_LOG_MIN_S 0 /** MEM_MONITOR_LOG_MAX_REG register - * log boundary regsiter + * log boundary register */ #define MEM_MONITOR_LOG_MAX_REG (DR_REG_MEM_MONITOR_BASE + 0x14) /** MEM_MONITOR_LOG_MAX : R/W; bitpos: [31:0]; default: 0; diff --git a/components/soc/esp32p4/include/soc/tcm_monitor_struct.h b/components/soc/esp32p4/register/soc/tcm_monitor_struct.h similarity index 98% rename from components/soc/esp32p4/include/soc/tcm_monitor_struct.h rename to components/soc/esp32p4/register/soc/tcm_monitor_struct.h index c88691215af4..e3e1abf3761d 100644 --- a/components/soc/esp32p4/include/soc/tcm_monitor_struct.h +++ b/components/soc/esp32p4/register/soc/tcm_monitor_struct.h @@ -12,7 +12,7 @@ extern "C" { /** Group: configuration registers */ /** Type of log_setting register - * log config regsiter + * log config register */ typedef union { struct { @@ -43,7 +43,7 @@ typedef union { } mem_monitor_log_setting_reg_t; /** Type of log_setting1 register - * log config regsiter + * log config register */ typedef union { struct { @@ -61,7 +61,7 @@ typedef union { } mem_monitor_log_setting1_reg_t; /** Type of log_check_data register - * check data regsiter + * check data register */ typedef union { struct { @@ -89,7 +89,7 @@ typedef union { } mem_monitor_log_data_mask_reg_t; /** Type of log_min register - * log boundary regsiter + * log boundary register */ typedef union { struct { @@ -102,7 +102,7 @@ typedef union { } mem_monitor_log_min_reg_t; /** Type of log_max register - * log boundary regsiter + * log boundary register */ typedef union { struct { diff --git a/components/soc/esp32p4/include/soc/timer_group_reg.h b/components/soc/esp32p4/register/soc/timer_group_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/timer_group_reg.h rename to components/soc/esp32p4/register/soc/timer_group_reg.h diff --git a/components/soc/esp32p4/include/soc/timer_group_struct.h b/components/soc/esp32p4/register/soc/timer_group_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/timer_group_struct.h rename to components/soc/esp32p4/register/soc/timer_group_struct.h diff --git a/components/soc/esp32p4/include/soc/touch_reg.h b/components/soc/esp32p4/register/soc/touch_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/touch_reg.h rename to components/soc/esp32p4/register/soc/touch_reg.h diff --git a/components/soc/esp32p4/include/soc/touch_struct.h b/components/soc/esp32p4/register/soc/touch_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/touch_struct.h rename to components/soc/esp32p4/register/soc/touch_struct.h diff --git a/components/soc/esp32p4/include/soc/trace_reg.h b/components/soc/esp32p4/register/soc/trace_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/trace_reg.h rename to components/soc/esp32p4/register/soc/trace_reg.h diff --git a/components/soc/esp32p4/include/soc/trace_struct.h b/components/soc/esp32p4/register/soc/trace_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/trace_struct.h rename to components/soc/esp32p4/register/soc/trace_struct.h diff --git a/components/soc/esp32p4/include/soc/tsens_reg.h b/components/soc/esp32p4/register/soc/tsens_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/tsens_reg.h rename to components/soc/esp32p4/register/soc/tsens_reg.h diff --git a/components/soc/esp32p4/include/soc/tsens_struct.h b/components/soc/esp32p4/register/soc/tsens_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/tsens_struct.h rename to components/soc/esp32p4/register/soc/tsens_struct.h diff --git a/components/soc/esp32p4/include/soc/twai_reg.h b/components/soc/esp32p4/register/soc/twai_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/twai_reg.h rename to components/soc/esp32p4/register/soc/twai_reg.h diff --git a/components/soc/esp32p4/include/soc/twai_struct.h b/components/soc/esp32p4/register/soc/twai_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/twai_struct.h rename to components/soc/esp32p4/register/soc/twai_struct.h diff --git a/components/soc/esp32p4/include/soc/uart_reg.h b/components/soc/esp32p4/register/soc/uart_reg.h similarity index 99% rename from components/soc/esp32p4/include/soc/uart_reg.h rename to components/soc/esp32p4/register/soc/uart_reg.h index fc3c662721eb..014f8eaed299 100644 --- a/components/soc/esp32p4/include/soc/uart_reg.h +++ b/components/soc/esp32p4/register/soc/uart_reg.h @@ -100,7 +100,7 @@ extern "C" { #define UART_RXFIFO_TOUT_INT_RAW_V 0x00000001U #define UART_RXFIFO_TOUT_INT_RAW_S 8 /** UART_SW_XON_INT_RAW : R/WTC/SS; bitpos: [9]; default: 0; - * This interrupt raw bit turns to high level when receiver recevies Xon char when + * This interrupt raw bit turns to high level when receiver receives Xon char when * uart_sw_flow_con_en is set to 1. */ #define UART_SW_XON_INT_RAW (BIT(9)) @@ -285,7 +285,7 @@ extern "C" { #define UART_TX_BRK_DONE_INT_ST_V 0x00000001U #define UART_TX_BRK_DONE_INT_ST_S 12 /** UART_TX_BRK_IDLE_DONE_INT_ST : RO; bitpos: [13]; default: 0; - * This is the stauts bit for tx_brk_idle_done_int_raw when tx_brk_idle_done_int_ena + * This is the status bit for tx_brk_idle_done_int_raw when tx_brk_idle_done_int_ena * is set to 1. */ #define UART_TX_BRK_IDLE_DONE_INT_ST (BIT(13)) @@ -760,7 +760,7 @@ extern "C" { #define UART_STOP_BIT_NUM_V 0x00000003U #define UART_STOP_BIT_NUM_S 4 /** UART_TXD_BRK : R/W; bitpos: [6]; default: 0; - * Set this bit to enbale transmitter to send NULL when the process of sending data + * Set this bit to enable transmitter to send NULL when the process of sending data * is done. */ #define UART_TXD_BRK (BIT(6)) @@ -1326,7 +1326,7 @@ extern "C" { */ #define UART_TOUT_CONF_SYNC_REG(i) (REG_UART_BASE(i) + 0x64) /** UART_RX_TOUT_EN : R/W; bitpos: [0]; default: 0; - * This is the enble bit for uart receiver's timeout function. + * This is the enable bit for uart receiver's timeout function. */ #define UART_RX_TOUT_EN (BIT(0)) #define UART_RX_TOUT_EN_M (UART_RX_TOUT_EN_V << UART_RX_TOUT_EN_S) @@ -1450,7 +1450,7 @@ extern "C" { */ #define UART_HIGHPULSE_REG(i) (REG_UART_BASE(i) + 0x80) /** UART_HIGHPULSE_MIN_CNT : RO; bitpos: [11:0]; default: 4095; - * This register stores the value of the maxinum duration time for the high level + * This register stores the value of the maximum duration time for the high level * pulse. It is used in baud rate-detect process. */ #define UART_HIGHPULSE_MIN_CNT 0x00000FFFU diff --git a/components/soc/esp32p4/include/soc/uart_struct.h b/components/soc/esp32p4/register/soc/uart_struct.h similarity index 99% rename from components/soc/esp32p4/include/soc/uart_struct.h rename to components/soc/esp32p4/register/soc/uart_struct.h index b23e6db9305b..b750ef943afc 100644 --- a/components/soc/esp32p4/include/soc/uart_struct.h +++ b/components/soc/esp32p4/register/soc/uart_struct.h @@ -49,7 +49,7 @@ typedef union { typedef union { struct { /** rx_tout_en : R/W; bitpos: [0]; default: 0; - * This is the enble bit for uart receiver's timeout function. + * This is the enable bit for uart receiver's timeout function. */ uint32_t rx_tout_en:1; /** rx_tout_flow_dis : R/W; bitpos: [1]; default: 0; @@ -120,7 +120,7 @@ typedef union { */ uint32_t rxfifo_tout_int_raw:1; /** sw_xon_int_raw : R/WTC/SS; bitpos: [9]; default: 0; - * This interrupt raw bit turns to high level when receiver recevies Xon char when + * This interrupt raw bit turns to high level when receiver receives Xon char when * uart_sw_flow_con_en is set to 1. */ uint32_t sw_xon_int_raw:1; @@ -238,7 +238,7 @@ typedef union { */ uint32_t tx_brk_done_int_st:1; /** tx_brk_idle_done_int_st : RO; bitpos: [13]; default: 0; - * This is the stauts bit for tx_brk_idle_done_int_raw when tx_brk_idle_done_int_ena + * This is the status bit for tx_brk_idle_done_int_raw when tx_brk_idle_done_int_ena * is set to 1. */ uint32_t tx_brk_idle_done_int_st:1; @@ -515,7 +515,7 @@ typedef union { */ uint32_t stop_bit_num:2; /** txd_brk : R/W; bitpos: [6]; default: 0; - * Set this bit to enbale transmitter to send NULL when the process of sending data + * Set this bit to enable transmitter to send NULL when the process of sending data * is done. */ uint32_t txd_brk:1; @@ -1160,7 +1160,7 @@ typedef union { typedef union { struct { /** highpulse_min_cnt : RO; bitpos: [11:0]; default: 4095; - * This register stores the value of the maxinum duration time for the high level + * This register stores the value of the maximum duration time for the high level * pulse. It is used in baud rate-detect process. */ uint32_t highpulse_min_cnt:12; diff --git a/components/soc/esp32p4/include/soc/uhci_reg.h b/components/soc/esp32p4/register/soc/uhci_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/uhci_reg.h rename to components/soc/esp32p4/register/soc/uhci_reg.h diff --git a/components/soc/esp32p4/include/soc/uhci_struct.h b/components/soc/esp32p4/register/soc/uhci_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/uhci_struct.h rename to components/soc/esp32p4/register/soc/uhci_struct.h diff --git a/components/soc/esp32p4/include/soc/usb_serial_jtag_reg.h b/components/soc/esp32p4/register/soc/usb_serial_jtag_reg.h similarity index 99% rename from components/soc/esp32p4/include/soc/usb_serial_jtag_reg.h rename to components/soc/esp32p4/register/soc/usb_serial_jtag_reg.h index 478c734ea806..6de18f3a76f7 100644 --- a/components/soc/esp32p4/include/soc/usb_serial_jtag_reg.h +++ b/components/soc/esp32p4/register/soc/usb_serial_jtag_reg.h @@ -1140,7 +1140,7 @@ extern "C" { #define USB_SERIAL_JTAG_SERIAL_OUT_AFIFO_RESET_RD_V 0x00000001U #define USB_SERIAL_JTAG_SERIAL_OUT_AFIFO_RESET_RD_S 3 /** USB_SERIAL_JTAG_SERIAL_OUT_AFIFO_REMPTY : RO; bitpos: [4]; default: 1; - * CDC_ACM OUTOUT async FIFO empty signal in read clock domain. + * CDC_ACM OUTPUT async FIFO empty signal in read clock domain. */ #define USB_SERIAL_JTAG_SERIAL_OUT_AFIFO_REMPTY (BIT(4)) #define USB_SERIAL_JTAG_SERIAL_OUT_AFIFO_REMPTY_M (USB_SERIAL_JTAG_SERIAL_OUT_AFIFO_REMPTY_V << USB_SERIAL_JTAG_SERIAL_OUT_AFIFO_REMPTY_S) diff --git a/components/soc/esp32p4/include/soc/usb_serial_jtag_struct.h b/components/soc/esp32p4/register/soc/usb_serial_jtag_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/usb_serial_jtag_struct.h rename to components/soc/esp32p4/register/soc/usb_serial_jtag_struct.h diff --git a/components/soc/esp32p4/include/soc/usb_wrap_reg.h b/components/soc/esp32p4/register/soc/usb_wrap_reg.h similarity index 100% rename from components/soc/esp32p4/include/soc/usb_wrap_reg.h rename to components/soc/esp32p4/register/soc/usb_wrap_reg.h diff --git a/components/soc/esp32p4/include/soc/usb_wrap_struct.h b/components/soc/esp32p4/register/soc/usb_wrap_struct.h similarity index 100% rename from components/soc/esp32p4/include/soc/usb_wrap_struct.h rename to components/soc/esp32p4/register/soc/usb_wrap_struct.h From f0c34575d147263aee9164f4274a55e4bfba6251 Mon Sep 17 00:00:00 2001 From: laokaiyao Date: Fri, 6 Sep 2024 17:22:19 +0800 Subject: [PATCH 147/365] refactor(soc): sort esp32c6 soc headers --- .../soc/esp32c6/include/soc/dport_access.h | 1 - components/soc/esp32c6/include/soc/soc.h | 2 +- .../soc/esp32c6/include/soc/system_reg.h | 2 +- components/soc/esp32c6/register/soc/.gitkeep | 0 .../{include => register}/soc/aes_reg.h | 0 .../{include => register}/soc/aes_struct.h | 0 .../soc/apb_saradc_reg.h | 0 .../soc/apb_saradc_struct.h | 0 .../soc/assist_debug_reg.h | 12 +- .../soc/assist_debug_struct.h | 18 +- .../{include => register}/soc/clint_reg.h | 0 .../{include => register}/soc/ds_reg.h | 0 .../{include => register}/soc/ds_struct.h | 0 .../{include => register}/soc/ecc_mult_reg.h | 2 +- .../soc/ecc_mult_struct.h | 2 +- .../{include => register}/soc/efuse_reg.h | 8 +- .../{include => register}/soc/efuse_struct.h | 6 +- .../{include => register}/soc/extmem_reg.h | 36 +-- .../{include => register}/soc/extmem_struct.h | 8 +- .../{include => register}/soc/gdma_reg.h | 0 .../{include => register}/soc/gdma_struct.h | 0 .../{include => register}/soc/gpio_ext_reg.h | 0 .../soc/gpio_ext_struct.h | 0 .../{include => register}/soc/gpio_reg.h | 0 .../{include => register}/soc/gpio_struct.h | 0 .../soc/hardware_lock_reg.h | 10 +- .../soc/hardware_lock_struct.h | 10 +- .../{include => register}/soc/hinf_reg.h | 0 .../{include => register}/soc/hinf_struct.h | 0 .../{include => register}/soc/hmac_reg.h | 0 .../{include => register}/soc/hmac_struct.h | 0 .../{include => register}/soc/host_reg.h | 0 .../{include => register}/soc/host_struct.h | 0 .../{include => register}/soc/hp_apm_reg.h | 0 .../{include => register}/soc/hp_apm_struct.h | 0 .../{include => register}/soc/hp_system_reg.h | 2 +- .../soc/hp_system_struct.h | 2 +- .../soc/i2c_ana_mst_reg.h | 0 .../{include => register}/soc/i2c_reg.h | 0 .../{include => register}/soc/i2c_struct.h | 0 .../{include => register}/soc/i2s_reg.h | 2 +- .../{include => register}/soc/i2s_struct.h | 2 +- .../soc/ieee802154_reg.h | 0 .../soc/ieee802154_struct.h | 0 .../soc/interrupt_matrix_reg.h | 0 .../soc/interrupt_matrix_struct.h | 0 .../{include => register}/soc/intpri_reg.h | 0 .../{include => register}/soc/intpri_struct.h | 0 .../{include => register}/soc/io_mux_reg.h | 2 +- .../{include => register}/soc/ledc_reg.h | 0 .../{include => register}/soc/ledc_struct.h | 0 .../soc/lp_analog_peri_reg.h | 0 .../soc/lp_analog_peri_struct.h | 0 .../{include => register}/soc/lp_aon_reg.h | 0 .../{include => register}/soc/lp_aon_struct.h | 0 .../{include => register}/soc/lp_apm0_reg.h | 0 .../soc/lp_apm0_struct.h | 0 .../{include => register}/soc/lp_apm_reg.h | 0 .../{include => register}/soc/lp_apm_struct.h | 0 .../{include => register}/soc/lp_clkrst_reg.h | 0 .../soc/lp_clkrst_struct.h | 0 .../soc/lp_i2c_ana_mst_reg.h | 0 .../soc/lp_i2c_ana_mst_struct.h | 0 .../{include => register}/soc/lp_i2c_reg.h | 0 .../{include => register}/soc/lp_i2c_struct.h | 0 .../{include => register}/soc/lp_io_reg.h | 0 .../{include => register}/soc/lp_io_struct.h | 0 .../{include => register}/soc/lp_tee_reg.h | 0 .../{include => register}/soc/lp_tee_struct.h | 0 .../{include => register}/soc/lp_timer_reg.h | 0 .../soc/lp_timer_struct.h | 0 .../{include => register}/soc/lp_uart_reg.h | 8 +- .../soc/lp_uart_struct.h | 10 +- .../{include => register}/soc/lp_wdt_reg.h | 0 .../{include => register}/soc/lp_wdt_struct.h | 0 .../{include => register}/soc/lpperi_reg.h | 0 .../{include => register}/soc/lpperi_struct.h | 0 .../{include => register}/soc/mcpwm_reg.h | 12 +- .../{include => register}/soc/mcpwm_struct.h | 4 +- .../soc/mem_monitor_reg.h | 8 +- .../soc/mem_monitor_struct.h | 8 +- .../{include => register}/soc/otp_debug_reg.h | 260 ++++++++--------- .../soc/otp_debug_struct.h | 262 +++++++++--------- .../{include => register}/soc/parl_io_reg.h | 10 +- .../soc/parl_io_struct.h | 10 +- .../{include => register}/soc/pau_reg.h | 0 .../{include => register}/soc/pau_struct.h | 0 .../{include => register}/soc/pcnt_reg.h | 0 .../{include => register}/soc/pcnt_struct.h | 0 .../{include => register}/soc/pcr_reg.h | 54 ++-- .../{include => register}/soc/pcr_struct.h | 54 ++-- .../{include => register}/soc/plic_reg.h | 0 .../{include => register}/soc/pmu_reg.h | 0 .../{include => register}/soc/pmu_struct.h | 2 +- .../{include => register}/soc/reg_base.h | 0 .../{include => register}/soc/rmt_reg.h | 0 .../{include => register}/soc/rmt_struct.h | 0 .../{include => register}/soc/rsa_reg.h | 0 .../{include => register}/soc/rsa_struct.h | 0 .../{include => register}/soc/sha_reg.h | 2 +- .../{include => register}/soc/sha_struct.h | 0 .../{include => register}/soc/slc_reg.h | 0 .../{include => register}/soc/slc_struct.h | 0 .../{include => register}/soc/soc_etm_reg.h | 0 .../soc/soc_etm_struct.h | 0 .../{include => register}/soc/spi_mem_reg.h | 52 ++-- .../soc/spi_mem_struct.h | 8 +- .../{include => register}/soc/spi_reg.h | 4 +- .../{include => register}/soc/spi_struct.h | 4 +- .../{include => register}/soc/systimer_reg.h | 0 .../soc/systimer_struct.h | 0 .../{include => register}/soc/tee_reg.h | 0 .../{include => register}/soc/tee_struct.h | 0 .../soc/timer_group_reg.h | 0 .../soc/timer_group_struct.h | 0 .../{include => register}/soc/trace_reg.h | 2 +- .../{include => register}/soc/trace_struct.h | 2 +- .../{include => register}/soc/twai_reg.h | 0 .../{include => register}/soc/twai_struct.h | 0 .../{include => register}/soc/uart_reg.h | 10 +- .../{include => register}/soc/uart_struct.h | 10 +- .../{include => register}/soc/uhci_reg.h | 0 .../{include => register}/soc/uhci_struct.h | 0 .../soc/usb_serial_jtag_reg.h | 2 +- .../soc/usb_serial_jtag_struct.h | 0 .../{include => register}/soc/xts_aes_reg.h | 6 +- 126 files changed, 465 insertions(+), 466 deletions(-) delete mode 100644 components/soc/esp32c6/register/soc/.gitkeep rename components/soc/esp32c6/{include => register}/soc/aes_reg.h (100%) rename components/soc/esp32c6/{include => register}/soc/aes_struct.h (100%) rename components/soc/esp32c6/{include => register}/soc/apb_saradc_reg.h (100%) rename components/soc/esp32c6/{include => register}/soc/apb_saradc_struct.h (100%) rename components/soc/esp32c6/{include => register}/soc/assist_debug_reg.h (99%) rename components/soc/esp32c6/{include => register}/soc/assist_debug_struct.h (98%) rename components/soc/esp32c6/{include => register}/soc/clint_reg.h (100%) rename components/soc/esp32c6/{include => register}/soc/ds_reg.h (100%) rename components/soc/esp32c6/{include => register}/soc/ds_struct.h (100%) rename components/soc/esp32c6/{include => register}/soc/ecc_mult_reg.h (98%) rename components/soc/esp32c6/{include => register}/soc/ecc_mult_struct.h (97%) rename components/soc/esp32c6/{include => register}/soc/efuse_reg.h (99%) rename components/soc/esp32c6/{include => register}/soc/efuse_struct.h (99%) rename components/soc/esp32c6/{include => register}/soc/extmem_reg.h (98%) rename components/soc/esp32c6/{include => register}/soc/extmem_struct.h (99%) rename components/soc/esp32c6/{include => register}/soc/gdma_reg.h (100%) rename components/soc/esp32c6/{include => register}/soc/gdma_struct.h (100%) rename components/soc/esp32c6/{include => register}/soc/gpio_ext_reg.h (100%) rename components/soc/esp32c6/{include => register}/soc/gpio_ext_struct.h (100%) rename components/soc/esp32c6/{include => register}/soc/gpio_reg.h (100%) rename components/soc/esp32c6/{include => register}/soc/gpio_struct.h (100%) rename components/soc/esp32c6/{include => register}/soc/hardware_lock_reg.h (93%) rename components/soc/esp32c6/{include => register}/soc/hardware_lock_struct.h (92%) rename components/soc/esp32c6/{include => register}/soc/hinf_reg.h (100%) rename components/soc/esp32c6/{include => register}/soc/hinf_struct.h (100%) rename components/soc/esp32c6/{include => register}/soc/hmac_reg.h (100%) rename components/soc/esp32c6/{include => register}/soc/hmac_struct.h (100%) rename components/soc/esp32c6/{include => register}/soc/host_reg.h (100%) rename components/soc/esp32c6/{include => register}/soc/host_struct.h (100%) rename components/soc/esp32c6/{include => register}/soc/hp_apm_reg.h (100%) rename components/soc/esp32c6/{include => register}/soc/hp_apm_struct.h (100%) rename components/soc/esp32c6/{include => register}/soc/hp_system_reg.h (99%) rename components/soc/esp32c6/{include => register}/soc/hp_system_struct.h (99%) rename components/soc/esp32c6/{include => register}/soc/i2c_ana_mst_reg.h (100%) rename components/soc/esp32c6/{include => register}/soc/i2c_reg.h (100%) rename components/soc/esp32c6/{include => register}/soc/i2c_struct.h (100%) rename components/soc/esp32c6/{include => register}/soc/i2s_reg.h (99%) rename components/soc/esp32c6/{include => register}/soc/i2s_struct.h (99%) rename components/soc/esp32c6/{include => register}/soc/ieee802154_reg.h (100%) rename components/soc/esp32c6/{include => register}/soc/ieee802154_struct.h (100%) rename components/soc/esp32c6/{include => register}/soc/interrupt_matrix_reg.h (100%) rename components/soc/esp32c6/{include => register}/soc/interrupt_matrix_struct.h (100%) rename components/soc/esp32c6/{include => register}/soc/intpri_reg.h (100%) rename components/soc/esp32c6/{include => register}/soc/intpri_struct.h (100%) rename components/soc/esp32c6/{include => register}/soc/io_mux_reg.h (99%) rename components/soc/esp32c6/{include => register}/soc/ledc_reg.h (100%) rename components/soc/esp32c6/{include => register}/soc/ledc_struct.h (100%) rename components/soc/esp32c6/{include => register}/soc/lp_analog_peri_reg.h (100%) rename components/soc/esp32c6/{include => register}/soc/lp_analog_peri_struct.h (100%) rename components/soc/esp32c6/{include => register}/soc/lp_aon_reg.h (100%) rename components/soc/esp32c6/{include => register}/soc/lp_aon_struct.h (100%) rename components/soc/esp32c6/{include => register}/soc/lp_apm0_reg.h (100%) rename components/soc/esp32c6/{include => register}/soc/lp_apm0_struct.h (100%) rename components/soc/esp32c6/{include => register}/soc/lp_apm_reg.h (100%) rename components/soc/esp32c6/{include => register}/soc/lp_apm_struct.h (100%) rename components/soc/esp32c6/{include => register}/soc/lp_clkrst_reg.h (100%) rename components/soc/esp32c6/{include => register}/soc/lp_clkrst_struct.h (100%) rename components/soc/esp32c6/{include => register}/soc/lp_i2c_ana_mst_reg.h (100%) rename components/soc/esp32c6/{include => register}/soc/lp_i2c_ana_mst_struct.h (100%) rename components/soc/esp32c6/{include => register}/soc/lp_i2c_reg.h (100%) rename components/soc/esp32c6/{include => register}/soc/lp_i2c_struct.h (100%) rename components/soc/esp32c6/{include => register}/soc/lp_io_reg.h (100%) rename components/soc/esp32c6/{include => register}/soc/lp_io_struct.h (100%) rename components/soc/esp32c6/{include => register}/soc/lp_tee_reg.h (100%) rename components/soc/esp32c6/{include => register}/soc/lp_tee_struct.h (100%) rename components/soc/esp32c6/{include => register}/soc/lp_timer_reg.h (100%) rename components/soc/esp32c6/{include => register}/soc/lp_timer_struct.h (100%) rename components/soc/esp32c6/{include => register}/soc/lp_uart_reg.h (99%) rename components/soc/esp32c6/{include => register}/soc/lp_uart_struct.h (99%) rename components/soc/esp32c6/{include => register}/soc/lp_wdt_reg.h (100%) rename components/soc/esp32c6/{include => register}/soc/lp_wdt_struct.h (100%) rename components/soc/esp32c6/{include => register}/soc/lpperi_reg.h (100%) rename components/soc/esp32c6/{include => register}/soc/lpperi_struct.h (100%) rename components/soc/esp32c6/{include => register}/soc/mcpwm_reg.h (99%) rename components/soc/esp32c6/{include => register}/soc/mcpwm_struct.h (99%) rename components/soc/esp32c6/{include => register}/soc/mem_monitor_reg.h (98%) rename components/soc/esp32c6/{include => register}/soc/mem_monitor_struct.h (98%) rename components/soc/esp32c6/{include => register}/soc/otp_debug_reg.h (91%) rename components/soc/esp32c6/{include => register}/soc/otp_debug_struct.h (89%) rename components/soc/esp32c6/{include => register}/soc/parl_io_reg.h (98%) rename components/soc/esp32c6/{include => register}/soc/parl_io_struct.h (97%) rename components/soc/esp32c6/{include => register}/soc/pau_reg.h (100%) rename components/soc/esp32c6/{include => register}/soc/pau_struct.h (100%) rename components/soc/esp32c6/{include => register}/soc/pcnt_reg.h (100%) rename components/soc/esp32c6/{include => register}/soc/pcnt_struct.h (100%) rename components/soc/esp32c6/{include => register}/soc/pcr_reg.h (98%) rename components/soc/esp32c6/{include => register}/soc/pcr_struct.h (97%) rename components/soc/esp32c6/{include => register}/soc/plic_reg.h (100%) rename components/soc/esp32c6/{include => register}/soc/pmu_reg.h (100%) rename components/soc/esp32c6/{include => register}/soc/pmu_struct.h (99%) rename components/soc/esp32c6/{include => register}/soc/reg_base.h (100%) rename components/soc/esp32c6/{include => register}/soc/rmt_reg.h (100%) rename components/soc/esp32c6/{include => register}/soc/rmt_struct.h (100%) rename components/soc/esp32c6/{include => register}/soc/rsa_reg.h (100%) rename components/soc/esp32c6/{include => register}/soc/rsa_struct.h (100%) rename components/soc/esp32c6/{include => register}/soc/sha_reg.h (98%) rename components/soc/esp32c6/{include => register}/soc/sha_struct.h (100%) rename components/soc/esp32c6/{include => register}/soc/slc_reg.h (100%) rename components/soc/esp32c6/{include => register}/soc/slc_struct.h (100%) rename components/soc/esp32c6/{include => register}/soc/soc_etm_reg.h (100%) rename components/soc/esp32c6/{include => register}/soc/soc_etm_struct.h (100%) rename components/soc/esp32c6/{include => register}/soc/spi_mem_reg.h (99%) rename components/soc/esp32c6/{include => register}/soc/spi_mem_struct.h (99%) rename components/soc/esp32c6/{include => register}/soc/spi_reg.h (99%) rename components/soc/esp32c6/{include => register}/soc/spi_struct.h (99%) rename components/soc/esp32c6/{include => register}/soc/systimer_reg.h (100%) rename components/soc/esp32c6/{include => register}/soc/systimer_struct.h (100%) rename components/soc/esp32c6/{include => register}/soc/tee_reg.h (100%) rename components/soc/esp32c6/{include => register}/soc/tee_struct.h (100%) rename components/soc/esp32c6/{include => register}/soc/timer_group_reg.h (100%) rename components/soc/esp32c6/{include => register}/soc/timer_group_struct.h (100%) rename components/soc/esp32c6/{include => register}/soc/trace_reg.h (99%) rename components/soc/esp32c6/{include => register}/soc/trace_struct.h (99%) rename components/soc/esp32c6/{include => register}/soc/twai_reg.h (100%) rename components/soc/esp32c6/{include => register}/soc/twai_struct.h (100%) rename components/soc/esp32c6/{include => register}/soc/uart_reg.h (99%) rename components/soc/esp32c6/{include => register}/soc/uart_struct.h (99%) rename components/soc/esp32c6/{include => register}/soc/uhci_reg.h (100%) rename components/soc/esp32c6/{include => register}/soc/uhci_struct.h (100%) rename components/soc/esp32c6/{include => register}/soc/usb_serial_jtag_reg.h (99%) rename components/soc/esp32c6/{include => register}/soc/usb_serial_jtag_struct.h (100%) rename components/soc/esp32c6/{include => register}/soc/xts_aes_reg.h (98%) diff --git a/components/soc/esp32c6/include/soc/dport_access.h b/components/soc/esp32c6/include/soc/dport_access.h index 000b58c36a1c..54eb8a0a3523 100644 --- a/components/soc/esp32c6/include/soc/dport_access.h +++ b/components/soc/esp32c6/include/soc/dport_access.h @@ -9,7 +9,6 @@ #include #include "soc.h" -#include "uart_reg.h" #ifdef __cplusplus extern "C" { diff --git a/components/soc/esp32c6/include/soc/soc.h b/components/soc/esp32c6/include/soc/soc.h index 6778a1764bce..afd44da86c4b 100644 --- a/components/soc/esp32c6/include/soc/soc.h +++ b/components/soc/esp32c6/include/soc/soc.h @@ -12,7 +12,7 @@ #endif #include "esp_bit_defs.h" -#include "reg_base.h" +#include "soc/reg_base.h" #define PRO_CPU_NUM (0) diff --git a/components/soc/esp32c6/include/soc/system_reg.h b/components/soc/esp32c6/include/soc/system_reg.h index 4ed6ac2ac25c..17cf94805edd 100644 --- a/components/soc/esp32c6/include/soc/system_reg.h +++ b/components/soc/esp32c6/include/soc/system_reg.h @@ -7,6 +7,6 @@ #include "soc/hp_system_reg.h" // TODO: IDF-5720 -#include "intpri_reg.h" +#include "soc/intpri_reg.h" #define SYSTEM_CPU_INTR_FROM_CPU_0_REG INTPRI_CPU_INTR_FROM_CPU_0_REG #define SYSTEM_CPU_INTR_FROM_CPU_0 INTPRI_CPU_INTR_FROM_CPU_0 diff --git a/components/soc/esp32c6/register/soc/.gitkeep b/components/soc/esp32c6/register/soc/.gitkeep deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/components/soc/esp32c6/include/soc/aes_reg.h b/components/soc/esp32c6/register/soc/aes_reg.h similarity index 100% rename from components/soc/esp32c6/include/soc/aes_reg.h rename to components/soc/esp32c6/register/soc/aes_reg.h diff --git a/components/soc/esp32c6/include/soc/aes_struct.h b/components/soc/esp32c6/register/soc/aes_struct.h similarity index 100% rename from components/soc/esp32c6/include/soc/aes_struct.h rename to components/soc/esp32c6/register/soc/aes_struct.h diff --git a/components/soc/esp32c6/include/soc/apb_saradc_reg.h b/components/soc/esp32c6/register/soc/apb_saradc_reg.h similarity index 100% rename from components/soc/esp32c6/include/soc/apb_saradc_reg.h rename to components/soc/esp32c6/register/soc/apb_saradc_reg.h diff --git a/components/soc/esp32c6/include/soc/apb_saradc_struct.h b/components/soc/esp32c6/register/soc/apb_saradc_struct.h similarity index 100% rename from components/soc/esp32c6/include/soc/apb_saradc_struct.h rename to components/soc/esp32c6/register/soc/apb_saradc_struct.h diff --git a/components/soc/esp32c6/include/soc/assist_debug_reg.h b/components/soc/esp32c6/register/soc/assist_debug_reg.h similarity index 99% rename from components/soc/esp32c6/include/soc/assist_debug_reg.h rename to components/soc/esp32c6/register/soc/assist_debug_reg.h index 8e0426dc6f57..d2b947d9466a 100644 --- a/components/soc/esp32c6/include/soc/assist_debug_reg.h +++ b/components/soc/esp32c6/register/soc/assist_debug_reg.h @@ -92,7 +92,7 @@ extern "C" { #define ASSIST_DEBUG_CORE_0_IRAM0_EXCEPTION_MONITOR_ENA_V 0x00000001U #define ASSIST_DEBUG_CORE_0_IRAM0_EXCEPTION_MONITOR_ENA_S 10 /** ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_ENA : R/W; bitpos: [11]; default: 0; - * DBUS busy monitor enbale + * DBUS busy monitor enable */ #define ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_ENA (BIT(11)) #define ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_ENA_M (ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_ENA_V << ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_ENA_S) @@ -270,7 +270,7 @@ extern "C" { #define ASSIST_DEBUG_CORE_0_IRAM0_EXCEPTION_MONITOR_RLS_V 0x00000001U #define ASSIST_DEBUG_CORE_0_IRAM0_EXCEPTION_MONITOR_RLS_S 10 /** ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_RLS : R/W; bitpos: [11]; default: 0; - * DBUS busy monitor interrupt enbale + * DBUS busy monitor interrupt enable */ #define ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_RLS (BIT(11)) #define ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_RLS_M (ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_RLS_V << ASSIST_DEBUG_CORE_0_DRAM0_EXCEPTION_MONITOR_RLS_S) @@ -491,7 +491,7 @@ extern "C" { */ #define ASSIST_DEBUG_CORE_0_SP_MIN_REG (DR_REG_ASSIST_DEBUG_BASE + 0x38) /** ASSIST_DEBUG_CORE_0_SP_MIN : R/W; bitpos: [31:0]; default: 0; - * core0 sp region configuration regsiter + * core0 sp region configuration register */ #define ASSIST_DEBUG_CORE_0_SP_MIN 0xFFFFFFFFU #define ASSIST_DEBUG_CORE_0_SP_MIN_M (ASSIST_DEBUG_CORE_0_SP_MIN_V << ASSIST_DEBUG_CORE_0_SP_MIN_S) @@ -515,7 +515,7 @@ extern "C" { */ #define ASSIST_DEBUG_CORE_0_SP_PC_REG (DR_REG_ASSIST_DEBUG_BASE + 0x40) /** ASSIST_DEBUG_CORE_0_SP_PC : RO; bitpos: [31:0]; default: 0; - * This regsiter stores the PC when trigger stack monitor. + * This register stores the PC when trigger stack monitor. */ #define ASSIST_DEBUG_CORE_0_SP_PC 0xFFFFFFFFU #define ASSIST_DEBUG_CORE_0_SP_PC_M (ASSIST_DEBUG_CORE_0_SP_PC_V << ASSIST_DEBUG_CORE_0_SP_PC_S) @@ -542,7 +542,7 @@ extern "C" { #define ASSIST_DEBUG_CORE_0_RCD_PDEBUGEN_S 1 /** ASSIST_DEBUG_CORE_0_RCD_PDEBUGPC_REG register - * record status regsiter + * record status register */ #define ASSIST_DEBUG_CORE_0_RCD_PDEBUGPC_REG (DR_REG_ASSIST_DEBUG_BASE + 0x48) /** ASSIST_DEBUG_CORE_0_RCD_PDEBUGPC : RO; bitpos: [31:0]; default: 0; @@ -554,7 +554,7 @@ extern "C" { #define ASSIST_DEBUG_CORE_0_RCD_PDEBUGPC_S 0 /** ASSIST_DEBUG_CORE_0_RCD_PDEBUGSP_REG register - * record status regsiter + * record status register */ #define ASSIST_DEBUG_CORE_0_RCD_PDEBUGSP_REG (DR_REG_ASSIST_DEBUG_BASE + 0x4c) /** ASSIST_DEBUG_CORE_0_RCD_PDEBUGSP : RO; bitpos: [31:0]; default: 0; diff --git a/components/soc/esp32c6/include/soc/assist_debug_struct.h b/components/soc/esp32c6/register/soc/assist_debug_struct.h similarity index 98% rename from components/soc/esp32c6/include/soc/assist_debug_struct.h rename to components/soc/esp32c6/register/soc/assist_debug_struct.h index 24c28c33efa8..9838880bc8c4 100644 --- a/components/soc/esp32c6/include/soc/assist_debug_struct.h +++ b/components/soc/esp32c6/register/soc/assist_debug_struct.h @@ -61,7 +61,7 @@ typedef union { */ uint32_t core_0_iram0_exception_monitor_ena:1; /** core_0_dram0_exception_monitor_ena : R/W; bitpos: [11]; default: 0; - * DBUS busy monitor enbale + * DBUS busy monitor enable */ uint32_t core_0_dram0_exception_monitor_ena:1; uint32_t reserved_12:20; @@ -205,7 +205,7 @@ typedef union { typedef union { struct { /** core_0_sp_min : R/W; bitpos: [31:0]; default: 0; - * core0 sp region configuration regsiter + * core0 sp region configuration register */ uint32_t core_0_sp_min:32; }; @@ -231,7 +231,7 @@ typedef union { typedef union { struct { /** core_0_sp_pc : RO; bitpos: [31:0]; default: 0; - * This regsiter stores the PC when trigger stack monitor. + * This register stores the PC when trigger stack monitor. */ uint32_t core_0_sp_pc:32; }; @@ -348,7 +348,7 @@ typedef union { */ uint32_t core_0_iram0_exception_monitor_rls:1; /** core_0_dram0_exception_monitor_rls : R/W; bitpos: [11]; default: 0; - * DBUS busy monitor interrupt enbale + * DBUS busy monitor interrupt enable */ uint32_t core_0_dram0_exception_monitor_rls:1; uint32_t reserved_12:20; @@ -415,7 +415,7 @@ typedef union { } assist_debug_core_0_intr_clr_reg_t; -/** Group: pc reording configuration register */ +/** Group: pc recording configuration register */ /** Type of core_0_rcd_en register * record enable configuration register */ @@ -435,9 +435,9 @@ typedef union { } assist_debug_core_0_rcd_en_reg_t; -/** Group: pc reording status register */ +/** Group: pc recording status register */ /** Type of core_0_rcd_pdebugpc register - * record status regsiter + * record status register */ typedef union { struct { @@ -450,7 +450,7 @@ typedef union { } assist_debug_core_0_rcd_pdebugpc_reg_t; /** Type of core_0_rcd_pdebugsp register - * record status regsiter + * record status register */ typedef union { struct { @@ -463,7 +463,7 @@ typedef union { } assist_debug_core_0_rcd_pdebugsp_reg_t; -/** Group: exception monitor regsiter */ +/** Group: exception monitor register */ /** Type of core_0_iram0_exception_monitor_0 register * exception monitor status register0 */ diff --git a/components/soc/esp32c6/include/soc/clint_reg.h b/components/soc/esp32c6/register/soc/clint_reg.h similarity index 100% rename from components/soc/esp32c6/include/soc/clint_reg.h rename to components/soc/esp32c6/register/soc/clint_reg.h diff --git a/components/soc/esp32c6/include/soc/ds_reg.h b/components/soc/esp32c6/register/soc/ds_reg.h similarity index 100% rename from components/soc/esp32c6/include/soc/ds_reg.h rename to components/soc/esp32c6/register/soc/ds_reg.h diff --git a/components/soc/esp32c6/include/soc/ds_struct.h b/components/soc/esp32c6/register/soc/ds_struct.h similarity index 100% rename from components/soc/esp32c6/include/soc/ds_struct.h rename to components/soc/esp32c6/register/soc/ds_struct.h diff --git a/components/soc/esp32c6/include/soc/ecc_mult_reg.h b/components/soc/esp32c6/register/soc/ecc_mult_reg.h similarity index 98% rename from components/soc/esp32c6/include/soc/ecc_mult_reg.h rename to components/soc/esp32c6/register/soc/ecc_mult_reg.h index dca2cc1206a9..00846e8ed63b 100644 --- a/components/soc/esp32c6/include/soc/ecc_mult_reg.h +++ b/components/soc/esp32c6/register/soc/ecc_mult_reg.h @@ -64,7 +64,7 @@ extern "C" { */ #define ECC_MULT_CONF_REG (DR_REG_ECC_MULT_BASE + 0x1c) /** ECC_MULT_START : R/W/SC; bitpos: [0]; default: 0; - * Write 1 to start caculation of ECC Accelerator. This bit will be self-cleared after + * Write 1 to start calculation of ECC Accelerator. This bit will be self-cleared after * the caculatrion is done. */ #define ECC_MULT_START (BIT(0)) diff --git a/components/soc/esp32c6/include/soc/ecc_mult_struct.h b/components/soc/esp32c6/register/soc/ecc_mult_struct.h similarity index 97% rename from components/soc/esp32c6/include/soc/ecc_mult_struct.h rename to components/soc/esp32c6/register/soc/ecc_mult_struct.h index c120fb068de7..89665324365f 100644 --- a/components/soc/esp32c6/include/soc/ecc_mult_struct.h +++ b/components/soc/esp32c6/register/soc/ecc_mult_struct.h @@ -77,7 +77,7 @@ typedef union { typedef union { struct { /** start : R/W/SC; bitpos: [0]; default: 0; - * Write 1 to start caculation of ECC Accelerator. This bit will be self-cleared after + * Write 1 to start calculation of ECC Accelerator. This bit will be self-cleared after * the caculatrion is done. */ uint32_t start:1; diff --git a/components/soc/esp32c6/include/soc/efuse_reg.h b/components/soc/esp32c6/register/soc/efuse_reg.h similarity index 99% rename from components/soc/esp32c6/include/soc/efuse_reg.h rename to components/soc/esp32c6/register/soc/efuse_reg.h index 882041ac4137..b91b0b0ff0ed 100644 --- a/components/soc/esp32c6/include/soc/efuse_reg.h +++ b/components/soc/esp32c6/register/soc/efuse_reg.h @@ -7,7 +7,7 @@ #include #include "soc/soc.h" -#include "efuse_defs.h" +#include "soc/efuse_defs.h" #ifdef __cplusplus extern "C" { #endif @@ -264,14 +264,14 @@ extern "C" { #define EFUSE_DIS_DOWNLOAD_MANUAL_ENCRYPT_V 0x00000001U #define EFUSE_DIS_DOWNLOAD_MANUAL_ENCRYPT_S 20 /** EFUSE_USB_DREFH : RO; bitpos: [22:21]; default: 0; - * Represents the single-end input threhold vrefh, 1.76 V to 2 V with step of 80 mV. + * Represents the single-end input threshold vrefh, 1.76 V to 2 V with step of 80 mV. */ #define EFUSE_USB_DREFH 0x00000003U #define EFUSE_USB_DREFH_M (EFUSE_USB_DREFH_V << EFUSE_USB_DREFH_S) #define EFUSE_USB_DREFH_V 0x00000003U #define EFUSE_USB_DREFH_S 21 /** EFUSE_USB_DREFL : RO; bitpos: [24:23]; default: 0; - * Represents the single-end input threhold vrefl, 1.76 V to 2 V with step of 80 mV. + * Represents the single-end input threshold vrefl, 1.76 V to 2 V with step of 80 mV. */ #define EFUSE_USB_DREFL 0x00000003U #define EFUSE_USB_DREFL_M (EFUSE_USB_DREFL_V << EFUSE_USB_DREFL_S) @@ -2390,7 +2390,7 @@ extern "C" { #define EFUSE_CLK_EN_S 16 /** EFUSE_CONF_REG register - * eFuse operation mode configuraiton register + * eFuse operation mode configuration register */ #define EFUSE_CONF_REG (DR_REG_EFUSE_BASE + 0x1cc) /** EFUSE_OP_CODE : R/W; bitpos: [15:0]; default: 0; diff --git a/components/soc/esp32c6/include/soc/efuse_struct.h b/components/soc/esp32c6/register/soc/efuse_struct.h similarity index 99% rename from components/soc/esp32c6/include/soc/efuse_struct.h rename to components/soc/esp32c6/register/soc/efuse_struct.h index e6971b4d5836..c92f02208c4b 100644 --- a/components/soc/esp32c6/include/soc/efuse_struct.h +++ b/components/soc/esp32c6/register/soc/efuse_struct.h @@ -239,11 +239,11 @@ typedef union { */ uint32_t dis_download_manual_encrypt:1; /** usb_drefh : RO; bitpos: [22:21]; default: 0; - * Represents the single-end input threhold vrefh, 1.76 V to 2 V with step of 80 mV. + * Represents the single-end input threshold vrefh, 1.76 V to 2 V with step of 80 mV. */ uint32_t usb_drefh:2; /** usb_drefl : RO; bitpos: [24:23]; default: 0; - * Represents the single-end input threhold vrefl, 1.76 V to 2 V with step of 80 mV. + * Represents the single-end input threshold vrefl, 1.76 V to 2 V with step of 80 mV. */ uint32_t usb_drefl:2; /** usb_exchg_pins : RO; bitpos: [25]; default: 0; @@ -2024,7 +2024,7 @@ typedef union { } efuse_clk_reg_t; /** Type of conf register - * eFuse operation mode configuraiton register + * eFuse operation mode configuration register */ typedef union { struct { diff --git a/components/soc/esp32c6/include/soc/extmem_reg.h b/components/soc/esp32c6/register/soc/extmem_reg.h similarity index 98% rename from components/soc/esp32c6/include/soc/extmem_reg.h rename to components/soc/esp32c6/register/soc/extmem_reg.h index a9cb6935862f..08a9daf433c0 100644 --- a/components/soc/esp32c6/include/soc/extmem_reg.h +++ b/components/soc/esp32c6/register/soc/extmem_reg.h @@ -243,8 +243,8 @@ ould be used together with CACHE_LOCK_ADDR_REG.*/ #define EXTMEM_L1_CACHE_SYNC_DONE_S 4 /* EXTMEM_L1_CACHE_WRITEBACK_INVALIDATE_ENA : R/W/SC ;bitpos:[3] ;default: 1'h0 ; */ /*description: The bit is used to enable writeback-invalidate operation. It will be cleared by -hardware after writeback-invalidate operation done. Note that this bit and the o -ther sync-bits (invalidate_ena, clean_ena, writeback_ena) are mutually exclusive +hardware after writeback-invalidate operation done. Note that this bit and the +other sync-bits (invalidate_ena, clean_ena, writeback_ena) are mutually exclusive , that is, those bits can not be set to 1 at the same time..*/ #define EXTMEM_L1_CACHE_WRITEBACK_INVALIDATE_ENA (BIT(3)) #define EXTMEM_L1_CACHE_WRITEBACK_INVALIDATE_ENA_M (BIT(3)) @@ -262,16 +262,16 @@ those bits can not be set to 1 at the same time..*/ /* EXTMEM_L1_CACHE_CLEAN_ENA : R/W/SC ;bitpos:[1] ;default: 1'h0 ; */ /*description: The bit is used to enable clean operation. It will be cleared by hardware after clean operation done. Note that this bit and the other sync-bits (invalidate_ena -, writeback_ena, writeback_invalidate_ena) are mutually exclusive, that is, thos -e bits can not be set to 1 at the same time..*/ +, writeback_ena, writeback_invalidate_ena) are mutually exclusive, that is, those +bits can not be set to 1 at the same time..*/ #define EXTMEM_L1_CACHE_CLEAN_ENA (BIT(1)) #define EXTMEM_L1_CACHE_CLEAN_ENA_M (BIT(1)) #define EXTMEM_L1_CACHE_CLEAN_ENA_V 0x1 #define EXTMEM_L1_CACHE_CLEAN_ENA_S 1 /* EXTMEM_L1_CACHE_INVALIDATE_ENA : R/W/SC ;bitpos:[0] ;default: 1'h1 ; */ /*description: The bit is used to enable invalidate operation. It will be cleared by hardware a -fter invalidate operation done. Note that this bit and the other sync-bits (clea -n_ena, writeback_ena, writeback_invalidate_ena) are mutually exclusive, that is, +after invalidate operation done. Note that this bit and the other sync-bits (clean_ena, +writeback_ena, writeback_invalidate_ena) are mutually exclusive, that is, those bits can not be set to 1 at the same time..*/ #define EXTMEM_L1_CACHE_INVALIDATE_ENA (BIT(0)) #define EXTMEM_L1_CACHE_INVALIDATE_ENA_M (BIT(0)) @@ -452,15 +452,15 @@ SCT1_ADDR and L1_CACHE_AUTOLOAD_SCT1_ENA..*/ #define EXTMEM_L1_CACHE_ACS_CNT_INT_CLR_REG (DR_REG_EXTMEM_BASE + 0x15C) /* EXTMEM_L1_DBUS_OVF_INT_CLR : WT ;bitpos:[5] ;default: 1'b0 ; */ -/*description: The bit is used to clear counters overflow interrupt and counters in L1-DCache d -ue to bus1 accesses L1-DCache..*/ +/*description: The bit is used to clear counters overflow interrupt and counters in L1-DCache due +to bus1 accesses L1-DCache..*/ #define EXTMEM_L1_DBUS_OVF_INT_CLR (BIT(5)) #define EXTMEM_L1_DBUS_OVF_INT_CLR_M (BIT(5)) #define EXTMEM_L1_DBUS_OVF_INT_CLR_V 0x1 #define EXTMEM_L1_DBUS_OVF_INT_CLR_S 5 /* EXTMEM_L1_IBUS_OVF_INT_CLR : WT ;bitpos:[4] ;default: 1'b0 ; */ -/*description: The bit is used to clear counters overflow interrupt and counters in L1-DCache d -ue to bus0 accesses L1-DCache..*/ +/*description: The bit is used to clear counters overflow interrupt and counters in L1-DCache due +to bus0 accesses L1-DCache..*/ #define EXTMEM_L1_IBUS_OVF_INT_CLR (BIT(4)) #define EXTMEM_L1_IBUS_OVF_INT_CLR_M (BIT(4)) #define EXTMEM_L1_IBUS_OVF_INT_CLR_V 0x1 @@ -526,8 +526,8 @@ o cpu accesses L1-DCache..*/ #define EXTMEM_L1_CACHE_ACS_FAIL_INT_ST_REG (DR_REG_EXTMEM_BASE + 0x174) /* EXTMEM_L1_CACHE_FAIL_INT_ST : RO ;bitpos:[4] ;default: 1'b0 ; */ -/*description: The bit indicates the interrupt status of access fail that occurs in L1-DCache d -ue to cpu accesses L1-DCache..*/ +/*description: The bit indicates the interrupt status of access fail that occurs in L1-DCache due +to cpu accesses L1-DCache..*/ #define EXTMEM_L1_CACHE_FAIL_INT_ST (BIT(4)) #define EXTMEM_L1_CACHE_FAIL_INT_ST_M (BIT(4)) #define EXTMEM_L1_CACHE_FAIL_INT_ST_V 0x1 @@ -740,7 +740,7 @@ ror occurs..*/ #define EXTMEM_L1_CACHE_SYNC_ERR_INT_ST_V 0x1 #define EXTMEM_L1_CACHE_SYNC_ERR_INT_ST_S 13 /* EXTMEM_L1_CACHE_PLD_ERR_INT_ST : RO ;bitpos:[11] ;default: 1'b0 ; */ -/*description: The bit indicates the status of the interrupt of L1-Cache preload-operation erro +/*description: The bit indicates the status of the interrupt of L1-Cache preload-operation error r..*/ #define EXTMEM_L1_CACHE_PLD_ERR_INT_ST (BIT(11)) #define EXTMEM_L1_CACHE_PLD_ERR_INT_ST_M (BIT(11)) @@ -778,7 +778,7 @@ load-operation is done..*/ #define EXTMEM_L1_CACHE_SYNC_RST_CTRL_REG (DR_REG_EXTMEM_BASE + 0x238) /* EXTMEM_L1_CACHE_SYNC_RST : R/W ;bitpos:[4] ;default: 1'b0 ; */ -/*description: set this bit to reset sync-logic inside L1-Cache. Recommend that this should onl +/*description: set this bit to reset sync-logic inside L1-Cache. Recommend that this should only y be used to initialize sync-logic when some fatal error of sync-logic occurs..*/ #define EXTMEM_L1_CACHE_SYNC_RST (BIT(4)) #define EXTMEM_L1_CACHE_SYNC_RST_M (BIT(4)) @@ -808,7 +808,7 @@ rks in L1-Cache..*/ #define EXTMEM_L1_UNALLOCATE_BUFFER_CLEAR_REG (DR_REG_EXTMEM_BASE + 0x244) /* EXTMEM_L1_CACHE_UNALLOC_CLR : R/W ;bitpos:[4] ;default: 1'b0 ; */ /*description: The bit is used to clear the unallocate request buffer of l1 cache where the una -llocate request is responsed but not completed..*/ +llocate request is responded but not completed..*/ #define EXTMEM_L1_CACHE_UNALLOC_CLR (BIT(4)) #define EXTMEM_L1_CACHE_UNALLOC_CLR_M (BIT(4)) #define EXTMEM_L1_CACHE_UNALLOC_CLR_V 0x1 @@ -823,7 +823,7 @@ th the others fields inside this register..*/ #define EXTMEM_L1_CACHE_MEM_OBJECT_V 0x1 #define EXTMEM_L1_CACHE_MEM_OBJECT_S 10 /* EXTMEM_L1_CACHE_TAG_OBJECT : R/W ;bitpos:[4] ;default: 1'b0 ; */ -/*description: Set this bit to set L1-Cache tag memory as object. This bit should be onehot wit +/*description: Set this bit to set L1-Cache tag memory as object. This bit should be onehot with h the others fields inside this register..*/ #define EXTMEM_L1_CACHE_TAG_OBJECT (BIT(4)) #define EXTMEM_L1_CACHE_TAG_OBJECT_M (BIT(4)) @@ -841,8 +841,8 @@ h the others fields inside this register..*/ #define EXTMEM_L1_CACHE_VADDR_REG (DR_REG_EXTMEM_BASE + 0x250) /* EXTMEM_L1_CACHE_VADDR : R/W ;bitpos:[31:0] ;default: 32'h40000000 ; */ -/*description: Those bits stores the virtual address which will decide where inside the specifi -ed tag memory object will be accessed..*/ +/*description: Those bits stores the virtual address which will decide where inside the specified +tag memory object will be accessed..*/ #define EXTMEM_L1_CACHE_VADDR 0xFFFFFFFF #define EXTMEM_L1_CACHE_VADDR_M ((EXTMEM_L1_CACHE_VADDR_V)<<(EXTMEM_L1_CACHE_VADDR_S)) #define EXTMEM_L1_CACHE_VADDR_V 0xFFFFFFFF diff --git a/components/soc/esp32c6/include/soc/extmem_struct.h b/components/soc/esp32c6/register/soc/extmem_struct.h similarity index 99% rename from components/soc/esp32c6/include/soc/extmem_struct.h rename to components/soc/esp32c6/register/soc/extmem_struct.h index d309e09235e4..d43c5fcee3d7 100644 --- a/components/soc/esp32c6/include/soc/extmem_struct.h +++ b/components/soc/esp32c6/register/soc/extmem_struct.h @@ -5115,12 +5115,12 @@ typedef union { struct { /** l1_icache0_unalloc_clr : HRO; bitpos: [0]; default: 0; * The bit is used to clear the unallocate request buffer of l1 icache0 where the - * unallocate request is responsed but not completed. + * unallocate request is responded but not completed. */ uint32_t l1_icache0_unalloc_clr:1; /** l1_icache1_unalloc_clr : HRO; bitpos: [1]; default: 0; * The bit is used to clear the unallocate request buffer of l1 icache1 where the - * unallocate request is responsed but not completed. + * unallocate request is responded but not completed. */ uint32_t l1_icache1_unalloc_clr:1; /** l1_icache2_unalloc_clr : HRO; bitpos: [2]; default: 0; @@ -5133,7 +5133,7 @@ typedef union { uint32_t l1_icache3_unalloc_clr:1; /** l1_cache_unalloc_clr : R/W; bitpos: [4]; default: 0; * The bit is used to clear the unallocate request buffer of l1 cache where the - * unallocate request is responsed but not completed. + * unallocate request is responded but not completed. */ uint32_t l1_cache_unalloc_clr:1; uint32_t reserved_5:27; @@ -5149,7 +5149,7 @@ typedef union { uint32_t reserved_0:5; /** l2_cache_unalloc_clr : HRO; bitpos: [5]; default: 0; * The bit is used to clear the unallocate request buffer of l2 icache where the - * unallocate request is responsed but not completed. + * unallocate request is responded but not completed. */ uint32_t l2_cache_unalloc_clr:1; uint32_t reserved_6:26; diff --git a/components/soc/esp32c6/include/soc/gdma_reg.h b/components/soc/esp32c6/register/soc/gdma_reg.h similarity index 100% rename from components/soc/esp32c6/include/soc/gdma_reg.h rename to components/soc/esp32c6/register/soc/gdma_reg.h diff --git a/components/soc/esp32c6/include/soc/gdma_struct.h b/components/soc/esp32c6/register/soc/gdma_struct.h similarity index 100% rename from components/soc/esp32c6/include/soc/gdma_struct.h rename to components/soc/esp32c6/register/soc/gdma_struct.h diff --git a/components/soc/esp32c6/include/soc/gpio_ext_reg.h b/components/soc/esp32c6/register/soc/gpio_ext_reg.h similarity index 100% rename from components/soc/esp32c6/include/soc/gpio_ext_reg.h rename to components/soc/esp32c6/register/soc/gpio_ext_reg.h diff --git a/components/soc/esp32c6/include/soc/gpio_ext_struct.h b/components/soc/esp32c6/register/soc/gpio_ext_struct.h similarity index 100% rename from components/soc/esp32c6/include/soc/gpio_ext_struct.h rename to components/soc/esp32c6/register/soc/gpio_ext_struct.h diff --git a/components/soc/esp32c6/include/soc/gpio_reg.h b/components/soc/esp32c6/register/soc/gpio_reg.h similarity index 100% rename from components/soc/esp32c6/include/soc/gpio_reg.h rename to components/soc/esp32c6/register/soc/gpio_reg.h diff --git a/components/soc/esp32c6/include/soc/gpio_struct.h b/components/soc/esp32c6/register/soc/gpio_struct.h similarity index 100% rename from components/soc/esp32c6/include/soc/gpio_struct.h rename to components/soc/esp32c6/register/soc/gpio_struct.h diff --git a/components/soc/esp32c6/include/soc/hardware_lock_reg.h b/components/soc/esp32c6/register/soc/hardware_lock_reg.h similarity index 93% rename from components/soc/esp32c6/include/soc/hardware_lock_reg.h rename to components/soc/esp32c6/register/soc/hardware_lock_reg.h index a9fbfb8cb06b..a80313138c48 100644 --- a/components/soc/esp32c6/include/soc/hardware_lock_reg.h +++ b/components/soc/esp32c6/register/soc/hardware_lock_reg.h @@ -12,7 +12,7 @@ extern "C" { #endif /** ATOMIC_ADDR_LOCK_REG register - * hardware lock regsiter + * hardware lock register */ #define ATOMIC_ADDR_LOCK_REG (DR_REG_ATOMIC_BASE + 0x0) /** ATOMIC_LOCK : R/W; bitpos: [1:0]; default: 0; @@ -24,7 +24,7 @@ extern "C" { #define ATOMIC_LOCK_S 0 /** ATOMIC_LR_ADDR_REG register - * gloable lr address regsiter + * gloable lr address register */ #define ATOMIC_LR_ADDR_REG (DR_REG_ATOMIC_BASE + 0x4) /** ATOMIC_GLOABLE_LR_ADDR : R/W; bitpos: [31:0]; default: 0; @@ -36,7 +36,7 @@ extern "C" { #define ATOMIC_GLOABLE_LR_ADDR_S 0 /** ATOMIC_LR_VALUE_REG register - * gloable lr value regsiter + * gloable lr value register */ #define ATOMIC_LR_VALUE_REG (DR_REG_ATOMIC_BASE + 0x8) /** ATOMIC_GLOABLE_LR_VALUE : R/W; bitpos: [31:0]; default: 0; @@ -48,11 +48,11 @@ extern "C" { #define ATOMIC_GLOABLE_LR_VALUE_S 0 /** ATOMIC_LOCK_STATUS_REG register - * lock status regsiter + * lock status register */ #define ATOMIC_LOCK_STATUS_REG (DR_REG_ATOMIC_BASE + 0xc) /** ATOMIC_LOCK_STATUS : RO; bitpos: [1:0]; default: 0; - * read hareware lock status for debug + * read hardware lock status for debug */ #define ATOMIC_LOCK_STATUS 0x00000003U #define ATOMIC_LOCK_STATUS_M (ATOMIC_LOCK_STATUS_V << ATOMIC_LOCK_STATUS_S) diff --git a/components/soc/esp32c6/include/soc/hardware_lock_struct.h b/components/soc/esp32c6/register/soc/hardware_lock_struct.h similarity index 92% rename from components/soc/esp32c6/include/soc/hardware_lock_struct.h rename to components/soc/esp32c6/register/soc/hardware_lock_struct.h index 0430212e50df..cbea0bebea03 100644 --- a/components/soc/esp32c6/include/soc/hardware_lock_struct.h +++ b/components/soc/esp32c6/register/soc/hardware_lock_struct.h @@ -12,7 +12,7 @@ extern "C" { /** Group: configuration registers */ /** Type of addr_lock register - * hardware lock regsiter + * hardware lock register */ typedef union { struct { @@ -26,7 +26,7 @@ typedef union { } atomic_addr_lock_reg_t; /** Type of lr_addr register - * gloable lr address regsiter + * gloable lr address register */ typedef union { struct { @@ -39,7 +39,7 @@ typedef union { } atomic_lr_addr_reg_t; /** Type of lr_value register - * gloable lr value regsiter + * gloable lr value register */ typedef union { struct { @@ -52,12 +52,12 @@ typedef union { } atomic_lr_value_reg_t; /** Type of lock_status register - * lock status regsiter + * lock status register */ typedef union { struct { /** lock_status : RO; bitpos: [1:0]; default: 0; - * read hareware lock status for debug + * read hardware lock status for debug */ uint32_t lock_status:2; uint32_t reserved_2:30; diff --git a/components/soc/esp32c6/include/soc/hinf_reg.h b/components/soc/esp32c6/register/soc/hinf_reg.h similarity index 100% rename from components/soc/esp32c6/include/soc/hinf_reg.h rename to components/soc/esp32c6/register/soc/hinf_reg.h diff --git a/components/soc/esp32c6/include/soc/hinf_struct.h b/components/soc/esp32c6/register/soc/hinf_struct.h similarity index 100% rename from components/soc/esp32c6/include/soc/hinf_struct.h rename to components/soc/esp32c6/register/soc/hinf_struct.h diff --git a/components/soc/esp32c6/include/soc/hmac_reg.h b/components/soc/esp32c6/register/soc/hmac_reg.h similarity index 100% rename from components/soc/esp32c6/include/soc/hmac_reg.h rename to components/soc/esp32c6/register/soc/hmac_reg.h diff --git a/components/soc/esp32c6/include/soc/hmac_struct.h b/components/soc/esp32c6/register/soc/hmac_struct.h similarity index 100% rename from components/soc/esp32c6/include/soc/hmac_struct.h rename to components/soc/esp32c6/register/soc/hmac_struct.h diff --git a/components/soc/esp32c6/include/soc/host_reg.h b/components/soc/esp32c6/register/soc/host_reg.h similarity index 100% rename from components/soc/esp32c6/include/soc/host_reg.h rename to components/soc/esp32c6/register/soc/host_reg.h diff --git a/components/soc/esp32c6/include/soc/host_struct.h b/components/soc/esp32c6/register/soc/host_struct.h similarity index 100% rename from components/soc/esp32c6/include/soc/host_struct.h rename to components/soc/esp32c6/register/soc/host_struct.h diff --git a/components/soc/esp32c6/include/soc/hp_apm_reg.h b/components/soc/esp32c6/register/soc/hp_apm_reg.h similarity index 100% rename from components/soc/esp32c6/include/soc/hp_apm_reg.h rename to components/soc/esp32c6/register/soc/hp_apm_reg.h diff --git a/components/soc/esp32c6/include/soc/hp_apm_struct.h b/components/soc/esp32c6/register/soc/hp_apm_struct.h similarity index 100% rename from components/soc/esp32c6/include/soc/hp_apm_struct.h rename to components/soc/esp32c6/register/soc/hp_apm_struct.h diff --git a/components/soc/esp32c6/include/soc/hp_system_reg.h b/components/soc/esp32c6/register/soc/hp_system_reg.h similarity index 99% rename from components/soc/esp32c6/include/soc/hp_system_reg.h rename to components/soc/esp32c6/register/soc/hp_system_reg.h index 898d0fb0e590..f32f280f237e 100644 --- a/components/soc/esp32c6/include/soc/hp_system_reg.h +++ b/components/soc/esp32c6/register/soc/hp_system_reg.h @@ -78,7 +78,7 @@ extern "C" { * 0: anti-DPA disable. 1~3: anti-DPA enable with different security level. The larger * the number, the stronger the ability to resist DPA attacks and the higher the * security level, but it will increase the computational overhead of the hardware - * crypto-accelerators. Only avaliable if HP_SYSTEM_SEC_DPA_CFG_SEL is 0. + * crypto-accelerators. Only available if HP_SYSTEM_SEC_DPA_CFG_SEL is 0. */ #define HP_SYSTEM_SEC_DPA_LEVEL 0x00000003U #define HP_SYSTEM_SEC_DPA_LEVEL_M (HP_SYSTEM_SEC_DPA_LEVEL_V << HP_SYSTEM_SEC_DPA_LEVEL_S) diff --git a/components/soc/esp32c6/include/soc/hp_system_struct.h b/components/soc/esp32c6/register/soc/hp_system_struct.h similarity index 99% rename from components/soc/esp32c6/include/soc/hp_system_struct.h rename to components/soc/esp32c6/register/soc/hp_system_struct.h index b174aa4290a8..20b8eac2f883 100644 --- a/components/soc/esp32c6/include/soc/hp_system_struct.h +++ b/components/soc/esp32c6/register/soc/hp_system_struct.h @@ -70,7 +70,7 @@ typedef union { * 0: anti-DPA disable. 1~3: anti-DPA enable with different security level. The larger * the number, the stronger the ability to resist DPA attacks and the higher the * security level, but it will increase the computational overhead of the hardware - * crypto-accelerators. Only avaliable if HP_SYSTEM_SEC_DPA_CFG_SEL is 0. + * crypto-accelerators. Only available if HP_SYSTEM_SEC_DPA_CFG_SEL is 0. */ uint32_t sec_dpa_level:2; /** sec_dpa_cfg_sel : R/W; bitpos: [2]; default: 0; diff --git a/components/soc/esp32c6/include/soc/i2c_ana_mst_reg.h b/components/soc/esp32c6/register/soc/i2c_ana_mst_reg.h similarity index 100% rename from components/soc/esp32c6/include/soc/i2c_ana_mst_reg.h rename to components/soc/esp32c6/register/soc/i2c_ana_mst_reg.h diff --git a/components/soc/esp32c6/include/soc/i2c_reg.h b/components/soc/esp32c6/register/soc/i2c_reg.h similarity index 100% rename from components/soc/esp32c6/include/soc/i2c_reg.h rename to components/soc/esp32c6/register/soc/i2c_reg.h diff --git a/components/soc/esp32c6/include/soc/i2c_struct.h b/components/soc/esp32c6/register/soc/i2c_struct.h similarity index 100% rename from components/soc/esp32c6/include/soc/i2c_struct.h rename to components/soc/esp32c6/register/soc/i2c_struct.h diff --git a/components/soc/esp32c6/include/soc/i2s_reg.h b/components/soc/esp32c6/register/soc/i2s_reg.h similarity index 99% rename from components/soc/esp32c6/include/soc/i2s_reg.h rename to components/soc/esp32c6/register/soc/i2s_reg.h index 89fd5eb84444..4f259c1131c9 100644 --- a/components/soc/esp32c6/include/soc/i2s_reg.h +++ b/components/soc/esp32c6/register/soc/i2s_reg.h @@ -361,7 +361,7 @@ extern "C" { #define I2S_TX_PCM_BYPASS_V 0x00000001U #define I2S_TX_PCM_BYPASS_S 12 /** I2S_TX_STOP_EN : R/W; bitpos: [13]; default: 1; - * Set this bit to stop disable output BCK signal and WS signal when tx FIFO is emtpy + * Set this bit to stop disable output BCK signal and WS signal when tx FIFO is empty */ #define I2S_TX_STOP_EN (BIT(13)) #define I2S_TX_STOP_EN_M (I2S_TX_STOP_EN_V << I2S_TX_STOP_EN_S) diff --git a/components/soc/esp32c6/include/soc/i2s_struct.h b/components/soc/esp32c6/register/soc/i2s_struct.h similarity index 99% rename from components/soc/esp32c6/include/soc/i2s_struct.h rename to components/soc/esp32c6/register/soc/i2s_struct.h index f7b7f069ad96..b7629e4c9890 100644 --- a/components/soc/esp32c6/include/soc/i2s_struct.h +++ b/components/soc/esp32c6/register/soc/i2s_struct.h @@ -494,7 +494,7 @@ typedef union { */ uint32_t tx_pcm_bypass:1; /** tx_stop_en : R/W; bitpos: [13]; default: 1; - * Set this bit to stop disable output BCK signal and WS signal when tx FIFO is emtpy + * Set this bit to stop disable output BCK signal and WS signal when tx FIFO is empty */ uint32_t tx_stop_en:1; uint32_t reserved_14:1; diff --git a/components/soc/esp32c6/include/soc/ieee802154_reg.h b/components/soc/esp32c6/register/soc/ieee802154_reg.h similarity index 100% rename from components/soc/esp32c6/include/soc/ieee802154_reg.h rename to components/soc/esp32c6/register/soc/ieee802154_reg.h diff --git a/components/soc/esp32c6/include/soc/ieee802154_struct.h b/components/soc/esp32c6/register/soc/ieee802154_struct.h similarity index 100% rename from components/soc/esp32c6/include/soc/ieee802154_struct.h rename to components/soc/esp32c6/register/soc/ieee802154_struct.h diff --git a/components/soc/esp32c6/include/soc/interrupt_matrix_reg.h b/components/soc/esp32c6/register/soc/interrupt_matrix_reg.h similarity index 100% rename from components/soc/esp32c6/include/soc/interrupt_matrix_reg.h rename to components/soc/esp32c6/register/soc/interrupt_matrix_reg.h diff --git a/components/soc/esp32c6/include/soc/interrupt_matrix_struct.h b/components/soc/esp32c6/register/soc/interrupt_matrix_struct.h similarity index 100% rename from components/soc/esp32c6/include/soc/interrupt_matrix_struct.h rename to components/soc/esp32c6/register/soc/interrupt_matrix_struct.h diff --git a/components/soc/esp32c6/include/soc/intpri_reg.h b/components/soc/esp32c6/register/soc/intpri_reg.h similarity index 100% rename from components/soc/esp32c6/include/soc/intpri_reg.h rename to components/soc/esp32c6/register/soc/intpri_reg.h diff --git a/components/soc/esp32c6/include/soc/intpri_struct.h b/components/soc/esp32c6/register/soc/intpri_struct.h similarity index 100% rename from components/soc/esp32c6/include/soc/intpri_struct.h rename to components/soc/esp32c6/register/soc/intpri_struct.h diff --git a/components/soc/esp32c6/include/soc/io_mux_reg.h b/components/soc/esp32c6/register/soc/io_mux_reg.h similarity index 99% rename from components/soc/esp32c6/include/soc/io_mux_reg.h rename to components/soc/esp32c6/register/soc/io_mux_reg.h index 698a2b5785b3..0adf0203ef14 100644 --- a/components/soc/esp32c6/include/soc/io_mux_reg.h +++ b/components/soc/esp32c6/register/soc/io_mux_reg.h @@ -5,7 +5,7 @@ */ #pragma once -#include "soc.h" +#include "soc/soc.h" /* The following are the bit fields for PERIPHS_IO_MUX_x_U registers */ /* Output enable in sleep mode */ diff --git a/components/soc/esp32c6/include/soc/ledc_reg.h b/components/soc/esp32c6/register/soc/ledc_reg.h similarity index 100% rename from components/soc/esp32c6/include/soc/ledc_reg.h rename to components/soc/esp32c6/register/soc/ledc_reg.h diff --git a/components/soc/esp32c6/include/soc/ledc_struct.h b/components/soc/esp32c6/register/soc/ledc_struct.h similarity index 100% rename from components/soc/esp32c6/include/soc/ledc_struct.h rename to components/soc/esp32c6/register/soc/ledc_struct.h diff --git a/components/soc/esp32c6/include/soc/lp_analog_peri_reg.h b/components/soc/esp32c6/register/soc/lp_analog_peri_reg.h similarity index 100% rename from components/soc/esp32c6/include/soc/lp_analog_peri_reg.h rename to components/soc/esp32c6/register/soc/lp_analog_peri_reg.h diff --git a/components/soc/esp32c6/include/soc/lp_analog_peri_struct.h b/components/soc/esp32c6/register/soc/lp_analog_peri_struct.h similarity index 100% rename from components/soc/esp32c6/include/soc/lp_analog_peri_struct.h rename to components/soc/esp32c6/register/soc/lp_analog_peri_struct.h diff --git a/components/soc/esp32c6/include/soc/lp_aon_reg.h b/components/soc/esp32c6/register/soc/lp_aon_reg.h similarity index 100% rename from components/soc/esp32c6/include/soc/lp_aon_reg.h rename to components/soc/esp32c6/register/soc/lp_aon_reg.h diff --git a/components/soc/esp32c6/include/soc/lp_aon_struct.h b/components/soc/esp32c6/register/soc/lp_aon_struct.h similarity index 100% rename from components/soc/esp32c6/include/soc/lp_aon_struct.h rename to components/soc/esp32c6/register/soc/lp_aon_struct.h diff --git a/components/soc/esp32c6/include/soc/lp_apm0_reg.h b/components/soc/esp32c6/register/soc/lp_apm0_reg.h similarity index 100% rename from components/soc/esp32c6/include/soc/lp_apm0_reg.h rename to components/soc/esp32c6/register/soc/lp_apm0_reg.h diff --git a/components/soc/esp32c6/include/soc/lp_apm0_struct.h b/components/soc/esp32c6/register/soc/lp_apm0_struct.h similarity index 100% rename from components/soc/esp32c6/include/soc/lp_apm0_struct.h rename to components/soc/esp32c6/register/soc/lp_apm0_struct.h diff --git a/components/soc/esp32c6/include/soc/lp_apm_reg.h b/components/soc/esp32c6/register/soc/lp_apm_reg.h similarity index 100% rename from components/soc/esp32c6/include/soc/lp_apm_reg.h rename to components/soc/esp32c6/register/soc/lp_apm_reg.h diff --git a/components/soc/esp32c6/include/soc/lp_apm_struct.h b/components/soc/esp32c6/register/soc/lp_apm_struct.h similarity index 100% rename from components/soc/esp32c6/include/soc/lp_apm_struct.h rename to components/soc/esp32c6/register/soc/lp_apm_struct.h diff --git a/components/soc/esp32c6/include/soc/lp_clkrst_reg.h b/components/soc/esp32c6/register/soc/lp_clkrst_reg.h similarity index 100% rename from components/soc/esp32c6/include/soc/lp_clkrst_reg.h rename to components/soc/esp32c6/register/soc/lp_clkrst_reg.h diff --git a/components/soc/esp32c6/include/soc/lp_clkrst_struct.h b/components/soc/esp32c6/register/soc/lp_clkrst_struct.h similarity index 100% rename from components/soc/esp32c6/include/soc/lp_clkrst_struct.h rename to components/soc/esp32c6/register/soc/lp_clkrst_struct.h diff --git a/components/soc/esp32c6/include/soc/lp_i2c_ana_mst_reg.h b/components/soc/esp32c6/register/soc/lp_i2c_ana_mst_reg.h similarity index 100% rename from components/soc/esp32c6/include/soc/lp_i2c_ana_mst_reg.h rename to components/soc/esp32c6/register/soc/lp_i2c_ana_mst_reg.h diff --git a/components/soc/esp32c6/include/soc/lp_i2c_ana_mst_struct.h b/components/soc/esp32c6/register/soc/lp_i2c_ana_mst_struct.h similarity index 100% rename from components/soc/esp32c6/include/soc/lp_i2c_ana_mst_struct.h rename to components/soc/esp32c6/register/soc/lp_i2c_ana_mst_struct.h diff --git a/components/soc/esp32c6/include/soc/lp_i2c_reg.h b/components/soc/esp32c6/register/soc/lp_i2c_reg.h similarity index 100% rename from components/soc/esp32c6/include/soc/lp_i2c_reg.h rename to components/soc/esp32c6/register/soc/lp_i2c_reg.h diff --git a/components/soc/esp32c6/include/soc/lp_i2c_struct.h b/components/soc/esp32c6/register/soc/lp_i2c_struct.h similarity index 100% rename from components/soc/esp32c6/include/soc/lp_i2c_struct.h rename to components/soc/esp32c6/register/soc/lp_i2c_struct.h diff --git a/components/soc/esp32c6/include/soc/lp_io_reg.h b/components/soc/esp32c6/register/soc/lp_io_reg.h similarity index 100% rename from components/soc/esp32c6/include/soc/lp_io_reg.h rename to components/soc/esp32c6/register/soc/lp_io_reg.h diff --git a/components/soc/esp32c6/include/soc/lp_io_struct.h b/components/soc/esp32c6/register/soc/lp_io_struct.h similarity index 100% rename from components/soc/esp32c6/include/soc/lp_io_struct.h rename to components/soc/esp32c6/register/soc/lp_io_struct.h diff --git a/components/soc/esp32c6/include/soc/lp_tee_reg.h b/components/soc/esp32c6/register/soc/lp_tee_reg.h similarity index 100% rename from components/soc/esp32c6/include/soc/lp_tee_reg.h rename to components/soc/esp32c6/register/soc/lp_tee_reg.h diff --git a/components/soc/esp32c6/include/soc/lp_tee_struct.h b/components/soc/esp32c6/register/soc/lp_tee_struct.h similarity index 100% rename from components/soc/esp32c6/include/soc/lp_tee_struct.h rename to components/soc/esp32c6/register/soc/lp_tee_struct.h diff --git a/components/soc/esp32c6/include/soc/lp_timer_reg.h b/components/soc/esp32c6/register/soc/lp_timer_reg.h similarity index 100% rename from components/soc/esp32c6/include/soc/lp_timer_reg.h rename to components/soc/esp32c6/register/soc/lp_timer_reg.h diff --git a/components/soc/esp32c6/include/soc/lp_timer_struct.h b/components/soc/esp32c6/register/soc/lp_timer_struct.h similarity index 100% rename from components/soc/esp32c6/include/soc/lp_timer_struct.h rename to components/soc/esp32c6/register/soc/lp_timer_struct.h diff --git a/components/soc/esp32c6/include/soc/lp_uart_reg.h b/components/soc/esp32c6/register/soc/lp_uart_reg.h similarity index 99% rename from components/soc/esp32c6/include/soc/lp_uart_reg.h rename to components/soc/esp32c6/register/soc/lp_uart_reg.h index b67fa1b59e80..017abf55f8e0 100644 --- a/components/soc/esp32c6/include/soc/lp_uart_reg.h +++ b/components/soc/esp32c6/register/soc/lp_uart_reg.h @@ -100,7 +100,7 @@ extern "C" { #define LP_UART_RXFIFO_TOUT_INT_RAW_V 0x00000001U #define LP_UART_RXFIFO_TOUT_INT_RAW_S 8 /** LP_UART_SW_XON_INT_RAW : R/WTC/SS; bitpos: [9]; default: 0; - * This interrupt raw bit turns to high level when receiver recevies Xon char when + * This interrupt raw bit turns to high level when receiver receives Xon char when * uart_sw_flow_con_en is set to 1. */ #define LP_UART_SW_XON_INT_RAW (BIT(9)) @@ -261,7 +261,7 @@ extern "C" { #define LP_UART_TX_BRK_DONE_INT_ST_V 0x00000001U #define LP_UART_TX_BRK_DONE_INT_ST_S 12 /** LP_UART_TX_BRK_IDLE_DONE_INT_ST : RO; bitpos: [13]; default: 0; - * This is the stauts bit for tx_brk_idle_done_int_raw when tx_brk_idle_done_int_ena + * This is the status bit for tx_brk_idle_done_int_raw when tx_brk_idle_done_int_ena * is set to 1. */ #define LP_UART_TX_BRK_IDLE_DONE_INT_ST (BIT(13)) @@ -671,7 +671,7 @@ extern "C" { #define LP_UART_STOP_BIT_NUM_V 0x00000003U #define LP_UART_STOP_BIT_NUM_S 4 /** LP_UART_TXD_BRK : R/W; bitpos: [6]; default: 0; - * Set this bit to enbale transmitter to send NULL when the process of sending data + * Set this bit to enable transmitter to send NULL when the process of sending data * is done. */ #define LP_UART_TXD_BRK (BIT(6)) @@ -1151,7 +1151,7 @@ extern "C" { */ #define LP_UART_TOUT_CONF_SYNC_REG (DR_REG_LP_UART_BASE + 0x64) /** LP_UART_RX_TOUT_EN : R/W; bitpos: [0]; default: 0; - * This is the enble bit for uart receiver's timeout function. + * This is the enable bit for uart receiver's timeout function. */ #define LP_UART_RX_TOUT_EN (BIT(0)) #define LP_UART_RX_TOUT_EN_M (LP_UART_RX_TOUT_EN_V << LP_UART_RX_TOUT_EN_S) diff --git a/components/soc/esp32c6/include/soc/lp_uart_struct.h b/components/soc/esp32c6/register/soc/lp_uart_struct.h similarity index 99% rename from components/soc/esp32c6/include/soc/lp_uart_struct.h rename to components/soc/esp32c6/register/soc/lp_uart_struct.h index 122c7d920a95..bc9993276f34 100644 --- a/components/soc/esp32c6/include/soc/lp_uart_struct.h +++ b/components/soc/esp32c6/register/soc/lp_uart_struct.h @@ -49,7 +49,7 @@ typedef union { typedef union { struct { /** rx_tout_en : R/W; bitpos: [0]; default: 0; - * This is the enble bit for uart receiver's timeout function. + * This is the enable bit for uart receiver's timeout function. */ uint32_t rx_tout_en:1; /** rx_tout_flow_dis : R/W; bitpos: [1]; default: 0; @@ -120,7 +120,7 @@ typedef union { */ uint32_t rxfifo_tout:1; /** sw_xon : R/WTC/SS; bitpos: [9]; default: 0; - * This interrupt raw bit turns to high level when receiver recevies Xon char when + * This interrupt raw bit turns to high level when receiver receives Xon char when * uart_sw_flow_con_en is set to 1. */ uint32_t sw_xon:1; @@ -224,7 +224,7 @@ typedef union { */ uint32_t tx_brk_done:1; /** tx_brk_idle_done : RO; bitpos: [13]; default: 0; - * This is the stauts bit for tx_brk_idle_done_int_raw when tx_brk_idle_done_int_ena + * This is the status bit for tx_brk_idle_done_int_raw when tx_brk_idle_done_int_ena * is set to 1. */ uint32_t tx_brk_idle_done:1; @@ -466,7 +466,7 @@ typedef union { */ uint32_t stop_bit_num:2; /** txd_brk : R/W; bitpos: [6]; default: 0; - * Set this bit to enbale transmitter to send NULL when the process of sending data + * Set this bit to enable transmitter to send NULL when the process of sending data * is done. */ uint32_t txd_brk:1; @@ -1115,7 +1115,7 @@ typedef struct lp_uart_dev_t { volatile lp_uart_id_reg_t id; } lp_uart_dev_t; -// We map the LP_UART instance to the uart_dev_t struct for convinience of using the same HAL/LL. See soc/uart_struct.h +// We map the LP_UART instance to the uart_dev_t struct for convenience of using the same HAL/LL. See soc/uart_struct.h // extern lp_uart_dev_t LP_UART; #ifndef __cplusplus diff --git a/components/soc/esp32c6/include/soc/lp_wdt_reg.h b/components/soc/esp32c6/register/soc/lp_wdt_reg.h similarity index 100% rename from components/soc/esp32c6/include/soc/lp_wdt_reg.h rename to components/soc/esp32c6/register/soc/lp_wdt_reg.h diff --git a/components/soc/esp32c6/include/soc/lp_wdt_struct.h b/components/soc/esp32c6/register/soc/lp_wdt_struct.h similarity index 100% rename from components/soc/esp32c6/include/soc/lp_wdt_struct.h rename to components/soc/esp32c6/register/soc/lp_wdt_struct.h diff --git a/components/soc/esp32c6/include/soc/lpperi_reg.h b/components/soc/esp32c6/register/soc/lpperi_reg.h similarity index 100% rename from components/soc/esp32c6/include/soc/lpperi_reg.h rename to components/soc/esp32c6/register/soc/lpperi_reg.h diff --git a/components/soc/esp32c6/include/soc/lpperi_struct.h b/components/soc/esp32c6/register/soc/lpperi_struct.h similarity index 100% rename from components/soc/esp32c6/include/soc/lpperi_struct.h rename to components/soc/esp32c6/register/soc/lpperi_struct.h diff --git a/components/soc/esp32c6/include/soc/mcpwm_reg.h b/components/soc/esp32c6/register/soc/mcpwm_reg.h similarity index 99% rename from components/soc/esp32c6/include/soc/mcpwm_reg.h rename to components/soc/esp32c6/register/soc/mcpwm_reg.h index 4eacabbc9c5e..4de6f5b9f7fd 100644 --- a/components/soc/esp32c6/include/soc/mcpwm_reg.h +++ b/components/soc/esp32c6/register/soc/mcpwm_reg.h @@ -894,7 +894,7 @@ extern "C" { #define MCPWM_DB0_RED_S 0 /** MCPWM_CARRIER0_CFG_REG register - * Carrier enable and configuratoin + * Carrier enable and configuration */ #define MCPWM_CARRIER0_CFG_REG(i) (REG_MCPWM_BASE(i) + 0x64) /** MCPWM_CHOPPER0_EN : R/W; bitpos: [0]; default: 0; @@ -1575,7 +1575,7 @@ extern "C" { #define MCPWM_DB1_RED_S 0 /** MCPWM_CARRIER1_CFG_REG register - * Carrier enable and configuratoin + * Carrier enable and configuration */ #define MCPWM_CARRIER1_CFG_REG(i) (REG_MCPWM_BASE(i) + 0x9c) /** MCPWM_CHOPPER1_EN : R/W; bitpos: [0]; default: 0; @@ -2256,7 +2256,7 @@ extern "C" { #define MCPWM_DB2_RED_S 0 /** MCPWM_CARRIER2_CFG_REG register - * Carrier enable and configuratoin + * Carrier enable and configuration */ #define MCPWM_CARRIER2_CFG_REG(i) (REG_MCPWM_BASE(i) + 0xd4) /** MCPWM_CHOPPER2_EN : R/W; bitpos: [0]; default: 0; @@ -2621,7 +2621,7 @@ extern "C" { #define MCPWM_CAP0_MODE_V 0x00000003U #define MCPWM_CAP0_MODE_S 1 /** MCPWM_CAP0_PRESCALE : R/W; bitpos: [10:3]; default: 0; - * Value of prescaling on possitive edge of CAP0. Prescale value = PWM_CAP0_PRESCALE + + * Value of prescaling on positive edge of CAP0. Prescale value = PWM_CAP0_PRESCALE + * 1 */ #define MCPWM_CAP0_PRESCALE 0x000000FFU @@ -2664,7 +2664,7 @@ extern "C" { #define MCPWM_CAP1_MODE_V 0x00000003U #define MCPWM_CAP1_MODE_S 1 /** MCPWM_CAP1_PRESCALE : R/W; bitpos: [10:3]; default: 0; - * Value of prescaling on possitive edge of CAP1. Prescale value = PWM_CAP1_PRESCALE + + * Value of prescaling on positive edge of CAP1. Prescale value = PWM_CAP1_PRESCALE + * 1 */ #define MCPWM_CAP1_PRESCALE 0x000000FFU @@ -2707,7 +2707,7 @@ extern "C" { #define MCPWM_CAP2_MODE_V 0x00000003U #define MCPWM_CAP2_MODE_S 1 /** MCPWM_CAP2_PRESCALE : R/W; bitpos: [10:3]; default: 0; - * Value of prescaling on possitive edge of CAP2. Prescale value = PWM_CAP2_PRESCALE + + * Value of prescaling on positive edge of CAP2. Prescale value = PWM_CAP2_PRESCALE + * 1 */ #define MCPWM_CAP2_PRESCALE 0x000000FFU diff --git a/components/soc/esp32c6/include/soc/mcpwm_struct.h b/components/soc/esp32c6/register/soc/mcpwm_struct.h similarity index 99% rename from components/soc/esp32c6/include/soc/mcpwm_struct.h rename to components/soc/esp32c6/register/soc/mcpwm_struct.h index 1a91a623f6bc..5fe75f3c99e0 100644 --- a/components/soc/esp32c6/include/soc/mcpwm_struct.h +++ b/components/soc/esp32c6/register/soc/mcpwm_struct.h @@ -462,7 +462,7 @@ typedef union { } mcpwm_dt_red_cfg_reg_t; /** Type of carrier_cfg register - * Carrier enable and configuratoin + * Carrier enable and configuration */ typedef union { struct { @@ -734,7 +734,7 @@ typedef union { */ uint32_t capn_mode:2; /** capn_prescale : R/W; bitpos: [10:3]; default: 0; - * Value of prescaling on possitive edge of CAPn. Prescale value = PWM_CAP0_PRESCALE + + * Value of prescaling on positive edge of CAPn. Prescale value = PWM_CAP0_PRESCALE + * 1 */ uint32_t capn_prescale:8; diff --git a/components/soc/esp32c6/include/soc/mem_monitor_reg.h b/components/soc/esp32c6/register/soc/mem_monitor_reg.h similarity index 98% rename from components/soc/esp32c6/include/soc/mem_monitor_reg.h rename to components/soc/esp32c6/register/soc/mem_monitor_reg.h index fccde61ad72b..b75a52af2122 100644 --- a/components/soc/esp32c6/include/soc/mem_monitor_reg.h +++ b/components/soc/esp32c6/register/soc/mem_monitor_reg.h @@ -12,7 +12,7 @@ extern "C" { #endif /** MEM_MONITOR_LOG_SETTING_REG register - * log config regsiter + * log config register */ #define MEM_MONITOR_LOG_SETTING_REG (DR_REG_MEM_MONITOR_BASE + 0x0) /** MEM_MONITOR_LOG_ENA : R/W; bitpos: [2:0]; default: 0; @@ -39,7 +39,7 @@ extern "C" { #define MEM_MONITOR_LOG_MEM_LOOP_ENABLE_S 7 /** MEM_MONITOR_LOG_CHECK_DATA_REG register - * check data regsiter + * check data register */ #define MEM_MONITOR_LOG_CHECK_DATA_REG (DR_REG_MEM_MONITOR_BASE + 0x4) /** MEM_MONITOR_LOG_CHECK_DATA : R/W; bitpos: [31:0]; default: 0; @@ -64,7 +64,7 @@ extern "C" { #define MEM_MONITOR_LOG_DATA_MASK_S 0 /** MEM_MONITOR_LOG_MIN_REG register - * log boundary regsiter + * log boundary register */ #define MEM_MONITOR_LOG_MIN_REG (DR_REG_MEM_MONITOR_BASE + 0xc) /** MEM_MONITOR_LOG_MIN : R/W; bitpos: [31:0]; default: 0; @@ -76,7 +76,7 @@ extern "C" { #define MEM_MONITOR_LOG_MIN_S 0 /** MEM_MONITOR_LOG_MAX_REG register - * log boundary regsiter + * log boundary register */ #define MEM_MONITOR_LOG_MAX_REG (DR_REG_MEM_MONITOR_BASE + 0x10) /** MEM_MONITOR_LOG_MAX : R/W; bitpos: [31:0]; default: 0; diff --git a/components/soc/esp32c6/include/soc/mem_monitor_struct.h b/components/soc/esp32c6/register/soc/mem_monitor_struct.h similarity index 98% rename from components/soc/esp32c6/include/soc/mem_monitor_struct.h rename to components/soc/esp32c6/register/soc/mem_monitor_struct.h index 6fd735edf544..862959b9494c 100644 --- a/components/soc/esp32c6/include/soc/mem_monitor_struct.h +++ b/components/soc/esp32c6/register/soc/mem_monitor_struct.h @@ -12,7 +12,7 @@ extern "C" { /** Group: configuration registers */ /** Type of log_setting register - * log config regsiter + * log config register */ typedef union { struct { @@ -35,7 +35,7 @@ typedef union { } mem_monitor_log_setting_reg_t; /** Type of log_check_data register - * check data regsiter + * check data register */ typedef union { struct { @@ -63,7 +63,7 @@ typedef union { } mem_monitor_log_data_mask_reg_t; /** Type of log_min register - * log boundary regsiter + * log boundary register */ typedef union { struct { @@ -76,7 +76,7 @@ typedef union { } mem_monitor_log_min_reg_t; /** Type of log_max register - * log boundary regsiter + * log boundary register */ typedef union { struct { diff --git a/components/soc/esp32c6/include/soc/otp_debug_reg.h b/components/soc/esp32c6/register/soc/otp_debug_reg.h similarity index 91% rename from components/soc/esp32c6/include/soc/otp_debug_reg.h rename to components/soc/esp32c6/register/soc/otp_debug_reg.h index 6d0e84c69f1a..49d1754d4f5b 100644 --- a/components/soc/esp32c6/include/soc/otp_debug_reg.h +++ b/components/soc/esp32c6/register/soc/otp_debug_reg.h @@ -12,7 +12,7 @@ extern "C" { #endif /** OTP_DEBUG_WR_DIS_REG register - * Otp debuger block0 data register1. + * Otp debugger block0 data register1. */ #define OTP_DEBUG_WR_DIS_REG (DR_REG_OTP_DEBUG_BASE + 0x0) /** OTP_DEBUG_BLOCK0_WR_DIS : RO; bitpos: [31:0]; default: 0; @@ -24,7 +24,7 @@ extern "C" { #define OTP_DEBUG_BLOCK0_WR_DIS_S 0 /** OTP_DEBUG_BLK0_BACKUP1_W1_REG register - * Otp debuger block0 data register2. + * Otp debugger block0 data register2. */ #define OTP_DEBUG_BLK0_BACKUP1_W1_REG (DR_REG_OTP_DEBUG_BASE + 0x4) /** OTP_DEBUG_BLOCK0_BACKUP1_W1 : RO; bitpos: [31:0]; default: 0; @@ -36,7 +36,7 @@ extern "C" { #define OTP_DEBUG_BLOCK0_BACKUP1_W1_S 0 /** OTP_DEBUG_BLK0_BACKUP1_W2_REG register - * Otp debuger block0 data register3. + * Otp debugger block0 data register3. */ #define OTP_DEBUG_BLK0_BACKUP1_W2_REG (DR_REG_OTP_DEBUG_BASE + 0x8) /** OTP_DEBUG_BLOCK0_BACKUP1_W2 : RO; bitpos: [31:0]; default: 0; @@ -48,7 +48,7 @@ extern "C" { #define OTP_DEBUG_BLOCK0_BACKUP1_W2_S 0 /** OTP_DEBUG_BLK0_BACKUP1_W3_REG register - * Otp debuger block0 data register4. + * Otp debugger block0 data register4. */ #define OTP_DEBUG_BLK0_BACKUP1_W3_REG (DR_REG_OTP_DEBUG_BASE + 0xc) /** OTP_DEBUG_BLOCK0_BACKUP1_W3 : RO; bitpos: [31:0]; default: 0; @@ -60,7 +60,7 @@ extern "C" { #define OTP_DEBUG_BLOCK0_BACKUP1_W3_S 0 /** OTP_DEBUG_BLK0_BACKUP1_W4_REG register - * Otp debuger block0 data register5. + * Otp debugger block0 data register5. */ #define OTP_DEBUG_BLK0_BACKUP1_W4_REG (DR_REG_OTP_DEBUG_BASE + 0x10) /** OTP_DEBUG_BLOCK0_BACKUP1_W4 : RO; bitpos: [31:0]; default: 0; @@ -72,7 +72,7 @@ extern "C" { #define OTP_DEBUG_BLOCK0_BACKUP1_W4_S 0 /** OTP_DEBUG_BLK0_BACKUP1_W5_REG register - * Otp debuger block0 data register6. + * Otp debugger block0 data register6. */ #define OTP_DEBUG_BLK0_BACKUP1_W5_REG (DR_REG_OTP_DEBUG_BASE + 0x14) /** OTP_DEBUG_BLOCK0_BACKUP1_W5 : RO; bitpos: [31:0]; default: 0; @@ -84,7 +84,7 @@ extern "C" { #define OTP_DEBUG_BLOCK0_BACKUP1_W5_S 0 /** OTP_DEBUG_BLK0_BACKUP2_W1_REG register - * Otp debuger block0 data register7. + * Otp debugger block0 data register7. */ #define OTP_DEBUG_BLK0_BACKUP2_W1_REG (DR_REG_OTP_DEBUG_BASE + 0x18) /** OTP_DEBUG_BLOCK0_BACKUP2_W1 : RO; bitpos: [31:0]; default: 0; @@ -96,7 +96,7 @@ extern "C" { #define OTP_DEBUG_BLOCK0_BACKUP2_W1_S 0 /** OTP_DEBUG_BLK0_BACKUP2_W2_REG register - * Otp debuger block0 data register8. + * Otp debugger block0 data register8. */ #define OTP_DEBUG_BLK0_BACKUP2_W2_REG (DR_REG_OTP_DEBUG_BASE + 0x1c) /** OTP_DEBUG_BLOCK0_BACKUP2_W2 : RO; bitpos: [31:0]; default: 0; @@ -108,7 +108,7 @@ extern "C" { #define OTP_DEBUG_BLOCK0_BACKUP2_W2_S 0 /** OTP_DEBUG_BLK0_BACKUP2_W3_REG register - * Otp debuger block0 data register9. + * Otp debugger block0 data register9. */ #define OTP_DEBUG_BLK0_BACKUP2_W3_REG (DR_REG_OTP_DEBUG_BASE + 0x20) /** OTP_DEBUG_BLOCK0_BACKUP2_W3 : RO; bitpos: [31:0]; default: 0; @@ -120,7 +120,7 @@ extern "C" { #define OTP_DEBUG_BLOCK0_BACKUP2_W3_S 0 /** OTP_DEBUG_BLK0_BACKUP2_W4_REG register - * Otp debuger block0 data register10. + * Otp debugger block0 data register10. */ #define OTP_DEBUG_BLK0_BACKUP2_W4_REG (DR_REG_OTP_DEBUG_BASE + 0x24) /** OTP_DEBUG_BLOCK0_BACKUP2_W4 : RO; bitpos: [31:0]; default: 0; @@ -132,7 +132,7 @@ extern "C" { #define OTP_DEBUG_BLOCK0_BACKUP2_W4_S 0 /** OTP_DEBUG_BLK0_BACKUP2_W5_REG register - * Otp debuger block0 data register11. + * Otp debugger block0 data register11. */ #define OTP_DEBUG_BLK0_BACKUP2_W5_REG (DR_REG_OTP_DEBUG_BASE + 0x28) /** OTP_DEBUG_BLOCK0_BACKUP2_W5 : RO; bitpos: [31:0]; default: 0; @@ -144,7 +144,7 @@ extern "C" { #define OTP_DEBUG_BLOCK0_BACKUP2_W5_S 0 /** OTP_DEBUG_BLK0_BACKUP3_W1_REG register - * Otp debuger block0 data register12. + * Otp debugger block0 data register12. */ #define OTP_DEBUG_BLK0_BACKUP3_W1_REG (DR_REG_OTP_DEBUG_BASE + 0x2c) /** OTP_DEBUG_BLOCK0_BACKUP3_W1 : RO; bitpos: [31:0]; default: 0; @@ -156,7 +156,7 @@ extern "C" { #define OTP_DEBUG_BLOCK0_BACKUP3_W1_S 0 /** OTP_DEBUG_BLK0_BACKUP3_W2_REG register - * Otp debuger block0 data register13. + * Otp debugger block0 data register13. */ #define OTP_DEBUG_BLK0_BACKUP3_W2_REG (DR_REG_OTP_DEBUG_BASE + 0x30) /** OTP_DEBUG_BLOCK0_BACKUP3_W2 : RO; bitpos: [31:0]; default: 0; @@ -168,7 +168,7 @@ extern "C" { #define OTP_DEBUG_BLOCK0_BACKUP3_W2_S 0 /** OTP_DEBUG_BLK0_BACKUP3_W3_REG register - * Otp debuger block0 data register14. + * Otp debugger block0 data register14. */ #define OTP_DEBUG_BLK0_BACKUP3_W3_REG (DR_REG_OTP_DEBUG_BASE + 0x34) /** OTP_DEBUG_BLOCK0_BACKUP3_W3 : RO; bitpos: [31:0]; default: 0; @@ -180,7 +180,7 @@ extern "C" { #define OTP_DEBUG_BLOCK0_BACKUP3_W3_S 0 /** OTP_DEBUG_BLK0_BACKUP3_W4_REG register - * Otp debuger block0 data register15. + * Otp debugger block0 data register15. */ #define OTP_DEBUG_BLK0_BACKUP3_W4_REG (DR_REG_OTP_DEBUG_BASE + 0x38) /** OTP_DEBUG_BLOCK0_BACKUP3_W4 : RO; bitpos: [31:0]; default: 0; @@ -192,7 +192,7 @@ extern "C" { #define OTP_DEBUG_BLOCK0_BACKUP3_W4_S 0 /** OTP_DEBUG_BLK0_BACKUP3_W5_REG register - * Otp debuger block0 data register16. + * Otp debugger block0 data register16. */ #define OTP_DEBUG_BLK0_BACKUP3_W5_REG (DR_REG_OTP_DEBUG_BASE + 0x3c) /** OTP_DEBUG_BLOCK0_BACKUP3_W5 : RO; bitpos: [31:0]; default: 0; @@ -204,7 +204,7 @@ extern "C" { #define OTP_DEBUG_BLOCK0_BACKUP3_W5_S 0 /** OTP_DEBUG_BLK0_BACKUP4_W1_REG register - * Otp debuger block0 data register17. + * Otp debugger block0 data register17. */ #define OTP_DEBUG_BLK0_BACKUP4_W1_REG (DR_REG_OTP_DEBUG_BASE + 0x40) /** OTP_DEBUG_BLOCK0_BACKUP4_W1 : RO; bitpos: [31:0]; default: 0; @@ -216,7 +216,7 @@ extern "C" { #define OTP_DEBUG_BLOCK0_BACKUP4_W1_S 0 /** OTP_DEBUG_BLK0_BACKUP4_W2_REG register - * Otp debuger block0 data register18. + * Otp debugger block0 data register18. */ #define OTP_DEBUG_BLK0_BACKUP4_W2_REG (DR_REG_OTP_DEBUG_BASE + 0x44) /** OTP_DEBUG_BLOCK0_BACKUP4_W2 : RO; bitpos: [31:0]; default: 0; @@ -228,7 +228,7 @@ extern "C" { #define OTP_DEBUG_BLOCK0_BACKUP4_W2_S 0 /** OTP_DEBUG_BLK0_BACKUP4_W3_REG register - * Otp debuger block0 data register19. + * Otp debugger block0 data register19. */ #define OTP_DEBUG_BLK0_BACKUP4_W3_REG (DR_REG_OTP_DEBUG_BASE + 0x48) /** OTP_DEBUG_BLOCK0_BACKUP4_W3 : RO; bitpos: [31:0]; default: 0; @@ -240,7 +240,7 @@ extern "C" { #define OTP_DEBUG_BLOCK0_BACKUP4_W3_S 0 /** OTP_DEBUG_BLK0_BACKUP4_W4_REG register - * Otp debuger block0 data register20. + * Otp debugger block0 data register20. */ #define OTP_DEBUG_BLK0_BACKUP4_W4_REG (DR_REG_OTP_DEBUG_BASE + 0x4c) /** OTP_DEBUG_BLOCK0_BACKUP4_W4 : RO; bitpos: [31:0]; default: 0; @@ -252,7 +252,7 @@ extern "C" { #define OTP_DEBUG_BLOCK0_BACKUP4_W4_S 0 /** OTP_DEBUG_BLK0_BACKUP4_W5_REG register - * Otp debuger block0 data register21. + * Otp debugger block0 data register21. */ #define OTP_DEBUG_BLK0_BACKUP4_W5_REG (DR_REG_OTP_DEBUG_BASE + 0x50) /** OTP_DEBUG_BLOCK0_BACKUP4_W5 : RO; bitpos: [31:0]; default: 0; @@ -264,7 +264,7 @@ extern "C" { #define OTP_DEBUG_BLOCK0_BACKUP4_W5_S 0 /** OTP_DEBUG_BLK1_W1_REG register - * Otp debuger block1 data register1. + * Otp debugger block1 data register1. */ #define OTP_DEBUG_BLK1_W1_REG (DR_REG_OTP_DEBUG_BASE + 0x54) /** OTP_DEBUG_BLOCK1_W1 : RO; bitpos: [31:0]; default: 0; @@ -276,7 +276,7 @@ extern "C" { #define OTP_DEBUG_BLOCK1_W1_S 0 /** OTP_DEBUG_BLK1_W2_REG register - * Otp debuger block1 data register2. + * Otp debugger block1 data register2. */ #define OTP_DEBUG_BLK1_W2_REG (DR_REG_OTP_DEBUG_BASE + 0x58) /** OTP_DEBUG_BLOCK1_W2 : RO; bitpos: [31:0]; default: 0; @@ -288,7 +288,7 @@ extern "C" { #define OTP_DEBUG_BLOCK1_W2_S 0 /** OTP_DEBUG_BLK1_W3_REG register - * Otp debuger block1 data register3. + * Otp debugger block1 data register3. */ #define OTP_DEBUG_BLK1_W3_REG (DR_REG_OTP_DEBUG_BASE + 0x5c) /** OTP_DEBUG_BLOCK1_W3 : RO; bitpos: [31:0]; default: 0; @@ -300,7 +300,7 @@ extern "C" { #define OTP_DEBUG_BLOCK1_W3_S 0 /** OTP_DEBUG_BLK1_W4_REG register - * Otp debuger block1 data register4. + * Otp debugger block1 data register4. */ #define OTP_DEBUG_BLK1_W4_REG (DR_REG_OTP_DEBUG_BASE + 0x60) /** OTP_DEBUG_BLOCK1_W4 : RO; bitpos: [31:0]; default: 0; @@ -312,7 +312,7 @@ extern "C" { #define OTP_DEBUG_BLOCK1_W4_S 0 /** OTP_DEBUG_BLK1_W5_REG register - * Otp debuger block1 data register5. + * Otp debugger block1 data register5. */ #define OTP_DEBUG_BLK1_W5_REG (DR_REG_OTP_DEBUG_BASE + 0x64) /** OTP_DEBUG_BLOCK1_W5 : RO; bitpos: [31:0]; default: 0; @@ -324,7 +324,7 @@ extern "C" { #define OTP_DEBUG_BLOCK1_W5_S 0 /** OTP_DEBUG_BLK1_W6_REG register - * Otp debuger block1 data register6. + * Otp debugger block1 data register6. */ #define OTP_DEBUG_BLK1_W6_REG (DR_REG_OTP_DEBUG_BASE + 0x68) /** OTP_DEBUG_BLOCK1_W6 : RO; bitpos: [31:0]; default: 0; @@ -336,7 +336,7 @@ extern "C" { #define OTP_DEBUG_BLOCK1_W6_S 0 /** OTP_DEBUG_BLK1_W7_REG register - * Otp debuger block1 data register7. + * Otp debugger block1 data register7. */ #define OTP_DEBUG_BLK1_W7_REG (DR_REG_OTP_DEBUG_BASE + 0x6c) /** OTP_DEBUG_BLOCK1_W7 : RO; bitpos: [31:0]; default: 0; @@ -348,7 +348,7 @@ extern "C" { #define OTP_DEBUG_BLOCK1_W7_S 0 /** OTP_DEBUG_BLK1_W8_REG register - * Otp debuger block1 data register8. + * Otp debugger block1 data register8. */ #define OTP_DEBUG_BLK1_W8_REG (DR_REG_OTP_DEBUG_BASE + 0x70) /** OTP_DEBUG_BLOCK1_W8 : RO; bitpos: [31:0]; default: 0; @@ -360,7 +360,7 @@ extern "C" { #define OTP_DEBUG_BLOCK1_W8_S 0 /** OTP_DEBUG_BLK1_W9_REG register - * Otp debuger block1 data register9. + * Otp debugger block1 data register9. */ #define OTP_DEBUG_BLK1_W9_REG (DR_REG_OTP_DEBUG_BASE + 0x74) /** OTP_DEBUG_BLOCK1_W9 : RO; bitpos: [31:0]; default: 0; @@ -372,7 +372,7 @@ extern "C" { #define OTP_DEBUG_BLOCK1_W9_S 0 /** OTP_DEBUG_BLK2_W1_REG register - * Otp debuger block2 data register1. + * Otp debugger block2 data register1. */ #define OTP_DEBUG_BLK2_W1_REG (DR_REG_OTP_DEBUG_BASE + 0x78) /** OTP_DEBUG_BLOCK2_W1 : RO; bitpos: [31:0]; default: 0; @@ -384,7 +384,7 @@ extern "C" { #define OTP_DEBUG_BLOCK2_W1_S 0 /** OTP_DEBUG_BLK2_W2_REG register - * Otp debuger block2 data register2. + * Otp debugger block2 data register2. */ #define OTP_DEBUG_BLK2_W2_REG (DR_REG_OTP_DEBUG_BASE + 0x7c) /** OTP_DEBUG_BLOCK2_W2 : RO; bitpos: [31:0]; default: 0; @@ -396,7 +396,7 @@ extern "C" { #define OTP_DEBUG_BLOCK2_W2_S 0 /** OTP_DEBUG_BLK2_W3_REG register - * Otp debuger block2 data register3. + * Otp debugger block2 data register3. */ #define OTP_DEBUG_BLK2_W3_REG (DR_REG_OTP_DEBUG_BASE + 0x80) /** OTP_DEBUG_BLOCK2_W3 : RO; bitpos: [31:0]; default: 0; @@ -408,7 +408,7 @@ extern "C" { #define OTP_DEBUG_BLOCK2_W3_S 0 /** OTP_DEBUG_BLK2_W4_REG register - * Otp debuger block2 data register4. + * Otp debugger block2 data register4. */ #define OTP_DEBUG_BLK2_W4_REG (DR_REG_OTP_DEBUG_BASE + 0x84) /** OTP_DEBUG_BLOCK2_W4 : RO; bitpos: [31:0]; default: 0; @@ -420,7 +420,7 @@ extern "C" { #define OTP_DEBUG_BLOCK2_W4_S 0 /** OTP_DEBUG_BLK2_W5_REG register - * Otp debuger block2 data register5. + * Otp debugger block2 data register5. */ #define OTP_DEBUG_BLK2_W5_REG (DR_REG_OTP_DEBUG_BASE + 0x88) /** OTP_DEBUG_BLOCK2_W5 : RO; bitpos: [31:0]; default: 0; @@ -432,7 +432,7 @@ extern "C" { #define OTP_DEBUG_BLOCK2_W5_S 0 /** OTP_DEBUG_BLK2_W6_REG register - * Otp debuger block2 data register6. + * Otp debugger block2 data register6. */ #define OTP_DEBUG_BLK2_W6_REG (DR_REG_OTP_DEBUG_BASE + 0x8c) /** OTP_DEBUG_BLOCK2_W6 : RO; bitpos: [31:0]; default: 0; @@ -444,7 +444,7 @@ extern "C" { #define OTP_DEBUG_BLOCK2_W6_S 0 /** OTP_DEBUG_BLK2_W7_REG register - * Otp debuger block2 data register7. + * Otp debugger block2 data register7. */ #define OTP_DEBUG_BLK2_W7_REG (DR_REG_OTP_DEBUG_BASE + 0x90) /** OTP_DEBUG_BLOCK2_W7 : RO; bitpos: [31:0]; default: 0; @@ -456,7 +456,7 @@ extern "C" { #define OTP_DEBUG_BLOCK2_W7_S 0 /** OTP_DEBUG_BLK2_W8_REG register - * Otp debuger block2 data register8. + * Otp debugger block2 data register8. */ #define OTP_DEBUG_BLK2_W8_REG (DR_REG_OTP_DEBUG_BASE + 0x94) /** OTP_DEBUG_BLOCK2_W8 : RO; bitpos: [31:0]; default: 0; @@ -468,7 +468,7 @@ extern "C" { #define OTP_DEBUG_BLOCK2_W8_S 0 /** OTP_DEBUG_BLK2_W9_REG register - * Otp debuger block2 data register9. + * Otp debugger block2 data register9. */ #define OTP_DEBUG_BLK2_W9_REG (DR_REG_OTP_DEBUG_BASE + 0x98) /** OTP_DEBUG_BLOCK2_W9 : RO; bitpos: [31:0]; default: 0; @@ -480,7 +480,7 @@ extern "C" { #define OTP_DEBUG_BLOCK2_W9_S 0 /** OTP_DEBUG_BLK2_W10_REG register - * Otp debuger block2 data register10. + * Otp debugger block2 data register10. */ #define OTP_DEBUG_BLK2_W10_REG (DR_REG_OTP_DEBUG_BASE + 0x9c) /** OTP_DEBUG_BLOCK2_W10 : RO; bitpos: [31:0]; default: 0; @@ -492,7 +492,7 @@ extern "C" { #define OTP_DEBUG_BLOCK2_W10_S 0 /** OTP_DEBUG_BLK2_W11_REG register - * Otp debuger block2 data register11. + * Otp debugger block2 data register11. */ #define OTP_DEBUG_BLK2_W11_REG (DR_REG_OTP_DEBUG_BASE + 0xa0) /** OTP_DEBUG_BLOCK2_W11 : RO; bitpos: [31:0]; default: 0; @@ -504,7 +504,7 @@ extern "C" { #define OTP_DEBUG_BLOCK2_W11_S 0 /** OTP_DEBUG_BLK3_W1_REG register - * Otp debuger block3 data register1. + * Otp debugger block3 data register1. */ #define OTP_DEBUG_BLK3_W1_REG (DR_REG_OTP_DEBUG_BASE + 0xa4) /** OTP_DEBUG_BLOCK3_W1 : RO; bitpos: [31:0]; default: 0; @@ -516,7 +516,7 @@ extern "C" { #define OTP_DEBUG_BLOCK3_W1_S 0 /** OTP_DEBUG_BLK3_W2_REG register - * Otp debuger block3 data register2. + * Otp debugger block3 data register2. */ #define OTP_DEBUG_BLK3_W2_REG (DR_REG_OTP_DEBUG_BASE + 0xa8) /** OTP_DEBUG_BLOCK3_W2 : RO; bitpos: [31:0]; default: 0; @@ -528,7 +528,7 @@ extern "C" { #define OTP_DEBUG_BLOCK3_W2_S 0 /** OTP_DEBUG_BLK3_W3_REG register - * Otp debuger block3 data register3. + * Otp debugger block3 data register3. */ #define OTP_DEBUG_BLK3_W3_REG (DR_REG_OTP_DEBUG_BASE + 0xac) /** OTP_DEBUG_BLOCK3_W3 : RO; bitpos: [31:0]; default: 0; @@ -540,7 +540,7 @@ extern "C" { #define OTP_DEBUG_BLOCK3_W3_S 0 /** OTP_DEBUG_BLK3_W4_REG register - * Otp debuger block3 data register4. + * Otp debugger block3 data register4. */ #define OTP_DEBUG_BLK3_W4_REG (DR_REG_OTP_DEBUG_BASE + 0xb0) /** OTP_DEBUG_BLOCK3_W4 : RO; bitpos: [31:0]; default: 0; @@ -552,7 +552,7 @@ extern "C" { #define OTP_DEBUG_BLOCK3_W4_S 0 /** OTP_DEBUG_BLK3_W5_REG register - * Otp debuger block3 data register5. + * Otp debugger block3 data register5. */ #define OTP_DEBUG_BLK3_W5_REG (DR_REG_OTP_DEBUG_BASE + 0xb4) /** OTP_DEBUG_BLOCK3_W5 : RO; bitpos: [31:0]; default: 0; @@ -564,7 +564,7 @@ extern "C" { #define OTP_DEBUG_BLOCK3_W5_S 0 /** OTP_DEBUG_BLK3_W6_REG register - * Otp debuger block3 data register6. + * Otp debugger block3 data register6. */ #define OTP_DEBUG_BLK3_W6_REG (DR_REG_OTP_DEBUG_BASE + 0xb8) /** OTP_DEBUG_BLOCK3_W6 : RO; bitpos: [31:0]; default: 0; @@ -576,7 +576,7 @@ extern "C" { #define OTP_DEBUG_BLOCK3_W6_S 0 /** OTP_DEBUG_BLK3_W7_REG register - * Otp debuger block3 data register7. + * Otp debugger block3 data register7. */ #define OTP_DEBUG_BLK3_W7_REG (DR_REG_OTP_DEBUG_BASE + 0xbc) /** OTP_DEBUG_BLOCK3_W7 : RO; bitpos: [31:0]; default: 0; @@ -588,7 +588,7 @@ extern "C" { #define OTP_DEBUG_BLOCK3_W7_S 0 /** OTP_DEBUG_BLK3_W8_REG register - * Otp debuger block3 data register8. + * Otp debugger block3 data register8. */ #define OTP_DEBUG_BLK3_W8_REG (DR_REG_OTP_DEBUG_BASE + 0xc0) /** OTP_DEBUG_BLOCK3_W8 : RO; bitpos: [31:0]; default: 0; @@ -600,7 +600,7 @@ extern "C" { #define OTP_DEBUG_BLOCK3_W8_S 0 /** OTP_DEBUG_BLK3_W9_REG register - * Otp debuger block3 data register9. + * Otp debugger block3 data register9. */ #define OTP_DEBUG_BLK3_W9_REG (DR_REG_OTP_DEBUG_BASE + 0xc4) /** OTP_DEBUG_BLOCK3_W9 : RO; bitpos: [31:0]; default: 0; @@ -612,7 +612,7 @@ extern "C" { #define OTP_DEBUG_BLOCK3_W9_S 0 /** OTP_DEBUG_BLK3_W10_REG register - * Otp debuger block3 data register10. + * Otp debugger block3 data register10. */ #define OTP_DEBUG_BLK3_W10_REG (DR_REG_OTP_DEBUG_BASE + 0xc8) /** OTP_DEBUG_BLOCK3_W10 : RO; bitpos: [31:0]; default: 0; @@ -624,7 +624,7 @@ extern "C" { #define OTP_DEBUG_BLOCK3_W10_S 0 /** OTP_DEBUG_BLK3_W11_REG register - * Otp debuger block3 data register11. + * Otp debugger block3 data register11. */ #define OTP_DEBUG_BLK3_W11_REG (DR_REG_OTP_DEBUG_BASE + 0xcc) /** OTP_DEBUG_BLOCK3_W11 : RO; bitpos: [31:0]; default: 0; @@ -636,7 +636,7 @@ extern "C" { #define OTP_DEBUG_BLOCK3_W11_S 0 /** OTP_DEBUG_BLK4_W1_REG register - * Otp debuger block4 data register1. + * Otp debugger block4 data register1. */ #define OTP_DEBUG_BLK4_W1_REG (DR_REG_OTP_DEBUG_BASE + 0xd0) /** OTP_DEBUG_BLOCK4_W1 : RO; bitpos: [31:0]; default: 0; @@ -648,7 +648,7 @@ extern "C" { #define OTP_DEBUG_BLOCK4_W1_S 0 /** OTP_DEBUG_BLK4_W2_REG register - * Otp debuger block4 data register2. + * Otp debugger block4 data register2. */ #define OTP_DEBUG_BLK4_W2_REG (DR_REG_OTP_DEBUG_BASE + 0xd4) /** OTP_DEBUG_BLOCK4_W2 : RO; bitpos: [31:0]; default: 0; @@ -660,7 +660,7 @@ extern "C" { #define OTP_DEBUG_BLOCK4_W2_S 0 /** OTP_DEBUG_BLK4_W3_REG register - * Otp debuger block4 data register3. + * Otp debugger block4 data register3. */ #define OTP_DEBUG_BLK4_W3_REG (DR_REG_OTP_DEBUG_BASE + 0xd8) /** OTP_DEBUG_BLOCK4_W3 : RO; bitpos: [31:0]; default: 0; @@ -672,7 +672,7 @@ extern "C" { #define OTP_DEBUG_BLOCK4_W3_S 0 /** OTP_DEBUG_BLK4_W4_REG register - * Otp debuger block4 data register4. + * Otp debugger block4 data register4. */ #define OTP_DEBUG_BLK4_W4_REG (DR_REG_OTP_DEBUG_BASE + 0xdc) /** OTP_DEBUG_BLOCK4_W4 : RO; bitpos: [31:0]; default: 0; @@ -684,7 +684,7 @@ extern "C" { #define OTP_DEBUG_BLOCK4_W4_S 0 /** OTP_DEBUG_BLK4_W5_REG register - * Otp debuger block4 data register5. + * Otp debugger block4 data register5. */ #define OTP_DEBUG_BLK4_W5_REG (DR_REG_OTP_DEBUG_BASE + 0xe0) /** OTP_DEBUG_BLOCK4_W5 : RO; bitpos: [31:0]; default: 0; @@ -696,7 +696,7 @@ extern "C" { #define OTP_DEBUG_BLOCK4_W5_S 0 /** OTP_DEBUG_BLK4_W6_REG register - * Otp debuger block4 data register6. + * Otp debugger block4 data register6. */ #define OTP_DEBUG_BLK4_W6_REG (DR_REG_OTP_DEBUG_BASE + 0xe4) /** OTP_DEBUG_BLOCK4_W6 : RO; bitpos: [31:0]; default: 0; @@ -708,7 +708,7 @@ extern "C" { #define OTP_DEBUG_BLOCK4_W6_S 0 /** OTP_DEBUG_BLK4_W7_REG register - * Otp debuger block4 data register7. + * Otp debugger block4 data register7. */ #define OTP_DEBUG_BLK4_W7_REG (DR_REG_OTP_DEBUG_BASE + 0xe8) /** OTP_DEBUG_BLOCK4_W7 : RO; bitpos: [31:0]; default: 0; @@ -720,7 +720,7 @@ extern "C" { #define OTP_DEBUG_BLOCK4_W7_S 0 /** OTP_DEBUG_BLK4_W8_REG register - * Otp debuger block4 data register8. + * Otp debugger block4 data register8. */ #define OTP_DEBUG_BLK4_W8_REG (DR_REG_OTP_DEBUG_BASE + 0xec) /** OTP_DEBUG_BLOCK4_W8 : RO; bitpos: [31:0]; default: 0; @@ -732,7 +732,7 @@ extern "C" { #define OTP_DEBUG_BLOCK4_W8_S 0 /** OTP_DEBUG_BLK4_W9_REG register - * Otp debuger block4 data register9. + * Otp debugger block4 data register9. */ #define OTP_DEBUG_BLK4_W9_REG (DR_REG_OTP_DEBUG_BASE + 0xf0) /** OTP_DEBUG_BLOCK4_W9 : RO; bitpos: [31:0]; default: 0; @@ -744,7 +744,7 @@ extern "C" { #define OTP_DEBUG_BLOCK4_W9_S 0 /** OTP_DEBUG_BLK4_W10_REG register - * Otp debuger block4 data registe10. + * Otp debugger block4 data registe10. */ #define OTP_DEBUG_BLK4_W10_REG (DR_REG_OTP_DEBUG_BASE + 0xf4) /** OTP_DEBUG_BLOCK4_W10 : RO; bitpos: [31:0]; default: 0; @@ -756,7 +756,7 @@ extern "C" { #define OTP_DEBUG_BLOCK4_W10_S 0 /** OTP_DEBUG_BLK4_W11_REG register - * Otp debuger block4 data register11. + * Otp debugger block4 data register11. */ #define OTP_DEBUG_BLK4_W11_REG (DR_REG_OTP_DEBUG_BASE + 0xf8) /** OTP_DEBUG_BLOCK4_W11 : RO; bitpos: [31:0]; default: 0; @@ -768,7 +768,7 @@ extern "C" { #define OTP_DEBUG_BLOCK4_W11_S 0 /** OTP_DEBUG_BLK5_W1_REG register - * Otp debuger block5 data register1. + * Otp debugger block5 data register1. */ #define OTP_DEBUG_BLK5_W1_REG (DR_REG_OTP_DEBUG_BASE + 0xfc) /** OTP_DEBUG_BLOCK5_W1 : RO; bitpos: [31:0]; default: 0; @@ -780,7 +780,7 @@ extern "C" { #define OTP_DEBUG_BLOCK5_W1_S 0 /** OTP_DEBUG_BLK5_W2_REG register - * Otp debuger block5 data register2. + * Otp debugger block5 data register2. */ #define OTP_DEBUG_BLK5_W2_REG (DR_REG_OTP_DEBUG_BASE + 0x100) /** OTP_DEBUG_BLOCK5_W2 : RO; bitpos: [31:0]; default: 0; @@ -792,7 +792,7 @@ extern "C" { #define OTP_DEBUG_BLOCK5_W2_S 0 /** OTP_DEBUG_BLK5_W3_REG register - * Otp debuger block5 data register3. + * Otp debugger block5 data register3. */ #define OTP_DEBUG_BLK5_W3_REG (DR_REG_OTP_DEBUG_BASE + 0x104) /** OTP_DEBUG_BLOCK5_W3 : RO; bitpos: [31:0]; default: 0; @@ -804,7 +804,7 @@ extern "C" { #define OTP_DEBUG_BLOCK5_W3_S 0 /** OTP_DEBUG_BLK5_W4_REG register - * Otp debuger block5 data register4. + * Otp debugger block5 data register4. */ #define OTP_DEBUG_BLK5_W4_REG (DR_REG_OTP_DEBUG_BASE + 0x108) /** OTP_DEBUG_BLOCK5_W4 : RO; bitpos: [31:0]; default: 0; @@ -816,7 +816,7 @@ extern "C" { #define OTP_DEBUG_BLOCK5_W4_S 0 /** OTP_DEBUG_BLK5_W5_REG register - * Otp debuger block5 data register5. + * Otp debugger block5 data register5. */ #define OTP_DEBUG_BLK5_W5_REG (DR_REG_OTP_DEBUG_BASE + 0x10c) /** OTP_DEBUG_BLOCK5_W5 : RO; bitpos: [31:0]; default: 0; @@ -828,7 +828,7 @@ extern "C" { #define OTP_DEBUG_BLOCK5_W5_S 0 /** OTP_DEBUG_BLK5_W6_REG register - * Otp debuger block5 data register6. + * Otp debugger block5 data register6. */ #define OTP_DEBUG_BLK5_W6_REG (DR_REG_OTP_DEBUG_BASE + 0x110) /** OTP_DEBUG_BLOCK5_W6 : RO; bitpos: [31:0]; default: 0; @@ -840,7 +840,7 @@ extern "C" { #define OTP_DEBUG_BLOCK5_W6_S 0 /** OTP_DEBUG_BLK5_W7_REG register - * Otp debuger block5 data register7. + * Otp debugger block5 data register7. */ #define OTP_DEBUG_BLK5_W7_REG (DR_REG_OTP_DEBUG_BASE + 0x114) /** OTP_DEBUG_BLOCK5_W7 : RO; bitpos: [31:0]; default: 0; @@ -852,7 +852,7 @@ extern "C" { #define OTP_DEBUG_BLOCK5_W7_S 0 /** OTP_DEBUG_BLK5_W8_REG register - * Otp debuger block5 data register8. + * Otp debugger block5 data register8. */ #define OTP_DEBUG_BLK5_W8_REG (DR_REG_OTP_DEBUG_BASE + 0x118) /** OTP_DEBUG_BLOCK5_W8 : RO; bitpos: [31:0]; default: 0; @@ -864,7 +864,7 @@ extern "C" { #define OTP_DEBUG_BLOCK5_W8_S 0 /** OTP_DEBUG_BLK5_W9_REG register - * Otp debuger block5 data register9. + * Otp debugger block5 data register9. */ #define OTP_DEBUG_BLK5_W9_REG (DR_REG_OTP_DEBUG_BASE + 0x11c) /** OTP_DEBUG_BLOCK5_W9 : RO; bitpos: [31:0]; default: 0; @@ -876,7 +876,7 @@ extern "C" { #define OTP_DEBUG_BLOCK5_W9_S 0 /** OTP_DEBUG_BLK5_W10_REG register - * Otp debuger block5 data register10. + * Otp debugger block5 data register10. */ #define OTP_DEBUG_BLK5_W10_REG (DR_REG_OTP_DEBUG_BASE + 0x120) /** OTP_DEBUG_BLOCK5_W10 : RO; bitpos: [31:0]; default: 0; @@ -888,7 +888,7 @@ extern "C" { #define OTP_DEBUG_BLOCK5_W10_S 0 /** OTP_DEBUG_BLK5_W11_REG register - * Otp debuger block5 data register11. + * Otp debugger block5 data register11. */ #define OTP_DEBUG_BLK5_W11_REG (DR_REG_OTP_DEBUG_BASE + 0x124) /** OTP_DEBUG_BLOCK5_W11 : RO; bitpos: [31:0]; default: 0; @@ -900,7 +900,7 @@ extern "C" { #define OTP_DEBUG_BLOCK5_W11_S 0 /** OTP_DEBUG_BLK6_W1_REG register - * Otp debuger block6 data register1. + * Otp debugger block6 data register1. */ #define OTP_DEBUG_BLK6_W1_REG (DR_REG_OTP_DEBUG_BASE + 0x128) /** OTP_DEBUG_BLOCK6_W1 : RO; bitpos: [31:0]; default: 0; @@ -912,7 +912,7 @@ extern "C" { #define OTP_DEBUG_BLOCK6_W1_S 0 /** OTP_DEBUG_BLK6_W2_REG register - * Otp debuger block6 data register2. + * Otp debugger block6 data register2. */ #define OTP_DEBUG_BLK6_W2_REG (DR_REG_OTP_DEBUG_BASE + 0x12c) /** OTP_DEBUG_BLOCK6_W2 : RO; bitpos: [31:0]; default: 0; @@ -924,7 +924,7 @@ extern "C" { #define OTP_DEBUG_BLOCK6_W2_S 0 /** OTP_DEBUG_BLK6_W3_REG register - * Otp debuger block6 data register3. + * Otp debugger block6 data register3. */ #define OTP_DEBUG_BLK6_W3_REG (DR_REG_OTP_DEBUG_BASE + 0x130) /** OTP_DEBUG_BLOCK6_W3 : RO; bitpos: [31:0]; default: 0; @@ -936,7 +936,7 @@ extern "C" { #define OTP_DEBUG_BLOCK6_W3_S 0 /** OTP_DEBUG_BLK6_W4_REG register - * Otp debuger block6 data register4. + * Otp debugger block6 data register4. */ #define OTP_DEBUG_BLK6_W4_REG (DR_REG_OTP_DEBUG_BASE + 0x134) /** OTP_DEBUG_BLOCK6_W4 : RO; bitpos: [31:0]; default: 0; @@ -948,7 +948,7 @@ extern "C" { #define OTP_DEBUG_BLOCK6_W4_S 0 /** OTP_DEBUG_BLK6_W5_REG register - * Otp debuger block6 data register5. + * Otp debugger block6 data register5. */ #define OTP_DEBUG_BLK6_W5_REG (DR_REG_OTP_DEBUG_BASE + 0x138) /** OTP_DEBUG_BLOCK6_W5 : RO; bitpos: [31:0]; default: 0; @@ -960,7 +960,7 @@ extern "C" { #define OTP_DEBUG_BLOCK6_W5_S 0 /** OTP_DEBUG_BLK6_W6_REG register - * Otp debuger block6 data register6. + * Otp debugger block6 data register6. */ #define OTP_DEBUG_BLK6_W6_REG (DR_REG_OTP_DEBUG_BASE + 0x13c) /** OTP_DEBUG_BLOCK6_W6 : RO; bitpos: [31:0]; default: 0; @@ -972,7 +972,7 @@ extern "C" { #define OTP_DEBUG_BLOCK6_W6_S 0 /** OTP_DEBUG_BLK6_W7_REG register - * Otp debuger block6 data register7. + * Otp debugger block6 data register7. */ #define OTP_DEBUG_BLK6_W7_REG (DR_REG_OTP_DEBUG_BASE + 0x140) /** OTP_DEBUG_BLOCK6_W7 : RO; bitpos: [31:0]; default: 0; @@ -984,7 +984,7 @@ extern "C" { #define OTP_DEBUG_BLOCK6_W7_S 0 /** OTP_DEBUG_BLK6_W8_REG register - * Otp debuger block6 data register8. + * Otp debugger block6 data register8. */ #define OTP_DEBUG_BLK6_W8_REG (DR_REG_OTP_DEBUG_BASE + 0x144) /** OTP_DEBUG_BLOCK6_W8 : RO; bitpos: [31:0]; default: 0; @@ -996,7 +996,7 @@ extern "C" { #define OTP_DEBUG_BLOCK6_W8_S 0 /** OTP_DEBUG_BLK6_W9_REG register - * Otp debuger block6 data register9. + * Otp debugger block6 data register9. */ #define OTP_DEBUG_BLK6_W9_REG (DR_REG_OTP_DEBUG_BASE + 0x148) /** OTP_DEBUG_BLOCK6_W9 : RO; bitpos: [31:0]; default: 0; @@ -1008,7 +1008,7 @@ extern "C" { #define OTP_DEBUG_BLOCK6_W9_S 0 /** OTP_DEBUG_BLK6_W10_REG register - * Otp debuger block6 data register10. + * Otp debugger block6 data register10. */ #define OTP_DEBUG_BLK6_W10_REG (DR_REG_OTP_DEBUG_BASE + 0x14c) /** OTP_DEBUG_BLOCK6_W10 : RO; bitpos: [31:0]; default: 0; @@ -1020,7 +1020,7 @@ extern "C" { #define OTP_DEBUG_BLOCK6_W10_S 0 /** OTP_DEBUG_BLK6_W11_REG register - * Otp debuger block6 data register11. + * Otp debugger block6 data register11. */ #define OTP_DEBUG_BLK6_W11_REG (DR_REG_OTP_DEBUG_BASE + 0x150) /** OTP_DEBUG_BLOCK6_W11 : RO; bitpos: [31:0]; default: 0; @@ -1032,7 +1032,7 @@ extern "C" { #define OTP_DEBUG_BLOCK6_W11_S 0 /** OTP_DEBUG_BLK7_W1_REG register - * Otp debuger block7 data register1. + * Otp debugger block7 data register1. */ #define OTP_DEBUG_BLK7_W1_REG (DR_REG_OTP_DEBUG_BASE + 0x154) /** OTP_DEBUG_BLOCK7_W1 : RO; bitpos: [31:0]; default: 0; @@ -1044,7 +1044,7 @@ extern "C" { #define OTP_DEBUG_BLOCK7_W1_S 0 /** OTP_DEBUG_BLK7_W2_REG register - * Otp debuger block7 data register2. + * Otp debugger block7 data register2. */ #define OTP_DEBUG_BLK7_W2_REG (DR_REG_OTP_DEBUG_BASE + 0x158) /** OTP_DEBUG_BLOCK7_W2 : RO; bitpos: [31:0]; default: 0; @@ -1056,7 +1056,7 @@ extern "C" { #define OTP_DEBUG_BLOCK7_W2_S 0 /** OTP_DEBUG_BLK7_W3_REG register - * Otp debuger block7 data register3. + * Otp debugger block7 data register3. */ #define OTP_DEBUG_BLK7_W3_REG (DR_REG_OTP_DEBUG_BASE + 0x15c) /** OTP_DEBUG_BLOCK7_W3 : RO; bitpos: [31:0]; default: 0; @@ -1068,7 +1068,7 @@ extern "C" { #define OTP_DEBUG_BLOCK7_W3_S 0 /** OTP_DEBUG_BLK7_W4_REG register - * Otp debuger block7 data register4. + * Otp debugger block7 data register4. */ #define OTP_DEBUG_BLK7_W4_REG (DR_REG_OTP_DEBUG_BASE + 0x160) /** OTP_DEBUG_BLOCK7_W4 : RO; bitpos: [31:0]; default: 0; @@ -1080,7 +1080,7 @@ extern "C" { #define OTP_DEBUG_BLOCK7_W4_S 0 /** OTP_DEBUG_BLK7_W5_REG register - * Otp debuger block7 data register5. + * Otp debugger block7 data register5. */ #define OTP_DEBUG_BLK7_W5_REG (DR_REG_OTP_DEBUG_BASE + 0x164) /** OTP_DEBUG_BLOCK7_W5 : RO; bitpos: [31:0]; default: 0; @@ -1092,7 +1092,7 @@ extern "C" { #define OTP_DEBUG_BLOCK7_W5_S 0 /** OTP_DEBUG_BLK7_W6_REG register - * Otp debuger block7 data register6. + * Otp debugger block7 data register6. */ #define OTP_DEBUG_BLK7_W6_REG (DR_REG_OTP_DEBUG_BASE + 0x168) /** OTP_DEBUG_BLOCK7_W6 : RO; bitpos: [31:0]; default: 0; @@ -1104,7 +1104,7 @@ extern "C" { #define OTP_DEBUG_BLOCK7_W6_S 0 /** OTP_DEBUG_BLK7_W7_REG register - * Otp debuger block7 data register7. + * Otp debugger block7 data register7. */ #define OTP_DEBUG_BLK7_W7_REG (DR_REG_OTP_DEBUG_BASE + 0x16c) /** OTP_DEBUG_BLOCK7_W7 : RO; bitpos: [31:0]; default: 0; @@ -1116,7 +1116,7 @@ extern "C" { #define OTP_DEBUG_BLOCK7_W7_S 0 /** OTP_DEBUG_BLK7_W8_REG register - * Otp debuger block7 data register8. + * Otp debugger block7 data register8. */ #define OTP_DEBUG_BLK7_W8_REG (DR_REG_OTP_DEBUG_BASE + 0x170) /** OTP_DEBUG_BLOCK7_W8 : RO; bitpos: [31:0]; default: 0; @@ -1128,7 +1128,7 @@ extern "C" { #define OTP_DEBUG_BLOCK7_W8_S 0 /** OTP_DEBUG_BLK7_W9_REG register - * Otp debuger block7 data register9. + * Otp debugger block7 data register9. */ #define OTP_DEBUG_BLK7_W9_REG (DR_REG_OTP_DEBUG_BASE + 0x174) /** OTP_DEBUG_BLOCK7_W9 : RO; bitpos: [31:0]; default: 0; @@ -1140,7 +1140,7 @@ extern "C" { #define OTP_DEBUG_BLOCK7_W9_S 0 /** OTP_DEBUG_BLK7_W10_REG register - * Otp debuger block7 data register10. + * Otp debugger block7 data register10. */ #define OTP_DEBUG_BLK7_W10_REG (DR_REG_OTP_DEBUG_BASE + 0x178) /** OTP_DEBUG_BLOCK7_W10 : RO; bitpos: [31:0]; default: 0; @@ -1152,7 +1152,7 @@ extern "C" { #define OTP_DEBUG_BLOCK7_W10_S 0 /** OTP_DEBUG_BLK7_W11_REG register - * Otp debuger block7 data register11. + * Otp debugger block7 data register11. */ #define OTP_DEBUG_BLK7_W11_REG (DR_REG_OTP_DEBUG_BASE + 0x17c) /** OTP_DEBUG_BLOCK7_W11 : RO; bitpos: [31:0]; default: 0; @@ -1164,7 +1164,7 @@ extern "C" { #define OTP_DEBUG_BLOCK7_W11_S 0 /** OTP_DEBUG_BLK8_W1_REG register - * Otp debuger block8 data register1. + * Otp debugger block8 data register1. */ #define OTP_DEBUG_BLK8_W1_REG (DR_REG_OTP_DEBUG_BASE + 0x180) /** OTP_DEBUG_BLOCK8_W1 : RO; bitpos: [31:0]; default: 0; @@ -1176,7 +1176,7 @@ extern "C" { #define OTP_DEBUG_BLOCK8_W1_S 0 /** OTP_DEBUG_BLK8_W2_REG register - * Otp debuger block8 data register2. + * Otp debugger block8 data register2. */ #define OTP_DEBUG_BLK8_W2_REG (DR_REG_OTP_DEBUG_BASE + 0x184) /** OTP_DEBUG_BLOCK8_W2 : RO; bitpos: [31:0]; default: 0; @@ -1188,7 +1188,7 @@ extern "C" { #define OTP_DEBUG_BLOCK8_W2_S 0 /** OTP_DEBUG_BLK8_W3_REG register - * Otp debuger block8 data register3. + * Otp debugger block8 data register3. */ #define OTP_DEBUG_BLK8_W3_REG (DR_REG_OTP_DEBUG_BASE + 0x188) /** OTP_DEBUG_BLOCK8_W3 : RO; bitpos: [31:0]; default: 0; @@ -1200,7 +1200,7 @@ extern "C" { #define OTP_DEBUG_BLOCK8_W3_S 0 /** OTP_DEBUG_BLK8_W4_REG register - * Otp debuger block8 data register4. + * Otp debugger block8 data register4. */ #define OTP_DEBUG_BLK8_W4_REG (DR_REG_OTP_DEBUG_BASE + 0x18c) /** OTP_DEBUG_BLOCK8_W4 : RO; bitpos: [31:0]; default: 0; @@ -1212,7 +1212,7 @@ extern "C" { #define OTP_DEBUG_BLOCK8_W4_S 0 /** OTP_DEBUG_BLK8_W5_REG register - * Otp debuger block8 data register5. + * Otp debugger block8 data register5. */ #define OTP_DEBUG_BLK8_W5_REG (DR_REG_OTP_DEBUG_BASE + 0x190) /** OTP_DEBUG_BLOCK8_W5 : RO; bitpos: [31:0]; default: 0; @@ -1224,7 +1224,7 @@ extern "C" { #define OTP_DEBUG_BLOCK8_W5_S 0 /** OTP_DEBUG_BLK8_W6_REG register - * Otp debuger block8 data register6. + * Otp debugger block8 data register6. */ #define OTP_DEBUG_BLK8_W6_REG (DR_REG_OTP_DEBUG_BASE + 0x194) /** OTP_DEBUG_BLOCK8_W6 : RO; bitpos: [31:0]; default: 0; @@ -1236,7 +1236,7 @@ extern "C" { #define OTP_DEBUG_BLOCK8_W6_S 0 /** OTP_DEBUG_BLK8_W7_REG register - * Otp debuger block8 data register7. + * Otp debugger block8 data register7. */ #define OTP_DEBUG_BLK8_W7_REG (DR_REG_OTP_DEBUG_BASE + 0x198) /** OTP_DEBUG_BLOCK8_W7 : RO; bitpos: [31:0]; default: 0; @@ -1248,7 +1248,7 @@ extern "C" { #define OTP_DEBUG_BLOCK8_W7_S 0 /** OTP_DEBUG_BLK8_W8_REG register - * Otp debuger block8 data register8. + * Otp debugger block8 data register8. */ #define OTP_DEBUG_BLK8_W8_REG (DR_REG_OTP_DEBUG_BASE + 0x19c) /** OTP_DEBUG_BLOCK8_W8 : RO; bitpos: [31:0]; default: 0; @@ -1260,7 +1260,7 @@ extern "C" { #define OTP_DEBUG_BLOCK8_W8_S 0 /** OTP_DEBUG_BLK8_W9_REG register - * Otp debuger block8 data register9. + * Otp debugger block8 data register9. */ #define OTP_DEBUG_BLK8_W9_REG (DR_REG_OTP_DEBUG_BASE + 0x1a0) /** OTP_DEBUG_BLOCK8_W9 : RO; bitpos: [31:0]; default: 0; @@ -1272,7 +1272,7 @@ extern "C" { #define OTP_DEBUG_BLOCK8_W9_S 0 /** OTP_DEBUG_BLK8_W10_REG register - * Otp debuger block8 data register10. + * Otp debugger block8 data register10. */ #define OTP_DEBUG_BLK8_W10_REG (DR_REG_OTP_DEBUG_BASE + 0x1a4) /** OTP_DEBUG_BLOCK8_W10 : RO; bitpos: [31:0]; default: 0; @@ -1284,7 +1284,7 @@ extern "C" { #define OTP_DEBUG_BLOCK8_W10_S 0 /** OTP_DEBUG_BLK8_W11_REG register - * Otp debuger block8 data register11. + * Otp debugger block8 data register11. */ #define OTP_DEBUG_BLK8_W11_REG (DR_REG_OTP_DEBUG_BASE + 0x1a8) /** OTP_DEBUG_BLOCK8_W11 : RO; bitpos: [31:0]; default: 0; @@ -1296,7 +1296,7 @@ extern "C" { #define OTP_DEBUG_BLOCK8_W11_S 0 /** OTP_DEBUG_BLK9_W1_REG register - * Otp debuger block9 data register1. + * Otp debugger block9 data register1. */ #define OTP_DEBUG_BLK9_W1_REG (DR_REG_OTP_DEBUG_BASE + 0x1ac) /** OTP_DEBUG_BLOCK9_W1 : RO; bitpos: [31:0]; default: 0; @@ -1308,7 +1308,7 @@ extern "C" { #define OTP_DEBUG_BLOCK9_W1_S 0 /** OTP_DEBUG_BLK9_W2_REG register - * Otp debuger block9 data register2. + * Otp debugger block9 data register2. */ #define OTP_DEBUG_BLK9_W2_REG (DR_REG_OTP_DEBUG_BASE + 0x1b0) /** OTP_DEBUG_BLOCK9_W2 : RO; bitpos: [31:0]; default: 0; @@ -1320,7 +1320,7 @@ extern "C" { #define OTP_DEBUG_BLOCK9_W2_S 0 /** OTP_DEBUG_BLK9_W3_REG register - * Otp debuger block9 data register3. + * Otp debugger block9 data register3. */ #define OTP_DEBUG_BLK9_W3_REG (DR_REG_OTP_DEBUG_BASE + 0x1b4) /** OTP_DEBUG_BLOCK9_W3 : RO; bitpos: [31:0]; default: 0; @@ -1332,7 +1332,7 @@ extern "C" { #define OTP_DEBUG_BLOCK9_W3_S 0 /** OTP_DEBUG_BLK9_W4_REG register - * Otp debuger block9 data register4. + * Otp debugger block9 data register4. */ #define OTP_DEBUG_BLK9_W4_REG (DR_REG_OTP_DEBUG_BASE + 0x1b8) /** OTP_DEBUG_BLOCK9_W4 : RO; bitpos: [31:0]; default: 0; @@ -1344,7 +1344,7 @@ extern "C" { #define OTP_DEBUG_BLOCK9_W4_S 0 /** OTP_DEBUG_BLK9_W5_REG register - * Otp debuger block9 data register5. + * Otp debugger block9 data register5. */ #define OTP_DEBUG_BLK9_W5_REG (DR_REG_OTP_DEBUG_BASE + 0x1bc) /** OTP_DEBUG_BLOCK9_W5 : RO; bitpos: [31:0]; default: 0; @@ -1356,7 +1356,7 @@ extern "C" { #define OTP_DEBUG_BLOCK9_W5_S 0 /** OTP_DEBUG_BLK9_W6_REG register - * Otp debuger block9 data register6. + * Otp debugger block9 data register6. */ #define OTP_DEBUG_BLK9_W6_REG (DR_REG_OTP_DEBUG_BASE + 0x1c0) /** OTP_DEBUG_BLOCK9_W6 : RO; bitpos: [31:0]; default: 0; @@ -1368,7 +1368,7 @@ extern "C" { #define OTP_DEBUG_BLOCK9_W6_S 0 /** OTP_DEBUG_BLK9_W7_REG register - * Otp debuger block9 data register7. + * Otp debugger block9 data register7. */ #define OTP_DEBUG_BLK9_W7_REG (DR_REG_OTP_DEBUG_BASE + 0x1c4) /** OTP_DEBUG_BLOCK9_W7 : RO; bitpos: [31:0]; default: 0; @@ -1380,7 +1380,7 @@ extern "C" { #define OTP_DEBUG_BLOCK9_W7_S 0 /** OTP_DEBUG_BLK9_W8_REG register - * Otp debuger block9 data register8. + * Otp debugger block9 data register8. */ #define OTP_DEBUG_BLK9_W8_REG (DR_REG_OTP_DEBUG_BASE + 0x1c8) /** OTP_DEBUG_BLOCK9_W8 : RO; bitpos: [31:0]; default: 0; @@ -1392,7 +1392,7 @@ extern "C" { #define OTP_DEBUG_BLOCK9_W8_S 0 /** OTP_DEBUG_BLK9_W9_REG register - * Otp debuger block9 data register9. + * Otp debugger block9 data register9. */ #define OTP_DEBUG_BLK9_W9_REG (DR_REG_OTP_DEBUG_BASE + 0x1cc) /** OTP_DEBUG_BLOCK9_W9 : RO; bitpos: [31:0]; default: 0; @@ -1404,7 +1404,7 @@ extern "C" { #define OTP_DEBUG_BLOCK9_W9_S 0 /** OTP_DEBUG_BLK9_W10_REG register - * Otp debuger block9 data register10. + * Otp debugger block9 data register10. */ #define OTP_DEBUG_BLK9_W10_REG (DR_REG_OTP_DEBUG_BASE + 0x1d0) /** OTP_DEBUG_BLOCK9_W10 : RO; bitpos: [31:0]; default: 0; @@ -1416,7 +1416,7 @@ extern "C" { #define OTP_DEBUG_BLOCK9_W10_S 0 /** OTP_DEBUG_BLK9_W11_REG register - * Otp debuger block9 data register11. + * Otp debugger block9 data register11. */ #define OTP_DEBUG_BLK9_W11_REG (DR_REG_OTP_DEBUG_BASE + 0x1d4) /** OTP_DEBUG_BLOCK9_W11 : RO; bitpos: [31:0]; default: 0; @@ -1428,7 +1428,7 @@ extern "C" { #define OTP_DEBUG_BLOCK9_W11_S 0 /** OTP_DEBUG_BLK10_W1_REG register - * Otp debuger block10 data register1. + * Otp debugger block10 data register1. */ #define OTP_DEBUG_BLK10_W1_REG (DR_REG_OTP_DEBUG_BASE + 0x1d8) /** OTP_DEBUG_BLOCK10_W1 : RO; bitpos: [31:0]; default: 0; @@ -1440,7 +1440,7 @@ extern "C" { #define OTP_DEBUG_BLOCK10_W1_S 0 /** OTP_DEBUG_BLK10_W2_REG register - * Otp debuger block10 data register2. + * Otp debugger block10 data register2. */ #define OTP_DEBUG_BLK10_W2_REG (DR_REG_OTP_DEBUG_BASE + 0x1dc) /** OTP_DEBUG_BLOCK10_W2 : RO; bitpos: [31:0]; default: 0; @@ -1452,7 +1452,7 @@ extern "C" { #define OTP_DEBUG_BLOCK10_W2_S 0 /** OTP_DEBUG_BLK10_W3_REG register - * Otp debuger block10 data register3. + * Otp debugger block10 data register3. */ #define OTP_DEBUG_BLK10_W3_REG (DR_REG_OTP_DEBUG_BASE + 0x1e0) /** OTP_DEBUG_BLOCK10_W3 : RO; bitpos: [31:0]; default: 0; @@ -1464,7 +1464,7 @@ extern "C" { #define OTP_DEBUG_BLOCK10_W3_S 0 /** OTP_DEBUG_BLK10_W4_REG register - * Otp debuger block10 data register4. + * Otp debugger block10 data register4. */ #define OTP_DEBUG_BLK10_W4_REG (DR_REG_OTP_DEBUG_BASE + 0x1e4) /** OTP_DEBUG_BLOCK10_W4 : RO; bitpos: [31:0]; default: 0; @@ -1476,7 +1476,7 @@ extern "C" { #define OTP_DEBUG_BLOCK10_W4_S 0 /** OTP_DEBUG_BLK10_W5_REG register - * Otp debuger block10 data register5. + * Otp debugger block10 data register5. */ #define OTP_DEBUG_BLK10_W5_REG (DR_REG_OTP_DEBUG_BASE + 0x1e8) /** OTP_DEBUG_BLOCK10_W5 : RO; bitpos: [31:0]; default: 0; @@ -1488,7 +1488,7 @@ extern "C" { #define OTP_DEBUG_BLOCK10_W5_S 0 /** OTP_DEBUG_BLK10_W6_REG register - * Otp debuger block10 data register6. + * Otp debugger block10 data register6. */ #define OTP_DEBUG_BLK10_W6_REG (DR_REG_OTP_DEBUG_BASE + 0x1ec) /** OTP_DEBUG_BLOCK10_W6 : RO; bitpos: [31:0]; default: 0; @@ -1500,7 +1500,7 @@ extern "C" { #define OTP_DEBUG_BLOCK10_W6_S 0 /** OTP_DEBUG_BLK10_W7_REG register - * Otp debuger block10 data register7. + * Otp debugger block10 data register7. */ #define OTP_DEBUG_BLK10_W7_REG (DR_REG_OTP_DEBUG_BASE + 0x1f0) /** OTP_DEBUG_BLOCK10_W7 : RO; bitpos: [31:0]; default: 0; @@ -1512,7 +1512,7 @@ extern "C" { #define OTP_DEBUG_BLOCK10_W7_S 0 /** OTP_DEBUG_BLK10_W8_REG register - * Otp debuger block10 data register8. + * Otp debugger block10 data register8. */ #define OTP_DEBUG_BLK10_W8_REG (DR_REG_OTP_DEBUG_BASE + 0x1f4) /** OTP_DEBUG_BLOCK10_W8 : RO; bitpos: [31:0]; default: 0; @@ -1524,7 +1524,7 @@ extern "C" { #define OTP_DEBUG_BLOCK10_W8_S 0 /** OTP_DEBUG_BLK10_W9_REG register - * Otp debuger block10 data register9. + * Otp debugger block10 data register9. */ #define OTP_DEBUG_BLK10_W9_REG (DR_REG_OTP_DEBUG_BASE + 0x1f8) /** OTP_DEBUG_BLOCK10_W9 : RO; bitpos: [31:0]; default: 0; @@ -1536,7 +1536,7 @@ extern "C" { #define OTP_DEBUG_BLOCK10_W9_S 0 /** OTP_DEBUG_BLK10_W10_REG register - * Otp debuger block10 data register10. + * Otp debugger block10 data register10. */ #define OTP_DEBUG_BLK10_W10_REG (DR_REG_OTP_DEBUG_BASE + 0x1fc) /** OTP_DEBUG_BLOCK19_W10 : RO; bitpos: [31:0]; default: 0; @@ -1548,7 +1548,7 @@ extern "C" { #define OTP_DEBUG_BLOCK19_W10_S 0 /** OTP_DEBUG_BLK10_W11_REG register - * Otp debuger block10 data register11. + * Otp debugger block10 data register11. */ #define OTP_DEBUG_BLK10_W11_REG (DR_REG_OTP_DEBUG_BASE + 0x200) /** OTP_DEBUG_BLOCK10_W11 : RO; bitpos: [31:0]; default: 0; @@ -1560,7 +1560,7 @@ extern "C" { #define OTP_DEBUG_BLOCK10_W11_S 0 /** OTP_DEBUG_CLK_REG register - * Otp debuger clk_en configuration register. + * Otp debugger clk_en configuration register. */ #define OTP_DEBUG_CLK_REG (DR_REG_OTP_DEBUG_BASE + 0x204) /** OTP_DEBUG_CLK_EN : R/W; bitpos: [0]; default: 0; diff --git a/components/soc/esp32c6/include/soc/otp_debug_struct.h b/components/soc/esp32c6/register/soc/otp_debug_struct.h similarity index 89% rename from components/soc/esp32c6/include/soc/otp_debug_struct.h rename to components/soc/esp32c6/register/soc/otp_debug_struct.h index 5b0737475f7d..8ed1fe280296 100644 --- a/components/soc/esp32c6/include/soc/otp_debug_struct.h +++ b/components/soc/esp32c6/register/soc/otp_debug_struct.h @@ -12,7 +12,7 @@ extern "C" { /** Group: OTP_DEBUG Block0 Write Disable Data */ /** Type of wr_dis register - * Otp debuger block0 data register1. + * Otp debugger block0 data register1. */ typedef union { struct { @@ -27,7 +27,7 @@ typedef union { /** Group: OTP_DEBUG Block0 Backup1 Word1 Data */ /** Type of blk0_backup1_w1 register - * Otp debuger block0 data register2. + * Otp debugger block0 data register2. */ typedef union { struct { @@ -42,7 +42,7 @@ typedef union { /** Group: OTP_DEBUG Block0 Backup1 Word2 Data */ /** Type of blk0_backup1_w2 register - * Otp debuger block0 data register3. + * Otp debugger block0 data register3. */ typedef union { struct { @@ -57,7 +57,7 @@ typedef union { /** Group: OTP_DEBUG Block0 Backup1 Word3 Data */ /** Type of blk0_backup1_w3 register - * Otp debuger block0 data register4. + * Otp debugger block0 data register4. */ typedef union { struct { @@ -72,7 +72,7 @@ typedef union { /** Group: OTP_DEBUG Block0 Backup1 Word4 Data */ /** Type of blk0_backup1_w4 register - * Otp debuger block0 data register5. + * Otp debugger block0 data register5. */ typedef union { struct { @@ -87,7 +87,7 @@ typedef union { /** Group: OTP_DEBUG Block0 Backup1 Word5 Data */ /** Type of blk0_backup1_w5 register - * Otp debuger block0 data register6. + * Otp debugger block0 data register6. */ typedef union { struct { @@ -102,7 +102,7 @@ typedef union { /** Group: OTP_DEBUG Block0 Backup2 Word1 Data */ /** Type of blk0_backup2_w1 register - * Otp debuger block0 data register7. + * Otp debugger block0 data register7. */ typedef union { struct { @@ -117,7 +117,7 @@ typedef union { /** Group: OTP_DEBUG Block0 Backup2 Word2 Data */ /** Type of blk0_backup2_w2 register - * Otp debuger block0 data register8. + * Otp debugger block0 data register8. */ typedef union { struct { @@ -132,7 +132,7 @@ typedef union { /** Group: OTP_DEBUG Block0 Backup2 Word3 Data */ /** Type of blk0_backup2_w3 register - * Otp debuger block0 data register9. + * Otp debugger block0 data register9. */ typedef union { struct { @@ -147,7 +147,7 @@ typedef union { /** Group: OTP_DEBUG Block0 Backup2 Word4 Data */ /** Type of blk0_backup2_w4 register - * Otp debuger block0 data register10. + * Otp debugger block0 data register10. */ typedef union { struct { @@ -162,7 +162,7 @@ typedef union { /** Group: OTP_DEBUG Block0 Backup2 Word5 Data */ /** Type of blk0_backup2_w5 register - * Otp debuger block0 data register11. + * Otp debugger block0 data register11. */ typedef union { struct { @@ -177,7 +177,7 @@ typedef union { /** Group: OTP_DEBUG Block0 Backup3 Word1 Data */ /** Type of blk0_backup3_w1 register - * Otp debuger block0 data register12. + * Otp debugger block0 data register12. */ typedef union { struct { @@ -192,7 +192,7 @@ typedef union { /** Group: OTP_DEBUG Block0 Backup3 Word2 Data */ /** Type of blk0_backup3_w2 register - * Otp debuger block0 data register13. + * Otp debugger block0 data register13. */ typedef union { struct { @@ -207,7 +207,7 @@ typedef union { /** Group: OTP_DEBUG Block0 Backup3 Word3 Data */ /** Type of blk0_backup3_w3 register - * Otp debuger block0 data register14. + * Otp debugger block0 data register14. */ typedef union { struct { @@ -222,7 +222,7 @@ typedef union { /** Group: OTP_DEBUG Block0 Backup3 Word4 Data */ /** Type of blk0_backup3_w4 register - * Otp debuger block0 data register15. + * Otp debugger block0 data register15. */ typedef union { struct { @@ -237,7 +237,7 @@ typedef union { /** Group: OTP_DEBUG Block0 Backup3 Word5 Data */ /** Type of blk0_backup3_w5 register - * Otp debuger block0 data register16. + * Otp debugger block0 data register16. */ typedef union { struct { @@ -252,7 +252,7 @@ typedef union { /** Group: OTP_DEBUG Block0 Backup4 Word1 Data */ /** Type of blk0_backup4_w1 register - * Otp debuger block0 data register17. + * Otp debugger block0 data register17. */ typedef union { struct { @@ -267,7 +267,7 @@ typedef union { /** Group: OTP_DEBUG Block0 Backup4 Word2 Data */ /** Type of blk0_backup4_w2 register - * Otp debuger block0 data register18. + * Otp debugger block0 data register18. */ typedef union { struct { @@ -282,7 +282,7 @@ typedef union { /** Group: OTP_DEBUG Block0 Backup4 Word3 Data */ /** Type of blk0_backup4_w3 register - * Otp debuger block0 data register19. + * Otp debugger block0 data register19. */ typedef union { struct { @@ -297,7 +297,7 @@ typedef union { /** Group: OTP_DEBUG Block0 Backup4 Word4 Data */ /** Type of blk0_backup4_w4 register - * Otp debuger block0 data register20. + * Otp debugger block0 data register20. */ typedef union { struct { @@ -312,7 +312,7 @@ typedef union { /** Group: OTP_DEBUG Block0 Backup4 Word5 Data */ /** Type of blk0_backup4_w5 register - * Otp debuger block0 data register21. + * Otp debugger block0 data register21. */ typedef union { struct { @@ -327,7 +327,7 @@ typedef union { /** Group: OTP_DEBUG Block1 Word1 Data */ /** Type of blk1_w1 register - * Otp debuger block1 data register1. + * Otp debugger block1 data register1. */ typedef union { struct { @@ -342,7 +342,7 @@ typedef union { /** Group: OTP_DEBUG Block1 Word2 Data */ /** Type of blk1_w2 register - * Otp debuger block1 data register2. + * Otp debugger block1 data register2. */ typedef union { struct { @@ -357,7 +357,7 @@ typedef union { /** Group: OTP_DEBUG Block1 Word3 Data */ /** Type of blk1_w3 register - * Otp debuger block1 data register3. + * Otp debugger block1 data register3. */ typedef union { struct { @@ -372,7 +372,7 @@ typedef union { /** Group: OTP_DEBUG Block1 Word4 Data */ /** Type of blk1_w4 register - * Otp debuger block1 data register4. + * Otp debugger block1 data register4. */ typedef union { struct { @@ -387,7 +387,7 @@ typedef union { /** Group: OTP_DEBUG Block1 Word5 Data */ /** Type of blk1_w5 register - * Otp debuger block1 data register5. + * Otp debugger block1 data register5. */ typedef union { struct { @@ -402,7 +402,7 @@ typedef union { /** Group: OTP_DEBUG Block1 Word6 Data */ /** Type of blk1_w6 register - * Otp debuger block1 data register6. + * Otp debugger block1 data register6. */ typedef union { struct { @@ -417,7 +417,7 @@ typedef union { /** Group: OTP_DEBUG Block1 Word7 Data */ /** Type of blk1_w7 register - * Otp debuger block1 data register7. + * Otp debugger block1 data register7. */ typedef union { struct { @@ -432,7 +432,7 @@ typedef union { /** Group: OTP_DEBUG Block1 Word8 Data */ /** Type of blk1_w8 register - * Otp debuger block1 data register8. + * Otp debugger block1 data register8. */ typedef union { struct { @@ -447,7 +447,7 @@ typedef union { /** Group: OTP_DEBUG Block1 Word9 Data */ /** Type of blk1_w9 register - * Otp debuger block1 data register9. + * Otp debugger block1 data register9. */ typedef union { struct { @@ -462,7 +462,7 @@ typedef union { /** Group: OTP_DEBUG Block2 Word1 Data */ /** Type of blk2_w1 register - * Otp debuger block2 data register1. + * Otp debugger block2 data register1. */ typedef union { struct { @@ -477,7 +477,7 @@ typedef union { /** Group: OTP_DEBUG Block2 Word2 Data */ /** Type of blk2_w2 register - * Otp debuger block2 data register2. + * Otp debugger block2 data register2. */ typedef union { struct { @@ -492,7 +492,7 @@ typedef union { /** Group: OTP_DEBUG Block2 Word3 Data */ /** Type of blk2_w3 register - * Otp debuger block2 data register3. + * Otp debugger block2 data register3. */ typedef union { struct { @@ -507,7 +507,7 @@ typedef union { /** Group: OTP_DEBUG Block2 Word4 Data */ /** Type of blk2_w4 register - * Otp debuger block2 data register4. + * Otp debugger block2 data register4. */ typedef union { struct { @@ -522,7 +522,7 @@ typedef union { /** Group: OTP_DEBUG Block2 Word5 Data */ /** Type of blk2_w5 register - * Otp debuger block2 data register5. + * Otp debugger block2 data register5. */ typedef union { struct { @@ -537,7 +537,7 @@ typedef union { /** Group: OTP_DEBUG Block2 Word6 Data */ /** Type of blk2_w6 register - * Otp debuger block2 data register6. + * Otp debugger block2 data register6. */ typedef union { struct { @@ -552,7 +552,7 @@ typedef union { /** Group: OTP_DEBUG Block2 Word7 Data */ /** Type of blk2_w7 register - * Otp debuger block2 data register7. + * Otp debugger block2 data register7. */ typedef union { struct { @@ -567,7 +567,7 @@ typedef union { /** Group: OTP_DEBUG Block2 Word8 Data */ /** Type of blk2_w8 register - * Otp debuger block2 data register8. + * Otp debugger block2 data register8. */ typedef union { struct { @@ -582,7 +582,7 @@ typedef union { /** Group: OTP_DEBUG Block2 Word9 Data */ /** Type of blk2_w9 register - * Otp debuger block2 data register9. + * Otp debugger block2 data register9. */ typedef union { struct { @@ -597,7 +597,7 @@ typedef union { /** Group: OTP_DEBUG Block2 Word10 Data */ /** Type of blk2_w10 register - * Otp debuger block2 data register10. + * Otp debugger block2 data register10. */ typedef union { struct { @@ -612,7 +612,7 @@ typedef union { /** Group: OTP_DEBUG Block2 Word11 Data */ /** Type of blk2_w11 register - * Otp debuger block2 data register11. + * Otp debugger block2 data register11. */ typedef union { struct { @@ -625,7 +625,7 @@ typedef union { } otp_debug_blk2_w11_reg_t; /** Type of blk10_w11 register - * Otp debuger block10 data register11. + * Otp debugger block10 data register11. */ typedef union { struct { @@ -640,7 +640,7 @@ typedef union { /** Group: OTP_DEBUG Block3 Word1 Data */ /** Type of blk3_w1 register - * Otp debuger block3 data register1. + * Otp debugger block3 data register1. */ typedef union { struct { @@ -655,7 +655,7 @@ typedef union { /** Group: OTP_DEBUG Block3 Word2 Data */ /** Type of blk3_w2 register - * Otp debuger block3 data register2. + * Otp debugger block3 data register2. */ typedef union { struct { @@ -670,7 +670,7 @@ typedef union { /** Group: OTP_DEBUG Block3 Word3 Data */ /** Type of blk3_w3 register - * Otp debuger block3 data register3. + * Otp debugger block3 data register3. */ typedef union { struct { @@ -685,7 +685,7 @@ typedef union { /** Group: OTP_DEBUG Block3 Word4 Data */ /** Type of blk3_w4 register - * Otp debuger block3 data register4. + * Otp debugger block3 data register4. */ typedef union { struct { @@ -700,7 +700,7 @@ typedef union { /** Group: OTP_DEBUG Block3 Word5 Data */ /** Type of blk3_w5 register - * Otp debuger block3 data register5. + * Otp debugger block3 data register5. */ typedef union { struct { @@ -715,7 +715,7 @@ typedef union { /** Group: OTP_DEBUG Block3 Word6 Data */ /** Type of blk3_w6 register - * Otp debuger block3 data register6. + * Otp debugger block3 data register6. */ typedef union { struct { @@ -730,7 +730,7 @@ typedef union { /** Group: OTP_DEBUG Block3 Word7 Data */ /** Type of blk3_w7 register - * Otp debuger block3 data register7. + * Otp debugger block3 data register7. */ typedef union { struct { @@ -745,7 +745,7 @@ typedef union { /** Group: OTP_DEBUG Block3 Word8 Data */ /** Type of blk3_w8 register - * Otp debuger block3 data register8. + * Otp debugger block3 data register8. */ typedef union { struct { @@ -760,7 +760,7 @@ typedef union { /** Group: OTP_DEBUG Block3 Word9 Data */ /** Type of blk3_w9 register - * Otp debuger block3 data register9. + * Otp debugger block3 data register9. */ typedef union { struct { @@ -775,7 +775,7 @@ typedef union { /** Group: OTP_DEBUG Block3 Word10 Data */ /** Type of blk3_w10 register - * Otp debuger block3 data register10. + * Otp debugger block3 data register10. */ typedef union { struct { @@ -790,7 +790,7 @@ typedef union { /** Group: OTP_DEBUG Block3 Word11 Data */ /** Type of blk3_w11 register - * Otp debuger block3 data register11. + * Otp debugger block3 data register11. */ typedef union { struct { @@ -805,7 +805,7 @@ typedef union { /** Group: OTP_DEBUG Block4 Word1 Data */ /** Type of blk4_w1 register - * Otp debuger block4 data register1. + * Otp debugger block4 data register1. */ typedef union { struct { @@ -820,7 +820,7 @@ typedef union { /** Group: OTP_DEBUG Block4 Word2 Data */ /** Type of blk4_w2 register - * Otp debuger block4 data register2. + * Otp debugger block4 data register2. */ typedef union { struct { @@ -835,7 +835,7 @@ typedef union { /** Group: OTP_DEBUG Block4 Word3 Data */ /** Type of blk4_w3 register - * Otp debuger block4 data register3. + * Otp debugger block4 data register3. */ typedef union { struct { @@ -850,7 +850,7 @@ typedef union { /** Group: OTP_DEBUG Block4 Word4 Data */ /** Type of blk4_w4 register - * Otp debuger block4 data register4. + * Otp debugger block4 data register4. */ typedef union { struct { @@ -865,7 +865,7 @@ typedef union { /** Group: OTP_DEBUG Block4 Word5 Data */ /** Type of blk4_w5 register - * Otp debuger block4 data register5. + * Otp debugger block4 data register5. */ typedef union { struct { @@ -880,7 +880,7 @@ typedef union { /** Group: OTP_DEBUG Block4 Word6 Data */ /** Type of blk4_w6 register - * Otp debuger block4 data register6. + * Otp debugger block4 data register6. */ typedef union { struct { @@ -895,7 +895,7 @@ typedef union { /** Group: OTP_DEBUG Block4 Word7 Data */ /** Type of blk4_w7 register - * Otp debuger block4 data register7. + * Otp debugger block4 data register7. */ typedef union { struct { @@ -910,7 +910,7 @@ typedef union { /** Group: OTP_DEBUG Block4 Word8 Data */ /** Type of blk4_w8 register - * Otp debuger block4 data register8. + * Otp debugger block4 data register8. */ typedef union { struct { @@ -925,7 +925,7 @@ typedef union { /** Group: OTP_DEBUG Block4 Word9 Data */ /** Type of blk4_w9 register - * Otp debuger block4 data register9. + * Otp debugger block4 data register9. */ typedef union { struct { @@ -940,7 +940,7 @@ typedef union { /** Group: OTP_DEBUG Block4 Word10 Data */ /** Type of blk4_w10 register - * Otp debuger block4 data registe10. + * Otp debugger block4 data registe10. */ typedef union { struct { @@ -955,7 +955,7 @@ typedef union { /** Group: OTP_DEBUG Block4 Word11 Data */ /** Type of blk4_w11 register - * Otp debuger block4 data register11. + * Otp debugger block4 data register11. */ typedef union { struct { @@ -970,7 +970,7 @@ typedef union { /** Group: OTP_DEBUG Block5 Word1 Data */ /** Type of blk5_w1 register - * Otp debuger block5 data register1. + * Otp debugger block5 data register1. */ typedef union { struct { @@ -985,7 +985,7 @@ typedef union { /** Group: OTP_DEBUG Block5 Word2 Data */ /** Type of blk5_w2 register - * Otp debuger block5 data register2. + * Otp debugger block5 data register2. */ typedef union { struct { @@ -1000,7 +1000,7 @@ typedef union { /** Group: OTP_DEBUG Block5 Word3 Data */ /** Type of blk5_w3 register - * Otp debuger block5 data register3. + * Otp debugger block5 data register3. */ typedef union { struct { @@ -1015,7 +1015,7 @@ typedef union { /** Group: OTP_DEBUG Block5 Word4 Data */ /** Type of blk5_w4 register - * Otp debuger block5 data register4. + * Otp debugger block5 data register4. */ typedef union { struct { @@ -1030,7 +1030,7 @@ typedef union { /** Group: OTP_DEBUG Block5 Word5 Data */ /** Type of blk5_w5 register - * Otp debuger block5 data register5. + * Otp debugger block5 data register5. */ typedef union { struct { @@ -1045,7 +1045,7 @@ typedef union { /** Group: OTP_DEBUG Block5 Word6 Data */ /** Type of blk5_w6 register - * Otp debuger block5 data register6. + * Otp debugger block5 data register6. */ typedef union { struct { @@ -1060,7 +1060,7 @@ typedef union { /** Group: OTP_DEBUG Block5 Word7 Data */ /** Type of blk5_w7 register - * Otp debuger block5 data register7. + * Otp debugger block5 data register7. */ typedef union { struct { @@ -1075,7 +1075,7 @@ typedef union { /** Group: OTP_DEBUG Block5 Word8 Data */ /** Type of blk5_w8 register - * Otp debuger block5 data register8. + * Otp debugger block5 data register8. */ typedef union { struct { @@ -1090,7 +1090,7 @@ typedef union { /** Group: OTP_DEBUG Block5 Word9 Data */ /** Type of blk5_w9 register - * Otp debuger block5 data register9. + * Otp debugger block5 data register9. */ typedef union { struct { @@ -1105,7 +1105,7 @@ typedef union { /** Group: OTP_DEBUG Block5 Word10 Data */ /** Type of blk5_w10 register - * Otp debuger block5 data register10. + * Otp debugger block5 data register10. */ typedef union { struct { @@ -1120,7 +1120,7 @@ typedef union { /** Group: OTP_DEBUG Block5 Word11 Data */ /** Type of blk5_w11 register - * Otp debuger block5 data register11. + * Otp debugger block5 data register11. */ typedef union { struct { @@ -1135,7 +1135,7 @@ typedef union { /** Group: OTP_DEBUG Block6 Word1 Data */ /** Type of blk6_w1 register - * Otp debuger block6 data register1. + * Otp debugger block6 data register1. */ typedef union { struct { @@ -1150,7 +1150,7 @@ typedef union { /** Group: OTP_DEBUG Block6 Word2 Data */ /** Type of blk6_w2 register - * Otp debuger block6 data register2. + * Otp debugger block6 data register2. */ typedef union { struct { @@ -1165,7 +1165,7 @@ typedef union { /** Group: OTP_DEBUG Block6 Word3 Data */ /** Type of blk6_w3 register - * Otp debuger block6 data register3. + * Otp debugger block6 data register3. */ typedef union { struct { @@ -1180,7 +1180,7 @@ typedef union { /** Group: OTP_DEBUG Block6 Word4 Data */ /** Type of blk6_w4 register - * Otp debuger block6 data register4. + * Otp debugger block6 data register4. */ typedef union { struct { @@ -1195,7 +1195,7 @@ typedef union { /** Group: OTP_DEBUG Block6 Word5 Data */ /** Type of blk6_w5 register - * Otp debuger block6 data register5. + * Otp debugger block6 data register5. */ typedef union { struct { @@ -1210,7 +1210,7 @@ typedef union { /** Group: OTP_DEBUG Block6 Word6 Data */ /** Type of blk6_w6 register - * Otp debuger block6 data register6. + * Otp debugger block6 data register6. */ typedef union { struct { @@ -1225,7 +1225,7 @@ typedef union { /** Group: OTP_DEBUG Block6 Word7 Data */ /** Type of blk6_w7 register - * Otp debuger block6 data register7. + * Otp debugger block6 data register7. */ typedef union { struct { @@ -1240,7 +1240,7 @@ typedef union { /** Group: OTP_DEBUG Block6 Word8 Data */ /** Type of blk6_w8 register - * Otp debuger block6 data register8. + * Otp debugger block6 data register8. */ typedef union { struct { @@ -1255,7 +1255,7 @@ typedef union { /** Group: OTP_DEBUG Block6 Word9 Data */ /** Type of blk6_w9 register - * Otp debuger block6 data register9. + * Otp debugger block6 data register9. */ typedef union { struct { @@ -1270,7 +1270,7 @@ typedef union { /** Group: OTP_DEBUG Block6 Word10 Data */ /** Type of blk6_w10 register - * Otp debuger block6 data register10. + * Otp debugger block6 data register10. */ typedef union { struct { @@ -1285,7 +1285,7 @@ typedef union { /** Group: OTP_DEBUG Block6 Word11 Data */ /** Type of blk6_w11 register - * Otp debuger block6 data register11. + * Otp debugger block6 data register11. */ typedef union { struct { @@ -1300,7 +1300,7 @@ typedef union { /** Group: OTP_DEBUG Block7 Word1 Data */ /** Type of blk7_w1 register - * Otp debuger block7 data register1. + * Otp debugger block7 data register1. */ typedef union { struct { @@ -1315,7 +1315,7 @@ typedef union { /** Group: OTP_DEBUG Block7 Word2 Data */ /** Type of blk7_w2 register - * Otp debuger block7 data register2. + * Otp debugger block7 data register2. */ typedef union { struct { @@ -1330,7 +1330,7 @@ typedef union { /** Group: OTP_DEBUG Block7 Word3 Data */ /** Type of blk7_w3 register - * Otp debuger block7 data register3. + * Otp debugger block7 data register3. */ typedef union { struct { @@ -1345,7 +1345,7 @@ typedef union { /** Group: OTP_DEBUG Block7 Word4 Data */ /** Type of blk7_w4 register - * Otp debuger block7 data register4. + * Otp debugger block7 data register4. */ typedef union { struct { @@ -1360,7 +1360,7 @@ typedef union { /** Group: OTP_DEBUG Block7 Word5 Data */ /** Type of blk7_w5 register - * Otp debuger block7 data register5. + * Otp debugger block7 data register5. */ typedef union { struct { @@ -1375,7 +1375,7 @@ typedef union { /** Group: OTP_DEBUG Block7 Word6 Data */ /** Type of blk7_w6 register - * Otp debuger block7 data register6. + * Otp debugger block7 data register6. */ typedef union { struct { @@ -1390,7 +1390,7 @@ typedef union { /** Group: OTP_DEBUG Block7 Word7 Data */ /** Type of blk7_w7 register - * Otp debuger block7 data register7. + * Otp debugger block7 data register7. */ typedef union { struct { @@ -1405,7 +1405,7 @@ typedef union { /** Group: OTP_DEBUG Block7 Word8 Data */ /** Type of blk7_w8 register - * Otp debuger block7 data register8. + * Otp debugger block7 data register8. */ typedef union { struct { @@ -1420,7 +1420,7 @@ typedef union { /** Group: OTP_DEBUG Block7 Word9 Data */ /** Type of blk7_w9 register - * Otp debuger block7 data register9. + * Otp debugger block7 data register9. */ typedef union { struct { @@ -1435,7 +1435,7 @@ typedef union { /** Group: OTP_DEBUG Block7 Word10 Data */ /** Type of blk7_w10 register - * Otp debuger block7 data register10. + * Otp debugger block7 data register10. */ typedef union { struct { @@ -1450,7 +1450,7 @@ typedef union { /** Group: OTP_DEBUG Block7 Word11 Data */ /** Type of blk7_w11 register - * Otp debuger block7 data register11. + * Otp debugger block7 data register11. */ typedef union { struct { @@ -1465,7 +1465,7 @@ typedef union { /** Group: OTP_DEBUG Block8 Word1 Data */ /** Type of blk8_w1 register - * Otp debuger block8 data register1. + * Otp debugger block8 data register1. */ typedef union { struct { @@ -1480,7 +1480,7 @@ typedef union { /** Group: OTP_DEBUG Block8 Word2 Data */ /** Type of blk8_w2 register - * Otp debuger block8 data register2. + * Otp debugger block8 data register2. */ typedef union { struct { @@ -1495,7 +1495,7 @@ typedef union { /** Group: OTP_DEBUG Block8 Word3 Data */ /** Type of blk8_w3 register - * Otp debuger block8 data register3. + * Otp debugger block8 data register3. */ typedef union { struct { @@ -1510,7 +1510,7 @@ typedef union { /** Group: OTP_DEBUG Block8 Word4 Data */ /** Type of blk8_w4 register - * Otp debuger block8 data register4. + * Otp debugger block8 data register4. */ typedef union { struct { @@ -1525,7 +1525,7 @@ typedef union { /** Group: OTP_DEBUG Block8 Word5 Data */ /** Type of blk8_w5 register - * Otp debuger block8 data register5. + * Otp debugger block8 data register5. */ typedef union { struct { @@ -1540,7 +1540,7 @@ typedef union { /** Group: OTP_DEBUG Block8 Word6 Data */ /** Type of blk8_w6 register - * Otp debuger block8 data register6. + * Otp debugger block8 data register6. */ typedef union { struct { @@ -1555,7 +1555,7 @@ typedef union { /** Group: OTP_DEBUG Block8 Word7 Data */ /** Type of blk8_w7 register - * Otp debuger block8 data register7. + * Otp debugger block8 data register7. */ typedef union { struct { @@ -1570,7 +1570,7 @@ typedef union { /** Group: OTP_DEBUG Block8 Word8 Data */ /** Type of blk8_w8 register - * Otp debuger block8 data register8. + * Otp debugger block8 data register8. */ typedef union { struct { @@ -1585,7 +1585,7 @@ typedef union { /** Group: OTP_DEBUG Block8 Word9 Data */ /** Type of blk8_w9 register - * Otp debuger block8 data register9. + * Otp debugger block8 data register9. */ typedef union { struct { @@ -1600,7 +1600,7 @@ typedef union { /** Group: OTP_DEBUG Block8 Word10 Data */ /** Type of blk8_w10 register - * Otp debuger block8 data register10. + * Otp debugger block8 data register10. */ typedef union { struct { @@ -1615,7 +1615,7 @@ typedef union { /** Group: OTP_DEBUG Block8 Word11 Data */ /** Type of blk8_w11 register - * Otp debuger block8 data register11. + * Otp debugger block8 data register11. */ typedef union { struct { @@ -1630,7 +1630,7 @@ typedef union { /** Group: OTP_DEBUG Block9 Word1 Data */ /** Type of blk9_w1 register - * Otp debuger block9 data register1. + * Otp debugger block9 data register1. */ typedef union { struct { @@ -1645,7 +1645,7 @@ typedef union { /** Group: OTP_DEBUG Block9 Word2 Data */ /** Type of blk9_w2 register - * Otp debuger block9 data register2. + * Otp debugger block9 data register2. */ typedef union { struct { @@ -1660,7 +1660,7 @@ typedef union { /** Group: OTP_DEBUG Block9 Word3 Data */ /** Type of blk9_w3 register - * Otp debuger block9 data register3. + * Otp debugger block9 data register3. */ typedef union { struct { @@ -1675,7 +1675,7 @@ typedef union { /** Group: OTP_DEBUG Block9 Word4 Data */ /** Type of blk9_w4 register - * Otp debuger block9 data register4. + * Otp debugger block9 data register4. */ typedef union { struct { @@ -1690,7 +1690,7 @@ typedef union { /** Group: OTP_DEBUG Block9 Word5 Data */ /** Type of blk9_w5 register - * Otp debuger block9 data register5. + * Otp debugger block9 data register5. */ typedef union { struct { @@ -1705,7 +1705,7 @@ typedef union { /** Group: OTP_DEBUG Block9 Word6 Data */ /** Type of blk9_w6 register - * Otp debuger block9 data register6. + * Otp debugger block9 data register6. */ typedef union { struct { @@ -1720,7 +1720,7 @@ typedef union { /** Group: OTP_DEBUG Block9 Word7 Data */ /** Type of blk9_w7 register - * Otp debuger block9 data register7. + * Otp debugger block9 data register7. */ typedef union { struct { @@ -1735,7 +1735,7 @@ typedef union { /** Group: OTP_DEBUG Block9 Word8 Data */ /** Type of blk9_w8 register - * Otp debuger block9 data register8. + * Otp debugger block9 data register8. */ typedef union { struct { @@ -1750,7 +1750,7 @@ typedef union { /** Group: OTP_DEBUG Block9 Word9 Data */ /** Type of blk9_w9 register - * Otp debuger block9 data register9. + * Otp debugger block9 data register9. */ typedef union { struct { @@ -1765,7 +1765,7 @@ typedef union { /** Group: OTP_DEBUG Block9 Word10 Data */ /** Type of blk9_w10 register - * Otp debuger block9 data register10. + * Otp debugger block9 data register10. */ typedef union { struct { @@ -1780,7 +1780,7 @@ typedef union { /** Group: OTP_DEBUG Block9 Word11 Data */ /** Type of blk9_w11 register - * Otp debuger block9 data register11. + * Otp debugger block9 data register11. */ typedef union { struct { @@ -1795,7 +1795,7 @@ typedef union { /** Group: OTP_DEBUG Block10 Word1 Data */ /** Type of blk10_w1 register - * Otp debuger block10 data register1. + * Otp debugger block10 data register1. */ typedef union { struct { @@ -1810,7 +1810,7 @@ typedef union { /** Group: OTP_DEBUG Block10 Word2 Data */ /** Type of blk10_w2 register - * Otp debuger block10 data register2. + * Otp debugger block10 data register2. */ typedef union { struct { @@ -1825,7 +1825,7 @@ typedef union { /** Group: OTP_DEBUG Block10 Word3 Data */ /** Type of blk10_w3 register - * Otp debuger block10 data register3. + * Otp debugger block10 data register3. */ typedef union { struct { @@ -1840,7 +1840,7 @@ typedef union { /** Group: OTP_DEBUG Block10 Word4 Data */ /** Type of blk10_w4 register - * Otp debuger block10 data register4. + * Otp debugger block10 data register4. */ typedef union { struct { @@ -1855,7 +1855,7 @@ typedef union { /** Group: OTP_DEBUG Block10 Word5 Data */ /** Type of blk10_w5 register - * Otp debuger block10 data register5. + * Otp debugger block10 data register5. */ typedef union { struct { @@ -1870,7 +1870,7 @@ typedef union { /** Group: OTP_DEBUG Block10 Word6 Data */ /** Type of blk10_w6 register - * Otp debuger block10 data register6. + * Otp debugger block10 data register6. */ typedef union { struct { @@ -1885,7 +1885,7 @@ typedef union { /** Group: OTP_DEBUG Block10 Word7 Data */ /** Type of blk10_w7 register - * Otp debuger block10 data register7. + * Otp debugger block10 data register7. */ typedef union { struct { @@ -1900,7 +1900,7 @@ typedef union { /** Group: OTP_DEBUG Block10 Word8 Data */ /** Type of blk10_w8 register - * Otp debuger block10 data register8. + * Otp debugger block10 data register8. */ typedef union { struct { @@ -1915,7 +1915,7 @@ typedef union { /** Group: OTP_DEBUG Block10 Word9 Data */ /** Type of blk10_w9 register - * Otp debuger block10 data register9. + * Otp debugger block10 data register9. */ typedef union { struct { @@ -1930,7 +1930,7 @@ typedef union { /** Group: OTP_DEBUG Block10 Word10 Data */ /** Type of blk10_w10 register - * Otp debuger block10 data register10. + * Otp debugger block10 data register10. */ typedef union { struct { @@ -1945,7 +1945,7 @@ typedef union { /** Group: OTP_DEBUG Clock_en Configuration Register */ /** Type of clk register - * Otp debuger clk_en configuration register. + * Otp debugger clk_en configuration register. */ typedef union { struct { @@ -1959,7 +1959,7 @@ typedef union { } otp_debug_clk_reg_t; -/** Group: OTP_DEBUG Apb2otp Enable Singal */ +/** Group: OTP_DEBUG Apb2otp Enable Signal */ /** Type of apb2otp_en register * Otp_debuger apb2otp enable configuration register. */ diff --git a/components/soc/esp32c6/include/soc/parl_io_reg.h b/components/soc/esp32c6/register/soc/parl_io_reg.h similarity index 98% rename from components/soc/esp32c6/include/soc/parl_io_reg.h rename to components/soc/esp32c6/register/soc/parl_io_reg.h index 7377e9788b30..191656298c4a 100644 --- a/components/soc/esp32c6/include/soc/parl_io_reg.h +++ b/components/soc/esp32c6/register/soc/parl_io_reg.h @@ -31,7 +31,7 @@ extern "C" { #define PARL_IO_RX_START_V 0x00000001U #define PARL_IO_RX_START_S 1 /** PARL_IO_RX_DATA_BYTELEN : R/W; bitpos: [17:2]; default: 0; - * Configures rx receieved data byte length. + * Configures rx received data byte length. */ #define PARL_IO_RX_DATA_BYTELEN 0x0000FFFFU #define PARL_IO_RX_DATA_BYTELEN_M (PARL_IO_RX_DATA_BYTELEN_V << PARL_IO_RX_DATA_BYTELEN_S) @@ -251,7 +251,7 @@ extern "C" { #define PARL_IO_TX_READY_S 31 /** PARL_IO_INT_ENA_REG register - * Parallel IO interrupt enable singal configuration register. + * Parallel IO interrupt enable signal configuration register. */ #define PARL_IO_INT_ENA_REG (DR_REG_PARL_IO_BASE + 0x14) /** PARL_IO_TX_FIFO_REMPTY_INT_ENA : R/W; bitpos: [0]; default: 0; @@ -277,7 +277,7 @@ extern "C" { #define PARL_IO_TX_EOF_INT_ENA_S 2 /** PARL_IO_INT_RAW_REG register - * Parallel IO interrupt raw singal status register. + * Parallel IO interrupt raw signal status register. */ #define PARL_IO_INT_RAW_REG (DR_REG_PARL_IO_BASE + 0x18) /** PARL_IO_TX_FIFO_REMPTY_INT_RAW : R/WTC/SS; bitpos: [0]; default: 0; @@ -303,7 +303,7 @@ extern "C" { #define PARL_IO_TX_EOF_INT_RAW_S 2 /** PARL_IO_INT_ST_REG register - * Parallel IO interrupt singal status register. + * Parallel IO interrupt signal status register. */ #define PARL_IO_INT_ST_REG (DR_REG_PARL_IO_BASE + 0x1c) /** PARL_IO_TX_FIFO_REMPTY_INT_ST : RO; bitpos: [0]; default: 0; @@ -329,7 +329,7 @@ extern "C" { #define PARL_IO_TX_EOF_INT_ST_S 2 /** PARL_IO_INT_CLR_REG register - * Parallel IO interrupt clear singal configuration register. + * Parallel IO interrupt clear signal configuration register. */ #define PARL_IO_INT_CLR_REG (DR_REG_PARL_IO_BASE + 0x20) /** PARL_IO_TX_FIFO_REMPTY_INT_CLR : WT; bitpos: [0]; default: 0; diff --git a/components/soc/esp32c6/include/soc/parl_io_struct.h b/components/soc/esp32c6/register/soc/parl_io_struct.h similarity index 97% rename from components/soc/esp32c6/include/soc/parl_io_struct.h rename to components/soc/esp32c6/register/soc/parl_io_struct.h index 816a7de3ef1a..e0000ebc56ba 100644 --- a/components/soc/esp32c6/include/soc/parl_io_struct.h +++ b/components/soc/esp32c6/register/soc/parl_io_struct.h @@ -26,7 +26,7 @@ typedef union { */ uint32_t rx_start:1; /** rx_data_bytelen : R/W; bitpos: [17:2]; default: 0; - * Configures rx receieved data byte length. + * Configures rx received data byte length. */ uint32_t rx_data_bytelen:16; /** rx_sw_en : R/W; bitpos: [18]; default: 0; @@ -213,7 +213,7 @@ typedef union { /** Group: PARL_IO Interrupt Configuration and Status */ /** Type of int_ena register - * Parallel IO interrupt enable singal configuration register. + * Parallel IO interrupt enable signal configuration register. */ typedef union { struct { @@ -235,7 +235,7 @@ typedef union { } parl_io_int_ena_reg_t; /** Type of int_raw register - * Parallel IO interrupt raw singal status register. + * Parallel IO interrupt raw signal status register. */ typedef union { struct { @@ -257,7 +257,7 @@ typedef union { } parl_io_int_raw_reg_t; /** Type of int_st register - * Parallel IO interrupt singal status register. + * Parallel IO interrupt signal status register. */ typedef union { struct { @@ -279,7 +279,7 @@ typedef union { } parl_io_int_st_reg_t; /** Type of int_clr register - * Parallel IO interrupt clear singal configuration register. + * Parallel IO interrupt clear signal configuration register. */ typedef union { struct { diff --git a/components/soc/esp32c6/include/soc/pau_reg.h b/components/soc/esp32c6/register/soc/pau_reg.h similarity index 100% rename from components/soc/esp32c6/include/soc/pau_reg.h rename to components/soc/esp32c6/register/soc/pau_reg.h diff --git a/components/soc/esp32c6/include/soc/pau_struct.h b/components/soc/esp32c6/register/soc/pau_struct.h similarity index 100% rename from components/soc/esp32c6/include/soc/pau_struct.h rename to components/soc/esp32c6/register/soc/pau_struct.h diff --git a/components/soc/esp32c6/include/soc/pcnt_reg.h b/components/soc/esp32c6/register/soc/pcnt_reg.h similarity index 100% rename from components/soc/esp32c6/include/soc/pcnt_reg.h rename to components/soc/esp32c6/register/soc/pcnt_reg.h diff --git a/components/soc/esp32c6/include/soc/pcnt_struct.h b/components/soc/esp32c6/register/soc/pcnt_struct.h similarity index 100% rename from components/soc/esp32c6/include/soc/pcnt_struct.h rename to components/soc/esp32c6/register/soc/pcnt_struct.h diff --git a/components/soc/esp32c6/include/soc/pcr_reg.h b/components/soc/esp32c6/register/soc/pcr_reg.h similarity index 98% rename from components/soc/esp32c6/include/soc/pcr_reg.h rename to components/soc/esp32c6/register/soc/pcr_reg.h index 35a77baaab4e..466b25f0201b 100644 --- a/components/soc/esp32c6/include/soc/pcr_reg.h +++ b/components/soc/esp32c6/register/soc/pcr_reg.h @@ -201,7 +201,7 @@ extern "C" { #define PCR_MSPI_CLK_CONF_REG (DR_REG_PCR_BASE + 0x1c) /** PCR_MSPI_FAST_LS_DIV_NUM : R/W; bitpos: [7:0]; default: 0; * Set as one within (0,1,2) to generate div1(default)/div2/div4 of low-speed - * clock-source to drive clk_mspi_fast. Only avaiable whe the clck-source is a + * clock-source to drive clk_mspi_fast. Only available when the clck-source is a * low-speed clock-source such as XTAL/FOSC. */ #define PCR_MSPI_FAST_LS_DIV_NUM 0x000000FFU @@ -210,7 +210,7 @@ extern "C" { #define PCR_MSPI_FAST_LS_DIV_NUM_S 0 /** PCR_MSPI_FAST_HS_DIV_NUM : R/W; bitpos: [15:8]; default: 3; * Set as one within (3,4,5) to generate div4(default)/div5/div6 of high-speed - * clock-source to drive clk_mspi_fast. Only avaiable whe the clck-source is a + * clock-source to drive clk_mspi_fast. Only available when the clck-source is a * high-speed clock-source such as SPLL. */ #define PCR_MSPI_FAST_HS_DIV_NUM 0x000000FFU @@ -1163,7 +1163,7 @@ extern "C" { #define PCR_PVT_MONITOR_FUNC_CLK_DIV_NUM_V 0x0000000FU #define PCR_PVT_MONITOR_FUNC_CLK_DIV_NUM_S 0 /** PCR_PVT_MONITOR_FUNC_CLK_SEL : R/W; bitpos: [20]; default: 0; - * set this field to select clock-source. 0: XTAL, 1(default): 160MHz drived by SPLL + * set this field to select clock-source. 0: XTAL, 1(default): 160MHz driven by SPLL * divided by 3. */ #define PCR_PVT_MONITOR_FUNC_CLK_SEL (BIT(20)) @@ -1666,8 +1666,8 @@ extern "C" { */ #define PCR_CPU_FREQ_CONF_REG (DR_REG_PCR_BASE + 0x118) /** PCR_CPU_LS_DIV_NUM : R/W; bitpos: [7:0]; default: 0; - * Set as one within (0,1,3) to generate clk_cpu drived by clk_hproot. The clk_cpu is - * div1(default)/div2/div4 of clk_hproot. This field is only avaliable for low-speed + * Set as one within (0,1,3) to generate clk_cpu driven by clk_hproot. The clk_cpu is + * div1(default)/div2/div4 of clk_hproot. This field is only available for low-speed * clock-source such as XTAL/FOSC, and should be used together with PCR_AHB_LS_DIV_NUM. */ #define PCR_CPU_LS_DIV_NUM 0x000000FFU @@ -1675,8 +1675,8 @@ extern "C" { #define PCR_CPU_LS_DIV_NUM_V 0x000000FFU #define PCR_CPU_LS_DIV_NUM_S 0 /** PCR_CPU_HS_DIV_NUM : R/W; bitpos: [15:8]; default: 0; - * Set as one within (0,1,3) to generate clk_cpu drived by clk_hproot. The clk_cpu is - * div1(default)/div2/div4 of clk_hproot. This field is only avaliable for high-speed + * Set as one within (0,1,3) to generate clk_cpu driven by clk_hproot. The clk_cpu is + * div1(default)/div2/div4 of clk_hproot. This field is only available for high-speed * clock-source such as SPLL, and should be used together with PCR_AHB_HS_DIV_NUM. */ #define PCR_CPU_HS_DIV_NUM 0x000000FFU @@ -1685,7 +1685,7 @@ extern "C" { #define PCR_CPU_HS_DIV_NUM_S 8 /** PCR_CPU_HS_120M_FORCE : R/W; bitpos: [16]; default: 0; * Given that PCR_CPU_HS_DIV_NUM is 0, set this field as 1 to force clk_cpu at 120MHz. - * Only avaliable when PCR_CPU_HS_DIV_NUM is 0 and clk_cpu is driven by SPLL. + * Only available when PCR_CPU_HS_DIV_NUM is 0 and clk_cpu is driven by SPLL. */ #define PCR_CPU_HS_120M_FORCE (BIT(16)) #define PCR_CPU_HS_120M_FORCE_M (PCR_CPU_HS_120M_FORCE_V << PCR_CPU_HS_120M_FORCE_S) @@ -1697,8 +1697,8 @@ extern "C" { */ #define PCR_AHB_FREQ_CONF_REG (DR_REG_PCR_BASE + 0x11c) /** PCR_AHB_LS_DIV_NUM : R/W; bitpos: [7:0]; default: 0; - * Set as one within (0,1,3,7) to generate clk_ahb drived by clk_hproot. The clk_ahb - * is div1(default)/div2/div4/div8 of clk_hproot. This field is only avaliable for + * Set as one within (0,1,3,7) to generate clk_ahb driven by clk_hproot. The clk_ahb + * is div1(default)/div2/div4/div8 of clk_hproot. This field is only available for * low-speed clock-source such as XTAL/FOSC, and should be used together with * PCR_CPU_LS_DIV_NUM. */ @@ -1707,8 +1707,8 @@ extern "C" { #define PCR_AHB_LS_DIV_NUM_V 0x000000FFU #define PCR_AHB_LS_DIV_NUM_S 0 /** PCR_AHB_HS_DIV_NUM : R/W; bitpos: [15:8]; default: 3; - * Set as one within (3,7,15) to generate clk_ahb drived by clk_hproot. The clk_ahb is - * div4(default)/div8/div16 of clk_hproot. This field is only avaliable for high-speed + * Set as one within (3,7,15) to generate clk_ahb driven by clk_hproot. The clk_ahb is + * div4(default)/div8/div16 of clk_hproot. This field is only available for high-speed * clock-source such as SPLL, and should be used together with PCR_CPU_HS_DIV_NUM. */ #define PCR_AHB_HS_DIV_NUM 0x000000FFU @@ -1734,7 +1734,7 @@ extern "C" { #define PCR_APB_DECREASE_DIV_NUM_V 0x000000FFU #define PCR_APB_DECREASE_DIV_NUM_S 0 /** PCR_APB_DIV_NUM : R/W; bitpos: [15:8]; default: 0; - * Set as one within (0,1,3) to generate clk_apb drived by clk_ahb. The clk_apb is + * Set as one within (0,1,3) to generate clk_apb driven by clk_ahb. The clk_apb is * div1(default)/div2/div4 of clk_ahb. */ #define PCR_APB_DIV_NUM 0x000000FFU @@ -1766,56 +1766,56 @@ extern "C" { */ #define PCR_PLL_DIV_CLK_EN_REG (DR_REG_PCR_BASE + 0x128) /** PCR_PLL_240M_CLK_EN : R/W; bitpos: [0]; default: 1; - * This field is used to open 240 MHz clock (div2 of SPLL) drived from SPLL. 0: close, - * 1: open(default). Only avaliable when high-speed clock-source SPLL is active. + * This field is used to open 240 MHz clock (div2 of SPLL) driven from SPLL. 0: close, + * 1: open(default). Only available when high-speed clock-source SPLL is active. */ #define PCR_PLL_240M_CLK_EN (BIT(0)) #define PCR_PLL_240M_CLK_EN_M (PCR_PLL_240M_CLK_EN_V << PCR_PLL_240M_CLK_EN_S) #define PCR_PLL_240M_CLK_EN_V 0x00000001U #define PCR_PLL_240M_CLK_EN_S 0 /** PCR_PLL_160M_CLK_EN : R/W; bitpos: [1]; default: 1; - * This field is used to open 160 MHz clock (div3 of SPLL) drived from SPLL. 0: close, - * 1: open(default). Only avaliable when high-speed clock-source SPLL is active. + * This field is used to open 160 MHz clock (div3 of SPLL) driven from SPLL. 0: close, + * 1: open(default). Only available when high-speed clock-source SPLL is active. */ #define PCR_PLL_160M_CLK_EN (BIT(1)) #define PCR_PLL_160M_CLK_EN_M (PCR_PLL_160M_CLK_EN_V << PCR_PLL_160M_CLK_EN_S) #define PCR_PLL_160M_CLK_EN_V 0x00000001U #define PCR_PLL_160M_CLK_EN_S 1 /** PCR_PLL_120M_CLK_EN : R/W; bitpos: [2]; default: 1; - * This field is used to open 120 MHz clock (div4 of SPLL) drived from SPLL. 0: close, - * 1: open(default). Only avaliable when high-speed clock-source SPLL is active. + * This field is used to open 120 MHz clock (div4 of SPLL) driven from SPLL. 0: close, + * 1: open(default). Only available when high-speed clock-source SPLL is active. */ #define PCR_PLL_120M_CLK_EN (BIT(2)) #define PCR_PLL_120M_CLK_EN_M (PCR_PLL_120M_CLK_EN_V << PCR_PLL_120M_CLK_EN_S) #define PCR_PLL_120M_CLK_EN_V 0x00000001U #define PCR_PLL_120M_CLK_EN_S 2 /** PCR_PLL_80M_CLK_EN : R/W; bitpos: [3]; default: 1; - * This field is used to open 80 MHz clock (div6 of SPLL) drived from SPLL. 0: close, - * 1: open(default). Only avaliable when high-speed clock-source SPLL is active. + * This field is used to open 80 MHz clock (div6 of SPLL) driven from SPLL. 0: close, + * 1: open(default). Only available when high-speed clock-source SPLL is active. */ #define PCR_PLL_80M_CLK_EN (BIT(3)) #define PCR_PLL_80M_CLK_EN_M (PCR_PLL_80M_CLK_EN_V << PCR_PLL_80M_CLK_EN_S) #define PCR_PLL_80M_CLK_EN_V 0x00000001U #define PCR_PLL_80M_CLK_EN_S 3 /** PCR_PLL_48M_CLK_EN : R/W; bitpos: [4]; default: 1; - * This field is used to open 48 MHz clock (div10 of SPLL) drived from SPLL. 0: close, - * 1: open(default). Only avaliable when high-speed clock-source SPLL is active. + * This field is used to open 48 MHz clock (div10 of SPLL) driven from SPLL. 0: close, + * 1: open(default). Only available when high-speed clock-source SPLL is active. */ #define PCR_PLL_48M_CLK_EN (BIT(4)) #define PCR_PLL_48M_CLK_EN_M (PCR_PLL_48M_CLK_EN_V << PCR_PLL_48M_CLK_EN_S) #define PCR_PLL_48M_CLK_EN_V 0x00000001U #define PCR_PLL_48M_CLK_EN_S 4 /** PCR_PLL_40M_CLK_EN : R/W; bitpos: [5]; default: 1; - * This field is used to open 40 MHz clock (div12 of SPLL) drived from SPLL. 0: close, - * 1: open(default). Only avaliable when high-speed clock-source SPLL is active. + * This field is used to open 40 MHz clock (div12 of SPLL) driven from SPLL. 0: close, + * 1: open(default). Only available when high-speed clock-source SPLL is active. */ #define PCR_PLL_40M_CLK_EN (BIT(5)) #define PCR_PLL_40M_CLK_EN_M (PCR_PLL_40M_CLK_EN_V << PCR_PLL_40M_CLK_EN_S) #define PCR_PLL_40M_CLK_EN_V 0x00000001U #define PCR_PLL_40M_CLK_EN_S 5 /** PCR_PLL_20M_CLK_EN : R/W; bitpos: [6]; default: 1; - * This field is used to open 20 MHz clock (div24 of SPLL) drived from SPLL. 0: close, - * 1: open(default). Only avaliable when high-speed clock-source SPLL is active. + * This field is used to open 20 MHz clock (div24 of SPLL) driven from SPLL. 0: close, + * 1: open(default). Only available when high-speed clock-source SPLL is active. */ #define PCR_PLL_20M_CLK_EN (BIT(6)) #define PCR_PLL_20M_CLK_EN_M (PCR_PLL_20M_CLK_EN_V << PCR_PLL_20M_CLK_EN_S) diff --git a/components/soc/esp32c6/include/soc/pcr_struct.h b/components/soc/esp32c6/register/soc/pcr_struct.h similarity index 97% rename from components/soc/esp32c6/include/soc/pcr_struct.h rename to components/soc/esp32c6/register/soc/pcr_struct.h index f31e632d865b..ee74db8ff14b 100644 --- a/components/soc/esp32c6/include/soc/pcr_struct.h +++ b/components/soc/esp32c6/register/soc/pcr_struct.h @@ -176,13 +176,13 @@ typedef union { struct { /** mspi_fast_ls_div_num : R/W; bitpos: [7:0]; default: 0; * Set as one within (0,1,2) to generate div1(default)/div2/div4 of low-speed - * clock-source to drive clk_mspi_fast. Only avaiable whe the clck-source is a + * clock-source to drive clk_mspi_fast. Only available when the clck-source is a * low-speed clock-source such as XTAL/FOSC. */ uint32_t mspi_fast_ls_div_num:8; /** mspi_fast_hs_div_num : R/W; bitpos: [15:8]; default: 3; * Set as one within (3,4,5) to generate div4(default)/div5/div6 of high-speed - * clock-source to drive clk_mspi_fast. Only avaiable whe the clck-source is a + * clock-source to drive clk_mspi_fast. Only available when the clck-source is a * high-speed clock-source such as SPLL. */ uint32_t mspi_fast_hs_div_num:8; @@ -1033,7 +1033,7 @@ typedef union { uint32_t pvt_monitor_func_clk_div_num:4; uint32_t reserved_4:16; /** pvt_monitor_func_clk_sel : R/W; bitpos: [20]; default: 0; - * set this field to select clock-source. 0: XTAL, 1(default): 160MHz drived by SPLL + * set this field to select clock-source. 0: XTAL, 1(default): 160MHz driven by SPLL * divided by 3. */ uint32_t pvt_monitor_func_clk_sel:1; @@ -1499,20 +1499,20 @@ typedef union { typedef union { struct { /** cpu_ls_div_num : R/W; bitpos: [7:0]; default: 0; - * Set as one within (0,1,3) to generate clk_cpu drived by clk_hproot. The clk_cpu is - * div1(default)/div2/div4 of clk_hproot. This field is only avaliable for low-speed + * Set as one within (0,1,3) to generate clk_cpu driven by clk_hproot. The clk_cpu is + * div1(default)/div2/div4 of clk_hproot. This field is only available for low-speed * clock-source such as XTAL/FOSC, and should be used together with PCR_AHB_LS_DIV_NUM. */ uint32_t cpu_ls_div_num:8; /** cpu_hs_div_num : R/W; bitpos: [15:8]; default: 0; - * Set as one within (0,1,3) to generate clk_cpu drived by clk_hproot. The clk_cpu is - * div1(default)/div2/div4 of clk_hproot. This field is only avaliable for high-speed + * Set as one within (0,1,3) to generate clk_cpu driven by clk_hproot. The clk_cpu is + * div1(default)/div2/div4 of clk_hproot. This field is only available for high-speed * clock-source such as SPLL, and should be used together with PCR_AHB_HS_DIV_NUM. */ uint32_t cpu_hs_div_num:8; /** cpu_hs_120m_force : R/W; bitpos: [16]; default: 0; * Given that PCR_CPU_HS_DIV_NUM is 0, set this field as 1 to force clk_cpu at 120MHz. - * Only avaliable when PCR_CPU_HS_DIV_NUM is 0 and clk_cpu is driven by SPLL. + * Only available when PCR_CPU_HS_DIV_NUM is 0 and clk_cpu is driven by SPLL. */ uint32_t cpu_hs_120m_force:1; uint32_t reserved_17:15; @@ -1526,15 +1526,15 @@ typedef union { typedef union { struct { /** ahb_ls_div_num : R/W; bitpos: [7:0]; default: 0; - * Set as one within (0,1,3,7) to generate clk_ahb drived by clk_hproot. The clk_ahb - * is div1(default)/div2/div4/div8 of clk_hproot. This field is only avaliable for + * Set as one within (0,1,3,7) to generate clk_ahb driven by clk_hproot. The clk_ahb + * is div1(default)/div2/div4/div8 of clk_hproot. This field is only available for * low-speed clock-source such as XTAL/FOSC, and should be used together with * PCR_CPU_LS_DIV_NUM. */ uint32_t ahb_ls_div_num:8; /** ahb_hs_div_num : R/W; bitpos: [15:8]; default: 3; - * Set as one within (3,7,15) to generate clk_ahb drived by clk_hproot. The clk_ahb is - * div4(default)/div8/div16 of clk_hproot. This field is only avaliable for high-speed + * Set as one within (3,7,15) to generate clk_ahb driven by clk_hproot. The clk_ahb is + * div4(default)/div8/div16 of clk_hproot. This field is only available for high-speed * clock-source such as SPLL, and should be used together with PCR_CPU_HS_DIV_NUM. */ uint32_t ahb_hs_div_num:8; @@ -1559,7 +1559,7 @@ typedef union { */ uint32_t apb_decrease_div_num:8; /** apb_div_num : R/W; bitpos: [15:8]; default: 0; - * Set as one within (0,1,3) to generate clk_apb drived by clk_ahb. The clk_apb is + * Set as one within (0,1,3) to generate clk_apb driven by clk_ahb. The clk_apb is * div1(default)/div2/div4 of clk_ahb. */ uint32_t apb_div_num:8; @@ -1574,38 +1574,38 @@ typedef union { typedef union { struct { /** pll_240m_clk_en : R/W; bitpos: [0]; default: 1; - * This field is used to open 240 MHz clock (div2 of SPLL) drived from SPLL. 0: close, - * 1: open(default). Only avaliable when high-speed clock-source SPLL is active. + * This field is used to open 240 MHz clock (div2 of SPLL) driven from SPLL. 0: close, + * 1: open(default). Only available when high-speed clock-source SPLL is active. */ uint32_t pll_240m_clk_en:1; /** pll_160m_clk_en : R/W; bitpos: [1]; default: 1; - * This field is used to open 160 MHz clock (div3 of SPLL) drived from SPLL. 0: close, - * 1: open(default). Only avaliable when high-speed clock-source SPLL is active. + * This field is used to open 160 MHz clock (div3 of SPLL) driven from SPLL. 0: close, + * 1: open(default). Only available when high-speed clock-source SPLL is active. */ uint32_t pll_160m_clk_en:1; /** pll_120m_clk_en : R/W; bitpos: [2]; default: 1; - * This field is used to open 120 MHz clock (div4 of SPLL) drived from SPLL. 0: close, - * 1: open(default). Only avaliable when high-speed clock-source SPLL is active. + * This field is used to open 120 MHz clock (div4 of SPLL) driven from SPLL. 0: close, + * 1: open(default). Only available when high-speed clock-source SPLL is active. */ uint32_t pll_120m_clk_en:1; /** pll_80m_clk_en : R/W; bitpos: [3]; default: 1; - * This field is used to open 80 MHz clock (div6 of SPLL) drived from SPLL. 0: close, - * 1: open(default). Only avaliable when high-speed clock-source SPLL is active. + * This field is used to open 80 MHz clock (div6 of SPLL) driven from SPLL. 0: close, + * 1: open(default). Only available when high-speed clock-source SPLL is active. */ uint32_t pll_80m_clk_en:1; /** pll_48m_clk_en : R/W; bitpos: [4]; default: 1; - * This field is used to open 48 MHz clock (div10 of SPLL) drived from SPLL. 0: close, - * 1: open(default). Only avaliable when high-speed clock-source SPLL is active. + * This field is used to open 48 MHz clock (div10 of SPLL) driven from SPLL. 0: close, + * 1: open(default). Only available when high-speed clock-source SPLL is active. */ uint32_t pll_48m_clk_en:1; /** pll_40m_clk_en : R/W; bitpos: [5]; default: 1; - * This field is used to open 40 MHz clock (div12 of SPLL) drived from SPLL. 0: close, - * 1: open(default). Only avaliable when high-speed clock-source SPLL is active. + * This field is used to open 40 MHz clock (div12 of SPLL) driven from SPLL. 0: close, + * 1: open(default). Only available when high-speed clock-source SPLL is active. */ uint32_t pll_40m_clk_en:1; /** pll_20m_clk_en : R/W; bitpos: [6]; default: 1; - * This field is used to open 20 MHz clock (div24 of SPLL) drived from SPLL. 0: close, - * 1: open(default). Only avaliable when high-speed clock-source SPLL is active. + * This field is used to open 20 MHz clock (div24 of SPLL) driven from SPLL. 0: close, + * 1: open(default). Only available when high-speed clock-source SPLL is active. */ uint32_t pll_20m_clk_en:1; uint32_t reserved_7:25; diff --git a/components/soc/esp32c6/include/soc/plic_reg.h b/components/soc/esp32c6/register/soc/plic_reg.h similarity index 100% rename from components/soc/esp32c6/include/soc/plic_reg.h rename to components/soc/esp32c6/register/soc/plic_reg.h diff --git a/components/soc/esp32c6/include/soc/pmu_reg.h b/components/soc/esp32c6/register/soc/pmu_reg.h similarity index 100% rename from components/soc/esp32c6/include/soc/pmu_reg.h rename to components/soc/esp32c6/register/soc/pmu_reg.h diff --git a/components/soc/esp32c6/include/soc/pmu_struct.h b/components/soc/esp32c6/register/soc/pmu_struct.h similarity index 99% rename from components/soc/esp32c6/include/soc/pmu_struct.h rename to components/soc/esp32c6/register/soc/pmu_struct.h index 5d0631189555..db545cfbc58f 100644 --- a/components/soc/esp32c6/include/soc/pmu_struct.h +++ b/components/soc/esp32c6/register/soc/pmu_struct.h @@ -11,7 +11,7 @@ extern "C" { #endif -#include "soc.h" +#include "soc/soc.h" #include "soc/pmu_reg.h" typedef union { diff --git a/components/soc/esp32c6/include/soc/reg_base.h b/components/soc/esp32c6/register/soc/reg_base.h similarity index 100% rename from components/soc/esp32c6/include/soc/reg_base.h rename to components/soc/esp32c6/register/soc/reg_base.h diff --git a/components/soc/esp32c6/include/soc/rmt_reg.h b/components/soc/esp32c6/register/soc/rmt_reg.h similarity index 100% rename from components/soc/esp32c6/include/soc/rmt_reg.h rename to components/soc/esp32c6/register/soc/rmt_reg.h diff --git a/components/soc/esp32c6/include/soc/rmt_struct.h b/components/soc/esp32c6/register/soc/rmt_struct.h similarity index 100% rename from components/soc/esp32c6/include/soc/rmt_struct.h rename to components/soc/esp32c6/register/soc/rmt_struct.h diff --git a/components/soc/esp32c6/include/soc/rsa_reg.h b/components/soc/esp32c6/register/soc/rsa_reg.h similarity index 100% rename from components/soc/esp32c6/include/soc/rsa_reg.h rename to components/soc/esp32c6/register/soc/rsa_reg.h diff --git a/components/soc/esp32c6/include/soc/rsa_struct.h b/components/soc/esp32c6/register/soc/rsa_struct.h similarity index 100% rename from components/soc/esp32c6/include/soc/rsa_struct.h rename to components/soc/esp32c6/register/soc/rsa_struct.h diff --git a/components/soc/esp32c6/include/soc/sha_reg.h b/components/soc/esp32c6/register/soc/sha_reg.h similarity index 98% rename from components/soc/esp32c6/include/soc/sha_reg.h rename to components/soc/esp32c6/register/soc/sha_reg.h index 265f510472a8..46955176e5af 100644 --- a/components/soc/esp32c6/include/soc/sha_reg.h +++ b/components/soc/esp32c6/register/soc/sha_reg.h @@ -156,7 +156,7 @@ extern "C" { #define SHA_DATE_S 0 /** SHA_H_MEM register - * Sha H memory which contains intermediate hash or finial hash. + * Sha H memory which contains intermediate hash or final hash. */ #define SHA_H_MEM (DR_REG_SHA_BASE + 0x40) #define SHA_H_MEM_SIZE_BYTES 64 diff --git a/components/soc/esp32c6/include/soc/sha_struct.h b/components/soc/esp32c6/register/soc/sha_struct.h similarity index 100% rename from components/soc/esp32c6/include/soc/sha_struct.h rename to components/soc/esp32c6/register/soc/sha_struct.h diff --git a/components/soc/esp32c6/include/soc/slc_reg.h b/components/soc/esp32c6/register/soc/slc_reg.h similarity index 100% rename from components/soc/esp32c6/include/soc/slc_reg.h rename to components/soc/esp32c6/register/soc/slc_reg.h diff --git a/components/soc/esp32c6/include/soc/slc_struct.h b/components/soc/esp32c6/register/soc/slc_struct.h similarity index 100% rename from components/soc/esp32c6/include/soc/slc_struct.h rename to components/soc/esp32c6/register/soc/slc_struct.h diff --git a/components/soc/esp32c6/include/soc/soc_etm_reg.h b/components/soc/esp32c6/register/soc/soc_etm_reg.h similarity index 100% rename from components/soc/esp32c6/include/soc/soc_etm_reg.h rename to components/soc/esp32c6/register/soc/soc_etm_reg.h diff --git a/components/soc/esp32c6/include/soc/soc_etm_struct.h b/components/soc/esp32c6/register/soc/soc_etm_struct.h similarity index 100% rename from components/soc/esp32c6/include/soc/soc_etm_struct.h rename to components/soc/esp32c6/register/soc/soc_etm_struct.h diff --git a/components/soc/esp32c6/include/soc/spi_mem_reg.h b/components/soc/esp32c6/register/soc/spi_mem_reg.h similarity index 99% rename from components/soc/esp32c6/include/soc/spi_mem_reg.h rename to components/soc/esp32c6/register/soc/spi_mem_reg.h index 81a136b87033..56ada6dc461d 100644 --- a/components/soc/esp32c6/include/soc/spi_mem_reg.h +++ b/components/soc/esp32c6/register/soc/spi_mem_reg.h @@ -98,8 +98,8 @@ he bit will be cleared once the operation done.1: enable 0: disable..*/ #define SPI_MEM_FLASH_DP_S 21 /* SPI_MEM_FLASH_RES : R/W/SC ;bitpos:[20] ;default: 1'b0 ; */ /*description: This bit combined with reg_resandres bit releases Flash from the power-down stat -e or high performance mode and obtains the devices ID. The bit will be cleared o -nce the operation done.1: enable 0: disable..*/ +e or high performance mode and obtains the devices ID. The bit will be cleared once + the operation done.1: enable 0: disable..*/ #define SPI_MEM_FLASH_RES (BIT(20)) #define SPI_MEM_FLASH_RES_M (BIT(20)) #define SPI_MEM_FLASH_RES_V 0x1 @@ -128,9 +128,9 @@ peration done.1: enable 0: disable..*/ #define SPI_MEM_FLASH_PE_V 0x1 #define SPI_MEM_FLASH_PE_S 17 /* SPI_MEM_SLV_ST : RO ;bitpos:[7:4] ;default: 4'b0 ; */ -/*description: The current status of SPI0 slave FSM: mspi_st. 0: idle state, 1: preparation sta -te, 2: send command state, 3: send address state, 4: wait state, 5: read data st -ate, 6:write data state, 7: done state, 8: read data end state..*/ +/*description: The current status of SPI0 slave FSM: mspi_st. 0: idle state, 1: preparation state, +2: send command state, 3: send address state, 4: wait state, 5: read data state +, 6:write data state, 7: done state, 8: read data end state..*/ #define SPI_MEM_SLV_ST 0x0000000F #define SPI_MEM_SLV_ST_M ((SPI_MEM_SLV_ST_V)<<(SPI_MEM_SLV_ST_S)) #define SPI_MEM_SLV_ST_V 0xF @@ -162,7 +162,7 @@ lways 1. 0: Others..*/ #define SPI_MEM_DATA_IE_ALWAYS_ON_V 0x1 #define SPI_MEM_DATA_IE_ALWAYS_ON_S 31 /* SPI_MEM_DQS_IE_ALWAYS_ON : HRO ;bitpos:[30] ;default: 1'b0 ; */ -/*description: When accesses to flash, 1: the IE signals of pads connected to SPI_DQS are alway +/*description: When accesses to flash, 1: the IE signals of pads connected to SPI_DQS are always s 1. 0: Others..*/ #define SPI_MEM_DQS_IE_ALWAYS_ON (BIT(30)) #define SPI_MEM_DQS_IE_ALWAYS_ON_M (BIT(30)) @@ -234,14 +234,14 @@ UT and SPI_MEM_FREAD_DOUT. 1: enable 0: disable..*/ #define SPI_MEM_FASTRD_MODE_V 0x1 #define SPI_MEM_FASTRD_MODE_S 13 /* SPI_MEM_TX_CRC_EN : HRO ;bitpos:[11] ;default: 1'b0 ; */ -/*description: For SPI1, enable crc32 when writing encrypted data to flash. 1: enable 0:disabl +/*description: For SPI1, enable crc32 when writing encrypted data to flash. 1: enable 0:disable e.*/ #define SPI_MEM_TX_CRC_EN (BIT(11)) #define SPI_MEM_TX_CRC_EN_M (BIT(11)) #define SPI_MEM_TX_CRC_EN_V 0x1 #define SPI_MEM_TX_CRC_EN_S 11 /* SPI_MEM_FCS_CRC_EN : HRO ;bitpos:[10] ;default: 1'b0 ; */ -/*description: For SPI1, initialize crc32 module before writing encrypted data to flash. Activ +/*description: For SPI1, initialize crc32 module before writing encrypted data to flash. Active e low..*/ #define SPI_MEM_FCS_CRC_EN (BIT(10)) #define SPI_MEM_FCS_CRC_EN_M (BIT(10)) @@ -397,7 +397,7 @@ y the real AXI read data back. 0: When ARSIZE 0~1, MSPI reply SLV_ERR..*/ /* SPI_MEM_CLK_MODE : R/W ;bitpos:[1:0] ;default: 2'h0 ; */ /*description: SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delaye d one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inacti -ve 3: SPI clock is alwasy on..*/ +ve 3: SPI clock is always on..*/ #define SPI_MEM_CLK_MODE 0x00000003 #define SPI_MEM_CLK_MODE_M ((SPI_MEM_CLK_MODE_V)<<(SPI_MEM_CLK_MODE_S)) #define SPI_MEM_CLK_MODE_V 0x3 @@ -427,8 +427,8 @@ whether there is an ECC region or not..*/ #define SPI_MEM_SPLIT_TRANS_EN_V 0x1 #define SPI_MEM_SPLIT_TRANS_EN_S 24 /* SPI_MEM_ECC_16TO18_BYTE_EN : HRO ;bitpos:[14] ;default: 1'b0 ; */ -/*description: Set this bit to enable SPI0 and SPI1 ECC 16 bytes data with 2 ECC bytes mode whe -n accesses flash..*/ +/*description: Set this bit to enable SPI0 and SPI1 ECC 16 bytes data with 2 ECC bytes mode when + accesses flash..*/ #define SPI_MEM_ECC_16TO18_BYTE_EN (BIT(14)) #define SPI_MEM_ECC_16TO18_BYTE_EN_M (BIT(14)) #define SPI_MEM_ECC_16TO18_BYTE_EN_V 0x1 @@ -808,8 +808,8 @@ he register value shall be (bit_num-1)..*/ #define SPI_MEM_SRAM_RDUMMY_CYCLELEN_V 0x3F #define SPI_MEM_SRAM_RDUMMY_CYCLELEN_S 6 /* SPI_MEM_CACHE_SRAM_USR_RCMD : HRO ;bitpos:[5] ;default: 1'b1 ; */ -/*description: For SPI0, In the external RAM mode cache read external RAM for user define comma -nd..*/ +/*description: For SPI0, In the external RAM mode cache read external RAM for user define command +..*/ #define SPI_MEM_CACHE_SRAM_USR_RCMD (BIT(5)) #define SPI_MEM_CACHE_SRAM_USR_RCMD_M (BIT(5)) #define SPI_MEM_CACHE_SRAM_USR_RCMD_V 0x1 @@ -1016,7 +1016,7 @@ e for sram..*/ #define SPI_MEM_SRAM_CLK_REG(i) (REG_SPI_MEM_BASE(i) + 0x50) /* SPI_MEM_SCLK_EQU_SYSCLK : HRO ;bitpos:[31] ;default: 1'b0 ; */ -/*description: For SPI0 external RAM interface, 1: spi_mem_clk is eqaul to system 0: spi_mem_c +/*description: For SPI0 external RAM interface, 1: spi_mem_clk is equal to system 0: spi_mem_c lk is divided from system clock..*/ #define SPI_MEM_SCLK_EQU_SYSCLK (BIT(31)) #define SPI_MEM_SCLK_EQU_SYSCLK_M (BIT(31)) @@ -1274,7 +1274,7 @@ out, status_in[15:0] is valid when two bytes of data are read out), SUS/SUS1/SUS #define SPI_MEM_FLASH_PES_EN_S 5 /* SPI_MEM_PES_PER_EN : R/W ;bitpos:[4] ;default: 1'b0 ; */ /*description: Set this bit to enable PES end triggers PER transfer option. If this bit is 0, a -pplication should send PER after PES is done..*/ +application should send PER after PES is done..*/ #define SPI_MEM_PES_PER_EN (BIT(4)) #define SPI_MEM_PES_PER_EN_M (BIT(4)) #define SPI_MEM_PES_PER_EN_V 0x1 @@ -1296,8 +1296,8 @@ resume command is sent..*/ #define SPI_MEM_FLASH_PER_WAIT_EN_V 0x1 #define SPI_MEM_FLASH_PER_WAIT_EN_S 2 /* SPI_MEM_FLASH_PES : R/W/SC ;bitpos:[1] ;default: 1'b0 ; */ -/*description: program erase suspend bit, program erase suspend operation will be triggered whe -n the bit is set. The bit will be cleared once the operation done.1: enable 0: d +/*description: program erase suspend bit, program erase suspend operation will be triggered when +the bit is set. The bit will be cleared once the operation done.1: enable 0: d isable..*/ #define SPI_MEM_FLASH_PES (BIT(1)) #define SPI_MEM_FLASH_PES_M (BIT(1)) @@ -1541,7 +1541,7 @@ mmand is sent. 0: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4) SPI_CLK cycles #define SPI_MEM_INT_RAW_REG(i) (REG_SPI_MEM_BASE(i) + 0xC8) /* SPI_MEM_BROWN_OUT_INT_RAW : R/WTC/SS ;bitpos:[10] ;default: 1'b0 ; */ /*description: The raw bit for SPI_MEM_BROWN_OUT_INT interrupt. 1: Triggered condition is that -chip is loosing power and RTC module sends out brown out close flash request to +chip is losing power and RTC module sends out brown out close flash request to SPI1. After SPI1 sends out suspend command to flash, this interrupt is triggered and MSPI returns to idle state. 0: Others..*/ #define SPI_MEM_BROWN_OUT_INT_RAW (BIT(10)) @@ -1584,9 +1584,9 @@ et and SPI_SMEM_ECC_ERR_INT_EN is cleared, this bit is triggered when the error his bit is triggered when the error times of SPI0/1 ECC read external RAM are eq ual or bigger than SPI_MEM_ECC_ERR_INT_NUM. When SPI_FMEM_ECC_ERR_INT_EN and SP I_SMEM_ECC_ERR_INT_EN are set, this bit is triggered when the total error times -of SPI0/1 ECC read external RAM and flash are equal or bigger than SPI_MEM_ECC_E -RR_INT_NUM. When SPI_FMEM_ECC_ERR_INT_EN and SPI_SMEM_ECC_ERR_INT_EN are cleare -d, this bit will not be triggered..*/ +of SPI0/1 ECC read external RAM and flash are equal or bigger than SPI_MEM_ECC_ERR_INT_NUM. +When SPI_FMEM_ECC_ERR_INT_EN and SPI_SMEM_ECC_ERR_INT_EN are cleared, +this bit will not be triggered..*/ #define SPI_MEM_ECC_ERR_INT_RAW (BIT(5)) #define SPI_MEM_ECC_ERR_INT_RAW_M (BIT(5)) #define SPI_MEM_ECC_ERR_INT_RAW_V 0x1 @@ -2376,8 +2376,8 @@ and RDATA_AFIFO are empty and spi0_mst_st is IDLE..*/ #define SPI_MEM_ALL_FIFO_EMPTY_V 0x1 #define SPI_MEM_ALL_FIFO_EMPTY_S 26 /* SPI_MEM_AXI_ERR_ADDR : R/SS/WTC ;bitpos:[25:0] ;default: 26'h0 ; */ -/*description: This bits show the first AXI write/read invalid error or AXI write flash error a -ddress. It is cleared by when SPI_MEM_AXI_WADDR_ERR_INT_CLR, SPI_MEM_AXI_WR_FLAS +/*description: This bits show the first AXI write/read invalid error or AXI write flash error +address. It is cleared by when SPI_MEM_AXI_WADDR_ERR_INT_CLR, SPI_MEM_AXI_WR_FLAS H_ERR_IN_CLR or SPI_MEM_AXI_RADDR_ERR_IN_CLR bit is set..*/ #define SPI_MEM_AXI_ERR_ADDR 0x03FFFFFF #define SPI_MEM_AXI_ERR_ADDR_M ((SPI_MEM_AXI_ERR_ADDR_V)<<(SPI_MEM_AXI_ERR_ADDR_S)) @@ -2684,7 +2684,7 @@ ations..*/ #define SPI_MEM_SMEM_TIMING_CALI_V 0x1 #define SPI_MEM_SMEM_TIMING_CALI_S 1 /* SPI_MEM_SMEM_TIMING_CLK_ENA : HRO ;bitpos:[0] ;default: 1'b1 ; */ -/*description: For sram, the bit is used to enable timing adjust clock for all reading operatio +/*description: For sram, the bit is used to enable timing adjust clock for all reading operation ns..*/ #define SPI_MEM_SMEM_TIMING_CLK_ENA (BIT(0)) #define SPI_MEM_SMEM_TIMING_CLK_ENA_M (BIT(0)) @@ -2942,8 +2942,8 @@ SPI core clock cycles..*/ #define SPI_MEM_SMEM_CS_HOLD_DELAY_V 0x3F #define SPI_MEM_SMEM_CS_HOLD_DELAY_S 25 /* SPI_MEM_SMEM_ECC_16TO18_BYTE_EN : HRO ;bitpos:[16] ;default: 1'b0 ; */ -/*description: Set this bit to enable SPI0 and SPI1 ECC 16 bytes data with 2 ECC bytes mode whe -n accesses external RAM..*/ +/*description: Set this bit to enable SPI0 and SPI1 ECC 16 bytes data with 2 ECC bytes mode when +accesses external RAM..*/ #define SPI_MEM_SMEM_ECC_16TO18_BYTE_EN (BIT(16)) #define SPI_MEM_SMEM_ECC_16TO18_BYTE_EN_M (BIT(16)) #define SPI_MEM_SMEM_ECC_16TO18_BYTE_EN_V 0x1 diff --git a/components/soc/esp32c6/include/soc/spi_mem_struct.h b/components/soc/esp32c6/register/soc/spi_mem_struct.h similarity index 99% rename from components/soc/esp32c6/include/soc/spi_mem_struct.h rename to components/soc/esp32c6/register/soc/spi_mem_struct.h index 9e2f7c1d3bae..74588ee0277a 100644 --- a/components/soc/esp32c6/include/soc/spi_mem_struct.h +++ b/components/soc/esp32c6/register/soc/spi_mem_struct.h @@ -69,7 +69,7 @@ typedef volatile struct spi_mem_dev_s { } ctrl; union { struct { - uint32_t clk_mode : 2; /*SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delayed one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3: SPI clock is alwasy on.*/ + uint32_t clk_mode : 2; /*SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delayed one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3: SPI clock is always on.*/ uint32_t cs_hold_dly_res : 10; /*After RES/DP/HPM command is sent, SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 512) SPI_CLK cycles.*/ uint32_t reserved2 : 9; /*reserved*/ uint32_t reg_ar_size0_1_support_en : 1; /*1: MSPI supports ARSIZE 0~3. When ARSIZE =0~2, MSPI read address is 4*n and reply the real AXI read data back. 0: When ARSIZE 0~1, MSPI reply SLV_ERR.*/ @@ -271,7 +271,7 @@ typedef volatile struct spi_mem_dev_s { uint32_t sclkcnt_h : 8; /*For SPI0 external RAM interface, it must be floor((spi_mem_clkcnt_N+1)/2-1).*/ uint32_t sclkcnt_n : 8; /*For SPI0 external RAM interface, it is the divider of spi_mem_clk. So spi_mem_clk frequency is system/(spi_mem_clkcnt_N+1)*/ uint32_t reserved24 : 7; /*reserved*/ - uint32_t sclk_equ_sysclk : 1; /*For SPI0 external RAM interface, 1: spi_mem_clk is eqaul to system 0: spi_mem_clk is divided from system clock.*/ + uint32_t sclk_equ_sysclk : 1; /*For SPI0 external RAM interface, 1: spi_mem_clk is equal to system 0: spi_mem_clk is divided from system clock.*/ }; uint32_t val; } sram_clk; @@ -388,7 +388,7 @@ typedef volatile struct spi_mem_dev_s { uint32_t axi_raddr_err : 1; /*The raw bit for SPI_MEM_AXI_RADDR_ERR_INT interrupt. 1: Triggered when AXI read address is invalid by compared to MMU configuration. 0: Others.*/ uint32_t axi_wr_flash_err : 1; /*The raw bit for SPI_MEM_AXI_WR_FALSH_ERR_INT interrupt. 1: Triggered when AXI write flash request is received. 0: Others.*/ uint32_t axi_waddr_err : 1; /*The raw bit for SPI_MEM_AXI_WADDR_ERR_INT interrupt. 1: Triggered when AXI write address is invalid by compared to MMU configuration. 0: Others.*/ - uint32_t brown_out : 1; /*The raw bit for SPI_MEM_BROWN_OUT_INT interrupt. 1: Triggered condition is that chip is loosing power and RTC module sends out brown out close flash request to SPI1. After SPI1 sends out suspend command to flash, this interrupt is triggered and MSPI returns to idle state. 0: Others.*/ + uint32_t brown_out : 1; /*The raw bit for SPI_MEM_BROWN_OUT_INT interrupt. 1: Triggered condition is that chip is losing power and RTC module sends out brown out close flash request to SPI1. After SPI1 sends out suspend command to flash, this interrupt is triggered and MSPI returns to idle state. 0: Others.*/ uint32_t reserved11 : 21; /*reserved*/ }; uint32_t val; @@ -1025,7 +1025,7 @@ typedef volatile struct spi_mem_dev_s { } mmu_power_ctrl; union { struct { - uint32_t reg_crypt_security_level : 3; /*Set the security level of spi mem cryption. 0: Shut off cryption DPA funtion. 1-7: The bigger the number is, the more secure the cryption is. (Note that the performance of cryption will decrease together with this number increasing)*/ + uint32_t reg_crypt_security_level : 3; /*Set the security level of spi mem cryption. 0: Shut off cryption DPA function. 1-7: The bigger the number is, the more secure the cryption is. (Note that the performance of cryption will decrease together with this number increasing)*/ uint32_t reg_crypt_calc_d_dpa_en : 1; /*Only available when SPI_CRYPT_SECURITY_LEVEL is not 0. 1: Enable DPA in the calculation that using key 1 or key 2. 0: Enable DPA only in the calculation that using key 1.*/ uint32_t reg_crypt_dpa_selectister : 1; /*1: MSPI XTS DPA clock gate is controlled by SPI_CRYPT_CALC_D_DPA_EN and SPI_CRYPT_SECURITY_LEVEL. 0: Controlled by efuse bits.*/ uint32_t reserved5 : 27; /*reserved*/ diff --git a/components/soc/esp32c6/include/soc/spi_reg.h b/components/soc/esp32c6/register/soc/spi_reg.h similarity index 99% rename from components/soc/esp32c6/include/soc/spi_reg.h rename to components/soc/esp32c6/register/soc/spi_reg.h index 544b54abd1f6..8da5868eaacb 100644 --- a/components/soc/esp32c6/include/soc/spi_reg.h +++ b/components/soc/esp32c6/register/soc/spi_reg.h @@ -221,7 +221,7 @@ extern "C" { #define SPI_CLKDIV_PRE_V 0x0000000FU #define SPI_CLKDIV_PRE_S 18 /** SPI_CLK_EQU_SYSCLK : R/W; bitpos: [31]; default: 1; - * In the master mode 1: spi_clk is eqaul to system 0: spi_clk is divided from system + * In the master mode 1: spi_clk is equal to system 0: spi_clk is divided from system * clock. Can be configured in CONF state. */ #define SPI_CLK_EQU_SYSCLK (BIT(31)) @@ -1944,7 +1944,7 @@ extern "C" { /** SPI_CLK_MODE : R/W; bitpos: [1:0]; default: 0; * SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delayed * one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3: - * SPI clock is alwasy on. Can be configured in CONF state. + * SPI clock is always on. Can be configured in CONF state. */ #define SPI_CLK_MODE 0x00000003U #define SPI_CLK_MODE_M (SPI_CLK_MODE_V << SPI_CLK_MODE_S) diff --git a/components/soc/esp32c6/include/soc/spi_struct.h b/components/soc/esp32c6/register/soc/spi_struct.h similarity index 99% rename from components/soc/esp32c6/include/soc/spi_struct.h rename to components/soc/esp32c6/register/soc/spi_struct.h index 14b6be86c14e..52076bb16c8f 100644 --- a/components/soc/esp32c6/include/soc/spi_struct.h +++ b/components/soc/esp32c6/register/soc/spi_struct.h @@ -511,7 +511,7 @@ typedef union { /** clk_mode : R/W; bitpos: [1:0]; default: 0; * SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delayed * one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3: - * SPI clock is alwasy on. Can be configured in CONF state. + * SPI clock is always on. Can be configured in CONF state. */ uint32_t clk_mode:2; /** clk_mode_13 : R/W; bitpos: [2]; default: 0; @@ -624,7 +624,7 @@ typedef union { uint32_t clkdiv_pre:4; uint32_t reserved_22:9; /** clk_equ_sysclk : R/W; bitpos: [31]; default: 1; - * In the master mode 1: spi_clk is eqaul to system 0: spi_clk is divided from system + * In the master mode 1: spi_clk is equal to system 0: spi_clk is divided from system * clock. Can be configured in CONF state. */ uint32_t clk_equ_sysclk:1; diff --git a/components/soc/esp32c6/include/soc/systimer_reg.h b/components/soc/esp32c6/register/soc/systimer_reg.h similarity index 100% rename from components/soc/esp32c6/include/soc/systimer_reg.h rename to components/soc/esp32c6/register/soc/systimer_reg.h diff --git a/components/soc/esp32c6/include/soc/systimer_struct.h b/components/soc/esp32c6/register/soc/systimer_struct.h similarity index 100% rename from components/soc/esp32c6/include/soc/systimer_struct.h rename to components/soc/esp32c6/register/soc/systimer_struct.h diff --git a/components/soc/esp32c6/include/soc/tee_reg.h b/components/soc/esp32c6/register/soc/tee_reg.h similarity index 100% rename from components/soc/esp32c6/include/soc/tee_reg.h rename to components/soc/esp32c6/register/soc/tee_reg.h diff --git a/components/soc/esp32c6/include/soc/tee_struct.h b/components/soc/esp32c6/register/soc/tee_struct.h similarity index 100% rename from components/soc/esp32c6/include/soc/tee_struct.h rename to components/soc/esp32c6/register/soc/tee_struct.h diff --git a/components/soc/esp32c6/include/soc/timer_group_reg.h b/components/soc/esp32c6/register/soc/timer_group_reg.h similarity index 100% rename from components/soc/esp32c6/include/soc/timer_group_reg.h rename to components/soc/esp32c6/register/soc/timer_group_reg.h diff --git a/components/soc/esp32c6/include/soc/timer_group_struct.h b/components/soc/esp32c6/register/soc/timer_group_struct.h similarity index 100% rename from components/soc/esp32c6/include/soc/timer_group_struct.h rename to components/soc/esp32c6/register/soc/timer_group_struct.h diff --git a/components/soc/esp32c6/include/soc/trace_reg.h b/components/soc/esp32c6/register/soc/trace_reg.h similarity index 99% rename from components/soc/esp32c6/include/soc/trace_reg.h rename to components/soc/esp32c6/register/soc/trace_reg.h index a5c3eda9dc77..b363fbd1f8eb 100644 --- a/components/soc/esp32c6/include/soc/trace_reg.h +++ b/components/soc/esp32c6/register/soc/trace_reg.h @@ -154,7 +154,7 @@ extern "C" { #define TRACE_TRIGGER_OFF_V 0x00000001U #define TRACE_TRIGGER_OFF_S 1 /** TRACE_MEM_LOOP : R/W; bitpos: [2]; default: 1; - * if this reg is 1, trace will loop wrtie trace_mem. If is 0, when mem_current_addr + * if this reg is 1, trace will loop write trace_mem. If is 0, when mem_current_addr * at mem_end_addr, it will stop at the mem_end_addr */ #define TRACE_MEM_LOOP (BIT(2)) diff --git a/components/soc/esp32c6/include/soc/trace_struct.h b/components/soc/esp32c6/register/soc/trace_struct.h similarity index 99% rename from components/soc/esp32c6/include/soc/trace_struct.h rename to components/soc/esp32c6/register/soc/trace_struct.h index 3b8330b6b0eb..e5bb04d46d5e 100644 --- a/components/soc/esp32c6/include/soc/trace_struct.h +++ b/components/soc/esp32c6/register/soc/trace_struct.h @@ -156,7 +156,7 @@ typedef union { */ uint32_t trigger_off:1; /** mem_loop : R/W; bitpos: [2]; default: 1; - * if this reg is 1, trace will loop wrtie trace_mem. If is 0, when mem_current_addr + * if this reg is 1, trace will loop write trace_mem. If is 0, when mem_current_addr * at mem_end_addr, it will stop at the mem_end_addr */ uint32_t mem_loop:1; diff --git a/components/soc/esp32c6/include/soc/twai_reg.h b/components/soc/esp32c6/register/soc/twai_reg.h similarity index 100% rename from components/soc/esp32c6/include/soc/twai_reg.h rename to components/soc/esp32c6/register/soc/twai_reg.h diff --git a/components/soc/esp32c6/include/soc/twai_struct.h b/components/soc/esp32c6/register/soc/twai_struct.h similarity index 100% rename from components/soc/esp32c6/include/soc/twai_struct.h rename to components/soc/esp32c6/register/soc/twai_struct.h diff --git a/components/soc/esp32c6/include/soc/uart_reg.h b/components/soc/esp32c6/register/soc/uart_reg.h similarity index 99% rename from components/soc/esp32c6/include/soc/uart_reg.h rename to components/soc/esp32c6/register/soc/uart_reg.h index abac8d92b197..d85004fcc1de 100644 --- a/components/soc/esp32c6/include/soc/uart_reg.h +++ b/components/soc/esp32c6/register/soc/uart_reg.h @@ -100,7 +100,7 @@ extern "C" { #define UART_RXFIFO_TOUT_INT_RAW_V 0x00000001U #define UART_RXFIFO_TOUT_INT_RAW_S 8 /** UART_SW_XON_INT_RAW : R/WTC/SS; bitpos: [9]; default: 0; - * This interrupt raw bit turns to high level when receiver recevies Xon char when + * This interrupt raw bit turns to high level when receiver receives Xon char when * uart_sw_flow_con_en is set to 1. */ #define UART_SW_XON_INT_RAW (BIT(9)) @@ -285,7 +285,7 @@ extern "C" { #define UART_TX_BRK_DONE_INT_ST_V 0x00000001U #define UART_TX_BRK_DONE_INT_ST_S 12 /** UART_TX_BRK_IDLE_DONE_INT_ST : RO; bitpos: [13]; default: 0; - * This is the stauts bit for tx_brk_idle_done_int_raw when tx_brk_idle_done_int_ena + * This is the status bit for tx_brk_idle_done_int_raw when tx_brk_idle_done_int_ena * is set to 1. */ #define UART_TX_BRK_IDLE_DONE_INT_ST (BIT(13)) @@ -760,7 +760,7 @@ extern "C" { #define UART_STOP_BIT_NUM_V 0x00000003U #define UART_STOP_BIT_NUM_S 4 /** UART_TXD_BRK : R/W; bitpos: [6]; default: 0; - * Set this bit to enbale transmitter to send NULL when the process of sending data + * Set this bit to enable transmitter to send NULL when the process of sending data * is done. */ #define UART_TXD_BRK (BIT(6)) @@ -1326,7 +1326,7 @@ extern "C" { */ #define UART_TOUT_CONF_SYNC_REG(i) (REG_UART_BASE(i) + 0x64) /** UART_RX_TOUT_EN : R/W; bitpos: [0]; default: 0; - * This is the enble bit for uart receiver's timeout function. + * This is the enable bit for uart receiver's timeout function. */ #define UART_RX_TOUT_EN (BIT(0)) #define UART_RX_TOUT_EN_M (UART_RX_TOUT_EN_V << UART_RX_TOUT_EN_S) @@ -1450,7 +1450,7 @@ extern "C" { */ #define UART_HIGHPULSE_REG(i) (REG_UART_BASE(i) + 0x80) /** UART_HIGHPULSE_MIN_CNT : RO; bitpos: [11:0]; default: 4095; - * This register stores the value of the maxinum duration time for the high level + * This register stores the value of the maximum duration time for the high level * pulse. It is used in baud rate-detect process. */ #define UART_HIGHPULSE_MIN_CNT 0x00000FFFU diff --git a/components/soc/esp32c6/include/soc/uart_struct.h b/components/soc/esp32c6/register/soc/uart_struct.h similarity index 99% rename from components/soc/esp32c6/include/soc/uart_struct.h rename to components/soc/esp32c6/register/soc/uart_struct.h index 674af37135c4..05d3b740d1f6 100644 --- a/components/soc/esp32c6/include/soc/uart_struct.h +++ b/components/soc/esp32c6/register/soc/uart_struct.h @@ -49,7 +49,7 @@ typedef union { typedef union { struct { /** rx_tout_en : R/W; bitpos: [0]; default: 0; - * This is the enble bit for uart receiver's timeout function. + * This is the enable bit for uart receiver's timeout function. */ uint32_t rx_tout_en:1; /** rx_tout_flow_dis : R/W; bitpos: [1]; default: 0; @@ -120,7 +120,7 @@ typedef union { */ uint32_t rxfifo_tout:1; /** sw_xon : R/WTC/SS; bitpos: [9]; default: 0; - * This interrupt raw bit turns to high level when receiver recevies Xon char when + * This interrupt raw bit turns to high level when receiver receives Xon char when * uart_sw_flow_con_en is set to 1. */ uint32_t sw_xon:1; @@ -238,7 +238,7 @@ typedef union { */ uint32_t tx_brk_done:1; /** tx_brk_idle_done : RO; bitpos: [13]; default: 0; - * This is the stauts bit for tx_brk_idle_done_int_raw when tx_brk_idle_done_int_ena + * This is the status bit for tx_brk_idle_done_int_raw when tx_brk_idle_done_int_ena * is set to 1. */ uint32_t tx_brk_idle_done:1; @@ -515,7 +515,7 @@ typedef union { */ uint32_t stop_bit_num:2; /** txd_brk : R/W; bitpos: [6]; default: 0; - * Set this bit to enbale transmitter to send NULL when the process of sending data + * Set this bit to enable transmitter to send NULL when the process of sending data * is done. */ uint32_t txd_brk:1; @@ -1170,7 +1170,7 @@ typedef union { typedef union { struct { /** highpulse_min_cnt : RO; bitpos: [11:0]; default: 4095; - * This register stores the value of the maxinum duration time for the high level + * This register stores the value of the maximum duration time for the high level * pulse. It is used in baud rate-detect process. */ uint32_t highpulse_min_cnt:12; diff --git a/components/soc/esp32c6/include/soc/uhci_reg.h b/components/soc/esp32c6/register/soc/uhci_reg.h similarity index 100% rename from components/soc/esp32c6/include/soc/uhci_reg.h rename to components/soc/esp32c6/register/soc/uhci_reg.h diff --git a/components/soc/esp32c6/include/soc/uhci_struct.h b/components/soc/esp32c6/register/soc/uhci_struct.h similarity index 100% rename from components/soc/esp32c6/include/soc/uhci_struct.h rename to components/soc/esp32c6/register/soc/uhci_struct.h diff --git a/components/soc/esp32c6/include/soc/usb_serial_jtag_reg.h b/components/soc/esp32c6/register/soc/usb_serial_jtag_reg.h similarity index 99% rename from components/soc/esp32c6/include/soc/usb_serial_jtag_reg.h rename to components/soc/esp32c6/register/soc/usb_serial_jtag_reg.h index eb4b8a1e039a..e188eea91118 100644 --- a/components/soc/esp32c6/include/soc/usb_serial_jtag_reg.h +++ b/components/soc/esp32c6/register/soc/usb_serial_jtag_reg.h @@ -1144,7 +1144,7 @@ extern "C" { #define USB_SERIAL_JTAG_SERIAL_OUT_AFIFO_RESET_RD_V 0x00000001U #define USB_SERIAL_JTAG_SERIAL_OUT_AFIFO_RESET_RD_S 3 /** USB_SERIAL_JTAG_SERIAL_OUT_AFIFO_REMPTY : RO; bitpos: [4]; default: 1; - * CDC_ACM OUTOUT async FIFO empty signal in read clock domain. + * CDC_ACM OUTPUT async FIFO empty signal in read clock domain. */ #define USB_SERIAL_JTAG_SERIAL_OUT_AFIFO_REMPTY (BIT(4)) #define USB_SERIAL_JTAG_SERIAL_OUT_AFIFO_REMPTY_M (USB_SERIAL_JTAG_SERIAL_OUT_AFIFO_REMPTY_V << USB_SERIAL_JTAG_SERIAL_OUT_AFIFO_REMPTY_S) diff --git a/components/soc/esp32c6/include/soc/usb_serial_jtag_struct.h b/components/soc/esp32c6/register/soc/usb_serial_jtag_struct.h similarity index 100% rename from components/soc/esp32c6/include/soc/usb_serial_jtag_struct.h rename to components/soc/esp32c6/register/soc/usb_serial_jtag_struct.h diff --git a/components/soc/esp32c6/include/soc/xts_aes_reg.h b/components/soc/esp32c6/register/soc/xts_aes_reg.h similarity index 98% rename from components/soc/esp32c6/include/soc/xts_aes_reg.h rename to components/soc/esp32c6/register/soc/xts_aes_reg.h index 5d7d7e0b8186..6e7cba263a76 100644 --- a/components/soc/esp32c6/include/soc/xts_aes_reg.h +++ b/components/soc/esp32c6/register/soc/xts_aes_reg.h @@ -32,7 +32,7 @@ s. Please do not use this field..*/ #define XTS_AES_DESTINATION_REG(i) (REG_SPI_MEM_BASE(i) + 0x344) /* XTS_AES_DESTINATION : R/W ;bitpos:[0] ;default: 1'b0 ; */ -/*description: This bit stores the destination parameter which will be used in manual encryptio +/*description: This bit stores the destination parameter which will be used in manual encryption n calculation. 0: flash(default), 1: psram(reserved). Only default value can be used..*/ #define XTS_AES_DESTINATION (BIT(0)) @@ -54,7 +54,7 @@ size parameter..*/ /* XTS_AES_TRIGGER : WT ;bitpos:[0] ;default: 1'b0 ; */ /*description: Set this bit to trigger the process of manual encryption calculation. This actio n should only be asserted when manual encryption status is 0. After this action, - manual encryption status becomes 1. After calculation is done, manual encryptio + manual encryption status becomes 1. After calculation is done, manual encryption n status becomes 2..*/ #define XTS_AES_TRIGGER (BIT(0)) #define XTS_AES_TRIGGER_M (BIT(0)) @@ -115,7 +115,7 @@ ing key 1..*/ #define XTS_AES_CRYPT_CALC_D_DPA_EN_V 0x1 #define XTS_AES_CRYPT_CALC_D_DPA_EN_S 3 /* XTS_AES_CRYPT_SECURITY_LEVEL : R/W ;bitpos:[2:0] ;default: 3'd7 ; */ -/*description: Set the security level of spi mem cryption. 0: Shut off cryption DPA funtion. 1- +/*description: Set the security level of spi mem cryption. 0: Shut off cryption DPA function. 1- 7: The bigger the number is, the more secure the cryption is. (Note that the per formance of cryption will decrease together with this number increasing).*/ #define XTS_AES_CRYPT_SECURITY_LEVEL 0x00000007 From 82f4add36def32ec9d504ff6104e05dd3dd051c9 Mon Sep 17 00:00:00 2001 From: laokaiyao Date: Fri, 6 Sep 2024 18:29:15 +0800 Subject: [PATCH 148/365] refactor(soc): sort esp32c5 soc headers --- components/soc/esp32c5/include/soc/soc.h | 2 +- components/soc/esp32c5/include/soc/system_reg.h | 2 +- components/soc/esp32c5/register/soc/.gitkeep | 0 components/soc/esp32c5/{include => register}/soc/aes_reg.h | 0 components/soc/esp32c5/{include => register}/soc/aes_struct.h | 0 components/soc/esp32c5/{include => register}/soc/ahb_dma_reg.h | 0 .../soc/esp32c5/{include => register}/soc/ahb_dma_struct.h | 0 .../soc/esp32c5/{include => register}/soc/apb_saradc_reg.h | 0 .../soc/esp32c5/{include => register}/soc/apb_saradc_struct.h | 0 .../soc/esp32c5/{include => register}/soc/assist_debug_reg.h | 0 .../soc/esp32c5/{include => register}/soc/assist_debug_struct.h | 0 .../soc/esp32c5/{include => register}/soc/bitscrambler_reg.h | 0 .../soc/esp32c5/{include => register}/soc/bitscrambler_struct.h | 0 components/soc/esp32c5/{include => register}/soc/cache_reg.h | 0 components/soc/esp32c5/{include => register}/soc/cache_struct.h | 0 components/soc/esp32c5/{include => register}/soc/ds_reg.h | 0 components/soc/esp32c5/{include => register}/soc/ds_struct.h | 0 components/soc/esp32c5/{include => register}/soc/ecc_mult_reg.h | 0 .../soc/esp32c5/{include => register}/soc/ecc_mult_struct.h | 0 components/soc/esp32c5/{include => register}/soc/ecdsa_reg.h | 0 components/soc/esp32c5/{include => register}/soc/ecdsa_struct.h | 0 components/soc/esp32c5/{include => register}/soc/efuse_reg.h | 0 components/soc/esp32c5/{include => register}/soc/efuse_struct.h | 0 components/soc/esp32c5/{include => register}/soc/gpio_reg.h | 0 components/soc/esp32c5/{include => register}/soc/gpio_struct.h | 0 components/soc/esp32c5/{include => register}/soc/hmac_reg.h | 0 components/soc/esp32c5/{include => register}/soc/hmac_struct.h | 0 components/soc/esp32c5/{include => register}/soc/hp_apm_reg.h | 0 .../soc/esp32c5/{include => register}/soc/hp_apm_struct.h | 0 .../soc/esp32c5/{include => register}/soc/hp_system_reg.h | 0 .../soc/esp32c5/{include => register}/soc/hp_system_struct.h | 0 components/soc/esp32c5/{include => register}/soc/huk_reg.h | 0 components/soc/esp32c5/{include => register}/soc/huk_struct.h | 0 .../soc/esp32c5/{include => register}/soc/i2c_ana_mst_reg.h | 0 components/soc/esp32c5/{include => register}/soc/i2c_reg.h | 0 components/soc/esp32c5/{include => register}/soc/i2c_struct.h | 0 components/soc/esp32c5/{include => register}/soc/i2s_reg.h | 0 components/soc/esp32c5/{include => register}/soc/i2s_struct.h | 0 .../soc/esp32c5/{include => register}/soc/ieee802154_reg.h | 0 .../soc/esp32c5/{include => register}/soc/ieee802154_struct.h | 0 .../esp32c5/{include => register}/soc/interrupt_matrix_reg.h | 0 .../esp32c5/{include => register}/soc/interrupt_matrix_struct.h | 0 components/soc/esp32c5/{include => register}/soc/intpri_reg.h | 0 .../soc/esp32c5/{include => register}/soc/intpri_struct.h | 0 components/soc/esp32c5/{include => register}/soc/io_mux_reg.h | 0 .../soc/esp32c5/{include => register}/soc/io_mux_struct.h | 0 components/soc/esp32c5/{include => register}/soc/keymng_reg.h | 0 .../soc/esp32c5/{include => register}/soc/keymng_struct.h | 0 components/soc/esp32c5/{include => register}/soc/ledc_reg.h | 0 components/soc/esp32c5/{include => register}/soc/ledc_struct.h | 0 .../soc/esp32c5/{include => register}/soc/lp_analog_peri_reg.h | 0 .../esp32c5/{include => register}/soc/lp_analog_peri_struct.h | 0 components/soc/esp32c5/{include => register}/soc/lp_aon_reg.h | 0 .../soc/esp32c5/{include => register}/soc/lp_aon_struct.h | 0 components/soc/esp32c5/{include => register}/soc/lp_apm0_reg.h | 0 .../soc/esp32c5/{include => register}/soc/lp_apm0_struct.h | 0 components/soc/esp32c5/{include => register}/soc/lp_apm_reg.h | 0 .../soc/esp32c5/{include => register}/soc/lp_apm_struct.h | 0 .../soc/esp32c5/{include => register}/soc/lp_clkrst_reg.h | 0 .../soc/esp32c5/{include => register}/soc/lp_clkrst_struct.h | 0 components/soc/esp32c5/{include => register}/soc/lp_gpio_reg.h | 0 .../soc/esp32c5/{include => register}/soc/lp_gpio_struct.h | 0 .../soc/esp32c5/{include => register}/soc/lp_i2c_ana_mst_reg.h | 0 .../esp32c5/{include => register}/soc/lp_i2c_ana_mst_struct.h | 0 components/soc/esp32c5/{include => register}/soc/lp_i2c_reg.h | 0 .../soc/esp32c5/{include => register}/soc/lp_i2c_struct.h | 0 components/soc/esp32c5/{include => register}/soc/lp_iomux_reg.h | 0 .../soc/esp32c5/{include => register}/soc/lp_iomux_struct.h | 0 components/soc/esp32c5/{include => register}/soc/lp_tee_reg.h | 0 .../soc/esp32c5/{include => register}/soc/lp_tee_struct.h | 0 components/soc/esp32c5/{include => register}/soc/lp_timer_reg.h | 0 .../soc/esp32c5/{include => register}/soc/lp_timer_struct.h | 0 components/soc/esp32c5/{include => register}/soc/lp_uart_reg.h | 0 .../soc/esp32c5/{include => register}/soc/lp_uart_struct.h | 0 components/soc/esp32c5/{include => register}/soc/lp_wdt_reg.h | 0 .../soc/esp32c5/{include => register}/soc/lp_wdt_struct.h | 0 components/soc/esp32c5/{include => register}/soc/lpperi_reg.h | 0 .../soc/esp32c5/{include => register}/soc/lpperi_struct.h | 0 components/soc/esp32c5/{include => register}/soc/mcpwm_reg.h | 0 components/soc/esp32c5/{include => register}/soc/mcpwm_struct.h | 0 .../soc/esp32c5/{include => register}/soc/mem_monitor_reg.h | 0 .../soc/esp32c5/{include => register}/soc/mem_monitor_struct.h | 0 components/soc/esp32c5/{include => register}/soc/parl_io_reg.h | 0 .../soc/esp32c5/{include => register}/soc/parl_io_struct.h | 0 components/soc/esp32c5/{include => register}/soc/pau_reg.h | 0 components/soc/esp32c5/{include => register}/soc/pau_struct.h | 0 components/soc/esp32c5/{include => register}/soc/pcnt_reg.h | 0 components/soc/esp32c5/{include => register}/soc/pcnt_struct.h | 0 components/soc/esp32c5/{include => register}/soc/pcr_reg.h | 0 components/soc/esp32c5/{include => register}/soc/pcr_struct.h | 0 components/soc/esp32c5/{include => register}/soc/pmu_reg.h | 0 components/soc/esp32c5/{include => register}/soc/pmu_struct.h | 2 +- components/soc/esp32c5/{include => register}/soc/pvt_reg.h | 0 components/soc/esp32c5/{include => register}/soc/pvt_struct.h | 0 components/soc/esp32c5/{include => register}/soc/reg_base.h | 0 components/soc/esp32c5/{include => register}/soc/rmt_reg.h | 0 components/soc/esp32c5/{include => register}/soc/rmt_struct.h | 0 components/soc/esp32c5/{include => register}/soc/rsa_reg.h | 0 components/soc/esp32c5/{include => register}/soc/rsa_struct.h | 0 components/soc/esp32c5/{include => register}/soc/sha_reg.h | 0 components/soc/esp32c5/{include => register}/soc/sha_struct.h | 0 components/soc/esp32c5/{include => register}/soc/soc_etm_reg.h | 0 .../soc/esp32c5/{include => register}/soc/soc_etm_struct.h | 0 components/soc/esp32c5/{include => register}/soc/spi1_mem_reg.h | 0 .../soc/esp32c5/{include => register}/soc/spi1_mem_struct.h | 0 .../soc/esp32c5/{include => register}/soc/spi_mem_c_reg.h | 0 .../soc/esp32c5/{include => register}/soc/spi_mem_c_struct.h | 0 components/soc/esp32c5/{include => register}/soc/spi_reg.h | 0 components/soc/esp32c5/{include => register}/soc/spi_struct.h | 0 components/soc/esp32c5/{include => register}/soc/systimer_reg.h | 0 .../soc/esp32c5/{include => register}/soc/systimer_struct.h | 0 components/soc/esp32c5/{include => register}/soc/tee_reg.h | 0 components/soc/esp32c5/{include => register}/soc/tee_struct.h | 0 .../soc/esp32c5/{include => register}/soc/timer_group_reg.h | 0 .../soc/esp32c5/{include => register}/soc/timer_group_struct.h | 0 components/soc/esp32c5/{include => register}/soc/trace_reg.h | 0 components/soc/esp32c5/{include => register}/soc/trace_struct.h | 0 components/soc/esp32c5/{include => register}/soc/twaifd_reg.h | 0 .../soc/esp32c5/{include => register}/soc/twaifd_struct.h | 0 components/soc/esp32c5/{include => register}/soc/uart_reg.h | 0 components/soc/esp32c5/{include => register}/soc/uart_struct.h | 0 components/soc/esp32c5/{include => register}/soc/uhci_reg.h | 0 components/soc/esp32c5/{include => register}/soc/uhci_struct.h | 0 .../soc/esp32c5/{include => register}/soc/usb_serial_jtag_reg.h | 0 .../esp32c5/{include => register}/soc/usb_serial_jtag_struct.h | 0 125 files changed, 3 insertions(+), 3 deletions(-) delete mode 100644 components/soc/esp32c5/register/soc/.gitkeep rename components/soc/esp32c5/{include => register}/soc/aes_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/aes_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/ahb_dma_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/ahb_dma_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/apb_saradc_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/apb_saradc_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/assist_debug_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/assist_debug_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/bitscrambler_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/bitscrambler_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/cache_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/cache_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/ds_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/ds_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/ecc_mult_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/ecc_mult_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/ecdsa_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/ecdsa_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/efuse_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/efuse_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/gpio_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/gpio_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/hmac_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/hmac_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/hp_apm_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/hp_apm_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/hp_system_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/hp_system_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/huk_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/huk_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/i2c_ana_mst_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/i2c_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/i2c_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/i2s_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/i2s_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/ieee802154_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/ieee802154_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/interrupt_matrix_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/interrupt_matrix_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/intpri_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/intpri_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/io_mux_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/io_mux_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/keymng_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/keymng_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/ledc_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/ledc_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/lp_analog_peri_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/lp_analog_peri_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/lp_aon_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/lp_aon_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/lp_apm0_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/lp_apm0_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/lp_apm_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/lp_apm_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/lp_clkrst_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/lp_clkrst_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/lp_gpio_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/lp_gpio_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/lp_i2c_ana_mst_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/lp_i2c_ana_mst_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/lp_i2c_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/lp_i2c_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/lp_iomux_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/lp_iomux_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/lp_tee_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/lp_tee_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/lp_timer_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/lp_timer_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/lp_uart_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/lp_uart_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/lp_wdt_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/lp_wdt_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/lpperi_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/lpperi_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/mcpwm_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/mcpwm_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/mem_monitor_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/mem_monitor_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/parl_io_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/parl_io_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/pau_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/pau_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/pcnt_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/pcnt_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/pcr_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/pcr_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/pmu_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/pmu_struct.h (99%) rename components/soc/esp32c5/{include => register}/soc/pvt_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/pvt_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/reg_base.h (100%) rename components/soc/esp32c5/{include => register}/soc/rmt_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/rmt_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/rsa_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/rsa_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/sha_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/sha_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/soc_etm_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/soc_etm_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/spi1_mem_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/spi1_mem_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/spi_mem_c_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/spi_mem_c_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/spi_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/spi_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/systimer_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/systimer_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/tee_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/tee_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/timer_group_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/timer_group_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/trace_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/trace_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/twaifd_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/twaifd_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/uart_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/uart_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/uhci_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/uhci_struct.h (100%) rename components/soc/esp32c5/{include => register}/soc/usb_serial_jtag_reg.h (100%) rename components/soc/esp32c5/{include => register}/soc/usb_serial_jtag_struct.h (100%) diff --git a/components/soc/esp32c5/include/soc/soc.h b/components/soc/esp32c5/include/soc/soc.h index 7134121e4b50..d03396f3c68d 100644 --- a/components/soc/esp32c5/include/soc/soc.h +++ b/components/soc/esp32c5/include/soc/soc.h @@ -12,7 +12,7 @@ #endif #include "esp_bit_defs.h" -#include "reg_base.h" +#include "soc/reg_base.h" #define PRO_CPU_NUM (0) diff --git a/components/soc/esp32c5/include/soc/system_reg.h b/components/soc/esp32c5/include/soc/system_reg.h index 06daf4471320..939bf695f0bd 100644 --- a/components/soc/esp32c5/include/soc/system_reg.h +++ b/components/soc/esp32c5/include/soc/system_reg.h @@ -7,6 +7,6 @@ #include "soc/hp_system_reg.h" // TODO: IDF-5720 -#include "intpri_reg.h" +#include "soc/intpri_reg.h" #define SYSTEM_CPU_INTR_FROM_CPU_0_REG INTPRI_CPU_INTR_FROM_CPU_0_REG #define SYSTEM_CPU_INTR_FROM_CPU_0 INTPRI_CPU_INTR_FROM_CPU_0 diff --git a/components/soc/esp32c5/register/soc/.gitkeep b/components/soc/esp32c5/register/soc/.gitkeep deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/components/soc/esp32c5/include/soc/aes_reg.h b/components/soc/esp32c5/register/soc/aes_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/aes_reg.h rename to components/soc/esp32c5/register/soc/aes_reg.h diff --git a/components/soc/esp32c5/include/soc/aes_struct.h b/components/soc/esp32c5/register/soc/aes_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/aes_struct.h rename to components/soc/esp32c5/register/soc/aes_struct.h diff --git a/components/soc/esp32c5/include/soc/ahb_dma_reg.h b/components/soc/esp32c5/register/soc/ahb_dma_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/ahb_dma_reg.h rename to components/soc/esp32c5/register/soc/ahb_dma_reg.h diff --git a/components/soc/esp32c5/include/soc/ahb_dma_struct.h b/components/soc/esp32c5/register/soc/ahb_dma_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/ahb_dma_struct.h rename to components/soc/esp32c5/register/soc/ahb_dma_struct.h diff --git a/components/soc/esp32c5/include/soc/apb_saradc_reg.h b/components/soc/esp32c5/register/soc/apb_saradc_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/apb_saradc_reg.h rename to components/soc/esp32c5/register/soc/apb_saradc_reg.h diff --git a/components/soc/esp32c5/include/soc/apb_saradc_struct.h b/components/soc/esp32c5/register/soc/apb_saradc_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/apb_saradc_struct.h rename to components/soc/esp32c5/register/soc/apb_saradc_struct.h diff --git a/components/soc/esp32c5/include/soc/assist_debug_reg.h b/components/soc/esp32c5/register/soc/assist_debug_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/assist_debug_reg.h rename to components/soc/esp32c5/register/soc/assist_debug_reg.h diff --git a/components/soc/esp32c5/include/soc/assist_debug_struct.h b/components/soc/esp32c5/register/soc/assist_debug_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/assist_debug_struct.h rename to components/soc/esp32c5/register/soc/assist_debug_struct.h diff --git a/components/soc/esp32c5/include/soc/bitscrambler_reg.h b/components/soc/esp32c5/register/soc/bitscrambler_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/bitscrambler_reg.h rename to components/soc/esp32c5/register/soc/bitscrambler_reg.h diff --git a/components/soc/esp32c5/include/soc/bitscrambler_struct.h b/components/soc/esp32c5/register/soc/bitscrambler_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/bitscrambler_struct.h rename to components/soc/esp32c5/register/soc/bitscrambler_struct.h diff --git a/components/soc/esp32c5/include/soc/cache_reg.h b/components/soc/esp32c5/register/soc/cache_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/cache_reg.h rename to components/soc/esp32c5/register/soc/cache_reg.h diff --git a/components/soc/esp32c5/include/soc/cache_struct.h b/components/soc/esp32c5/register/soc/cache_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/cache_struct.h rename to components/soc/esp32c5/register/soc/cache_struct.h diff --git a/components/soc/esp32c5/include/soc/ds_reg.h b/components/soc/esp32c5/register/soc/ds_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/ds_reg.h rename to components/soc/esp32c5/register/soc/ds_reg.h diff --git a/components/soc/esp32c5/include/soc/ds_struct.h b/components/soc/esp32c5/register/soc/ds_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/ds_struct.h rename to components/soc/esp32c5/register/soc/ds_struct.h diff --git a/components/soc/esp32c5/include/soc/ecc_mult_reg.h b/components/soc/esp32c5/register/soc/ecc_mult_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/ecc_mult_reg.h rename to components/soc/esp32c5/register/soc/ecc_mult_reg.h diff --git a/components/soc/esp32c5/include/soc/ecc_mult_struct.h b/components/soc/esp32c5/register/soc/ecc_mult_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/ecc_mult_struct.h rename to components/soc/esp32c5/register/soc/ecc_mult_struct.h diff --git a/components/soc/esp32c5/include/soc/ecdsa_reg.h b/components/soc/esp32c5/register/soc/ecdsa_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/ecdsa_reg.h rename to components/soc/esp32c5/register/soc/ecdsa_reg.h diff --git a/components/soc/esp32c5/include/soc/ecdsa_struct.h b/components/soc/esp32c5/register/soc/ecdsa_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/ecdsa_struct.h rename to components/soc/esp32c5/register/soc/ecdsa_struct.h diff --git a/components/soc/esp32c5/include/soc/efuse_reg.h b/components/soc/esp32c5/register/soc/efuse_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/efuse_reg.h rename to components/soc/esp32c5/register/soc/efuse_reg.h diff --git a/components/soc/esp32c5/include/soc/efuse_struct.h b/components/soc/esp32c5/register/soc/efuse_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/efuse_struct.h rename to components/soc/esp32c5/register/soc/efuse_struct.h diff --git a/components/soc/esp32c5/include/soc/gpio_reg.h b/components/soc/esp32c5/register/soc/gpio_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/gpio_reg.h rename to components/soc/esp32c5/register/soc/gpio_reg.h diff --git a/components/soc/esp32c5/include/soc/gpio_struct.h b/components/soc/esp32c5/register/soc/gpio_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/gpio_struct.h rename to components/soc/esp32c5/register/soc/gpio_struct.h diff --git a/components/soc/esp32c5/include/soc/hmac_reg.h b/components/soc/esp32c5/register/soc/hmac_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/hmac_reg.h rename to components/soc/esp32c5/register/soc/hmac_reg.h diff --git a/components/soc/esp32c5/include/soc/hmac_struct.h b/components/soc/esp32c5/register/soc/hmac_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/hmac_struct.h rename to components/soc/esp32c5/register/soc/hmac_struct.h diff --git a/components/soc/esp32c5/include/soc/hp_apm_reg.h b/components/soc/esp32c5/register/soc/hp_apm_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/hp_apm_reg.h rename to components/soc/esp32c5/register/soc/hp_apm_reg.h diff --git a/components/soc/esp32c5/include/soc/hp_apm_struct.h b/components/soc/esp32c5/register/soc/hp_apm_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/hp_apm_struct.h rename to components/soc/esp32c5/register/soc/hp_apm_struct.h diff --git a/components/soc/esp32c5/include/soc/hp_system_reg.h b/components/soc/esp32c5/register/soc/hp_system_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/hp_system_reg.h rename to components/soc/esp32c5/register/soc/hp_system_reg.h diff --git a/components/soc/esp32c5/include/soc/hp_system_struct.h b/components/soc/esp32c5/register/soc/hp_system_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/hp_system_struct.h rename to components/soc/esp32c5/register/soc/hp_system_struct.h diff --git a/components/soc/esp32c5/include/soc/huk_reg.h b/components/soc/esp32c5/register/soc/huk_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/huk_reg.h rename to components/soc/esp32c5/register/soc/huk_reg.h diff --git a/components/soc/esp32c5/include/soc/huk_struct.h b/components/soc/esp32c5/register/soc/huk_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/huk_struct.h rename to components/soc/esp32c5/register/soc/huk_struct.h diff --git a/components/soc/esp32c5/include/soc/i2c_ana_mst_reg.h b/components/soc/esp32c5/register/soc/i2c_ana_mst_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/i2c_ana_mst_reg.h rename to components/soc/esp32c5/register/soc/i2c_ana_mst_reg.h diff --git a/components/soc/esp32c5/include/soc/i2c_reg.h b/components/soc/esp32c5/register/soc/i2c_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/i2c_reg.h rename to components/soc/esp32c5/register/soc/i2c_reg.h diff --git a/components/soc/esp32c5/include/soc/i2c_struct.h b/components/soc/esp32c5/register/soc/i2c_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/i2c_struct.h rename to components/soc/esp32c5/register/soc/i2c_struct.h diff --git a/components/soc/esp32c5/include/soc/i2s_reg.h b/components/soc/esp32c5/register/soc/i2s_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/i2s_reg.h rename to components/soc/esp32c5/register/soc/i2s_reg.h diff --git a/components/soc/esp32c5/include/soc/i2s_struct.h b/components/soc/esp32c5/register/soc/i2s_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/i2s_struct.h rename to components/soc/esp32c5/register/soc/i2s_struct.h diff --git a/components/soc/esp32c5/include/soc/ieee802154_reg.h b/components/soc/esp32c5/register/soc/ieee802154_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/ieee802154_reg.h rename to components/soc/esp32c5/register/soc/ieee802154_reg.h diff --git a/components/soc/esp32c5/include/soc/ieee802154_struct.h b/components/soc/esp32c5/register/soc/ieee802154_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/ieee802154_struct.h rename to components/soc/esp32c5/register/soc/ieee802154_struct.h diff --git a/components/soc/esp32c5/include/soc/interrupt_matrix_reg.h b/components/soc/esp32c5/register/soc/interrupt_matrix_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/interrupt_matrix_reg.h rename to components/soc/esp32c5/register/soc/interrupt_matrix_reg.h diff --git a/components/soc/esp32c5/include/soc/interrupt_matrix_struct.h b/components/soc/esp32c5/register/soc/interrupt_matrix_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/interrupt_matrix_struct.h rename to components/soc/esp32c5/register/soc/interrupt_matrix_struct.h diff --git a/components/soc/esp32c5/include/soc/intpri_reg.h b/components/soc/esp32c5/register/soc/intpri_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/intpri_reg.h rename to components/soc/esp32c5/register/soc/intpri_reg.h diff --git a/components/soc/esp32c5/include/soc/intpri_struct.h b/components/soc/esp32c5/register/soc/intpri_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/intpri_struct.h rename to components/soc/esp32c5/register/soc/intpri_struct.h diff --git a/components/soc/esp32c5/include/soc/io_mux_reg.h b/components/soc/esp32c5/register/soc/io_mux_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/io_mux_reg.h rename to components/soc/esp32c5/register/soc/io_mux_reg.h diff --git a/components/soc/esp32c5/include/soc/io_mux_struct.h b/components/soc/esp32c5/register/soc/io_mux_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/io_mux_struct.h rename to components/soc/esp32c5/register/soc/io_mux_struct.h diff --git a/components/soc/esp32c5/include/soc/keymng_reg.h b/components/soc/esp32c5/register/soc/keymng_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/keymng_reg.h rename to components/soc/esp32c5/register/soc/keymng_reg.h diff --git a/components/soc/esp32c5/include/soc/keymng_struct.h b/components/soc/esp32c5/register/soc/keymng_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/keymng_struct.h rename to components/soc/esp32c5/register/soc/keymng_struct.h diff --git a/components/soc/esp32c5/include/soc/ledc_reg.h b/components/soc/esp32c5/register/soc/ledc_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/ledc_reg.h rename to components/soc/esp32c5/register/soc/ledc_reg.h diff --git a/components/soc/esp32c5/include/soc/ledc_struct.h b/components/soc/esp32c5/register/soc/ledc_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/ledc_struct.h rename to components/soc/esp32c5/register/soc/ledc_struct.h diff --git a/components/soc/esp32c5/include/soc/lp_analog_peri_reg.h b/components/soc/esp32c5/register/soc/lp_analog_peri_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/lp_analog_peri_reg.h rename to components/soc/esp32c5/register/soc/lp_analog_peri_reg.h diff --git a/components/soc/esp32c5/include/soc/lp_analog_peri_struct.h b/components/soc/esp32c5/register/soc/lp_analog_peri_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/lp_analog_peri_struct.h rename to components/soc/esp32c5/register/soc/lp_analog_peri_struct.h diff --git a/components/soc/esp32c5/include/soc/lp_aon_reg.h b/components/soc/esp32c5/register/soc/lp_aon_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/lp_aon_reg.h rename to components/soc/esp32c5/register/soc/lp_aon_reg.h diff --git a/components/soc/esp32c5/include/soc/lp_aon_struct.h b/components/soc/esp32c5/register/soc/lp_aon_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/lp_aon_struct.h rename to components/soc/esp32c5/register/soc/lp_aon_struct.h diff --git a/components/soc/esp32c5/include/soc/lp_apm0_reg.h b/components/soc/esp32c5/register/soc/lp_apm0_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/lp_apm0_reg.h rename to components/soc/esp32c5/register/soc/lp_apm0_reg.h diff --git a/components/soc/esp32c5/include/soc/lp_apm0_struct.h b/components/soc/esp32c5/register/soc/lp_apm0_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/lp_apm0_struct.h rename to components/soc/esp32c5/register/soc/lp_apm0_struct.h diff --git a/components/soc/esp32c5/include/soc/lp_apm_reg.h b/components/soc/esp32c5/register/soc/lp_apm_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/lp_apm_reg.h rename to components/soc/esp32c5/register/soc/lp_apm_reg.h diff --git a/components/soc/esp32c5/include/soc/lp_apm_struct.h b/components/soc/esp32c5/register/soc/lp_apm_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/lp_apm_struct.h rename to components/soc/esp32c5/register/soc/lp_apm_struct.h diff --git a/components/soc/esp32c5/include/soc/lp_clkrst_reg.h b/components/soc/esp32c5/register/soc/lp_clkrst_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/lp_clkrst_reg.h rename to components/soc/esp32c5/register/soc/lp_clkrst_reg.h diff --git a/components/soc/esp32c5/include/soc/lp_clkrst_struct.h b/components/soc/esp32c5/register/soc/lp_clkrst_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/lp_clkrst_struct.h rename to components/soc/esp32c5/register/soc/lp_clkrst_struct.h diff --git a/components/soc/esp32c5/include/soc/lp_gpio_reg.h b/components/soc/esp32c5/register/soc/lp_gpio_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/lp_gpio_reg.h rename to components/soc/esp32c5/register/soc/lp_gpio_reg.h diff --git a/components/soc/esp32c5/include/soc/lp_gpio_struct.h b/components/soc/esp32c5/register/soc/lp_gpio_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/lp_gpio_struct.h rename to components/soc/esp32c5/register/soc/lp_gpio_struct.h diff --git a/components/soc/esp32c5/include/soc/lp_i2c_ana_mst_reg.h b/components/soc/esp32c5/register/soc/lp_i2c_ana_mst_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/lp_i2c_ana_mst_reg.h rename to components/soc/esp32c5/register/soc/lp_i2c_ana_mst_reg.h diff --git a/components/soc/esp32c5/include/soc/lp_i2c_ana_mst_struct.h b/components/soc/esp32c5/register/soc/lp_i2c_ana_mst_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/lp_i2c_ana_mst_struct.h rename to components/soc/esp32c5/register/soc/lp_i2c_ana_mst_struct.h diff --git a/components/soc/esp32c5/include/soc/lp_i2c_reg.h b/components/soc/esp32c5/register/soc/lp_i2c_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/lp_i2c_reg.h rename to components/soc/esp32c5/register/soc/lp_i2c_reg.h diff --git a/components/soc/esp32c5/include/soc/lp_i2c_struct.h b/components/soc/esp32c5/register/soc/lp_i2c_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/lp_i2c_struct.h rename to components/soc/esp32c5/register/soc/lp_i2c_struct.h diff --git a/components/soc/esp32c5/include/soc/lp_iomux_reg.h b/components/soc/esp32c5/register/soc/lp_iomux_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/lp_iomux_reg.h rename to components/soc/esp32c5/register/soc/lp_iomux_reg.h diff --git a/components/soc/esp32c5/include/soc/lp_iomux_struct.h b/components/soc/esp32c5/register/soc/lp_iomux_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/lp_iomux_struct.h rename to components/soc/esp32c5/register/soc/lp_iomux_struct.h diff --git a/components/soc/esp32c5/include/soc/lp_tee_reg.h b/components/soc/esp32c5/register/soc/lp_tee_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/lp_tee_reg.h rename to components/soc/esp32c5/register/soc/lp_tee_reg.h diff --git a/components/soc/esp32c5/include/soc/lp_tee_struct.h b/components/soc/esp32c5/register/soc/lp_tee_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/lp_tee_struct.h rename to components/soc/esp32c5/register/soc/lp_tee_struct.h diff --git a/components/soc/esp32c5/include/soc/lp_timer_reg.h b/components/soc/esp32c5/register/soc/lp_timer_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/lp_timer_reg.h rename to components/soc/esp32c5/register/soc/lp_timer_reg.h diff --git a/components/soc/esp32c5/include/soc/lp_timer_struct.h b/components/soc/esp32c5/register/soc/lp_timer_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/lp_timer_struct.h rename to components/soc/esp32c5/register/soc/lp_timer_struct.h diff --git a/components/soc/esp32c5/include/soc/lp_uart_reg.h b/components/soc/esp32c5/register/soc/lp_uart_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/lp_uart_reg.h rename to components/soc/esp32c5/register/soc/lp_uart_reg.h diff --git a/components/soc/esp32c5/include/soc/lp_uart_struct.h b/components/soc/esp32c5/register/soc/lp_uart_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/lp_uart_struct.h rename to components/soc/esp32c5/register/soc/lp_uart_struct.h diff --git a/components/soc/esp32c5/include/soc/lp_wdt_reg.h b/components/soc/esp32c5/register/soc/lp_wdt_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/lp_wdt_reg.h rename to components/soc/esp32c5/register/soc/lp_wdt_reg.h diff --git a/components/soc/esp32c5/include/soc/lp_wdt_struct.h b/components/soc/esp32c5/register/soc/lp_wdt_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/lp_wdt_struct.h rename to components/soc/esp32c5/register/soc/lp_wdt_struct.h diff --git a/components/soc/esp32c5/include/soc/lpperi_reg.h b/components/soc/esp32c5/register/soc/lpperi_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/lpperi_reg.h rename to components/soc/esp32c5/register/soc/lpperi_reg.h diff --git a/components/soc/esp32c5/include/soc/lpperi_struct.h b/components/soc/esp32c5/register/soc/lpperi_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/lpperi_struct.h rename to components/soc/esp32c5/register/soc/lpperi_struct.h diff --git a/components/soc/esp32c5/include/soc/mcpwm_reg.h b/components/soc/esp32c5/register/soc/mcpwm_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/mcpwm_reg.h rename to components/soc/esp32c5/register/soc/mcpwm_reg.h diff --git a/components/soc/esp32c5/include/soc/mcpwm_struct.h b/components/soc/esp32c5/register/soc/mcpwm_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/mcpwm_struct.h rename to components/soc/esp32c5/register/soc/mcpwm_struct.h diff --git a/components/soc/esp32c5/include/soc/mem_monitor_reg.h b/components/soc/esp32c5/register/soc/mem_monitor_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/mem_monitor_reg.h rename to components/soc/esp32c5/register/soc/mem_monitor_reg.h diff --git a/components/soc/esp32c5/include/soc/mem_monitor_struct.h b/components/soc/esp32c5/register/soc/mem_monitor_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/mem_monitor_struct.h rename to components/soc/esp32c5/register/soc/mem_monitor_struct.h diff --git a/components/soc/esp32c5/include/soc/parl_io_reg.h b/components/soc/esp32c5/register/soc/parl_io_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/parl_io_reg.h rename to components/soc/esp32c5/register/soc/parl_io_reg.h diff --git a/components/soc/esp32c5/include/soc/parl_io_struct.h b/components/soc/esp32c5/register/soc/parl_io_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/parl_io_struct.h rename to components/soc/esp32c5/register/soc/parl_io_struct.h diff --git a/components/soc/esp32c5/include/soc/pau_reg.h b/components/soc/esp32c5/register/soc/pau_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/pau_reg.h rename to components/soc/esp32c5/register/soc/pau_reg.h diff --git a/components/soc/esp32c5/include/soc/pau_struct.h b/components/soc/esp32c5/register/soc/pau_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/pau_struct.h rename to components/soc/esp32c5/register/soc/pau_struct.h diff --git a/components/soc/esp32c5/include/soc/pcnt_reg.h b/components/soc/esp32c5/register/soc/pcnt_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/pcnt_reg.h rename to components/soc/esp32c5/register/soc/pcnt_reg.h diff --git a/components/soc/esp32c5/include/soc/pcnt_struct.h b/components/soc/esp32c5/register/soc/pcnt_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/pcnt_struct.h rename to components/soc/esp32c5/register/soc/pcnt_struct.h diff --git a/components/soc/esp32c5/include/soc/pcr_reg.h b/components/soc/esp32c5/register/soc/pcr_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/pcr_reg.h rename to components/soc/esp32c5/register/soc/pcr_reg.h diff --git a/components/soc/esp32c5/include/soc/pcr_struct.h b/components/soc/esp32c5/register/soc/pcr_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/pcr_struct.h rename to components/soc/esp32c5/register/soc/pcr_struct.h diff --git a/components/soc/esp32c5/include/soc/pmu_reg.h b/components/soc/esp32c5/register/soc/pmu_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/pmu_reg.h rename to components/soc/esp32c5/register/soc/pmu_reg.h diff --git a/components/soc/esp32c5/include/soc/pmu_struct.h b/components/soc/esp32c5/register/soc/pmu_struct.h similarity index 99% rename from components/soc/esp32c5/include/soc/pmu_struct.h rename to components/soc/esp32c5/register/soc/pmu_struct.h index 67f6269fc32f..ad7fc03d016e 100644 --- a/components/soc/esp32c5/include/soc/pmu_struct.h +++ b/components/soc/esp32c5/register/soc/pmu_struct.h @@ -11,7 +11,7 @@ extern "C" { #endif -#include "soc.h" +#include "soc/soc.h" #include "soc/pmu_reg.h" typedef union { diff --git a/components/soc/esp32c5/include/soc/pvt_reg.h b/components/soc/esp32c5/register/soc/pvt_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/pvt_reg.h rename to components/soc/esp32c5/register/soc/pvt_reg.h diff --git a/components/soc/esp32c5/include/soc/pvt_struct.h b/components/soc/esp32c5/register/soc/pvt_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/pvt_struct.h rename to components/soc/esp32c5/register/soc/pvt_struct.h diff --git a/components/soc/esp32c5/include/soc/reg_base.h b/components/soc/esp32c5/register/soc/reg_base.h similarity index 100% rename from components/soc/esp32c5/include/soc/reg_base.h rename to components/soc/esp32c5/register/soc/reg_base.h diff --git a/components/soc/esp32c5/include/soc/rmt_reg.h b/components/soc/esp32c5/register/soc/rmt_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/rmt_reg.h rename to components/soc/esp32c5/register/soc/rmt_reg.h diff --git a/components/soc/esp32c5/include/soc/rmt_struct.h b/components/soc/esp32c5/register/soc/rmt_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/rmt_struct.h rename to components/soc/esp32c5/register/soc/rmt_struct.h diff --git a/components/soc/esp32c5/include/soc/rsa_reg.h b/components/soc/esp32c5/register/soc/rsa_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/rsa_reg.h rename to components/soc/esp32c5/register/soc/rsa_reg.h diff --git a/components/soc/esp32c5/include/soc/rsa_struct.h b/components/soc/esp32c5/register/soc/rsa_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/rsa_struct.h rename to components/soc/esp32c5/register/soc/rsa_struct.h diff --git a/components/soc/esp32c5/include/soc/sha_reg.h b/components/soc/esp32c5/register/soc/sha_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/sha_reg.h rename to components/soc/esp32c5/register/soc/sha_reg.h diff --git a/components/soc/esp32c5/include/soc/sha_struct.h b/components/soc/esp32c5/register/soc/sha_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/sha_struct.h rename to components/soc/esp32c5/register/soc/sha_struct.h diff --git a/components/soc/esp32c5/include/soc/soc_etm_reg.h b/components/soc/esp32c5/register/soc/soc_etm_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/soc_etm_reg.h rename to components/soc/esp32c5/register/soc/soc_etm_reg.h diff --git a/components/soc/esp32c5/include/soc/soc_etm_struct.h b/components/soc/esp32c5/register/soc/soc_etm_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/soc_etm_struct.h rename to components/soc/esp32c5/register/soc/soc_etm_struct.h diff --git a/components/soc/esp32c5/include/soc/spi1_mem_reg.h b/components/soc/esp32c5/register/soc/spi1_mem_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/spi1_mem_reg.h rename to components/soc/esp32c5/register/soc/spi1_mem_reg.h diff --git a/components/soc/esp32c5/include/soc/spi1_mem_struct.h b/components/soc/esp32c5/register/soc/spi1_mem_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/spi1_mem_struct.h rename to components/soc/esp32c5/register/soc/spi1_mem_struct.h diff --git a/components/soc/esp32c5/include/soc/spi_mem_c_reg.h b/components/soc/esp32c5/register/soc/spi_mem_c_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/spi_mem_c_reg.h rename to components/soc/esp32c5/register/soc/spi_mem_c_reg.h diff --git a/components/soc/esp32c5/include/soc/spi_mem_c_struct.h b/components/soc/esp32c5/register/soc/spi_mem_c_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/spi_mem_c_struct.h rename to components/soc/esp32c5/register/soc/spi_mem_c_struct.h diff --git a/components/soc/esp32c5/include/soc/spi_reg.h b/components/soc/esp32c5/register/soc/spi_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/spi_reg.h rename to components/soc/esp32c5/register/soc/spi_reg.h diff --git a/components/soc/esp32c5/include/soc/spi_struct.h b/components/soc/esp32c5/register/soc/spi_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/spi_struct.h rename to components/soc/esp32c5/register/soc/spi_struct.h diff --git a/components/soc/esp32c5/include/soc/systimer_reg.h b/components/soc/esp32c5/register/soc/systimer_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/systimer_reg.h rename to components/soc/esp32c5/register/soc/systimer_reg.h diff --git a/components/soc/esp32c5/include/soc/systimer_struct.h b/components/soc/esp32c5/register/soc/systimer_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/systimer_struct.h rename to components/soc/esp32c5/register/soc/systimer_struct.h diff --git a/components/soc/esp32c5/include/soc/tee_reg.h b/components/soc/esp32c5/register/soc/tee_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/tee_reg.h rename to components/soc/esp32c5/register/soc/tee_reg.h diff --git a/components/soc/esp32c5/include/soc/tee_struct.h b/components/soc/esp32c5/register/soc/tee_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/tee_struct.h rename to components/soc/esp32c5/register/soc/tee_struct.h diff --git a/components/soc/esp32c5/include/soc/timer_group_reg.h b/components/soc/esp32c5/register/soc/timer_group_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/timer_group_reg.h rename to components/soc/esp32c5/register/soc/timer_group_reg.h diff --git a/components/soc/esp32c5/include/soc/timer_group_struct.h b/components/soc/esp32c5/register/soc/timer_group_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/timer_group_struct.h rename to components/soc/esp32c5/register/soc/timer_group_struct.h diff --git a/components/soc/esp32c5/include/soc/trace_reg.h b/components/soc/esp32c5/register/soc/trace_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/trace_reg.h rename to components/soc/esp32c5/register/soc/trace_reg.h diff --git a/components/soc/esp32c5/include/soc/trace_struct.h b/components/soc/esp32c5/register/soc/trace_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/trace_struct.h rename to components/soc/esp32c5/register/soc/trace_struct.h diff --git a/components/soc/esp32c5/include/soc/twaifd_reg.h b/components/soc/esp32c5/register/soc/twaifd_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/twaifd_reg.h rename to components/soc/esp32c5/register/soc/twaifd_reg.h diff --git a/components/soc/esp32c5/include/soc/twaifd_struct.h b/components/soc/esp32c5/register/soc/twaifd_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/twaifd_struct.h rename to components/soc/esp32c5/register/soc/twaifd_struct.h diff --git a/components/soc/esp32c5/include/soc/uart_reg.h b/components/soc/esp32c5/register/soc/uart_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/uart_reg.h rename to components/soc/esp32c5/register/soc/uart_reg.h diff --git a/components/soc/esp32c5/include/soc/uart_struct.h b/components/soc/esp32c5/register/soc/uart_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/uart_struct.h rename to components/soc/esp32c5/register/soc/uart_struct.h diff --git a/components/soc/esp32c5/include/soc/uhci_reg.h b/components/soc/esp32c5/register/soc/uhci_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/uhci_reg.h rename to components/soc/esp32c5/register/soc/uhci_reg.h diff --git a/components/soc/esp32c5/include/soc/uhci_struct.h b/components/soc/esp32c5/register/soc/uhci_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/uhci_struct.h rename to components/soc/esp32c5/register/soc/uhci_struct.h diff --git a/components/soc/esp32c5/include/soc/usb_serial_jtag_reg.h b/components/soc/esp32c5/register/soc/usb_serial_jtag_reg.h similarity index 100% rename from components/soc/esp32c5/include/soc/usb_serial_jtag_reg.h rename to components/soc/esp32c5/register/soc/usb_serial_jtag_reg.h diff --git a/components/soc/esp32c5/include/soc/usb_serial_jtag_struct.h b/components/soc/esp32c5/register/soc/usb_serial_jtag_struct.h similarity index 100% rename from components/soc/esp32c5/include/soc/usb_serial_jtag_struct.h rename to components/soc/esp32c5/register/soc/usb_serial_jtag_struct.h From cb097aeb54564834732c8db267d8edb5ec758214 Mon Sep 17 00:00:00 2001 From: Chen Jichang Date: Wed, 9 Oct 2024 15:37:05 +0800 Subject: [PATCH 149/365] refactor(mcpwm): refactor gpio mode config in mcpwm Deprecate io_loop_back flag. Use capture timer to test generator and dead time. --- .../include/driver/mcpwm_cap.h | 3 +- components/esp_driver_mcpwm/src/mcpwm_cap.c | 34 +- components/esp_driver_mcpwm/src/mcpwm_fault.c | 32 +- components/esp_driver_mcpwm/src/mcpwm_gen.c | 28 +- .../esp_driver_mcpwm/src/mcpwm_private.h | 3 - components/esp_driver_mcpwm/src/mcpwm_sync.c | 31 +- .../test_apps/mcpwm/main/test_mcpwm_cap.c | 13 +- .../test_apps/mcpwm/main/test_mcpwm_fault.c | 13 +- .../test_apps/mcpwm/main/test_mcpwm_gen.c | 325 ++++++++++++++++-- .../test_apps/mcpwm/main/test_mcpwm_iram.c | 11 +- .../test_apps/mcpwm/main/test_mcpwm_oper.c | 45 ++- .../test_apps/mcpwm/main/test_mcpwm_sync.c | 12 +- docs/en/api-reference/peripherals/mcpwm.rst | 6 - .../zh_CN/api-reference/peripherals/mcpwm.rst | 6 - 14 files changed, 442 insertions(+), 120 deletions(-) diff --git a/components/esp_driver_mcpwm/include/driver/mcpwm_cap.h b/components/esp_driver_mcpwm/include/driver/mcpwm_cap.h index 6e2808608763..601454b82a47 100644 --- a/components/esp_driver_mcpwm/include/driver/mcpwm_cap.h +++ b/components/esp_driver_mcpwm/include/driver/mcpwm_cap.h @@ -145,8 +145,7 @@ typedef struct { uint32_t pull_down: 1; /*!< Whether to pull down internally */ uint32_t invert_cap_signal: 1; /*!< Invert the input capture signal */ uint32_t io_loop_back: 1; /*!< For debug/test, the signal output from the GPIO will be fed to the input path as well */ - uint32_t keep_io_conf_at_exit: 1; /*!< For debug/test, whether to keep the GPIO configuration when capture channel is deleted. - By default, driver will reset the GPIO pin at exit. */ + uint32_t keep_io_conf_at_exit: 1 __attribute__((deprecated)); /*!< Deprecated. Driver won't change the GPIO configuration in deinilization. */ } flags; /*!< Extra configuration flags for capture channel */ } mcpwm_capture_channel_config_t; diff --git a/components/esp_driver_mcpwm/src/mcpwm_cap.c b/components/esp_driver_mcpwm/src/mcpwm_cap.c index 0baf6b090cbb..c80eedd68178 100644 --- a/components/esp_driver_mcpwm/src/mcpwm_cap.c +++ b/components/esp_driver_mcpwm/src/mcpwm_cap.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -24,9 +24,11 @@ #include "soc/soc_caps.h" #include "soc/mcpwm_periph.h" #include "hal/mcpwm_ll.h" +#include "hal/gpio_hal.h" #include "driver/mcpwm_cap.h" #include "driver/gpio.h" #include "mcpwm_private.h" +#include "esp_private/gpio.h" static const char *TAG = "mcpwm"; @@ -289,20 +291,25 @@ esp_err_t mcpwm_new_capture_channel(mcpwm_cap_timer_handle_t cap_timer, const mc if (config->gpio_num >= 0) { // GPIO configuration - gpio_config_t gpio_conf = { - .intr_type = GPIO_INTR_DISABLE, - .mode = GPIO_MODE_INPUT | (config->flags.io_loop_back ? GPIO_MODE_OUTPUT : 0), // also enable the output path if `io_loop_back` is enabled - .pin_bit_mask = (1ULL << config->gpio_num), - .pull_down_en = config->flags.pull_down, - .pull_up_en = config->flags.pull_up, - }; - ESP_GOTO_ON_ERROR(gpio_config(&gpio_conf), err, TAG, "config capture GPIO failed"); + gpio_func_sel(config->gpio_num, PIN_FUNC_GPIO); + gpio_input_enable(config->gpio_num); esp_rom_gpio_connect_in_signal(config->gpio_num, mcpwm_periph_signals.groups[group->group_id].captures[cap_chan_id].cap_sig, 0); + if (config->flags.pull_down) { + gpio_pulldown_en(config->gpio_num); + } + if (config->flags.pull_up) { + gpio_pullup_en(config->gpio_num); + } + + // deprecated, to be removed in in esp-idf v6.0 + if (config->flags.io_loop_back) { + gpio_ll_output_enable(&GPIO, config->gpio_num); + } } cap_chan->gpio_num = config->gpio_num; cap_chan->fsm = MCPWM_CAP_CHAN_FSM_INIT; - cap_chan->flags.reset_io_at_exit = !config->flags.keep_io_conf_at_exit && config->gpio_num >= 0; + *ret_cap_channel = cap_chan; ESP_LOGD(TAG, "new capture channel (%d,%d) at %p", group->group_id, cap_chan_id, cap_chan); return ESP_OK; @@ -323,15 +330,16 @@ esp_err_t mcpwm_del_capture_channel(mcpwm_cap_channel_handle_t cap_channel) int cap_chan_id = cap_channel->cap_chan_id; ESP_LOGD(TAG, "del capture channel (%d,%d)", group->group_id, cap_channel->cap_chan_id); - if (cap_channel->flags.reset_io_at_exit) { - gpio_reset_pin(cap_channel->gpio_num); - } portENTER_CRITICAL(&group->spinlock); mcpwm_ll_intr_enable(hal->dev, MCPWM_LL_EVENT_CAPTURE(cap_chan_id), false); mcpwm_ll_intr_clear_status(hal->dev, MCPWM_LL_EVENT_CAPTURE(cap_chan_id)); portEXIT_CRITICAL(&group->spinlock); + // disconnect signal from the GPIO pin + esp_rom_gpio_connect_in_signal(GPIO_MATRIX_CONST_ZERO_INPUT, + mcpwm_periph_signals.groups[group->group_id].captures[cap_chan_id].cap_sig, 0); + // recycle memory resource ESP_RETURN_ON_ERROR(mcpwm_capture_channel_destroy(cap_channel), TAG, "destroy capture channel failed"); return ESP_OK; diff --git a/components/esp_driver_mcpwm/src/mcpwm_fault.c b/components/esp_driver_mcpwm/src/mcpwm_fault.c index b2539e2048fb..d1ccde6912d8 100644 --- a/components/esp_driver_mcpwm/src/mcpwm_fault.c +++ b/components/esp_driver_mcpwm/src/mcpwm_fault.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -22,9 +22,11 @@ #include "soc/soc_caps.h" #include "soc/mcpwm_periph.h" #include "hal/mcpwm_ll.h" +#include "hal/gpio_hal.h" #include "driver/mcpwm_fault.h" #include "driver/gpio.h" #include "mcpwm_private.h" +#include "esp_private/gpio.h" static const char *TAG = "mcpwm"; @@ -112,16 +114,22 @@ esp_err_t mcpwm_new_gpio_fault(const mcpwm_gpio_fault_config_t *config, mcpwm_fa ESP_GOTO_ON_ERROR(mcpwm_check_intr_priority(group, config->intr_priority), err, TAG, "set group interrupt priority failed"); // GPIO configuration - gpio_config_t gpio_conf = { - .intr_type = GPIO_INTR_DISABLE, - .mode = GPIO_MODE_INPUT | (config->flags.io_loop_back ? GPIO_MODE_OUTPUT : 0), // also enable the output path if `io_loop_back` is enabled - .pin_bit_mask = (1ULL << config->gpio_num), - .pull_down_en = config->flags.pull_down, - .pull_up_en = config->flags.pull_up, - }; - ESP_GOTO_ON_ERROR(gpio_config(&gpio_conf), err, TAG, "config fault GPIO failed"); + gpio_func_sel(config->gpio_num, PIN_FUNC_GPIO); + gpio_input_enable(config->gpio_num); esp_rom_gpio_connect_in_signal(config->gpio_num, mcpwm_periph_signals.groups[group_id].gpio_faults[fault_id].fault_sig, 0); + if (config->flags.pull_down) { + gpio_pulldown_en(config->gpio_num); + } + if (config->flags.pull_up) { + gpio_pullup_en(config->gpio_num); + } + + // deprecated, to be removed in in esp-idf v6.0 + if (config->flags.io_loop_back) { + gpio_ll_output_enable(&GPIO, config->gpio_num); + } + // set fault detection polarity // different gpio faults share the same config register, using a group level spin lock portENTER_CRITICAL(&group->spinlock); @@ -151,10 +159,10 @@ static esp_err_t mcpwm_del_gpio_fault(mcpwm_fault_handle_t fault) mcpwm_gpio_fault_t *gpio_fault = __containerof(fault, mcpwm_gpio_fault_t, base); mcpwm_group_t *group = fault->group; mcpwm_hal_context_t *hal = &group->hal; + int group_id = group->group_id; int fault_id = gpio_fault->fault_id; ESP_LOGD(TAG, "del GPIO fault (%d,%d)", group->group_id, fault_id); - gpio_reset_pin(gpio_fault->gpio_num); portENTER_CRITICAL(&group->spinlock); mcpwm_ll_intr_enable(hal->dev, MCPWM_LL_EVENT_FAULT_MASK(fault_id), false); @@ -164,6 +172,10 @@ static esp_err_t mcpwm_del_gpio_fault(mcpwm_fault_handle_t fault) // disable fault detection mcpwm_ll_fault_enable_detection(hal->dev, fault_id, false); + // disconnect signal from the GPIO pin + esp_rom_gpio_connect_in_signal(GPIO_MATRIX_CONST_ZERO_INPUT, + mcpwm_periph_signals.groups[group_id].gpio_faults[fault_id].fault_sig, 0); + // recycle memory resource ESP_RETURN_ON_ERROR(mcpwm_gpio_fault_destroy(gpio_fault), TAG, "destroy GPIO fault failed"); return ESP_OK; diff --git a/components/esp_driver_mcpwm/src/mcpwm_gen.c b/components/esp_driver_mcpwm/src/mcpwm_gen.c index 0851f744c617..2c145e8bea49 100644 --- a/components/esp_driver_mcpwm/src/mcpwm_gen.c +++ b/components/esp_driver_mcpwm/src/mcpwm_gen.c @@ -21,10 +21,12 @@ #include "soc/soc_caps.h" #include "soc/mcpwm_periph.h" #include "hal/mcpwm_ll.h" +#include "hal/gpio_hal.h" #include "driver/gpio.h" #include "driver/mcpwm_gen.h" #include "mcpwm_private.h" #include "esp_private/esp_gpio_reserve.h" +#include "esp_private/gpio.h" static const char *TAG = "mcpwm"; @@ -84,27 +86,29 @@ esp_err_t mcpwm_new_generator(mcpwm_oper_handle_t oper, const mcpwm_generator_co // reset generator mcpwm_hal_generator_reset(hal, oper_id, gen_id); - // GPIO configuration gen->gen_gpio_num = -1; // gpio not initialized yet - gpio_config_t gpio_conf = { - .intr_type = GPIO_INTR_DISABLE, - // also enable the input path if `io_loop_back` is enabled - .mode = (config->flags.io_od_mode ? GPIO_MODE_OUTPUT_OD : GPIO_MODE_OUTPUT) | (config->flags.io_loop_back ? GPIO_MODE_INPUT : 0), - .pin_bit_mask = (1ULL << config->gen_gpio_num), - .pull_down_en = config->flags.pull_down, - .pull_up_en = config->flags.pull_up, - }; - ESP_GOTO_ON_ERROR(gpio_config(&gpio_conf), err, TAG, "config gen GPIO failed"); // reserve the GPIO output path, because we don't expect another peripheral to signal to the same GPIO uint64_t old_gpio_rsv_mask = esp_gpio_reserve(BIT64(config->gen_gpio_num)); // check if the GPIO is already used by others if (old_gpio_rsv_mask & BIT64(config->gen_gpio_num)) { ESP_LOGW(TAG, "GPIO %d is not usable, maybe conflict with others", config->gen_gpio_num); } + + // GPIO Matrix/MUX configuration + gpio_func_sel(config->gen_gpio_num, PIN_FUNC_GPIO); + // connect the signal to the GPIO by matrix, it will also enable the output path properly esp_rom_gpio_connect_out_signal(config->gen_gpio_num, mcpwm_periph_signals.groups[group->group_id].operators[oper_id].generators[gen_id].pwm_sig, config->flags.invert_pwm, 0); + // deprecated, to be removed in in esp-idf v6.0 + if (config->flags.io_loop_back) { + gpio_ll_input_enable(&GPIO, config->gen_gpio_num); + } + if (config->flags.io_od_mode) { + gpio_ll_od_enable(&GPIO, config->gen_gpio_num); + } + // fill in other generator members gen->gen_gpio_num = config->gen_gpio_num; gen->spinlock = (portMUX_TYPE)portMUX_INITIALIZER_UNLOCKED; @@ -126,9 +130,9 @@ esp_err_t mcpwm_del_generator(mcpwm_gen_handle_t gen) mcpwm_group_t *group = oper->group; ESP_LOGD(TAG, "del generator (%d,%d,%d)", group->group_id, oper->oper_id, gen->gen_id); - // reset GPIO + // disable GPIO output if (gen->gen_gpio_num >= 0) { - gpio_reset_pin(gen->gen_gpio_num); + gpio_output_disable(gen->gen_gpio_num); esp_gpio_revoke(BIT64(gen->gen_gpio_num)); } // recycle memory resource diff --git a/components/esp_driver_mcpwm/src/mcpwm_private.h b/components/esp_driver_mcpwm/src/mcpwm_private.h index cc3e2fcd4909..e299d3dd80b8 100644 --- a/components/esp_driver_mcpwm/src/mcpwm_private.h +++ b/components/esp_driver_mcpwm/src/mcpwm_private.h @@ -250,9 +250,6 @@ struct mcpwm_cap_channel_t { intr_handle_t intr; // Interrupt handle mcpwm_capture_event_cb_t on_cap; // Callback function which would be invoked in capture interrupt routine void *user_data; // user data which would be passed to the capture callback - struct { - uint32_t reset_io_at_exit: 1; // Whether to reset the GPIO configuration when capture channel is deleted - } flags; }; mcpwm_group_t *mcpwm_acquire_group_handle(int group_id); diff --git a/components/esp_driver_mcpwm/src/mcpwm_sync.c b/components/esp_driver_mcpwm/src/mcpwm_sync.c index dede456adc33..3fe84b5fb26a 100644 --- a/components/esp_driver_mcpwm/src/mcpwm_sync.c +++ b/components/esp_driver_mcpwm/src/mcpwm_sync.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -22,9 +22,11 @@ #include "soc/soc_caps.h" #include "soc/mcpwm_periph.h" #include "hal/mcpwm_ll.h" +#include "hal/gpio_hal.h" #include "driver/mcpwm_sync.h" #include "driver/gpio.h" #include "mcpwm_private.h" +#include "esp_private/gpio.h" static const char *TAG = "mcpwm"; @@ -192,16 +194,23 @@ esp_err_t mcpwm_new_gpio_sync_src(const mcpwm_gpio_sync_src_config_t *config, mc int sync_id = gpio_sync_src->sync_id; // GPIO configuration - gpio_config_t gpio_conf = { - .intr_type = GPIO_INTR_DISABLE, - .mode = GPIO_MODE_INPUT | (config->flags.io_loop_back ? GPIO_MODE_OUTPUT : 0), // also enable the output path if `io_loop_back` is enabled - .pin_bit_mask = (1ULL << config->gpio_num), - .pull_down_en = config->flags.pull_down, - .pull_up_en = config->flags.pull_up, - }; - ESP_GOTO_ON_ERROR(gpio_config(&gpio_conf), err, TAG, "config sync GPIO failed"); + gpio_func_sel(config->gpio_num, PIN_FUNC_GPIO); + gpio_input_enable(config->gpio_num); + esp_rom_gpio_connect_in_signal(config->gpio_num, mcpwm_periph_signals.groups[group_id].gpio_synchros[sync_id].sync_sig, 0); + if (config->flags.pull_down) { + gpio_pulldown_en(config->gpio_num); + } + if (config->flags.pull_up) { + gpio_pullup_en(config->gpio_num); + } + + // deprecated, to be removed in in esp-idf v6.0 + if (config->flags.io_loop_back) { + gpio_ll_output_enable(&GPIO, config->gpio_num); + } + // different ext sync share the same config register, using a group level spin lock portENTER_CRITICAL(&group->spinlock); mcpwm_ll_invert_gpio_sync_input(group->hal.dev, sync_id, config->flags.active_neg); @@ -226,9 +235,11 @@ static esp_err_t mcpwm_del_gpio_sync_src(mcpwm_sync_t *sync_src) { mcpwm_gpio_sync_src_t *gpio_sync_src = __containerof(sync_src, mcpwm_gpio_sync_src_t, base); mcpwm_group_t *group = sync_src->group; + int group_id = group->group_id; + int sync_id = gpio_sync_src->sync_id; ESP_LOGD(TAG, "del gpio sync_src (%d,%d)", group->group_id, gpio_sync_src->sync_id); - gpio_reset_pin(gpio_sync_src->gpio_num); + esp_rom_gpio_connect_in_signal(GPIO_MATRIX_CONST_ZERO_INPUT, mcpwm_periph_signals.groups[group_id].gpio_synchros[sync_id].sync_sig, 0); // recycle memory resource ESP_RETURN_ON_ERROR(mcpwm_gpio_sync_src_destroy(gpio_sync_src), TAG, "destroy GPIO sync_src failed"); diff --git a/components/esp_driver_mcpwm/test_apps/mcpwm/main/test_mcpwm_cap.c b/components/esp_driver_mcpwm/test_apps/mcpwm/main/test_mcpwm_cap.c index 228d0648cf70..8c01654f4f8a 100644 --- a/components/esp_driver_mcpwm/test_apps/mcpwm/main/test_mcpwm_cap.c +++ b/components/esp_driver_mcpwm/test_apps/mcpwm/main/test_mcpwm_cap.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -71,6 +71,14 @@ static bool test_capture_callback(mcpwm_cap_channel_handle_t cap_channel, const TEST_CASE("mcpwm_capture_ext_gpio", "[mcpwm]") { + printf("init a gpio to simulate the external capture signal\r\n"); + const int cap_gpio = TEST_CAP_GPIO; + gpio_config_t ext_gpio_conf = { + .mode = GPIO_MODE_OUTPUT, + .pin_bit_mask = BIT(cap_gpio), + }; + TEST_ESP_OK(gpio_config(&ext_gpio_conf)); + printf("install mcpwm capture timer\r\n"); mcpwm_cap_timer_handle_t cap_timer = NULL; mcpwm_capture_timer_config_t cap_timer_config = { @@ -80,7 +88,6 @@ TEST_CASE("mcpwm_capture_ext_gpio", "[mcpwm]") }; TEST_ESP_OK(mcpwm_new_capture_timer(&cap_timer_config, &cap_timer)); - const int cap_gpio = TEST_CAP_GPIO; // put the GPIO into a preset state gpio_set_level(cap_gpio, 0); @@ -91,7 +98,6 @@ TEST_CASE("mcpwm_capture_ext_gpio", "[mcpwm]") .prescale = 1, .flags.pos_edge = true, .flags.neg_edge = true, - .flags.io_loop_back = true, // so we can use GPIO functions to simulate the external capture signal .flags.pull_up = true, }; TEST_ESP_OK(mcpwm_new_capture_channel(cap_timer, &cap_chan_config, &pps_channel)); @@ -127,6 +133,7 @@ TEST_CASE("mcpwm_capture_ext_gpio", "[mcpwm]") TEST_ESP_OK(mcpwm_del_capture_channel(pps_channel)); TEST_ESP_OK(mcpwm_capture_timer_disable(cap_timer)); TEST_ESP_OK(mcpwm_del_capture_timer(cap_timer)); + TEST_ESP_OK(gpio_reset_pin(cap_gpio)); } typedef struct { diff --git a/components/esp_driver_mcpwm/test_apps/mcpwm/main/test_mcpwm_fault.c b/components/esp_driver_mcpwm/test_apps/mcpwm/main/test_mcpwm_fault.c index 38a852c06f87..2dc14b34d398 100644 --- a/components/esp_driver_mcpwm/test_apps/mcpwm/main/test_mcpwm_fault.c +++ b/components/esp_driver_mcpwm/test_apps/mcpwm/main/test_mcpwm_fault.c @@ -58,15 +58,21 @@ static bool IRAM_ATTR test_fault_exit_callback(mcpwm_fault_handle_t detector, co TEST_CASE("mcpwm_gpio_fault_event_callbacks", "[mcpwm]") { - printf("create gpio fault\r\n"); + printf("init a gpio to simulate the fault signal\r\n"); const int fault_gpio = TEST_FAULT_GPIO; + gpio_config_t fault_gpio_conf = { + .mode = GPIO_MODE_OUTPUT, + .pin_bit_mask = BIT(fault_gpio), + }; + TEST_ESP_OK(gpio_config(&fault_gpio_conf)); + + printf("create gpio fault\r\n"); mcpwm_fault_handle_t fault = NULL; mcpwm_gpio_fault_config_t gpio_fault_config = { .group_id = 0, .gpio_num = fault_gpio, .flags.active_level = true, // active on high level .flags.pull_down = true, - .flags.io_loop_back = true, // for debug, so that we can use gpio_set_level to mimic a fault source }; TEST_ESP_OK(mcpwm_new_gpio_fault(&gpio_fault_config, &fault)); @@ -80,7 +86,7 @@ TEST_CASE("mcpwm_gpio_fault_event_callbacks", "[mcpwm]") }; TaskHandle_t task_to_notify = xTaskGetCurrentTaskHandle(); TEST_ESP_OK(mcpwm_fault_register_event_callbacks(fault, &cbs, task_to_notify)); - TEST_ASSERT_EQUAL(0, ulTaskNotifyTake(pdTRUE, pdMS_TO_TICKS(1000))); + TEST_ASSERT_EQUAL(0, ulTaskNotifyTake(pdTRUE, pdMS_TO_TICKS(100))); printf("trigget a fault event\r\n"); gpio_set_level(fault_gpio, 1); @@ -91,4 +97,5 @@ TEST_CASE("mcpwm_gpio_fault_event_callbacks", "[mcpwm]") TEST_ASSERT_NOT_EQUAL(0, ulTaskNotifyTake(pdTRUE, pdMS_TO_TICKS(10))); TEST_ESP_OK(mcpwm_del_fault(fault)); + TEST_ESP_OK(gpio_reset_pin(fault_gpio)); } diff --git a/components/esp_driver_mcpwm/test_apps/mcpwm/main/test_mcpwm_gen.c b/components/esp_driver_mcpwm/test_apps/mcpwm/main/test_mcpwm_gen.c index a00bed330905..1182f74e7df2 100644 --- a/components/esp_driver_mcpwm/test_apps/mcpwm/main/test_mcpwm_gen.c +++ b/components/esp_driver_mcpwm/test_apps/mcpwm/main/test_mcpwm_gen.c @@ -7,6 +7,7 @@ #include "freertos/task.h" #include "unity.h" #include "soc/soc_caps.h" +#include "driver/mcpwm_cap.h" #include "driver/mcpwm_timer.h" #include "driver/mcpwm_oper.h" #include "driver/mcpwm_cmpr.h" @@ -15,6 +16,7 @@ #include "driver/mcpwm_sync.h" #include "driver/gpio.h" #include "test_mcpwm_utils.h" +#include "esp_clk_tree.h" TEST_CASE("mcpwm_generator_install_uninstall", "[mcpwm]") { @@ -46,6 +48,14 @@ TEST_CASE("mcpwm_generator_install_uninstall", "[mcpwm]") TEST_CASE("mcpwm_generator_force_level_hold_on", "[mcpwm]") { + const int gen_gpio = TEST_PWMA_GPIO; + printf("init a gpio to read generator output\r\n"); + gpio_config_t gen_gpio_conf = { + .mode = GPIO_MODE_INPUT, + .pin_bit_mask = BIT(gen_gpio), + }; + TEST_ESP_OK(gpio_config(&gen_gpio_conf)); + // The operator can even work without the timer printf("create operator and generator\r\n"); mcpwm_oper_handle_t oper = NULL; @@ -55,10 +65,8 @@ TEST_CASE("mcpwm_generator_force_level_hold_on", "[mcpwm]") TEST_ESP_OK(mcpwm_new_operator(&operator_config, &oper)); mcpwm_gen_handle_t generator = NULL; - const int gen_gpio = TEST_PWMA_GPIO; mcpwm_generator_config_t generator_config = { .gen_gpio_num = gen_gpio, - .flags.io_loop_back = true, // loop back for test }; TEST_ESP_OK(mcpwm_new_generator(oper, &generator_config, &generator)); @@ -78,12 +86,22 @@ TEST_CASE("mcpwm_generator_force_level_hold_on", "[mcpwm]") printf("delete generator and operator\r\n"); TEST_ESP_OK(mcpwm_del_generator(generator)); TEST_ESP_OK(mcpwm_del_operator(oper)); + TEST_ESP_OK(gpio_reset_pin(gen_gpio)); } // mcpwm_generator_set_force_level acts before the dead time module // so the value output on the generator is a combined result TEST_CASE("mcpwm_force_level_and_dead_time", "[mcpwm]") { + const int gen_a_gpio = TEST_PWMA_GPIO; + const int gen_b_gpio = TEST_PWMB_GPIO; + printf("init gpios to read generator output\r\n"); + gpio_config_t gen_gpio_conf = { + .mode = GPIO_MODE_INPUT, + .pin_bit_mask = BIT(gen_a_gpio) | BIT(gen_b_gpio), + }; + TEST_ESP_OK(gpio_config(&gen_gpio_conf)); + printf("create operator and generators\r\n"); mcpwm_oper_handle_t oper = NULL; mcpwm_operator_config_t operator_config = { @@ -93,11 +111,8 @@ TEST_CASE("mcpwm_force_level_and_dead_time", "[mcpwm]") mcpwm_gen_handle_t gen_a = NULL; mcpwm_gen_handle_t gen_b = NULL; - const int gen_a_gpio = TEST_PWMA_GPIO; - const int gen_b_gpio = TEST_PWMB_GPIO; mcpwm_generator_config_t generator_config = { .gen_gpio_num = gen_a_gpio, - .flags.io_loop_back = true, // loop back for test }; TEST_ESP_OK(mcpwm_new_generator(oper, &generator_config, &gen_a)); generator_config.gen_gpio_num = gen_b_gpio; @@ -128,10 +143,20 @@ TEST_CASE("mcpwm_force_level_and_dead_time", "[mcpwm]") TEST_ESP_OK(mcpwm_del_generator(gen_a)); TEST_ESP_OK(mcpwm_del_generator(gen_b)); TEST_ESP_OK(mcpwm_del_operator(oper)); + TEST_ESP_OK(gpio_reset_pin(gen_a_gpio)); + TEST_ESP_OK(gpio_reset_pin(gen_b_gpio)); } TEST_CASE("mcpwm_generator_force_level_recovery", "[mcpwm]") { + const int gen_gpio = TEST_PWMA_GPIO; + printf("init a gpio to read generator output\r\n"); + gpio_config_t gen_gpio_conf = { + .mode = GPIO_MODE_INPUT, + .pin_bit_mask = BIT(gen_gpio), + }; + TEST_ESP_OK(gpio_config(&gen_gpio_conf)); + printf("create mcpwm timer\r\n"); mcpwm_timer_config_t timer_config = { .group_id = 0, @@ -155,10 +180,8 @@ TEST_CASE("mcpwm_generator_force_level_recovery", "[mcpwm]") printf("create generator\r\n"); mcpwm_gen_handle_t generator = NULL; - const int gen_gpio = TEST_PWMA_GPIO; mcpwm_generator_config_t generator_config = { .gen_gpio_num = gen_gpio, - .flags.io_loop_back = true, // loop back for test }; TEST_ESP_OK(mcpwm_new_generator(oper, &generator_config, &generator)); @@ -195,11 +218,19 @@ TEST_CASE("mcpwm_generator_force_level_recovery", "[mcpwm]") TEST_ESP_OK(mcpwm_del_generator(generator)); TEST_ESP_OK(mcpwm_del_operator(oper)); TEST_ESP_OK(mcpwm_del_timer(timer)); + TEST_ESP_OK(gpio_reset_pin(gen_gpio)); } TEST_CASE("mcpwm_generator_action_on_timer_event", "[mcpwm]") { const int generator_gpio = TEST_PWMA_GPIO; + printf("init a gpio to read generator output\r\n"); + gpio_config_t gen_gpio_conf = { + .mode = GPIO_MODE_INPUT, + .pin_bit_mask = BIT(generator_gpio), + }; + TEST_ESP_OK(gpio_config(&gen_gpio_conf)); + printf("create timer and operator\r\n"); mcpwm_timer_config_t timer_config = { .group_id = 0, @@ -224,7 +255,6 @@ TEST_CASE("mcpwm_generator_action_on_timer_event", "[mcpwm]") printf("create generator\r\n"); mcpwm_generator_config_t gen_config = { .gen_gpio_num = generator_gpio, - .flags.io_loop_back = 1, // so that we can read the GPIO value by GPIO driver }; mcpwm_gen_handle_t gen = NULL; TEST_ESP_OK(mcpwm_new_generator(oper, &gen_config, &gen)); @@ -258,12 +288,26 @@ TEST_CASE("mcpwm_generator_action_on_timer_event", "[mcpwm]") TEST_ESP_OK(mcpwm_del_generator(gen)); TEST_ESP_OK(mcpwm_del_operator(oper)); TEST_ESP_OK(mcpwm_del_timer(timer)); + TEST_ESP_OK(gpio_reset_pin(generator_gpio)); +} + +TEST_MCPWM_CALLBACK_ATTR +static bool test_capture_callback(mcpwm_cap_channel_handle_t cap_channel, const mcpwm_capture_event_data_t *edata, void *user_data) +{ + uint32_t *cap_value = (uint32_t *)user_data; + if (edata->cap_edge == MCPWM_CAP_EDGE_NEG) { + cap_value[1] = edata->cap_value; + } else { + cap_value[0] = edata->cap_value; + } + return false; } typedef void (*set_gen_actions_cb_t)(mcpwm_gen_handle_t gena, mcpwm_gen_handle_t genb, mcpwm_cmpr_handle_t cmpa, mcpwm_cmpr_handle_t cmpb); static void mcpwm_gen_action_test_template(uint32_t timer_resolution, uint32_t period, mcpwm_timer_count_mode_t count_mode, - uint32_t cmpa, uint32_t cmpb, int gpioa, int gpiob, set_gen_actions_cb_t set_generator_actions) + uint32_t cmpa, uint32_t cmpb, int gpioa, int gpiob, set_gen_actions_cb_t set_generator_actions, + uint32_t *ret_capa, uint32_t *ret_capb) { mcpwm_timer_config_t timer_config = { .group_id = 0, @@ -305,10 +349,72 @@ static void mcpwm_gen_action_test_template(uint32_t timer_resolution, uint32_t p set_generator_actions(generator_a, generator_b, comparator_a, comparator_b); + // install mcpwm capture timer + mcpwm_cap_timer_handle_t cap_timer = NULL; + uint32_t clk_src_freq_hz; + esp_clk_tree_src_get_freq_hz(MCPWM_CAPTURE_CLK_SRC_DEFAULT, ESP_CLK_TREE_SRC_FREQ_PRECISION_CACHED, &clk_src_freq_hz); + mcpwm_capture_timer_config_t cap_timer_config = { + .clk_src = MCPWM_CAPTURE_CLK_SRC_DEFAULT, + .group_id = 0, + .resolution_hz = clk_src_freq_hz / 2, + }; + TEST_ESP_OK(mcpwm_new_capture_timer(&cap_timer_config, &cap_timer)); + + // install mcpwm capture channel + mcpwm_cap_channel_handle_t cap_channel_a; + mcpwm_cap_channel_handle_t cap_channel_b; + mcpwm_capture_channel_config_t cap_chan_config = { + .gpio_num = gpioa, + .prescale = 1, + .flags.pos_edge = true, + .flags.neg_edge = true, + }; + TEST_ESP_OK(mcpwm_new_capture_channel(cap_timer, &cap_chan_config, &cap_channel_a)); + cap_chan_config.gpio_num = gpiob; + TEST_ESP_OK(mcpwm_new_capture_channel(cap_timer, &cap_chan_config, &cap_channel_b)); + + // install callback for capture channel + mcpwm_capture_event_callbacks_t cbs = { + .on_cap = test_capture_callback, + }; + uint32_t cap_value_a[2] = {0}; + uint32_t cap_value_b[2] = {0}; + TEST_ESP_OK(mcpwm_capture_channel_register_event_callbacks(cap_channel_a, &cbs, cap_value_a)); + TEST_ESP_OK(mcpwm_capture_channel_register_event_callbacks(cap_channel_b, &cbs, cap_value_b)); + + // enable capture channel and timer + TEST_ESP_OK(mcpwm_capture_channel_enable(cap_channel_a)); + TEST_ESP_OK(mcpwm_capture_channel_enable(cap_channel_b)); + TEST_ESP_OK(mcpwm_capture_timer_enable(cap_timer)); + + // start timer and capture timer TEST_ESP_OK(mcpwm_timer_start_stop(timer, MCPWM_TIMER_START_NO_STOP)); + TEST_ESP_OK(mcpwm_capture_timer_start(cap_timer)); vTaskDelay(pdMS_TO_TICKS(100)); TEST_ESP_OK(mcpwm_timer_start_stop(timer, MCPWM_TIMER_STOP_EMPTY)); vTaskDelay(pdMS_TO_TICKS(10)); + TEST_ESP_OK(mcpwm_capture_timer_stop(cap_timer)); + + // calculate the actual capture time + uint32_t clk_src_res; + TEST_ESP_OK(mcpwm_capture_timer_get_resolution(cap_timer, &clk_src_res)); + clk_src_res /= 1000; // convert to kHz + + if (cap_value_a[1] > cap_value_a[0]) { + // generator end with low level, calculate the high level time + *ret_capa = (cap_value_a[1] - cap_value_a[0]) * 1000 / clk_src_res; + } else { + // generator end with high level, calculate the low level time + *ret_capa = (cap_value_a[0] - cap_value_a[1]) * 1000 / clk_src_res; + } + + if (cap_value_b[1] > cap_value_b[0]) { + // generator end with low level, calculate the high level time + *ret_capb = (cap_value_b[1] - cap_value_b[0]) * 1000 / clk_src_res; + } else { + // generator end with high level, calculate the low level time + *ret_capb = (cap_value_b[0] - cap_value_b[1]) * 1000 / clk_src_res; + } TEST_ESP_OK(mcpwm_timer_disable(timer)); TEST_ESP_OK(mcpwm_del_generator(generator_a)); @@ -317,6 +423,12 @@ static void mcpwm_gen_action_test_template(uint32_t timer_resolution, uint32_t p TEST_ESP_OK(mcpwm_del_comparator(comparator_b)); TEST_ESP_OK(mcpwm_del_operator(oper)); TEST_ESP_OK(mcpwm_del_timer(timer)); + TEST_ESP_OK(mcpwm_capture_channel_disable(cap_channel_a)); + TEST_ESP_OK(mcpwm_del_capture_channel(cap_channel_a)); + TEST_ESP_OK(mcpwm_capture_channel_disable(cap_channel_b)); + TEST_ESP_OK(mcpwm_del_capture_channel(cap_channel_b)); + TEST_ESP_OK(mcpwm_capture_timer_disable(cap_timer)); + TEST_ESP_OK(mcpwm_del_capture_timer(cap_timer)); } static void single_edge_active_high(mcpwm_gen_handle_t gena, mcpwm_gen_handle_t genb, mcpwm_cmpr_handle_t cmpa, mcpwm_cmpr_handle_t cmpb) @@ -392,41 +504,55 @@ static void dual_edge_complementary(mcpwm_gen_handle_t gena, mcpwm_gen_handle_t TEST_CASE("mcpwm_generator_action_on_compare_event", "[mcpwm]") { + uint32_t capa, capb; printf("[Asymmetric, SingleEdge, ActiveHigh]\r\n"); // PWMA: high = [1->350], low = [351->499,0] // PWMB: high = [1->200], low = [201->499,0] - mcpwm_gen_action_test_template(1000000, 500, MCPWM_TIMER_COUNT_MODE_UP, 350, 200, TEST_PWMA_GPIO, TEST_PWMB_GPIO, single_edge_active_high); + mcpwm_gen_action_test_template(1000000, 500, MCPWM_TIMER_COUNT_MODE_UP, 350, 200, TEST_PWMA_GPIO, TEST_PWMB_GPIO, single_edge_active_high, &capa, &capb); + TEST_ASSERT_UINT_WITHIN(2, 150, capa); + TEST_ASSERT_UINT_WITHIN(2, 300, capb); printf("[Asymmetric, SingleEdge, ActiveLow]\r\n"); // PWMA: low = [0->300], high = [301->499] // PWMB: low = [0->150], high = [151->499] - mcpwm_gen_action_test_template(1000000, 500, MCPWM_TIMER_COUNT_MODE_UP, 300, 150, TEST_PWMA_GPIO, TEST_PWMB_GPIO, single_edge_active_low); + mcpwm_gen_action_test_template(1000000, 500, MCPWM_TIMER_COUNT_MODE_UP, 300, 150, TEST_PWMA_GPIO, TEST_PWMB_GPIO, single_edge_active_low, &capa, &capb); + TEST_ASSERT_UINT_WITHIN(2, 200, capa); + TEST_ASSERT_UINT_WITHIN(2, 350, capb); printf("[Asymmetric, PulsePlacement]\r\n"); // PWMA: low = [0->200], high = [201->400], low = [401->599] // PWMB: high = [0->599], low = [0->599] - mcpwm_gen_action_test_template(1000000, 600, MCPWM_TIMER_COUNT_MODE_UP, 200, 400, TEST_PWMA_GPIO, TEST_PWMB_GPIO, pulse_placement); + mcpwm_gen_action_test_template(1000000, 600, MCPWM_TIMER_COUNT_MODE_UP, 200, 400, TEST_PWMA_GPIO, TEST_PWMB_GPIO, pulse_placement, &capa, &capb); + TEST_ASSERT_UINT_WITHIN(2, 200, capa); + TEST_ASSERT_UINT_WITHIN(2, 600, capb); printf("[Asymmetric, DualEdge, ActiveLow]\r\n"); // PWMA: low = [0->250], high = [251->599, 600->450], low = [451->1] // PWMB: low = [0->599], low = [600->1] - mcpwm_gen_action_test_template(1000000, 1200, MCPWM_TIMER_COUNT_MODE_UP_DOWN, 250, 450, TEST_PWMA_GPIO, TEST_PWMB_GPIO, dual_edge_active_low_asym); + mcpwm_gen_action_test_template(1000000, 1200, MCPWM_TIMER_COUNT_MODE_UP_DOWN, 250, 450, TEST_PWMA_GPIO, TEST_PWMB_GPIO, dual_edge_active_low_asym, &capa, &capb); + TEST_ASSERT_UINT_WITHIN(2, 500, capa); + TEST_ASSERT_UINT_WITHIN(2, 600, capb); printf("[Symmetric, DualEdge, ActiveLow]\r\n"); // PWMA: low = [0->400], high = [401->599, 600->400], low = [399->1] // PWMB: low = [0->500], high = [501->599, 600->500], low = [499->1] - mcpwm_gen_action_test_template(1000000, 1200, MCPWM_TIMER_COUNT_MODE_UP_DOWN, 400, 500, TEST_PWMA_GPIO, TEST_PWMB_GPIO, dual_edge_active_low_sym); + mcpwm_gen_action_test_template(1000000, 1200, MCPWM_TIMER_COUNT_MODE_UP_DOWN, 400, 500, TEST_PWMA_GPIO, TEST_PWMB_GPIO, dual_edge_active_low_sym, &capa, &capb); + TEST_ASSERT_UINT_WITHIN(2, 400, capa); + TEST_ASSERT_UINT_WITHIN(2, 200, capb); printf("[Symmetric, DualEdge, Complementary]\r\n"); // PWMA: low = [0->350], high = [351->599, 600->350], low = [349->1] // PWMB: low = [0->400], high = [401->599, 600->400], low = [399->1] - mcpwm_gen_action_test_template(1000000, 1200, MCPWM_TIMER_COUNT_MODE_UP_DOWN, 350, 400, TEST_PWMA_GPIO, TEST_PWMB_GPIO, dual_edge_complementary); + mcpwm_gen_action_test_template(1000000, 1200, MCPWM_TIMER_COUNT_MODE_UP_DOWN, 350, 400, TEST_PWMA_GPIO, TEST_PWMB_GPIO, dual_edge_complementary, &capa, &capb); + TEST_ASSERT_UINT_WITHIN(2, 500, capa); + TEST_ASSERT_UINT_WITHIN(2, 400, capb); } typedef void (*set_dead_time_cb_t)(mcpwm_gen_handle_t gena, mcpwm_gen_handle_t genb); static void mcpwm_deadtime_test_template(uint32_t timer_resolution, uint32_t period, uint32_t cmpa, uint32_t cmpb, int gpioa, int gpiob, - set_gen_actions_cb_t set_generator_actions, set_dead_time_cb_t set_dead_time) + set_gen_actions_cb_t set_generator_actions, set_dead_time_cb_t set_dead_time, + uint32_t ret_capa[2], uint32_t ret_capb[2]) { mcpwm_timer_config_t timer_config = { .group_id = 0, @@ -469,10 +595,61 @@ static void mcpwm_deadtime_test_template(uint32_t timer_resolution, uint32_t per set_generator_actions(generator_a, generator_b, comparator_a, comparator_b); set_dead_time(generator_a, generator_b); + // install mcpwm capture timer + mcpwm_cap_timer_handle_t cap_timer = NULL; + uint32_t clk_src_freq_hz; + esp_clk_tree_src_get_freq_hz(MCPWM_CAPTURE_CLK_SRC_DEFAULT, ESP_CLK_TREE_SRC_FREQ_PRECISION_CACHED, &clk_src_freq_hz); + mcpwm_capture_timer_config_t cap_timer_config = { + .clk_src = MCPWM_CAPTURE_CLK_SRC_DEFAULT, + .group_id = 0, + .resolution_hz = clk_src_freq_hz / 2, + }; + TEST_ESP_OK(mcpwm_new_capture_timer(&cap_timer_config, &cap_timer)); + + // install mcpwm capture channel + mcpwm_cap_channel_handle_t cap_channel_a; + mcpwm_cap_channel_handle_t cap_channel_b; + mcpwm_capture_channel_config_t cap_chan_config = { + .gpio_num = gpioa, + .prescale = 1, + .flags.pos_edge = true, + .flags.neg_edge = true, + }; + TEST_ESP_OK(mcpwm_new_capture_channel(cap_timer, &cap_chan_config, &cap_channel_a)); + cap_chan_config.gpio_num = gpiob; + TEST_ESP_OK(mcpwm_new_capture_channel(cap_timer, &cap_chan_config, &cap_channel_b)); + + // install callback for capture channel + mcpwm_capture_event_callbacks_t cbs = { + .on_cap = test_capture_callback, + }; + uint32_t cap_value_a[2] = {0}; + uint32_t cap_value_b[2] = {0}; + TEST_ESP_OK(mcpwm_capture_channel_register_event_callbacks(cap_channel_a, &cbs, cap_value_a)); + TEST_ESP_OK(mcpwm_capture_channel_register_event_callbacks(cap_channel_b, &cbs, cap_value_b)); + + // enable capture channel and timer + TEST_ESP_OK(mcpwm_capture_channel_enable(cap_channel_a)); + TEST_ESP_OK(mcpwm_capture_channel_enable(cap_channel_b)); + TEST_ESP_OK(mcpwm_capture_timer_enable(cap_timer)); + + // start timer and capture timer TEST_ESP_OK(mcpwm_timer_start_stop(timer, MCPWM_TIMER_START_NO_STOP)); + TEST_ESP_OK(mcpwm_capture_timer_start(cap_timer)); vTaskDelay(pdMS_TO_TICKS(100)); - TEST_ESP_OK(mcpwm_timer_start_stop(timer, MCPWM_TIMER_STOP_EMPTY)); + TEST_ESP_OK(mcpwm_timer_start_stop(timer, MCPWM_TIMER_STOP_FULL)); vTaskDelay(pdMS_TO_TICKS(10)); + TEST_ESP_OK(mcpwm_capture_timer_stop(cap_timer)); + + // calculate the actual capture time + uint32_t clk_src_res; + TEST_ESP_OK(mcpwm_capture_timer_get_resolution(cap_timer, &clk_src_res)); + clk_src_res /= 1000; // convert to kHz + + ret_capa[0] = cap_value_a[0] * 1000 / clk_src_res; + ret_capa[1] = cap_value_a[1] * 1000 / clk_src_res; + ret_capb[0] = cap_value_b[0] * 1000 / clk_src_res; + ret_capb[1] = cap_value_b[1] * 1000 / clk_src_res; TEST_ESP_OK(mcpwm_timer_disable(timer)); TEST_ESP_OK(mcpwm_del_generator(generator_a)); @@ -481,6 +658,12 @@ static void mcpwm_deadtime_test_template(uint32_t timer_resolution, uint32_t per TEST_ESP_OK(mcpwm_del_comparator(comparator_b)); TEST_ESP_OK(mcpwm_del_operator(oper)); TEST_ESP_OK(mcpwm_del_timer(timer)); + TEST_ESP_OK(mcpwm_capture_channel_disable(cap_channel_a)); + TEST_ESP_OK(mcpwm_del_capture_channel(cap_channel_a)); + TEST_ESP_OK(mcpwm_capture_channel_disable(cap_channel_b)); + TEST_ESP_OK(mcpwm_del_capture_channel(cap_channel_b)); + TEST_ESP_OK(mcpwm_capture_timer_disable(cap_timer)); + TEST_ESP_OK(mcpwm_del_capture_timer(cap_timer)); } static void ahc_set_generator_actions(mcpwm_gen_handle_t gena, mcpwm_gen_handle_t genb, mcpwm_cmpr_handle_t cmpa, mcpwm_cmpr_handle_t cmpb) @@ -663,34 +846,58 @@ static void invalid_reda_redb_set_dead_time(mcpwm_gen_handle_t gena, mcpwm_gen_h TEST_CASE("mcpwm_generator_deadtime_classical_configuration", "[mcpwm]") { + uint32_t capa[2], capb[2]; printf("Active High Complementary\r\n"); - mcpwm_deadtime_test_template(1000000, 600, 200, 400, TEST_PWMA_GPIO, TEST_PWMB_GPIO, ahc_set_generator_actions, ahc_set_dead_time); + mcpwm_deadtime_test_template(1000000, 600, 200, 400, TEST_PWMA_GPIO, TEST_PWMB_GPIO, ahc_set_generator_actions, ahc_set_dead_time, capa, capb); + TEST_ASSERT_UINT_WITHIN(2, 50, capa[0] - capb[1]); + TEST_ASSERT_UINT_WITHIN(2, 100, capb[0] - capa[1]); printf("Active Low Complementary\r\n"); - mcpwm_deadtime_test_template(1000000, 600, 200, 400, TEST_PWMA_GPIO, TEST_PWMB_GPIO, alc_set_generator_actions, alc_set_dead_time); + mcpwm_deadtime_test_template(1000000, 600, 200, 400, TEST_PWMA_GPIO, TEST_PWMB_GPIO, alc_set_generator_actions, alc_set_dead_time, capa, capb); + TEST_ASSERT_UINT_WITHIN(2, 50, capa[1] - capb[0]); + TEST_ASSERT_UINT_WITHIN(2, 100, capb[1] - capa[0]); printf("Active High\r\n"); - mcpwm_deadtime_test_template(1000000, 600, 200, 400, TEST_PWMA_GPIO, TEST_PWMB_GPIO, ah_set_generator_actions, ah_set_dead_time); + mcpwm_deadtime_test_template(1000000, 600, 200, 400, TEST_PWMA_GPIO, TEST_PWMB_GPIO, ah_set_generator_actions, ah_set_dead_time, capa, capb); + TEST_ASSERT_UINT_WITHIN(2, 50, capa[0] - capb[0]); + TEST_ASSERT_UINT_WITHIN(2, 100, capb[1] - capa[1]); printf("Active Low\r\n"); - mcpwm_deadtime_test_template(1000000, 600, 200, 400, TEST_PWMA_GPIO, TEST_PWMB_GPIO, al_set_generator_actions, al_set_dead_time); + mcpwm_deadtime_test_template(1000000, 600, 200, 400, TEST_PWMA_GPIO, TEST_PWMB_GPIO, al_set_generator_actions, al_set_dead_time, capa, capb); + TEST_ASSERT_UINT_WITHIN(2, 50, capa[1] - capb[1]); + TEST_ASSERT_UINT_WITHIN(2, 100, capb[0] - capa[0]); printf("RED on A, Bypass B\r\n"); - mcpwm_deadtime_test_template(1000000, 500, 350, 350, TEST_PWMA_GPIO, TEST_PWMB_GPIO, reda_only_set_generator_actions, reda_only_set_dead_time); + mcpwm_deadtime_test_template(1000000, 500, 350, 350, TEST_PWMA_GPIO, TEST_PWMB_GPIO, reda_only_set_generator_actions, reda_only_set_dead_time, capa, capb); + TEST_ASSERT_UINT_WITHIN(2, 50, capa[0] - capb[0]); + TEST_ASSERT_UINT_WITHIN(2, 0, capb[1] - capa[1]); printf("Bypass A, FED on B\r\n"); - mcpwm_deadtime_test_template(1000000, 500, 350, 350, TEST_PWMA_GPIO, TEST_PWMB_GPIO, fedb_only_set_generator_actions, fedb_only_set_dead_time); + mcpwm_deadtime_test_template(1000000, 500, 350, 350, TEST_PWMA_GPIO, TEST_PWMB_GPIO, fedb_only_set_generator_actions, fedb_only_set_dead_time, capa, capb); + TEST_ASSERT_UINT_WITHIN(2, 50, capb[1] - capa[1]); + TEST_ASSERT_UINT_WITHIN(2, 0, capb[0] - capa[0]); printf("Bypass A, RED + FED on B\r\n"); - mcpwm_deadtime_test_template(1000000, 500, 350, 350, TEST_PWMA_GPIO, TEST_PWMB_GPIO, redfedb_only_set_generator_actions, redfedb_only_set_dead_time); + mcpwm_deadtime_test_template(1000000, 500, 350, 350, TEST_PWMA_GPIO, TEST_PWMB_GPIO, redfedb_only_set_generator_actions, redfedb_only_set_dead_time, capa, capb); + TEST_ASSERT_UINT_WITHIN(2, 50, capb[0] - capa[0]); + TEST_ASSERT_UINT_WITHIN(2, 50, capb[1] - capa[1]); printf("Can't apply one delay module to multiple generators\r\n"); - mcpwm_deadtime_test_template(1000000, 500, 350, 350, TEST_PWMA_GPIO, TEST_PWMB_GPIO, redfedb_only_set_generator_actions, invalid_reda_redb_set_dead_time); + mcpwm_deadtime_test_template(1000000, 500, 350, 350, TEST_PWMA_GPIO, TEST_PWMB_GPIO, redfedb_only_set_generator_actions, invalid_reda_redb_set_dead_time, capa, capb); + TEST_ASSERT_UINT_WITHIN(2, 0, capa[0] - capb[0]); + TEST_ASSERT_UINT_WITHIN(2, 0, capa[1] - capb[1]); } TEST_CASE("mcpwm_duty_empty_full", "[mcpwm]") { const int gen_gpio_num = TEST_PWMA_GPIO; + printf("init a gpio to read generator output\r\n"); + gpio_config_t gen_gpio_conf = { + .mode = GPIO_MODE_INPUT, + .pin_bit_mask = BIT(gen_gpio_num), + }; + TEST_ESP_OK(gpio_config(&gen_gpio_conf)); + mcpwm_timer_handle_t timer; mcpwm_oper_handle_t oper; mcpwm_cmpr_handle_t comparator; @@ -722,7 +929,6 @@ TEST_CASE("mcpwm_duty_empty_full", "[mcpwm]") printf("install MCPWM generator\r\n"); mcpwm_generator_config_t gen_config = { .gen_gpio_num = gen_gpio_num, - .flags.io_loop_back = true, // we want to read the output level as well }; TEST_ESP_OK(mcpwm_new_generator(oper, &gen_config, &gen)); @@ -763,12 +969,30 @@ TEST_CASE("mcpwm_duty_empty_full", "[mcpwm]") TEST_ESP_OK(mcpwm_del_comparator(comparator)); TEST_ESP_OK(mcpwm_del_operator(oper)); TEST_ESP_OK(mcpwm_del_timer(timer)); + TEST_ESP_OK(gpio_reset_pin(gen_gpio_num)); } TEST_CASE("mcpwm_generator_action_on_fault_trigger_event", "[mcpwm]") { const int generator_gpio = TEST_PWMA_GPIO; const int fault_gpio_num[3] = {TEST_FAULT_GPIO0, TEST_FAULT_GPIO1, TEST_FAULT_GPIO2}; + + printf("init a gpio to read generator output and simulate fault signal\r\n"); + gpio_config_t generator_gpio_conf = { + .mode = GPIO_MODE_INPUT, + .pin_bit_mask = BIT(generator_gpio), + }; + TEST_ESP_OK(gpio_config(&generator_gpio_conf)); + + gpio_config_t fault_gpio_conf = { + .mode = GPIO_MODE_OUTPUT, + .pin_bit_mask = 0, + }; + for (int i = 0; i < 3; i++) { + fault_gpio_conf.pin_bit_mask |= BIT(fault_gpio_num[i]); + } + TEST_ESP_OK(gpio_config(&fault_gpio_conf)); + printf("create timer and operator\r\n"); mcpwm_timer_config_t timer_config = { .group_id = 0, @@ -796,7 +1020,6 @@ TEST_CASE("mcpwm_generator_action_on_fault_trigger_event", "[mcpwm]") .flags.active_level = 1, .flags.pull_down = 1, .flags.pull_up = 0, - .flags.io_loop_back = 1, // so that we can write the GPIO value by GPIO driver }; for (int i = 0 ; i < 3; i++) { gpio_trigger_config.gpio_num = fault_gpio_num[i]; @@ -806,7 +1029,6 @@ TEST_CASE("mcpwm_generator_action_on_fault_trigger_event", "[mcpwm]") printf("create generator\r\n"); mcpwm_generator_config_t gen_config = { .gen_gpio_num = generator_gpio, - .flags.io_loop_back = 1, // so that we can read the GPIO value by GPIO driver }; mcpwm_gen_handle_t gen = NULL; TEST_ESP_OK(mcpwm_new_generator(oper, &gen_config, &gen)); @@ -839,11 +1061,22 @@ TEST_CASE("mcpwm_generator_action_on_fault_trigger_event", "[mcpwm]") TEST_ESP_OK(mcpwm_del_generator(gen)); TEST_ESP_OK(mcpwm_del_operator(oper)); TEST_ESP_OK(mcpwm_del_timer(timer)); + TEST_ESP_OK(gpio_reset_pin(generator_gpio)); + for (int i = 0; i < 3; i++) { + TEST_ESP_OK(gpio_reset_pin(fault_gpio_num[i])); + } } TEST_CASE("mcpwm_generator_action_on_soft_sync_trigger_event", "[mcpwm]") { const int generator_gpio = TEST_PWMA_GPIO; + printf("init a gpio to read generator output\r\n"); + gpio_config_t generator_gpio_conf = { + .mode = GPIO_MODE_INPUT, + .pin_bit_mask = BIT(generator_gpio), + }; + TEST_ESP_OK(gpio_config(&generator_gpio_conf)); + printf("create timer and operator\r\n"); mcpwm_timer_config_t timer_config = { .group_id = 0, @@ -879,7 +1112,6 @@ TEST_CASE("mcpwm_generator_action_on_soft_sync_trigger_event", "[mcpwm]") printf("create generator\r\n"); mcpwm_generator_config_t gen_config = { .gen_gpio_num = generator_gpio, - .flags.io_loop_back = 1, // so that we can read the GPIO value by GPIO driver }; mcpwm_gen_handle_t gen = NULL; TEST_ESP_OK(mcpwm_new_generator(oper, &gen_config, &gen)); @@ -905,11 +1137,19 @@ TEST_CASE("mcpwm_generator_action_on_soft_sync_trigger_event", "[mcpwm]") TEST_ESP_OK(mcpwm_del_generator(gen)); TEST_ESP_OK(mcpwm_del_operator(oper)); TEST_ESP_OK(mcpwm_del_timer(timer)); + TEST_ESP_OK(gpio_reset_pin(generator_gpio)); } TEST_CASE("mcpwm_generator_action_on_timer_sync_trigger_event", "[mcpwm]") { const int generator_gpio = TEST_PWMA_GPIO; + printf("init a gpio to read generator output\r\n"); + gpio_config_t generator_gpio_conf = { + .mode = GPIO_MODE_INPUT, + .pin_bit_mask = BIT(generator_gpio), + }; + TEST_ESP_OK(gpio_config(&generator_gpio_conf)); + printf("create timer and operator\r\n"); mcpwm_timer_config_t timer_config = { .group_id = 0, @@ -948,7 +1188,6 @@ TEST_CASE("mcpwm_generator_action_on_timer_sync_trigger_event", "[mcpwm]") printf("create generator\r\n"); mcpwm_generator_config_t gen_config = { .gen_gpio_num = generator_gpio, - .flags.io_loop_back = 1, // so that we can read the GPIO value by GPIO driver }; mcpwm_gen_handle_t gen = NULL; TEST_ESP_OK(mcpwm_new_generator(oper, &gen_config, &gen)); @@ -970,11 +1209,25 @@ TEST_CASE("mcpwm_generator_action_on_timer_sync_trigger_event", "[mcpwm]") TEST_ESP_OK(mcpwm_del_generator(gen)); TEST_ESP_OK(mcpwm_del_operator(oper)); TEST_ESP_OK(mcpwm_del_timer(timer)); + TEST_ESP_OK(gpio_reset_pin(generator_gpio)); } TEST_CASE("mcpwm_generator_action_on_gpio_sync_trigger_event", "[mcpwm]") { const int generator_gpio = TEST_PWMA_GPIO; + const int sync_gpio = TEST_SYNC_GPIO; + printf("init a gpio to read generator output and simulate sync signal\r\n"); + gpio_config_t generator_gpio_conf = { + .mode = GPIO_MODE_INPUT, + .pin_bit_mask = BIT(generator_gpio), + }; + TEST_ESP_OK(gpio_config(&generator_gpio_conf)); + gpio_config_t sync_gpio_conf = { + .mode = GPIO_MODE_OUTPUT, + .pin_bit_mask = BIT(sync_gpio), + }; + TEST_ESP_OK(gpio_config(&sync_gpio_conf)); + printf("create timer and operator\r\n"); mcpwm_timer_config_t timer_config = { .group_id = 0, @@ -999,14 +1252,13 @@ TEST_CASE("mcpwm_generator_action_on_gpio_sync_trigger_event", "[mcpwm]") mcpwm_sync_handle_t gpio_sync = NULL; mcpwm_gpio_sync_src_config_t gpio_sync_config = { .group_id = 0, - .gpio_num = TEST_SYNC_GPIO, - .flags.io_loop_back = true, // so that we can use gpio driver to simulate the sync signal + .gpio_num = sync_gpio, .flags.pull_down = true, // internally pull down }; TEST_ESP_OK(mcpwm_new_gpio_sync_src(&gpio_sync_config, &gpio_sync)); // put the GPIO into initial state - gpio_set_level(gpio_sync_config.gpio_num, 0); + gpio_set_level(sync_gpio, 0); mcpwm_timer_sync_phase_config_t sync_phase_config = { .count_value = 0, @@ -1018,7 +1270,6 @@ TEST_CASE("mcpwm_generator_action_on_gpio_sync_trigger_event", "[mcpwm]") printf("create generator\r\n"); mcpwm_generator_config_t gen_config = { .gen_gpio_num = generator_gpio, - .flags.io_loop_back = 1, // so that we can read the GPIO value by GPIO driver }; mcpwm_gen_handle_t gen = NULL; TEST_ESP_OK(mcpwm_new_generator(oper, &gen_config, &gen)); @@ -1028,8 +1279,8 @@ TEST_CASE("mcpwm_generator_action_on_gpio_sync_trigger_event", "[mcpwm]") MCPWM_GEN_SYNC_EVENT_ACTION(MCPWM_TIMER_DIRECTION_UP, gpio_sync, MCPWM_GEN_ACTION_HIGH))); TEST_ASSERT_EQUAL(0, gpio_get_level(generator_gpio)); - gpio_set_level(gpio_sync_config.gpio_num, 1); - gpio_set_level(gpio_sync_config.gpio_num, 0); + gpio_set_level(sync_gpio, 1); + gpio_set_level(sync_gpio, 0); TEST_ASSERT_EQUAL(1, gpio_get_level(generator_gpio)); vTaskDelay(pdMS_TO_TICKS(10)); @@ -1038,4 +1289,6 @@ TEST_CASE("mcpwm_generator_action_on_gpio_sync_trigger_event", "[mcpwm]") TEST_ESP_OK(mcpwm_del_generator(gen)); TEST_ESP_OK(mcpwm_del_operator(oper)); TEST_ESP_OK(mcpwm_del_timer(timer)); + TEST_ESP_OK(gpio_reset_pin(generator_gpio)); + TEST_ESP_OK(gpio_reset_pin(sync_gpio)); } diff --git a/components/esp_driver_mcpwm/test_apps/mcpwm/main/test_mcpwm_iram.c b/components/esp_driver_mcpwm/test_apps/mcpwm/main/test_mcpwm_iram.c index fa53482c5692..24744463babc 100644 --- a/components/esp_driver_mcpwm/test_apps/mcpwm/main/test_mcpwm_iram.c +++ b/components/esp_driver_mcpwm/test_apps/mcpwm/main/test_mcpwm_iram.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -46,6 +46,13 @@ TEST_CASE("mcpwm_capture_iram_safe", "[mcpwm]") TEST_ESP_OK(mcpwm_new_capture_timer(&cap_timer_config, &cap_timer)); const int cap_gpio = TEST_CAP_GPIO; + printf("init a gpio to simulate the external capture signal\r\n"); + gpio_config_t cap_gpio_conf = { + .mode = GPIO_MODE_OUTPUT, + .pin_bit_mask = BIT(cap_gpio), + }; + TEST_ESP_OK(gpio_config(&cap_gpio_conf)); + // put the GPIO into a preset state gpio_set_level(cap_gpio, 0); @@ -56,7 +63,6 @@ TEST_CASE("mcpwm_capture_iram_safe", "[mcpwm]") .prescale = 1, .flags.pos_edge = true, .flags.neg_edge = true, - .flags.io_loop_back = true, // so we can use GPIO functions to simulate the external capture signal .flags.pull_up = true, }; TEST_ESP_OK(mcpwm_new_capture_channel(cap_timer, &cap_chan_config, &pps_channel)); @@ -89,6 +95,7 @@ TEST_CASE("mcpwm_capture_iram_safe", "[mcpwm]") TEST_ESP_OK(mcpwm_del_capture_channel(pps_channel)); TEST_ESP_OK(mcpwm_capture_timer_disable(cap_timer)); TEST_ESP_OK(mcpwm_del_capture_timer(cap_timer)); + TEST_ESP_OK(gpio_reset_pin(cap_gpio)); } static bool IRAM_ATTR test_compare_on_reach(mcpwm_cmpr_handle_t cmpr, const mcpwm_compare_event_data_t *ev_data, void *user_data) diff --git a/components/esp_driver_mcpwm/test_apps/mcpwm/main/test_mcpwm_oper.c b/components/esp_driver_mcpwm/test_apps/mcpwm/main/test_mcpwm_oper.c index 76f977a268c7..ce2523d7fbea 100644 --- a/components/esp_driver_mcpwm/test_apps/mcpwm/main/test_mcpwm_oper.c +++ b/components/esp_driver_mcpwm/test_apps/mcpwm/main/test_mcpwm_oper.c @@ -121,6 +121,22 @@ static bool IRAM_ATTR test_ost_brake_on_gpio_fault_callback(mcpwm_oper_handle_t TEST_CASE("mcpwm_operator_brake_on_gpio_fault", "[mcpwm]") { + const int cbc_fault_gpio = TEST_FAULT_GPIO1; + const int ost_fault_gpio = TEST_FAULT_GPIO2; + const int gen_a_gpio = TEST_PWMA_GPIO; + const int gen_b_gpio = TEST_PWMB_GPIO; + printf("init gpios to read generator output and simulate fault signal\r\n"); + gpio_config_t fault_gpio_conf = { + .mode = GPIO_MODE_OUTPUT, + .pin_bit_mask = BIT(cbc_fault_gpio) | BIT(ost_fault_gpio), + }; + TEST_ESP_OK(gpio_config(&fault_gpio_conf)); + gpio_config_t gen_gpio_conf = { + .mode = GPIO_MODE_INPUT, + .pin_bit_mask = BIT(gen_a_gpio) | BIT(gen_b_gpio), + }; + TEST_ESP_OK(gpio_config(&gen_gpio_conf)); + printf("install timer\r\n"); mcpwm_timer_config_t timer_config = { .clk_src = MCPWM_TIMER_CLK_SRC_DEFAULT, @@ -151,13 +167,10 @@ TEST_CASE("mcpwm_operator_brake_on_gpio_fault", "[mcpwm]") mcpwm_gpio_fault_config_t gpio_fault_config = { .group_id = 0, .flags.active_level = 1, - .flags.io_loop_back = true, .flags.pull_down = true, }; mcpwm_fault_handle_t gpio_cbc_fault = NULL; mcpwm_fault_handle_t gpio_ost_fault = NULL; - const int cbc_fault_gpio = TEST_FAULT_GPIO1; - const int ost_fault_gpio = TEST_FAULT_GPIO2; gpio_fault_config.gpio_num = cbc_fault_gpio; TEST_ESP_OK(mcpwm_new_gpio_fault(&gpio_fault_config, &gpio_cbc_fault)); @@ -180,14 +193,12 @@ TEST_CASE("mcpwm_operator_brake_on_gpio_fault", "[mcpwm]") TEST_ESP_OK(mcpwm_operator_set_brake_on_fault(oper, &brake_config)); printf("create generators\r\n"); - const int gen_a_gpio = TEST_PWMA_GPIO; - const int gen_b_gpio = TEST_PWMB_GPIO; + mcpwm_gen_handle_t gen_a = NULL; mcpwm_gen_handle_t gen_b = NULL; mcpwm_generator_config_t generator_config = { - .flags.io_loop_back = true, + .gen_gpio_num = gen_a_gpio, }; - generator_config.gen_gpio_num = gen_a_gpio; TEST_ESP_OK(mcpwm_new_generator(oper, &generator_config, &gen_a)); generator_config.gen_gpio_num = gen_b_gpio; TEST_ESP_OK(mcpwm_new_generator(oper, &generator_config, &gen_b)); @@ -249,10 +260,23 @@ TEST_CASE("mcpwm_operator_brake_on_gpio_fault", "[mcpwm]") TEST_ESP_OK(mcpwm_del_generator(gen_b)); TEST_ESP_OK(mcpwm_del_operator(oper)); TEST_ESP_OK(mcpwm_del_timer(timer)); + TEST_ESP_OK(gpio_reset_pin(cbc_fault_gpio)); + TEST_ESP_OK(gpio_reset_pin(ost_fault_gpio)); + TEST_ESP_OK(gpio_reset_pin(gen_a_gpio)); + TEST_ESP_OK(gpio_reset_pin(gen_b_gpio)); } TEST_CASE("mcpwm_operator_brake_on_soft_fault", "[mcpwm]") { + const int gen_a_gpio = TEST_PWMA_GPIO; + const int gen_b_gpio = TEST_PWMB_GPIO; + printf("init gpios to read generator output\r\n"); + gpio_config_t gen_gpio_conf = { + .mode = GPIO_MODE_INPUT, + .pin_bit_mask = BIT(gen_a_gpio) | BIT(gen_b_gpio), + }; + TEST_ESP_OK(gpio_config(&gen_gpio_conf)); + printf("install timer\r\n"); mcpwm_timer_config_t timer_config = { .clk_src = MCPWM_TIMER_CLK_SRC_DEFAULT, @@ -286,14 +310,11 @@ TEST_CASE("mcpwm_operator_brake_on_soft_fault", "[mcpwm]") TEST_ESP_OK(mcpwm_operator_set_brake_on_fault(oper, &brake_config)); printf("create generators\r\n"); - const int gen_a_gpio = TEST_PWMA_GPIO; - const int gen_b_gpio = TEST_PWMB_GPIO; mcpwm_gen_handle_t gen_a = NULL; mcpwm_gen_handle_t gen_b = NULL; mcpwm_generator_config_t generator_config = { - .flags.io_loop_back = true, + .gen_gpio_num = gen_a_gpio, }; - generator_config.gen_gpio_num = gen_a_gpio; TEST_ESP_OK(mcpwm_new_generator(oper, &generator_config, &gen_a)); generator_config.gen_gpio_num = gen_b_gpio; TEST_ESP_OK(mcpwm_new_generator(oper, &generator_config, &gen_b)); @@ -360,4 +381,6 @@ TEST_CASE("mcpwm_operator_brake_on_soft_fault", "[mcpwm]") TEST_ESP_OK(mcpwm_del_generator(gen_b)); TEST_ESP_OK(mcpwm_del_operator(oper)); TEST_ESP_OK(mcpwm_del_timer(timer)); + TEST_ESP_OK(gpio_reset_pin(gen_a_gpio)); + TEST_ESP_OK(gpio_reset_pin(gen_b_gpio)); } diff --git a/components/esp_driver_mcpwm/test_apps/mcpwm/main/test_mcpwm_sync.c b/components/esp_driver_mcpwm/test_apps/mcpwm/main/test_mcpwm_sync.c index 7fb5328cfad3..d8bc8e4aaf79 100644 --- a/components/esp_driver_mcpwm/test_apps/mcpwm/main/test_mcpwm_sync.c +++ b/components/esp_driver_mcpwm/test_apps/mcpwm/main/test_mcpwm_sync.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -106,6 +106,13 @@ TEST_CASE("mcpwm_gpio_sync_timer_phase_lock", "[mcpwm]") // | // v // timer0-->timer1-->timer2 + const int gpio_num = TEST_SYNC_GPIO; + gpio_config_t sync_gpio_conf = { + .mode = GPIO_MODE_OUTPUT, + .pin_bit_mask = BIT(gpio_num), + }; + TEST_ESP_OK(gpio_config(&sync_gpio_conf)); + mcpwm_timer_config_t timer_config = { .clk_src = MCPWM_TIMER_CLK_SRC_DEFAULT, .group_id = 0, @@ -127,11 +134,9 @@ TEST_CASE("mcpwm_gpio_sync_timer_phase_lock", "[mcpwm]") .direction = MCPWM_TIMER_DIRECTION_UP, }; mcpwm_sync_handle_t gpio_sync_src; - const int gpio_num = TEST_SYNC_GPIO; mcpwm_gpio_sync_src_config_t gpio_sync_config = { .group_id = 0, .gpio_num = gpio_num, - .flags.io_loop_back = true, // so that we can use gpio driver to simulate the sync signal .flags.pull_down = true, // internally pull down }; TEST_ESP_OK(mcpwm_new_gpio_sync_src(&gpio_sync_config, &gpio_sync_src)); @@ -154,6 +159,7 @@ TEST_CASE("mcpwm_gpio_sync_timer_phase_lock", "[mcpwm]") TEST_ESP_OK(mcpwm_del_sync_src(sync_srcs[i])); TEST_ESP_OK(mcpwm_del_timer(timers[i])); } + TEST_ESP_OK(gpio_reset_pin(gpio_num)); } TEST_CASE("mcpwm_timer_sync_timer_phase_lock", "[mcpwm]") diff --git a/docs/en/api-reference/peripherals/mcpwm.rst b/docs/en/api-reference/peripherals/mcpwm.rst index 3a6de1476e0f..a7d1ae5ba427 100644 --- a/docs/en/api-reference/peripherals/mcpwm.rst +++ b/docs/en/api-reference/peripherals/mcpwm.rst @@ -122,8 +122,6 @@ You can allocate a MCPWM generator object by calling the :cpp:func:`mcpwm_new_ge - :cpp:member:`mcpwm_generator_config_t::gen_gpio_num` sets the GPIO number used by the generator. - :cpp:member:`mcpwm_generator_config_t::invert_pwm` sets whether to invert the PWM signal. -- :cpp:member:`mcpwm_generator_config_t::io_loop_back` sets whether to enable the Loop-back mode. It is for debugging purposes only. It enables both the GPIO's input and output ability through the GPIO matrix peripheral. -- :cpp:member:`mcpwm_generator_config_t::io_od_mode` configures the PWM GPIO as open-drain output. - :cpp:member:`mcpwm_generator_config_t::pull_up` and :cpp:member:`mcpwm_generator_config_t::pull_down` controls whether to enable the internal pull-up and pull-down resistors accordingly. The :cpp:func:`mcpwm_new_generator` will return a pointer to the allocated generator object if the allocation succeeds. Otherwise, it will return an error code. Specifically, when there are no more free generators in the MCPWM operator, this function will return the :c:macro:`ESP_ERR_NOT_FOUND` error. [1]_ @@ -142,7 +140,6 @@ To allocate a GPIO fault object, you can call the :cpp:func:`mcpwm_new_gpio_faul - :cpp:member:`mcpwm_gpio_fault_config_t::gpio_num` sets the GPIO number used by the fault. - :cpp:member:`mcpwm_gpio_fault_config_t::active_level` sets the active level of the fault signal. - :cpp:member:`mcpwm_gpio_fault_config_t::pull_up` and :cpp:member:`mcpwm_gpio_fault_config_t::pull_down` set whether to pull up and/or pull down the GPIO internally. -- :cpp:member:`mcpwm_gpio_fault_config_t::io_loop_back` sets whether to enable the loopback mode. It is for debugging purposes only. It enables both the GPIO's input and output ability through the GPIO matrix peripheral. The :cpp:func:`mcpwm_new_gpio_fault` will return a pointer to the allocated fault object if the allocation succeeds. Otherwise, it will return an error code. Specifically, when there are no more free GPIO faults in the MCPWM group, this function will return the :c:macro:`ESP_ERR_NOT_FOUND` error. [1]_ @@ -163,7 +160,6 @@ To allocate a GPIO sync source, you can call the :cpp:func:`mcpwm_new_gpio_sync_ - :cpp:member:`mcpwm_gpio_sync_src_config_t::gpio_num` sets the GPIO number used by the sync source. - :cpp:member:`mcpwm_gpio_sync_src_config_t::active_neg` sets whether the sync signal is active on falling edges. - :cpp:member:`mcpwm_gpio_sync_src_config_t::pull_up` and :cpp:member:`mcpwm_gpio_sync_src_config_t::pull_down` set whether to pull up and/or pull down the GPIO internally. -- :cpp:member:`mcpwm_gpio_sync_src_config_t::io_loop_back` sets whether to enable the Loop-back mode. It is for debugging purposes only. It enables both the GPIO's input and output ability through the GPIO matrix peripheral. The :cpp:func:`mcpwm_new_gpio_sync_src` will return a pointer to the allocated sync source object if the allocation succeeds. Otherwise, it will return an error code. Specifically, when there are no more free GPIO sync sources in the MCPWM group, this function will return the :c:macro:`ESP_ERR_NOT_FOUND` error. [1]_ @@ -207,8 +203,6 @@ Next, to allocate a capture channel, you can call the :cpp:func:`mcpwm_new_captu - :cpp:member:`mcpwm_capture_channel_config_t::extra_capture_channel_flags::pos_edge` and :cpp:member:`mcpwm_capture_channel_config_t::extra_capture_channel_flags::neg_edge` set whether to capture on the positive and/or falling edge of the input signal. - :cpp:member:`mcpwm_capture_channel_config_t::extra_capture_channel_flags::pull_up` and :cpp:member:`mcpwm_capture_channel_config_t::extra_capture_channel_flags::pull_down` set whether to pull up and/or pull down the GPIO internally. - :cpp:member:`mcpwm_capture_channel_config_t::extra_capture_channel_flags::invert_cap_signal` sets whether to invert the capture signal. -- :cpp:member:`mcpwm_capture_channel_config_t::extra_capture_channel_flags::io_loop_back` sets whether to enable the Loop-back mode. It is for debugging purposes only. It enables both the GPIO's input and output ability through the GPIO matrix peripheral. -- :cpp:member:`mcpwm_capture_channel_config_t::extra_capture_channel_flags::keep_io_conf_at_exit` sets whether to keep the GPIO configuration when the capture channel is deleted. The :cpp:func:`mcpwm_new_capture_channel` will return a pointer to the allocated capture channel object if the allocation succeeds. Otherwise, it will return an error code. Specifically, when there is no free capture channel left in the capture timer, this function will return the :c:macro:`ESP_ERR_NOT_FOUND` error. diff --git a/docs/zh_CN/api-reference/peripherals/mcpwm.rst b/docs/zh_CN/api-reference/peripherals/mcpwm.rst index f90ba9cd4299..9aaaa22bb468 100644 --- a/docs/zh_CN/api-reference/peripherals/mcpwm.rst +++ b/docs/zh_CN/api-reference/peripherals/mcpwm.rst @@ -122,8 +122,6 @@ MCPWM 生成器 - :cpp:member:`mcpwm_generator_config_t::gen_gpio_num` 设置生成器使用的 GPIO 编号。 - :cpp:member:`mcpwm_generator_config_t::invert_pwm` 设置是否反相 PWM 信号。 -- :cpp:member:`mcpwm_generator_config_t::io_loop_back` 设置是否启用回环模式。该模式仅用于调试,使用 GPIO 交换矩阵外设同时启用 GPIO 输入和输出。 -- :cpp:member:`mcpwm_generator_config_t::io_od_mode` 设置是否启用漏极开路输出。 - :cpp:member:`mcpwm_generator_config_t::pull_up` 和 :cpp:member:`mcpwm_generator_config_t::pull_down` 用来设置是否启用内部上下拉电阻。 分配成功后,:cpp:func:`mcpwm_new_generator` 将返回一个指向已分配生成器的指针。否则,函数将返回错误代码。具体来说,当 MCPWM 操作器中没有空闲生成器时,将返回 :c:macro:`ESP_ERR_NOT_FOUND` 错误。[1]_ @@ -142,7 +140,6 @@ MCPWM 故障分为两种类型:来自 GPIO 的故障信号和软件故障。 - :cpp:member:`mcpwm_gpio_fault_config_t::gpio_num` 设置故障所使用的 GPIO 编号。 - :cpp:member:`mcpwm_gpio_fault_config_t::active_level` 设置故障信号的有效电平。 - :cpp:member:`mcpwm_gpio_fault_config_t::pull_up` 和 :cpp:member:`mcpwm_gpio_fault_config_t::pull_down` 设置是否在内部拉高和/或拉低 GPIO。 -- :cpp:member:`mcpwm_gpio_fault_config_t::io_loop_back` 设置是否启用回环模式。该模式仅用于调试,使用 GPIO 交换矩阵外设同时启用 GPIO 输入和输出。 分配成功后,:cpp:func:`mcpwm_new_gpio_fault` 将返回一个指向已分配故障的指针。否则,函数将返回错误代码。具体来说,当指定 MCPWM 组中没有空闲 GPIO 故障时,将返回 :c:macro:`ESP_ERR_NOT_FOUND` 错误。[1]_ @@ -163,7 +160,6 @@ MCPWM 同步源 - :cpp:member:`mcpwm_gpio_sync_src_config_t::gpio_num` 设置同步源使用的 GPIO 编号。 - :cpp:member:`mcpwm_gpio_sync_src_config_t::active_neg` 设置同步信号在下降沿是否有效。 - :cpp:member:`mcpwm_gpio_sync_src_config_t::pull_up` 和 :cpp:member:`mcpwm_gpio_sync_src_config_t::pull_down` 设置是否在内部拉高和/或拉低 GPIO。 -- :cpp:member:`mcpwm_gpio_sync_src_config_t::io_loop_back` 设置是否启用回环模式。该模式仅用于调试,使用 GPIO 交换矩阵外设同时启用 GPIO 输入和输出。 分配成功后,:cpp:func:`mcpwm_new_gpio_sync_src` 将返回一个指向已分配同步源的指针。否则,函数将返回错误代码。具体来说,当 MCPWM 组中没有空闲 GPIO 时钟源时,将返回 :c:macro:`ESP_ERR_NOT_FOUND` 错误。[1]_ @@ -207,8 +203,6 @@ MCPWM 组有一个专用定时器,用于捕获特定事件发生时的时间 - :cpp:member:`mcpwm_capture_channel_config_t::extra_capture_channel_flags::pos_edge` 和 :cpp:member:`mcpwm_capture_channel_config_t::extra_capture_channel_flags::neg_edge` 设置是否在输入信号的上升沿和/或下降沿捕获时间戳。 - :cpp:member:`mcpwm_capture_channel_config_t::extra_capture_channel_flags::pull_up` 和 :cpp:member:`mcpwm_capture_channel_config_t::extra_capture_channel_flags::pull_down` 设置是否在内部拉高和/或拉低 GPIO。 - :cpp:member:`mcpwm_capture_channel_config_t::extra_capture_channel_flags::invert_cap_signal` 设置是否取反捕获信号。 -- :cpp:member:`mcpwm_capture_channel_config_t::extra_capture_channel_flags::io_loop_back` 设置是否启用回环模式。该模式仅用于调试,使用 GPIO 交换矩阵外设同时启用 GPIO 输入和输出。 -- :cpp:member:`mcpwm_capture_channel_config_t::extra_capture_channel_flags::keep_io_conf_at_exit` 设置是否在删除通道时保留 GPIO 的相关配置。 分配成功后,:cpp:func:`mcpwm_new_capture_channel` 将返回一个指向已分配捕获通道的指针。否则,函数将返回错误代码。具体来说,当捕获定时器中没有空闲捕获通道时,将返回 :c:macro:`ESP_ERR_NOT_FOUND` 错误。 From 1193e26c88e37cfd05cce2f20225b03aff49eee2 Mon Sep 17 00:00:00 2001 From: morris Date: Tue, 27 Aug 2024 17:45:05 +0800 Subject: [PATCH 150/365] feat(gdma): added function to concat two link lists --- components/esp_hw_support/dma/gdma_link.c | 13 +++++++-- .../dma/include/esp_private/gdma_link.h | 27 ++++++++++++++++--- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/components/esp_hw_support/dma/gdma_link.c b/components/esp_hw_support/dma/gdma_link.c index d13b62e64d24..ae9d70326f56 100644 --- a/components/esp_hw_support/dma/gdma_link.c +++ b/components/esp_hw_support/dma/gdma_link.c @@ -227,11 +227,20 @@ uintptr_t gdma_link_get_head_addr(gdma_link_list_handle_t list) return (uintptr_t)(list->items); } +esp_err_t gdma_link_concat(gdma_link_list_handle_t first_link, int first_link_item_index, gdma_link_list_handle_t second_link, int second_link_item_index) +{ + ESP_RETURN_ON_FALSE(first_link && second_link, ESP_ERR_INVALID_ARG, TAG, "invalid argument"); + gdma_link_list_item_t *lli_nc = NULL; + lli_nc = (gdma_link_list_item_t *)(first_link->items_nc + (first_link->num_items + first_link_item_index) % first_link->num_items * first_link->item_size); + lli_nc->next = (gdma_link_list_item_t *)(second_link->items + (second_link->num_items + second_link_item_index) % second_link->num_items * second_link->item_size); + return ESP_OK; +} + esp_err_t gdma_link_set_owner(gdma_link_list_handle_t list, int item_index, gdma_lli_owner_t owner) { ESP_RETURN_ON_FALSE_ISR(list, ESP_ERR_INVALID_ARG, TAG, "invalid argument"); ESP_RETURN_ON_FALSE_ISR(item_index < list->num_items, ESP_ERR_INVALID_ARG, TAG, "invalid item index"); - gdma_link_list_item_t *lli = (gdma_link_list_item_t *)(list->items_nc + item_index * list->item_size); + gdma_link_list_item_t *lli = (gdma_link_list_item_t *)(list->items_nc + (list->num_items + item_index) % list->num_items * list->item_size); lli->dw0.owner = owner; return ESP_OK; } @@ -240,7 +249,7 @@ esp_err_t gdma_link_get_owner(gdma_link_list_handle_t list, int item_index, gdma { ESP_RETURN_ON_FALSE_ISR(list && owner, ESP_ERR_INVALID_ARG, TAG, "invalid argument"); ESP_RETURN_ON_FALSE_ISR(item_index < list->num_items, ESP_ERR_INVALID_ARG, TAG, "invalid item index"); - gdma_link_list_item_t *lli = (gdma_link_list_item_t *)(list->items_nc + item_index * list->item_size); + gdma_link_list_item_t *lli = (gdma_link_list_item_t *)(list->items_nc + (list->num_items + item_index) % list->num_items * list->item_size); *owner = lli->dw0.owner; return ESP_OK; } diff --git a/components/esp_hw_support/dma/include/esp_private/gdma_link.h b/components/esp_hw_support/dma/include/esp_private/gdma_link.h index 94a13651c4ee..61dd0beba626 100644 --- a/components/esp_hw_support/dma/include/esp_private/gdma_link.h +++ b/components/esp_hw_support/dma/include/esp_private/gdma_link.h @@ -71,7 +71,7 @@ typedef struct { uint32_t mark_final: 1; /*!< Whether to terminate the DMA link list at this item. Note, DMA engine will stop at this item and trigger an interrupt. If `mark_final` is not set, this list item will point to the next item, and - wrap around to the head item if it's the one in the list. */ + wrap around to the head item if it's the last one in the list. */ } flags; //!< Flags for buffer mount configurations } gdma_buffer_mount_config_t; @@ -105,6 +105,27 @@ esp_err_t gdma_link_mount_buffers(gdma_link_list_handle_t list, uint32_t start_i */ uintptr_t gdma_link_get_head_addr(gdma_link_list_handle_t list); +/** + * @brief Concatenate two link lists as follows: + * + * Link A: A1 --> A2 --> A3 --> A4 + * | item_index + * +-----+ + * | + * v item_index + * Link B: B1 --> B2 --> B3 --> B4 + * + * @param[in] first_link First link list handle, allocated by `gdma_new_link_list` + * @param[in] first_link_item_index Index of the item in the first link list (-1 means the last item) + * @param[in] second_link Second link list handle, allocated by `gdma_new_link_list` + * @param[in] second_link_item_index Index of the item in the second link list (-1 means the last item) + * @return + * - ESP_OK: Concatenate the link lists successfully + * - ESP_ERR_INVALID_ARG: Concatenate the link lists failed because of invalid argument + * - ESP_FAIL: Concatenate the link lists failed because of other error + */ +esp_err_t gdma_link_concat(gdma_link_list_handle_t first_link, int first_link_item_index, gdma_link_list_handle_t second_link, int second_link_item_index); + /** * @brief GDMA link list item owner */ @@ -117,7 +138,7 @@ typedef enum { * @brief Set the ownership for a DMA link list item * * @param[in] list Link list handle, allocated by `gdma_new_link_list` - * @param[in] item_index Index of the link list item + * @param[in] item_index Index of the link list item (-1 means the last item) * @param[in] owner Ownership * @return * - ESP_OK: Set the ownership successfully @@ -130,7 +151,7 @@ esp_err_t gdma_link_set_owner(gdma_link_list_handle_t list, int item_index, gdma * @brief Get the ownership of a DMA link list item * * @param[in] list Link list handle, allocated by `gdma_new_link_list` - * @param[in] item_index Index of the link list item + * @param[in] item_index Index of the link list item (-1 means the last item) * @param[out] owner Ownership * @return * - ESP_OK: Get the ownership successfully From dd82222dd984485cf306a29986060094b1cd10c8 Mon Sep 17 00:00:00 2001 From: morris Date: Mon, 23 Sep 2024 23:28:00 +0800 Subject: [PATCH 151/365] feat(rgb_lcd): use gdma_link driver --- components/esp_lcd/linker.lf | 1 + .../esp_lcd/priv_include/esp_lcd_common.h | 11 +- components/esp_lcd/rgb/esp_lcd_panel_rgb.c | 333 ++++++++++-------- components/esp_lcd/src/esp_lcd_common.c | 26 -- .../test_apps/rgb_lcd/main/test_rgb_board.h | 4 +- 5 files changed, 199 insertions(+), 176 deletions(-) diff --git a/components/esp_lcd/linker.lf b/components/esp_lcd/linker.lf index 513429d536e5..123a258a9224 100644 --- a/components/esp_lcd/linker.lf +++ b/components/esp_lcd/linker.lf @@ -4,6 +4,7 @@ entries: if LCD_RGB_ISR_IRAM_SAFE = y: gdma: gdma_reset (noflash) gdma: gdma_start (noflash) + gdma_link: gdma_link_get_head_addr (noflash) [mapping:esp_lcd_hal] archive: libhal.a diff --git a/components/esp_lcd/priv_include/esp_lcd_common.h b/components/esp_lcd/priv_include/esp_lcd_common.h index b57d37a787c7..64546727ef3b 100644 --- a/components/esp_lcd/priv_include/esp_lcd_common.h +++ b/components/esp_lcd/priv_include/esp_lcd_common.h @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2021-2023 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -60,15 +60,6 @@ int lcd_com_register_device(lcd_com_device_type_t device_type, void *device_obj) void lcd_com_remove_device(lcd_com_device_type_t device_type, int member_id); #endif // SOC_LCDCAM_SUPPORTED -/** - * @brief Mount data to DMA descriptors - * - * @param desc_head Point to the head of DMA descriptor chain - * @param buffer Data buffer - * @param len Size of the data buffer, in bytes - */ -void lcd_com_mount_dma_data(dma_descriptor_t *desc_head, const void *buffer, size_t len); - /** * @brief Reverse the bytes in the buffer * diff --git a/components/esp_lcd/rgb/esp_lcd_panel_rgb.c b/components/esp_lcd/rgb/esp_lcd_panel_rgb.c index f105ddf7cc4a..92e0e204f8d2 100644 --- a/components/esp_lcd/rgb/esp_lcd_panel_rgb.c +++ b/components/esp_lcd/rgb/esp_lcd_panel_rgb.c @@ -17,7 +17,6 @@ #endif #include "freertos/FreeRTOS.h" #include "freertos/task.h" -#include "freertos/semphr.h" #include "esp_attr.h" #include "esp_check.h" #include "esp_pm.h" @@ -28,14 +27,16 @@ #include "soc/soc_caps.h" #include "esp_clk_tree.h" #include "hal/dma_types.h" -#include "esp_private/gdma.h" #include "driver/gpio.h" #include "esp_bit_defs.h" #include "esp_private/esp_clk_tree_common.h" +#include "esp_private/gdma.h" +#include "esp_private/gdma_link.h" #include "esp_private/periph_ctrl.h" #include "esp_private/gpio.h" #include "esp_psram.h" #include "esp_lcd_common.h" +#include "esp_cache.h" #include "esp_memory_utils.h" #include "soc/lcd_periph.h" #include "soc/io_mux_reg.h" @@ -43,18 +44,27 @@ #include "hal/lcd_ll.h" #include "hal/cache_hal.h" #include "hal/cache_ll.h" -#include "rom/cache.h" -#include "esp_cache.h" #if CONFIG_LCD_RGB_ISR_IRAM_SAFE #define LCD_RGB_INTR_ALLOC_FLAGS (ESP_INTR_FLAG_IRAM | ESP_INTR_FLAG_INTRDISABLED) +#define LCD_RGB_MEM_ALLOC_CAPS (MALLOC_CAP_INTERNAL | MALLOC_CAP_8BIT) #else #define LCD_RGB_INTR_ALLOC_FLAGS ESP_INTR_FLAG_INTRDISABLED +#define LCD_RGB_MEM_ALLOC_CAPS MALLOC_CAP_DEFAULT +#endif + +#if defined(SOC_GDMA_TRIG_PERIPH_LCD0_BUS) && (SOC_GDMA_TRIG_PERIPH_LCD0_BUS == SOC_GDMA_BUS_AHB) +#define LCD_GDMA_NEW_CHANNEL gdma_new_ahb_channel +#define LCD_GDMA_DESCRIPTOR_ALIGN 4 +#elif defined(SOC_GDMA_TRIG_PERIPH_LCD0_BUS) && (SOC_GDMA_TRIG_PERIPH_LCD0_BUS == SOC_GDMA_BUS_AXI) +#define LCD_GDMA_NEW_CHANNEL gdma_new_axi_channel +#define LCD_GDMA_DESCRIPTOR_ALIGN 8 +#else +#error "Unsupported GDMA bus type for RGB LCD" #endif #define RGB_LCD_PANEL_MAX_FB_NUM 3 // maximum supported frame buffer number #define RGB_LCD_PANEL_BOUNCE_BUF_NUM 2 // bounce buffer number -#define RGB_LCD_PANEL_DMA_LINKS_REPLICA MAX(RGB_LCD_PANEL_MAX_FB_NUM, RGB_LCD_PANEL_BOUNCE_BUF_NUM) #define RGB_PANEL_SWAP_XY 0 #define RGB_PANEL_MIRROR_Y 1 @@ -80,8 +90,8 @@ static esp_err_t rgb_panel_swap_xy(esp_lcd_panel_t *panel, bool swap_axes); static esp_err_t rgb_panel_set_gap(esp_lcd_panel_t *panel, int x_gap, int y_gap); static esp_err_t rgb_panel_disp_on_off(esp_lcd_panel_t *panel, bool off); static esp_err_t lcd_rgb_panel_select_clock_src(esp_rgb_panel_t *panel, lcd_clock_source_t clk_src); -static esp_err_t lcd_rgb_create_dma_channel(esp_rgb_panel_t *panel); -static void lcd_rgb_panel_init_trans_link(esp_rgb_panel_t *panel); +static esp_err_t lcd_rgb_create_dma_channel(esp_rgb_panel_t *rgb_panel); +static esp_err_t lcd_rgb_panel_init_trans_link(esp_rgb_panel_t *rgb_panel); static esp_err_t lcd_rgb_panel_configure_gpio(esp_rgb_panel_t *panel, const esp_lcd_rgb_panel_config_t *panel_config); static void lcd_rgb_panel_start_transmission(esp_rgb_panel_t *rgb_panel); static void rgb_lcd_default_isr_handler(void *args); @@ -99,19 +109,24 @@ struct esp_rgb_panel_t { intr_handle_t intr; // LCD peripheral interrupt handle esp_pm_lock_handle_t pm_lock; // Power management lock size_t num_dma_nodes; // Number of DMA descriptors that used to carry the frame buffer + gdma_channel_handle_t dma_chan; // DMA channel handle + gdma_link_list_handle_t dma_fb_links[RGB_LCD_PANEL_MAX_FB_NUM]; // DMA link lists for multiple frame buffers + gdma_link_list_handle_t dma_bb_link; // DMA link list for bounce buffer + gdma_link_list_handle_t dma_restart_link; // DMA link list for restarting the DMA uint8_t *fbs[RGB_LCD_PANEL_MAX_FB_NUM]; // Frame buffers + uint8_t *bounce_buffer[RGB_LCD_PANEL_BOUNCE_BUF_NUM]; // Pointer to the bounce buffers + size_t fb_size; // Size of frame buffer, in bytes + size_t bb_size; // Size of the bounce buffer, in bytes. If not-zero, the driver uses two bounce buffers allocated from internal memory uint8_t cur_fb_index; // Current frame buffer index uint8_t bb_fb_index; // Current frame buffer index which used by bounce buffer - size_t fb_size; // Size of frame buffer, in bytes + size_t int_mem_align; // DMA buffer alignment for internal memory + size_t ext_mem_align; // DMA buffer alignment for external memory int data_gpio_nums[SOC_LCD_RGB_DATA_WIDTH]; // GPIOs used for data lines, we keep these GPIOs for action like "invert_color" uint32_t src_clk_hz; // Peripheral source clock resolution esp_lcd_rgb_timing_t timings; // RGB timing parameters (e.g. pclk, sync pulse, porch width) - size_t bb_size; // Size of the bounce buffer, in bytes. If not-zero, the driver uses two bounce buffers allocated from internal memory int bounce_pos_px; // Position in whatever source material is used for the bounce buffer, in pixels - uint8_t *bounce_buffer[RGB_LCD_PANEL_BOUNCE_BUF_NUM]; // Pointer to the bounce buffers size_t bb_eof_count; // record the number we received the DMA EOF event, compare with `expect_eof_count` in the VSYNC_END ISR size_t expect_eof_count; // record the number of DMA EOF event we expected to receive - gdma_channel_handle_t dma_chan; // DMA channel handle esp_lcd_rgb_panel_vsync_cb_t on_vsync; // VSYNC event callback esp_lcd_rgb_panel_bounce_buf_fill_cb_t on_bounce_empty; // callback used to fill a bounce buffer rather than copying from the frame buffer esp_lcd_rgb_panel_bounce_buf_finish_cb_t on_bounce_frame_finish; // callback used to notify when the bounce buffer finish copying the entire frame @@ -128,66 +143,55 @@ struct esp_rgb_panel_t { uint32_t need_update_pclk: 1; // Whether to update the PCLK before start a new transaction uint32_t need_restart: 1; // Whether to restart the LCD controller and the DMA uint32_t bb_invalidate_cache: 1; // Whether to do cache invalidation in bounce buffer mode + uint32_t fb_behind_cache: 1; // Whether the frame buffer is behind the cache + uint32_t bb_behind_cache: 1; // Whether the bounce buffer is behind the cache } flags; - dma_descriptor_t *dma_links[RGB_LCD_PANEL_DMA_LINKS_REPLICA]; // fbs[0] <-> dma_links[0], fbs[1] <-> dma_links[1], etc - dma_descriptor_t dma_restart_node; // DMA descriptor used to restart the transfer - dma_descriptor_t dma_nodes[]; // DMA descriptors pool }; -static esp_err_t lcd_rgb_panel_alloc_frame_buffers(const esp_lcd_rgb_panel_config_t *rgb_panel_config, esp_rgb_panel_t *rgb_panel) +static esp_err_t lcd_rgb_panel_alloc_frame_buffers(esp_rgb_panel_t *rgb_panel) { - bool fb_in_psram = false; - size_t ext_mem_align = 0; - size_t int_mem_align = 0; - gdma_get_alignment_constraints(rgb_panel->dma_chan, &int_mem_align, &ext_mem_align); + bool fb_in_psram = rgb_panel->flags.fb_in_psram; - // also take the cache line size into account when allocating the frame buffer - uint32_t ext_mem_cache_line_size = cache_hal_get_cache_line_size(CACHE_LL_LEVEL_EXT_MEM, CACHE_TYPE_DATA); + // read the cache line size of internal and external memory, we use this information to check if the allocated memory is behind the cache uint32_t int_mem_cache_line_size = cache_hal_get_cache_line_size(CACHE_LL_LEVEL_INT_MEM, CACHE_TYPE_DATA); - // The buffer must be aligned to the cache line size - if (ext_mem_cache_line_size) { - ext_mem_align = MAX(ext_mem_align, ext_mem_cache_line_size); - } - if (int_mem_cache_line_size) { - int_mem_align = MAX(int_mem_align, int_mem_cache_line_size); - } + uint32_t ext_mem_cache_line_size = cache_hal_get_cache_line_size(CACHE_LL_LEVEL_EXT_MEM, CACHE_TYPE_DATA); // alloc frame buffer - if (rgb_panel->num_fbs > 0) { - // fb_in_psram is only an option, if there's no PSRAM on board, we fallback to alloc from SRAM - if (rgb_panel_config->flags.fb_in_psram) { -#if CONFIG_SPIRAM_USE_MALLOC || CONFIG_SPIRAM_USE_CAPS_ALLOC - if (esp_psram_is_initialized()) { - fb_in_psram = true; - } -#endif + for (int i = 0; i < rgb_panel->num_fbs; i++) { + if (fb_in_psram) { + // the allocated buffer is also aligned to the cache line size + rgb_panel->fbs[i] = heap_caps_aligned_calloc(rgb_panel->ext_mem_align, 1, rgb_panel->fb_size, + MALLOC_CAP_SPIRAM | MALLOC_CAP_DMA | MALLOC_CAP_8BIT); + ESP_RETURN_ON_FALSE(rgb_panel->fbs[i], ESP_ERR_NO_MEM, TAG, "no mem for frame buffer"); + rgb_panel->flags.fb_behind_cache = ext_mem_cache_line_size > 0; + } else { + rgb_panel->fbs[i] = heap_caps_aligned_calloc(rgb_panel->int_mem_align, 1, rgb_panel->fb_size, + MALLOC_CAP_INTERNAL | MALLOC_CAP_DMA | MALLOC_CAP_8BIT); + ESP_RETURN_ON_FALSE(rgb_panel->fbs[i], ESP_ERR_NO_MEM, TAG, "no mem for frame buffer"); + rgb_panel->flags.fb_behind_cache = int_mem_cache_line_size > 0; } - for (int i = 0; i < rgb_panel->num_fbs; i++) { - if (fb_in_psram) { - // the low level malloc function will help check the validation of alignment - rgb_panel->fbs[i] = heap_caps_aligned_calloc(ext_mem_align, 1, rgb_panel->fb_size, MALLOC_CAP_SPIRAM | MALLOC_CAP_8BIT); - ESP_RETURN_ON_FALSE(rgb_panel->fbs[i], ESP_ERR_NO_MEM, TAG, "no mem for frame buffer"); - // calloc not only allocates but also zero's the buffer. We have to make sure this is - // properly committed to the PSRAM, otherwise all sorts of visual corruption will happen. - ESP_RETURN_ON_ERROR(esp_cache_msync(rgb_panel->fbs[i], rgb_panel->fb_size, ESP_CACHE_MSYNC_FLAG_DIR_C2M), TAG, "cache write back failed"); - } else { - rgb_panel->fbs[i] = heap_caps_aligned_calloc(int_mem_align, 1, rgb_panel->fb_size, MALLOC_CAP_INTERNAL | MALLOC_CAP_DMA); - ESP_RETURN_ON_FALSE(rgb_panel->fbs[i], ESP_ERR_NO_MEM, TAG, "no mem for frame buffer"); - } + // flush data from cache to the physical memory + if (rgb_panel->flags.fb_behind_cache) { + esp_cache_msync(rgb_panel->fbs[i], rgb_panel->fb_size, ESP_CACHE_MSYNC_FLAG_DIR_C2M | ESP_CACHE_MSYNC_FLAG_UNALIGNED); } } // alloc bounce buffer if (rgb_panel->bb_size) { for (int i = 0; i < RGB_LCD_PANEL_BOUNCE_BUF_NUM; i++) { - // bounce buffer must come from SRAM - rgb_panel->bounce_buffer[i] = heap_caps_aligned_calloc(int_mem_align, 1, rgb_panel->bb_size, MALLOC_CAP_INTERNAL | MALLOC_CAP_DMA); + // bounce buffer must be allocated from internal memory for performance + rgb_panel->bounce_buffer[i] = heap_caps_aligned_calloc(rgb_panel->int_mem_align, 1, rgb_panel->bb_size, + MALLOC_CAP_INTERNAL | MALLOC_CAP_DMA | MALLOC_CAP_8BIT); ESP_RETURN_ON_FALSE(rgb_panel->bounce_buffer[i], ESP_ERR_NO_MEM, TAG, "no mem for bounce buffer"); + if (int_mem_cache_line_size > 0) { + // flush data from cache to the physical memory + esp_cache_msync(rgb_panel->bounce_buffer[i], rgb_panel->bb_size, ESP_CACHE_MSYNC_FLAG_DIR_C2M | ESP_CACHE_MSYNC_FLAG_UNALIGNED); + rgb_panel->flags.bb_behind_cache = true; + } } } rgb_panel->cur_fb_index = 0; rgb_panel->bb_fb_index = 0; - rgb_panel->flags.fb_in_psram = fb_in_psram; return ESP_OK; } @@ -205,20 +209,28 @@ static esp_err_t lcd_rgb_panel_destroy(esp_rgb_panel_t *rgb_panel) } lcd_com_remove_device(LCD_COM_DEVICE_TYPE_RGB, rgb_panel->panel_id); } - for (size_t i = 0; i < rgb_panel->num_fbs; i++) { + if (rgb_panel->dma_chan) { + gdma_disconnect(rgb_panel->dma_chan); + gdma_del_channel(rgb_panel->dma_chan); + } + for (size_t i = 0; i < RGB_LCD_PANEL_MAX_FB_NUM; i++) { if (rgb_panel->fbs[i]) { free(rgb_panel->fbs[i]); } + if (rgb_panel->dma_fb_links[i]) { + gdma_del_link_list(rgb_panel->dma_fb_links[i]); + } } - if (rgb_panel->bounce_buffer[0]) { - free(rgb_panel->bounce_buffer[0]); + for (int i = 0; i < RGB_LCD_PANEL_BOUNCE_BUF_NUM; i++) { + if (rgb_panel->bounce_buffer[i]) { + free(rgb_panel->bounce_buffer[i]); + } } - if (rgb_panel->bounce_buffer[1]) { - free(rgb_panel->bounce_buffer[1]); + if (rgb_panel->dma_bb_link) { + gdma_del_link_list(rgb_panel->dma_bb_link); } - if (rgb_panel->dma_chan) { - gdma_disconnect(rgb_panel->dma_chan); - gdma_del_channel(rgb_panel->dma_chan); + if (rgb_panel->dma_restart_link) { + gdma_del_link_list(rgb_panel->dma_restart_link); } if (rgb_panel->intr) { esp_intr_free(rgb_panel->intr); @@ -240,7 +252,7 @@ esp_err_t esp_lcd_new_rgb_panel(const esp_lcd_rgb_panel_config_t *rgb_panel_conf esp_rgb_panel_t *rgb_panel = NULL; ESP_RETURN_ON_FALSE(rgb_panel_config && ret_panel, ESP_ERR_INVALID_ARG, TAG, "invalid parameter"); size_t data_width = rgb_panel_config->data_width; - ESP_RETURN_ON_FALSE((data_width >= 8) && (data_width <= SOC_LCD_RGB_DATA_WIDTH) && ((data_width & (data_width - 1)) == 0), ESP_ERR_INVALID_ARG, + ESP_RETURN_ON_FALSE((data_width > 0) && (data_width <= SOC_LCDCAM_RGB_DATA_WIDTH) && ((data_width % 8) == 0), ESP_ERR_INVALID_ARG, TAG, "unsupported data width %d", data_width); ESP_RETURN_ON_FALSE(!(rgb_panel_config->flags.double_fb && rgb_panel_config->flags.no_fb), ESP_ERR_INVALID_ARG, TAG, "double_fb conflicts with no_fb"); @@ -283,25 +295,16 @@ esp_err_t esp_lcd_new_rgb_panel(const esp_lcd_rgb_panel_config_t *rgb_panel_conf // calculate the number of DMA descriptors size_t num_dma_nodes = 0; - if (bb_size) { - // in bounce buffer mode, DMA is used to convey the bounce buffer, not the frame buffer. - // frame buffer is copied to bounce buffer by CPU - num_dma_nodes = (bb_size + DMA_DESCRIPTOR_BUFFER_MAX_SIZE - 1) / DMA_DESCRIPTOR_BUFFER_MAX_SIZE; - } else { - // Not bounce buffer mode, DMA descriptors need to fit the entire frame buffer - num_dma_nodes = (fb_size + DMA_DESCRIPTOR_BUFFER_MAX_SIZE - 1) / DMA_DESCRIPTOR_BUFFER_MAX_SIZE; - } - - // DMA descriptors must be placed in internal SRAM (requested by DMA) - rgb_panel = heap_caps_calloc(1, sizeof(esp_rgb_panel_t) + num_dma_nodes * sizeof(dma_descriptor_t) * RGB_LCD_PANEL_DMA_LINKS_REPLICA, - MALLOC_CAP_DMA | MALLOC_CAP_INTERNAL); + // allocate memory for rgb panel + rgb_panel = heap_caps_calloc(1, sizeof(esp_rgb_panel_t), LCD_RGB_MEM_ALLOC_CAPS); ESP_GOTO_ON_FALSE(rgb_panel, ESP_ERR_NO_MEM, err, TAG, "no mem for rgb panel"); + rgb_panel->panel_id = -1; rgb_panel->num_dma_nodes = num_dma_nodes; rgb_panel->num_fbs = num_fbs; rgb_panel->fb_size = fb_size; rgb_panel->bb_size = bb_size; + rgb_panel->fb_bits_per_pixel = fb_bits_per_pixel; rgb_panel->expect_eof_count = expect_bb_eof_count; - rgb_panel->panel_id = -1; // register to platform int panel_id = lcd_com_register_device(LCD_COM_DEVICE_TYPE_RGB, rgb_panel); ESP_GOTO_ON_FALSE(panel_id >= 0, ESP_ERR_NOT_FOUND, err, TAG, "no free rgb panel slot"); @@ -343,13 +346,13 @@ esp_err_t esp_lcd_new_rgb_panel(const esp_lcd_rgb_panel_config_t *rgb_panel_conf // install DMA service rgb_panel->flags.stream_mode = !rgb_panel_config->flags.refresh_on_demand; - rgb_panel->fb_bits_per_pixel = fb_bits_per_pixel; rgb_panel->dma_burst_size = rgb_panel_config->dma_burst_size ? rgb_panel_config->dma_burst_size : 64; + rgb_panel->flags.fb_in_psram = rgb_panel_config->flags.fb_in_psram; ESP_GOTO_ON_ERROR(lcd_rgb_create_dma_channel(rgb_panel), err, TAG, "install DMA failed"); // allocate frame buffers + bounce buffers - ESP_GOTO_ON_ERROR(lcd_rgb_panel_alloc_frame_buffers(rgb_panel_config, rgb_panel), err, TAG, "alloc frame buffers failed"); + ESP_GOTO_ON_ERROR(lcd_rgb_panel_alloc_frame_buffers(rgb_panel), err, TAG, "alloc frame buffers failed"); // initialize DMA descriptor link - lcd_rgb_panel_init_trans_link(rgb_panel); + ESP_GOTO_ON_ERROR(lcd_rgb_panel_init_trans_link(rgb_panel), err, TAG, "init DMA link failed"); // configure GPIO ret = lcd_rgb_panel_configure_gpio(rgb_panel, rgb_panel_config); @@ -786,13 +789,14 @@ static esp_err_t rgb_panel_draw_bitmap(esp_lcd_panel_t *panel, int x_start, int if (!rgb_panel->bb_size) { if (rgb_panel->flags.stream_mode) { - // the DMA will convey the new frame buffer next time - for (int i = 0; i < RGB_LCD_PANEL_DMA_LINKS_REPLICA; i++) { - rgb_panel->dma_nodes[rgb_panel->num_dma_nodes * (i + 1) - 1].next = rgb_panel->dma_links[rgb_panel->cur_fb_index]; + for (int i = 0; i < rgb_panel->num_fbs; i++) { + // Note, because of DMA prefetch, there's possibility that the old frame buffer might be sent out again + // it's hard to know the time when the new frame buffer starts + gdma_link_concat(rgb_panel->dma_fb_links[i], -1, rgb_panel->dma_fb_links[rgb_panel->cur_fb_index], 0); } + } } - return ESP_OK; } @@ -959,95 +963,144 @@ static IRAM_ATTR bool lcd_rgb_panel_fill_bounce_buffer(esp_rgb_panel_t *panel, u static IRAM_ATTR bool lcd_rgb_panel_eof_handler(gdma_channel_handle_t dma_chan, gdma_event_data_t *event_data, void *user_data) { esp_rgb_panel_t *panel = (esp_rgb_panel_t *)user_data; - dma_descriptor_t *desc = (dma_descriptor_t *)event_data->tx_eof_desc_addr; // Figure out which bounce buffer to write to. - // Note: what we receive is the *last* descriptor of this bounce buffer. - int bb = (desc == &panel->dma_nodes[panel->num_dma_nodes - 1]) ? 0 : 1; portENTER_CRITICAL_ISR(&panel->spinlock); + int bb = panel->bb_eof_count % RGB_LCD_PANEL_BOUNCE_BUF_NUM; panel->bb_eof_count++; portEXIT_CRITICAL_ISR(&panel->spinlock); return lcd_rgb_panel_fill_bounce_buffer(panel, panel->bounce_buffer[bb]); } -static esp_err_t lcd_rgb_create_dma_channel(esp_rgb_panel_t *panel) +static esp_err_t lcd_rgb_create_dma_channel(esp_rgb_panel_t *rgb_panel) { // alloc DMA channel and connect to LCD peripheral gdma_channel_alloc_config_t dma_chan_config = { .direction = GDMA_CHANNEL_DIRECTION_TX, }; -#if SOC_GDMA_TRIG_PERIPH_LCD0_BUS == SOC_GDMA_BUS_AHB - ESP_RETURN_ON_ERROR(gdma_new_ahb_channel(&dma_chan_config, &panel->dma_chan), TAG, "alloc DMA channel failed"); -#elif SOC_GDMA_TRIG_PERIPH_LCD0_BUS == SOC_GDMA_BUS_AXI - ESP_RETURN_ON_ERROR(gdma_new_axi_channel(&dma_chan_config, &panel->dma_chan), TAG, "alloc DMA channel failed"); -#endif - gdma_connect(panel->dma_chan, GDMA_MAKE_TRIGGER(GDMA_TRIG_PERIPH_LCD, 0)); + ESP_RETURN_ON_ERROR(LCD_GDMA_NEW_CHANNEL(&dma_chan_config, &rgb_panel->dma_chan), TAG, "alloc DMA channel failed"); + gdma_connect(rgb_panel->dma_chan, GDMA_MAKE_TRIGGER(GDMA_TRIG_PERIPH_LCD, 0)); + + // configure DMA strategy + gdma_strategy_config_t dma_strategy = { + .eof_till_data_popped = false, + }; + gdma_apply_strategy(rgb_panel->dma_chan, &dma_strategy); - // configure DMA transfer parameters + // configure DMA transfer gdma_transfer_config_t trans_cfg = { - .max_data_burst_size = panel->dma_burst_size, - .access_ext_mem = true, // frame buffer was allocated from external memory + .max_data_burst_size = rgb_panel->dma_burst_size, + .access_ext_mem = rgb_panel->flags.fb_in_psram, }; - ESP_RETURN_ON_ERROR(gdma_config_transfer(panel->dma_chan, &trans_cfg), TAG, "config DMA transfer failed"); + ESP_RETURN_ON_ERROR(gdma_config_transfer(rgb_panel->dma_chan, &trans_cfg), TAG, "config DMA transfer failed"); + // get the memory alignment required by the DMA + gdma_get_alignment_constraints(rgb_panel->dma_chan, &rgb_panel->int_mem_align, &rgb_panel->ext_mem_align); // we need to refill the bounce buffer in the DMA EOF interrupt, so only register the callback for bounce buffer mode - if (panel->bb_size) { + if (rgb_panel->bb_size) { gdma_tx_event_callbacks_t cbs = { .on_trans_eof = lcd_rgb_panel_eof_handler, }; - gdma_register_tx_event_callbacks(panel->dma_chan, &cbs, panel); + gdma_register_tx_event_callbacks(rgb_panel->dma_chan, &cbs, rgb_panel); } return ESP_OK; } -// If we restart GDMA, many pixels already have been transferred to the LCD peripheral. -// Looks like that has 16 pixels of FIFO plus one holding register. +// If we restart GDMA, the data sent to the LCD peripheral needs to start LCD_FIFO_PRESERVE_SIZE_PX pixels after the FB start +// so we use a dedicated DMA link (called restart link) to restart the transaction #define LCD_FIFO_PRESERVE_SIZE_PX (LCD_LL_FIFO_DEPTH + 1) -static void lcd_rgb_panel_init_trans_link(esp_rgb_panel_t *panel) +static esp_err_t lcd_rgb_panel_init_trans_link(esp_rgb_panel_t *rgb_panel) { - for (int i = 0; i < RGB_LCD_PANEL_DMA_LINKS_REPLICA; i++) { - panel->dma_links[i] = &panel->dma_nodes[panel->num_dma_nodes * i]; - } - // chain DMA descriptors - for (int i = 0; i < panel->num_dma_nodes * RGB_LCD_PANEL_DMA_LINKS_REPLICA; i++) { - panel->dma_nodes[i].dw0.owner = DMA_DESCRIPTOR_BUFFER_OWNER_CPU; - panel->dma_nodes[i].next = &panel->dma_nodes[i + 1]; - } - - if (panel->bb_size) { - // loop end back to start - panel->dma_nodes[panel->num_dma_nodes * RGB_LCD_PANEL_BOUNCE_BUF_NUM - 1].next = &panel->dma_nodes[0]; - // mount the bounce buffers to the DMA descriptors - lcd_com_mount_dma_data(panel->dma_links[0], panel->bounce_buffer[0], panel->bb_size); - lcd_com_mount_dma_data(panel->dma_links[1], panel->bounce_buffer[1], panel->bb_size); - } else { - if (panel->flags.stream_mode) { - // circle DMA descriptors chain for each frame buffer - for (int i = 0; i < RGB_LCD_PANEL_DMA_LINKS_REPLICA; i++) { - panel->dma_nodes[panel->num_dma_nodes * (i + 1) - 1].next = &panel->dma_nodes[panel->num_dma_nodes * i]; - } - } else { - // one-off DMA descriptors chain - for (int i = 0; i < RGB_LCD_PANEL_DMA_LINKS_REPLICA; i++) { - panel->dma_nodes[panel->num_dma_nodes * (i + 1) - 1].next = NULL; + // the restart link shares the same buffer with the frame/bounce buffer but start from a different offset + int restart_skip_bytes = LCD_FIFO_PRESERVE_SIZE_PX * (rgb_panel->fb_bits_per_pixel / 8); + if (rgb_panel->bb_size) { + // DMA is used to convey the bounce buffer + size_t num_dma_nodes_per_bounce_buffer = (rgb_panel->bb_size + LCD_DMA_DESCRIPTOR_BUFFER_MAX_SIZE - 1) / LCD_DMA_DESCRIPTOR_BUFFER_MAX_SIZE; + gdma_link_list_config_t link_cfg = { + .buffer_alignment = rgb_panel->int_mem_align, + .item_alignment = LCD_GDMA_DESCRIPTOR_ALIGN, + .num_items = num_dma_nodes_per_bounce_buffer * RGB_LCD_PANEL_BOUNCE_BUF_NUM, + .flags = { + .check_owner = true, } + }; + ESP_RETURN_ON_ERROR(gdma_new_link_list(&link_cfg, &rgb_panel->dma_bb_link), TAG, "create bounce buffer DMA link failed"); + // mount bounce buffers to the DMA link list + gdma_buffer_mount_config_t mount_cfgs[RGB_LCD_PANEL_BOUNCE_BUF_NUM] = {0}; + for (int i = 0; i < RGB_LCD_PANEL_BOUNCE_BUF_NUM; i++) { + mount_cfgs[i].buffer = rgb_panel->bounce_buffer[i]; + mount_cfgs[i].length = rgb_panel->bb_size; + mount_cfgs[i].flags.mark_eof = true; // we use the DMA EOF interrupt to copy the frame buffer (partially) to the bounce buffer } - // mount the frame buffer to the DMA descriptors - for (size_t i = 0; i < panel->num_fbs; i++) { - lcd_com_mount_dma_data(panel->dma_links[i], panel->fbs[i], panel->fb_size); + ESP_RETURN_ON_ERROR(gdma_link_mount_buffers(rgb_panel->dma_bb_link, 0, mount_cfgs, RGB_LCD_PANEL_BOUNCE_BUF_NUM, NULL), + TAG, "mount DMA bounce buffers failed"); + // create restart link + gdma_link_list_config_t restart_link_cfg = { + .buffer_alignment = rgb_panel->int_mem_align, + .item_alignment = LCD_GDMA_DESCRIPTOR_ALIGN, + .num_items = 1, // the restart link only contains one node + .flags = { + .check_owner = true, + } + }; + ESP_RETURN_ON_ERROR(gdma_new_link_list(&restart_link_cfg, &rgb_panel->dma_restart_link), TAG, "create DMA restart link list failed"); + gdma_buffer_mount_config_t restart_buffer_mount_cfg = { + .buffer = rgb_panel->bounce_buffer[0] + restart_skip_bytes, + .length = MIN(LCD_DMA_DESCRIPTOR_BUFFER_MAX_SIZE, rgb_panel->bb_size) - restart_skip_bytes, + }; + ESP_RETURN_ON_ERROR(gdma_link_mount_buffers(rgb_panel->dma_restart_link, 0, &restart_buffer_mount_cfg, 1, NULL), + TAG, "mount DMA restart buffer failed"); + + // Magic here: we use the restart link to restart the bounce buffer link list, so concat them + gdma_link_concat(rgb_panel->dma_restart_link, 0, rgb_panel->dma_bb_link, 1); + } else { + // DMA is used to convey the frame buffer + size_t num_dma_nodes = (rgb_panel->fb_size + LCD_DMA_DESCRIPTOR_BUFFER_MAX_SIZE - 1) / LCD_DMA_DESCRIPTOR_BUFFER_MAX_SIZE; + gdma_link_list_config_t link_cfg = { + .buffer_alignment = rgb_panel->flags.fb_in_psram ? rgb_panel->ext_mem_align : rgb_panel->int_mem_align, + .item_alignment = LCD_GDMA_DESCRIPTOR_ALIGN, + .num_items = num_dma_nodes, + .flags = { + .check_owner = true, + }, + }; + gdma_buffer_mount_config_t mount_cfg = { + .length = rgb_panel->fb_size, + .flags = { + .mark_final = rgb_panel->flags.stream_mode ? false : true, + .mark_eof = true, + }, + }; + for (size_t i = 0; i < rgb_panel->num_fbs; i++) { + ESP_RETURN_ON_ERROR(gdma_new_link_list(&link_cfg, &rgb_panel->dma_fb_links[i]), TAG, "create frame buffer DMA link failed"); + // mount bounce buffers to the DMA link list + mount_cfg.buffer = rgb_panel->fbs[i]; + ESP_RETURN_ON_ERROR(gdma_link_mount_buffers(rgb_panel->dma_fb_links[i], 0, &mount_cfg, 1, NULL), + TAG, "mount DMA frame buffer failed"); } + // create restart link + gdma_link_list_config_t restart_link_cfg = { + .buffer_alignment = rgb_panel->flags.fb_in_psram ? rgb_panel->ext_mem_align : rgb_panel->int_mem_align, + .item_alignment = LCD_GDMA_DESCRIPTOR_ALIGN, + .num_items = 1, // the restart link only contains one node + .flags = { + .check_owner = true, + } + }; + ESP_RETURN_ON_ERROR(gdma_new_link_list(&restart_link_cfg, &rgb_panel->dma_restart_link), TAG, "create DMA restart link list failed"); + gdma_buffer_mount_config_t restart_buffer_mount_cfg = { + .buffer = rgb_panel->fbs[0] + restart_skip_bytes, + .length = MIN(LCD_DMA_DESCRIPTOR_BUFFER_MAX_SIZE, rgb_panel->fb_size) - restart_skip_bytes, + }; + ESP_RETURN_ON_ERROR(gdma_link_mount_buffers(rgb_panel->dma_restart_link, 0, &restart_buffer_mount_cfg, 1, NULL), + TAG, "mount DMA restart buffer failed"); + + // Magic here: we use the restart link to restart the frame buffer link list, so concat them + gdma_link_concat(rgb_panel->dma_restart_link, 0, rgb_panel->dma_fb_links[0], 1); } - // On restart, the data sent to the LCD peripheral needs to start LCD_FIFO_PRESERVE_SIZE_PX pixels after the FB start - // so we use a dedicated DMA node to restart the DMA transaction - // see also `lcd_rgb_panel_try_restart_transmission` - memcpy(&panel->dma_restart_node, &panel->dma_nodes[0], sizeof(panel->dma_restart_node)); - int restart_skip_bytes = LCD_FIFO_PRESERVE_SIZE_PX * (panel->fb_bits_per_pixel / 8); - uint8_t *p = (uint8_t *)panel->dma_restart_node.buffer; - panel->dma_restart_node.buffer = &p[restart_skip_bytes]; - panel->dma_restart_node.dw0.length -= restart_skip_bytes; - panel->dma_restart_node.dw0.size -= restart_skip_bytes; + return ESP_OK; } // reset the GDMA channel every VBlank to stop permanent desyncs from happening. @@ -1093,7 +1146,7 @@ static IRAM_ATTR void lcd_rgb_panel_try_restart_transmission(esp_rgb_panel_t *pa gdma_reset(panel->dma_chan); // restart the DMA by a special DMA node - gdma_start(panel->dma_chan, (intptr_t)&panel->dma_restart_node); + gdma_start(panel->dma_chan, gdma_link_get_head_addr(panel->dma_restart_link)); if (panel->bb_size) { // Fill 2nd bounce buffer while 1st is being sent out, if needed. @@ -1119,7 +1172,11 @@ static void lcd_rgb_panel_start_transmission(esp_rgb_panel_t *rgb_panel) } // the start of DMA should be prior to the start of LCD engine - gdma_start(rgb_panel->dma_chan, (intptr_t)rgb_panel->dma_links[rgb_panel->cur_fb_index]); + if (rgb_panel->bb_size) { + gdma_start(rgb_panel->dma_chan, gdma_link_get_head_addr(rgb_panel->dma_bb_link)); + } else { + gdma_start(rgb_panel->dma_chan, gdma_link_get_head_addr(rgb_panel->dma_fb_links[rgb_panel->cur_fb_index])); + } // delay 1us is sufficient for DMA to pass data to LCD FIFO // in fact, this is only needed when LCD pixel clock is set too high esp_rom_delay_us(1); diff --git a/components/esp_lcd/src/esp_lcd_common.c b/components/esp_lcd/src/esp_lcd_common.c index 07ee21a98e23..7b739188bba5 100644 --- a/components/esp_lcd/src/esp_lcd_common.c +++ b/components/esp_lcd/src/esp_lcd_common.c @@ -78,29 +78,3 @@ void lcd_com_remove_device(lcd_com_device_type_t device_type, int member_id) } } #endif // SOC_LCDCAM_SUPPORTED - -void lcd_com_mount_dma_data(dma_descriptor_t *desc_head, const void *buffer, size_t len) -{ - size_t prepared_length = 0; - uint8_t *data = (uint8_t *)buffer; - dma_descriptor_t *desc = desc_head; - while (len > DMA_DESCRIPTOR_BUFFER_MAX_SIZE) { - desc->dw0.suc_eof = 0; // not the end of the transaction - desc->dw0.size = DMA_DESCRIPTOR_BUFFER_MAX_SIZE; - desc->dw0.length = DMA_DESCRIPTOR_BUFFER_MAX_SIZE; - desc->dw0.owner = DMA_DESCRIPTOR_BUFFER_OWNER_DMA; - desc->buffer = &data[prepared_length]; - desc = desc->next; // move to next descriptor - prepared_length += DMA_DESCRIPTOR_BUFFER_MAX_SIZE; - len -= DMA_DESCRIPTOR_BUFFER_MAX_SIZE; - } - if (len) { - desc->dw0.suc_eof = 1; // end of the transaction - desc->dw0.size = len; - desc->dw0.length = len; - desc->dw0.owner = DMA_DESCRIPTOR_BUFFER_OWNER_DMA; - desc->buffer = &data[prepared_length]; - desc = desc->next; // move to next descriptor - prepared_length += len; - } -} diff --git a/components/esp_lcd/test_apps/rgb_lcd/main/test_rgb_board.h b/components/esp_lcd/test_apps/rgb_lcd/main/test_rgb_board.h index 180c519e5614..4aad495537cb 100644 --- a/components/esp_lcd/test_apps/rgb_lcd/main/test_rgb_board.h +++ b/components/esp_lcd/test_apps/rgb_lcd/main/test_rgb_board.h @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -34,7 +34,7 @@ extern "C" { #define TEST_LCD_DATA15_GPIO 40 // R4 #define TEST_LCD_DISP_EN_GPIO -1 -#define TEST_LCD_PIXEL_CLOCK_HZ (10 * 1000 * 1000) +#define TEST_LCD_PIXEL_CLOCK_HZ (18 * 1000 * 1000) #ifdef __cplusplus } From d792f7d86de9cdcaa014e240f9dc6544aa18bf07 Mon Sep 17 00:00:00 2001 From: Zhang Shuxian Date: Tue, 8 Oct 2024 14:34:36 +0800 Subject: [PATCH 152/365] docs: Update CN translation for esp_eth.rst --- docs/en/api-reference/network/esp_eth.rst | 2 +- docs/zh_CN/api-reference/network/esp_eth.rst | 20 +++++++++++++++----- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/docs/en/api-reference/network/esp_eth.rst b/docs/en/api-reference/network/esp_eth.rst index ced34bb9822f..0b1ee221755a 100644 --- a/docs/en/api-reference/network/esp_eth.rst +++ b/docs/en/api-reference/network/esp_eth.rst @@ -293,7 +293,7 @@ The Ethernet driver is implemented in an Object-Oriented style. Any operation on eth_mac_config_t mac_config = ETH_MAC_DEFAULT_CONFIG(); // apply default common MAC configuration eth_esp32_emac_config_t esp32_emac_config = ETH_ESP32_EMAC_DEFAULT_CONFIG(); // apply default vendor-specific MAC configuration esp32_emac_config.smi_gpio.mdc_num = CONFIG_EXAMPLE_ETH_MDC_GPIO; // alter the GPIO used for MDC signal - esp32_emac_config.smi_gpio.mdio_num = CONFIG_EXAMPLE_ETH_MDIO_GPIO; // alter the GPIO used for MDIO signa + esp32_emac_config.smi_gpio.mdio_num = CONFIG_EXAMPLE_ETH_MDIO_GPIO; // alter the GPIO used for MDIO signal esp_eth_mac_t *mac = esp_eth_mac_new_esp32(&esp32_emac_config, &mac_config); // create MAC instance eth_phy_config_t phy_config = ETH_PHY_DEFAULT_CONFIG(); // apply default PHY configuration diff --git a/docs/zh_CN/api-reference/network/esp_eth.rst b/docs/zh_CN/api-reference/network/esp_eth.rst index d4acdfb6d133..96ffa63b23cb 100644 --- a/docs/zh_CN/api-reference/network/esp_eth.rst +++ b/docs/zh_CN/api-reference/network/esp_eth.rst @@ -269,6 +269,10 @@ PHY 的相关配置可以在 :cpp:class:`eth_phy_config_t` 中找到,具体包 * :cpp:member:`eth_phy_config_t::reset_gpio_num`:如果开发板同时将 PHY 复位管脚连接至了任意 GPIO 管脚,请使用该字段进行配置。否则,配置为 ``-1``。 + * :cpp:member:`eth_phy_config_t::hw_reset_assert_time_us`:PHY 复位引脚被置为有效状态的时间(以微秒为单位)。将该值配置为 ``0``,即可使用芯片默认的复位时长。 + + * :cpp:member:`eth_phy_config_t::post_hw_reset_delay_ms`:PHY 硬件复位完成后的等待时间(以毫秒为单位)。将该值配置为 ``0``,即可使用芯片默认的等待时长,配置为 ``-1``,表示执行 PHY 硬件复位后不等待。 + ESP-IDF 在宏 :c:macro:`ETH_MAC_DEFAULT_CONFIG` 和 :c:macro:`ETH_PHY_DEFAULT_CONFIG` 中为 MAC 和 PHY 提供了默认配置。 @@ -288,19 +292,23 @@ ESP-IDF 在宏 :c:macro:`ETH_MAC_DEFAULT_CONFIG` 和 :c:macro:`ETH_PHY_DEFAULT_C eth_mac_config_t mac_config = ETH_MAC_DEFAULT_CONFIG(); // 应用默认的通用 MAC 配置 eth_esp32_emac_config_t esp32_emac_config = ETH_ESP32_EMAC_DEFAULT_CONFIG(); // 应用默认的供应商特定 MAC 配置 - esp32_emac_config.smi_mdc_gpio_num = CONFIG_EXAMPLE_ETH_MDC_GPIO; // 更改用于 MDC 信号的 GPIO - esp32_emac_config.smi_mdio_gpio_num = CONFIG_EXAMPLE_ETH_MDIO_GPIO; // 更改用于 MDIO 信号的 GPIO + esp32_emac_config.smi_gpio.mdc_num = CONFIG_EXAMPLE_ETH_MDC_GPIO; // 更改用于 MDC 信号的 GPIO + esp32_emac_config.smi_gpio.mdio_num = CONFIG_EXAMPLE_ETH_MDIO_GPIO; // 更改用于 MDIO 信号的 GPIO esp_eth_mac_t *mac = esp_eth_mac_new_esp32(&esp32_emac_config, &mac_config); // 创建 MAC 实例 eth_phy_config_t phy_config = ETH_PHY_DEFAULT_CONFIG(); // 应用默认的 PHY 配置 phy_config.phy_addr = CONFIG_EXAMPLE_ETH_PHY_ADDR; // 根据开发板设计更改 PHY 地址 phy_config.reset_gpio_num = CONFIG_EXAMPLE_ETH_PHY_RST_GPIO; // 更改用于 PHY 复位的 GPIO - esp_eth_phy_t *phy = esp_eth_phy_new_ip101(&phy_config); // 创建 PHY 实例 - // ESP-IDF 为数种以太网 PHY 芯片驱动提供官方支持 + esp_eth_phy_t *phy = esp_eth_phy_new_generic(&phy_config); // 创建通用 PHY 实例 + // ESP-IDF 为数种特定以太网 PHY 芯片驱动提供官方支持 + // esp_eth_phy_t *phy = esp_eth_phy_new_ip101(&phy_config); // esp_eth_phy_t *phy = esp_eth_phy_new_rtl8201(&phy_config); // esp_eth_phy_t *phy = esp_eth_phy_new_lan8720(&phy_config); // esp_eth_phy_t *phy = esp_eth_phy_new_dp83848(&phy_config); + .. note:: + 使用 :cpp:func:`esp_eth_phy_new_generic` 创建新的 PHY 实例时,可以使用任何符合 IEEE 802.3 标准的以太网 PHY 芯片。然而,尽管 PHY 芯片符合 IEEE 802.3 标准,能提供基本功能,但某些特定的功能可能无法完全实现。例如,某些以太网 PHY 芯片可能需要配置特定的速度模式才能启用环回功能。遇到这种情况,需要配置 PHY 驱动程序以满足特定芯片需求,请使用 ESP-IDF 官方支持的 PHY 芯片驱动程序,或参阅 :ref:`Custom PHY Driver ` 小节以创建新的自定义驱动程序。 + 可选的运行时 MAC 时钟配置 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -557,10 +565,12 @@ ESP-IDF 在宏 :c:macro:`ETH_DEFAULT_CONFIG` 中为安装驱动程序提供了 进阶操作 --------------- +.. _custom-phy-driver: + 自定义 PHY 驱动程序 ^^^^^^^^^^^^^^^^^^^^^^^^^ -市面上有多家 PHY 芯片制造商提供各种类型的芯片。ESP-IDF 现已支持数种 PHY 芯片,但是由于价格、功能、库存等原因,有时用户还是无法找到一款能满足其实际需求的芯片。 +市面上有多家 PHY 芯片制造商提供各种类型的芯片。ESP-IDF 现已支持 ``通用 PHY`` 和数种特定的 PHY 芯片,但是由于价格、功能、库存等原因,有时用户还是无法找到一款能满足其实际需求的芯片。 好在 IEEE 802.3 在其 22.2.4 管理功能部分对 EMAC 和 PHY 之间的管理接口进行了标准化。该部分定义了所谓的 ”MII 管理接口”规范,用于控制 PHY 和收集 PHY 的状态,还定义了一组管理寄存器来控制芯片行为、链接属性、自动协商配置等。在 ESP-IDF 中,这项基本的管理功能是由 :component_file:`esp_eth/src/phy/esp_eth_phy_802_3.c` 实现的,这也大大降低了创建新的自定义 PHY 芯片驱动的难度。 From 03d76006b853b3711c07d757b841296402c9b2eb Mon Sep 17 00:00:00 2001 From: Sudeep Mohanty Date: Fri, 11 Oct 2024 11:49:50 +0200 Subject: [PATCH 153/365] fix(freertos): Fixed SMP race condition in stream_buffers.c This commit fixes a race condition in dual-core SMP mode where in the xStreamBufferReceive() makes the xTaskWaitingToReceive NULL but it may have already been evaluated to not be NULL by xStreamBufferSend() running on another core and eventually leading to a crash in tasks.c. --- .../freertos/FreeRTOS-Kernel/idf_changes.md | 2 ++ .../freertos/FreeRTOS-Kernel/stream_buffer.c | 18 +++++++++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/components/freertos/FreeRTOS-Kernel/idf_changes.md b/components/freertos/FreeRTOS-Kernel/idf_changes.md index a3ef8454601c..83bee6843322 100644 --- a/components/freertos/FreeRTOS-Kernel/idf_changes.md +++ b/components/freertos/FreeRTOS-Kernel/idf_changes.md @@ -123,6 +123,8 @@ The following functions were modified to accommodate SMP behavior: - In SMP, the function now disables interrupts to ensure that the calling task does not switch cores while checking its own copy of `uxSchedulerSuspended`. - `prvAddCurrentTaskToDelayedList()` - Added extra check to see if current blocking task has already been deleted by the other core. +- `xStreamBufferReceive()` + - Added a critical section for setting `xTaskWaitingToReceive` to `NULL` so that the write is SMP safe. ### Critical Section Changes diff --git a/components/freertos/FreeRTOS-Kernel/stream_buffer.c b/components/freertos/FreeRTOS-Kernel/stream_buffer.c index 50c2fb13caeb..988eb3f5f7f9 100644 --- a/components/freertos/FreeRTOS-Kernel/stream_buffer.c +++ b/components/freertos/FreeRTOS-Kernel/stream_buffer.c @@ -6,7 +6,7 @@ * * SPDX-License-Identifier: MIT * - * SPDX-FileContributor: 2023 Espressif Systems (Shanghai) CO LTD + * SPDX-FileContributor: 2023-2024 Espressif Systems (Shanghai) CO LTD * * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in @@ -977,7 +977,19 @@ size_t xStreamBufferReceive( StreamBufferHandle_t xStreamBuffer, /* Wait for data to be available. */ traceBLOCKING_ON_STREAM_BUFFER_RECEIVE( xStreamBuffer ); ( void ) xTaskNotifyWait( ( uint32_t ) 0, ( uint32_t ) 0, NULL, xTicksToWait ); - pxStreamBuffer->xTaskWaitingToReceive = NULL; + + /* In SMP mode, the task may have been woken and scheduled on + * another core. Hence, we must clear the xTaskWaitingToReceive + * handle in a critical section. */ + #if ( configNUMBER_OF_CORES > 1 ) + taskENTER_CRITICAL( &( pxStreamBuffer->xStreamBufferLock ) ); + #endif /* configNUMBER_OF_CORES > 1 */ + { + pxStreamBuffer->xTaskWaitingToReceive = NULL; + } + #if ( configNUMBER_OF_CORES > 1 ) + taskEXIT_CRITICAL( &( pxStreamBuffer->xStreamBufferLock ) ); + #endif /* configNUMBER_OF_CORES > 1 */ /* Recheck the data available after blocking. */ xBytesAvailable = prvBytesInBuffer( pxStreamBuffer ); @@ -1421,7 +1433,7 @@ static void prvInitialiseNewStreamBuffer( StreamBuffer_t * const pxStreamBuffer, * result in confusion as to what is actually being observed. */ const BaseType_t xWriteValue = 0x55; configASSERT( memset( pucBuffer, ( int ) xWriteValue, xBufferSizeBytes ) == pucBuffer ); - (void)xWriteValue; + ( void ) xWriteValue; } /*lint !e529 !e438 xWriteValue is only used if configASSERT() is defined. */ #endif From e2241f1fc115a3d9279e2a9e6a3a5caa23dde1af Mon Sep 17 00:00:00 2001 From: Jin Cheng Date: Fri, 27 Sep 2024 16:03:34 +0800 Subject: [PATCH 154/365] fix(bt/controller): Fixed some controller bugs on ESP32 - Fixed access NULL in SCO frame end Closes https://jira.espressif.com:8443/browse/IDFGH-10796 - Added LAP checking for Periodic Inquiry - Removed an inproper assertion in SCO module - Fixed wrong logic in key exchange when LMP transaction collision occurred - Fixed the using of wrong error code in the transaction collision of role switch --- components/bt/controller/lib_esp32 | 2 +- components/esp_rom/esp32/ld/esp32.rom.ld | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/components/bt/controller/lib_esp32 b/components/bt/controller/lib_esp32 index 22a4e62193eb..f5114d2a70e3 160000 --- a/components/bt/controller/lib_esp32 +++ b/components/bt/controller/lib_esp32 @@ -1 +1 @@ -Subproject commit 22a4e62193eb8bf9c747c9ec826fece57b40c042 +Subproject commit f5114d2a70e33a352adc5a3ad5d44c8537aa13da diff --git a/components/esp_rom/esp32/ld/esp32.rom.ld b/components/esp_rom/esp32/ld/esp32.rom.ld index b47c3140b894..a24ff27f0712 100644 --- a/components/esp_rom/esp32/ld/esp32.rom.ld +++ b/components/esp_rom/esp32/ld/esp32.rom.ld @@ -1368,6 +1368,7 @@ PROVIDE ( esp_rom_spiflash_config_clk = 0x40062bc8 ); PROVIDE ( g_rom_spiflash_chip = 0x3ffae270 ); PROVIDE ( SPI_write_enable = 0x40062320 ); PROVIDE ( hci_le_rd_rem_used_feats_cmd_handler = 0x400417b4 ); +PROVIDE ( hci_per_inq_mode_cmd_handler = 0x400519b0 ); PROVIDE ( llcp_length_req_handler = 0x40043808 ); PROVIDE ( llcp_unknown_rsp_handler = 0x40043ba8 ); PROVIDE ( llcp_channel_map_req_handler = 0x4004291c ); From fa8d73861b201a74b032085bfa7f0023a28226e8 Mon Sep 17 00:00:00 2001 From: laokaiyao Date: Fri, 6 Sep 2024 16:47:13 +0800 Subject: [PATCH 155/365] refactor(soc): sort esp32c2 soc headers --- .../soc/esp32c2/include/soc/dport_access.h | 3 +- .../soc/esp32c2/include/soc/interrupt_reg.h | 2 +- components/soc/esp32c2/include/soc/soc.h | 2 +- components/soc/esp32c2/register/soc/.gitkeep | 0 .../soc/apb_saradc_reg.h | 0 .../soc/apb_saradc_struct.h | 0 .../soc/assist_debug_reg.h | 22 +++++++-------- .../{include => register}/soc/ecc_mult_reg.h | 2 +- .../{include => register}/soc/efuse_reg.h | 4 +-- .../{include => register}/soc/efuse_struct.h | 2 +- .../{include => register}/soc/extmem_reg.h | 0 .../{include => register}/soc/gdma_reg.h | 0 .../{include => register}/soc/gdma_struct.h | 0 .../{include => register}/soc/gpio_reg.h | 0 .../{include => register}/soc/gpio_struct.h | 0 .../{include => register}/soc/i2c_reg.h | 0 .../{include => register}/soc/i2c_struct.h | 0 .../soc/interrupt_core0_reg.h | 0 .../{include => register}/soc/io_mux_reg.h | 2 +- .../{include => register}/soc/ledc_reg.h | 0 .../{include => register}/soc/ledc_struct.h | 0 .../soc/modem_clkrst_reg.h | 0 .../{include => register}/soc/reg_base.h | 2 +- .../{include => register}/soc/rtc_cntl_reg.h | 4 +-- .../soc/rtc_cntl_struct.h | 2 +- .../{include => register}/soc/sensitive_reg.h | 0 .../soc/sensitive_struct.h | 0 .../{include => register}/soc/spi_mem_reg.h | 28 +++++++++---------- .../soc/spi_mem_struct.h | 4 +-- .../{include => register}/soc/spi_reg.h | 16 +++++------ .../{include => register}/soc/spi_struct.h | 6 ++-- .../{include => register}/soc/syscon_reg.h | 2 +- .../{include => register}/soc/syscon_struct.h | 0 .../{include => register}/soc/system_reg.h | 0 .../{include => register}/soc/system_struct.h | 0 .../{include => register}/soc/systimer_reg.h | 0 .../soc/systimer_struct.h | 0 .../soc/timer_group_reg.h | 0 .../soc/timer_group_struct.h | 0 .../{include => register}/soc/uart_reg.h | 20 ++++++------- .../{include => register}/soc/uart_struct.h | 10 +++---- .../{include => register}/soc/xts_aes_reg.h | 2 +- 42 files changed, 67 insertions(+), 68 deletions(-) delete mode 100644 components/soc/esp32c2/register/soc/.gitkeep rename components/soc/esp32c2/{include => register}/soc/apb_saradc_reg.h (100%) rename components/soc/esp32c2/{include => register}/soc/apb_saradc_struct.h (100%) rename components/soc/esp32c2/{include => register}/soc/assist_debug_reg.h (95%) rename components/soc/esp32c2/{include => register}/soc/ecc_mult_reg.h (99%) rename components/soc/esp32c2/{include => register}/soc/efuse_reg.h (99%) rename components/soc/esp32c2/{include => register}/soc/efuse_struct.h (99%) rename components/soc/esp32c2/{include => register}/soc/extmem_reg.h (100%) rename components/soc/esp32c2/{include => register}/soc/gdma_reg.h (100%) rename components/soc/esp32c2/{include => register}/soc/gdma_struct.h (100%) rename components/soc/esp32c2/{include => register}/soc/gpio_reg.h (100%) rename components/soc/esp32c2/{include => register}/soc/gpio_struct.h (100%) rename components/soc/esp32c2/{include => register}/soc/i2c_reg.h (100%) rename components/soc/esp32c2/{include => register}/soc/i2c_struct.h (100%) rename components/soc/esp32c2/{include => register}/soc/interrupt_core0_reg.h (100%) rename components/soc/esp32c2/{include => register}/soc/io_mux_reg.h (99%) rename components/soc/esp32c2/{include => register}/soc/ledc_reg.h (100%) rename components/soc/esp32c2/{include => register}/soc/ledc_struct.h (100%) rename components/soc/esp32c2/{include => register}/soc/modem_clkrst_reg.h (100%) rename components/soc/esp32c2/{include => register}/soc/reg_base.h (97%) rename components/soc/esp32c2/{include => register}/soc/rtc_cntl_reg.h (99%) rename components/soc/esp32c2/{include => register}/soc/rtc_cntl_struct.h (99%) rename components/soc/esp32c2/{include => register}/soc/sensitive_reg.h (100%) rename components/soc/esp32c2/{include => register}/soc/sensitive_struct.h (100%) rename components/soc/esp32c2/{include => register}/soc/spi_mem_reg.h (99%) rename components/soc/esp32c2/{include => register}/soc/spi_mem_struct.h (99%) rename components/soc/esp32c2/{include => register}/soc/spi_reg.h (99%) rename components/soc/esp32c2/{include => register}/soc/spi_struct.h (99%) rename components/soc/esp32c2/{include => register}/soc/syscon_reg.h (99%) rename components/soc/esp32c2/{include => register}/soc/syscon_struct.h (100%) rename components/soc/esp32c2/{include => register}/soc/system_reg.h (100%) rename components/soc/esp32c2/{include => register}/soc/system_struct.h (100%) rename components/soc/esp32c2/{include => register}/soc/systimer_reg.h (100%) rename components/soc/esp32c2/{include => register}/soc/systimer_struct.h (100%) rename components/soc/esp32c2/{include => register}/soc/timer_group_reg.h (100%) rename components/soc/esp32c2/{include => register}/soc/timer_group_struct.h (100%) rename components/soc/esp32c2/{include => register}/soc/uart_reg.h (99%) rename components/soc/esp32c2/{include => register}/soc/uart_struct.h (98%) rename components/soc/esp32c2/{include => register}/soc/xts_aes_reg.h (98%) diff --git a/components/soc/esp32c2/include/soc/dport_access.h b/components/soc/esp32c2/include/soc/dport_access.h index 5a847ca48423..e499a791bdd6 100644 --- a/components/soc/esp32c2/include/soc/dport_access.h +++ b/components/soc/esp32c2/include/soc/dport_access.h @@ -8,8 +8,7 @@ #define _DPORT_ACCESS_H_ #include -#include "soc.h" -#include "uart_reg.h" +#include "soc/soc.h" #ifdef __cplusplus extern "C" { diff --git a/components/soc/esp32c2/include/soc/interrupt_reg.h b/components/soc/esp32c2/include/soc/interrupt_reg.h index 749a2e921671..d02c2d5c20ce 100644 --- a/components/soc/esp32c2/include/soc/interrupt_reg.h +++ b/components/soc/esp32c2/include/soc/interrupt_reg.h @@ -5,7 +5,7 @@ */ #pragma once -#include "interrupt_core0_reg.h" +#include "soc/interrupt_core0_reg.h" #define INTERRUPT_CURRENT_CORE_INT_THRESH_REG INTERRUPT_CORE0_CPU_INT_THRESH_REG #define INTERRUPT_PRIO_REG(n) (INTERRUPT_CORE0_CPU_INT_PRI_0_REG + (n)*4) diff --git a/components/soc/esp32c2/include/soc/soc.h b/components/soc/esp32c2/include/soc/soc.h index a57b15794aec..a24a2b197e67 100644 --- a/components/soc/esp32c2/include/soc/soc.h +++ b/components/soc/esp32c2/include/soc/soc.h @@ -12,7 +12,7 @@ #endif #include "esp_bit_defs.h" -#include "reg_base.h" +#include "soc/reg_base.h" #define PRO_CPU_NUM (0) diff --git a/components/soc/esp32c2/register/soc/.gitkeep b/components/soc/esp32c2/register/soc/.gitkeep deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/components/soc/esp32c2/include/soc/apb_saradc_reg.h b/components/soc/esp32c2/register/soc/apb_saradc_reg.h similarity index 100% rename from components/soc/esp32c2/include/soc/apb_saradc_reg.h rename to components/soc/esp32c2/register/soc/apb_saradc_reg.h diff --git a/components/soc/esp32c2/include/soc/apb_saradc_struct.h b/components/soc/esp32c2/register/soc/apb_saradc_struct.h similarity index 100% rename from components/soc/esp32c2/include/soc/apb_saradc_struct.h rename to components/soc/esp32c2/register/soc/apb_saradc_struct.h diff --git a/components/soc/esp32c2/include/soc/assist_debug_reg.h b/components/soc/esp32c2/register/soc/assist_debug_reg.h similarity index 95% rename from components/soc/esp32c2/include/soc/assist_debug_reg.h rename to components/soc/esp32c2/register/soc/assist_debug_reg.h index 2734f5e29848..bee2070557c6 100644 --- a/components/soc/esp32c2/include/soc/assist_debug_reg.h +++ b/components/soc/esp32c2/register/soc/assist_debug_reg.h @@ -15,14 +15,14 @@ extern "C" { */ #define ASSIST_DEBUG_CORE_0_INTR_ENA_REG (DR_REG_ASSIST_DEBUG_BASE + 0x0) /** ASSIST_DEBUG_CORE_0_SP_SPILL_MIN_ENA : R/W; bitpos: [0]; default: 0; - * enbale sp underlow monitor + * enable sp underflow monitor */ #define ASSIST_DEBUG_CORE_0_SP_SPILL_MIN_ENA (BIT(0)) #define ASSIST_DEBUG_CORE_0_SP_SPILL_MIN_ENA_M (ASSIST_DEBUG_CORE_0_SP_SPILL_MIN_ENA_V << ASSIST_DEBUG_CORE_0_SP_SPILL_MIN_ENA_S) #define ASSIST_DEBUG_CORE_0_SP_SPILL_MIN_ENA_V 0x00000001U #define ASSIST_DEBUG_CORE_0_SP_SPILL_MIN_ENA_S 0 /** ASSIST_DEBUG_CORE_0_SP_SPILL_MAX_ENA : R/W; bitpos: [1]; default: 0; - * enbale sp overflow monitor + * enable sp overflow monitor */ #define ASSIST_DEBUG_CORE_0_SP_SPILL_MAX_ENA (BIT(1)) #define ASSIST_DEBUG_CORE_0_SP_SPILL_MAX_ENA_M (ASSIST_DEBUG_CORE_0_SP_SPILL_MAX_ENA_V << ASSIST_DEBUG_CORE_0_SP_SPILL_MAX_ENA_S) @@ -34,14 +34,14 @@ extern "C" { */ #define ASSIST_DEBUG_CORE_0_INTR_RAW_REG (DR_REG_ASSIST_DEBUG_BASE + 0x4) /** ASSIST_DEBUG_CORE_0_SP_SPILL_MIN_RAW : RO; bitpos: [0]; default: 0; - * sp underlow monitor interrupt status register + * sp underflow monitor interrupt status register */ #define ASSIST_DEBUG_CORE_0_SP_SPILL_MIN_RAW (BIT(0)) #define ASSIST_DEBUG_CORE_0_SP_SPILL_MIN_RAW_M (ASSIST_DEBUG_CORE_0_SP_SPILL_MIN_RAW_V << ASSIST_DEBUG_CORE_0_SP_SPILL_MIN_RAW_S) #define ASSIST_DEBUG_CORE_0_SP_SPILL_MIN_RAW_V 0x00000001U #define ASSIST_DEBUG_CORE_0_SP_SPILL_MIN_RAW_S 0 /** ASSIST_DEBUG_CORE_0_SP_SPILL_MAX_RAW : RO; bitpos: [1]; default: 0; - * sp overflow monitor interupt status register + * sp overflow monitor interrupt status register */ #define ASSIST_DEBUG_CORE_0_SP_SPILL_MAX_RAW (BIT(1)) #define ASSIST_DEBUG_CORE_0_SP_SPILL_MAX_RAW_M (ASSIST_DEBUG_CORE_0_SP_SPILL_MAX_RAW_V << ASSIST_DEBUG_CORE_0_SP_SPILL_MAX_RAW_S) @@ -53,14 +53,14 @@ extern "C" { */ #define ASSIST_DEBUG_CORE_0_INTR_RLS_REG (DR_REG_ASSIST_DEBUG_BASE + 0x8) /** ASSIST_DEBUG_CORE_0_SP_SPILL_MIN_RLS : R/W; bitpos: [0]; default: 0; - * enbale sp underlow monitor interrupt + * enable sp underflow monitor interrupt */ #define ASSIST_DEBUG_CORE_0_SP_SPILL_MIN_RLS (BIT(0)) #define ASSIST_DEBUG_CORE_0_SP_SPILL_MIN_RLS_M (ASSIST_DEBUG_CORE_0_SP_SPILL_MIN_RLS_V << ASSIST_DEBUG_CORE_0_SP_SPILL_MIN_RLS_S) #define ASSIST_DEBUG_CORE_0_SP_SPILL_MIN_RLS_V 0x00000001U #define ASSIST_DEBUG_CORE_0_SP_SPILL_MIN_RLS_S 0 /** ASSIST_DEBUG_CORE_0_SP_SPILL_MAX_RLS : R/W; bitpos: [1]; default: 0; - * enbale sp overflow monitor interrupt + * enable sp overflow monitor interrupt */ #define ASSIST_DEBUG_CORE_0_SP_SPILL_MAX_RLS (BIT(1)) #define ASSIST_DEBUG_CORE_0_SP_SPILL_MAX_RLS_M (ASSIST_DEBUG_CORE_0_SP_SPILL_MAX_RLS_V << ASSIST_DEBUG_CORE_0_SP_SPILL_MAX_RLS_S) @@ -72,7 +72,7 @@ extern "C" { */ #define ASSIST_DEBUG_CORE_0_INTR_CLR_REG (DR_REG_ASSIST_DEBUG_BASE + 0xc) /** ASSIST_DEBUG_CORE_0_SP_SPILL_MIN_CLR : WT; bitpos: [0]; default: 0; - * clr sp underlow monitor interrupt + * clr sp underflow monitor interrupt */ #define ASSIST_DEBUG_CORE_0_SP_SPILL_MIN_CLR (BIT(0)) #define ASSIST_DEBUG_CORE_0_SP_SPILL_MIN_CLR_M (ASSIST_DEBUG_CORE_0_SP_SPILL_MIN_CLR_V << ASSIST_DEBUG_CORE_0_SP_SPILL_MIN_CLR_S) @@ -91,7 +91,7 @@ extern "C" { */ #define ASSIST_DEBUG_CORE_0_SP_MIN_REG (DR_REG_ASSIST_DEBUG_BASE + 0x10) /** ASSIST_DEBUG_CORE_0_SP_MIN : R/W; bitpos: [31:0]; default: 0; - * core0 sp region configuration regsiter + * core0 sp region configuration register */ #define ASSIST_DEBUG_CORE_0_SP_MIN 0xFFFFFFFFU #define ASSIST_DEBUG_CORE_0_SP_MIN_M (ASSIST_DEBUG_CORE_0_SP_MIN_V << ASSIST_DEBUG_CORE_0_SP_MIN_S) @@ -115,7 +115,7 @@ extern "C" { */ #define ASSIST_DEBUG_CORE_0_SP_PC_REG (DR_REG_ASSIST_DEBUG_BASE + 0x18) /** ASSIST_DEBUG_CORE_0_SP_PC : RO; bitpos: [31:0]; default: 0; - * This regsiter stores the PC when trigger stack monitor. + * This register stores the PC when trigger stack monitor. */ #define ASSIST_DEBUG_CORE_0_SP_PC 0xFFFFFFFFU #define ASSIST_DEBUG_CORE_0_SP_PC_M (ASSIST_DEBUG_CORE_0_SP_PC_V << ASSIST_DEBUG_CORE_0_SP_PC_S) @@ -142,7 +142,7 @@ extern "C" { #define ASSIST_DEBUG_CORE_0_RCD_PDEBUGEN_S 1 /** ASSIST_DEBUG_CORE_0_RCD_PDEBUGPC_REG register - * record status regsiter + * record status register */ #define ASSIST_DEBUG_CORE_0_RCD_PDEBUGPC_REG (DR_REG_ASSIST_DEBUG_BASE + 0x20) /** ASSIST_DEBUG_CORE_0_RCD_PDEBUGPC : RO; bitpos: [31:0]; default: 0; @@ -154,7 +154,7 @@ extern "C" { #define ASSIST_DEBUG_CORE_0_RCD_PDEBUGPC_S 0 /** ASSIST_DEBUG_CORE_0_RCD_PDEBUGSP_REG register - * record status regsiter + * record status register */ #define ASSIST_DEBUG_CORE_0_RCD_PDEBUGSP_REG (DR_REG_ASSIST_DEBUG_BASE + 0x24) /** ASSIST_DEBUG_CORE_0_RCD_PDEBUGSP : RO; bitpos: [31:0]; default: 0; diff --git a/components/soc/esp32c2/include/soc/ecc_mult_reg.h b/components/soc/esp32c2/register/soc/ecc_mult_reg.h similarity index 99% rename from components/soc/esp32c2/include/soc/ecc_mult_reg.h rename to components/soc/esp32c2/register/soc/ecc_mult_reg.h index 906a91b7af77..cb4bf5797b90 100644 --- a/components/soc/esp32c2/include/soc/ecc_mult_reg.h +++ b/components/soc/esp32c2/register/soc/ecc_mult_reg.h @@ -5,7 +5,7 @@ */ #pragma once -#include "soc.h" +#include "soc/soc.h" #ifdef __cplusplus extern "C" { diff --git a/components/soc/esp32c2/include/soc/efuse_reg.h b/components/soc/esp32c2/register/soc/efuse_reg.h similarity index 99% rename from components/soc/esp32c2/include/soc/efuse_reg.h rename to components/soc/esp32c2/register/soc/efuse_reg.h index 6f13f2a2bae8..8471fef930a2 100644 --- a/components/soc/esp32c2/include/soc/efuse_reg.h +++ b/components/soc/esp32c2/register/soc/efuse_reg.h @@ -7,7 +7,7 @@ #include #include "soc/soc.h" -#include "efuse_defs.h" +#include "soc/efuse_defs.h" #ifdef __cplusplus extern "C" { #endif @@ -896,7 +896,7 @@ extern "C" { #define EFUSE_CLK_EN_S 16 /** EFUSE_CONF_REG register - * eFuse operation mode configuraiton register + * eFuse operation mode configuration register */ #define EFUSE_CONF_REG (DR_REG_EFUSE_BASE + 0x8c) /** EFUSE_OP_CODE : R/W; bitpos: [15:0]; default: 0; diff --git a/components/soc/esp32c2/include/soc/efuse_struct.h b/components/soc/esp32c2/register/soc/efuse_struct.h similarity index 99% rename from components/soc/esp32c2/include/soc/efuse_struct.h rename to components/soc/esp32c2/register/soc/efuse_struct.h index c30ded3f9c92..fa1800be944a 100644 --- a/components/soc/esp32c2/include/soc/efuse_struct.h +++ b/components/soc/esp32c2/register/soc/efuse_struct.h @@ -745,7 +745,7 @@ typedef union { } efuse_clk_reg_t; /** Type of conf register - * eFuse operation mode configuraiton register + * eFuse operation mode configuration register */ typedef union { struct { diff --git a/components/soc/esp32c2/include/soc/extmem_reg.h b/components/soc/esp32c2/register/soc/extmem_reg.h similarity index 100% rename from components/soc/esp32c2/include/soc/extmem_reg.h rename to components/soc/esp32c2/register/soc/extmem_reg.h diff --git a/components/soc/esp32c2/include/soc/gdma_reg.h b/components/soc/esp32c2/register/soc/gdma_reg.h similarity index 100% rename from components/soc/esp32c2/include/soc/gdma_reg.h rename to components/soc/esp32c2/register/soc/gdma_reg.h diff --git a/components/soc/esp32c2/include/soc/gdma_struct.h b/components/soc/esp32c2/register/soc/gdma_struct.h similarity index 100% rename from components/soc/esp32c2/include/soc/gdma_struct.h rename to components/soc/esp32c2/register/soc/gdma_struct.h diff --git a/components/soc/esp32c2/include/soc/gpio_reg.h b/components/soc/esp32c2/register/soc/gpio_reg.h similarity index 100% rename from components/soc/esp32c2/include/soc/gpio_reg.h rename to components/soc/esp32c2/register/soc/gpio_reg.h diff --git a/components/soc/esp32c2/include/soc/gpio_struct.h b/components/soc/esp32c2/register/soc/gpio_struct.h similarity index 100% rename from components/soc/esp32c2/include/soc/gpio_struct.h rename to components/soc/esp32c2/register/soc/gpio_struct.h diff --git a/components/soc/esp32c2/include/soc/i2c_reg.h b/components/soc/esp32c2/register/soc/i2c_reg.h similarity index 100% rename from components/soc/esp32c2/include/soc/i2c_reg.h rename to components/soc/esp32c2/register/soc/i2c_reg.h diff --git a/components/soc/esp32c2/include/soc/i2c_struct.h b/components/soc/esp32c2/register/soc/i2c_struct.h similarity index 100% rename from components/soc/esp32c2/include/soc/i2c_struct.h rename to components/soc/esp32c2/register/soc/i2c_struct.h diff --git a/components/soc/esp32c2/include/soc/interrupt_core0_reg.h b/components/soc/esp32c2/register/soc/interrupt_core0_reg.h similarity index 100% rename from components/soc/esp32c2/include/soc/interrupt_core0_reg.h rename to components/soc/esp32c2/register/soc/interrupt_core0_reg.h diff --git a/components/soc/esp32c2/include/soc/io_mux_reg.h b/components/soc/esp32c2/register/soc/io_mux_reg.h similarity index 99% rename from components/soc/esp32c2/include/soc/io_mux_reg.h rename to components/soc/esp32c2/register/soc/io_mux_reg.h index b54614e4778d..7a59d046f7ff 100644 --- a/components/soc/esp32c2/include/soc/io_mux_reg.h +++ b/components/soc/esp32c2/register/soc/io_mux_reg.h @@ -7,7 +7,7 @@ #define _SOC_IO_MUX_REG_H_ #pragma once -#include "soc.h" +#include "soc/soc.h" /* The following are the bit fields for PERIPHS_IO_MUX_x_U registers */ /* Output enable in sleep mode */ diff --git a/components/soc/esp32c2/include/soc/ledc_reg.h b/components/soc/esp32c2/register/soc/ledc_reg.h similarity index 100% rename from components/soc/esp32c2/include/soc/ledc_reg.h rename to components/soc/esp32c2/register/soc/ledc_reg.h diff --git a/components/soc/esp32c2/include/soc/ledc_struct.h b/components/soc/esp32c2/register/soc/ledc_struct.h similarity index 100% rename from components/soc/esp32c2/include/soc/ledc_struct.h rename to components/soc/esp32c2/register/soc/ledc_struct.h diff --git a/components/soc/esp32c2/include/soc/modem_clkrst_reg.h b/components/soc/esp32c2/register/soc/modem_clkrst_reg.h similarity index 100% rename from components/soc/esp32c2/include/soc/modem_clkrst_reg.h rename to components/soc/esp32c2/register/soc/modem_clkrst_reg.h diff --git a/components/soc/esp32c2/include/soc/reg_base.h b/components/soc/esp32c2/register/soc/reg_base.h similarity index 97% rename from components/soc/esp32c2/include/soc/reg_base.h rename to components/soc/esp32c2/register/soc/reg_base.h index b410fbb3f3d2..34b56a9d95b8 100644 --- a/components/soc/esp32c2/include/soc/reg_base.h +++ b/components/soc/esp32c2/register/soc/reg_base.h @@ -43,5 +43,5 @@ #define DR_REG_I2C_MST_BASE 0x6004E800 #define DR_REG_XTS_AES_BASE 0x600CC000 -/* For backward compatability with the older register name */ +/* For backward compatibility with the older register name */ #define DR_REG_AES_XTS_BASE DR_REG_XTS_AES_BASE diff --git a/components/soc/esp32c2/include/soc/rtc_cntl_reg.h b/components/soc/esp32c2/register/soc/rtc_cntl_reg.h similarity index 99% rename from components/soc/esp32c2/include/soc/rtc_cntl_reg.h rename to components/soc/esp32c2/register/soc/rtc_cntl_reg.h index e5ce9bff061b..2a9a5659f7f6 100644 --- a/components/soc/esp32c2/include/soc/rtc_cntl_reg.h +++ b/components/soc/esp32c2/register/soc/rtc_cntl_reg.h @@ -9,7 +9,7 @@ #ifdef __cplusplus extern "C" { #endif -#include "soc.h" +#include "soc/soc.h" #define RTC_CNTL_TIME0_REG RTC_CNTL_TIME_LOW0_REG #define RTC_CNTL_TIME1_REG RTC_CNTL_TIME_HIGH0_REG @@ -1144,7 +1144,7 @@ RO CPU.*/ #define RTC_CNTL_SWD_AUTO_FEED_EN_V 0x1 #define RTC_CNTL_SWD_AUTO_FEED_EN_S 31 /* RTC_CNTL_SWD_DISABLE : ;bitpos:[30] ;default: 1'b0 ; */ -/*description: disabel SWD.*/ +/*description: disable SWD.*/ #define RTC_CNTL_SWD_DISABLE (BIT(30)) #define RTC_CNTL_SWD_DISABLE_M (BIT(30)) #define RTC_CNTL_SWD_DISABLE_V 0x1 diff --git a/components/soc/esp32c2/include/soc/rtc_cntl_struct.h b/components/soc/esp32c2/register/soc/rtc_cntl_struct.h similarity index 99% rename from components/soc/esp32c2/include/soc/rtc_cntl_struct.h rename to components/soc/esp32c2/register/soc/rtc_cntl_struct.h index 89a7820dc27a..5252040c3f0c 100644 --- a/components/soc/esp32c2/include/soc/rtc_cntl_struct.h +++ b/components/soc/esp32c2/register/soc/rtc_cntl_struct.h @@ -399,7 +399,7 @@ typedef volatile struct rtc_cntl_dev_s{ uint32_t swd_signal_width : 10; /*adjust signal width send to swd*/ uint32_t swd_rst_flag_clr : 1; /*reset swd reset flag*/ uint32_t swd_feed : 1; /*Sw feed swd*/ - uint32_t swd_disable : 1; /*disabel SWD*/ + uint32_t swd_disable : 1; /*disable SWD*/ uint32_t swd_auto_feed_en : 1; /*automatically feed swd when int comes*/ }; uint32_t val; diff --git a/components/soc/esp32c2/include/soc/sensitive_reg.h b/components/soc/esp32c2/register/soc/sensitive_reg.h similarity index 100% rename from components/soc/esp32c2/include/soc/sensitive_reg.h rename to components/soc/esp32c2/register/soc/sensitive_reg.h diff --git a/components/soc/esp32c2/include/soc/sensitive_struct.h b/components/soc/esp32c2/register/soc/sensitive_struct.h similarity index 100% rename from components/soc/esp32c2/include/soc/sensitive_struct.h rename to components/soc/esp32c2/register/soc/sensitive_struct.h diff --git a/components/soc/esp32c2/include/soc/spi_mem_reg.h b/components/soc/esp32c2/register/soc/spi_mem_reg.h similarity index 99% rename from components/soc/esp32c2/include/soc/spi_mem_reg.h rename to components/soc/esp32c2/register/soc/spi_mem_reg.h index bd22f94efb10..8eeb65b014f4 100644 --- a/components/soc/esp32c2/include/soc/spi_mem_reg.h +++ b/components/soc/esp32c2/register/soc/spi_mem_reg.h @@ -7,7 +7,7 @@ #define _SOC_SPI_MEM_REG_H_ -#include "soc.h" +#include "soc/soc.h" #ifdef __cplusplus extern "C" { #endif @@ -94,15 +94,15 @@ he bit will be cleared once the operation done.1: enable 0: disable..*/ #define SPI_MEM_FLASH_DP_S 21 /* SPI_MEM_FLASH_RES : R/W/SC ;bitpos:[20] ;default: 1'b0 ; */ /*description: This bit combined with reg_resandres bit releases Flash from the power-down stat -e or high performance mode and obtains the devices ID. The bit will be cleared o -nce the operation done.1: enable 0: disable..*/ +e or high performance mode and obtains the devices ID. The bit will be cleared once +the operation done.1: enable 0: disable..*/ #define SPI_MEM_FLASH_RES (BIT(20)) #define SPI_MEM_FLASH_RES_M (BIT(20)) #define SPI_MEM_FLASH_RES_V 0x1 #define SPI_MEM_FLASH_RES_S 20 /* SPI_MEM_FLASH_HPM : R/W/SC ;bitpos:[19] ;default: 1'b0 ; */ -/*description: Drive Flash into high performance mode. The bit will be cleared once the operat -ion done.1: enable 0: disable..*/ +/*description: Drive Flash into high performance mode. The bit will be cleared once the operation +done.1: enable 0: disable..*/ #define SPI_MEM_FLASH_HPM (BIT(19)) #define SPI_MEM_FLASH_HPM_M (BIT(19)) #define SPI_MEM_FLASH_HPM_V 0x1 @@ -123,8 +123,8 @@ peration done.1: enable 0: disable..*/ #define SPI_MEM_FLASH_PE_V 0x1 #define SPI_MEM_FLASH_PE_S 17 /* SPI_MEM_MSPI_ST : RO ;bitpos:[7:4] ;default: 4'b0 ; */ -/*description: The current status of SPI1 slave FSM: mspi_st. 0: idle state, 1: preparation sta -te, 2: send command state, 3: send address state, 4: wait state, 5: read data st +/*description: The current status of SPI1 slave FSM: mspi_st. 0: idle state, 1: preparation +state, 2: send command state, 3: send address state, 4: wait state, 5: read data st ate, 6:write data state, 7: done state, 8: read data end state..*/ #define SPI_MEM_MSPI_ST 0x0000000F #define SPI_MEM_MSPI_ST_M ((SPI_MEM_MSPI_ST_V)<<(SPI_MEM_MSPI_ST_S)) @@ -213,14 +213,14 @@ UT AND SPI_MEM_FREAD_DOUT. 1: enable 0: disable..*/ #define SPI_MEM_FASTRD_MODE_V 0x1 #define SPI_MEM_FASTRD_MODE_S 13 /* SPI_MEM_TX_CRC_EN : R/W ;bitpos:[11] ;default: 1'b0 ; */ -/*description: For SPI1, enable crc32 when writing encrypted data to flash. 1: enable 0:disabl +/*description: For SPI1, enable crc32 when writing encrypted data to flash. 1: enable 0:disable e.*/ #define SPI_MEM_TX_CRC_EN (BIT(11)) #define SPI_MEM_TX_CRC_EN_M (BIT(11)) #define SPI_MEM_TX_CRC_EN_V 0x1 #define SPI_MEM_TX_CRC_EN_S 11 /* SPI_MEM_FCS_CRC_EN : R/W ;bitpos:[10] ;default: 1'b0 ; */ -/*description: For SPI1, initialize crc32 module before writing encrypted data to flash. Activ +/*description: For SPI1, initialize crc32 module before writing encrypted data to flash. Active e low..*/ #define SPI_MEM_FCS_CRC_EN (BIT(10)) #define SPI_MEM_FCS_CRC_EN_M (BIT(10)) @@ -262,7 +262,7 @@ e low..*/ /* SPI_MEM_CLK_MODE : R/W ;bitpos:[1:0] ;default: 2'h0 ; */ /*description: SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delaye d one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inacti -ve 3: SPI clock is alwasy on..*/ +ve 3: SPI clock is always on..*/ #define SPI_MEM_CLK_MODE 0x00000003 #define SPI_MEM_CLK_MODE_M ((SPI_MEM_CLK_MODE_V)<<(SPI_MEM_CLK_MODE_S)) #define SPI_MEM_CLK_MODE_V 0x3 @@ -822,7 +822,7 @@ out, status_in[15:0] is valid when two bytes of data are read out), SUS/SUS1/SUS #define SPI_MEM_FLASH_PES_EN_S 5 /* SPI_MEM_PES_PER_EN : R/W ;bitpos:[4] ;default: 1'b0 ; */ /*description: Set this bit to enable PES end triggers PER transfer option. If this bit is 0, a -pplication should send PER after PES is done..*/ +application should send PER after PES is done..*/ #define SPI_MEM_PES_PER_EN (BIT(4)) #define SPI_MEM_PES_PER_EN_M (BIT(4)) #define SPI_MEM_PES_PER_EN_V 0x1 @@ -844,8 +844,8 @@ resume command is sent..*/ #define SPI_MEM_FLASH_PER_WAIT_EN_V 0x1 #define SPI_MEM_FLASH_PER_WAIT_EN_S 2 /* SPI_MEM_FLASH_PES : R/W/SC ;bitpos:[1] ;default: 1'b0 ; */ -/*description: program erase suspend bit, program erase suspend operation will be triggered whe -n the bit is set. The bit will be cleared once the operation done.1: enable 0: d +/*description: program erase suspend bit, program erase suspend operation will be triggered when +the bit is set. The bit will be cleared once the operation done.1: enable 0: d isable..*/ #define SPI_MEM_FLASH_PES (BIT(1)) #define SPI_MEM_FLASH_PES_M (BIT(1)) @@ -1148,7 +1148,7 @@ ut with the spi_clk high edge ,6: output with the spi_clk low edge.*/ #define SPI_MEM_INT_RAW_REG(i) (REG_SPI_MEM_BASE(i) + 0xC8) /* SPI_MEM_BROWN_OUT_INT_RAW : R/WTC/SS ;bitpos:[5] ;default: 1'b0 ; */ /*description: The raw bit for SPI_MEM_BROWN_OUT_INT interrupt. 1: Triggered condition is that -chip is loosing power and RTC module sends out brown out close flash request to +chip is losing power and RTC module sends out brown out close flash request to SPI1. After SPI1 sends out suspend command to flash, this interrupt is triggered and MSPI returns to idle state. 0: Others..*/ #define SPI_MEM_BROWN_OUT_INT_RAW (BIT(5)) diff --git a/components/soc/esp32c2/include/soc/spi_mem_struct.h b/components/soc/esp32c2/register/soc/spi_mem_struct.h similarity index 99% rename from components/soc/esp32c2/include/soc/spi_mem_struct.h rename to components/soc/esp32c2/register/soc/spi_mem_struct.h index c2cc1c5010af..230c292b4b29 100644 --- a/components/soc/esp32c2/include/soc/spi_mem_struct.h +++ b/components/soc/esp32c2/register/soc/spi_mem_struct.h @@ -64,7 +64,7 @@ typedef volatile struct spi_mem_dev_s{ } ctrl; union { struct { - uint32_t clk_mode : 2; /*SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delayed one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3: SPI clock is alwasy on.*/ + uint32_t clk_mode : 2; /*SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delayed one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3: SPI clock is always on.*/ uint32_t cs_hold_dly_res : 10; /*After RES/DP/HPM command is sent, SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 512) SPI_CLK cycles.*/ uint32_t reserved2 : 18; /*reserved*/ uint32_t rxfifo_rst : 1; /*SPI0 RX FIFO reset signal.*/ @@ -322,7 +322,7 @@ typedef volatile struct spi_mem_dev_s{ uint32_t wpe_end : 1; /*The raw bit for SPI_MEM_WPE_END_INT interrupt. 1: Triggered when WRSR/PP/SE/BE/CE is sent and flash is already idle. 0: Others.*/ uint32_t slv_st_end : 1; /*The raw bit for SPI_MEM_SLV_ST_END_INT interrupt. 1: Triggered when spi1_slv_st is changed from non idle state to idle state. It means that SPI_CS raises high. 0: Others*/ uint32_t mst_st_end : 1; /*The raw bit for SPI_MEM_MST_ST_END_INT interrupt. 1: Triggered when spi1_mst_st is changed from non idle state to idle state. 0: Others.*/ - uint32_t brown_out : 1; /*The raw bit for SPI_MEM_BROWN_OUT_INT interrupt. 1: Triggered condition is that chip is loosing power and RTC module sends out brown out close flash request to SPI1. After SPI1 sends out suspend command to flash, this interrupt is triggered and MSPI returns to idle state. 0: Others.*/ + uint32_t brown_out : 1; /*The raw bit for SPI_MEM_BROWN_OUT_INT interrupt. 1: Triggered condition is that chip is losing power and RTC module sends out brown out close flash request to SPI1. After SPI1 sends out suspend command to flash, this interrupt is triggered and MSPI returns to idle state. 0: Others.*/ uint32_t reserved6 : 26; /*reserved*/ }; uint32_t val; diff --git a/components/soc/esp32c2/include/soc/spi_reg.h b/components/soc/esp32c2/register/soc/spi_reg.h similarity index 99% rename from components/soc/esp32c2/include/soc/spi_reg.h rename to components/soc/esp32c2/register/soc/spi_reg.h index eaa92535e1ec..29293c94699a 100644 --- a/components/soc/esp32c2/include/soc/spi_reg.h +++ b/components/soc/esp32c2/register/soc/spi_reg.h @@ -159,7 +159,7 @@ e, the FSPI bus signals are output. Can be configured in CONF state..*/ #define SPI_CLOCK_REG(i) (REG_SPI_BASE(i) + 0xC) /* SPI_CLK_EQU_SYSCLK : R/W ;bitpos:[31] ;default: 1'b1 ; */ -/*description: In the master mode 1: spi_clk is eqaul to system 0: spi_clk is divided from syst +/*description: In the master mode 1: spi_clk is equal to system 0: spi_clk is divided from syst em clock. Can be configured in CONF state..*/ #define SPI_CLK_EQU_SYSCLK (BIT(31)) #define SPI_CLK_EQU_SYSCLK_M (BIT(31)) @@ -196,15 +196,15 @@ e 0. Can be configured in CONF state..*/ #define SPI_USER_REG(i) (REG_SPI_BASE(i) + 0x10) /* SPI_USR_COMMAND : R/W ;bitpos:[31] ;default: 1'b1 ; */ -/*description: This bit enable the command phase of an operation. Can be configured in CONF sta -te..*/ +/*description: This bit enable the command phase of an operation. Can be configured in CONF +state..*/ #define SPI_USR_COMMAND (BIT(31)) #define SPI_USR_COMMAND_M (BIT(31)) #define SPI_USR_COMMAND_V 0x1 #define SPI_USR_COMMAND_S 31 /* SPI_USR_ADDR : R/W ;bitpos:[30] ;default: 1'b0 ; */ -/*description: This bit enable the address phase of an operation. Can be configured in CONF sta -te..*/ +/*description: This bit enable the address phase of an operation. Can be configured in CONF +state..*/ #define SPI_USR_ADDR (BIT(30)) #define SPI_USR_ADDR_M (BIT(30)) #define SPI_USR_ADDR_V 0x1 @@ -392,7 +392,7 @@ n be configured in CONF state..*/ #define SPI_USR_COMMAND_BITLEN_S 28 /* SPI_MST_REMPTY_ERR_END_EN : R/W ;bitpos:[27] ;default: 1'b1 ; */ /*description: 1: SPI transfer is ended when SPI TX AFIFO read empty error is valid in GP-SPI m -aster FD/HD-mode. 0: SPI transfer is not ended when SPI TX AFIFO read empty erro +aster FD/HD-mode. 0: SPI transfer is not ended when SPI TX AFIFO read empty error r is valid in GP-SPI master FD/HD-mode..*/ #define SPI_MST_REMPTY_ERR_END_EN (BIT(27)) #define SPI_MST_REMPTY_ERR_END_EN_M (BIT(27)) @@ -1113,7 +1113,7 @@ AFIFO read-empty error when SPI outputs data in master mode. 0: Others..*/ #define SPI_SLV_CMD_ERR_INT_RAW_V 0x1 #define SPI_SLV_CMD_ERR_INT_RAW_S 16 /* SPI_SLV_BUF_ADDR_ERR_INT_RAW : R/WTC/SS ;bitpos:[15] ;default: 1'b0 ; */ -/*description: The raw bit for SPI_SLV_BUF_ADDR_ERR_INT interrupt. 1: The accessing data addres +/*description: The raw bit for SPI_SLV_BUF_ADDR_ERR_INT interrupt. 1: The accessing data address s of the current SPI slave mode CPU controlled FD, Wr_BUF or Rd_BUF transmission is bigger than 63. 0: Others..*/ #define SPI_SLV_BUF_ADDR_ERR_INT_RAW (BIT(15)) @@ -1684,7 +1684,7 @@ dge 0: output data at tsck posedge.*/ /* SPI_CLK_MODE : R/W ;bitpos:[1:0] ;default: 2'b0 ; */ /*description: SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delaye d one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inacti -ve 3: SPI clock is alwasy on. Can be configured in CONF state..*/ +ve 3: SPI clock is always on. Can be configured in CONF state..*/ #define SPI_CLK_MODE 0x00000003 #define SPI_CLK_MODE_M ((SPI_CLK_MODE_V)<<(SPI_CLK_MODE_S)) #define SPI_CLK_MODE_V 0x3 diff --git a/components/soc/esp32c2/include/soc/spi_struct.h b/components/soc/esp32c2/register/soc/spi_struct.h similarity index 99% rename from components/soc/esp32c2/include/soc/spi_struct.h rename to components/soc/esp32c2/register/soc/spi_struct.h index da359da84507..08920a09e6a8 100644 --- a/components/soc/esp32c2/include/soc/spi_struct.h +++ b/components/soc/esp32c2/register/soc/spi_struct.h @@ -10,7 +10,7 @@ #ifdef __cplusplus extern "C" { #endif -#include "soc.h" +#include "soc/soc.h" typedef volatile struct spi_dev_s{ union { @@ -58,7 +58,7 @@ typedef volatile struct spi_dev_s{ uint32_t clkcnt_n : 6; /*In the master mode it is the divider of spi_clk. So spi_clk frequency is system/(spi_clkdiv_pre+1)/(spi_clkcnt_N+1). Can be configured in CONF state.*/ uint32_t clkdiv_pre : 4; /*In the master mode it is pre-divider of spi_clk. Can be configured in CONF state.*/ uint32_t reserved22 : 9; /*reserved*/ - uint32_t clk_equ_sysclk : 1; /*In the master mode 1: spi_clk is eqaul to system 0: spi_clk is divided from system clock. Can be configured in CONF state.*/ + uint32_t clk_equ_sysclk : 1; /*In the master mode 1: spi_clk is equal to system 0: spi_clk is divided from system clock. Can be configured in CONF state.*/ }; uint32_t val; } clock; @@ -366,7 +366,7 @@ typedef volatile struct spi_dev_s{ uint32_t reserved_dc; union { struct { - uint32_t clk_mode : 2; /*SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delayed one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3: SPI clock is alwasy on. Can be configured in CONF state.*/ + uint32_t clk_mode : 2; /*SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delayed one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3: SPI clock is always on. Can be configured in CONF state.*/ uint32_t clk_mode_13 : 1; /*{CPOL, CPHA},1: support spi clk mode 1 and 3, first edge output data B[0]/B[7]. 0: support spi clk mode 0 and 2, first edge output data B[1]/B[6].*/ uint32_t rsck_data_out : 1; /*It saves half a cycle when tsck is the same as rsck. 1: output data at rsck posedge 0: output data at tsck posedge */ uint32_t reserved4 : 4; /*reserved*/ diff --git a/components/soc/esp32c2/include/soc/syscon_reg.h b/components/soc/esp32c2/register/soc/syscon_reg.h similarity index 99% rename from components/soc/esp32c2/include/soc/syscon_reg.h rename to components/soc/esp32c2/register/soc/syscon_reg.h index 9c4f8b5e610a..fbbf7706bcbb 100644 --- a/components/soc/esp32c2/include/soc/syscon_reg.h +++ b/components/soc/esp32c2/register/soc/syscon_reg.h @@ -10,7 +10,7 @@ #ifdef __cplusplus extern "C" { #endif -#include "soc.h" +#include "soc/soc.h" #define SYSCON_SYSCLK_CONF_REG (DR_REG_SYSCON_BASE + 0x0) /* SYSCON_RST_TICK_CNT : R/W ;bitpos:[12] ;default: 1'b0 ; */ diff --git a/components/soc/esp32c2/include/soc/syscon_struct.h b/components/soc/esp32c2/register/soc/syscon_struct.h similarity index 100% rename from components/soc/esp32c2/include/soc/syscon_struct.h rename to components/soc/esp32c2/register/soc/syscon_struct.h diff --git a/components/soc/esp32c2/include/soc/system_reg.h b/components/soc/esp32c2/register/soc/system_reg.h similarity index 100% rename from components/soc/esp32c2/include/soc/system_reg.h rename to components/soc/esp32c2/register/soc/system_reg.h diff --git a/components/soc/esp32c2/include/soc/system_struct.h b/components/soc/esp32c2/register/soc/system_struct.h similarity index 100% rename from components/soc/esp32c2/include/soc/system_struct.h rename to components/soc/esp32c2/register/soc/system_struct.h diff --git a/components/soc/esp32c2/include/soc/systimer_reg.h b/components/soc/esp32c2/register/soc/systimer_reg.h similarity index 100% rename from components/soc/esp32c2/include/soc/systimer_reg.h rename to components/soc/esp32c2/register/soc/systimer_reg.h diff --git a/components/soc/esp32c2/include/soc/systimer_struct.h b/components/soc/esp32c2/register/soc/systimer_struct.h similarity index 100% rename from components/soc/esp32c2/include/soc/systimer_struct.h rename to components/soc/esp32c2/register/soc/systimer_struct.h diff --git a/components/soc/esp32c2/include/soc/timer_group_reg.h b/components/soc/esp32c2/register/soc/timer_group_reg.h similarity index 100% rename from components/soc/esp32c2/include/soc/timer_group_reg.h rename to components/soc/esp32c2/register/soc/timer_group_reg.h diff --git a/components/soc/esp32c2/include/soc/timer_group_struct.h b/components/soc/esp32c2/register/soc/timer_group_struct.h similarity index 100% rename from components/soc/esp32c2/include/soc/timer_group_struct.h rename to components/soc/esp32c2/register/soc/timer_group_struct.h diff --git a/components/soc/esp32c2/include/soc/uart_reg.h b/components/soc/esp32c2/register/soc/uart_reg.h similarity index 99% rename from components/soc/esp32c2/include/soc/uart_reg.h rename to components/soc/esp32c2/register/soc/uart_reg.h index 0f105fa0b2fb..70413882e779 100644 --- a/components/soc/esp32c2/include/soc/uart_reg.h +++ b/components/soc/esp32c2/register/soc/uart_reg.h @@ -10,7 +10,7 @@ #ifdef __cplusplus extern "C" { #endif -#include "soc.h" +#include "soc/soc.h" #define UART_FIFO_REG(i) (REG_UART_BASE(i) + 0x0) /* UART_RXFIFO_RD_BYTE : RO ;bitpos:[7:0] ;default: 8'b0 ; */ @@ -92,7 +92,7 @@ NULL characters, after all data in Tx-FIFO are sent..*/ #define UART_SW_XOFF_INT_RAW_V 0x1 #define UART_SW_XOFF_INT_RAW_S 10 /* UART_SW_XON_INT_RAW : R/WTC/SS ;bitpos:[9] ;default: 1'b0 ; */ -/*description: This interrupt raw bit turns to high level when receiver recevies Xon char when +/*description: This interrupt raw bit turns to high level when receiver receives Xon char when uart_sw_flow_con_en is set to 1..*/ #define UART_SW_XON_INT_RAW (BIT(9)) #define UART_SW_XON_INT_RAW_M (BIT(9)) @@ -205,7 +205,7 @@ t to 1..*/ #define UART_TX_DONE_INT_ST_V 0x1 #define UART_TX_DONE_INT_ST_S 14 /* UART_TX_BRK_IDLE_DONE_INT_ST : RO ;bitpos:[13] ;default: 1'b0 ; */ -/*description: This is the stauts bit for tx_brk_idle_done_int_raw when tx_brk_idle_done_int_en +/*description: This is the status bit for tx_brk_idle_done_int_raw when tx_brk_idle_done_int_en a is set to 1..*/ #define UART_TX_BRK_IDLE_DONE_INT_ST (BIT(13)) #define UART_TX_BRK_IDLE_DONE_INT_ST_M (BIT(13)) @@ -744,7 +744,7 @@ ansmitter's 11th bit to 0..*/ #define UART_IRDA_DPLX_V 0x1 #define UART_IRDA_DPLX_S 9 /* UART_TXD_BRK : R/W ;bitpos:[8] ;default: 1'b0 ; */ -/*description: Set this bit to enbale transmitter to send NULL when the process of sending dat +/*description: Set this bit to enable transmitter to send NULL when the process of sending dat a is done..*/ #define UART_TXD_BRK (BIT(8)) #define UART_TXD_BRK_M (BIT(8)) @@ -791,7 +791,7 @@ ware flow control..*/ #define UART_CONF1_REG(i) (REG_UART_BASE(i) + 0x24) /* UART_RX_TOUT_EN : R/W ;bitpos:[21] ;default: 1'b0 ; */ -/*description: This is the enble bit for uart receiver's timeout function..*/ +/*description: This is the enable bit for uart receiver's timeout function..*/ #define UART_RX_TOUT_EN (BIT(21)) #define UART_RX_TOUT_EN_M (BIT(21)) #define UART_RX_TOUT_EN_V 0x1 @@ -840,7 +840,7 @@ se. It is used in baud rate-detect process..*/ #define UART_HIGHPULSE_REG(i) (REG_UART_BASE(i) + 0x2C) /* UART_HIGHPULSE_MIN_CNT : RO ;bitpos:[11:0] ;default: 12'hfff ; */ -/*description: This register stores the value of the maxinum duration time for the high level +/*description: This register stores the value of the maximum duration time for the high level pulse. It is used in baud rate-detect process..*/ #define UART_HIGHPULSE_MIN_CNT 0x00000FFF #define UART_HIGHPULSE_MIN_CNT_M ((UART_HIGHPULSE_MIN_CNT_V)<<(UART_HIGHPULSE_MIN_CNT_S)) @@ -898,7 +898,7 @@ t process..*/ #define UART_SLEEP_CONF_REG(i) (REG_UART_BASE(i) + 0x38) /* UART_ACTIVE_THRESHOLD : R/W ;bitpos:[9:0] ;default: 10'hf0 ; */ /*description: The uart is activated from light sleeping mode when the input rxd edge changes m -ore times than this register value..*/ +or times than this register value..*/ #define UART_ACTIVE_THRESHOLD 0x000003FF #define UART_ACTIVE_THRESHOLD_M ((UART_ACTIVE_THRESHOLD_V)<<(UART_ACTIVE_THRESHOLD_S)) #define UART_ACTIVE_THRESHOLD_V 0x3FF @@ -951,8 +951,8 @@ of sending data is done. It is active when txd_brk is set to 1..*/ #define UART_TX_IDLE_NUM_V 0x3FF #define UART_TX_IDLE_NUM_S 10 /* UART_RX_IDLE_THRHD : R/W ;bitpos:[9:0] ;default: 10'h100 ; */ -/*description: It will produce frame end signal when receiver takes more time to receive one by -te data than this register value..*/ +/*description: It will produce frame end signal when receiver takes more time to receive one byte +data than this register value..*/ #define UART_RX_IDLE_THRHD 0x000003FF #define UART_RX_IDLE_THRHD_M ((UART_RX_IDLE_THRHD_V)<<(UART_RX_IDLE_THRHD_S)) #define UART_RX_IDLE_THRHD_V 0x3FF @@ -1066,7 +1066,7 @@ akes more time to receive one byte with rx_tout_en set to 1..*/ #define UART_RX_TOUT_THRHD_V 0x3FF #define UART_RX_TOUT_THRHD_S 16 /* UART_RX_FLOW_THRHD : R/W ;bitpos:[15:7] ;default: 9'h0 ; */ -/*description: This register is used to configure the maximum amount of data that can be receiv +/*description: This register is used to configure the maximum amount of data that can be receive ed when hardware flow control works..*/ #define UART_RX_FLOW_THRHD 0x000001FF #define UART_RX_FLOW_THRHD_M ((UART_RX_FLOW_THRHD_V)<<(UART_RX_FLOW_THRHD_S)) diff --git a/components/soc/esp32c2/include/soc/uart_struct.h b/components/soc/esp32c2/register/soc/uart_struct.h similarity index 98% rename from components/soc/esp32c2/include/soc/uart_struct.h rename to components/soc/esp32c2/register/soc/uart_struct.h index 64c4504e39de..8cc5bdbc8761 100644 --- a/components/soc/esp32c2/include/soc/uart_struct.h +++ b/components/soc/esp32c2/register/soc/uart_struct.h @@ -29,7 +29,7 @@ typedef volatile struct uart_dev_s { uint32_t cts_chg : 1; /*This interrupt raw bit turns to high level when receiver detects the edge change of CTSn signal.*/ uint32_t brk_det : 1; /*This interrupt raw bit turns to high level when receiver detects a 0 after the stop bit.*/ uint32_t rxfifo_tout : 1; /*This interrupt raw bit turns to high level when receiver takes more time than rx_tout_thrhd to receive a byte.*/ - uint32_t sw_xon : 1; /*This interrupt raw bit turns to high level when receiver recevies Xon char when uart_sw_flow_con_en is set to 1.*/ + uint32_t sw_xon : 1; /*This interrupt raw bit turns to high level when receiver receives Xon char when uart_sw_flow_con_en is set to 1.*/ uint32_t sw_xoff : 1; /*This interrupt raw bit turns to high level when receiver receives Xoff char when uart_sw_flow_con_en is set to 1.*/ uint32_t glitch_det : 1; /*This interrupt raw bit turns to high level when receiver detects a glitch in the middle of a start bit.*/ uint32_t tx_brk_done : 1; /*This interrupt raw bit turns to high level when transmitter completes sending NULL characters, after all data in Tx-FIFO are sent.*/ @@ -59,7 +59,7 @@ typedef volatile struct uart_dev_s { uint32_t sw_xoff : 1; /*This is the status bit for sw_xoff_int_raw when sw_xoff_int_ena is set to 1.*/ uint32_t glitch_det : 1; /*This is the status bit for glitch_det_int_raw when glitch_det_int_ena is set to 1.*/ uint32_t tx_brk_done : 1; /*This is the status bit for tx_brk_done_int_raw when tx_brk_done_int_ena is set to 1.*/ - uint32_t tx_brk_idle_done : 1; /*This is the stauts bit for tx_brk_idle_done_int_raw when tx_brk_idle_done_int_ena is set to 1.*/ + uint32_t tx_brk_idle_done : 1; /*This is the status bit for tx_brk_idle_done_int_raw when tx_brk_idle_done_int_ena is set to 1.*/ uint32_t tx_done : 1; /*This is the status bit for tx_done_int_raw when tx_done_int_ena is set to 1.*/ uint32_t rs485_parity_err : 1; /*This is the status bit for rs485_parity_err_int_raw when rs485_parity_int_ena is set to 1.*/ uint32_t rs485_frm_err : 1; /*This is the status bit for rs485_frm_err_int_raw when rs485_fm_err_int_ena is set to 1.*/ @@ -162,7 +162,7 @@ typedef volatile struct uart_dev_s { uint32_t stop_bit_num : 2; /*This register is used to set the length of stop bit.*/ uint32_t sw_rts : 1; /*This register is used to configure the software rts signal which is used in software flow control.*/ uint32_t sw_dtr : 1; /*This register is used to configure the software dtr signal which is used in software flow control.*/ - uint32_t txd_brk : 1; /*Set this bit to enbale transmitter to send NULL when the process of sending data is done.*/ + uint32_t txd_brk : 1; /*Set this bit to enable transmitter to send NULL when the process of sending data is done.*/ uint32_t irda_dplx : 1; /*Set this bit to enable IrDA loopback mode.*/ uint32_t irda_tx_en : 1; /*This is the start enable bit for IrDA transmitter.*/ uint32_t irda_wctl : 1; /*1'h1: The IrDA transmitter's 11th bit is the same as 10th bit. 1'h0: Set IrDA transmitter's 11th bit to 0.*/ @@ -194,7 +194,7 @@ typedef volatile struct uart_dev_s { uint32_t dis_rx_dat_ovf : 1; /*Disable UART Rx data overflow detect. */ uint32_t rx_tout_flow_dis : 1; /*Set this bit to stop accumulating idle_cnt when hardware flow control works.*/ uint32_t rx_flow_en : 1; /*This is the flow enable bit for UART receiver.*/ - uint32_t rx_tout_en : 1; /*This is the enble bit for uart receiver's timeout function.*/ + uint32_t rx_tout_en : 1; /*This is the enable bit for uart receiver's timeout function.*/ uint32_t reserved22 : 10; }; uint32_t val; @@ -208,7 +208,7 @@ typedef volatile struct uart_dev_s { } lowpulse; union { struct { - uint32_t min_cnt : 12; /*This register stores the value of the maxinum duration time for the high level pulse. It is used in baud rate-detect process.*/ + uint32_t min_cnt : 12; /*This register stores the value of the maximum duration time for the high level pulse. It is used in baud rate-detect process.*/ uint32_t reserved12 : 20; /*Reserved*/ }; uint32_t val; diff --git a/components/soc/esp32c2/include/soc/xts_aes_reg.h b/components/soc/esp32c2/register/soc/xts_aes_reg.h similarity index 98% rename from components/soc/esp32c2/include/soc/xts_aes_reg.h rename to components/soc/esp32c2/register/soc/xts_aes_reg.h index 9845d0b05829..6a6e64539c5a 100644 --- a/components/soc/esp32c2/include/soc/xts_aes_reg.h +++ b/components/soc/esp32c2/register/soc/xts_aes_reg.h @@ -119,7 +119,7 @@ extern "C" { #define XTS_AES_DATE_V 0x3FFFFFFFU #define XTS_AES_DATE_S 0 -/* For backward compatability with the older register names */ +/* For backward compatibility with the older register names */ #define AES_XTS_PLAIN_BASE XTS_AES_PLAIN_MEM #define AES_XTS_SIZE_REG XTS_AES_LINESIZE_REG #define AES_XTS_DESTINATION_REG XTS_AES_DESTINATION_REG From 02a88eed4ecc19d91031e38901eb03de4ab681a3 Mon Sep 17 00:00:00 2001 From: xuxiao Date: Thu, 26 Sep 2024 15:21:58 +0800 Subject: [PATCH 156/365] fix(wifi): add bss color support for softap --- components/esp_rom/esp32c5/ld/esp32c5.rom.net80211.ld | 2 +- components/esp_rom/esp32c5/ld/esp32c5.rom.pp.ld | 4 ++-- .../esp_rom/esp32c61/ld/esp32c61.rom.net80211.ld | 2 +- components/esp_rom/esp32c61/ld/esp32c61.rom.pp.ld | 4 ++-- components/esp_wifi/include/esp_wifi_he.h | 10 +++++++--- components/esp_wifi/lib | 2 +- 6 files changed, 14 insertions(+), 10 deletions(-) diff --git a/components/esp_rom/esp32c5/ld/esp32c5.rom.net80211.ld b/components/esp_rom/esp32c5/ld/esp32c5.rom.net80211.ld index bd55f3bb3cb7..1d87aafcb388 100644 --- a/components/esp_rom/esp32c5/ld/esp32c5.rom.net80211.ld +++ b/components/esp_rom/esp32c5/ld/esp32c5.rom.net80211.ld @@ -60,7 +60,7 @@ ieee80211_find_ext_elem = 0x40000bb0; ieee80211_find_ie = 0x40000bb4; ieee80211_find_ext_ie = 0x40000bb8; ieee80211_merge_mbssid_profile = 0x40000bbc; -ieee80211_encap_esfbuf_htc = 0x40000bc0; +/*ieee80211_encap_esfbuf_htc = 0x40000bc0;*/ /*wifi_get_macaddr = 0x40000bc4;*/ /*wifi_rf_phy_disable = 0x40000bc8;*/ /*wifi_rf_phy_enable = 0x40000bcc;*/ diff --git a/components/esp_rom/esp32c5/ld/esp32c5.rom.pp.ld b/components/esp_rom/esp32c5/ld/esp32c5.rom.pp.ld index 605063d1c689..7515b90cca30 100644 --- a/components/esp_rom/esp32c5/ld/esp32c5.rom.pp.ld +++ b/components/esp_rom/esp32c5/ld/esp32c5.rom.pp.ld @@ -27,14 +27,14 @@ esf_buf_recycle = 0x40000bfc; GetAccess = 0x40000c00; hal_mac_is_low_rate_enabled = 0x40000c04; hal_mac_tx_get_blockack = 0x40000c08; -hal_mac_tx_set_ppdu = 0x40000c0c; +/*hal_mac_tx_set_ppdu = 0x40000c0c;*/ hal_mac_tx_clr_mplen = 0x40000c10; hal_mac_get_txq_state = 0x40000c14; hal_mac_clr_txq_state = 0x40000c18; hal_mac_get_txq_complete = 0x40000c1c; /*hal_mac_deinit_twt_tx = 0x40000c20;*/ hal_mac_is_dma_enable = 0x40000c24; -hal_he_get_bss_color = 0x40000c28; +/*hal_he_get_bss_color = 0x40000c28;*/ hal_he_set_ersu = 0x40000c2c; hal_he_get_mplen_addr_start = 0x40000c30; hal_he_get_mplen_addr_end = 0x40000c34; diff --git a/components/esp_rom/esp32c61/ld/esp32c61.rom.net80211.ld b/components/esp_rom/esp32c61/ld/esp32c61.rom.net80211.ld index 82727daf2414..230c560b3dfe 100644 --- a/components/esp_rom/esp32c61/ld/esp32c61.rom.net80211.ld +++ b/components/esp_rom/esp32c61/ld/esp32c61.rom.net80211.ld @@ -60,7 +60,7 @@ ieee80211_find_ext_elem = 0x40000b18; ieee80211_find_ie = 0x40000b1c; ieee80211_find_ext_ie = 0x40000b20; ieee80211_merge_mbssid_profile = 0x40000b24; -ieee80211_encap_esfbuf_htc = 0x40000b28; +/*ieee80211_encap_esfbuf_htc = 0x40000b28;*/ wifi_get_macaddr = 0x40000b2c; wifi_rf_phy_disable = 0x40000b30; wifi_rf_phy_enable = 0x40000b34; diff --git a/components/esp_rom/esp32c61/ld/esp32c61.rom.pp.ld b/components/esp_rom/esp32c61/ld/esp32c61.rom.pp.ld index 54f0a48c42b3..cf1349b9ab2f 100644 --- a/components/esp_rom/esp32c61/ld/esp32c61.rom.pp.ld +++ b/components/esp_rom/esp32c61/ld/esp32c61.rom.pp.ld @@ -27,14 +27,14 @@ esf_buf_recycle = 0x40000b64; GetAccess = 0x40000b68; hal_mac_is_low_rate_enabled = 0x40000b6c; hal_mac_tx_get_blockack = 0x40000b70; -hal_mac_tx_set_ppdu = 0x40000b74; +/*hal_mac_tx_set_ppdu = 0x40000b74;*/ hal_mac_tx_clr_mplen = 0x40000b78; hal_mac_get_txq_state = 0x40000b7c; hal_mac_clr_txq_state = 0x40000b80; hal_mac_get_txq_complete = 0x40000b84; hal_mac_deinit_twt_tx = 0x40000b88; hal_mac_is_dma_enable = 0x40000b8c; -hal_he_get_bss_color = 0x40000b90; +/*hal_he_get_bss_color = 0x40000b90;*/ hal_he_set_ersu = 0x40000b94; hal_he_get_mplen_addr_start = 0x40000b98; hal_he_get_mplen_addr_end = 0x40000b9c; diff --git a/components/esp_wifi/include/esp_wifi_he.h b/components/esp_wifi/include/esp_wifi_he.h index 99a3be564b27..619c7b3fa6c0 100644 --- a/components/esp_wifi/include/esp_wifi_he.h +++ b/components/esp_wifi/include/esp_wifi_he.h @@ -9,6 +9,7 @@ #include #include #include "esp_err.h" +#include "esp_wifi_types.h" #include "esp_wifi_he_types.h" #ifdef __cplusplus @@ -219,15 +220,18 @@ esp_err_t esp_wifi_sta_twt_config(wifi_twt_config_t *config); /** * @brief Enable bss color collision detection. * - * @param[in] enable If true, when the station detects a BSS color collision, it will report the BSS color collision event to the access point (AP). + * @attention Currently, only STA BSS color collision detection is supported. + * + * @param ifx interface to be configured + * @param enable If true, when the STA detects a BSS color collision, it will report the BSS color collision event to the access point (AP). * * @return * - ESP_OK: succeed + * - ESP_ERR_WIFI_IF: Invalid interface * - ESP_ERR_WIFI_NOT_INIT: WiFi is not initialized by esp_wifi_init * - ESP_ERR_WIFI_NOT_STARTED: WiFi is not started by esp_wifi_start - * - ESP_ERR_NOT_SUPPORTED: This API is not supported in AP mode yet */ -esp_err_t esp_wifi_sta_enable_bsscolor_collision_detection(bool enable); +esp_err_t esp_wifi_enable_bsscolor_collision_detection(wifi_interface_t ifx, bool enable); #ifdef __cplusplus } diff --git a/components/esp_wifi/lib b/components/esp_wifi/lib index 903d1e428f1b..a93530033aec 160000 --- a/components/esp_wifi/lib +++ b/components/esp_wifi/lib @@ -1 +1 @@ -Subproject commit 903d1e428f1b08806070be4dc7a39118a4f7e417 +Subproject commit a93530033aece29f1622c9ca9161eb4770aea909 From 6fd834eb90a40d8eaa6697ed1d32f8d22fbed215 Mon Sep 17 00:00:00 2001 From: "C.S.M" Date: Fri, 11 Oct 2024 16:16:49 +0800 Subject: [PATCH 157/365] fix(i2c): Fix there is no define in retention bitmap --- components/soc/esp32p4/include/soc/retention_periph_defs.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/components/soc/esp32p4/include/soc/retention_periph_defs.h b/components/soc/esp32p4/include/soc/retention_periph_defs.h index ab603ed24a85..d7ca81d8049d 100644 --- a/components/soc/esp32p4/include/soc/retention_periph_defs.h +++ b/components/soc/esp32p4/include/soc/retention_periph_defs.h @@ -81,6 +81,8 @@ typedef enum periph_retention_module_bitmap { SLEEP_RETENTION_MODULE_BM_I2S1 = BIT(SLEEP_RETENTION_MODULE_I2S1), SLEEP_RETENTION_MODULE_BM_I2S2 = BIT(SLEEP_RETENTION_MODULE_I2S2), SLEEP_RETENTION_MODULE_BM_ETM0 = BIT(SLEEP_RETENTION_MODULE_ETM0), + SLEEP_RETENTION_MODULE_BM_I2C0 = BIT(SLEEP_RETENTION_MODULE_I2C0), + SLEEP_RETENTION_MODULE_BM_I2C1 = BIT(SLEEP_RETENTION_MODULE_I2C1), SLEEP_RETENTION_MODULE_BM_ALL = (uint32_t)-1 } periph_retention_module_bitmap_t; @@ -106,6 +108,8 @@ typedef enum periph_retention_module_bitmap { | SLEEP_RETENTION_MODULE_BM_I2S1 \ | SLEEP_RETENTION_MODULE_BM_I2S2 \ | SLEEP_RETENTION_MODULE_BM_ETM0 \ + | SLEEP_RETENTION_MODULE_BM_I2C0 \ + | SLEEP_RETENTION_MODULE_BM_I2C1 \ ) #ifdef __cplusplus From d93a25d1fb2857af17e45e1ba175561b28db0599 Mon Sep 17 00:00:00 2001 From: morris Date: Thu, 10 Oct 2024 16:28:37 +0800 Subject: [PATCH 158/365] feat(etm): add driver support for esp32c61 --- .../esp32c61/ld/esp32c61.rom.systimer.ld | 5 +- components/esp_rom/patches/esp_rom_systimer.c | 4 +- .../main/test_systick_etm.c | 2 +- components/hal/esp32c5/include/hal/etm_ll.h | 1 - components/hal/esp32c6/include/hal/etm_ll.h | 1 - components/hal/esp32c61/include/hal/etm_ll.h | 117 +++++++++++++++ .../hal/esp32c61/include/hal/gpio_etm_ll.h | 136 ++++++++++++++++++ .../esp32c61/include/soc/Kconfig.soc_caps.in | 24 ++++ .../esp32c61/include/soc/gpio_ext_struct.h | 26 ++-- .../soc/esp32c61/include/soc/soc_caps.h | 12 +- .../soc/esp32c61/include/soc/soc_etm_struct.h | 106 +------------- .../soc/esp32c61/ld/esp32c61.peripherals.ld | 2 + docs/docs_not_updated/esp32c61.txt | 1 - .../gptimer_capture_hc_sr04/README.md | 4 +- .../pytest_gptimer_capture_example.py | 1 + 15 files changed, 317 insertions(+), 125 deletions(-) create mode 100644 components/hal/esp32c61/include/hal/etm_ll.h create mode 100644 components/hal/esp32c61/include/hal/gpio_etm_ll.h diff --git a/components/esp_rom/esp32c61/ld/esp32c61.rom.systimer.ld b/components/esp_rom/esp32c61/ld/esp32c61.rom.systimer.ld index 7be47b111051..9f260f5ecd4d 100644 --- a/components/esp_rom/esp32c61/ld/esp32c61.rom.systimer.ld +++ b/components/esp_rom/esp32c61/ld/esp32c61.rom.systimer.ld @@ -9,8 +9,9 @@ ***************************************/ /* Functions */ -systimer_hal_init = 0x400003d0; -systimer_hal_deinit = 0x400003d4; +/* The following ROM functions are commented out because they're patched in the esp_rom_systimer.c */ +/* systimer_hal_init = 0x400003d0; */ +/* systimer_hal_deinit = 0x400003d4; */ systimer_hal_set_tick_rate_ops = 0x400003d8; systimer_hal_get_counter_value = 0x400003dc; systimer_hal_get_time = 0x400003e0; diff --git a/components/esp_rom/patches/esp_rom_systimer.c b/components/esp_rom/patches/esp_rom_systimer.c index 0b8b20e180d6..7de32f09e6ae 100644 --- a/components/esp_rom/patches/esp_rom_systimer.c +++ b/components/esp_rom/patches/esp_rom_systimer.c @@ -64,7 +64,7 @@ void systimer_hal_counter_value_advance(systimer_hal_context_t *hal, uint32_t co } #endif // CONFIG_IDF_TARGET_ESP32C2 && (CONFIG_ESP32C2_REV_MIN_FULL < 200) -#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 || CONFIG_IDF_TARGET_ESP32C5 +#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 || CONFIG_IDF_TARGET_ESP32C5 || CONFIG_IDF_TARGET_ESP32C61 void systimer_hal_init(systimer_hal_context_t *hal) { hal->dev = &SYSTIMER; @@ -78,6 +78,6 @@ void systimer_hal_deinit(systimer_hal_context_t *hal) systimer_ll_enable_clock(hal->dev, false); hal->dev = NULL; } -#endif // CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 +#endif // CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4 || CONFIG_IDF_TARGET_ESP32C5 || CONFIG_IDF_TARGET_ESP32C61 #endif // CONFIG_HAL_SYSTIMER_USE_ROM_IMPL diff --git a/components/esp_system/test_apps/esp_system_unity_tests/main/test_systick_etm.c b/components/esp_system/test_apps/esp_system_unity_tests/main/test_systick_etm.c index d82cf13d625c..58793d18249c 100644 --- a/components/esp_system/test_apps/esp_system_unity_tests/main/test_systick_etm.c +++ b/components/esp_system/test_apps/esp_system_unity_tests/main/test_systick_etm.c @@ -51,7 +51,7 @@ TEST_CASE("rtos_systick_etm_event", "[etm]") TEST_ESP_OK(esp_etm_channel_enable(etm_channel_a)); - // should see a 500Hz square wave on the GPIO (if RTOS systick is set to 1000Hz) + // should see a 50Hz square wave on the GPIO (if RTOS systick is set to 100Hz) vTaskDelay(pdMS_TO_TICKS(1000)); // delete etm primitives diff --git a/components/hal/esp32c5/include/hal/etm_ll.h b/components/hal/esp32c5/include/hal/etm_ll.h index fa76af9f99b4..ebed4861b561 100644 --- a/components/hal/esp32c5/include/hal/etm_ll.h +++ b/components/hal/esp32c5/include/hal/etm_ll.h @@ -11,7 +11,6 @@ #include #include "hal/assert.h" #include "hal/misc.h" -#include "hal/lp_aon_ll.h" #include "soc/soc_etm_struct.h" #include "soc/pcr_struct.h" diff --git a/components/hal/esp32c6/include/hal/etm_ll.h b/components/hal/esp32c6/include/hal/etm_ll.h index 9d7079619d02..e77bfeec5f94 100644 --- a/components/hal/esp32c6/include/hal/etm_ll.h +++ b/components/hal/esp32c6/include/hal/etm_ll.h @@ -11,7 +11,6 @@ #include #include "hal/assert.h" #include "hal/misc.h" -#include "hal/lp_aon_ll.h" #include "soc/soc_etm_struct.h" #include "soc/pcr_struct.h" diff --git a/components/hal/esp32c61/include/hal/etm_ll.h b/components/hal/esp32c61/include/hal/etm_ll.h new file mode 100644 index 000000000000..6708cd7f17ee --- /dev/null +++ b/components/hal/esp32c61/include/hal/etm_ll.h @@ -0,0 +1,117 @@ +/* + * SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +// Note that most of the register operations in this layer are non-atomic operations. + +#pragma once + +#include +#include "hal/assert.h" +#include "hal/misc.h" +#include "soc/soc_etm_struct.h" +#include "soc/pcr_struct.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Enable the clock for ETM register + * + * @param group_id Group ID + * @param enable true to enable, false to disable + */ +static inline void etm_ll_enable_bus_clock(int group_id, bool enable) +{ + (void)group_id; + PCR.etm_conf.etm_clk_en = enable; +} + +/** + * @brief Reset the ETM register + * + * @param group_id Group ID + */ +static inline void etm_ll_reset_register(int group_id) +{ + (void)group_id; + PCR.etm_conf.etm_rst_en = 1; + PCR.etm_conf.etm_rst_en = 0; +} + +/** + * @brief Enable ETM channel + * + * @param hw ETM register base address + * @param chan Channel ID + */ +static inline void etm_ll_enable_channel(soc_etm_dev_t *hw, uint32_t chan) +{ + if (chan < 32) { + hw->ch_ena_ad0_set.val = 1 << chan; + } else { + hw->ch_ena_ad1_set.val = 1 << (chan - 32); + } +} + +/** + * @brief Disable ETM channel + * + * @param hw ETM register base address + * @param chan Channel ID + */ +static inline void etm_ll_disable_channel(soc_etm_dev_t *hw, uint32_t chan) +{ + if (chan < 32) { + hw->ch_ena_ad0_clr.val = 1 << chan; + } else { + hw->ch_ena_ad1_clr.val = 1 << (chan - 32); + } +} + +/** + * @brief Check whether the ETM channel is enabled or not + * + * @param hw ETM register base address + * @param chan Channel ID + * @return true if the channel is enabled, false otherwise + */ +static inline bool etm_ll_is_channel_enabled(soc_etm_dev_t *hw, uint32_t chan) +{ + if (chan < 32) { + return hw->ch_ena_ad0.val & (1 << chan); + } else { + return hw->ch_ena_ad1.val & (1 << (chan - 32)); + } +} + +/** + * @brief Set the input event for the ETM channel + * + * @param hw ETM register base address + * @param chan Channel ID + * @param event Event ID + */ +static inline void etm_ll_channel_set_event(soc_etm_dev_t *hw, uint32_t chan, uint32_t event) +{ + HAL_FORCE_MODIFY_U32_REG_FIELD(hw->channel[chan].eid, chn_evt_id, event); +} + +/** + * @brief Set the output task for the ETM channel + * + * @param hw ETM register base address + * @param chan Channel ID + * @param task Task ID + */ +static inline void etm_ll_channel_set_task(soc_etm_dev_t *hw, uint32_t chan, uint32_t task) +{ + HAL_FORCE_MODIFY_U32_REG_FIELD(hw->channel[chan].tid, chn_task_id, task); +} + +#ifdef __cplusplus +} +#endif diff --git a/components/hal/esp32c61/include/hal/gpio_etm_ll.h b/components/hal/esp32c61/include/hal/gpio_etm_ll.h new file mode 100644 index 000000000000..52a06e7fc3e6 --- /dev/null +++ b/components/hal/esp32c61/include/hal/gpio_etm_ll.h @@ -0,0 +1,136 @@ +/* + * SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +// Note that most of the register operations in this layer are non-atomic operations. + +#pragma once + +#include +#include "hal/assert.h" +#include "hal/misc.h" +#include "soc/gpio_ext_struct.h" +#include "soc/soc_etm_source.h" + +#define GPIO_LL_ETM_EVENT_ID_POS_EDGE(ch) (GPIO_EVT_CH0_RISE_EDGE + (ch)) +#define GPIO_LL_ETM_EVENT_ID_NEG_EDGE(ch) (GPIO_EVT_CH0_FALL_EDGE + (ch)) +#define GPIO_LL_ETM_EVENT_ID_ANY_EDGE(ch) (GPIO_EVT_CH0_ANY_EDGE + (ch)) + +#define GPIO_LL_ETM_TASK_ID_SET(ch) (GPIO_TASK_CH0_SET + (ch)) +#define GPIO_LL_ETM_TASK_ID_CLR(ch) (GPIO_TASK_CH0_CLEAR + (ch)) +#define GPIO_LL_ETM_TASK_ID_TOG(ch) (GPIO_TASK_CH0_TOGGLE + (ch)) + +#define GPIO_LL_ETM_EVENT_CHANNELS_PER_GROUP 8 +#define GPIO_LL_ETM_TASK_CHANNELS_PER_GROUP 8 + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Set which GPIO to be bound to the event channel + * + * @note Different channels can be bound to one GPIO + * + * @param dev Register base address + * @param chan GPIO ETM Event channel number + * @param gpio_num GPIO number + */ +static inline void gpio_ll_etm_event_channel_set_gpio(gpio_etm_dev_t *dev, uint32_t chan, uint32_t gpio_num) +{ + dev->etm_event_chn_cfg[chan].etm_chn_event_sel = gpio_num; +} + +/** + * @brief Whether to enable the event channel + * + * @param dev Register base address + * @param chan GPIO ETM Event channel number + * @param enable True to enable, false to disable + */ +static inline void gpio_ll_etm_enable_event_channel(gpio_etm_dev_t *dev, uint32_t chan, bool enable) +{ + dev->etm_event_chn_cfg[chan].etm_chn_event_en = enable; +} + +/** + * @brief Get which GPIO is bound to the event channel + * + * @param dev Register base address + * @param chan GPIO ETM Event channel number + * @return GPIO number + */ +static inline uint32_t gpio_ll_etm_event_channel_get_gpio(gpio_etm_dev_t *dev, uint32_t chan) +{ + return dev->etm_event_chn_cfg[chan].etm_chn_event_sel; +} + +/** + * @brief Set which GPIO to be bound to the task channel + * + * @note One channel can be bound to multiple different GPIOs + * + * @param dev Register base address + * @param chan GPIO ETM Task channel number + * @param gpio_num GPIO number + */ +static inline void gpio_ll_etm_gpio_set_task_channel(gpio_etm_dev_t *dev, uint32_t gpio_num, uint32_t chan) +{ + int g_p = gpio_num / 5; + int g_idx = gpio_num % 5; + uint32_t reg_val = dev->etm_task_pn_cfg[g_p].val; + reg_val &= ~(0x07 << (g_idx * 6)); + reg_val |= ((chan & 0x07) << (g_idx * 6)); + dev->etm_task_pn_cfg[g_p].val = reg_val; +} + +/** + * @brief Whether to enable the GPIO to be managed by the task channel + * + * @param dev Register base address + * @param gpio_num GPIO number + * @param enable True to enable, false to disable + */ +static inline void gpio_ll_etm_enable_task_gpio(gpio_etm_dev_t *dev, uint32_t gpio_num, bool enable) +{ + int g_p = gpio_num / 5; + int g_idx = gpio_num % 5; + uint32_t reg_val = dev->etm_task_pn_cfg[g_p].val; + reg_val &= ~(0x01 << (g_idx * 6 + 5)); + reg_val |= ((enable & 0x01) << (g_idx * 6 + 5)); + dev->etm_task_pn_cfg[g_p].val = reg_val; +} + +/** + * @brief Check whether a GPIO has been enabled and managed by a task channel + * + * @param dev Register base address + * @param gpio_num GPIO number + * @return True if enabled, false otherwise + */ +static inline bool gpio_ll_etm_is_task_gpio_enabled(gpio_etm_dev_t *dev, uint32_t gpio_num) +{ + int g_p = gpio_num / 5; + int g_idx = gpio_num % 5; + return dev->etm_task_pn_cfg[g_p].val & (0x01 << (g_idx * 6 + 5)); +} + +/** + * @brief Get the channel number that the GPIO is bound to + * + * @param dev Register base address + * @param gpio_num GPIO number + * @return GPIO ETM Task channel number + */ +static inline uint32_t gpio_ll_etm_gpio_get_task_channel(gpio_etm_dev_t *dev, uint32_t gpio_num) +{ + int g_p = gpio_num / 5; + int g_idx = gpio_num % 5; + return (dev->etm_task_pn_cfg[g_p].val >> (g_idx * 6)) & 0x07; +} + +#ifdef __cplusplus +} +#endif diff --git a/components/soc/esp32c61/include/soc/Kconfig.soc_caps.in b/components/soc/esp32c61/include/soc/Kconfig.soc_caps.in index 94aaaa03901f..73a93f10d4c6 100644 --- a/components/soc/esp32c61/include/soc/Kconfig.soc_caps.in +++ b/components/soc/esp32c61/include/soc/Kconfig.soc_caps.in @@ -131,6 +131,10 @@ config SOC_REG_I2C_SUPPORTED bool default y +config SOC_ETM_SUPPORTED + bool + default y + config SOC_PAU_SUPPORTED bool default y @@ -267,6 +271,10 @@ config SOC_GDMA_PAIRS_PER_GROUP_MAX int default 2 +config SOC_GDMA_SUPPORT_ETM + bool + default y + config SOC_GDMA_SUPPORT_SLEEP_RETENTION bool default y @@ -279,6 +287,10 @@ config SOC_ETM_CHANNELS_PER_GROUP int default 50 +config SOC_ETM_SUPPORT_SLEEP_RETENTION + bool + default y + config SOC_GPIO_PORT int default 1 @@ -295,6 +307,10 @@ config SOC_GPIO_SUPPORT_PIN_HYS_FILTER bool default y +config SOC_GPIO_SUPPORT_ETM + bool + default y + config SOC_GPIO_SUPPORT_RTC_INDEPENDENT bool default y @@ -655,6 +671,10 @@ config SOC_SYSTIMER_ALARM_MISS_COMPENSATE bool default y +config SOC_SYSTIMER_SUPPORT_ETM + bool + default y + config SOC_LP_TIMER_BIT_WIDTH_LO int default 32 @@ -691,6 +711,10 @@ config SOC_TIMER_SUPPORT_SLEEP_RETENTION bool default y +config SOC_TIMER_SUPPORT_ETM + bool + default y + config SOC_MWDT_SUPPORT_SLEEP_RETENTION bool default y diff --git a/components/soc/esp32c61/include/soc/gpio_ext_struct.h b/components/soc/esp32c61/include/soc/gpio_ext_struct.h index f02a5fec8a1d..1f7f58950e20 100644 --- a/components/soc/esp32c61/include/soc/gpio_ext_struct.h +++ b/components/soc/esp32c61/include/soc/gpio_ext_struct.h @@ -39,7 +39,7 @@ typedef union { */ uint32_t xpd_comp_0:1; /** mode_comp_0 : R/W; bitpos: [1]; default: 0; - * Configures the reference voltage for analog PAD voltage comparater.. \\ + * Configures the reference voltage for analog PAD voltage comparator.. \\ * 0: Reference voltage is the internal reference voltage, meanwhile GPIO8 PAD can be * used as a regular GPIO\\ * 1: Reference voltage is the voltage on the GPIO8 PAD\\ @@ -128,6 +128,15 @@ typedef union { uint32_t val; } gpio_ext_etm_event_chn_cfg_reg_t; +/** Type of etm_task_pn_cfg register + * GPIO selection register for ETM. + * This register is an abstraction of the following registers: + * gpio_ext_etm_task_p0_cfg_reg_t ~ gpio_ext_etm_task_p4_cfg_reg_t + */ +typedef union { + uint32_t val; +} gpio_ext_etm_task_pn_cfg_reg_t; + /** Type of etm_task_p0_cfg register * GPIO selection register 0 for ETM */ @@ -659,6 +668,11 @@ typedef union { uint32_t val; } gpio_ext_version_reg_t; +typedef struct gpio_etm_dev_t { + volatile gpio_ext_etm_event_chn_cfg_reg_t etm_event_chn_cfg[8]; + uint32_t reserved_138[8]; + volatile gpio_ext_etm_task_pn_cfg_reg_t etm_task_pn_cfg[5]; +} gpio_etm_dev_t; typedef struct { volatile gpio_ext_clock_gate_reg_t clock_gate; @@ -666,13 +680,7 @@ typedef struct { volatile gpio_ext_pad_comp_config_0_reg_t pad_comp_config_0; volatile gpio_ext_pad_comp_filter_0_reg_t pad_comp_filter_0; uint32_t reserved_060[46]; - volatile gpio_ext_etm_event_chn_cfg_reg_t etm_event_chn_cfg[8]; - uint32_t reserved_138[8]; - volatile gpio_ext_etm_task_p0_cfg_reg_t etm_task_p0_cfg; - volatile gpio_ext_etm_task_p1_cfg_reg_t etm_task_p1_cfg; - volatile gpio_ext_etm_task_p2_cfg_reg_t etm_task_p2_cfg; - volatile gpio_ext_etm_task_p3_cfg_reg_t etm_task_p3_cfg; - volatile gpio_ext_etm_task_p4_cfg_reg_t etm_task_p4_cfg; + volatile gpio_etm_dev_t etm; uint32_t reserved_16c[25]; volatile gpio_ext_int_raw_reg_t int_raw; volatile gpio_ext_int_st_reg_t int_st; @@ -683,6 +691,8 @@ typedef struct { volatile gpio_ext_version_reg_t version; } gpio_ext_dev_t; +extern gpio_etm_dev_t GPIO_ETM; +extern gpio_ext_dev_t GPIO_EXT; #ifndef __cplusplus _Static_assert(sizeof(gpio_ext_dev_t) == 0x200, "Invalid size of gpio_ext_dev_t structure"); diff --git a/components/soc/esp32c61/include/soc/soc_caps.h b/components/soc/esp32c61/include/soc/soc_caps.h index 5e70aafba195..3d0cb808671b 100644 --- a/components/soc/esp32c61/include/soc/soc_caps.h +++ b/components/soc/esp32c61/include/soc/soc_caps.h @@ -56,7 +56,7 @@ // \#define SOC_RNG_SUPPORTED 1 //TODO: [ESP32C61] IDF-9236 #define SOC_MODEM_CLOCK_SUPPORTED 1 #define SOC_REG_I2C_SUPPORTED 1 -// \#define SOC_ETM_SUPPORTED 0 +#define SOC_ETM_SUPPORTED 1 // \#define SOC_SDIO_SLAVE_SUPPORTED 0 #define SOC_PAU_SUPPORTED 1 #define SOC_LIGHT_SLEEP_SUPPORTED 1 @@ -148,13 +148,13 @@ #define SOC_AHB_GDMA_VERSION 2U #define SOC_GDMA_NUM_GROUPS_MAX 1U #define SOC_GDMA_PAIRS_PER_GROUP_MAX 2 -// \#define SOC_GDMA_SUPPORT_ETM 1 // Support ETM submodule TODO: IDF-9964 +#define SOC_GDMA_SUPPORT_ETM 1 // Support ETM submodule #define SOC_GDMA_SUPPORT_SLEEP_RETENTION 1 /*-------------------------- ETM CAPS --------------------------------------*/ #define SOC_ETM_GROUPS 1U // Number of ETM groups #define SOC_ETM_CHANNELS_PER_GROUP 50 // Number of ETM channels in the group -// #define SOC_ETM_SUPPORT_SLEEP_RETENTION 1 // Support sleep retention +#define SOC_ETM_SUPPORT_SLEEP_RETENTION 1 // Support sleep retention /*-------------------------- GPIO CAPS ---------------------------------------*/ // ESP32-C61 has 1 GPIO peripheral @@ -164,7 +164,7 @@ #define SOC_GPIO_SUPPORT_PIN_HYS_FILTER 1 // GPIO peripheral has the ETM extension -// \#define SOC_GPIO_SUPPORT_ETM 1 //TODO: [ESP32C61] IDF-9318 +#define SOC_GPIO_SUPPORT_ETM 1 // Target has the full LP IO subsystem // On ESP32-C61, Digital IOs have their own registers to control pullup/down capability, independent of LP registers. @@ -340,7 +340,7 @@ #define SOC_SYSTIMER_SUPPORT_RC_FAST 1 // Systimer can use RC_FAST clock source #define SOC_SYSTIMER_INT_LEVEL 1 // Systimer peripheral uses level interrupt #define SOC_SYSTIMER_ALARM_MISS_COMPENSATE 1 // Systimer peripheral can generate interrupt immediately if t(target) > t(current) -// #define SOC_SYSTIMER_SUPPORT_ETM 1 // Systimer comparator can generate ETM event +#define SOC_SYSTIMER_SUPPORT_ETM 1 // Systimer comparator can generate ETM event /*-------------------------- LP_TIMER CAPS ----------------------------------*/ #define SOC_LP_TIMER_BIT_WIDTH_LO 32 // Bit width of lp_timer low part @@ -354,7 +354,7 @@ #define SOC_TIMER_GROUP_SUPPORT_XTAL (1) #define SOC_TIMER_GROUP_SUPPORT_RC_FAST (1) #define SOC_TIMER_SUPPORT_SLEEP_RETENTION (1) -// #define SOC_TIMER_SUPPORT_ETM (1) +#define SOC_TIMER_SUPPORT_ETM (1) /*--------------------------- WATCHDOG CAPS ---------------------------------------*/ // #define SOC_MWDT_SUPPORT_XTAL (1) diff --git a/components/soc/esp32c61/include/soc/soc_etm_struct.h b/components/soc/esp32c61/include/soc/soc_etm_struct.h index 464ab7f33e11..2cb80d7c280c 100644 --- a/components/soc/esp32c61/include/soc/soc_etm_struct.h +++ b/components/soc/esp32c61/include/soc/soc_etm_struct.h @@ -3161,113 +3161,17 @@ typedef union { } soc_etm_date_reg_t; -typedef struct { +typedef struct soc_etm_dev_t { volatile soc_etm_ch_ena_ad0_reg_t ch_ena_ad0; volatile soc_etm_ch_ena_ad0_set_reg_t ch_ena_ad0_set; volatile soc_etm_ch_ena_ad0_clr_reg_t ch_ena_ad0_clr; volatile soc_etm_ch_ena_ad1_reg_t ch_ena_ad1; volatile soc_etm_ch_ena_ad1_set_reg_t ch_ena_ad1_set; volatile soc_etm_ch_ena_ad1_clr_reg_t ch_ena_ad1_clr; - volatile soc_etm_chn_evt_id_reg_t ch0_evt_id; - volatile soc_etm_chn_task_id_reg_t ch0_task_id; - volatile soc_etm_chn_evt_id_reg_t ch1_evt_id; - volatile soc_etm_chn_task_id_reg_t ch1_task_id; - volatile soc_etm_chn_evt_id_reg_t ch2_evt_id; - volatile soc_etm_chn_task_id_reg_t ch2_task_id; - volatile soc_etm_chn_evt_id_reg_t ch3_evt_id; - volatile soc_etm_chn_task_id_reg_t ch3_task_id; - volatile soc_etm_chn_evt_id_reg_t ch4_evt_id; - volatile soc_etm_chn_task_id_reg_t ch4_task_id; - volatile soc_etm_chn_evt_id_reg_t ch5_evt_id; - volatile soc_etm_chn_task_id_reg_t ch5_task_id; - volatile soc_etm_chn_evt_id_reg_t ch6_evt_id; - volatile soc_etm_chn_task_id_reg_t ch6_task_id; - volatile soc_etm_chn_evt_id_reg_t ch7_evt_id; - volatile soc_etm_chn_task_id_reg_t ch7_task_id; - volatile soc_etm_chn_evt_id_reg_t ch8_evt_id; - volatile soc_etm_chn_task_id_reg_t ch8_task_id; - volatile soc_etm_chn_evt_id_reg_t ch9_evt_id; - volatile soc_etm_chn_task_id_reg_t ch9_task_id; - volatile soc_etm_chn_evt_id_reg_t ch10_evt_id; - volatile soc_etm_chn_task_id_reg_t ch10_task_id; - volatile soc_etm_chn_evt_id_reg_t ch11_evt_id; - volatile soc_etm_chn_task_id_reg_t ch11_task_id; - volatile soc_etm_chn_evt_id_reg_t ch12_evt_id; - volatile soc_etm_chn_task_id_reg_t ch12_task_id; - volatile soc_etm_chn_evt_id_reg_t ch13_evt_id; - volatile soc_etm_chn_task_id_reg_t ch13_task_id; - volatile soc_etm_chn_evt_id_reg_t ch14_evt_id; - volatile soc_etm_chn_task_id_reg_t ch14_task_id; - volatile soc_etm_chn_evt_id_reg_t ch15_evt_id; - volatile soc_etm_chn_task_id_reg_t ch15_task_id; - volatile soc_etm_chn_evt_id_reg_t ch16_evt_id; - volatile soc_etm_chn_task_id_reg_t ch16_task_id; - volatile soc_etm_chn_evt_id_reg_t ch17_evt_id; - volatile soc_etm_chn_task_id_reg_t ch17_task_id; - volatile soc_etm_chn_evt_id_reg_t ch18_evt_id; - volatile soc_etm_chn_task_id_reg_t ch18_task_id; - volatile soc_etm_chn_evt_id_reg_t ch19_evt_id; - volatile soc_etm_chn_task_id_reg_t ch19_task_id; - volatile soc_etm_chn_evt_id_reg_t ch20_evt_id; - volatile soc_etm_chn_task_id_reg_t ch20_task_id; - volatile soc_etm_chn_evt_id_reg_t ch21_evt_id; - volatile soc_etm_chn_task_id_reg_t ch21_task_id; - volatile soc_etm_chn_evt_id_reg_t ch22_evt_id; - volatile soc_etm_chn_task_id_reg_t ch22_task_id; - volatile soc_etm_chn_evt_id_reg_t ch23_evt_id; - volatile soc_etm_chn_task_id_reg_t ch23_task_id; - volatile soc_etm_chn_evt_id_reg_t ch24_evt_id; - volatile soc_etm_chn_task_id_reg_t ch24_task_id; - volatile soc_etm_chn_evt_id_reg_t ch25_evt_id; - volatile soc_etm_chn_task_id_reg_t ch25_task_id; - volatile soc_etm_chn_evt_id_reg_t ch26_evt_id; - volatile soc_etm_chn_task_id_reg_t ch26_task_id; - volatile soc_etm_chn_evt_id_reg_t ch27_evt_id; - volatile soc_etm_chn_task_id_reg_t ch27_task_id; - volatile soc_etm_chn_evt_id_reg_t ch28_evt_id; - volatile soc_etm_chn_task_id_reg_t ch28_task_id; - volatile soc_etm_chn_evt_id_reg_t ch29_evt_id; - volatile soc_etm_chn_task_id_reg_t ch29_task_id; - volatile soc_etm_chn_evt_id_reg_t ch30_evt_id; - volatile soc_etm_chn_task_id_reg_t ch30_task_id; - volatile soc_etm_chn_evt_id_reg_t ch31_evt_id; - volatile soc_etm_chn_task_id_reg_t ch31_task_id; - volatile soc_etm_chn_evt_id_reg_t ch32_evt_id; - volatile soc_etm_chn_task_id_reg_t ch32_task_id; - volatile soc_etm_chn_evt_id_reg_t ch33_evt_id; - volatile soc_etm_chn_task_id_reg_t ch33_task_id; - volatile soc_etm_chn_evt_id_reg_t ch34_evt_id; - volatile soc_etm_chn_task_id_reg_t ch34_task_id; - volatile soc_etm_chn_evt_id_reg_t ch35_evt_id; - volatile soc_etm_chn_task_id_reg_t ch35_task_id; - volatile soc_etm_chn_evt_id_reg_t ch36_evt_id; - volatile soc_etm_chn_task_id_reg_t ch36_task_id; - volatile soc_etm_chn_evt_id_reg_t ch37_evt_id; - volatile soc_etm_chn_task_id_reg_t ch37_task_id; - volatile soc_etm_chn_evt_id_reg_t ch38_evt_id; - volatile soc_etm_chn_task_id_reg_t ch38_task_id; - volatile soc_etm_chn_evt_id_reg_t ch39_evt_id; - volatile soc_etm_chn_task_id_reg_t ch39_task_id; - volatile soc_etm_chn_evt_id_reg_t ch40_evt_id; - volatile soc_etm_chn_task_id_reg_t ch40_task_id; - volatile soc_etm_chn_evt_id_reg_t ch41_evt_id; - volatile soc_etm_chn_task_id_reg_t ch41_task_id; - volatile soc_etm_chn_evt_id_reg_t ch42_evt_id; - volatile soc_etm_chn_task_id_reg_t ch42_task_id; - volatile soc_etm_chn_evt_id_reg_t ch43_evt_id; - volatile soc_etm_chn_task_id_reg_t ch43_task_id; - volatile soc_etm_chn_evt_id_reg_t ch44_evt_id; - volatile soc_etm_chn_task_id_reg_t ch44_task_id; - volatile soc_etm_chn_evt_id_reg_t ch45_evt_id; - volatile soc_etm_chn_task_id_reg_t ch45_task_id; - volatile soc_etm_chn_evt_id_reg_t ch46_evt_id; - volatile soc_etm_chn_task_id_reg_t ch46_task_id; - volatile soc_etm_chn_evt_id_reg_t ch47_evt_id; - volatile soc_etm_chn_task_id_reg_t ch47_task_id; - volatile soc_etm_chn_evt_id_reg_t ch48_evt_id; - volatile soc_etm_chn_task_id_reg_t ch48_task_id; - volatile soc_etm_chn_evt_id_reg_t ch49_evt_id; - volatile soc_etm_chn_task_id_reg_t ch49_task_id; + volatile struct { + soc_etm_chn_evt_id_reg_t eid; + soc_etm_chn_task_id_reg_t tid; + } channel[50]; volatile soc_etm_evt_st0_reg_t evt_st0; volatile soc_etm_evt_st0_clr_reg_t evt_st0_clr; volatile soc_etm_evt_st1_reg_t evt_st1; diff --git a/components/soc/esp32c61/ld/esp32c61.peripherals.ld b/components/soc/esp32c61/ld/esp32c61.peripherals.ld index 6d5ca8d8c3b8..f0741f33cc40 100644 --- a/components/soc/esp32c61/ld/esp32c61.peripherals.ld +++ b/components/soc/esp32c61/ld/esp32c61.peripherals.ld @@ -29,6 +29,8 @@ PROVIDE ( ECC = 0x6008B000 ); PROVIDE ( ECDSA = 0x6008E000 ); PROVIDE ( IO_MUX = 0x60090000 ); PROVIDE ( GPIO = 0x60091000 ); +PROVIDE ( GPIO_EXT = 0x60091e00 ); +PROVIDE ( GPIO_ETM = 0x60091f18 ); PROVIDE ( TCM_MEM_MONITOR = 0x60092000 ); PROVIDE ( PAU = 0x60093000 ); PROVIDE ( HP_SYSTEM = 0x60095000 ); diff --git a/docs/docs_not_updated/esp32c61.txt b/docs/docs_not_updated/esp32c61.txt index 7dfeaed03e79..a6622d64a31f 100644 --- a/docs/docs_not_updated/esp32c61.txt +++ b/docs/docs_not_updated/esp32c61.txt @@ -54,7 +54,6 @@ api-reference/peripherals/usb_host/usb_host_notes_design.rst api-reference/peripherals/usb_device.rst api-reference/peripherals/sdspi_host.rst api-reference/peripherals/dac.rst -api-reference/peripherals/etm.rst api-reference/peripherals/i2s.rst api-reference/peripherals/touch_element.rst api-reference/peripherals/ppa.rst diff --git a/examples/peripherals/timer_group/gptimer_capture_hc_sr04/README.md b/examples/peripherals/timer_group/gptimer_capture_hc_sr04/README.md index 26ed2f38b78f..4843828bc25b 100644 --- a/examples/peripherals/timer_group/gptimer_capture_hc_sr04/README.md +++ b/examples/peripherals/timer_group/gptimer_capture_hc_sr04/README.md @@ -1,5 +1,5 @@ -| Supported Targets | ESP32-C5 | ESP32-C6 | ESP32-H2 | ESP32-P4 | -| ----------------- | -------- | -------- | -------- | -------- | +| Supported Targets | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-H2 | ESP32-P4 | +| ----------------- | -------- | -------- | --------- | -------- | -------- | # HC-SR04 Example based on GPTimer Capture and ETM diff --git a/examples/peripherals/timer_group/gptimer_capture_hc_sr04/pytest_gptimer_capture_example.py b/examples/peripherals/timer_group/gptimer_capture_hc_sr04/pytest_gptimer_capture_example.py index 0c668e45bb15..2756fe0fa292 100644 --- a/examples/peripherals/timer_group/gptimer_capture_hc_sr04/pytest_gptimer_capture_example.py +++ b/examples/peripherals/timer_group/gptimer_capture_hc_sr04/pytest_gptimer_capture_example.py @@ -6,6 +6,7 @@ @pytest.mark.esp32c5 @pytest.mark.esp32c6 +@pytest.mark.esp32c61 @pytest.mark.esp32h2 @pytest.mark.esp32p4 @pytest.mark.generic From cfdaf3b379317671147b47e92707e17150de444b Mon Sep 17 00:00:00 2001 From: Chen Jichang Date: Fri, 11 Oct 2024 17:25:52 +0800 Subject: [PATCH 159/365] feat(parlio): refactor gpio mode config in parlio --- .../include/driver/parlio_rx.h | 3 +- components/esp_driver_parlio/src/parlio_rx.c | 56 ++++++++++--------- components/esp_driver_parlio/src/parlio_tx.c | 51 ++++++++++------- .../test_apps/parlio/main/test_parlio_rx.c | 9 ++- .../test_apps/parlio/main/test_parlio_tx.c | 18 +++++- .../esp_probe/hw_impl/esp_probe_impl_parlio.c | 2 - 6 files changed, 86 insertions(+), 53 deletions(-) diff --git a/components/esp_driver_parlio/include/driver/parlio_rx.h b/components/esp_driver_parlio/include/driver/parlio_rx.h index 400b10beabe6..3a450bd3fdcf 100644 --- a/components/esp_driver_parlio/include/driver/parlio_rx.h +++ b/components/esp_driver_parlio/include/driver/parlio_rx.h @@ -40,8 +40,7 @@ typedef struct { the output clock will be controlled by the valid gpio, i.e. high level of valid gpio to enable the clock output, low to disable */ uint32_t io_loop_back: 1; /*!< For debug/test, the signal output from the GPIO will be fed to the input path as well */ - uint32_t io_no_init: 1; /*!< Set to skip initializing the GPIO, but only attach the pralio rx signals to those GPIOs via IO Matrix. - So that the signals that have attached to those GPIO won't be overwritten. Mainly used for self communication or self monitoring */ + uint32_t io_no_init: 1 __attribute__((deprecated)); /*!< Deprecated. Driver won't change the GPIO configuration in inilization. */ } flags; /*!< RX driver flags */ } parlio_rx_unit_config_t; diff --git a/components/esp_driver_parlio/src/parlio_rx.c b/components/esp_driver_parlio/src/parlio_rx.c index 411ed2aea0d5..12a9150b1a76 100644 --- a/components/esp_driver_parlio/src/parlio_rx.c +++ b/components/esp_driver_parlio/src/parlio_rx.c @@ -25,7 +25,6 @@ #include "soc/parlio_periph.h" #include "soc/soc_caps.h" #include "hal/parlio_ll.h" -#include "hal/gpio_hal.h" #include "hal/dma_types.h" #include "hal/hal_utils.h" #include "driver/gpio.h" @@ -252,24 +251,19 @@ static esp_err_t s_parlio_rx_unit_set_gpio(parlio_rx_unit_handle_t rx_unit, cons { int group_id = rx_unit->base.group->group_id; int unit_id = rx_unit->base.unit_id; - /* Default GPIO configuration */ - gpio_config_t gpio_conf = { - .intr_type = GPIO_INTR_DISABLE, - .pull_down_en = false, - .pull_up_en = true, - }; /* When the source clock comes from external, enable the gpio input direction and connect to the clock input signal */ if (config->clk_src == PARLIO_CLK_SRC_EXTERNAL) { ESP_RETURN_ON_FALSE(config->clk_in_gpio_num >= 0, ESP_ERR_INVALID_ARG, TAG, "clk_in_gpio_num must be set while the clock input from external"); /* Connect the clock in signal to the GPIO matrix if it is set */ - if (!config->flags.io_no_init) { - gpio_conf.mode = config->flags.io_loop_back ? GPIO_MODE_INPUT_OUTPUT : GPIO_MODE_INPUT; - gpio_conf.pin_bit_mask = BIT64(config->clk_in_gpio_num); - ESP_RETURN_ON_ERROR(gpio_config(&gpio_conf), TAG, "config clk in GPIO failed"); - } else { - gpio_ll_input_enable(&GPIO, config->clk_in_gpio_num); + gpio_func_sel(config->clk_in_gpio_num, PIN_FUNC_GPIO); + gpio_input_enable(config->clk_in_gpio_num); + + // deprecated, to be removed in in esp-idf v6.0 + if (config->flags.io_loop_back) { + gpio_output_enable(config->clk_in_gpio_num); } + esp_rom_gpio_connect_in_signal(config->clk_in_gpio_num, parlio_periph_signals.groups[group_id].rx_units[unit_id].clk_in_sig, false); } @@ -277,9 +271,14 @@ static esp_err_t s_parlio_rx_unit_set_gpio(parlio_rx_unit_handle_t rx_unit, cons * enable the gpio output direction and connect to the clock output signal */ if (config->clk_out_gpio_num >= 0) { #if SOC_PARLIO_RX_CLK_SUPPORT_OUTPUT - gpio_conf.mode = config->flags.io_loop_back ? GPIO_MODE_INPUT_OUTPUT : GPIO_MODE_OUTPUT; - gpio_conf.pin_bit_mask = BIT64(config->clk_out_gpio_num); - ESP_RETURN_ON_ERROR(gpio_config(&gpio_conf), TAG, "config clk out GPIO failed"); + gpio_func_sel(config->clk_out_gpio_num, PIN_FUNC_GPIO); + + // deprecated, to be removed in in esp-idf v6.0 + if (config->flags.io_loop_back) { + gpio_input_enable(config->clk_out_gpio_num); + } + + // connect the signal to the GPIO by matrix, it will also enable the output path properly esp_rom_gpio_connect_out_signal(config->clk_out_gpio_num, parlio_periph_signals.groups[group_id].rx_units[unit_id].clk_out_sig, false, false); #else @@ -287,15 +286,16 @@ static esp_err_t s_parlio_rx_unit_set_gpio(parlio_rx_unit_handle_t rx_unit, cons #endif // SOC_PARLIO_RX_CLK_SUPPORT_OUTPUT } - gpio_conf.mode = config->flags.io_loop_back ? GPIO_MODE_INPUT_OUTPUT : GPIO_MODE_INPUT; /* Initialize the valid GPIO as input */ if (config->valid_gpio_num >= 0) { - if (!config->flags.io_no_init) { - gpio_conf.pin_bit_mask = BIT64(config->valid_gpio_num); - ESP_RETURN_ON_ERROR(gpio_config(&gpio_conf), TAG, "config data GPIO failed"); - } else { - gpio_ll_input_enable(&GPIO, config->valid_gpio_num); + gpio_func_sel(config->valid_gpio_num, PIN_FUNC_GPIO); + gpio_input_enable(config->valid_gpio_num); + + // deprecated, to be removed in in esp-idf v6.0 + if (config->flags.io_loop_back) { + gpio_output_enable(config->valid_gpio_num); } + /* Not connect the signal here, the signal is lazy connected until the delimiter takes effect */ } @@ -303,12 +303,14 @@ static esp_err_t s_parlio_rx_unit_set_gpio(parlio_rx_unit_handle_t rx_unit, cons for (int i = 0; i < config->data_width; i++) { /* Loop the data_gpio_nums to connect data and valid signals via GPIO matrix */ if (config->data_gpio_nums[i] >= 0) { - if (!config->flags.io_no_init) { - gpio_conf.pin_bit_mask = BIT64(config->data_gpio_nums[i]); - ESP_RETURN_ON_ERROR(gpio_config(&gpio_conf), TAG, "config data GPIO failed"); - } else { - gpio_ll_input_enable(&GPIO, config->data_gpio_nums[i]); + gpio_func_sel(config->data_gpio_nums[i], PIN_FUNC_GPIO); + gpio_input_enable(config->data_gpio_nums[i]); + + // deprecated, to be removed in in esp-idf v6.0 + if (config->flags.io_loop_back) { + gpio_output_enable(config->data_gpio_nums[i]); } + esp_rom_gpio_connect_in_signal(config->data_gpio_nums[i], parlio_periph_signals.groups[group_id].rx_units[unit_id].data_sigs[i], false); } else { diff --git a/components/esp_driver_parlio/src/parlio_tx.c b/components/esp_driver_parlio/src/parlio_tx.c index dcf073ed264e..e8ebaf865204 100644 --- a/components/esp_driver_parlio/src/parlio_tx.c +++ b/components/esp_driver_parlio/src/parlio_tx.c @@ -138,46 +138,59 @@ static esp_err_t parlio_tx_unit_configure_gpio(parlio_tx_unit_t *tx_unit, const { int group_id = tx_unit->base.group->group_id; int unit_id = tx_unit->base.unit_id; - gpio_config_t gpio_conf = { - .intr_type = GPIO_INTR_DISABLE, - .mode = config->flags.io_loop_back ? GPIO_MODE_INPUT_OUTPUT : GPIO_MODE_OUTPUT, - .pull_down_en = false, - .pull_up_en = true, - }; // connect peripheral signals via GPIO matrix for (size_t i = 0; i < config->data_width; i++) { if (config->data_gpio_nums[i] >= 0) { - gpio_conf.pin_bit_mask = BIT64(config->data_gpio_nums[i]); - ESP_RETURN_ON_ERROR(gpio_config(&gpio_conf), TAG, "config data GPIO failed"); + gpio_func_sel(config->data_gpio_nums[i], PIN_FUNC_GPIO); + + // deprecated, to be removed in in esp-idf v6.0 + if (config->flags.io_loop_back) { + gpio_input_enable(config->data_gpio_nums[i]); + } + + // connect the signal to the GPIO by matrix, it will also enable the output path properly esp_rom_gpio_connect_out_signal(config->data_gpio_nums[i], parlio_periph_signals.groups[group_id].tx_units[unit_id].data_sigs[i], false, false); - gpio_func_sel(config->data_gpio_nums[i], PIN_FUNC_GPIO); } } // Note: the valid signal will override TXD[PARLIO_LL_TX_DATA_LINE_AS_VALID_SIG] if (config->valid_gpio_num >= 0) { - gpio_conf.pin_bit_mask = BIT64(config->valid_gpio_num); - ESP_RETURN_ON_ERROR(gpio_config(&gpio_conf), TAG, "config valid GPIO failed"); + gpio_func_sel(config->valid_gpio_num, PIN_FUNC_GPIO); + + // deprecated, to be removed in in esp-idf v6.0 + if (config->flags.io_loop_back) { + gpio_input_enable(config->valid_gpio_num); + } + + // connect the signal to the GPIO by matrix, it will also enable the output path properly esp_rom_gpio_connect_out_signal(config->valid_gpio_num, parlio_periph_signals.groups[group_id].tx_units[unit_id].data_sigs[PARLIO_LL_TX_DATA_LINE_AS_VALID_SIG], false, false); - gpio_func_sel(config->valid_gpio_num, PIN_FUNC_GPIO); } if (config->clk_out_gpio_num >= 0) { - gpio_conf.pin_bit_mask = BIT64(config->clk_out_gpio_num); - ESP_RETURN_ON_ERROR(gpio_config(&gpio_conf), TAG, "config clk out GPIO failed"); + gpio_func_sel(config->clk_out_gpio_num, PIN_FUNC_GPIO); + + // deprecated, to be removed in in esp-idf v6.0 + if (config->flags.io_loop_back) { + gpio_input_enable(config->clk_out_gpio_num); + } + + // connect the signal to the GPIO by matrix, it will also enable the output path properly esp_rom_gpio_connect_out_signal(config->clk_out_gpio_num, parlio_periph_signals.groups[group_id].tx_units[unit_id].clk_out_sig, false, false); - gpio_func_sel(config->clk_out_gpio_num, PIN_FUNC_GPIO); } if (config->clk_in_gpio_num >= 0) { - gpio_conf.mode = config->flags.io_loop_back ? GPIO_MODE_INPUT_OUTPUT : GPIO_MODE_INPUT; - gpio_conf.pin_bit_mask = BIT64(config->clk_in_gpio_num); - ESP_RETURN_ON_ERROR(gpio_config(&gpio_conf), TAG, "config clk in GPIO failed"); + gpio_func_sel(config->clk_in_gpio_num, PIN_FUNC_GPIO); + gpio_input_enable(config->clk_in_gpio_num); + + // deprecated, to be removed in in esp-idf v6.0 + if (config->flags.io_loop_back) { + gpio_output_enable(config->clk_in_gpio_num); + } + esp_rom_gpio_connect_in_signal(config->clk_in_gpio_num, parlio_periph_signals.groups[group_id].tx_units[unit_id].clk_in_sig, false); - gpio_func_sel(config->clk_in_gpio_num, PIN_FUNC_GPIO); } return ESP_OK; } diff --git a/components/esp_driver_parlio/test_apps/parlio/main/test_parlio_rx.c b/components/esp_driver_parlio/test_apps/parlio/main/test_parlio_rx.c index cf5f0befcb2a..d9d84cf0053b 100644 --- a/components/esp_driver_parlio/test_apps/parlio/main/test_parlio_rx.c +++ b/components/esp_driver_parlio/test_apps/parlio/main/test_parlio_rx.c @@ -52,7 +52,6 @@ }, \ .flags = { \ .clk_gate_en = false, \ - .io_loop_back = true, \ } \ } @@ -528,6 +527,13 @@ TEST_CASE("parallel_rx_unit_receive_transaction_test", "[parlio_rx]") TEST_CASE("parallel_rx_unit_receive_timeout_test", "[parlio_rx]") { + printf("init a gpio to simulate valid signal\r\n"); + gpio_config_t test_gpio_conf = { + .mode = GPIO_MODE_OUTPUT, + .pin_bit_mask = BIT64(TEST_VALID_GPIO), + }; + TEST_ESP_OK(gpio_config(&test_gpio_conf)); + parlio_rx_unit_handle_t rx_unit = NULL; parlio_rx_delimiter_handle_t timeout_deli = NULL; @@ -583,5 +589,6 @@ TEST_CASE("parallel_rx_unit_receive_timeout_test", "[parlio_rx]") TEST_ESP_OK(parlio_rx_unit_disable(rx_unit)); TEST_ESP_OK(parlio_del_rx_delimiter(timeout_deli)); TEST_ESP_OK(parlio_del_rx_unit(rx_unit)); + TEST_ESP_OK(gpio_reset_pin(TEST_VALID_GPIO)); free(payload); } diff --git a/components/esp_driver_parlio/test_apps/parlio/main/test_parlio_tx.c b/components/esp_driver_parlio/test_apps/parlio/main/test_parlio_tx.c index a1fd71d8883c..a556c8a407ad 100644 --- a/components/esp_driver_parlio/test_apps/parlio/main/test_parlio_tx.c +++ b/components/esp_driver_parlio/test_apps/parlio/main/test_parlio_tx.c @@ -178,6 +178,13 @@ TEST_CASE("parallel_tx_unit_enable_disable", "[parlio_tx]") TEST_CASE("parallel_tx_unit_idle_value", "[parlio_tx]") { + printf("init a gpio to read parlio_tx output\r\n"); + gpio_config_t test_gpio_conf = { + .mode = GPIO_MODE_INPUT, + .pin_bit_mask = BIT64(TEST_DATA0_GPIO), + }; + TEST_ESP_OK(gpio_config(&test_gpio_conf)); + printf("install parlio tx unit\r\n"); parlio_tx_unit_handle_t tx_unit = NULL; parlio_tx_unit_config_t config = { @@ -201,7 +208,6 @@ TEST_CASE("parallel_tx_unit_idle_value", "[parlio_tx]") .max_transfer_size = 64, .bit_pack_order = PARLIO_BIT_PACK_ORDER_LSB, .sample_edge = PARLIO_SAMPLE_EDGE_POS, - .flags.io_loop_back = 1, // enable loop back by GPIO matrix, so that we can read the level of the data line by gpio driver }; TEST_ESP_OK(parlio_new_tx_unit(&config, &tx_unit)); TEST_ESP_OK(parlio_tx_unit_enable(tx_unit)); @@ -224,11 +230,19 @@ TEST_CASE("parallel_tx_unit_idle_value", "[parlio_tx]") TEST_ESP_OK(parlio_tx_unit_disable(tx_unit)); TEST_ESP_OK(parlio_del_tx_unit(tx_unit)); + TEST_ESP_OK(gpio_reset_pin(TEST_DATA0_GPIO)); } #if SOC_PARLIO_TX_CLK_SUPPORT_GATING TEST_CASE("parallel_tx_clock_gating", "[paralio_tx]") { + printf("init a gpio to read parlio_tx clk output\r\n"); + gpio_config_t test_gpio_conf = { + .mode = GPIO_MODE_INPUT, + .pin_bit_mask = BIT64(TEST_CLK_GPIO), + }; + TEST_ESP_OK(gpio_config(&test_gpio_conf)); + printf("install parlio tx unit\r\n"); parlio_tx_unit_handle_t tx_unit = NULL; parlio_tx_unit_config_t config = { @@ -247,7 +261,6 @@ TEST_CASE("parallel_tx_clock_gating", "[paralio_tx]") .bit_pack_order = PARLIO_BIT_PACK_ORDER_MSB, .sample_edge = PARLIO_SAMPLE_EDGE_POS, .flags.clk_gate_en = true, // enable clock gating, controlled by the level of TEST_DATA7_GPIO - .flags.io_loop_back = true, // for reading the level of the clock line in IDLE state }; TEST_ESP_OK(parlio_new_tx_unit(&config, &tx_unit)); TEST_ESP_OK(parlio_tx_unit_enable(tx_unit)); @@ -272,5 +285,6 @@ TEST_CASE("parallel_tx_clock_gating", "[paralio_tx]") TEST_ESP_OK(parlio_tx_unit_disable(tx_unit)); TEST_ESP_OK(parlio_del_tx_unit(tx_unit)); + TEST_ESP_OK(gpio_reset_pin(TEST_CLK_GPIO)); } #endif // SOC_PARLIO_TX_CLK_SUPPORT_GATING diff --git a/examples/peripherals/parlio/parlio_rx/logic_analyzer/components/esp_probe/hw_impl/esp_probe_impl_parlio.c b/examples/peripherals/parlio/parlio_rx/logic_analyzer/components/esp_probe/hw_impl/esp_probe_impl_parlio.c index 41de582782c5..6ad6b4d238c5 100644 --- a/examples/peripherals/parlio/parlio_rx/logic_analyzer/components/esp_probe/hw_impl/esp_probe_impl_parlio.c +++ b/examples/peripherals/parlio/parlio_rx/logic_analyzer/components/esp_probe/hw_impl/esp_probe_impl_parlio.c @@ -82,8 +82,6 @@ esp_err_t esp_probe_priv_init_hardware(esp_probe_handle_t handle, esp_probe_conf .valid_gpio_num = GPIO_NUM_NC, // Does not need valid gpio, all data gpio are used as sampling channel .flags = { .clk_gate_en = false, - .io_loop_back = true, - .io_no_init = true, } }; memcpy(parlio_rx_cfg.data_gpio_nums, config->probe_gpio, PARLIO_RX_UNIT_MAX_DATA_WIDTH * sizeof(gpio_num_t)); From c2d1f7a48c29e97dc5e3f0fea45b143ae63f6aa4 Mon Sep 17 00:00:00 2001 From: "C.S.M" Date: Sat, 12 Oct 2024 15:08:24 +0800 Subject: [PATCH 160/365] feat(esp32p4): Introduce p4 eco2 configuration --- .../port/soc/esp32p4/Kconfig.system | 27 ++++++++++++++++--- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/components/esp_system/port/soc/esp32p4/Kconfig.system b/components/esp_system/port/soc/esp32p4/Kconfig.system index 5ffec7fe769b..2e1d235b6874 100644 --- a/components/esp_system/port/soc/esp32p4/Kconfig.system +++ b/components/esp_system/port/soc/esp32p4/Kconfig.system @@ -10,7 +10,7 @@ menu "Brownout Detector" choice ESP_BROWNOUT_DET_LVL_SEL prompt "Brownout voltage level" - depends on ESP_BROWNOUT_DET + depends on ESP_BROWNOUT_DET && (ESP32P4_REV_MIN_FULL <= 1) default ESP_BROWNOUT_DET_LVL_SEL_7 help The brownout detector will reset the chip when the supply voltage is approximately @@ -33,13 +33,32 @@ menu "Brownout Detector" bool "3.27V" endchoice + choice ESP_BROWNOUT_DET_LVL_SEL_V2 + prompt "Brownout voltage level" + default ESP_BROWNOUT_DET_LVL_SEL_7_V2 + depends on ESP_BROWNOUT_DET && (ESP32P4_REV_MIN_FULL >= 100) + help + The brownout detector will reset the chip when the supply voltage is approximately + below this level. Note that there may be some variation of brownout voltage level + between each chip. + + #The voltage levels here are estimates, more work needs to be done to figure out the exact voltages + #of the brownout threshold levels. + config ESP_BROWNOUT_DET_LVL_SEL_7_V2 + bool "2.6V" + config ESP_BROWNOUT_DET_LVL_SEL_6_V2 + bool "2.52V" + config ESP_BROWNOUT_DET_LVL_SEL_5_V2 + bool "2.42V" + endchoice + config ESP_BROWNOUT_DET_LVL int default 2 if ESP_BROWNOUT_DET_LVL_SEL_2 default 3 if ESP_BROWNOUT_DET_LVL_SEL_3 default 4 if ESP_BROWNOUT_DET_LVL_SEL_4 - default 5 if ESP_BROWNOUT_DET_LVL_SEL_5 - default 6 if ESP_BROWNOUT_DET_LVL_SEL_6 - default 7 if ESP_BROWNOUT_DET_LVL_SEL_7 + default 5 if ESP_BROWNOUT_DET_LVL_SEL_5 || ESP_BROWNOUT_DET_LVL_SEL_5_V2 + default 6 if ESP_BROWNOUT_DET_LVL_SEL_6 || ESP_BROWNOUT_DET_LVL_SEL_6_V2 + default 7 if ESP_BROWNOUT_DET_LVL_SEL_7 || ESP_BROWNOUT_DET_LVL_SEL_7_V2 endmenu From b148fb507e8f3fb30bc5806208ac07ff0a63645c Mon Sep 17 00:00:00 2001 From: zwx Date: Thu, 26 Sep 2024 12:15:58 +0800 Subject: [PATCH 161/365] fix(802154): pass hardware abort reason into processing function --- .../ieee802154/driver/esp_ieee802154_dev.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/components/ieee802154/driver/esp_ieee802154_dev.c b/components/ieee802154/driver/esp_ieee802154_dev.c index 5376f1924110..6f8fdc2b61a7 100644 --- a/components/ieee802154/driver/esp_ieee802154_dev.c +++ b/components/ieee802154/driver/esp_ieee802154_dev.c @@ -469,11 +469,10 @@ static IRAM_ATTR void isr_handle_ack_rx_done(void) NEEDS_NEXT_OPT(true); } -static IRAM_ATTR void isr_handle_rx_phase_rx_abort(void) +static IRAM_ATTR void isr_handle_rx_phase_rx_abort(ieee802154_ll_rx_abort_reason_t rx_abort_reason) { event_end_process(); uint32_t rx_status = ieee802154_ll_get_rx_status(); - ieee802154_ll_rx_abort_reason_t rx_abort_reason = ieee802154_ll_get_rx_abort_reason(); switch (rx_abort_reason) { case IEEE802154_RX_ABORT_BY_RX_STOP: case IEEE802154_RX_ABORT_BY_TX_ACK_STOP: @@ -508,13 +507,12 @@ static IRAM_ATTR void isr_handle_rx_phase_rx_abort(void) NEEDS_NEXT_OPT(true); } -static IRAM_ATTR void isr_handle_tx_ack_phase_rx_abort(void) +static IRAM_ATTR void isr_handle_tx_ack_phase_rx_abort(ieee802154_ll_rx_abort_reason_t rx_abort_reason) { event_end_process(); #if CONFIG_IEEE802154_TEST uint32_t rx_status = ieee802154_ll_get_rx_status(); #endif - ieee802154_ll_rx_abort_reason_t rx_abort_reason = ieee802154_ll_get_rx_abort_reason(); switch (rx_abort_reason) { case IEEE802154_RX_ABORT_BY_RX_STOP: case IEEE802154_RX_ABORT_BY_TX_ACK_STOP: @@ -553,10 +551,9 @@ static IRAM_ATTR void isr_handle_tx_ack_phase_rx_abort(void) NEEDS_NEXT_OPT(true); } -static IRAM_ATTR void isr_handle_tx_abort(void) +static IRAM_ATTR void isr_handle_tx_abort(ieee802154_ll_tx_abort_reason_t tx_abort_reason) { event_end_process(); - ieee802154_ll_tx_abort_reason_t tx_abort_reason = ieee802154_ll_get_tx_abort_reason(); switch (tx_abort_reason) { case IEEE802154_TX_ABORT_BY_RX_ACK_STOP: case IEEE802154_TX_ABORT_BY_TX_STOP: @@ -636,6 +633,8 @@ static void ieee802154_isr(void *arg) { ieee802154_enter_critical(); ieee802154_ll_events events = ieee802154_ll_get_events(); + ieee802154_ll_rx_abort_reason_t rx_abort_reason = ieee802154_ll_get_rx_abort_reason(); + ieee802154_ll_tx_abort_reason_t tx_abort_reason = ieee802154_ll_get_tx_abort_reason(); IEEE802154_PROBE(events); @@ -643,7 +642,7 @@ static void ieee802154_isr(void *arg) if (events & IEEE802154_EVENT_RX_ABORT) { // First phase rx abort process, will clear RX_ABORT event in second. - isr_handle_rx_phase_rx_abort(); + isr_handle_rx_phase_rx_abort(rx_abort_reason); } if (events & IEEE802154_EVENT_RX_SFD_DONE) { @@ -701,12 +700,12 @@ static void ieee802154_isr(void *arg) if (events & IEEE802154_EVENT_RX_ABORT) { // Second phase rx abort process, clears RX_ABORT event. - isr_handle_tx_ack_phase_rx_abort(); + isr_handle_tx_ack_phase_rx_abort(rx_abort_reason); events &= (uint16_t)(~IEEE802154_EVENT_RX_ABORT); } if (events & IEEE802154_EVENT_TX_ABORT) { - isr_handle_tx_abort(); + isr_handle_tx_abort(tx_abort_reason); events &= (uint16_t)(~IEEE802154_EVENT_TX_ABORT); } From a0ae573357a99e07a0214d32bf0180fc1f2a1acf Mon Sep 17 00:00:00 2001 From: Xu Si Yu Date: Wed, 17 Jul 2024 12:27:56 +0800 Subject: [PATCH 162/365] feat(openthread): support trel feature --- components/openthread/CMakeLists.txt | 18 +- components/openthread/Kconfig | 20 +- .../openthread/include/esp_openthread_trel.h | 38 ++ .../openthread/include/esp_openthread_types.h | 1 + .../openthread-core-esp32x-ftd-config.h | 30 +- .../src/port/esp_openthread_radio.c | 2 +- .../src/port/esp_openthread_radio_spinel.cpp | 1 - .../openthread/src/port/esp_openthread_trel.c | 374 ++++++++++++++++++ .../src/port/esp_spi_spinel_interface.cpp | 2 +- examples/openthread/.build-test-rules.yml | 5 + examples/openthread/ot_trel/CMakeLists.txt | 6 + examples/openthread/ot_trel/README.md | 132 +++++++ .../openthread/ot_trel/main/CMakeLists.txt | 2 + .../openthread/ot_trel/main/Kconfig.projbuild | 9 + .../openthread/ot_trel/main/esp_ot_config.h | 58 +++ .../openthread/ot_trel/main/esp_ot_trel.c | 141 +++++++ .../openthread/ot_trel/main/idf_component.yml | 11 + examples/openthread/ot_trel/partitions.csv | 5 + .../openthread/ot_trel/sdkconfig.defaults | 42 ++ 19 files changed, 883 insertions(+), 14 deletions(-) create mode 100644 components/openthread/include/esp_openthread_trel.h create mode 100644 components/openthread/src/port/esp_openthread_trel.c create mode 100644 examples/openthread/ot_trel/CMakeLists.txt create mode 100644 examples/openthread/ot_trel/README.md create mode 100644 examples/openthread/ot_trel/main/CMakeLists.txt create mode 100644 examples/openthread/ot_trel/main/Kconfig.projbuild create mode 100644 examples/openthread/ot_trel/main/esp_ot_config.h create mode 100644 examples/openthread/ot_trel/main/esp_ot_trel.c create mode 100644 examples/openthread/ot_trel/main/idf_component.yml create mode 100644 examples/openthread/ot_trel/partitions.csv create mode 100644 examples/openthread/ot_trel/sdkconfig.defaults diff --git a/components/openthread/CMakeLists.txt b/components/openthread/CMakeLists.txt index 51b66bb4489a..0b555bbf04ef 100644 --- a/components/openthread/CMakeLists.txt +++ b/components/openthread/CMakeLists.txt @@ -15,7 +15,6 @@ if(CONFIG_OPENTHREAD_ENABLED) set(private_include_dirs "openthread/examples/platforms" - "openthread/include/openthread" "openthread/src" "openthread/src/core" "openthread/src/lib" @@ -140,6 +139,19 @@ if(CONFIG_OPENTHREAD_ENABLED) list(APPEND exclude_srcs "src/port/esp_openthread_radio.c" "src/port/esp_openthread_sleep.c") + elseif(CONFIG_OPENTHREAD_RADIO_154_NONE) + list(APPEND exclude_srcs + "src/port/esp_openthread_radio_spinel.cpp" + "src/port/esp_spi_spinel_interface.cpp" + "src/port/esp_uart_spinel_interface.cpp" + "src/port/esp_openthread_radio.c" + "src/port/esp_openthread_sleep.c" + ) + endif() + + if(NOT CONFIG_OPENTHREAD_RADIO_TREL) + list(APPEND exclude_srcs + "src/port/esp_openthread_trel.c") endif() if(CONFIG_OPENTHREAD_BORDER_ROUTER) @@ -259,6 +271,10 @@ idf_component_register(SRC_DIRS "${src_dirs}" PRIV_REQUIRES console esp_event esp_partition esp_timer ieee802154 mbedtls nvs_flash) +if(CONFIG_OPENTHREAD_RADIO_TREL) +idf_component_optional_requires(PRIVATE espressif__mdns) +endif() + if(CONFIG_OPENTHREAD_ENABLED OR CONFIG_OPENTHREAD_SPINEL_ONLY) if(CONFIG_OPENTHREAD_RADIO) set(CONFIG_FILE_TYPE "radio") diff --git a/components/openthread/Kconfig b/components/openthread/Kconfig index 160084fbcb74..9ae0a6c63b98 100644 --- a/components/openthread/Kconfig +++ b/components/openthread/Kconfig @@ -101,7 +101,7 @@ menu "OpenThread" default 5 if OPENTHREAD_LOG_LEVEL_DEBG choice OPENTHREAD_RADIO_TYPE - prompt "Config the Thread radio type" + prompt "Config the Thread radio type with 15.4 link" depends on OPENTHREAD_ENABLED default OPENTHREAD_RADIO_NATIVE if SOC_IEEE802154_SUPPORTED default OPENTHREAD_RADIO_SPINEL_UART @@ -124,8 +124,26 @@ menu "OpenThread" help Select this to connect to a Radio Co-Processor via SPI. + config OPENTHREAD_RADIO_154_NONE + bool "Disable the Thread radio based on 15.4 link" + help + Select this to disable the Thread radio based on 15.4 link. endchoice + config OPENTHREAD_RADIO_TREL + bool "Enable Thread Radio Encapsulation Link (TREL)" + depends on SOC_WIFI_SUPPORTED + default n + help + Select this option to enable Thread Radio Encapsulation Link. + + config OPENTHREAD_TREL_PORT + int "The port of openthread trel service" + depends on OPENTHREAD_RADIO_TREL + default 12390 + help + Configure the port number of TREL service. + choice OPENTHREAD_DEVICE_TYPE prompt "Config the Thread device type" depends on OPENTHREAD_ENABLED diff --git a/components/openthread/include/esp_openthread_trel.h b/components/openthread/include/esp_openthread_trel.h new file mode 100644 index 000000000000..c2dc8c58b47a --- /dev/null +++ b/components/openthread/include/esp_openthread_trel.h @@ -0,0 +1,38 @@ +/* + * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#pragma once + +#include "sdkconfig.h" +#include "esp_netif.h" +#include "esp_netif_types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Sets the interface used for trel feature. + * + * @note This function must be called after connect to wifi/ethernet + * + * @param[in] trel_netif The network interface (WiFi or ethernet) + * + */ +void esp_openthread_set_trel_netif(esp_netif_t *trel_netif); + +/** + * @brief Gets the trel interface of OpenThread device. + * + * @return + * The trel interface or NULL if trel not initialized. + * + */ +esp_netif_t *esp_openthread_get_trel_netif(void); + +#ifdef __cplusplus +} +#endif diff --git a/components/openthread/include/esp_openthread_types.h b/components/openthread/include/esp_openthread_types.h index 03095940194c..e046c4606f39 100644 --- a/components/openthread/include/esp_openthread_types.h +++ b/components/openthread/include/esp_openthread_types.h @@ -117,6 +117,7 @@ typedef enum { RADIO_MODE_NATIVE = 0x0, /*!< Use the native 15.4 radio */ RADIO_MODE_UART_RCP, /*!< UART connection to a 15.4 capable radio co-processor (RCP) */ RADIO_MODE_SPI_RCP, /*!< SPI connection to a 15.4 capable radio co-processor (RCP) */ + RADIO_MODE_TREL, /*!< Use the Thread Radio Encapsulation Link (TREL) */ RADIO_MODE_MAX, /*!< Using for parameter check */ } esp_openthread_radio_mode_t; diff --git a/components/openthread/private_include/openthread-core-esp32x-ftd-config.h b/components/openthread/private_include/openthread-core-esp32x-ftd-config.h index aa8882f2341d..0cd3542a9146 100644 --- a/components/openthread/private_include/openthread-core-esp32x-ftd-config.h +++ b/components/openthread/private_include/openthread-core-esp32x-ftd-config.h @@ -203,28 +203,40 @@ #define OPENTHREAD_CONFIG_DNSSD_SERVER_ENABLE 1 #endif +/** + * @def OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE + * + * Define to 1 to enable Backbone Router support. + * + */ +#ifndef OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE +#define OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE 1 +#endif + +#endif // CONFIG_OPENTHREAD_BORDER_ROUTER + /** * @def OPENTHREAD_CONFIG_RADIO_LINK_TREL_ENABLE * * Set to 1 to enable support for Thread Radio Encapsulation Link (TREL). * */ -#ifndef OPENTHREAD_CONFIG_RADIO_LINK_TREL_ENABLE -#define OPENTHREAD_CONFIG_RADIO_LINK_TREL_ENABLE 0 -#endif +#if CONFIG_OPENTHREAD_RADIO_TREL +#define OPENTHREAD_CONFIG_RADIO_LINK_TREL_ENABLE 1 +#endif // CONFIG_OPENTHREAD_RADIO_TREL /** - * @def OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE + * @def OPENTHREAD_CONFIG_RADIO_LINK_IEEE_802_15_4_ENABLE * - * Define to 1 to enable Backbone Router support. + * Set to 1 to enable support for IEEE802.15.4 radio link. * */ -#ifndef OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE -#define OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE 1 +#if CONFIG_OPENTHREAD_RADIO_NATIVE || CONFIG_OPENTHREAD_RADIO_SPINEL_UART || CONFIG_OPENTHREAD_RADIO_SPINEL_SPI +#define OPENTHREAD_CONFIG_RADIO_LINK_IEEE_802_15_4_ENABLE 1 +#else +#define OPENTHREAD_CONFIG_RADIO_LINK_IEEE_802_15_4_ENABLE 0 #endif -#endif // CONFIG_OPENTHREAD_BORDER_ROUTER - #if !CONFIG_OPENTHREAD_RADIO_NATIVE /** * @def OPENTHREAD_SPINEL_CONFIG_RCP_RESTORATION_MAX_COUNT diff --git a/components/openthread/src/port/esp_openthread_radio.c b/components/openthread/src/port/esp_openthread_radio.c index 4276809c5285..aac760c260da 100644 --- a/components/openthread/src/port/esp_openthread_radio.c +++ b/components/openthread/src/port/esp_openthread_radio.c @@ -7,7 +7,7 @@ #include #include "esp_openthread_radio.h" -#include "error.h" +#include "openthread/error.h" #include "esp_err.h" #include "sdkconfig.h" #include "esp_check.h" diff --git a/components/openthread/src/port/esp_openthread_radio_spinel.cpp b/components/openthread/src/port/esp_openthread_radio_spinel.cpp index 3d566b05e9a8..b851c5608b51 100644 --- a/components/openthread/src/port/esp_openthread_radio_spinel.cpp +++ b/components/openthread/src/port/esp_openthread_radio_spinel.cpp @@ -6,7 +6,6 @@ #include "esp_openthread_radio.h" -#include "link_raw.h" #include "sdkconfig.h" #include "esp_check.h" #include "esp_err.h" diff --git a/components/openthread/src/port/esp_openthread_trel.c b/components/openthread/src/port/esp_openthread_trel.c new file mode 100644 index 000000000000..69c43f00ec76 --- /dev/null +++ b/components/openthread/src/port/esp_openthread_trel.c @@ -0,0 +1,374 @@ +/* + * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include "esp_err.h" +#include "esp_netif_types.h" +#include "lwip/ip6_addr.h" +#include "sdkconfig.h" +#include "common/code_utils.hpp" +#include "openthread/error.h" +#include "esp_check.h" +#include "esp_event.h" +#include "esp_log.h" +#include "esp_netif.h" +#include "mdns.h" +#include "esp_netif_ip_addr.h" +#include "esp_openthread.h" +#include "esp_openthread_common_macro.h" +#include "esp_openthread_lock.h" +#include "esp_openthread_radio.h" +#include "esp_openthread_task_queue.h" +#include "esp_openthread_trel.h" +#include "lwip/pbuf.h" +#include "lwip/tcpip.h" +#include "lwip/udp.h" +#include "openthread/trel.h" +#include "openthread/platform/diag.h" + +#if CONFIG_OPENTHREAD_BORDER_ROUTER +#include "esp_openthread_border_router.h" +#endif + +static esp_netif_t *s_trel_netif = NULL; +static otPlatTrelCounters s_trel_counters; + +#define TREL_MDNS_TYPE "_trel" +#define TREL_MDNS_PROTO "_udp" + +typedef struct { + uint16_t port; + struct udp_pcb *trel_pcb; +} ot_trel_t; + +typedef struct { + struct pbuf *p; +} ot_trel_recv_task_t; + +typedef struct { + struct udp_pcb *pcb; + const uint8_t *payload; + uint16_t length; + ip_addr_t peer_addr; + uint16_t peer_port; +} ot_trel_send_task_t; + +static ot_trel_t s_ot_trel = {CONFIG_OPENTHREAD_TREL_PORT, NULL}; +static bool s_is_service_registered = false; + +static void trel_browse_notifier(mdns_result_t *result) +{ + while (result) { + + if (result->addr->addr.type == IPADDR_TYPE_V6) { + otPlatTrelPeerInfo info; + uint8_t trel_txt[1024] = {0}; + uint16_t trel_txt_len = 0; + size_t index = 0; + while (index < result->txt_count) { + trel_txt[trel_txt_len++] = strlen(result->txt[index].key) + result->txt_value_len[index] + 1; + memcpy((trel_txt + trel_txt_len), (void *)result->txt[index].key, strlen(result->txt[index].key)); + trel_txt_len += (strlen(result->txt[index].key)); + trel_txt[trel_txt_len++] = '='; + memcpy((trel_txt + trel_txt_len), (void *)result->txt[index].value, result->txt_value_len[index]); + trel_txt_len += result->txt_value_len[index]; + index++; + } + + info.mTxtData = trel_txt; + info.mTxtLength = trel_txt_len; + info.mSockAddr.mPort = result->port; + + memcpy(info.mSockAddr.mAddress.mFields.m32, result->addr->addr.u_addr.ip6.addr, OT_IP6_ADDRESS_SIZE); + + info.mRemoved = (result->ttl == 0); + ESP_LOGI(OT_PLAT_LOG_TAG, "Found TREL peer: address: %s, port:%d", ip6addr_ntoa(((ip6_addr_t*)(&result->addr->addr.u_addr.ip6))), info.mSockAddr.mPort); + + esp_openthread_task_switching_lock_acquire(portMAX_DELAY); + otPlatTrelHandleDiscoveredPeerInfo(esp_openthread_get_instance(), &info); + esp_openthread_task_switching_lock_release(); + } + + result = result->next; + } +} + +static void trel_recv_task(void *ctx) +{ + struct pbuf *recv_buf = (struct pbuf *)ctx; + uint8_t *data_buf = (uint8_t *)recv_buf->payload; + uint8_t *data_buf_to_free = NULL; + uint16_t length = recv_buf->len; + + if (recv_buf->next != NULL) { + data_buf = (uint8_t *)malloc(recv_buf->tot_len); + if (data_buf != NULL) { + length = recv_buf->tot_len; + data_buf_to_free = data_buf; + pbuf_copy_partial(recv_buf, data_buf, recv_buf->tot_len, 0); + } else { + ESP_LOGE(OT_PLAT_LOG_TAG, "Failed to allocate data buf when receiving Thread TREL message"); + ExitNow(); + } + } + otPlatTrelHandleReceived(esp_openthread_get_instance(), data_buf, length); + +exit: + if (data_buf_to_free) { + free(data_buf_to_free); + } + pbuf_free(recv_buf); +} + +static void handle_trel_udp_recv(void *ctx, struct udp_pcb *pcb, struct pbuf *p, const ip_addr_t *addr, uint16_t port) +{ + ESP_LOGD(OT_PLAT_LOG_TAG, "Receive from %s:%d", ip6addr_ntoa(&(addr->u_addr.ip6)), port); + + if (esp_openthread_task_queue_post(trel_recv_task, p) != ESP_OK) { + ESP_LOGE(OT_PLAT_LOG_TAG, "Failed to receive OpenThread TREL message"); + } +} + +static esp_err_t ot_new_trel(void *ctx) +{ + ot_trel_t *task = (ot_trel_t *)ctx; + + task->trel_pcb = udp_new(); + ESP_RETURN_ON_FALSE(task->trel_pcb != NULL, ESP_ERR_NO_MEM, OT_PLAT_LOG_TAG, "Failed to create a new UDP pcb"); + udp_bind(task->trel_pcb, IP6_ADDR_ANY, task->port); + udp_bind_netif(task->trel_pcb, netif_get_by_index(esp_netif_get_netif_impl_index(s_trel_netif))); + udp_recv(task->trel_pcb, handle_trel_udp_recv, NULL); + return ESP_OK; +} + +void otPlatTrelEnable(otInstance *aInstance, uint16_t *aUdpPort) +{ + *aUdpPort = s_ot_trel.port; + if (s_trel_netif == NULL) { + ESP_LOGE(OT_PLAT_LOG_TAG, "netif for trel is not set"); + assert(false); + } + + esp_openthread_task_switching_lock_release(); + esp_err_t err = esp_netif_tcpip_exec(ot_new_trel, &s_ot_trel); + if (err != ESP_OK) { + ESP_LOGE(OT_PLAT_LOG_TAG, "Fail to create trel udp"); + } + mdns_browse_new(TREL_MDNS_TYPE, TREL_MDNS_PROTO, trel_browse_notifier); + esp_openthread_task_switching_lock_acquire(portMAX_DELAY); +} + +static void trel_send_task(void *ctx) +{ + err_t err = ERR_OK; + struct pbuf *send_buf = NULL; + ot_trel_send_task_t *task = (ot_trel_send_task_t *)ctx; + + task->pcb = s_ot_trel.trel_pcb; + task->pcb->ttl = UDP_TTL; + task->pcb->netif_idx = esp_netif_get_netif_impl_index(s_trel_netif); + task->peer_addr.u_addr.ip6.zone = 0; + task->peer_addr.type = IPADDR_TYPE_V6; + task->pcb->flags = (task->pcb->flags & (~UDP_FLAGS_MULTICAST_LOOP)); + task->pcb->local_port = s_ot_trel.port; + send_buf = pbuf_alloc(PBUF_TRANSPORT, task->length, PBUF_RAM); + if (send_buf == NULL) { + ESP_LOGE(OT_PLAT_LOG_TAG, "Failed to allocate data buf when sending Thread TREL message"); + ExitNow(); + } + memcpy(send_buf->payload, task->payload, task->length); + + err = udp_sendto_if(task->pcb, send_buf, &task->peer_addr, task->peer_port, netif_get_by_index(task->pcb->netif_idx)); + if(err != ERR_OK) { + ESP_LOGE(OT_PLAT_LOG_TAG, "Fail to send trel msg to %s:%d %d (%d)", ip6addr_ntoa(&(task->peer_addr.u_addr.ip6)), task->peer_port, task->pcb->netif_idx, err); + } + +exit: + pbuf_free(send_buf); + free(task); +} + +void otPlatTrelSend(otInstance *aInstance, + const uint8_t *aUdpPayload, + uint16_t aUdpPayloadLen, + const otSockAddr *aDestSockAddr) +{ + ot_trel_send_task_t *task = (ot_trel_send_task_t *)malloc(sizeof(ot_trel_send_task_t)); + if (task == NULL) { + ESP_LOGE(OT_PLAT_LOG_TAG, "Failed to allocate buf for Thread TREL"); + return; + } + memcpy(task->peer_addr.u_addr.ip6.addr, aDestSockAddr->mAddress.mFields.m32, OT_IP6_ADDRESS_SIZE); + task->peer_port = aDestSockAddr->mPort; + ESP_LOGD(OT_PLAT_LOG_TAG, "send trel msg to %s:%d", ip6addr_ntoa(&(task->peer_addr.u_addr.ip6)), task->peer_port); + task->payload = aUdpPayload; + task->length = aUdpPayloadLen; + + esp_openthread_task_switching_lock_release(); + tcpip_callback(trel_send_task, task); + esp_openthread_task_switching_lock_acquire(portMAX_DELAY); +} + +void otPlatTrelRegisterService(otInstance *aInstance, uint16_t aPort, const uint8_t *aTxtData, uint8_t aTxtLength) +{ + esp_err_t ret = ESP_OK; + esp_openthread_task_switching_lock_release(); + if (s_is_service_registered) { + mdns_service_remove(TREL_MDNS_TYPE, TREL_MDNS_PROTO); + } + + mdns_service_add(NULL, TREL_MDNS_TYPE, TREL_MDNS_PROTO, aPort, NULL, 0); + s_is_service_registered = true; + uint16_t index = 0; + while (index < aTxtLength) { + const uint8_t *item_header = aTxtData + index + 1; + uint8_t item_len = aTxtData[index]; + + char key[UINT8_MAX + 1]; + for (uint16_t i = 0; i < item_len; i++) { + if (item_header[i] == '=') { + ESP_GOTO_ON_FALSE(i != 0, ESP_FAIL, exit, OT_PLAT_LOG_TAG, "Wrong format of _trel._udp txt key"); + key[i] = '\0'; + uint16_t value_len = item_len - i - 1; + ESP_GOTO_ON_FALSE(value_len != 0, ESP_FAIL, exit, OT_PLAT_LOG_TAG, "Wrong format of _trel._udp txt value"); + mdns_service_txt_item_set_with_explicit_value_len(TREL_MDNS_TYPE, TREL_MDNS_PROTO, key, (const char *)item_header + i + 1, value_len); + break; + } + key[i] = item_header[i]; + } + index += item_len + 1; + } +exit: + if (ret != ESP_OK) { + ESP_LOGE(OT_PLAT_LOG_TAG, "Registered TREL service with some errors"); + } + esp_openthread_task_switching_lock_acquire(portMAX_DELAY); +} + +void otPlatTrelResetCounters(otInstance *aInstance) +{ + memset(&s_trel_counters, 0, sizeof(otPlatTrelCounters)); +} + +static void trel_disable_task(void *ctx) +{ + struct udp_pcb *pcb = (struct udp_pcb *)ctx; + udp_remove(pcb); +} + +void otPlatTrelDisable(otInstance *aInstance) +{ + esp_openthread_task_switching_lock_release(); + if (s_ot_trel.trel_pcb) { + tcpip_callback(trel_disable_task, s_ot_trel.trel_pcb); + } + mdns_service_remove(TREL_MDNS_TYPE, TREL_MDNS_PROTO); + s_is_service_registered = false; + mdns_browse_delete(TREL_MDNS_TYPE, TREL_MDNS_PROTO); + esp_openthread_task_switching_lock_acquire(portMAX_DELAY); + s_ot_trel.trel_pcb = NULL; +} + +const otPlatTrelCounters *otPlatTrelGetCounters(otInstance *aInstance) +{ + return &s_trel_counters; +} + +void esp_openthread_set_trel_netif(esp_netif_t *trel_netif) +{ + s_trel_netif = trel_netif; +} + +esp_netif_t *esp_openthread_get_trel_netif(void) +{ + return s_trel_netif; +} + +OT_TOOL_WEAK otError otPlatRadioSetTransmitPower(otInstance *aInstance, int8_t aPower) +{ + ESP_LOGW(OT_PLAT_LOG_TAG, "Running in TREL mode and not support `otPlatRadioSetTransmitPower`"); + return OT_ERROR_NONE; +} + +OT_TOOL_WEAK otError otPlatRadioGetTransmitPower(otInstance *aInstance, int8_t *aPower) +{ + ESP_LOGW(OT_PLAT_LOG_TAG, "Running in TREL mode and not support `otPlatRadioGetTransmitPower`"); + return OT_ERROR_NONE; +} + +OT_TOOL_WEAK bool otPlatRadioGetPromiscuous(otInstance *aInstance) +{ + ESP_LOGW(OT_PLAT_LOG_TAG, "Running in TREL mode and not support `otPlatRadioGetPromiscuous`"); + return false; +} + +OT_TOOL_WEAK otError otPlatRadioSetCcaEnergyDetectThreshold(otInstance *aInstance, int8_t aThreshold) +{ + ESP_LOGW(OT_PLAT_LOG_TAG, "Running in TREL mode and not support `otPlatRadioSetCcaEnergyDetectThreshold`"); + return OT_ERROR_NONE; +} + +OT_TOOL_WEAK otError otPlatRadioGetCcaEnergyDetectThreshold(otInstance *aInstance, int8_t *aThreshold) +{ + ESP_LOGW(OT_PLAT_LOG_TAG, "Running in TREL mode and not support `otPlatRadioGetCcaEnergyDetectThreshold`"); + return OT_ERROR_NONE; +} + +OT_TOOL_WEAK void otPlatRadioGetIeeeEui64(otInstance *aInstance, uint8_t *aIeeeEui64) +{ + ESP_LOGW(OT_PLAT_LOG_TAG, "Running in TREL mode and not support `otPlatRadioGetIeeeEui64`"); +} + +OT_TOOL_WEAK otRadioFrame *otPlatRadioGetTransmitBuffer(otInstance *aInstance) +{ + return NULL; +} + +#if CONFIG_OPENTHREAD_DIAG + +OT_TOOL_WEAK void otPlatDiagSetOutputCallback(otInstance *aInstance, otPlatDiagOutputCallback aCallback, void *aContext) +{ + OT_UNUSED_VARIABLE(aInstance); + OT_UNUSED_VARIABLE(aCallback); + OT_UNUSED_VARIABLE(aContext); +} + +OT_TOOL_WEAK void otPlatDiagModeSet(bool mode) +{ + ESP_LOGW(OT_PLAT_LOG_TAG, "Running in TREL mode and not support `otPlatDiagModeSet`"); +} + +OT_TOOL_WEAK bool otPlatDiagModeGet(void) +{ + return false; +} + +OT_TOOL_WEAK void otPlatDiagTxPowerSet(int8_t tx_power) +{ + ESP_LOGW(OT_PLAT_LOG_TAG, "Running in TREL mode and not support `otPlatDiagTxPowerSet`"); +} + +OT_TOOL_WEAK void otPlatDiagChannelSet(uint8_t channel) +{ + ESP_LOGW(OT_PLAT_LOG_TAG, "Running in TREL mode and not support `otPlatDiagChannelSet`"); +} + +OT_TOOL_WEAK void otPlatDiagAlarmCallback(otInstance *aInstance) +{ + ESP_LOGW(OT_PLAT_LOG_TAG, "Running in TREL mode and not support `otPlatDiagAlarmCallback`"); +} + +#endif // CONFIG_OPENTHREAD_DIAG + +OT_TOOL_WEAK esp_err_t esp_openthread_radio_init(const esp_openthread_platform_config_t *config) +{ + ESP_LOGI(OT_PLAT_LOG_TAG, "Running in TREL mode"); + return ESP_OK; +} + +OT_TOOL_WEAK void esp_openthread_radio_deinit(void) +{ + ESP_LOGI(OT_PLAT_LOG_TAG, "Running in TREL mode"); +} diff --git a/components/openthread/src/port/esp_spi_spinel_interface.cpp b/components/openthread/src/port/esp_spi_spinel_interface.cpp index e19acd915277..61d6cfab2fa1 100644 --- a/components/openthread/src/port/esp_spi_spinel_interface.cpp +++ b/components/openthread/src/port/esp_spi_spinel_interface.cpp @@ -6,7 +6,7 @@ #include "esp_spi_spinel_interface.hpp" -#include "error.h" +#include "openthread/error.h" #include "esp_check.h" #include "esp_openthread_common_macro.h" #include "esp_rom_sys.h" diff --git a/examples/openthread/.build-test-rules.yml b/examples/openthread/.build-test-rules.yml index ddd95daa3892..81dfa9d20d67 100644 --- a/examples/openthread/.build-test-rules.yml +++ b/examples/openthread/.build-test-rules.yml @@ -59,3 +59,8 @@ examples/openthread/ot_sleepy_device/light_sleep: temporary: true reason: Not supported yet, TZ-958 <<: [*openthread_dependencies, *openthread_sleep_dependencies] + +examples/openthread/ot_trel: + enable: + - if: SOC_WIFI_SUPPORTED == 1 + <<: *openthread_dependencies diff --git a/examples/openthread/ot_trel/CMakeLists.txt b/examples/openthread/ot_trel/CMakeLists.txt new file mode 100644 index 000000000000..b12d49bfa300 --- /dev/null +++ b/examples/openthread/ot_trel/CMakeLists.txt @@ -0,0 +1,6 @@ +# The following lines of boilerplate have to be in your project's CMakeLists +# in this exact order for cmake to work correctly +cmake_minimum_required(VERSION 3.16) + +include($ENV{IDF_PATH}/tools/cmake/project.cmake) +project(esp_ot_cli) diff --git a/examples/openthread/ot_trel/README.md b/examples/openthread/ot_trel/README.md new file mode 100644 index 000000000000..ca6e9942d5a1 --- /dev/null +++ b/examples/openthread/ot_trel/README.md @@ -0,0 +1,132 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | -------- | -------- | + +# Thread Radio Encapsulation Link Example + +This example demonstrates a Thread Radio Encapsulation Link (TREL) Example. + +## How to use example + +### Hardware Required + +To run this example, a board with Wi-Fi module (for example ESP32-S3) is required. + +### Configure the project + +``` +idf.py menuconfig +``` + +The Wi-Fi ssid and password should be set through the menuconfig: +``` +Component config → → Example Connection Configuration → → WiFi SSID +Component config → → Example Connection Configuration → → WiFi Password +``` + +The example can run with the default configuration. OpenThread Command Line is enabled with UART as the default interface. Additionally, USB JTAG is also supported and can be activated through the menuconfig: + +``` +Component config → ESP System Settings → Channel for console output → USB Serial/JTAG Controller +``` + +### Build, Flash, and Run + +Build the project and flash it to the board, then run monitor tool to view serial output: + +``` +idf.py -p PORT build flash monitor +``` + +Now you'll get an OpenThread command line shell. + +### Example Output + +The `help` command will print all of the supported commands. +```bash +> help +I(7058) OPENTHREAD:[INFO]-CLI-----: execute command: help +bbr +bufferinfo +ccathreshold +channel +child +childip +childmax +childsupervision +childtimeout +coap +contextreusedelay +counters +dataset +delaytimermin +diag +discover +dns +domainname +eidcache +eui64 +extaddr +extpanid +factoryreset +... +``` + +## Set Up Network + +To run this example, at least two ESP32-S3 boards flashed with this ot_trel example are required. And they must connect to the same wifi AP. + +On the first device, run the following commands: +```bash +> factoryreset +... # the device will reboot + +> dataset init new +Done +> dataset commit active +Done +> ifconfig up +Done +> thread start +Done + +# After some seconds + +> state +leader +Done +``` +Now the first device has formed a Thread network as a leader. Get some information which will be used in next steps: +```bash +> ipaddr +fdde:ad00:beef:0:0:ff:fe00:fc00 +fdde:ad00:beef:0:0:ff:fe00:8000 +fdde:ad00:beef:0:a7c6:6311:9c8c:271b +fe80:0:0:0:5c27:a723:7115:c8f8 + +# Get the Active Dataset +> dataset active -x +0e080000000000010000000300001835060004001fffe00208fe7bb701f5f1125d0708fd75cbde7c6647bd0510b3914792d44f45b6c7d76eb9306eec94030f4f70656e5468726561642d35383332010258320410e35c581af5029b054fc904a24c2b27700c0402a0fff8 +``` + +On the second device, set the active dataset from leader, and start Thread interface: +```bash +> factoryreset +... # the device will reboot + +> dataset set active 0e080000000000010000000300001835060004001fffe00208fe7bb701f5f1125d0708fd75cbde7c6647bd0510b3914792d44f45b6c7d76eb9306eec94030f4f70656e5468726561642d35383332010258320410e35c581af5029b054fc904a24c2b27700c0402a0fff8 +> ifconfig up +Done +> thread start +Done + +# After some seconds + +> state +router # child is also a valid state +Done +``` +The second device has joined the Thread network as a router (or a child). + +## Extension commands + +You can refer to the [extension command](https://github.com/espressif/esp-thread-br/blob/main/components/esp_ot_cli_extension/README.md) about the extension commands. diff --git a/examples/openthread/ot_trel/main/CMakeLists.txt b/examples/openthread/ot_trel/main/CMakeLists.txt new file mode 100644 index 000000000000..cea684e5f9f0 --- /dev/null +++ b/examples/openthread/ot_trel/main/CMakeLists.txt @@ -0,0 +1,2 @@ +idf_component_register(SRCS "esp_ot_trel.c" + INCLUDE_DIRS ".") diff --git a/examples/openthread/ot_trel/main/Kconfig.projbuild b/examples/openthread/ot_trel/main/Kconfig.projbuild new file mode 100644 index 000000000000..32146234e0bc --- /dev/null +++ b/examples/openthread/ot_trel/main/Kconfig.projbuild @@ -0,0 +1,9 @@ +menu "OpenThread CLI Example" + + config OPENTHREAD_AUTO_START + bool 'Enable the automatic start mode.' + default False + help + If enabled, the Openthread Device will create or connect to thread network with pre-configured + network parameters automatically. Otherwise, user need to configure Thread via CLI command manually. +endmenu diff --git a/examples/openthread/ot_trel/main/esp_ot_config.h b/examples/openthread/ot_trel/main/esp_ot_config.h new file mode 100644 index 000000000000..be8eff0e21cb --- /dev/null +++ b/examples/openthread/ot_trel/main/esp_ot_config.h @@ -0,0 +1,58 @@ +/* + * SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: CC0-1.0 + * + * OpenThread Command Line Example + * + * This example code is in the Public Domain (or CC0 licensed, at your option.) + * + * Unless required by applicable law or agreed to in writing, this + * software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR + * CONDITIONS OF ANY KIND, either express or implied. + */ + +#pragma once + +#include "sdkconfig.h" +#include "esp_openthread_types.h" + +#define ESP_OPENTHREAD_DEFAULT_RADIO_CONFIG() \ + { \ + .radio_mode = RADIO_MODE_TREL, \ + } + +#if CONFIG_OPENTHREAD_CONSOLE_TYPE_UART +#define ESP_OPENTHREAD_DEFAULT_HOST_CONFIG() \ + { \ + .host_connection_mode = HOST_CONNECTION_MODE_CLI_UART, \ + .host_uart_config = { \ + .port = 0, \ + .uart_config = \ + { \ + .baud_rate = 115200, \ + .data_bits = UART_DATA_8_BITS, \ + .parity = UART_PARITY_DISABLE, \ + .stop_bits = UART_STOP_BITS_1, \ + .flow_ctrl = UART_HW_FLOWCTRL_DISABLE, \ + .rx_flow_ctrl_thresh = 0, \ + .source_clk = UART_SCLK_DEFAULT, \ + }, \ + .rx_pin = UART_PIN_NO_CHANGE, \ + .tx_pin = UART_PIN_NO_CHANGE, \ + }, \ + } +#elif CONFIG_OPENTHREAD_CONSOLE_TYPE_USB_SERIAL_JTAG +#define ESP_OPENTHREAD_DEFAULT_HOST_CONFIG() \ + { \ + .host_connection_mode = HOST_CONNECTION_MODE_CLI_USB, \ + .host_usb_config = USB_SERIAL_JTAG_DRIVER_CONFIG_DEFAULT(), \ + } +#endif + +#define ESP_OPENTHREAD_DEFAULT_PORT_CONFIG() \ + { \ + .storage_partition_name = "nvs", \ + .netif_queue_size = 10, \ + .task_queue_size = 10, \ + } diff --git a/examples/openthread/ot_trel/main/esp_ot_trel.c b/examples/openthread/ot_trel/main/esp_ot_trel.c new file mode 100644 index 000000000000..94c50799856f --- /dev/null +++ b/examples/openthread/ot_trel/main/esp_ot_trel.c @@ -0,0 +1,141 @@ +/* + * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: CC0-1.0 + * + * OpenThread Command Line Example + * + * This example code is in the Public Domain (or CC0 licensed, at your option.) + * + * Unless required by applicable law or agreed to in writing, this + * software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR + * CONDITIONS OF ANY KIND, either express or implied. +*/ + +#include +#include +#include + +#include "sdkconfig.h" +#include "esp_err.h" +#include "esp_event.h" +#include "esp_log.h" +#include "esp_netif.h" +#include "esp_netif_types.h" +#include "esp_openthread.h" +#include "esp_openthread_cli.h" +#include "esp_openthread_lock.h" +#include "esp_openthread_netif_glue.h" +#include "esp_openthread_types.h" +#include "esp_ot_config.h" +#include "esp_vfs_eventfd.h" +#include "driver/uart.h" +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "hal/uart_types.h" +#include "nvs_flash.h" +#include "openthread/cli.h" +#include "openthread/instance.h" +#include "openthread/logging.h" +#include "openthread/tasklet.h" +#include "esp_openthread_trel.h" +#include "protocol_examples_common.h" +#include "mdns.h" + +#if CONFIG_OPENTHREAD_STATE_INDICATOR_ENABLE +#include "ot_led_strip.h" +#endif + +#if CONFIG_OPENTHREAD_CLI_ESP_EXTENSION +#include "esp_ot_cli_extension.h" +#endif // CONFIG_OPENTHREAD_CLI_ESP_EXTENSION + + +#define TAG "ot_esp_trel" + +static esp_netif_t *init_openthread_netif(const esp_openthread_platform_config_t *config) +{ + esp_netif_config_t cfg = ESP_NETIF_DEFAULT_OPENTHREAD(); + esp_netif_t *netif = esp_netif_new(&cfg); + assert(netif != NULL); + ESP_ERROR_CHECK(esp_netif_attach(netif, esp_openthread_netif_glue_init(config))); + + return netif; +} + +static void ot_task_worker(void *aContext) +{ + esp_openthread_platform_config_t config = { + .radio_config = ESP_OPENTHREAD_DEFAULT_RADIO_CONFIG(), + .host_config = ESP_OPENTHREAD_DEFAULT_HOST_CONFIG(), + .port_config = ESP_OPENTHREAD_DEFAULT_PORT_CONFIG(), + }; + +#if !CONFIG_EXAMPLE_CONNECT_WIFI && !CONFIG_EXAMPLE_CONNECT_ETHERNET +#error No netif for TREL! +#endif + ESP_ERROR_CHECK(example_connect()); + assert(esp_openthread_get_trel_netif() == NULL); + esp_openthread_set_trel_netif(get_example_netif()); + + // Initialize the OpenThread stack + ESP_ERROR_CHECK(esp_openthread_init(&config)); + +#if CONFIG_OPENTHREAD_STATE_INDICATOR_ENABLE + ESP_ERROR_CHECK(esp_openthread_state_indicator_init(esp_openthread_get_instance())); +#endif + +#if CONFIG_OPENTHREAD_LOG_LEVEL_DYNAMIC + // The OpenThread log level directly matches ESP log level + (void)otLoggingSetLevel(CONFIG_LOG_DEFAULT_LEVEL); +#endif + // Initialize the OpenThread cli +#if CONFIG_OPENTHREAD_CLI + esp_openthread_cli_init(); +#endif + + esp_netif_t *openthread_netif; + // Initialize the esp_netif bindings + openthread_netif = init_openthread_netif(&config); + esp_netif_set_default_netif(openthread_netif); + +#if CONFIG_OPENTHREAD_CLI_ESP_EXTENSION + esp_cli_custom_command_init(); +#endif // CONFIG_OPENTHREAD_CLI_ESP_EXTENSION + + // Run the main loop +#if CONFIG_OPENTHREAD_CLI + esp_openthread_cli_create_task(); +#endif +#if CONFIG_OPENTHREAD_AUTO_START + otOperationalDatasetTlvs dataset; + otError error = otDatasetGetActiveTlvs(esp_openthread_get_instance(), &dataset); + ESP_ERROR_CHECK(esp_openthread_auto_start((error == OT_ERROR_NONE) ? &dataset : NULL)); +#endif + esp_openthread_launch_mainloop(); + + // Clean up + esp_openthread_netif_glue_deinit(); + esp_netif_destroy(openthread_netif); + + esp_vfs_eventfd_unregister(); + vTaskDelete(NULL); +} + +void app_main(void) +{ + // Used eventfds: + // * netif + // * ot task queue + esp_vfs_eventfd_config_t eventfd_config = { + .max_fds = 2, + }; + + ESP_ERROR_CHECK(nvs_flash_init()); + ESP_ERROR_CHECK(esp_event_loop_create_default()); + ESP_ERROR_CHECK(esp_netif_init()); + ESP_ERROR_CHECK(esp_vfs_eventfd_register(&eventfd_config)); + ESP_ERROR_CHECK(mdns_init()); + ESP_ERROR_CHECK(mdns_hostname_set("esp-ot-trel")); + xTaskCreate(ot_task_worker, "ot_trel_main", 8192, xTaskGetCurrentTaskHandle(), 5, NULL); +} diff --git a/examples/openthread/ot_trel/main/idf_component.yml b/examples/openthread/ot_trel/main/idf_component.yml new file mode 100644 index 000000000000..68d7abc65b5d --- /dev/null +++ b/examples/openthread/ot_trel/main/idf_component.yml @@ -0,0 +1,11 @@ +## IDF Component Manager Manifest File +dependencies: + espressif/esp_ot_cli_extension: + version: "~1.1.0" + espressif/mdns: "^1.0.3" + idf: + version: ">=4.1.0" + protocol_examples_common: + path: ${IDF_PATH}/examples/common_components/protocol_examples_common + ot_led: + path: ${IDF_PATH}/examples/openthread/ot_common_components/ot_led diff --git a/examples/openthread/ot_trel/partitions.csv b/examples/openthread/ot_trel/partitions.csv new file mode 100644 index 000000000000..641bcc9afcc4 --- /dev/null +++ b/examples/openthread/ot_trel/partitions.csv @@ -0,0 +1,5 @@ +# Name, Type, SubType, Offset, Size, Flags +# Note: if you have increased the bootloader size, make sure to update the offsets to avoid overlap +nvs, data, nvs, 0x9000, 0x6000, +phy_init, data, phy, 0xf000, 0x1000, +factory, app, factory, 0x10000, 0x170000, diff --git a/examples/openthread/ot_trel/sdkconfig.defaults b/examples/openthread/ot_trel/sdkconfig.defaults new file mode 100644 index 000000000000..0e7a865be633 --- /dev/null +++ b/examples/openthread/ot_trel/sdkconfig.defaults @@ -0,0 +1,42 @@ +# +# Partition Table +# +CONFIG_PARTITION_TABLE_CUSTOM=y +CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions.csv" +CONFIG_PARTITION_TABLE_FILENAME="partitions.csv" +CONFIG_PARTITION_TABLE_OFFSET=0x8000 +CONFIG_PARTITION_TABLE_MD5=y +# end of Partition Table + +# +# mbedTLS +# +CONFIG_MBEDTLS_CMAC_C=y +CONFIG_MBEDTLS_SSL_PROTO_DTLS=y +CONFIG_MBEDTLS_KEY_EXCHANGE_ECJPAKE=y +CONFIG_MBEDTLS_ECJPAKE_C=y +# end of mbedTLS + +# +# OpenThread +# +CONFIG_OPENTHREAD_ENABLED=y +CONFIG_OPENTHREAD_BORDER_ROUTER=n +CONFIG_OPENTHREAD_DNS64_CLIENT=y +CONFIG_OPENTHREAD_RADIO_154_NONE=y +CONFIG_OPENTHREAD_RADIO_TREL=y +# end of OpenThread + +# +# lwIP +# +CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=4096 +CONFIG_LWIP_IPV6_NUM_ADDRESSES=8 +CONFIG_LWIP_MULTICAST_PING=y +CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_CUSTOM=y +# end of lwIP + +# +# Configurations for optimizing the size of firmware +# +CONFIG_COMPILER_OPTIMIZATION_SIZE=y From 99f1eace072cdc79d41c46312d9c206f8828117f Mon Sep 17 00:00:00 2001 From: "C.S.M" Date: Sat, 12 Oct 2024 15:09:03 +0800 Subject: [PATCH 163/365] feat(bod): Update bod threshold on esp32p4-eco2 --- .../esp_hw_support/port/esp32p4/Kconfig.hw_support | 7 +++++-- components/hal/esp32h2/include/hal/brownout_ll.h | 3 ++- components/hal/esp32p4/include/hal/brownout_ll.h | 3 ++- components/soc/esp32h2/include/soc/regi2c_brownout.h | 12 ++++++++---- components/soc/esp32p4/include/soc/regi2c_brownout.h | 11 +++++++---- 5 files changed, 24 insertions(+), 12 deletions(-) diff --git a/components/esp_hw_support/port/esp32p4/Kconfig.hw_support b/components/esp_hw_support/port/esp32p4/Kconfig.hw_support index fe31a3aebef1..46f9a88f302c 100644 --- a/components/esp_hw_support/port/esp32p4/Kconfig.hw_support +++ b/components/esp_hw_support/port/esp32p4/Kconfig.hw_support @@ -13,12 +13,15 @@ choice ESP32P4_REV_MIN bool "Rev v0.0" config ESP32P4_REV_MIN_1 bool "Rev v0.1" + config ESP32P4_REV_MIN_100 + bool "Rev v1.0" endchoice config ESP32P4_REV_MIN_FULL int default 0 if ESP32P4_REV_MIN_0 default 1 if ESP32P4_REV_MIN_1 + default 100 if ESP32P4_REV_MIN_100 config ESP_REV_MIN_FULL int @@ -28,7 +31,7 @@ config ESP_REV_MIN_FULL # MAX Revision # - comment "Maximum Supported ESP32-P4 Revision (Rev v0.99)" + comment "Maximum Supported ESP32-P4 Revision (Rev v1.99)" # Maximum revision that IDF supports. # It can not be changed by user. # Only Espressif can change it when a new version will be supported in IDF. @@ -36,7 +39,7 @@ config ESP_REV_MIN_FULL config ESP32P4_REV_MAX_FULL int - default 99 + default 199 # keep in sync the "Maximum Supported Revision" description with this value config ESP_REV_MAX_FULL diff --git a/components/hal/esp32h2/include/hal/brownout_ll.h b/components/hal/esp32h2/include/hal/brownout_ll.h index 6553c8bd1419..9dce284ac8b0 100644 --- a/components/hal/esp32h2/include/hal/brownout_ll.h +++ b/components/hal/esp32h2/include/hal/brownout_ll.h @@ -69,7 +69,8 @@ static inline void brownout_ll_reset_config(bool reset_ena, uint32_t reset_wait, */ static inline void brownout_ll_set_threshold(uint8_t threshold) { - REGI2C_WRITE_MASK(I2C_BOD, I2C_BOD_THRESHOLD, threshold); + REGI2C_WRITE_MASK(I2C_BOD, I2C_BOD_THRESHOLD_L, threshold); + REGI2C_WRITE_MASK(I2C_BOD, I2C_BOD_THRESHOLD_H, threshold); } /** diff --git a/components/hal/esp32p4/include/hal/brownout_ll.h b/components/hal/esp32p4/include/hal/brownout_ll.h index 8327f9f8901c..91e0e4560d05 100644 --- a/components/hal/esp32p4/include/hal/brownout_ll.h +++ b/components/hal/esp32p4/include/hal/brownout_ll.h @@ -68,7 +68,8 @@ static inline void brownout_ll_reset_config(bool reset_ena, uint32_t reset_wait, */ static inline void brownout_ll_set_threshold(uint8_t threshold) { - REGI2C_WRITE_MASK(I2C_BOD, I2C_BOD_THRESHOLD, threshold); + REGI2C_WRITE_MASK(I2C_BOD, I2C_BOD_THRESHOLD_L, threshold); + REGI2C_WRITE_MASK(I2C_BOD, I2C_BOD_THRESHOLD_H, threshold); } /** diff --git a/components/soc/esp32h2/include/soc/regi2c_brownout.h b/components/soc/esp32h2/include/soc/regi2c_brownout.h index 9daf67f093b3..0d2caf531c15 100644 --- a/components/soc/esp32h2/include/soc/regi2c_brownout.h +++ b/components/soc/esp32h2/include/soc/regi2c_brownout.h @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -44,6 +44,10 @@ #define I2C_PMU_OR_DREFH_VDDA_MSB 7 #define I2C_PMU_OR_DREFH_VDDA_LSB 5 -#define I2C_BOD_THRESHOLD I2C_PMU_OR_DREFL_VDDA -#define I2C_BOD_THRESHOLD_MSB I2C_PMU_OR_DREFL_VDDA_MSB -#define I2C_BOD_THRESHOLD_LSB I2C_PMU_OR_DREFL_VDDA_LSB +#define I2C_BOD_THRESHOLD_L I2C_PMU_OR_DREFL_VDDA +#define I2C_BOD_THRESHOLD_L_MSB I2C_PMU_OR_DREFL_VDDA_MSB +#define I2C_BOD_THRESHOLD_L_LSB I2C_PMU_OR_DREFL_VDDA_LSB + +#define I2C_BOD_THRESHOLD_H I2C_PMU_OR_DREFH_VDDA +#define I2C_BOD_THRESHOLD_H_MSB I2C_PMU_OR_DREFH_VDDA_MSB +#define I2C_BOD_THRESHOLD_H_LSB I2C_PMU_OR_DREFH_VDDA_LSB diff --git a/components/soc/esp32p4/include/soc/regi2c_brownout.h b/components/soc/esp32p4/include/soc/regi2c_brownout.h index 0504a137056f..b7297808f491 100644 --- a/components/soc/esp32p4/include/soc/regi2c_brownout.h +++ b/components/soc/esp32p4/include/soc/regi2c_brownout.h @@ -14,9 +14,12 @@ * bus. These definitions are used via macros defined in regi2c_ctrl.h. */ -#define I2C_BOD 0x61 +#define I2C_BOD 0x6a #define I2C_BOD_HOSTID 0 -#define I2C_BOD_THRESHOLD 0x5 -#define I2C_BOD_THRESHOLD_MSB 2 -#define I2C_BOD_THRESHOLD_LSB 0 +#define I2C_BOD_THRESHOLD_L 0x9 +#define I2C_BOD_THRESHOLD_L_MSB 4 +#define I2C_BOD_THRESHOLD_L_LSB 2 +#define I2C_BOD_THRESHOLD_H 0x9 +#define I2C_BOD_THRESHOLD_H_MSB 7 +#define I2C_BOD_THRESHOLD_H_LSB 5 From a26858618ae86a9e6cdf3dd0b61de66ca018136f Mon Sep 17 00:00:00 2001 From: diplfranzhoepfinger Date: Fri, 28 Jun 2024 13:22:17 +0200 Subject: [PATCH 164/365] fix(esp_wifi): Correct typos in example/scan.c Closes https://github.com/espressif/esp-idf/issues/14102 Closes https://github.com/espressif/esp-idf/pull/14103 --- examples/wifi/scan/main/scan.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/examples/wifi/scan/main/scan.c b/examples/wifi/scan/main/scan.c index 243b4a7a98f8..1f4be36b2244 100644 --- a/examples/wifi/scan/main/scan.c +++ b/examples/wifi/scan/main/scan.c @@ -22,7 +22,7 @@ #define DEFAULT_SCAN_LIST_SIZE CONFIG_EXAMPLE_SCAN_LIST_SIZE #ifdef CONFIG_EXAMPLE_USE_SCAN_CHANNEL_BITMAP -#define USE_CHANNEL_BTIMAP 1 +#define USE_CHANNEL_BITMAP 1 #define CHANNEL_LIST_SIZE 3 static uint8_t channel_list[CHANNEL_LIST_SIZE] = {1, 6, 11}; #endif /*CONFIG_EXAMPLE_USE_SCAN_CHANNEL_BITMAP*/ @@ -140,7 +140,7 @@ static void print_cipher_type(int pairwise_cipher, int group_cipher) } } -#ifdef USE_CHANNEL_BTIMAP +#ifdef USE_CHANNEL_BITMAP static void array_2_channel_bitmap(const uint8_t channel_list[], const uint8_t channel_list_size, wifi_scan_config_t *scan_config) { for(uint8_t i = 0; i < channel_list_size; i++) { @@ -148,7 +148,7 @@ static void array_2_channel_bitmap(const uint8_t channel_list[], const uint8_t c scan_config->channel_bitmap.ghz_2_channels |= (1 << channel); } } -#endif /*USE_CHANNEL_BTIMAP*/ +#endif /*USE_CHANNEL_BITMAP*/ /* Initialize Wi-Fi as sta and set scan method */ @@ -171,7 +171,7 @@ static void wifi_scan(void) ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA)); ESP_ERROR_CHECK(esp_wifi_start()); -#ifdef USE_CHANNEL_BTIMAP +#ifdef USE_CHANNEL_BITMAP wifi_scan_config_t *scan_config = (wifi_scan_config_t *)calloc(1,sizeof(wifi_scan_config_t)); if (!scan_config) { ESP_LOGE(TAG, "Memory Allocation for scan config failed!"); @@ -183,7 +183,7 @@ static void wifi_scan(void) #else esp_wifi_scan_start(NULL, true); -#endif /*USE_CHANNEL_BTIMAP*/ +#endif /*USE_CHANNEL_BITMAP*/ ESP_LOGI(TAG, "Max AP number ap_info can hold = %u", number); ESP_ERROR_CHECK(esp_wifi_scan_get_ap_num(&ap_count)); From 72bbb8c857fd4b6d7f6d992233b2abd6a6c1f7b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20M=C3=BAdry?= Date: Fri, 11 Oct 2024 18:39:06 +0200 Subject: [PATCH 165/365] fix(sdmmc): Retry to get another RCA if the previous response was 0 --- components/sdmmc/sdmmc_cmd.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/components/sdmmc/sdmmc_cmd.c b/components/sdmmc/sdmmc_cmd.c index fb18a9d69629..ccd854028722 100644 --- a/components/sdmmc/sdmmc_cmd.c +++ b/components/sdmmc/sdmmc_cmd.c @@ -264,7 +264,22 @@ esp_err_t sdmmc_send_cmd_set_relative_addr(sdmmc_card_t* card, uint16_t* out_rca if (err != ESP_OK) { return err; } - *out_rca = (card->is_mmc) ? mmc_rca : SD_R6_RCA(cmd.response); + + if (card->is_mmc) { + *out_rca = mmc_rca; + } else { + uint16_t response_rca = SD_R6_RCA(cmd.response); + if (response_rca == 0) { + // Try to get another RCA value if RCA value in the previous response was 0x0000 + // The value 0x0000 is reserved to set all cards into the Stand-by State with CMD7 + err = sdmmc_send_cmd(card, &cmd); + if (err != ESP_OK) { + return err; + } + response_rca = SD_R6_RCA(cmd.response); + } + *out_rca = response_rca; + } return ESP_OK; } From 73aede6cc9d0c182faaf088babf4a990f84c0497 Mon Sep 17 00:00:00 2001 From: Xu Si Yu Date: Wed, 11 Sep 2024 22:00:59 +0800 Subject: [PATCH 166/365] feat(openthread): allow enabling trel before getting interface --- components/openthread/CMakeLists.txt | 2 +- components/openthread/Kconfig | 2 +- .../openthread/include/esp_openthread_trel.h | 38 --------- .../openthread-core-esp32x-ftd-config.h | 2 +- .../src/port/esp_openthread_radio.c | 2 +- .../openthread/src/port/esp_openthread_trel.c | 80 +++++++------------ examples/openthread/.build-test-rules.yml | 3 + examples/openthread/ot_trel/README.md | 7 +- .../openthread/ot_trel/main/Kconfig.projbuild | 2 +- .../openthread/ot_trel/main/esp_ot_trel.c | 10 +-- .../openthread/ot_trel/main/idf_component.yml | 2 +- examples/openthread/ot_trel/sdkconfig.ci.trel | 3 + .../openthread/ot_trel/sdkconfig.defaults | 1 + examples/openthread/pytest_otbr.py | 53 ++++++++++++ 14 files changed, 103 insertions(+), 104 deletions(-) delete mode 100644 components/openthread/include/esp_openthread_trel.h create mode 100644 examples/openthread/ot_trel/sdkconfig.ci.trel diff --git a/components/openthread/CMakeLists.txt b/components/openthread/CMakeLists.txt index 0b555bbf04ef..66119f65aa40 100644 --- a/components/openthread/CMakeLists.txt +++ b/components/openthread/CMakeLists.txt @@ -272,7 +272,7 @@ idf_component_register(SRC_DIRS "${src_dirs}" ieee802154 mbedtls nvs_flash) if(CONFIG_OPENTHREAD_RADIO_TREL) -idf_component_optional_requires(PRIVATE espressif__mdns) + idf_component_optional_requires(PRIVATE espressif__mdns) endif() if(CONFIG_OPENTHREAD_ENABLED OR CONFIG_OPENTHREAD_SPINEL_ONLY) diff --git a/components/openthread/Kconfig b/components/openthread/Kconfig index 9ae0a6c63b98..d344f5961529 100644 --- a/components/openthread/Kconfig +++ b/components/openthread/Kconfig @@ -132,7 +132,7 @@ menu "OpenThread" config OPENTHREAD_RADIO_TREL bool "Enable Thread Radio Encapsulation Link (TREL)" - depends on SOC_WIFI_SUPPORTED + depends on EXAMPLE_CONNECT_WIFI || EXAMPLE_CONNECT_ETHERNET default n help Select this option to enable Thread Radio Encapsulation Link. diff --git a/components/openthread/include/esp_openthread_trel.h b/components/openthread/include/esp_openthread_trel.h deleted file mode 100644 index c2dc8c58b47a..000000000000 --- a/components/openthread/include/esp_openthread_trel.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ - -#pragma once - -#include "sdkconfig.h" -#include "esp_netif.h" -#include "esp_netif_types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @brief Sets the interface used for trel feature. - * - * @note This function must be called after connect to wifi/ethernet - * - * @param[in] trel_netif The network interface (WiFi or ethernet) - * - */ -void esp_openthread_set_trel_netif(esp_netif_t *trel_netif); - -/** - * @brief Gets the trel interface of OpenThread device. - * - * @return - * The trel interface or NULL if trel not initialized. - * - */ -esp_netif_t *esp_openthread_get_trel_netif(void); - -#ifdef __cplusplus -} -#endif diff --git a/components/openthread/private_include/openthread-core-esp32x-ftd-config.h b/components/openthread/private_include/openthread-core-esp32x-ftd-config.h index 0cd3542a9146..ec9480150594 100644 --- a/components/openthread/private_include/openthread-core-esp32x-ftd-config.h +++ b/components/openthread/private_include/openthread-core-esp32x-ftd-config.h @@ -231,7 +231,7 @@ * Set to 1 to enable support for IEEE802.15.4 radio link. * */ -#if CONFIG_OPENTHREAD_RADIO_NATIVE || CONFIG_OPENTHREAD_RADIO_SPINEL_UART || CONFIG_OPENTHREAD_RADIO_SPINEL_SPI +#if !CONFIG_OPENTHREAD_RADIO_154_NONE #define OPENTHREAD_CONFIG_RADIO_LINK_IEEE_802_15_4_ENABLE 1 #else #define OPENTHREAD_CONFIG_RADIO_LINK_IEEE_802_15_4_ENABLE 0 diff --git a/components/openthread/src/port/esp_openthread_radio.c b/components/openthread/src/port/esp_openthread_radio.c index aac760c260da..3e0f4286fe18 100644 --- a/components/openthread/src/port/esp_openthread_radio.c +++ b/components/openthread/src/port/esp_openthread_radio.c @@ -7,7 +7,6 @@ #include #include "esp_openthread_radio.h" -#include "openthread/error.h" #include "esp_err.h" #include "sdkconfig.h" #include "esp_check.h" @@ -25,6 +24,7 @@ #include "rom/ets_sys.h" #include "openthread-core-config.h" +#include "openthread/error.h" #include "openthread/link.h" #include "openthread/platform/diag.h" #include "openthread/platform/radio.h" diff --git a/components/openthread/src/port/esp_openthread_trel.c b/components/openthread/src/port/esp_openthread_trel.c index 69c43f00ec76..8424a7631d43 100644 --- a/components/openthread/src/port/esp_openthread_trel.c +++ b/components/openthread/src/port/esp_openthread_trel.c @@ -17,21 +17,17 @@ #include "mdns.h" #include "esp_netif_ip_addr.h" #include "esp_openthread.h" +#include "esp_openthread_border_router.h" #include "esp_openthread_common_macro.h" #include "esp_openthread_lock.h" #include "esp_openthread_radio.h" #include "esp_openthread_task_queue.h" -#include "esp_openthread_trel.h" #include "lwip/pbuf.h" #include "lwip/tcpip.h" #include "lwip/udp.h" #include "openthread/trel.h" #include "openthread/platform/diag.h" -#if CONFIG_OPENTHREAD_BORDER_ROUTER -#include "esp_openthread_border_router.h" -#endif - static esp_netif_t *s_trel_netif = NULL; static otPlatTrelCounters s_trel_counters; @@ -61,8 +57,7 @@ static bool s_is_service_registered = false; static void trel_browse_notifier(mdns_result_t *result) { while (result) { - - if (result->addr->addr.type == IPADDR_TYPE_V6) { + if (result->addr && result->addr->addr.type == IPADDR_TYPE_V6) { otPlatTrelPeerInfo info; uint8_t trel_txt[1024] = {0}; uint16_t trel_txt_len = 0; @@ -76,21 +71,19 @@ static void trel_browse_notifier(mdns_result_t *result) trel_txt_len += result->txt_value_len[index]; index++; } - + if (!s_trel_netif) { + s_trel_netif = result->esp_netif; + } info.mTxtData = trel_txt; info.mTxtLength = trel_txt_len; info.mSockAddr.mPort = result->port; - memcpy(info.mSockAddr.mAddress.mFields.m32, result->addr->addr.u_addr.ip6.addr, OT_IP6_ADDRESS_SIZE); - info.mRemoved = (result->ttl == 0); - ESP_LOGI(OT_PLAT_LOG_TAG, "Found TREL peer: address: %s, port:%d", ip6addr_ntoa(((ip6_addr_t*)(&result->addr->addr.u_addr.ip6))), info.mSockAddr.mPort); - + ESP_LOGI(OT_PLAT_LOG_TAG, "%s TREL peer: address: %s, port:%d", info.mRemoved ? "Remove" : "Found", ip6addr_ntoa(((ip6_addr_t*)(&result->addr->addr.u_addr.ip6))), info.mSockAddr.mPort); esp_openthread_task_switching_lock_acquire(portMAX_DELAY); otPlatTrelHandleDiscoveredPeerInfo(esp_openthread_get_instance(), &info); esp_openthread_task_switching_lock_release(); } - result = result->next; } } @@ -125,7 +118,6 @@ static void trel_recv_task(void *ctx) static void handle_trel_udp_recv(void *ctx, struct udp_pcb *pcb, struct pbuf *p, const ip_addr_t *addr, uint16_t port) { ESP_LOGD(OT_PLAT_LOG_TAG, "Receive from %s:%d", ip6addr_ntoa(&(addr->u_addr.ip6)), port); - if (esp_openthread_task_queue_post(trel_recv_task, p) != ESP_OK) { ESP_LOGE(OT_PLAT_LOG_TAG, "Failed to receive OpenThread TREL message"); } @@ -138,7 +130,6 @@ static esp_err_t ot_new_trel(void *ctx) task->trel_pcb = udp_new(); ESP_RETURN_ON_FALSE(task->trel_pcb != NULL, ESP_ERR_NO_MEM, OT_PLAT_LOG_TAG, "Failed to create a new UDP pcb"); udp_bind(task->trel_pcb, IP6_ADDR_ANY, task->port); - udp_bind_netif(task->trel_pcb, netif_get_by_index(esp_netif_get_netif_impl_index(s_trel_netif))); udp_recv(task->trel_pcb, handle_trel_udp_recv, NULL); return ESP_OK; } @@ -146,11 +137,6 @@ static esp_err_t ot_new_trel(void *ctx) void otPlatTrelEnable(otInstance *aInstance, uint16_t *aUdpPort) { *aUdpPort = s_ot_trel.port; - if (s_trel_netif == NULL) { - ESP_LOGE(OT_PLAT_LOG_TAG, "netif for trel is not set"); - assert(false); - } - esp_openthread_task_switching_lock_release(); esp_err_t err = esp_netif_tcpip_exec(ot_new_trel, &s_ot_trel); if (err != ESP_OK) { @@ -179,12 +165,10 @@ static void trel_send_task(void *ctx) ExitNow(); } memcpy(send_buf->payload, task->payload, task->length); - err = udp_sendto_if(task->pcb, send_buf, &task->peer_addr, task->peer_port, netif_get_by_index(task->pcb->netif_idx)); if(err != ERR_OK) { ESP_LOGE(OT_PLAT_LOG_TAG, "Fail to send trel msg to %s:%d %d (%d)", ip6addr_ntoa(&(task->peer_addr.u_addr.ip6)), task->peer_port, task->pcb->netif_idx, err); } - exit: pbuf_free(send_buf); free(task); @@ -195,6 +179,10 @@ void otPlatTrelSend(otInstance *aInstance, uint16_t aUdpPayloadLen, const otSockAddr *aDestSockAddr) { + if (!s_trel_netif) { + ESP_LOGE(OT_PLAT_LOG_TAG, "None Thread TREL interface"); + return; + } ot_trel_send_task_t *task = (ot_trel_send_task_t *)malloc(sizeof(ot_trel_send_task_t)); if (task == NULL) { ESP_LOGE(OT_PLAT_LOG_TAG, "Failed to allocate buf for Thread TREL"); @@ -205,7 +193,6 @@ void otPlatTrelSend(otInstance *aInstance, ESP_LOGD(OT_PLAT_LOG_TAG, "send trel msg to %s:%d", ip6addr_ntoa(&(task->peer_addr.u_addr.ip6)), task->peer_port); task->payload = aUdpPayload; task->length = aUdpPayloadLen; - esp_openthread_task_switching_lock_release(); tcpip_callback(trel_send_task, task); esp_openthread_task_switching_lock_acquire(portMAX_DELAY); @@ -214,11 +201,11 @@ void otPlatTrelSend(otInstance *aInstance, void otPlatTrelRegisterService(otInstance *aInstance, uint16_t aPort, const uint8_t *aTxtData, uint8_t aTxtLength) { esp_err_t ret = ESP_OK; + esp_openthread_task_switching_lock_release(); if (s_is_service_registered) { mdns_service_remove(TREL_MDNS_TYPE, TREL_MDNS_PROTO); } - mdns_service_add(NULL, TREL_MDNS_TYPE, TREL_MDNS_PROTO, aPort, NULL, 0); s_is_service_registered = true; uint16_t index = 0; @@ -276,53 +263,45 @@ const otPlatTrelCounters *otPlatTrelGetCounters(otInstance *aInstance) return &s_trel_counters; } -void esp_openthread_set_trel_netif(esp_netif_t *trel_netif) -{ - s_trel_netif = trel_netif; -} - -esp_netif_t *esp_openthread_get_trel_netif(void) -{ - return s_trel_netif; -} - +// TODO: TZ-1169 OT_TOOL_WEAK otError otPlatRadioSetTransmitPower(otInstance *aInstance, int8_t aPower) { - ESP_LOGW(OT_PLAT_LOG_TAG, "Running in TREL mode and not support `otPlatRadioSetTransmitPower`"); - return OT_ERROR_NONE; + ESP_LOGD(OT_PLAT_LOG_TAG, "Running in TREL mode and not support `otPlatRadioSetTransmitPower`"); + return OT_ERROR_NOT_IMPLEMENTED; } OT_TOOL_WEAK otError otPlatRadioGetTransmitPower(otInstance *aInstance, int8_t *aPower) { - ESP_LOGW(OT_PLAT_LOG_TAG, "Running in TREL mode and not support `otPlatRadioGetTransmitPower`"); - return OT_ERROR_NONE; + ESP_LOGD(OT_PLAT_LOG_TAG, "Running in TREL mode and not support `otPlatRadioGetTransmitPower`"); + return OT_ERROR_NOT_IMPLEMENTED; } OT_TOOL_WEAK bool otPlatRadioGetPromiscuous(otInstance *aInstance) { - ESP_LOGW(OT_PLAT_LOG_TAG, "Running in TREL mode and not support `otPlatRadioGetPromiscuous`"); + ESP_LOGD(OT_PLAT_LOG_TAG, "Running in TREL mode and not support `otPlatRadioGetPromiscuous`"); return false; } OT_TOOL_WEAK otError otPlatRadioSetCcaEnergyDetectThreshold(otInstance *aInstance, int8_t aThreshold) { - ESP_LOGW(OT_PLAT_LOG_TAG, "Running in TREL mode and not support `otPlatRadioSetCcaEnergyDetectThreshold`"); - return OT_ERROR_NONE; + ESP_LOGD(OT_PLAT_LOG_TAG, "Running in TREL mode and not support `otPlatRadioSetCcaEnergyDetectThreshold`"); + return OT_ERROR_NOT_IMPLEMENTED; } OT_TOOL_WEAK otError otPlatRadioGetCcaEnergyDetectThreshold(otInstance *aInstance, int8_t *aThreshold) { - ESP_LOGW(OT_PLAT_LOG_TAG, "Running in TREL mode and not support `otPlatRadioGetCcaEnergyDetectThreshold`"); - return OT_ERROR_NONE; + ESP_LOGD(OT_PLAT_LOG_TAG, "Running in TREL mode and not support `otPlatRadioGetCcaEnergyDetectThreshold`"); + return OT_ERROR_NOT_IMPLEMENTED; } OT_TOOL_WEAK void otPlatRadioGetIeeeEui64(otInstance *aInstance, uint8_t *aIeeeEui64) { - ESP_LOGW(OT_PLAT_LOG_TAG, "Running in TREL mode and not support `otPlatRadioGetIeeeEui64`"); + ESP_LOGD(OT_PLAT_LOG_TAG, "Running in TREL mode and not support `otPlatRadioGetIeeeEui64`"); } OT_TOOL_WEAK otRadioFrame *otPlatRadioGetTransmitBuffer(otInstance *aInstance) { + ESP_LOGD(OT_PLAT_LOG_TAG, "Running in TREL mode and not support `otPlatRadioGetTransmitBuffer`"); return NULL; } @@ -330,34 +309,33 @@ OT_TOOL_WEAK otRadioFrame *otPlatRadioGetTransmitBuffer(otInstance *aInstance) OT_TOOL_WEAK void otPlatDiagSetOutputCallback(otInstance *aInstance, otPlatDiagOutputCallback aCallback, void *aContext) { - OT_UNUSED_VARIABLE(aInstance); - OT_UNUSED_VARIABLE(aCallback); - OT_UNUSED_VARIABLE(aContext); + ESP_LOGD(OT_PLAT_LOG_TAG, "Running in TREL mode and not support `otPlatDiagSetOutputCallback`"); } OT_TOOL_WEAK void otPlatDiagModeSet(bool mode) { - ESP_LOGW(OT_PLAT_LOG_TAG, "Running in TREL mode and not support `otPlatDiagModeSet`"); + ESP_LOGD(OT_PLAT_LOG_TAG, "Running in TREL mode and not support `otPlatDiagModeSet`"); } OT_TOOL_WEAK bool otPlatDiagModeGet(void) { + ESP_LOGD(OT_PLAT_LOG_TAG, "Running in TREL mode and not support `otPlatDiagModeGet`"); return false; } OT_TOOL_WEAK void otPlatDiagTxPowerSet(int8_t tx_power) { - ESP_LOGW(OT_PLAT_LOG_TAG, "Running in TREL mode and not support `otPlatDiagTxPowerSet`"); + ESP_LOGD(OT_PLAT_LOG_TAG, "Running in TREL mode and not support `otPlatDiagTxPowerSet`"); } OT_TOOL_WEAK void otPlatDiagChannelSet(uint8_t channel) { - ESP_LOGW(OT_PLAT_LOG_TAG, "Running in TREL mode and not support `otPlatDiagChannelSet`"); + ESP_LOGD(OT_PLAT_LOG_TAG, "Running in TREL mode and not support `otPlatDiagChannelSet`"); } OT_TOOL_WEAK void otPlatDiagAlarmCallback(otInstance *aInstance) { - ESP_LOGW(OT_PLAT_LOG_TAG, "Running in TREL mode and not support `otPlatDiagAlarmCallback`"); + ESP_LOGD(OT_PLAT_LOG_TAG, "Running in TREL mode and not support `otPlatDiagAlarmCallback`"); } #endif // CONFIG_OPENTHREAD_DIAG diff --git a/examples/openthread/.build-test-rules.yml b/examples/openthread/.build-test-rules.yml index 81dfa9d20d67..9b1091798958 100644 --- a/examples/openthread/.build-test-rules.yml +++ b/examples/openthread/.build-test-rules.yml @@ -63,4 +63,7 @@ examples/openthread/ot_sleepy_device/light_sleep: examples/openthread/ot_trel: enable: - if: SOC_WIFI_SUPPORTED == 1 + disable_test: + - if: IDF_TARGET not in ["esp32c6", "esp32s3"] + reason: only test on esp32c6 and esp32s3 <<: *openthread_dependencies diff --git a/examples/openthread/ot_trel/README.md b/examples/openthread/ot_trel/README.md index ca6e9942d5a1..5cc60dfa2f12 100644 --- a/examples/openthread/ot_trel/README.md +++ b/examples/openthread/ot_trel/README.md @@ -1,5 +1,5 @@ -| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-S2 | ESP32-S3 | -| ----------------- | ----- | -------- | -------- | -------- | -------- | -------- | -------- | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | -------- | # Thread Radio Encapsulation Link Example @@ -34,7 +34,8 @@ Component config → ESP System Settings → Channel for console output → USB Build the project and flash it to the board, then run monitor tool to view serial output: ``` -idf.py -p PORT build flash monitor +idf.py build +idf.py -p PORT erase-flash flash monitor ``` Now you'll get an OpenThread command line shell. diff --git a/examples/openthread/ot_trel/main/Kconfig.projbuild b/examples/openthread/ot_trel/main/Kconfig.projbuild index 32146234e0bc..7a37072f9494 100644 --- a/examples/openthread/ot_trel/main/Kconfig.projbuild +++ b/examples/openthread/ot_trel/main/Kconfig.projbuild @@ -1,4 +1,4 @@ -menu "OpenThread CLI Example" +menu "OpenThread TREL Example" config OPENTHREAD_AUTO_START bool 'Enable the automatic start mode.' diff --git a/examples/openthread/ot_trel/main/esp_ot_trel.c b/examples/openthread/ot_trel/main/esp_ot_trel.c index 94c50799856f..05b7251da4fc 100644 --- a/examples/openthread/ot_trel/main/esp_ot_trel.c +++ b/examples/openthread/ot_trel/main/esp_ot_trel.c @@ -38,10 +38,13 @@ #include "openthread/instance.h" #include "openthread/logging.h" #include "openthread/tasklet.h" -#include "esp_openthread_trel.h" #include "protocol_examples_common.h" #include "mdns.h" +#if !CONFIG_EXAMPLE_CONNECT_WIFI && !CONFIG_EXAMPLE_CONNECT_ETHERNET +#error No netif for TREL! +#endif + #if CONFIG_OPENTHREAD_STATE_INDICATOR_ENABLE #include "ot_led_strip.h" #endif @@ -71,12 +74,7 @@ static void ot_task_worker(void *aContext) .port_config = ESP_OPENTHREAD_DEFAULT_PORT_CONFIG(), }; -#if !CONFIG_EXAMPLE_CONNECT_WIFI && !CONFIG_EXAMPLE_CONNECT_ETHERNET -#error No netif for TREL! -#endif ESP_ERROR_CHECK(example_connect()); - assert(esp_openthread_get_trel_netif() == NULL); - esp_openthread_set_trel_netif(get_example_netif()); // Initialize the OpenThread stack ESP_ERROR_CHECK(esp_openthread_init(&config)); diff --git a/examples/openthread/ot_trel/main/idf_component.yml b/examples/openthread/ot_trel/main/idf_component.yml index 68d7abc65b5d..a52a17085f02 100644 --- a/examples/openthread/ot_trel/main/idf_component.yml +++ b/examples/openthread/ot_trel/main/idf_component.yml @@ -1,7 +1,7 @@ ## IDF Component Manager Manifest File dependencies: espressif/esp_ot_cli_extension: - version: "~1.1.0" + version: "~1.2.0" espressif/mdns: "^1.0.3" idf: version: ">=4.1.0" diff --git a/examples/openthread/ot_trel/sdkconfig.ci.trel b/examples/openthread/ot_trel/sdkconfig.ci.trel new file mode 100644 index 000000000000..994413fa4fcb --- /dev/null +++ b/examples/openthread/ot_trel/sdkconfig.ci.trel @@ -0,0 +1,3 @@ +CONFIG_EXAMPLE_CONNECT_WIFI=y +CONFIG_EXAMPLE_WIFI_SSID="OTCITE" +CONFIG_EXAMPLE_WIFI_PASSWORD="otcitest888" diff --git a/examples/openthread/ot_trel/sdkconfig.defaults b/examples/openthread/ot_trel/sdkconfig.defaults index 0e7a865be633..99f65081b92b 100644 --- a/examples/openthread/ot_trel/sdkconfig.defaults +++ b/examples/openthread/ot_trel/sdkconfig.defaults @@ -34,6 +34,7 @@ CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=4096 CONFIG_LWIP_IPV6_NUM_ADDRESSES=8 CONFIG_LWIP_MULTICAST_PING=y CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_CUSTOM=y +CONFIG_LWIP_IPV6_AUTOCONFIG=y # end of lwIP # diff --git a/examples/openthread/pytest_otbr.py b/examples/openthread/pytest_otbr.py index 604862d8d34f..2abb6e4cb9c5 100644 --- a/examples/openthread/pytest_otbr.py +++ b/examples/openthread/pytest_otbr.py @@ -59,6 +59,9 @@ # Case 14: Curl a website over HTTPS via DNS and NAT64 # A border router joins a Wi-Fi network and forms a Thread network, a Thread devices attached to it and curl a https website. +# Case 15: Thread network formation and attaching with TREL +# A TREL device forms a Thread network, other TREL devices attach to it, then test ping connection between them. + @pytest.fixture(scope='module', name='Init_avahi') def fixture_Init_avahi() -> bool: @@ -792,3 +795,53 @@ def test_https_NAT64_DNS(Init_interface:bool, dut: Tuple[IdfDut, IdfDut, IdfDut] ocf.execute_command(br, 'factoryreset') ocf.execute_command(cli, 'factoryreset') time.sleep(3) + + +# Case 15: Thread network formation and attaching with TREL +@pytest.mark.supported_targets +@pytest.mark.esp32c6 +@pytest.mark.openthread_br +@pytest.mark.flaky(reruns=1, reruns_delay=1) +@pytest.mark.parametrize( + 'config, count, app_path, target', [ + ('trel|trel', 2, + f'{os.path.join(os.path.dirname(__file__), "ot_trel")}' + f'|{os.path.join(os.path.dirname(__file__), "ot_trel")}', + 'esp32c6|esp32s3'), + ], + indirect=True, +) +def test_trel_connect(dut: Tuple[IdfDut, IdfDut]) -> None: + trel_s3 = dut[1] + trel_c6 = dut[0] + trel_list = [trel_c6] + router_extaddr_list = ['7766554433221101'] + + trel_s3.expect('IPv4 address:', timeout=10) + trel_c6.expect('IPv4 address:', timeout=10) + ocf.init_thread(trel_s3) + for trel in trel_list: + ocf.init_thread(trel) + trel_leader_para = copy.copy(default_br_ot_para) + trel_leader_para.bbr = False + ocf.joinThreadNetwork(trel_s3, trel_leader_para) + trel_para = copy.copy(default_cli_ot_para) + trel_para.dataset = ocf.getDataset(trel_s3) + try: + order = 0 + for trel in trel_list: + trel_para.exaddr = router_extaddr_list[order] + order = order + 1 + ocf.joinThreadNetwork(trel, trel_para) + for trel in trel_list: + trel_mleid_addr = ocf.get_mleid_addr(trel) + trel_s3_mleid_addr = ocf.get_mleid_addr(trel_s3) + rx_nums = ocf.ot_ping(trel, trel_s3_mleid_addr, 5)[1] + assert rx_nums == 5 + rx_nums = ocf.ot_ping(trel_s3, trel_mleid_addr, 5)[1] + assert rx_nums == 5 + finally: + ocf.execute_command(trel_s3, 'factoryreset') + for trel in trel_list: + ocf.execute_command(trel, 'factoryreset') + time.sleep(3) From 1c1198cf4a1ffaecbeddc806ac15f42b5ff3c6d3 Mon Sep 17 00:00:00 2001 From: morris Date: Sat, 12 Oct 2024 16:29:45 +0800 Subject: [PATCH 167/365] feat(dedic_gpio): enable pad input for the input signal previously, we asked the user to enable the gpio direction before initialize the dedicated GPIO. Now the dedicated GPIO driver will help enable the input/output path according to the in_en and out_en flags. --- components/esp_driver_gpio/src/dedic_gpio.c | 12 ++ .../main/test_dedicated_gpio.c | 26 +---- .../api-reference/peripherals/dedic_gpio.rst | 33 ++---- .../api-reference/peripherals/dedic_gpio.rst | 29 ++--- .../generic_gpio/main/gpio_example_main.c | 12 +- .../gpio/matrix_keyboard/README.md | 10 +- .../matrix_keyboard/include/matrix_keyboard.h | 18 +-- .../matrix_keyboard/src/matrix_keyboard.c | 107 ++++++------------ .../main/matrix_keyboard_example_main.c | 12 +- tools/ci/check_copyright_ignore.txt | 3 - 10 files changed, 89 insertions(+), 173 deletions(-) diff --git a/components/esp_driver_gpio/src/dedic_gpio.c b/components/esp_driver_gpio/src/dedic_gpio.c index bbc66995b2c9..3faf0d9de7e7 100644 --- a/components/esp_driver_gpio/src/dedic_gpio.c +++ b/components/esp_driver_gpio/src/dedic_gpio.c @@ -269,6 +269,7 @@ esp_err_t dedic_gpio_new_bundle(const dedic_gpio_bundle_config_t *config, dedic_ if (config->flags.in_en) { for (size_t i = 0; i < config->array_size; i++) { gpio_func_sel(config->gpio_array[i], PIN_FUNC_GPIO); + gpio_input_enable(config->gpio_array[i]); esp_rom_gpio_connect_in_signal(config->gpio_array[i], dedic_gpio_periph_signals.cores[core_id].in_sig_per_channel[in_offset + i], config->flags.in_invert); } } @@ -325,6 +326,17 @@ esp_err_t dedic_gpio_del_bundle(dedic_gpio_bundle_handle_t bundle) } portEXIT_CRITICAL(&s_platform[core_id]->spinlock); + if (bundle->in_mask > 0) { + for (size_t i = 0; i < bundle->nr_gpio; i++) { + esp_rom_gpio_connect_in_signal(GPIO_MATRIX_CONST_ZERO_INPUT, dedic_gpio_periph_signals.cores[core_id].in_sig_per_channel[bundle->in_offset + i], 0); + } + } + if (bundle->out_mask > 0) { + for (size_t i = 0; i < bundle->nr_gpio; i++) { + gpio_output_disable(bundle->gpio_array[i]); + } + } + free(bundle); if (recycle_all) { diff --git a/components/esp_driver_gpio/test_apps/gpio_extensions/main/test_dedicated_gpio.c b/components/esp_driver_gpio/test_apps/gpio_extensions/main/test_dedicated_gpio.c index fb306b523ee0..9b3f73635e6b 100644 --- a/components/esp_driver_gpio/test_apps/gpio_extensions/main/test_dedicated_gpio.c +++ b/components/esp_driver_gpio/test_apps/gpio_extensions/main/test_dedicated_gpio.c @@ -70,16 +70,8 @@ static void test_dedic_gpio_on_specific_core(void *args) uint32_t value = 0; dedic_gpio_cpu_ll_write_all(0x0); // clear all out channels - // configure a group of GPIOs, output only - const int bundleA_gpios[] = {ctx->gpios[0], ctx->gpios[1]}; - gpio_config_t io_conf = { - .mode = GPIO_MODE_OUTPUT, - }; - for (int i = 0; i < sizeof(bundleA_gpios) / sizeof(bundleA_gpios[0]); i++) { - io_conf.pin_bit_mask = 1ULL << bundleA_gpios[i]; - gpio_config(&io_conf); - } // Create bundleA, output only + const int bundleA_gpios[] = {ctx->gpios[0], ctx->gpios[1]}; dedic_gpio_bundle_handle_t bundleA = NULL; dedic_gpio_bundle_config_t bundleA_config = { .gpio_array = bundleA_gpios, @@ -90,15 +82,8 @@ static void test_dedic_gpio_on_specific_core(void *args) }; TEST_ESP_OK(dedic_gpio_new_bundle(&bundleA_config, &bundleA)); - // configure another group of GPIOs, input and output - const int bundleB_gpios[] = {ctx->gpios[2], ctx->gpios[3]}; - io_conf.mode = GPIO_MODE_INPUT_OUTPUT; - for (int i = 0; i < sizeof(bundleB_gpios) / sizeof(bundleB_gpios[0]); i++) { - io_conf.pin_bit_mask = 1ULL << bundleB_gpios[i]; - gpio_config(&io_conf); - } - // GPIO bundleB, input and output + const int bundleB_gpios[] = {ctx->gpios[2], ctx->gpios[3]}; dedic_gpio_bundle_handle_t bundleB = NULL; dedic_gpio_bundle_config_t bundleB_config = { .gpio_array = bundleB_gpios, @@ -192,13 +177,6 @@ TEST_CASE("Dedicated_GPIO_interrupt_and_callback", "[dedic_gpio]") #else const int bundle_gpios[] = {0, 1}; #endif - gpio_config_t io_conf = { - .mode = GPIO_MODE_INPUT_OUTPUT, - }; - for (int i = 0; i < sizeof(bundle_gpios) / sizeof(bundle_gpios[0]); i++) { - io_conf.pin_bit_mask = 1ULL << bundle_gpios[i]; - gpio_config(&io_conf); - } dedic_gpio_bundle_handle_t bundle = NULL; dedic_gpio_bundle_config_t bundle_config = { .gpio_array = bundle_gpios, diff --git a/docs/en/api-reference/peripherals/dedic_gpio.rst b/docs/en/api-reference/peripherals/dedic_gpio.rst index 319586f4f66b..108abd73e182 100644 --- a/docs/en/api-reference/peripherals/dedic_gpio.rst +++ b/docs/en/api-reference/peripherals/dedic_gpio.rst @@ -16,32 +16,21 @@ A GPIO bundle is a group of GPIOs, which can be manipulated at the same time in .. note:: - Dedicated GPIO is more of a CPU peripheral, so it has a strong relationship with CPU core. It's highly recommended to install and operate GPIO bundle in a pin-to-core task. For example, if GPIOA is connected to CPU0, and the dedicated GPIO instruction is issued from CPU1, then it's impossible to control GPIOA. + Dedicated GPIO is more like a CPU peripheral, it has a strong relationship with CPU core. It's highly recommended to install and operate GPIO bundle in the same task, and the task should be pined to a CPU core. For example, if GPIO_A is connected to CPU_0, but the dedicated GPIO instruction is issued from CPU_1, then it's impossible to control GPIO_A. To install a GPIO bundle, one needs to call :cpp:func:`dedic_gpio_new_bundle` to allocate the software resources and connect the dedicated channels to user selected GPIOs. Configurations for a GPIO bundle are covered in :cpp:type:`dedic_gpio_bundle_config_t` structure: -- :cpp:member:`gpio_array`: An array that contains GPIO number. -- :cpp:member:`array_size`: Element number of :cpp:member:`gpio_array`. -- :cpp:member:`flags`: Extra flags to control the behavior of GPIO Bundle. +- :cpp:member:`dedic_gpio_bundle_config_t::gpio_array`: An array that contains GPIO number. +- :cpp:member:`dedic_gpio_bundle_config_t::array_size`: Element number of :cpp:member:`dedic_gpio_bundle_config_t::gpio_array`. +- :cpp:member:`dedic_gpio_bundle_config_t::in_en` and :cpp:member:`dedic_gpio_bundle_config_t::out_en` are used to configure whether to enable the input and output ability of the GPIO(s). +- :cpp:member:`dedic_gpio_bundle_config_t::in_invert` and :cpp:member:`dedic_gpio_bundle_config_t::out_invert` are used to configure whether to invert the GPIO signal. - - :cpp:member:`in_en` and :cpp:member:`out_en` are used to select whether to enable the input and output function (note, they can be enabled together). - - :cpp:member:`in_invert` and :cpp:member:`out_invert` are used to select whether to invert the GPIO signal. - -The following code shows how to install a output only GPIO bundle: +The following code shows how to install an output only GPIO bundle: .. highlight:: c :: - // configure GPIO - const int bundleA_gpios[] = {0, 1}; - gpio_config_t io_conf = { - .mode = GPIO_MODE_OUTPUT, - }; - for (int i = 0; i < sizeof(bundleA_gpios) / sizeof(bundleA_gpios[0]); i++) { - io_conf.pin_bit_mask = 1ULL << bundleA_gpios[i]; - gpio_config(&io_conf); - } // Create bundleA, output only dedic_gpio_bundle_handle_t bundleA = NULL; dedic_gpio_bundle_config_t bundleA_config = { @@ -53,11 +42,7 @@ The following code shows how to install a output only GPIO bundle: }; ESP_ERROR_CHECK(dedic_gpio_new_bundle(&bundleA_config, &bundleA)); -To uninstall the GPIO bundle, one needs to call :cpp:func:`dedic_gpio_del_bundle`. - -.. note:: - - :cpp:func:`dedic_gpio_new_bundle` doesn't cover any GPIO pad configuration (e.g., pull up/down, drive ability, output/input enable), so before installing a dedicated GPIO bundle, you have to configure the GPIO separately using GPIO driver API (e.g., :cpp:func:`gpio_config`). For more information about GPIO driver, please refer to :doc:`GPIO API Reference `. +To uninstall the GPIO bundle, you should call :cpp:func:`dedic_gpio_del_bundle`. GPIO Bundle Operations @@ -92,13 +77,13 @@ For advanced users, they can always manipulate the GPIOs by writing assembly cod 3. Call CPU LL apis (e.g., `dedic_gpio_cpu_ll_write_mask`) or write assembly code with that mask 4. The fastest way of toggling IO is to use the dedicated "set/clear" instructions: - .. only:: esp32s2 or esp32s3 + .. only:: CONFIG_IDF_TARGET_ARCH_XTENSA - Set bits of GPIO: ``set_bit_gpio_out imm[7:0]`` - Clear bits of GPIO: ``clr_bit_gpio_out imm[7:0]`` - Note: Immediate value width depends on the number of dedicated GPIO channels - .. only:: esp32c2 or esp32c3 or esp32c6 or esp32h2 + .. only:: CONFIG_IDF_TARGET_ARCH_RISCV - Set bits of GPIO: ``csrrsi rd, csr, imm[4:0]`` - Clear bits of GPIO: ``csrrci rd, csr, imm[4:0]`` diff --git a/docs/zh_CN/api-reference/peripherals/dedic_gpio.rst b/docs/zh_CN/api-reference/peripherals/dedic_gpio.rst index 68d58211dbbf..37f4979bf97b 100644 --- a/docs/zh_CN/api-reference/peripherals/dedic_gpio.rst +++ b/docs/zh_CN/api-reference/peripherals/dedic_gpio.rst @@ -16,16 +16,14 @@ GPIO 捆绑包是一组 GPIO,该组 GPIO 可以在一个 CPU 周期内同时 .. note:: - 专用 GPIO 更像是 CPU 外设,因此与 CPU 内核关系密切。强烈建议在 pin-to-core 任务中安装和操作 GPIO 捆绑包。例如,如果 GPIOA 连接到了 CPU0,而专用的 GPIO 指令却是从 CPU1 发出的,那么就无法控制 GPIOA。 + 专用 GPIO 更像是 CPU 外设,因此与 CPU 内核关系密切。强烈建议在 pin-to-core 任务中安装和操作 GPIO 捆绑包。例如,如果 GPIO_A 连接到了 CPU_0,而专用的 GPIO 指令却是从 CPU_1 发出的,那么就无法控制 GPIO_A。 安装 GPIO 捆绑包需要调用 :cpp:func:`dedic_gpio_new_bundle` 来分配软件资源并将专用通道连接到用户选择的 GPIO。GPIO 捆绑包的配置在 :cpp:type:`dedic_gpio_bundle_config_t` 结构体中: -- :cpp:member:`gpio_array`:包含 GPIO 编号的数组。 -- :cpp:member:`array_size`::cpp:member:`gpio_array` 的元素个数。 -- :cpp:member:`flags`:用于控制 GPIO 捆绑包行为的标志。 - - - :cpp:member:`in_en` 和 :cpp:member:`out_en` 用于选择是否开启输入输出功能(这两个功能可以同时开启)。 - - :cpp:member:`in_invert` 和 :cpp:member:`out_invert` 用于选择是否反转 GPIO 信号。 +- :cpp:member:`dedic_gpio_bundle_config_t::gpio_array`:包含 GPIO 编号的数组。 +- :cpp:member:`dedic_gpio_bundle_config_t::array_size`: :cpp:member:`dedic_gpio_bundle_config_t::gpio_array` 的元素个数。 +- :cpp:member:`dedic_gpio_bundle_config_t::in_en` 和 :cpp:member:`dedic_gpio_bundle_config_t::out_en` 用于选择是否开启输入输出功能(这两个功能可以同时开启)。 +- :cpp:member:`dedic_gpio_bundle_config_t::in_invert` 和 :cpp:member:`dedic_gpio_bundle_config_t::out_invert` 用于选择是否反转 GPIO 信号。 以下代码展示了如何安装只有输出功能的 GPIO 捆绑包: @@ -33,15 +31,6 @@ GPIO 捆绑包是一组 GPIO,该组 GPIO 可以在一个 CPU 周期内同时 :: - // 配置 GPIO - const int bundleA_gpios[] = {0, 1}; - gpio_config_t io_conf = { - .mode = GPIO_MODE_OUTPUT, - }; - for (int i = 0; i < sizeof(bundleA_gpios) / sizeof(bundleA_gpios[0]); i++) { - io_conf.pin_bit_mask = 1ULL << bundleA_gpios[i]; - gpio_config(&io_conf); - } // 创建 bundleA,仅输出 dedic_gpio_bundle_handle_t bundleA = NULL; dedic_gpio_bundle_config_t bundleA_config = { @@ -55,10 +44,6 @@ GPIO 捆绑包是一组 GPIO,该组 GPIO 可以在一个 CPU 周期内同时 如需卸载 GPIO 捆绑包,可调用 :cpp:func:`dedic_gpio_del_bundle`。 -.. note:: - - :cpp:func:`dedic_gpio_new_bundle` 不包含任何 GPIO pad 配置(例如上拉/下拉、驱动能力、输出/输入使能)。因此,在安装专用 GPIO 捆绑包之前,必须使用 GPIO 驱动程序 API(如 :cpp:func:`gpio_config`)单独配置 GPIO。更多关于 GPIO 驱动的信息,请参考 :doc:`GPIO API 参考 `。 - GPIO 捆绑包操作 ---------------------- @@ -92,13 +77,13 @@ GPIO 捆绑包操作 3. 调用 CPU LL apis(如 `cpu_ll_write_dedic_gpio_mask`)或使用该掩码编写汇编代码 4. 切换 IO 的最快捷方式是使用专用的“设置/清除”指令: - .. only:: esp32s2 or esp32s3 + .. only:: CONFIG_IDF_TARGET_ARCH_XTENSA - 设置 GPIO 位:``set_bit_gpio_out imm[7:0]`` - 清除 GPIO 位:``clr_bit_gpio_out imm[7:0]`` - 注意:立即数宽度取决于专用 GPIO 通道的数量 - .. only:: esp32c2 or esp32c3 or esp32c6 or esp32h2 + .. only:: CONFIG_IDF_TARGET_ARCH_RISCV - 设置 GPIO 位:``csrrsi rd, csr, imm[4:0]`` - 清除 GPIO 位:``csrrci rd, csr, imm[4:0]`` diff --git a/examples/peripherals/gpio/generic_gpio/main/gpio_example_main.c b/examples/peripherals/gpio/generic_gpio/main/gpio_example_main.c index 27b22cdaa4d9..89b7bbc88a48 100644 --- a/examples/peripherals/gpio/generic_gpio/main/gpio_example_main.c +++ b/examples/peripherals/gpio/generic_gpio/main/gpio_example_main.c @@ -1,11 +1,9 @@ -/* GPIO Example - - This example code is in the Public Domain (or CC0 licensed, at your option.) +/* + * SPDX-FileCopyrightText: 2020-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ - Unless required by applicable law or agreed to in writing, this - software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR - CONDITIONS OF ANY KIND, either express or implied. -*/ #include #include #include diff --git a/examples/peripherals/gpio/matrix_keyboard/README.md b/examples/peripherals/gpio/matrix_keyboard/README.md index 31cd207e55db..76d095e41721 100644 --- a/examples/peripherals/gpio/matrix_keyboard/README.md +++ b/examples/peripherals/gpio/matrix_keyboard/README.md @@ -23,7 +23,7 @@ This matrix keyboard driver is interrupt-driven, supports a configurable debounc This example can run on any target that has the dedicated feature (e.g. ESP32-S2). It's not necessary for your matrix board to have pull-up resisters on row/column lines. The driver has enabled internal pull-up resister by default. A typical matrix board should look as follows: -``` +```text row_0 +--------+-------------------+------------------------------+-----------------+ | | | | + | + | + @@ -51,7 +51,7 @@ row_n +--------+-------------------+------------------------------+----------- Build the project and flash it to the board, then run monitor tool to view serial output: -``` +```text idf.py -p PORT flash monitor ``` @@ -63,7 +63,7 @@ See the Getting Started Guide for full steps to configure and use ESP-IDF to bui ## Example Output -``` +```text I (2883) example: press event, key code = 0002 I (3003) example: release event, key code = 0002 I (5053) example: press event, key code = 0001 @@ -77,3 +77,7 @@ I (8923) example: release event, key code = 0103 I (9543) example: press event, key code = 0203 I (9683) example: release event, key code = 0203 ``` + +## Troubleshooting + +For any technical queries, please open an [issue](https://github.com/espressif/esp-idf/issues) on GitHub. We will get back to you soon. diff --git a/examples/peripherals/gpio/matrix_keyboard/components/matrix_keyboard/include/matrix_keyboard.h b/examples/peripherals/gpio/matrix_keyboard/components/matrix_keyboard/include/matrix_keyboard.h index 825ae3146931..f4598c74cb9e 100644 --- a/examples/peripherals/gpio/matrix_keyboard/components/matrix_keyboard/include/matrix_keyboard.h +++ b/examples/peripherals/gpio/matrix_keyboard/components/matrix_keyboard/include/matrix_keyboard.h @@ -1,16 +1,8 @@ -// Copyright 2020 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * SPDX-FileCopyrightText: 2020-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #pragma once diff --git a/examples/peripherals/gpio/matrix_keyboard/components/matrix_keyboard/src/matrix_keyboard.c b/examples/peripherals/gpio/matrix_keyboard/components/matrix_keyboard/src/matrix_keyboard.c index daf1b6a3416f..48b7a23506e9 100644 --- a/examples/peripherals/gpio/matrix_keyboard/components/matrix_keyboard/src/matrix_keyboard.c +++ b/examples/peripherals/gpio/matrix_keyboard/components/matrix_keyboard/src/matrix_keyboard.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2020-2023 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2020-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -7,24 +7,15 @@ #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "freertos/timers.h" -#include "esp_compiler.h" #include "esp_log.h" +#include "esp_check.h" #include "driver/dedic_gpio.h" #include "driver/gpio.h" +#include "esp_private/gpio.h" #include "matrix_keyboard.h" -#include "esp_rom_sys.h" static const char *TAG = "mkbd"; -#define MKBD_CHECK(a, msg, tag, ret, ...) \ - do { \ - if (unlikely(!(a))) { \ - ESP_LOGE(TAG, "%s(%d): " msg, __FUNCTION__, __LINE__, ##__VA_ARGS__); \ - ret_code = ret; \ - goto tag; \ - } \ - } while (0) - typedef struct matrix_kbd_t matrix_kbd_t; struct matrix_kbd_t { @@ -91,45 +82,36 @@ static void matrix_kbd_debounce_timer_callback(TimerHandle_t xTimer) esp_err_t matrix_kbd_install(const matrix_kbd_config_t *config, matrix_kbd_handle_t *mkbd_handle) { - esp_err_t ret_code = ESP_OK; + esp_err_t ret = ESP_OK; matrix_kbd_t *mkbd = NULL; - MKBD_CHECK(config, "matrix keyboard configuration can't be null", err, ESP_ERR_INVALID_ARG); - MKBD_CHECK(mkbd_handle, "matrix keyboard handle can't be null", err, ESP_ERR_INVALID_ARG); + ESP_RETURN_ON_FALSE(config && mkbd_handle, ESP_ERR_INVALID_ARG, TAG, "invalid argument"); mkbd = calloc(1, sizeof(matrix_kbd_t) + (config->nr_row_gpios) * sizeof(uint32_t)); - MKBD_CHECK(mkbd, "allocate matrix keyboard context failed", err, ESP_ERR_NO_MEM); + ESP_RETURN_ON_FALSE(mkbd, ESP_ERR_NO_MEM, TAG, "no mem for matrix keyboard context"); + + // Create a ont-shot os timer, used for key debounce + mkbd->debounce_timer = xTimerCreate("kb_debounce", pdMS_TO_TICKS(config->debounce_ms), pdFALSE, mkbd, matrix_kbd_debounce_timer_callback); + ESP_GOTO_ON_FALSE(mkbd->debounce_timer, ESP_FAIL, err, TAG, "create debounce timer failed"); mkbd->nr_col_gpios = config->nr_col_gpios; mkbd->nr_row_gpios = config->nr_row_gpios; - // GPIO pad configuration - // Each GPIO used in matrix key board should be able to input and output - // In case the keyboard doesn't design a resister to pull up row/col line - // We enable the internal pull up resister, enable Open Drain as well - gpio_config_t io_conf = { - .mode = GPIO_MODE_INPUT_OUTPUT_OD, - .pull_up_en = 1 - }; - - for (int i = 0; i < config->nr_row_gpios; i++) { - io_conf.pin_bit_mask = 1ULL << config->row_gpios[i]; - gpio_config(&io_conf); - } - dedic_gpio_bundle_config_t bundle_row_config = { .gpio_array = config->row_gpios, .array_size = config->nr_row_gpios, + // Each GPIO used in matrix key board should be able to input and output .flags = { .in_en = 1, .out_en = 1, }, }; - MKBD_CHECK(dedic_gpio_new_bundle(&bundle_row_config, &mkbd->row_bundle) == ESP_OK, - "create row bundle failed", err, ESP_FAIL); + ESP_GOTO_ON_ERROR(dedic_gpio_new_bundle(&bundle_row_config, &mkbd->row_bundle), err, TAG, "create row bundle failed"); - for (int i = 0; i < config->nr_col_gpios; i++) { - io_conf.pin_bit_mask = 1ULL << config->col_gpios[i]; - gpio_config(&io_conf); + // In case the keyboard doesn't design a resister to pull up row/col line + // We enable the internal pull up resister, enable Open Drain as well + for (int i = 0; i < config->nr_row_gpios; i++) { + gpio_pullup_en(config->row_gpios[i]); + gpio_od_enable(config->row_gpios[i]); } dedic_gpio_bundle_config_t bundle_col_config = { @@ -140,8 +122,12 @@ esp_err_t matrix_kbd_install(const matrix_kbd_config_t *config, matrix_kbd_handl .out_en = 1, }, }; - MKBD_CHECK(dedic_gpio_new_bundle(&bundle_col_config, &mkbd->col_bundle) == ESP_OK, - "create col bundle failed", err, ESP_FAIL); + ESP_GOTO_ON_ERROR(dedic_gpio_new_bundle(&bundle_col_config, &mkbd->col_bundle), err, TAG, "create col bundle failed"); + + for (int i = 0; i < config->nr_col_gpios; i++) { + gpio_pullup_en(config->col_gpios[i]); + gpio_od_enable(config->col_gpios[i]); + } // Disable interrupt dedic_gpio_bundle_set_interrupt_and_callback(mkbd->row_bundle, (1 << config->nr_row_gpios) - 1, @@ -149,45 +135,35 @@ esp_err_t matrix_kbd_install(const matrix_kbd_config_t *config, matrix_kbd_handl dedic_gpio_bundle_set_interrupt_and_callback(mkbd->col_bundle, (1 << config->nr_col_gpios) - 1, DEDIC_GPIO_INTR_NONE, NULL, NULL); - // Create a ont-shot os timer, used for key debounce - mkbd->debounce_timer = xTimerCreate("kb_debounce", pdMS_TO_TICKS(config->debounce_ms), pdFALSE, mkbd, matrix_kbd_debounce_timer_callback); - MKBD_CHECK(mkbd->debounce_timer, "create debounce timer failed", err, ESP_FAIL); - * mkbd_handle = mkbd; return ESP_OK; err: - if (mkbd) { - if (mkbd->debounce_timer) { - xTimerDelete(mkbd->debounce_timer, 0); - } - if (mkbd->col_bundle) { - dedic_gpio_del_bundle(mkbd->col_bundle); - } - if (mkbd->row_bundle) { - dedic_gpio_del_bundle(mkbd->row_bundle); - } - free(mkbd); + if (mkbd->debounce_timer) { + xTimerDelete(mkbd->debounce_timer, 0); } - return ret_code; + if (mkbd->col_bundle) { + dedic_gpio_del_bundle(mkbd->col_bundle); + } + if (mkbd->row_bundle) { + dedic_gpio_del_bundle(mkbd->row_bundle); + } + free(mkbd); + return ret; } esp_err_t matrix_kbd_uninstall(matrix_kbd_handle_t mkbd_handle) { - esp_err_t ret_code = ESP_OK; - MKBD_CHECK(mkbd_handle, "matrix keyboard handle can't be null", err, ESP_ERR_INVALID_ARG); + ESP_RETURN_ON_FALSE(mkbd_handle, ESP_ERR_INVALID_ARG, TAG, "invalid argument"); xTimerDelete(mkbd_handle->debounce_timer, 0); dedic_gpio_del_bundle(mkbd_handle->col_bundle); dedic_gpio_del_bundle(mkbd_handle->row_bundle); free(mkbd_handle); return ESP_OK; -err: - return ret_code; } esp_err_t matrix_kbd_start(matrix_kbd_handle_t mkbd_handle) { - esp_err_t ret_code = ESP_OK; - MKBD_CHECK(mkbd_handle, "matrix keyboard handle can't be null", err, ESP_ERR_INVALID_ARG); + ESP_RETURN_ON_FALSE(mkbd_handle, ESP_ERR_INVALID_ARG, TAG, "invalid argument"); // row lines set to high level dedic_gpio_bundle_write(mkbd_handle->row_bundle, (1 << mkbd_handle->nr_row_gpios) - 1, (1 << mkbd_handle->nr_row_gpios) - 1); @@ -203,15 +179,11 @@ esp_err_t matrix_kbd_start(matrix_kbd_handle_t mkbd_handle) DEDIC_GPIO_INTR_BOTH_EDGE, matrix_kbd_row_isr_callback, mkbd_handle); return ESP_OK; -err: - return ret_code; } esp_err_t matrix_kbd_stop(matrix_kbd_handle_t mkbd_handle) { - esp_err_t ret_code = ESP_OK; - MKBD_CHECK(mkbd_handle, "matrix keyboard handle can't be null", err, ESP_ERR_INVALID_ARG); - + ESP_RETURN_ON_FALSE(mkbd_handle, ESP_ERR_INVALID_ARG, TAG, "invalid argument"); xTimerStop(mkbd_handle->debounce_timer, 0); // Disable interrupt @@ -221,17 +193,12 @@ esp_err_t matrix_kbd_stop(matrix_kbd_handle_t mkbd_handle) DEDIC_GPIO_INTR_NONE, NULL, NULL); return ESP_OK; -err: - return ret_code; } esp_err_t matrix_kbd_register_event_handler(matrix_kbd_handle_t mkbd_handle, matrix_kbd_event_handler handler, void *args) { - esp_err_t ret_code = ESP_OK; - MKBD_CHECK(mkbd_handle, "matrix keyboard handle can't be null", err, ESP_ERR_INVALID_ARG); + ESP_RETURN_ON_FALSE(mkbd_handle, ESP_ERR_INVALID_ARG, TAG, "invalid argument"); mkbd_handle->event_handler = handler; mkbd_handle->event_handler_args = args; return ESP_OK; -err: - return ret_code; } diff --git a/examples/peripherals/gpio/matrix_keyboard/main/matrix_keyboard_example_main.c b/examples/peripherals/gpio/matrix_keyboard/main/matrix_keyboard_example_main.c index fd1008e90ba9..657d24136a02 100644 --- a/examples/peripherals/gpio/matrix_keyboard/main/matrix_keyboard_example_main.c +++ b/examples/peripherals/gpio/matrix_keyboard/main/matrix_keyboard_example_main.c @@ -1,11 +1,9 @@ -/* Matrix Keyboard (based on dedicated GPIO) example - - This example code is in the Public Domain (or CC0 licensed, at your option.) +/* + * SPDX-FileCopyrightText: 2020-2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ - Unless required by applicable law or agreed to in writing, this - software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR - CONDITIONS OF ANY KIND, either express or implied. -*/ #include #include "esp_log.h" #include "matrix_keyboard.h" diff --git a/tools/ci/check_copyright_ignore.txt b/tools/ci/check_copyright_ignore.txt index 681279a268ec..8fc70c2ab78d 100644 --- a/tools/ci/check_copyright_ignore.txt +++ b/tools/ci/check_copyright_ignore.txt @@ -876,9 +876,6 @@ examples/mesh/manual_networking/main/mesh_main.c examples/network/simple_sniffer/main/cmd_sniffer.c examples/network/simple_sniffer/main/cmd_sniffer.h examples/network/simple_sniffer/main/simple_sniffer_example_main.c -examples/peripherals/gpio/generic_gpio/main/gpio_example_main.c -examples/peripherals/gpio/matrix_keyboard/components/matrix_keyboard/include/matrix_keyboard.h -examples/peripherals/gpio/matrix_keyboard/main/matrix_keyboard_example_main.c examples/peripherals/ledc/ledc_basic/main/ledc_basic_example_main.c examples/peripherals/ledc/ledc_fade/main/ledc_fade_example_main.c examples/peripherals/sdio/host/main/app_main.c From b1ac4773a57ee9c2b998f215f1f83c8fe390a30a Mon Sep 17 00:00:00 2001 From: Aditya Patwardhan Date: Thu, 3 Oct 2024 10:23:42 +0530 Subject: [PATCH 168/365] fix(security): Fixed README file for security_features_app --- .../security/security_features_app/README.md | 40 +++++++++++-------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/examples/security/security_features_app/README.md b/examples/security/security_features_app/README.md index 9272b81c2278..ea48a61b2565 100644 --- a/examples/security/security_features_app/README.md +++ b/examples/security/security_features_app/README.md @@ -1,25 +1,24 @@ | Supported Targets | ESP32-C3 | | ----------------- | -------- | +# Security Features Application -# All Secure - -This example demonstrates how to enable all of the available security features on the esp32c3 target at once. +This example demonstrates how to enable all of the available security features on the ESP32-C3 target at once. This example shall use combination of host based python tools and firmware for enabling all the related security eFuses. -For simplicity the security features such as Secure Boot V2, Flash Encryption, NVS Encryption shall be enabled through host based python tools (e.g., espefuse). +For simplicity, the security features such as Secure Boot V2, Flash Encryption, NVS Encryption shall be enabled through host based python tools (e.g., espefuse). Some additional security eFuses shall be enabled in the firmware. **The device that has followed all the steps mentioned below can be used for production use-cases.** > [!CAUTION] -> The instructions in the example directly burn eFuses and once done, it cannot be reverted. Please go through the below steps carefully before executing the example. All the steps must be followed without any changes and in the exact sequence, otherwise the device may end up in an unrecoverable state. +> The instructions in the example directly burn eFuses and once done, it cannot be reverted. Please go through the below steps carefully before executing the example. All the steps must be followed without any changes and in the exact sequence, otherwise the device may end up in an unrecoverable state. Follow the [QEMU workflow](#enable-security-features-with-help-of-qemu) if you want to test the example without the risk of bricking an actual device. ### Hardware Required -* A development board with ESP32C3 SoC +* A development board with ESP32-C3 SoC * A USB cable for power supply and programming -**Note: The hardware is not required if you plan to run the example with help of QEMU.** +**Note: The hardware is not required if you plan to run the example with help of [QEMU](#enable-security-features-with-help-of-qemu).** ## Pre-requisites @@ -32,7 +31,7 @@ export ESPPORT=/* Serial port to which esp is connected */

    ItqP zO+Ohjh9++dMHoBz1T}WZOa%9jPHLDE5xS^rX=KQdFbp}N)3YQpc#XHq-aU5zFAAYq zrtTx0%ibFmhnLCe?6wPfLTV!7RZ;RZc6n(X(8D4$H;K{qqXV|{>3HXDOQ8YhWivOE z=$B|ZD^ALa#~;2ztCLQV~}4-jOHQ59ALWvG!O2bz_Rxa8v@95fU7?BXq_$9>!!JZdG^;iERbY4*XAA3Vvo9Q6;mHOjq zRT|k4j=;}={Yf2|&{KiT1s{UXeLU}9KlR?kP^3^yVvF(+&KVg7kojlxeMBErMD|52 ze&r6){B9GJ(Tx!{y8YVr{H^uQrGrQHaZP0jNz8x#e8b_HNoEwOkt_m@9yapK|F@uU z8%Nv=qs@7Zi@E|EkI39hxJfE+Sv)SyHB=b7Z-wGXl3FjEOazj}6KBKRO0$HbsN2Ru z(eH;9^}sVmP~wXSG6W$Z+z+d&0cd-CP}FQOFB)ltH!&D8P*FDN_LB|Uj?*un^?*%6 z5KgF7q;%lD~S#`;gd6|jgD%mTT924m>L&lie@*tbG@ z?cQ9vd8F-E56@-48omwBq1t=oV?)1Y&7h z9X6v8T;d6Z0-5;hi>NV-bB3S6!_N~p`vUmhkuDF%CrQT=rV5$$+~xzZ1g^!ifzf}d z-P5@*QTRp1NA7|=4A0&odX;Ej5CfQ*{r70s*^TMA)!o5dzvsl#EQ_Wn6;yp2nH;hM z2s0r06B%7xJu+O=FAY;FS!YCkN!_&@Iq?gdOpWgBLePSSOuskKa`w~}Sf!Kw z1ZQ7l6h>A38_OIGvjo50t(e@L*qBcZ_3&OrzX{f2K?`krk_U%QfRkvByvW;a7cXLzYIPKv2K?geM873 zuPxux7-E}st!TJga8k^(fHYdVA<(X0S7Icj zxdcLJ!8$$(4C$MnY6C4aj~6E~8_yAj3#68;fo!ZZkU+PR1(YvHsp-XC@X4S8-}Y@_ zH>{W`N((JCkSO?l`Q3<_2Ssh8PJIWN^XIKl#_VH**cGF~5)`VI+L(;p+(NgWxpxdH zs$0fW$3E}hfee2_QN5wEhXHgj^meU8OVMPF-z7V!t!_t@rsfrrd5j(OFe(x7KZ@;9 zUPzo5fw5xiJ+vwm2`jb*Ic90|qhqgd1=T^7`~yk@RMNvhw?x)6B$m+w2q_E`_xL7A zmC6(?Xj@q~ZHzl@<-v^xOSx3JR)}JqLl!LrB1ehyzM*0t{pY-C2zp zeXf>?vwKnn0vkxS-@wr8#;MSB>MDQg=D!{^LvMUfBOK_fl@9I-0w=eG9zE{eBuY2!aE3Ua?Yb(k&#&K!(drWU@{VcuqRAs=t93m07 z%#t;Wlq(`5eZBQz>GzS(V}W=+kQx_?jFCVPl*-)cocty>NRiNvZwd!|p7J6zA&o#F zy~Isf1g(I|9@Mlo%+4)uZ3rQqW#JB`qJ|c@(?bhKF=i-b9+BqkK?gfD%0Rj`9kH@a zrk8~sD$iO0cD=KBXb#%nBp78T8^yG!?}CAP78|gH8zFW#hIrJUc*S@1=233OVUkY7 zB@xjg%?yeD?mbGFkR3F0=nv59CjP(vG5_YWhniJB!{1G)lE&?)38JeyU}U--G-((|5F*gzOLI-(3-8xp;#Q1s2{^VzlRxH-V-{Wx}9w2BA6X>I$U zN$5R8wJ7DfdsXz$PU!ho?LNZF8{t^x50ho;fEOx%%3S?Axy}_kCMTH4w6s4xSM=iK z^Kd9!)fYBpkx{$QaYh9`5_ zZN9hP(ZEQ=PEH{`AtkUwS;dBEKT)xPKm=yW5&Iio0dZS z7x>eYIrHERr7}Xg=B4t^lFF#yRvn)lk^Hy;P_F`58$=T%I!Ji%W+VwM-$h8U<|kM% zBvTC>cqjA_2-2!C>h(nA*_fQlRwcS znS5<{YM9d^A#ZOki6Zt9ry6}~n!(BUiCTs?xk4JwUMo{bEW0_Rc)J*L zmFM}v^{kolWyj;+Aq$#(Y3V5Nu6mBJXt%{3O(hV^0)GdpJ*zZM5;yM*+_mtcC~#-X zvUD0PwlcVtj#>G=h=RCv=>xyIje@|+i`2l?q6h;Y@wwxk_m)bbmGa#?G|oztWeNd? zS8=GtcPyfD=*S5U;-`LZviD1aq46>|$^gGO6~U&MnCjXzJN`$x+}CVNR>6f)?w3uZ z?Mb@4fPo1=?*pE`QO%tv${E5MvOtZcz3ppnA~xW$^VwUv8n@o=6<*?oQ3F}jg3d&w z7Ou}r43EZ}gSZwPw1Pp1L)}cN2C8El+)qZt3lACR8O#miw7@Fm$`2g`u*yND9$A`U zsAjB9WURT%s3QD>CG;&`>p!?`x6v3@=lglleLL-V;NJK74ip0*lV=C)dqJ>LJ{#R1 zF}8Z8k+MC6`|*=#pVuzn5FB^k&z>$VDu~mJP$YPAm*sYTQpI1n&ItUTsDS5au%>2yA!8zTE~I0}t_ zKdY+!b7d2Bjk_gNRZ%F!w;g^o5fg_P$lvbhg!@A$MKP|4KL}1ivBFDSEhoa&zfavP z@wSuIK|QhfLG@D6ImeAJDj@depZc(*ZjAAh90Oa|m>B^4bKsd_*rt&*lqsnkaN#v? z+8cyXZak2z>!Liwf%QnoNsLvSe|X zvIa+xcHpCfAm3^y-^% zaWf17P-`mNiUW=Vg|m}J;kMhFsbmVv!_pt;#br3hnRON;NrQEAEY^P7$}{my$@ImX z;>a1-JBZLgkkv56vg6VJCZRw*rsikwV2aW~kibp$Z&PHI^K5?~(TU)M{)`^lDw1w=8iozRW74C7eR zf#lb`gSLQocM$%^)7&Ay=kG{MfeTuPK1a(IXB_;UfJ7HR>853~>nQVI0mpdReV=X$ z>%VA!w`PaINxr`I8H`!>-pB)68ghis?Np8L0}*q)CF@y6F{=f+=5jODreDLXVKftm zBy@j(sEEw6ZJWRwEB3z-lVgvS1WoU?KI@);F@xvEbRtNZobaiu#a~G#RoU&2$C>13 z_Isc!TF6r_R`*|(-4PfVyfl>1jo^Zw3Y5{XZL!H&9_tmX;i4Cavn%&#ZCa33RB+?a zqq~`5_BF!fW%jg?G}XdnYj1#cREnPE17;tW%8|4^m?#>RSk=P8z@$-bYu@4Kq3??P z-={o-I{2^>ry1S-b>d54d0-)A`g-RFDnPhtiZKmrFt2iraG82fjddLRO$dl7yztVn zGa-tSY#D^25rMFF8n&%-Gg1$UK~+!)QeiS;D7Qu$4ffij*Wn|q&VZjfQXKa}lFCVZZ^tG#FrgD>new?#1 zcX|INbMkyS{a{z;$<%@nHilNR;4Y~_MU|1SdPVZ(6HeyU_wtbF8JiqxGUh zBfn^z7)UdoeEom&TN#sOouXu?<@YnA=F(7`*p0wx0#>HdP<8uWF&2?hQ+!y=ypj^| z7mhHrF=7`$Wx-#PQGk`c5_;-S9or=k&&d)+bC+gRtzvM#zS~zxg2ns1FA&XHqCNY7 z2btV&039s;z?;J9(bc5un%8sAl-xB4+4(W-qc=1Sq^#_+)#t(j>ZCh$L#S~ojnxnN zKHEz1ABy{{yzIpxx8;S3a3S#I3^++xpzHl*>{+Q(C2Xv5Y`_q=&oAd=w%VhM-A}@F zp;uIposW0Nqhuyi1 zk&!Eyf+ct_KIO2{PvG&9ct0x?!A;1DjX1|^YG)VR*7F!QHBA5%HombVBI=}j(wY?u zNKoV98)_L*#NYBGVL$>F2HGh$7+%jfzWb%BCJeuaB)RK7gpA3|Hd||&LnuGL_~Uej zRoWs>aYuOx7U)f9Ki|(D(-Rkj|3p|d<5uTo{Cq<#gQ5GBP(O&Bs;V}wVe6-mPX6l! zhvAiZ2rZcV0JKCySAww+|J<)sZ&(Su8LnjJ1LoR{;GrTks-l?mMYx9lW}9_H)Ps#B zp#xq}^=fcH0GKp-W@m-niFR{Uh*^#K8c0!vxaNeck&4KcvQjir(75`zS~{TmiOmC! zkV_x9#!V8L*a!YogDUC90YA~h_Pm#x`$gxiXk?O*pS_PJ0xhb(C2o7qU$3t9sV6+l|#P5}_S;qJS@|>rxKRQJl?Lv+GZ2&;9$l zgSL29;h~WA4&ZNzw!rb9N$6*=UBMD3|<^qwx8QcaI zUOVO{+m!g{DgdZicjc-WirVUEmYRksqO}MY2q3#1;*nB3mki}dT7fe*X#of@m?SSk zR$UsxwN4IXY0r&dpx7f0jR+|p{c??QgUr>8``nDE8#9-#WE&*zR}Us7QmHZUTJ~DZ zNQvq9N+Q$4+J9|#pxEgY`HTp5$Q^4Rtbu!!iJ&K7zPzY>m_wqGj{>N_mak-eO~NUY zk$%8VFM-<75-YOm&H6Mm$5c=nQ8$>!&xE5}E1bjmY94?}U_*rnE}&rBR&apfvi3U@ zCZXBY(nRBv5G1FP$nsL)lrDiG%|4$$rr&xU&=xl;|1D&|NA_O3D5HZb`ShF<-6}V9JxCXax7BV z6}5z#K=)yGZdbVSy00cJ4M&$}15nDcc_;2%^2j2H22L47 zYcEK``rU;mzt8@lv@&a<5of~`$hyo@v}Tb|gtcgq%)3wMEs)J{bU-BFN|Q=2fYxaI zE)%$#JO+wRFlNqA^ISc9yQciQel@USCm->Q-Xqt>9CpITmI_5m!^Pd8%fx}8bV^aX z$fI;Ai5dOP_XD6-iOWM_z*VaQN(M1`I+v=4!-Jf0+z`Bpoit<$`NfK`e`g$j#N-YR zUy{`hS{go?)P8>SxxB3T17I?9*G5a-FHja-e4XPB0&q(Bv*MsqOwpEX5cp?nBsO$S z?XororMP7X%ch6~W{fC~v&ZZYU;CVJEOT3(5s7i3|w_Er(Z zw-cdoOJo33QMfqc<}zF*9Lr|DhcIM|Bx7$8Yp;9yz$pj6Y}lQm_nJkJMYzX+%&z%7 zRzbCHd7_1Knqx4v9c*ja;%Wgi^@2GHR5q6i-hE1@Q>;8Iws~xBWzLH0EH(jne}y?r zDW*_?%X)3S2z$lsbr@2G>zJx=^>o2GwlEXu?kI}lm?hQ#}X$Q>= zD{rw$)Kk#|QqW^%TIezEe1`pTn4Bn@oyUJ3x8Yo$D9}&;EdQj{Tyj6!x!6xoD;rCh zAo%4Z7T%H))oGJG${dI-#;_$DB=|c=wM6OH}ougdRUT?OfnZi1&v2lxH25L{3O3m#f@N16Mqgz%F`+&Yo zemHFgN~bU!A0{n5!tEW>d5hvtxZ5Gr63SYvF#)f5C;m9iW;lvN8= zE;CR!>JUb$G>8=iISD8IcAhime9|ky^mUwr=(GVVdxUT2HnQCP>a;JqB~8fp!WOjs zy4T0cXjkB2nm=K^Jva05g4@;?Q!;OFc;FoyR%S+5NZ$K{TA_RJ7W%pId#1}OoDl$< z%YYL_8a^Z_ylpy^W}of#MBnqp5|1AcC{dq|)C2oY+8Xme<7a5xz+lAoRM&zVmoiAJCWorUtKmB1 z6S;pTBY?(KLBywkB8?5G1v?~Rp@$h~kOP1LJUB7+o8t&$cR4_5G?SDH<_Xr>7@g-z z!PRO~CqznZ?l$OevXT;dD1i7|`7^Cai(9kztVz9jG>5(~7g@RH56fI4l^@{5V;Eqo z?nD$*rRRY`E1t$V!YVFK4nbjPG0lZg7c0}u3xxZ71>hfxeZE;8WJoTrCF!gSxkjtC zL@D&uPB)TWIM(io3k3ojd#%46_qGGRP%K6jPOpWYT2clt$G*RYrU)`lE7FD1d%FCG z`F6k3mV2O>+AnD?*Ze6hbDc3oqy)bv`c8iszEOf`>btY_JscPwO*MJ!LCfEDlf!hY z7ir6;xCS=j%Ka@?$Wql z1pG+!xHjwbXuDiRsW~4-snfMTM~>D#AKcEU92Z}J~jNH^SOs< zve@DcK9mGAJ=~LEdwTWi;hm*HO9{jZ2d9JQKiAgJAt3Sg;Z6h(kw`!e=-#pN0rabT zQc}#ALZHOojQ^0g=BT|$wqPkRl#~J=46L}bh@)x9ETm`Hu$e>!l%r86P|M6&kB+}^ z3kwvs@f&gD?~xNe){h3aW`C|x&Fyw)@?E$8CN(%f^1o>LIRCxd-`4jGPUy4J0URqA z|H(N$oEe{-#HTc~|DZYql0z+BDW_$8|gOQkcr z$)|pIRIW;l3_+)fraIPV1-#z0xdV3}Gzn5(58+wIXe=_)zUn+deum1=w)ng*8K8b< zpjX~;S*nMJL|^E2o-=fwA80cJD2VC$pJ27XphWLe5|WY;_f>aDH(meI7VR5U?Kh4D`a#jqvZkJG}08ZztlVX09Gj9B*mhuu~?;klK6^M%8cV0}8#mOoqkj}@3g9W)GB zw{_E!Ko#1oUP+pP6cVj7Zg3GvlG)vvj|Q(+N4`{Y*@+x{ZPn0F`p2~XlvF!a>P|n= zTt;DS{^TMP;aB$$@5l>j{<=w04Vfeg-0@1%vhwiCFgY1j4370g@_)u|(hXV4A2-QA zbMfF)50_O5IqUqhTQHA1(RI)uK#gm{>45hS)Nm4gTV+8b_>Njqb*Z20w2E#Sr&c*A zW5M*95h5W%(M}9Q!Xj-#Mq5?;Bn`Qw)e&bDk@B%BC>&!4lQ1Nrm{@5bTDXKoL{#Vk z<3EHm;S;sS;XCu{m5KpZ%DfJd&gkVNk@)A-jZ04anRRgFIg?R&@Tdo=Uy37w#a_|n z8aU%EpyzvDN+*aNGt8}GGDtD1J*+u0Q`7PtxZ4HFmAEOhHNtoycTnvHp(A9o5St1- zIU&$Q#O14NeID^hJ*T+A_0zTi*DX{`RCV7uT+9NTGtggmpO@Vipf*X8K7ZCPh3XTA z=#b|0%Fg7boDSv$<1!)!K z3VRD5YqVen4Hxs2(%)PdKMH8`nAuwsU1>b}xuqc^dAH{#(CIn#Ct;pLEjL_*t*Io! ztGN7FsY#-ObuYOILEeXfGj-DUa5q+08P-~)u%*&C)pw2i)z&ncICJybf$63*Ix7wlzPYx0Pn4LHA8GW!k8g~WYqVQ9{lYJVHm z+NZkfrP;nV{s){|Nll8#e!%er@cV6q!b`a-kAD6l-(ed`5;!ct#8H12|{XC zwEgbe84J@EK^%%MB!hHyS!#Qh)sY*KoAfaTRFtKkjQkn?k$%kGC3IrEGbYp_rlzQf zTsa*VSw^<}EploEN#sT#o z=5oU=+b<;dbA& zrsnD|h6GIwq51=tmaeFTp2aS|-tL^n3?mH<3+b({w{+$$td`&uCTU<+tSyJ!zjVaD z(C@@e-hf%+%US!|*mxg85)<>5KfNK!IZZRIq4dp)k9A{I6;2gBHQ*06z%5D2&B7T! z3dF<%#mMA57z$vV}Bh_X~)1>)GG6Fbt{8A*Wlq?@+ zObge0UCKNB47e9Icqlxruif4Qcl0B;hJW+@2nm=a@bHbf0xs3XH)k#U{gcGT(8U!F zMAqBbSKqT+kKKB2KOJw94gFvZd!PQ`^S9^i+_5&{ahZsRy5LuXmtepgAHW0w5V^yN z)rx^N13}yf;cC#JS!&}oVjIuUO7ZZZL8o^=pUli1Ig<$TQc1sVQBKWZ!n<2r!QrvG zSL8b1$7`o)=x?w<)mDdt4aI<1tncKbD#Kn(V3HtUYTeSow4!Z1DMA7VQReB2cR0;n zcfHY_?olE~wKZ>2ezz}4A2<^`Y1votRf^*)tK#c>Mp{(G&okK6f^kvG zN0@n!pS{4KDW|s3esTs;Sxxei(g~-b^VVh8RZ3L6YuV40;y!BB3WKdX!A^#b7>5&u zBd5binvh$i)Qz&iXTa#R$BP!atLqh4QN!&%!-9t)GmiETTz0Z~PFDdF?+0C9!e%u~N0$UuF3DZU>ZN zw{1BQ0e=ijs`1v^8-^|n-gM9AEU}45on-Mb8owGWne|+>WHk2Hgw<-KEfbTpV`%=! zWH1rfJYv>j5m%Ec5*(z0(#7awrbF9h>r3{a5c6Z%GUT3W zDqQfFQo{q!>=25H@KFE22M8}rO`fr;{h#LA8m50SS##7K)D45k5*J2X@nwE^72Lv) zd*^HcJmdQx^(VIuIv5Mx`n9T`m`lW$g<+tPgsuOi1UD+7l( zVg*5hxP1T9y5G6MAo7&U86?N@$Xt5EkkY0_!*vB%p3c>kclIn4^G;RLPs5!Eywc?~ zlEor{45L|V3lL&meelsgNyyy;;>n8lJKQKKv2}$;?xMWRrcY;g-%qz(Rv9hIHu%{+ zvX@J6zW(-Ho4EJ_=<+_ndT(E6Z{OPbE{+}#7YNF3i_3(xL!KS1ae(H><;(lBj!ZqX(s>nq|`Zu#$cok+JMatWhwsy=0<#h^turSct`(x zJg<#o#oRc}gOIQ#KuP&z-+!+z9A8{bn6~x6E!lrBFW=JKRedn9+rpRGT7u5{+A@FV zxs`2$qoO9BC(wBQH4Yfkz`pUn*+MR{me*1M>6&FQ{B>{leb2{UFSRaut0kCAw|YSj zgwhop6fnmsc(6EmxdTapL%o!XS>z0$>Eq55K7RiKjF^6NW{=6avTYxmr=_L$-TU;t z!&!Qh4wD(v2#yo;&CJo0UO+yUN2!3O5})o@;G(7%$Ve|EN5#xn5jn|3`bGw$&fYqO zjrB8}cVHfu$;nBG`TuUuD>MT&k7YqDxj|OZn5jPe(cU|D2*jiiY0 zo^0JS?p+cj9Ba>ZWMT0G|1;&}U7Wu0KT}CK(=)pB0gMYNQp+M0m=2Xv@ga@oq(f1c+3_34ey+fca1;Iq%#dIqHO@1BFqf`ZZ4d`BhwQ*1N&+6nFd@OEqB zW!H`E%mmC)3R_CYITot2eWDBoouQoHPGbE814kSTiEOQNVPeleo4dnfg11N?BZj>Z5}QJ=`0f#|-5=(f_k~z}$v)Q| z30D`EFKdSW07Ji9I?(zsD++|-Q00&T_%&MsYcF_P7cDGnT zSMfUQkNfv>NyadO{3x6}2b2~ti?%wdtX%F_Pr}(EPOCZ3 z8sGg|Cns3e>|@-%Wx2CKpS*e~lwA`UeM{1;0B2PTslv z@+^g(JM=z-vF5DAGn7z@w6(PMyLNk0w>`E;z`K4Grl%)Pzzyw#MB^jDqz=03>nSE% z(irSD_AZy|=^5MDpq3XxRD;k#=pZ?V3lan*KeBD|Tmi|)4TtO&mX@%8K|86>9^Z>~ zQbuI^6RjG-lSI;GA2d(2ba)3A7NTU%rdefFqdGK#l=Ip2bEsNI#hKmMMT_R8MUv1x zStlmS`Y&Ge7&?6~rjqhzBJ=vU?PYL1Dv zA?PH=5FA2Os-kH*jO$KPb$Dn<3BhP79gJRQs^nS6CFWKuIB&_^grxYw$l>j|vdP6( z`ml$}Jqkx2)OH}PE+i^xVvmvY8}tYP!42oIz_zarmw1t~rOhGxMXTMQaNz6t8Z@+0 zZ^S8#hEI``KGrVMttb%++3L7nEr8^R#auu9psEn}xUGwhY* zUecTYUVHXvZ2?RLhVXsuUXgH!4H!4Ht^4G78}fYAIjQ$}_RszN!K5n?UbTxzsCO`f zhSb1>cd*j7XI8YNJ$n~iyiHgp_jjx9g4$!-i>T}0?rc<%>}AiXV5cOK^FwaVi`T@| z1ALA|3ahrTg=jeRv(wp=u63M*)c<1Yt-|8!!ew3D-QC@ShQ=*ez{j zG`PDnpCg-N||i=RE951V^6Zob2!?n4@j-DSO)pHTqz;ZM4Mc zVp3%r1wEMH2S0%_Xv4VF{3j3tZsVvAe%3t*1f?9Sq95yLPa~BV^ydBUyD>Tc?Ugx? z^pYsyM}C-h&v1Z6ISe<{tj5ZlQY62S!)%l#4@Q->iMd6)zu5e#vh_?wz~ka~`Wsqx zTt01M@6SD36NTzvZPl+AU~><$FEeMdxak;1;w4T2<`=N6VdIxj>$ zN>0~}KBm8WF5**+&B?>Vqm(}d@hfhx;qiB)UOp-eL)5l|3PcF25|QE2RM0if#LC<` zN@CxJV~U`E(n6Mhok>z4hZ6k-tp{8`McC{orz{6)G=|;42Smh(O=_mfG9v&%V2=m)COf!NCRI9Hy02TQXxQ z(-Lqo)w2)PHdLvK@v=?09Ar0@qQswG0NNVjoHr6*)Ft@(flrWM^3fgldKKbO+8Zb%_)T*Rc(ET1e7X1 z@#otQH?Mg8_=O>_sRZ;&(Ez|?fb}W^BP{i@U8xC zc16>VV!_qFHuL#SlD{RH1uv4@kwo&z0bCJ}7BSQND+vB+Im|`Y4vQ~DOjJUDO z8~P@BiTsGK7TD~R9E=9((D9O=aefBadS4qMl$4=;VRZa^aoJp1$rOe{s175}l`D;0 zJ~7KIqc$4y(FvTh5}XOns8|VxI_!hSr<4%|Binl3PZNG%ckZ$YjTJu(0z2n9vZoH2 z@^vXMfz5N?C8OQnPo}pWF`dLXfTqB=ZbU4)svdV}M=SUex@!;8&Oj^H?+j=h&L}OjpZsmtltbHXG z7UUORA;?BMi@2%?b0YNrq4V?@7IAFZqFvhkJaVymsi-qxubc0wB@;OOh&EE z>w((<@**rnU0%Egeu#MZAJI6Aj12(_H1m$HnS%tPJ1Oj!Mwo;1Vf0_`dG)E>Iii?F zPa9JYLw&DET7{&S9Cn4nqz$|KnODiw*cJd*nIpavyM6;hStR=C(#xzhGU8)%j3`^B zQggC!**|b~Kt{;M7H*YE=&p<% zD?exoas4rx2zV81YH@16Uc+}ll#I*S5GJ4CjTsBaSWSo{qFFJ4ifCF%)~vU3=sJlk zp&M>Ey!||q2G$$m@gIzQ}mVbdbWnrUHgrbd2-0TCc*nk$2n zxN7w_T};7M$-+tH=>s&foy*T4PVzFCBOl^5ztNhK9(<1b&b>|ic=QYvPGo&1MoA=E z_z%0GuM)dz?*~KG63*y?K{rpS67NF=ZwPNkjJaP|gf^b?kRN`U`9X?nWzQ0D)W9zf z!(XT#cG`}bzEP(eKmGewW%|O#)$#8Tz#WWIu4|Ra^y9}+62fUq;m(2@QbY%%pb2P( za(|#$iKAw?d;jcWn{?Lqd}II^z%uKV7IRjM`agr1ccK3!n)QW1V6ea|K`Vwg29AZz z=_%J+1&*wGH#P|t&x;>Q#=Hau*#6G0*ub8m?4ZRl51deFDMYc8F;87-e=?L-$>1-w zGy%kNP=-n4VoTAW6bXk9Cw-nQc|`NePbNx9OUwKNEJzC~Cj~SuF;HN2h zzduc83M4E4F;^AU+LP2-&I7k~4Qq%%knIkt)3T51b@Km+@QE@KU7g;UGO&K_?%n0$c?P-Ul=E0o6hqB2#}O=rAxj4Y+&l!ywGY-dk-2!H+L`elJ!Z zH5>r`d$66O0@&w01?48*tciV>s0h9CNAguad5E-hNh42JRKhsjD5G_kK68`cJirb- z5J;)ZbaE+@K@{Ly_l9F+iBxm@y~KzzRJS|JlaJ%MF)Ee~&3DqNH{7mCvd-go;X=#p z+J0j|`C?T#@GALCfL}P3z}&!xIprTy?ivKNrSd5=;jVUU=nLN|MwZ}XR;Z@uH7wmd z({Yy_J}b&CP+tpDKhfxkLHzhnXj^D#s2D`|uWj9*RaS3y^?Gv)g5PF6t{x9z%{c=0 zAO$eyOD^2stabr5K|GMPjnHLII4n=U{U)=p2j%c`(`$sX(b31Iz6boE*S4Sp_JW(6 zzg-u)cNf3L|F$kBV?})L$8U`FOp>g1gKaQ$V5H3OKT65Quwb;$-Db^@%GDsq)-9J! zVFZ*)DiDiG9kmmf#u(LUD5!XNf|04#knK#bUu@kk3c7QAdat~g@85|fUhTPjryvco zz-q?DCO#-6=`(Ba`@9;|+b~dyJ?-`ey16VFO}q$5`Vh3U2+d|qy}d>Yxo!i{nN^cM zyPi^R3H$Z6y>IKz^le{xc8Tqp`Jv+Hkh9bk#%CBP@Rcz!SE3-7svAP=!c8f)O}`J~2ms|-;U(@misk#52_}|4BMFve zH7DtaOfG#_MHQJLSrV6hHf&TU9&``?L50hFdvf&)uM}=U6cIi=jdoHgdq6U^kOyU= zS8AD{w8d9*hgH^Ku#uA_GZ#}DY9*4FIUk(7ag+Mv6U5llKpmygC%>R@(Im@58)U zzQ&%Aq2recOyNo2VZnK^y)^(vGhc5c>g@!N$e#4xh^|d>$Gzqdxgx2R&AQ?S8Q7r|gE=Z~fN zxCU2JSxY+P^o`sDaDTdS5|PNKEzC%!^f0^S?ZzW-p7(inXx z_wR|PMo!zLsz$bBnH)a#usw8;h}1f3cLHmK0K8(ZteS4kLVK0N*=V8j=>UM0@B?cl z3B$^GbqKvOO^uzgL(4wS+8#%mE_cG2of7~mIDyJ!4~)xPalgoVO) zxL*ml=dbfU-KQoOhoyZ_|8<>8DA%mOZ086Df^LJP4y!RmJufi3k5;LLTvTOoROOxY zB_;_I`*KIWh$P~FO>7GA{a~Bt$D}6Y0@uegfw|QVx*NG&+nBQ#7>{Pv)D}7mPosj| zB1sjl1>1!pU#w4mhc_|3b?lqm&oF7>nZ1$em|;yYn9MZ!PclnvVw$P_(0c*c6- z8h7<*b`aWk!6-+Zsj1UpOTv*}@ES8PAPj27N*nqHrla151!)Ntl$=@umAb@%Cb9}@ z+lN>-%LCpF;tDukIKG*UlBXD~l%_Z2AND6#17kQ;6jNx~+1W4ro)+s~_7b39(zWmK z&*Sil@}4;Cw9>u^w@5(45_(p5B{2nVx!q^lNCCTa9Jq*6s1krn^gUz)vF+0y5x!%| zVKRXbP-Mv=R+~&SkG_71g4%@Oh){;bm}xb^}3jZPnb{lElk~W zv0$Ngf?V-WL}HUqbFOPmw%GZHJRgN)*u`4E08)QG(MAm+o<9swQf%}U+{}EXGiuEr zIhg*v-g)Z@qLxr5SvrabT{mC{CqKSfV4ZJK4%hG>9Aq>AVzJB-90kx^cd1Jv!-801#?;i0;?DJ-$3^ zQV^se_&q%07O7T8^f+wtNEy@+w24vX+K*PmVp-ZZX!JHp4g+nUO=Tdn^8YLw1^-YR zH=KlJ*{xtvvHQV2FWD}fxe`ONlt9?vvwadb)HIfEU9w>7c8q|Z$KyXFZoy7hEqi22 zJ)5ephv$7Vci}oT?Q=78-y2OVe&Hv2P|a7d8X*3@uC~*`b*39}p%YfWf=K;3Cf|N{ z@s1SYuMf>KZ-og&6+}|Dk8Q|yVsX_wpCZ-1ZrJ)g8*Pnb)V;DG-~E+>niH-_?7|PR zP;~lZVHgpnmv{M``3Z17(OP2}q+4nzplY&d=4rsmCfA|Gv%+BuPHKRn7pX?=rq^v< zY~9@Q>E#a|7X^FrFE)L}3SKUw*Lg)I6`BU9U)Mz*YPOzDRIg+_(|3_!kz_oaq5_|( z3g3U$HCWq-)JF8Z?Q@w8cM`XDyd}AIkht9?w2_lj zmv(y^X7KQkCq4G8ycU#Xi+POU_$lcR4uvnJD;>s1BkVkqE>3`@_{MJAqD=*NnKo#L zDI1Emtmw9)9;3+!XQEvitf3tv&c$6PFpBhWH7TXtJ!z5DS6Mi(KcSZC04a+yfpaOhq4oKoF$}h?D>3Rkrh0 z+`)9alhLR(SBB)_@9(}0y6~XB$?NMR{2@QhJV+L8E!veav6Vnp6?fV2Rqjc{FSb_M z2gF;2T_0qA@aU&C%h}g1{WXzj6ET-lS`KFP_;>*nI>ovz#^pd)3{C&c4H^OxTYSX5 zd%Mh{34!uHizqTkSOi2|!6T_ZBE@aVD|BTuYlDA~@2{a{Y@)tH zf-!>{wVfwyAkN|HoGc3mo2aWhlHwdeUeSi(?@+$N+9^-qhym0imML;cLl2cK99>H* zuk}lZS;dTxLt1)q1pNqKmLVynFX-bb`= zcOS%uTVt?R11{+iT7+SO?*)Tp9I)K?`GS*Q@3#i(-Xgd~zMKD^!Z7mAoq#~MIJKU? zSr|xSa%5Ub62tc{TR*4Pc*hkc{A@*|f)<8as9yij^`udSPT75wBPDlCDdUQZzPn0u z?2BORp6POvq7%uO&zr_!wb!4y>;xF*r_-{<2hI9|Z*{|RALTIt}jVFICYQ#V|{ zkNTWkj|JdR*eY5y8H(xpIR)F0A8AQOlI9^6J~2?cJ`2atK5fuu`9INXsTfzCeHvxV zvZZ!SIuqCx&0i@DDr1fDq933?08nDzE@9tEz&^X#g!j8|BHL~R1BV7s!&9rf5M&R8 z!W$<~a{;{}r_UjN!yHZ=(u$Sdlt&1V5_?$F_|n2*`bDf182M$?(8e)Wu^%Uz7(*7+ z5k{LXTv?mEGL8^J_{$NAAd%VN@tZZ#E=oNG@S)qxdLr|sBL~M6eW{YiXE6OJ zcGDNj+=NrX2A4^upogI@gTMFfQ(o(EnG5PSj-q$D=@otsC{`dEu$lEzcXWW7$@G{u!a5*;vW#0nq6BxDl$^43Ol2SRj|^Jabm$`Svby1a za|Yn5E;u(=Ji4!%`n2liS^{OuYAQyoL@21^)hKCi)09LjdRmL63OIf5cul9?WiJR4 zMKH%+)_+}k%Jlx4+dWmWN>5hoyfDZuVlsE;@aJ}=?XuRVJ8#SH_2TMI!k?W_3zFz> zENkKW{QE7_=jFH{_vH`N(kuLUIGXoPkbf0lezRcaPiq9lZ9cwAS^hvwscvpBdQu3y zOZV!2pWPaHga6tAt-K!uQqxl^pcmPEqOaDd^$%-F8Fq^T5(3%S9`TG<;k(#IfKV%I z3B7s{Ogn)tWZN8wy(46|$qf1$u>+|5V?Nm`{CxNK@SrX@uO{as504nIoNr>WAV}yi z@1qhg7@FYx=3NuTlU-xQH}=WnbI=DD|H+Fm3@HJUf@~X4r`%(1^Po3?JV<-+@6%$d z`>D^D&#z1T>YPsj`&G+s7ad#+H)G9Z)T1b+3jgS9^%cE@=Y^#zfMDD*2PWc>@BIKQ z6r~?*^Wq5{aG~00$HJKtKy>LMR@yq_P(;RjVwzm4YB@{wJv&14l24kPG^mvvPNTR> zLpY@bQZ=Ah-lVdL@}C3P4g|7T+WQK>j#3Zlw%Xdc6p-=C``a167zn9)5GZZNr_f5N z)AMb2;eL#3h#U}hHq?mrCu#Jw3{CsPt27z73#e`U-16O_$8md|Y|J_WqDc(xZS{?$ z`M@7Z5U-N>Jz}V^ZHgOrOzvB`v9|Vprfy$^WLOIp{WL1m=tnxSf+dm@OloFI-gxAa z|0F9*D^_syRF(S&TsFBPqBEPgUkVZB3_hEI^nMyiN4fXikGG=l#6em7Y5?~KscQ=< z`vB8_6MDQ7J_y_!u9LS;SwfUng{Jq%KS?!u+!@XM#}T_PW~)|LMryPuHonHI1zo3l z5+`2QnLQ%Ss10AfTu+)!+zM`uNd)iF2i%+^Kiq9%yB@3sxoY&u1tkwxJ1 ziGCUKp6MBOy_}=1-SQKuG3oMq+E=q>C3m0j9a;K|q#QgZO8rOo=p609e!)^`Bm$t?(qLE+!RDBQ0>SiMAtdl@?zqbVp9+48p z66g!Meq8mNNiciFD+RUhH8y1#OH2SSXbw$0Y2~mC`s`x|b-=aT&pw+|hjp*~o7LOw zW>2e7OY!ZhnY2z5s18sf>ZJu~Le|!TRw2 zQ_pP(`%4iArmRL118R8ttdiN&>06%9pMQy44?Y&5?{#Y+RPckGWWx?2?v*#Cc{Y&3g zfeXDE%phz%S*FsxZJ>A4@gbNf1bX%nQ|l$M5u8!46GVL#F8{J6RkgnR@S^ebN=4$! zl6V}i;<0b7=P@y|__zaw8Q&gsGPOZIXinw zE8Rp%X+#rCOSyW(I2QMQ)h{GgR3LSZ9bs!-Yc}$da0`jg_!diP*X;np#IXM|T1eJO zZ2xkUn1vD=t|5Bn|EQs{Q%07TY-!cI)AoG zcLOd`)`%B*vk@f)u_&uhH(>Pq*{2xeNSluW%grS6U%(vd2vG?WGaeQabT!bY4HBiT zLF{B4h5LOR{_Rp#uF&w!krOlvYc>C3wI{Mt%BUAtJ5EQalL&;A*aPE3r}MB1UItsBBp8TmWv+*fpo>)t zVIoAHT_gCk%wx^RoH@Gd#wmMK&V>tp`(@M=qhBKEn!4(+i?Feqq{;0D1Nol%04f`x z(=u$mo@0tWjuRIIyaw)OJFazG;JXA*lJoRq-&2|2?_@G((%NE0&U3sL<{>w%?CPK5c{~khq$0R-l!id9%{MVAlX0Bnu>F ztva>d&u<1S6mziOH&p7BnqeEUFYbiU{Bu)(XfY)0*%k)tM|k4&_Ph1t!W}<7RJtc+ zkTib;07`^^lErC?Tk1S`E61E7W-gd3{fPAX>mZ(Th?-(bEKxmha>G$f*3wuaqW|fa zaH6)i24R2@7Kpj(XBk5&cly$2UmaHtX@%?VAJ>I}ipA@O(+ytGEbOd@n+YNoG`f)A zeL;QRonaK@Nvj100uDPJ_Ci9As7iIhU5%U_c ztmvwnTn5FXT8{SxrJ&=q;P;MM)8`tQXzYe|fEva9H$zUA0o<~QZjUL4-eTiGjTHd@HuhE>HyzxVX zN5|tzm+!PoZ@z@zsFCll{fq`LZ*q%i`HGOM3d|)k%4?_ot4Bmt4yxz{S_hxC?m%RE z2tGx&h;mySTp3il9Ud5ZUhCfRe6hiF@%Z!*&t#j|nQ;1c7PoPoN9_uM_X$U@6qwlb z*+R-!Yw{8~6;x^Tdba=j#}D}i*_%&4*LF5vIK$XoC}9TWV@8Saz>P7|5UlX3z7gI7 ztbLi{6Kb44Vriv&o8b=@wCN|W)5}-+5!Jr8GxCQyvp1nptm#xjo+Yx}z`F{P(mAEc z_FDN0HlHM|hogXR5CDU}Livg`F`1LJI14KR0Qz0|n@k)vZkXypbNhc-S}A z_I@_`sRfACep~ysW4pU)PG&M+>^XBCFwoGRc-qBZ%-TJ-zocag@O7o$3>ra}xD>B_ zp0FMF7#awdr}CokVfw`}?PFh8uuV_>#Lm^Tw@`p*EXRVVJfg*+bdc5ysQ%Y-d9#ofj^jBTHg7DZ_rxXFvrN zSFBd)<+Q;1neGC3kfgrD7k*l1l$H_IFIm6Ja&kU+Xn?e9QGzuogu65D``+{T$?##I zkzP)x^~Ok_o*UbSCZAFW_2Vj9< z-^FXdUg8#9|HBb~QxkcX*{?)2nO)y~jpvykOx9VD=h*BmY4QY|?ewq(vj9t*IFk2UL^{M#9 z*xO|~B$;oslbwBh4JyFjq#7~>tuT@dLA~FzRwek_hfK7|j8N4|-V2Qe4bGKONk)kx z1Nww2%BI(5gXUy~yty;)n;Lpmn;>UXfTxm)N}GFEg~^s#LkpQfSy z64_SzCm_`9tkZ$CfSKi>=JwDpb>0i1N@0LDIobHVQos19Zn>!9%nrn+ytzuQ#Y_6Cx9O)5W)4%wW9 z1|2D)+~~a26`JV4310cua@R;B>-AdU8+0oJ5VAVdp@!wJPovRpy06?KnJr=-xRF|Z zSUIH%NC$vOPr#B$1WW^lt~CSxVaA6?9JUSRSCldAwDBhjW_g~RBAUBMRd`MYmgwP^ zC!au!s_q~z%EEby@3;bPX>p1IgP{SLnqVQOX*Wl#!Q?g3id|w+>e*-ej{X}H=*cbh zAj)Q`(7*-KLB&2q81zysvfdp?zL{o?MX@nE^EGI!v%)LhtBfSaVOMcHF{n8;G59aN zlf>6_m)GBISq6G4VlSKJZ=eo*^xU3(Pv}33_2;3pE%znsH z_u%kw1;-3^Bpr(5-5I9;7+yGLxk` z##iJvz3;r2l5Kc8;O($blt+0210?z8yO7o?~w`o z#&_uD*IprFR&L#m>I6ciH6taXa!i$#)JD!#JXKu3q@*_z`(D4+`6YO~dTrI4y{vd~ zP~_MqG5nVcULBlZWI(7Tu05c(p+Tr6`21@dWeDgJ$d&78(3p=JZwAN#*M&B# zfo)fN?4~1sqZCI*<*x!|vrCr1yK94PIHcRWJmPYVcznSDpoAP%3wMV`y!qg;bIXFh z*Enp~?QQXX*$#o3bvL3ilB8SJ{>r&<=Bv_ZqxNrd0t>Y&p=ic)+E|mK@~GH(wk6|u z!sEUhvnC_duLGw?T%3IRorSSI`ulE)n*(M+d&Mt{%&ui z|GGTFAcXRFoA|XqDF^M%Nw@27Y;U(kpRM8i%`T{w%Ij1Z%4EeMJxfMOQ!9>(k1S=3 z8ls)`Ur96eKV}R#6xo9BPs1Y4^JNe{A4uDKK z$AjvuW_zKH1v3}C9koMOr9&8-B3b#Svz>P=mdZRUWFj3jLc9WsfF{t-_R*+gOoh5A zO{!k%Buw_vzC$(^j#6))ks>-|S_)AHBBL|rQyPj4Q9u1uQkCG`azi&|*#ZzriV zAzqYtBo_;w5`lo5Ne2Hh1ko#kmtU4JK@y53Wd)t4l%bYRQxkGp)PwOvk+qAZlC&+W zaHvKMJu4MG<*3S+UT};&>|1~D$?3Vt$|~YSy?m|eD^q4cSNV=lcKcBz*pr<76`?fX zOAkbsYArbA>v?ywUeEQif(7Ys-XVQw@c1}tH`zu2#OGlWJ1~|b9QmT}v4s0st>B47 z#HAxoslc67MNJ%-*|Qf`<0Jy%$qhacGKOXtDa1Vgdssp@SlJMsKeHcRIOkol{?h=L8LJgbuxoxb&n~72Fqjz4GVq z$*S5{GQ=0G<^A8Z2kZYMZdG5Ir8SoDBWc-{eekCkDpAWKPP4m~z|INW<8o!$Ky@dF zk2Rz(I!14F8gs3WzYe$_R7aQp){O-ph+-A+*)hJ~|IiEWjmBfpvWU^zssCw&w(JK27X>i2RWI7%p~WE{j$La};z|uJ5%cWQWusqw)x-t(BXtsWeXLte*Jx zDRtxsVY8IcHOkWv)05V3Yf!I94d|b)J z+$q+`Z|x93IjwGSLksNRp-0Y?a03_hfHu3lHE#mY9HDnis{6IL_J_gpo5{YHt@him zf|tj$?|gzm_cmBmM*Tmnxx{DwIpy6@w${98YYa7zem^eV*XYYyR{X6UwuDqTmR}x3`0I@o3-8xS_mOVz|h5`D6Rh}&xAJ{ ziD9>TiXvaXbWxP?L_#4=kU%pSfx5X58|AR^(oIS9rfZv8ivM26ErYa5z{UdocB`O#9yqQn%7 z6Ag3?8eAv7Y$Wc5(M^1d#-fB2m5Ziz^mM6;n@VU-O*zs1gOBjcI=ywhqM53fjX8b( ztPx>`tq)|BLmAAL51FL_eV+p}*{=W7sEnO+t(Id;jJCpTuFc)|GgYr!P13|0<3ejPlnS;u--86MK)ZCC-d`A@6Xe0uphK_jd-#i*FWTZpD=s!S zWi=%>$sDBS1PH+I;J6elIUy8CAu#ls0&TX&ojirWnI9IeN-O2Md~$VS*-Wg>e_D(p zd7G6Oh^igt)PxI*+R5TJsq<5Y5Zn&b{8|f6Hh|EwraBo~Bho4u6rtjqgf?0A?W^V-S^fMxvrC*k*=?Q)OZV4Q7{mrcJVv>t@?*bSO^+%V=n#t zd)*cWCxSL;dUPCfk5uk(X#`QA*e=o8b`~BR=5q7mPd{J5;|+9#`0jo!US3xAa3l~s zN|+%=7-E8a5A_cKWb!T}JU)~OX)=S9(xVXvh5^w;heG~Ev+4WRd*+~DE6&Zoa->K) zH)VgFX`pE}-Y)S8-Nv6OAd`iB-+PF`XLuE#){X0QzYIvsMoUsP*dJiBCzRR&3|EvL zK(pl~bFHyB+~$$Aq&7$V<@HfCDBsASHO|roY2J#gSKabN4nXFg1dKrGLI+76y)iqt4RjjZIRnyrV3{#to@)6 zSB+PwX9ihuP&U|w4%$%CzshGB^ihr`^E)nXJmh_tC%f zMLHBE7oFVT28D4x${;^hVF$z(g>1G37u5W2gTLIt4hpFYyshd!$9}`n19G+RjWf3$ z|2s4Co#>E|*LUF-7gF3fb=zIj@MoW_<`^#V?+<;(PCd=Ml2bTEJ;YV^diZ5V4H#?F-j0B zHvk4(N3z#-zf>oCAKrg-BKdmZwQ4duL;VL>wNfPbciv9^Usu}X2QU|7dV_9GQE5~z?u2(GjOSML&{L19II2r*iQz4RnD{Nd61^~4RnC=x$67vZ#> zLBaBghelgZMA#c`Ih*$vHjoic{ui>Ax$qeVFqX7r*Scllz3ascwdG{kbW`~*uz&_9 zK2c@&8CIr7h)4hXIhyf)G7&2;nBUN7jlT)^enF`aX?!9?D2Hj(OO1;EHfeNmM zgfh?EApl>`m?+uCgFy+o-utwVy%oGd_Xdx9;3Dy45d`Ub6^2Q;BWSWMh*IrTpv{7A zg8Jp*thAGS&Dy?Fd9CBn?f~9z_^yRYl%uKfE5^SdkdjSCv~6>r4_Qd^(bXK7?T_iy zjdMy5gBg88Ds8zl>_NB0La$4dxn2j4xxKFhf3EMg4)$k*5l2B&8szrsaVMXdY((P$ z-j?}MX5n+z0A*6jJjsrfjSvVU2C@mvK?YV5)4D@Gz0*42^~dOQyGMa!RqYWrQhc*? zI&lWz>mq^hG@f=s zlJgwNOTjmQD@7=j<37eyCb@pX*-FexCe;-yamhc)Qz?D z7Z0yK`2;rQ@4!lt~g*i=pHOqK4M65|VP>@RfQCo6_BwYEs?*S4SgAghFCxJm41mvjjh(_+r?ulJW467n;8W1rI^06OISqSooEP41c zS-2!2UKP40YSMO3HV5YiK4rXLXCD`qNm6y)Sjr}p z&hC*te<5j<TDu$FYe?w#Pv z7&YS|tpayeY|8cVdzV+Px4$9f68mTl&MM`0I3Tuz#Ay$Gkv;f_tNSnI^M9r{YE7DR zascd_=)sf(0)o$m2lC{k5{A}v%$LM+(-($p4g4LHh-N_57Xzrf3r$o_ z;|97sS>kC?Od_YLh((ZEd+jE(~H7ZbJPn?ZMyWr{RG)`^MJD9Yzo0joqf}f zBT?LUGpkt2VkO z7%@&sa#BlJC+?Fq=gCX{r5_~aD;+(@qhDy8&l;1nQ23*xe%ISqrKb`@+=l6OWp#GD z{u&-M!5uT7HK2zDbzkYY?Y#ATn#K(?lss0-_ue6FZ%JzX;W1-1vv;&1I>e={s*;aIO+kC| zPuJv`Z{c_R&sb-cvkgP-zlzXUnty6>F&{if6nohS*3eh`0IWALdLYs5=LPSf6`152 zrK6!eqa9aY+cYwfW`o}1+E1?8nVL9qh*fnikJs?@o2LGAxW4=7*^Y}gD!BjyTDt}JVn0}w1xJ*-1l2xF0 zMWWI)EGgho(7p6$U$YRMa1AkeEp(vlcjL~VoUDBl>b;z%HU}DQ>gqbL$Z8~rU`Ml# zCKmW^IR>421qZGOsVRuNPb07QWTQXTbE7Aza|`oKKskl7P0Qx)uLRRSLW?3-c#sn* zO1gZ*-s%}pD)Abs=N^ExNn=kiw3L6jOG@yZ@(NgtW}2gxq$=@f5z3u^e`9^>KKC&l zqVCyu7QGr|#*)bK>5E|IfGM&h6q{Y;EhhTpzx-L6@@}01SuKcnaOs1d00({);+V7a$C>1e<<5Z)Tr&(qYd@Eg#XEHAUDexzl0EToKmCON-gdiflTci(m@a9 z&}R1g!-lW9Zmxc@-Wni`k{Msj|8>x<#U zfRTVZ+b~Gsta!Q0Q+srRpNC*UaL$tLG~-f=4lLm7BQG_YO`KVL0O%(^k!YwpL4J~g ze9~cB5>)#}K|WS&?3VQ7GIX3+M)C^{*HdHDb3WizuA0BMX_7q?gd_6tvhk^o_a@-I5);njN{MyK;m_oPakdw-)szYjtPvrhH!5`P)+EC zd@q$wCn7rfDFbwToZbq49hYt5n1nh4e}8$VeZRz}hG-Q$A;0yUjtEdck-+e2Eqb=b z?{;!a^eLFGT*3W(8N@@zo}RbkzZ6Y;o11fDYjlEjJZ-OyW9ZM!-HElabdU8YT3qjW z#xWqeSwF3nZRQ{rJBw+rlBx>6vvnym^?}-k0X}~4f?M^eIeo4o#9w-oRz43$&Dc<| z0}lG#15Up)P~b`S)$W$3U% zFw`}oDh#S}R}Domj=Bnwx$$s9ZG~36)S?}ivKHSW!Q>aKp5MPs@Fpxz{jL8q$V#Ys ztZ|Z3#DP=$NkK_CUQq>f=+~~hjZ`_&o)#u;OTaXAl47VnB$&;FD0NJ;OZ%nR@A?qa zKk(@lc7@?vBSUq~h|D)28n+vewaO#Im7++}Qe|QR7E89{I0_8T7cAE`!qnIycCJ(&GlNT)fIz|)T?=Zd3y9??9_M40^A0}a- z8R7R4=leesei>q^eEFWFzZCse>U!Wpya}#L&_C=h#1+Jji+YNGLQ$l^{sGMxG|O@+ zef~l6yB$=&*zdsz>;zcET(H|P30lO$&0-6=nhTmeOte8yomV-1&s!ZQq_ero(d;*} zte3`Z{%6&sHvjGZ?{WWIDZ)Y5*Gfac(7!?EGiu9>cdmx)njWbdKkl#EAd z_F}2Fz_}m4fxW%LktgIR7y4dFAHoDpR~6cuSCjDQnp06dH7(mU38Vp1Pr{10Nwh41 z9=yRT1V}X=(2TayDI%Op#EPk1BuRjX7SrAI0}k_^LmeC+!%pq?HbD`=`OEKcP;LafcZ@8WR?Z zB8w{K?~^#Pq76McmwOy-@4RDweWzp^*V%f8)M=HUXdj($i&@xybnt1Z%4KArO^*M> zyB?y#J%VIqMQ%opOu?-RFei5!M1%xj60MS85R-F}a7)95;-sjjd$+JV=dPoQQC4^eq^L28+4p0T{+L}&o1zuZiJXDYi1^7mK`;bTLLRr+5Qk&1*XR2|DZ*4h3?ni*W z8{`W~#fLwKCeZ3FIHN-!t7;2t=Pc@{?*+R>aWk?sj~TN;2^WEX@cXRD?R?6iqiH^a zi(AL7Oogiel~TNJfP5O1P_bo4Iy=sXSsPA(m_~n$AZ`!cHB&wV_LgF3^9~5Mo~KR$ zuG>=Lw{->kj1mucZ`XD2QQjgp$9rh^e>@~ayuTbCHCRFC=igK*ldi(wi;Va(j<+oZ~pK8_O;)$Ih&K2=l5W(dx4Ls_rC6yR;TQ>S6!EW{9g_I zXhSp%T*f27E_MGsMdQ7#%Ruxt|7-5(ev(@uPp&o#{9*|s{OLVNL`j6^2j`NgYMOKm zh8+p-)CoLupG0@V0hur$r=DJz>b>7NCl zGo-))55A{|okcO&RmzBD_(|0;I@?EF!5~Cg5`+SQ5OkEJnQ}*=&dyBg$2qZj9Q>W0 zl$mv4RW>-pFkD(5UsHa8W%#S8f)6mF5Q@$>^o%igfkVYDyy0z6Xs17eRbQp+oE*EM z_hsov$6jRbORK|OPPtgZ_B^$)?;S%Oz6Q}?Prz&R4@}t%yc8z!ahOpTfcq2VKts_+ zo~gwVjzWYI9b+A_8H!vbSPYIKM~6LqQ)!Vi9Sx3>ao!)2r%Qt*f4-6>Kp%aZ7up$L zBQ`sC3OHkTy9$ASx-#xT4@SK5;`fiX5_Iu8Q#~dhTPy~l*rMU+)(WK+@ly!cYMxZ1K zKiiFai7Y>EKXHjX_Cr{K{EOm2(ods&P0Wd({}VkVtoHBbBh~CT;Xs%WN%^SyfKwfv zHg>KiJK|L=-C>|UkN%(X(?{8FNZ`Y)+uP!06#4Lzdfs$ynZSrR$kzW9Lx$4=Hlu1A z)ZDM#2+FO%VXm%jSK!=mk>_m|Y=Q|Cr~RAjE8AW&7|)ZB!NXJ%9sFXTJAUF`VqXfQ zt*fpZR_xD#Ch4mbq6u( zgD`_FvA6GT#roaq{rGM-JYB)WSeZf50|o36Ruv!W<(B{^6)YbAq6+CQ&InYPHR~@n zsM_i&$neIz0`7+tUR%EKE;v`Q5ejN~%HiQ8zy z%+m(>6+|^aGEKZ0hC&fi2-f$RXuaSHJ}i3JU|32Na08{i8T1{|0mUXGO;iV9$*g4I zv-c=Mj1fPo>pH$2*Zz}X`hi~Xf`_;&mQm8Gz|D$QBf`4YHGE++&1>GYco2nlMpSBiZF&snv~L<_Fxd(G%hJ;|!QzU_79@(JVw+wYC3L zX|Zoj)VoDP9zO>s`Vli5G^+o){rK_R`<$VOh`fQnDk`RG1r92Ti<3M0&aB*<*W}a~k1-*tj&T6X8jqU7tK6LS+M(@@Hk4BcG9a6xsJE zF|p2z^u$Dg6wm+;uWMK?Dv`}eNO1|i!KqX}BX=U}YWH$BOj;lS0uOyIXj)oZiMq7A zKGvup(m2bamS90QF`LmEP;BSjC&Gy&qDle^66`MX5y!XB#A36H^&KyFa~IaBx5T}V zp4-o@#_$xm8#CLdc^ngnt@62Jw3Ad^@b20BNHH_eBrF=sD#i{z#0kuA zcLfx)s0$tl>9PdA%?Hsn9ETR*C>M%Zx2Z_A9s6arFR}_yrE}A$$X>csEWnAulXyhD zGs$$D8XyX*_dj85KKTibUPRem_{a_x(hLag8+jyzLaT*8Nn5X8mNvh(1br?u->Ucfmy#_WA;#Vuo^ZW5gx1!PnyZ@J1~# zKucX|j4R@p@Zmy#_sL~&T@NhNyk``>uT+I}zUm9h?YLxl$a6z;dM|#wx+*;IzrqG5 z#4QkgzC6#mZ7qT#$-|XA1l#kHsn6&EzBdG0Dw#q_K@tkP}&J3li^XJ-r+Jp*ZBXu2Xs5qTEB}^TUi+0XJA*1RXYXyPKwy5 zpN(0nFcODc3|Iuv&_b?~+uOA$C=i%$t_diawXg>)n^gEwc<3BbvvOl%IH;@u+4kcL zh@EpgY*@%Hor?mjJZVa|)b)X+>72l2wT#GNv(XCsh*~Cl-CC5gjoc19Fs4(gYGQA` zM3z9teyb(F^{jtA>+Xta{G7^>q}Y&rw31n&s3AlX0lat7%_)$~tcsT)(o$Fany7&z zNSPR*WTWDdPKIF;$Tyv=>;xQ1w<@Y|YG0S>3r1bBxy2*-rP$XJ<5nZ{GRv>MB(pu!?LFj1*# zt;v;5vUeVUe;X(E5N7|w@g~Fg71!05h5dfcW-6mYfUfMjrEe_C_dx#5HT zhH~{<$$YJ$T3iy#f-O%$D2;qpVkb~anPe2;sFXotz4Bclfn70tgT}tuCIVMRU!}Ih zJdKkpw&O)!_3*ylPh_Lb;W%-lw|{R?76RbCE4nYvDI${a#DDXmBH~LhxB0kB>VLG% ze$`BGI2#B0l*DVDy7@qV<0bFdgF_Q@%>s8>CbeKN72s~%BP5mVqJ7+#>#!(}ZNIMT z-@akcmEVcMt((|wzDgW6l=t4FXhP738anTMysPp#FL(q+NG=eGQ}L72EkH_=v{TSV zCcv(Z0ZRIi5rjR^C@6Gpv4K7JN~xR*+TJrG!~XR&_WUXLnNozye6HD0Xm!pFBWgJ> zWx;l4?%BlySd6%dtjRqkXAZ>+9%z*sv8D_4Zu)M+ptW}`H}C>eSV2#v{ogwMjb`st z+}q8Mz{JOZUFf%&da-Rw(Txk&Q|Zitqu}->8d9rprXfqpbtZq)xzc{jqsT6U-3crQ zCDu91mgpLY(Ms4XL8Sd_D4t}7qg}=bNytzt9h@`72~9v_k2(}t&i%T!vAcXD$sXX| zR}#yYQu`>m6qY(Ig%}m?Cd5=v8C!--196#Uxia2198yG3t$$ znHf5C77t{3Pv7+coK$TkOSpx0+`Qi6tn2S}!88{IvCAf~u)Ci??5ff}0*IyDFIO(d zm25HyCl^=F?9NFwr~%2ubj_eXq?IVH7^R>ftWF#*LjMJNK_T3oQ(8}UGV29PiE1oC z0s@qbGoprfU-3%|s#H?RCO8(5*wBi%6jvlZ0Z~e0bo$f#O&!esxpBg_?Dd~4SN(j= zVP-QmeMMVvPtc@KR3}p0v|m(1swbxA^d69if^^71kTs2`Ovc?>Jqjmlb>COhUn~Z3uXs{b;=%1t)Cn+;;vDo7C(% zeirujPk|TnhW4A?9$flrIKJGf%9S;@{xgmv_Vf&LFb!K!Q_~z>xDQ{&AFX@)z~-yL zEH=m=bvmtjO3C9&5S2tBCnPBy&Gcj;nmGPN#MxH;H!jv!!K^7YLBhINXa5LBoW7SZ)6128^ zn;tk5)${^2ycCBvoZD35(SlyxHOZo2>?5t=W`b1XnKzDELTb_|GsHKPiE7dhH8u6` z%yGO>loUVWuYO^KSUA+qPOKw6`roRQ<;Lc@^wB6Yz{5W4Nh&IMUI;@k^W zR@~+t>RmVK?2|q$3qRy2Znc3@yeD`u18x*{0hrPmriPi3muAU;1c*~S7IIQGx%^AN zCA;>2ge$7Yy35Q;A!mXf9e*u{&cP-A#&F<&6?up77foW06iYH=lW0uBk5A z3>UH^QJN~SMq$sV4w5ZWyfIg@%Xi`BzVNy= z7JK5qgF7PuJR#_Amtm_=mP&QB4Tm;ir{YkQ~v2i~>6ZtKr?9R9kUDaCHPdJ9e)O}c6%_dPnj zIOGp}b!gt%-YY_8KT3^bKWGcGgWvF)zAg{Cu_6(42m7l*6`Tp=zN;=sOIb^$nlMeQ z?m3N*zXC`)FDWjAR)oAiySDo^^PgGjf|i@)Mx<(-oqp#6;Lou6K40?=%)xx@TZsUwC<6R8+(a<5IomqZI=!QGRgd}u)k5Vl+;j|$CfearL0d5LK0 zbhncYyLvwD{7!QjR}X_%!WWH=O@YysTD~d#Xg+*fFR72nUR_Nt41+cuX8sDXwrH-U zTHA+Afq`Z&jZlx+T-Pd0XPtsbG~}v3t$m;{l?|%g2zH?e7>0pY0!eB@3QynU@usLv zSus7iP9Os;An`v9)%cQFf|bgWuV#*$UKvM1d+#$q5Z96+6-8DdMo+GPnNc6~p0Ri) z)sh2#sYO-({?HRFUd*%fvB5OVXwFf7$n}Avlb5HLB61mSCF4Djwq|3piBUilBq}e471CKNdS1 zmiu~rST2(ED{FTY^U(REe~`rYibJ()A8V%TNs=vhLrPFZ*HBo2`pSCN_o)l-Did$5 z%S%Y|9`k!}ES1hmrhwh7cFjH6(WEh0y2;)FZ0C+U@c!0@*9Q%+VCI6+&Q#KvoX9rKJs1AVXViHs6KdL$}?Ba>Lf(9t3zKsQRc*Y6jW z>Aw>qKUdr2$gMNQ?G zGsU;Ppt=K|o|mI~M}(#;S*K6f0i7RqGrgg!QN6D}#DrL9zF|y60%e4Ud#)% zjHxLx5QX-opRafQ*e>)NyXEvDY-|W1me$)BAR9qYQs=7VDPsED*xD@rS8sVTv|RL= z2=s7Ru4?78T%7DtGicfKe+vD`|0?vn-x_dR85kE3*A8;wO8*2c3`~ZGwC%_Ya^Jy zM?ilMTf+Mp7ObzXZNl6z!uFDww1jBW8`YB9$mMRiZZ1!*+s;DPn;#SU@LPpQZlXw5 z=Qs6WNQh(x&Jouk(#kDEHJoLU-O@ncY0J_iM|zo76(8TeBrNDy4M?yTU3Gq!}S z46+kmF=hIacoocTVab|J|ucz&Fyb6=J<<#sxnmT#4a5vczSpE+j%xiTV!dC*L_bv%W}b(}X&djDNoSwtWv zY5z2G{2bx`rfUdi@|c)spOR^ z@52wLqwb(Lvd%4m^;*7qzv;8p_3fFiokw~Sk@dl^p`PW6<%=}RvWB>g|u~6ToAj}}N5FJ8MT;Jm3ZbAhzpT6Si5yw(hl4j`?|B4lETa|S7opm9p z5(he=q(rIm< zvKq}xaIO0@HbV?{J<4n!tHv4VVLN+eOi;VcN%L$-WKH4=nJyxG7%Q2iHmyyVlfMoRF{k|3&QL?}z z_A3#vS`He6mVhZfZ#S8ffg4EPH?)r+PYYXG!O?ep6fR$8bQd9t=Nfu_!D5{&E)989t+R=X<6!l4D72?&yf731nf*FIdw;frmEl8Z_sj zK`{V_cCDch);^L6AqU^}6A9BS=*XdCh*mP3IA%-m?aoun&K0NPi#@_aJUxj8h2sZa zDylomrE8OTKS3Hjr5<1R8Ad(rJ9xP^w~aLA`?3zCR5VC?`J$Pjq{OzrjjQf4w*}=@ z^-eA9;=KEZH>kDr&Llo}=eq3?HVYb-m9l}V#PD$)@AraoAiWkp{ zt-8X{j<}&s#6j3=?DUNP+Vk=1vztL1TeLe+&A#`0+^pnOBIiS=Yzc~%F-h1v_;K_7 z70i~1Fu46)e*IS78;Z=nsi-@E8g!fFT{ex}^H^HG^FybAVG)L}2yT<2WZs_Q%DK6c z+nE$!LOR_NK|kaxCs~V-K$sbd-|D1VkEF=;NA=z@b`yt!5mE2Q9oXR z3vAfyeBiVhxfxGIW(&lEh@&Sv8iV$78FgsWM9BaIoq4LDsW$p~W(*h0cHAT97gtEm zY`gF!{9zd^wtLI${jg)$yET4;$~5xEh4{SN`2acSdvUaR&|myxx%550yaM&Ute#rD z?;VSzXLi5PpOA{EwC4Wo*|ah!L(ze6cZsqR`+W5-y8Z6>mZ=KHA{&37oFZu_BM5mg zImaqWQmdSvqiVltB?Qyx z%1E<;u=j)nswa~c)?4F#G3h3lypLs-F5$L%bUn?J2#O6?v?-)!;`lfE*F)Hx6Z6_~>{$<vSObD=^DE~ueBxPm)uxS6==(j-| z-$YFk@Fe>0ZA97sVx<0hM(l%hJs~SQ+kruBfF0$)T(Xcijb+e<1}#)L0B5fgrY9~r zhlkwNR=v>EGuufy%*q*Jn~sT{xvo>Dq(~xDJ!dI z2&9dJjVefKjm^#R!x$}8%>oJw%-4p|gV8GGGnpcy!sA-i2@gCm%i)Dopv$6HLg21k z(pVBj@b40(=U9sP_N&ymj=R*jvkS9p7_Ti)=KQCjQ8^tt2p&DmL6?C&R9V=BV4^t(dYqd zL_Ytq=TSs1g_|$|K?|} zewU4J)zN=&44h?Ds`SZrzG2!V zD`BPz6co&;i7hxt9J|cuUprO@3ME62)eD_t#v5TOoVCUbxWC{NE?WDp)9_23n}TK`^7PL%=G1j@?Oipf_{S=Ub-Q zVUCP9@}>7^{_W}P<`De$eccP49Naq5-3tP*wk%n*pxfaAqL1U1Ncl`KD{~FxDNH*^ z@>v}6nPIRv;oosZBDywg(LN`A&E1bxh2#V`BqnF#_z@{0rV?BjVX|;_@K#yVa935lJm0^%A)N4X~{8;u|Utx1$8=aKO|>Eh|X;d*G!De6H3?hm^;rH zJ0GlIVi>2{;XfL;{eRB7CYrfh|9t{qc`vb;^xLF}^KNtV-w5w$U|BKJZ+q#dpb#)d z`tNc1G7p)=Wi;i=`#9&WzY{Ic>ys48ga)`~$lGHU$u{;#mM>8e3Qs63luxC0a49oP zz6lNKnxT}k^}C3#CM+}r+4;Z}Va1&>o2@4Z#QvI{8W3hy9CdjotZJsPD8oy+ncF-=GfYE?mv`~yKfI}z#mB?-?k^#S%A1R4w zTUc5*Zfsdk>qMd|Tj>QbQMz+kTwB0P@0UY!7XuiSbEWkvlF6J+35ZmoHU zynBkqcu)7`bw(9W3^b2uT{g`F1DU(L41=pJJ6=D!u8QF#cCjPL0=fUh$FZ9m>Vd8| zk6r!^M_r4qA20t%+<&x8;i5wkk~`&;^ChUw23>H;F9?>qS6mB6EJw-|hb>|MG65M0 z%8XO$*$Kh`2XU5=Y`&05>zXJ|_T8nh#&M!mVITO=Drx*_%j=iMHy(R%@Uy96tGjeP z&b-`J^x6hLCVK^78LEHs(vqgTpu4W&IA95dY-g<8GU~l#`){ah85*J+q-lcsa1JEv zIdT4%cn=k!*fF;-MpU0V7eo9}7mPYEpM1eVrI3j7^cz++Us_|^-WR)63jqafEjXm* z7-B;#l!%`c)M^DSl0rmwSQAB5>4?oHWmog*5^ZjcF*5Or!1)u30gXbX%ycv6si~-N z)3KMo)HGp;;|)PCSwA~7eo~`b^Ol_uCoIn;@_#X=Raf97N*HV8w9%WhRo-(%SW)>3 zg?D5PjQzHRo5n&-17ijz4rvr<5o^K%#xW*3*_ALC7a1qKz~_lfS{b{N*sBAA6x&}| z<}`$dWD{}8iBwD2jq0&q<^0do$OJ-^Xs0b-VBgfppS(-RlntCi)m6G2}=N5J$^)d-4&vMo1N(Ae- zR^;{@B2vjTI!zQ@3oGOM(mC1GbYP{`3xz{2eR&3wmm0>QAGcI0c~8xi$`?fg+PhD= z+uY_YtRTSw44)$G{^Oc9s?!*e0^=zMO0iHh!f(6kJ(oVS2dusKLg3vc#^uw2m)csa z%z2Z$cfwj_vVBo@?My*$W2_i92hqcILejWGm1J=XWv-LjA)`E9OirwZZ+ilrAn8E_ z>YK*=HOvPgr%$1P>m3I~&_h4E+dA6AT5y zy8rB>!RW4a($SK|jIbH1v}@hWT81Tl)yLac>Oq$DxDp+fGqQxFu3$F93Ov*w(5D=P>RUetK543grbsaUO<)zEfBh=sBSIL4Pb zZJ@=hH7HML8Ji@c$$eHE2aqsif-A3XF+?gcZj8~!|kHA_LY?8eNo7SJ{WxQQ+g`ECx zY59G(LN)b&?8VIBVKKBlWLi0>BkeeZ7HJUh7$#C}f-<&_K^u%C&jmQJ3+kU|5mo;) z3w)wCGR`>u&rr}f?uFP|#SoXuH7%D)COFAS%(nDdtcWyPxB;Sc^t>*yxK4>eoXP6H zr!lJTpZLqwzpMVob5@NM)4A%qLx(K0BPZ6bdlyXUuy)l!M(o6%5SLX%OZf5Sj!5mx%46{^j)v zb<{UKGHSyZA@;RSixAgT=U2m>FL=o@oK}~;!Oz*O27w=?EO~n_BGB{j8o(Hjn_H2t?YE}MM>46(6Qjpl1iAkCz2en#DnH9x&| zikRdDl^7D}s(FkEetLOAmb)X0$k%-LoSpg^U<=Nu^6rt^JTF2XH{sat+j?9+o6bDn za6_Y4d073~@aa^URD&DH^ibM1X$}9-@Y|~ZtJ&SASN!z(QAQMYVd^? za6FLr>q>g|&@BHA@LwoVYX^5sF<)eE-=qArLaoATr;A83TOra|E~G|>R;R=kLMda7 z%vZ8H1Ww|E7mr8au#2tBk{*1B>{7*;M=TR<1TT)fkt`JeoKheq_&3c?5l4jVq`lca zbly7rtdoVEyl}&jyUC8e*fl1*63@=AJb4@Es3Z~Nik~c^j$wqFq)(eI5qe>W;jbWB z7_5F04ZR+vu$qcdSC2s^OWPqd0ij|)Q7aQ+U3!V53XTJ1qK@1R437H%+qD+FWK^Mw zbp?h3pQ{S(v$>=xYXqBf{N^{=oQgFV=+57O;1Nmn%lSg25EQK#LaBFL=;oPg3~R$w zq$n*r!HbjYydY{7Nql05J4sBQ0J>sz!@$gVc}ANNRLR~inY19xlFC1;6A}ZzWLeHvI*HE=6D(RheW-kri+FPs!Xs$U8GqB^1_F3K7I z5-_tC#P%%?3$43k6yTy>)o%jmQ=>v@URPFvP{HLUNT5hYz<1}8xEE2fMbMI2wBZmE zlXc4-Fdtx0)+I+tkyDZ?vY-0bjF1(+;v_Q#1(&|}-8}UjeDz^*c;Xq>%=GPa*T2I8HfQ1{02EvA`S-fj zAjlNxaqBS=uRz?>SNr@O`C<`iZEc`W;@K;BNNmw+6(yH-32PaqbrfiK_tpG29xKVX z-t~uoAk02;6=3ekB2PyMU<@qC`hlkVo00r&Y_#LJ5Z>px+GrTNt|LRSu07ZIeR}5r zRqUFGt?P}2t@n+|6|7`L1AVd{D@y#fr(%klca|(Y8$(n=+?J`#)%c=-`31LFUNXJ> zi-ereUDhGvVQNL8v%%wCM9`5u)TPU-br9FyZi*R6&>fAH{g$NNtBOuWl(7HkO8e0W z`)#;gJ!O23d28P~r|e6VfZt{I>KvstzqhwdiqOB#G}SF1kIom!An3kwv0KKT zkJ-;WtKO4m5}`MQN8u}vk8^Ghpu~@L)1VJn{Hu5?u_zXDZUfbdSgiV`GBKvCL|38( zYWrEu670rbQH(sx8EQl_Dl$^ACwsw`W*~_=MkEPgvEh$6wsWOecavDGGhIF@OaA}5 ze9!-_>g?0Wn9%yB>3UIZtPE0NXc^I){OoaPt>eUO{mw&z@yb?sX*!9RevesL!Xr>M z-*?%X_0T$3FzM?Ig&Q?@6B9n1WXa*0C#hv^%J>D05o`nVKC}oBBWk!YE_(U-7+|2v zvrfnYX|uB*#_5@13ZsUT(N{17<*j-mw8-4_@%~~}yGmMW%+dPhQj~WxAlA{(+qBMO z86$716-tt80!t2Ha4Uk$1bS{i%c|U5Ju=L|S+`Qcqf*B$QY}2Vn%tTMDBVU$KYBd5 z`2#L2A$s0QgO0$fzp|xlD#zyNfn-m!SkK>k#5+$&e2XlkA~M1)uq#f^e?CY_1Ov%? z$laVg>5tZ4vrcEY#d=XO4E*=BaY|_uVcG(p$;f`avRSsd&)M`V(U)z-%Z)-003@+A ztP_4_TsxD_Vq33SOxnYnP52rF)f6_$wK+zQy6Ea(Qrk~FoEn~Qiz+(uP;v5XP}aF; z(MS>9-mlR<}d+hJzr7F6RUb3!iM#F3&l~ma#O>a^LC_ zn~8qtsMXd0p>YP&M#01VrrD!Vu)T5T`FJ;qGEXON0VwRhOHoW?`Z&YwJ&$ZW5dx2X zb+t!Lz!guOOh15QKF?E=G)|!<%}Qe_fQ6y8tIJSO<-Ubw(XRj> zU(kR{QK=AT5}I745`!uXWKwhQ57F7AL->&^{LJA4y4?*!51bs)bn=sLoSMg;JQwg| z7rfvW5=wCPpP-^az!@}cRPUxnNC$&(wYU4Ci^wK3DWW+$`_vgr88KDFce~_pm`>)J z7;#Z~%rt&1FxdTUXoMXRCxL$wYHQ5E;mLsvw8#R1hX01fR3bMq!P@Ee_6UTAa22|=ok*e{?NL}hf zwBkOj@w@KL5oeu1ZFvPlp4AdE3I4JoEIfVO5?U?2;(_F%in!l3Eexd?k{D5(iJC&T z@HU~WTui6CNb&?bl|(0_2)Y9{dIQ# zrUR{qO&%Va=mL)2Z{mLQae9Ms$+MMpDiz%|BjYvqrx&qN@$kciRb${AP9VY3jA9>A zObebq7z34>Zjsv{PayqmrBH;}^~yv>TiaT*p|Mp)$T96K{IpCmX~o)aks#YFu3c0# zN|Z}0KFfL15Z(FAuy-Pjy%%Ww@!oblHotOxek`2NT;G{vW$@Yk>sss`=NROJr)dbj zdexMxt&Yj#&pGl32PX&uYL)>YZVx;1l+eCSd|TX=8BDHGtF<4F0+aT`)o z7|+22{AD3Ej!-M_n&671MOMl~R85}VpTiV0mOPiN>}Oct1G0mD`G?DG?VWQs*F;kN zeQfeic)UzJpU2Cd1aiM&JIJT~W3hhL{3jH4pJ`?e>G5u_oxv{0iiouf!+d~a)B4%Z zoCo~hMv($#3DvsEsA z!_UI0m@}&w1roDfb1NIm3q-3;8t@PRXLx?Y601A;kiGAGs-I4~hwcN5_)J%rx?36npynwJB&vG-nG< zmRuwh1L{=nWsp)EY`w&Lec%OO2PVA_=V=Z4($FH~n=9npl)Fw3e6YaUK}l1)Jyp8| z={UlEsstc(33ua==-BR5LP=&_}8>B}%GO@&z(rmPX#C)Arm~lK4~o2C@-?V zn0H2{qM;>>_Oj1@)77O@j*=^l9)ysO0D>bMg8QetpJQP7g$~XL#$+;-G6-M1e>E#%#c96ti%>9-VFec1 zC#BKCG1Bt@%dzWS1q@K@4}k`|%Clt=tf=*h|2Td8V@E7wCHJ1)xr&$#NZHCfAC70) z_|wY$_b7fLcjq;)%`|w+>YNS%szeKCgu+5v8!?<2Q8pKVe zM_lhNywR(k_*D}5r|{+HY|s!rI5SW5_LLpU`BKDdG5Zu_-^KqLP?q1+5P&>Sn7a0l zMA|JwhWXF@Ym)0_0J_V4OXkgxUA|1yS{eCc$75Z++n)4S*PAg)y)B!4%Q$zi63%$A zCGy`nPa<$?+F=jg=w748bCL9$oxoE9bgtVBpSytN>>G+kI9O0;tzW1dafw*A;Xvc? z5+<5g>ENyhj!jH-JElgzid^|b=zU%`J|5)X>>CvY<6q9&wr31?eudpW=EdCwY=f2C ze>UT0in$kupIe*$$o!x{OFuK22$c*w>um4&0s*S$_|0D?j2X<@|A$6ip4yfwcXad9 z!+an`7X2qR!fNLM%D!dV{WjA9_2b;R(of$9ma`}-(U;woY{NVmL6m@f`$gN}Hk|$@ z{;b~W^f#Acb-DL$&#NfP&aTb4XzM>?gP#&JAMqkvg^ZvKU zc5t3&#d^4AUR-b<m6T4kN=7*!5COoSS`dU9*Rm5-> zick6Ff``}RZ?UETpiaMQ>o6K=tRxOaJc+o1LHw)86-A30QXHz@c`k@91FuQh`EbZ3 z@L?K^lIZp4?!DgVodgB=Ar8PTxMb%W7cj`&`P%UiVfug;>}A~7S+yYE=LO->c1CY@ zaqtbC8LjdIFcYEm@mgIfgHZGSq1E{h48NUreI{;zXRyH}VaYZDS%UWPpHwKJ>%&nc z{57OLW_iiS8I?@^1kQ#b8jy{J3?vv-LzN1`w5m$>gAyoF`ejWDxsQ@2|A;93jR2)WUIowS`uOxI z!c0Q&pH68u#S$!#aLqLh>N7vE0w>Wex?m<<(_eZENthu&n`bKwZnbSqZk`hz8+nVK zs!<@pV?ULcB`iY~IkFo07L2rd-s?~RA@&y3u!{TCiDE-FlA;kZcPGCG`jfAw2h}n2bNXK~OX{ImstDjJRpwppq5N5mT_bq4=69 zTSYDv(P&jX9gdMSXPOZykD4|d-aNNCBl`M*20H1npiV#c_C8`=R_lIZNF-5&DtG>Rk zPMu*wDtFH}U&Y4js_US3?RK8Hg06^rzc{6ud>qoKR0=E^4@g1a=9SGN8@&@5-4$iJ z-pxt;>;3$ZkbVW1=N0RThLt5xi7|N?3#xFu9Fa$H1 zSz5wd<+b$Y9SzT6Hhu)y{@>1i?`_8@`2V-yt{rYvR%oyNy$kysjDodu9#nHLYop(2 z1w~o&VAcxQuMRLn>yQb+(T1yIAMrD|N*}hJu+oN`MsYtHI7<~al@>8D#9?XT?0hgN zPRZyh1c)5I385E2wUsiEKsKw@MY$UosB*644mYiQh*Pn^t=Q#AFjm%!SEPXuvuUFdK!XF5rfHwbLO{16|-|tb5bv72oG+cZ(%o zF!oaBT;Kq#SbyPuPJ8SL%YUj|najIu;L`guRw>;`Lr5AVOD(S_gapWoIn7V;S?6(##MZZik5lXc(> zko=MKOv5qQrQssFrz z9++$;_PRDyo0S$v|DT*^a4-48`ioP;j5(JC@$|$Emtsle#vxu$39{+C8cR;Ug?R6?} z<0#4}GxL4ic;LMPDH9y$5l&OUM}-3t>xm-_?d`)0l)c#xa2FYhaC7F`)2>EvhQ0V0dv`Ea&z{;NrpR5M4 z0_3>lZI9iR;|>+4G^+aykEDZ?&OT>>%0@Doq?O3Zd&x+`5=+@E^F7a2aspOeh4V}OKYyrx z4=de3RAJv4V)jB{_8GoiZmSOmF-yCOm?Haa6@7zSw6^2nm1`6Xaj^&^*&g<0M1f`y zmDakvgoQLlz`)nLe1#}HEldd)-jPLU?cd{-Nn(*zdl>)+wL-4?lJU0<7y?rS=WY=O zxH?G4q#ZN1#vu(s!UnD)f{G2L1$5ML$SjhDO@NUK`xLs;6VN6KoGpIXR?uljyXuZ+ zcvzU7RshFO;lh@p8N|vJm9Hg($x${rP3D_|OkI0Marv6N-ubVP8*fNL6M=9fPpE+> zTGM`C{6Eq!jTg^=$%$q>1j+{l-j8R7i)&nYKF6G(UHZjY)GQY>Gs|gttQRKPXS(A8 z@!ZF=P7>7xf&sq85W^4_R0)+?9UZEPg?e>^YLO168n^5jq?r|EoED2s3vuj)IihY!tG*B44lFY(D+!2cRX*=a6VnM|I+73^?7XW7ghv>;F-O=R{DH$Op9aO zkrMQq7;=GBw;5hXTc0Y>rCnPwnofOX&87J~-~Ak&{v6NN1XqM*GlMFF{jD{VHadOz zCkfwiuyk%lPYA()wKqm<#jEC1{mECq3uZ+;~B$X7M++(B!PA3!5LbVgerHk2H#ndf*oH+VRUK0XtOAM%;>|G3(`Y54rm^1HCL-#+PW4al+ z>~FakGxhE;m_6oRkEdQI6pc2tPPx9ThqyWb(i`P}mh?OB^>*|8y@t!X0((Jogv&U< zQtI6zK4NrMt5y=`f1TpIEVM>3r0fjg^7u{WhA$7v;cF8lB&6m`r|b;Fz{x4hL5zq_ z5BN4*!I0g*yThW&xG?<{5=03GS+2;zfWQigp7~9Ai3-MnZTS5Ts<9BdsM+D2(5P*P zL0opFwT!aeX~*~b#oLZ)-?$Cc@yDL4p|_#@p8V7Nd#cvUrTASBaAtCw$GoZ0C(6(t zC35SplgQec!})yPKqQtFkK+yekKRXhv+_gb+KGo}=k}c_+8~Q;l>3BX{a)z&jJt6H%mhLRLI95zB^M~9y-68pk364aOsT1d`45wkbB@j9y-|2S1tmB~Cngmf5Ua=&T(OIdJxg!7WeWc0hMV!NFk6~An%zft1 zo9WEF3#Y9@D4*x5ABTsVcanZ@_sr%gF_xUhsHDH5pF2(i64K}+#6r;plVud;IHjXP zg0#Ou&vf>KS-~k5XO?YD0rax+rl$(JJo0q)d18qN(6#-SZllT2xjc0A7E*{6*!>Hr zGdyvp$UBIHu@RD#{rF;e=2S9HE4+kGy{LyH<@UwonY2S#I6so z(j7D{s1kw;ZfSCe@FF@#KqxlkSAiSZre+t!nG#oX0JGOY{H=h}JBhmF$aA@pUk=tg z4s5X?4H5bXx!+H)!)-x>N~XV4Gq{p!W`1d=w8b{=yz5~GUTh&AFcbrmJl4+irHZT> z2VY^|i>Fe5q4IA`^RRj=6Sj*0A$*K#JA+iAur^yRrGP}$Hf1h8wVsa>MQGnWAf`Tq zJjHa3sw$zVAB6!xZjGUdC|}7ctfg45o>1m`P>YBY%4n6iP)A7x-i-&Qlof4vVwZ`_ z%}DMZB{3*V8`9@M>cD@~QeFvSL~=Hf;voHa^*^w;e}X1`x^=&ytos@qO}-ok%C9o&{KNrMNKS8-j2x@Exx#l6<0E zarX3{CDhQ%DhoQ;semIZaW+R=muiAjg3J-VVw9e=i*@VuZsFCXtZeiau=%*$W>0FF zHFrKWe;JQo&1ejU5${`rA;g?(FaPSULaOpKNefMhzf*=7C|e17@8TsO`t8jL0Bebd z>EOE43{?kiZU}SLv*nn2bL@&^WwCmk9v6?IgOIxMd)XD*)`uK*6-fk!ufs1W#}?r4 z1dGpXHu!gyiuKdTFc@Ewefp_j)a zep^iDvAa3mCBk)l*1qz%92v%u@{SLsgMx`y-LHCjU&QDb^6qyoDbblsJBRCg$N4wz z&4HwPdm8@l=^m%dJup%{0R9^~|A!wN6P$RuV{dUxNZw_~r21lGQQy^e+P3fOp8fRi zD@n=aM&1TSKEjBtkQBEJWySv5k;|r=6^m5%5u`s^iEE|uTwr%5h!?`CvfwlC?9aqLJJ7a{I|Bfud@&< zfGVqpdt;Q}P{NDH*ks6f)^vt*b+-Cx1uV-M<#G^prFLW@Y4t$IJF<9-j*i5U*qHmz z9<`#fmz$n+y2sm{h}K_|421dQN1YV7G7HuM=wdQ+m!mF+j%3gZL8?x34CGo`rc8O; zQvN69VB)?1rTY+dx^AEYG#UwLbatrNa^Rk>VWaN(-^+J^Iyoe<<|x(+znGv@tg(6{Ot*AKGo=n}^MVeH$DXn@RHv8dS{JWK z(En$!Gpt$DU@B6`S>z;5m#Mq}qfFFaz02e3?1N2SI*6Ob<}h0F+p2qeoRPJYVj59h z{bet{qOlLD_w&{BooJ&k7!K9xbg_3lF1M@wt@10c^QFFaF3p@qN-NcbQ<$kp@5~bB z@NSApvnW1aPPad|`T44%x7?t%SCo@$5P`{(ii8DJ3gY!z!p{);ZI$%gz&XNF&O}NJ z{(DCXMDPGjl&2+G@XDtofhSHpoZ$2h<0GS=NHq(RULXcfc&Tt1=cxuVhRkYEys&_v z18fS#ghoVEjvKU(x>B z>xFRRHm=RU_WEhLrqbh?Js&w>_UiERl}yH8JdXBAjU1RXl$Xz+w=GBkKb!B zcq}q<7d^*jg0El==0Wx+Os;}O80+DgK=iE_)+ zP45_7l6>5~`}@7@#sis~yeh+;pa#X~?(qUb!YXI_$YjQ3#RAEr2%ie4@A}nwLs^n_r{In#sg7r^o>s(z%Ri6gPC;eWulgh-!rC5 z=+#pltqudqP}4!ZZ6aI$mhfYK`i&v;&(kpDr)=WGj9CmPy&AiYCVz{3qP2V?h7^Vh zrP1c{VGs`Tcnnsz+MZ`96Hrddn@4e|)|Q|5bM970qEM=o{?zE7f}tC@4tPcz|9>mE zpFaw{#)9j(LkawpbLN^*Ed8GouMM z`8$ME8r3d&)#=2c(lCAR9g;ovw9h!wADi~rWVE`bo?oJ=)@#j5t105LMozJ;M84NJ z5r{U01ovJZqL9>4xO}M=#RN*21uLU0u~)xPRnClUCCcY{&)uMo?&FH@3CnK;zta_7 zdCuW1Hn}hE5(F~)Y)?GDQvxmK+uwv+^%h@$D9^SnCTtmJo%TJOwe^aA!o-OIMnVh&TGCwDhVO;H(X+s! zxs=XwiAyv=l#e`ofyb^qFD^0hHH9hF1yIjQpy4b8)zosRM$MlenW}(!70XoSB@~z# ziF>}S`QE=j>%|1}_B~f<^*>g-@{D1Ty`*>@Z^&N;c4MSQ8kYHJ^u*YHyK*drK%+GD zUMq)Gx`|5ZGd_*@gJ?&YFEOCvp!0-;D$vO1lkdQ0KNG=T)w`EYMi47nmN`y8h z(f<>+#HV#-P3#{mYnpdQjiNB1)859A>90iNVHOqW1Q!2kkm%L620QX zT}f+{#fU4j(R|StO^V6fBj|1{NZ*f%!X#cerHBF9$R&Cwj0P2vTef94ui7#g{$vPL zYpu5w&$7DVC^aMp%DNx~Mp@El*fCI{mi;`ct4pMTvUvKbIGJ{wVW(EuX&VDs%s4~^ z2bArUHgzzGWRk0Hfu=LU*_Kryod)x4!#N0&OAvOO<4iI(8^AyU-h6iOs{`o~yhQk7 z4H`Lo(78B3%I}HP5d7pkTl3<@%X`IkW7Pfg*t3-iI)6zw%!#R6e{r=Fa$(NzzK^c1 zt#$hSjCWnz_Q|9K@+XZI#X3&8_Q=GdRSZDtedg~S4Y%{~`Pv}F=;E{NzkiRF4xMr)>EV3ML$^XMM4`g zI3>!P)Z^~XdE+XRnUzq<E!2+5SQ{>dmXYr_kq3W!_%H2jNpQfW z-1Ei!?d|ec@a9W#FQfqmzRVbb^J~3l=p`&w@fR(=-xUmR_RHo9T)z*V+tQKwn7+g0 zCB&p@9M{!ubBn#zkNs^u54q-`smmzgJwL8F6S@SH;U4g~ocImT5_)GVOl6+4u=fUo zhsC$g(|&=JBa0rNKR#fD?pH5ip{qvXZeo=-2Sd|AsiTokU{&lO?Iq77e#8OU%E|Rj zdQZe+&s})JSFyC-7X?D!BUB%N5Lt{-Gd(?xpk9)Ii4H;u>t{b5t*1gs_Pt zpU|-Svu%(M9#ux6@vY zInRauH@E(Fxuq;a0~91Y-TvoSX0P8n4dJ{#2BKPN%7O1`(!q#7V@m11*0%2;1GYbu zXu2ay$G`D|^SxGos1%M|%nA05eX8Ks63VR9%qWlUWroWw+MV0!7Vx|QorirFV@F(h zH#vv5$@X5U{QeJTLT>|7pBL2bo1WZV^X$C-kA7fWJQq%`o3t5+XVT0qLzam6u}IK? zqrGwWUs+Fsvt!kgB03CFn-qe7Fg&R>Tx@taj=x|m3|yvOwDYT%O)6IpR?I<>zO>Uj zW#0BiPE^|~)_IfZb{`ar`q$!s3JXsDClP7NC|-{%auNZr`YB>Y1H%dR6w=0Kk0jB5 z#b?3WAsx((rF0B1$aNG4Pnr~1tE#7jsH`=*dvPY$Y zzi(9BtsmYWx53$eYS^Ar7912OtunAsE_sEzeX(Ei$0|e^5z|_-XX3H_ zIvQZCW@MABVvBWg-Ix*-I8bN6)i*awV5@2)K#sU%Gd% zxcy(a{GML(omaHp8%cezNT0X(14gKZv&7)km%98PR+EI9vA|j)`Wq9N0I)2x_pK;8 zBQt-bA+4o9sFq!+>kpF*8%5kMUsFrk&W!dhPY|6II=693IX*v0S^ZX@MULS(WbgK_ zSCkP4Bv5PL7`A(b;43v)b+yGxzG{aZia>Ae4!oBTEfOwfmFXZKjCwI2jE@wB+@!ma zHAa*xV+WlU0wODrQAy6t;LZYc%c~E?4q8X5t2OS@Um)HtR{f$c{h!ew6Aob(1+TR) z+HXS~2B87e{OBr0otnO5k}UnVTklJQk@7gn51$40Qc;`$VY5#z@-t5cfABZvm^DdFd} zf%yqL&rza8sx?|#$J-<1hWKnGN*19CFJ3_lS$_V)KXp^;q~~0U+iOK3pG)AlOl^~} z!pJF_JOZf_^r~TK6)?tsrzT0Fv&oaV1HcF%Znj?E&AKM*nu0FVJgw=&p4UrL3EA<= zy&LNjo3qord(b!T0@nGG^{eM;{|}Pd-ZR2MadN4Ib^nwe(2#e0Z}Ra2HlCgrfzWf> zkNx%DXD(E51-<+_C3yt*G}QJhllxPNo(w^y!IvC ztTUDb7bmH~PB?+2348RGS;^_fkfKpVCbpg^<;(r}6L)t2es}$$*;E8LyH`XAyqqo~ zpL{DyW6n6yjXQRsscip3x4O-%!V$e1($7i%-4}DgbgcM|2^`EDS@v#QIPYmag9N+7 z;>%ZBzwPpi-ArzOA!h#}H1uZkBQ&YzpolQ$_B(`h$LU-!8+Y_eZSRLxdt+YXQl~MJ zy~nP#=K#@I)B3;xNAZtn((u!ef?39dL2eo^x>BY42GQ0UZLr2@ta@_}U!RJtBijb|GTceG)Ja^V^Q#s$VM$`_bt2YR13ELB0Q5*)2xaklfrsYykm3|DOe*)28asf>!v*V+Z)~&+cP^DW?k%O z9XqnE7i$t5U?o@{<(juq=8u0B{Ck(i$0t%VBy{xm z3U_&&<_uUuVvgr{=oM4WjOk~z;P$j%{W61d4XjuWb<{B?S%uj|H36Z+C zkGUUyw{?QAm*C`X{>P5OXA~~hLrzP$(-uV{bfFT!J>w|kH;)LUBVZ9SZ-GbEsDX~2 zb$r!j&3}Tu&Yz^ljc7CaY84}0Z$-jq-sz|>_-w5sTZWHjnq9kwX5yW-c2#^l=+`Jg zO|43dFL*LDXTfR7*>xu9%p6O%Q)BOiBmz(Ra;xO!W_^u9adu*9CnKp3Ce-KRdUS1|5WD8x5F7+YHdKtYM^Iq{PC-hFAT9*X{P zhZq(frlqS*ft>B3AIK4_rLRvTLlGn@Tu~RHsCICG%hE#F(5hJpbfunU8DLIBP)@ml zDI-KNp=bz=K^unzCOZGC+{N&T_+r_P@U!vFp7az6xxTJYtEAe0M|H>M;@h z%#lT&hr{%BqSIc7#K#FG>8{S^8{|B@^W>x;QeTg8IKB>lV6%XBssyaudx>g&v$7%B ze{9wylUCZhW%W;Tmy1|;dZvNkX#rP;FXg=7(As4B_z+$_$~#xX8} zkM>e9vIiv@Am|n{V%MELG{oTRyH4>--c8zcP_;$DY9#?dHc!H+%OvslkB&J1R+AYG zk~kQxIYuOo&wc^G$e81ytBGg~D;c%#JIt@X^9`b%3wBRM)Bwf5g}rt1Q)wZFL5DB_ zB6LG%cR<{*oOD_tHsP#67c<<^EEH&?AqSg8(=2Qm08z>%#d|}Y3T~W&^BlQ4%MiI8ten$-Hp+cuicbRm@X`i zpuvDcJKOCsio9`%`{FKe+a$H*{sbZCZCLR^?)TW{mwnE!v{Q}Old}Bqh);OK>o{Px zaYLj55OPn~y_?(J3^$Ch4_4)MshnMb-BxB=hW`?0j`j4VvA5C6uKzj$GF`ps^MQV7gy4j=L>uyV*LHBKrI{k zWuG~>JkJ9Nw^|uzH=!w+)n(5WFTtB|`$MoCdwU_fZhs2=ItP#B5A&S`9k)bi>QfEQ z%TRp4$mKEurmOMv&lShO2lKac+Ru>m-h)tGhYvdl)Qe3eboduJ%5Mx!(4l~9*_gPS zu8xM*b7L8qB&t0m-k3N7BK?Wj$4$34Pyf3={27|w6a>mz8I&?fcDf1=(aTeIHrCn;-H31*r zEUrf^&J#!_wj!1W0lNB_d$%E4;^qGeCB#KVXRk-`WK&+W!BadL-SjZK#3FdCbg;9V zUC@i7{G5;XC-9qgt?Jjq9`nre+2WDU&-rN1quFAqcoKmRwPcD;it~8f_&<@M`-pId z<^;@j-pZ#Aq%`LTDl1%Z#mb+%V!TUn!PrUP#0W(QOG|S7cQH&e6uEXIDH3JK4iiXE zq*mz@3|F}*_eB=s6v5w zes|}GWjxh7^&@e{7?}!gtEEzRR(Qw&vfeW?O^3j9q}PY>k40Og*O1eXnoxj{jEOvt{mTC+>I z5ii*hQoS?pFQ+ewZ4J^|+SeUF%6YgX`!JE$`EVbb${2gk4dZpbwM*|uu4?n=`V zN;nO=1F1tl*Mz@C%E~y3a-g@ zRP+KLQ<-aSi=gZ?Hh>hz6yG=_SFb?7B9R&$`!xaukoV#lc6fGo=jg~d3X|hL)q(9S zF+4((k&{7&6C_3An<3df6^25z+~5jVs)|rbB?D_hpLgR3Ao}sl6BmpTCO(3{?ketn z`F%Yi0;pigbvnreoUvJmY>^zdi@ThrG0|NVTS0ALEm39LdQI^qrKg4sZh-dNFlT|M zlNmE$iYKO}N+c(J62=m%%2rGakFzg8LllW5!OsSgJy6lHUtyy_iRmv=S*a`A1VTjdGxNz6Uw3Egts z5Q(_$4u+WhF!EI2ZiRd!N#C{z6$Q^ZzHOY73(;}1uG5z-M69czPC z%0~}dYYINGNSdp2b*cFC`YpAsjIUp0If-YGsX#P?j(qJ8ITmHXkJk`%j#XC((7syk zsmpqb)^KNX8>GVoW7`a<6~0xzitkVyQ)PEP|5Xh< zfm;OvNsQbscn=QH&}mVay#GaK3OXbZ*>{BvsD<--ogFdj7K5!zup?#+(p{(3c3kYZ z){Lt3j?TO`tNOgCtYyXVT?;J>(!#u4qbWa^yGb^jhb~#bzcGB^MF@~_5>tveW!J4K zp;TO&$ac$vn+x}G$FBM&H?Mfi+<5M~ zh?T)wbLfWZ^|2e`xmodno z$)IzW!!*z1bscXiR;TgL@=a>>jT@E?8vYp_`+ERewI{i=fPb@XHn`*kP%SeqiZegz zNKxjC3|B^CpysBrERn=XM$Rc6!p8PrS+!YtKr(U&Rx-#%5#x`EOJQbfWr?GzNa1N$ z3121H3*&w+p8mSEwa2UT_-FdM<`X9-^{8S$C02auHeVD)ho8h#%qE1S1-Sx-pO@R* zNXz5b?U}o!Cvj)n62|fw;u}G5A5w@vGNydtQxVT1jEPKa^cJ>-E8)nPDO?Y*U3GW5 zzGZ^ldO5W-JDg%)@|=@76M9mEC~+Ym&>kvdT#YnVC~lFbwc1)HQM6)ZV-Zz>xdTID z<{`xfsVtGLK_;6^TKSwh>q_5fW*Qe>dBmutDXXX{Ew1=I0siNWZs;P7+ z@w1NDsfxsmJ|LZhGJ0)V&3*}bWta?n(sDifodYK-nnL|L<5e!P-~stst&x*4l_JGh z<+dxRcvaSdx;kmWOJl7tH_iQ-ZFAoHyK|c*56I49@V(opgEig-6Fn&~klbdqaMprd zuo+Pf-p^-(5x-`Z5X7y-L~4LkFE6`s|64-QZV<9h#;168b4dY1|1XgrHSxe&|XicCw~gG0~HSN~T$ru46M zFCaW!FM4+NrgpAh_y3spi~X-wb3EtFpwVd&KCiB)Zw9JrP3Bh^@8F=8?D~?u^NMg< zztBAig6S%cP*-R3uS>U2#edV&M-QF;W^v9fp-V8mX&d82dEQ_O|$tqW9mk#;95=%^YEUiM5#>~ro>9ar0pB1 zA8^}sUV9DG40~P$zGh_Rm957eeT{dRl}NAm`a^hA6rUt8c$@#oCSQjBhpXk-az{LQ z8jen-Pu;XpK5-hQ_)V|`*#TZUHk^ylSY7tB9=;|8HcN6yIny#JD#iyL9XfP(r{?l` z4{2SsX;wAzdnxArZ*s&?BMoFM+;Nk3X+9d!7gUi7Xw0l!M7dN;T)cF0m_lr8n#Bf& z&3G+4m0aG4nLl=sxy>xR(c-R`?4s~KizAIdfU)!`alc!#x^w1FtewN#r@7zmx}tLP zT!h47RE9y6R6X{)uc&D-Lp$iPVcQK-`N4mUEnFfbza7@Xk!;6#lR`jebJ-b97e9)1 zjmt6nU@-H&8Y$|wf$_D02u?OYWVQ{Vm}|y7{`&aS+U`6!l3%Glg5>F^#+x4melJJt z;HiZX@%5wsD=WlH`1l>(@D*0PavS=%=)N8sX63&G9=G}&3SwJubj`y8rTCOvOnG=o zc#G0GYN%eaeTfPQrQgvaEK9K^HXWfFA2tfgMyu`M$yIAK9bNQlZ$AE`|Nf<__XQK; zfmCqtzHNQ@_p+rnjg+N_fGVm=6~p+hHG#G}=HZVQQ6}$oYXVZjgAM-6-9(+*9K8b z*(HRr#u!B_X`oC}nM+Yf$1-o(Aua)cSb!v&MSy!6%ll$?bWNY>*Vzzu_^ZdxwbYXL zm5iGmfAV+Z?4uACcK#9nu8%4o`_FFOtB1v_GBp2$f7xxbHX6?d+`S?>ND*x9FI|f_ zXB+g`^=`gGr;7?szsJfOhnd~=&P`IrVP0Ti69eUp2y)2cbCXRR-6bOS;ejKf5ix^< z5x{{*00m0_%~1(!N5SBOnj%7ycw3CjXy@|t9r#oq@yGURfEDoi&wHtOrlPM>Wfjjk zGFXk15Cr{==$0=+ua_oY=YLsRC6^Xu$3NG7o_?OC|B;@MM2w{d?)-%5CvT)M5hT;k zDpS=fuo6bf7q$X?S-~1i6P95G+7MM>e_loQ4xj5NSg}#mfH%^0T{d8{Z_+-c9tB)J ze{fZyXuCz+fWU@K7i`R7R$Rq4WJ}XA_7X4;n4KvjWpc;k0SKWLg^fy2kVYvjFOMCL zAGDiUoJL&_lxb0+j%9y&ooF7QmXvHm*WvWr|CfF}K>7xsD-P;8l;Nu858eEn(RoT1 z`k)Ks?t5B-z3BiUMK@7Jf&sFLfjxe*`{WD!BuM{^HG87_X)e)JY)J-XVKUFLhH)s^ z$G48)Nk5uC`&a(xJe~Hwd7G7?8m2BJqB(stt3-Y#DJ})v%0-KFX5`nXZCYW()cuZh z#zw;BQ{>$rB+mKe4A)a<(MkdKJWXzGk=5S7Bf^aPf;nfPTBiyiu!tW+dt}cCZKBb# zjURsXAclQPl9#DQ9cgs*&>6_YH1mKhGF3c(tX%WQI2wPXA)*NNbAS2+BDt)3qY;*K zPpyipqM5Qj+aoRhoOel8HMb=K=8hgNFm#mO2x{1B?k@%sl3cYG`)^Idn9a{_G?orW z0n*pOO+)!$H=S8-EpWY53aV@|HToJqrk&$E%??%wF@< z;jY}8?Xusm6Z|0GxXlxy=rvV*96Q`l5Wcl8uiw^4~SQ4Jjq%9JWi&8)&8Pxua?I z_UyvXxG;r+a(D@ITC+q;mNHgaA;z34?&fHam?I%GWYh(He7KQ1kUsg=7xTxQ4ToVx z6eZ3uq)6By-w_>!V&{+zO-&$dBn-ZE-?Zy`1+E^R$=_L%JhDUY63Yl|Oyd?_o))}- z#hwpN-J2l1S-ZBU1@~I;Lq9jiWe0bmW>vW1o7rM5``EMT6rVfyzG~vKv6{~=|KfG` zrCw|bZgDXsyyYyijs;ptYN3q;`)mPKWnDl_r`;pR#HebZA_rzD%eCVySGt-<9z`6x zd=5G`qNZ%&FMy|^1Bi6>K0+Sut8;x3Dr`E7Vqyb1D>3RfRJ9t$U9T?^Lc&?NjZ5LR zTq>cEtO;ZloLMdu3JJF=tz75erbs9^(wY@-fwEky0yhmN6{h^Ai!A?jLPQBe9Dv{EmJSguB9>=enZ!75?Pq+EB ze+g}}X7t)_w>yk& zgr0#U-e1%lBZoA7%?J zK<@M2eD2EmWeYbg@Q56L>6t}j-<=wc`n}^UwRp);RH_v8xCW#gsFJpFxJg_05EC3J zGjD%h7-4;2DbLjq-5&>J3k)OduHq9C8hcsA`FiJVb!mJ?q<8Oy{S?Meb`RQeOG6oI!xl)HDc2eJT1C;!Zb?(sapwR!F zBJatz?+XIx$wR5m4+`ZbM5z)?!-6gozkuK+A?J=> zEs?#V0d{m2-vSa*te0I^m|VV<&!1fV`Pw^>98bK({Bghxo;>@ZNp%95rf&w5g@zuH zp(3Xh+TKDc%;Ozi9E4W6>_YokSUIMqat|@FCjf$PfccR))hoD$^OT>d3C;p1Ees_H zsthIQbmalxFiT=FJ&melI({C7FyfX|I#F`zaM_F<^PtMWWJB)f4{c9wX5)(_=&Z0(b2cP55=_9KadP_tag-C^PD!I`(4ZL@vX?uhKtz^;i8hW#Y z#Ka?bBE0N~o}eN!%(X#LLkx2SM@`bGW`9gi` zw}19;!}~v;um7|uu0Qq(05#GG@bL@$>mkzOU2Md`(aOdW1J&SS=(MB^s^6~BUthCk z?851$hXxTy5XHl?dFX7PhGgkFC#v*hN|%SxoB&>C%*MM|WKN(@80MXFZ&H&7VRy?% zsn4D0wU=b?=Y>=ulk+T;6glI)cZyi`WZha>Y)is>*jguo6P+RHO)EZ?XjRLI%rJ@K z4I?W2AfU0OA#8F8GHROVF42#;!+!IR?Pz&{ru4|`7M_k2tM9wvN!tbhf8g$HzF^-$ zY_P7^@mJnPe>87W|A23DImtegsM)HU@GUQfB%XVQt+uOChpy>DuN{E6T{a$2P(qS= z)!2Kt3{J;!mFKv=RyW&h|5Tf_g- zih*4%360namnF2MHCwWgQ7kS2B8+s3t)W&B2TB4a zusqOIhAM%1Pi6pp)h!|MH+=9EphRadHER<8Al8s00JXyim7dWgi?WGo?$*H;$rxIlCJ;H90dWX`RTakLym-p{SekwXmUgRZWR!Z_ z^RsY42qt#@-uy4hmU=M^4fQPYaARRwPM;t#>Jz8Vp#GAj!Qg3%z00 z{itrRatY$3B+AUzrcun>?acNY-R_=m=4Y(!eWpRCxA!sTjwk$5d)RQhN9^;VmcL_r z>4$gDLY|##YGjmSwp0jGE}M`1ISrhP%jm+q+pbcK!CXxJ92sZXSLs(0vwCqe4#zHq+AWF`@{EwB zal@~8g}^M8)Y6|(^5gA2(P}`axv6Al8d=d~H+EO=PMiPq*(v9+%>Q%D|EKHzDV4!N zDWl57V@s?}%Tx5Vk>c|_e~f@tjD)y2gDqR3a+(C~Kk-g6cLY=9R^cI7?#p?3BlIME))4ybfF&RFKsJ8LA3(P48cGHNR0SbX8kjlD!eZ)1*+lJ{f#DX~tDAJa zVLh~ugkwt1m{AN5!THFtgtoCD$m}R<&$IIQ1ZI?a?-3c`cWZ#xi)CK>;TIZ7ZY(Bl zI+XPGqoU}@A~y}_S|E!}JOxk&Fp?r`dh-kd_sfCI8V-8-zkiFAq?FJMIAZ(0Ljjql znlyiybZnUAW|!L+r+d%4D8l);sl3KDPCqjsW{XT9e7rH>O z-qrvMMFk`;p^6j(${EKLEZa2N{j>TwG4>BePx}0L%sOKzCu{70BjvA1r1(bSaqxtUH zKc7i`PE6OKaJrMpo4=GASX1JRE23~9D^8t-|B)o zjqKIjrN>5h5_A{BG0_c-+3=fh+gqcp0oqCV(Vkji#n}C-JYTO#T8)!Slc;NEhZDq! zL(W-BRMQBf@8EEeCcc}+Gu69!M2NKYiM4Hv?QLlfFVvWw%J6$^zWT-6`#)N*c`oV! zGCiX-bRTGJxFMix+(uJ1^oHj8v7w6JV^Gl?_C|Z`LV}@@@&^Y!{DcdY3vx`qef?gk zB2A0jWuyp5u8iS`{Ou-f>;TovUuT2_DrKpli87|54@n}sQBf2&5j9ec>X)LyWpLHf z%qU-H0cfraDA$KEzu%^3Y6=a9e;ma>-*ETzEmaz-7K;dz)7AfK7AG{PGc`_%0ha__ z)Fx%4Gtyrqp>Uy}A*P$goKRQr*WyZ4>=P&CxNO#>n>rDj{7K_#!1q+~kt}Uf1Qse8 zd8SJ+R;d-8!!>$t4(e(k!QaveCnuT7&Qq|s?FUM37jB6ajaYBxdH+*HHN7z?IC=r)VfGnb-sAMwc=c4Ws@2CritK`W3?qnAyS}0zF zo5T$Jl-YL_BUu$iik-k4tz9$hvDIL=4$XefaND$Aec(LpO#(scb$I%mEA&nmT#RM2 z-V?0uoB1!;*XNUevEKNUP`yq|p~W@kKADJ2^)7uJC?B38E1}4H4&ZAT`mVA5CoT4r z_tIzRVqVegevpr;`v^xqmUQUW8T4^Q$x&w9^PKv1`IjqJd5#|;MAf3=O+TLgc-{MW z)$_@}O>$(;(7$CMK6%%|s9gpJ_O+bp!9gnH;sHQ*-oYPc|9$2)t_Mu+z zN+`BbtZZx@c;Httc#*6S%^K8mMU;hnm$$>Z?gQDpl~+J{jt|2rx1H&HSnQeSlV8tU zY8?w}LsTy9xrvWS(9eGd3#<0~CslRD9E1)Vm%UJs`EFgmQQS9&mWEsYo~4}Dz4DPh zkJL4mA(vn9Wj-4_AGuAYp#(>`h2-g#^fX6Y`NF=!S(;-y@kYfNxY=Py?a3rzm;a5e z8mnT9OHR~`Dh;K^{rX*(nulCyjNUva>5^)qP@27Q@}y_vzlZy0z}?{TfA8?%K2C2o zP>z*Gf+&~;GE+O@y>T4?Nxo-eW@MuZSchDth}1Sw&ttiP50ivPf(mH~pt>TML`l@3 zrod9cXPk)>jakT`qTwWnoc;E=HZo?e_jkPq{M^9g%S|vV{!PT}oxBEWI49Ehyz;K= zz5EE*Bt-zv7F+9&FG&mLYIk2fO;iU$Tq|9FUmekPuK!jIYA$pL9h8oCgJ)Qj!gh_e zv&p2KV;ogQ$EAS*DvuWygv+qSrqWOeV}Fxg2Y4n!B|GjQR4ub`^>c21l7mxWzT}_p zazA!s?LAQ9cDJy@BKefc+*Sar1{sk!sJj27~@di+<$scVUA_55{dhrd+D*GGeK&!3xBdHi* z?-Y`|;7`x{Cw_Wtb(PWd%*>jG<~1`1%>=U`Dm#@L#=d*dhYACcv=(>vr;R44Iv!o=!-kFfypi?_m+5Z2cU|sG>0Iy#e!PT-9i5(zw4O>! zVeCmBg<#|Xw=2F#j)(i!|eRGno|n_alBaWC#JL5sT;C?1?Z zaS!e;En3{&t#~Q!THM`=TX7oPos)0RoH_gCcYb8%&8&B=XI=MoBQF!$8+pNc%pw2ks6(*vj+koAtV{By*T^|k0@(2Xi}{BT5t@rP(6P+zN{BTizg%f zDDK>XRKZN-nXE@KX)-C?KJ-4`lz6W4Py5;20CldYqnf#ib;AB5qO~=gJ?%bqsswXv zEk48e2(nM1%D~GG+@vMm*1fu8o}i+xt>zIGF+(NqtOsn}G*D#fZ}BMVzgUL+$ANse zp%p8)Sw(j6>EegZU4ek;Z|Cj7o(-d$pH%B#8#h9#gsHsGMOv@)mt00mh<1J0q0dnu zGpM!%Cy+*lIea12y9A~R&%Hs#&Bt>vHbY7nw}h1yq3%o3GDo7LLQ;s%Tp$|`Fb*(l z?h@7rHt%I{w*~M88DAWQAlU>dX&ih+XXUjbrlL3)v+Ejc))3(N_r7J=2@STgdLOJV{9}I@y z>x6p+M~(UB;m30ExeJUDFO4SxF2_DKfAr<==Z7|H2nan-@EkYVu7B-U#=ye5e0J*k z&Uo&ZV0DQ3LsO#vtiA3qj+{Q@j!ReR_?V>7lT1p2{g8`CM2Y@A!J{5Lf#hH{%?wRCjwn^a0_u^NKMwkAO4SFY5eZ8S1WciY!QhQ*# z@Djm^ajZ|Fh63k{mcd)3$$Qiq83}G&^!AC@X>yh#+HYt5N2tO)d{76x`p1ME|I(Rr z!XXwwA8`5j(dVHcThj@nK%h`{kItbE+EuSv1TQ*+t^%>AaJ>GB0zg}Vf zcL}Djs4LFZbLT)NXzD6rW7+y1wB~*FhP*7+9#>=RK@Z{2MTtD~lIAHiRX>1Gm!{I_|3xBlPjdo(X%vd7@G zqL-5tqs!8ynZJ?2jT0?GU%e&n4`E{(Vt1EU@~YZU8Tr|3b=rc2CTsq~Ox=lwuh%ek zTB@8ISvwc1`E+&&1Gy+wA{)M+z!60e$x|o7bL}f_%)lh<;|$MbOP}(qF!9G=te1N- z$Cpdx{KpAKW&{f)BtPHOALL|sUtDgrgjPIPnZFGAqx@%5e$7Dfq$G`1NN$EDCfX^*FseWqY6X zfM0r%#iVJNxOsVFGUI#dp@)XwTD!BzlqLtuTvKAZqFPm1#S7Y&RR*fRXAAMXM)pNj zR$PSrLO;h%l3SYCQr)XBudf5-YiyTgIt?39o4A{3(ZnM`P{O zLy4RpB$CVF=PQlA(SF`6S|&>5SQg|b2FvfHJh?{KHptiM^mxF>a4qu-#ub8ef9NoA z3-X5H<0_)@JBY$gUyqJh^Fx#->f)KAr_3X#_0$t&p0pp4P9iaU*YM1lU}nr8=?Hkfe+%VAPpE6;oSy3wo%<5= zAvWon&UXum*=7-P^8r6WWvGsB++6x(;~C}Ky;vW#9c}BarT?4R27>m>s=oJb_SVE+ z`|bO`EgtdV$(D`Yadto0DTN9V3Ef8kGZde)@swu^Zy&8Kj)hnX%Cim+eW8TW3rAQk zmH;GIUyIJk!;>oK5R?Dr)<{??PLnNxMK#eyTZ6MlW|ik2QBok(iil;nrk+UCtsZta zM^6bogmxrK6I#eQDpZ$33y!xUCw5+QN<>0+4vG)FrKA}OIa&2_xobe8zN zveU>jy&cJzZ{pw92NiOK;4M1r?GSZlAVbrC9{Q?)NsOgUcQ$Q*h%k&+Y|Y=y->UVE zY9*p-wBsOF)Vh&~hKyFwptV$5$%3uN2->hnFh&@l!THotvbL_L83Xi~fe%tl1TahL zwB|+E0#L&ibnww+xIdPZq}yndk&B8d%4VCGq}2F5ujRBrl(J02$G2P%zvZp>Kk-3& z?bI*aMtG%$3BLDo%|Ls3sM6}B8SK6U;1%0I2wacj#h=eokC@>PHS>TCN^ z#lz4$kb`UKVx9J_`N%@@WWCHtC(Bc3+Xk-cVLs9+@(F1t$b8X@g>#$d5w-a?F|CRE z!u@70QD9(l-tf&O(5if5vMBkC zvU5k5uRGv$ zyz@~xovM42O#L46x1YfCl#;&pFz@-Ske72xYWmYu=*q_k_n72y4NB5~U9$8zDCp%m zj(d^x^2x-eZ68D9C|K!re>>)c?$i7G?#4dgY8w}{rW1Wwj37G8}JoDm2 zMCC&X#oG>tUoOVZFT(_WM{d1uQ`P#rie#QS-^VV^9fb%E(r!H-v^*S%SD`c{?~)6- z271^nK_^8^bJ{G)1UxMBJiNzI^*&qlgoFbdO7}V;(2H%1FyAie217ZNNLg$?f=SQN z%uKpUA)6$_4%ORaz!_jDL65nfaRN%m?1~HiuZjA3AtZ~>Iyqqghe1Vt{w94Y2oHsO zJnxw7sBF$Uk#&hCHRdiBdd%vAfHE_CLs0#JN$1zZhTUi)+SKK8tdrB&`+i~%$N`f0 zOI-4=btayv(~&T9q-U9hw1`R z9oaMjwolRd?&2sz%F5&|>i*($xAM5k)>!}-d39!`tRzc9S(Fep9m&AP3vTLCvIsPM z@^C;L>g*AqpO$_c35{e#kFK>l6B6S=xD6Vwe zlR(eAJ;UN}E_r_K`uI&Q<6jqJ;x%dns1ebF>Cu@8wx9V;ml1qpfR~C+WCCHV?nI-3@*p@i}Mgt%a;y@a&Mpx2GC+xIus{M~i8DXad)s`saM z;9uz4xNm3tj70T(ln)#AeBO~yA)>m6Zu}r8cBM@PZmfwf%$6I$92*^}#B5ee5Hu-U zZeC(*RbVToheZd2sAV7sKmq?nM0+-QxX|Aqt+2IRni&R~ao)(>9R}37G^W& zU?DLPksh;Yg^HXVE42m}(@f%-3a@!>C0`t9&o4BN2RhJAvy^5ypN?{fHF^UBXAyp8S(Q8m`-i19~UkW1zMcSLNiNY zkF(v13DRM*prMnW&lu6SG_{P=D+4yo8S@xo2%g~57DxTey z8_l?B%ne@YK|VbS0dcseRiHgT{spxUV@_J`U9*HEn}kDQSY zD}$S;4Q?OPV49B^pz9oL`ty%u(nWyh)^v|V1CE&@F$P>#yFwXBy^|9G#bA!-Y9{nj zIXaVkYvNYCJ+b4gBXK1ZG0*?X=B#7aF)V!1d7e$60n*pddQ(VL3z@sd#uAs^FGygT zkXVZ7L!ru^bro-Lo7d^1DFcx&^{cZB)yQXAy7wh4OH|AcP4eQVt1O$_yT{ZOz)EK& zUE^!Wl|}F>QRJBIK7Hu?`=RD9#Q2?1Ql9iSB46x{y6i+0{=@py?sKLv_w;dxYT0`F z?nRwcqlm*#(xtmsP?W3lmg3xW_|Czcp%>@7&MF25Cim}iCh>;@ zFQ3V5<9L{m+J`2AuFQsM;p`6(fww*v54pvQ2~7fB6cWQ0Qi1g01SyoD!?u($dTAtR z-LAeVYEQj&i)6?jw%&<-d&!OBMSG2j!wx(w1=lIWLnvn>{l3vC!_0BhXPdO18lIDZjTxvM=0dlbB+Uz`lx*l z$!><0ghYvHGFv^^O+Wi*+hi7V8k5oU1G>msn)sK^ZB{4g&;MuNz5T!T-5knUrG`tD zDy=ss8Z%JNIr_a03$itYYqFwSfdiVrqRtIut(gDG+jGf$$7VXm5DX8G;jlHL_Rb=@ zRk%{^Y<|b-VAxOPDxZ|`bKYahQdc{Hz&r(|+-;pxZcG6oc(HMf2Fl?Xzu$UATwZ?o zcGh-#;Bdd?#?dg2j>3HLDPQ6##08$2K5eSNBPvNb2~biZ)#sUATr?_#OGkr8OZ@Vac4xyS`th7p7ajUVW?*5Y zd$cFsp-a^2&a01|cUMbpW2I1BvNf?TQJp`BbM)YY6Ajg}@6Nf{ zv=r7S=>qJ8kNXLFyU$sx^}TEe3kT_!e(87&Pl>L9td}Sr5jy4K(~9xO;9;1D{;fAZ z_V?J9C&Sd`D?#no8^3P%#)7|vD!4H))oG_#~MJ=ae-eI~ka`wB{yBS&ZrX(LC( z=rnNLrr3FsKq5K}p@0Nl%*)pl*$NrHf4|b!j9qC09;&e}UK*z5XeA`v_PyZAe^P)I zn=v~whHrg;34i9WdGU`n_+hf-dj@?e_E3H20U_8Ww!}QF2p@>LRu3t$5%yCwA;T;l(6v7v36^a-*X;f)k>=$dYS!}?E5mz{ihogWXgc3 zoHS|EY;Y=)fA>H=o3rZx*RleQ1*LSf!Ax$(ESI$P>ZDJ~?q7tcoby@PhIQ`B)mDNk zzWL`n_={L4gF%5V7XmCXU-1r=Pr=DvIVx!uzWWUU)BD|zMt7$oBlK2zQVBvzla$4r zoDl@YI-Uyn;d|F&jJdU;{;s}HZtp!GjUM3m?N>gFr8C;|G2x@<{fWI+6(=RGlTlH|jZR~uUzQrC&&`m&%w9qY9 zU-)gw6ATW*lp?(qz8)@(9JlcQdhTbx*%tZS3702kNUc25!!^`Y=%C36<_;-A*>&nNK4lgXP4KFOCsr}AqcGJmaLB(5oq!<52T=!K9_hJ`&tYKyKNSKd3b?{fs zLmmX>T&$|o^|tmQ=u=$-A3UV2fN1sFZ-4$9l8F9)i*=d@B6jY8ba|`_kJ6&Y!E1ef z0RkKix%>KeZxRt@)MO+E_>X)EL0qV>Qgks{s6U^{b2IyJDy&P6Jrdi_KF<{sDhlS!AN?^FoaQLvmAF!qfC=KcuA6|eCx z!S<-*R)JSd!#nr?`tXPGNAl-*y;xll+{rQns}b#79)rT&R)?S?x0aJcr*E z{r4?4l7vyKYWvIHF7qGy@4F6-DS~4m{NEk^L)r9NMq^B0ORJcM3%a}WAKPToel^6z ztNzG6YgO^Mw;L`V09ex{j?r=e%zv;2<2_hYB$qn^^J1lnrG(YxLu96qRhdK5`>`lk zX{_~>u`y{CT{c8B=TJ<+GsLFy8Z+gRFB5)iKxS`Bc^OL#xS7l#cME?8JoBL+yQ%hT zKb5E00<(vqoW&&e(i9Ck>gmr(C2*vw{}WG+|C0(-t1FY^vEztIzCI0oA;L>6%qpo) zSI2yuaUmO5U`|yCF-4{UFeujgA7FU`p!Kex4I{}fJ=dZLCd?7~Xmk#&u;qyej!HS^ zI&*L!`=!BX#O6i`xrHPP+NwxeWnvj@QlqzeqN~5%k4*ZD_U6ndCL?%*BvM6oIss3L z%kSGB3wPvyGn)c)eyFkTwzH=`BC=LcX<~A#9XU!XDB^nl;w@sRCLPcc3Q-uDOM#ce zqz#RYq`j(+g*+M}`{O5}!^PNWII;5x?5k&1&D(mRPkyJCE6WA3w=cL$H#I}+Tl+L* z6#Qhqn`RG=;m^5d=H)Ta(H2St<-q<+RgWUtU}QF2F7%m zpw=pHU2eArpXd66k=sgz_a7OK?TK7Qw_B`$ky+$?^E(}~+<_xKd20y-(&SQJqI47I z1nPXbudqWQ2=Wo_HHzf~_12annoH}SIMrnBV$r~hDwP&r{o6%skaGN29SIMtNXSWH zw~PEeS4%@s&PD`ynPcB80iM?T(^%bEnCh|Rm#`POUM?0)TU;gtRW@VPWGoZ|KG2a zse^Rnf}QbIyZ!D}haYPUQ7Z8h;LtxuQS+guVL!BSw{PyvP+-*_3;^pbbGuj>M4c1D z39;OU-9ipFCH1g3W)OYedC zq7TG)7L)y6TjMQV*L(+76(@S)6Qdm}rq_E6i@B|to+4)RX&y1+P4PAUmlch+SzF%2 z1g%1m$JT`-z1Bfj@F69&oaO+gW4e&x?HSUTStyo?4{FWvxIArTOk-uWO|$TZZ11u+LU$P%fju9p+kz(pT3pVU14wE_}8< zF&D$j2LOIw*_q(!UtQV z^WpjJUBMR7^_u{%+F-!6F?e{49>1!Hw_4OZN$6;Zh74g9J;W`oyqS)Rj-zDy;1J#2 z5p<;+P!(9NKKDFAX$kQC7O;xMW!C4=wLjkRpmC#vDOG`&ln*3gI-cgBBgriw9t*@k zN596vjH$Kg=NByzbajtvE1_GEqB8c0iB+D-=iuzJ#f^po7cn}|O)2{xyBTk{lQ}Zj z2j6T*hEtX`FBiLkf*y}a!9`$JKCHR&>C1tBFHY{}thcT&ttBv*9P733B4@A1QlfWz zlwub_TVH{i0l>jwfNcpX;K;bNFfBIP2`56yp5PHpRmSt z8a6wKrG(GB6H%U$1SBuUMTj96k~kp=LXz zIFBGl2}YBUpOnp7tGmMEp3+(+pz8_08c*NlB6CW);>LFmQzxy!kJfM3!gzXze?&+RR>dnEi|n zU1W;_vCI6N8A23}QJftN-Kexco+`Nw{&7csjq1|6NB7t466oZQ?|DM?UwrP=M! zhsw?7-0s(9W6p+v_i5x7DsW;!e*ztH+y$2L6UM#xGxho7?bhGH^sbELmb^ZJZWnri z4PW%h+9+7tg3`MqDFevYxbWfWB+iwNSpeX28~Ncq0VBQpWK3nmlsM3 z?aUM$wnEO<+8&aKc!Y#{Zx+-YfB$`kZnEILUiKJ5Y6TBpqIH_S;_kP{-0pi1UQh2H z74)y)tsCX}J;4sa#~a&dUVg`w)IkyH2Qceqd0tP1_7uY{UDrtuoxEUt`Dp1^p1(gR zLyI~s_DKA-a6;1|Qjy)CYixAhu?70X=wtOKDEz{pjU|UsErz{L?^EBFTm8{tyj~v& z&)WYIvhaL~f*4SCzNv^FC!)K?#K$%GPommy{zlJ+VWgUKR5ZGOauWnE3Hcsqd^Kmd9?nkC)dq*k{Yv}aRo=GPV7jMO)U%udmW3m6R&)+!AhYYyn=*T7|nOSt3 zhxz@tV80;$zwGBHf15d8`l2<=+@z{Kg{Xk7aHd(mjAhzrsVI6XrHPkydW6$i(-Oj#w|RbqSG+{7o?y2U+CcgX0f`@95?`$ACXzqggWS&CQ? zHAVJ>tr{gI9R}a>cf+zX%dh@fzrWqP4e46B9#VMKf4g^dZ3`6SmlpxQJ}ILR6zrx* zCY1fL#T|AS8|1EfO9+<3tUru=9^H4%>D;w9*snbc!K*7NtkD^u*_Wbv15b$s5amBy zPuJFJN>K~eI;H)aWzlb@S5lgQa)3*Q*YHt(;z7&%jfUwLg-cy=W;O|cIFx?=P_wP~ ztHywRi1GfF!0*S0e1~$u`yKQQF<1Q5duBq{i7#mh^5$}Xb$*Ci4RVppN73R|CH65a zl1eFUj_)G!mnP2S82$idTg@M!_G#q`&gQf`knKvrk2ITD{zJhMe?yTg9q+vP(j5lz zS@&P^Q&MJwRnx7$*z038nkr%KD3MhJA|9ikEXYvnC|a+cts~%o5qfgnBp878XH4E zVudS~yFHv99kIY3Zf20q5n!kkf`;V*&oK$jfGpi+4Ga{fh5CDzNyNFNJ(9rq9qXK5z2y6+Sz*)DFx0F`;qYII_zFUVmUh0UcE-CtMBRZcMsId7zHjI6 znNV#5K1{a(Z3-9n)J!hQpRH*FI&|&edoxc0TxnAPmuCGJ?EneE4kkb=U3uKsabT{8iMdQPuZ|B>g z96pFn-jg+)%i24yPQGj$Li?KRV($b>U-B%s@)&i0v2sE0y&;|!u1g-M-(fZ)C!vE+SMYA4T2?tMnxvgtu2wGYSW zxH|bO(j(>h86^sgFNf56whHn2_a^r^HvFFE^>%CwgDs0wb->NND45nmMa)RF_ZbCh zHJE57s}%M@e*WbKO)gh=of|=INGta}xlCJDvs|pQZp)FySp$IE7^}NUx3PokhgYmO z)Zl(Fj4wpd*nAqSda=jm<$A?z<-B&fVjDp@2X>qfoC zkBa20-SMF%hZ2%vDApxeq$K6D#L3vY{5sUodrX<~#JE1fr~zDQm%|5s;bz4quIZU0 z?DnG3xd^kac<`{L`WPoKr*wFXgT6|LpvC!HFm%Y^^D=KGK0I#pX7+>})~gVil#$r` zrLhmwwBmc*2SLpCdDFGUWMWDZi4lIeI96_P?cw`_<8!j2c~o@}=-)>!UT$fd9}=@{ zmzk;osbyH?5{wR(*{E-w<5yQ0ehZoU)oQxmvtSSN{YOew-%<7X^Co>EoOap{Wt;|P zzI%Wvkwf1R?yj4X>FdmC|2yLkL41%!H|XK-1{D3~o9Wy(3gR&@R+F@ANDBI8V}sZ% zLylUn6;^{r%@=? zX2vme-FsY_l}$5)cx~jEF?VX>MO0P%cY66MzFFx|*ey8a`KdgMUK-O?tTBrQhong+ zRudN9&!@EPuc9%u?CXY+%5ry4&zIR}l0MzprDANuYrWT^#vd^}Uo4`6LLu01gZ|h? z!LChZGfn=-iX#svr$o{04^0-FPznWx@Y%2ucT{rZr7sy1v|P}joVz<2D-koGuZ~(d z(jA!|AH;0W2%C(HPw$W`F)WJ~N~U98s!witB&<>rVoN7GjHLf;t|htrk6miXy+~5N z_dc3wSXL*C8m0ZcS}JLox*o%4U7jrxuYX+<@d=)r&AKJ4(&%?sG>0GTl5qeY(g>)3 z=oaGb`7XA32XQ*srFs^u33#=8oFnR}y71Rk!$gBh$_^kN+$A%y!moa>ylYtl^)q=r z+LU1_%So-eBuZr9C9N}JxZoZQLK{UB&h2ISFMWi#(~1cooG=>UlLQ5#XnZ9C+*nMJ zJ>PJ*DG}rmLEmkd?$_!Tm&wT%SmzDCrHgGkfs1si7eTyaJLolntiSI)miHl5SLRw* z099%xiDW~Mnhix;PIyX^^zgD|g5|c)22X+V2a!{1zx=|gpPDQw&whRKxC|tzvbloF zIF6W%MAS(P=1I*FGikj{=wM(e%k@MHDFO?9Tn8A&MqVQ~)UPEGYxByP1E33&HXya;W8KZN%Z~k@UqnFcj_&cRd!)87@0Eab4nt|I6_rhVco4lVq{Z`tric54{6mZ6cgtJK8dPg4is@*z?< zTs-$Cn&5u+rw*TCHf@S>rO*_U`&I{JKTNv5PAE~TG!D+6cDuOX1zZH(`)6Qv-uL_N zH3W<+V5?-gb?XbGK*3#f*o={P4KYn#8Dq`lV8*~~ z@HteuJ0+pJ7;Zh2Te>(|fZKYTf`%5O0lMI?3Ve@v zc>U+xcoM??m22y1{Y&SYKtS+BhNCGsYt|WqMLeQWgYbYz=R~vZ;U)S6pa8OIPn6ZY zYXENjH&}U?mQl@t`nLWj()r?a997E<#JzsunLZ^9G99VE*)m+F38BVIT5ze2mYQJG z8dcy5U8fc*7+HBu2{v8b728>6owSVp5{l}+@WbH`6F$7JVc{&s_-U<%GVZH5%D{?( zi|z!(e?Jxg4B-j`5678++ziytWNA>ir3VEaI)5q`IHQrtB5@X*pJLN+7Y>oD?6^G~ ze_MHC*dxUf0DaA&Z2ybALpy3>NdC@47!N#{4 z2z#`}E5T>}u2u0tfhKWcLX-JEHM6=|=x?!d$N>4K_~2TNH_^HA15Ec@SWB(Tq~41! zESMy#Jqk!)t^K2^GlJg1oe_LGz#sL-*+5p7nI|@IwF5oDeS_l9%e9U?Mg8CijIeMy z@4=eRn1WGq@z#IY20nj21zP@Ho{wn4W1Ul#!~F3~SFB5$N*FI{w4XR!W4uzv_}+53 ziG@!lP+hjZ6&|@pEIi;6QswIHgHQmY|-4MPTER3s#JVv428y;sQBoY$V2B_TT{ZF$d;X$2}wl8Z6LihDs3s>FO z4_+I7A_1?^v-J7yx0RLvas8GDlqzCYB4F%~jY^XwBt4Ry&-n(}Y8T_YeJuHp6{^rI zgyBH6(Itr0gj0KmAiXQ5G8O76U3o=b&O7}PpqwcCI}{Y9lC)jM{FyyGj@Dl8FRHV> zOj$9fL#(|A564<$@3o(TB(5ceS&}1y6PlKJ(YojuNV8mOVStxsY!J?YB5{bTOI#w& zhV+lHBR2Ie0~31HXS-lFM8|FFx}JKjk8YIgffior8H%tO)ywINYSqDvSIg|Y9@3?F zl0}JxOeHqZ86K}jk0d=Rt9I+@w=MeeKO+Q&zWa#^y+>KM6O=2{^QvM);o>(sUY#ih zVKn)I!F~lQ$ZoI-5+S`&0Kjb^p75eJ8&HJ|9GL0Osvo=xh_hfRPyJllz zRpZy;3Uy%Q)0F@&fc$B8?tsrD2E511|FTc7%lKBN*0I$00beI$+Sx z474J;il1NTPI@eqIpZ!q$*$89Bwzh%mI3R+zPBKTyc1@GDiO9*SP+s ziy>2df}7qJd|pDK&EXxh*k4~Iei+CX3HbJf|eQt*+c zoyQI9)F1ezospMaqQ=zV13_xeZ%^j5zn&5>QmNurUC1bNtyE@nq%9ddYhb4)N*Sq- znSR;OF6YN|8MEmS^4@0dy4wHfGrYDnFz|pH(@LrPvs}|s=aZ09Ij>47{GFID9Wth< zoR9PObbHbG!(30{(vr5*j;)dvM`)WLL*CaL)PwGKLDnyqOI1PG?0zd`#Q(?&DfLs( z;N9oQ8I`JOzFJ~MD|&E`n;zH6;iOHTHB242E%{}qcfN#HW^Ya-TII=syJU&OLROkTguuDaq}j1+UQif_SNUsg)M%kOr?#1P2|QUmoLsbr7lu5kgcYSw?ed##z%B?17AX=?ya`ENF;EeUi9Vp`jO znd5_>u|T>yCho2t_uen#+-%?(mx<+VYL`l&)_S4M)43n<9BU}+bHDBF&r>~2|53G( z`{Y%e&&HW1-Y^?c-qzEv-dZuN@^g(JRKk>4%`h1ATd&5W4S~2-fwkqCUkVJ=*FX&cBmt!XZo}Zn>C3!M2so^ zEn|(cD;*)bH;7z?mMgB*;Ns`f>OvX|uRe2JU~@_a>tJ1P9R=q$N@Oi-y{3tLq%aMt z;pe49!~5b{QiN8?9YOw6OZ2rmu67yYEtt>cJufGs_nTj_Jk#neAPh*);TPmY!%0WA zK#Ow8@;%(LtlAX`h0kqHFw=FTMC0C$ajYu9KH>tvT$0kX3QsquYSkAjYwzzo(_IPk zo;77g4&2)1T;kti3OSew6cK`yxwHqG=p8p137F%6wcN98p-)t5XhU-0y4`mOi;g|k}YU%AfY4-0BIi0#t)%)E=JJbu??@?WblyGi>)5l9QfhN1zZ?#BmXzfhvowv zxQeHb8$Ghzi8hDV1e~sQ{`*p6V)9dIYa0fyV)3PqzeINoy0DC%cfZ5KENCd3n;Bj1 zq`N*Hcleyvbftma&_yo?z4~CYZv}u7`e}K>c!Ab@tJLk1hyUJaj))Bq zJkh%F_lkp^>6`0aSZnR2(iqG$W%aqB?@uBzcA=yN*=<@7(eRY1E{UET@4pYMG|sHZ z7xK7d%!U$)#6U}2r6iNTm7Q_$t zQVD=z2!Is%K{k;j8!*PnEoau@4niO2*s+Pl<(Dx|^5U^im6Ipi!6>GV{6|fA$aa zdjAZK2SS#r7!RLw>fIQv@_Y!JjrZ=dofzC)?N@43mGq@^L+)G$Ox}r`28G)igUbLm zNtX*e-(2j0`gWSDz2m^b5@NE^3pFamd4kHE*wba5YDM9F6hmdjgC+GJcf&l-Le>ZO!b=09CAZI3)+=Ty zrRAFG%&E_U`+LbG6uJNP-g}lwR%*CcLZ=<({+@B+RQ?%tU+C;t8-tQnSA!gSeM_Q% zhzyV!8;{yl+Hn9X1t=LrN-WXNuJSpNIb4wEXU{M+DguZ*InXZ4#h_qh(x>H)+?RGw z%E;g7>AH%oaf9jxt~=4Eti}&0I`;-^4wg1wkh&fxYwC0|!B0KOF&}^`>urQf@yxA+ z417vdLP&7Xcr8>y$buw??1F@Rv`o4*Hli4GMUnJVdHrW_qYgh| z4$ZqAL)kbz9Bycqr`APcNZJ&6|M6jL5IeCHmj=Uz!I_-Qx&53cDMo2XFby5Ia)JTR zrsal%XM=#d889kQ9LC##t@XVYFm?xYSIQ!Z0ph5jl>@kN;#_fx0mA*osBycr(yMHm zyriZc(a633_)RU5mYQ(-J}U%qk)&Ce&fzm7>N2Q}9W2ilL1{2H$l-^q?uBonP)7)K zJUgBD$-G^e3%QvnVVppHY!Ka79!Al0q?YwC-T&>~7;J8T^M1zSEBw_N;$fsG; zQxq#**rWeB-xU#Kv6{8<`q{Y3OELMxXXo=aZZz6^-2XEF#TdNwSmxT7ri^hHPh%f# z=hPYLySaO^(b4u+N_Dy6WH`Ol^`r_DQ@z!9^7h-n<2F{QdTqd|`;`J84N>f^uG`f0 zl#}Xpd5c!MrAJW#_&Ns$}I(#J0EF&q?0ew#y5bjsc!mw`XV7pTg z0<@E9CoJ>96ocF)mD7SCETYr&$^@}P-0m2{vkzU8gM`$_=2@(v)Co+fg_=>#+)ux` zT?&Eoj{fc{%>tjbe{gkaIhp)g$6-$1DIW}CHfB|U@CC4*zMjY+hWc!d$&Bk*VlzUMAt!4 z#I>?!5Zz%4N)eP4B;QuO_lS+-s`BWH>w zF-WLV<;qa}*&8ad<=uZ~P2#Wzqr@Rwi8jrGnrX20Boj#C?sR2Xp)AfpF@{(2ID-|4 z1NVKQWWzBTer%sxCJNQGXg`#*zA0M z|Gb1U%)s?>@S%Eo^EYyaQI46XX;>_{qxIpKXkJ{8UIB{3o`{`2U&jADP|We|17c`? z+_R6D5HP^@6$YANy1v-VciWsw zX4-d~P^RjgCxIY`w?3b(L0!@K%=AWSv=v~TH<;^>4y2d3esu6Jx8nXum$CXV4~vK5 zs?{~}TNi@JSSnZd`461pn{I)h(b0VJ9oAZ0rZTOPrrUH%fn0})^r-3$pP}X{8OoO0 zC_O{V*AY%Wo69OEztltVdqe}@zo93q&51SZUq7}dxL#>Y4c3`X4jkvS`o+#hXw3>U z@Kn7!!0-N#$nAanf1$7e3TYPBxj)?dY*(dA&|Zy?y3P)Qbah6+xq^D)I#p_FAIwB( zfwcdc5MK)XSxpmL+{{h!=%QROVA}&%f@*QhfHk%yB$?%$bH+`4)PHnJspr`NNX0e+ z%ZCEZD+2>4{aV4kLh+{r*gzzs5NQ(<#E``P2774?+Mf*!9L#IqQ(I-kqUHC6X&H+w z9tLa?=lO6@QlgmC-JpR71?EnJIKeoY@%A02nYa#GHaL449E*G{kseS2Zn8JOQ3+Nd zCXZWmOicr4asR%yQ4ibJ?_?+6M~19P{(#E@@xRO>(+p4v?Q?T3d2YQ<`Jant)+l(f z)d~5DnEv@^K~soE#&T<}f=7Z@1+e3{f{?MLr)k_lAGam4a208nRfEsCr~kdOQz@_Q zRZIQ@?x|i+fz*6V)%ZvRGycb)ypjshC*BFs&IpufJo6|OSh?OYxa z@rxN+;p7v4kum)FoH#HOnQaZL!(}HcOM@)bB2lR|vX4;6Idr^h<-9VO4z(l5LFI=P zPdR?QB{4CTB_>4H;cQRO3MW3kR9LU}R6KHrOxk1ioAtrb>|F`Np6B4RZ81%Uv>M;L z24a>2=!$Q7c!%eGdfu5@BD#`jO>iHm(2N111d&Uk(N+_p286U z%d0wdw&pNNlKU`OG<}~s2WZ}^n_{)s3jC;zRe~4FaoEX zr{ILvF*;^3)tkUW8N|g(0B=7~oymvh?P!`9 zn7aiKuEBD5UqMMogo19@N6g!(Cu7e`@!Y<&(6r{jftO!+)K4dgH;oc+P!jwzQ(InR z=&yaL(kNW?=2KC(AZ))k>J{zWoy0$HUIK}U&HnT9bwBTfPbE4EH5n1iB&$~;W6ui% zL~_X`_+az0BZl#ga3FpObOS9A*D)ILC^U&+T{(dkkUR1#S->8{vDeAE!TbWi`%0KLn z4dfwvQId5;8*ol>#+L7) zKlHxo;*g*s{|ni{XBS%MF9V`Jmv7IVuT!E~pR=spu5n;e(UJ8Yrs$w>%D*pA0n@gP z@r2wbvHX$yv;A?CCt|0b$FE^h=(L;y4q2w_ZH}rno02tVZf+^^B?&kJjhdzM@(bst z`U2TbH2CqC(7D`EbzPE1kGCyiFP*S7;u~e-b02;8-mUX4x5Sle#1h8Vv)s1c&C{pu zcn$w^?vDGq$km%Z;I#iA!hh*YlKZ^3gS2+&*qSwI9o7ST6WkngX!LDPAA$?t4!{1s ze>D_7D2^3=jGK3v6YI?DYXFv)7ktxXNm^y{-5eP|pjC?U3~Av!?|i2czuu%O@^pzQ zibktYJuU6+ooJMaytGP|>B0upbIu%emCo6iHWaE2$Sh#1UyTOCKU58TdVefjZM?CB z>3QF%2mS<3mIt3DsX&tq{X^EhsZD)^Mz)o6uh-Z<6?h}U2ZV>iE6lVCg!9Wa$>M~o z)hzTM3%axpMsfO0GyeJtAitjfdLbD}8~9iyVdKfO-H#jq*)0l<)2J~UKqbc@M6j(@ znlDI~`j5UUq(Er>e~&i*98^yn(DWoYzMbdZ(9_H`^d^qX_(sd%HTeyZ-uJ0=*Nk!Uf z4xTKXDTBb7AM3);>upE_-~Kd3iTvF|ur|gcle9J;qfq)j)}oQZMDql2H&sDzkrrW0 zVdzg5HYEkG?cR{HVtJEvImhy%DTM1ujO!oo3?7gRsx1lG;m@pOZ zEqsf%nj>TBA4OYFU7;Oth5KgW#X(!{`R>0iuD|8EP6ylW+z>pj9da+4L8**T-=#Q* zB7GC7DiVc#y{hH0RdI`wlge6-#_p95NJD6) z`{SDr4CuV$6pNT_@Fy;VbcbPUP2rr3QA8PLq0F;v7K{cVLj5P)NpwLZw5A^^rdi-r z=lfEK%8?ieGhmfO8P)L3m&0^GrzZpF7cxvdXS%t=cJWZYNDcMp5is)wL=DsFbxF|I z;R1hxT8}BSd_}~F61jIMPZXc}w`&ZARPcF8JdvDz ziT!XdG58=!?P?!R$(;8q*7%OCAgjjpgtL7PY!juLM2bfoS#*WQ9?vvB-wZtlX@1`& zp)CC7Y=%|)3>H{dJff+oD;tt*Rc_X2u4l+NeIqSkkqgqWv(rflsiNhNN=+jaEyYL7 z@(ga_FY|+i2ElTjNp2kpL@16~wi|mo(3WCWIsx*nEYO1mFg@~2b2$A>iqm90fn;}R z5or%WH1K{1te)vXh(N6@>lk%>i~$CvZD!(Hf`kJzRyp2QRM>QuG~LPsdF5bE#!1aB zbO46ZpF?AO@b^OmoK@ER7P$^OnCSeRtn%;%2fRh;$y&|J8=tun%GTLzSY>>W0&DmZ z87t%C3WQ(E9$v-+KHN=udsnPj)eH@v)*%gVr7l!}vF>79n2U`c1vn{N1biVMFI5-uFKB?1Na5WOiuM^_lCfFvRRjF){%agSXGN^10v`eU>*H)dL zavLhkbh+Cj=4tR0ZGZp!TsdR<#S1Tprut^4=Xqs0kDj%x`v_W4Eq^g@AI@nV~LQt#fuQj&uNo!~m`0a2^W|j&Lg~%+Hw4A#zVXKIMWwEYi%9?*!I& z`edozQQIED?~2@HKX&s02vfUA)G3|N`#MqBd=UKs`h7q1t>WG3O|o7_HTw>%w_pQ_cQ#3DRjDky?pqi(D81AeVLZ3AyrQ5957kkagZFk z5j-z9M7qdRC-ThJ=DZnYWhb(Qmyu1=Ob5YXVU3!@DHM~kAe{F?u}F-|YCVxZ@_^$= zZt!w|KT+S5rvJ{{^}<`=ySFG$F;c3eoKt3L`SY~?e{SkR>i>08kA%8|TZuGdO0$xO zlgfs#tTW$-M%V^m%*|;u6VYe3<`EqKi8q(E%{)u20Z~tYK`D;Wyp#{jx36y?9FgYxD;=-1JbrcdFl7AKHLxyM z1|@ba8GNe8t9P{X!@jWpE?>s))x>G%PV~as)fdlZg9eD~4^JF6jO9_h94v{Z%swY1lZ{I94Il6!`ec_ibG&7pr_Nb3*FNPQ znUrFERL-VQq0?x0rihh;+-nmGx|>}nCsr&$FkFGIIap$B!#R$+NLTt0+}WTPkYaRW$n;X)RD&*SvH0T>9lxiX=uE}@RpARjLVro zU-S|nqf$69lxj4L<$z>hSuFt(m(q7=81Rs!o^?A}xT$BWuMx>dmH{S23_cO1=rlN3 z-y_hC;+A$-C#dmccW0 zgz9S;^@b~QPMG}Xc@tK=76TN%^d2;1Y^vSA{r*Bw4u2zXhHe~Kx=~xD$7+eR2#Rh) zi*AL;<3w=ECSA^8pEEfi^68%Bxi5vsb^m=_Aj%kZ!{QyelVYP$MoCn=au(be{QUxy zMj_g_PvXZFZfF^SKq!!@qQ_JUL;kTuiIwA^uqw`=uqI2P=Yyft=x;25(Rw`qEvU;pDR&xIB8IiwX(%Y%Gw-&7ki zwzBjiE(r*i?i`Fdn{}vjySaC=_OXncpAsn))W<4(u9$Y)#E;CbW+yxQ2tbq7Lf7YT zg=9EF<;ld=?3j1rPdJZ$1)liixYoZ0mu|b?JnM@oYg`_pm72VAyDnaEo0~o5<>eJA zb7f_G8{)JlEI2v5!&lq8bMAlcXmqVVuY~$th?*SK@T%LGdW1;$Jm+>oD=>_zYFvYt zUtWbt0GGz93m#-juZps)#Qge^u8z;Pz9z+64TGc9tSP`DPo0^ehI`90rF#Oug6YTn zZhxV~#Caj*-@`4Xy1;Yycp=>^$dNVXKN0KyaOyuD{(t%Ert}i#n}Db>yB$8}K>Nk-V+(Vn&>-mFd&x zJ0tPSe(dWy?;d>kR8DerOQ(Q@hM&?DQY7t)`-!vP`Sre2?v&zBTUh!~R+&Km6gg6q z%u}}CiQ4RwZ_re!a*ILVXO>O=f@N%Yd3q4*DK7H^zeZKjqo=*X>Xa#UCdrWJuqY)J z4B`>dVM(^4q({T#6~iO>=%bBHXU}aM9kES~T745?#Y+{68ym+W>{XQ8uWUaq|(Un=YCx=Cu4as2ofxokY)s|ZFv!O5e z6r`nNwP>!e%W4@Y))}!MVwSkRmPlVhUFR}#V?w~N|8<9 zsA@nN&e^p@MrbaXRJGH*&pS#QG6=9`w)O;Kgo;Q#}%dj_t2cw;FNPoeb zKK4>il_FqoLBNhiT06rM`A7mT;E3*P063s)L?pFF?>POjB(Bjf@{g6q6f|IS( zS&v=D+r&|}`#f@!%V!`{QGx?ul$l4x@9s`C%c=y>juAv4=?iEnA*)G${~_gPAjHAJ zHGAaY^W3%Be>X`!E3#8{U?jPcceXTmwLWAcaqI1OryV$gEb&s&eaq=Q(Bxq3GkKH! zc1YnIc#@mlb#JCFu}9EQw2Rp!W(Rc>K^J3CGl_qcbn9ROzSp)07nrSbxkAfPt{T@Y zOJIG;dGB{K_pa#X&v2QqSSjm(VfMm%yW;SFO0EK0xY&Q*VNRB6OR5Mc31#wo@w8#SQBEV`lF=MzFK%0jJuH{w5ER@unl(Mv2~SOoDBkb~dQrgd$k8#C~M1Q}^U)F-o2T zq0Jm4Y61NW6NNBd6QDUU#BguT-q@5vTqyp;U`2lEChI@K(oO0AYKL{9nibdOdmbiQ zCMJFm@TT|9G@Vq^`@`+$^=0>eeYD5Hk@-JRG*X6QR28BohMF0gZ}=y=$NoxEKjty0 zX@}9Xe5^ik9FZF8<(isn%~!+U?vSqTk^Ua|fv+YO)|6xyLuo1%;f$%yF?EgU5M!M^ z$ttIE5z>aRXCBOe0u#^7k(N)N!Iglm%SnHL4v|Oa=61;oLpV{QG-O{?(_u=iGBhQD z+SoIW{=(~hOK>*-^h;Gr)|4IPTO&~8y$@zjIoyk2YtPSvD9Ig7wPQW|w>J)Oh`Q(G z^Qn*(`gG5!Fv`5OrB50Qn}slvdoyl8qjFUm{jziO{S0Oyb|7Z#^mTI zPCya%0Du;Q)OcB=Qv`~VHiU9NDDoVd-}|OJ&z5q9fS*f5Y_Dso>!g2>rrxCLp#4uC z8iP84j0`*!{)EHy%#7V&vnd{djD#X1x8gvPkH=DEbY)6 z+9&Z>wClE!-i=rIG<-l>HVsD8OkbL>EZiW~>nnT>$D*rMdgW0v)x8GiV<=2zo3w>F zT~~3dvnjk3GYyI~&_Hp%{4eIL(dVKeHn_{OXnWF1SvQBeXlG>#vl1Q2oa|jpGWbHEjB5%a9T!4s%=@6O!yQ*TS7xznyQUZxf~Ovh!&iIq_t@& z-ljX?Cx45Fswk3vB~Z+$$k@=@2~0Y2WPoA0%AN8{txqP42{foU8!1VvCMW8+vujl9 zLUR%kYzA)PunGu>HZ_Yl6J2(_Wz2;6to29?;Sj>W&NyTsy*2n$?!UagIY|k%QAh+{ z*<<`m_npr*9{D4qak<+2h!Bgef`R?xp{=hDBPD}Rlu2E(1nPxC0d6(?So=^hKCS}w zYp`HrxvY`eT+Sm?Zzp_pwrMf?``Ou-n4C%AO7Q)Xl`CNQ(J1hBJaJPMxL}8G7Rm>7 zScY7ot<)*>OdsqzuIsgXaTMBm?l$c9p|742@xdM-TWoNAL2;(6MzgcrZz3P|=Jyj`iE zKTnmN=3gLHk(M)z1HJAruUnn{h=VTv+*tha-5Kw=)}P+x?tLOX-@Jht5*-#66Bt{< z_qzI(*^RY$emQR#0KpFY!mG`D6SoNe-T&3^NyTLMiDADxbqX2{m$7J_y0}Lc&M(7J zyTqD^+58?2uS%6~^O})=DrQEG*xT1PgM)l8K3tSdRvtub{KoO;?i_nd4=aAr_l|O9 zd})&Ta%P(9@AUiiz{KeV(i>)6+DhB4<Mmj3ky+Pllo3|y;Nt_EIf+LD-} zY~P`QwdU|p+05jOR!h;n;msVGOn$h`WgpIG&7|oPVj_hy9_KJ>>*2d1E!mNI+Vd%vC-G!sFPw! zf&@|)`7Tp2PkXVaWWXsPVsg#lkUik;USrryxXIek0Z{4e zC)qZ$*OnS0$jet$P>JGap;MHKwEH=GC%6yojR!~R?T9QFqx6WUX z@ppDGuxerHOIG#hKvbZ$4Zb@Dv(`V~j7^GmGgks2Sa;$-B6V!KPd_fZZvMn}dAOv1 zIW3|F0z~5O*kt3G$cLHry1YKLT4q1rZHz;<;fAzw}lk)pCO%#T`T_!YlLjOZod;#~-}M=*RyBdo5`Rd&6)P8Qk9 zFbzt|2H8a`Ws5u`6uaQbz}g`}s;mT`>rD|9%{+&GdqpvSc1za4D}z3QKa)javhAW# z(gl3SK``l7BhSP95odqNh_t?DOBV%QemdeiA<33%O&ee%u;t(eEbGzof&9#%A$_g(o{fYZ}yrm&EIT9GF) zP3d4GhnsqVmpc|-sB~dz=US<5Aw3!$9qN=Rp+0A$y#snt-BpS68@pilDWU`Q`e;J4 zpxG)1!p^9xM zh47a&b-e*DpEQ>~1l2+)z-i*)$K>y)Xy@xg@AIu+Hbz6^0q^`6_n23Ui2)%ckyy=v zPSg&YgY$&}q~UqHBiQd@>rOu+_sXKupD5I zd?AEk*=D&Zgo`wjs!>wx@tNKzp;4=UQJR|-P>9V70v-wTeEV6&UP+fPAI^VvzlR16 zOV>tlknCC(fU3gw2wciAgNucGM`w?$$f~O;{(KlWw}7=NRgSQnncjI27g2{MQc24) zG@3KU+8U6JaFj?(vRvLEwAN)drVH@UC1v#02?_4u!QC)Zi7-%WNuJ#yQ;mTN6- zx*+BX5>Sv3?_JXWr_I2eftA(Qx(gW;TE)2pTwj3Y`L6+ z8uN&UxXFAWL?I*=?qcL6;ei|uN^Xau|6JTQNMW&G4vhtBNNJ7r_g?FLiTO=&T!P2F z@<$W$nVViGnr9>WiwyA7C1(==$}>Pwoh6JUGAvp$waA60D+i?vFj6d6^(~@ukA|L# zkXy^tk1NMK-_=g}-@1n!v}&IJuSAFaSBb7I)tAR($IJhgNPZA+zos(s- z@V(3vDLIvYzsOqE>>&2xkB%G#@`$f^n-Z+P#pbR1eZep-} z5yq(Rdod5~aSLC4)E9|R;c=F!tkkV$P{xhGO`conkwYY>v`wPqqXatWlmi-Yr0L4S z8y>9aej?K0kAzPCnBSV`D+3)_eEAab_C~vQCeUM(Jf5znXS`ol?*pqr;m=(EWiq~o z)F2YPrt>s{1Jsy9ZEzSHo%y01j>e{|szF^`4;=hA%SuER>yWb&;ka5;vw#ypbMUAL zPBQzuA~2b5rM?m%(sp*Ub0ykwf{Z<1!y3Wn3zR7;W-4-XafB8E65&t|*fRbIM6Crn zemcvFP@LX<(5b|+}7i-kiS z??Cak1oQri`RJe>xPp(C*47zbyt{w#k;g<4xw;-eV!eta@#-PO2G&|qYxxeM2v8x8>mA$KqHrv|3>f~KgnH6Il2jif$BOin3l4D0eDUGVWk;Y zRpg8!7>#0R=HU#EMlJtF$t0_UKERp`)}&M;LO^hpUT@Ph8;}7Bl&%b0*QIcg);HS0I&x7VMsaU`x;RvH9Mtem_O zhQdit^J3G(vmkw}HMGPmQvt`FV%=Y{C3;?&dc2<1x?ix3$KAPni7HIo@VdP62A{6t zDMVTdYuDBHiYrXUtUeiyKiULDw)dQE)GW}W&6$@62F9UpI*KmZ$ zVVJ?3h{i)U)?dg7_)46XTX&-CxN8y07;u_xj%gtmt*ibHdG>WZ33HOslcMeJwoZ6J zmM6q8oElO#Eqji6T%z&@ePf}JGi8ASp($;4=6MOgXmU2GwGA=ABGoh03IfHK`4g!P zn(Fi|#^^9*LBnCUm9RfzH8O-1X)rNBFlNbAc_U3&f*TbZe*YAdIN`4kU+yNNWLF*E z-##!I8Jg~e4j!*u%e}{oelPVB{ZIP(sZh2l{X5ePZ6c4<QY^y>C3L; zzuJvH$ZxHh1t!c-dZK(W96DLzE!3ymtx^}dU8o?tU2E**`xlAU6Ydl)RKmsJ$p@hG1ElK;#!-;5puunooW$omY;8rxT zvSLsSur#gtwfzrx@%5tcst+FfIvLwP$a5!`g#hhe`V(rt6U)am0i{|J@Lsmam#EkI zNIheNKKIW$6kA_?1=Jk+n>YgQW?tj!NWayKDK;;DTeOp+(5}_>J+88$pY#-aX{OdP ztm7e9)#9wPXbB`q56fces7q95bS;r0Xw`}s<|AY$@hMQ@T0RqTY=^2FwAeo4?qNj| zWB>hC0qC~Qax19AY6F2PR zgKXuN`UFqUS;qRs-Cl9GT?LRfPZ`r3ortNuEB|NVtuRW5^&jb-tB4-u;F<~Z+>qkU zL{t;}#{h zW}X&hU2zLx_WPz0G;8?1s1DYSz`JRBV`G0T%A!$7pwOi8}T z+^ygWxadI#8x)C><7bXvVp1g1&EW@+C`W%EIR%^c92 z3e9S6+}7pUti0kt2Z|D-hji_Ze}~wtFcriU0$=3ptOtMnrW+quKwYQJCY%Lv>XyK| z31cshTXa#iao`}p<^yOBgl#bwgQbSopaNUBxUEJu@AH7PuU_wA(6w*j4Yx>saIn^} zC?y`H>jk{T!A;@wS1*Zf?A~2Xw!O;bM6I)GyrCSv$wLnUr&)Sixk0m)+hs3I9H@~Y zXkMeh)X$GHQS2X%BUm%nkmma$?4`Rn(hQbN`2lfOotm4aT})%6Yk`knifXXQuXza} zN%2CNeKEh!bZVbiGT2ti@XA2Z{r$9D{=>XkB;;H6f%n*cw_C{lSDNP}ppH1-k88?v zY-B+)rSvK4idigkJN@8@yQI0HHpiAWTspZEn3iE~T|ii|em!O36$~W9Z@d02ZMpXf z8&>G1iQU)s!inus-09~t6_R(H%i2DEw$Q7r)7$>C&oliqID^0b%g_brn0mX#zF-nx z`G&jjU16|iATF`K$j?+FT3z`4S|zEPC-C-B!|gsl(IfFA>c7W>txUJdRjk`#wAk@^ zz7w@6(JP0k%`Zs#dW{EH{xv7m2L}>?QN1st$Udgi3^17vD~d|GLjDfq8v21`24Io4 z;#IqyTWs@ZM(GVERhb;uSfe@FEMEWv2_=SM=)Y*5#s(Cbv4U4@3sPUMAAhsuDOmC7 z`zPXzNB)C*e9@TsuN+c~0>6%@&8s9U$&BRW6f0H{6&BrP?8x{sa_da{!rSg(C)*4& zpdO{!mn)P;r{;@Bg{rO)8zaB{0Jwk;2@L z>`ui_rNG+2FHe@7jbtgFkUG+OQ_5CE<#p*ttRTX`NnQrhv5y8gn&*t6o_QUp3BFB@ zpT8{Fh+o~pf2|;C8Obh$E~5PXG|X3NM~%FHUAW@*A(S#oS=wd?%@dkLJI<|8u|PRj|fEO#Fh-<>h2$4tL&lGV=T1hGFN4Lc9CPq<4eUD_}ro z$EPk4OroeTV^@#oX*%#!%b+A1_~#(mKhf;~+j$3ixiyFSyJ{#YZCX1a*VhyxhLR(w zLm=t`7jRA8%(2HxcbVF@!+!LJifrUDRPCTSY085kU9y8g>ku-V1NhgwHT$YU$kvjLa$iY zgtl;c%Tk~mOy`)3O!Wn2*_E{eZ+a%L$AUgUJkf-Wmk%&8(FjIDLekGSp|$fSAthsq zA*fclA<4oJ5?-rDr!d4KAt&80omWSqF}C{~$G`wQCo)@8V+AclN4r{~&I217qeO6Q zVrcM2vv%_5lFYu1jqX8-98r$z8X3)fgTqXv;ULQ0t8Qk>?5wrEWTXsETRuCV0)-6Q z1ga0J1S6^%8WQ?jxq{9%%XgGCj>i8&4w@~VQN>x*cg_wlQ3pVVyw2Ta(LhrK(P)-N;6}`&Q2*&g4RGIr-8Eh3SJRk zmMIC5D;|9~1Fss#INdy{R*DQ7zDE$BD#v`^m78sT6R0{=DC}e{uJ*#F(>Ri)|6UB~ z37tR%%Mn4pT#IcOpxVM41So1ehQ=oFjN;)?iF)O!wi+-+#yg@C9i04r9^HV+dtSKl z*^Z`%0tz!EeD0}Beu}@H`d@@#SXX3Z=Nr7GcST0u?=D9sQo;76bCE!&3LFSSOvadw zYO4{GtpGUEkt|qJIdOzKAjz7SriQ=3X!_v^vnF3JF+Nu7^`lt^-#)g)W8%gWN-o8R zOOk3wIid&xv3O<*dG?R{8N@;@3#EY_a6T;|SQ!y+Q_NEHExc&u)+gEmO*>&{mFm*c z`RVCF7UT23UEil4u0Qn*s~EfS`@hljTwEm00=vb*m_|EyVW$q)a~{JX^_1Fpe$9AR$q%Gu;a zKp&p#%RXVA+gz2{`*HPHF6qT<$$jH~_;`tLHAw0bfHAmD^-i+*l8c)+PniGv-jpDMY*D z{ylddf-^~6YiNQOlzF~D{%?Vu{jUOB2#t=_&oLt*n;#XAT)ppv1Ql{FVa;y}D)vw7 zWr+^Y?(;RH-{b{Oe$0DYsL0T%Nr;TSG`uw*0KmY{r&J&;O+2-_s1MQQPltClM$Dt|l0*g_!R>V)K=1rFXVd8U z%!Kv^li^4gCYOp-kUK#1ih&&u{hp6^%e|xRLG;s;iVjx#Bw)7#w`ObQOkP=slB00uTMucjBAB$xT6cTT-wxJ=wSl2NxfSNqe$i zkMipM(YWu+kb=bMznA~S$hOFE{dfS$+NHP~2{^9|ZVg2GJ{(SiWoZxcyqJc%HM&~k z7#ZUCtRRa_b*UxwNh9Mw#7UnX=;rE1&lRKD9XUM39Jtc-gprThqRaZC@JeC5jKx=7 z?=Nsi)=SFLDifH}IdxM%T52M|OP4(JN<}T9j#H{t=@c2ILw7D#*U`d?0m9)v&%^m* zP4~1M&w}r}z0dv6tQeV2rb>2VqL=`gR_#}-rke`8iD}Y$ejb8vc5RJ3^N-4Og=T#0mc^fto&2;$juI` zG{Lv?+|J98*wr7t;ivBk$+- z-DmvuGK~-HBd$AZ@s@qNvn68x`ru(6dNe#;lJusNS5UPSH0_sAKyqCh*0w$5ML z2)9m{1a8+q93S)!5{ut68b3#Tf|+q*LILI}$21^VTWenXuT3(!=4dv2FldBTG)MTp zXzgj1+^}lx;S*LNacd-U!~QbgC`@FJ9_EgTV=5AI9Hc?8qSuBDwOF)N?S5X;dBTAU zSrmb!qHF<#x=F_yp^{Clc!5xVE2HtP3W=WFpI`6H%4x2GF$m?t+SF25K9ICL8 zCKrlmvrq;ZW>%$|egc-(5Tw%8*1{`kbi)-ACOzo}*KdP%)kEf@TXEV`NPm|u0`pb4 zJ0n`j+o5HKyYt1M$K^!O77qKYaQDN74|*yx7SuWT29GWFMWQ}%$X@s&#^&bKzHnTF z`b}7heS2!%+4@9LLUdZB@YX-{_e1$Ih>FU}>KJgL7MPf-A%Q5ExnsEbEFxOxi?!58 zCQ#55%4sM71T<#&c&3+y&ilQEUTn?$3579oc_LcUjkp{~gc{OU1%M&!MoS%XkRjig zws=Ze5)y)^&mj!uooh(RTTH0NJ&FtnS`{+lne@jkdU^V^v1(kMmtrN&-;+Q|R@U|Z zVI+QdGx_g66*Kz#V4hS=pNa2pJIdi92O4OZ+r6qsiH+ueO695Fo=y<0_tInT( z(S0L}SbZf0qcK=!KWKajzy!=8dPwIC9TH%Wd*tDSQ9?0dieA5>E&%-l zf{m=TaJc#>*pTvXOKGE*S`5xE?~U)7cE;NSBwmgZFWiXjV}0h}O;XHpm~pdNalFDi zFljV7ae#fl9!<#<&2TDEg_xpSW*{_iAH8$LOwmyz;*Zd9@Sr;XwUq)j-i5plNA#wu zMhzDsodV1EekJj@==Uj!mz~UqONGrbIb!ihWfO^jDX4g;m_-_&Hf%g1KGzp&uZ0lz zTth{Nsnpw@!r#+jk&q*8Jq#z3EUwW1abJckTk zi-=^q%v`20NR>ln`{2cim=EilRuyCvVmf4rqos##?!XmO%hge{pS7`P7bhKkR2%lio3}cpVdo|2v@G-JREvMM*WG zuH^~;i~jziR^YwU)w#nS*k9Mowf~d)QTxx$6EWOn`6rVRc9SO#X+mDlOPa#hiA)wE zx9&4aXWB{NdCvuG2D#dj_9nbJklm0=Da2e7AGmgn1NJ_4 zZ>4iHD)Wt$7ykXnJ8kB(;d9UAl?RQp%7vy$UW{F6^q3M8=ebkGF3g@`35%M81A>L7 zSe~u$daDbce=$`dt`wL{N{V7?O%kz-$fY(3E&tEwY!#zV?=KlT?Hx9Xv7G`$L}Xj_ zq@1|4JYs*lFK=|eL@Zw~20p?;x4rS*4-v$d5aK_5y|3%bGq%cZVP3WIo7`XpT1s#b zcvc_PRV)~nJPl1Q!=7LKW|jLg-#IWdRs9Q^VD~m*_rnl(e;bAPZPm19^|U5yyk<2g z&eF+4L1N2?9J8Pp>83fHIqE(E4j^vmce6F73;=2_tpRw+d2J$R*7f{-b^2kAxK~xJ zorIif2#BDBCdFQEQIq6-EtHOSCXcDW>_I_{TfTylQWuDfxXCb%x82u|7X(KhJJB?2 zFdt12ZceDv2bK7!PByGiI&U{sn2h(nJZ@gTYzA_|6!z|&_)#5JCur4A0+yAsS2}{L z>-+@-H@=bwzG4R^3N~eI^~1)j3tS#SBd`spM8h@ScO)!)ux>3>(jpaLaSA5yc-0x= z5HdfzQ`$(}tXhg#pJkkBEGZIc@?-L4@P_h-2BQEk^;h2FKP*DPETfRwV+4fM%%K!`4l$?c7rqBU$RxV@?YD2vei=p3Jxjx6ug>pD;zBl&HmpvbJU$)gYAKHmI zIMlT8{5ue%t8WgW26POtVQHgu@$4@JDrg zq0Y~yo3~<~KId(6#NrW{3c$BzshYov82Ix`bp9a z(~aW+Nt03V!@@5SvQq}zg7L{KIn3nvXGO{gJt`ON!fs7`3YTCXRwVoqmU~Z!^m-X# zFJ^xtkA?LY4QT)VH+i9%Tc28uF(V;12nkloF}oSNH-LL_iw%%NDqS04Y~cvz@6!PD$K*^{u$?p?<2Bk#?=eNJZ6 z9H!eRJZPW?2cqXb@xIU_D>D!%q`v6=*q`~Hhi&3TcF}Q#_;N*VJb3s6P0-j=7)Dql z<%VHV+spMAYnN@SjOu`;SwME-A6IM*ir)jm&}1bNPe-N@>nIO%B4VPh{0N9lB<}r( z-}xbLZJ&CBiT^yfwK){@v1iVHADH{ik*yA>srxy0-On5#m*v05Zqk=f%k1iM;Z%MM zD?P+O7;GV{!%o$dl$@JgQMo>$B=ubz&e79%Xb|_+hZ6te|~X41z0k-?jLl1blP4m2NYNkt@XsnD$*4NHjA*pba;l z?Y#3uK&NYRtzTNmFu4xAL1=rtWtqj9}jHi~n?!w(KFbR$_*7(I${N!RS2jah`$kf+7Ba#_VqqCE& ziW+`lN??>b%}I?h$t8P0H0{<=*t*PCU*8@7+{6e z2>1ic1lY^`fG8LngdJ(eXxe*j)Qs!&k>Bt~6gAA(1<=RG`HuOwg@)Ngbe42G9%8CV zDOOR?j6F7DD|MIL4ibBnQd%zE{q@Sf;kQA5=rN4Ytzg`OfU9|M9ap3CMF1!tAOIYO z#;6acXNo84QabhSIeA??lHQ;NmO7&{o&OATeT$3CB%06(QJq;7%dBkCx zs7ym@RL$kEH#bC8FAFkcqnWJJsF{nA^>amxifj7rB z%?&X@QK_>pNiUvv!bOCw0%i5c`XH5aD*Yd(-Z3~5Xl=WWZQHgr!Ng7`nAmnEwmY_M zO(w>~R>!u@iS4h?dFp%Xq$)r1GgaMt?;F=zLF&{67!-^Jl;WzVGoon5YMKbqHH3k= z&l&aMNG=lN@Gi;Hc~};R*!dov7xCI!T6>B;cXNj57Nn~lDbXx`_+iF%=K#f=RyRsb zLwEH2*Mn`2PKV$~so^s~ zJ5=guu;^f_Su)l|vUKveluKw*2W%bov{GT#WhHX6aM?{}W7_G$A&R;lCRxERrPy0v zxL4-qOSw6IXZ(6^G3P66&6!W{r-Z*3JNO?RzjDuCKuk;quv*V0PS6HX%hxKbmY(+6 zt9dy{`dO!tk)3^5K?JdEV$_ftSrf?QKFOPIlCpD$@dJ>vom^4Zbx zQ{3R~b-B^>SZTwTgoBM!D>JVc^PQvm-&$opNCVF5IT~9<+!NS~XHvK+T|lH`ofrBN zLq$(M2=^hIS&AK77Hkvh8K<~NT1F?I@_|0qAh!Nst-~_+U{%%pvIWY(S=0pC5LU5- z|ESYiWag{r0X#4J{@Tc6n2Akx%#!{+_cUG{j4vJ}Z4g;ajO9klM{@qDTD4_D0Q zO`b-^Xhx!7Ebg=b^nHrTl|rb(*~CISe16(@9#%Vo#x?PGO`Lhd+n<{O#~$1FQd7cD zaxme%$u7R?DKl0zXw70`==(^mE2R|nYHE(5Oi;ui>z32W9lsM$DGECNu#{d7I{TBG zlFLo(4;M9%_6|y?3{JI(%$MW2X5N~Dx|LyInT7-5MnI8Cd?%A86V3C5$bdZj7j*`W zjwP9V6%4+;0MjXr^g8^7SYl!%GMWD>q&XhUoy#3q=Y{fTf)8m|{@63xw$~0U5uC-# z?5y<5Xg%cn>UL*1p~0QN*+WDvh|s^%?L`YF@-j>8d()U-hz+Aa;vZbFxnt|GIbqpz zS1Wkc<#;fs*%Q(7HTeb?Ox?hA)J*D&UGM)aYmBp##5lb_cC4pNic)U3A={limz7DY z`vWIFX1mrSj|N$-i&bYktTBCsBWTNE`#+pOAXl+SUGi zh2vXnx=plsh113L2Kqu|Ds;@}GZV^0x&ah`*B5~rLZYQfe>P;+tuQB)lFb>#=?QY_ z{O?f%`kcIWpBubEoM4>@sly{6 zD&SuiwF;`KF~ZxV-!eus(k4*_3B@*Luip>=#GyC|d^FZGL7)~q1QAeFeuODG3AVbq zpXOlW&i&?DxbHH&gZ>UT&kvdO)A4Hekkua&@&lVmcP@&cX#krEl&Cafrp;l<$PxHn zbE(E|;%dRs?H0`V@9t&Gp4aI~DEc`RBAb?ngNrMQkvPgB(ziz95Fb*(j`?npb*sO{ z;RVLUMLI$~mU*4#w|aQR;?b-Q1}#BqjfpJoddn(jTfB`In24d&`gjVgzS7#?T)F)C zh}$ZhUKb*yfr33PbwSxu5oJ6s_@83j`Lv42X*f9eB>10`^A5rGguh#%%S7GCl#5g6 zqOzHo3E+(DZI>i|E|L=p`>_==6U#O)&FQJ{#_tZ~Y_%M?>ek>JUBcUr zZf#p{Gc|wh(bKZCvGumc?&C=<54@Zt;(tDl=O0gReb#){9RQ_Z@M`3o^ZM@3D9F6l z=BLWkS+1K9rw-${zEp&7W}i5`%);tdg8LjcQ(>L0fMhLI2Vb_wh0)_R#Y=C=}~H}FLs%|sn@0`F81)h?5y1& z5bMcjO&hFAza#YY6cS9&ef1|23W%D3B5Ie&raYxJ=+11Gu_HUFWsN*ppfnz2(HQiL zy5?BznmH?)ImbPWjY+N|C|nYa#;i<=p3Oco|4CE^Ax)9?l1;<|35Wx58l1Av&J^aD z6h{^5=brY4N!NGh-)=vo;jvqjNizrfbsOJ;1oxcrb;GPg12qI1+ z7!qVPHpARXeaLY~t5PCX#5yA0_t_8&m&6>Qm_ker;{AlgA^h%?0^K!{&2zfrGa}q!`-AbX=T(=7^DzD~ z<59zSt;O3Ea_0we!23Aw%XhH2Z3+Yq;m<GjIP$Kp*-2NJ6)2Ox;oAqDtA{u0@iB_~sg*k> zWL!65xhCfF*#7Ui3H?9f#xJ|}Lc{6NhLo@RxwQ)b^3OGFt1rtX$L|(q^0{>V2?hHZ zbPlH4JT>?1IY_xS9JxmA><^Dbh=`Ifuy2tI957Kz8s$64vEQZahK%^|%Kp&|m*ayZ zdYd**OXlf>m(%{jUw6`^Bzkr&zvkdn=+&}?qNt(rm>Rj32a|A0yM?nR;ZlMMVpEb* zpz7)Yv4^WAPGR;0`sqpoy^$Na?Tic1_yWEt!Jefi~UoYkOSh%MM3# z<26T-Ku}g3GyZPo3}L<5?fMQ{N_zN&6~*YMG~F@G%59v!p6BPN?+2sE0c^|mlyO(@ zOrR7Vftm%*~T6M@C5=*P)*-ini0vQgfbUjvu@DlY=WZl|Z&gJ3}N&RLuXvn?nGu zF);Tjqn7!{B_jtP-^kuAh2irCF8H+sIx!r?Ce(UwX`n*%Nu4C^x%X62pUW*B<&be` z(fNENXVVaB7^#pMFY>kb2I$sD`&o$tLMom zhK5sr-+)@@PS&}X=QL!G>Q>$ad%ZcP|CY1>PA;1S9I3TDhxqdo69-wVd=gJI1s zfHV0tQ1~4PvfYk$J`AU`3w@I;Rx!1+gH&h4BhO$;hA6WpLjo@hW|QJ41N3^V1B?N( z@PS%Ga2yzok}S)xGN5pgJeCeT$dcG>pIEkvXef|eF-27d zF-49o8pmEtfxK^o%&@SSAh66Jn_8W`nN7Co=os~rW6}TaaZ*ccPF58~s5{;9>-_ln zvBy8IrSnS2_a1e7yfOa;$^UCwWYX}xj}cs^Nb+$jfEMgwzs*SOAVF!k_nNKLITA_{ z>wBACDSitmH4ne8w9^|ztCf>)$(~g_qdCNw&NgAVHI1T7LT10{dCBQ-ZG4Sr?Cxp? zS$?%Kx-iBB%`4rJT9869>P$5@SZDNW5-LP|U?Id@VO^XLf)Hw!ny)zuQy%8xtvNQD0 zU=+=@LH@dY@e&SDsZ1gzCC#n|nTb!7lU>~I4_H$roM)p$ehjiL+&6cv@;V5D^|}uV ze}46F*zLOVr(Ji?>y_VrceWVt>h`-oPcY*{NW(dgsofr2BHsVE{)A_bt&(pWa#B~< z8et5`Xb!Kim!Ksd!-_S+u7I8c%cVBbf>SI0nN1Z&7xhDKmk*^aD&$xW*uACosaz;W$YT#>;Db_FlcD9pn2a>mA&^Jf~8LKkLz3)LKzjZ)dger^V zZwK6gfS!Ate8)M6{7%dCpv_QUw9J<0HO+41-Y3Vmt>pfHm#|m++#t&sn2!hPYwEf8 zzzAHN3WXK)Z@rQJ{#(b7tBb{2KkR^yps(Qt5G&{5!?7NN$9nl#>svjErgzF1KL_LV z*%(6ZuT(u@WpYgkX#(I}M$?Up_+X*M=L-7SxIC1=F8;EfCEx}@+k!&k|6k{4_}@k* zsl!)-BBfrKa5hG z5D*UpSyAzITVS}z>6dLAJ0@T{sMixRjN^?WuL#ch}4Kb`_QPRo|fbxeIo@|IlH z0ZaBoywvjcHjIpBbaPB03n5r$I26!3G9~tjCjbrkT|SmDo0(t-N^MrIo z?5{wCZFMpJl+%^+V?vgqa~roE!6lIOumi}T0Vpg`B{Hk1&o8WJmn#*uh$FUe@XAsx z{oc5>6T`_uc6Bg{1ZmF0jtuvWTssTYC5YQc1KNY$i7Jjp8FfufGFfE@x719=6ikTL zvOM-{VvVaMsx=Kws>Q1|!PX6Hs%F|zQ3X8$->2?CF&|K$LvE2>Qg*Mw}vDA_^06HZ?$7m0&#%6A|& zyy~=;**f%In{ut-7m3+?1x76NvUXJOmI8#iK@?WeH8P_=bcVhF(pAsM#%QodI&ktf zPB0pLATXo~=lMNg!;K$=E*pgIaCSa>ErT4U{GN6w7k%H&p`>*d($DZ5T38~vbAN}1 zgrpRh#4bf8lwL~Gb`GqiJVv&*Qz%U8x3Qfjb=f!ByANVq<2Od7lqnFWZk7b~Vy>^_J8Hud`;M6R&B}%o zX<*BaW@61hZ@aE2?R7f81_B0Q{lBpP@&C%u{k()^6CBoZ3-}q?I1=NF6`jkrw{YLD=BvAp+JN+d@cf;@V*{W)h-R?q^H|>*fCF~%oz_bHOo0|}HYVF_YCAfwbx0OnSD>}rftOheiY?5P_ox#Wg?W>dyst`g(ny*JF z?0jS4LtE#`yoEQBOmde|gZsul)F9cdbuh9)WK27Jrw6bsj*OhE;SDE;mdzqy4WljfuN~NB)**KB?^s)o6a z&k?2}JsV|0AR0}8ZZu=a%*K%-jf2?aCdI^2L{*q8v9RWr7D6z7LGaf-y3B?W3DGz! zK`hHkowf+m-HL~xw&%0`e5&UD0fa~JQy>wNE3RKd4#psfH43#^97>$J$vq!lr43X5 zhNC~d%GW2;mx{5@^{bRha{?0)G6`x?14{I|#Lzxx*vNg7BCC>J+QQ~!qTmOK(ZI6+ z*w%Bq$dTl-NW7!}Tl9jBJfC}{YGD*Lm2B1ZZPG%Fwg`J)*uyz}+U=lrVD=q-DopEr zlBM(hxIrwr_)!`vh(PRsLb^3=8ZR^k`VF@C(eqv9fA1sh%sdu379fa)sg_Ev+bmJZ zrndSU>9*Xsn8Y%9M9~}=i-{RiYbZaO&NM}IG^KmB2NdZHUo}N+TDSj`Y8(~nPqEl{ zr}z5Cc>kn{N2CY2LM1>cOP0>K|7OnM_ko3At|JOCq)Qw>#3vxIaJ6HWk49FQAE^JR zA;WY(fwET;@WKrP7kTcx08{^Sek}+hW-l*Oo$!V6QL>5h>+jBTP}itYEumEspozh# z9;q;hS3r?dm#V^(cLZs4!(*TBya~IwxR~Lq!@$T8kn{TOMt9z!entF{l&GMA9&^Y` z@7n#TY=F>>TAE0dDo5JSb?r=`Cbf{w$yH2kgXs2n@vV0tUbuf_f~f#(=eGkdQ8bgjA@~O|aD`exjQH~-m@zWH#OM}WXa;K7zb3P_!BB>SP2CYH?^6_|O z(dyAlX_CY4jvi&>0^Q{+-*wm->!+uln-^B+O+-g1BX4IB)Qtd<%1MBjIUtfdyMwf5 zH}1+WBvmQ`vh(P08j>gj75|qYO{XYLvxBjpS3=Zv-5=ZQaOv4O3J&mXYAiIcSc%5B zUMe4ykGU@wyGx|2mOhA0{hsix=M7W%_VWoNRGKi<1B&XDeh zZH*C(eN;u{DYmw?jmA2-{9nm5oOCN`dz}j$hR6}07YE*Y9(bK-Btgs=enGG z+i2^*xp9!IyED1vb2i)SCE8$Y+~84cYUOV%atOB4YHKd%u*a{(RZW!`d88Wr;WUVV zy7G>ZDm!1cG4qaG8Qp=!=y&i@2I8nCG zxlyScGPIv9Z=W0>YdBi2PWK~)8iq0Cedn08JO;JmBeBTBrDpr|-9E3KFFZ;YbyAQ*f-LHrL z`oc-dRBDr{vm%iRM;=6VnJF$Xbjl^1klw`>Fix1r5Wb_RTS1c>Z1r(L*EHSO%SL@4 z1tdX+ssH|wG|b*?ZE}1!$RTwexVVV5eaCm2l54lwnX2pXChYO`EPC1f3Zo=w54rt5 z+|%Iy&+J`~v;-#6X3v{{kFMA(T^spKtBmRd3hSNX#X0eTutl|Yl0(QP!JV_TxifGS zgE4OWb`FC!-<3mI=uj+b2%+4tF7`B&M&xytn2DuKLPZAeFCL!G^u`(2A7f5lzre0H zKX*GJeDS~h?d@ZE6$8G<`n-3`0e8oCIJ7ET?U795Akmvk8@!fh-ZHkvH&C`m$~M-1 zy`)04auJF{aM|3;DN~On+*+)wUXBw^)E2?dFQGKBZxuH`l$n{t%Z|0y=b{pvE(I!s z22`ZdhuX^s!sj*3h>7En*`r!}Jw9yA^q?1fWaAoP7TCEcHe4VW_YeWuL0Sx`G=#Cl$j|D-mbJ~AbJl@A7^iRb=d z0Z)%SHb;pB5zO}e902(i_a2@;09xUT*K^;cUP+6k-r;5qpg+!W!g2IE|JHi9s7d5A|4nhxP}a z8t>tG@aHp;FQI9g-F3rvBG7Axr1Q-k;gbxMH1n@fn5ntD9zazQ7UsEKh_%(`ZH+UX zq%l}I`ZB(n9yn+{^Fe)9bNi#jtly>ZRFySrW7}xv1?=eKfm#2TFy4)ck(Q8vmi8SZ z4Zwt!ghmFHRHp}r7QPtBZe$7^{_jt;opus8f%Rja!Jm#lN{bcVUsjSk>Df-cOw;&wADsjpV36KB2 z70#l??fEIGyno{})vJNu2>Up%qiYrqOh!&l`7&RuK)G-^6>TrXR$zY*bZ84kL<;SSO)??ZB z@z(m)!2s#Au9U@+(_@>d;Qf9$e9AQJ*SmO*>sf_S=Em#A)$KqR$gJv-&_S{?UUnLL zA46xbjy3Kax)%XpaodDzZ122Un1}HR;o7Dg*YQvl!zu*-e3&p=0NfJN} zQY-|zcPOTruZWR__SP}YWJ%C7v1foWMwy}?ebF?-B*~P!#`9D_gMS5aVZ=>3WvbQ2)}jVj zaN}Z!__<1ixz>MD8UETtQY}5lO=_3t+q>=~&0Ek-px|?ujj(1E@_jQKNgx*wLwY$p z&ahpgt%ItwIHfsQ8;3?4ytR*35SexCE2bk@e>d2+dX>v`ASB7ufj7AM%0L;FK8?UB6nS=&hr>sO{6YW}sOLjz05Nt@ zt;_u|u;v(oD%g=B2a;BrW%1nD72(5x=E?ySww3yqormt1ZFgiHO2WB50rz0EcB``d zc%>4d2DRcA_jOFs-u4KP(W|gm_h_{Eg!XI76rVznTp1kjW#_YniZ}MoTC6)P&9b(j+Cm$1tAN&Tb)y|dZ z(a)>t3tZrAhOdGB6KRU~E{-A2xc`}5t=p1J1wU7xng6X{+Y%XpJ62Jt!FT}4DF<^{ z2xGD2-*Wv1gQ~y^owqTdnrxAM?jdn5RI6a2x6h7%rhX|S(5gk-u0^&83+RDIY`>$$ zv-U*q8l({=VQcdsK-gku{1pV-c2P#i|Fr?Uc~K4sI_|mm;%go<{5XYu4r%F5wlB{c zJ1Y!Hps`!+PDKk}4NWL*gN(<2ITn23FnDOtyxp)A%pJJ9(|efKbXqM<=iq0LfMP>p z3mvtlbv&-_`I2(zy!ck-`Yq;_@;6=w4{VI6dl34{o zgumDhA4!;M1XW)Xv1?wkjbz!pD0;n~su^_V6gq!Kn#2)?=DL|zgt<6YCXuhFh(7nP zY@NBi)oE`6T%p~H9KWN?4fkVIuK`2ailhAFcQ5Yzj#ykCK~YaMl-I^q^bZ-=C+FyD{KFGMLS88vu9PB&9VBhT$rt6b!4*Q1omz=`>@ zIp-IHhyNRn@K7<*M&l2d?tt-& z4Y#LQR~;do>YolhPYz8y74b3k7lW9ynKb{JP9IE6uy^@caDFNvQ1ssW<@ks3fG%u0 zs7O%^NzYOYQM9^tE;=*~RER330Wbhb#5(nMAsxtUacjC)rGc={ma*1~0<1f=QS4an zuhPJ0Tpm@HS?LLgldthaARGq%vKxACck4XYzuJG)b=XPsfq5A@t&i-{=#aJd1x%eW zSZ8tY@W|%jHYJ(oB$b#!Rb}Vx#i%KndD{rlUabx#4#fYm+8(gOvnSiYFmI8-dW>8n z9+s!%Ym*dUCfwzU9Rn6VKFzO zucgL*w~nd0fRn;%{#DUQEMpg#rgs*iTY$D(;p>~FWW(J(6W9wW@%7w zIsngkbt|Inf6QCcmZfw|o8vmi!ZcfSkbW(M%rL}86?8wNI)mzirvhMvI$LqRR;LG` z@x?_efn28kwbF@YP@?#{@ISKtc^lXQzP_#mxBf$?knH@!_~TxRg#VeW*_F*g5uiQuTe;EnoJ9{AN`yCy-+?7e9|Ogp?<@5jg*uq*#^`BbwDeA*b5vB!|aBo<9NltJ`&ebSH7_hzSc zSQp0w<^(*><7aD6TbTkDj}RmaE0(1a;v~+4sbp{bBCQeZ){E$vbZiw}^HeG{K*Z|j zLk8=lhBaHJL^JpPbxgBkp}T1F?Ey*COlklJR0WIB;0~E`?NHTljik!{G>Nh60Bf^VFIYX z1p9f?4jE3snP?RS;&%RfA+jOat#*7T20QzU@U-a#t48Zkw0SXW{m94W zA)@`35vYy$eE#$f&+0S82p7EbEbNi{3xd_}CYlX7B-n(_{Dw1ybF`+S8cH;^^slt_ zg7gdlR7kK{m~jw{N$4qppmE}#oPI8uza$c~-*{$cbbPD3^<<7^SokxFb_x1yxJl;2@MfxFqo|1nDeSgk-`Xm<< zxZekbmY)qF>o98B4e-m4d;otGS&_&I`B=ZH^k*EKo@OkWMB8y6YzBOa8hmaXQ!+uW zbHQ~)->3P+)Z`DspJ9Q9=A>TwpWMaX>Vb+BMBti7D z>ag-M3i=6&`__>5T0g#HQ3JXFbgE=Xt|WzsrU{dJbPCl@8yG7*&CF<0q8ayvevD`ArEVv^3vKxN$_P#f1jxNA)ORqy)!@h4@ zpWptqJu5UndfXgN2PBRgUNbc;8CAtA+YjRe|0diegxNeiDwzM7FXDAfT3;wUoZjt& zEd7K!s6C!obvN$%ivB@$1oYSzt?U|0X6ebfn{EpP8tw(p9!_=m$H-vGhaat2A`%oQ z(-H5#(&T!Qxn{|5(J%HEt;35#Y4r~`f3E;Ic>HoCu3dr~NH`mTJM_-265-=D?uozm zi=aqZieMV#f)vy)#(mN{_o!z|=2MM{=jB_|qpTxtqP`vzHqM!0sf=Cih`a4E5o3)B?&n22kjH!L6d-nsqhlOI%<8)ore$vY zPHNmvo1tm*+Q((~UD3Q$kSpR>?e4GXJHs+BuNk5pIlmDJOd z3khldyB1G32y3aB^H48SUmC82=?v9o{DVRBcihj&29oZd6r})K@Ku=1M4pa871HX) z{3Ez5nlkXrrIU@<3OhZl-%KEAsuK~YvEjFz?f+!|)oDMT2P=GkgL>Ty>4T4tuAn%% z^MdWHi-Zt;iZwev>VvP7g(V;j7bJYNqv{l#Te6}$cP^t21pa!(gHz>>kgg*RsS0HK zr&hUKXA-@*_!B{oi5#C;B#2WvdE+ISuHjTxv6|~l zm~t`j%J10Q0##cTibjN;1u$>3^JMAcSiKN_6I~d(_v>nA!aC_mzo>SG-NF?1?T^!@UnSb1#{l0$$l2{9&uE(5a228z+}M#6S7K)v zO#S`wtNU2xYg+f{1uy?`w!NNfx{SxRK%%kKVzAWi*{>?(1?`KKVvtE!R`GTKa#>&JNW`ayv!fFSzr?8VHhl-nUvdivgi%1qW##6Z^Wv>R=Rfd*f0JUSNVC;{ z+Q$@^zk^->yi4m0pl}NCt z^9|BWy^=QS>J>tmrs()lR9LCT)QH%hpKH5bkoBBCsZRuHX@P?W+&z!Folo)GlXI%c zVJ&gO%$*J4)}kx1XmKI*P#nKi{}Oo4nZC((Wa_jeN{c6BC1}O zP>CAjuv4yE=?dRaS4EM?%;{+hB@-f8~k zaKJxJf<@~+{%xy&-0;T4J+F=sEhFr^4iBcOFeN1=lxSpWs^nVr&wgnV6Pps?h)ize z@M};;=41T@^qxQJJeQSqGFQ~;Z$RWJJ4=Q?#JQ4Q_-{fzmk&3lDVDmS`9bEs-MF1^ z-g%8l7^de82mbxtA1$060eOoxW&HW|#|z1c=fr}BCYdnBvFHM}`W(5&Su}qelzVV@ z+aHysm22p$fEKAZp)@F(o`>UKQR`Q&IDx05n+rB%fY^K0J+47_C}<(1ic?&_66}O> z{y8)%Nd=-7t7hEaX|$(L9V>HT8{~Rt4aOhdX9l5)*-8fwJulgUpL6oR1k<-Y9|&9D zrhJ~q(t8F)3fG9r@~pxAWJ z7chWIRoG#nx3>UJ6a4ukzbjpywddZG)WwEv+YpU-jIeK92%QR}(Vl*otO=kA~B>wkUcVAnCjev`l_a@@5}q4+C=_IoM1dM^wM(;|V5XuP;mg>f z;l8d&XC80YrRGcT_9rCR2gUxuh2^j9feL+;=2DWOo3!=0KI;J+UG?KEI#&{)>!@Pw#v3J++ zMhbC?4#z1jtVc_v8{;Crk2(e~Mdi1^fP0p$H{cb?MskTPWccC{K{KuqbyiW2!ncVP zmCZ@>X>S2a^S;4*i?~M}!A>q|mq4VxowQhBx$8$<~IEqiYR691<`NL^Myhi5i*%Ng(q%TCAF)S$2- zBnL`T>zb5AaoHrEKrFMWG5lmF!lVqLJDa~?-sc04BP`hGQE}MIR+7z-RL(vkv)SG5 z-UdU2)W^aaDoBt6hb(NS8*x*@7;+U50?8m)eP{1tbH91`or5mX@^MsRZIjPl!D@Gz z45nQl60ubBMOWQQ&qI!%+ClvVIt0dd2Xv`!;1-E$4}PG?auLxWyLkN=HisL#J>icK zm^3O23$Y?}t9I*PQ&}2Isnt!9*tg3b!oa7lC%^acW8neE&m}_7x#T>#zyEg9{-`sU zmmJoa&npcB%l;GDW+5hT;mU1Ql#JV1VcB1lJ^KrTXd5lzBw=#2A_|{tV}U9(CQ}`> zukJP5XgD#fIPZICYG_$XtXk7iRl_uA!y=~q>oIg5q?*VtLqh-t>X+vL?Lc!lc~s}w z7iHu1N5vF5NL~~35``qHrZwAz9E6`hauxVEA~=9`+HMAq$hZ*i_UKj5QS8KHdJutb zGZ&pEEcR?D`G~7h8obHk01l7n4{`cXd@BL%2>s_0udq#?3?@f1RxJM?#?%P)LZU|x zD_)Q8EIz}@nTCR6U5rmE`NW447x4qE>HJT7cYNpY$G2Nl$I4rG{#$qDR|P#>(^?f% z!?$=fSII}vX%RElgUzwJp3gJjmjS;>k8?fHe+E$c4;h>IW`&mWgH3fj_wRrBoFqba z-c0rY{~C6k9oK~3)Wbv?t5&8~#45PBp3-&m+{k^hi#C6kQ>;NmP^Li6ri+wuQ({qQ z!dj7|R0yF{f`gEimGS-)PHB(8rLB`tN}pzL3McxfuUP@ae8Yx(Dm;d!0&VXEpUH$e zd^5AQ&TQJIm4POGxh`LI+2U7F*Ll4~-WQSl$I~J5-WLzTrFu9o zGHZ(O)|;MlCCZJ?LBPiQvr;Hx*9iSGtWAb4gWXTw=ZjMw)tDd^>U~%?9N*9z`783w zW7zfTO%qEr@OZ*}e_Aah*0^joJ*3?CM+5A6$_@13MAe<<$6mZL#v(2$y|D$?p=M%j zj(FYSOX9N*nyQG2$E*NIJbVwN7K);Pb~YOwm?z-%n2D4!GSY$2)jEM2Q7y472Io4c zkTjE#;{e`KCC*vpCYXV6(#C&s#B3#Moa}<=iN|UbdzPg^d+`gUsw^&t^LYcf-PiD+ zx5fE8^wXX!>4IK6!e67}B75JqUs*s+(+VoOED$G(iy+5ut)g?Ul(l^O>L%8Ehl}9LMYtg=unPI3vUoEG zf4?mmpE{7N^+xY`O=1L39<5Gh`ln0gfmMlL@|VL}q_0MUoCm*BAV&G;3W&sosaEXz zO&?`qTUmpPy(!*u-LoI)WG~ngW4^wUH^`_do18*1IpP+TV$OsmFE9N|j%QtY!@*2D z%pBQyGP;oCzjKl=&Hrr(8X$lv(%HJkGkpT@EWp`dW+6dM0Ad+6j>LlMhz4zGOL{SF zi7sj;{b6wh6e)0O>ln01w=k*Nsd;L6|u6G1`K89N$9YwZ!a67N%wjOGp>K_JkQ{;}iDv24RL7f#8tJ{~SpDwE0E$bv@d%C&}tfVwwBt zX~+KzLbwwJs~&p#|s2bxR$}0h8}0) z!KeqL`)>C+5tX?9`1tvcuUwi`A-eQ$0>}v|EHHF?%aA=>z8YX8V&LG?H)>g=q2akx zri(TNM;rSOZ~CPP5$EFELPS?!YO7v7jOpm?%&T( zm#k;eMv1+jVbz$<>k%KgDcP@wx-g~V?SLG(QkZM>2<>1MIl+ zNdSu61OxRJ^I!LXUKhFngvM$07kzwqxfush<-*x_dCv-YE{BdzAIPLfAEd8jS6?&I zuutG5=LIksIe(HWQ!0j`R9eL(E$l>0aixz?8k+|VJ5Xkt;V&U#k`FvM=F`37UfCyT{$CN%LNSP$8LX)V4zI-N1 zdt6SO9~sZx;pYM~OOUvBbCeX4rrY3cg{;Lv2DVt6=hXa@oVSP-zd)!hBqBOB5P zgi$$K0ss}vLXNYar0cAhG?gU+u=C%sp#4k3l(1#f5>G^30mtbHX_9#G>S<~PS}jgF z#I(76A0jX0=?0%>psXyvdv~7eka<%(qu>+$^xioy$k%tqFx`F&{oeQOGa`DbCj#~B zVjJCUK=g*09^MQxB)A5DRt-U7Ry2$k5x%O9HwJQJp!42ebXOUyMb z;h4sFrAP-EtvND$;B1WmG%0c0lo}Jw99qI~fkiD2m2K0J{DW12l^6%oX2s zyIs{`cc95M(UTug~Xqjv><{ zk(X_zby62yh-JT6ZX#b+KCGpx*ua!MQz880BvC66^Wa{gUTezM(5KWse+_Kw=F4z_q zVRfkQ$U^caR51_T7oq&UwLn^zpoO+Bqi-tuC3lYrT@+8wm4;t%8$1&j<%nr%Z-QO# zVn^rgj=KJZgeEl-5KY-igkFDH(;5_D^>FfnH&%y8Q8fVZG zE{73EqTS2X`yjNW>}X=*jF>t{*RuIh3#U706*GJ3egjYxIRg>YcnoffRHTB>y`Brb zPy{>EZ$_QcmX1abVfb7FONY#x?N=w_lAnIm`uy`dA@TPdU*_9Sad}xabSwTHZoV2K zW+)Q!i|JA5nGG70{Mmk~=5@Z9u1RJR#L9DfGyTq7>-!@Aa)atv zq*wE6z-_tC?Tuwh@Jba_dVyNp!SVjj;;tR&Z;uz^=26VqOY_%K^`QluLJCc3a}F&P z@hR3R)WHyKe#9;=sGMKdAOC!w$<|vOVG1l>XKzEy>yCoUWm6119^ zO2FgNbBXbtbbikupjLdnDM&Er5>}!P29bLyq5Bc)B1SmCi@?MaBq4E4QCjCj>4P-* zb;7V1#2A9c#E_swe~7{G7}rX7+03J+Yn@uA*n(fZ%xqr+7+LlwgnVS&rdC$y3_Fi> zJ5PpcDXmGMcDz_$m>+XG@#%+pOY@F1hQF)Vw$m7P9Qk#=E;0*)h%(L_q9}0S=BOpK zb&Sc+4w3D=V(8WlRKN;_psjKt`SAKpy zVOb(6u6;@@9n;mHCGPUbMZCBm-pd-+Tol$MU_OOSP+c+yy5etSjAGq z@zv4j?$Os1zx|Z z+k!Wue&JQ_sonkIJ0wtPQQUpSvyi~h#*;?Vb~*?M!$3($^EBgP?V&|n2EZwzBJC2`}6{MOh8HiE-Kel-39~WW-zsoFkOm zlYw~E8W6cVWDb4v_xOSqaWQLz4}856J|85rf3sE=S^^F|6~>GVBE&RxB6NjnpyXWq zX-2SrPe_wJ6RMJ+6Yc!GF1rNa0(!%1KNjqLY(8&X-rxmd>j`*e>TDC1q-pLwR((EsKF)222%s}1NNU)ogcIz(tG=4o zTOYSs85(ifm_@0E)Nd#mrSu^^d~4Ypk0W09Jm?jD-14K%{h6*dC6qmx&C{@?v%5sP z)$fx3;HaC*Uingv>+=IJ2MX*AGySskg5X}bTL|v%?iL(^yIUaWt#iJ= zwR`pxj}(pCZLT%@=!1K0dzQd)Z!eJid*445$U4GM#5#q>rV9Pn=9cHofc;9g@e2Nf zE#8H>VqB$_V*t9EO}(REj4X1eZS2p@-Nd)YhKqFGmyQ}Ac#D#@gW#@n5x1b1t9LA^ zviKve@1a^8cpDEeWTE2W?uL_$k(@KIwLUM`)i`*?R3B0HQ{ zwL;>daVFA4e=oHXr~SHk1&ld?25~xCz!E2(TqY$#rii7IdS0%n_YS65mHeNJ!T~&R z{N(L0Pgiif|Gq?atqlX`p4p^+03XAqmr#xGl+&EP&LJa#{-|xuNaNmh;*5Xtme-sH zbo!bPf6K-z8Mg|T*O~9TIps8%&c%}ED_h@*#3Ghg35WO#oES1{avMlWGjlffSNp4i{#hXQ|-Na79O*x!C1(0>3`SpPornt3Ug zeXke^n-H?fm99yqiTS*y%-ASi!Og#T-$nd`)Lg7(xopvas>FTr#Heue6AI^u3%uoL zpei9hEL^xnFpPuwinu8$6MspnbTVa_QniwsBMr2LEdaY%ufLHDZGv`!+AT48gb}oq z&M#s8qaBMVa|0&TRuQ>>R#92e<2P&Y9Vg4{fS&f3DQ8AHBlLqNJ;{39TAJm zUT7Z$7F*6e`_+1ofq(~)gFoB>_45J8qsVuW=xBxemxPlP+DJ8Bvn-UBeG~cMQIuhx zuWi-1-oB*-vsOU2G9}z z($6xR{<;trN44EcdiFtdXim>wi#k98gVWNP7kiVKYouh=`jyp36~>qlF4$atO0g z#uYbC2Lc@48U)7X_!(GGw3c)s7dFZoZn=p^@KT1Po{V^)U~WbHew{EEZEa>X&r|IZ zaxh+g6`I1zO5DuGdq>-|@0R7r^9a>v_?_F&zXj!Q#m`;BF;Ui25+vkNE8)EDBYiV1 zRzy)&f>4-Igj9z$GtG3OfO5wbeLZ!8@oLLbj8cxl)&i4?RaQq8Mq`goovEQOe{VBX z{BjR(VJKdX88UMJ{J2URa~*Xb24_sI5N_OruD2fAeQVe&o)X;IWzz0(WQrHL;t04+ zUav(V8NpIicFgDI51;1vyogm=)?8~h!^L9|h_TguXz9bm@>(xLwLSaFQ4i1WlQ49M zJrN=P$9wA~@Dg%#_WU3W+IosLqEW)5cv&e6xa1V?2OZ@|G;B&D6v;A<-DNvggqk2H zaY>hprHIxLKo%fsDaM)jxlCB%NhK)rDa|Qv9aL*z{nx>Uf15mAaTI@UB;LMlTp?5_Q9zK?k}qm=ZwsvA2fh*}0IOI$amo!kapPDHZ&enlG>NkcU$iJI*=f~p^=%~0WX zgpYh`M%xueJ<|tP#out*RO-C(+#0Ymd@v>V{M%NUmu-ABmi2F1$>?A$%h9T8a|blz zL(jA6c4szy_1fL>G;S0Sv-R(;#dZAf!G5JRbXCHah>4a&DmL?*xGu3~T&@jdCG(%C zWw?VXF1m@4>vk}o?Iqz9E$zv=m*KRRKbm4h+kk7BZSE%$?%kUOKxD+AgEWApS}&!w46VR0*8=$wTFTX z7JcyfK{_w4VeYdXG>wRg(OAG91tS*ckVRP7Td(NDq>$b1%CyyEsEV8Uz~De*a88j& zJ};$Qq_#8mO~3!I!8-3o5usYdrF@1TMO+9VFK3 z7In}H7p!DiwvT&Xi0R+h%cSVx$cx3sBRij>{>9k#4NV-yM@_N^XWr2rAsUL-SXcIh zx)^l=)$huvX8=;vGrfO5+51+7d-opzw1my|{usvk+8)&iJVrhA`f8#GJ%3Y6J2^#W z>gW(0d&a}T$2at(*=xRR?%@G$I~1gwvGTjaRX{vaL$0i1zPoIB=Y#Ux@)i&X_>SmX z(-kK%CCr5}yTYM71B*o@|axPOn^KCyf}GlG2p|oy;-9bSUMc>G!~SixGY< z48YKjY=pC5EA(!R6gqYOi<4_>K86iXe+Zl~{?E(ped2!yJAM=d@zPm~dGWV(fsc_b zD`QjqNrm-lIy<{`tze7w!8eHZlz|i1M8MQX40(#9&)JHaT*3d!e zSg{};Ia@>__sF{B_|ccQ6ly^-iymYWI%c+(XQoOCm?V~W1Gj;Qb1CXy(GK;fh&21EW0)?&YMy5I6^XWsSq7v~99InRo5yYBzV3vgqK*<@h;B~^ zbtt`mRuJ5?QQ5h0@+W|d;~Up%>osWkGhWlVPjudOLHSl2O`!d|;!{6xh%J6W=QJ6g zv0vNVpsKHucYJDjYxF?HAD`lR;?eo!AzYW714U-~wX=F4yrD}$B zIUyrmsfk8%Xk89KRZemYvD$qaKnyLWz8D)WSH8h>NfC0zD_YwVi#FHc*M(_ z7+~$`dk@CHF^8|A9RpHDVwHa4JLZxgV%I%F^4-pW|77iEXpDk`0=v%P?0}dPqK@32 zSNImf#iYuJWTKW}_GBDMT9k$Juukb`ud=JnJw7?>9m3k%Oqzo3eG&}`kcr$q9+&)} z*!U|kEpX%vb<8W~!`iF{Yvr=I`veS+Kud*KYA zDbjyON;)xwrXE%x=N<(C%8gO7JR0N(!;8JAAtkXK!ha~oIDX9+2{vR%G&JB!0!*;z zh<<&NB-X@XCaDs--17Yq`1GQpVVta+6z_i@dhUNsb$EFA-8|M&pm5QaiY)o>>t}hH z5&HAYuzAD*QBzLOR!FlmJ3s&M@iAaw;cNdphgob8FwxwMXzIY?`R)Ct?)zGX)m;oh zXG)Es@8->;76!BPQmV>f+l&w2=dEhYr0 zPCQ}+O$R!%dFMjHH-%Qo1h6BzT7)8Is?RnXqQPRpVy53lHI$U`ct%wVR5lc9$5i>e z`e~UsNUgFfuZko??3S%#l*A4pH=+u$&C0llS&|^mKkCGICxd zqut|N+qquvpg&-B7FVTDRlV)I92iaF_{w@#TDsco4ryU_>}y6ewf-HiBXEnfS*zse z1~?CSK1OP;ye@6|AWCKkNR9uPDytQYfJMZZO}97ph9OH`<^2-3C$IGzi=NnwOHT>K z0UIP^{iWj`I{{%-wBG-WJLHtMAC4kApeN#opnP}yiAMq?cDDXBPjileqP++?^DY#x zUT*VZo7f660zt9kTwSelxKfk6W!H9WKA+fp|8bV5Nb`DKLv6J`pY9#~`%7|l$Yb=; zY{no|#(guGN5pQ%`;6rN=m-TqJmTf`4Pqft*)PUX-tGA2pSJvQ==A;JTg}02Hw|ra z(nHoSbDa+H^mmaZG6&V9yj9Q^8g1-|5P zJ6Pm=VH>q^ys@=GP$UrK0FTa-@(9n`#bL(>x_s5te8Z}WB(c zNkCkQTkc{vediVVpO^YAx_=8I`%x2YrH2qJ*5MxC#k$C0<6W*?v)hDO^$>&b)#^w~ z#|wYx4fj@oA$ebV%H$(~jR&?a6DsanF|B^%^s3Lia-#)s*Y`(buP2>cjnatgYWF`l zLBu6|@n@5)0Cg*KgIJah9_N{^m#1Bxo=-t%y!M;U)DZ-Skqc$s?^8E_X^90* z=2WQ7<u5}eM641V{2$9^v*)h&_x+A6T zhF$)ELmWx4r_b*JX#zFkn1M)_5sg`Ygl3w{!@&8^URkY-%)k9_J(6o^|Hcd+Z;xMz zgN>wglFC{1G6ZTd;QSs*wgzsPg`fK{To%7|hpEFBe5E4-J0zA6xmFncEn!c0Z6goc z^2TQngi?ctRnz~A5q}W;ceC)0%D0!z`SB5W+{69>o^Qz#`k2Ve^L$T!S6FkV`u4uz zTbA?I_>tuQ;kkQe^py8elLa&%4P@j~#fAN*QqB2m(dJfg05JJ+?@1CK$yhnW8-rC& zKZE;a+3btPz7`(U3t=j`F3WaVRGo|D7_iPIwS(tCjqI z0KM>YtpjwrHC!Uc^*BzxgeVoPsuY2Qt+}9A&38(r)8cVh+EGlKG+7j>pSZ~n{8f;& zWm*C;C3B$9}2 z^Fl0-tGPumj9ZR9Yz~Nl)aUh*5l%5o;f|CzUR_Bvr!K1snv!EIdZWlIlPt ztD^&$CE_9Z!kA?P!ogQ&ncQ|c=y4jej#b#dDL)@34)s2q%MCT-Shl{Nq`B;@5||Pq z#FMX#hy2?xY&T`zei(2NEzD)&!$3QOWX@}0$KsPZ30YzdDGMXCaY|E9`8N46*}9}ytZ#|*POX>8({dJ~DzJ_`XK<#7hw zkq20fjTK;14~&DD7#ui>HX5OF)7|mp@ydz&mZO- z0g%VK;egO}h9N9;zxBCwg_FOa)@5?UO|>WTLtcNQZsA$2jYnYXG*~nNK zXJDGkYj9|ov&yxjghd)9W7@gY^d^(HeaanGl|w0w%voOW%oCy|*67H#MB9aQsv zatd44`wp;PW_9JU`JJnHFX|b>i{|2`&%^bEe@4kR8#&5w@}+6%+#w_N-ZnJ6eNy0a zbqSYf8?mHKcRU0!=(-*N^sOC1w z59i>yx%IL=rr}#((AB)Yw3=-veH;ZoGau>S!`Z8-X9Dh?w|tO~47`x{%!+;!;}~0p z`lg#S+!eEEzG2Sjm98^sJbpU=E#b~3*Z4z=(LWK#OE^4HokgWK@PSgt5fUXlBK8I+ zp2Y~xut)7$l_EvF`krq%kAE~>34iQHe=Ka>_+EL9u;tT12El(dmj6Q_+W?|MI!EXD z2RvxK9mzQ-->o);5z-OBHZ`)ygN*aHCmvwuF6?G_og^9#v0Pl<5~z8YWj9%SSSq@V zrAe|}8u{BX!I^kG247}x!~CT5CP&nS{o>=@Ej@AD-a2bo6XKP5iFC+d$cpAxFcuBN z6bqnDk1OWp6U(%lWM=rvUiA(my<*X5TeqTL!nKRdhHC2`0S8GVXfP^jKyjlOUmp z=-QqrOl%y?W*O*}X4)tkO;Yum=~?@hV>f=U+>xgzh}@pv&f!^Za7{P*CXq2asTUU? zT#o$Nojb;9+oHyYPh(--*`RNSror!I!f0Pcq@AD&vH!Zl=*`w6n|DBVkwM`L#-=OA z*~sbZ!q?^N9gKH8&$lPX-?z}ERvtHl6S<@ATW|C|FX23DcMRTtYxE;8?I8L_??>PF zOh@b6MYe!Q!?Kw_d4iMG7gki5%vG$E7C}_@w;RSj3%mV92O#Y#HkM534G7IcGgn7}Y(gWCA=50TaA=&k>I|FTUJ2>udqYS!Kg= z(J5A4yY7Au8WixxmT$_s3Mg3C{f-1x_M+QMLd+8un=6Fz>)l!7KL-jx-eF&dF+-B# zeheg(EL!x}D*d^sQ%cYgRjqKn>Yry{zBZdHRig04T+vORq!;Nr?YQ7J=?pL6ToVU! zb0f&t)we6otCWAMK$1zaWDGYDLyb&8*;!d>hMh01Wrjl@*{y~CaZ9?eq^bYoYjBhX z!rTf12p(jR(D-t!sDTt*Z|?$oE{`eC1V~Lai%o{ zioeJvugd7b6=e!pIUIDazO-HT2INyNWWqMQtO6UbM%*cAP=rt9X7;9Dg)yp|)9u(e zPN%;AY*Hj#PcO}H-!u1U;olCoA*LuigWa45PlO}jEmJKO=x~r)1Woa=86jGhNlp?eY zGpOPa;F(#j?#{HUe&bFv@M8?Ob3I(Oay`0eY4E&MyY#&duuQ{nIRT|P-wdVA>FZfI zR80&-T+*FQaYDX?qkZjqLm8k!pi<*kB~C=v#-GG-H)6xU7PN1=E1 zo&VYp5N>iwnv=eWSRentF);0a0TbxZh>=3TEdO3utnaK2_o&4iyr3p=cqFDrgL-*= zeZ6c7g%lu7-EmvfFR8MZyAR0xt4YmAP7)y|R%u>QVrflAM_+IFJFy06I)L7G$I2(+ z2vDMJ^OrpgIh+r0J1~RV2CIlRKpCk~oEi+h<`Ly}!F9`YEEXSrtwZrTe!tq|B`-OJ^R}$_-qb23S%^_d`x)N` znX-_5uY}~SwqQ8-vg$0571CRC;iaWBU-s2v=A!}%YoDn~50VAm`sTkgi~tpxsYV+u zZA_pQU%&SRh{%bU7C1xI?C+#0 zVJ}jT^t&63)9f8+CUM+DoaY)JG97 z-3JJN2CA=Vhb!%*Tj!s{7u$%H?>E%f%Y%u$;zHK}MJ}KtUP(0!MuSW{rQ(#B-z1e& zGke6`Q7}L?Ir){ypT9|vxcqex^hwn$-CRXptOm)mng_){Pq-8LgcF6@9|!mxk6qoY}@twt4<-MCd~-fCVr-2ZwzW3c)Np(>Zl zVRo$+6jjM5c{);v>7Ki|KeZ_1hHHBSF)>Nz<};v7YGoO+^*if#QW_VNW1gVF)_#H} z_9?~{PhudNuTRL8D&^XAR0Lb@%kO!!9;4Bys1;C8aaCKGtkCnTus6UA)QgJQn#-<_ zG-^oN(oAL3swJShIGCg(s2^yv%Cd|;Z!d8aYRQ7*w{_lc0?7T2v6iZ~M4j5E$S^ji z#|U!8tJDSF?^qTfpN_T4GVCXUHeQ~wUznqU^Kk)e4A)Yf#eij_U7?jj|35m-LfM!U zeOy_{gpAtR9gUA5hijsZK$B{-3n(OOw&70GxnUA?^9sJ&@@KF#F(pJ#2Yyk5raG>C zNY4?PJUvDEJo8fvW_*#u(Xs(3;M>_{mi(!|cH+|gOTgoW)Ba}9qoIerK(N7j^X+C$ zV9wS{sORktMkhs%6jbFsTr)216k3VKyj}N@O<7*ws3dHVo>NcO$y65KRS0VQ)n0qn zM{1AHmQj9vw(J9+#SwWa1BurGzn)5Fu~zG#%`iBUk@x}SLMxdz4zpCu!40hg$?JGF zbn?o{^?B%skbfD1^P#$?v;Q9g{E6^?oB$|Mf)V1$M~vl(iA0Q`#JlM4uY}=pj+v-& z28FXpfZL2;&$#0A%UF=pWJgmJPRbmA(c;nFJqrM|0a|$t#j3F>w3*uSQEVOX4k0->bQ~G^k4Q* zV=!>)gaEE_Ty3!+PsI(EC{jh>7`xKcQdP(I4UUMobF+y_E&b&ky{#wWE1yS_fBhl` z15bloi}Il?>mIK6qf{^67Wubf zm7|a*8j=~mafOv;8-eA3M}+G3Q{BH5{IX`hV$PJ*Jz!=Tk7HaGM;7z3W1CsRxW+gr za*&QgQt;)?DILOqbtSYkGV2JYsuGdRXOv+QMTfhQFcS~Q>-eRNPpL-Utb1mAke13# z<|>f2!672g#}D3SXY-s0a{dqt(eiy$6r7wxxAqFJxMd>Gsddj=%_m!T7Gf% zLyR3mVOT2tamtD}GB6IW%eZR@>HAWA#^XpeO))67q$lDt;c18`-_6Z(@|i60zwSd! zG>qKrP!5=Up~r3kHxSpT?PpTP5mlrjkAJyMQaN1Jgv~2iq+2>9;N=&XSh?qF=J`QD z$)+k7W+7V(FI_sOu4F=(t`nDnUrwcF6O3z&PhWkMY#n>FE<3}ZfgEmwRW95%i?pMr z?K8`dI1A%|YYkt{3Wzbgw52Ks!xj@@R^V^eN-&H1?4{@<&gcvLnOS%G$1xMQO2T`w z!71wb!xvT1@91j`FHTI(E844Rtd=XK`QM_DwgdP^Gfv?}V-pW>$q-&4Fa#iNnQ80? z7v#|Z!KMI(NG>=IdfEv4%0#J*>ZT~_f{bHikxPtngm>HiO5+FoYFz1n)~k_`%1ID> zVegI5c(qEA8jU=5<`g_@`?;yIh&zVSzuPq4#=y8<)Ycs)o_x91gF`*9k*g1Aw!prL zYlF0&fUP{|VaBp+jJzk>mJKf!!qnfK$_Vs-`d(#*u>qF#bDAiQsEY)bsmeYXrmLvyV)$4AJ_Fj;9Wfy%Lz zwON=lQ{{suqGd_C2WYV?XO<3j5w1U`uW1(f14@_2#-xI64tNbg)EfIE^)!hH;{4VI z35+0USp{`Mj~ku`Ov6)eg+lOlzAlIYo-!7Ae_7n=>!!T&8u!Kktb}Q zY=)Ka+rN>QmKW!ar)9gIk?EYW1ww;(6NR{GioqtK_RTL#T4113sJwgFFQ8g~NvX89 zPWH&>tlyu%9umYS{X!ezWDm1^xg1d=&dRS^ZautfY2Y_fb>zA!5z8Gh2lXr9%FBf% z&=T8c6h*~wP0h{^enlAoIx7f+nZ|aJN^qS!R3^B!9T@g?5J$>YT_$3blxy+HrNHo3 zLYK_k4u1x1TPNp+STQIJdS@eaBEd)v7MK4brRgTPZ1*Oos_I)?e;oND4M<330%FTm z;@F$KG2$niTX#wW54e>3SiWY6+yj)c<}ca4FH2xtXRrkXTj{@RUbgSCT5{XxFa5j& zZv~(_`JP?5JRM`%uMgDsy2FOa>Nr+oHB(*7dpTw_)yAT6q-d>pf0}?}#FHxqTEud} zuFC@zgIN$jT~V4QCS)YBFcMy}9F0qWk}+4%H%5ql(L^DMmWt2;*i#$CB$N_!Etpl* z5Fv*nRcKmx`1u9n5_UwiRRD+PNC6r6Ib`&lWbwEUkl zb{(f#!^>HA-0BoB)?#`$em=%H*AdO1nI-KpUZIT%~!P9A`sw%^ui)*f{n{o!=ge4kuSgbK;;H9)b~7@O`Jky=lD3i&)1X50RLx>{b6Lt#JMdi z9-UJ%e`jvmzrFHrJ(W3Kmj^z>ne7#IzS6PnMwJ=%;m!CFdv3Wg>F^XQ$Wkd5#{v40 zu-{lDi$cyIPm7nae$;hVc?Oe<7? zViYw4k~CUHtq4!YZyzyL}Dv6f)Zp%OI+C)fkAB|$NLx%?yitw{s!+W8!yBI5j zF?Sxn=(FmsTw24Sa%DAK;wpIcH3&L}%QvMQttqkM2n#z>s@w~7A!Wn@gs~yNAk1TL zOX6k>_fpdot8&XfFs9k1uMEml(G5b91)ww8adm9@NE$i~4GlpTW09_(Gq2~L-?X0Y zV1*f10=F?^Z;*e9ePZ-4zE}GU%kuNIa@OH)U>gb*A0r1|ScHZcf^-^bW_KAwnwG`)mUvQN6t%^?wwIL9uAT1J;up3Yo~KmA;dZyqK#a#Fv3g?1bdY_~%| zUmhn~22h|xMb<^TRC5l;CPIL5Q~vdZemj+PJe*QN{keg!g1XH~5lKQwx(9avP}(wxMS@t!$!33K7HV zRW#8>u-GxxK?emVe=b9nC5%bZ_aCsICE-)*mpah*(IJc&$_3h0}k3c zKlUgN_b&u82+QwEX8hv_M6SNIJ%G;;C{F**ii@e3>^d)vYSI0%h>ygBzgGBL8_z9iIM~~s~8Wf9h{qwoF#fmjvZ{(gY5)@e5Cy(#J zW3I7k+Gwf&4NLvI8Vc<0y!o#>?Y!( zESc*&+=i-SL7%Ycd2Ht^q@pH{GZGx!oP^A;g~7dG>>b`MeD&Ka2ux+_OCDaq?jH*{ z_;{a~!Rn6Nl(wO4Tw{$pG0wtXPuk~~IU*{tg(^mZt%t-9W#RNhe;D` zzF(WP0yb~wsi-%_AdzJlCRyjsm`Z@^T(1;gKAbc%3I-EX0d}O_GE#>sE$dsWN=le< z@V(Gya4fS+EsIM|K@;`2%%MZ7QXV*KF1aKiA79j2|Fn>A9L2w?EYI&x*F{i@O3HgL zbo%R7Bh4ChNa=YFb%7ot7XcU}E-PFOct!|rSzUcD4hyt1sMx9X?Ji-CPN4D=qH4cW zREW0GaKwT@C_^qV{IH)2A530c6NicC5B9xlbrh8Y1GAy9;8Fx5FX<#rBvT}Db7{F0 z^-t7T;5C<2oR@|OT&L*>*fp{&T{uKb$Uck3k}+Ia+S?~Vc5*&dDXk0;Rg~+?(Y4fg zNm}jz#GhgD7_IlcRNnm|y9(j9w50h`}hqQPoLeTgnOlqmK;5!~9=~2jw zRmrp|1P#|rEJv*;E&&B8I4lHdAqAI+Qi5Yn!U};nI*P7*3|sfFs++1?Wb_w6Z#^v? z^CWMbT$p}(|fHGgKjHT6>>y*sL-vLRJytcLhqyj)H zioJkXIeK#y5=<>;+cjQ z!bWLXjARHf#<%~}2YzYD5Jw6zj%lm~q@A^X#o1xR|CTk$R&z5LojZw|_Xb0(!Flf! zwRB76)+(NBtCg09=;$&du||);STRAh85bgGR&2;XC=^UfA@s*6^#L4=|N_d@NSYvO{h-z!(XM7~Y`@c2~_5>4>8B*5ToFr&$0;MqgUQzmBL z(zRf;pD%-&2~R2}k>=`PX`J`!M>t6$t0=JcL0@B!jLjyE6L?_-Gp9i>|Bz5E)@2A!5+zwEp2a%_8G{oOiKPk>y<_$N z?Mo@QP++rG*H^Pkn@t`K1ir;jvecNS)5rQ`1peD)@ZKc(gTNdAFYlm(XREhd;PE;m z@RihVGhu8_j?;T1rw1F5`aebMh zjAWHx{!ef;#PRS7(YJciigBo7(QuTALFR9S3aEuz1ZC$7XDv2O znfiV=L#g_9Q7}=jTZ4b{x^D|9XHcUQAp*5_C=t4=p)em3lpr2m+@A!i7P+;@VO zlcTbK1jpUyg4OPVUe{tjgE|=j^@6*>RYr%W!P%~6xoj(5m|v*LU9Y1HNji`2c zS?EE(Fg2kIgQ9dHj`7=YtzF1q)aWGZijZbX5&@qZURabeWK9>2G$AQJRsb8(`jXqB zT4#E9s06t&Q>$3)3zBae4*!&8|(a8d=-P1g7N3+g-vu^rVj2t`61!=F=$ zbC1|{YalXKAAO@Ff=pU;9X-ALCVXnNh)>C!G0UYZ{Re->H7%GUmH75A-LHm$G1$ zM$=1{QB`wd3g7u*mYYPvE&Qk}mK?>FFA0hzNdb7nCbG_m4iT5A&s#>|441YZ<>r0g z?D-?R6w3?r-G2IVvmJl68}@Kk0Pq^usNv-%=D30>~heMsk8rg?!^z#yfK=Q<{p zB55%Na&|@5Qn+5_JZ>Y>WV=q6pRYBgCZ%%dVrlnNeT`D?khAj+&gywI&^kP-{e)_h z-l+8r;1~ayIKwef`A5dN6r6ZEER;BfeV6%Gw|(qS8v3T*=69 zGra2(UBXIgFmV!|xxsA0OBdD%aFbLsHx@7U9n_&vSNi=G*9TLW6fbjhNtU1%MKja* zkgpV4m#`S{T=f+kPbyl${n>`*7Dg}VD@9qk@zr~Wb@LIVsD)DhPsg>?5`R1lkOSqS zsVnc8fbrj>o9JRqT-UrwZLdcFyTOn!C{1H0g}y#9dXZfkEZw zJTGdEqP^mN(RF$quqhEjTnfZc>1yy$K@^z_8=0cvube3H$1?D-J#+rE0wtz!|nn1Gs^FnTjJygpra zo-pvdJL`Erd%bSIx=rkPVG20=>O|-#&Xn|X#(g<3UM#J7_aC0(1T8_xWFnzy7%9dC zDiRJz-GT#eTTd@BJi;iGmeY(p;9BN9@JYD+Ev&y8EvF|K=*E|B+Cld85I~ zRNI97x&m@sY!d$MUBc5sr=UBt(TCHy2ViWyz+MKL zf*Wc66_I%amcQ$Z?U%eW$99AuNUcccJsz70<^!Y@8uB6{U@SG^Xt9YSJA$mrQ)a>D z7F`OnMrFEHdq^1TE_Ld8jZWLh7}UpXO?>yWU8F`r(uQ)ahrcHN)lqbWX64osG!f5= zIA`ltQbyHA;gTI4)cMSQ@U6~1`sM0{{_6cKzV_-^tg&*Z z0($_{)WXH>gXZTu)H>HHaL(LzPnp|ca{!cPG+pXCU9f&t%>b*(*hGmHCrK5es4iD$DnJOjD;B6FvI zf>nway-Yc0zqcqJ8x7VY*O%3oH61>G^Q=G}l!BhYee-r}ou9#$=#F7=1kj^V^tN09 zvybz0(}pMTR!8r(BALJt$41cEwW^899dIS4XsDtgX=XKQ)+*<%e1)@=43cA5p&!XKX#IK$Ok{U<~4R^$sL|N#UrKB$FhgVulOh(jsi{eNY%} zpJ}hqdE6NkA4K4bwIxW2;&-S}ST-2>=~EmBs`p`rV>lUvRF0CA`0U&E-VbtBR8(XO zdIu#lphMR>OMvcX*5wirCLK1VO1?<(OdeZeYB6Yk5yHnkH#&9Uk_Wtyj8+K0ITC0N zkH6X+V)%n39s@H0+S@~HuO_dD$Mf$8P01T?O*0znT<(Wnj5lk`orFO^^{`S&xxCT& zN-5|8;2_XeR`9ukY9zkp#7!OlP=%edE_ij5B+*@t4e1!ppIpE_!LS}3t(=SQi-=e& ztS!4MAqXVaz&lMW@EYE=8+cekA zAM`uAQ)T%kQksa0L8fS2&~R~30q8U&8E}m7^HMOEJP3=O?_@y(%WeRPj;_K)5}z@O z%WPl}ttvA1htDSi=Nn7GLYHw&ZDg7dX1aR1{*wfqiEY^whuJvS7+V~hMqa-ssF%w( z!5Z%&ve%uf&cvPkcn6}_^9sZ9f-AqAw2uvykK`?8PyZ(~zuQeC)AivicVyIW**dV~ z6&L6jBCifmg3I*Bi0L4uo&~du-zaj;^15!v_whK=Ws$qki@NYEOSKNDKfLb~HT*8m zj7+xrU^R)?XV5<8KaR%}>i+Wt#t&ySnEk&;WcH_kBGTU2i*l~lPA<#Qn|mOz_w#c4 ziVN!mLtK#th>DKDz-8*7O>4vRF>Ow_;6X$PdFjMjdy1^)Sq*Y~%fy?U{4DY(q>z#o zfLR|$HZ*8MzzAnp0m4KWo974z{Cu*Iuabjfp zUW)&qbx!&|2Jai=wE5ACOy5N7~(0mV+MlV4h#FBZ{_I<6Ep{zcAw zzx+!i{MhE(b{!IJqe(BjK$vPP-)&x$ZSL$%)T2+QNb_6){dI;xhO^0=vr5UeGMj%m z5=RCpIgEK)J6gHHdxDQP6!Q0t&HI;;XST3U@UJ4iJAPn<0O0gdZ_9nxE%RDuG}4LhX1W`>E7$ao}J>D2?w9Sp*;CW-LCsMd(l@h*Ll3 zC*Drxy}`$;tk8TTBI0XPH4d4LIo!+nCtQL%pRo1#DiL>2D}T_4C=^C_^GctHUhaiA zPM4=>!5cSN5prQ(*`fk-y&YUr52m=tR)_qD&N-@_F%RMre3a6PcCr0Cx*bhl!V1z0&PoP9v zz+~)YR@ASN)WvP27vf(0Oe$nMfAz>HfPEVy30mnx(ff>lIjKC0@X{U)Me4T?Wr7J! z8T+~2A>nI>cIuqn40y8z$_Z}!c#WS~rt%SfK+7M%q0`%)r^`fgo@AHij*!zo4abg4=}WKG zXhwvw)uy+V{!pvDyN(_=wky9Qff+x1oRX-jBl`kP);Zfo-Y&No+G%Y=L9s4%dgQWn zk?z6!QiO*!X@mhPXRiE9O=plq+1AeQew4I4U!mpA@6m}z#M8KzM4ppzv9Yml9o($b z|M}rR&l}Wm21Y-WUOI(v*Ppjqr?EmVwV0r%{8Af zh;p)X2Uy8ssrOi^XGc7Ua6Xv?2tU6mfuf-C_90V@eK>9NBjJki92wPT`wYZ!hka5@z_Z*cfxhfU-#lK~OH;nFi zD|;K4Pq62UqmA_JW@)JnTSFlJlY42s4N8QFpAN$4u1eY{dGsgwid9rc)#M9Js~qi7 z!nTOmVUV!RdB&@=N>QQdw}Ayes_-h1XA~?)pT?6W;|5Me{N3P`eLJ%{J}Pj>deMDp z@ctl5Dz=u)Yw$$j%ugoEKC|ve$LoG(HaG>wRaOGRr>oNdBFvKFmdUNNm4I;REe)ak z^e4-b#MxCdps>CqoJ5S#giAkRbTKLNhUob+*KqTYCE7H~#rZW&8FFGTce31Ng2gFG z!whP`))!?YQ*@zk2wD9tmnmfg>u&hj*`x7%6E?iCe`mLDmM=SNUe;e98rzzNroZy1 zRcttN2;ROF?AixhNiyDdXw||StnM70P~^NJWyK!@DAG04f480c77Hh6S@Xm&^i}>o zdo@Q#r-GaXr-)!y;@JafvG^88+=#*zB#KmHX=!9BQ;m}k;HI)W7;K8I_UIp6opI<!Jk(`oGPo_?Kc4|zm zZ(*F-i=6hAS|^T2mGGo;iSinAftFgNFq}?ZJJCkoSVu}VIUP2~R+!!{hSoxt3cCjr|O|Ga&3PvxBQVh+y?;wlLHQlj;)a9zr zINyIaWxNSME;0I~u4&N!dF!9R`>W5^Fs`5uDH?Jiz;kgH53mDk%>6lu(zR6yIe zoP%Y{&8hfvAMS<^jC2JSWn1t(PsK^bSPb-R{!nZ6)1o@9bFx%(OV7xL;m?Q|miBB& zGjZm~odPg9%*D&)Vh34gTg^^R?*F-hth0bVSb&S`4I>n{{#V~GuVqG=q3rBAf~jk( zHf`xe%|K(sQ1rd9YnaPPs4;Lk9K~0V+-*Si$5);*P7@^gA{0P#{8wWWZsx4zN-COI zKwoJNg!Uyqokz3Ct&;@^;S|LP6lMC#X7cyn$N7)vw5?}Z8+!2s9+MB%s;SXr(0eo| ztTK8Ej0`pztaduZ5JY`qZle8=WxrfF&AyRJpev)dHCRE$4KWYQ2hP!@TPGilJ|5Gy zkTV!{FOsX_i}a-w_+mw%2~NGe(X;rCCtNM**6l*z?(%1U{K?JhW$?rhCWjfgJ=0@M zy&x13E~4aee4a(S)vlCe%?c{wlQaS+f@CVX0VyRXA-%iI{OsM4oPzijtLun>_g7ju zDro&s1Q^#O80b+a;Z!^ccp2>>8BrV~q|c_bwDO#YJLIC+$)y}kYBG457Ro*lwiK8tV^lo$Y=C@j^DXVr1_CC6`9 zA(E!`{C{#itslk^ZCK0{Dfh^-%a0u&Y=wNCBHpv42)JqQJawn&=u2gHSZgGcg)c~0 z(G(SD>5;|EI5<@@4N!22mb9!q$$qnN9CqW<=TIZCYq!Nsu1B0~tnZFUR zld^GWQc3tuc>vKJmb=LWlv!^JU&R!7LJa+QA{}rCN z=ec$alnk0<-DrhdR%E7ljh))aW_* zW{3N!Cy`R4LCDA@APkiqB;oIDDtRHxOO_R&Ae&rAqpfXrG|OL(BfjW);m>*>sJ0&^pB}YkC_VG| zt5fo&6s}ZovWku~YMFo9o zaksn?Gc3(^uzta>dpA1jZW4Sy+MU|+wJ&5%>DHPXZ{ocm>NJ#VkHCPN84 zXmTcne7l+m2`ltu_AL*ZuRrJbdI}|p_ewaJ!pIn$ojG6!EvTjFo&{87>;}#7Q0V|zqpgr^ z05;^I67=fx?VqW^b+o3*DyMXAJdfV&)5zeX<89nm5JzX$ZUXVa#jI}-ssFvL*9Y%M ztZ792wiZ(Z9J^|#*TTIfM0nht;r?UtY>KhdeY#=Oz=Xp2cZU-)@&-q`#(JR-U^li{ z4cgea9W@iaYDTI#m5o|&)ZCP@P5b_`?(>wS z;P5F8ed_(?3t`w7b${;cxLglW-CM-jTGk&79ay8D3x+nEXE&WI30fjU zu-?Qy_gCb_QzO?DNEk*|q~t<}H04E+>YNjU2XaO0prnP;U)gYs@FC)MlS7bZ>O|!j zPS_{yY{s%xq1Z z&vyIWaV_R%Y+OS_B&Q8{u89>9LYWwjyakF_$-^qZPq4l zSg{v0;zGPLV79&I)brFD@OOY%^XAQR%eYclgjwarm+#H?Kd&@`$^Y|yV|X%!U7Vnp zLn`0kxX3HCYbZ3Zpn|WGR_33IuXuA{?B>uOu3s zudGQ}yd5(SI#0KPv=Lj@zTlw}rvd0_rPQW$H}6#6`qu^IXsGt!#8JIa7qJLqvA!tW zy+mo}(b^Z10xC5atnyM0xOMh{W_#RRRZ)xp*Nc)?vO>{RJX($k^y%?Nc`QX91TrZ$ znRrRD0TAAfr$D}@NEI`~sV$fQ3rv8r!zEG`oYD34?0fd@Bm9@az~VO_)O!DY2G7Nu zfC7o;D0Aub3>+!>7@6UUF^+Ek94ZAa_Y-9c%QlM8a+Uh+bpGWPO>G;r$iYyMTYokc zVqYpuzURFvs~o!fz?*NzuU2(mA5{5Z2y~?MDm09N$X8p!EIU~yN=&L4GoFZBVZ8yLSHl6eM$O z3AFFb4d{o|aW+vGz-3#86+bq~30&zwtbh=U<|uNxwR3f(W+U%ipjRfDT!rs>yf)K<4Np0S;Xx42=zPymAYi~Du_yze~Jo8k<=a=eyzna3`?1$jE2pj?q zT-wiH8+xI9}o8h8h`XB$9fU&v4KMfYw@5FanYlR$2Vj1n zA02v@Gb=C8+`^rbp*luvf=ceiipfb&94t4693rzwdGwHFC=fgW#GV~>fuOc1K~iku zAcVQ1)-TQ4WV zJw(3o(G^EE56Z-uc53)*sD|B#)kNIRc(Qn&?c#6|3i&&D!6LQ*Rg+>zqDQ%@NUBLp z3(lD)`*ltY-fAKqbWC%a{i$*(@J35aB7B-k+<_Q!fXIUOWz)}wV2x;vYH=cJ*AD&c zR`_wCtA@s>pO?CZ2hX!Vvm{CU5Uf5qUWaYP*wV@t=qh(v> zksJrsSR%Grqi2~$EkcwpnFr*TF*n7fJ2^tbn%7h;l%z?2|GP)zmOEyWej!SZF9J{9H z7@H{VC!k=O;~8a?D{hGa!*YJ=*)?LWT}1It<02@&1xz+YE+rb5DpBydAPNG-6%6|R z9N4!GN}|2pkI(EN=cL5Vn}VGG)R0*&30pdqz@rfgP+V1k@67cD(KNtp}V zlJ>kmE}ftd#KBKaPO1@dlz(+7=APdhOQHmd53Q}y{fU;Gbi3j!aBhz_f97+4B3p1= zZL$9R&nnNmR-uw|CaV)cj`VU}GK%*U!0X4RB32fUWZII%3ZhhTPCYTwf>!i~6()5K zL1yWREbHe(u24t{{WMsZATH8*aAMi3WBH+G$-6AI0@7} zd=)Jvdljhg0+plKfkj55T5 z;^4rp+h%X-W}Sw0Yfp3>WW9(M%pNlB%vP4DKi-rwzZH;rFa=iZI2YmRc2mgJGTJKn z%#m>qNk**!#?#+GbA)mbiu~vw)-SYaokN0TH=sW0-R@)y`{AkkM;#wa&m? z_}2-1P~<EtlhB*U|2Nv7C33N9+#94S63@->>9-pTBL1uGT8=;phDdHI2aK_I?6s@)>`{)$_%UnVckAdqgPcc@$P4 zwqCsS`2EwG(kmO&oPbe29WfMYv~j!%nw%}v(j-awnm{cFl}As~j9m4eW&j8~7ziFi zUl?$+r}?Vj{0mzX#NL{OHL7sM;r8{*fnq~jTQoX!Eyp&f$l&p6av26N!F~L|@olkdX zSvJ!Qs1eS9Vph)G>KHt`^(@ZZej?qqBQ9vu;=_;Rd_xpVVVTR$%gM?4Ksx!8>pvI& zSq}kYt97d&s#&m?zy#qi=)*D!-V!em|2x;vJxXk;P!?jkYLQv$oP-!JNic0CQh`Nt z{NYbA>x4g3Q43J@Y|;>|O_&fwtsRoX_4c6Hoh#@+8ZpKex9knnPfVadk{k3?p40xY zGPERRe?x-k7kNf*bpjs-o zRSG7LsNJh6B@!!eHl!20%|orH*yQtyN^>fI(evui<90=;7ckiR=N_V!@V3a7VAwxu z9Gr4k6R|Z()<4XfH66v$;3Y2RE8WmGcei1{nx3}H%^zfBj3+IqSW!lpwO9;gv6Hji6leMnPZW#;%P$j0%8c4ghHFdBqJe3P&2}Z)JNh} zkiiIaAbjiv^~%HrB6Z?PXpSi%VdI2+*<)$+WQgB1on(O}g&GO0rJ+ztF`$4NH957s z@wW2gANj23%VIw*Xom6OkpDw_siFcuoLuleI>Yh(Agei{RWO#z#WivNO7~-*7{SJh z2dWDKgBuQb87J*;W6Hmd)qQ?t@k=s%-QU^^dcD{l>W6_{|6$~XY3)=|4QfJJyGjv5Vk3U z8)#Pjj!}2TN-I2BB~x|`pO>yX~tY0xxtiIP?z_L@G#CnH*rB!9Z~az=$Hct z_VgW-)xQy2Qb?4+WJlKUr;}nKZZgyvs}$5oavGhi}9S4wspNJb`dsr^(bW{l9n1uQSq$!2`fbK_8*wtl$u2`!sJ zuh%Qy&ZJFKZPK^nDD3Wn>Vtp}>8*jL8TO%!jpmcoM(?{14k5=VUq4-L9}OTr1RP>0 zoS_}xV=;H_IXkoWB{8R=5Nfr58+-qUyu?SyM4d-Fa${$=G7{cwt0hr7C?>PwabnVXIKEI!S})`Q^I2R_VJWf05yrp0O?`FBR+v zr5)zo9hAx$hC0@|6Zg#%=9}*z;rn>Ck9r2T`xWPGvFlScM= z4P#0jeOcfu&YxyM!kJbwds5_?YkbJ&IeKQmwL)65Ruq#YcA}xsK?L0)^@)8T>J{YDv;lwWQM4Wme8f6dhTZu^ID9tP4jMEyF=0U3_a?KDNCT= z(IG|1i0@?ZQ>Zw~+gX?Fq^h(6>Y}27iN^GCh7XZ3KtK)%Do+}A4xOWv?l||%2s~+3 zhG3>pYhXNgj(P9h^;8j%e8_i;4`s#^;LG7MiN&&;{>1=ZC;;7m%kXt294Av8_D*IE`^~>@_RYVN7W;Gz%0Mrs zu!Ci@-RomUgk>_5NMztD<3%j!HpNiL`Oq=W`w>`p+zo zu|uT-ma^&q;}Gh;tIb|9nUuGfwpfNhEeh&!aX-H{o3 zUm0*Z{F#!og)z@Vx5Suu7?WWq;$`cI{ovL#Owbod;kC<--Q*h!44sE!2|=m2{A_gG zqrSF|x}c8(N&5%)GxWr|({|U);~_&c?Wl?8p;=6-OW#rBcT*Z7qdBMpU_yj5ESeS2 z0Zv4p%S=+6f`X^!O7RNW)V|Z1hU}|Waa{9BqXQaqrHi??bsx88dqy8%IB}w@mVsUd zbBUOPcMXilE8( zF%lL={cby|G(7bdC5j6PZ^u;kqkjtIZI)dz;DkMnDr!s`0#yPrj{JY&E^FNXgu9=C zIuLh+G+uHAomHGR5O1VX>V*Y(B3Hy7WSvT97nip>_NQz|VUC01rYmmOGjf2;L-egB zOa_K0gxSAL=r^54`Iu5kuAZE0`mJs6Gn+&A?)}mvr@uLP`t5qNwTqUvg+$;oYnBx< z<~w7;q;ENqKXNO>)h7L8!_>qX^9OD*Mc6>;99@DSXp)qIDQbdIs#qDdGMo{a6#z53 z8k&e%`(jl)tcsP0YV z4jwsU=<~nrhN>CmsDXRF2?P9Nu05~#-448wBj@u=e-FX<-3E`#X(9pV$j>BC1W>v& zS>m>F%d9eV6AQx+`Ym9|Vb5wId}wO0GoJC_YLHPoy%Mb)owTaBOH(X4Kn*fI;TJ3{ zWN(_Kg(5sqYKKvWGIkp|(K3rG@M7Ha{KvA%c7^#Z`BjnU8FK$EEm)`bG>#3Tk^Vh2 ze6)eG3DBmH8Bji`Wm(nA+TGj1fFe3>{CxqzpFCbvTxfdkF+ARU4tTMATW0CWFH^_b zDkx>PCz8oj2@C{ap;Yn>w^5ffC8iHC5{4%Wf=X(b*joZB=NHS% zo6tkdyLYfz1jSSc#wsaD#Pv$9fKp4*DhUUeCfK%vh zC^ZoZljRbUI_646IaY36OLKD+$rrxsC{3sL%}H(B`uWQ`7YLomI81pshm}#*=}D$Iq@%1kv1Mx+{rl^WAXXz#mR{ARDH(70z9`m8eDX z(Pbdvmq|YN8`v)zykpvEE+a!owv}LU>8MoZ!F_%lmMgJe(4q#1 zwj9>f#G_#2>}0BO+774?GU>>LSViBXN6+WU0F3V`OaBPUtzBrsacVi}mH95cW;ri9 zPU~1mc-`M5(8k->+jceKjDH62^8A!Z$`)ulENl+eVvw^pC4kmMDkcl{OpUVLgWtEo zo}I5W19gPH+c6GQYEkYT^|slw;<@&>&~|dB=|tt!cZB)9qB@=}nRZ>^1_UjBNw{4r z2p~pVAvr+%I70J$iBsH5U(c8IGs#9~=>YZ~U#;>AN|&+0i7T|y{BAO5_}7mVfl6xO z{|q`T@WEgww17AZ84m4MC)U;oyrwA`MEuVx@~15YUA`JVFNn^q{4N$R)05caZ{i!Q zU*&7L6fh}o--|}B^#8IeTkrwyoM{ho@z9g1=A72?i37_k6_poA?h%w48{u$o@xRd$ zR#+a@J&xVxwtl-Dt$%9KVUnRv7&fh-z1$QB0UU`wuQ!b?#5#hgh$Vc_H#=7YuFzRJ z{=x0(+!}t|&2l-L7KO5LVDgNtl#~M-sPkNxR#)!$D6mr~ zufoK%NOarmOx^6$XycRGOPhZiH?2~!fa690G$1@cCa-1kLbhVVMRQx%n0kicz*Kw2 zl_|>ydA{Q>bG2&h1Kf1aThi_{$&2R!G`-tyh?Z)}(T1duyZyJo>xciP;#U7YuA%pX zi#`xxu<)$?ZRFH&RMcZ@v_jz4sVg0Vz%NaWtb}5h^eMc_1O-fBgwpGkH!?P%9=K|5; z2J6c8>e*SdOvMlxgdq_doBm(Z^@Heg`w4)b-ry zB(KP9-ud*(qCemxN!w@xM8Z@bj)q|L$Y~dX9ZDNQqg=rVDc|*r&AdDvgmZ^$ToY8j zdoJB-?_7x%+n7K*Q%80c2ARW_(WE9f_T*Z{3 z=z9e;V?sUmZ3B%Cm~Z(KDdEaN9@F$Mn2Fm)8&B zD&R+nCI5&MnN__>4gOfWa!o|D?d$60kwkL0ro%q6VL;%+gtbH0JH4yQ)m+b|)JQ8cK(N!4Oz?c#sNfnF^vcw^6XMHXwwYzS)T=$8k>79I2K(8nf>pN^uQh zV|t>P=`>33H;Q^rxveQj{$2igjYvEJh)<7n+`($jD*Nl|c_d`(udHE5fo{QrU0u(a zPKh8Ml*ygTw3G3F8ZT#p9shGQw53(Vp`D&AhCwec6$8|_LW&MBF720!$1oAzxB=Nk zaG^$(07QqE$~n;q;r?CFN2zE5jaK)nM*2!utsL#nfrIafU-+KsXwwQ?;UzXY+swDU zQD0FvM#VJ^C99Xkv`UJk#RceREVLzv7*b^loX>x0ehjVjUhV$~u>A0EJ6nrB{DnV+ zq^h6jT5-8V7;EzzC!qtj6@RR4VyfRxsO&sH>P#z=hiLq?7SA(w73GR@FtcouNz zPh|jztg}r0EqRcP*m)D%=XaYQ^5Y*Lv~M4ikB+WA)916DS*>ZD^&it)hes1^EPmTD ztKiNMmjmWK?OFO;h=%y?MgK*3h%sl?edf6|Yx?GfV(Vo@fVqQ@f(3BWN{>}bv*9oR zcc?E{Wqmcsj;cFTuuJ;>UQM+5h~U(b#iVwEQWJ6^^Qd}8kR7c`XbYV=G%=mcJ<`_G!UmX-36*3`v9zgqR=s)E%)uev z!XDZfspAxeZ>8Ld3)VP9XU_C`PV_Cq(Cg@JG5rguz3N^qKLIP2*58 z*zRTrw>KJ6rAqo@;DIs#m1fTO`ph!&K&9Az6ZLjC+eJVwXYe>#zpq;G%=I111VKF6 zTuTF=9F~*p@09r#8G2yhmae32C1(ye+bt40*jVZt9>pX{-aV?|hl`+MtB$d^O|qH{ zQf(tq4iy159_be4%@mV-d}@iYCU)61Qo)Uc6`Hr4qJ|caJ2VR4{=?zTY5g-?{&TRU z%d?w&=wXB9Y?$i`50E)`(QZdG`zPMp4a*0#Y(ieK0Ka7OFB7kQ@S-ZAlCqSJ8Ss1X zHlEg=k!~U)-)yEMAN!0pnVXFpx=-{h7oUww7II8fV>o*6}_~afrTs zX@bLobGFg;)d8ZTH9uD%d3h)SS}64L{w<1lU{(60UEIhN)WA|?`j`^Y~vDsWE+Nzg}f63gg^Vvg*vmDhqRr5H7v+g_L~PN-ui!2G`iJLNQr#e3Y2 zgq_pa7qbtJ-bDdCe!*#+9NOg7Vbmtl?pLPX5f|x1Q-pb=)+1#>IZ{NZ5Zfl@G%I?Yl_au!}aeESJh$53Ia1 zjvGnk(?}D4)A-(iy1<4EnT=AfwAO&omNpyr|9%4>~Z+&ih3wB^90eMxnyd)}& zZi52%&VO6^&&lh854e|}hbK2*HQR3{7>-BjdQMfpt04|X(xN%?MKMrmB~tOL*(GBH zPC5Dt1MjUOl&WN!l!wpc8s)HXAS`qtPAH*!NjT6dEk+D98>qEhjm2r38rS7!NgC4O zI&JZps6{bv$FHWGC6$+6)6@md_1fV2zb3N4ZBkYKPxU==h>?@$nOTq=kd&p zUkPl>;YzT}jafS6Miq|!oBIyx_@^gSd!d2z_)V}8zXU-rt?coGPfbl-^TM&SiSc_u z&8$L&XvN|uz|2Nx1Q?YyOt?g&WI4O9`V|;7KCb%3TCxOHYj)z=R-Q&D1!4Q|3M|jO z7_H7de1%5(@i1cbZArg!!N+TYQ2>eE~gNXMAZ{7WjuM?%<{pxf3V-d^knWf<2 znfMJqw$ohC}hj05WePn zq(!TOU`&;_fOUHDO>DF=1)iG-3?P*UYa1k11$(U6jCpqy7PCaa_^COPVM@2 zFYeoi-}}QP=`QidxxSv?zZAy_=8lT-F!{(4H{yKv+r>ulDAIs?hDe3nA*ch+JlUVw zO7;rmN=LLs2-q-uMC;`surOvxScoGr5o=UDaANtlMATTY*zY5Esaln7F)qa)dCqU_ z6+b^VL!NpP4k5;IH%cEC9(i;c-v^gRHm+`=ZjLC8XyG4&bHP>PCPha!Rd!@mn4rs~hdRl7^`FF0>t!2mu6gpK1H|h$>3d?;O+GC#cfjHwixt8hl1B zSTl=jXpU92ZCX1mX@RsN$V21UR0lRIUAPEp3d1o}b7uOJgAM8^Ajf)!q$R@~(PKoI#<-)nu$__tf8pFny%u;}$;7G^cC1c2pbcq8J zMHr!X%cAhc8T=V~{nh?2t#(;CWC)$GA#O_9G6#v?IP~#-w5nR1+MIoD<*ZGayQA^9 z?JOIkkUCKq1gkd~nS!oQwWp&Ri~N7RxfMKI%h8elTkj~?Iw^GG$y8#>LYSjRjJzp` zPb`92%t#?!WOAWVIXJ%;C?-`Gs7&TgG2J^;X)4Gg%G^JXx@B3zK2f8E(D1a-sZR(& zYJr$(iFq5SkoiThEGvNPCGT_lw)L!#%s2>d0ofZ5ra+-01RW$8;H);(FuX?EvtOGN zaQ@YQcdtJrVS5GE*(6&eZ7w`)!~)%1i?dQ{8`7>NZ=8^BhD8e@!&A94jgBH3lx<`} z4waw_1M4@b!4Rlmt!L1dHGqUgd84ADiB^)Hrr~qSsAg5XL&)PNR>5B-OFMmUW@c}v zBS^PBHX#Q@{=>iI+BhAz;c%TH4;j7LFY@g0Ap(RIKaAJaaTG~QR*=V>he2vJwJq0^ z>aGsOs^jU?&0R-uf&-9Z^xMAAM{d2}0R}`c*z9EUH4DdeA-2`@6LOB?JlHAQ3~T@&NrP-wEa&AOD3 zIg+7_Oq)3R7uXPzwOfRUXt36BI%glD~3VD_e9(2o+s;5I~ed0)4SJw z`7Vn}Bme~@;`R-dUsMGk$JF2^Vk0^X8<&Lg`?!-a_>6%osrs9!#4*T9#q*Jg3@MT$ zw;L3J`-~*`*cL25cX;xB2T>4=G0-A>uLeo~agVX?+mdNP(*)r8FQk0Zk6nU@5mwZwNE0Z5B!0bNzgJ*8Z0Qa%%E46@*}B z#2wtO62~_?7s5O(lSf9d<4MgZ3W3cvP^DWJs>f^KS63%M(jAMX;0P9CXcQ5dHhKGE zU1Tl(#xcsz@i(D_`BPhO=Ua}GOka03ZEEh;fL`$_vcZAa0CNCsZNjTL4^&pX@TEUQ$4_>ZD;RA;2=YjB95j_bvcX+E=Ch{Vy>dSY(JND_ zzS0rm><@|N>Xn?;JFg5TK#`&R?m9d+Qlpc>3BUJLY?f~48!f*{%sSo(?B82*f7#lc z4IzC375ML6di^c>W-5~~lCQ16$h_cCkMTnD%R8*0c3dpn897$Z<)SUdilx^1>53eH ze86d6q)|;?YK8}B5J9Jo@fYl4l4hI?B(hT#c1Y$fnbJ(k#7mb}h|bD3GsA;lniMFv z|C_4k%0&fs!4y?a62L3OoVKYDMQ>?DiHLc)*tZNgG3UER%$PrBY1-7LjK4`t_qTup$WQNA*IAk1$kGr^C`d~$*V4F1v`VjNQQO4A zJKfAA7!=Kl6u}iQl^p3_5n~TNiqHp)_Bj#Pb)WDsuez`XbU*sNz305gQuYhCwak!X z<43G$NWWn-Z#3oP>9)<;{CYmo50L-aHZaZNNnX1Q@4GcxgJ-6#@MGmmlxVQAT>V#w zcy4OOzGTb=@;oj_I+i)W#RZ|HR8>i5Pvab3{2A^SO>jPYQr`UNLA#0fc++H@+zsx= zO)^J>2hn1NCIy2NRgx>-jznKViPNOnjkqnCy9!cVn<1pYM|9dg&s2rWAve=wrV5-AkbhIuy+Wu*%ymH8M!Fk3VOjO#}mk zCv%Dy@ySAkEK6E9PCc$^$`f_iyX_fdtE)i>o|`WDqnF*!y;pw@|0ty1U;jfYH{WSz z9^6iJX>&MO@xRw>cbqjac%T#0{@Yf*F+et4*5lCe=jD=VafI4|Mb-TJ@ zcXwANd7^#2{p^?Eh@#*z3m0dvl-DGXcZF}l9hp|uNluIcy)4(jGVWr)+Gd*O+tc(` zse1kG&U(S%I2LlQfllc{4QMsHw7V^sPF^j2J43}8I5z}FakeY9H|C|OO16>>LTrRC zk-BDzNQIttYhdaxY@Pv0)2fA=ruC`A3Wr8x3;%)n^!3jZtpAz1hvWN2^^se8mY`Gi z)M-j(u5)WpP#CBmVy?%JDq^*hH*EE~+Vs#7V%dWBjG#bXXhO z&oGR(gzRlBeslgvYITo53;62?oA)WDjAjD&NRJ$uke77dQ>QI1sJy#Jq)d-`nk_ve zI4fr8lV-i}*I`L}c(XKw9)GR|Fx&U(kpP zpyV{={X=%O8pPk7#HA8Cm`GWju$?i1cfu6{`WxhDYnQ(sYpx^5soQn(OK?2Ao%n4t z=OcGhr(n-40Uz;mZ+oN*z0pJNtrpj^sly}u`+Lgej&1_U-!#DoRk<1a^3_UHZ5pgv z9?(R1?XMFENh!&8hpOLg;y?eliL8zB5^3efU7$c=!#P`bG(8aI>CIJ7#A=&410)TI zEDls@mO)1ue}$g4N7w47mDLDVK_Ug&5vEn#y^<%Y)~PxA6%0fs)|IXhl9lc4bo;bF zRB5{0HI@+Zx~KlSVAGv=Uv1r$$ym+O_J8#7kLdMXdDYTChlCNFsnMDCQs~?adCcbZ zQy>6FegqKy^qjLpC!$GGQ(Q{Y@n-C0b>M7bjVFHJXdPNIvy}VKeQSM!f2F4JYujz# zcqRwYfEX(`IRtBs04=vTGR2Rhc$efJm2VIsqLhRfpOw4@mlS_pOdsz$<|>sMJ~mK# z;9#1>;r|3D7~TN8FO#)RwvYBPndAAdzUR}JmL8XI_okQxbt-4o3wDj3iWv-SFoim> zEi4scV`+&Hee=f07eWvB zJjH#bWqw`GQDVb*2m{$eY*ak)T4%L$cAWFp(GT+UO%nV+R@+^8Cu0z0Wvc;A>MzQn z-w0rpr^sv}lhBx>7Tp`hqPEc@rCJhcFJ>Y4W#Y+vCid22$HNy#trFgR`-rpLo&Gla zNR4$Sh%wMu%~B13enA2LY5j4At*e-`0>e=0f~-|-Z#uP?zY-)&#OSEr;8QnO!^JYP zqn6cHpD%GbX&zm-#9iB({!tMmza@Rl;qpXVm#I$RmfkSo;Hp$A?TBlUOjzlgkgx-p zLE_kDz&7JxbIfecz3h7kzT0FxPysS0A&VDIqm(_iL@OdTxPQEIaRBKu6}Wg@2oHZc zzkpU=9*q)>RZFM~mx{<-8x}D|id&+yJ*__Td1B@KwlTgb%ghP?4?EP}By&fu`RxCC zZw~=E|C`#1uujydISn-XzkGp6P?nVTycDkM`LdV+&6Y_ici0*{=YZoZww{J_L$m92#+r@F2OeM`RmtQberKu1&@apjLMa>{h=p2f((P9VO$ z>UZ@c6mLcW_uO%bEEgJgB@dUE+gHSxz)0qN?x@6MD(NvM7{vtm6gu_t1I{rMILJJJ zG=OZ94Hms5=_i7nvuU7p$O1&Ku{>q5R$cuw|1ZntvnJnjM-HTFi*y2skQ7zR#!_Ed^}Ns^`SU?%@V>zNT>GOdi?HC%*X}sq4=EIV$tJD2 zK$Cu}^WV?p$8Nz@!}q4cnUpzQsB9$87iH01PCc9Ub5McG7RovxamY||RP8|13*okyZvI>t6!m)B{%{MG4jyZ&lE!8aCn<64EFmF9E< zbu@u^xXqrq^G&DAhB#2HU#C~mwkha>;CDJ%2I6E0`Mr1EutEYGO&z7Sj!yBfY#|G7 zV13kLv=^>h}V_8bd!b(ntO)d4rE=&DaO|YB}}MN&}glkY%LxRt%tL-L#VR zGCaTBy3juUG~*B^$tRj98N?FuoRkL9;9$JlM$5=It2)9i>qF4YZPI`-T63I!3cv(k{_nrXXyeMQ{9BI9L8?)Df>%yqJ0RO*tlVH}=7=N>NQ1WskJ> zW$=pNb(QZ^h)?@|)mNvxJwEJeITM;x25jE|HBaggkr0|;1$ilK0z@x`W&vTAv%mrq zsHS8#fGDI3ga>cNKvSy%v+jryHYnqfU&$+U8ktkz#9#lEL~6NMj(@{v;%}Z$t2YXn zvL1xSLbSF9u9`e3twM7&rtDv^MLg8IY}TFryt%2s%eqK1#}6N4jSKz=^Gg0N4(221 zf74m`7UnTE88Dy`f>B~+I(>~P`iMbV1S|@ZPIA(pYLc?-JSb=Iv-(rA)oZ&;@L1t~vlOu{S-w<*7wjll+`^%q`Kp zT>x^%O1-ozC(~Baln9YDUSEKDybeOXY`v+YN-$=7QW zuzXG%BfG1ewk8rarABOsd6Ey~o*9@~5C50zVplGOx zt9h9w9!oum(gD6o@NFU|AjS3q)v)VG{qNt?%zsu8t)Kpt07`2?Ks2OGqlS14kM7>3!Ox?1n7e#H< zsrTaX`OoXln8D|{s@J5eV~KtNm3$FC4Ua7=TmLyxedjadmhUP);CT&+sWH=r4;;~e zM<=)Pu!^Q2f?)KnkgW9~7%JKG;@}KJk^%;xX4w*;FczaY;4D{Tqrg#`yuEGPuk(#r z_`~5cw$3uPQbhBFvk&k$*?(2x55{mw*_zfhF)rPXV`$C|2NOt_4DSx;ub0GLu!vOB zgc0=w{u#xS^b~x9==iv{W7ta+3p^{hHraXY3+#G=HEi`{Z|98$sxeVTv4*lx!@xL) z7a86b{j5AP<~Sa8>vn((K{3$Za+{jzIqUz#g*MZFu#v9+0)kHi@`(FbU1aY0immdT zv;g(hBT1ATC`(6HkZ_UQPC*^n_aT%n^KxgIzh;rjn&%!=`_hg?k7Vq(TGKR95nCYj z)DtZ!P!iK495zdeV)T^i)W#ZC03T}#Xnsc++?#WjS6UfFdbx@CjNV0`9RUfk|AS+B z<^Nx77AFRzS!oE1N`?d4{%b|>AEk_=1nA?=^IFWp)bt+fIDW_7&90|Ej9W0bc z(y-H>CykR(DdjQfu&30dB!8JVSt4d}9lJA@ELkr#tatHwhJkYc8y<+_5UT@7(`vs! z)UDvCVI=?M;5@{H0cVpl7=$c^H;a3lLqVJ4$#cA`zvXM1(gcjanM3knXVboJ$;YoF z_xCtp_)3pWy7}E*&%5f*@aE^e2!zrKO8t*}priNb%$CcP;yOon@Po$)c$|E*(EnlZ z`=L*458i0V@11wGWG_@0A7u!F5~A*gm3WD#@<}wEvC$!>>=*BM0ZKJYH60Ky36f6Y zLG};g#@{DjY&Q_F>-#^VMusDYBNDhc)sB9%2Sg~R2k9z9s#Gxg$Cb}+*ueEenI;6e`jIxiZ3M&1LqgK;^+c?6>U3m ziwMo^?Fom_47m1Q`Q|!3sfvX;tiR2YE8Prs^rnQ#sV@BR%T`ua;Mb~+D8aRzQmZIo zr3G)EK%i_m^<~C!0xL=a#sJENsHjO)dxzjWjTBxuP=Sxe(uuU+(XP`ivC|WyhyD6g zjmc|)_i3Dt>ux=%@O4@LQO)PIjPdKn=d`VFl4ApMbLcp3eLW?sLb!7F!L%|jLIe_} z$TG)BBXlX4zJ)c#H4!=ZrIt-bli0nKwK1&lT;J;hFP=;Ul4<{&Z<3hrC%ghPZo6Z4 z89+pN;*J9)B`#&@?O($ipXa%ltmh$2j9fxv>v0RH`seww)vcz6v{W&LX`e5|j^{U~ zrSUlK)-57ENrFIr9xX*?Ptd*!CRi zDL$=!xMc!3slP`@dV-z6REAQP6z+rgocbex*qbEVmOEMf6(~`vI+Mx4^0JFrZmi`# z0BoA6K5VpGMU(DSnMa=oqs{;i`fJop#Axp#9y>7=M)07ulBW>yWZ7h%7|i&A zIG%cz7OY$=e_q+mZx<;IM`51Ad8|kFp~B_c7g!Y{NHmKc^Mn?BrqJ<)hpH*k*-Ok| zQeU66gHL?Lj$cjF%8BG@P*%eKy`n+?-zyqV+!9LDVURcp9F2l>dRa-zY2b`^8z<8Y zl{6(w$X4G#g!4 zJI5KUCS8uLp-ZcktQ#^?m2osC zy6{XZ;KCvr!N4uLL?vTTlDHZF0V;H?$^aE4REXffHPkBYpBQ)r@7?V4dWhbC?+PaK zxA7Nj+jRByP3y4DkYY|yTT*+tU|}m%$cLBd;?MTHE$t03V9un~B(;OIZYP={;rQZN zGk*&VHhio!TtBn_p4$mH6>$^f)IUhAIMqDUqNu2V&HI@m+{d8p3+owhLcH}{<}`5j z`)Q6XMx?t#{f1cpb;7hvitJD~9h})s+?y8tHV9_Yh$E-4D5~`$RL}~gr=`QP0lL&AB(llSO)No9GReEeE{l4zjYp2h zWKw+Nm}m?|4i7%!{o)MlJlEK?y}PD{_kJo0@q2R;8=B$Y9_s!)6#*~L2arwPB=ZB# z>b5>g#3ql#Zk)eR>W9^KC}WiYJnvwns40QU-z`WPtvT(9H73=X1l4GO=9z^qGUhH& z9S6xwGWEQA+7zKb&(BFf%k*FEL|?O1ub;d724b$f$W*;&FTmhDRnvV7WauBeh&nf6 zssYjOJI{DAHAa2^4u!nW$1zvBVlBAr0^E)}2SYuV3d14x0AqE8FPg zQ;Szms1?bGD=JRhWJBQEW--gdFw5i(ash&{aCDLc7K>H{a5xIFh-+C9cHZ~5yj+$T z5ob?_Oge@htn57(>*s5oVTJsrogLx?6#|O`H!$fSuoqr0Jt+dy>Zf!KQv|ut$mEGu zd%i0qzoBOeW)-DPy4fLM^ascPboM?&|JTUEgfT*GrFNxKV9&DuUUqL6f;&U^XI9Ev zprw2vC^Iu0e9pfcOPIG`zTsdGMw`tVWht3zV+$R( z&QrNOwS(0xZueM#V=V`(2R+QAXUtH73>hAE6VkrP!5AvD?!>8UEWL(HqLGXbt<){u z#?lDHtrfO(St7aMkB%VdP4>#| z8jkkvJ`?%-PCS2n)^|^6uNLh>;Ux1CO&@SPZTTm zwb>cf0IcvNFqlFtAzWuS+X4TE_Y&;pgF!k`xSll(cO0d_IiPE|NitZk6mKv`$)i+i zEDf7PNoFaTr}GB=Nh4;dtNp_IDlL&AYo0D?XT>+Tce0ddx%Ch>=kki2KSuofnpt>% z#h_}1$!`yu{Et>c-d@O+&+AvQ4jo7VKYP-C!Kl@_N-xW3st{orCUM4CVX0Cgdxo;a zD#|LP6MPC1>?+h~;Sx8P1y#S85vDB0 zIt{XZ>(Va)=6at6f4|pv-2DX~e`c|!?RBP=E{8DvwY4K^WiazRa`Z98(ehj6_hK(K zNg0*CGnkv+S9)n#ltgDp)#=k4po4+Syf9Ic_h7*b2qJ!IkR>$xi5{mUdB>bH0NcZWXaJz zRqJa6M9sRY(A{ZDr7Z2*G=IDIX@A_(`+bw-xeNZ~cAb^H?K<@)Ig#iWYCEa3`%W)c zG)^OMM}QD4kV4TrhtzFbV?$}CVp^P(f@RA9?QDq~g*jzP9dzT=%Ei<@Byeh>71f5W zOSoG%#haPi0x{aK3M5O!9+gkZ_DixqqlYHvv!I5HSHAw~65R>-BXsV2&-w4N_j^r) z&-WtD*x6<^ZEw!m|AP(){Q19nybao44holIX^^T`rsQp6RqEw}>pmx6c{xzP=$Du= zE)_CBY^OiBt~DK>q^Oajz%YhA_ZkRf-g{gVJ4yZq1)SWR~jGc@|4dySyb$Ve;tA zv@l%Y3X00o;A4&MqNKiyTLqLoh-x0EiVB{EMQLQ+3;LQ-IvR&9+y)Dlvi?l{0PG-4 zs$qi)yHe~Lgiu6sS)w4pu^1Y3vA55{oo)8M^i!E3FIl?!lLnl2 z*qXGpj+zFWGgAf&Rr8O)d&OHS`e-Sxx~eW-!9gZavgzjckOb1g-(SIrLmh5FXVzVZ zQPA5O{JQ5grhXk9kHec)Uh%^Ip*%I`yI*r~OyaY!pfwy&_JO;G=aMnRs%LoJ03xGSklp(PxFPXB0CQ8&1}27zupX%yMNJqBRe~u+hhAC0>#Ed||`^;=o7#wf44&d}Mae)L(}m zWmv;)xPljaLbE%=34N#ZQNxL!FZfs1pr56`<*UHGnGE6Y9EF7_**e{(|u~EBR+i?mJHwqVO}lWgr#0em^O;0KSafhgr_>Yk5nKK zuVxi{^z;K-SJzP7E)x$<=<)oo=gzHMsz}bq3l%)sJ0Iiw!c_Dmrg8)W;y03n>Z24o zsa%p)Sfn^UrZsgl46w~0E()=|aOX-R6Lupg`$Qd6)F>SRo>Gu#K09+am)XPlj&-%! z`befyfSRDSDFtV)1;Z+QR>`e;e*L&@+ug|i#Pzz#f9vs2uc6N%_yW9LH!5BSR)QJF zmZ1EX?D{a_{{K%M;(%Ct43ZU$oh!$N31(0qzfh1|HEG=S)9`tZJl@<1WJe^;b!fuC z1T)CdTN_OrGhMm|U`X57I9<6?_2fgOK(l00?jys`3-*9CnyC5CkI%K&I{`rb%kR%X zt-NXttzOT$dP1AhBwEGx#GAfGB71ujxXqw-sWmA4Aw2n^F#CgWUSb*;C`hQ#MyFu$ zZ)+sjPHThRw2J8m3w$M6C;7(Jb^xu4(?>bvlr0*Xoo}B{w99ul#}VWSdbV9PDs5X= zFUv<#A5NlmYGK+oKC!~^d7r-PwNX(6T%?PJ`wH;$US&vw`shN+YJ#-G6xxV0vLP%} zk$Z_eQ4`x(3Ro#260(~}z0e!sfHTi4^M@y{=Pw#|sTlfd*=`)6aioXG#X>Yqh0>uJHXC_h zHXezIzLl9zG{f}?iXZ|bM!YyYpN(yz1!WpAOtxmCaA|);KgXprlx~0nl}qZ27L=S1 z$~&Y=)lmI*xA%staU_TGchEpx$JWr8=!-Li$K}>&nQC9`uw1nPpW zkDF0q@2Q6Vu*<@`6iZ6s(+52MkA0EKgE_A`p`FPgus^jqUQIn$=T&^cbosf~W)FezyF&6vhA_FEcN9 zbp3eY0!{a<*7a>f6yn|%tfcCSgKg!WY1$7`ppY*u+LnFctElXMt?>B!ZxQ~ubX->((fg=?s_C5{FtSBnEFCTbVn+@D4ZhRd10d) ztMERw3(QfOFC$8=O0QODY>u1{f2nd77f~ss6nIBk6n$a9`S4{LT9^Fq2`TI|T9|(BZXq#SV9!19ULt&$ zl1bY_kXRY%RgVC!e4N4i*42Q2Ch*^Nh%W-X1CwJG%c^vrcy6s%8w#=<5G!qWxh8ZN z?e$W0y2@Jk#p9L)L?|#GxV;E5J~7dpt5or${!!!gfG8YHNe^Xh3X{pE3AKr|u2|y> zqC)Eum|>b}QV_fdQPP~1mZPMCoWhi@5tRTGs#oo;B@4te$ncc|E7#!aEjcX^f=rju zaiNrONV!TK)D$32ijqmB2vCao%DP5yOm$AzBth{&C%GbGxb*#n3wO++^1U=hyFO98`iF~>-ZcU&hb{mRu1m49h##&+$h|`;vhY?*UQbR(P!n#E$J?{x?bK($B=V6b|9|D%pk}^7~2}){V28X{RlvHSM5s8l_f`MBtw^nt*vJR0pO9I#xZpSs#>e zBeS~etp$hO#p%TKkQ_T<7-Uyh;fLl5uD{EGt|y3yS4iJ~=OE`B3W$QYg9>m>5ZkWC z$g09h*Ffm|RRd-Xr1SiK7`q>w$@5;u*9iYvzXQiutE{q;u{93PcrBvqKJ=cn)&7r} zSY`WN@aHh=t?$y<1G9d$B@UX(SLw?l6RR?nBI=`FmxS87e$T36tOki^w=z^A#l%D~ z@+uR>(a|=99Rp1P%Xm(^#oU?n~z6|4M$H^Rc?_`iPG3Mpje+GT;sUHjxX#jXx5k_V0@V80RDcnaEfxLk*(6wR-$q9`?Z$cL#v{U!pwT;k zxZ&e)$HHTZ@8c=qGgHDh%^%*+FEE_6;<8kepKwgdXA`r0fV@7*26nk|-fI{ljX_Bx z#geZ6?2F@a(|^^*x^$T;%|R?qeLJkYMdBwELDJd4dl})oEY-1ezH|q*npFYIC9BC_ zqy1fbu4m|%2YX|pxbrOMMAkkY;ZhL^^OrA5DoPmtxasKe=br^HRN(QiH~q~NDT7yg z{&d>g%r<)bq1bslFmYb$eY|PT=m}Nt9A*C)YPjCue-j119?(W?xW#u>L&UK7#aAnns-7V8%ANw8a593C{XQxMb_LdNOy^v1a9#qS^^wPcy_W$4g8LeF-Kps z!SX>Ia8MhBjNia`jh-u>3D}RjAkpoK8AfNh8L9Co*i?m5w@E>adE1dUx)Y{X=B=<7 zg{^y-fOyp<=HRN7{AA&rgveX4)&1OA`uZrG8_ z?{$1mUOm||&Vy|IPU&Q?OezZxQ26lJKTd8wxlThUJ?q*9nw0N{hqMgHh7Fxdvr}j=f$-ytBoaNbIeHesLrY{2`gt3rA&fLbAx*M* zuI%1Wvlc1c|B{xgd55H%E?V0w)!ikbUy#G)%O&S>N%HC^vPHvXq8IS?4qrrZQcZGQ>&_4DcfRbNDW zU7m(>t|cgSprilq((zF!r!u>_^Fk;3S|qlAXY$08An%e~fsF+CpeErTFHxdLPY6`XX21=BKyNG?QO66%Bhe9w?HZ#{9%!%3 z#*05xcjm3J6LIX?rE~1Mp)u}Fr zR0v9#ic8Tn_;_+jJ7pOLO((+D$`lxpMS*fPR%f@L)`jqeyRl8)`M3AhEsMrSgT3gD z7rAn-C(OoS@l-3?f;>6y0cYDzfBApk6O-r(j{dDfj{HW}9Lf`q*aaDvE!Al_h#^`I zQny_`@$g~L;fge?tqwjTyzdsx;w##gwIl)!bXuSPU0)RrLA}$kco$8dRWQR|YL#yh zrGraPUW5DL_&q5?z)^Od@Ron)$$-rFw}#iWIk`Cl?+AxdE8qY9@`(RmFApkWnJhpe zAzdfqz>}Un(HnO-V8bJw)G?KhHTyZ~`PcqfqTpB^fxOgw?s^btH8GBJs6?@rg&n&l zvW47z&^V9LMZ|}#9Pv}T1*%St6?KtEwj%qyqRpH`c9+E}-cm8Vvv@b1K?s)wH7j0z z2r`RojL(4PU1U65ae@h3PAYb}kP2q=sKa?Q-Zjn_?@GvJu20G}ryY>W1nAuwz(p&? zv`Q~bCV)sAl}FYT7M~<3Pmjdk?L^_oBAO<7L5^hu~dhO`T7or7@5j;4(?55^s$%;*h zGDb;33$8&&3kF_OGneFNWn`~Iqz7Og^y|MAGxK9nNrZNX&C!dF9bop~x1|fQy=Bq_ ziW#Ns8M;IDD4$-HG&OgVa^6*AUsh)3vCiY~WAoW8yRRaGdEl0B2DsZ4>>y-K_#(sr zfFq_a?|fOLZ*eh8^Y?w6KYPe(;CB{*Cj<~6G}BO0%K;TgWJ5tp@xe)mE=pW^#VI%} z#0K)`$u!R46tJ?4!(RYTaBzG;_h1Z+SkcQ^I$^>f#sMC2Mv>F28XO=aRT_mQvUD^( zY3k)-ocW?5Cogx@)mUl$h%4>xH*vC15&^%+mbw1KhJbwo!;g`e^*(>(z=x`S)7`CY zaHKyFH^_YIHPca9oh{?UV}oaOltVe<(#L6evMAY{0lyB*uk714mn=ZG!n6nyyAHPS z#x-OM#v)}>6W0BSp)*|U{ax%}cGGdcb1sn0y1*Ol;jeZm2UtiV?!WBY znbR};#x~hKoRad){Mo3Il5*n6SuDS8NwBRtm#DU7z@6|?U7dv_7yn_?=K#pV2UUC1 zVO&IM3dSkd(K@Wc*cH3YcnYIkrkGN!^XjT+-(yzzY%B22;Sez)5DNWL zEHYlGbU0DAB}^Mh>@h3Te*T1EuQ8^=>_9ifqkF1m=O5i<9Ugz+>s6Ba?OFdn9~QaW zcPFDUbjQB@3UIBx=d`S0uO;w#b<1~$j0rcfTshlzMO7EfC5GF@DmRde#)?lYwZSjj z@UlY0m!Ls$vo|v!3sy&2@drL|vU%@$3t!4#Z{&x9MTn3fUpc9OW*wqdiZ7QHH_3~&lj zu5-PAcn;AQY$Vgq0y}0T^A8Ucfay}Qvw?KlvxUe!>SYw{kcbvw9;o~(F=}5DCm$(` zTG4K2sCQQUX~{mum^0ww+|_HFz29-4_$uJ;K@LAbxL#``-p)WE{wKvfCe%DFm&l|+ z8OH?AS~v~Ad1AEMae6R^TFG(Tw5B{IMaWt#X1I7wBFD;C?lJOzRVqB!@KUWRjjTB? zGi1sk_;4ogi#sm&*T%;0lO~|Em8B+@8IJ2F){K)ZIOxDUs}isl^|9HEZn3N=?0AmjTEQz5cPm95d8N$^Tz@_Ficf(FM!N9!%BP^CGP z1VyRNB4z#;QL~z-n%9C&plg{P0c?~D($S+vq4pD_ROU5rgDa;!aR)ma$Ruer?X;AZ zWYU4lXKcX@KOXaa*E}Zq@c5jpKzDR+9EW|58Sv!7<8l1IpRR9=)|x|rZDFA7(i6m& zU5GJPXCri6IlrT;hW+EcN_4w6V@iS-7It_Nv4Bt&>t$vS_d^&vJ1Hyv<;=|NKa2Dx zv%&l5-=@$VAqv$Psr6Z50Exw^Ly0A1dFdPq?%}j@y8`PBdx~06#)w=6(K;Xz{6dMZ z*h28#$<))7>Pp|yqDrIG;ovX<0H~N;l(bTYw7nl#ONndhP}xQ5YwZf(!S}q(T!y9} zUZMLDzVfS5w2=F4aAPG9K&?enhyg9t&fNZwH~b$j)iu|K5golZ5Av&r3BTXjhRV!Y zJhgQ%Ya2QECmOd$Z-pl$H?JzzHHceUnrWyGUqL1-;(rLrO}IAOx!aYUG`j{S*(}^j6t29 zA%^^nz=*PF=2b3~eA^8widPuFhGz~{m`)1u4+m;&s$1_5k$5ncouNsnCjFw>Gp~cRd!C)vG;N&6VdH!5d$k_a%FGIXmK25Yz!uQp{1}%wv>tkX1 zDOEm^CmUG9(c`3HAY5FR#-IwNGL8+~Ky#x5F{rb2V<7!<;>c-#9jm1Ptlgw?WllIa z2d064w$J!RZ%=cdGxz~#e{TOcXkcgCwnc}8Idn=lNhT(}Bx_0@9xQzcVx-LiLJ~vd zF)5)aq0G}o$NnvcqmQo>cQjML2L-X(4+)41;z=Te2PE7?5yFK)I*iLyB`ukPH^at;l=BrzNt^b7f+?na??MTVN1NVk9%cB|{{-aw=ur9^K z|LFu^BUex!%2JfD8BF)w{t`ZQPWXGa^Tg-5?M@%_nz7c?i0Equ#@ZF?rp1>Pu1i|a5p3qudn zz%cxH>c~1^$1hk|Du2>670)7I)#q3xb>HPMVyEaZ9z{#S4Q zXgmJsbAh{xUenm@#cJf{J-p#9uWr+)Z9E379v3}9oJ+gci(CcIF$thlLv{7|dbXnP ziS9*u4jq8CPV}^+uW5hMnZE7}^CTn^il*%EyRDkrwqX$sig<2Mkn;bY!0&%XU1TvI zZm-+&yt}aX+rxg^4emwn4_juYwc@)1pJ|sJ+^PXh&0q`R7m4tFA9)IOq)iw?RL2P(xMhH8n4m5hwe)P=#%bU z*vl|^pEC5^-f@}Ad#%(Fw(4-$_vJTC(5a#V_Zp)1BWV;c>!VWPI&H8XxT?)^gE3Q( zGh)aB>E^uuY5e%QY98r6kW_+>h2oFGDV{FAIHIJ%(*6Cg3!!MCsvJKYoDB6p7kwAb ze+#W32L4RsBqGWBY~|znpQC`cT4>9E58wf%SWAkCRUpaYhuB-=`#!6seo0FYzi7+E zxMj9n%~UIq`%8$ZF&cIpogUWw&m%-t|BXu?wGy&sv5VnAQ6y{bk;?DP*ay$5c6O#_ zW@gq_bF;9(qf$MUYO`d`FWe+sTTtrbyu-RlG>KhMc>`Szi$)hM&0BN|&6C{uFMgj> z1uvpsAG&)3o*vamw(PTcSt_PaCk0y`I9*%}t0u-3AoA!-d?ZmBDavRxknRpXS8VIX zV@a}*&&Mt5d6jYgMGoVD00@)_#aP3j&@(_}>nsqWZIlPJ6#}j(d5T-|XE0T0Z6N1Hnb10iGI($QRBhRmy!XIuKZRDSE4XWE^A zQFA6;42K<}qk~QYX`!?de&>fxS7;O+_$r)Bacbz!QNIGEL z`Iy~tITz2#aqLa<>79hdHyYK_F&ZYc&Yze*z>(AqRa2_c{MpW;G%Q`B#+ci8L2{|~ zc#~1^Mv~yOEMp2Z{+TEG(-UGs>GmkEKd~Md4vYtAc7p9~zxEO-%VBL5Q{i!5G*> zrbGl2L~(-^ssb+Z4=Yz`PnF;yg^=XY7Q&SCAV?J`4JU;-;C!gA1R~{e6fP2#oIPe0 zAB9XXmVeo6a6d_JMwIIJcRD&KW)hNgnQzmIA!5u((}Mr98?y!DuF`^wcn@rd*a;n}7uUm7RU-SmH@3zj#<)l+px{Q)!3{rh3_?Q(Nx zV)~q<|GIw%VZb}#O+hGRYECTYUl&!qW$3#o^9A3pCb+DX5kWds>RVYtTzcKzAng(r z-?k7X6#G@s-4NZz*_q!dyXa4idVjh(pN*DrSA>+*x}1(C?*KCB5UGfGj2Z~g0Dr)> z(WT$Dae0Mx5?yUQn?}v5!V0`Vz8o7DkI#L;p1??vGQnS%L5$T|LN{Im)%AfIlQ%OJ zfIGF+ukuaQlez};Y$)owJpxnRXqubKG@=9j;yX5U(R&L19Uth5f&jXNz~!IeKr<8# z^8+~V{Lf`O(Eq#*p8vnM!RIF%c^fgo!>baeBvHHD74Y1v!y$E?E5w$!=t?LzQfE^y z9rZSX8Kj!t{c#qTztt)MHcjdAA-M$V|7rl4X44(WnjlFy9hcN0AwWZi1VK6%SC;cC z!3<%fZY#q;%dFt*o)N8Q7m+^*^fi;Lrz>EfQK~Ko_LnU%5Tlc96gXwob8eH+E14-# zk8!XL6q*6wKyWLSMG~-xjFo<=dWW;eW!ZG5gedQ10J;#zf#qqM5D9pf92Nx(?`a<= zQbw4eaXkaQ3cV_IHUqGwZeW*stn;xT{kcr%jqA$isQbs0v(6Vr)#Osqrs&B1$ShRk zRAy8%K^KJKMh>nh9I`Si)J+CTC0${kpzg~)Laf29QC1}tM;Z;HK!R_lCqmvHdR)Bx zKgHgLJAUl1gt&DndYRLfR!}yi&@mQKMz)q7$PO?hlA%FwWk)3Pfdp)EcP;S{(fTgU zmtDWErP^AO3AcZ@Z(Hl}=1vEFsR4U~edr&rUWM{M&g}q!tB!oE_C@M-AU(WA_mh8u zBOo9LNpjX7V1`eNY>V2_J~ zUzp2N1lu)+upu{K+~TCI4}KtsABa~DFk^-@@-iZ(Nm@e%OXMTZ)7J!HheYehQbd+f z#Zo7OMmAoE#?Z)L@uz;b5cNF$WH)#P?gRf9%Qu&7o|TF#ke$ z2+zUr(OCj}O=_@a(5*)3bdaCs&52%Vd9Z^vrb4`yb0SE|+B=QpY3rzAKmF`-ZzTV{ z=S(Uvijjq__gcY=*<@e_HG98B*mlgL&t;n*QHA7a%fZ^L_~dIa))(&)kFF3lt&V8w zsn%B!r6l!g2T4K900C1M$6(i4p^)CktHamTz=B8rKl?rB?)}sCqxZwF?7HNr`rWs& ztjjg1snG~6qHAEa^NELfb(&zlWr%f=W`=EVyf)<|d2yK~Hw6~Sd$%apb@EqmWwQlWP6H5-%sBL@98&uM35dKzY>o@nLmBI;F5#K+JCuI>0#HV?jz#_B(NO3xJU+nBFKz-A+4|$SJZIr~qI$hR9U`lYI(cMn#v^A%gK$U4zAAFQ*6!4DefN|Ai zM5ZWHR)PxBM$C7MEK!5lQ_|KwXQNgk=AS~CNt7-{fawhwc$q|s)6Z)@qJ+YxHS)-9 zLT)l?Y;^-$pw4;yPE#yrg^q+L59#7-ljtzRZT8}3=4;#6KL5PyQc*|ythG;#c*W3= zyZqBTS}?k5cG{tmNaf<@j%byYsvPif3Diay_G$G-X36SG_y z1`&-=wtV7e0H`=&e2GFL*BZN;7 zlkUaj?z2hG=sBiEpcJ@DI-(-Q?_Z_nb}lR)XkOa*tEX-c%N2M z=I(dSCm$h7E42vHj&|vUX-B5v;SjfxjnSDOlC=q&#AVXLP-Gbv&(N?hOIjQvw^b6) z!Sl#AWeh7|;u>Ut$1a)4Dwjwu6^KU`ug2CSX>zlVI{f*sU-u$I_)tIpuGa3yUNn8- z(!!PSp+d&D6}@hPCsDy)@^j`>%d%K?g!g_v0q{XrexEsp|3+e-pG^ER=?%Ye_Fo@N zd7Xyg-xMYIeeZZXwWGLzY9xafK+Fsu5m+aZsR~VnIcE~H*#d!dZ~$<}ScOex%GEe} z$xv|d47;gkntv5by=R+-BlON$@A4BqaFOc(#xLzVBe%kAUPEOxOmsS!1|74_Wl-iR z%3IN;jMh;;icc4~$;)PE2Y5^xmep-^zK_2XVkz5kY8M5`L~xYVVWaqD7j=$ePDX;3X%`8#!_F0VYm2Ai5ix zLaDSEh1#90{oAJ6FE$D8eYUP2caHRQL{dCTe?0#)(9Hy-on+advh6B+P1n5~iD zrm+X)fe8xcnxz&;L&AfTNM(lRMA1#MDWD%JSax4Zkjb?F7JesF=#Rlk79e!lh~E}| z>}0oktZxDId1R_w3Do1r4^yyaD4>7?AA?`wtKTk=s@AD-8TmhtRoV-@Au|j;vKEX^ zl4+1YT?fw-c2@s$_RrP)e=h-_+XU#JM^eKck9RXSK>8?uI=)uP*b1h~7%oM- zF@;4kgn7O2S@pM~xsUEEv(3x9$bF>zBET7@wIKYztIs}eTJozOY-ihKmL6qC90$I zh8m`jZj7#NBgn}IQ`zcV{|hU*+#Dtx=6xPLX65A%HyfGZnr@=iTQ@aY5=WqmM5eNp zMau~sCtGA^MJa=6S=_uUfB)=3CjSiD0#}dY?BG&+x#Fr7TU?0J^yA`|#138zoJxl= z7H&Ags2UKM9+1kbz;tSo(bPOFAY-vKB^LQ4BOaig)>%2De0Toq^1AP5Z>Z#cp&p<~ zsiZ57f~46y0Bw$W>FSX~2|LdQjF@PJDFfm*7+O6)IrrV4u)Da;?^ais{Ivc&b~SWf z$5pb=202)!H8pYexP-M0kF9eEO`YFY>NguVG}-LKf!9DX!fv0U@eQ@jjo#d2=vPJl zdl<;wf4|YOl2nA+$eZOQLpbh*e1Y)}V~87v^-7nsf&`2+40E|aEewk9(UN(?rSEDm z*@d#pr%AqIUDS|QWETqa;AJh)67!nMGX8Y&jVl|D&=q`1`LZ&wm)7vA6>tMPx7)hZ zVU8GVi5O~Q2JyjB2;iG4?8avuK#xcbjl#fts1}c0_*QlJ%QF2R*}(?AXo!jLtJ6&~ zes56J3QU9V!xUjo)lE+SvrsLGp!DxM8*982gW0jp#!c1vpkl3D%Ai zj0o?(#ULcKdw*JsPQLCuf_~p@UKMZH-;SCDLU&w%3){d%Gn=?t9z^!l89*`@_zxN2e{|xu0j=FF*BFQN?k1j{oobit7$`oRLeoBI(I#DPx)Wu2 z`NM%dL02H6rrsxgH-cV1*=t#lZtnRct`|HCEV{m{M6mwv;lG#?F;UyeH0Sur>RlIS z`+n1rV{TTrgC^)zW73lRHv~cW;L9zSe#L?J2RS;|6eT_VoXZXuYcftLZE$E|hsvI} zg@v0`L9H;6cA8yWmJZzJG`pkw9L`D-_d8tC(jAjHgLSHs5ADbU~B~n#2yZOfDH9 z&_d1-iCUK8qO^%qRj*zK1h{3PKx+tsl>sQKK1y>+`>!HQDlu1n`>!mQfq3934}Dfn z-cfwF-0 zK+A#3WSnPY?I^Kw7CX1ONJH3)EeU@F-grwD?a^#g$W=_8**b%h~kfr97n9P z;fzJE1VJc_b13M!T_H};W;`RMIQ7wUMa z{ds*_TYE2n((^YYa6%~X&U3xbTgW^A?q_#`^YNujzVpR;?RgY}R!}?)ll{JqLu(Nx zL8!Cj=eH4if3iA1E{9^46!S3^u$gQ+Ma7rtHUiCy1F-TZrQj1L@L{#!V1;}Oav+{` z^GjBkPTkT)eUddmCAY*yxy>E}2GXAN$4dSpM& z3Z53k{KKuq9?kID9W6khbc2RZU$f29-i<>rHBGSZ{wMohT!zx=#I`+@ET3Ufnx(3fm>3o7lkL}Xv;8^EF#NfqOpM@`!Er`aM>4i(;dLxP zsjLn*RZQ^==vx_q39qQngXsU7&r;=XmziaU`?2!gT0VCE=imFy?tdNXQy~+N4zgtF zCmaOTEIR34(TDV)RkR1QEhM2!@|!+EG8rJVOuBMbZEWf?q4UL>HG+03c7<9JO^#4< zodqcRc(NkPxZNnEV!g6urEfyaFoTtzH5hbNDnHIvasd0u^ox}VNtQnMk4hf`bIa~3 zRRKFbn-!d*qtnwYip&ulVHAok*EF0+Q|VwjesPg%$5N469c0O#!p)p0-8QLCmOHza>Eu3FFz+qUgAww=aK8nbC^+xph?zUQ3h`!|!>vnMkv z>%K4iu4lL<+f#=r-orYBQ}r8f4w3Hp%Xk#WC5cX;MFcxhgiQy;skG2kV733yZahu& zgiTVnzc2kb3dvkuQs&Qx3lFejC*$%+3)vl2NLpxA2x5ChCJFpvvLe7TMzR%-l&H!qqcAJO zut=OA%5*FIvp3s z4Pgjreacd+x8L1FCA93#bpKwUH-Q!z<^R|s%=fMXjh02#xC1gWU6Fd_tZnW0>ctEq z{KCAEU;}A9%ZD?)J&R?593l7V&SyPlpD$l;Z@nLkhz}WWOK&#ZKDfZvi~VOFS2$Rw z^uhkl^Mr<68FH`=Y?tk{8p=SgGqqzF3)_m;I8{xOP!6#%I_At>%fF2p_BC1@@d!_T^Sadcbqtjr3LYReLYI#w>2uJLv&mN;BGD{7%T%od zO6V5AIjC4r!EWZTqv!Pp-|4B&+fkHxt@Bfo(2Ll^IdRC!j~3ekR`udFrLufvhv+)% zD#-}dao(mw*hh9 zPzXu4%-z|qk7wICJ&&&4F6*tUO(y(@f{xr~xgJYL*%}iJ_e2z5jrv)J*a&7K)qj5} zA-Td-+L|wGTJf1()$tuG&aSUR7vk&FUnyOFtT)N{&<}6=c9JTl2;;60QL%53Co*N zZNzFk8X^dhzq4w#Mzs9r&lI^1)t0K=3)sz`N5@t0E zt`i&?z-f#UIx^HEaxiQ(`xGM(=ztkuU9Dr0q1GI#m!oUO0|-47GSQSHv}v;94$^+b z6Jp4OgB9^RSD6QIyGR$K>o^3noHP z=Vf=!_mpeUk1`E*kE2x2l%OjA=&=`8UR>>< zZFPIuNPS8$8*qqY>0c}a=iaX)*jU2lu;1utfgw3%5b!Qm!7tGgaE}+6A%DQEuE%Wx zRx+7|#yNp~!yau?y{8k6wucj?yali;g0BPqkKLbfZ6El0Q27_DO%-Zgjxhsamr|!d z%TC_|x*SzG(_X0(ty5J(p@@N4SK=PJ>jATNr-uJ>>zmytx#c}t&uyw+;pYAG3XD|i z)<_W7D-2`>dKPN7unAnuKZ#TV7L0ySow18EUkP3TW{xyzFr1-33Kg9j3q!y$EM75P z&Ld>VNL^eTqi<2avKNU2!IZHdD|lkl=u6!nyp3owMQDjk|JG79UwQ!KH(^>Zcb zQ3-#AjYx{bizDmHWp)Y_ao``$eu|f)OtjPq$Oz0>YpskMR}S%!p7)O2oD^9|>(b4} z88!4$%P5bdVkk$SlOEcNN}>N9Mzvb;FETV`bY|x1YUj)!3e!56@9sU zzl{U4|2vgKAkYROT&;aj)kr*&VI~x~kslYCt`rlCAC+u@s0RGD3-dGC-9uvKC97ygq?uEn75y{*ch* z3bn`&$etx(H2C2UK-Da~GGkBBAO9A$i1QKA-O22tkWze*47ysDk(PB$KWU<`rCMh< znlDnB*D^btR&!rhpW1E#!3E>T3-)r(OrGM|JNKLThZFcY&SNCLe-0Dp0w@1Qb~KS< zEK{@_C4aL{dA{r1NzYS0>3#R*KWc9}r#rcmK)BN7SNr!OuR9=S@ULrGH|-+3)q zndq#MF{{lS@Pz^!tivgs3Jk6*O(v1@jf`vz55yY-Mnv!Kp}uK_BkC(W+)b$b%<~4SH3TF(z5xm+j}hB#TcX3&i`DXSEQ9h z%QI-9XA3NEiquD%vm#JG$qzM}SCyKHWeF(36jo+7*)0|(XfSb+JWX-s{+ zhg_#rN!VUBv_a_zvRzjY%p-w`t7+nhpk;t^xf}|8ED=9wsEI~4Z0QL@vPW^pZ7jJ+ zEw6x;YwB*2Kt!Nu-nOurN>0?-ddt(u+FX^jJU>N5_geF-r?E`rt~P)Ib-+`0B(Uxs z6i=^fXbL<8rN+8~4-KX1jZzCfr!g?s+>AO+i_+%FXSF0`;A%n?8YEOAsBcy3J>dZl z?d(VQ;fB{r>n9Uk5`gpGILkO$De@=5-%?5?`sML7I_SC3TxUuBoj--4T3>l zPy^u<@<8h=S406=+ZNcTRkZLvcG7!Joa$JfwA0lu5fsBgR8k7$kP1p?E5=2FY*Ikw z>#L{4@?0oPp)(gTMP#x0{;5Rf=uyWGU~pJbm~Y9p^klG^FNco z-!h;*Lf*I;p{GX_1u=a=#a%bXz-83aE~k)s$-*tQEY+qY%SAg^UuL9=p@w~lBOF8< zd}|!qPtPBG$|RC6eVd*hUMLmY;BX5Cq=`f-^0o5xS#a$4dJSwl_K|Y021n{|o94|G z6!h_^1`OnK;rew!nc}@P*_i!c2KojcQTzIEQM(fp9QbNWe=B)h348LcW`e?KdDViQ z$5f6GF{zitIt)hFUmsZ)kl3@_wmsBlXtga-h~jrZG7Cbh;i7kbU7FyM16_khUU<@@ zGNZU9)Tf1tz70wdqMl3&L%S=GQLv4XHfO$4ovmBU*i^GA- zPm;W+$&t_6FM2!V#Q16^CFLb<4ccyo*10LRl4fd!w--HL9Y+E-g+Zkj)IUS5!FwSd70Jlj7~O)Wd|VZ$op}fCp4ux}7>cS4k6`hu0cDfeU#NE> z6I2}>?wAVm&3XdLYyp3H0k<69f*CmgW9DscLa#5c`}1AeqWTmWG$h z^vI9`8YskyxZW7f%d7!QV~6cOENXM}eHaWkAs^A&Gb1&mmShLN$ur0&qp(~>1ceW) zW<1NUx$g|c8H~iLjP7RVZVs_QL8Hzwsnl{Fhr$O)WKz4QXf?(1c;3Zl8fJ8;G^3NSp=(+0pR2NM>J*l)_SBiA#7vry?|5&7z{}8%uj7R0( zCo1Jh!^J1;^J?WL9O~l@v)5InF$p$3p?1z1buE&K&3_dYSR1MUd2dSLuhR61C6#O( zU8d8SYhT=*z24PYSvqLJw>umhr=y>s`lEu*C8uDhO~Mdz zg$`>vt9`Xq@P5X#i;>w3Z?%q|&F)Gnf>LL)jZqN;N0m8mo&GP}1ehWe$C1G4?|1x( z@JdaLo~&Fru03D0iT}M)gIJfzDo2e7I773j0!+MEBHr=tZ!i`M+D%+j2JI#YLceyF zw9@kqAJ%Ni&+ap9 z@_BW&{B3RfDPs3XVE67P_I2X&?@X0eYvbKLf_upjP0BMr`vhk1?RjA0M33wtO;al( zBP&bT16O2g_my=JeA;7a-@4;nD%fMpIMRrHHL}Bipi*(|4E)v0-3_gA*6<$R@LMRA16n6rXaxBWC=K5fk{G7 z^zk)or$pLo{rEu%E5E~|-=S1YMmaG6w$>uOLprdn7`PhuF;wb4Hj#_mYiX8~_SVlF z8{5n>pxb)& z9$ukQvaBU#M&^x1rL`8~8IXRWviYLj) z0{LJJ)iVM#VvCMoJd%MHn?wrIS=!Vl^XSDHa~;_oQ=&!Xh{>5j3*mefQE!G;@MzmY z1vF_1$ymvFM`MSC`Up5Cp2zxs6?TV5H)I-u_qcDzUYiq*dAAT$CE9O1O34sK&a1wW zvKaUFI#C6i#kw}ia+5)4v?D? zjWw^e7{T=wkjqLNBx>OWkBw$?B84}D_a>HzR0a2`~AdV91r*P$! z@oOvwWYoXl@3ah10eCy#$;O4v;4#A%Dmf2+qfw`(t@>?=%w+ayV^3F;iAUe*AgoDn zQ38XQB6YzH1i|)w4Jee@8C1@pVuANeLB7~Rab@aOMFobOxHC~Ar#O@xxn>ExOoYYZ zyI?83;|VS(y!p?g)E|k5I{VA2r2u?)RgU) zjV$#sA%E6b9DNMN&7(#vTFS_;;G{#Qs->J>w`@Qe@_8K$`hF0XI9Ul)^b-ow!mXr^kOq+ zu*t8eZN2}0^*wu5o&#pW~bOD-mJM z1=vb=Z-}rU6#o)wIW$-)QbIy7eCNr^{s&EcjH;ERWNP%*dts*+B8AfX_EPYV)}cUd z#f)kt6R%La4L=MUn`3oc_YNg9S2uv3+w(#?H#6`BSL0%B8s>mXwLvw-WFw&K7d^(v z39wj6hhP{fTsz(2LmS}u9z>*2J^A7Z78)}1{Sg#T%U~e_*H0pByagK|$tt)+b_D~A z;3{ayuRCV&+2`YZBu2cOD4Qo|Qzg>LEquUgw7ZJ~OK|LXQf^k)?HlOpm!aDlhQhRH znc~13JXK;lQ>&!cQszmF>v(J`m<}lTcy|ZFujH$`TwRJJ%!(hER?%h00 za)fFSz-U426+cA&c)ehzBY{EXeHnT=Zw^OL*?$+x3!Eq9(dRgZTI8xcBN8=;)IPL$ zfw^DDsO|3t8CbCXVA-!`izAy}P>FS^rO3u?&e6F39m6DpY9 z%e@AfqN|4c3%%aU)r*s{B*DR?UDiIMojW8DMgikZ0JYg&3fA;IOA_6WI`LfoV`r5Q zVt2JU81{QZ!WO#M()p~e-3>=G;K^StBOkVOR#%K4Vcq~GpEnbVx#yi_ji(6Ie7OyPmt&pyqSU3j8%=2tqO;wVtx@Uf+ z?)EbQKTy&Ms~WvyTsWDUMY&A<^e)I~&@~kEhdE-uwMu5T;jiw92W`3B$BbNamQDl6 z5=tDXtDH;ktN|;jh+UkK1ZQ=AV{N6{Ww_;zWDw>JlyfGUGe0c4fK)@5Gt>=%^3$l9 z&{$NBkDv#1?MHL#Re+Eu_7MR~-HD3oh^%wCK1;rG4Vnb2ZhJ7%aQs03!5=6Q;aYZK zMP8f)MI1VYf{0&8$}Qol;!ckL0fNjN-{a?alPTwC`RJ-~7{aC!Ov%36Ug_90YCSsH09|{pbGJGx!$g zSM)#V2f%F=>WeG=J2FR|I*^3?DfAv*q(~7azGR=j$5%o+dJDD265m21ivet-LUMx9 zvi!jP`8)EsS6C?AK#C@ncY`-P89Eg)wYuIqrjDZ|Bhdu4{${oFP_pCn+m3WWGu1q9 z#uUK%ETJ{PV84RtI=N@&Y{_A3_xs%VfkVKjAR#i~T5cW?&xHr87D;OZMIu+0G7(Sb zyfa zrRwUO_&qjuAus*7r#+^e(h2R@SXuwD=iZ9~d=kY}ILmz*(-PM$50x?sa#g`{h0zA6 zW9dvpBY{WV2v7=FVN_dfGsukdISaZA1y@O82kyH-FFyL0l6=EhSp$z6FryJoE|sb! zSRdTvbP~g6Ft__OE~4Hki(Ff-TPlkdCZ`aqS2-Z(gE4ftk=bqLDk4b8rJcmB%arm&w$}=aSCT zbTdyRb& zIBYMZn{pM}vLb%L0aF&Ok=kCH%HiiVnLrA*$Zv>t^EtZBb{b~dxEt31R@=;OSE#%F zjVh^$HWZ27H;J#FCTb~&7z&0@vr%Z9l~b;lI6}EAMAd^#04}h@+sO~#6qd*ttzj#@ zThPY6m0fYNKMRy7PMNUi4ylby8HO6|jBj|M*h#ERaWbjAgk_#Er4(x-X?0=ykb+@y!km1VdFeP@iqodgr})|HqeL2H6#HG6Q zScZA(z3jO)X8GEnWYDE13M-N;rkhET>QcmU^$wn3^F1#^|C^>k`zs3gDZx*n{_($b zz;HS&c!?~FdE6s5M6^UZGR7wErW)!@nuvLZD&2%#L7thuz|g*bjQ)QuuTtn~Di?rKlfn;z2- zz!vZOqwi}+ZC)(gkIGVDrMS3Wsccs|OXoC+GdVUKV5b9N`0d5`rU+i^d=J%GcyW82@cU9^#NLVxCPU?gwE`;g^TYKISb?65xCfUAmD>xb_2ynFThhFZiCLV*L zMzVbbWvP+!=cQDt-Oa17VSMD2o2Hb2>2i6{KAJCg@5A_BiHILhkrMuHl@u4R!>>QU zKWOdhIb>07!@!kgbJDhLV!PcVv5__)FTmF75}9$0H1LM6Z4w zyuXTL*@D&N^dFT(qHz`L^jt9TV)YmiH~-{B^}+~cQV}6B+9cgl#9pb7yCmd1Lhg0v z+kuff-Hbu{6khK;l*7CmnyMrrm(BH8k2Nd3D`tfh{Mt_rr=+}t%FQ<Ai9I-4^#4+1f(tz5iVvyUiYU zkK&md?TA~BFB3Od!#bMvm2*nsnE_%SBJ$|2OTApZsZV?PY^sUikjA$2$ejIkN0qRn zWookd28_|LYSLn>1pIAj&HM1B*&Ruf(ru45{NL${=e0~sEc_Xv6cz~)ciDABg(za3 zPK@NCMY5C|11Oh%I!92PSwsRC|TrbDcSRjjl#TWtPAu zqF=a+kZ_PL8Cdsw48*XG%6>IEUYzD_Z-dQ$gRLH@m+TlkbAIie+#?9 z?wE!^=)8hZ496I2xRx%TLZP6HnN5giWduB#DwsAkaHJ<7Pdc61`?IiYqj`R4p z8_g3b%^p$^75P83q&MqG`~R>|{_`3=3<0OO81OOs?D_mCs|F8+0u{*wHZd~T?08}> z@mK1@g(~^qjb}SdWpGeYk*GoiF-fkAmV?#qDA%OaTL*EZe3GpIH`IxSUKXAA3o!_lGdnHV<|m}oGG!4J_WXyt`X4mT7wqiw8_ao!hn z=Rzbr7f$03D&}$uv-jk&XS~D6)%a~sJ5d>y^7Zb^$R7IhOs;u;;G(c6F|+n;en&}o zc(gWe#{TC>qcQQj)TtS3bt#r62>u0|COFR0&ZEQ6baXLVh_P&(8^))!M6K)BV!rND zVG5ttrJ?J~6gI9$ql0Jk4fo8G%SFBS0a`j{qu;{sFoJ^pWj0Z5jD!Ad~#tSa}u zrE!yMM@#B}>$nV20`Z2@?J+j83xkUI<6(g?0M#Zw1|u~&G1nwDkn$cjw4ve24}FU*X~$hGeB~hJ3SqViRTc#J`n3WnnIV6tOLFG zc+Rv3PkdR=l^O}G!Lobsa`Jk)Fjt;Iw(X}Npc1Amw2ba#SsgG?bFyte{4{bhN=W1} zwdqGW!;pycgM-!_u3^NSOJ=Em5SUkkLrQ@zDVco*`H*3Shdxe) zO(#=BCrA!s+3yqUVbcNmHmgO%mYsEJXHa?Y{c%&akt_7nM64n)iL(rf@_q-pBDz8H zet69Ac-PV}40eKzM(pnlXB&U+CK2-92S-+UIORJVhc|T|AOAVO+IYXp<{4iXyaOC0 z9IFLd4FU#GHV%U3X|n@C*bus`_<)i1D%&(6JvGnWmKZP;mfDAW`HtG^^Ef=4X`ReV z&;-|@boLU`^G?xo8>=^5&)}Nf(%WkHJ16b;(JBMc4>Ce19`-;jJ9HRiqMh5kS3EG? zV)5ct5_w0iNgL6_Z%r9NN~8#(fFItxNOpWTnzHkN-_6cP3N@NIa5l*CE+Sp{x3>jq z{hkO&24<4VBz{l8Y+x{}+bHG6Ndyk|@+@-r=rp*F&VLW#=b$#r(4fIfSWrR(NGRvy zY2`t3emKfC3-ug>AMsth!)GlX<2(dHt{4M#@%=zR^%qZZf*CC7_c=^)~3IK_;oG zSPt3n4oe~(lvTzUEqJM5=$4@YIUogs&5`BqH=ij1A8h8&p)`CE0SXz87J~$QkJ-um z|8493m*+t|10TQl8IztQ80;BM+AXeqRdSD zP|PPIh7Au=5%D#^3~(xe;!B}D4CAem1SUR)@@9?2Wkm5Fv~1j@Jd|?_RODN^Nft91 z@Db4_8WH9>X0@pBR1kIF{-)I*26(j{UUatK4!<5Dc^P{s{8ln~tYJ^jCJ2d6LPwwc zV^^&0s-<^c=ePsQ>^&=+zR5A2RO618K)jV|C9RQYraw%}H!Vy(SUyaj0?Q{xU_t&( z28aGkIoe9bxx%7#8O)rkbf#lE!z?#28IJp(JtSDq$En>x+~?Epe;)&Wh6BSEMa~Jz zWH#9Ik#M0uLmdWvye zl%3z{W&3O2yDGhW@MM{)Ht>NkxLFUtYE!Il`qgi{o)|0SDyL`mTHvgTe}4qUFtL-& zcnfBnK{ZW+AnHhdcvN5LUK4fbSyk1XvBvRd>Ccb4s=TUlsk47WZ+GQg+wyjvPgX!D zmlq((ISx_Y6wDugZ)Gex6cktit>IFT44NaPTcsUUyWvE@@Py@sIt^_!zo4 zpEpdMw_sWKqwXK>TiyJtJTAOIoSLcoO4QYEb80FE-(wzsV|08DEd>-ISs3VS^J`Ri zoX;ayME#czE9xA$W2iwEzU><+@!Le)?NFTG(e@!R6BGJJBd4eNG@-y{bM5X|zXvn- zxr6J&oUwq{$LrwAnuAa~Kg6808S{e!)9c-E9V>#7fm z3nNYFd!520C>Dna%Dav@E_r9>BJ01Slf6Uv)Q-+*22p4RN9dstw3L?LButUQjhzL) zWH%H+qy_Yq}R{J&{ir~mpTLg@xLI3=tn;PgOa`>i&t(LW%< zAfqh>ZpjNK94$%Cv&{iC#+0;%TTd!&oK}(QK5Sm`qF)@t0{nXZ<_{P)7DwS*KjgVF zC+T^p6gs|lByH-#0DUdVR4eDyB(vwSO?H&j-m!n9jgI1}_G7zDrlz*B&j7rDojtla zlY`1~aykdp`Fj|+(iQ5K&k-;iWN{&XbB8ie&&bF$we$=fJ0TEi`}B&J87>`;2WZk( zMJ9#v_`7=_D(%CpKf|5Glat1>4G0RG6#*P0hY@s;2^O|jw&OSiJ3G6M@3RVz;~wne zx*PYz#KhUZ`k0=Nem#c++(R~Q{-{$=juZ4E_@!4V2gD@e^=qFg!CNH`ZS={kEFQ-< zFoUDI?j=*}ej_of=$q`ZL?aa$ZGp?;+O4jUZwWo`7u+j7pI}i@FcB(4?#)Avor*5Q zBS@Uh)oafwo1UD&mo}~WeS^*Onk}VFoAx$S+zGK{9S>_LwZ5QPl_Q&YV5`2Xf3vTbjb`G=4-OvWHD@^IxxdtjrWu!kMO0n`dmd{eA84+U1y@a|K_L-Yh(TrCzl&bZ9jkV z$pf_y@AOH89>ewjljJ9wYqYP%l0>q|6k$@pnkX$q_Aenpg5a8*v_EK%1E#6u4q*rr z8A!RM%u=0Y-PI$>IoB`nU>;v#WfO;4(RY)ce31=sjSG1HmSDIy^9@|^O`I#e2Exkt z0|nPq?)O^m+fY3}$`Y2gPap{9&B zMmSW}gM)X#YMsFrby0aggs4SgCYohggB6$t{EDhA>a zHbgm?V1I!|l4&hFWEp4aVx1CIN1mG*B|!4<+xmA)G_t7C-5dTZUMI`EdMrxye{PbW z$p60(o+@>amI^G=h7U}MNerFYpFGlRPQb)4;B|ps7gQr<)rqSro$-h@P^a;r(z2e5 z@R6&GDL2#Pb%>r*MU;hA*HA$D0J3iVX(8{Pl$_l$Uh7JX>wyt+TjDdA_2aty$H5_h< ze3wTe-~p~*e+c*;19{ZVDU_g!OQcdu^#cp!N1c>YX05r7Yuw;MN#|T?W8j6ayV&#% zw0K2O=JBi?p01RzunsJ^=#wYbfD|e~{g6ip^e_Fkj|)a1;7t63D^Id{PBa{C(Gy4m zVXu<>1b{aqcdETlPZ&n`yz0ve-yLNM1fBWm_(DReOY7=fz6OaPbI$%^-6;Au`V^LB z+uI>{&<#0(qpgn@NDf0(v`R37rgFC8K}YO+87A`z>HP3jV0&l6@8mkIC8#OK@A0)@ zbN9ZsEn3$b#lKPETO3bt!>Tb#Xwx{6!#a7SQ5Oa2sLBorxEM)uggQK9-zcZ)`jCaH zMXl@6y^r+|$5}1xdap;@sg>p|hWUR^m*0#%`h5U|1mr7`A@KBpC328Pp)+~h8MW`f zWE~M+k{?zi%a1kvAj1pgiIpu^BfDCIWvECc!;V}Uh6AOb(Z7--I_{H5=dT%R?Gh}4i$~I7Fp|rB=JRBi` zs-l@WeRAxWp-iH55lpCwehEr3-WtSO!sFj4P_mhsY-}ds`9mfI}NT{U#a{aasr~Q%(IghVxonbL!Tbr*A zqYsfPnMoDoE}Uo{Xb@vrEmMN-SrE6Y>28ZF79eyNLH=j%dbiAd;br>^vpbWK5$DDu zFckTc_KsHjyqIRhkL3l_?v$`|9TlbrSZqD3tLFV0ddbesKFwb1TZ0OP%FAlpfb*gDANl6<@V`QiA6-z= zc9jg3id-L!^D{1;87oISFJ1|yEN7jLPNzunBWs96s)c2VRPIRjjFqaa{0&C|#m^o6 zUiaz%47BN67CFd6F@S|BPI2Qgi8;O4-Q6=mL{&|?euYEb$&8OC&fVjgLLoMDBfM7ZfuY}=v zXC5~@iyPQWjUd(p`FPp>)r5>{*c41G`F`{~`xwZvy8YqI?mYFj{rJb-{yfpz;ChZj zPY*2Blx$vZc_5hq^nuQechv6Z)hv&5`JN$6#jeEq^7GFZ&V)k&`)Op45B8eFhu6p4 zuIHUwra@+zL>fZ_lK`5y`e6O879v7Awo*BQ&=re3P_Zb}mt340`Ax>%FW~D6(k1LV z8gmvdJnwfl0yj5OH|0Ig7@IxsOrGalkKS&?VH#M^FE*RTw@ZJbW4JPMa!ht*;zKocP`UAY-lM8=krh^YLg>`yQ7-3LO0eFhA7u3n~i$THpV)dl)JJ0%3X zfS6UgoL$ozaC_`gz;UZ}zt%}NiM&t-$GfZXo~@q1{^B81!A+42BA1FKpSL3~rclQn zUor2LDpnF{ZZznGQ7hT`0;_@Q(&@g>c7Fm}53+E<3}8GSK^nn|%~ynK^t+O>+xrB# z8vm}>?XEX^yoKU^U(5!-GwD4|rnPP3PV?7`5>SbT)kKCvL4gRYEHepw8VG!9F&lUrX6v>I^DD^A zsRi~@D)23Iv6W9*)ZXD%PS-Vcq-j@=Z?}sPtn>`l5MtZk8|7IKIlvS6u;RZN`P@TGg4HPaIT6N)crgTr z=EyHaK_s#@kMt^CIv5m1nENrO7m)S=kG_l9uaLLt{-^e~vd0x&gvHt_UK~DX=w^;h z(dUKP@%6m*ZE|`)yV0%gAQ`vAK-%1}Dl({9TZB6Ed#HN~Tf^R*Wh)M0hIlcw2F>`s z0VRNNmqeApK@$7Bh*AMAB;f21>31*4w~pjAA!W{SLSRb>y%lun$6qNM=CP2X!Sa`2 zzlpH)HvTJ7|H6Xg!2wc(!y3iA?x=qrtn5{|5j-36i2_AV3a?%3? zFxYjYYLdyFIOnY2;f*+2Y*ebbq~#>D#aA|HTBs8&Q=D0Zi#K)DqadS6W^#?```ZMN6X+D<*l^$=7@pKj#~mER z*HDm*I8g90C4{0W5pAu|_AhGoLo*A@_JO(szhfbC3!9u2)`(qBaBC2m#ni^q@1M1MXBTt+PIF?y}q?J;SW$iGC)a?wU)kwFxA6+-l3k*@m_m>My6wcjlL!+OX zQIafsrO8nNppZV(s-We$JH$OcC<}62LA@HM27wVGWB-tA;h{|EK;4RR1+Ep3VI-u} zPEDO?_l4rLTNpcEbY{DYr8qe11ufQ*#IwmQOfeif67 z7AA{Q!l63`->a|}bp$EH(FLeVM8|Qb^S6lqwJ>TbSif+1vEVm9gnN8@|E5V{z1k3R z>z4heyfk-wm-rrPYQ+P3_Yc)PJ3E5<+6vbm-|o|y67YPn{WZU8(DS8id_}r$w(|*E z9e}B?8;hoz$BP+mfYK@{myW;)?6zZ9w`*9?+LKup$mH&M%;|dLotDzZ(uP&|W)k|m zUnmzFTQA8~KMTS`| z)(I^U?qE^DFJ06nosV>+%-=-n3tHV^=*Mb0{L!^X$$W6ny)OP+`w)5Kim#^qqWquh z#33t@Og1RTdujKvWp`?*r>W`Cmfs2>Yx`wXNu#cN>|6E51!TvdIUgQxpLUGU` zHqGtTgapZ&9`dAy*aW3=(fvVb35kherVQYQHgAwa5A~_*O$zk%Nv4TBa)zcc37A@O zd_ainxzOgyVG}V$`@79R$Hmjq>m+L~+{R>p!KRE~po(U0v*L59+wJrEP3QTFzWuG? zw2J4ra1LROZ`R1Q?dX392~Ua||1XjLDT|xrbjKf7_bp53hvsMBFD&lNfjgnJCPnE7H!3ug zs9h_hppTB@rRkraF>_cf zQOQ9v;0HmXr@%wtYkYOR{5Dxqy|yaQ7?G<@QkFN|UYdi*mF+v60T#_631|g2ZqMTy zw&42l6v6A1Ts9dy0mN#;wFVXsI1qJ^UuCU0Xop$j@fjS0=~wElzP|IXA&?Ex=e~;a zb;ey+*1mI|EYg8dnmrvZ^tJ!4%BwKy3{)=-=`6xswa1I#YO_V0z$1!lu}L_D_~CCu zFEA|v!oNY7E+S#9g9_jl%>`aCg0jE0RJnk~9g>@5j?p@uEC;vffiUC%1z^5MBz4Xi zY7rE{y!j@x@m}zF+hEp%;_pgLq3pv|vo^W`>1EE5nXUr>nKh8&=ZcAk^_5BZugAR1 z5tTtxd{)>NnGTmek4Dr?I5H)j4DUhu53+f$_)MNF zu-N$=0z`Um==1ceUDIaxB&=d6Bma-X-=p^5C+h1y)rk4PUaZZ4h`nNCJgRu;G&%Ff#C?t+umNx}f8iYuaJt!e3lt_6Yme`=Y5@3Q4{gPDA_8fQmxi@dg1jnI?^+E?k3o4 z_xs}W=159!WG|DIL3Rryk!c!EBWZ@hO2Qo~>4YH!tEp>|Ko>IJku0mGeZHHH2|1jP zC~!6>OS9-`+xc!qu(CdEOeDIePtoaWLnVXIAE1kcCIK&N1}qjPjs{zzZ0#ZKYlr0P z3_JW(EsdjQ_zU1Nkfd5%5(P`<@*RG!w z7F)EER_H!#9iuhLv<-t5&Qytobgoz<;2yGj{zhp)=saQlYaTC2>Y^nvLFa&@vP3C(^3ci@<7l*!{Rsw>PAd>4385g{=GY-Y!WzblnSy zZ83XrLiX;K@`cd;C;l>{3Y}~}3#lY2VZ?V-5PqV&aOEP|G@=EcH8l$k0*|1O-wjXK zu}ke<)4Z$w+H&{krq40D_20G#E8<(@Si<9*F-2dfi69Eu@`Vbh8gZbXrbiKlA!}@m zD?QTJ@TFy`%{QWiIy_mVJlxewQ$DX0*Ww^SoT%lD#mySExFdODH{0psS>QOda^?SH z>K(WvZMUxN7#$}a+qT`YZFFqgwrzKkN;d$%LH*5p#c zS=6JfF=NpT|NmT8{eN>ACi5^nBP%Dj^%?5{dTif&xLLplX3K`Na^I(&0spi-5nBP?;QWnww}BaSPEQqtJ0k1%g2&9+>w>nD?wHilPu&@kRVhb2lf1pQ!U z7?Wp9=dX+@iOp@iVRSgoceXm78s2(8&R4yG%Gc1ZeH2&wFe`S0;#ndBI>j>8YtsNy zI@QA3S+44M>|!eA9|;zL01{nWVli-h=;J8j2^H1t;Ef?-32E48iz+TRo50ywb}Ue( zN*HhAen-#o`TYK?kIO3*2=eZ`T>A#MO@hDiQ%=LxKOypf4eR@P(3b$+C!oJ`VNC_O zc?$e#bE4()8N)o^4-_qVf5Y(#DTANcMoxOHzaJ#^vP8Koh>DrNAyBUex><>hDSQ;6DV&h4W*g~?rXCSWT*!KEfN7aY>Ur+Oz`Qf!O~vvJj@qVq_HHZWB{Tc z$-rCiF&k7>nK!yi#f%TjjEvsBu-?sC%|5682aVo)zq#{e_590isr_HA89$W#uSp4z z0bT1*GAia>jWJ-ce95Nrb9HoZ_&tJQ%ZO@`_}WPl?m({lrc@q|O)nyuQjG)$ozKy* zIe#GK)-{`e^W8}6%Y;6$jIemgaM`nfg72-X&)>iCNeJ)>iqxr0p7HV$#Qaim1tE|W z;ZEqcF?2FF0GTRvarX`boqMlM!^LidhbYkl*bCLVLL-U|9P_*eU^$3CKd=1yuoZ1_ zJ{{>T-b^YCZIKeLVKr}ol4SxJeUMXt?fSdLHowoVO#Wg01i^%JwRZ`6IJ1^r72JTj=wY>%r)5`9G)R}44HkI!J{yBij_v|H%K8YV*$Vxc`VzCv7u<-d03P;lj(?GZ0 z@c`Xj&CBa1K-k7bA^ljyaxw0srKMbxYCji>5?Z%8GHTS&kSubnBA1u^B1D1^p+M4HPYaPCT7eiZdXYOIQQN}m*E z6PlqrUmJ-2X(cy8t@&rqR84D=MQp^uIdt81k!0W#(DdC%HbgmzZI*8O;%Lpf=FolX z8oDw+)6mZ_&Z%j9;hwF-?UF=2EOp3KSIcZZjrHXKT0k~Qw3z0XYE6+-_QP2V%7TxV zk|aPC%D~45&rpkwekS?o+j=u{+Eo87UmWT06lu0>c2&ND`7=dkP(5UW+khN+V~8|B zS*%COIC&D8&{>Wq`ERnl7-z!a^I0u7+coip*yC0Hko(a&cm&P<;X0@D$)RHAG>1_Z z5oC`6H_SOmIQ2A*Fk8ec-x22SD&X7af6M9Jy}s8E{6?)Yb#r35sU?3t;?I>;7D7d8wF0T{ey#8 zxSV!<$#MkFFYG=y&iT-mj?bf@4nNBQJl$c+Lt>V|7T`o8qQxjZn%a=yVbTd7JX#7R z>P2bnDs~=+NEH}Na};gIUA6eb_A|nvOda{6ZGBTqSHd~^WB_)Va%;WxcghsoXu3_6qdUtoO z4^lrmc!`wzqO{2rKgyz;c&u9QTwL?KX*=iliUIe2OelupW|21ap)Xu8Kwg7?{h2kd z=Hs7|st!CON>;fdBa$+N_?|O$u%1pveD}D>CVp6F^SO^XADP=Q48zD?9;=R2>I)9M z%He{J)FVX&gIFVo;8FUG&f;<@^RFK4eOR}9-Z~6cQzp=HNYQ{V;LPCjcibiW!Fu?& z$E&|Pzxbd1dJh)hfq=!cW&0m6$5mmPYi3SXXn88YpPZmY*>G8_!(+0D;jr=NIyL+0 zqG!+^2qE9+t=S{v4O@X+(J`_At1{TlR^i8%iI_H&2M%fR*v ze{*hqYV5v>1>NTk(w5{3AtGai2JJ$*snsIQrhInPm2)2?CKC^fbQzlsI}pfaw<7+E zNF#62vR?eagZo8~Hh}0=x4UxwZP+Bo?=K=qRv+8` zC)<81s_F7C4(%dtZmA|c^8~6iUgu-JLK-skg2hwh5fnp~-ed-)oC0IH?@hfSDdp%4 z9p@+;4g>ouUgK?zugu|TafZrbY!Ra}1o*55f9&V6E170BM>K8e^Hlb>ynAM#x84L8 zx(;aaZWoTUlvseCO`hceG;y)ne~T$U;r?fpt~`*?=dhRmm4m?4M!cNGrl#vW{T zKxWHM#KA4T^v5lAsh5P2d{8}I*0iyMen~<8x)?YAUAh9-_zCq~k@!`xDfAnqDpyy8 z3}cTY7uooMCdJ6``{Wdu4V<-~WnyTmn6AbiPf`kl7C~KM8h2-7{NoPDrr+dbvz*D# zq4$2F_ivLn+tQrU9y?ov@?bDJd`)u>er?Nnlu{jJG$JEegAGbxDR{`Ih~sjKBoO*R zS4c-xrUmTq3juVj$1(X3Ep14O64>IIUm z!B5dZL1-%`zIM4HytBGM~&iU^6D27WlZCkilyd#v6ncB>fysG*R4z%ABY3gbE z-0A=`?{#8v_<2Kj62BEU-Fh~~zqA;(KydiMIM5@E8 zzV#Zdv~ZkCaJhX8h>g7pz9{)!8LZ3?5%8R>P)AaK%Nm1d-P8eM)tYDf#dR=R zF~kEdV1l$Emv4?Ad0cq$>2MnXT2@oW=1_@R7IZO7TyvmdY8L~BDg@TcHe#+3Zh8L15UxB*(Z;mU z37+{`k{0r+L?FoLp4WB+57!eOXS`d%wYJk6^_lj5uMK=>uAD-Ope%)CWamSYmdV*U zLf;b;cfCQINh6XWG`xWIIn4!T9h$u|d0${0mD|0NwpqX?Hq5r`_i*Mlya9An-j+;W z0U2tCw%huVyI)BDN%p=+XPp6Uf<&@s<>a%ZE+q)?%PGvrrF z=Lr)^pw^qOO(P3%3X(XKn#YNh?}dlfPET&}rlRX)@@O{*!yar2TKEx4&mBzQU=2 zj$8&kJ>R`bt+^!D!kdi_y5mb^`~{TaLSPZ1Unrk0)}nfQdNAyPFn6Uhv1y&7!R<|b z$!_~mWj)@0T|Uj+qG)Vv%vQwi<9tdpAeJE#1ra~TnD}Imjb;I>bQt2KzPB>SUXEEA z*YM^KP3AVxJB1J2O#oO5nF>!eCj9STmw~{`INGo8T-HzEPeEfh6`*SCzl>l_RE2+k zGbP5R)}Z2z5{H!rx{-G@IY?7!0A-*h?LoEZ$|Vs|qHJUw1u=z~q0i_@WvnoyAxB1$ zIV*9IHlbBACj5cv@vLf_@V)Dw=eBrUt>M8ESL8|+AS)ax6$0}rXRD2tyi_ zOEU@uL!&A9!-6n+o3!+FW+~w=<-E3aKr!8-2kgC-E$w}GU_ai<8DN*yb;Ayrz z`m#~f=GwBw)BCYiUT>_3Q6-Ccaw?I53bbmMAC^GzPINPy49=EAR<5ChCy>K{F3dU( zk1-*GZ={*NkW6?8XXeS#21tMmNMQ)(B2~f3HM2-nrd^gY{zC&kA&x7OLIw|o5@%X# zE0RXu$U{p;27m0#l>@$Wic2tJ-t#FX@LZj($*c86xhYv}+PXW7c~chepTzm`nZ4>c zWU6RCM?qvGJ0~rCnoaRbE8GgQK0%}FTl{R@G#66b3L{OHd;gwZ*JYM;#bca9myt-unFbwn z(BLVukRuM`UIR)}T+udsx(;LAoZ}`(|5=OyXe!Et&HM?JGdcpUEHR+4Z6Ujl{#@1k zSR^luI$P#u0j8VvpM>&08#Qi&Fh8QP{UAx~bU{zGjFPoV`($ABM`|e@9{Tq>N3c=+Jo>7^97AprIo_$NRE-h3Jt%dZX2I-gsoU?&*5@fs z2MC122S^9IW-lq#sAuwfg&2=K)*B9dH#RoL%i|wCwGwY)7H(6Q(7{mu&Z-S-0j)+S zfvm~F+hTuseM5TB^Ya}fqzXma7)}wUm=syqNXLLqPFyxhr0LQS7x$M+(#lRMdvyYl zvJFHVGB6%m6=k?$rDdWeib47NyO#{H*1~RTjW>Ud|3k%1SN?mZ+d5MBSbq2ZjEBLD zo>wkLm)|Jm)|00^uQ9H|TPQBqM-ZGv(|YIb)7I#vy&rUz+N)#muxNH5Div=CV&~o= zfP6o+pqAf+Yu8u^Uhpne)=7 zWwX047o)t)E?$nHEurmmIp9A*DflTQ@V-l*QlT?;hbmt-*^ZEX^3V=nNT9T_hj#U5 z4TLv!0Kpf?AF2CfQrW#|k|=+2uFDqKO>1HvSy+mIPn-pUaBFLtOqRu7W2k7I_}v@{JlK#cyBzea#NA--JMVIa|6gU}iF)L?=vZTJ zrTnt6;xOUjs7Xj2EeJhWQSq!tDJ851>GI)Yw{_KAc2Qb-aU6E5*s(=AIqGz23w}JY zeB3Ef=itSYrpb?|^M9~j$|8Gh1ZyiH(z_N|qOf3^tUOX3nAM55H8W8rU% zfM8P@B1(~Y4e$`;R^h@iC7M1+7Vvfx;^KJwp~2vUCTmV$!?ruHv0?x-zwcq0KVBNW z`zH3P)^uLo>OtwfU^=bJT(O*UrRzTkZN`Kbe-0Oz^CbjtdAfns53^dwBy@qZL@^Yi28TcLh(p1f z{zf8EiD8S8u|;q0M{E=-Ka|DCkWMf-H4Zk{<%UQNO1FscW!HILl#%&HTag>gm&k#r zPN*?-?18DKsSw(O)H+UxGx%>D0@bh?hs&X(yX$a)Bqeu&ds^6s_;)@n_m&xECLT-w6yesSy8D}pp;+d>P7$bNoeDxj5>Y@HnlC^#?RkFD#Yf)$1r)F7_aMOp@%Xm*^(sR$-F)6hY7 z_2`q)8lhDE;oD z|A2`gc~|mQ=AP zpX8l8f3&ptCigt==+9^CgV}QVE~{6!KWY=S`g6K(d1Dq?(@fIS6{!ZL1nHF`p(n%* zT4<`>6_WuGG|l$gLjaAOf$9eL0=fLuLr?8lRB{CaD&uwJ(x~YIG3slW4fYkc!Siz( z`;Yl}r!DUIU2Fya?$kl%VX%ogv7vuQE5FPC`Xzr|6B-lEAfz#KH9wT_zhMZTdp51^ zBMJQQSblnW%-uHkG2s_#dW^$M0HAt)Hh`lT!+YlanuE}R2^nJ^e#N9U4|S*wwbhCf z@%2fG`c1?layjS`s1O%OH;~9}0#21`kU)$kGN)%+ms?xEVs3cTno0rNeRMO@a|g|L z7RpGh#7u(Dcd+4H)$=izer4CPW^OBZ_PudDAr)%sl?z}tZNN}m^IaYc7G=))q)`M) zN_dBBU<;g5uR#gi=?AGJs02*0abgEY-FGZD^ciz4P6eprR30hK9ZsE{~#l!S<0)<-73LZ&Vu;ezM7A^Y=ojQc!EhmWY@1LNbU=DA(b z1-bw}JyLmK=s_S?KHP2v2x{yO^h>I3Uo&fK8hw5yQ}EeP0lxMUKF3A>d>e<^7bM`F z?vZd~qU&jMCKNMgBotF`bok-Sb0=_X< zKbh#a?Ak@ZvZauH;!j}1L~PGB8%JgSaJ@nI;@{JXnxkr7J0M|~97*uQ=(6ogkEiiD zd&WPc{QLV>_IAKkyC!#tp~r3OpDN=DXg20pA|JK}ozhnFJn+ZxVop5G=M;`@MEC@$8mZ905w!Bskr2E2Q zmNP-n@ze9$8{%#%1vVi*Ia1oHy9a0cQ34qX@ET3nWjx@}xn*(P{p6G4RysAe!RP&S zX})V9iZzS{xDKX(;BJzR{Y{ASV63i=2^$2p?rwK@D6#n9dn6=?3iWv8NB>(oWE_kh9`rkF! zw=YAE0Mp%-AS-IFM;S){+@Z)Z9vyd^1F0GB-DsDzBYmURQ~jP*Ql)+*0j_@edqpuMcEK7z?mMI%+k(q(I=ZC&(-IdPONk zJ|iQ8NXm%L28ciaQ4$m;QKUJP^S=#i(0|L?ex2{~M*5h0yeKssvEAr3X3C$vF83fM zmrX;FlIlYJvy7PWJ^83uS}0HD(O0!727!!5Ob4}CW_!tEM*I+Cy#7yrp$XrsVYpt; zR8~_m%teDor%2JPK_~P08bWF9Q!i-u+l3D3aT6&JfCkomeWKv-fR+~%I`#aFLuX*= z32KPFM`iryjyhF(rCI@?Y#4k|=RPAqS1Q}2YTO^})g{$c&gEf&^m&Z9AtUj;HQ z>3wO|iL%o!$EPHGNFbG!P?6I9Q(`UY(FU$UOME0s@$UkzTE83aA}se+Rz>S+V*E}u zuYW+?dhsR)JW0s@9uKJXay98C079HanL(*$F`@`28BnR;gAdLn?(}}lJUl|lWx8pm z_dcn=pKI?8E$DU4rLx}u|LQC7@{1AldgF*My`s7s$9Si=yX(FPhL|oTsusrKXLz4M zulv!;X^NQ#8gnuCvBV$H_u6J;DMYzh@ItOooX44)RoB|=8l zZ`KwMhyeHZRqvOMneA~2!5hvT$6>eXj!S6( z2c=flPm^+HsRp*;v@$uL>zb{JjSUi{bNf2G5AANJx0c^a;E%p{Z==0T?(d^xMGwT7 zdcBjAY{66qmmLJf>!*b>+KI^-^V>3L|Enr=nErZM~kEwi@|Xa3i_#!9PUkjCelbycc5bTTDZwWwxT zVe-E{(x1HlMu7;FniOS&FEWEP`)MIt3xxp(yOL6AC4(O!+KYc< zewyEg;O6x&_dLqo+DUI01EVy44BKtd;W@5|^VZAE?lx&BuB;w&0|r26GF&u0lu`t} zOrywCKm?`F6V!TfnxnS zaVQ{dO921|GqhJn0G*pLc;p(<|ti*raYVVpn_(z;s%Pze~@Ui zU56+EQR${}{2;7~x+g^l7tJ^0Ks{SoMchK946dGz=)7+G{1&&q%!Db$_FoktPtm9!Nkx`?VFclu%};hp(AO) zLkuxfo?b&!Rv}J>W)T(-a}U%H5LPH!jTU1+YaWm&0D&m|Kn;o3xE^hj!2>x%i{yl$ zm1ek#sFgNv>5hy}m|AX#BnN)rQ=*NJotdqpY3tr0D<_8nK``=04JZiNPpzegu0qEM z>Lt`eBpe=K;(&h}G>rI;N==RfM9maCXQho05f;!(vI?c~uA~_tQ=5pXSO#23sum+Z zgv>Wr12F$WI6-JBZ#b^!g796v%=}gOI&Nuu&~ZnF0DU;6ntQ0Vxy}ip!b#BPuGmE6 z#z0F}IdGG$@Flz$G8XM(aOLl_@WoqBt)ydgIuRk9Lb_^0o8ZkB3D?lfIxD2CDjpeN>>PQzI>6*-jgP=`I{|YXWWeN`k?quvS8p?~E!QkyCIGX4C z*7nYfv`ekfnHKqA&Fywh6@BM?Uz9OBi-K1wS`J@z2viE7^_MiYbxlqz2(LD9&i-kV z))vQ!c4~`Jw=h)|}nAYdMxr@vN_hScgzzvF=o+(mb^_vjMsBvhjMS=lc zME|Z-Oxp`2-Ohx5SLle|$4WBvoQOh4$nY~6^b>*E)u%7nJ~_6uYi4IBm~8?hz#svBD5BpNW6!tV)%6yqVaw8e4vK`hiL1{o+_tYkXwU>x~iDo7fNQsWNE8h8&fDZ<@SRa)1GS3Ew4 z6b0W$XWhpL>$cCxWz8x*T)J#obFQ=(%pR40^asV~8ndrX_kVc^|Hu(N$sArDuq{g# zA77Z0PKAXWrFvUo7t$g3$a(SmkY9Tge1z){RbI|9lVe(!m!*URW?B!-G^9vEP3&6g z;Fd)A&6qGYm=EX*bsUThizv0 zO*fj0OO{~{)pB;9p2<7#lrl- zEbIb(_k&z^YV~*TcODyR@kf!%dQ*RG&$R3qS-c(MQr(a=D2tWC4;R%C@dacn8iL4) z&M6HnLumhKV)502?FGtp*d9NSdO7xEo1Y7h2S_WLnwY>J261X1t;}j+q@`1(kEhU@ zmMqr*1lD>{f)M00!uo z;7=ZeabkI_hbc2H;_6(j(9TLrSDQ`YaF^{0PScLV!HW-xWI+3!nd89MfR-+-Mgdz5|W*`N0!8_$*cC4BV+ z6D*ZL&>@Kth%O3oRfMj1v0sQZTXIoyggANt=hvqk-)Y#$?S*%@gc+MDvB%1iZRb&w zz2SVAgaM1gf_Rb-n%;>^dF(eRkJXCq&-l3g)W9L$OKH%RTF)Fxz6TmRpRM`UgALZ_ zKi*qo;7I3YjsUSS7YkJuaSHKkT7u!zBGqg+d)OlOBOAfo3Bpf@Y5qGroInNp2d;}H z=CvC~o-q;xtr47JNyvSG(y2UbQplUX3nt;$yH4Bdt##XF7Nt&PloAcMR+IjJ2zQ+S zH6bZJ`;&5F4fJdb?-Uy{Wgp?J%OUFpT`S`;zG>J{$E7#9Ac09|m;}{ckSucD$pD+~ zL*3XnEkb=XD``$nD0SDe4!`fYpJqgC^P`I6ugip^v{)8cI+*!IZj_QT{9*!3dtnii8)hnV$=NFhI6q%fY6qLcY^ zGDwz56eH3v6fS_WHbDi+F%0iel`&TL?Tm6lbe9kKr&yuKdo_p_=^2^S_YwUBES@=D zU(;nu)!9bZE)z$ID1XO>r2t;lvu#!!Xmpx$#>g=Rvut(TgRZ%|Yy01Y(^D@4EE3QV z=XS|&Xvks6bee5?5m-!A94}wYYyAcw^c0Jfb3qJ$#l$LOw<-Myp{KJtLgzE)&b~O_s5O*o*P(gvnCxDt$d6# zb_ly7CY78Wq&8QTARE^%E{)rPcGwPnx?XDW$&i`$##k1(#8wCTxXNBNa`9;X(E@gl z0RJZi2)Yl$(<+ZxXV)qRSJ4gjI5n{1{<`?Rsc+(W!xfjUh)cUmW-GczF@qqqv#Ud( zo&-AZP295WK22RSSEu;I+eAt@jjUKHBr2>5y8VK~|Lu_R4-$0oi9@S~pOJx9Ntmy$ z{paL%4Bv$%r=Qv5j$c|F{ty{XX0WXURw8ofT?_~LW*=WBjFPAPZzC3>hQ5Acm2b90 z6GVVujGrM1E5by&gy;Yh&!}luWn~+MJ#PYA^zTbz>8O^E_Cw%)0mA9sKj}ltKIH#ra zs>X8)PLIuI8MO1Qh;ZMP(R+0)+-K*4aQ8+-cWAijY=x~UkDauLt9c4~`=c&7K2t}V zq%?*Ww^2lnqP(#`$CSS}7pLfQu}u9Ge(kRFQjPH_NJ1dZ-tP(8r9VNtOK2w$?QaGj zxwH`!c=Q;83T3|j3Pzf#<3;L#um3KbUu5Db+4k$}h0ifK;XYh`cj(XyA{UxR9?`UL zVWR?x`sg4?>H~EuzgvzM50HaQjV*%!pFO;GP{^JS1DnI^zkcbIA^nUXNxkW0trS>8>I`Ntfz;Pa>8W-YO? z*$2Fg3@sbw@b9$KVr>;dZ1Ndfnp7MuGew%g<~}E72q=qd6U_+g8Ckj#{5ZriB$K+) zz}5tSb{;WRdPF-vBID&R7PUSo(?Qu4<2ikR3~<%-2{@b%h^yu1?as+(%}u4pbf>>7E4 z$N-|+v1Ay`NJlWI+=BY=!E&rrMFR|(Dinw!A#qe1J|Ql>P|4tH1&t(;uUyRrmE7`W z+P}`1Yw5>6Xx;BVk-GCI2;9+Ud~P3Xe)0~LexBBN+*J4_rygQ(cHN@${Y{F#4(SE) zf6jZlEpaT z&ZG+7bIFxlkxG_POW1Bo%>VId|NWnpi!&SEw6W~)t1IuApYGvf4ZJGdL_Z2xk7{$R z5!3~`6Gfl;im8YJTna!lRtKW1X;3L%lUh4B!)l0W&c*60Bi8KFc<7m_O`5Ls@b|Y-N zV#kw!XMW)Dh+V3B8mCz7@y$$@88~q6h z0F*Q}F)u{+9@$C~)vR3}(1%wlt@7i0sEw~)@B^BGJF<~@0&}A&D(li^McWjtGENH) ziL%9E2Y^h2USFM4;qQrlqkPd)8!l7U4?m<6RW6rjiI|k~%IvL}W~Xc zc*kn9Z`!m~gf!H`8T!2ekT^qD?V_d4GadLLSj<-+H}4KZx4zTP(TuNH#eVF%4wO%% z=2O_wtR++W4{!jey$0(TvEul-lrbC0`U5>Hznq=p) z_jk6)hf9}sS2*-mMQGB+*-3GWi?vZqktNf|5_#+@E$1l|5E>e?>gr%k8pfyLrb&Oy zY1=U~vrl^-cS1~k>tsUNfnIKtlc#F=UxFl4CKFaYB;bA8|$KY`O0?r?HIurxbN zpmLPFpvj-OAJXOMztw2qZG>oJ6Y`c*#|J>##_B*P>OljS!fMwkrS|;4zhbd&xK}wB zQWef$zJDAEewdzN=6{eh9PJQ5?S6~RgypDO7j0QD)h+`YI5i-K0BOE3T4f0OZmd(R zg-Zu**pX6>Xc2p)BZ=vfmzWK*Tz~DG%_av^B%od$xeuC|y7z*SW?RJWqGMZ};=+TE zr%}6R+W?eXIsUS?xzPhlD~dQZO?_;FoZSRMW@llg(S<6SKyaYC7yv{&DNScLfZlP) zk$6HQ7n7XnaTfV<%O_zzt-brEGpwEi6q~Ymr->^4zn@*+85WgAHMSI4a_UZUigthU z^?#kRpESjxRcRFqbi=s=rhK0SdsmM>62wj6n)&g1O<^tK;sOI7t>8vrvGRW#a1ZRt zJK`C`;cnkab%M-9W7)?fmqaO-#Z0rO9nNZB{7QnDNiIH#)T@+|FK2mOa~NNmw_qE| z$j?3+Ap8W0Lqlex*@4@02;ji^1qlWh*()hz1F)z%K_VINo_RgN?o1+9i+XuMoBhA=>(j>T(rd1a2Q0cyr$k>7-BW4-;KpL9K^jGu?h`SOnhj8!ry5~U-hMjPRj;E1C z#?gGn!r76o+!Ut*Rtlxvn0a++?5Q_k$j3%?nJUVuiKN88T@O?I=~f*{rq$ zwJ{PtDX_73OEu`n0zklWaM2~=u&O+SUkRM3QEJPJ`taT8o_B&hORJRb4sXs z%QE@$x7`Sm40_<@zyAyCeYiPP5Erh02*ggja7D-+o`VT%J}d1o-A$SiES2RVY2PA6BY6p|kxO zPDVp4_b>)338HPCq8##(u=q%$|2b}6wf(yJWo`F)o}OV{#iU%m&v`1jEdqe8`V5Go z1r0uIm(*ZU#DkhO`=jbsGKKbJ97Kq8aHV$X$*7=!1 z6*+(2b`cKVk*TPh-S|LPu?uUGc}CSc<+!ZW_fGtz1O1Hr(}T|-Y=>5cr_nn4W3S{} z;9z|@jG^&5Mssr@gETeGAr6hyk8h1(u{z5Q?lXo0*M07Hx$B>Cl-<{uo}aNZhDJ6y z75P5wEt~JIAX&WfN4WVfB<42jAies2f1~-X+O0uW6zRbowp;uhoNOAD^WGk$+%D!E{# zR6>P}KXB!*|Fh=4Q~z(aIy67pkQZFUj!moN55*U!+EhPNPLpfgG#eTkn(9W5c9FQa z{1W1oEDga#kd|Ym{Q3xW*n7nyN_OGc)}X%{?&wkAS+TO0~v}h+Nx-L&nf+NGpOTg zQ=+j@OK)MJJZsQGn!NA4ZnLtvWVPNA*Elwy>#awm5R>~TCY)7WCp-l-b2_pxgDff% zioZXvP^DSSx58Rk}Xp$dfBg#tz#@MhQ_mAQTxf?|VoWM{3keR-{xTw)&6s zcNPu|{kP$CAZyMKSRy1$LC@nW*7Y|TV1O-^Vu{CFN@wfPhe^&v3=@0?K?R6-g#|DA z6DPAF0}BQRrfJu7{ODCl*F>ZOlESy*`In)d%hbdr2W7paYt7KIY$|Uc+;iW)GmrCg z_-wV-89MyR7db%g=wk1V@B^#VmH?_D|9MoyV{5*K+mlb%W!Ms=^UT&BXN#!Z=Xhp& za(K*;iFeuRu5aDlK*gv&#ZeKTC6iG;TCA^b6LtL}B8ouoJ*Nz)s?bb)hu^>d__Q1be-=ZyX8k zj;%en?(|HCq(VZ4tz%6w(f>2V=KrsZgDHq;CUF4K7Rhw%|HkJ!(a(iLiYGo|UOSK@ z1VO$GWMDYZ#oH~BI)|m((Ava+XXQvzi&pRG=(1!F0e%w~Du?a_+=lPf1_o0wsGdH);-l_(>zu%|Zj)_;6YG>^1Z0KZ? z$mv5!6Pv|`99P_*K{?iWf$GUK;9FW^%KNupr^$x%GwXO4c!lbWzhtl%X9I4U5KiZd zRK>4$S@U1`HfzNM-F~x=SaO^-t~G4jJn0*nnX#H*@?>Y$8~jnh<8nzTqLs1XCO35| zloC8ww2x7&h8p-m@P`N3{z&8wJWME2q{=OqPVYN@reT_6->*M6(R5#l*jX%Dvt`Ta zj*zQhZ`#E(#kO5Z2p(|Hcz}`%8o0QC$p8}^E?I@F!E>-MaO*4w!+i%h#AL$H$GQ!j zjnc@f0U$GT0io-^(I~+&{$gYbvb-szT@nTIcKah0#iFvJsaR02bXtj%57dfdKwK4woOP&RPH7(KEGbE|`;Q{De03G<$;; zd&7JhsDL%{45L0k5O@?Yd;fM>Tdyu($5Lv^F#;1prYr-qOp*X9gq)C_q34e-6eG!o zDX`~5@bO#1am`W(Sv|7tP^7ZD+UP`}-z34~ST*o)=MB|RIfP*M&kf=2w7X9nEulB| zjPD~{C0E=Z9*KzEu_XVubje@;lD_r-=eEMg32)}?l4rONj&rs>OFGvtj0G*!YxM@> z9PQ0zdW2&FE7^BTmPc*4fM;!WrX@`31xtq38u&{Y0cIdafQglLsY(rB6)(Rs*s}oiyKBRKz2$t5kYr+5h|_J5ikNQOFZWc4L;WZ z-d#riq!FoM%j9BcnE*j{ldl=N$!1~om<3aKmRYRa0zz44t*$~mqmqRY0KIHQxj#90 zec(<7+)IOX^e*MIYYA;(y4JE;Xh$e(SS*0i6kr1oO`nAvmfNcTIaBP1oS7Mi^LQ9_ z2&u!*Y|SAut>h)EXyw%b>R6Vg^Iu8muX&-2(0 z38eIu#GOB}vu}8gZe#5~0#dJGx*s$1(SCQ1Uv|}Ab-=000L4;IeA-t(JnK*!NB+7L zxt^OHzEEw~6!jX&wFFb_-GcB_ca& z$%H`^fKw{l6qnBd@}}Kr*V8+{|NCD~;yTM14(b;M@lp%&I(*Qj+VCJjL&@4{HMdIOZtY8xMpp_PLu&|<&yI2D9y+5b zfS)MIc1c#2#5B~8sunz+eVwEjxlyA%Mm|L|7RdlB;dh4pwkK|l-^+wT^-OMQ%~9w~ zXHsiV2zJHwslGSt#ZWM1@G9Q~x9=GiT`0)=Dzw1Z0K(K3oHRBXG)80FR%5HN zZKrWEQDgI)>$;!ky`SUzxBt!@Yp=b|wNCU}Zy9VpTVJoHjn@wu8Z&3l8^fR3)2A-Y5}COz<0*nLkMq7% zWU{lf4|PGIUD7%DAZZC7^8dr{s_V1#pR$c&U->>e_U{q*gY*9>3&Htm3$ZT~hqQZ* zccAzKf_~=~KjqQP5J%`PvaeOu-{K`*OOD*XNZn*nM};L1JwVRcipoV*%P5pb?ZM9l zP=>$Y=jm3QZr~^38T&G3!PEx#xIq&l`S(l5)^1!l?vJRfRYZPl!=SEn<8#`A<+GY@ zjheghXx-3)qn~r%!7fQeOz6Q(6b)6u>38#7-m&Hlz2z1;y(>r5l<*_FX}&d~D1x`~ zsn<<4KFOI5?~sNxg|p1@iQ<+R-v~Syz`k|$a@+9gziRCw<%;Dp7>xmr$sl ztNro=L1cNHgVhbqwcpL5^myzG&tB5nX~(HxcNlS5n!M~DGZZ8i#$|q|eP93LmB5X4 znwBddUb9uq&L1wPCMQfR!Xv+(GLnS|GJJ*S0cRV6gx|PP&+JUrf5wL+^bJaGtU+&e z+;kij!zit@hm-I(o_V6O%1WsA-~XCeIJIOd=Hn1gG1t~qs#&L*HYw7jl2@x&_=3y6 zS%!{++{H9nkF4zFkrNAgIub0!yFYSW^WHBc1NmHdiin}J@w5ND0Hk4?Z6{_D2aBzd z+reeq%*-fb6+w@FT89ysF4tmgtsbZ+PJk|;|MvZx2^p~@_6MxJ+>R!Vl_>k#1G4`-Ws)LMzbKK?y;Gr=9(k@JMrd$un8&M?L2Ms&Iq zvm+n7e%_wR`>~nJ&aJuYZs>=lmT0rWR`;`1vq`e5)Ei;dJ)>2I zN(J~=_d>ini;_ONYJPz=3A_!+8BA#^jngyMOQ_@yT?)KmT^;1K_eL$vt_v4qHMeq# z2aJxWOQaAmeha6%Hrd*Pmy3298Xj8l+k)~w#AizuqzQjc$oXTV<~Y`7Wo^7$^yO^CNw9PGKs1T z#ziVXFE6U*Y!oPE687`huZUw{yXa~Z*#z+3wVDay=%>)(AxKACf44^X(f9qthfGp# zG^3ndzb1-~Mhf1PtLqdM?pL;lUuO@U8X{{0n{J_9kS1R>*4JwxeGcd3#3PosDaN-c zjvp`bzrj@B@p3(03SvBeW_gU5AUh<(%L1dru8xPxDfiCAkV0u4H8QbXs*q_>$zUg$ zKjo%v=z|8EZ};w^ivePvl3|1GnA-vjEOMfmh+%`UyNQhv0(cykp*q?g3z*nCfuFo@ z_i};5d>tzsoG3ihb-RBr-pP6Wp5H!AOif?mU3d$ef&qQimIwEPP;IJS_oJ+!h^RY` zmtu5X`}A%fCFNbMU1pwYu_5Boky-1JU7RX9v_|_I>EFGEMy(FZ^46o>agQZVd$XHz zU?uZp{qMPg8r`UcWn%#i)juL_!WB&j!N46|h+#D1!+&^6Ox3@m=nOuvEAZ|`i5f?1 zos_(#{*#I@t^Qw3`XPR3_U$-LTYBYhJdw|Cj-L_Wlphn=Q`f`2y+m9T zQjr_%EwA&vz;x-=Y^zAVT%QJ)WClxpm`mAv=uV$I%qmJL9=RP^b&{d966j-ob9@jIF)k+Iz|hfVaWobABkB)ZOv&LaI4v!ijkTC7 zYS{bWlcXx*OR>a_03sdAI8D#eS1vp+xPiXT5=)p- z)@`kZYL-kHT4|mPU3vSR%%GmmYJP@ET|ior;9?>^adnAO0N_gbJbB=UxF-ge5y zgZk%t?AkuHGzhQlV9DXSHZ(bJhqAb5l2KbTd=Kuv)^VGj$tjag-<_mzk`M?)vDGuy z$->VuueF2lujL~cgFF-Ph}&}+e(EvmijDO?qbjQFd+_10-4sQKE<#LTrXdYZfW$Om|@g$Y5~*6V)|Y5-F{mzM|X%r%-uoGwG6VKw;?h?ZlWmWA9K7Ib$uf7pX6 z8>YYhtdossWja0R&1s&~`$V3gxmNl*u6vjLM zTHPUTh(+t3O(AJ3DAt!nJXJ=4sF>97$50fIp13QOjwW-Hlx^zAMo{~u-9qp__ zm3jga0vbdhE!}Y4FNny$xF$8y8A0gW!SF{cOzoXrdB)SxU+er4b5J+Nq)DRLOK zcEL!rbbA!+y$N2J%j49s1`y*&KlT#dUu;hD+P^@6{~{d0owZUul?5q=5W7`;o5v~@ zv;P62mH*`vd=w+|4Vh`<;0d(68+4lcP1K75Fflx+RcEn;a8vN$xjgD6hH4S#oIckJ zQnz5%Vt*q_$}BkZ=ixK`9k>Tiyxcp<4VLumkqRsuBLxdozPZ_gvs;JY+0I2GQvLK7 zPgA|e@AOg6xB5%cW%>VVj2*ycFA?)E!cU7MlEpt9f4?`01wSWQ#Tq`9%u9dhTxv{w?;3uvH2q zs_Ju+b%s6f02ZliNgPhBiaRoM=3t2DVXE%Ju=U1eqlJotZ+xe8jMIa`7M)&3AKDOK zZM}rY3tDTdPgHcNZ9$tkmJWX&yJqRG9c}#~eq)UD#NSyowG3cl6!)^}hkBDsN5@!Q zp|qpH=w@e!=f{ii#AI%FI#`23zkH(ax-$r$K4)K305;4-p@-o{<}+CkW|T@0rYzY+4jEjc*9 zKC-iPzp@wU3?1F_^JKSYlYso%NQ&K40IIjr(hs_d}eD1)~S=_swnRG*IbZSadC@uWC=09%$0AEBW0@`+OdVx0zc0OwiyN z_Ht_(IMB!{WE5Lwn;^BweEY}W^s-wVW9nZ;Cm3(OkH5BVoehjM@6e3)1$=x3*kqSw zxqg*Xsphe4(p=Fd8cw1af>$p=uMc)Km{Xrcg9F=y(QBM|v_+raUnNPFxNz9XG-L^W ztiG5zf2rq_}XK@6w-%*@ifQrjhq->j`|WwHt}hl>m=WcCN>^@a-8 zG{KVMbVQRzC5}S8;cI%y56p&xZp}Z*h+h^(+8GVJAmo*(!e7PM*=cIiQ_gx|;m(rBJSJX8>8dYap)8 zTT=NwvJMCBCFHLv+NvoA&81ZQ*kOrDLS@gTc|On)NBqLZ?O;c`rREh?>=!!Ho}9G( z{i(1~J~n>i>2q1!=B2c)cYqSB8=rUO^jtYsWlTqw`~5fQ_+exCIc?atG-dCT&W-Qu zRYj6LqrgyJGBgHohGlwAhN;uCl6p>@IifTa55(RM00urzEUZ3*TnnFTRXaaUhKe8x z7Cb8Xtqdk|pKxM5;-s=6musG?TSvT0g_1V&S-aulxjT=-fLx5X+Rj$$kUj;O z*xP5^OGI{p3=zp*(NASl)7YDi3F{9zo4y|GhbL+`NvuVeH`~Z;S=`MyK{7mn4^Mp- z!Vk)VPYB8bX<2Zjt%()6UO1&%yin65Hx0ymZ4!c{*BM%!DMG0^<2Hs*axC4qa&tAL zm3}+t>)i?|c)>aH4pcvG|IQ_2O9mvdt)3e@k6RKqklG-!i?I>pIXd118?p}FaqAvt zxu35Jp1$Oay*48(b52fpoyM4QPf5A-I{T!+GCn_uFsVdhpJ< zo4||YlJ7xm+|2s=(aiWuzF4(f{rMx0BkOar+&|BZZ!Z{`yye_6P1-Mh%_au$j%=+V zCe53aWp{CHJyMv?a1|6}Ouuk)>CZk1jUYEkg;-BYqd7|vL6wvWKuclbqKZ4*yZH(& zAtHZ8#u+-|#DU$~4hrdMH&*DCXcD(@&fpqli&4(Oqu-*KB}`Wj3q7r@tfsUk2yt*S z0CYC?NmPVuzkpH?bDIDtJ%?VbUt%OUsY}TVg2qrn>gWsE*J{}~hkLz}_d>O1l|}%p z^bx^IKLQ1{g7agG!nY9cZ6u8t-mg-o9bbCk9;dtS^%j^QXyu=Zjb8aEMeF#Hh5Vv{}b^B<>QC|2t2m^$2Z6$@2OfObJUfZhk!^*s!}!6AyxS$F}R-QX}*FUaMH(fjp<5ujBh1**)L)6NsMe7YG)dV4O!2=nz^BBK5+!-}rUS zn+I5A9Vw+EH-tGKePrlwcNA?baeZ&iC(8fU=<`SY|EX62w%9IcJ{h_d86Gz8AM!o# z#gkStspJ!2MMq60+oDzCgEPlGU8UkqE#Dg+d6}n%V6jt@`2tCS7oteb^?qb?-Cbo> zloS>=;|DFojCr2m%EcfesOF{JMi-d1t?D#VLum)TEao(|+lirC(H_ z)iXGcJfI4>qwk^R4ydWbEDC;(0gGnOa#lw5xun1HZrnbxUIQI|V1eCb-JM2pl=tri zE)IvLeNw2~LSx_m411nP3y-nB&#~6oyeQGGyQsf1GK~-8-@a(ufO-1dDXwg0U}bxVt%6G0V?EpIBTm`~NC|R+C?vur+#nB`s@p z*NFXFjxK~tDR!a?CgRiT>w-5ur{E&Pie7-l+a&@ipL5zEi9l`0Ans3-1jpTdr}ynx zU+^H-dA8b-+RL_cIcL&dn09uHSzin7Cf~6-fDgCBPhVU%(QFI@`-U-$`uU2=;iXPG zb}RM#cMuXP@wSlPrD2!HOXmCHl{aX83oJ#v-}3$2;`tE!%`&#xI5gJ6Sc;`|lWQw3e= zc{@-G(5gCT#5X!D@@|;pIf-^vSt_DsrV}xCGwE`W(rXLutI1t2Njv{OfNS`8YtkGg zAPAl1T7Vsb4tg#gAaioZNTf3GHtYbR^g~nGN4E^3GPsUTbG1Rm2|yj9u2*J4BtQ+d zMMk?3QuZ7xzPI^>+~vD%Jo`O--QdXT+G-e2;(69GN|g1-L?v| zKu_UdOWvr=u0X(wW_4kY#br?66?wsXDL!btu>SgNjVxNUUZjvvoSSn2Y9hNG9q2)Vf1S z0hC!Ke1_s7KZX+rEjc9--R*EF*yWHIqKk~;4c!|GCD-^@Ur|fXzFDMosq)J2>^7ShaD|^ZY@7@+sA@ zFB}f-3cRm3<5UCmaS->Tw0xjo0zT?XoqP9k2C`dx(!GGB#RjNC&S|lRFD>AG+y!|Q zrG3}k_-o77AN{cd55Dn=VapZ)1$9+YLjeiRDs-9H@81H1EOPsML&?MksRXx%ix6ux zb~Zl0=;-S8_kTlwSZ!+^nHn_km^-+0@FgL84vlqsYg+d0Z)gW}=JLKR=y^=t7>RYx zeiCIE^!wNofi<@N9=|kz?Wu`g0bPX{Ja4>kK_!4HnSTXUhRIHR=W$H~x{3gG2Y+uO zpH{+*lCH!v=qrl>>Ung<$}O{N0wYPAtVt5}NV_f!g&(iLhe~dd0q$w9VwoX%_+e?A zX!PAo;jRB^yA}Vp?K<)>!3X!RT>=0f7H+Vyn5e3N)~;!tj;VG5&;0>UIxU0e9CJ`g z)qaRXtSJYkm(7>2!d*smzm!awQ0bJ(h8AeMcjY`YPuqfd`aCwfWBe-zb!XZ|@%UC{ zvdhgLad#@I>QVyed`^--8TikV-XIBBeK*IiX3dYph-nN3VFk29D2^`@?zRy0pT%&tCs z6F+|!dFw7dXPkc0u`*v5rFIJ2EU-{ImOO+S{!6ocw#Cx|dkH@lbN15jLpO&V3%?T* z!S{M5ot65?@I$VuHR=i`I=)Wdgn7EyS%a+}7n1L1E7OflSpa8v>Gm=~X`5bkpFm~; z&eh|%3VyxZE6R+f4uVpI&~rXTKRW~woJ4MfdWW5dzBZwXaTa{JKe=W?8ni=CvE+W=GB&o!y8S3 zxS4OJUEy>FO2h`@wPK%-E(gYQCtQqNxfjz>|CsbS0*os;tQUFOXQ=m(r`<05aa9jj z`g+|6H{NFqyf6F74t2D;gDpf}22BN(MqNTc@|8^%eXIWrx&Oar91h@AJRuLhAwkj$ z-XpKE(e{96VfYXSYkW{*pcc(2 zijzn$9)?xPm5(C&6F?P`rA@ZSrOd-EX)G>g*f^`!!6}Ah-Tg8oQ)HU1`i)xnXZfm5 z&h2AG7$b%>X*-_(lz51>jmy)Ti0`vn-cC=zo5CV(87#&ps{{_t&X7&7T$0F0aPpDz zfWva@{`I&MNh%XdN0zeByVQC6p8ST>TU8kIUOiK_@$&g!YMr0IT0Nu^%?Z#|=-~ve zkKMJN{)jw(F}ElMJY@Nttu!Zhziod|^Jct|c?VDX>`3LfPjasC^Nwq|+xRq%k*j2g zJVnOdd;y;bKM8z4r@r(_pf>MZFV(EbcTv=MHv5wleMKk?Vc#@Lqjk0$GToj)UzQNV zRp=D3M9_@SNhp5Qu|f%poIn_&7_Mt)-}RSA__8Y&Y;f0|k?Qj?E}0NDax*E?;ryia zZ~d+(|DR!E)?Ab+SQN08?|82;VpBC}`Bs4x8A&GK{GfIIr>i*T%H~llxM{nC#Ov*) zY}ux=GRxe}5sYg=P56#JsfaiQY>(|?adjzz)8V0*(^vFgwW+#1Evct$Mdr~pZ7gjN ztTnEkhKy&Zl%xjsAd-imHTU<&#LojKdcvKC16>Z?FT+_4hlSiX@8IwZoSv`@pZZeQ zy1g%q9M5`#&eqyUhVL#vD=h0qCH4J^l4}ZQbdJkRZm9+tCrJV0x`H5+p!Skc7!AX! zpNm4oDX*Z&vc+<6WT5!vowC4sOM01OG$1u*NML*~(w7ZtAmHc*sr%OD^%Ct38kFlt zakmCNhqBsmAs%QQB(|}48UK<#-ZEp$b?Jjv%%OS9D6K?n;Rft^)wgH}ERf-|*fLB} z&f0CuzBnitHW)xz{-DZj-^o3)uf$M?c4=am*mo_ zi^qmy5RhizH|T5 z)i=p&Fr5#Kt#vmMkhu(sgFEkzW!-cp!dz+dz!jKYlkep24e$Y7jd$NhPOwgJ@HO>} zT{A4f0{N>DBE+xyMV<>APu-MAMI>FC`};#<9FIfrIJmh7D?oUUoP|$g21fas7c;TI zlvGV8)yOC{RiLAOcx@)Am3xs=3A6eov)lZjH%RazS)?b^=!XBWr1X+_)Dv`OI;|5a zb1dkk(EY5iaTNXd_V7D4_wA|$Vg@X*6%vB6{7GcsTs+$bzD)-c&yx*FXvlU54fc5l z(dm2h-9%bAUGF0fUP7<6;`0q5Fvp|iptb4s%i-}dIz}>_x9;%>f3$UY+~4F(N9KHR z#D4=`gFl9FHj3%vDgR8r9fkx`|2+I#$pR~r!rHYD+?n&HI>1uQ)L9SFrdf%TB-_@X zR5VV0GFi8Gdo|v>FA)myKS-C@w;VB-EQ91Yf2Q{iJbwSIFAO*vr)JT2J?OTgdcXKK(7y%-3hZqMpLsp^05)157Y+FrxfHSMPr)xi4 z|CHj_)YSPbvm`N&KukXn3_?L}QC*S{FApw5y23~Uis+pW{FAhSW$KLTZ-`y2vb(_> ze|O5FsI~IARr$5;M2C;WcRq1%QH*0Vf`jQgwtu$ziZ<{}S_r!^k$oI-GiNOy?vcG> zgU$e=N6R`J?Ll|Z-`aOzgPc-F7MYdKjeV$Se#w{ofsG{=iWpl;x19c3Bh5vm82A@P zO*VQoJhqd*B?Qwp5i4X+ zpY^q%MOKNK&d;U6mb5IGVJD|LY+Nq3l_S;c^xg`dPXSyQChC%>kkeP`*6wjY_&%K9 zc@b3DYA#5&TWuZp0^Qg4zK?XiKT8FV+jiBKeNR?Cw`{byou=Ge+C{m+sAx;ZN|(jU z7ZVmF;?K}mTzbPXKXC8@82@6@y{FrJ3wOd6GPGD#&pd6HtL&@mTr7BF)1zmf^7 zu^&Ifsg$c#HCmlRER=`PiRi7%Dsb}8Z2eSVl zE?th<4vpMzE21|QESaI7qt3^Dme4IMmd+WFA=&GIh`Gpz!N#XNCMOA#Mp!HxGA34Y zGiY@Fx`$uX8=a9ia2Sq`3X8`8{pR5hZI7`)Cq-H3dAdB499 z9@=C5oupYhm@~-t+j|1)VRKNTRFSL6-zfYmKON~HfK+=Y&MN3q-yDQj7EP1|_zoR; zfaiN{@Y<*RPW|@~TCc^P207FFcs%z5#QDzZJ5%fa@iZ}Q2ej*q+xLaYn++?ausb@mE5o|9Q-$uXbt$`%y`>U}(iPST&F>s!UVQQfPnZRJb3^ zsGj7^0f)T2oTWx^$*V99-*kDVy8P1`<+kj`9Gm}n0JqB9Kf@3V#F|yOE_e5Ml-*vQ zg1XWf{!XTrS|xt&UqIS#i#XDOlbHT~lg8{);K}qrx^5c(_{=5 z7?{{Q6Xi@gM)mF^%FAVx0P?3j0AIGBTuUtQE3k{j4kFrC?IfgQIoY`h9`hyO10bqB z50P5l=A+488um^fI)9xngfVi171};zK;i;j7;fA$eTeNBVg6|qISL;#2HqOCtRjhX zFgj`^{|ucYtqQ#l@CXnkzXZ$8_)He*mNV?s6bU<8IOkXU>h{1Iqg#4UqlOG{)XR*wrt@CQ~b*3hXHNgQOp^6sugqAjbJSiBsh&jnpC*&s9k^llXb-fv_g8=7_0$2_&rmg4@=&ENpBkO!Y5}$#K!| zu$=Qq`yo=t&=jBNZqQYYLrTa8NBqMzVUo>c;D{+^0A`-z0fT7Xh}q)DnMZi5<%@YARbpU0)i)OUBzhHo)kvH<5-{1DYl zlOHCc9v(TNlonh{ai%vLZPmlOOH~SP{FRl=?1VJ8F9y#}x$kd2!7Ioo-GpO=z}D@+ z8_Om-f*~lS91nbvFt!+2UX$?!=nxKQ6;VH*iL!2`ANiB-H>}2>RSS#|QZQTelz{`& zn=Y@GPxD7qQh}xorvT?TJ<-)cjo^T^$eoVi(+Tg@F37JNA9)DCA#D?+=Nqc~Z+A?) zuIc*sqb*lF=S~BzM^XOW2x(2_cSnp^zfxY!N0rFGpozDzri@l?VXPV7y|_i|AVv#-E2qDW{x9z3Fqn15CKDM>4Hqto*>Tgbbi9ZrmPyLp1(#4-$76Rds%bWr)Ud-fn zpy)$J^W$LYro(TD$t)MGvD-y6Igw_H#6U2H+q?3y3Iu`VJq*~A`2;iwzSs#-9Nr=( zU*+LXxPu+>(Ohyo78i?xG*C%}hu}6JbTkw3u6|s+YkdE^66z{$tr44kOw4*oP#x3b zLA{q|-8tCR37WT7;!x1iHqyy&$?*?H<%l*M zBlzj;8|X|>1zyf3ftunPs@Xn$7ztV2s^0f!Ez78Juo_A@R>)Gys3sAGLCR3+C>uFR zEnyH%&$e~YohU_o9}PE54sNhm*hTOC+l!8XXTr+RK5%ftJ9>1K(BeWMwT8Gob?c?m z2!tZ?Xl~vz;VgM~1u%7ybMtDC=HcsOudHIG5KIkus#5<&A;~@%V_@N8{1LKo`82)9 zmr&U0=DGm1w};c=C{V2sQ!yR|zu)21T8PBq*tp3-O{ls^-_HeYTu$_&kMF&(LnvnQ zq6aIqj=}NlZsWK^P6}BimV%74hpuj%39TGvE0N_3x?DCGlX)?#osse^9T9&UumG5G zEPTL9*epm1oaDoWQ>=X+XWjvHzCk_6v*2SzHNDSHR`0T%ybjBdw8c{$iz? z0}sG$AHzBRY6I{0Pc)y)AY!5WPaluHHmf(iHcyvEen}vq3xZaTqQx|EhM=ru`eYN5 z&~syyV}*v=+Gys?Z_S*hR>y!4c5uQE9vVYd5;c)pG@-tuY-ssY*v*tsB$zO>=lygD z7hgYpdqz4S3O4NADT|!NO(!HK*587&ySy5aW-zTRYhv8ib~R*^GZkbQU4*YfDNrqq zBdo$f#oTfkK~fYs-)pkj&mkwIIfK`o;NeEg0)#~f;&ZQhZZnqXaZ(dS2%NXa7D_Aa zw4;>Jf{xL6!=xEdA*b&Eb*>qi4qfR_f7jE}Gr!>cyaE&(Ryc3Ay@VCSP5YdCK^Crd z+raUVxLgLnjU*r+BLvsPhfrwo8DAQNvLTNwBFb{)sm3FlhQ|4ubIDfWW+Ob{=*r)p z85nPEz7g|(Pr56FbLxZjii_iy2L!|>-Pqn=EyL7u$RC`$A z2EUaB%$`h5BMKSXe#TMd?y=#zq^un@|Jy6&5N+ZIZ1}O@rmejqUdTQ9p)s zxlYZ}SxfL1XTs}(T2pU9n{9meF^t**UcGWVqe|Q zW>`3%HUKGy<3A8dsUDwjiX9$A23VN@-nphqFkCYay7`zE&+4jG{g9a+UPk2~$LNZM z_NG2&3s_J!TIt(lV%c5Dmu@|{O^r`C_p}O1w+^vZr}_1Gt5n5yR_$^!LPhNJNKqgs zkwJU=gNm?;-?vk|N%vsq2bozH=OozeEKHjHtru3$9F&%RTzj!0MC`i{z{BtX zeo%8N{$G%Lt%im;V2|*2r63U^-+`XzC-(QK%;m5~b7~kT+pAYx z4$h)Img+rBhbV2~CdfIu<(SDPQG7?vNJi%*#+kuG^B+}6Ik&+UVMNv46r%(2j-Xv7 zZ4C*PAWKukNGXO?>KF*IDowg+9AofWnLfgi7|xDM>g9;CL`1uoK+}qw^3_+o8YP5X zqAQXIL)D|mtkMn}Y~3|>lk-3<{F;yEZ2d&7*D`gTW#K0hNcgbv0`tl6BctWIvLbhQ zTQNJ;iv! z0cxe11nYsKdN~h)scghCy#|Lfy`gEh{Lsn%Q!$>5cZ@px1uEfbYn@20y#(=(2?EpK7$s)r8uJglaA)R z`#Aky@G$3I^U?Vs@V^X?WKycAx+8tH{fN}=>rkg+dGyC%6B%qtiJg{KNt^#9+@}+pMT>I-vK&Fo({0y>036|kp$QMb-eT&@mwNs@_+Aud;( zbr28V97Gj&+gP106%$4b*{%So66z9!4GwCi+K7#O#o2myZmHm%?7nBL8M%%~`vg+% z6LGc2#-g_y<8|A#AA{dZUAL(qDOM|v?j5Sye1k_$BoT}{En(%YCSQ|R;Nm&sk{kLQ z%`dHVy%pJFcG-=s?ftsFjUQWhM-M5jr#k{^8M&Z42QN;CkMfq?W^bh&ez_JAvn*Pf zox(<%NgR$#CmW0cjJTI=4e{S>MTS*%v!@)ZRsmD-)n?)g2;nm^B_l2o)MDQlG;xlI z5kISp6=E)0Do${8Kd9zhXK8_XC^(zX)mz(m@AJyD*2+#-gLp3YISu6+Oj&OCEDG~q zGz`wWUQnOkgsZ|4Vn_rO@L{N}`ku$E+HJxag&JQ1yrz^sg|z9`S^p0}jYate_;+#g4=V5>S+c$s2M=#f@fewb z@t^U5_&|b42dDl7V;SfX%LY}^c9tAa5L_Fn+6p-7JVDckG-b|6N|#(tD~pY+Fx5AsiTuyd%Vm{J4R!iPj(pL*7a>rohTbLp}y96omEEd?FpvE;=>+RE!P2P8}Z2VhO&F z(KXCyo82vl6=;h3{T?e$HRuD!eCmF(@4UMK=S8rB9zM2PM(Q!hEfM=E+JL&gP z)7}3b$tq4qR90lnHNn#_+Z{3c)l!idtuAEf4l;`UQ6)G@ILIVdtUK1RM@F%wJ7(fD z|9p{7%c$zQxQV0Kn z*jnra5JRa)uMpAb@U*vj-ASURc&F1{!}=^6`otN)Ml=j7`V%1(37E(7!A|%LA!4d` zKHkf8@uX15r+;uXJLIvghRzKH+HQZzueiMHOiU?!tx%e?UF7?*WiK&UT*`Z?k5`ED zYi3*4+@ht{`5Hg>b-=<>S$UPW^L{c`Y2u`yCxav9-?oG>rW^D>$Wry#=;>skQZ)jv z^VzOw6do~ThA`lbSMdb_x=)U{;>tT!|68WsF;uKqlWfa+@gHkW3Mj%mTq38~P_Rwo zu{1PC9*2R6+p(D7@s4CZo2iQvCaUF5USkPwSo+^G&PCXa0(yG&0Pq=or2*6CzJ0k_D#4;<&CSs`I&z)B7z(H6EQ>(C7JySQRxyVd|<9G?~c}HBLw`}JO z^mg*8LM`32Jo@%n=`OAHKSsMj0Y74|W@bC`^i0g{Q`n+P4h(0GA6Sf z$gkeQ3cgCL71U>KEKAtK;3rV?C9a>S_Yr(QO9O84f#%N@5~4WgyitZxWP%G0t*(6| zfV~S$U$r6g(c7n>+`U6GyIkSa66fz1w>}8z6o<6;3YvzJKbk?{{|&sQh=n=W|6iI- z`E7TtZXu#%N>p4-j~h+b1y(SH7&^u~k-Zo`#!m{9)>SQjd}Mt4%7Db#j7s*^GK|)^ zSg%%172C=@O=YZ+q|bVc0Dcp}#z$P*z-K9e%2`xv1rH5t4stG*T%QjkcH+VPC-aBO zI#?T&HB0AWd+$E1T#QlOp3Ydo5ub-G`R;X^*4*hrrL7+8xd!(fyh zjf4)8z=7e{k{PBWu+T<{0d2pKR-XdDgyZ7U3=MoAd46ULnvIi!kL@t#Rqi^$Y@Sx$ z(HXR~8!*P7|NC$?7ieY|{mxcMW^p8e9)TMZjgJE7ef^xdQorZ_K1=oJ_`hR$@;eNWSr@d=c%b3%3^r#Fvy#YnLJTVWsN#*JXO4m3Cam*5f&O#O zp)s6K2@}7E0lBw{2q2g&f&8peCuNZ`;!++7-;`urDci_{t*eHeLAhKc$4*Lv{1d2J zJhNszdHB{cWbdnxQY>-_#ftOe;q04_TlPGiG8<{^XtETDP!Ah`iY*7VJ@zS-ScsG= za&lDHZZX|TS9aTrD+48h(jtjA>Zi|hKf7$sY)(aCHb#i5%+4;P6hjfLw2f3@l3dm3 zL8?%Asn8X{Ct`k&w7-!*+HRP5A;{yntVzsEnrEx0=YA>7{!*s06?F$DM@MUb(|Br{ z(ygW&e0FRd4KS1I0e{TfagFD3Vgy~W?Bg7FBwh4x66hKp3aZjJ5~9_TI5O3S+6L!^ zz0{4HsIQ^CStZ8&>l|kmKap6vY5ofyo)3Yxex9i7O+8>C0Z+U%5niZU0 z3|dUr^u;F{?6n{rj`k z(I-5kfsGB8dM?ny8hcbKJBHF+oW|Tn@iLi;jfDCsj(4`2JJ)c`R)22Sh5Ksfi}y{* z^6$kzXK8OBRY?S1%#ueplnE#K3DB|QOqaP;{2^Q!LfG>uEFNuh#3&A<0D|2!C#J} zdhB?3;}^MY=vL%pCPnFvYO=ufVvy>`5V<{c4?}xf3`O&~cFA3DYp$DW1LcNN_Z%Tp z2wF!o+W08uV~fpvDj%JMKgBP)o#mG)4(Y}Fs1=`5#*E)y{$7CB3wG0*_4>^b52WyE;J=A=8j9f{Ccy&ZQDt}~bfPOTC35nzKM_bhRtJ2gl#r-q zHmRE0O(B?CYtQ}5xqe*AzUL&~biSJgsp8_81v%Y1aE$LTL*;DFK$rp-TYZ%u>m4YB zXQcD{4Mzlo((o-p9O8ar!1jM`=eOOA|8F;?dW;NYrd_ry_Bht_i>8ac zHfBH&xfbFjJ}#f!(8S-3!Nutcm*-x%*1h)^Pf+ad%&pf+_Z#=zN9vcUt|aRPT4ZK% zZT0wBTP__vJ(DBs+n5@P;3C!XSzC3mYI|Q5YnVNUj@x}H8xcaNGcpKgQ%4K8Rlk0CB(+>txK*8JwG zHbqNlk57R}*8Kp3<@ckL!j$bdFE3nwdDhM0fH$&x0lTw*NKiun1&s@@v zxByL!!A>xV*;X5x5W0CtKo!*q}(ptC>Ya@4)J0e8qlh>DJlAkU0*zysUt%lUOn9zFg)s@^fM&aPYAZfx6V8Z~Kb+qP}nXl&cI)!4~O+L(>8 zV%zxE{oLQ)`+5Ie|K}X@8aU5ma0(aYB7XY<5ve9gQJ0cUR_v4zhfqf`Y3!VuXojb4 zLkQT(oPN=d<8w_=?~-z{KCp=!{OK}Pb{p&f8o}cL8HiT40Mak$KgR@7->zPpbz^Y^MYo=yt0E4c+mYF!#DL0`=(URWDS)^;T-%_kl zyuB_Q5o%og=Wpkd$VhUM5)_bUAyk^}eG$Xvwlt@*fGfhzyTUt=xB@3J-~ctfP7w&< zB!A9APj@N?Dx>c_!5$}IafuZs_Da|^i4|fNw@0U4P0#8=eTjvx_A2Qc-dhJhp8(Dw z$-?{}Ws8~^1QpB0e+0Zpo(7Ru}QPs;UTF@MC4Lgt+UU%?D|Z)K>Hzs|=jE`Adh zFl=fL4Shb(;k<_(a+-L#;f@V6vj0PV%c6r9uOfcSv}hgM@?=wTbh9l&H3s;hgYz(- zXOE8J6VXq_h<>^!Ix1old?$pHKqFSFT|ARz#0!!G)D1<0e7$}@=2h%`rvXSJgbYue z0MM|=X+#Z&5g)|~0<3@ij-m^v&GBeYO0dD?6iol2>GR95EBAc&ZLYu++cIx5ufp?$ z1^*C0;7#d`datJ0oh)R;2^@TfDTZUrH3(GUi(6Dl6=LY3INOaOKt&emBUFU4y#%|> zl^8bglg3cs7o#O(cCaf=esk5a#8ig%j0-O&Z3w&@-z8quP6ioT`iD>)-`xx- z5%G@$JYRW=MUlp$5hXO(0}@Dkd&=eit;DeY>#j6%v4Q?1v~o@@!UawtVvC}PF4WxqXNiJ94i=<>Y zTc%S(A5&Z15)IGP5h5P#nww(MsTea?_B zl~=N)#fn_Q52jR1`f~L)DK)7Cdn2n{onkIymxKXBLS~OJDmJk$9F5bvXB~DO(f2$i zK{^Z4n=a2-X*`|wy-?%uU7)|2OSaDKHX$%jMNmi}lL&GC`1AcwNv5&8H^TWS;k$hh zfv`UAQdhOC`vcQ#9vSh2kS6bTa{dQm@fkZZk?$9WW9n2(;w0`|?bJdR%5fi3j>~#i zUid;OyC56gDy0aLb~=ycj^}2MhS~Gm;p#f_DC-Jg<~XF*GO>tyK91fy*r15Y%oT|( zb=;x5UEW`t0VDzUh4Bq9W6Y=!SMvg&E^jkB{;1RUPmv%-^W(>Hz6vJP?IinLI&41^ za%l0`ZH{W`Q?E$#k~lYX>41x0OL+o%KYB-63}G&Xsg^h?8;)*!bh*H>ldQZ000I7m z;FOwbL};56%8Fk!o3M2BNmzwb&h|(9Yh73Sd7DmVzOL-nwaI0Sa;p85j!kUCmOhr` zzt@HB|E`Po#Ouj|tr8~hqnd-@x34+6K&vMKEk*`HRAt3s6Vo2Sb}V)n39LemZ^Kl7 zTuM;Hbr{`Q?oz%l401u+%W~t-TC#HZPOsHya?ZQF94(_F*I`O3Gxtn& zg)V{QV>y*vjH_3RW42o#&6R8?x{hzQbv+N<`~iU4_1Au(w#i?aw$lxbz4H9BO0+|k zu{S=$Lm{>)q(ncLvM9!>qllF>i`keYN}Hg_bSe0S{9Mpf<-;h-vzAcfL@R^F+%)AB zX7iA)V`TzM^s1F&SjN!x@6Ie-UN$k-T`%owJOI4=cnT6Pj=M+yG{{iJ-G20J!$I1Q z-TY?8m}K9$psfQkb8!vD5$QPnox1rgMa=IRa`6Hk>mBS~K9sgn%ef?k6$X+tXM~e< zxm;bn-)Ssq=42aJ&6EG&Rqyh%%|d(PU$uXDlV8a8G#aj0wph7LD^q?0`-gMU|aQfD7 zI)MMn`)1(QTkKZB#tmqT0mHp^OGn9swXQ@`EV?MHO0HJF5LOna+?AhCnYPF-3~6rQ zMCiVL451b(6AZBj|FrjjN@lh`#W<^dViFe3_h2%Wa~co@<0gcTD6tf)3X6mW-2P*) zykoyEy!~$Q9jMX!QoHESE&lh*xxX8e9^S-%grj#3N@30aQ%3=KZIE6j7HSxw0r0## z#wE~S`_89NB_kbq$(I4C$nwZfWL`$p&LSt2o{N+q%br>sglTVotnkYa#?j#1=IWq> zsOB^&!lOZGa|DY^&)`*_z&i=9o}=;cUvtK4q*3h}He8d2C1WsvlO+^C+p(kJGO~N` zHQU*HIL*hdU%&tk^5(!r2R4kxtE3_S7N{i)J6?~eAZ}))^Dnyd0Sxm*m2$Ks&};$0H$ldel7Q%a2>H)#kjhI6Iu3 z49se*x=SV8p*P!L3OtpgnAx!5>+A)5x7~X-`TX_mmu!1rl1o18$4`y!wyZLfl;4g- zUI#I$|61>)Kh^*1ZINXeHEy9?PQ&TBm^2-aShw$G4Y+j!ZhaiK4U&flK}1XrXyRGb zgau_>d-vP2fEIHRAJ-`+6a#TJd~gk#*iSGP!7_tn8^rzOY6ps!14mYKVlk*@DJ5{A zmQEyw{?^BRuGW8$L&|>@#z8kSHm5xFe3sGw9al;J_Wb&ppo2^#20y+#K`2s~u-arZ z4N@t5h)vk#7i-tgpAu0`G9#Y}gdN z+g(>&^Y!B^Byslk3mt#JjFcWjb@lN}c^FIG6ZHsouO7)!)b9XjQot!(Bd0%JjHuTP|h)Aji8ciwW^|W)^{WEY03VK;4g2v5q(V1@w83ZeP|&Jh<6VbCVL2P?w|SjkocXkL-Vyv zb?o}&^_RXrG`6%%E!Dcj_kQX*__LtoYI@)GWlvK6#8J-A7}g3V45bnxj|4K&PB&_s z5W<$qRPpI@3}Po;Gag*MFt4?p?^oSEIt`3yF!QXGb@2z14m^?%N{7xkDM|&gl-o$V2XIr`5JGl zfRHZ?J06@wU;^n$KlC`YIdfIweiW}%f_W@OW&yEmqnUf01oEbWnKSlQuhN=4{_{*DBjXLT?iI6bik`g0w6%K0<>9fx zt?8OAUJOd4vv+v6u4lM7qXLgv7T|kVOmeWu;B#Ia|JarrO}MUEC=#x%Mh<`zhc$() zW1>#|s)rIu2`>`GI&u^Ot)`mOxT+u}4#ji$*kpG~r=jZx^*X&aLalF9+!fZsFNE9w z_p5xE>0lAOTYnZlPI06s`oxVhpaB}8_9}*DuQ~$w@b}L9a#PkZg^l8zd zuaZLoQtE#J#Pdby*UUPK@N!W7+C2?7M31?TIEN!=_mSw+IxI&GQl(I>8Er?F@(8X0 z!Sk3#p40gg4L<9AEM*-^H?1HTS$L-T47&5yF46xAl7}Ab4FS0PT1XLfAM$$gb>Y}M zp~^KhIP-&)>Z8S!aB&D3-gJ$Xck@Pz51zf))F{&rz?E&`$h`UIg-)$t1 zXW$9W@^}#X655p=Pwr@}7qOe2vxaQq8QIt*syBBcarn}YJ?wzNYXXye9>fRVAGhS1 z^%>a&V&zynR&qMeAG>7TwP9ff8HdNA;x19CXkyJ{D_6B@>XDCJnQ4W_o-Ho7Wehr! zGoP3GIDOI-d@mSi(kRxje>oq0d_(4MnlkuUd3_F72(WDSH?A7lO@pd|)(|#l>ru+5 zV2CKf51sqV3qa!Y-2x;A4Qh+3j+k@V*fLU&Zd0=2lyw}PA#i^FZU&_?ajbu&Mxo+# z2AC;TAmG8oX}wRG@+_?67LFe=A2%OSmjfP^_;>K`O`c)ZeIplbvTufFCd%Hnq5Em|YRM7MtRKBdA1 zd{<MqKn)BvpDdVG#rK_m{YLJZh3=v8SMcZY z&b@}E7ury)TNtg$S{sq%w8{RH5V8M}(9KSuc8?sUBs4)e=`JhBy6Agq6Kz9_6M8inl~%g*u{6^}NE7@{959kx zp?RajH#@&10hmSX!sVWOLrx*bGt^jyVTn3__EbqvhEkZ z`38Wen%Cs&7pd1agM@&Ykyhlt2BBW-j1L6Pwn^&W3CX3oTrX*MKN8G)e*U0q1reph zaNte)Z+S~hlrje&g)g}7Nb~&;c|Zq4)%SFf4+IgrMz8s%xNN9mrA?ac2erkE&FtUS z%R4?_hH7f^4nAJxNm~FfJHfVVZK3X6La3^ZtEAP$gI|=lIf=EcUO?~+$C<)uYK92e zm~c@Z{8R#EJw|zN#8JHSO!z~C?*4rR-gJoO!vdue8$H6}3|sl_F?O-M#1fFbHbc8h zZZaG6ggu?LE;}9Sc{mP)YQ*W^o-8jVu@;WGw9rhsk_No?O#CM$Dw5$F4R9t*IV#l6k~y>r8we%~QS^}xS$b~DfkQB_KqVsY}}!^LPeG5|?EAzobo z%GWfFcqUv2RLEx0)}X4jLV*Y;*VIaJ1clDM(4D==Zwa6)19n~^UWIiu`C2$DX#kGC z<)jq%vwvWjzif;KJaRZl`dWm9?S{!j&STxo-#jh(J5{3cF5Wm44l&4W9`%oZ&HC?Q zt%L7(1Q(UJJ%x9PI?vtEvlYJ|1hhkqNvQGq4!IYM#VjjE-p)TOr?78y8ylDQw-bH1 z9THS%qEw7wtzuV*n)s1a8kMjH>&L(nKIC1ganOQm*5)Y<9>@nGVi<)IP4wh^i6#9;KXl& z_RCk-)(}d(5R0EWU;oFMDZK^uU+=&fQy^3=n^@xQUb!!cR$3xLbn2ER`~8~f06t7U zxKzI+EPgATtCFJO71N%WG-e0pCOho~#bR1K5L0$)!ue(oy-^ykGKP1$*XYQ)mfwXh z+vxT{6v#me35&CgAT+h$gS zpbjbBGYgbiH8t)Xhua!|yDS7iP3n_aDemO?5Vw4%tfuZ8#^Pe84bvcPyC6S=<`x3_ zyyuk5LKT~)9Ns~<{BA507hff)TBfT0`Xwu9VrU3;7D9k(5$yD1gf&=x*ER9xQ&#%T zY2Uk#ZRXaL-mlF`hPMR<$9X>vbhWS6llX@h0)nmB4Q{8%7hXsF>f(I7<#Clf*<^Ik znPHM!5;!zpQw^OgCFosw3mmJDSjiH&Vk-topJ)g7O9oS?`%1im8IT`?|^>W0&8ooTR%$p@q){pP=4$yNQDPJUYvPR31*yU(?x-AzhS zqYhdRj`F?#AbMk7RH+)8lP$mKiv*V;yN(kRs_Iu>ic#3z;XuB5F(1l>SYIh@szA~2 zxOl;$%#y}ci}lUh;F=Z4oND!!|0<^I%Teell z_U;w4Xi`*w>KN>hyjT%2TGrA!Ny5}~H5%iMrozT6vnjDkEgHj%Lm=E3a6)_(cq09L ziezwJ0g`aM#S6S&fUNMd+6Aqn_^(7-85;kZv=A-+BOCumh9ZQ`2y&2c#Rr_Q;8r8r z!6Rl}Iu?U1feR;;iTIWmC?hdpQd~!{Dv8#GGl-b72p^~HJYiC4kST=0VmV%yYIHZv zjF@{=eR;jFazw&CI{@T7AL{6ZL7jFgZ>u%{!KAW4cpoM%&Y&q#q@Ti;aK$N==F#S* zKLuyEB94)~V^RRRKHxNjOBx)OONWM)@zN^0S%Xi8Y%z_hDFa8wEULp2nZ~#L_^7?X zCValN4J+mjwTGRmHf%2&Kkl`W%vgI#W-cE&>SwGwH{57bp}2FQ%2wUfyF{iod){Yl z?%q&KM_~zzq@jvIXsG?$iRr0%JbK0Ig_Rx?m@bdJP)x4aB?=j;i*IrWNycN9J`Vf5 z*^M^WgzlG{BW?6NT$kOszGtfe1#5cbOYj<&B{fD(gsE7T#gz&RN}16qYWQw4S@&GM z+#nBH3i=jG#getG-LazOWP3hSR2M~Y&V_ioc8{1HIl1-1(c_C{ZKQML*Khpjr!vZk zCNX4_%2h^VqCKH(QP&mW3}5T~AG~}o*{1i--hBq7?ZH)$PGU8JG8b2Lypia!`nKA`ZtLm+u zV^`9G1X{Pa6r6d}3wwmM;^CVw-2UaGcf+iOr@@X1nk6AMW10qk7&}2j(%lziS{aV5 za%W~c$6M6nF38a#6y2;v?s3au??=|msTnSc%H68(^#@)IJn`agX3=kRT2= zN}>`^Szuk*g;*Pbu>sBVW5q455&t`3$lCj7!t6Qd@#r`~4*V9zgYbPNU zh=#J5(n+l4itrLaj!;eMO4VW+V-_YR5dia0A$r(rN2Xy-9V*mm zpM(Nak~rf)7B3n|t+b@WsPkkMOazm-JkH;#3ZB>;8@}`^wKV4C7FuhX#pvoz-SAxx zSg<>&Vd%?l5%c`_))>b=koWj&9_IjDDb5taV?JSW*3)Y%^{}tnwN~)ijC^amSvGm& zgJ+llAQ6KjfF6aVnNh5ZOH6GEcNhY`mT`4=3{i~&7Es9=dCE zRMP}3_=?UXb@!FH>Wh(Ik}!}vtm<<6DM)*P9FdfbQD5#Te(6}&n|D9zkJq?Nz9{Pb zajk%?Ied;VY6cS-_|`8&DEn{5y!`TiTAaeaOLA;)4?SL4Tz={tP(C7WK2I6gQjX(t zC>|AYx|sJCE5!aQ#z_h2`5z(yad1teW-$kqyxUJEXq)rTRDwZrLdQ^-MI48Zw>5%W z4AtU5#)y9WB>M?VzmSuCOb9uB$(J5nEg20V-fd2h#(C!-?a&U4fse~OD&STKmbHN1 zl0Dp{Z}xoRRf72rH=e~292MFWT6~UVIE1`h5{3fEjm8Om48>_5s_hdbUD~ne zM1lL=yv*E(!FMP6Y9nw6fIM%zgw`vSYZFm4bN7x zjf04}-hiCGhx?92NY=1q|1b+aw1cXK339jaPK&jpA3I<#68mnm`#=5)$fdyhS_+uh zBfQs+9(NDdTYF$$(=v2-{u!lV!HL_{?VVMsQtl}B1sl4DI8g`Kzx$2#)Fmbv{8yk; z{q%LR1Rk=4YuQ1^QB(Pqh(iDmNG7^Sm(M@G1C)@Q#9z!(s8tv925%`thl~LtZdK1( zFF4kGlV?t8lvE(?nUu1pVKc%kj1}64;$GIYQ{)~34F;jQRom&11-^cT%4&cBo<`NQpKw)r^~;X(>{`oj{>fLj0{=Y^<50tj2OGh zr^R@U%IL@c#%NK}e5WsBl_0G-3ssYv>};nV6yAQ~SK25VhYiAqg~`S8>@YRA&T3Hp zdV24e8___0#bdnN(|1qswgjR9_cnvjp|_b^w>$9xZ^;auuW>Lm%<0}e^5xA?G<T#wPYoa3fE??cZR(Z#F&e>`qDn4P zN1rO5Os8Ll57|Dc6{VZd7)9NGPuDZR{X1?}Ot4uU_>IAjtT<{K@Ohz4-1*3ez;iI8 z&BEu0t!?(if44vb4@Tu<@UmDbyWZaHi6m$hC9CRq-3(-qe z@s#}s&@`KoT&@5-&AENB-`{8O1LK*>k|^inB{D3=CdSLt5HiGFi=iMk$$^*F;ZB9S z86?BABIbP~4S4*u%*4^?a^=!@Q$6YVmr8{{FU2B{;NP*(hr|C__dxbhcCa`g>9=-e zcLhS8A7zJG?9(by*AaXiVVoFNxBi-capz$fzwKk38`&Y|U(8a_Qzk7vvEBGyZDok41wFFGWz*{O~ z&Hf>u_%$j*e8VDx_GFR0KH$McGeY}qB>x?)97JZrvC~czhYJPm^Ue7yltxJrIZEy5 zn@^!0gBy4a*F&pr6|)4pRl4ir*&DJz22akrHS#D78U%29ov?yfl!+e^xd^x2&oEnK zyIK~F&NpE4wmF8@#y_=dgVE6SOg-!3Awp6Ughw>>zWrfIAV%2;NSXG(aA~nPcoBF- z=$n&HVv;UB8XWN7ICuH?EPIpx&-|5JkhuvyS*D3jWCg6wnUNCotVC+mURQ%q3Y*ubpLo$^f96oSPt+Jb z?<@p-fY!gdq%#PxJ?M-}f=vn!o&ptS>I$0>XCwtXz_+g1gZ~Qiy~IYfZG+`q3TRs? zQimp>Z#_B^qHLv$rozv0=WzE7rbV)cdw)&&;koi>>xpfdpHE=K;q9cJS)ebqoNwQn zaA(F|PB9~em%%Y9sOU;iqe6|U0TU4jxpfud5mneJ|B0E5#`MF{hrY_*jGhv28_%g^0zc*{~$$ zYWT6WPxgXJmT~;fFq0tv#)8r78M)HPP!zaUy~}v1f_YOF`Vlvnw?@)2rUe#CvrrMlZl>6a&kRFsU{^y49U z|0}@UWmotqBk*cdOM#d8J-X2%XyvonME^gP?(tT||JAyspB$W|keo>#>;8{B9t$41 z!QWAKV0%_T8xlf|w*niXlWkP%+HZXHe}_p^-w@hNY9P4vk&zLF+%I9Fot~nw7}Oez z2D%}20F$(W55>17=?eUCawZEjxdTtZuy?%Ml|mANKCdtG3wvIbQNc?wi+3WHdyZj7 zd_J#GdT+)elVP}xv&?&f5{T6WLG+Q{y;){Gf*tA^;lh@I^uVb^bmwHCHc9Ge$tbxV z?iyjPO^It`;CHgPSIp3Ff0WVfB8nn0?K@H}Ft^@(n%ejMb zI6=Z9WL;01`LzQp4t(FM)xPbkp+}a?Nfy2ysN5R#(6zDq1pQf&%pmPzXj&>_5B}@A(rhdDouqm+PZ**RP!JM}JzZ)gWh(wM(>w)s|+9 zgsmn1772f2;}mC%kN|m%h4^0{^9^5jKVl6&#yx&XjDL}pFNCtdr~NnodFP>#3HkRE zG|l?N;S6;ALdIS$48;llQM;1Cme#F^sTIbUJ&+x}-pzHv(Fcd3&<>or<$NAP6Hn~- zCiVmqY85u8GpQYOi)&DXqc!!U?t?+Mt)o_z=lzQc@cz5Q;TlyWCv=(cwYimyDmMY>bj<0 z^IhZ@E2}Pgy)G!^5?GVIX(biga&3pi+VvZL#gNtY1Vfn2x++V zJ!Ag+Z%;MOrnV@7VTHpLErY=O zj;Aq`;0U;$c09V6o*^MRJW5>Sbb4bf<~DR5`gr&8+F$lV61czost%U!FzNAo2nd)42wijWTGv1?|3Lr=5{kt8@%>aPjhmQlqtXx+zNjceL}*E65u$>JpPlxOZgOmu6~9l)4Q|;OybjkscWX%mxN`uw zLviOawus9sOac66`~BLg=1%(=adJ+9pv_J^8HN>lB1Z5j$0{g9X86>$$dENZu2vgn zYa3UVc;#`q;|QZ;Z~#!y$gCY$wramk8oX~*0&jA@8}w7ve^5{N z?s`#333Y9tP9k>_oGvgiS3<;wpLa2UgcF@n0p6GS^8(&En)u!HnWtx_oLqx(`+k@% zGNuSz3YmVi$9>XY00w=p+-I|D6VFku_Ee+ippB+b#4TLnjolbn;S-Y+Of55rM7>s= zPN$QmL{D`ZzDNeIZ->o(hr}-choM*_LAkD;2z|}6m^>+PAfsViNKGyfI?tV_$aZk6 z_wdqd+Glf8M*pcPHvi?9z^?@c0H?<6QJ84(UeiB^BOm~00Xi>OvXCcq43Uybf~qRf zLZ;t=@{uQr@3;DRu~KK|i8$@Eh;ojQsRb<2Oi{QtIV!AfB}JzGZ4jjc_d<=axP`42 zky@EA$1u^GpFT^4}nr{V%k?)cG#mKEEA093;u)iCSA^ zG}EKc4~8eLIrN26NL|J5;HCE_WDYyuhkr&Yd4+)B&6die#bI*u7ABlV(--fulxzw< zs|a2%^Lf+F`5#?x<)3dp>yGns{c^hQ$G4y&T-?4NwA$Fct>8F~P*1D04OI8}U2yrP zAUvLJj~INWcAtze>`LJXgr?r};HhR0<7zgrxSE?g%9YT)nkK`!)Sj1|bDb#3W&PrG zG7crM?+NbnyM*!F)aW(^QhmNN{D|dPuCNxHXC0;pOv|SIC!m^zK2YfX4XE^lWVPmA zci;10@1(;KbMSVElwK6^A;T0DqcPT74ZXcnhMWa=Sh!>JcokUu3QV~{O|)FTyNnX- zaVn>hjYD%(b9(2>CAYsRZ#7wDvL=!;xX}4z_Iam#j3Yu&uQ!2|Y{2V`{Flsp<-?0D z9&YzDYL5*+DnLB(C|7t?)cV2S1!K3L^n}0FWltj~T@Q-~Mv$cYel|fD(?!lvo6U$e zu}V}2lFuz*X^W)cak~()64_G2{xE7fJ|-r(c_z3hQ3^Zs9g%seO7Ff|VDi67W;oEh zd_sWU0K*@W^+}VriL>B6f1a44cRbYl1>*g4KCWBbq#E4Yoo(F8x?g&-`#k80C+gUD zK64u{4i$~_(EMJYP`~EedW7D*X)`eU{Am^8KNL#>%+e8%O2z-(Ytf=qbYu3C%uaQ| zJ8H+V@%#Dkd^@}Mp0@WmyEiSGp)2Hmr`Fb%u(Xc!`+=tBx=h-1u#F;yLIqN?)A;P- zP>NfBI^M4>PZ$#KPd48_)x93~8lSfgbg_W1v>H2p5GeD@nxGIuHSqo4S1&yQm%R6S zVQNP=wwiA3Ai3aFnxm>HmgF9EJrhH_U>qdnqIy32`%6~qB5|^F|HPSB ziQ1r{S?YbPT2eHN81PC70xX5ndgN69ik08(5uabaxet|Gt|Bw#Tk%dp{!?TA@!QU) z-)$HFLt?ytkJeG(V|(OK371K0WTap!I-eopl6FqCB~c)zMl2)t+yoJ8cu| z0B$f-)Nc!lNV2dTCp;&hS`FJ%o0$n`$Pkt0dfUXo3wQJycKcCMw3hDbXnxOoJecRC zT0O9?3x$P607B5%`ODOr4_I@pRvd9>HWANbLxTy72JhqkLNb5#X}D!6{e%5ltTO#Y z_bs+|ExT8*kd6D#=M{Da|LgD1x4#UA4L&9fZl(l$7&r_9LI^Yj;BrGUM_m49wrLs= z7-@^>U*Avfuz~iS9P-{*w!r@>T;w@IQcx_*b7z;BVZ1RpX&kBbxc1bhG-1wT#C>dR zroZ5JPI-Kr46hJ&zw+sQe4VO4fvc;8+YFX2qi0LuK5x9|gD?G+H-F-P+40yz-E;qO z>}(0;WRsbEIs;E$-n&#zj9<#Ct&q<5>p%Ju0g7wN-&qHd=c>e!DYT`R_R-?Fu?T0lylZ)9y#zjaN3RX)D#oyi*vyzDEIr zg4C=w!^rX;>_xxP!lApvKyEi(g}m2eT($Nsc0-%bi!KM+Fp!_y)nS`|IaVCX?~)Dm zlFxk}=ydav6DO3v?onF4yjOW`ulL=_=3NJHvghJ`s{7m4OE`i7`~Mz&rrNA~R=FV= zgZFdQAuu^0?0`U(f1wb8G0^9nmuzLph+V5=H81J8t((@^f%Z?c40iric7~KEHx#8Qo z&E;OrEEV#gqX!E7KC%|F1M0y?RzqzbF9C|0%M3Q2Ua7_?f9 zmNp70Ve9f`)g%f_W%8(n5=)F3+7)jk;T-4)sjP%Duu|ou;pEjY3MS3$q_QwpImx6D zib&0DW004IwE|KsD3(SVswk3Tv{+R-%Q8lK#>xBEDv44wH7NwrhTbZxz?ec@(oH(4 zgu+T%k*3maW;S^>gjLPbtZYp%xr7Eygmk0?I&`p%MxDSlYj++qyDWnu^P_aAq{Mv{ zTC^Na8m1=KKE7gBilQ}(mCaIFwy1%9+c@eW;cp77R6_{`_cx@pl;cKq?r(As?9KCT zWpL_R%4SSf((oA+po@q_AK6GzNj{L26?g+@#hmM^NM$Gq%l)kxkG+**6jen8pWezu ziJk1823t~AxC%X`4Yzc*lFV8$@*5JgoUkywR8%Xr&96G7v%5oZG&@$StRmx}tdAM8 z61+l z%vrQuaBt-}Kj76Y#5^=4+YGhmW~j_MQ@4ZItb=2!2`~P8 z{^bkD=ZizYHBP|$)&25D|J$HEGOrhk%PmX0{m*Z~in~QTc5fK6yRc-X(8>irYpb|K zx}d}oXOT>dn+GIIQ?#O?njw*Jfn~`Ccrv8B+}Pzrt9Fi__ozJXKW>8R{lNC&05S&N z`<1o)uUrNLByY0;J8oMy!KUtM@2?C+R^a(>6X7eZz}vGm52o5ss540ux!CV~8?9{O zM#&=`=b#^{nX>zFnoUl#ZD#H--uEbroB1wmuThqdM4pT8)Q*lIiXV>GV(HG?m4}U= z>ph0naYUWj_xIVExm&UIRGP`jVL2hlg?xe%l4DF{OoC5n6w1ihyl-Q!G8w&40rT@+Q2W#uSI z(ahB-NeW#uA;&~JM3G3R0lG@fQMd!IIom{Hv%;a!rC3%; zsEQPBBG$^?k<`vHOC?q!+CC{ktn>xQ3v3h})=s0WWGWoZA~bPUwqfcObA=~i z6Vp%74xNQg_3TfkOiL)kCD&5kzFq)xHYi|LY-!MnlZR&oL$p*;q2S_fv`j`#$qH*0 zFJuux{0WjC!XA|fscp9w&n6t;c_m_;NTMsl>m>jPvk2{+l?fcZDE=U5vrBM5NtuAW zKhjuUMl*7xvBW0IvRR75gsGzVxymhcT8tqj0}I%-MCbC+Mbr&#q}C8%!WD|_WGGO0 z32o@;@ZC$64vJC;K>z~D;sKMfF*2nPZp9Y(nH%Gs-O)ELdOv!vzz=Y6uA~dA33bZbN0pYrEMa8>5*w)r(Tb50c3Y|7!a_5V z<#HJb@08d9_B&CTqP&{;r>r-^3mTW2=N*ab5zZIgw!8mgPqBkTS)JH!q>t~*(; zZ@q)y)SoW~4hQ-CS7h2F;4sL#gD0bUgnZsH>W8pm7KxdzX)Djjsmo6-BQK+9VOU2k zBDKtv8(FE299A}ARe0BXGWi3|^`2yIDm#91h)AW`GfzyBG@Q;y-YxKSZEeLS(n-HG zL9myIu4JiHBN3@0jNjhFrgMyE95Eb(%OpI5xxY3>=zndFEqCu_b9H-17(9)9%2ucD z>P{|_JmDT4)9)Ajg0EM|tCWPDH{|<*?{*Sr@AoonRK9UQw7V4UdC4ufQC{%Mzbq6{ zZpV_h^zwk9_vfS~bwnjPr`I0Iux*vjP_cZoqg8WaV0tb|K>${AgI<_ED=4%=9ZF732+@a!>(nM zvaY0hL{%~sBhbOTV_!a!Tgv>tIzjg%_~-p3)@ZAVxmO+t!nb7Z<@5Wn3&u)2s%$po zm6DU1)RHrSmfeJO^eWJ+ysXCsRBRV*#dlwCea3hLx;EWTNj~y93^b8Zu462^LmqTt zY*uC8Ouf50pbo#Xi&s_Ur5)$NXIi@g%Z(D__QXo4S(DdQ)bz3%A|4Z+B*8>1+8{i0 z5I7Gl-Qca!!>}~h%s+qT?&V^ibWEF^4|9{eK1tA26Ke$AK=&T{)bG*Oi%uOTMON~)^LY{Z)qTU|5PB&kV=>9Q<7-fSKnd}G)4 zLdM60Gh->st5Hf5@!gnN!1@i9hV8+O?}3-j2Z{}%guN`)@;h<8IHFZUUgCr>aB(90 zzH@i?i%o#X+qTVf@YW}Wt+D5$&(_3kohOvQ+vp{aTiy0RQ-de%SCw)QJ7~t^)~F5; z?!PaD?n`_}v)!w;JJfr)iBeAQ=)lNf7v}xB-bq z84z+wkdxoG9n5=QaLSX4zeS+3MaAbYc}=Ep7;M0?!(Z;~4SVm`=6l)d`VywFCEq?> z{>taGHOqIjJqYom#nHK>yw6oT@MHV68Eci+??mkwbR(XO6CKt6^Pi8PYX7GOw|Xjb zc(<<_$F+W_n1%N;=+aQ855 zvl8YqcAF_xMnVpcpM+pH0cV{B`et`NcwR<6+VpLU6u2V+|IVDdJy&wP0jP4jfR&&3 zhg)|*foqR|cm5weXIf{y{meYgl54cx^^X3?n4Y5xY_85%u|t+JSwXEV^TgewjD6iP z$cmtqaVeRmks5PYltV44H*~IC(?r;cem?WQ17M#v| zxDK!L0lPZA*F?Ve%f4)4{1Q~tUUN{>hJHZU@Fj=B;=_s;sA!q4BTORprDd)2E%_u1 z#4tVhHL|Dv3jF@|y{iL!xA`woQPi|qMyw8|Z!^LROqL4!e5eH1>Ouiwn zu+0}OeCw2TlK;s;*OqQ&%|Z0%-Fgi(Yr)#x6wgdcd6|u0)Hr6iwt;I{a-LOnfQ9hk z=pJU>Yney@7k^PCbGp zDE`{Q4F##G$0rn%mhQJ-{j`Si2KPN2(EZT5_1oe7q277+o5De;!F4LGotF0c^l&_g zeNjkQJ8v5eVj4(6<|cU{dXVr-s;E5`$yMQNmx-j}Ib$8G=E0V*mpZep#O1bI%i6Dn z%ov|h+9E3$Qo`HdR6_G9x3R$T#nqGS6Y>Q#j@x-;;9Q0aYR^V;g)UG@)ULCQD9AT-8E4SSV<;W`x^ayATLt6OX}!S5zhUVJ8el=9}%L!=G+_|I#B063GoOI^opl7QFG*VfO0 z*Uy&?-P_q|MSbO_!<^iSi@#F`4S=b07tduy0-1WAf=pS?_46cVP=lmtr9|Ll{)eHz z6G7M1%47pae;5AcONMRU5s}%kWvdP@B787R%-n?Q!C%lK`LeM6{qsORH81a>SPmDU z-13cxz|-Xy&$-e+-S5+zBm3$6=`LvuMu5Q%LT>+r`+GKX4vnK0Y}|W|O!~BI9Y0R0 z0Sxe#WZ%^XvP!8WU+*aqk&ROp9uC0ZI&-l9khepql!j6ZOUntW>}0#DDzbgoGiiRu z{*N^5U(J56`r`K)(*}=tam0FNocJK%L%c_qh&H{))^X8@jZF$BGz7%+Hs2~(pSqpLy+8cseIG7#Fnx0wQ+xMfa{iJyqC|UO z-WA2;+-g;(RX*jNf>U@h=rU)pr$;&LD>*lVeES1_;@3(s3ue zP-wkk^Jt;f1B>0KV=|iV#pYgp)OV)3`$|ePD3pEHm5r;l4!)EMkB4_+*bO%(`nePy zwFQRsm+jandi*`&A}|WbpF`Smuy2J`GY4RW3F9p)E^?@A?c58B@ z7Bac!4lCnLhi>C7WLEPSIyz!#P=TNv1QZXZ9uXhQF*3 zMc(pqhwOZh?I6wTeX(mSHm;qGQDvz#Ki|%FF+4m}PM+q{T~8Mt)WG02C~=lNMxEZY z87_Kgdl|5J^-Q4hm6mDR;KHS>II=(Xq4#zD5yqK%BjO^Z!&Y_zkoUw(=s-$;Q2Sw5 z>2k64?8b^`(*BHFyHE)qgd;!>z%YC|uvin6T1;$u&g!t>?!j-jM7D6za#7hbZC2A9 z^0m9}q+Pg=V76QxqUKw}jKL9xX(V}*)QRzfBv#IDz<#l3lrTZ>+Ub0+5w435Q1}QP z^(T5qJ@1byMQ^0N_cy)c=>oFrO=c?jc^5A2rN^&?ZocZvRyG?CEoM1LG=;cX+An0J zGInsFV1N-)5qWMbr)V-$(3y9@P8ESAX1_vtf_RkdHbWZg_s${Msx`KY5wbMNg@u;| zaPVH2$>et<$>wUPqoTGTk#r_XaW-oyVbK<$qLR$WfsDn3tDOeT3-%){mU?IS#9<7ESl4cne2dj)rY z^n9Y<)_&sSbKweY>f+^wZ|AGwmertpuK1#QG_7isbGg4innr%A*^*cEKG3IYl--B( z;5rD)t_|Loc1X_axX{ArI9-0VRm%)TcslsS0_mikAoMa}}^U<;}P3{rMBY-g2ZeCN9@x z+RWRVRR8EZOa1R|B8Ri_Z%da)&I_kG`b%Kj>lgQ@k=_CCz1nI|s&ZRm;mOt2-r@s> zP2F;)=em4r1grJxcUrKvd3N`^*WeC1#HtAePdadV8F5Sj-2?&94TN$R4zaRQpL6Ik z#9VBCt?Q0D%aHV|-F@yF@g<+t0!=TcP4gY5=jy}=NVzMbm<8gbqoE<$3xca8+!^@( zJp|ht1hwICkv}wWNVGR=!2J zN_@wad&`kp=`#JG56&4C=g6n40dy#1ZvIOi9^NBKHvS7wsxqE54qo18KioI>HVX>% zdOa3TY(!l5sy#c<(xl?qS3;`hvENUMg`!eKi*$ZS(QeNnFCt%=I|VokkSnUE4fOX9 z@7a_!HH9lOu8)^`zxsB6TCL;QKmNpX$MufS=PIGmZU22!FdCa1+hF7OL0u%<^>&Mn zY$DO**@K2a04_cr4a!&UT;HuRbEmv~E90T!p?sPHRu#I&x|_7*y6aU}J2#VOp5oE? zfH+(T6&I>4S^=)<%qut*x^}^nt8F+hIfsY2*QOHEMKLkSYffQ%R{dDl8$kXC>vf|+ z{e(@kFzMuS(8fyu3)-?YOaE;@)2R+o4RGKNMOf58v=@h?eA|Yfp;$96X7Tm)WYH+j z999W)zWs{Gf3~|P)(Ke_p8_?{MBpx8ZmW)24;#D zrdLxO+3Bi3_Z_4`26xGx4}NeBk6U#;$yf45Pkvd^Zx;2ku10i2Q^|`&DXkejVB`B| zOuIFW1icFYUyuzn8k9*Ae#qv#mx;b6^3%MJk3=Aq-y)ZZkv>%sWU6t4Bl0kHJX$yJCIGH{h>J;md?OGVe(KST$N0)PgY!6 zSm|f%9X~bp8xRZ>x>TnDEyUC%MG?3`a$gZFQA=#d&`H_>OwHI0%07^~k~fi48X8V2 zN|U~d?m)2IsK2R6uD^>PJc>NItR$hJ82|Znn~yg&5tpG?%!aJ{Tp!bs`wtGxAlJ zX07`(1U(NBf;EoBYg5g1h_m?I;{7Nn4Y1Ni_|VC>XO!HhsX!5esi@n1!SvU2KM%!8uqzJ)T(A*MN2BjM}VByt`IV1m%a|R z`X*`z`uR1T*xpCD`Ybiy_9T0MV)^y}uZAx4?|Q=R_YI%tse0hu(-0T)AKbK@)iKo^ z;>jOL!h_d?1xs(pf^6Y!ikLz%9n+dWxJJv-N8x+4V9(lSAPmGjN@XE!LBEVSH-<9W z7*kl(8m*677oDYlrT}0Yi9NBJ{Ol@Ow@(=ciZ$6TTxKY|w zulAVfDe6uFI;w2<+xA+0Khl6OsvYr*`OjI|qbDHZ!Z1Q^*%8=w((406!b<<%)^mbg zQ9F?s4hBP+-S>T|F_231VghroZ`J^OuvOj;@=Iz=`hMb5 zM7M+K)`uqvIu2~MUOV3^Dk{3ugsqQ-kPzMu571^-3|5xZB_`X-^Bpwho-AXve&fAu z{I>j})Q#d{BdFywkE@I zl^l&hE<1`1&Cc;I1Ix`nXU?U>Y(=5xA(f_tD-`NM-X(&l zv6W2)x~GYR2<4Vv29=V3eN{G_AiIk$VxH7vI1>?vcVTw|u6>)h2Vc!f&$p>D%hz*# zq^2`LBPs985ctag;%PBo?2;_g&j02|h6I%)pb@c03IQeW>3~NSj~mv4#|Y@PB{)92 z>3Y0$BPUs8aPfX`5fWzT;zDTo%F?p%-MGJ=?XNUp4}RN45%~D}QultA`i&&g%R>)Q zX_l(Gjcv=T<%0(lHoilJ0@+3Ds!%+8b5pQ!g_tQ=;{)?LaH zaZcobqY3oyXsM+-_4 zzuBo?z9@f9M99k~TMb{p6B(J-IX*S-7^dC@Fewj_+IqfeF#>{k+oYvA?u2m5Gd*LP zn4El)n7lXuXPUI_Kam;g^F!RDU3xuk@MA`5&Q2y;g9=V&2EQ_yUXKv8*}U+1=$~_$ z#feWyU=EEfC;*@%wrfPuF+-C$$T0JFNV3ye@k;7e+;^wl84tV`Z`==V76#{Qi%#Ti zuYKwd=X!siebDilcXslK2(MmM*lyI&&Ie$~HI*_SyF1NfaEZ46M&InTI`5ofh4H_! zct%H|PmFknGj9H?toE^Q!`?`$)QEx_ZWP9m^k)Ek5tWe_%vN@FFF$)UwC4&!Fz9@@S_`Wx?5p;uHPSozR7JBr)4E zm}w~*-E$DLS6D?|)-w>D^zcj8bvtyx%-#famBg{)_+5T1HchJH=ZX{qg`c;#=xQeB zNiu1hZu&7f%-BHF2s&nsh3e!@-78!Xk5weMo7u&PLd4storhN*7kco~*_Ly5^Uks3 z{zqk=5Ge^I^$$!2GifxN-;$SlAR<&c`On6nHtOR(^J--|^Yt!iE zupB_-4;9lLwqfDn<)yfJLD$~;winIue`oTNxU>trZU-nW43~k2GIC(beukQ#!|CE< z3oLtHss#o{t%l{~<+DV;j)|SnqX645gv!mLN)NWfEHjZa)u8#8E%sP~C4e?{g0j_) zL7ywo?RX%7Tc0TEu%8dJ76ZRa6u*v@IsSO@%mpA>OkM7DR7$qr})4Yo2UlCG3lr5QdepIDiDf~?W_ zYb!3-4~9cU?f+|K1!3V$k3${z^%J@3Dc078f$71IG=A5LV3evvZayI3lxCeh%8Y#9hR7; zatkq^G$7DqenCnv;Wa1e>h2k(W40^FDIpbyFR+l)ECQP+;baa62L!wb1CBXkzB~O8 z1Z1FAavVvuc6nt|mzBj!cC6icW9cNo-*~Ru$G@2tx$WE?3qz7PB#DUwpbfk-8pWKz zw6{?R8-hAdu`*sZ3?3hIYNn0qX&JnW(BI0pX}pX^+nxzfwf>yy$V9(f^jOoAr26v{ zE>$HNeSfiYSPd@1f=83Bw|Up@if!q)Oj_SSS?9OIckHeiI?nbX1d;E`$N5~`jPJ-@ugfvMKap)a^*_RU z@a+KPzAlVpsi0*@tW3L81nP3Nf;qmqoZu?sW;cKxzJHlHEl`#5!bXwFvUgkbye_t*6FsaL+H zQPH&yVNjXTA6=rCn0l8ZlPk%AM6F9b^Kg2tK71$Y=_}hSc#GNbs?L3t+0rfIjGJ^D zG{9=raFGAz_nF59iix2X2Kwm7Q7!o}`@&pSw*z3ORW%y&ST(KmXCR7fbQIkSm>@~Q z+Z*H*D)v{IM~NNvWRV#%XoP09kTO=bYRyG+I|-%6Uq`7g0^3AB2bl2b(eugYs#=9B zk8ZJ+RaAtkB(+_T-GBZ%(0BB{d3(AI1l|Unq@bG}V8lN%S^rDpj6Ty02h!9Y0E^dz z-M>U{67$Fpg*<&hE%~!s>>{IG2K`efZ;IoVYMvMPU1;#emp-UVMe%F3$wULY5}IUS z>^cM8i|o(%hJp55c52{wXLFgu0cFmg4E)U{xi0i-{I8j%!rt;?WFB3q$0AthS*k$?D65Pe^dX z9Wg0|)%dM#hb&C&P1XG9NGh+1+V1`X+wc zausipBc#B=pEeVfFnPcz#$6>@r5@<4tE5efPwY4R@oe>(XQr$p8e%lQmbE;82{LT7 z4tnNbwf6YJfIHI_w^GoEucVb)shw=A-370pz{{V}(sw>TbYR2^v)GWmoXW};#G zi%VYJm4)1Li6srD>9gfMA7|&3eI&kwmAOpe{KxbEw~UEw-ziBID07%5 znG5Iij-n@TXxzw95>J@62VnNqa)>4M;cUm|P^e<^5@Wpq2(|?f=_=&To6h<5s|8(P zNYkT#coyhKy$VY_%3HfuY9TTKnS)P1!GllCH@8=U3pF>lCxZ|DjaUnP+~4l;`=<<6 z$fRn-(q3`y(MBCD#pQBq)qdj9sC8GZ_ENm^QCWO3_Vqvs2Su>w8p8){W@HI9@ ziN#eaMg;q$510g928Op-hb;PWEyBP1DO04njd%*=(3JxqZ{-3&;5R>pGv7pd-ES9` zHrqoW4qc;Z=S635c@$bu0g9p8pVd$%NVWtYOZ!5fWCk@KT|FF-{E9;hL=->NIjv$r z0sApfZwGBD-9#0tFrjIVm16*-UZ&Jc znsjbSKSg{k;#ieS?0n0}3wkv*ti)i0xhT;@ue*_gOF+drR2&(Wkb*D#-B1 zv_BO&GN;Q#hhZx!V)E>9TlSrL6lav|sKx{YVB6b>TjW#&+lHgQ&wq`dNW$l38=e_D z2#4peOe!;kBXdKNpTW3BVa7G-_L#*O?rBdOn0tq@$CNGiHiOz=xhW@;EbEc+Cj2uk zUbc4?3C*ku3|<92Lm-^uuG@)&`$aDMnnzPbC}RtGwg_s+4i;*# z5$E{fw5_*7E~|Ov3;+GKLe@HTkeENT5lA#Kqh|=LX_{ zpibgYxwQoncn`%{)(9h0*>()nBFa^1mjw;vRbp6GB9d}xt|nuZul_7NGUm)E$%XAy zQSMb)oEy`n&Y*+F*i;&k0Tz}TGqtI(y6?P2@FXLb%a12s&*xYAVuxuU94jlaAkkNe zrxySNdx|2YVNe#1Fq|YVRzRRO|Jgcya<1w)^|z@?yoA<>RZL z_M3yQH=7wApZ}2NYLqW8u; z&12|A!%Z!7IHmaD=UhR<$c$T6FijSj=msVRnYjvF~T#?Z5SIcqaEpLNMRR_#Bt_~)seG{O83B{Yr9hOH zl0z_9Ig4)-t25753HOeMLP|Oqp>;AV4#t; zuVX}ZHvRqYSGK~12_cWRU|)V8it|76uo-nh;{JS z`&NX-5ix?CM@z@B* zHx%#vd@NnJF15dQO#6Zmg{y7rPKjU8;_XIl$-I46`S9^^g|?m^=0LsbolWxv05YWY zxL{#Qsq9e%ElgPs{~@^`A6>RX-#inS%*QWQsj2{^3fBa651C$9XTy?EcZAEyfF(Rs zXMofd9SK(_t~UGbJRhr>p7i`9*({#rg&<76^?dREJp0>w+k4#1qvxC3su`SCXAKyi za%=#R@`0{SpMJx*G5U>voo5qU0VQNGW&kr%uj2`vefU~(=54%6 z=J$0*ZCphR;nQOwBieA($LV&)()Kq$Zz8_b(Z`ZnStH_b#4%^*mt~K4pdByh-TyEV zsVNfb&J6ccFf%A{BvKesBjZ#QEN#eTRiY#VTY)GXl+S40<&b!WcNNwtM z*ArQFUH-D0GI2K~q8{_NbHFWPF2=|o&O?SbowCXvQezv@S%Hl=B+^lyZZe=>KjUf8 z_5Qtho8E9T;DK38*6KLuvFO1#=r(ZTejW2oK^Z?qV>SzVt4^dP^PNF~jMVU2fwA1b z;C1p=sb0YlUrt=Z^e#H7A6thNEF|;I^!Ri~3))~nTM(c9s5PBoVD`E-oI-MNn^%1v z<>)s{HD|N80uy4NDDJ<>95z;oPhK{*e6cx~e}|!cV_z}3yIb_9deM#-{!bMnxJybZ z_$fY4F^%%GNZRCZRQ&WXnyF|8u^htJN;eG_G3mi;nxEAR``tGw3|w4;&f0`O^aD~g zzfb02?+apQBYz-?fRBv6!xTM)h>Gj-f}FvJX$??h95_P*lGz&)heyWm`P@?Vev9(n z;^15B9{a6@W*Q}Yym8?QoN~H&H>a?$Ysj+Vd2xnfF8HpZ*Y56K{f{rH}f{Xkm zq%dC>Z2D|MYeqA9=(z$1fa<^)kX-KKnQ8>o(=8^yJ8UY6kPzY|xsv!%-msuyOTru2 zW4*YrFa!Ho%@3b#V);t;`xA*)(eJGC@V=qiRj-pePRGZfAjSQk{GXbl)_8z}tj

  • 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