Add a binding document for the DWMAC ethernet controller found on the
IMG Pistachio SoC.
Signed-off-by: Andrew Bresticker <[email protected]>
Cc: Rob Herring <[email protected]>
Cc: Pawel Moll <[email protected]>
Cc: Mark Rutland <[email protected]>
Cc: Ian Campbell <[email protected]>
Cc: Kumar Gala <[email protected]>
Cc: James Hartley <[email protected]>
---
No changes from v1.
---
.../devicetree/bindings/net/pistachio-dwmac.txt | 24 ++++++++++++++++++++++
1 file changed, 24 insertions(+)
create mode 100644 Documentation/devicetree/bindings/net/pistachio-dwmac.txt
diff --git a/Documentation/devicetree/bindings/net/pistachio-dwmac.txt b/Documentation/devicetree/bindings/net/pistachio-dwmac.txt
new file mode 100644
index 0000000..9781469
--- /dev/null
+++ b/Documentation/devicetree/bindings/net/pistachio-dwmac.txt
@@ -0,0 +1,24 @@
+IMG Pistachio Ethernet Controller
+=================================
+
+This device is a variant of the DWMAC and inherits the properties described
+in ./stmmac.txt.
+
+Required properties:
+--------------------
+ - compatible: Must contain "img,pistachio-dwmac" and "snps,dwmac".
+ - clocks: Must contain an entry for each entry in clock-names.
+ See ../clock/clock-bindings.txt for details.
+ - clock-names: Must include "stmmaceth" and "sys".
+
+Example:
+--------
+ethernet@18140000 {
+ compatible = "img,pistachio-dwmac";
+ reg = <0x18140000 0x2000>;
+ interrupts = <GIC_SHARED 50 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-names = "macirq";
+ clocks = <&clk_core CLK_ENET>, <&cr_periph SYS_CLK_ENET>;
+ clock-names = "stmmaceth", "sys";
+ phy-mode = "rmii";
+};
--
2.2.0.rc0.207.ga3a616c
At the moment, the only additional setup required for the DWMAC
on the IMG Pistachio SoC is to request and enable a separate gate
clock for the register interface.
Signed-off-by: Andrew Bresticker <[email protected]>
Signed-off-by: Govindraj Raja <[email protected]>
Cc: James Hartley <[email protected]>
---
Changes from v1:
- Do not potentially assign an error pointer to pdata->sys_clk
---
drivers/net/ethernet/stmicro/stmmac/Makefile | 3 +-
.../net/ethernet/stmicro/stmmac/dwmac-pistachio.c | 59 ++++++++++++++++++++++
.../net/ethernet/stmicro/stmmac/stmmac_platform.c | 1 +
.../net/ethernet/stmicro/stmmac/stmmac_platform.h | 1 +
4 files changed, 63 insertions(+), 1 deletion(-)
create mode 100644 drivers/net/ethernet/stmicro/stmmac/dwmac-pistachio.c
diff --git a/drivers/net/ethernet/stmicro/stmmac/Makefile b/drivers/net/ethernet/stmicro/stmmac/Makefile
index 73c2715..8efb622 100644
--- a/drivers/net/ethernet/stmicro/stmmac/Makefile
+++ b/drivers/net/ethernet/stmicro/stmmac/Makefile
@@ -6,7 +6,8 @@ stmmac-objs:= stmmac_main.o stmmac_ethtool.o stmmac_mdio.o ring_mode.o \
obj-$(CONFIG_STMMAC_PLATFORM) += stmmac-platform.o
stmmac-platform-objs:= stmmac_platform.o dwmac-meson.o dwmac-sunxi.o \
- dwmac-sti.o dwmac-socfpga.o dwmac-rk.o
+ dwmac-sti.o dwmac-socfpga.o dwmac-rk.o \
+ dwmac-pistachio.o
obj-$(CONFIG_STMMAC_PCI) += stmmac-pci.o
stmmac-pci-objs:= stmmac_pci.o
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-pistachio.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-pistachio.c
new file mode 100644
index 0000000..5e0b958
--- /dev/null
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-pistachio.c
@@ -0,0 +1,59 @@
+/*
+ * IMG Pistachio DWMAC glue layer
+ *
+ * Copyright (C) 2015 Google, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ */
+
+#include <linux/clk.h>
+#include <linux/kernel.h>
+#include <linux/slab.h>
+#include <linux/stmmac.h>
+
+struct pistachio_dwmac_priv_data {
+ struct clk *sys_clk;
+};
+
+static void *pistachio_dwmac_setup(struct platform_device *pdev)
+{
+ struct pistachio_dwmac_priv_data *pdata;
+ struct clk *clk;
+
+ pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
+ if (!pdata)
+ return ERR_PTR(-ENOMEM);
+
+ clk = devm_clk_get(&pdev->dev, "sys");
+ if (IS_ERR(clk)) {
+ dev_err(&pdev->dev, "Failed to get sys clock: %ld\n",
+ PTR_ERR(clk));
+ return clk;
+ }
+ pdata->sys_clk = clk;
+
+ return pdata;
+}
+
+static int pistachio_dwmac_init(struct platform_device *pdev, void *priv)
+{
+ struct pistachio_dwmac_priv_data *pdata = priv;
+
+ return clk_prepare_enable(pdata->sys_clk);
+}
+
+static void pistachio_dwmac_exit(struct platform_device *pdev, void *priv)
+{
+ struct pistachio_dwmac_priv_data *pdata = priv;
+
+ clk_disable_unprepare(pdata->sys_clk);
+}
+
+const struct stmmac_of_data pistachio_dwmac_data = {
+ .setup = pistachio_dwmac_setup,
+ .init = pistachio_dwmac_init,
+ .exit = pistachio_dwmac_exit,
+ .has_gmac = true,
+};
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
index f9b42f1..d5de361 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
@@ -34,6 +34,7 @@
static const struct of_device_id stmmac_dt_ids[] = {
/* SoC specific glue layers should come before generic bindings */
{ .compatible = "rockchip,rk3288-gmac", .data = &rk3288_gmac_data},
+ { .compatible = "img,pistachio-dwmac", .data = &pistachio_dwmac_data},
{ .compatible = "amlogic,meson6-dwmac", .data = &meson6_dwmac_data},
{ .compatible = "allwinner,sun7i-a20-gmac", .data = &sun7i_gmac_data},
{ .compatible = "st,stih415-dwmac", .data = &stih4xx_dwmac_data},
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.h b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.h
index 093eb99..101e635 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.h
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.h
@@ -25,5 +25,6 @@ extern const struct stmmac_of_data stih4xx_dwmac_data;
extern const struct stmmac_of_data stid127_dwmac_data;
extern const struct stmmac_of_data socfpga_gmac_data;
extern const struct stmmac_of_data rk3288_gmac_data;
+extern const struct stmmac_of_data pistachio_dwmac_data;
#endif /* __STMMAC_PLATFORM_H__ */
--
2.2.0.rc0.207.ga3a616c
On Monday 06 April 2015 14:42:38 Andrew Bresticker wrote:
> At the moment, the only additional setup required for the DWMAC
> on the IMG Pistachio SoC is to request and enable a separate gate
> clock for the register interface.
>
> Signed-off-by: Andrew Bresticker <[email protected]>
> Signed-off-by: Govindraj Raja <[email protected]>
> Cc: James Hartley <[email protected]>
Why do you need a special glue driver for that?
Since you don't do anything special, I'd say it should be possible
to handle this with just the default driver.
Arnd
On Mon, Apr 6, 2015 at 3:10 PM, Arnd Bergmann <[email protected]> wrote:
> On Monday 06 April 2015 14:42:38 Andrew Bresticker wrote:
>> At the moment, the only additional setup required for the DWMAC
>> on the IMG Pistachio SoC is to request and enable a separate gate
>> clock for the register interface.
>>
>> Signed-off-by: Andrew Bresticker <[email protected]>
>> Signed-off-by: Govindraj Raja <[email protected]>
>> Cc: James Hartley <[email protected]>
>
> Why do you need a special glue driver for that?
>
> Since you don't do anything special, I'd say it should be possible
> to handle this with just the default driver.
Right, at the moment we only need to request and enable a second
clock, which could be added to the core driver. If we don't expect to
have to extend this driver to deal with other configurations (which
IIRC there were some concerns about when I wrote this), then I'm fine
with folding this change into the core driver - James?
Thanks,
Andrew
> -----Original Message-----
> From: [email protected] [mailto:[email protected]] On Behalf Of
> Andrew Bresticker
> Sent: 06 April 2015 23:28
> To: Arnd Bergmann; James Hartley
> Cc: David S. Miller; Giuseppe Cavallaro; [email protected];
> [email protected]; [email protected]; Govindraj Raja
> Subject: Re: [PATCH V2 2/2] stmmac: Add IMG Pistachio platform glue layer
>
> On Mon, Apr 6, 2015 at 3:10 PM, Arnd Bergmann <[email protected]> wrote:
> > On Monday 06 April 2015 14:42:38 Andrew Bresticker wrote:
> >> At the moment, the only additional setup required for the DWMAC on
> >> the IMG Pistachio SoC is to request and enable a separate gate clock
> >> for the register interface.
> >>
> >> Signed-off-by: Andrew Bresticker <[email protected]>
> >> Signed-off-by: Govindraj Raja <[email protected]>
> >> Cc: James Hartley <[email protected]>
> >
> > Why do you need a special glue driver for that?
> >
> > Since you don't do anything special, I'd say it should be possible to
> > handle this with just the default driver.
>
> Right, at the moment we only need to request and enable a second clock,
> which could be added to the core driver. If we don't expect to have to
> extend this driver to deal with other configurations (which IIRC there were
> some concerns about when I wrote this), then I'm fine with folding this change
> into the core driver - James?
Weren't the concerns about USB not Ethernet? I don't remember anything that would stop us extending the driver for eth.
>
> Thanks,
> Andrew
James.
????{.n?+???????+%?????ݶ??w??{.n?+????{??G?????{ay?ʇڙ?,j??f???h?????????z_??(?階?ݢj"???m??????G????????????&???~???iO???z??v?^?m????????????I?
On Tue, Apr 7, 2015 at 10:16 AM, James Hartley <[email protected]> wrote:
>
>
>> -----Original Message-----
>> From: [email protected] [mailto:[email protected]] On Behalf Of
>> Andrew Bresticker
>> Sent: 06 April 2015 23:28
>> To: Arnd Bergmann; James Hartley
>> Cc: David S. Miller; Giuseppe Cavallaro; [email protected];
>> [email protected]; [email protected]; Govindraj Raja
>> Subject: Re: [PATCH V2 2/2] stmmac: Add IMG Pistachio platform glue layer
>>
>> On Mon, Apr 6, 2015 at 3:10 PM, Arnd Bergmann <[email protected]> wrote:
>> > On Monday 06 April 2015 14:42:38 Andrew Bresticker wrote:
>> >> At the moment, the only additional setup required for the DWMAC on
>> >> the IMG Pistachio SoC is to request and enable a separate gate clock
>> >> for the register interface.
>> >>
>> >> Signed-off-by: Andrew Bresticker <[email protected]>
>> >> Signed-off-by: Govindraj Raja <[email protected]>
>> >> Cc: James Hartley <[email protected]>
>> >
>> > Why do you need a special glue driver for that?
>> >
>> > Since you don't do anything special, I'd say it should be possible to
>> > handle this with just the default driver.
>>
>> Right, at the moment we only need to request and enable a second clock,
>> which could be added to the core driver. If we don't expect to have to
>> extend this driver to deal with other configurations (which IIRC there were
>> some concerns about when I wrote this), then I'm fine with folding this change
>> into the core driver - James?
>
> Weren't the concerns about USB not Ethernet? I don't remember anything that
> would stop us extending the driver for eth.
OK, let's try this then: https://patchwork.kernel.org/patch/6174881/
-Andrew