1
0
Fork 0
forked from mirror/openwrt
Commit graph

15 commits

Author SHA1 Message Date
Markus Stockhausen
b49f9d9804 realtek: backport ECC driver
Upstream will get support for the Realtek ECC engine with 6.18.
To make use of this in Openwrt

- backport upstream patches
- change config so that ECC will be built for nand subtargets
- define ECC engine in RTL93xx DTS.

Signed-off-by: Markus Stockhausen <markus.stockhausen@gmx.de>
Link: https://github.com/openwrt/openwrt/pull/19746
Signed-off-by: Robert Marko <robimarko@gmail.com>
2025-09-30 11:15:26 +02:00
Markus Stockhausen
fe27cce1ec realtek: add SerDes PCS driver
Until now the the SerDes configuration is realized with helper functions
scattered around the DSA and PHY driver. Give them a new home as a PCS
driver.

The target design is as follows:

- dsa driver manages switch
- pcs driver manages SerDes on high level (this commit)
- mdio driver manages SerDes on low level

This driver adds the high level SerDes access via PCS. It makes use of
the low level mdio SerDes driver to access the registers.

Remark: This initial version provides exactly all phylink_pcs_ops that
are currently part of the DSA driver. So this can be swapped in one of
the next commits as a drop in replacement. To make use of it something
like this is needed:

...
ports = of_get_child_by_name(node, "ethernet-ports");
if (!ports)
	return -EINVAL;

for_each_available_child_of_node(ports, port) {
	pcs_node = of_parse_phandle(port, "pcs-handle", 0);
	of_property_read_u32(port, "reg", &port_nr)) {

	priv->pcs[port_nr] = rtpcs_create(dev, pcs_node, port_nr);
}
...

Signed-off-by: Markus Stockhausen <markus.stockhausen@gmx.de>
Link: https://github.com/openwrt/openwrt/pull/20075
Signed-off-by: Robert Marko <robimarko@gmail.com>
2025-09-20 12:51:23 +02:00
Markus Stockhausen
fc9cf208c5 realtek: fix dts warnings.
Currently following warnings are given

