diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2019-11-28 10:27:01 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2019-11-28 10:30:08 +0100 |
commit | 2237de0cb5638258135fcf104d570ccf9e0971a1 (patch) | |
tree | 55f5fffae0cdc771e2ca26e669226e518e6dd8d6 /drivers/net/fsl-fman.c | |
parent | 904d2c2c358457c97370724920da75868527533f (diff) | |
download | barebox-2237de0cb5638258135fcf104d570ccf9e0971a1.tar.gz barebox-2237de0cb5638258135fcf104d570ccf9e0971a1.tar.xz |
net: fsl-fman: Disable unused network interfaces
The Linux dts files have all network interfaces enabled. We have
to disable the ones that are unused.
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/net/fsl-fman.c')
-rw-r--r-- | drivers/net/fsl-fman.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/drivers/net/fsl-fman.c b/drivers/net/fsl-fman.c index 4e6bb2ecfd..153d4f9ed2 100644 --- a/drivers/net/fsl-fman.c +++ b/drivers/net/fsl-fman.c @@ -1333,3 +1333,41 @@ static struct driver_d fman_driver = { .of_compatible = DRV_OF_COMPAT(fsl_fman_dt_ids), }; device_platform_driver(fman_driver); + +static int fman_of_fixup(struct device_node *root, void *context) +{ + struct device_node *fman, *fman_bb; + struct device_node *child, *child_bb; + + fman_bb = of_find_compatible_node(NULL, NULL, "fsl,fman"); + fman = of_find_compatible_node(root, NULL, "fsl,fman"); + + /* + * The dts files in the Linux tree have all network interfaces + * enabled. Disable the ones that are disabled under barebox + * as well. + */ + for_each_child_of_node(fman, child) { + if (!of_device_is_compatible(child, "fsl,fman-memac")) + continue; + + child_bb = of_get_child_by_name(fman_bb, child->name); + if (!child_bb) + continue; + + if (of_device_is_available(child_bb)) + of_device_enable(child); + else + of_device_disable(child); + } + + return 0; +} + +static int fman_register_of_fixup(void) +{ + of_register_fixup(fman_of_fixup, NULL); + + return 0; +} +late_initcall(fman_register_of_fixup); |