kernel: rtl8367b: use realtek,extif property
authorMieczyslaw Nalewaj <namiltd@yahoo.com>
Sat, 27 Jul 2024 12:50:04 +0000 (14:50 +0200)
committerHauke Mehrtens <hauke@hauke-m.de>
Mon, 5 Aug 2024 22:34:14 +0000 (00:34 +0200)
Use realtek,extif property instead of realtek,extif0 to extif2
by extending it with the cpu_port parameter.
The extif number is automatically calculated based on cpu_port.

Signed-off-by: Mieczyslaw Nalewaj <namiltd@yahoo.com>
Link: https://github.com/openwrt/openwrt/pull/15749
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
target/linux/apm821xx/dts/netgear-wndap6x0.dtsi
target/linux/generic/files/drivers/net/phy/rtl8367b.c
target/linux/ramips/dts/mt7620a_iodata_wn-ac733gr3.dts
target/linux/ramips/dts/mt7620a_tplink_archer-c2-v1.dts
target/linux/ramips/dts/mt7620a_tplink_archer-c5-v4.dts
target/linux/ramips/dts/mt7620a_tplink_ec220-g5-v2.dts
target/linux/ramips/dts/mt7620a_zyxel_keenetic-viva.dts
target/linux/ramips/dts/rt3662_dlink_dir-645.dts
target/linux/ramips/dts/rt3883_belkin_f9k110x.dtsi

index 9d987766264c8eaff10415520c4c83f8618b5b3a..7c9faa883f2982e47cfd14506416e8008f57c48b 100644 (file)
 
        rtl8367b {
                compatible = "realtek,rtl8367b";
-               realtek,extif0 = <1 2 1 1 1 1 1 1 2>;
+               realtek,extif = <5 1 2 1 1 1 1 1 1 2>;
                mii-bus = <&mdio0>;
        };
 };
index f79f7261a150792770c7ce59d86232af3267ddc7..534da05517c77e13652d8325de0b2c015646ce4e 100644 (file)
@@ -709,21 +709,48 @@ static int rtl8367b_extif_init(struct rtl8366_smi *smi, int id,
 }
 
 #ifdef CONFIG_OF