dts/rtl930x.dtsi:166.4-23: Warning (reg_format):
/switchcore@1b000000/i2c@36c:reg: property has invalid length
(8 bytes) (#address-cells == 2, #size-cells == 1)

Obviously default address-cells size is fixed to 64 bit. Align
with upstream and override address size to 32 bit.

Suggested-by: Jonas Jelonek <jelonek.jonas@gmail.com>
Signed-off-by: Markus Stockhausen <markus.stockhausen@gmx.de>
Link: https://github.com/openwrt/openwrt/pull/20091
Signed-off-by: Robert Marko <robimarko@gmail.com>
2025-09-19 13:51:50 +02:00
Markus Stockhausen
7a7ee72c4d realtek: mdio: add SerDes driver
Until now the SerDes access is realized with some helper functions
in the mdio bus. These were moved around a lot and had no real home.
End that temporary solution to move them where they belong.

The target design for the different Realtek drivers is as follows:

- dsa driver manages switch
- pcs driver manages SerDes on high level (to be developed)
- mdio driver manages SerDes on low level (this commit)

This driver adds the low level SerDes access via mdio. For debugging
purposes the user can interact with the SerDes in different ways.

First, there is a debug interface in
/sys/kernel/debug/realtek_otto_serdes/serdes.X/registers.
With that a dump of all registers can be shown.

> cat /sys/kernel/debug/realtek_otto_serdes/serdes.4/registers
Back SDS  4:   00   01   02   03   04   05   06   07   08
SDS        : 0C03 0F00 7060 7106 074D 0EBF 0F0F 0359 5248
SDS_EXT    : 0000 0000 85FA 8C6D 5CCC 0000 20D8 0003 79AA
...

Second, one can read/write registers via the mmd functions of the
mdio command line tool. Important to know: The registers are accessed
on the vendor specific MDIO_MMD_VEND1 device address (=30). Additionally
the SerDes page and register are concatenated into the the mmd register.
Top 8 bits are SerDes page and bottom 8 bits are SerDEs register.
E.g.

- mmd 0x0206 : SerDes page 0x02, SerDes register 0x06
- mmd 0x041f : SerDes page 0x04, SerDes register 0x1f

Read register 0x02 on page 0x03 of SerDes 0
> mdio realtek-serdes-mdio mmd 0:30 raw 0x0302

Write register 0x12 on page 0x02 of SerDes 1
> mdio realtek-serdes-mdio mmd 1:30 raw 0x0212 0x2222

For now this driver is only defined in the devicetree and activated
in the kernel build. There is no current consumer but at least
the debugging interface is available. Cleanup of the currently used
SerDes functions will come later.

Signed-off-by: Markus Stockhausen <markus.stockhausen@gmx.de>
Link: https://github.com/openwrt/openwrt/pull/20062
Signed-off-by: Robert Marko <robimarko@gmail.com>
2025-09-17 19:23:15 +02:00
Markus Stockhausen
13b6c62b75 realtek: dts: add mdio controller device nodes
Until now the mdio bus is a subnode of the ethernet device. This
coupling is different from upstream and wrong. Ethernet and mdio
are different devices. Additionally differentiate between mdio
controller and mdio bus. To make it clear:

- There is one mdio controller
- With up to 4 busses (on RTL93xx)

Prepare new mdio controller and bus nodes with SoC specific compatibles.
These will be used later when refactoring the mdio driver probing.

Remark! For now only define the first bus for the RTL93xx targets.
So the driver still relies on "rtl9300,smi-address = <x y>;". It will
need much more refactoring to get totally aligned with upstream.

Signed-off-by: Markus Stockhausen <markus.stockhausen@gmx.de>
Link: https://github.com/openwrt/openwrt/pull/19986
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2025-09-12 20:58:17 +02:00
Sven Eckelmann
9c8d634646 realtek: rtl930x: Define GPIO_SEL_CTRL pinmux node
The pinmux-related registers on the RTL930X SoC family are spread across
various non-consecutive registers. It might be tempting to modify them
directly in a specific driver (SPI, LED, etc.), but this would cause issues
with parallel, non-locked read-modify-write operations, which are required
to update individual portions of these registers.

Instead, it is better to use the devicetree pinctrl properties to define
the correct configurations for the various operation modes.

One important setting here is the LED Sync bit. This allows the LED
controller to generate an additional positive edge on the `STCP`
("STore Clock Pin", also known as `RCLK`) of the LED shift register after
the actual content has already been shifted in using the normal shift
clock. The LED shift register is then expected to copy the content from the
shift register section into the storage registers, which act as the actual
LED output control. This functionality is available in, and commonly used
with, the SNx4HC595 family of shift registers.

To activate it, simply register it in the default state of the
"realtek,rtl83xx-switch" node:

    &switch0 {
    	pinctrl-names = "default";
    	pinctrl-0 = <&pinmux_enable_led_sync>;
    	....
    };

It would be nicer when this can be directly added to the led subnode. But
for this to work, `realtek,rtl9300-leds` must first be an actual driver
(known to the driver core).

[1] https://www.ti.com/lit/ds/symlink/sn74hc595.pdf

Suggested-by: Bevan Weiss <bevan.weiss@gmail.com>
Signed-off-by: Sven Eckelmann <sven@narfation.org>
Link: https://github.com/openwrt/openwrt/pull/19815
Signed-off-by: Robert Marko <robimarko@gmail.com>
2025-09-03 09:54:51 +02:00
Markus Stockhausen
9037f815ee realtek: create central DTS macro include
The Realtek DTS's use several macros for convenient phy/port definition.
These are repeated for the RTL83xx targets and most are missing for the
RTL93xx targets. In the near future we want to add high port count
switches with 1GBit Ethernet for them too. As a preparation provide a
central include so the definition is only needed once and is available
for all targets.

Signed-off-by: Markus Stockhausen <markus.stockhausen@gmx.de>
Link: https://github.com/openwrt/openwrt/pull/19772
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2025-08-17 17:19:09 +02:00
Jonas Jelonek
dc54af8639 realtek: adapt devices to backported i2c driver
Adapt the device tree definitions of rtl93xx devices and the base dtsi
for rtl930x and rtl931x to match with what's expected by the recently
backported RTL9300 I2C driver.

Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/19736
Signed-off-by: Robert Marko <robimarko@gmail.com>
2025-08-13 14:23:35 +02:00
Markus Stockhausen
9b5d055076 realtek: add NAND hardware description to RTL93xx
Include the NAND specs into the DTS. It is unclear which devices
really need it. Keep it disabled for now. As the SoC register area
is defined too small until now, increase the size to an appropriate
value.

If enabled one can see the following log messages (e.g. Linksys
LGS328C or LGS352C).

[    1.206600] spi-nand spi1.0: Macronix SPI NAND was found.
[    1.212795] spi-nand spi1.0: 128 MiB, block size: 128 KiB, page size: 2048, OOB size: 64
[    1.222217] 3 fixed-partitions partitions found on MTD device spi1.0
[    1.229466] OF: Bad cell count for /soc/spi@1a400/flash@0/partitions
[    1.236617] OF: Bad cell count for /soc/spi@1a400/flash@0/partitions
[    1.244164] Creating 3 MTD partitions on "spi1.0":
[    1.249620] 0x000000000000-0x000004000000 : "ubifs"
[    1.423593] 0x000004000000-0x000005e00000 : "firmware"
[    1.738268] mtdsplit_uimage: no uImage found in "firmware"
[    1.744577] 0x000005e00000-0x000007c00000 : "runtime2"

Signed-off-by: Markus Stockhausen <markus.stockhausen@gmx.de>
Link: https://github.com/openwrt/openwrt/pull/19583
Signed-off-by: Robert Marko <robimarko@gmail.com>
2025-07-30 23:22:24 +02:00
Markus Stockhausen
5703ca465c realtek: add dts helper for internal phy with serdes
Until now only the RTL930x devices make use of the following notation.

  phy8: ethernet-phy@8 {
    compatible = "ethernet-phy-ieee802.3-c22";
    phy-is-integrated;
    reg = <8>;
    sds = <3>;
  };

This indicates that the link is driven by a serdes directly without
external phy. As the devices have multiple serdes it must be clarified
what serdes is responsible for that port.

Nevertheless all other devices have the same requirements. E.g. RTL838x
usually drives port 24 from serdes 4 and port 26 from serdes 5. All this
currently works because the driver has a lot of hardcoded port/serdes
mapping.

Make the situation better by adding dts helpers that can describe the
topology as needed.

Signed-off-by: Markus Stockhausen <markus.stockhausen@gmx.de>
Link: https://github.com/openwrt/openwrt/pull/18851
Signed-off-by: Robert Marko <robimarko@gmail.com>
2025-06-22 16:37:32 +02:00
Bjørn Mork
864d6743ee realtek: thermal driver for rtl838x and rtl930x SoCs
Add simple driver reading the internal temperature sensor.

Signed-off-by: Bjørn Mork <bjorn@mork.no>
Link: https://github.com/openwrt/openwrt/pull/17967
Signed-off-by: Sander Vanheule <sander@svanheule.net>
2025-02-27 19:24:44 +01:00
INAGAKI Hiroshi
d45890f6cd realtek: add aux-mdio and pinctrl nodes to rtl930x.dtsi
Add aux-mdio and pinctrl nodes to rtl930x.dtsi to enable handling of the
external RTL8231 GPIO expander connected via MDIO.

Signed-off-by: INAGAKI Hiroshi <musashino.open@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/17593
Signed-off-by: Sander Vanheule <sander@svanheule.net>
2025-01-21 18:37:51 +01:00
Markus Stockhausen
0b078f2ecf realtek: normalize dts directory
There is no need to keep a version specific dts directory.
Rename the folder to its standard location.

Signed-off-by: Markus Stockhausen <markus.stockhausen@gmx.de>
2024-09-14 16:56:37 +02:00
INAGAKI Hiroshi
0de230bd0c realtek: copy dts directory for Kernel 5.10
This patch adds "dts-5.10" directory to use backported drivers.
There are several specification changes in the new drivers, so there
are some compatibility issues in using dts/dtsi files for 5.4.

The old DTS files are moved to "dts-5.4", so their corresponding
kernel version is obvious as well.

Signed-off-by: INAGAKI Hiroshi <musashino.open@gmail.com>
[change "dts" to "dts-5.4", adjust Makefile]
Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
2021-09-26 00:32:17 +02:00
Birger Koblitz
4237488cf3 realtek: add dtsi for RTL930X SoCs
Add a default dtsi to support RTL930X SoCs.

Signed-off-by: Birger Koblitz <git@birger-koblitz.de>
2021-01-26 15:06:50 +01:00