mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-04 13:14:32 +02:00
esp_hw_support: support esp32h2 modem_clock driver
This commit is contained in:
@@ -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)
|
||||||
{
|
{
|
||||||
|
@@ -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 );
|
|
||||||
|
Reference in New Issue
Block a user