Re: [net-next,PATCH 2/4] net: mdio-ipq4019: add clock support
On Fri, Jul 03, 2020 at 01:37:48PM +0200, Robert Marko wrote: > This is not the actual MDIO bus clock, that is the clock frequency > that SoC clock generator produces. > MDIO controller has an internal divider set up for that 100MHz, I > don't know the actual MDIO bus clock > frequency as it's not listed anywhere. Hi Robert >From Documentation/devicetree/bindings/net/mdio.yaml clock-frequency: description: Desired MDIO bus clock frequency in Hz. Values greater than IEEE 802.3 defined 2.5MHz should only be used when all devices on the bus support the given clock speed. You have to use that definition for clock-frequency. It means the MDIO bus frequency. It would be good if you can get an oscilloscope onto the bus and measure it. Otherwise, we have to assume the divider is 40, in order to give a standards compliment 2.5MHz. You can then work out what value to pass to the clk_ API to get the correct input clock frequency for the MDIO block. Andrew
Re: [net-next,PATCH 2/4] net: mdio-ipq4019: add clock support
On Thu, Jul 2, 2020 at 9:59 PM Florian Fainelli wrote: > > > > On 7/2/2020 3:29 AM, Robert Marko wrote: > > Some newer SoC-s have a separate MDIO clock that needs to be enabled. > > So lets add support for handling the clocks to the driver. > > > > Signed-off-by: Robert Marko > > --- > > drivers/net/phy/mdio-ipq4019.c | 28 +++- > > 1 file changed, 27 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/net/phy/mdio-ipq4019.c b/drivers/net/phy/mdio-ipq4019.c > > index 0e78830c070b..7660bf006da0 100644 > > --- a/drivers/net/phy/mdio-ipq4019.c > > +++ b/drivers/net/phy/mdio-ipq4019.c > > @@ -9,6 +9,7 @@ > > #include > > #include > > #include > > +#include > > #include > > #include > > > > @@ -24,8 +25,12 @@ > > #define IPQ4019_MDIO_TIMEOUT 1 > > #define IPQ4019_MDIO_SLEEP 10 > > > > +#define QCA_MDIO_CLK_DEFAULT_RATE1 > > 100MHz? Is not that going to be a tad too much for most MDIO devices out > there? This is not the actual MDIO bus clock, that is the clock frequency that SoC clock generator produces. MDIO controller has an internal divider set up for that 100MHz, I don't know the actual MDIO bus clock frequency as it's not listed anywhere. > -- > Florian
Re: [net-next,PATCH 2/4] net: mdio-ipq4019: add clock support
On 7/2/2020 3:29 AM, Robert Marko wrote: > Some newer SoC-s have a separate MDIO clock that needs to be enabled. > So lets add support for handling the clocks to the driver. > > Signed-off-by: Robert Marko > --- > drivers/net/phy/mdio-ipq4019.c | 28 +++- > 1 file changed, 27 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/phy/mdio-ipq4019.c b/drivers/net/phy/mdio-ipq4019.c > index 0e78830c070b..7660bf006da0 100644 > --- a/drivers/net/phy/mdio-ipq4019.c > +++ b/drivers/net/phy/mdio-ipq4019.c > @@ -9,6 +9,7 @@ > #include > #include > #include > +#include > #include > #include > > @@ -24,8 +25,12 @@ > #define IPQ4019_MDIO_TIMEOUT 1 > #define IPQ4019_MDIO_SLEEP 10 > > +#define QCA_MDIO_CLK_DEFAULT_RATE1 100MHz? Is not that going to be a tad too much for most MDIO devices out there? -- Florian
Re: [net-next,PATCH 2/4] net: mdio-ipq4019: add clock support
On Thu, Jul 02, 2020 at 12:29:59PM +0200, Robert Marko wrote: > Some newer SoC-s have a separate MDIO clock that needs to be enabled. > So lets add support for handling the clocks to the driver. > > Signed-off-by: Robert Marko > --- > drivers/net/phy/mdio-ipq4019.c | 28 +++- > 1 file changed, 27 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/phy/mdio-ipq4019.c b/drivers/net/phy/mdio-ipq4019.c > index 0e78830c070b..7660bf006da0 100644 > --- a/drivers/net/phy/mdio-ipq4019.c > +++ b/drivers/net/phy/mdio-ipq4019.c > @@ -9,6 +9,7 @@ > #include > #include > #include > +#include > #include > #include > > @@ -24,8 +25,12 @@ > #define IPQ4019_MDIO_TIMEOUT 1 > #define IPQ4019_MDIO_SLEEP 10 > > +#define QCA_MDIO_CLK_DEFAULT_RATE1 > + > struct ipq4019_mdio_data { > - void __iomem*membase; > + void __iomem*membase; > + struct clk *mdio_clk; > + u32 clk_freq; Hi Robert Some sort of tab/space issue here. > }; > > static int ipq4019_mdio_wait_busy(struct mii_bus *bus) > @@ -100,6 +105,7 @@ static int ipq4019_mdio_probe(struct platform_device > *pdev) > { > struct ipq4019_mdio_data *priv; > struct mii_bus *bus; > + struct device_node *np = pdev->dev.of_node; > int ret; Reverse Christmas tree. Andrew
[net-next,PATCH 2/4] net: mdio-ipq4019: add clock support
Some newer SoC-s have a separate MDIO clock that needs to be enabled. So lets add support for handling the clocks to the driver. Signed-off-by: Robert Marko --- drivers/net/phy/mdio-ipq4019.c | 28 +++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/drivers/net/phy/mdio-ipq4019.c b/drivers/net/phy/mdio-ipq4019.c index 0e78830c070b..7660bf006da0 100644 --- a/drivers/net/phy/mdio-ipq4019.c +++ b/drivers/net/phy/mdio-ipq4019.c @@ -9,6 +9,7 @@ #include #include #include +#include #include #include @@ -24,8 +25,12 @@ #define IPQ4019_MDIO_TIMEOUT 1 #define IPQ4019_MDIO_SLEEP 10 +#define QCA_MDIO_CLK_DEFAULT_RATE 1 + struct ipq4019_mdio_data { - void __iomem*membase; + void __iomem*membase; + struct clk *mdio_clk; + u32 clk_freq; }; static int ipq4019_mdio_wait_busy(struct mii_bus *bus) @@ -100,6 +105,7 @@ static int ipq4019_mdio_probe(struct platform_device *pdev) { struct ipq4019_mdio_data *priv; struct mii_bus *bus; + struct device_node *np = pdev->dev.of_node; int ret; bus = devm_mdiobus_alloc_size(>dev, sizeof(*priv)); @@ -112,6 +118,26 @@ static int ipq4019_mdio_probe(struct platform_device *pdev) if (IS_ERR(priv->membase)) return PTR_ERR(priv->membase); + priv->mdio_clk = devm_clk_get_optional(>dev, "mdio_ahb"); + if (!IS_ERR(priv->mdio_clk)) { + if (of_property_read_u32(np, "clock-frequency", >clk_freq)) { + dev_warn(>dev, "Cannot find MDIO clock frequency, using default!\n"); + priv->clk_freq = QCA_MDIO_CLK_DEFAULT_RATE; + } + + ret = clk_set_rate(priv->mdio_clk, priv->clk_freq); + if (ret) { + dev_err(>dev, "Cannot set MDIO clock rate!\n"); + return ret; + } + + ret = clk_prepare_enable(priv->mdio_clk); + if (ret) { + dev_err(>dev, "Cannot enable MDIO clock!\n"); + return ret; + } + } + bus->name = "ipq4019_mdio"; bus->read = ipq4019_mdio_read; bus->write = ipq4019_mdio_write; -- 2.26.2