diff --git a/kernel/wr_nic/endpoint.c b/kernel/wr_nic/endpoint.c
index c4e289fba9a8d8ed301f71815fb47ee25f0734da..76da248048f959a96ba04d03c4a799a849192bc5 100644
--- a/kernel/wr_nic/endpoint.c
+++ b/kernel/wr_nic/endpoint.c
@@ -101,7 +101,8 @@ static void wrn_update_link_status(struct net_device *dev)
 {
 	struct wrn_ep *ep = netdev_priv(dev);
 	u32 ecr, bmsr, bmcr, lpa;
-
+	uint32_t value;
+	
 	bmsr = wrn_phy_read(dev, 0, MII_BMSR);
 	bmcr = wrn_phy_read(dev, 0, MII_BMCR);
 
@@ -112,6 +113,9 @@ static void wrn_update_link_status(struct net_device *dev)
 	if (!mii_link_ok(&ep->mii)) {
 		if(netif_carrier_ok(dev)) {
 			netif_carrier_off(dev);
+			/* Reset SFP */
+			value = wrn_phy_read(dev, 0, MII_BMCR);
+			wrn_phy_write(dev, 0, MII_BMCR, value | BMCR_RESET);
 			clear_bit(WRN_EP_UP, &ep->ep_flags);
 			printk(KERN_INFO "%s: Link down.\n", dev->name);
 			return;