git: cf037a17c7c8 - main - dwc: rockchip: Properly calculate mii clock based on pclk_mac

From: Emmanuel Vadot <manu_at_FreeBSD.org>
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