aboutsummaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authorEmmanuel Vadot <manu@FreeBSD.org>2023-10-06 15:44:00 +0000
committerEmmanuel Vadot <manu@FreeBSD.org>2023-10-06 17:05:43 +0000
commitcf037a17c7c81e8a2e73c89eb90877f2625749d7 (patch)
tree8fdc8c0f16297b1f80e4372fae88d538a3bf387c /sys/dev
parent7854d0f6584d259fd7f13595e3d3a4f157db9339 (diff)
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/dwc/if_dwc_rk.c24
1 files 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;
+
+ 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);
- /* Should be calculated from the clock */
- return (GMAC_MII_CLK_150_250M_DIV102);
+ return (-ERANGE);
}
static int