diff --git a/components/esp_phy/CMakeLists.txt b/components/esp_phy/CMakeLists.txt index 8a92c477f7..2ca1e68101 100644 --- a/components/esp_phy/CMakeLists.txt +++ b/components/esp_phy/CMakeLists.txt @@ -9,7 +9,7 @@ else() endif() if(IDF_TARGET STREQUAL "esp32h2") - set(srcs "src/esp32h2/phy_init.c") + set(srcs "src/phy_init_esp32hxx.c") else() set(srcs "src/phy_init.c") endif() @@ -28,15 +28,22 @@ if(link_binary_libs) target_link_libraries(${COMPONENT_LIB} PUBLIC phy) idf_component_get_property(esp_phy_lib esp_phy COMPONENT_LIB) - target_link_libraries(${COMPONENT_LIB} INTERFACE $ libphy.a - $) if(CONFIG_IDF_TARGET_ESP32) target_link_libraries(${COMPONENT_LIB} PUBLIC rtc) + target_link_libraries(${COMPONENT_LIB} INTERFACE $ libphy.a librtc.a + $) endif() - if(CONFIG_IDF_TARGET_ESP32C3 OR CONFIG_IDF_TARGET_ESP32S3) + if(CONFIG_IDF_TARGET_ESP32S2) + target_link_libraries(${COMPONENT_LIB} INTERFACE $ libphy.a + $) + endif() + + if(CONFIG_IDF_TARGET_ESP32C3 OR CONFIG_IDF_TARGET_ESP32S3 OR CONFIG_IDF_TARGET_ESP32H2) target_link_libraries(${COMPONENT_LIB} PUBLIC btbb) + target_link_libraries(${COMPONENT_LIB} INTERFACE $ libphy.a libbtbb.a + $) endif() endif() diff --git a/components/esp_phy/esp32h2/include/phy_init_data.h b/components/esp_phy/esp32h2/include/phy_init_data.h index c29eab08ec..7330d7e371 100644 --- a/components/esp_phy/esp32h2/include/phy_init_data.h +++ b/components/esp_phy/esp32h2/include/phy_init_data.h @@ -21,7 +21,7 @@ extern "C" { #endif -// ESP32H2-TODO: IDF-3398 +// There is no init data for H2 right now, could be added when necessary. #ifdef __cplusplus } diff --git a/components/esp_phy/src/esp32h2/phy_init.c b/components/esp_phy/src/esp32h2/phy_init.c deleted file mode 100644 index fdbd687fe3..0000000000 --- a/components/esp_phy/src/esp32h2/phy_init.c +++ /dev/null @@ -1,15 +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. - -// ESP32H2-TODO: IDF-3398 diff --git a/components/esp_phy/src/phy_init_esp32hxx.c b/components/esp_phy/src/phy_init_esp32hxx.c new file mode 100644 index 0000000000..dce1fd672e --- /dev/null +++ b/components/esp_phy/src/phy_init_esp32hxx.c @@ -0,0 +1,72 @@ +// 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 "esp_attr.h" +#include "freertos/portmacro.h" +#include "esp_phy_init.h" +#include "phy.h" + +#define PHY_ENABLE_VERSION_PRINT 1 + +static DRAM_ATTR portMUX_TYPE s_phy_int_mux = portMUX_INITIALIZER_UNLOCKED; +extern void phy_version_print(void); + +static _lock_t s_phy_access_lock; + +/* Reference count of enabling PHY */ +static uint8_t s_phy_access_ref = 0; + +extern void bt_bb_v2_init_cmplx(int print_version); + +uint32_t IRAM_ATTR phy_enter_critical(void) +{ + if (xPortInIsrContext()) { + portENTER_CRITICAL_ISR(&s_phy_int_mux); + + } else { + portENTER_CRITICAL(&s_phy_int_mux); + } + // Interrupt level will be stored in current tcb, so always return zero. + return 0; +} + +void IRAM_ATTR phy_exit_critical(uint32_t level) +{ + // Param level don't need any more, ignore it. + if (xPortInIsrContext()) { + portEXIT_CRITICAL_ISR(&s_phy_int_mux); + } else { + portEXIT_CRITICAL(&s_phy_int_mux); + } +} + +void esp_phy_enable(void) +{ + _lock_acquire(&s_phy_access_lock); + if (s_phy_access_ref == 0) { + register_chipv7_phy(NULL, NULL, PHY_RF_CAL_FULL); + bt_bb_v2_init_cmplx(PHY_ENABLE_VERSION_PRINT); + phy_version_print(); + } + + s_phy_access_ref++; + + _lock_release(&s_phy_access_lock); + // ESP32H2-TODO: enable common clk. +} + +void esp_phy_disable(void) +{ + // ESP32H2-TODO: close rf and disable clk for modem sleep and light sleep +} diff --git a/components/ieee802154/CMakeLists.txt b/components/ieee802154/CMakeLists.txt index 180a2303e5..9db0e672a5 100644 --- a/components/ieee802154/CMakeLists.txt +++ b/components/ieee802154/CMakeLists.txt @@ -1,18 +1,19 @@ +idf_build_get_property(idf_target IDF_TARGET) + idf_component_register( INCLUDE_DIRS include + REQUIRES esp_phy ) if(CONFIG_IEEE802154_ENABLED) + idf_component_get_property(esp_phy_lib esp_phy COMPONENT_LIB) if(CONFIG_IEEE802154_LIB_FROM_INTERNAL_SRC) idf_component_get_property(ieee802154_lib ieee802154_driver COMPONENT_LIB) - target_link_libraries(${COMPONENT_LIB} INTERFACE $) + target_link_libraries(${COMPONENT_LIB} INTERFACE $ libphy.a libbtbb.a + $) else() - add_prebuilt_library(ieee802154_lib "${CMAKE_CURRENT_SOURCE_DIR}/lib/${idf_target}/lib802154.a") - target_link_libraries(${COMPONENT_LIB} INTERFACE ieee802154_lib) + target_link_libraries(${COMPONENT_LIB} INTERFACE "-L ${CMAKE_CURRENT_SOURCE_DIR}/lib/${idf_target}") + target_link_libraries(${COMPONENT_LIB} INTERFACE $ lib802154.a libphy.a libbtbb.a + $) endif() - - # force the phy libraries to be linked behind ieee802154 - idf_component_get_property(esp_phy_lib esp_phy COMPONENT_LIB) - target_link_libraries(${COMPONENT_LIB} INTERFACE $ libphy.a libbtbb.a - $) endif() diff --git a/components/ieee802154/lib b/components/ieee802154/lib index 1751a7a4e2..d7d5f59259 160000 --- a/components/ieee802154/lib +++ b/components/ieee802154/lib @@ -1 +1 @@ -Subproject commit 1751a7a4e269822b8c193b291e58e02c2c670d22 +Subproject commit d7d5f592598457098e350fb2aa3670ebbe8056a3