eh = skb_push(nr->cmd, sizeof(*eh));
        eh->h_proto = htons(ETH_P_NCSI);
        eth_broadcast_addr(eh->h_dest);
-       eth_broadcast_addr(eh->h_source);
+
+       /* If mac address received from device then use it for
+        * source address as unicast address else use broadcast
+        * address as source address
+        */
+       if (nca->ndp->gma_flag == 1)
+               memcpy(eh->h_source, nca->ndp->ndev.dev->dev_addr, ETH_ALEN);
+       else
+               eth_broadcast_addr(eh->h_source);
 
        /* Start the timer for the request that might not have
         * corresponding response. Given NCSI is an internal