mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
Merge branch 'bugfix/update_emac_h' into 'master'
update emac_reg_v2.h See merge request idf/esp-idf!2050
This commit is contained in:
commit
db90f49758
@ -36,20 +36,20 @@ static const char *TAG = "emac";
|
||||
|
||||
void emac_enable_flowctrl(void)
|
||||
{
|
||||
REG_SET_BIT(EMAC_GMACFLOWCONTROL_REG, EMAC_TRANSMIT_FLOW_CONTROL_ENABLE);
|
||||
REG_SET_BIT(EMAC_GMACFLOWCONTROL_REG, EMAC_RECEIVE_FLOW_CONTROL_ENABLE);
|
||||
REG_CLR_BIT(EMAC_GMACFLOWCONTROL_REG, EMAC_DISABLE_ZERO_QUANTA_PAUSE);
|
||||
REG_SET_FIELD(EMAC_GMACFLOWCONTROL_REG, EMAC_PAUSE_TIME, 0x1648);
|
||||
REG_SET_FIELD(EMAC_GMACFLOWCONTROL_REG, EMAC_PAUSE_LOW_THRESHOLD, 0x1);
|
||||
REG_SET_BIT(EMAC_GMACFC_REG, EMAC_TFCE);
|
||||
REG_SET_BIT(EMAC_GMACFC_REG, EMAC_RFCE);
|
||||
REG_CLR_BIT(EMAC_GMACFC_REG, EMAC_DZPQ);
|
||||
REG_SET_FIELD(EMAC_GMACFC_REG, EMAC_PAUSE_TIME, 0x1648);
|
||||
REG_SET_FIELD(EMAC_GMACFC_REG, EMAC_PLT, 0x1);
|
||||
}
|
||||
|
||||
void emac_disable_flowctrl(void)
|
||||
{
|
||||
REG_CLR_BIT(EMAC_GMACFLOWCONTROL_REG, EMAC_TRANSMIT_FLOW_CONTROL_ENABLE);
|
||||
REG_CLR_BIT(EMAC_GMACFLOWCONTROL_REG, EMAC_RECEIVE_FLOW_CONTROL_ENABLE);
|
||||
REG_CLR_BIT(EMAC_GMACFLOWCONTROL_REG, EMAC_DISABLE_ZERO_QUANTA_PAUSE);
|
||||
REG_SET_FIELD(EMAC_GMACFLOWCONTROL_REG, EMAC_PAUSE_TIME, 0);
|
||||
REG_SET_FIELD(EMAC_GMACFLOWCONTROL_REG, EMAC_PAUSE_LOW_THRESHOLD, 0);
|
||||
REG_CLR_BIT(EMAC_GMACFC_REG, EMAC_TFCE);
|
||||
REG_CLR_BIT(EMAC_GMACFC_REG, EMAC_RFCE);
|
||||
REG_CLR_BIT(EMAC_GMACFC_REG, EMAC_DZPQ);
|
||||
REG_SET_FIELD(EMAC_GMACFC_REG, EMAC_PAUSE_TIME, 0);
|
||||
REG_SET_FIELD(EMAC_GMACFC_REG, EMAC_PLT, 0);
|
||||
}
|
||||
|
||||
void emac_enable_dma_tx(void)
|
||||
@ -59,25 +59,17 @@ void emac_enable_dma_tx(void)
|
||||
|
||||
void emac_enable_dma_rx(void)
|
||||
{
|
||||
REG_SET_BIT(EMAC_DMAOPERATION_MODE_REG, EMAC_START_STOP_RECEIVE);
|
||||
REG_SET_BIT(EMAC_DMAOPERATION_MODE_REG, EMAC_START_STOP_RX);
|
||||
}
|
||||
|
||||
void emac_disable_dma_tx(void)
|
||||
{
|
||||
REG_CLR_BIT(EMAC_DMAOPERATION_MODE_REG, EMAC_OPERATE_SECOND_FRAME);
|
||||
REG_CLR_BIT(EMAC_DMAOPERATION_MODE_REG, EMAC_START_STOP_TRANSMISSION_COMMAND);
|
||||
}
|
||||
|
||||
void emac_disable_dma_rx(void)
|
||||
{
|
||||
REG_CLR_BIT(EMAC_DMAOPERATION_MODE_REG, EMAC_START_STOP_RECEIVE);
|
||||
}
|
||||
|
||||
|
||||
uint32_t emac_read_mac_version(void)
|
||||
{
|
||||
uint32_t data = 0;
|
||||
data = REG_READ(EMAC_GMACVERSION_REG);
|
||||
return data;
|
||||
REG_CLR_BIT(EMAC_DMAOPERATION_MODE_REG, EMAC_START_STOP_RX);
|
||||
}
|
||||
|
||||
void emac_reset(void)
|
||||
@ -103,22 +95,22 @@ void emac_enable_clk(bool enable)
|
||||
|
||||
void emac_dma_init(void)
|
||||
{
|
||||
REG_SET_BIT(EMAC_DMAOPERATION_MODE_REG, EMAC_FORWARD_UNDERSIZED_GOOD_FRAMES);
|
||||
REG_SET_BIT(EMAC_DMAOPERATION_MODE_REG, EMAC_OPERATE_SECOND_FRAME);
|
||||
REG_SET_BIT(EMAC_DMAOPERATION_MODE_REG, EMAC_FWD_UNDER_GF);
|
||||
REG_SET_BIT(EMAC_DMAOPERATION_MODE_REG, EMAC_OPT_SECOND_FRAME);
|
||||
REG_SET_FIELD(EMAC_DMABUSMODE_REG, EMAC_PROG_BURST_LEN, 4);
|
||||
REG_SET_BIT(EMAC_DMAOPERATION_MODE_REG, EMAC_DMAOPERATION_MODE_REG);
|
||||
}
|
||||
|
||||
void emac_mac_enable_txrx(void)
|
||||
{
|
||||
REG_SET_BIT(EMAC_GMACCONFIG_REG, EMAC_GMACRX);
|
||||
REG_SET_BIT(EMAC_GMACCONFIG_REG, EMAC_GMACTX);
|
||||
REG_SET_BIT(EMAC_GMACCONFIG_REG, EMAC_EMACRX);
|
||||
REG_SET_BIT(EMAC_GMACCONFIG_REG, EMAC_EMACTX);
|
||||
}
|
||||
|
||||
void emac_mac_init(void)
|
||||
{
|
||||
REG_SET_BIT(EMAC_GMACCONFIG_REG, EMAC_GMACDUPLEX);
|
||||
REG_SET_BIT(EMAC_GMACCONFIG_REG, EMAC_GMACMIIGMII);
|
||||
REG_CLR_BIT(EMAC_GMACCONFIG_REG, EMAC_GMACFESPEED);
|
||||
REG_SET_BIT(EMAC_GMACFRAMEFILTER_REG, EMAC_PROMISCUOUS_MODE);
|
||||
REG_SET_BIT(EMAC_GMACCONFIG_REG, EMAC_EMACDUPLEX);
|
||||
REG_SET_BIT(EMAC_GMACCONFIG_REG, EMAC_EMACMII);
|
||||
REG_CLR_BIT(EMAC_GMACCONFIG_REG, EMAC_EMACFESPEED);
|
||||
REG_SET_BIT(EMAC_GMACFF_REG, EMAC_PMODE);
|
||||
}
|
||||
|
@ -22,7 +22,7 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define EMAC_INTR_ENABLE_BIT (EMAC_TRANSMIT_INTERRUPT_ENABLE | EMAC_RECEIVE_INTERRUPT_ENABLE | EMAC_RECEIVE_BUFFER_UNAVAILABLE_ENABLE | EMAC_NORMAL_INTERRUPT_SUMMARY_ENABLE)
|
||||
#define EMAC_INTR_ENABLE_BIT (EMAC_DMAIN_TIE | EMAC_DMAIN_RIE | EMAC_DMAIN_RBUE | EMAC_DMAIN_NISE)
|
||||
|
||||
struct dma_desc {
|
||||
uint32_t desc0;
|
||||
@ -78,22 +78,22 @@ void inline emac_poll_rx_cmd(void)
|
||||
|
||||
void inline emac_disable_rx_intr(void)
|
||||
{
|
||||
REG_CLR_BIT(EMAC_DMAINTERRUPT_EN_REG, EMAC_RECEIVE_INTERRUPT_ENABLE);
|
||||
REG_CLR_BIT(EMAC_DMAIN_EN_REG, EMAC_DMAIN_RIE);
|
||||
}
|
||||
|
||||
void inline emac_enable_rx_intr(void)
|
||||
{
|
||||
REG_SET_BIT(EMAC_DMAINTERRUPT_EN_REG, EMAC_RECEIVE_INTERRUPT_ENABLE);
|
||||
REG_SET_BIT(EMAC_DMAIN_EN_REG, EMAC_DMAIN_RIE);
|
||||
}
|
||||
|
||||
void inline emac_disable_rx_unavail_intr(void)
|
||||
{
|
||||
REG_CLR_BIT(EMAC_DMAINTERRUPT_EN_REG, EMAC_RECEIVE_BUFFER_UNAVAILABLE_ENABLE);
|
||||
REG_CLR_BIT(EMAC_DMAIN_EN_REG, EMAC_DMAIN_RBUE);
|
||||
}
|
||||
|
||||
void inline emac_enable_rx_unavail_intr(void)
|
||||
{
|
||||
REG_SET_BIT(EMAC_DMAINTERRUPT_EN_REG, EMAC_RECEIVE_BUFFER_UNAVAILABLE_ENABLE);
|
||||
REG_SET_BIT(EMAC_DMAIN_EN_REG, EMAC_DMAIN_RBUE);
|
||||
}
|
||||
|
||||
void IRAM_ATTR inline emac_send_pause_frame_enable(void)
|
||||
|
@ -214,13 +214,13 @@ void esp_eth_smi_write(uint32_t reg_num, uint16_t value)
|
||||
{
|
||||
uint32_t phy_num = emac_config.phy_addr;
|
||||
|
||||
while (REG_GET_BIT(EMAC_GMACGMIIADDR_REG, EMAC_GMIIBUSY) == 1 ) {
|
||||
while (REG_GET_BIT(EMAC_GMIIADDR_REG, EMAC_MIIBUSY) == 1 ) {
|
||||
}
|
||||
|
||||
REG_WRITE(EMAC_GMACGMIIDATA_REG, value);
|
||||
REG_WRITE(EMAC_GMACGMIIADDR_REG, 0x3 | ((reg_num & 0x1f) << 6) | ((phy_num & 0x1f) << 11) | ((0x3) << 2));
|
||||
REG_WRITE(EMAC_MIIDATA_REG, value);
|
||||
REG_WRITE(EMAC_GMIIADDR_REG, 0x3 | ((reg_num & 0x1f) << 6) | ((phy_num & 0x1f) << 11) | ((0x3) << 2));
|
||||
|
||||
while (REG_GET_BIT(EMAC_GMACGMIIADDR_REG, EMAC_GMIIBUSY) == 1 ) {
|
||||
while (REG_GET_BIT(EMAC_GMIIADDR_REG, EMAC_MIIBUSY) == 1 ) {
|
||||
}
|
||||
}
|
||||
|
||||
@ -229,13 +229,13 @@ uint16_t esp_eth_smi_read(uint32_t reg_num)
|
||||
uint32_t phy_num = emac_config.phy_addr;
|
||||
uint16_t value = 0;
|
||||
|
||||
while (REG_GET_BIT(EMAC_GMACGMIIADDR_REG, EMAC_GMIIBUSY) == 1 ) {
|
||||
while (REG_GET_BIT(EMAC_GMIIADDR_REG, EMAC_MIIBUSY) == 1 ) {
|
||||
}
|
||||
|
||||
REG_WRITE(EMAC_GMACGMIIADDR_REG, 0x1 | ((reg_num & 0x1f) << 6) | ((phy_num & 0x1f) << 11) | (0x3 << 2));
|
||||
while (REG_GET_BIT(EMAC_GMACGMIIADDR_REG, EMAC_GMIIBUSY) == 1 ) {
|
||||
REG_WRITE(EMAC_GMIIADDR_REG, 0x1 | ((reg_num & 0x1f) << 6) | ((phy_num & 0x1f) << 11) | (0x3 << 2));
|
||||
while (REG_GET_BIT(EMAC_GMIIADDR_REG, EMAC_MIIBUSY) == 1 ) {
|
||||
}
|
||||
value = (REG_READ(EMAC_GMACGMIIDATA_REG) & 0xffff);
|
||||
value = (REG_READ(EMAC_MIIDATA_REG) & 0xffff);
|
||||
|
||||
return value;
|
||||
}
|
||||
@ -285,12 +285,12 @@ static void emac_set_user_config_data(eth_config_t *config )
|
||||
|
||||
static void emac_enable_intr()
|
||||
{
|
||||
REG_WRITE(EMAC_DMAINTERRUPT_EN_REG, EMAC_INTR_ENABLE_BIT);
|
||||
REG_WRITE(EMAC_DMAIN_EN_REG, EMAC_INTR_ENABLE_BIT);
|
||||
}
|
||||
|
||||
static void emac_disable_intr()
|
||||
{
|
||||
REG_WRITE(EMAC_DMAINTERRUPT_EN_REG, 0);
|
||||
REG_WRITE(EMAC_DMAIN_EN_REG, 0);
|
||||
}
|
||||
|
||||
static esp_err_t emac_verify_args(void)
|
||||
@ -590,22 +590,22 @@ static void IRAM_ATTR emac_process_intr(void *arg)
|
||||
|
||||
static void emac_set_macaddr_reg(void)
|
||||
{
|
||||
REG_SET_FIELD(EMAC_GMACADDR0HIGH_REG, EMAC_MAC_ADDRESS0_HI, (emac_config.macaddr[0] << 8) | (emac_config.macaddr[1]));
|
||||
REG_WRITE(EMAC_GMACADDR0LOW_REG, (emac_config.macaddr[2] << 24) | (emac_config.macaddr[3] << 16) | (emac_config.macaddr[4] << 8) | (emac_config.macaddr[5]));
|
||||
REG_SET_FIELD(EMAC_ADDR0HIGH_REG, EMAC_ADDRESS0_HI, (emac_config.macaddr[0] << 8) | (emac_config.macaddr[1]));
|
||||
REG_WRITE(EMAC_ADDR0LOW_REG, (emac_config.macaddr[2] << 24) | (emac_config.macaddr[3] << 16) | (emac_config.macaddr[4] << 8) | (emac_config.macaddr[5]));
|
||||
}
|
||||
|
||||
static void emac_check_phy_init(void)
|
||||
{
|
||||
emac_config.emac_phy_check_init();
|
||||
if (emac_config.emac_phy_get_duplex_mode() == ETH_MODE_FULLDUPLEX) {
|
||||
REG_SET_BIT(EMAC_GMACCONFIG_REG, EMAC_GMACDUPLEX);
|
||||
REG_SET_BIT(EMAC_GMACCONFIG_REG, EMAC_EMACDUPLEX);
|
||||
} else {
|
||||
REG_CLR_BIT(EMAC_GMACCONFIG_REG, EMAC_GMACDUPLEX);
|
||||
REG_CLR_BIT(EMAC_GMACCONFIG_REG, EMAC_EMACDUPLEX);
|
||||
}
|
||||
if (emac_config.emac_phy_get_speed_mode() == ETH_SPEED_MODE_100M) {
|
||||
REG_SET_BIT(EMAC_GMACCONFIG_REG, EMAC_GMACFESPEED);
|
||||
REG_SET_BIT(EMAC_GMACCONFIG_REG, EMAC_EMACFESPEED);
|
||||
} else {
|
||||
REG_CLR_BIT(EMAC_GMACCONFIG_REG, EMAC_GMACFESPEED);
|
||||
REG_CLR_BIT(EMAC_GMACCONFIG_REG, EMAC_EMACFESPEED);
|
||||
}
|
||||
#if CONFIG_EMAC_L2_TO_L3_RX_BUF_MODE
|
||||
emac_disable_flowctrl();
|
||||
@ -1091,7 +1091,6 @@ esp_err_t esp_eth_init_internal(eth_config_t *config)
|
||||
|
||||
emac_config.emac_gpio_config();
|
||||
|
||||
ESP_LOGI(TAG, "mac version %04xa", emac_read_mac_version());
|
||||
emac_hw_init();
|
||||
emac_macaddr_init();
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user