If unsure, say N.
 
+if STMMAC_PLATFORM
+
+config DWMAC_GENERIC
+       tristate "Generic driver for DWMAC"
+       default STMMAC_PLATFORM
+       ---help---
+         Generic DWMAC driver for platforms that don't require any
+         platform specific code to function or is using platform
+         data for setup.
+
+endif
+
 config STMMAC_PCI
        tristate "STMMAC PCI bus support"
        depends on STMMAC_ETH && PCI
 
              dwmac100_core.o dwmac100_dma.o enh_desc.o norm_desc.o     \
              mmc_core.o stmmac_hwtstamp.o stmmac_ptp.o $(stmmac-y)
 
-obj-$(CONFIG_STMMAC_PLATFORM) += stmmac-platform.o
+# Ordering matters. Generic driver must be last.
+obj-$(CONFIG_STMMAC_PLATFORM)  += stmmac-platform.o
+obj-$(CONFIG_DWMAC_GENERIC)    += dwmac-generic.o
 stmmac-platform-objs:= stmmac_platform.o dwmac-meson.o dwmac-sunxi.o   \
                       dwmac-sti.o dwmac-socfpga.o dwmac-rk.o           \
                       dwmac-lpc18xx.o
 
--- /dev/null
+/*
+ * Generic DWMAC platform driver
+ *
+ * Copyright (C) 2015 Joachim Eastwood <manabian@gmail.com>
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2. This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+
+#include <linux/module.h>
+#include <linux/of.h>
+#include <linux/platform_device.h>
+
+#include "stmmac_platform.h"
+
+static const struct of_device_id dwmac_generic_match[] = {
+       { .compatible = "st,spear600-gmac"},
+       { .compatible = "snps,dwmac-3.610"},
+       { .compatible = "snps,dwmac-3.70a"},
+       { .compatible = "snps,dwmac-3.710"},
+       { .compatible = "snps,dwmac"},
+       { }
+};
+MODULE_DEVICE_TABLE(of, dwmac_generic_match);
+
+static struct platform_driver dwmac_generic_driver = {
+       .probe  = stmmac_pltfr_probe,
+       .remove = stmmac_pltfr_remove,
+       .driver = {
+               .name           = "dwmac-generic",
+               .pm             = &stmmac_pltfr_pm_ops,
+               .of_match_table = of_match_ptr(dwmac_generic_match),
+       },
+};
+module_platform_driver(dwmac_generic_driver);
+
+MODULE_DESCRIPTION("Generic dwmac driver");
+MODULE_LICENSE("GPL v2");
 
        { .compatible = "st,stid127-dwmac", .data = &stid127_dwmac_data},
        { .compatible = "st,stih407-dwmac", .data = &stih4xx_dwmac_data},
        { .compatible = "altr,socfpga-stmmac", .data = &socfpga_gmac_data },
-       { .compatible = "st,spear600-gmac"},
-       { .compatible = "snps,dwmac-3.610"},
-       { .compatible = "snps,dwmac-3.70a"},
-       { .compatible = "snps,dwmac-3.710"},
-       { .compatible = "snps,dwmac"},
        { /* sentinel */ }
 };
 MODULE_DEVICE_TABLE(of, stmmac_dt_ids);