* [PATCH net-next v5 0/2] net: dsa: microchip: enable setting rmii reference
@ 2023-11-24 16:01 Ante Knezic
2023-11-24 16:01 ` [PATCH net-next v5 1/2] dt-bindings: net: microchip,ksz: document microchip,rmii-clk-internal Ante Knezic
2023-11-24 16:01 ` [PATCH net-next v5 2/2] net: dsa: microchip: add property to select internal RMII reference clock Ante Knezic
0 siblings, 2 replies; 5+ messages in thread
From: Ante Knezic @ 2023-11-24 16:01 UTC (permalink / raw)
To: netdev
Cc: woojung.huh, andrew, f.fainelli, olteanv, davem, edumazet, kuba,
pabeni, robh+dt, krzysztof.kozlowski+dt, conor+dt, marex,
devicetree, linux-kernel, Ante Knezic
KSZ88X3 devices can select between internal and external RMII reference clock.
This patch series introduces new device tree property for setting reference
clock to internal.
---
V5:
- move rmii-clk-internal to be a port device tree property.
V4:
- remove rmii_clk_internal from ksz_device, as its not needed any more
- move rmii clk config as well as ksz8795_cpu_interface_select to
ksz8_config_cpu_port
V3:
- move ksz_cfg from global switch config to port config as suggested by Vladimir
Oltean
- reverse patch order as suggested by Vladimir Oltean
- adapt dt schema as suggested by Conor Dooley
V2:
- don't rely on default register settings - enforce set/clear property as
suggested by Andrew Lunn
- enforce dt schema as suggested by Conor Dooley
Ante Knezic (2):
dt-bindings: net: microchip,ksz: document microchip,rmii-clk-internal
net: dsa: microchip: add property to select internal RMII reference
clock
.../devicetree/bindings/net/dsa/microchip,ksz.yaml | 38 ++++++++++++++-
drivers/net/dsa/microchip/ksz8795.c | 56 +++++++++++++++++++---
drivers/net/dsa/microchip/ksz8795_reg.h | 3 ++
3 files changed, 90 insertions(+), 7 deletions(-)
--
2.11.0
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH net-next v5 1/2] dt-bindings: net: microchip,ksz: document microchip,rmii-clk-internal
2023-11-24 16:01 [PATCH net-next v5 0/2] net: dsa: microchip: enable setting rmii reference Ante Knezic
@ 2023-11-24 16:01 ` Ante Knezic
2023-11-25 0:18 ` kernel test robot
2023-11-24 16:01 ` [PATCH net-next v5 2/2] net: dsa: microchip: add property to select internal RMII reference clock Ante Knezic
1 sibling, 1 reply; 5+ messages in thread
From: Ante Knezic @ 2023-11-24 16:01 UTC (permalink / raw)
To: netdev
Cc: woojung.huh, andrew, f.fainelli, olteanv, davem, edumazet, kuba,
pabeni, robh+dt, krzysztof.kozlowski+dt, conor+dt, marex,
devicetree, linux-kernel, Ante Knezic
Add documentation for selecting reference rmii clock on KSZ88X3 devices
Signed-off-by: Ante Knezic <ante.knezic@helmholz.de>
---
.../devicetree/bindings/net/dsa/microchip,ksz.yaml | 38 +++++++++++++++++++++-
1 file changed, 37 insertions(+), 1 deletion(-)
diff --git a/Documentation/devicetree/bindings/net/dsa/microchip,ksz.yaml b/Documentation/devicetree/bindings/net/dsa/microchip,ksz.yaml
index b3029c64d0d5..3cebb9c9b1c8 100644
--- a/Documentation/devicetree/bindings/net/dsa/microchip,ksz.yaml
+++ b/Documentation/devicetree/bindings/net/dsa/microchip,ksz.yaml
@@ -11,7 +11,6 @@ maintainers:
- Woojung Huh <Woojung.Huh@microchip.com>
allOf:
- - $ref: dsa.yaml#/$defs/ethernet-ports
- $ref: /schemas/spi/spi-peripheral-props.yaml#
properties:
@@ -78,6 +77,43 @@ required:
- compatible
- reg
+if:
+ not:
+ properties:
+ compatible:
+ enum:
+ - microchip,ksz8863
+ - microchip,ksz8873
+then:
+ $ref: dsa.yaml#/$defs/ethernet-ports
+else:
+ patternProperties:
+ "^(ethernet-)?ports$":
+ patternProperties:
+ "^(ethernet-)?port@[0-2]$":
+ $ref: dsa-port.yaml#
+ properties:
+ microchip,rmii-clk-internal:
+ $ref: /schemas/types.yaml#/definitions/flag
+ description:
+ When ksz88x3 is acting as clock provier (via REFCLKO) it
+ can select between internal and external RMII reference
+ clock. Internal reference clock means that the clock for
+ the RMII of ksz88x3 is provided by the ksz88x3 internally
+ and the REFCLKI pin is unconnected. For the external
+ reference clock, the clock needs to be fed back to ksz88x3
+ via REFCLKI.
+ If microchip,rmii-clk-internal is set, ksz88x3 will provide
+ rmii reference clock internally, otherwise reference clock
+ should be provided externally.
+ if:
+ not:
+ required: [ ethernet ]
+ then:
+ properties:
+ microchip,rmii-clk-internal: false
+ unevaluatedProperties: false
+
unevaluatedProperties: false
examples:
--
2.11.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH net-next v5 2/2] net: dsa: microchip: add property to select internal RMII reference clock
2023-11-24 16:01 [PATCH net-next v5 0/2] net: dsa: microchip: enable setting rmii reference Ante Knezic
2023-11-24 16:01 ` [PATCH net-next v5 1/2] dt-bindings: net: microchip,ksz: document microchip,rmii-clk-internal Ante Knezic
@ 2023-11-24 16:01 ` Ante Knezic
2023-11-24 16:11 ` Vladimir Oltean
1 sibling, 1 reply; 5+ messages in thread
From: Ante Knezic @ 2023-11-24 16:01 UTC (permalink / raw)
To: netdev
Cc: woojung.huh, andrew, f.fainelli, olteanv, davem, edumazet, kuba,
pabeni, robh+dt, krzysztof.kozlowski+dt, conor+dt, marex,
devicetree, linux-kernel, Ante Knezic
Microchip KSZ8863/KSZ8873 have the ability to select between internal
and external RMII reference clock. By default, reference clock
needs to be provided via REFCLKI_3 pin. If required, device can be
setup to provide RMII clock internally so that REFCLKI_3 pin can be
left unconnected.
Add a new "microchip,rmii-clk-internal" property which will set
RMII clock reference to internal. If property is not set, reference
clock needs to be provided externally.
While at it, move the ksz8795_cpu_interface_select() to
ksz8_config_cpu_port() to get a cleaner call path for cpu port.
Signed-off-by: Ante Knezic <ante.knezic@helmholz.de>
---
drivers/net/dsa/microchip/ksz8795.c | 56 +++++++++++++++++++++++++++++----
drivers/net/dsa/microchip/ksz8795_reg.h | 3 ++
2 files changed, 53 insertions(+), 6 deletions(-)
diff --git a/drivers/net/dsa/microchip/ksz8795.c b/drivers/net/dsa/microchip/ksz8795.c
index 4bf4d67557dc..a749a4a970ec 100644
--- a/drivers/net/dsa/microchip/ksz8795.c
+++ b/drivers/net/dsa/microchip/ksz8795.c
@@ -1358,6 +1358,9 @@ static void ksz8795_cpu_interface_select(struct ksz_device *dev, int port)
{
struct ksz_port *p = &dev->ports[port];
+ if (!ksz_is_ksz87xx(dev))
+ return;
+
if (!p->interface && dev->compat_interface) {
dev_warn(dev->dev,
"Using legacy switch \"phy-mode\" property, because it is missing on port %d node. "
@@ -1391,18 +1394,55 @@ void ksz8_port_setup(struct ksz_device *dev, int port, bool cpu_port)
/* enable 802.1p priority */
ksz_port_cfg(dev, port, P_PRIO_CTRL, PORT_802_1P_ENABLE, true);
- if (cpu_port) {
- if (!ksz_is_ksz88x3(dev))
- ksz8795_cpu_interface_select(dev, port);
-
+ if (cpu_port)
member = dsa_user_ports(ds);
- } else {
+ else
member = BIT(dsa_upstream_port(ds, port));
- }
ksz8_cfg_port_member(dev, port, member);
}
+static int ksz88x3_config_rmii_clk(struct ksz_device *dev, int cpu_port)
+{
+ struct device_node *ports, *port, *cpu_node;
+ bool rmii_clk_internal;
+
+ if (!ksz_is_ksz88x3(dev))
+ return 0;
+
+ cpu_node = NULL;
+
+ ports = of_get_child_by_name(dev->dev->of_node, "ports");
+ if (!ports)
+ ports = of_get_child_by_name(dev->dev->of_node,
+ "ethernet-ports");
+ if (!ports)
+ return -ENODEV;
+
+ for_each_available_child_of_node(ports, port) {
+ u32 index;
+
+ if (of_property_read_u32(port, "reg", &index) < 0)
+ return -ENODEV;
+
+ if (index == cpu_port) {
+ cpu_node = port;
+ break;
+ }
+ }
+
+ if (!cpu_node)
+ return -ENODEV;
+
+ rmii_clk_internal = of_property_read_bool(cpu_node,
+ "microchip,rmii-clk-internal");
+
+ ksz_cfg(dev, KSZ88X3_REG_FVID_AND_HOST_MODE,
+ KSZ88X3_PORT3_RMII_CLK_INTERNAL, rmii_clk_internal);
+
+ return 0;
+}
+
void ksz8_config_cpu_port(struct dsa_switch *ds)
{
struct ksz_device *dev = ds->priv;
@@ -1419,6 +1459,10 @@ void ksz8_config_cpu_port(struct dsa_switch *ds)
ksz8_port_setup(dev, dev->cpu_port, true);
+ ksz8795_cpu_interface_select(dev, dev->cpu_port);
+ if (ksz88x3_config_rmii_clk(dev, dev->cpu_port))
+ dev_err(dev->dev, "Failed to set rmii reference clock source mode");
+
for (i = 0; i < dev->phy_port_cnt; i++) {
ksz_port_stp_state_set(ds, i, BR_STATE_DISABLED);
}
diff --git a/drivers/net/dsa/microchip/ksz8795_reg.h b/drivers/net/dsa/microchip/ksz8795_reg.h
index 3c9dae53e4d8..beca974e0171 100644
--- a/drivers/net/dsa/microchip/ksz8795_reg.h
+++ b/drivers/net/dsa/microchip/ksz8795_reg.h
@@ -22,6 +22,9 @@
#define KSZ8863_GLOBAL_SOFTWARE_RESET BIT(4)
#define KSZ8863_PCS_RESET BIT(0)
+#define KSZ88X3_REG_FVID_AND_HOST_MODE 0xC6
+#define KSZ88X3_PORT3_RMII_CLK_INTERNAL BIT(3)
+
#define REG_SW_CTRL_0 0x02
#define SW_NEW_BACKOFF BIT(7)
--
2.11.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH net-next v5 2/2] net: dsa: microchip: add property to select internal RMII reference clock
2023-11-24 16:01 ` [PATCH net-next v5 2/2] net: dsa: microchip: add property to select internal RMII reference clock Ante Knezic
@ 2023-11-24 16:11 ` Vladimir Oltean
0 siblings, 0 replies; 5+ messages in thread
From: Vladimir Oltean @ 2023-11-24 16:11 UTC (permalink / raw)
To: Ante Knezic
Cc: netdev, woojung.huh, andrew, f.fainelli, davem, edumazet, kuba,
pabeni, robh+dt, krzysztof.kozlowski+dt, conor+dt, marex,
devicetree, linux-kernel
On Fri, Nov 24, 2023 at 05:01:48PM +0100, Ante Knezic wrote:
> +static int ksz88x3_config_rmii_clk(struct ksz_device *dev, int cpu_port)
> +{
> + struct device_node *ports, *port, *cpu_node;
> + bool rmii_clk_internal;
> +
> + if (!ksz_is_ksz88x3(dev))
> + return 0;
> +
> + cpu_node = NULL;
> +
> + ports = of_get_child_by_name(dev->dev->of_node, "ports");
> + if (!ports)
> + ports = of_get_child_by_name(dev->dev->of_node,
> + "ethernet-ports");
> + if (!ports)
> + return -ENODEV;
> +
> + for_each_available_child_of_node(ports, port) {
> + u32 index;
> +
> + if (of_property_read_u32(port, "reg", &index) < 0)
> + return -ENODEV;
> +
> + if (index == cpu_port) {
> + cpu_node = port;
> + break;
> + }
> + }
> +
> + if (!cpu_node)
> + return -ENODEV;
Too much code. Assuming you have struct dsa_port *cpu_dp, you can access
cpu_dp->dn instead of re-parsing the device tree.
> +
> + rmii_clk_internal = of_property_read_bool(cpu_node,
> + "microchip,rmii-clk-internal");
> +
> + ksz_cfg(dev, KSZ88X3_REG_FVID_AND_HOST_MODE,
> + KSZ88X3_PORT3_RMII_CLK_INTERNAL, rmii_clk_internal);
> +
> + return 0;
> +}
Please wait for 24 hours before reposting, maybe you get more feedback.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH net-next v5 1/2] dt-bindings: net: microchip,ksz: document microchip,rmii-clk-internal
2023-11-24 16:01 ` [PATCH net-next v5 1/2] dt-bindings: net: microchip,ksz: document microchip,rmii-clk-internal Ante Knezic
@ 2023-11-25 0:18 ` kernel test robot
0 siblings, 0 replies; 5+ messages in thread
From: kernel test robot @ 2023-11-25 0:18 UTC (permalink / raw)
To: Ante Knezic, netdev
Cc: oe-kbuild-all, woojung.huh, andrew, f.fainelli, olteanv, davem,
edumazet, kuba, pabeni, robh+dt, krzysztof.kozlowski+dt, conor+dt,
marex, devicetree, linux-kernel, Ante Knezic
Hi Ante,
kernel test robot noticed the following build warnings:
[auto build test WARNING on net-next/main]
url: https://github.com/intel-lab-lkp/linux/commits/Ante-Knezic/dt-bindings-net-microchip-ksz-document-microchip-rmii-clk-internal/20231125-000625
base: net-next/main
patch link: https://lore.kernel.org/r/0ea1db6b2f2e93c3531645f98888775a4d3165d4.1700841353.git.ante.knezic%40helmholz.de
patch subject: [PATCH net-next v5 1/2] dt-bindings: net: microchip,ksz: document microchip,rmii-clk-internal
compiler: loongarch64-linux-gcc (GCC) 13.2.0
reproduce: (https://download.01.org/0day-ci/archive/20231125/202311250528.gG5FVdW6-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202311250528.gG5FVdW6-lkp@intel.com/
dtcheck warnings: (new ones prefixed by >>)
>> Documentation/devicetree/bindings/net/dsa/microchip,ksz.yaml:99:1: [error] syntax error: found character '\t' that cannot start any token (syntax)
--
>> Documentation/devicetree/bindings/net/dsa/microchip,ksz.yaml:99:1: found character that cannot start any token
--
>> Documentation/devicetree/bindings/net/dsa/microchip,ksz.yaml: ignoring, error parsing file
vim +99 Documentation/devicetree/bindings/net/dsa/microchip,ksz.yaml
8
9 maintainers:
10 - Marek Vasut <marex@denx.de>
11 - Woojung Huh <Woojung.Huh@microchip.com>
12
13 allOf:
14 - $ref: /schemas/spi/spi-peripheral-props.yaml#
15
16 properties:
17 # See Documentation/devicetree/bindings/net/dsa/dsa.yaml for a list of additional
18 # required and optional properties.
19 compatible:
20 enum:
21 - microchip,ksz8765
22 - microchip,ksz8794
23 - microchip,ksz8795
24 - microchip,ksz8863
25 - microchip,ksz8873
26 - microchip,ksz9477
27 - microchip,ksz9897
28 - microchip,ksz9896
29 - microchip,ksz9567
30 - microchip,ksz8565
31 - microchip,ksz9893
32 - microchip,ksz9563
33 - microchip,ksz8563
34
35 reset-gpios:
36 description:
37 Should be a gpio specifier for a reset line.
38 maxItems: 1
39
40 wakeup-source: true
41
42 microchip,synclko-125:
43 $ref: /schemas/types.yaml#/definitions/flag
44 description:
45 Set if the output SYNCLKO frequency should be set to 125MHz instead of 25MHz.
46
47 microchip,synclko-disable:
48 $ref: /schemas/types.yaml#/definitions/flag
49 description:
50 Set if the output SYNCLKO clock should be disabled. Do not mix with
51 microchip,synclko-125.
52
53 microchip,io-drive-strength-microamp:
54 description:
55 IO Pad Drive Strength
56 enum: [8000, 16000]
57 default: 16000
58
59 microchip,hi-drive-strength-microamp:
60 description:
61 High Speed Drive Strength. Controls drive strength of GMII / RGMII /
62 MII / RMII (except TX_CLK/REFCLKI, COL and CRS) and CLKO_25_125 lines.
63 enum: [2000, 4000, 8000, 12000, 16000, 20000, 24000, 28000]
64 default: 24000
65
66 microchip,lo-drive-strength-microamp:
67 description:
68 Low Speed Drive Strength. Controls drive strength of TX_CLK / REFCLKI,
69 COL, CRS, LEDs, PME_N, NTRP_N, SDO and SDI/SDA/MDIO lines.
70 enum: [2000, 4000, 8000, 12000, 16000, 20000, 24000, 28000]
71 default: 8000
72
73 interrupts:
74 maxItems: 1
75
76 required:
77 - compatible
78 - reg
79
80 if:
81 not:
82 properties:
83 compatible:
84 enum:
85 - microchip,ksz8863
86 - microchip,ksz8873
87 then:
88 $ref: dsa.yaml#/$defs/ethernet-ports
89 else:
90 patternProperties:
91 "^(ethernet-)?ports$":
92 patternProperties:
93 "^(ethernet-)?port@[0-2]$":
94 $ref: dsa-port.yaml#
95 properties:
96 microchip,rmii-clk-internal:
97 $ref: /schemas/types.yaml#/definitions/flag
98 description:
> 99 When ksz88x3 is acting as clock provier (via REFCLKO) it
100 can select between internal and external RMII reference
101 clock. Internal reference clock means that the clock for
102 the RMII of ksz88x3 is provided by the ksz88x3 internally
103 and the REFCLKI pin is unconnected. For the external
104 reference clock, the clock needs to be fed back to ksz88x3
105 via REFCLKI.
106 If microchip,rmii-clk-internal is set, ksz88x3 will provide
107 rmii reference clock internally, otherwise reference clock
108 should be provided externally.
109 if:
110 not:
111 required: [ ethernet ]
112 then:
113 properties:
114 microchip,rmii-clk-internal: false
115 unevaluatedProperties: false
116
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2023-11-25 0:19 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-11-24 16:01 [PATCH net-next v5 0/2] net: dsa: microchip: enable setting rmii reference Ante Knezic
2023-11-24 16:01 ` [PATCH net-next v5 1/2] dt-bindings: net: microchip,ksz: document microchip,rmii-clk-internal Ante Knezic
2023-11-25 0:18 ` kernel test robot
2023-11-24 16:01 ` [PATCH net-next v5 2/2] net: dsa: microchip: add property to select internal RMII reference clock Ante Knezic
2023-11-24 16:11 ` Vladimir Oltean
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).