mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
Merge branch 'refactor/g0_for_xtensa' into 'master'
G0: Support Xtensa targets for G0-only compilation Closes IDF-3087 See merge request espressif/esp-idf!18538
This commit is contained in:
commit
136c873364
@ -11,7 +11,7 @@
|
|||||||
#include "soc/apb_saradc_reg.h"
|
#include "soc/apb_saradc_reg.h"
|
||||||
#include "soc/system_reg.h"
|
#include "soc/system_reg.h"
|
||||||
#include "esp_private/regi2c_ctrl.h"
|
#include "esp_private/regi2c_ctrl.h"
|
||||||
#include "regi2c_saradc.h"
|
#include "soc/regi2c_saradc.h"
|
||||||
|
|
||||||
void bootloader_random_enable(void)
|
void bootloader_random_enable(void)
|
||||||
{
|
{
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
#include "soc/apb_saradc_reg.h"
|
#include "soc/apb_saradc_reg.h"
|
||||||
#include "soc/system_reg.h"
|
#include "soc/system_reg.h"
|
||||||
#include "esp_private/regi2c_ctrl.h"
|
#include "esp_private/regi2c_ctrl.h"
|
||||||
#include "regi2c_saradc.h"
|
#include "soc/regi2c_saradc.h"
|
||||||
|
|
||||||
void bootloader_random_enable(void)
|
void bootloader_random_enable(void)
|
||||||
{
|
{
|
||||||
|
@ -11,8 +11,8 @@
|
|||||||
#include "soc/apb_saradc_reg.h"
|
#include "soc/apb_saradc_reg.h"
|
||||||
#include "soc/rtc_cntl_reg.h"
|
#include "soc/rtc_cntl_reg.h"
|
||||||
#include "soc/sens_reg.h"
|
#include "soc/sens_reg.h"
|
||||||
#include "esp_private/regi2c_ctrl.h"
|
#include "hal/regi2c_ctrl.h"
|
||||||
#include "regi2c_saradc.h"
|
#include "soc/regi2c_saradc.h"
|
||||||
|
|
||||||
void bootloader_random_enable(void)
|
void bootloader_random_enable(void)
|
||||||
{
|
{
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
#include "esp_check.h"
|
#include "esp_check.h"
|
||||||
#include "soc/rtc_cntl_reg.h"
|
#include "soc/rtc_cntl_reg.h"
|
||||||
#include "esp_private/regi2c_ctrl.h"
|
#include "esp_private/regi2c_ctrl.h"
|
||||||
#include "regi2c_saradc.h"
|
#include "soc/regi2c_saradc.h"
|
||||||
#include "esp_log.h"
|
#include "esp_log.h"
|
||||||
#include "esp_efuse_rtc_calib.h"
|
#include "esp_efuse_rtc_calib.h"
|
||||||
#include "hal/temperature_sensor_ll.h"
|
#include "hal/temperature_sensor_ll.h"
|
||||||
|
@ -392,7 +392,7 @@ TEST_CASE("test_adc_single_cali_time", "[adc][ignore][manual]")
|
|||||||
#include "esp_sleep.h"
|
#include "esp_sleep.h"
|
||||||
#include "esp_private/regi2c_ctrl.h"
|
#include "esp_private/regi2c_ctrl.h"
|
||||||
#if REGI2C_ANA_CALI_PD_WORKAROUND
|
#if REGI2C_ANA_CALI_PD_WORKAROUND
|
||||||
#include "regi2c_saradc.h"
|
#include "soc/regi2c_saradc.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//ADC Channels
|
//ADC Channels
|
||||||
|
@ -1,9 +0,0 @@
|
|||||||
/*
|
|
||||||
* SPDX-FileCopyrightText: 2019-2022 Espressif Systems (Shanghai) CO LTD
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
|
||||||
*/
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include "soc/regi2c_saradc.h"
|
|
@ -1,9 +0,0 @@
|
|||||||
/*
|
|
||||||
* SPDX-FileCopyrightText: 2019-2022 Espressif Systems (Shanghai) CO LTD
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
|
||||||
*/
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include "soc/regi2c_saradc.h"
|
|
@ -1,9 +0,0 @@
|
|||||||
/*
|
|
||||||
* SPDX-FileCopyrightText: 2019-2021 Espressif Systems (Shanghai) CO LTD
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
|
||||||
*/
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include "soc/regi2c_saradc.h"
|
|
@ -9,7 +9,7 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include "freertos/FreeRTOS.h"
|
#include "freertos/FreeRTOS.h"
|
||||||
#include "freertos/semphr.h"
|
#include "freertos/semphr.h"
|
||||||
#include "regi2c_ctrl.h"
|
#include "hal/regi2c_ctrl.h"
|
||||||
|
|
||||||
static portMUX_TYPE mux = portMUX_INITIALIZER_UNLOCKED;
|
static portMUX_TYPE mux = portMUX_INITIALIZER_UNLOCKED;
|
||||||
|
|
||||||
@ -58,7 +58,7 @@ void IRAM_ATTR regi2c_exit_critical(void)
|
|||||||
* This is a workaround, and is fixed on later chips
|
* This is a workaround, and is fixed on later chips
|
||||||
*/
|
*/
|
||||||
#if REGI2C_ANA_CALI_PD_WORKAROUND
|
#if REGI2C_ANA_CALI_PD_WORKAROUND
|
||||||
#include "regi2c_saradc.h"
|
#include "soc/regi2c_saradc.h"
|
||||||
|
|
||||||
static DRAM_ATTR uint8_t reg_val[REGI2C_ANA_CALI_BYTE_NUM];
|
static DRAM_ATTR uint8_t reg_val[REGI2C_ANA_CALI_BYTE_NUM];
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "esp_private/regi2c_ctrl.h"
|
#include "esp_private/regi2c_ctrl.h"
|
||||||
#include "regi2c_saradc.h"
|
#include "soc/regi2c_saradc.h"
|
||||||
#include "soc/apb_saradc_struct.h"
|
#include "soc/apb_saradc_struct.h"
|
||||||
#include "soc/soc.h"
|
#include "soc/soc.h"
|
||||||
#include "soc/soc_caps.h"
|
#include "soc/soc_caps.h"
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "esp_private/regi2c_ctrl.h"
|
#include "esp_private/regi2c_ctrl.h"
|
||||||
#include "regi2c_saradc.h"
|
#include "soc/regi2c_saradc.h"
|
||||||
#include "soc/apb_saradc_struct.h"
|
#include "soc/apb_saradc_struct.h"
|
||||||
#include "soc/soc.h"
|
#include "soc/soc.h"
|
||||||
#include "soc/soc_caps.h"
|
#include "soc/soc_caps.h"
|
||||||
|
@ -8,9 +8,9 @@
|
|||||||
#include "hal/brownout_hal.h"
|
#include "hal/brownout_hal.h"
|
||||||
#include "soc/rtc_cntl_struct.h"
|
#include "soc/rtc_cntl_struct.h"
|
||||||
#include "soc/rtc_cntl_reg.h"
|
#include "soc/rtc_cntl_reg.h"
|
||||||
#include "esp_private/regi2c_ctrl.h"
|
|
||||||
#include "regi2c_brownout.h"
|
|
||||||
#include "esp_attr.h"
|
#include "esp_attr.h"
|
||||||
|
#include "hal/regi2c_ctrl.h"
|
||||||
|
#include "soc/regi2c_brownout.h"
|
||||||
|
|
||||||
void brownout_hal_config(const brownout_hal_config_t *cfg)
|
void brownout_hal_config(const brownout_hal_config_t *cfg)
|
||||||
{
|
{
|
||||||
|
@ -17,8 +17,9 @@
|
|||||||
#include "soc/apb_saradc_reg.h"
|
#include "soc/apb_saradc_reg.h"
|
||||||
#include "soc/rtc_cntl_struct.h"
|
#include "soc/rtc_cntl_struct.h"
|
||||||
#include "soc/rtc_cntl_reg.h"
|
#include "soc/rtc_cntl_reg.h"
|
||||||
#include "esp_private/regi2c_ctrl.h"
|
#include "soc/regi2c_defs.h"
|
||||||
#include "regi2c_saradc.h"
|
#include "hal/regi2c_ctrl.h"
|
||||||
|
#include "soc/regi2c_saradc.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include "esp_private/regi2c_ctrl.h"
|
#include "esp_private/regi2c_ctrl.h"
|
||||||
#include "regi2c_saradc.h"
|
#include "soc/regi2c_saradc.h"
|
||||||
#include "soc/apb_saradc_struct.h"
|
#include "soc/apb_saradc_struct.h"
|
||||||
#include "soc/rtc_cntl_reg.h"
|
#include "soc/rtc_cntl_reg.h"
|
||||||
#include "soc/sens_struct.h"
|
#include "soc/sens_struct.h"
|
||||||
|
@ -8,9 +8,9 @@
|
|||||||
#include "hal/brownout_hal.h"
|
#include "hal/brownout_hal.h"
|
||||||
#include "soc/rtc_cntl_struct.h"
|
#include "soc/rtc_cntl_struct.h"
|
||||||
#include "soc/rtc_cntl_reg.h"
|
#include "soc/rtc_cntl_reg.h"
|
||||||
#include "esp_private/regi2c_ctrl.h"
|
|
||||||
#include "regi2c_brownout.h"
|
|
||||||
#include "esp_attr.h"
|
#include "esp_attr.h"
|
||||||
|
#include "hal/regi2c_ctrl.h"
|
||||||
|
#include "soc/regi2c_brownout.h"
|
||||||
|
|
||||||
|
|
||||||
void brownout_hal_config(const brownout_hal_config_t *cfg)
|
void brownout_hal_config(const brownout_hal_config_t *cfg)
|
||||||
|
@ -18,9 +18,9 @@
|
|||||||
#include "soc/apb_saradc_reg.h"
|
#include "soc/apb_saradc_reg.h"
|
||||||
#include "soc/rtc_cntl_struct.h"
|
#include "soc/rtc_cntl_struct.h"
|
||||||
#include "soc/rtc_cntl_reg.h"
|
#include "soc/rtc_cntl_reg.h"
|
||||||
|
#include "soc/regi2c_defs.h"
|
||||||
#include "esp_private/regi2c_ctrl.h"
|
#include "hal/regi2c_ctrl.h"
|
||||||
#include "regi2c_saradc.h"
|
#include "soc/regi2c_saradc.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <stddef.h> /* For NULL declaration */
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include "soc/soc_caps.h"
|
#include "soc/soc_caps.h"
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <stddef.h> /* For size_t type */
|
||||||
#include "soc/hwcrypto_reg.h"
|
#include "soc/hwcrypto_reg.h"
|
||||||
|
|
||||||
#define SHA256_BLOCK_SZ 64
|
#define SHA256_BLOCK_SZ 64
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <stddef.h> /* For NULL declaration */
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include "hal/misc.h"
|
#include "hal/misc.h"
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include "esp_private/regi2c_ctrl.h"
|
#include "esp_private/regi2c_ctrl.h"
|
||||||
#include "regi2c_saradc.h"
|
#include "soc/regi2c_saradc.h"
|
||||||
#include "soc/apb_saradc_struct.h"
|
#include "soc/apb_saradc_struct.h"
|
||||||
#include "soc/rtc_cntl_reg.h"
|
#include "soc/rtc_cntl_reg.h"
|
||||||
#include "soc/sens_struct.h"
|
#include "soc/sens_struct.h"
|
||||||
|
@ -5,6 +5,14 @@
|
|||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
/**
|
||||||
|
* When compiling G0-layer only, we can't depend on `esp_hw_support` component.
|
||||||
|
* However, `esp_private/regi2c_ctrl.h` is part of that component.
|
||||||
|
* Thus, if we don't have this header file in our compilation unit, we should use
|
||||||
|
* ROM functions.
|
||||||
|
* The main difference is that `regi2c_ctrl.h` implementation protects the functions
|
||||||
|
* with mutex. ROM functions must be protected explicitly by the user.
|
||||||
|
*/
|
||||||
#if __has_include("esp_private/regi2c_ctrl.h")
|
#if __has_include("esp_private/regi2c_ctrl.h")
|
||||||
#include "esp_private/regi2c_ctrl.h"
|
#include "esp_private/regi2c_ctrl.h"
|
||||||
#else
|
#else
|
||||||
|
@ -30,13 +30,25 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include <xtensa/config/core.h>
|
#include <xtensa/config/core.h>
|
||||||
|
#include "esp_attr.h"
|
||||||
#include "freertos/FreeRTOS.h"
|
|
||||||
#include "freertos/portable.h"
|
|
||||||
#include "xtensa/xtensa_api.h"
|
#include "xtensa/xtensa_api.h"
|
||||||
#include "sdkconfig.h"
|
#include "sdkconfig.h"
|
||||||
#include "esp_rom_sys.h"
|
#include "esp_rom_sys.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* When compiling for G0-only, we don't have FreeRTOS component.
|
||||||
|
* In fact, FreeRTOS component is only used for the core configuration, so
|
||||||
|
* the macro portNUM_PROCESSORS and the macro/function xPortGetCoreID need to
|
||||||
|
* be defined.
|
||||||
|
*/
|
||||||
|
#if __has_include("freertos/FreeRTOS.h")
|
||||||
|
#include "freertos/FreeRTOS.h"
|
||||||
|
#include "freertos/portable.h"
|
||||||
|
#else
|
||||||
|
_Static_assert(portNUM_PROCESSORS == 1, "G0-only Xtensa builds can only be compiled in single-core mode");
|
||||||
|
#define xPortGetCoreID() 0
|
||||||
|
#endif
|
||||||
|
|
||||||
#if XCHAL_HAVE_EXCEPTIONS
|
#if XCHAL_HAVE_EXCEPTIONS
|
||||||
|
|
||||||
/* Handler table is in xtensa_intr_asm.S */
|
/* Handler table is in xtensa_intr_asm.S */
|
||||||
|
@ -1,4 +1,10 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2015-2019 Cadence Design Systems, Inc.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*
|
||||||
|
* SPDX-FileContributor: 2016-2022 Espressif Systems (Shanghai) CO LTD
|
||||||
|
*/
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2015-2019 Cadence Design Systems, Inc.
|
* Copyright (c) 2015-2019 Cadence Design Systems, Inc.
|
||||||
*
|
*
|
||||||
@ -31,7 +37,15 @@
|
|||||||
#include <xtensa/config/core.h>
|
#include <xtensa/config/core.h>
|
||||||
|
|
||||||
#include "xtensa/xtensa_context.h"
|
#include "xtensa/xtensa_context.h"
|
||||||
#include "freertos/FreeRTOSConfig.h"
|
|
||||||
|
/*
|
||||||
|
* When compiling for G0-only, we don't have FreeRTOS component.
|
||||||
|
* In fact, FreeRTOS component is only used for the configuration, so only the
|
||||||
|
* macro portNUM_PROCESSORS needs to be defined (in the build file).
|
||||||
|
*/
|
||||||
|
#if __has_include("freertos/FreeRTOSConfig.h")
|
||||||
|
#include "freertos/FreeRTOSConfig.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#if XCHAL_HAVE_INTERRUPTS
|
#if XCHAL_HAVE_INTERRUPTS
|
||||||
|
|
||||||
|
@ -118,6 +118,13 @@ argtable3:
|
|||||||
- BSD-3-Clause
|
- BSD-3-Clause
|
||||||
- Apache-2.0
|
- Apache-2.0
|
||||||
|
|
||||||
|
xtensa:
|
||||||
|
include:
|
||||||
|
- 'components/xtensa/**'
|
||||||
|
allowed_licenses:
|
||||||
|
- Apache-2.0 #Files added to the xtensa component by us
|
||||||
|
- MIT #Cadence sources
|
||||||
|
|
||||||
# files matching this section do not perform the check
|
# files matching this section do not perform the check
|
||||||
# file patterns starting with ! are negated, meaning files matching them won't match the section.
|
# file patterns starting with ! are negated, meaning files matching them won't match the section.
|
||||||
ignore:
|
ignore:
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
# https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/build-system.html
|
# https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/build-system.html
|
||||||
# The following five lines of boilerplate have to be in your project's
|
# The following five lines of boilerplate have to be in your project's
|
||||||
# CMakeLists in this exact order for cmake to work correctly
|
# CMakeLists in this exact order for cmake to work correctly
|
||||||
cmake_minimum_required(VERSION 3.5)
|
cmake_minimum_required(VERSION 3.16)
|
||||||
|
|
||||||
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
|
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
|
||||||
|
|
||||||
@ -32,6 +32,12 @@ if(CONFIG_IDF_TARGET_ESP32C2)
|
|||||||
idf_build_set_property(C_COMPILE_OPTIONS "-DCONFIG_MMU_PAGE_SIZE=64" APPEND)
|
idf_build_set_property(C_COMPILE_OPTIONS "-DCONFIG_MMU_PAGE_SIZE=64" APPEND)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# Currently, only support a single core on Xtensa targets.
|
||||||
|
if(CONFIG_IDF_TARGET_ARCH_XTENSA)
|
||||||
|
idf_build_set_property(C_COMPILE_OPTIONS "-DportNUM_PROCESSORS=1" APPEND)
|
||||||
|
idf_build_set_property(ASM_COMPILE_OPTIONS "-DportNUM_PROCESSORS=1" APPEND)
|
||||||
|
endif()
|
||||||
|
|
||||||
# Now that the project has been initialized, let's check which components it is using
|
# Now that the project has been initialized, let's check which components it is using
|
||||||
# The following variable lists all the components that shall be used by this project
|
# The following variable lists all the components that shall be used by this project
|
||||||
set(expected_components
|
set(expected_components
|
||||||
|
@ -1,22 +1,18 @@
|
|||||||
| Supported Targets | ESP32-C3 | ESP32-C2 | ESP32-H2 |
|
| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | ESP32-C2 | ESP32-H2 |
|
||||||
| ----------------- | -------- | -------- | -------- |
|
| ----------------- | ----- | -------- | -------- | -------- | -------- | -------- |
|
||||||
|
|
||||||
All Xtensa based targets (ESP32, ESP32-S2, ESP32-S3) are currently not supported by this test, because their components having dependencies on G1+ components.
|
|
||||||
|
|
||||||
# "G0"-components-only app
|
# "G0"-components-only app
|
||||||
|
|
||||||
This test application will compile ESP-IDF and this test's main component with G0 components only. The goal is to make sure that no G0 component depends
|
This test application will compile ESP-IDF and this test's main component with G0 components only.
|
||||||
on G1 or higher component.
|
The goal is to make sure that no G0 component depends on G1 or higher component.
|
||||||
|
|
||||||
Currently, this test only supports RISC-V based targets as Xtensa ones still have some G0 components depending on G1+ components.
|
This supports all Xtensa and RISC-V based ESP targets.
|
||||||
|
|
||||||
Compiling this test with an Xtensa based target will result in a CMake error, showing all the non-G0 components included in the build file generation.
|
|
||||||
|
|
||||||
The purpose of this example is to make sure that any modification to ESP-IDF doesn't violate the G0-G1+ dependency rule.
|
The purpose of this example is to make sure that any modification to ESP-IDF doesn't violate the G0-G1+ dependency rule.
|
||||||
|
|
||||||
# Using this test app
|
# Using this test app
|
||||||
|
|
||||||
Set the target to a RISC-V based, `esp32c3` for example:
|
Set the target, `esp32c3` for example:
|
||||||
```bash
|
```bash
|
||||||
idf.py set-target esp32c3
|
idf.py set-target esp32c3
|
||||||
```
|
```
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
idf_component_register(SRCS "g0_components.c"
|
idf_component_register(SRCS ""
|
||||||
INCLUDE_DIRS ".")
|
INCLUDE_DIRS ".")
|
||||||
|
@ -1,11 +0,0 @@
|
|||||||
/*
|
|
||||||
* SPDX-FileCopyrightText: 2015-2022 Espressif Systems (Shanghai) CO LTD
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
|
||||||
*/
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
void app_main(void)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user