-static int rtl8367b_extif_init_of(struct rtl8366_smi *smi, int id,
+static int rtl8367b_extif_init_of(struct rtl8366_smi *smi,
                                  const char *name)
 {
        struct rtl8367_extif_config *cfg;
        const __be32 *prop;
        int size;
        int err;
+       unsigned cpu_port;
+       unsigned id = UINT_MAX;
 
        prop = of_get_property(smi->parent->of_node, name, &size);
-       if (!prop)
-               return rtl8367b_extif_init(smi, id, NULL);
+       if (!prop || (size != (10 * sizeof(*prop)))) {
+               dev_err(smi->parent, "%s property is not defined or invalid\n", name);
+               err = -EINVAL;
+               goto err_init;
+       }
 
-       if (size != (9 * sizeof(*prop))) {
-               dev_err(smi->parent, "%s property is invalid\n", name);
-               return -EINVAL;
+       cpu_port = be32_to_cpup(prop++);
+       switch (cpu_port) {
+       case RTL8367B_CPU_PORT_NUM:
+       case RTL8367B_CPU_PORT_NUM + 1:
+       case RTL8367B_CPU_PORT_NUM + 2:
+               if (smi->rtl8367b_chip == RTL8367B_CHIP_RTL8367R_VB) { /* for the RTL8367R-VB chip, cpu_port 5 corresponds to extif1 */
+                       if (cpu_port == RTL8367B_CPU_PORT_NUM)
+                               id = 1;
+                       else {
+                               dev_err(smi->parent, "wrong cpu_port %u in %s property\n", cpu_port, name);
+                               err = -EINVAL;
+                               goto err_init;
+                       }
+               } else {
+                       id = cpu_port - RTL8367B_CPU_PORT_NUM;
+               }
+               if (smi->cpu_port == UINT_MAX) {
+                       dev_info(smi->parent, "cpu_port:%u, assigned to extif%u\n", cpu_port, id);
+                       smi->cpu_port = cpu_port;
+               }
+               break;
+       default:
+               dev_err(smi->parent, "wrong cpu_port %u in %s property\n", cpu_port, name);
+               err = -EINVAL;
+               goto err_init;
        }
 
        cfg = kzalloc(sizeof(struct rtl8367_extif_config), GFP_KERNEL);
@@ -743,10 +770,15 @@ static int rtl8367b_extif_init_of(struct rtl8366_smi *smi, int id,
        err = rtl8367b_extif_init(smi, id, cfg);
        kfree(cfg);
 
+err_init:
+       if (id != 0) rtl8367b_extif_init(smi, 0, NULL);
+       if (id != 1) rtl8367b_extif_init(smi, 1, NULL);
+       if (id != 2) rtl8367b_extif_init(smi, 2, NULL);
+
        return err;
 }
 #else
-static int rtl8367b_extif_init_of(struct rtl8366_smi *smi, int id,
+static int rtl8367b_extif_init_of(struct rtl8366_smi *smi,
                                  const char *name)
 {
        return -EINVAL;
@@ -767,15 +799,7 @@ static int rtl8367b_setup(struct rtl8366_smi *smi)
 
        /* initialize external interfaces */
        if (smi->parent->of_node) {
-               err = rtl8367b_extif_init_of(smi, 0, "realtek,extif0");
-               if (err)
-                       return err;
-
-               err = rtl8367b_extif_init_of(smi, 1, "realtek,extif1");
-               if (err)
-                       return err;
-
-               err = rtl8367b_extif_init_of(smi, 2, "realtek,extif2");
+               err = rtl8367b_extif_init_of(smi, "realtek,extif");
                if (err)
                        return err;
        } else {
@@ -1352,13 +1376,6 @@ static int rtl8367b_detect(struct rtl8366_smi *smi)
 
        dev_info(smi->parent, "RTL%s chip found (num:%04x ver:%04x)\n", chip_name, chip_num, chip_ver);
 
-       if (of_property_present(smi->parent->of_node, "realtek,extif2"))
-               smi->cpu_port = RTL8367B_CPU_PORT_NUM + 2;
-       else if (of_property_present(smi->parent->of_node, "realtek,extif1") && (smi->rtl8367b_chip != RTL8367B_CHIP_RTL8367R_VB)) /* for the RTL8367R-VB chip, extif1 corresponds to cpu_port 5 */
-               smi->cpu_port = RTL8367B_CPU_PORT_NUM + 1;
-
-       dev_info(smi->parent, "CPU port: %u\n", smi->cpu_port);
-
        return 0;
 }
 
@@ -1397,7 +1414,7 @@ static int  rtl8367b_probe(struct platform_device *pdev)
        smi->cmd_write = 0xb8;
        smi->ops = &rtl8367b_smi_ops;
        smi->num_ports = RTL8367B_NUM_PORTS;
-       smi->cpu_port = RTL8367B_CPU_PORT_NUM;
+       smi->cpu_port = UINT_MAX; /* not defined yet */
        smi->num_vlan_mc = RTL8367B_NUM_VLANS;
        smi->mib_counters = rtl8367b_mib_counters;
        smi->num_mib_counters = ARRAY_SIZE(rtl8367b_mib_counters);
index d95a4ad99df1903e67f6044e1a013797e3a58c10..19b1538241333fc67b354b9c947895a98ff68602 100644 (file)
@@ -77,7 +77,7 @@
                compatible = "realtek,rtl8367b";
                gpio-sda = <&gpio0 22 GPIO_ACTIVE_HIGH>;
                gpio-sck = <&gpio0 23 GPIO_ACTIVE_HIGH>;
-               realtek,extif1 = <1 0 1 1 1 1 1 1 2>;
+               realtek,extif = <6 1 0 1 1 1 1 1 1 2>;
        };
 };
 
index 06f3eba37bef44dea31b3ac6185b81ac695f4b41..feb619a0c0e37c7c44dbd1cc27f40fd8333ae72b 100644 (file)
@@ -55,7 +55,7 @@
 
        rtl8367rb {
                compatible = "realtek,rtl8367b";
-               realtek,extif1 = <1 0 1 1 1 1 1 1 2>;
+               realtek,extif = <6 1 0 1 1 1 1 1 1 2>;
                mii-bus = <&mdio0>;
        };
 };
index 855e06e9f6a11b34cde9496b6cedab7f7d97fddb..91b3a255c1708edc39b6d28ef0f842973766459b 100644 (file)
@@ -74,7 +74,7 @@
 
        rtl8367s {
                compatible = "realtek,rtl8367b";
-               realtek,extif2 = <1 0 1 1 1 1 1 1 2>;
+               realtek,extif = <7 1 0 1 1 1 1 1 1 2>;
                mii-bus = <&mdio0>;
                phy-id = <29>;
        };
index 7fc075aeddbc5dc9339a255edc7b34648e35e677..a39455cf293f715e731aa1154a3316c8866e6994 100644 (file)
@@ -82,7 +82,7 @@
 
        rtl8367s {
                compatible = "realtek,rtl8367b";
-               realtek,extif2 = <1 0 1 1 1 1 1 1 2>;
+               realtek,extif = <7 1 0 1 1 1 1 1 1 2>;
                mii-bus = <&mdio0>;
                phy-id = <29>;
        };
index 0630e8a16088f0ada182051aa4160f6d3ba66825..d095b4563066fe967e6b1e4912c2024aee0ee65c 100644 (file)
@@ -85,7 +85,7 @@
 
        rtl8367rb {
                compatible = "realtek,rtl8367b";
-               realtek,extif2 = <1 0 1 1 1 1 1 1 2>;
+               realtek,extif = <7 1 0 1 1 1 1 1 1 2>;
                mii-bus = <&mdio0>;
        };
 };
index 3d6479f44f46007587479a485c86ae7fc0fc2476..8cfa48e19590994c00ed2ebb400c9074051d57e0 100644 (file)
@@ -19,7 +19,7 @@
                compatible = "realtek,rtl8367b";
                gpio-sda = <&gpio0 1 GPIO_ACTIVE_HIGH>;
                gpio-sck = <&gpio0 2 GPIO_ACTIVE_HIGH>;
-               realtek,extif1 = <1 0 1 1 1 1 1 1 2>;
+               realtek,extif = <6 1 0 1 1 1 1 1 1 2>;
        };
 
        keys {
index a2d1906b8956eb98bcf6c914efe2993095ababac..4d60bb3c05cceb9d902e93a167e89371875d6d16 100644 (file)
@@ -12,7 +12,7 @@
                compatible = "realtek,rtl8367b";
                gpio-sda = <&gpio0 1 GPIO_ACTIVE_HIGH>;
                gpio-sck = <&gpio0 2 GPIO_ACTIVE_HIGH>;
-               realtek,extif1 = <1 0 1 1 1 1 1 1 2>;
+               realtek,extif = <5 1 0 1 1 1 1 1 1 2>;
        };
 };