Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1673235 > unrolled thread
| Started by | David Wu <david.wu@rock-chips.com> |
|---|---|
| First post | 2017-06-23 06:40 +0200 |
| Last post | 2017-06-24 04:20 +0200 |
| Articles | 11 — 5 participants |
Back to article view | Back to linux.kernel
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
[PATCH 01/11] net: phy: Add rockchip phy driver support David Wu <david.wu@rock-chips.com> - 2017-06-23 06:40 +0200
Re: [PATCH 01/11] net: phy: Add rockchip phy driver support Andrew Lunn <andrew@lunn.ch> - 2017-06-23 16:00 +0200
Re: [PATCH 01/11] net: phy: Add rockchip phy driver support Florian Fainelli <f.fainelli@gmail.com> - 2017-06-23 18:20 +0200
Re: [PATCH 01/11] net: phy: Add rockchip phy driver support Andrew Lunn <andrew@lunn.ch> - 2017-06-24 04:20 +0200
Re: [PATCH 01/11] net: phy: Add rockchip phy driver support Heiko Stuebner <heiko@sntech.de> - 2017-06-24 10:40 +0200
Re: [PATCH 01/11] net: phy: Add rockchip phy driver support Andrew Lunn <andrew@lunn.ch> - 2017-06-24 16:10 +0200
Re: [PATCH 01/11] net: phy: Add rockchip phy driver support Heiko Stuebner <heiko@sntech.de> - 2017-06-24 18:10 +0200
Re: [PATCH 01/11] net: phy: Add rockchip phy driver support "David.Wu" <david.wu@rock-chips.com> - 2017-06-27 16:50 +0200
Re: [PATCH 01/11] net: phy: Add rockchip phy driver support Andrew Lunn <andrew@lunn.ch> - 2017-06-27 16:50 +0200
Re: [PATCH 01/11] net: phy: Add rockchip phy driver support "David.Wu" <david.wu@rock-chips.com> - 2017-06-27 17:20 +0200
Re: [PATCH 01/11] net: phy: Add rockchip phy driver support Andrew Lunn <andrew@lunn.ch> - 2017-06-24 04:20 +0200
| From | David Wu <david.wu@rock-chips.com> |
|---|---|
| Date | 2017-06-23 06:40 +0200 |
| Subject | [PATCH 01/11] net: phy: Add rockchip phy driver support |
| Message-ID | <tVoxX-5VY-7@gated-at.bofh.it> |
Support internal ephy currently.
Signed-off-by: David Wu <david.wu@rock-chips.com>
---
drivers/net/phy/Kconfig | 4 ++
drivers/net/phy/Makefile | 1 +
drivers/net/phy/rockchip.c | 94 ++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 99 insertions(+)
create mode 100644 drivers/net/phy/rockchip.c
diff --git a/drivers/net/phy/Kconfig b/drivers/net/phy/Kconfig
index c360dd6..86010d4 100644
--- a/drivers/net/phy/Kconfig
+++ b/drivers/net/phy/Kconfig
@@ -350,6 +350,10 @@ config XILINX_GMII2RGMII
the Reduced Gigabit Media Independent Interface(RGMII) between
Ethernet physical media devices and the Gigabit Ethernet controller.
+config ROCKCHIP_MAC_PHY
+ tristate "Drivers for ROCKCHIP MAC PHY"
+ ---help---
+ Currently supports the mac internal ephy.
endif # PHYLIB
config MICREL_KS8995MA
diff --git a/drivers/net/phy/Makefile b/drivers/net/phy/Makefile
index e36db9a..6d96779 100644
--- a/drivers/net/phy/Makefile
+++ b/drivers/net/phy/Makefile
@@ -69,3 +69,4 @@ obj-$(CONFIG_STE10XP) += ste10Xp.o
obj-$(CONFIG_TERANETICS_PHY) += teranetics.o
obj-$(CONFIG_VITESSE_PHY) += vitesse.o
obj-$(CONFIG_XILINX_GMII2RGMII) += xilinx_gmii2rgmii.o
+obj-$(CONFIG_ROCKCHIP_MAC_PHY) += rockchip.o
diff --git a/drivers/net/phy/rockchip.c b/drivers/net/phy/rockchip.c
new file mode 100644
index 0000000..69e96ec
--- /dev/null
+++ b/drivers/net/phy/rockchip.c
@@ -0,0 +1,94 @@
+/**
+ * Rockchip mac phy driver
+ *
+ * Copyright (c) 2017, Fuzhou Rockchip Electronics Co., Ltd
+ *
+ * David Wu<david.wu@rock-chips.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ */
+
+
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/mii.h>
+#include <linux/ethtool.h>
+#include <linux/phy.h>
+#include <linux/netdevice.h>
+
+static int internal_config_init(struct phy_device *phydev)
+{
+ int val;
+ u32 features;
+
+ /*enable auto mdix*/
+ phy_write(phydev, 0x11, 0x0080);
+
+ features = (SUPPORTED_TP | SUPPORTED_MII
+ | SUPPORTED_AUI | SUPPORTED_FIBRE |
+ SUPPORTED_BNC);
+
+ /* Do we support autonegotiation? */
+ val = phy_read(phydev, MII_BMSR);
+ if (val < 0)
+ return val;
+
+ if (val & BMSR_ANEGCAPABLE)
+ features |= SUPPORTED_Autoneg;
+
+ if (val & BMSR_100FULL)
+ features |= SUPPORTED_100baseT_Full;
+ if (val & BMSR_100HALF)
+ features |= SUPPORTED_100baseT_Half;
+ if (val & BMSR_10FULL)
+ features |= SUPPORTED_10baseT_Full;
+ if (val & BMSR_10HALF)
+ features |= SUPPORTED_10baseT_Half;
+
+ if (val & BMSR_ESTATEN) {
+ val = phy_read(phydev, MII_ESTATUS);
+ if (val < 0)
+ return val;
+
+ if (val & ESTATUS_1000_TFULL)
+ features |= SUPPORTED_1000baseT_Full;
+ if (val & ESTATUS_1000_THALF)
+ features |= SUPPORTED_1000baseT_Half;
+ }
+
+ phydev->supported = features;
+ phydev->advertising = features;
+
+ return 0;
+}
+
+static struct phy_driver rockchip_phy_driver[] = {
+{
+ .phy_id = 0x1234d400,
+ .phy_id_mask = 0xffffffff,
+ .name = "rockchip internal ephy",
+ .features = 0,
+ .config_init = internal_config_init,
+ .config_aneg = genphy_config_aneg,
+ .read_status = genphy_read_status,
+ .suspend = genphy_suspend,
+ .resume = genphy_resume,
+},
+};
+
+module_phy_driver(rockchip_phy_driver);
+
+static struct mdio_device_id __maybe_unused rockchip_phy_tbl[] = {
+ { 0x1234d400, 0xffffffff },
+ { }
+};
+
+MODULE_DEVICE_TABLE(mdio, rockchip_phy_tbl);
+
+MODULE_AUTHOR("David Wu<david.wu@rock-chips.com>");
+MODULE_DESCRIPTION("Rockchip mac phy driver");
+MODULE_LICENSE("GPL v2");
--
1.9.1
[toc] | [next] | [standalone]
| From | Andrew Lunn <andrew@lunn.ch> |
|---|---|
| Date | 2017-06-23 16:00 +0200 |
| Message-ID | <tVxhT-2U3-1@gated-at.bofh.it> |
| In reply to | #1673235 |
On Fri, Jun 23, 2017 at 12:41:59PM +0800, David Wu wrote: > Support internal ephy currently. > > Signed-off-by: David Wu <david.wu@rock-chips.com> > --- > drivers/net/phy/Kconfig | 4 ++ > drivers/net/phy/Makefile | 1 + > drivers/net/phy/rockchip.c | 94 ++++++++++++++++++++++++++++++++++++++++++++++ > 3 files changed, 99 insertions(+) > create mode 100644 drivers/net/phy/rockchip.c > > diff --git a/drivers/net/phy/Kconfig b/drivers/net/phy/Kconfig > index c360dd6..86010d4 100644 > --- a/drivers/net/phy/Kconfig > +++ b/drivers/net/phy/Kconfig > @@ -350,6 +350,10 @@ config XILINX_GMII2RGMII > the Reduced Gigabit Media Independent Interface(RGMII) between > Ethernet physical media devices and the Gigabit Ethernet controller. > > +config ROCKCHIP_MAC_PHY > + tristate "Drivers for ROCKCHIP MAC PHY" > + ---help--- > + Currently supports the mac internal ephy. > endif # PHYLIB Alphabetic order please for Kconfig and Makefile. I will review the rest later today/tomorrow. Andrew
[toc] | [prev] | [next] | [standalone]
| From | Florian Fainelli <f.fainelli@gmail.com> |
|---|---|
| Date | 2017-06-23 18:20 +0200 |
| Message-ID | <tVzto-4pX-17@gated-at.bofh.it> |
| In reply to | #1673235 |
On 06/22/2017 09:41 PM, David Wu wrote:
> Support internal ephy currently.
>
> Signed-off-by: David Wu <david.wu@rock-chips.com>
> ---
> drivers/net/phy/Kconfig | 4 ++
> drivers/net/phy/Makefile | 1 +
> drivers/net/phy/rockchip.c | 94 ++++++++++++++++++++++++++++++++++++++++++++++
> 3 files changed, 99 insertions(+)
> create mode 100644 drivers/net/phy/rockchip.c
>
> diff --git a/drivers/net/phy/Kconfig b/drivers/net/phy/Kconfig
> index c360dd6..86010d4 100644
> --- a/drivers/net/phy/Kconfig
> +++ b/drivers/net/phy/Kconfig
> @@ -350,6 +350,10 @@ config XILINX_GMII2RGMII
> the Reduced Gigabit Media Independent Interface(RGMII) between
> Ethernet physical media devices and the Gigabit Ethernet controller.
>
> +config ROCKCHIP_MAC_PHY
> + tristate "Drivers for ROCKCHIP MAC PHY"
> + ---help---
> + Currently supports the mac internal ephy.
> endif # PHYLIB
>
> config MICREL_KS8995MA
> diff --git a/drivers/net/phy/Makefile b/drivers/net/phy/Makefile
> index e36db9a..6d96779 100644
> --- a/drivers/net/phy/Makefile
> +++ b/drivers/net/phy/Makefile
> @@ -69,3 +69,4 @@ obj-$(CONFIG_STE10XP) += ste10Xp.o
> obj-$(CONFIG_TERANETICS_PHY) += teranetics.o
> obj-$(CONFIG_VITESSE_PHY) += vitesse.o
> obj-$(CONFIG_XILINX_GMII2RGMII) += xilinx_gmii2rgmii.o
> +obj-$(CONFIG_ROCKCHIP_MAC_PHY) += rockchip.o
> diff --git a/drivers/net/phy/rockchip.c b/drivers/net/phy/rockchip.c
> new file mode 100644
> index 0000000..69e96ec
> --- /dev/null
> +++ b/drivers/net/phy/rockchip.c
> @@ -0,0 +1,94 @@
> +/**
> + * Rockchip mac phy driver
MAC and PHY, capitalized.
> + *
> + * Copyright (c) 2017, Fuzhou Rockchip Electronics Co., Ltd
> + *
> + * David Wu<david.wu@rock-chips.com>
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation; either version 2 of the License, or
> + * (at your option) any later version.
> + *
> + */
> +
> +
> +#include <linux/kernel.h>
> +#include <linux/module.h>
> +#include <linux/mii.h>
> +#include <linux/ethtool.h>
> +#include <linux/phy.h>
> +#include <linux/netdevice.h>
> +
> +static int internal_config_init(struct phy_device *phydev)
> +{
> + int val;
> + u32 features;
> +
> + /*enable auto mdix*/
> + phy_write(phydev, 0x11, 0x0080);
That is probably the only meaningful change needed by this driver, and
even that is not quite correct because auto MDI-X can be changed from
user-space through ethtool, see
drivers/net/phy/marvell.c::marvell_config_aneg()
> +
> + features = (SUPPORTED_TP | SUPPORTED_MII
> + | SUPPORTED_AUI | SUPPORTED_FIBRE |
> + SUPPORTED_BNC);
This is not necessary, using driver::features set to PHY_GBIT_FEATURES
> +
> + /* Do we support autonegotiation? */
> + val = phy_read(phydev, MII_BMSR);
> + if (val < 0)
> + return val;
> +
> + if (val & BMSR_ANEGCAPABLE)
> + features |= SUPPORTED_Autoneg;
If we have disabled auto-negotiation prior to probing this driver, and
somehow the PHY is not reset, then you are falsely not advertising
support for auto-negotiation just because it *currently is* disabled.
> +
> + if (val & BMSR_100FULL)
> + features |= SUPPORTED_100baseT_Full;
> + if (val & BMSR_100HALF)
> + features |= SUPPORTED_100baseT_Half;
> + if (val & BMSR_10FULL)
> + features |= SUPPORTED_10baseT_Full;
> + if (val & BMSR_10HALF)
> + features |= SUPPORTED_10baseT_Half;
> +
> + if (val & BMSR_ESTATEN) {
> + val = phy_read(phydev, MII_ESTATUS);
> + if (val < 0)
> + return val;
> +
> + if (val & ESTATUS_1000_TFULL)
> + features |= SUPPORTED_1000baseT_Full;
> + if (val & ESTATUS_1000_THALF)
> + features |= SUPPORTED_1000baseT_Half;
> + }
> +
> + phydev->supported = features;
> + phydev->advertising = features;
> +
> + return 0;
> +}
> +
> +static struct phy_driver rockchip_phy_driver[] = {
> +{
> + .phy_id = 0x1234d400,
> + .phy_id_mask = 0xffffffff,
Last 4 digits are supposed to hold the revision, do you really need to
have such a strict mask here?
> + .name = "rockchip internal ephy",
> + .features = 0,
features shoul dbe set to what you support: PHY_GBIT_FEAUTERS
> + .config_init = internal_config_init,
> + .config_aneg = genphy_config_aneg,
> + .read_status = genphy_read_status,
> + .suspend = genphy_suspend,
> + .resume = genphy_resume,
> +},
> +};
> +
> +module_phy_driver(rockchip_phy_driver);
> +
> +static struct mdio_device_id __maybe_unused rockchip_phy_tbl[] = {
> + { 0x1234d400, 0xffffffff },
> + { }
> +};
> +
> +MODULE_DEVICE_TABLE(mdio, rockchip_phy_tbl);
> +
> +MODULE_AUTHOR("David Wu<david.wu@rock-chips.com>");
> +MODULE_DESCRIPTION("Rockchip mac phy driver");
> +MODULE_LICENSE("GPL v2");
>
--
Florian
[toc] | [prev] | [next] | [standalone]
| From | Andrew Lunn <andrew@lunn.ch> |
|---|---|
| Date | 2017-06-24 04:20 +0200 |
| Message-ID | <tVIQ1-1SY-9@gated-at.bofh.it> |
| In reply to | #1673235 |
On Fri, Jun 23, 2017 at 12:41:59PM +0800, David Wu wrote: > Support internal ephy currently. > > Signed-off-by: David Wu <david.wu@rock-chips.com> > --- > drivers/net/phy/Kconfig | 4 ++ > drivers/net/phy/Makefile | 1 + > drivers/net/phy/rockchip.c | 94 ++++++++++++++++++++++++++++++++++++++++++++++ > 3 files changed, 99 insertions(+) > create mode 100644 drivers/net/phy/rockchip.c > > diff --git a/drivers/net/phy/Kconfig b/drivers/net/phy/Kconfig > index c360dd6..86010d4 100644 > --- a/drivers/net/phy/Kconfig > +++ b/drivers/net/phy/Kconfig > @@ -350,6 +350,10 @@ config XILINX_GMII2RGMII > the Reduced Gigabit Media Independent Interface(RGMII) between > Ethernet physical media devices and the Gigabit Ethernet controller. > > +config ROCKCHIP_MAC_PHY This is a bit of an odd name, having both MAC and PHY in it. Are there any other RockChip PHYs? Any external PHYS? Are they register incompatible with the internal PHY? Is it even RockChip IP? Or has it been licensed from somebody else? I would more likely just call it ROCKCHIP_PHY. Andrew
[toc] | [prev] | [next] | [standalone]
| From | Heiko Stuebner <heiko@sntech.de> |
|---|---|
| Date | 2017-06-24 10:40 +0200 |
| Message-ID | <tVOLN-5uL-17@gated-at.bofh.it> |
| In reply to | #1673976 |
Am Samstag, 24. Juni 2017, 04:19:10 CEST schrieb Andrew Lunn: > On Fri, Jun 23, 2017 at 12:41:59PM +0800, David Wu wrote: > > Support internal ephy currently. > > > > Signed-off-by: David Wu <david.wu@rock-chips.com> > > --- > > drivers/net/phy/Kconfig | 4 ++ > > drivers/net/phy/Makefile | 1 + > > drivers/net/phy/rockchip.c | 94 ++++++++++++++++++++++++++++++++++++++++++++++ > > 3 files changed, 99 insertions(+) > > create mode 100644 drivers/net/phy/rockchip.c > > > > diff --git a/drivers/net/phy/Kconfig b/drivers/net/phy/Kconfig > > index c360dd6..86010d4 100644 > > --- a/drivers/net/phy/Kconfig > > +++ b/drivers/net/phy/Kconfig > > @@ -350,6 +350,10 @@ config XILINX_GMII2RGMII > > the Reduced Gigabit Media Independent Interface(RGMII) between > > Ethernet physical media devices and the Gigabit Ethernet controller. > > > > +config ROCKCHIP_MAC_PHY > > This is a bit of an odd name, having both MAC and PHY in it. Are there > any other RockChip PHYs? Any external PHYS? Are they register > incompatible with the internal PHY? Is it even RockChip IP? Or has it > been licensed from somebody else? > > I would more likely just call it ROCKCHIP_PHY. hmm, we do have quite a number of non-net phys in the phy subsystem (DP, PCIe, ...) and given that the above would be CONFIG_ROCKCHIP_PHY in a global sense, sounds like it could make things confusing. So some addition sounds reasonable ... ROCKCHIP_ETH_PHY or so? Heiko
[toc] | [prev] | [next] | [standalone]
| From | Andrew Lunn <andrew@lunn.ch> |
|---|---|
| Date | 2017-06-24 16:10 +0200 |
| Message-ID | <tVTV7-lO-3@gated-at.bofh.it> |
| In reply to | #1674052 |
> hmm, we do have quite a number of non-net phys in the phy subsystem > (DP, PCIe, ...) and given that the above would be CONFIG_ROCKCHIP_PHY > in a global sense, sounds like it could make things confusing. > > So some addition sounds reasonable ... ROCKCHIP_ETH_PHY or so? I follow you reasoning, but generic phy is the new kid on the block. It is well established that Ethernet PHYs are called <MANUFACTURER>_PHY. If you do want to consider generic phy, the logical name would be ROCKCHIP_PHY_PHY, since generic phy postfixes with _SATA, _USB, _PCIE, etc. But that does leave an issues when we have an Ethernet PHY which needs a generic PHY. In some sense, SERDES could be considered as something supported by a generic PHY... Andrew
[toc] | [prev] | [next] | [standalone]
| From | Heiko Stuebner <heiko@sntech.de> |
|---|---|
| Date | 2017-06-24 18:10 +0200 |
| Message-ID | <tVVNg-1vE-7@gated-at.bofh.it> |
| In reply to | #1674085 |
Am Samstag, 24. Juni 2017, 16:04:06 CEST schrieb Andrew Lunn: > > hmm, we do have quite a number of non-net phys in the phy subsystem > > (DP, PCIe, ...) and given that the above would be CONFIG_ROCKCHIP_PHY > > in a global sense, sounds like it could make things confusing. > > > > So some addition sounds reasonable ... ROCKCHIP_ETH_PHY or so? > > I follow you reasoning, but generic phy is the new kid on the > block. It is well established that Ethernet PHYs are called > <MANUFACTURER>_PHY. Ok, then without further bikeshedding, let's just go with your naming then (ROCKCHIP_PHY) :-) . Heiko > If you do want to consider generic phy, the logical name would be > ROCKCHIP_PHY_PHY, since generic phy postfixes with _SATA, _USB, _PCIE, > etc. But that does leave an issues when we have an Ethernet PHY which > needs a generic PHY. In some sense, SERDES could be considered as > something supported by a generic PHY... > > Andrew > >
[toc] | [prev] | [next] | [standalone]
| From | "David.Wu" <david.wu@rock-chips.com> |
|---|---|
| Date | 2017-06-27 16:50 +0200 |
| Message-ID | <tWZYt-1RV-11@gated-at.bofh.it> |
| In reply to | #1673976 |
Hi Andrew,
在 2017/6/24 10:19, Andrew Lunn 写道:
> On Fri, Jun 23, 2017 at 12:41:59PM +0800, David Wu wrote:
>> Support internal ephy currently.
>>
>> Signed-off-by: David Wu <david.wu@rock-chips.com>
>> ---
>> drivers/net/phy/Kconfig | 4 ++
>> drivers/net/phy/Makefile | 1 +
>> drivers/net/phy/rockchip.c | 94 ++++++++++++++++++++++++++++++++++++++++++++++
>> 3 files changed, 99 insertions(+)
>> create mode 100644 drivers/net/phy/rockchip.c
>>
>> diff --git a/drivers/net/phy/Kconfig b/drivers/net/phy/Kconfig
>> index c360dd6..86010d4 100644
>> --- a/drivers/net/phy/Kconfig
>> +++ b/drivers/net/phy/Kconfig
>> @@ -350,6 +350,10 @@ config XILINX_GMII2RGMII
>> the Reduced Gigabit Media Independent Interface(RGMII) between
>> Ethernet physical media devices and the Gigabit Ethernet controller.
>>
>> +config ROCKCHIP_MAC_PHY
>
> This is a bit of an odd name, having both MAC and PHY in it. Are there
> any other RockChip PHYs? Any external PHYS? Are they register
> incompatible with the internal PHY? Is it even RockChip IP? Or has it
> been licensed from somebody else?
>
Maybe I just want to highlight it applies to the PHY with Mac
connection, actually I was named Rockchip at the beginning, as Heiko
said, PHY is a wide range, so add a modifier to restrict it.
Yes, we use other external phys, like realtek and etc...
If we have any other phy in our socs, it also could be expanded at
rockchip_phy_tbl{} at rockchip.c
it has been licensed from somebody.
> I would more likely just call it ROCKCHIP_PHY.
>
> Andrew
>
>
>
[toc] | [prev] | [next] | [standalone]
| From | Andrew Lunn <andrew@lunn.ch> |
|---|---|
| Date | 2017-06-27 16:50 +0200 |
| Message-ID | <tWZYu-1RV-21@gated-at.bofh.it> |
| In reply to | #1675851 |
> it has been licensed from somebody. And does that somebody already have a driver for it? There is no point adding a driver, if all you need to do is add the ID to another driver. Andrew
[toc] | [prev] | [next] | [standalone]
| From | "David.Wu" <david.wu@rock-chips.com> |
|---|---|
| Date | 2017-06-27 17:20 +0200 |
| Message-ID | <tX0rw-2jq-13@gated-at.bofh.it> |
| In reply to | #1675856 |
Hi Andrew, 在 2017/6/27 22:46, Andrew Lunn 写道: >> it has been licensed from somebody. > > And does that somebody already have a driver for it? There is no point > adding a driver, if all you need to do is add the ID to another > driver. > I didn't find it. Maybe use the same, but the configuration is different. But this may also be possible, upstream with a new driver. > Andrew > > >
[toc] | [prev] | [next] | [standalone]
| From | Andrew Lunn <andrew@lunn.ch> |
|---|---|
| Date | 2017-06-24 04:20 +0200 |
| Message-ID | <tVIQ1-1SY-11@gated-at.bofh.it> |
| In reply to | #1673235 |
> +
> +static int internal_config_init(struct phy_device *phydev)
> +{
internal_ is a bit generic. The Marvell Ethernet switches have
internal phy, etc. rockchip_ would be a better prefix.
Andrew
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web