[PATCH 3/3] realtek: add support for Panasonic Switch-M8eG PN28080K
Sander Vanheule
sander at svanheule.net
Fri Nov 12 14:46:24 PST 2021
Hi Hiroshi,
On Sun, 2021-10-03 at 15:53 +0900, INAGAKI Hiroshi wrote:
> Panasonic M8eG PN28080K is a 8 + 1 port gigabit switch, based on
> RTL8380M.
>
> Specification:
>
> - SoC : Realtek RTL8380M
> - RAM : DDR3 128 MiB (Winbond W631GG8KB-15)
> - Flash : SPI-NOR 32 MiB (Macronix MX25L25635FMI-10G)
> - Ethernet : 10/100/1000 Mbps x8 + 1
> - port 1-8 : TP, RTL8218B (SoC)
> - port 9 : SFP, RTL8380M (SoC)
> - LEDs/Keys : 7x / 1x
> - UART : RS-232 port on the front panel (connector: RJ-45)
> - 3:TX, 4:GND, 5:GND, 6:RX (pin number: RJ-45)
> - 9600n8
> - Power : 100-240 VAC, 50/60 Hz, 0.5 A
> - Plug : IEC 60320-C13
> - Stock OS : VxWorks based
>
> Flash instruction using initramfs image:
Looks quite convoluted. Kudos on working this out!
>
> 1. Prepare the TFTP server with the IP address 192.168.1.111
> 2. Rename the OpenWrt initramfs image to "0101A8C0.img" and place it to
> the TFTP directory
> 3. Download the official upgrading firmware (ex: pn28080k_v30000.rom)
> and place it to the TFTP directory
> 4. Boot M8eG and interrupt the U-Boot with Ctrl + C keys
> 5. Execute the following commands and boot with the OpenWrt initramfs
> image
>
> rtk network on
> tftpboot 0x81000000
> bootm
>
> 6. Backup mtdblock files to the computer by scp or anything and reboot
> 7. Interrupt the U-Boot and execute the following commands to re-create
> filesystem in the flash
>
> ffsmount c:/
> ffsfmt c:/
>
> this step takes a long time, about ~ 4 mins
>
> 8. Execute the following commands to put the official images to the
> filesystem
>
> updatert <official image>
>
> example:
>
> updatert pn28080k_v30000.rom
>
> this step takes about ~ 40 secs
>
> 9. Set the environment variables of the U-Boot by the following commands
>
> setenv loadaddr 0xb4e00000
> setenv bootcmd bootm
> saveenv
>
> 10: Download the OpenWrt initramfs image and boot with it
>
> tftpboot 0x81000000 0101A8C0.img
> bootm
>
> 11: On the initramfs image, download the sysupgrade image and perform
> sysupgrade with it
>
> sysupgrade <imagename>
>
> 12: Wait ~ 120 seconds to complete flashing
>
> Note:
>
> - "Switch-M8eG" is a model name, and "PN28080K" is a model number.
> Switch-M8eG has an another (old) model number ("PN28080"), it's not a
> Realtek based hardware.
>
> - Switch-M8eG has a "POWER" LED (Green), but it's not connected to any
> GPIO pin.
>
> - The U-Boot checks the runtime images in the flash when booting and
> fails to execute anything in "bootcmd" variable if the images are not
> exsisting.
>
> - A filesystem is formed in the flash (0x100000-0x1DFFFFF) on the stock
> firmware and it includes the stock images, configuration files and
> checksum files. It's unknown format, can't be managed on the OpenWrt.
> To get the enough space for OpenWrt, move the filesystem to the head
> of "fs_reserved" partition by execution of "ffsfmt" and "updatert".
>
> Back to the stock firmware:
>
> 1. Delete "loadaddr" variable and set "bootcmd" to the original value
>
> on U-Boot:
>
> setenv loadaddr
> setenv bootcmd 'bootm 0x81000000'
>
> on OpenWrt:
>
> fw_setenv loadaddr
> fw_setenv bootcmd 'bootm 0x81000000'
>
> 2. Perform reset or reboot
>
> on U-Boot:
>
> reset
>
> on OpenWrt:
>
> reboot
>
> Signed-off-by: INAGAKI Hiroshi <musashino.open at gmail.com>
> ---
[...]
> diff --git a/target/linux/realtek/dts-5.10/rtl83xx_panasonic_mxxeg-pn28xx0k.dtsi
> b/target/linux/realtek/dts-5.10/rtl83xx_panasonic_mxxeg-pn28xx0k.dtsi
> new file mode 100644
> index 0000000000..d41213f1fd
> --- /dev/null
> +++ b/target/linux/realtek/dts-5.10/rtl83xx_panasonic_mxxeg-pn28xx0k.dtsi
> @@ -0,0 +1,216 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
> +
> +#include <dt-bindings/input/input.h>
> +#include <dt-bindings/gpio/gpio.h>
> +
> +/ {
> + chosen {
> + bootargs = "console=ttyS0,9600";
> + };
> +
> + memory at 0 {
> + device_type = "memory";
> + reg = <0x0 0x8000000>;
> + };
> +
> + leds: leds {
> + compatible = "gpio-leds";
> +
> + any_collision {
> + label = "amber:any_col";
Should we start using 'function' and 'color' on 5.10 instead of (or in addition to)
'label'? The functions are non-standard, but the #DEFINE-s in led-common.h are only
strings anyway.
Speaking of following the dt-bindings... I'm aware that you've already discussed the node
names with Adrian, but leds-gpio.yaml currently specifies that child node names shall
match "(^led-[0-9a-f]$|led)". Adrian, what do you think about following the spec?
> + gpios = <&gpio2 0 GPIO_ACTIVE_LOW>;
> + };
> +
> + giga {
> + label = "green:giga";
> + gpios = <&gpio2 8 GPIO_ACTIVE_LOW>;
> + };
> +
> + 100m {
> + label = "green:100m";
> + gpios = <&gpio2 9 GPIO_ACTIVE_LOW>;
> + };
> +
> + full_duplex {
> + label = "green:full";
> + gpios = <&gpio2 10 GPIO_ACTIVE_LOW>;
> + };
> +
> + loop_history {
> + label = "green:loop_history";
> + gpios = <&gpio2 11 GPIO_ACTIVE_LOW>;
> + };
> + };
> +
> + keys {
> + compatible = "gpio-keys-polled";
> + poll-interval = <20>;
> +
> + led_mode {
> + label = "led-mode";
> + gpios = <&gpio2 15 GPIO_ACTIVE_LOW>;
> + linux,code = <BTN_0>;
> + };
> + };
> +
> + gpio-restart {
> + compatible = "gpio-restart";
> + gpios = <&gpio2 3 GPIO_ACTIVE_HIGH>;
> + active-delay = <100>;
> + inactive-delay = <100>;
> + wait-delay = <3000>;
> + };
As noted in my other mail, this currently only has the effect of grabbing the GPIO pin.
Once _machine_restart is removed, you may have to increase the priority beyond the default
of 128, otherwise it's not guaranteed this reboot method will be used.
> +
> + /* Switch-M*eG PN28xx0K has no RTL8231 chip */
> + /delete-node/ rtl8231-gpio;
> +
> + i2c_gpio_0: i2c-gpio-0 {
> + compatible = "i2c-gpio";
> + i2c-gpio,delay-us = <2>;
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + gpio1: gpio at 20 {
> + compatible = "nxp,pca9555";
> + reg = <0x20>;
> + gpio-controller;
> + #gpio-cells = <2>;
> + };
> +
> + gpio2: gpio at 75 {
> + compatible = "nxp,pca9539";
The #INT pin of this chip doens't happen to be wired up? If it is, I would expect you
could cascade the interrupts through &gpio0.
> + reg = <0x75>;
> + gpio-controller;
> + #gpio-cells = <2>;
> +
> + /*
> + * GPIO14 (IO1_6): Shift Register RESET (port LED)
> + * - Switch-M8eG PN28080K: 3x 74HC164
> + * - Switch-M24eG PN28240K: 6x 74HC164
> + * - Switch-M48eG PN28480K: 12x 74HC164
> + */
> + portled_sregister_reset {
> + gpio-hog;
> + gpios = <14 GPIO_ACTIVE_HIGH>;
> + output-high;
> + line-name = "portled-sregister-reset";
> + };
> + };
> + };
[...]
> +&spi0 {
> + status = "okay";
> +
> + flash at 0 {
> + compatible = "jedec,spi-nor";
> + reg = <0>;
> + spi-max-frequency = <10000000>;
> +
> + partitions {
> + compatible = "fixed-partitions";
> + #address-cells = <1>;
> + #size-cells = <1>;
> +
> + partition at 0 {
> + label = "u-boot";
> + reg = <0x0 0x80000>;
> + read-only;
> + };
> +
> + partition at 80000 {
> + label = "u-boot-env";
> + reg = <0x80000 0x10000>;
> + };
> +
> + partition at 90000 {
> + label = "u-boot-env2";
> + reg = <0x90000 0x10000>;
> + };
> +
> + partition at a0000 {
> + label = "sysinfo";
> + reg = <0xa0000 0x60000>;
> + read-only;
> + };
> +
> + /*
> + * 0x100000 - 0x1DFFFFF
> + * Filesystem area for runtime images and
> + * configuration files in stock firmware
> + */
> +
> + /*
> + * re-created filesystem area, 2x stock images
> + * are included with checksum files
> + */
Can you merge both comments? Now it first seemed to me that you were describing a missing
area first, followed by some partitions.
> + partition at 100000 {
> + label = "fs_reserved";
> + reg = <0x100000 0xd00000>;
> + };
> +
> + /* free area for OpenWrt */
You can drop this comments as far as I'm concerned. The label and compatible should be
enough for an OpenWrt developer to recognise it for what it is.
> + partition at e00000 {
> + compatible = "denx,uimage";
> + label = "firmware";
> + reg = <0xe00000 0x1000000>;
> + };
Best,
Sander
More information about the openwrt-devel
mailing list