tempval &= ~(MACCFG1_ENABLE_RX | MACCFG1_ENABLE_TX);
        out_be32(&ug_regs->maccfg1, tempval);
 
-       free_irq(ugeth->ug_info->uf_info.irq, ugeth->dev);
-
        ucc_geth_memclean(ugeth);
 }
 
 
        phy_start(ugeth->phydev);
 
-       err =
-           request_irq(ugeth->ug_info->uf_info.irq, ucc_geth_irq_handler, 0,
-                       "UCC Geth", dev);
+       err = ugeth_enable(ugeth, COMM_DIR_RX_AND_TX);
        if (err) {
                if (netif_msg_ifup(ugeth))
-                       ugeth_err("%s: Cannot get IRQ for net device, aborting.",
-                                 dev->name);
+                       ugeth_err("%s: Cannot enable net device, aborting.", dev->name);
                ucc_geth_stop(ugeth);
                goto out_err;
        }
 
-       err = ugeth_enable(ugeth, COMM_DIR_RX_AND_TX);
+       err = request_irq(ugeth->ug_info->uf_info.irq, ucc_geth_irq_handler,
+                         0, "UCC Geth", dev);
        if (err) {
                if (netif_msg_ifup(ugeth))
-                       ugeth_err("%s: Cannot enable net device, aborting.", dev->name);
+                       ugeth_err("%s: Cannot get IRQ for net device, aborting.",
+                                 dev->name);
                ucc_geth_stop(ugeth);
                goto out_err;
        }
 
        ucc_geth_stop(ugeth);
 
+       free_irq(ugeth->ug_info->uf_info.irq, ugeth->dev);
+
        phy_disconnect(ugeth->phydev);
        ugeth->phydev = NULL;