return -EINVAL;
        }
 
+       /* PHYLIB device drivers must not match using a DT compatible table
+        * as this bypasses our checks that the mdiodev that is being matched
+        * is backed by a struct phy_device. If such a case happens, we will
+        * make out-of-bounds accesses and lockup in phydev->lock.
+        */
+       if (WARN(new_driver->mdiodrv.driver.of_match_table,
+                "%s: driver must not provide a DT match table\n",
+                new_driver->name))
+               return -EINVAL;
+
        new_driver->mdiodrv.flags |= MDIO_DEVICE_IS_PHY;
        new_driver->mdiodrv.driver.name = new_driver->name;
        new_driver->mdiodrv.driver.bus = &mdio_bus_type;