Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
[firefly-linux-kernel-4.4.55.git] / net / dsa / dsa.c
index 908bc11082db7c09e107640559f6c55070199e05..0eb5d5e76dfbe1f99537e8a561f1671389c09e16 100644 (file)
@@ -343,6 +343,23 @@ out:
        return ret;
 }
 
+static void dsa_of_free_platform_data(struct dsa_platform_data *pd)
+{
+       int i;
+       int port_index;
+
+       for (i = 0; i < pd->nr_chips; i++) {
+               port_index = 0;
+               while (port_index < DSA_MAX_PORTS) {
+                       if (pd->chip[i].port_names[port_index])
+                               kfree(pd->chip[i].port_names[port_index]);
+                       port_index++;
+               }
+               kfree(pd->chip[i].rtable);
+       }
+       kfree(pd->chip);
+}
+
 static int dsa_of_probe(struct platform_device *pdev)
 {
        struct device_node *np = pdev->dev.of_node;
@@ -354,7 +371,7 @@ static int dsa_of_probe(struct platform_device *pdev)
        const char *port_name;
        int chip_index, port_index;
        const unsigned int *sw_addr, *port_reg;
-       int ret, i;
+       int ret;
 
        mdio = of_parse_phandle(np, "dsa,mii-bus", 0);
        if (!mdio)
@@ -439,14 +456,7 @@ static int dsa_of_probe(struct platform_device *pdev)
        return 0;
 
 out_free_chip:
-       for (i = 0; i < pd->nr_chips; i++) {
-               port_index = 0;
-               while (pd->chip[i].port_names &&
-                       pd->chip[i].port_names[++port_index])
-                       kfree(pd->chip[i].port_names[port_index]);
-               kfree(pd->chip[i].rtable);
-       }
-       kfree(pd->chip);
+       dsa_of_free_platform_data(pd);
 out_free:
        kfree(pd);
        pdev->dev.platform_data = NULL;
@@ -456,21 +466,11 @@ out_free:
 static void dsa_of_remove(struct platform_device *pdev)
 {
        struct dsa_platform_data *pd = pdev->dev.platform_data;
-       int i;
-       int port_index;
 
        if (!pdev->dev.of_node)
                return;
 
-       for (i = 0; i < pd->nr_chips; i++) {
-               port_index = 0;
-               while (pd->chip[i].port_names &&
-                       pd->chip[i].port_names[++port_index])
-                       kfree(pd->chip[i].port_names[port_index]);
-               kfree(pd->chip[i].rtable);
-       }
-
-       kfree(pd->chip);
+       dsa_of_free_platform_data(pd);
        kfree(pd);
 }
 #else