esp_hw_support: support esp32h2 modem_clock driver

This commit is contained in:
wuzhenghui
2023-03-22 21:52:09 +08:00
parent 485f2882d1
commit ade6d3e5bc
2 changed files with 41 additions and 36 deletions

View File

@@ -20,17 +20,23 @@
// Please define the frequently called modules in the low bit, // Please define the frequently called modules in the low bit,
// which will improve the execution efficiency // which will improve the execution efficiency
typedef enum { typedef enum {
MODEM_CLOCK_FE = BIT(0), MODEM_CLOCK_FE,
MODEM_CLOCK_COEXIST = BIT(1), MODEM_CLOCK_COEXIST,
MODEM_CLOCK_I2C_MASTER = BIT(2), MODEM_CLOCK_I2C_MASTER,
MODEM_CLOCK_WIFI_MAC = BIT(3), #if SOC_WIFI_SUPPORTED
MODEM_CLOCK_WIFI_BB = BIT(4), MODEM_CLOCK_WIFI_MAC,
MODEM_CLOCK_ETM = BIT(5), MODEM_CLOCK_WIFI_BB,
MODEM_CLOCK_BLE_MAC = BIT(6), #endif
MODEM_CLOCK_BLE_BB = BIT(7), MODEM_CLOCK_ETM,
MODEM_CLOCK_802154_MAC = BIT(8), #if SOC_BT_SUPPORTED
MODEM_CLOCK_DATADUMP = BIT(9), MODEM_CLOCK_BLE_MAC,
MODEM_CLOCK_DEVICE_MAX = 10 MODEM_CLOCK_BLE_BB,
#endif
#if SOC_IEEE802154_SUPPORTED
MODEM_CLOCK_802154_MAC,
#endif
MODEM_CLOCK_DATADUMP,
MODEM_CLOCK_DEVICE_MAX
} modem_clock_device_t; } modem_clock_device_t;
@@ -83,6 +89,7 @@ static void IRAM_ATTR modem_clock_ble_bb_configure(modem_clock_context_t *ctx, b
#if SOC_IEEE802154_SUPPORTED #if SOC_IEEE802154_SUPPORTED
static void IRAM_ATTR modem_clock_ieee802154_mac_configure(modem_clock_context_t *ctx, bool enable) static void IRAM_ATTR modem_clock_ieee802154_mac_configure(modem_clock_context_t *ctx, bool enable)
{ {
modem_syscon_ll_enable_etm_clock(ctx->hal->syscon_dev, enable);
modem_syscon_ll_enable_ieee802154_apb_clock(ctx->hal->syscon_dev, enable); modem_syscon_ll_enable_ieee802154_apb_clock(ctx->hal->syscon_dev, enable);
modem_syscon_ll_enable_ieee802154_mac_clock(ctx->hal->syscon_dev, enable); modem_syscon_ll_enable_ieee802154_mac_clock(ctx->hal->syscon_dev, enable);
} }
@@ -95,12 +102,7 @@ static void IRAM_ATTR modem_clock_coex_configure(modem_clock_context_t *ctx, boo
static void IRAM_ATTR modem_clock_fe_configure(modem_clock_context_t *ctx, bool enable) static void IRAM_ATTR modem_clock_fe_configure(modem_clock_context_t *ctx, bool enable)
{ {
if (enable) { modem_clock_hal_enable_fe_clock(ctx->hal, enable);
modem_syscon_ll_enable_fe_apb_clock(ctx->hal->syscon_dev, enable);
modem_syscon_ll_enable_fe_cal_160m_clock(ctx->hal->syscon_dev, enable);
modem_syscon_ll_enable_fe_160m_clock(ctx->hal->syscon_dev, enable);
modem_syscon_ll_enable_fe_80m_clock(ctx->hal->syscon_dev, enable);
}
} }
static void IRAM_ATTR modem_clock_i2c_master_configure(modem_clock_context_t *ctx, bool enable) static void IRAM_ATTR modem_clock_i2c_master_configure(modem_clock_context_t *ctx, bool enable)
@@ -126,22 +128,22 @@ modem_clock_context_t * __attribute__((weak)) IRAM_ATTR MODEM_CLOCK_instance(voi
static DRAM_ATTR modem_clock_context_t modem_clock_context = { static DRAM_ATTR modem_clock_context_t modem_clock_context = {
.hal = &modem_clock_hal, .lock = portMUX_INITIALIZER_UNLOCKED, .hal = &modem_clock_hal, .lock = portMUX_INITIALIZER_UNLOCKED,
.dev = { .dev = {
{ .refs = 0, .configure = modem_clock_fe_configure }, [MODEM_CLOCK_FE] = { .refs = 0, .configure = modem_clock_fe_configure },
{ .refs = 0, .configure = modem_clock_coex_configure }, [MODEM_CLOCK_COEXIST] = { .refs = 0, .configure = modem_clock_coex_configure },
{ .refs = 0, .configure = modem_clock_i2c_master_configure }, [MODEM_CLOCK_I2C_MASTER] = { .refs = 0, .configure = modem_clock_i2c_master_configure },
#if SOC_WIFI_SUPPORTED #if SOC_WIFI_SUPPORTED
{ .refs = 0, .configure = modem_clock_wifi_mac_configure }, [MODEM_CLOCK_WIFI_MAC] = { .refs = 0, .configure = modem_clock_wifi_mac_configure },
{ .refs = 0, .configure = modem_clock_wifi_bb_configure }, [MODEM_CLOCK_WIFI_BB] = { .refs = 0, .configure = modem_clock_wifi_bb_configure },
#endif // SOC_WIFI_SUPPORTED #endif
{ .refs = 0, .configure = modem_clock_etm_configure }, [MODEM_CLOCK_ETM] = { .refs = 0, .configure = modem_clock_etm_configure },
#if SOC_BT_SUPPORTED #if SOC_BT_SUPPORTED
{ .refs = 0, .configure = modem_clock_ble_mac_configure }, [MODEM_CLOCK_BLE_MAC] = { .refs = 0, .configure = modem_clock_ble_mac_configure },
{ .refs = 0, .configure = modem_clock_ble_bb_configure }, [MODEM_CLOCK_BLE_BB] = { .refs = 0, .configure = modem_clock_ble_bb_configure },
#endif // SOC_BT_SUPPORTED #endif
#if SOC_IEEE802154_SUPPORTED #if SOC_IEEE802154_SUPPORTED
{ .refs = 0, .configure = modem_clock_ieee802154_mac_configure }, [MODEM_CLOCK_802154_MAC] = { .refs = 0, .configure = modem_clock_ieee802154_mac_configure },
#endif // SOC_IEEE802154_SUPPORTED #endif
{ .refs = 0, .configure = modem_clock_data_dump_configure } [MODEM_CLOCK_DATADUMP] = { .refs = 0, .configure = modem_clock_data_dump_configure }
}, },
.lpclk_src = { [0 ... PERIPH_MODEM_MODULE_NUM - 1] = MODEM_CLOCK_LPCLK_SRC_INVALID } .lpclk_src = { [0 ... PERIPH_MODEM_MODULE_NUM - 1] = MODEM_CLOCK_LPCLK_SRC_INVALID }
}; };
@@ -212,11 +214,11 @@ static void IRAM_ATTR modem_clock_device_disable(modem_clock_context_t *ctx, uin
assert(refs >= 0); assert(refs >= 0);
} }
#define WIFI_CLOCK_DEPS (MODEM_CLOCK_WIFI_MAC | MODEM_CLOCK_FE | MODEM_CLOCK_WIFI_BB | MODEM_CLOCK_COEXIST) #define WIFI_CLOCK_DEPS (BIT(MODEM_CLOCK_WIFI_MAC) | BIT(MODEM_CLOCK_FE) | BIT(MODEM_CLOCK_WIFI_BB) | BIT(MODEM_CLOCK_COEXIST))
#define BLE_CLOCK_DEPS (MODEM_CLOCK_BLE_MAC | MODEM_CLOCK_FE | MODEM_CLOCK_BLE_BB | MODEM_CLOCK_ETM | MODEM_CLOCK_COEXIST) #define BLE_CLOCK_DEPS (BIT(MODEM_CLOCK_BLE_MAC) | BIT(MODEM_CLOCK_FE) | BIT(MODEM_CLOCK_BLE_BB) | BIT(MODEM_CLOCK_ETM) | BIT(MODEM_CLOCK_COEXIST))
#define IEEE802154_CLOCK_DEPS (MODEM_CLOCK_802154_MAC | MODEM_CLOCK_FE | MODEM_CLOCK_BLE_BB | MODEM_CLOCK_ETM | MODEM_CLOCK_COEXIST) #define IEEE802154_CLOCK_DEPS (BIT(MODEM_CLOCK_802154_MAC) | BIT(MODEM_CLOCK_FE) | BIT(MODEM_CLOCK_BLE_BB) | BIT(MODEM_CLOCK_ETM) | BIT(MODEM_CLOCK_COEXIST))
#define COEXIST_CLOCK_DEPS (MODEM_CLOCK_COEXIST) #define COEXIST_CLOCK_DEPS (BIT(MODEM_CLOCK_COEXIST))
#define PHY_CLOCK_DEPS (MODEM_CLOCK_I2C_MASTER | MODEM_CLOCK_FE) #define PHY_CLOCK_DEPS (BIT(MODEM_CLOCK_I2C_MASTER) | BIT(MODEM_CLOCK_FE))
static inline uint32_t modem_clock_get_module_deps(periph_module_t module) static inline uint32_t modem_clock_get_module_deps(periph_module_t module)
{ {

View File

@@ -56,6 +56,10 @@ PROVIDE ( PCR = 0x60096000 );
PROVIDE ( TEE = 0x60098000 ); PROVIDE ( TEE = 0x60098000 );
PROVIDE ( HP_APM = 0x60099000 ); PROVIDE ( HP_APM = 0x60099000 );
PROVIDE ( IEEE802154 = 0x600A3000 );
PROVIDE ( MODEM_SYSCON = 0x600A5400 );
PROVIDE ( MODEM_LPCON = 0x600AD000 );
PROVIDE ( PMU = 0x600B0000 ); PROVIDE ( PMU = 0x600B0000 );
PROVIDE ( LP_CLKRST = 0x600B0400 ); PROVIDE ( LP_CLKRST = 0x600B0400 );
PROVIDE ( EFUSE = 0x600B0800 ); PROVIDE ( EFUSE = 0x600B0800 );
@@ -67,4 +71,3 @@ PROVIDE ( LP_PERI = 0x600B2800 );
PROVIDE ( LP_ANA_PERI = 0x600B2C00 ); PROVIDE ( LP_ANA_PERI = 0x600B2C00 );
PROVIDE ( LP_APM = 0x600B3800 ); PROVIDE ( LP_APM = 0x600B3800 );
PROVIDE ( OTP_DEBUG = 0x600B3C00 ); PROVIDE ( OTP_DEBUG = 0x600B3C00 );
PROVIDE ( IEEE802154 = 0x600A3000 );