* [PATCH net-next 0/2] platform data controls for mdio-gpio
@ 2018-12-06 13:58 Andrew Lunn
2018-12-06 13:58 ` [PATCH net-next 1/2] net: phy: mdio-gpio: Add platform_data support for phy_mask Andrew Lunn
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: Andrew Lunn @ 2018-12-06 13:58 UTC (permalink / raw)
To: David Miller; +Cc: Florian Fainelli, Heiner Kallweit, netdev, Andrew Lunn
Soon to be mainlined is an x86 platform with a Marvell switch, and a
bit-banging MDIO bus. In order to make this work, the phy_mask of the
MDIO bus needs to be set to prevent scanning for PHYs, and the
phy_ignore_ta_mask needs to be set because the switch has broken
turnaround.
Add a platform_data structure with these parameters.
Andrew Lunn (2):
net: phy: mdio-gpio: Add platform_data support for phy_mask
net: phy: mdio-gpio: Add phy_ignore_ta_mask to platform data
MAINTAINERS | 1 +
drivers/net/phy/mdio-gpio.c | 7 +++++++
include/linux/platform_data/mdio-gpio.h | 14 ++++++++++++++
3 files changed, 22 insertions(+)
create mode 100644 include/linux/platform_data/mdio-gpio.h
--
2.19.1
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH net-next 1/2] net: phy: mdio-gpio: Add platform_data support for phy_mask
2018-12-06 13:58 [PATCH net-next 0/2] platform data controls for mdio-gpio Andrew Lunn
@ 2018-12-06 13:58 ` Andrew Lunn
2018-12-06 13:58 ` [PATCH net-next 2/2] net: phy: mdio-gpio: Add phy_ignore_ta_mask to platform data Andrew Lunn
2018-12-06 17:22 ` [PATCH net-next 0/2] platform data controls for mdio-gpio Florian Fainelli
2 siblings, 0 replies; 5+ messages in thread
From: Andrew Lunn @ 2018-12-06 13:58 UTC (permalink / raw)
To: David Miller; +Cc: Florian Fainelli, Heiner Kallweit, netdev, Andrew Lunn
It is sometimes necessary to instantiate a bit-banging MDIO bus as a
platform device, without the aid of device tree.
When device tree is being used, the bus is not scanned for devices,
only those devices which are in device tree are probed. Without device
tree, by default, all addresses on the bus are scanned. This may then
find a device which is not a PHY, e.g. a switch. And the switch may
have registers containing values which look like a PHY. So during the
scan, a PHY device is wrongly created.
After the bus has been registered, a search is made for
mdio_board_info structures which indicates devices on the bus, and the
driver which should be used for them. This is typically used to
instantiate Ethernet switches from platform drivers. However, if the
scanning of the bus has created a PHY device at the same location as
indicated into the board info for a switch, the switch device is not
created, since the address is already busy.
This can be avoided by setting the phy_mask of the mdio bus. This mask
prevents addresses on the bus being scanned.
Signed-off-by: Andrew Lunn <andrew@lunn.ch>
---
MAINTAINERS | 1 +
drivers/net/phy/mdio-gpio.c | 5 +++++
include/linux/platform_data/mdio-gpio.h | 13 +++++++++++++
3 files changed, 19 insertions(+)
create mode 100644 include/linux/platform_data/mdio-gpio.h
diff --git a/MAINTAINERS b/MAINTAINERS
index fb88b6863d10..9d3b899f9ba2 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -5610,6 +5610,7 @@ F: include/linux/of_net.h
F: include/linux/phy.h
F: include/linux/phy_fixed.h
F: include/linux/platform_data/mdio-bcm-unimac.h
+F: include/linux/platform_data/mdio-gpio.h
F: include/trace/events/mdio.h
F: include/uapi/linux/mdio.h
F: include/uapi/linux/mii.h
diff --git a/drivers/net/phy/mdio-gpio.c b/drivers/net/phy/mdio-gpio.c
index 0fbcedcdf6e2..1e296dd4067a 100644
--- a/drivers/net/phy/mdio-gpio.c
+++ b/drivers/net/phy/mdio-gpio.c
@@ -24,6 +24,7 @@
#include <linux/slab.h>
#include <linux/interrupt.h>
#include <linux/platform_device.h>
+#include <linux/platform_data/mdio-gpio.h>
#include <linux/mdio-bitbang.h>
#include <linux/mdio-gpio.h>
#include <linux/gpio/consumer.h>
@@ -112,6 +113,7 @@ static struct mii_bus *mdio_gpio_bus_init(struct device *dev,
struct mdio_gpio_info *bitbang,
int bus_id)
{
+ struct mdio_gpio_platform_data *pdata = dev_get_platdata(dev);
struct mii_bus *new_bus;
bitbang->ctrl.ops = &mdio_gpio_ops;
@@ -128,6 +130,9 @@ static struct mii_bus *mdio_gpio_bus_init(struct device *dev,
else
strncpy(new_bus->id, "gpio", MII_BUS_ID_SIZE);
+ if (pdata)
+ new_bus->phy_mask = pdata->phy_mask;
+
dev_set_drvdata(dev, new_bus);
return new_bus;
diff --git a/include/linux/platform_data/mdio-gpio.h b/include/linux/platform_data/mdio-gpio.h
new file mode 100644
index 000000000000..0417913aac3d
--- /dev/null
+++ b/include/linux/platform_data/mdio-gpio.h
@@ -0,0 +1,13 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * MDIO-GPIO bus platform data structure
+ */
+
+#ifndef __LINUX_MDIO_GPIO_PDATA_H
+#define __LINUX_MDIO_GPIO_PDATA_H
+
+struct mdio_gpio_platform_data {
+ int phy_mask;
+};
+
+#endif /* __LINUX_MDIO_GPIO_PDATA_H */
--
2.19.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH net-next 2/2] net: phy: mdio-gpio: Add phy_ignore_ta_mask to platform data
2018-12-06 13:58 [PATCH net-next 0/2] platform data controls for mdio-gpio Andrew Lunn
2018-12-06 13:58 ` [PATCH net-next 1/2] net: phy: mdio-gpio: Add platform_data support for phy_mask Andrew Lunn
@ 2018-12-06 13:58 ` Andrew Lunn
2018-12-06 17:22 ` [PATCH net-next 0/2] platform data controls for mdio-gpio Florian Fainelli
2 siblings, 0 replies; 5+ messages in thread
From: Andrew Lunn @ 2018-12-06 13:58 UTC (permalink / raw)
To: David Miller; +Cc: Florian Fainelli, Heiner Kallweit, netdev, Andrew Lunn
The Marvell 6390 Ethernet switch family does not perform MDIO
turnaround correctly. Many hardware MDIO bus masters don't care about
this, but the bitbangging implementation in Linux does by default. Add
phy_ignore_ta_mask to the platform data so that the bitbangging code
can be told which devices are known to get TA wrong.
Signed-off-by: Andrew Lunn <andrew@lunn.ch>
---
drivers/net/phy/mdio-gpio.c | 4 +++-
include/linux/platform_data/mdio-gpio.h | 1 +
2 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/drivers/net/phy/mdio-gpio.c b/drivers/net/phy/mdio-gpio.c
index 1e296dd4067a..ea9a0e339778 100644
--- a/drivers/net/phy/mdio-gpio.c
+++ b/drivers/net/phy/mdio-gpio.c
@@ -130,8 +130,10 @@ static struct mii_bus *mdio_gpio_bus_init(struct device *dev,
else
strncpy(new_bus->id, "gpio", MII_BUS_ID_SIZE);
- if (pdata)
+ if (pdata) {
new_bus->phy_mask = pdata->phy_mask;
+ new_bus->phy_ignore_ta_mask = pdata->phy_ignore_ta_mask;
+ }
dev_set_drvdata(dev, new_bus);
diff --git a/include/linux/platform_data/mdio-gpio.h b/include/linux/platform_data/mdio-gpio.h
index 0417913aac3d..2d5a0dc29a0d 100644
--- a/include/linux/platform_data/mdio-gpio.h
+++ b/include/linux/platform_data/mdio-gpio.h
@@ -8,6 +8,7 @@
struct mdio_gpio_platform_data {
int phy_mask;
+ int phy_ignore_ta_mask;
};
#endif /* __LINUX_MDIO_GPIO_PDATA_H */
--
2.19.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH net-next 0/2] platform data controls for mdio-gpio
2018-12-06 13:58 [PATCH net-next 0/2] platform data controls for mdio-gpio Andrew Lunn
2018-12-06 13:58 ` [PATCH net-next 1/2] net: phy: mdio-gpio: Add platform_data support for phy_mask Andrew Lunn
2018-12-06 13:58 ` [PATCH net-next 2/2] net: phy: mdio-gpio: Add phy_ignore_ta_mask to platform data Andrew Lunn
@ 2018-12-06 17:22 ` Florian Fainelli
2018-12-06 19:54 ` Andrew Lunn
2 siblings, 1 reply; 5+ messages in thread
From: Florian Fainelli @ 2018-12-06 17:22 UTC (permalink / raw)
To: Andrew Lunn, David Miller; +Cc: Heiner Kallweit, netdev
Hi Andrew,
On 12/6/18 5:58 AM, Andrew Lunn wrote:
> Soon to be mainlined is an x86 platform with a Marvell switch, and a
> bit-banging MDIO bus. In order to make this work, the phy_mask of the
> MDIO bus needs to be set to prevent scanning for PHYs, and the
> phy_ignore_ta_mask needs to be set because the switch has broken
> turnaround.
This looks good, I would just make one/two changes which is to match the
internal phy_mask and phy_ignore_ta_mask types from the struct mii_bus
and use u32 instead of int.
>
> Add a platform_data structure with these parameters.
>
> Andrew Lunn (2):
> net: phy: mdio-gpio: Add platform_data support for phy_mask
> net: phy: mdio-gpio: Add phy_ignore_ta_mask to platform data
>
> MAINTAINERS | 1 +
> drivers/net/phy/mdio-gpio.c | 7 +++++++
> include/linux/platform_data/mdio-gpio.h | 14 ++++++++++++++
> 3 files changed, 22 insertions(+)
> create mode 100644 include/linux/platform_data/mdio-gpio.h
>
--
Florian
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH net-next 0/2] platform data controls for mdio-gpio
2018-12-06 17:22 ` [PATCH net-next 0/2] platform data controls for mdio-gpio Florian Fainelli
@ 2018-12-06 19:54 ` Andrew Lunn
0 siblings, 0 replies; 5+ messages in thread
From: Andrew Lunn @ 2018-12-06 19:54 UTC (permalink / raw)
To: Florian Fainelli; +Cc: David Miller, Heiner Kallweit, netdev
On Thu, Dec 06, 2018 at 09:22:27AM -0800, Florian Fainelli wrote:
> Hi Andrew,
>
> On 12/6/18 5:58 AM, Andrew Lunn wrote:
> > Soon to be mainlined is an x86 platform with a Marvell switch, and a
> > bit-banging MDIO bus. In order to make this work, the phy_mask of the
> > MDIO bus needs to be set to prevent scanning for PHYs, and the
> > phy_ignore_ta_mask needs to be set because the switch has broken
> > turnaround.
>
> This looks good, I would just make one/two changes which is to match the
> internal phy_mask and phy_ignore_ta_mask types from the struct mii_bus
> and use u32 instead of int.
Yes, that makes sense.
v2 to follow.
Andrew
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2018-12-06 19:54 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-12-06 13:58 [PATCH net-next 0/2] platform data controls for mdio-gpio Andrew Lunn
2018-12-06 13:58 ` [PATCH net-next 1/2] net: phy: mdio-gpio: Add platform_data support for phy_mask Andrew Lunn
2018-12-06 13:58 ` [PATCH net-next 2/2] net: phy: mdio-gpio: Add phy_ignore_ta_mask to platform data Andrew Lunn
2018-12-06 17:22 ` [PATCH net-next 0/2] platform data controls for mdio-gpio Florian Fainelli
2018-12-06 19:54 ` Andrew Lunn
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).