git: cf037a17c7c8 - main - dwc: rockchip: Properly calculate mii clock based on pclk_mac
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 06 Oct 2023 17:06:02 UTC
The branch main has been updated by manu:
URL: https://cgit.FreeBSD.org/src/commit/?id=cf037a17c7c81e8a2e73c89eb90877f2625749d7
commit cf037a17c7c81e8a2e73c89eb90877f2625749d7
Author: Emmanuel Vadot <manu@FreeBSD.org>
AuthorDate: 2023-10-06 15:44:00 +0000
Commit: Emmanuel Vadot <manu@FreeBSD.org>
CommitDate: 2023-10-06 17:05:43 +0000
dwc: rockchip: Properly calculate mii clock based on pclk_mac
---
sys/dev/dwc/if_dwc_rk.c | 24 ++++++++++++++++++++++--
1 file changed, 22 insertions(+), 2 deletions(-)
diff --git a/sys/dev/dwc/if_dwc_rk.c b/sys/dev/dwc/if_dwc_rk.c
index 43d4e4847c62..257d80bd1e59 100644
--- a/sys/dev/dwc/if_dwc_rk.c
+++ b/sys/dev/dwc/if_dwc_rk.c
@@ -581,9 +581,29 @@ if_dwc_rk_init(device_t dev)
static int
if_dwc_rk_mii_clk(device_t dev)
{
+ struct if_dwc_rk_softc *sc;
+ uint64_t freq;
+ int rv;
- /* Should be calculated from the clock */
- return (GMAC_MII_CLK_150_250M_DIV102);
+ sc = device_get_softc(dev);
+ if ((rv = clk_get_freq(sc->pclk_mac, &freq)) != 0)
+ return (-rv);
+ freq = freq / 1000 / 1000;
+
+ if (freq >= 60 && freq <= 100)
+ return (GMAC_MII_CLK_60_100M_DIV42);
+ else if (freq >= 100 && freq <= 150)
+ return (GMAC_MII_CLK_100_150M_DIV62);
+ else if (freq >= 20 && freq <= 35)
+ return (GMAC_MII_CLK_25_35M_DIV16);
+ else if (freq >= 35 && freq <= 60)
+ return (GMAC_MII_CLK_35_60M_DIV26);
+ else if (freq >= 150 && freq <= 250)
+ return (GMAC_MII_CLK_150_250M_DIV102);
+ else if (freq >= 250 && freq <= 300)
+ return (GMAC_MII_CLK_250_300M_DIV124);
+
+ return (-ERANGE);
}
static int