/* Common clocks */
        struct clk *pp_clk;
        struct clk *gop_clk;
+       struct clk *mg_clk;
 
        /* List of pointers to port structures */
        struct mvpp2_port **port_list;
        if (err < 0)
                goto err_pp_clk;
 
+       if (priv->hw_version == MVPP22) {
+               priv->mg_clk = devm_clk_get(&pdev->dev, "mg_clk");
+               if (IS_ERR(priv->mg_clk)) {
+                       err = PTR_ERR(priv->mg_clk);
+                       goto err_gop_clk;
+               }
+
+               err = clk_prepare_enable(priv->mg_clk);
+               if (err < 0)
+                       goto err_gop_clk;
+       }
+
        /* Get system's tclk rate */
        priv->tclk = clk_get_rate(priv->pp_clk);
 
        err = mvpp2_init(pdev, priv);
        if (err < 0) {
                dev_err(&pdev->dev, "failed to initialize controller\n");
-               goto err_gop_clk;
+               goto err_mg_clk;
        }
 
        port_count = of_get_available_child_count(dn);
        if (port_count == 0) {
                dev_err(&pdev->dev, "no ports enabled\n");
                err = -ENODEV;
-               goto err_gop_clk;
+               goto err_mg_clk;
        }
 
        priv->port_list = devm_kcalloc(&pdev->dev, port_count,
                                      GFP_KERNEL);
        if (!priv->port_list) {
                err = -ENOMEM;
-               goto err_gop_clk;
+               goto err_mg_clk;
        }
 
        /* Initialize ports */
        for_each_available_child_of_node(dn, port_node) {
                err = mvpp2_port_probe(pdev, port_node, priv);
                if (err < 0)
-                       goto err_gop_clk;
+                       goto err_mg_clk;
        }
 
        platform_set_drvdata(pdev, priv);
        return 0;
 
+err_mg_clk:
+       if (priv->hw_version == MVPP22)
+               clk_disable_unprepare(priv->mg_clk);
 err_gop_clk:
        clk_disable_unprepare(priv->gop_clk);
 err_pp_clk:
                                  aggr_txq->descs_dma);
        }
 
+       clk_disable_unprepare(priv->mg_clk);
        clk_disable_unprepare(priv->pp_clk);
        clk_disable_unprepare(priv->gop_clk);