* [PATCH v4 0/7] Add generic PHY driver used by MACB/GEM on EyeQ5
@ 2025-11-24 14:41 Théo Lebrun
2025-11-24 14:41 ` [PATCH v4 1/7] dt-bindings: soc: mobileye: OLB is an Ethernet PHY provider " Théo Lebrun
` (6 more replies)
0 siblings, 7 replies; 15+ messages in thread
From: Théo Lebrun @ 2025-11-24 14:41 UTC (permalink / raw)
To: Vladimir Kondratiev, Grégory Clement, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Vinod Koul,
Kishon Vijay Abraham I, Michael Turquette, Stephen Boyd,
Philipp Zabel, Thomas Bogendoerfer
Cc: linux-mips, devicetree, linux-kernel, linux-phy, linux-clk,
Benoît Monin, Maxime Chevallier, Tawfik Bayouk,
Thomas Petazzoni, Théo Lebrun, Conor Dooley, Jerome Brunet,
Andrew Lunn
EyeQ5 SoCs integrate two GEM instances. A system-controller register
region named "OLB" has some control over the Ethernet PHY integration.
Past iterations [0] touched those syscon registers directly from MACB.
It was a bad idea. Extend the current OLB ecosystem with a new generic
PHY driver.
- OLB is carried by one main platform driver: clk-eyeq.
- It instantiates auxiliary devices: reset-eyeq & pinctrl-eyeq5.
- We add a new one: phy-eyeq5-eth.
I always find devicetree the simplest way to understand device
interactions, so here is a DT overview:
olb: system-controller@e00000 {
compatible = "mobileye,eyeq5-olb", "syscon";
reg = <0 0xe00000 0x0 0x400>;
// ...
#reset-cells = <2>;
#clock-cells = <1>;
#phy-cells = <1>; // <- this is new
};
macb0: ethernet@2a00000 {
compatible = "mobileye,eyeq5-gem";
phys = <&olb 0>; // <- GEM device consumes the PHY
// ...
};
macb1: ethernet@2b00000 {
compatible = "mobileye,eyeq5-gem";
phys = <&olb 1>; // <- same thing for the second instance
// ...
};
The Linux MACB driver already consumes a generic PHY for some other
compatibles, this is nothing new. The MACB series [1] has been merged
into net-next/main.
--
About merging, Philipp Zabel gave his ACK for [5/7] to go into
linux-clk. The split is:
- [PATCH 1/7] dt-bindings: soc: mobileye: OLB is an Ethernet PHY provider on EyeQ5
[PATCH 6/7] MIPS: mobileye: eyeq5: add two Cadence GEM Ethernet controllers
[PATCH 7/7] MIPS: mobileye: eyeq5-epm: add two Cadence GEM Ethernet PHYs
=> linux-mips
- [PATCH 2/7] phy: Add driver for EyeQ5 Ethernet PHY wrapper
=> linux-phy
- [PATCH 3/7] clk: eyeq: use the auxiliary device creation helper
[PATCH 4/7] clk: eyeq: add EyeQ5 children auxiliary device for generic PHYs
[PATCH 5/7] reset: eyeq: drop device_set_of_node_from_dev() done by parent
=> linux-clk
MACB patches are in and V1/V2/V3 were super calm, can we sync to get
this V4 in before the v6.19 merge window? Patches apply cleanly on the
three linux-{clk,mips,phy} trees.
Have a nice day,
Thanks!
Théo
[0]: https://lore.kernel.org/lkml/20250627-macb-v2-15-ff8207d0bb77@bootlin.com/
[1]: https://lore.kernel.org/lkml/20251022-macb-eyeq5-v2-0-7c140abb0581@bootlin.com/
Signed-off-by: Théo Lebrun <theo.lebrun@bootlin.com>
---
Changes in v4:
- Append my SoB to Jerome's patch:
[PATCH v4 3/7] clk: eyeq: use the auxiliary device creation helper
- Rebase on net-next & linux-{clk,mips,phy}. Nothing to report.
- Link to v3: https://lore.kernel.org/r/20251119-macb-phy-v3-0-e9a7be186a33@bootlin.com
Changes in v3:
- Take Philipp Zabel's Reviewed-by & Acked-by trailers on reset patch.
- Take Thomas Bogendoerfer's two Acked-by trailers on DT patches.
- Rebase on net-next & test on target. Nothing to report.
- Link to v2: https://lore.kernel.org/r/20251101-macb-phy-v2-0-c1519eef16d3@bootlin.com
Changes in v2:
- Take Acked-by: Conor Dooley on dt-bindings-patch.
- s/%ld/%tu/ for printing ptrdiff_t; warnings on 32-bit archs.
Reported by NIPA's netdev/build_32bit test.
https://patchwork.kernel.org/project/netdevbpf/patch/20251021-macb-eyeq5-v1-7-3b0b5a9d2f85@bootlin.com/
https://netdev.bots.linux.dev/static/nipa/1014126/14277857/build_32bit/stderr
- Link to v1: https://lore.kernel.org/r/20251022-macb-phy-v1-0-f29f28fae721@bootlin.com
Changes since MACB V1:
- Drop the old "mobileye,olb" properties from DT patches; found while
running dtbs_check and dt_binding_check.
- Drop all patches targeting net-next. That is MACB dt-bindings patch
and MACB driver code. See there here [1].
- Link to v1: https://lore.kernel.org/lkml/20251021-macb-eyeq5-v1-0-3b0b5a9d2f85@bootlin.com/
Past versions of MACB patches:
- March 2025: [PATCH net-next 00/13] Support the Cadence MACB/GEM
instances on Mobileye EyeQ5 SoCs
https://lore.kernel.org/lkml/20250321-macb-v1-0-537b7e37971d@bootlin.com/
- June 2025: [PATCH net-next v2 00/18] Support the Cadence MACB/GEM
instances on Mobileye EyeQ5 SoCs
https://lore.kernel.org/lkml/20250627-macb-v2-0-ff8207d0bb77@bootlin.com/
- August 2025: [PATCH net v3 00/16] net: macb: various fixes & cleanup
https://lore.kernel.org/lkml/20250808-macb-fixes-v3-0-08f1fcb5179f@bootlin.com/
---
Jerome Brunet (1):
clk: eyeq: use the auxiliary device creation helper
Théo Lebrun (6):
dt-bindings: soc: mobileye: OLB is an Ethernet PHY provider on EyeQ5
phy: Add driver for EyeQ5 Ethernet PHY wrapper
clk: eyeq: add EyeQ5 children auxiliary device for generic PHYs
reset: eyeq: drop device_set_of_node_from_dev() done by parent
MIPS: mobileye: eyeq5: add two Cadence GEM Ethernet controllers
MIPS: mobileye: eyeq5-epm: add two Cadence GEM Ethernet PHYs
.../bindings/soc/mobileye/mobileye,eyeq5-olb.yaml | 7 +-
MAINTAINERS | 1 +
arch/mips/boot/dts/mobileye/eyeq5-epm5.dts | 26 +++
arch/mips/boot/dts/mobileye/eyeq5.dtsi | 45 ++++
drivers/clk/clk-eyeq.c | 60 ++---
drivers/phy/Kconfig | 13 ++
drivers/phy/Makefile | 1 +
drivers/phy/phy-eyeq5-eth.c | 254 +++++++++++++++++++++
drivers/reset/reset-eyeq.c | 24 +-
9 files changed, 363 insertions(+), 68 deletions(-)
---
base-commit: ab7bdf0904dfbc727a64d4edbd51295318e854cf
change-id: 20251022-macb-phy-21bc4e1dfbb7
Best regards,
--
Théo Lebrun <theo.lebrun@bootlin.com>
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH v4 1/7] dt-bindings: soc: mobileye: OLB is an Ethernet PHY provider on EyeQ5
2025-11-24 14:41 [PATCH v4 0/7] Add generic PHY driver used by MACB/GEM on EyeQ5 Théo Lebrun
@ 2025-11-24 14:41 ` Théo Lebrun
2025-11-24 14:41 ` [PATCH v4 2/7] phy: Add driver for EyeQ5 Ethernet PHY wrapper Théo Lebrun
` (5 subsequent siblings)
6 siblings, 0 replies; 15+ messages in thread
From: Théo Lebrun @ 2025-11-24 14:41 UTC (permalink / raw)
To: Vladimir Kondratiev, Grégory Clement, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Vinod Koul,
Kishon Vijay Abraham I, Michael Turquette, Stephen Boyd,
Philipp Zabel, Thomas Bogendoerfer
Cc: linux-mips, devicetree, linux-kernel, linux-phy, linux-clk,
Benoît Monin, Maxime Chevallier, Tawfik Bayouk,
Thomas Petazzoni, Théo Lebrun, Conor Dooley
OLB on EyeQ5 ("mobileye,eyeq5-olb" compatible) is now declared as a
generic PHY provider. Under the hood, it provides Ethernet RGMII/SGMII
PHY support for both MAC instances.
Acked-by: Conor Dooley <conor.dooley@microchip.com>
Signed-off-by: Théo Lebrun <theo.lebrun@bootlin.com>
---
.../devicetree/bindings/soc/mobileye/mobileye,eyeq5-olb.yaml | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/Documentation/devicetree/bindings/soc/mobileye/mobileye,eyeq5-olb.yaml b/Documentation/devicetree/bindings/soc/mobileye/mobileye,eyeq5-olb.yaml
index 6d11472ba5a7..56401d76a9b5 100644
--- a/Documentation/devicetree/bindings/soc/mobileye/mobileye,eyeq5-olb.yaml
+++ b/Documentation/devicetree/bindings/soc/mobileye/mobileye,eyeq5-olb.yaml
@@ -51,6 +51,9 @@ properties:
clock-names:
const: ref
+ '#phy-cells':
+ const: 1
+
patternProperties:
'-pins?$':
type: object
@@ -310,7 +313,7 @@ allOf:
properties:
'#reset-cells': false
- # Only EyeQ5 has pinctrl in OLB.
+ # Only EyeQ5 has pinctrl and PHY in OLB.
- if:
not:
properties:
@@ -320,6 +323,8 @@ allOf:
then:
patternProperties:
'-pins?$': false
+ properties:
+ '#phy-cells': false
examples:
- |
--
2.51.2
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v4 2/7] phy: Add driver for EyeQ5 Ethernet PHY wrapper
2025-11-24 14:41 [PATCH v4 0/7] Add generic PHY driver used by MACB/GEM on EyeQ5 Théo Lebrun
2025-11-24 14:41 ` [PATCH v4 1/7] dt-bindings: soc: mobileye: OLB is an Ethernet PHY provider " Théo Lebrun
@ 2025-11-24 14:41 ` Théo Lebrun
2025-12-10 16:06 ` Luca Ceresoli
2025-11-24 14:41 ` [PATCH v4 3/7] clk: eyeq: use the auxiliary device creation helper Théo Lebrun
` (4 subsequent siblings)
6 siblings, 1 reply; 15+ messages in thread
From: Théo Lebrun @ 2025-11-24 14:41 UTC (permalink / raw)
To: Vladimir Kondratiev, Grégory Clement, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Vinod Koul,
Kishon Vijay Abraham I, Michael Turquette, Stephen Boyd,
Philipp Zabel, Thomas Bogendoerfer
Cc: linux-mips, devicetree, linux-kernel, linux-phy, linux-clk,
Benoît Monin, Maxime Chevallier, Tawfik Bayouk,
Thomas Petazzoni, Théo Lebrun
EyeQ5 embeds a system-controller called OLB. It features many unrelated
registers, and some of those are registers used to configure the
integration of the RGMII/SGMII Cadence PHY used by MACB/GEM instances.
Wrap in a neat generic PHY provider, exposing two PHYs with standard
phy_init() / phy_set_mode() / phy_power_on() operations.
Signed-off-by: Théo Lebrun <theo.lebrun@bootlin.com>
---
MAINTAINERS | 1 +
drivers/phy/Kconfig | 13 +++
drivers/phy/Makefile | 1 +
drivers/phy/phy-eyeq5-eth.c | 254 ++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 269 insertions(+)
diff --git a/MAINTAINERS b/MAINTAINERS
index e9a8d945632b..83cd67aa3241 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -17402,6 +17402,7 @@ F: arch/mips/boot/dts/mobileye/
F: arch/mips/configs/eyeq5_defconfig
F: arch/mips/mobileye/board-epm5.its.S
F: drivers/clk/clk-eyeq.c
+F: drivers/phy/phy-eyeq5-eth.c
F: drivers/pinctrl/pinctrl-eyeq5.c
F: drivers/reset/reset-eyeq.c
F: include/dt-bindings/clock/mobileye,eyeq5-clk.h
diff --git a/drivers/phy/Kconfig b/drivers/phy/Kconfig
index 678dd0452f0a..1aa6eff12dbc 100644
--- a/drivers/phy/Kconfig
+++ b/drivers/phy/Kconfig
@@ -101,6 +101,19 @@ config PHY_NXP_PTN3222
schemes. It supports all three USB 2.0 data rates: Low Speed, Full
Speed and High Speed.
+config PHY_EYEQ5_ETH
+ tristate "Ethernet PHY Driver on EyeQ5"
+ depends on OF
+ depends on MACH_EYEQ5 || COMPILE_TEST
+ select AUXILIARY_BUS
+ select GENERIC_PHY
+ default MACH_EYEQ5
+ help
+ Enable this to support the Ethernet PHY integrated on EyeQ5.
+ It supports both RGMII and SGMII. Registers are located in a
+ shared register region called OLB. If M is selected, the
+ module will be called phy-eyeq5-eth.
+
source "drivers/phy/allwinner/Kconfig"
source "drivers/phy/amlogic/Kconfig"
source "drivers/phy/broadcom/Kconfig"
diff --git a/drivers/phy/Makefile b/drivers/phy/Makefile
index bfb27fb5a494..8289497ece55 100644
--- a/drivers/phy/Makefile
+++ b/drivers/phy/Makefile
@@ -13,6 +13,7 @@ obj-$(CONFIG_PHY_SNPS_EUSB2) += phy-snps-eusb2.o
obj-$(CONFIG_USB_LGM_PHY) += phy-lgm-usb.o
obj-$(CONFIG_PHY_AIROHA_PCIE) += phy-airoha-pcie.o
obj-$(CONFIG_PHY_NXP_PTN3222) += phy-nxp-ptn3222.o
+obj-$(CONFIG_PHY_EYEQ5_ETH) += phy-eyeq5-eth.o
obj-y += allwinner/ \
amlogic/ \
broadcom/ \
diff --git a/drivers/phy/phy-eyeq5-eth.c b/drivers/phy/phy-eyeq5-eth.c
new file mode 100644
index 000000000000..c901d1cce0c8
--- /dev/null
+++ b/drivers/phy/phy-eyeq5-eth.c
@@ -0,0 +1,254 @@
+// SPDX-License-Identifier: GPL-2.0-only
+
+#include <linux/array_size.h>
+#include <linux/auxiliary_bus.h>
+#include <linux/bitfield.h>
+#include <linux/bits.h>
+#include <linux/bug.h>
+#include <linux/cleanup.h>
+#include <linux/container_of.h>
+#include <linux/device.h>
+#include <linux/err.h>
+#include <linux/errno.h>
+#include <linux/init.h>
+#include <linux/io.h>
+#include <linux/iopoll.h>
+#include <linux/lockdep.h>
+#include <linux/mod_devicetable.h>
+#include <linux/mutex.h>
+#include <linux/of.h>
+#include <linux/phy.h>
+#include <linux/phy/phy.h>
+#include <linux/slab.h>
+#include <linux/types.h>
+
+#define EQ5_PHY_COUNT 2
+
+#define EQ5_PHY0_GP 0x128
+#define EQ5_PHY1_GP 0x12c
+#define EQ5_PHY0_SGMII 0x134
+#define EQ5_PHY1_SGMII 0x138
+
+#define EQ5_GP_TX_SWRST_DIS BIT(0) // Tx SW reset
+#define EQ5_GP_TX_M_CLKE BIT(1) // Tx M clock enable
+#define EQ5_GP_SYS_SWRST_DIS BIT(2) // Sys SW reset
+#define EQ5_GP_SYS_M_CLKE BIT(3) // Sys clock enable
+#define EQ5_GP_SGMII_MODE BIT(4) // SGMII mode
+#define EQ5_GP_RGMII_DRV GENMASK(8, 5) // RGMII drive strength
+
+#define EQ5_SGMII_PWR_EN BIT(0)
+#define EQ5_SGMII_RST_DIS BIT(1)
+#define EQ5_SGMII_PLL_EN BIT(2)
+#define EQ5_SGMII_SIG_DET_SW BIT(3)
+#define EQ5_SGMII_PWR_STATE BIT(4)
+#define EQ5_SGMII_PLL_ACK BIT(18)
+#define EQ5_SGMII_PWR_STATE_ACK GENMASK(24, 20)
+
+struct eq5_phy_inst {
+ struct eq5_phy_private *priv;
+ struct phy *phy;
+ void __iomem *gp, *sgmii;
+ phy_interface_t phy_interface;
+};
+
+struct eq5_phy_private {
+ struct device *dev;
+ struct eq5_phy_inst phys[EQ5_PHY_COUNT];
+};
+
+static int eq5_phy_init(struct phy *phy)
+{
+ struct eq5_phy_inst *inst = phy_get_drvdata(phy);
+ struct eq5_phy_private *priv = inst->priv;
+ struct device *dev = priv->dev;
+ u32 reg;
+
+ dev_dbg(dev, "phy_init(inst=%td)\n", inst - priv->phys);
+
+ writel(0, inst->gp);
+ writel(0, inst->sgmii);
+
+ udelay(5);
+
+ reg = readl(inst->gp) | EQ5_GP_TX_SWRST_DIS | EQ5_GP_TX_M_CLKE |
+ EQ5_GP_SYS_SWRST_DIS | EQ5_GP_SYS_M_CLKE |
+ FIELD_PREP(EQ5_GP_RGMII_DRV, 0x9);
+ writel(reg, inst->gp);
+
+ return 0;
+}
+
+static int eq5_phy_exit(struct phy *phy)
+{
+ struct eq5_phy_inst *inst = phy_get_drvdata(phy);
+ struct eq5_phy_private *priv = inst->priv;
+ struct device *dev = priv->dev;
+
+ dev_dbg(dev, "phy_exit(inst=%td)\n", inst - priv->phys);
+
+ writel(0, inst->gp);
+ writel(0, inst->sgmii);
+ udelay(5);
+
+ return 0;
+}
+
+static int eq5_phy_set_mode(struct phy *phy, enum phy_mode mode, int submode)
+{
+ struct eq5_phy_inst *inst = phy_get_drvdata(phy);
+ struct eq5_phy_private *priv = inst->priv;
+ struct device *dev = priv->dev;
+
+ dev_dbg(dev, "phy_set_mode(inst=%td, mode=%d, submode=%d)\n",
+ inst - priv->phys, mode, submode);
+
+ if (mode != PHY_MODE_ETHERNET)
+ return -EOPNOTSUPP;
+
+ if (!phy_interface_mode_is_rgmii(submode) &&
+ submode != PHY_INTERFACE_MODE_SGMII)
+ return -EOPNOTSUPP;
+
+ inst->phy_interface = submode;
+ return 0;
+}
+
+static int eq5_phy_power_on(struct phy *phy)
+{
+ struct eq5_phy_inst *inst = phy_get_drvdata(phy);
+ struct eq5_phy_private *priv = inst->priv;
+ struct device *dev = priv->dev;
+ u32 reg;
+
+ dev_dbg(dev, "phy_power_on(inst=%td)\n", inst - priv->phys);
+
+ if (inst->phy_interface == PHY_INTERFACE_MODE_SGMII) {
+ writel(readl(inst->gp) | EQ5_GP_SGMII_MODE, inst->gp);
+
+ reg = EQ5_SGMII_PWR_EN | EQ5_SGMII_RST_DIS | EQ5_SGMII_PLL_EN;
+ writel(reg, inst->sgmii);
+
+ if (readl_poll_timeout(inst->sgmii, reg,
+ reg & EQ5_SGMII_PLL_ACK, 1, 100)) {
+ dev_err(dev, "PLL timeout\n");
+ return -ETIMEDOUT;
+ }
+
+ reg = readl(inst->sgmii);
+ reg |= EQ5_SGMII_PWR_STATE | EQ5_SGMII_SIG_DET_SW;
+ writel(reg, inst->sgmii);
+ } else {
+ writel(readl(inst->gp) & ~EQ5_GP_SGMII_MODE, inst->gp);
+ writel(0, inst->sgmii);
+ }
+
+ return 0;
+}
+
+static int eq5_phy_power_off(struct phy *phy)
+{
+ struct eq5_phy_inst *inst = phy_get_drvdata(phy);
+ struct eq5_phy_private *priv = inst->priv;
+ struct device *dev = priv->dev;
+
+ dev_dbg(dev, "phy_power_off(inst=%td)\n", inst - priv->phys);
+
+ writel(readl(inst->gp) & ~EQ5_GP_SGMII_MODE, inst->gp);
+ writel(0, inst->sgmii);
+
+ return 0;
+}
+
+static const struct phy_ops eq5_phy_ops = {
+ .init = eq5_phy_init,
+ .exit = eq5_phy_exit,
+ .set_mode = eq5_phy_set_mode,
+ .power_on = eq5_phy_power_on,
+ .power_off = eq5_phy_power_off,
+};
+
+static struct phy *eq5_phy_xlate(struct device *dev,
+ const struct of_phandle_args *args)
+{
+ struct eq5_phy_private *priv = dev_get_drvdata(dev);
+
+ if (args->args_count != 1 || args->args[0] > 1)
+ return ERR_PTR(-EINVAL);
+
+ return priv->phys[args->args[0]].phy;
+}
+
+static int eq5_phy_probe_phy(struct eq5_phy_private *priv, unsigned int index,
+ void __iomem *base, unsigned int gp,
+ unsigned int sgmii)
+{
+ struct eq5_phy_inst *inst = &priv->phys[index];
+ struct device *dev = priv->dev;
+ struct phy *phy;
+
+ phy = devm_phy_create(dev, dev->of_node, &eq5_phy_ops);
+ if (IS_ERR(phy)) {
+ dev_err(dev, "failed to create PHY %u\n", index);
+ return PTR_ERR(phy);
+ }
+
+ inst->priv = priv;
+ inst->phy = phy;
+ inst->gp = base + gp;
+ inst->sgmii = base + sgmii;
+ inst->phy_interface = PHY_INTERFACE_MODE_NA;
+ phy_set_drvdata(phy, inst);
+
+ return 0;
+}
+
+static int eq5_phy_probe(struct auxiliary_device *adev,
+ const struct auxiliary_device_id *id)
+{
+ struct device *dev = &adev->dev;
+ struct phy_provider *provider;
+ struct eq5_phy_private *priv;
+ void __iomem *base;
+ int ret;
+
+ priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
+ if (!priv)
+ return -ENOMEM;
+
+ priv->dev = dev;
+ dev_set_drvdata(dev, priv);
+
+ base = (void __iomem *)dev_get_platdata(dev);
+
+ ret = eq5_phy_probe_phy(priv, 0, base, EQ5_PHY0_GP, EQ5_PHY0_SGMII);
+ if (ret)
+ return ret;
+
+ ret = eq5_phy_probe_phy(priv, 1, base, EQ5_PHY1_GP, EQ5_PHY1_SGMII);
+ if (ret)
+ return ret;
+
+ provider = devm_of_phy_provider_register(dev, eq5_phy_xlate);
+ if (IS_ERR(provider)) {
+ dev_err(dev, "registering provider failed\n");
+ return PTR_ERR(provider);
+ }
+
+ return 0;
+}
+
+static const struct auxiliary_device_id eq5_phy_id_table[] = {
+ { .name = "clk_eyeq.phy" },
+ {}
+};
+MODULE_DEVICE_TABLE(auxiliary, eq5_phy_id_table);
+
+static struct auxiliary_driver eq5_phy_driver = {
+ .probe = eq5_phy_probe,
+ .id_table = eq5_phy_id_table,
+};
+module_auxiliary_driver(eq5_phy_driver);
+
+MODULE_DESCRIPTION("EyeQ5 Ethernet PHY driver");
+MODULE_AUTHOR("Théo Lebrun <theo.lebrun@bootlin.com>");
+MODULE_LICENSE("GPL");
--
2.51.2
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v4 3/7] clk: eyeq: use the auxiliary device creation helper
2025-11-24 14:41 [PATCH v4 0/7] Add generic PHY driver used by MACB/GEM on EyeQ5 Théo Lebrun
2025-11-24 14:41 ` [PATCH v4 1/7] dt-bindings: soc: mobileye: OLB is an Ethernet PHY provider " Théo Lebrun
2025-11-24 14:41 ` [PATCH v4 2/7] phy: Add driver for EyeQ5 Ethernet PHY wrapper Théo Lebrun
@ 2025-11-24 14:41 ` Théo Lebrun
2025-12-10 16:06 ` Luca Ceresoli
2025-11-24 14:41 ` [PATCH v4 4/7] clk: eyeq: add EyeQ5 children auxiliary device for generic PHYs Théo Lebrun
` (3 subsequent siblings)
6 siblings, 1 reply; 15+ messages in thread
From: Théo Lebrun @ 2025-11-24 14:41 UTC (permalink / raw)
To: Vladimir Kondratiev, Grégory Clement, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Vinod Koul,
Kishon Vijay Abraham I, Michael Turquette, Stephen Boyd,
Philipp Zabel, Thomas Bogendoerfer
Cc: linux-mips, devicetree, linux-kernel, linux-phy, linux-clk,
Benoît Monin, Maxime Chevallier, Tawfik Bayouk,
Thomas Petazzoni, Théo Lebrun, Jerome Brunet
From: Jerome Brunet <jbrunet@baylibre.com>
The auxiliary device creation of this driver is simple enough to
use the available auxiliary device creation helper.
Use it and remove some boilerplate code.
Tested-by: Théo Lebrun <theo.lebrun@bootlin.com> # On Mobileye EyeQ5
Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>
Signed-off-by: Théo Lebrun <theo.lebrun@bootlin.com>
---
drivers/clk/clk-eyeq.c | 57 +++++++++++---------------------------------------
1 file changed, 12 insertions(+), 45 deletions(-)
diff --git a/drivers/clk/clk-eyeq.c b/drivers/clk/clk-eyeq.c
index ea1c3d78e7cd..664ce7d7868d 100644
--- a/drivers/clk/clk-eyeq.c
+++ b/drivers/clk/clk-eyeq.c
@@ -322,38 +322,18 @@ static void eqc_probe_init_fixed_factors(struct device *dev,
}
}
-static void eqc_auxdev_release(struct device *dev)
-{
- struct auxiliary_device *adev = to_auxiliary_dev(dev);
-
- kfree(adev);
-}
-
-static int eqc_auxdev_create(struct device *dev, void __iomem *base,
- const char *name, u32 id)
+static void eqc_auxdev_create_optional(struct device *dev, void __iomem *base,
+ const char *name)
{
struct auxiliary_device *adev;
- int ret;
- adev = kzalloc(sizeof(*adev), GFP_KERNEL);
- if (!adev)
- return -ENOMEM;
-
- adev->name = name;
- adev->dev.parent = dev;
- adev->dev.platform_data = (void __force *)base;
- adev->dev.release = eqc_auxdev_release;
- adev->id = id;
-
- ret = auxiliary_device_init(adev);
- if (ret)
- return ret;
-
- ret = auxiliary_device_add(adev);
- if (ret)
- auxiliary_device_uninit(adev);
-
- return ret;
+ if (name) {
+ adev = devm_auxiliary_device_create(dev, name,
+ (void __force *)base);
+ if (!adev)
+ dev_warn(dev, "failed creating auxiliary device %s.%s\n",
+ KBUILD_MODNAME, name);
+ }
}
static int eqc_probe(struct platform_device *pdev)
@@ -365,7 +345,6 @@ static int eqc_probe(struct platform_device *pdev)
unsigned int i, clk_count;
struct resource *res;
void __iomem *base;
- int ret;
data = device_get_match_data(dev);
if (!data)
@@ -379,21 +358,9 @@ static int eqc_probe(struct platform_device *pdev)
if (!base)
return -ENOMEM;
- /* Init optional reset auxiliary device. */
- if (data->reset_auxdev_name) {
- ret = eqc_auxdev_create(dev, base, data->reset_auxdev_name, 0);
- if (ret)
- dev_warn(dev, "failed creating auxiliary device %s.%s: %d\n",
- KBUILD_MODNAME, data->reset_auxdev_name, ret);
- }
-
- /* Init optional pinctrl auxiliary device. */
- if (data->pinctrl_auxdev_name) {
- ret = eqc_auxdev_create(dev, base, data->pinctrl_auxdev_name, 0);
- if (ret)
- dev_warn(dev, "failed creating auxiliary device %s.%s: %d\n",
- KBUILD_MODNAME, data->pinctrl_auxdev_name, ret);
- }
+ /* Init optional auxiliary devices. */
+ eqc_auxdev_create_optional(dev, base, data->reset_auxdev_name);
+ eqc_auxdev_create_optional(dev, base, data->pinctrl_auxdev_name);
if (data->pll_count + data->div_count + data->fixed_factor_count == 0)
return 0; /* Zero clocks, we are done. */
--
2.51.2
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v4 4/7] clk: eyeq: add EyeQ5 children auxiliary device for generic PHYs
2025-11-24 14:41 [PATCH v4 0/7] Add generic PHY driver used by MACB/GEM on EyeQ5 Théo Lebrun
` (2 preceding siblings ...)
2025-11-24 14:41 ` [PATCH v4 3/7] clk: eyeq: use the auxiliary device creation helper Théo Lebrun
@ 2025-11-24 14:41 ` Théo Lebrun
2025-12-10 16:06 ` Luca Ceresoli
2025-11-24 14:41 ` [PATCH v4 5/7] reset: eyeq: drop device_set_of_node_from_dev() done by parent Théo Lebrun
` (2 subsequent siblings)
6 siblings, 1 reply; 15+ messages in thread
From: Théo Lebrun @ 2025-11-24 14:41 UTC (permalink / raw)
To: Vladimir Kondratiev, Grégory Clement, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Vinod Koul,
Kishon Vijay Abraham I, Michael Turquette, Stephen Boyd,
Philipp Zabel, Thomas Bogendoerfer
Cc: linux-mips, devicetree, linux-kernel, linux-phy, linux-clk,
Benoît Monin, Maxime Chevallier, Tawfik Bayouk,
Thomas Petazzoni, Théo Lebrun
Grow our clk-eyeq family; it knows how to spawn reset provider and pin
controller children. Expand with a generic PHY driver on EyeQ5.
Signed-off-by: Théo Lebrun <theo.lebrun@bootlin.com>
---
drivers/clk/clk-eyeq.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/clk/clk-eyeq.c b/drivers/clk/clk-eyeq.c
index 664ce7d7868d..a9de57315e48 100644
--- a/drivers/clk/clk-eyeq.c
+++ b/drivers/clk/clk-eyeq.c
@@ -109,6 +109,7 @@ struct eqc_match_data {
const char *reset_auxdev_name;
const char *pinctrl_auxdev_name;
+ const char *eth_phy_auxdev_name;
unsigned int early_clk_count;
};
@@ -361,6 +362,7 @@ static int eqc_probe(struct platform_device *pdev)
/* Init optional auxiliary devices. */
eqc_auxdev_create_optional(dev, base, data->reset_auxdev_name);
eqc_auxdev_create_optional(dev, base, data->pinctrl_auxdev_name);
+ eqc_auxdev_create_optional(dev, base, data->eth_phy_auxdev_name);
if (data->pll_count + data->div_count + data->fixed_factor_count == 0)
return 0; /* Zero clocks, we are done. */
@@ -521,6 +523,7 @@ static const struct eqc_match_data eqc_eyeq5_match_data = {
.reset_auxdev_name = "reset",
.pinctrl_auxdev_name = "pinctrl",
+ .eth_phy_auxdev_name = "phy",
.early_clk_count = ARRAY_SIZE(eqc_eyeq5_early_plls) +
ARRAY_SIZE(eqc_eyeq5_early_fixed_factors),
--
2.51.2
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v4 5/7] reset: eyeq: drop device_set_of_node_from_dev() done by parent
2025-11-24 14:41 [PATCH v4 0/7] Add generic PHY driver used by MACB/GEM on EyeQ5 Théo Lebrun
` (3 preceding siblings ...)
2025-11-24 14:41 ` [PATCH v4 4/7] clk: eyeq: add EyeQ5 children auxiliary device for generic PHYs Théo Lebrun
@ 2025-11-24 14:41 ` Théo Lebrun
2025-11-24 14:41 ` [PATCH v4 6/7] MIPS: mobileye: eyeq5: add two Cadence GEM Ethernet controllers Théo Lebrun
2025-11-24 14:41 ` [PATCH v4 7/7] MIPS: mobileye: eyeq5-epm: add two Cadence GEM Ethernet PHYs Théo Lebrun
6 siblings, 0 replies; 15+ messages in thread
From: Théo Lebrun @ 2025-11-24 14:41 UTC (permalink / raw)
To: Vladimir Kondratiev, Grégory Clement, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Vinod Koul,
Kishon Vijay Abraham I, Michael Turquette, Stephen Boyd,
Philipp Zabel, Thomas Bogendoerfer
Cc: linux-mips, devicetree, linux-kernel, linux-phy, linux-clk,
Benoît Monin, Maxime Chevallier, Tawfik Bayouk,
Thomas Petazzoni, Théo Lebrun, Jerome Brunet
Our parent driver (clk-eyeq) now does the
device_set_of_node_from_dev(dev, dev->parent)
call through the newly introduced devm_auxiliary_device_create() helper.
Doing it again in the reset-eyeq probe would be redundant.
Drop both the WARN_ON() and the device_set_of_node_from_dev() call.
Also fix the following comment that talks about "our newfound OF node".
Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>
Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de>
Acked-by: Philipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: Théo Lebrun <theo.lebrun@bootlin.com>
---
drivers/reset/reset-eyeq.c | 24 ++----------------------
1 file changed, 2 insertions(+), 22 deletions(-)
diff --git a/drivers/reset/reset-eyeq.c b/drivers/reset/reset-eyeq.c
index 2d3998368a1c..8018fa895427 100644
--- a/drivers/reset/reset-eyeq.c
+++ b/drivers/reset/reset-eyeq.c
@@ -410,13 +410,6 @@ static int eqr_of_xlate_twocells(struct reset_controller_dev *rcdev,
return eqr_of_xlate_internal(rcdev, reset_spec->args[0], reset_spec->args[1]);
}
-static void eqr_of_node_put(void *_dev)
-{
- struct device *dev = _dev;
-
- of_node_put(dev->of_node);
-}
-
static int eqr_probe(struct auxiliary_device *adev,
const struct auxiliary_device_id *id)
{
@@ -427,21 +420,8 @@ static int eqr_probe(struct auxiliary_device *adev,
int ret;
/*
- * We are an auxiliary device of clk-eyeq. We do not have an OF node by
- * default; let's reuse our parent's OF node.
- */
- WARN_ON(dev->of_node);
- device_set_of_node_from_dev(dev, dev->parent);
- if (!dev->of_node)
- return -ENODEV;
-
- ret = devm_add_action_or_reset(dev, eqr_of_node_put, dev);
- if (ret)
- return ret;
-
- /*
- * Using our newfound OF node, we can get match data. We cannot use
- * device_get_match_data() because it does not match reused OF nodes.
+ * Get match data. We cannot use device_get_match_data() because it does
+ * not accept reused OF nodes; see device_set_of_node_from_dev().
*/
match = of_match_node(dev->driver->of_match_table, dev->of_node);
if (!match || !match->data)
--
2.51.2
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v4 6/7] MIPS: mobileye: eyeq5: add two Cadence GEM Ethernet controllers
2025-11-24 14:41 [PATCH v4 0/7] Add generic PHY driver used by MACB/GEM on EyeQ5 Théo Lebrun
` (4 preceding siblings ...)
2025-11-24 14:41 ` [PATCH v4 5/7] reset: eyeq: drop device_set_of_node_from_dev() done by parent Théo Lebrun
@ 2025-11-24 14:41 ` Théo Lebrun
2025-11-28 9:49 ` Gregory CLEMENT
2025-11-24 14:41 ` [PATCH v4 7/7] MIPS: mobileye: eyeq5-epm: add two Cadence GEM Ethernet PHYs Théo Lebrun
6 siblings, 1 reply; 15+ messages in thread
From: Théo Lebrun @ 2025-11-24 14:41 UTC (permalink / raw)
To: Vladimir Kondratiev, Grégory Clement, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Vinod Koul,
Kishon Vijay Abraham I, Michael Turquette, Stephen Boyd,
Philipp Zabel, Thomas Bogendoerfer
Cc: linux-mips, devicetree, linux-kernel, linux-phy, linux-clk,
Benoît Monin, Maxime Chevallier, Tawfik Bayouk,
Thomas Petazzoni, Théo Lebrun
Add both MACB/GEM instances found in the Mobileye EyeQ5 SoC.
Acked-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
Signed-off-by: Théo Lebrun <theo.lebrun@bootlin.com>
---
arch/mips/boot/dts/mobileye/eyeq5.dtsi | 45 ++++++++++++++++++++++++++++++++++
1 file changed, 45 insertions(+)
diff --git a/arch/mips/boot/dts/mobileye/eyeq5.dtsi b/arch/mips/boot/dts/mobileye/eyeq5.dtsi
index 36a73e8a63a1..cec5ad875228 100644
--- a/arch/mips/boot/dts/mobileye/eyeq5.dtsi
+++ b/arch/mips/boot/dts/mobileye/eyeq5.dtsi
@@ -77,6 +77,8 @@ aliases {
serial0 = &uart0;
serial1 = &uart1;
serial2 = &uart2;
+ ethernet0 = &macb0;
+ ethernet1 = &macb1;
};
cpu_intc: interrupt-controller {
@@ -231,6 +233,7 @@ olb: system-controller@e00000 {
#clock-cells = <1>;
clocks = <&xtal>;
clock-names = "ref";
+ #phy-cells = <1>;
};
gic: interrupt-controller@140000 {
@@ -305,6 +308,48 @@ gpio1: gpio@1500000 {
#interrupt-cells = <2>;
resets = <&olb 0 26>;
};
+
+ iocu-bus {
+ compatible = "simple-bus";
+ #address-cells = <2>;
+ #size-cells = <2>;
+ ranges;
+ dma-coherent;
+ dma-ranges = <0x10 0x00000000 0x0 0x0 0x10 0>;
+
+ macb0: ethernet@2a00000 {
+ compatible = "mobileye,eyeq5-gem";
+ reg = <0x0 0x02a00000 0x0 0x4000>;
+ interrupt-parent = <&gic>;
+ /* One interrupt per queue */
+ interrupts = <GIC_SHARED 23 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SHARED 23 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SHARED 23 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SHARED 23 IRQ_TYPE_LEVEL_HIGH>;
+ clock-names = "pclk", "hclk", "tsu_clk";
+ clocks = <&pclk>, <&pclk>, <&tsu_clk>;
+ nvmem-cells = <ð0_mac>;
+ nvmem-cell-names = "mac-address";
+ phys = <&olb 0>;
+ };
+
+ macb1: ethernet@2b00000 {
+ compatible = "mobileye,eyeq5-gem";
+ reg = <0x0 0x02b00000 0x0 0x4000>;
+ interrupt-parent = <&gic>;
+ /* One interrupt per queue */
+ interrupts = <GIC_SHARED 24 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SHARED 24 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SHARED 24 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SHARED 24 IRQ_TYPE_LEVEL_HIGH>;
+ clock-names = "pclk", "hclk", "tsu_clk";
+ clocks = <&pclk>, <&pclk>, <&tsu_clk>;
+ nvmem-cells = <ð1_mac>;
+ nvmem-cell-names = "mac-address";
+ phys = <&olb 1>;
+ };
+ };
+
};
};
--
2.51.2
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v4 7/7] MIPS: mobileye: eyeq5-epm: add two Cadence GEM Ethernet PHYs
2025-11-24 14:41 [PATCH v4 0/7] Add generic PHY driver used by MACB/GEM on EyeQ5 Théo Lebrun
` (5 preceding siblings ...)
2025-11-24 14:41 ` [PATCH v4 6/7] MIPS: mobileye: eyeq5: add two Cadence GEM Ethernet controllers Théo Lebrun
@ 2025-11-24 14:41 ` Théo Lebrun
6 siblings, 0 replies; 15+ messages in thread
From: Théo Lebrun @ 2025-11-24 14:41 UTC (permalink / raw)
To: Vladimir Kondratiev, Grégory Clement, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Vinod Koul,
Kishon Vijay Abraham I, Michael Turquette, Stephen Boyd,
Philipp Zabel, Thomas Bogendoerfer
Cc: linux-mips, devicetree, linux-kernel, linux-phy, linux-clk,
Benoît Monin, Maxime Chevallier, Tawfik Bayouk,
Thomas Petazzoni, Théo Lebrun, Andrew Lunn
The Mobileye EyeQ5 eval board (EPM) embeds two MDIO PHYs.
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Acked-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
Signed-off-by: Théo Lebrun <theo.lebrun@bootlin.com>
---
arch/mips/boot/dts/mobileye/eyeq5-epm5.dts | 26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)
diff --git a/arch/mips/boot/dts/mobileye/eyeq5-epm5.dts b/arch/mips/boot/dts/mobileye/eyeq5-epm5.dts
index 9fc1a1b0a81b..babf52731ea6 100644
--- a/arch/mips/boot/dts/mobileye/eyeq5-epm5.dts
+++ b/arch/mips/boot/dts/mobileye/eyeq5-epm5.dts
@@ -29,3 +29,29 @@ temperature-sensor@48 {
label = "U60";
};
};
+
+&macb0 {
+ phy-mode = "sgmii";
+ phy-handle = <&macb0_phy>;
+
+ mdio {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ macb0_phy: ethernet-phy@e {
+ reg = <0xe>;
+ };
+ };
+};
+
+&macb1 {
+ phy-mode = "rgmii-id";
+ phy-handle = <&macb1_phy>;
+
+ mdio {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ macb1_phy: ethernet-phy@e {
+ reg = <0xe>;
+ };
+ };
+};
--
2.51.2
^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH v4 6/7] MIPS: mobileye: eyeq5: add two Cadence GEM Ethernet controllers
2025-11-24 14:41 ` [PATCH v4 6/7] MIPS: mobileye: eyeq5: add two Cadence GEM Ethernet controllers Théo Lebrun
@ 2025-11-28 9:49 ` Gregory CLEMENT
2025-11-28 9:53 ` Thomas Bogendoerfer
0 siblings, 1 reply; 15+ messages in thread
From: Gregory CLEMENT @ 2025-11-28 9:49 UTC (permalink / raw)
To: Thomas Bogendoerfer
Cc: Théo Lebrun, Vladimir Kondratiev, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Vinod Koul,
Kishon Vijay Abraham I, Michael Turquette, Stephen Boyd,
Philipp Zabel, linux-mips, devicetree, linux-kernel, linux-phy,
linux-clk, Benoît Monin, Maxime Chevallier, Tawfik Bayouk,
Thomas Petazzoni, Théo Lebrun
Hello Thomas,
> Add both MACB/GEM instances found in the Mobileye EyeQ5 SoC.
>
> Acked-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
Can you confirm that you will include this patch and the following one
in your mips-next branch?
As you gave your Acked-by on it, I believe this will be the case, but I
want to be sure they aren't forgotten.
Thanks!
Gregory
> Signed-off-by: Théo Lebrun <theo.lebrun@bootlin.com>
> ---
> arch/mips/boot/dts/mobileye/eyeq5.dtsi | 45 ++++++++++++++++++++++++++++++++++
> 1 file changed, 45 insertions(+)
>
> diff --git a/arch/mips/boot/dts/mobileye/eyeq5.dtsi b/arch/mips/boot/dts/mobileye/eyeq5.dtsi
> index 36a73e8a63a1..cec5ad875228 100644
> --- a/arch/mips/boot/dts/mobileye/eyeq5.dtsi
> +++ b/arch/mips/boot/dts/mobileye/eyeq5.dtsi
> @@ -77,6 +77,8 @@ aliases {
> serial0 = &uart0;
> serial1 = &uart1;
> serial2 = &uart2;
> + ethernet0 = &macb0;
> + ethernet1 = &macb1;
> };
>
> cpu_intc: interrupt-controller {
> @@ -231,6 +233,7 @@ olb: system-controller@e00000 {
> #clock-cells = <1>;
> clocks = <&xtal>;
> clock-names = "ref";
> + #phy-cells = <1>;
> };
>
> gic: interrupt-controller@140000 {
> @@ -305,6 +308,48 @@ gpio1: gpio@1500000 {
> #interrupt-cells = <2>;
> resets = <&olb 0 26>;
> };
> +
> + iocu-bus {
> + compatible = "simple-bus";
> + #address-cells = <2>;
> + #size-cells = <2>;
> + ranges;
> + dma-coherent;
> + dma-ranges = <0x10 0x00000000 0x0 0x0 0x10 0>;
> +
> + macb0: ethernet@2a00000 {
> + compatible = "mobileye,eyeq5-gem";
> + reg = <0x0 0x02a00000 0x0 0x4000>;
> + interrupt-parent = <&gic>;
> + /* One interrupt per queue */
> + interrupts = <GIC_SHARED 23 IRQ_TYPE_LEVEL_HIGH>,
> + <GIC_SHARED 23 IRQ_TYPE_LEVEL_HIGH>,
> + <GIC_SHARED 23 IRQ_TYPE_LEVEL_HIGH>,
> + <GIC_SHARED 23 IRQ_TYPE_LEVEL_HIGH>;
> + clock-names = "pclk", "hclk", "tsu_clk";
> + clocks = <&pclk>, <&pclk>, <&tsu_clk>;
> + nvmem-cells = <ð0_mac>;
> + nvmem-cell-names = "mac-address";
> + phys = <&olb 0>;
> + };
> +
> + macb1: ethernet@2b00000 {
> + compatible = "mobileye,eyeq5-gem";
> + reg = <0x0 0x02b00000 0x0 0x4000>;
> + interrupt-parent = <&gic>;
> + /* One interrupt per queue */
> + interrupts = <GIC_SHARED 24 IRQ_TYPE_LEVEL_HIGH>,
> + <GIC_SHARED 24 IRQ_TYPE_LEVEL_HIGH>,
> + <GIC_SHARED 24 IRQ_TYPE_LEVEL_HIGH>,
> + <GIC_SHARED 24 IRQ_TYPE_LEVEL_HIGH>;
> + clock-names = "pclk", "hclk", "tsu_clk";
> + clocks = <&pclk>, <&pclk>, <&tsu_clk>;
> + nvmem-cells = <ð1_mac>;
> + nvmem-cell-names = "mac-address";
> + phys = <&olb 1>;
> + };
> + };
> +
> };
> };
>
>
> --
> 2.51.2
>
--
Grégory CLEMENT, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v4 6/7] MIPS: mobileye: eyeq5: add two Cadence GEM Ethernet controllers
2025-11-28 9:49 ` Gregory CLEMENT
@ 2025-11-28 9:53 ` Thomas Bogendoerfer
2025-11-28 10:47 ` Gregory CLEMENT
0 siblings, 1 reply; 15+ messages in thread
From: Thomas Bogendoerfer @ 2025-11-28 9:53 UTC (permalink / raw)
To: Gregory CLEMENT
Cc: Théo Lebrun, Vladimir Kondratiev, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Vinod Koul,
Kishon Vijay Abraham I, Michael Turquette, Stephen Boyd,
Philipp Zabel, linux-mips, devicetree, linux-kernel, linux-phy,
linux-clk, Benoît Monin, Maxime Chevallier, Tawfik Bayouk,
Thomas Petazzoni
On Fri, Nov 28, 2025 at 10:49:13AM +0100, Gregory CLEMENT wrote:
> Hello Thomas,
>
> > Add both MACB/GEM instances found in the Mobileye EyeQ5 SoC.
> >
> > Acked-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
>
> Can you confirm that you will include this patch and the following one
> in your mips-next branch?
I haven't planned doing this.
> As you gave your Acked-by on it, I believe this will be the case, but I
> want to be sure they aren't forgotten.
the Acked-by is meant for including the patches into the tree, where the
rest of this series is going in.
Thomas.
--
Crap can work. Given enough thrust pigs will fly, but it's not necessarily a
good idea. [ RFC1925, 2.3 ]
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v4 6/7] MIPS: mobileye: eyeq5: add two Cadence GEM Ethernet controllers
2025-11-28 9:53 ` Thomas Bogendoerfer
@ 2025-11-28 10:47 ` Gregory CLEMENT
2025-11-28 11:35 ` Thomas Bogendoerfer
0 siblings, 1 reply; 15+ messages in thread
From: Gregory CLEMENT @ 2025-11-28 10:47 UTC (permalink / raw)
To: Thomas Bogendoerfer
Cc: Théo Lebrun, Vladimir Kondratiev, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Vinod Koul,
Kishon Vijay Abraham I, Michael Turquette, Stephen Boyd,
Philipp Zabel, linux-mips, devicetree, linux-kernel, linux-phy,
linux-clk, Benoît Monin, Maxime Chevallier, Tawfik Bayouk,
Thomas Petazzoni
Thomas Bogendoerfer <tsbogend@alpha.franken.de> writes:
> On Fri, Nov 28, 2025 at 10:49:13AM +0100, Gregory CLEMENT wrote:
>> Hello Thomas,
>>
>> > Add both MACB/GEM instances found in the Mobileye EyeQ5 SoC.
>> >
>> > Acked-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
>>
>> Can you confirm that you will include this patch and the following one
>> in your mips-next branch?
>
> I haven't planned doing this.
>
>> As you gave your Acked-by on it, I believe this will be the case, but I
>> want to be sure they aren't forgotten.
>
> the Acked-by is meant for including the patches into the tree, where the
> rest of this series is going in.
However, according to the cover letter, there are no build dependencies
between these patches and the driver-related patch. Furthermore, since
it introduces a new compatible string, even if the driver part is not
yet merged, we won’t experience any regression. Therefore, I believe it
is safe to merge these two patches unless you have any concerns about
them.
Gregory
>
> Thomas.
>
> --
> Crap can work. Given enough thrust pigs will fly, but it's not necessarily a
> good idea. [ RFC1925, 2.3 ]
--
Grégory CLEMENT, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v4 6/7] MIPS: mobileye: eyeq5: add two Cadence GEM Ethernet controllers
2025-11-28 10:47 ` Gregory CLEMENT
@ 2025-11-28 11:35 ` Thomas Bogendoerfer
0 siblings, 0 replies; 15+ messages in thread
From: Thomas Bogendoerfer @ 2025-11-28 11:35 UTC (permalink / raw)
To: Gregory CLEMENT
Cc: Théo Lebrun, Vladimir Kondratiev, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Vinod Koul,
Kishon Vijay Abraham I, Michael Turquette, Stephen Boyd,
Philipp Zabel, linux-mips, devicetree, linux-kernel, linux-phy,
linux-clk, Benoît Monin, Maxime Chevallier, Tawfik Bayouk,
Thomas Petazzoni
On Fri, Nov 28, 2025 at 11:47:16AM +0100, Gregory CLEMENT wrote:
> Thomas Bogendoerfer <tsbogend@alpha.franken.de> writes:
>
> > On Fri, Nov 28, 2025 at 10:49:13AM +0100, Gregory CLEMENT wrote:
> >> Hello Thomas,
> >>
> >> > Add both MACB/GEM instances found in the Mobileye EyeQ5 SoC.
> >> >
> >> > Acked-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
> >>
> >> Can you confirm that you will include this patch and the following one
> >> in your mips-next branch?
> >
> > I haven't planned doing this.
> >
> >> As you gave your Acked-by on it, I believe this will be the case, but I
> >> want to be sure they aren't forgotten.
> >
> > the Acked-by is meant for including the patches into the tree, where the
> > rest of this series is going in.
>
> However, according to the cover letter, there are no build dependencies
> between these patches and the driver-related patch. Furthermore, since
> it introduces a new compatible string, even if the driver part is not
> yet merged, we won’t experience any regression. Therefore, I believe it
> is safe to merge these two patches unless you have any concerns about
> them.
no concerns, but aren't they useless without the code changes ?
Thomas.
--
Crap can work. Given enough thrust pigs will fly, but it's not necessarily a
good idea. [ RFC1925, 2.3 ]
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v4 2/7] phy: Add driver for EyeQ5 Ethernet PHY wrapper
2025-11-24 14:41 ` [PATCH v4 2/7] phy: Add driver for EyeQ5 Ethernet PHY wrapper Théo Lebrun
@ 2025-12-10 16:06 ` Luca Ceresoli
0 siblings, 0 replies; 15+ messages in thread
From: Luca Ceresoli @ 2025-12-10 16:06 UTC (permalink / raw)
To: Théo Lebrun, Vladimir Kondratiev, Grégory Clement,
Rob Herring, Krzysztof Kozlowski, Conor Dooley, Vinod Koul,
Kishon Vijay Abraham I, Michael Turquette, Stephen Boyd,
Philipp Zabel, Thomas Bogendoerfer
Cc: linux-mips, devicetree, linux-kernel, linux-phy, linux-clk,
Benoît Monin, Maxime Chevallier, Tawfik Bayouk,
Thomas Petazzoni
On Mon Nov 24, 2025 at 3:41 PM CET, Théo Lebrun wrote:
> EyeQ5 embeds a system-controller called OLB. It features many unrelated
> registers, and some of those are registers used to configure the
> integration of the RGMII/SGMII Cadence PHY used by MACB/GEM instances.
>
> Wrap in a neat generic PHY provider, exposing two PHYs with standard
> phy_init() / phy_set_mode() / phy_power_on() operations.
>
> Signed-off-by: Théo Lebrun <theo.lebrun@bootlin.com>
[...]
> --- /dev/null
> +++ b/drivers/phy/phy-eyeq5-eth.c
> @@ -0,0 +1,254 @@
> +// SPDX-License-Identifier: GPL-2.0-only
> +
> +#include <linux/array_size.h>
> +#include <linux/auxiliary_bus.h>
> +#include <linux/bitfield.h>
> +#include <linux/bits.h>
> +#include <linux/bug.h>
> +#include <linux/cleanup.h>
> +#include <linux/container_of.h>
> +#include <linux/device.h>
> +#include <linux/err.h>
> +#include <linux/errno.h>
> +#include <linux/init.h>
> +#include <linux/io.h>
> +#include <linux/iopoll.h>
> +#include <linux/lockdep.h>
> +#include <linux/mod_devicetable.h>
> +#include <linux/mutex.h>
> +#include <linux/of.h>
> +#include <linux/phy.h>
> +#include <linux/phy/phy.h>
> +#include <linux/slab.h>
> +#include <linux/types.h>
Are all these include files really needed? At a quick glance bitfield.h,
cleanup.h and lockdep.h look unused in this file.
> +#define EQ5_PHY_COUNT 2
[...]
> +static const struct phy_ops eq5_phy_ops = {
> + .init = eq5_phy_init,
> + .exit = eq5_phy_exit,
> + .set_mode = eq5_phy_set_mode,
> + .power_on = eq5_phy_power_on,
> + .power_off = eq5_phy_power_off,
> +};
> +
> +static struct phy *eq5_phy_xlate(struct device *dev,
> + const struct of_phandle_args *args)
> +{
> + struct eq5_phy_private *priv = dev_get_drvdata(dev);
> +
> + if (args->args_count != 1 || args->args[0] > 1)
Maybe, for better clarity:
if (args->args_count != 1 || args->args[0] >= EQ5_PHY_COUNT)
> + return ERR_PTR(-EINVAL);
> +
> + return priv->phys[args->args[0]].phy;
> +}
> +
> +static int eq5_phy_probe_phy(struct eq5_phy_private *priv, unsigned int index,
> + void __iomem *base, unsigned int gp,
> + unsigned int sgmii)
> +{
> + struct eq5_phy_inst *inst = &priv->phys[index];
> + struct device *dev = priv->dev;
> + struct phy *phy;
> +
> + phy = devm_phy_create(dev, dev->of_node, &eq5_phy_ops);
> + if (IS_ERR(phy)) {
> + dev_err(dev, "failed to create PHY %u\n", index);
> + return PTR_ERR(phy);
> + }
Why not dev_err_probe()? It would make code more concise too:
phy = devm_phy_create(dev, dev->of_node, &eq5_phy_ops);
if (IS_ERR(phy))
return dev_err_probe(dev, PTR_ERR(phy), "failed to create PHY %u\n", index);
> +
> + inst->priv = priv;
> + inst->phy = phy;
> + inst->gp = base + gp;
> + inst->sgmii = base + sgmii;
> + inst->phy_interface = PHY_INTERFACE_MODE_NA;
> + phy_set_drvdata(phy, inst);
> +
> + return 0;
> +}
> +
> +static int eq5_phy_probe(struct auxiliary_device *adev,
> + const struct auxiliary_device_id *id)
> +{
> + struct device *dev = &adev->dev;
> + struct phy_provider *provider;
> + struct eq5_phy_private *priv;
> + void __iomem *base;
> + int ret;
> +
> + priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
> + if (!priv)
> + return -ENOMEM;
> +
> + priv->dev = dev;
> + dev_set_drvdata(dev, priv);
> +
> + base = (void __iomem *)dev_get_platdata(dev);
> +
> + ret = eq5_phy_probe_phy(priv, 0, base, EQ5_PHY0_GP, EQ5_PHY0_SGMII);
> + if (ret)
> + return ret;
> +
> + ret = eq5_phy_probe_phy(priv, 1, base, EQ5_PHY1_GP, EQ5_PHY1_SGMII);
> + if (ret)
> + return ret;
> +
> + provider = devm_of_phy_provider_register(dev, eq5_phy_xlate);
> + if (IS_ERR(provider)) {
> + dev_err(dev, "registering provider failed\n");
> + return PTR_ERR(provider);
> + }
As above, why not dev_err_probe()?
Other than the above minor issues, LGTM. This driver looks cleanly
implemented.
Luca
--
Luca Ceresoli, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v4 3/7] clk: eyeq: use the auxiliary device creation helper
2025-11-24 14:41 ` [PATCH v4 3/7] clk: eyeq: use the auxiliary device creation helper Théo Lebrun
@ 2025-12-10 16:06 ` Luca Ceresoli
0 siblings, 0 replies; 15+ messages in thread
From: Luca Ceresoli @ 2025-12-10 16:06 UTC (permalink / raw)
To: Théo Lebrun, Vladimir Kondratiev, Grégory Clement,
Rob Herring, Krzysztof Kozlowski, Conor Dooley, Vinod Koul,
Kishon Vijay Abraham I, Michael Turquette, Stephen Boyd,
Philipp Zabel, Thomas Bogendoerfer
Cc: linux-mips, devicetree, linux-kernel, linux-phy, linux-clk,
Benoît Monin, Maxime Chevallier, Tawfik Bayouk,
Thomas Petazzoni, Jerome Brunet
On Mon Nov 24, 2025 at 3:41 PM CET, Théo Lebrun wrote:
> From: Jerome Brunet <jbrunet@baylibre.com>
>
> The auxiliary device creation of this driver is simple enough to
> use the available auxiliary device creation helper.
>
> Use it and remove some boilerplate code.
>
> Tested-by: Théo Lebrun <theo.lebrun@bootlin.com> # On Mobileye EyeQ5
> Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>
> Signed-off-by: Théo Lebrun <theo.lebrun@bootlin.com>
Reviewed-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
--
Luca Ceresoli, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v4 4/7] clk: eyeq: add EyeQ5 children auxiliary device for generic PHYs
2025-11-24 14:41 ` [PATCH v4 4/7] clk: eyeq: add EyeQ5 children auxiliary device for generic PHYs Théo Lebrun
@ 2025-12-10 16:06 ` Luca Ceresoli
0 siblings, 0 replies; 15+ messages in thread
From: Luca Ceresoli @ 2025-12-10 16:06 UTC (permalink / raw)
To: Théo Lebrun, Vladimir Kondratiev, Grégory Clement,
Rob Herring, Krzysztof Kozlowski, Conor Dooley, Vinod Koul,
Kishon Vijay Abraham I, Michael Turquette, Stephen Boyd,
Philipp Zabel, Thomas Bogendoerfer
Cc: linux-mips, devicetree, linux-kernel, linux-phy, linux-clk,
Benoît Monin, Maxime Chevallier, Tawfik Bayouk,
Thomas Petazzoni
On Mon Nov 24, 2025 at 3:41 PM CET, Théo Lebrun wrote:
> Grow our clk-eyeq family; it knows how to spawn reset provider and pin
> controller children. Expand with a generic PHY driver on EyeQ5.
>
> Signed-off-by: Théo Lebrun <theo.lebrun@bootlin.com>
Reviewed-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
--
Luca Ceresoli, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2025-12-10 16:06 UTC | newest]
Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-11-24 14:41 [PATCH v4 0/7] Add generic PHY driver used by MACB/GEM on EyeQ5 Théo Lebrun
2025-11-24 14:41 ` [PATCH v4 1/7] dt-bindings: soc: mobileye: OLB is an Ethernet PHY provider " Théo Lebrun
2025-11-24 14:41 ` [PATCH v4 2/7] phy: Add driver for EyeQ5 Ethernet PHY wrapper Théo Lebrun
2025-12-10 16:06 ` Luca Ceresoli
2025-11-24 14:41 ` [PATCH v4 3/7] clk: eyeq: use the auxiliary device creation helper Théo Lebrun
2025-12-10 16:06 ` Luca Ceresoli
2025-11-24 14:41 ` [PATCH v4 4/7] clk: eyeq: add EyeQ5 children auxiliary device for generic PHYs Théo Lebrun
2025-12-10 16:06 ` Luca Ceresoli
2025-11-24 14:41 ` [PATCH v4 5/7] reset: eyeq: drop device_set_of_node_from_dev() done by parent Théo Lebrun
2025-11-24 14:41 ` [PATCH v4 6/7] MIPS: mobileye: eyeq5: add two Cadence GEM Ethernet controllers Théo Lebrun
2025-11-28 9:49 ` Gregory CLEMENT
2025-11-28 9:53 ` Thomas Bogendoerfer
2025-11-28 10:47 ` Gregory CLEMENT
2025-11-28 11:35 ` Thomas Bogendoerfer
2025-11-24 14:41 ` [PATCH v4 7/7] MIPS: mobileye: eyeq5-epm: add two Cadence GEM Ethernet PHYs Théo Lebrun
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).