From 222f67f043504d1ec014d21515d4748fbcead33e Mon Sep 17 00:00:00 2001 From: Bogdan Kolendovskyy Date: Wed, 7 Feb 2024 11:24:17 +0100 Subject: [PATCH] fix(esp_eth): ip101-specific reset_hw to match reset timings from datasheet IP101 requires 10ms reset assertion time and 10ms post-reset delay to properly initialize. --- components/esp_eth/src/esp_eth_phy_ip101.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/components/esp_eth/src/esp_eth_phy_ip101.c b/components/esp_eth/src/esp_eth_phy_ip101.c index 903ca066d62..78ae7a17e6e 100644 --- a/components/esp_eth/src/esp_eth_phy_ip101.c +++ b/components/esp_eth/src/esp_eth_phy_ip101.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2019-2022 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2019-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -12,6 +12,9 @@ static const char *TAG = "ip101"; +#define IP101_PHY_RESET_ASSERTION_TIME_US 10000 +#define IP101_PHY_POST_RESET_INIT_TIME_MS 10 + /***************Vendor Specific Register***************/ /** @@ -166,6 +169,14 @@ static esp_err_t ip101_get_link(esp_eth_phy_t *phy) return ret; } +static esp_err_t ip101_reset_hw(esp_eth_phy_t *phy) +{ + phy_802_3_t *phy_802_3 = esp_eth_phy_into_phy_802_3(phy); + esp_err_t ret = esp_eth_phy_802_3_reset_hw(phy_802_3, IP101_PHY_RESET_ASSERTION_TIME_US); + vTaskDelay(pdMS_TO_TICKS(IP101_PHY_POST_RESET_INIT_TIME_MS)); + return ret; +} + static esp_err_t ip101_init(esp_eth_phy_t *phy) { esp_err_t ret = ESP_OK; @@ -197,6 +208,7 @@ esp_eth_phy_t *esp_eth_phy_new_ip101(const eth_phy_config_t *config) // redefine functions which need to be customized for sake of IP101 ip101->phy_802_3.parent.init = ip101_init; ip101->phy_802_3.parent.get_link = ip101_get_link; + ip101->phy_802_3.parent.reset_hw = ip101_reset_hw; return &ip101->phy_802_3.parent; err: