#include <linux/mdio-mux.h>
 #include <linux/delay.h>
 
-#define MDIO_PARAM_OFFSET              0x00
+#define MDIO_PARAM_OFFSET              0x23c
 #define MDIO_PARAM_MIIM_CYCLE          29
 #define MDIO_PARAM_INTERNAL_SEL                25
 #define MDIO_PARAM_BUS_ID              22
 #define MDIO_PARAM_PHY_ID              16
 #define MDIO_PARAM_PHY_DATA            0
 
-#define MDIO_READ_OFFSET               0x04
+#define MDIO_READ_OFFSET               0x240
 #define MDIO_READ_DATA_MASK            0xffff
-#define MDIO_ADDR_OFFSET               0x08
+#define MDIO_ADDR_OFFSET               0x244
 
-#define MDIO_CTRL_OFFSET               0x0C
+#define MDIO_CTRL_OFFSET               0x248
 #define MDIO_CTRL_WRITE_OP             0x1
 #define MDIO_CTRL_READ_OP              0x2
 
-#define MDIO_STAT_OFFSET               0x10
+#define MDIO_STAT_OFFSET               0x24c
 #define MDIO_STAT_DONE                 1
 
 #define BUS_MAX_ADDR                   32
 #define EXT_BUS_START_ADDR             16
 
+#define MDIO_REG_ADDR_SPACE_SIZE       0x250
+
 struct iproc_mdiomux_desc {
        void *mux_handle;
        void __iomem *base;
        md->dev = &pdev->dev;
 
        res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+       if (res->start & 0xfff) {
+               /* For backward compatibility in case the
+                * base address is specified with an offset.
+                */
+               dev_info(&pdev->dev, "fix base address in dt-blob\n");
+               res->start &= ~0xfff;
+               res->end = res->start + MDIO_REG_ADDR_SPACE_SIZE - 1;
+       }
        md->base = devm_ioremap_resource(&pdev->dev, res);
        if (IS_ERR(md->base)) {
                dev_err(&pdev->dev, "failed to ioremap register\n");