u8 __iomem *func_bar;
 
        struct erdma_devattr attrs;
-       /* physical port state (only one port per device) */
-       enum ib_port_state state;
        u32 mtu;
 
        /* cmdq and aeq use the same msix vector */
 
                goto done;
 
        switch (event) {
-       case NETDEV_UP:
-               dev->state = IB_PORT_ACTIVE;
-               erdma_port_event(dev, IB_EVENT_PORT_ACTIVE);
-               break;
-       case NETDEV_DOWN:
-               dev->state = IB_PORT_DOWN;
-               erdma_port_event(dev, IB_EVENT_PORT_ERR);
-               break;
        case NETDEV_CHANGEMTU:
                if (dev->mtu != netdev->mtu) {
                        erdma_set_mtu(dev, netdev->mtu);
 
        ib_get_eth_speed(ibdev, port, &attr->active_speed, &attr->active_width);
        attr->max_mtu = ib_mtu_int_to_enum(ndev->mtu);
        attr->active_mtu = ib_mtu_int_to_enum(ndev->mtu);
-       if (netif_running(ndev) && netif_carrier_ok(ndev))
-               dev->state = IB_PORT_ACTIVE;
-       else
-               dev->state = IB_PORT_DOWN;
-       attr->state = dev->state;
+       attr->state = ib_get_curr_port_state(ndev);
 
 out:
-       if (dev->state == IB_PORT_ACTIVE)
+       if (attr->state == IB_PORT_ACTIVE)
                attr->phys_state = IB_PORT_PHYS_STATE_LINK_UP;
        else
                attr->phys_state = IB_PORT_PHYS_STATE_DISABLED;