Re: [net-next,PATCH 2/4] net: mdio-ipq4019: add clock support

2020-07-03 Thread Andrew Lunn
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

2020-07-03 Thread Robert Marko
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

2020-07-02 Thread Florian Fainelli



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

2020-07-02 Thread Andrew Lunn
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

2020-07-02 Thread Robert Marko
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