From: Russell King - ARM Linux admin <linux@armlinux.org.uk>
To: Robert Marko <robert.marko@sartura.hr>
Cc: andrew@lunn.ch, f.fainelli@gmail.com, hkallweit1@gmail.com,
linux-kernel@vger.kernel.org, netdev@vger.kernel.org,
agross@kernel.org, bjorn.andersson@linaro.org,
robh+dt@kernel.org, mark.rutland@arm.com,
linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org,
Christian Lamparter <chunkeey@gmail.com>,
Luka Perkov <luka.perkov@sartura.hr>
Subject: Re: [PATCH v2 1/3] net: phy: mdio: add IPQ40xx MDIO driver
Date: Wed, 15 Apr 2020 10:33:34 +0100 [thread overview]
Message-ID: <20200415093334.GC25745@shell.armlinux.org.uk> (raw)
In-Reply-To: <20200414181012.114905-1-robert.marko@sartura.hr>
On Tue, Apr 14, 2020 at 08:10:11PM +0200, Robert Marko wrote:
> diff --git a/drivers/net/phy/mdio-ipq40xx.c b/drivers/net/phy/mdio-ipq40xx.c
> new file mode 100644
> index 000000000000..d8c11c621f20
> --- /dev/null
> +++ b/drivers/net/phy/mdio-ipq40xx.c
> @@ -0,0 +1,176 @@
> +// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
> +/* Copyright (c) 2015, The Linux Foundation. All rights reserved. */
> +/* Copyright (c) 2020 Sartura Ltd. */
> +
> +#include <linux/delay.h>
> +#include <linux/kernel.h>
> +#include <linux/module.h>
> +#include <linux/mutex.h>
> +#include <linux/io.h>
> +#include <linux/of_address.h>
> +#include <linux/of_mdio.h>
> +#include <linux/phy.h>
> +#include <linux/platform_device.h>
> +
Looking at how these registers are used, they could be renamed:
> +#define MDIO_CTRL_0_REG 0x40
This seems to be unused.
> +#define MDIO_CTRL_1_REG 0x44
MDIO_ADDR_REG
> +#define MDIO_CTRL_2_REG 0x48
MDIO_DATA_WRITE_REG
> +#define MDIO_CTRL_3_REG 0x4c
MDIO_DATA_READ_REG
> +#define MDIO_CTRL_4_REG 0x50
> +#define MDIO_CTRL_4_ACCESS_BUSY BIT(16)
> +#define MDIO_CTRL_4_ACCESS_START BIT(8)
> +#define MDIO_CTRL_4_ACCESS_CODE_READ 0
> +#define MDIO_CTRL_4_ACCESS_CODE_WRITE 1
MDIO_CMD_* ?
> +
> +#define IPQ40XX_MDIO_RETRY 1000
> +#define IPQ40XX_MDIO_DELAY 10
> +
> +struct ipq40xx_mdio_data {
> + void __iomem *membase;
> +};
> +
> +static int ipq40xx_mdio_wait_busy(struct mii_bus *bus)
> +{
> + struct ipq40xx_mdio_data *priv = bus->priv;
> + int i;
> +
> + for (i = 0; i < IPQ40XX_MDIO_RETRY; i++) {
> + unsigned int busy;
> +
> + busy = readl(priv->membase + MDIO_CTRL_4_REG) &
> + MDIO_CTRL_4_ACCESS_BUSY;
> + if (!busy)
> + return 0;
> +
> + /* BUSY might take to be cleard by 15~20 times of loop */
> + udelay(IPQ40XX_MDIO_DELAY);
> + }
> +
> + dev_err(bus->parent, "MDIO operation timed out\n");
> +
> + return -ETIMEDOUT;
> +}
> +
> +static int ipq40xx_mdio_read(struct mii_bus *bus, int mii_id, int regnum)
> +{
> + struct ipq40xx_mdio_data *priv = bus->priv;
> + int value = 0;
> + unsigned int cmd = 0;
No need to initialise either of these, and you can eliminate "value"
which will then satisfy davem's requirement for reverse-christmas-tree
ordering of variable declarations.
> +
> + /* Reject clause 45 */
> + if (regnum & MII_ADDR_C45)
> + return -EOPNOTSUPP;
> +
> + if (ipq40xx_mdio_wait_busy(bus))
> + return -ETIMEDOUT;
> +
> + /* issue the phy address and reg */
> + writel((mii_id << 8) | regnum, priv->membase + MDIO_CTRL_1_REG);
> +
> + cmd = MDIO_CTRL_4_ACCESS_START | MDIO_CTRL_4_ACCESS_CODE_READ;
> +
> + /* issue read command */
> + writel(cmd, priv->membase + MDIO_CTRL_4_REG);
> +
> + /* Wait read complete */
> + if (ipq40xx_mdio_wait_busy(bus))
> + return -ETIMEDOUT;
> +
> + /* Read data */
> + value = readl(priv->membase + MDIO_CTRL_3_REG);
> +
> + return value;
> +}
> +
> +static int ipq40xx_mdio_write(struct mii_bus *bus, int mii_id, int regnum,
> + u16 value)
> +{
> + struct ipq40xx_mdio_data *priv = bus->priv;
> + unsigned int cmd = 0;
No need to initialise cmd.
--
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTC broadband for 0.8mile line in suburbia: sync at 10.2Mbps down 587kbps up
next prev parent reply other threads:[~2020-04-15 9:33 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-14 18:10 [PATCH v2 1/3] net: phy: mdio: add IPQ40xx MDIO driver Robert Marko
2020-04-14 18:10 ` [PATCH v2 2/3] dt-bindings: add Qualcomm IPQ4019 MDIO bindings Robert Marko
2020-04-14 21:11 ` Florian Fainelli
2020-04-15 8:52 ` Robert Marko
2020-04-14 18:10 ` [PATCH v2 3/3] dts: ipq4019: add MDIO node Robert Marko
2020-04-14 21:13 ` Florian Fainelli
2020-04-15 8:51 ` Robert Marko
2020-04-14 18:43 ` [PATCH v2 1/3] net: phy: mdio: add IPQ40xx MDIO driver Andrew Lunn
2020-04-14 21:17 ` Florian Fainelli
2020-04-15 9:33 ` Russell King - ARM Linux admin [this message]
2020-04-15 15:07 ` Robert Marko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200415093334.GC25745@shell.armlinux.org.uk \
--to=linux@armlinux.org.uk \
--cc=agross@kernel.org \
--cc=andrew@lunn.ch \
--cc=bjorn.andersson@linaro.org \
--cc=chunkeey@gmail.com \
--cc=devicetree@vger.kernel.org \
--cc=f.fainelli@gmail.com \
--cc=hkallweit1@gmail.com \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=luka.perkov@sartura.hr \
--cc=mark.rutland@arm.com \
--cc=netdev@vger.kernel.org \
--cc=robert.marko@sartura.hr \
--cc=robh+dt@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.