mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
pau: implement the pau regdma driver for esp32c6
This commit is contained in:
parent
5850cd7492
commit
d3e0e3e3b6
@ -73,6 +73,10 @@ if(NOT BOOTLOADER_BUILD)
|
||||
list(APPEND srcs "esp_ds.c")
|
||||
endif()
|
||||
|
||||
if(CONFIG_SOC_PAU_SUPPORTED)
|
||||
list(APPEND srcs "port/pau_regdma.c")
|
||||
endif()
|
||||
|
||||
if(CONFIG_SOC_PM_CPU_RETENTION_BY_SW)
|
||||
list(APPEND srcs "sleep_cpu_asm.S")
|
||||
set_property(TARGET ${COMPONENT_LIB}
|
||||
|
64
components/esp_hw_support/include/esp_private/esp_pau.h
Normal file
64
components/esp_hw_support/include/esp_private/esp_pau.h
Normal file
@ -0,0 +1,64 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
#include "soc/soc.h"
|
||||
#include "soc/soc_caps.h"
|
||||
|
||||
#if SOC_PAU_SUPPORTED
|
||||
#include "hal/pau_hal.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Set the addresses of all REGDMA Links
|
||||
* @param link_entries all linked lists addresses
|
||||
*/
|
||||
void pau_regdma_set_entry_link_addr(pau_regdma_link_addr_t *link_entries);
|
||||
|
||||
/**
|
||||
* @brief Set the address of WiFi MAC REGDMA Link in modem state
|
||||
* @param link_addr linked lists address
|
||||
*/
|
||||
void pau_regdma_set_modem_link_addr(void *link_addr);
|
||||
|
||||
/**
|
||||
* @brief Software trigger regdma to perform modem link backup
|
||||
*/
|
||||
void pau_regdma_trigger_modem_link_backup(void);
|
||||
|
||||
/**
|
||||
* @brief Software trigger regdma to perform modem link restore
|
||||
*/
|
||||
void pau_regdma_trigger_modem_link_restore(void);
|
||||
|
||||
/**
|
||||
* @brief Set the address of extra REGDMA Link in active state
|
||||
* @param link_addr linked lists address
|
||||
*/
|
||||
void pau_regdma_set_extra_link_addr(void *link_addr);
|
||||
|
||||
/**
|
||||
* @brief Software trigger regdma to perform extra link backup
|
||||
*/
|
||||
void pau_regdma_trigger_extra_link_backup(void);
|
||||
|
||||
/**
|
||||
* @brief Software trigger regdma to perform extra link restore
|
||||
*/
|
||||
void pau_regdma_trigger_extra_link_restore(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif //SOC_PAU_SUPPORTED
|
69
components/esp_hw_support/port/pau_regdma.c
Normal file
69
components/esp_hw_support/port/pau_regdma.c
Normal file
@ -0,0 +1,69 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <esp_types.h>
|
||||
#include "sdkconfig.h"
|
||||
#include "esp_attr.h"
|
||||
#include "soc/soc.h"
|
||||
#include "esp_private/esp_pau.h"
|
||||
#include "esp_log.h"
|
||||
#include "soc/pcr_reg.h"
|
||||
|
||||
static __attribute__((unused)) const char *TAG = "pau_regdma";
|
||||
|
||||
typedef struct {
|
||||
pau_hal_context_t *hal;
|
||||
} pau_context_t;
|
||||
|
||||
pau_context_t * __attribute__((weak)) PAU_instance(void)
|
||||
{
|
||||
static pau_hal_context_t pau_hal = { .dev = &PAU };
|
||||
static pau_context_t pau_context = { .hal = &pau_hal };
|
||||
*(volatile uint32_t *)PCR_REGDMA_CONF_REG |= PCR_REGDMA_CLK_EN;
|
||||
return &pau_context;
|
||||
}
|
||||
|
||||
void pau_regdma_set_entry_link_addr(pau_regdma_link_addr_t *link_entries)
|
||||
{
|
||||
ESP_LOGD(TAG, "All link addresses %p,%p,%p,%p", (*link_entries)[0], (*link_entries)[1], (*link_entries)[2], (*link_entries)[3]);
|
||||
pau_hal_set_regdma_entry_link_addr(PAU_instance()->hal, link_entries);
|
||||
}
|
||||
|
||||
void pau_regdma_set_modem_link_addr(void *link_addr)
|
||||
{
|
||||
pau_hal_set_regdma_modem_link_addr(PAU_instance()->hal, link_addr);
|
||||
}
|
||||
|
||||
void pau_regdma_trigger_modem_link_backup(void)
|
||||
{
|
||||
pau_hal_start_regdma_modem_link(PAU_instance()->hal, true);
|
||||
pau_hal_stop_regdma_modem_link(PAU_instance()->hal);
|
||||
}
|
||||
|
||||
void pau_regdma_trigger_modem_link_restore(void)
|
||||
{
|
||||
pau_hal_start_regdma_modem_link(PAU_instance()->hal, false);
|
||||
pau_hal_stop_regdma_modem_link(PAU_instance()->hal);
|
||||
}
|
||||
|
||||
void pau_regdma_set_extra_link_addr(void *link_addr)
|
||||
{
|
||||
pau_hal_set_regdma_extra_link_addr(PAU_instance()->hal, link_addr);
|
||||
}
|
||||
|
||||
void pau_regdma_trigger_extra_link_backup(void)
|
||||
{
|
||||
pau_hal_start_regdma_extra_link(PAU_instance()->hal, true);
|
||||
pau_hal_stop_regdma_extra_link(PAU_instance()->hal);
|
||||
}
|
||||
|
||||
void pau_regdma_trigger_extra_link_restore(void)
|
||||
{
|
||||
pau_hal_start_regdma_extra_link(PAU_instance()->hal, false);
|
||||
pau_hal_stop_regdma_extra_link(PAU_instance()->hal);
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2020-2022 Espressif Systems (Shanghai) CO LTD
|
||||
* SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
Loading…
x
Reference in New Issue
Block a user