#include <asm/io.h>
 
 #define DRV_NAME       "ehea"
-#define DRV_VERSION    "EHEA_0073"
+#define DRV_VERSION    "EHEA_0074"
 
 /* eHEA capability flags */
 #define DLPAR_PORT_ADD_REM 1
 
 #define EHEA_PORT_UP 1
 #define EHEA_PORT_DOWN 0
+#define EHEA_PHY_LINK_UP 1
+#define EHEA_PHY_LINK_DOWN 0
 #define EHEA_MAX_PORT_RES 16
 struct ehea_port {
        struct ehea_adapter *adapter;    /* adapter that owns this port */
        u32 msg_enable;
        u32 sig_comp_iv;
        u32 state;
+       u8 phy_link;
        u8 full_duplex;
        u8 autoneg;
        u8 num_def_qps;
 
 static int sq_entries = EHEA_DEF_ENTRIES_SQ;
 static int use_mcs = 0;
 static int num_tx_qps = EHEA_NUM_TX_QP;
+static int prop_carrier_state = 0;
 
 module_param(msg_level, int, 0);
 module_param(rq1_entries, int, 0);
 module_param(rq2_entries, int, 0);
 module_param(rq3_entries, int, 0);
 module_param(sq_entries, int, 0);
+module_param(prop_carrier_state, int, 0);
 module_param(use_mcs, int, 0);
 module_param(num_tx_qps, int, 0);
 
 MODULE_PARM_DESC(num_tx_qps, "Number of TX-QPS");
 MODULE_PARM_DESC(msg_level, "msg_level");
+MODULE_PARM_DESC(prop_carrier_state, "Propagate carrier state of physical "
+                "port to stack. 1:yes, 0:no.  Default = 0 ");
 MODULE_PARM_DESC(rq3_entries, "Number of entries for Receive Queue 3 "
                 "[2^x - 1], x = [6..14]. Default = "
                 __MODULE_STRING(EHEA_DEF_ENTRIES_RQ3) ")");
                        ehea_error("Failed setting port speed");
                }
        }
-       netif_carrier_on(port->netdev);
+       if (!prop_carrier_state || (port->phy_link == EHEA_PHY_LINK_UP))
+               netif_carrier_on(port->netdev);
+
        kfree(cb4);
 out:
        return ret;
                        }
 
                if (EHEA_BMASK_GET(NEQE_EXTSWITCH_PORT_UP, eqe)) {
+                       port->phy_link = EHEA_PHY_LINK_UP;
                        if (netif_msg_link(port))
                                ehea_info("%s: Physical port up",
                                          port->netdev->name);
+                       if (prop_carrier_state)
+                               netif_carrier_on(port->netdev);
                } else {
+                       port->phy_link = EHEA_PHY_LINK_DOWN;
                        if (netif_msg_link(port))
                                ehea_info("%s: Physical port down",
                                          port->netdev->name);
+                       if (prop_carrier_state)
+                               netif_carrier_off(port->netdev);
                }
 
                if (EHEA_BMASK_GET(NEQE_EXTSWITCH_PRIMARY, eqe))