#include <linux/of_mdio.h>
 #include <linux/of_net.h>
 #include <linux/of_address.h>
+#include <linux/of_device.h>
 #include <linux/phy.h>
 #include <linux/clk.h>
 #include <linux/hrtimer.h>
 
        /* Tclk value */
        u32 tclk;
+
+       /* HW version */
+       enum { MVPP21, MVPP22 } hw_version;
 };
 
 struct mvpp2_pcpu_stats {
        if (!priv)
                return -ENOMEM;
 
+       priv->hw_version =
+               (unsigned long)of_device_get_match_data(&pdev->dev);
+
        res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
        priv->base = devm_ioremap_resource(&pdev->dev, res);
        if (IS_ERR(priv->base))
 }
 
 static const struct of_device_id mvpp2_match[] = {
-       { .compatible = "marvell,armada-375-pp2" },
+       {
+               .compatible = "marvell,armada-375-pp2",
+               .data = (void *)MVPP21,
+       },
        { }
 };
 MODULE_DEVICE_TABLE(of, mvpp2_match);