summaryrefslogtreecommitdiffstats
path: root/arch/arm/boards/embest-marsboard/board.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/boards/embest-marsboard/board.c')
-rw-r--r--arch/arm/boards/embest-marsboard/board.c47
1 files changed, 23 insertions, 24 deletions
diff --git a/arch/arm/boards/embest-marsboard/board.c b/arch/arm/boards/embest-marsboard/board.c
index 66893434c2..1a5e5a8491 100644
--- a/arch/arm/boards/embest-marsboard/board.c
+++ b/arch/arm/boards/embest-marsboard/board.c
@@ -8,8 +8,10 @@
#include <common.h>
#include <init.h>
#include <envfs.h>
-#include <mach/bbu.h>
+#include <mach/imx/bbu.h>
+#include <linux/mdio.h>
#include <linux/phy.h>
+#include <deep-probe.h>
static int ar8035_phy_fixup(struct phy_device *dev)
{
@@ -18,37 +20,22 @@ static int ar8035_phy_fixup(struct phy_device *dev)
/* Ar803x phy SmartEEE feature cause link status generates glitch,
* which cause ethernet link down/up issue, so disable SmartEEE
*/
- phy_write(dev, 0xd, 0x3);
- phy_write(dev, 0xe, 0x805d);
- phy_write(dev, 0xd, 0x4003);
+ val = phy_read_mmd(dev, MDIO_MMD_PCS, 0x805d);
+ phy_write(dev, MII_MMD_DATA, val & ~(1 << 8));
- val = phy_read(dev, 0xe);
- phy_write(dev, 0xe, val & ~(1 << 8));
+ val = phy_read_mmd(dev, MDIO_MMD_PCS, 0x4003);
+ phy_write(dev, MII_MMD_DATA, val & ~(1 << 8));
- /* To enable AR8031 ouput a 125MHz clk from CLK_25M */
- phy_write(dev, 0xd, 0x7);
- phy_write(dev, 0xe, 0x8016);
- phy_write(dev, 0xd, 0x4007);
-
- val = phy_read(dev, 0xe);
+ val = phy_read_mmd(dev, MDIO_MMD_PCS, 0x4007);
val &= 0xffe3;
val |= 0x18;
- phy_write(dev, 0xe, val);
-
- /* introduce tx clock delay */
- phy_write(dev, 0x1d, 0x5);
- val = phy_read(dev, 0x1e);
- val |= 0x0100;
- phy_write(dev, 0x1e, val);
+ phy_write(dev, MII_MMD_DATA, val);
return 0;
}
-static int marsboard_device_init(void)
+static int marsboard_device_init(struct device *dev)
{
- if (!of_machine_is_compatible("embest,imx6q-marsboard"))
- return 0;
-
barebox_set_hostname("marsboard");
phy_register_fixup_for_uid(0x004dd072, 0xffffffef, ar8035_phy_fixup);
@@ -60,4 +47,16 @@ static int marsboard_device_init(void)
return 0;
}
-device_initcall(marsboard_device_init);
+
+static const struct of_device_id marsboard_of_match[] = {
+ { .compatible = "embest,imx6q-marsboard" },
+ { /* sentinel */ },
+};
+BAREBOX_DEEP_PROBE_ENABLE(marsboard_of_match);
+
+static struct driver marsboard_driver = {
+ .name = "board-mars",
+ .probe = marsboard_device_init,
+ .of_compatible = marsboard_of_match,
+};
+postcore_platform_driver(marsboard_driver);