Skip to content

be2net update for UEK4 qu7 #8

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
664686f
RDMA/ocrdma: Dispatch only port event when port state changes
Dec 24, 2015
d1a606f
RDMA/ocrdma: Depend on async link events from CNA
Dec 24, 2015
3d2061f
RDMA/be2net: Remove open and close entry points
Dec 24, 2015
9e9331b
benet: fix set but not used warning
shemminger Jul 24, 2017
a5a0543
emulex/benet: Constify *be_misconfig_evt_port_state[]
Feb 27, 2018
9f65f71
ethernet: Use octal not symbolic permissions
JoePerches Mar 23, 2018
ddb6109
be2net: Fix error detection logic for BE3
be2net May 28, 2018
2065ce2
be2net: remove unused old AIC info
ivecera Jul 10, 2018
5279114
be2net: remove unused old custom busy-poll fields
ivecera Jul 10, 2018
f3c3b26
be2net: remove desc field from be_eq_obj
ivecera Jul 10, 2018
9ae17c8
be2net: reorder fields in be_eq_obj structure
ivecera Jul 10, 2018
a4f09da
be2net: move txcp field in be_tx_obj to eliminate holes in the struct
ivecera Jul 10, 2018
708e4d3
be2net: remove unused tx_jiffies field from be_tx_stats
ivecera Jul 10, 2018
e205e0a
be2net: re-order fields in be_error_recovert to avoid hole
ivecera Jul 10, 2018
fb97182
be2net: move rss_flags field in rss_info to ensure proper alignment
ivecera Jul 10, 2018
b99806b
be2net: gather debug info and reset adapter (only for Lancer) on a tx…
be2net Jul 31, 2018
5183914
be2net: Update the driver version to 12.0.0.0
be2net Jul 31, 2018
7cf62a4
be2net: fix spelling mistake "seqence" -> "sequence"
Aug 2, 2018
f35e689
be2net: Mark expected switch fall-through
GustavoARSilva Aug 7, 2018
e43e3bc
be2net: Use Kconfig flag to support for enabling/disabling adapters
orosp Aug 8, 2018
78d86e4
be2net: Fix memory leak in be_cmd_get_profile_config()
orosp Sep 5, 2018
2d505af
be2net: don't flip hw_features when VXLANs are added/deleted
dcaratti Oct 3, 2018
535fc6c
Revert "be2net: remove desc field from be_eq_obj"
Oct 23, 2018
91f8fdd
benet: remove broken and unused macro
lkundrak Jan 28, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions drivers/infiniband/hw/ocrdma/ocrdma.h
Original file line number Diff line number Diff line change
Expand Up @@ -215,6 +215,10 @@ struct phy_info {
u16 interface_type;
};

enum ocrdma_flags {
OCRDMA_FLAGS_LINK_STATUS_INIT = 0x01
};

struct ocrdma_dev {
struct ib_device ibdev;
struct ocrdma_dev_attr attr;
Expand Down Expand Up @@ -272,6 +276,7 @@ struct ocrdma_dev {
atomic_t update_sl;
u16 pvid;
u32 asic_id;
u32 flags;

ulong last_stats_time;
struct mutex stats_lock; /* provide synch for debugfs operations */
Expand Down Expand Up @@ -576,4 +581,9 @@ static inline u8 ocrdma_is_enabled_and_synced(u32 state)
(state & OCRDMA_STATE_FLAG_SYNC);
}

static inline u8 ocrdma_get_ae_link_state(u32 ae_state)
{
return ((ae_state & OCRDMA_AE_LSC_LS_MASK) >> OCRDMA_AE_LSC_LS_SHIFT);
}

#endif
42 changes: 35 additions & 7 deletions drivers/infiniband/hw/ocrdma/ocrdma_hw.c
Original file line number Diff line number Diff line change
Expand Up @@ -563,6 +563,8 @@ static int ocrdma_mbx_create_mq(struct ocrdma_dev *dev,

cmd->async_event_bitmap = BIT(OCRDMA_ASYNC_GRP5_EVE_CODE);
cmd->async_event_bitmap |= BIT(OCRDMA_ASYNC_RDMA_EVE_CODE);
/* Request link events on this MQ. */
cmd->async_event_bitmap |= BIT(OCRDMA_ASYNC_LINK_EVE_CODE);

cmd->async_cqid_ringsize = cq->id;
cmd->async_cqid_ringsize |= (ocrdma_encoded_q_len(mq->len) <<
Expand Down Expand Up @@ -781,20 +783,42 @@ static void ocrdma_process_grp5_aync(struct ocrdma_dev *dev,
}
}

static void ocrdma_process_link_state(struct ocrdma_dev *dev,
struct ocrdma_ae_mcqe *cqe)
{
struct ocrdma_ae_lnkst_mcqe *evt;
u8 lstate;

evt = (struct ocrdma_ae_lnkst_mcqe *)cqe;
lstate = ocrdma_get_ae_link_state(evt->speed_state_ptn);

if (!(lstate & OCRDMA_AE_LSC_LLINK_MASK))
return;

if (dev->flags & OCRDMA_FLAGS_LINK_STATUS_INIT)
ocrdma_update_link_state(dev, (lstate & OCRDMA_LINK_ST_MASK));
}

static void ocrdma_process_acqe(struct ocrdma_dev *dev, void *ae_cqe)
{
/* async CQE processing */
struct ocrdma_ae_mcqe *cqe = ae_cqe;
u32 evt_code = (cqe->valid_ae_event & OCRDMA_AE_MCQE_EVENT_CODE_MASK) >>
OCRDMA_AE_MCQE_EVENT_CODE_SHIFT;

if (evt_code == OCRDMA_ASYNC_RDMA_EVE_CODE)
switch (evt_code) {
case OCRDMA_ASYNC_LINK_EVE_CODE:
ocrdma_process_link_state(dev, cqe);
break;
case OCRDMA_ASYNC_RDMA_EVE_CODE:
ocrdma_dispatch_ibevent(dev, cqe);
else if (evt_code == OCRDMA_ASYNC_GRP5_EVE_CODE)
break;
case OCRDMA_ASYNC_GRP5_EVE_CODE:
ocrdma_process_grp5_aync(dev, cqe);
else
break;
default:
pr_err("%s(%d) invalid evt code=0x%x\n", __func__,
dev->id, evt_code);
}
}

static void ocrdma_process_mcqe(struct ocrdma_dev *dev, struct ocrdma_mcqe *cqe)
Expand Down Expand Up @@ -1325,7 +1349,8 @@ static int ocrdma_mbx_query_dev(struct ocrdma_dev *dev)
return status;
}

int ocrdma_mbx_get_link_speed(struct ocrdma_dev *dev, u8 *lnk_speed)
int ocrdma_mbx_get_link_speed(struct ocrdma_dev *dev, u8 *lnk_speed,
u8 *lnk_state)
{
int status = -ENOMEM;
struct ocrdma_get_link_speed_rsp *rsp;
Expand All @@ -1346,8 +1371,11 @@ int ocrdma_mbx_get_link_speed(struct ocrdma_dev *dev, u8 *lnk_speed)
goto mbx_err;

rsp = (struct ocrdma_get_link_speed_rsp *)cmd;
*lnk_speed = (rsp->pflt_pps_ld_pnum & OCRDMA_PHY_PS_MASK)
>> OCRDMA_PHY_PS_SHIFT;
if (lnk_speed)
*lnk_speed = (rsp->pflt_pps_ld_pnum & OCRDMA_PHY_PS_MASK)
>> OCRDMA_PHY_PS_SHIFT;
if (lnk_state)
*lnk_state = (rsp->res_lnk_st & OCRDMA_LINK_ST_MASK);

mbx_err:
kfree(cmd);
Expand Down
4 changes: 3 additions & 1 deletion drivers/infiniband/hw/ocrdma/ocrdma_hw.h
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,8 @@ void ocrdma_ring_cq_db(struct ocrdma_dev *, u16 cq_id, bool armed,
bool solicited, u16 cqe_popped);

/* verbs specific mailbox commands */
int ocrdma_mbx_get_link_speed(struct ocrdma_dev *dev, u8 *lnk_speed);
int ocrdma_mbx_get_link_speed(struct ocrdma_dev *dev, u8 *lnk_speed,
u8 *lnk_st);
int ocrdma_query_config(struct ocrdma_dev *,
struct ocrdma_mbx_query_config *config);

Expand Down Expand Up @@ -138,5 +139,6 @@ char *port_speed_string(struct ocrdma_dev *dev);
void ocrdma_init_service_level(struct ocrdma_dev *);
void ocrdma_alloc_pd_pool(struct ocrdma_dev *dev);
void ocrdma_free_pd_range(struct ocrdma_dev *dev);
void ocrdma_update_link_state(struct ocrdma_dev *dev, u8 lstate);

#endif /* __OCRDMA_HW_H__ */
57 changes: 25 additions & 32 deletions drivers/infiniband/hw/ocrdma/ocrdma_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -455,6 +455,7 @@ static void ocrdma_init_gid_table(struct ocrdma_dev *dev)
static struct ocrdma_dev *ocrdma_add(struct be_dev_info *dev_info)
{
int status = 0, i;
u8 lstate = 0;
struct ocrdma_dev *dev;

dev = (struct ocrdma_dev *)ib_alloc_device(sizeof(struct ocrdma_dev));
Expand Down Expand Up @@ -485,6 +486,11 @@ static struct ocrdma_dev *ocrdma_add(struct be_dev_info *dev_info)
if (status)
goto alloc_err;

/* Query Link state and update */
status = ocrdma_mbx_get_link_speed(dev, NULL, &lstate);
if (!status)
ocrdma_update_link_state(dev, lstate);

for (i = 0; i < ARRAY_SIZE(ocrdma_attributes); i++)
if (device_create_file(&dev->ibdev.dev, ocrdma_attributes[i]))
goto sysfs_err;
Expand Down Expand Up @@ -549,7 +555,7 @@ static void ocrdma_remove(struct ocrdma_dev *dev)
call_rcu(&dev->rcu, ocrdma_remove_free);
}

static int ocrdma_open(struct ocrdma_dev *dev)
static int ocrdma_dispatch_port_active(struct ocrdma_dev *dev)
{
struct ib_event port_event;

Expand All @@ -560,32 +566,9 @@ static int ocrdma_open(struct ocrdma_dev *dev)
return 0;
}

static int ocrdma_close(struct ocrdma_dev *dev)
static int ocrdma_dispatch_port_error(struct ocrdma_dev *dev)
{
int i;
struct ocrdma_qp *qp, **cur_qp;
struct ib_event err_event;
struct ib_qp_attr attrs;
int attr_mask = IB_QP_STATE;

attrs.qp_state = IB_QPS_ERR;
mutex_lock(&dev->dev_lock);
if (dev->qp_tbl) {
cur_qp = dev->qp_tbl;
for (i = 0; i < OCRDMA_MAX_QP; i++) {
qp = cur_qp[i];
if (qp && qp->ibqp.qp_type != IB_QPT_GSI) {
/* change the QP state to ERROR */
_ocrdma_modify_qp(&qp->ibqp, &attrs, attr_mask);

err_event.event = IB_EVENT_QP_FATAL;
err_event.element.qp = &qp->ibqp;
err_event.device = &dev->ibdev;
ib_dispatch_event(&err_event);
}
}
}
mutex_unlock(&dev->dev_lock);

err_event.event = IB_EVENT_PORT_ERR;
err_event.element.port_num = 1;
Expand All @@ -596,7 +579,7 @@ static int ocrdma_close(struct ocrdma_dev *dev)

static void ocrdma_shutdown(struct ocrdma_dev *dev)
{
ocrdma_close(dev);
ocrdma_dispatch_port_error(dev);
ocrdma_remove(dev);
}

Expand All @@ -607,16 +590,26 @@ static void ocrdma_shutdown(struct ocrdma_dev *dev)
static void ocrdma_event_handler(struct ocrdma_dev *dev, u32 event)
{
switch (event) {
case BE_DEV_UP:
ocrdma_open(dev);
break;
case BE_DEV_DOWN:
ocrdma_close(dev);
break;
case BE_DEV_SHUTDOWN:
ocrdma_shutdown(dev);
break;
default:
break;
}
}

void ocrdma_update_link_state(struct ocrdma_dev *dev, u8 lstate)
{
if (!(dev->flags & OCRDMA_FLAGS_LINK_STATUS_INIT)) {
dev->flags |= OCRDMA_FLAGS_LINK_STATUS_INIT;
if (!lstate)
return;
}

if (!lstate)
ocrdma_dispatch_port_error(dev);
else
ocrdma_dispatch_port_active(dev);
}

static struct ocrdma_driver ocrdma_drv = {
Expand Down
49 changes: 45 additions & 4 deletions drivers/infiniband/hw/ocrdma/ocrdma_sli.h
Original file line number Diff line number Diff line change
Expand Up @@ -448,8 +448,11 @@ struct ocrdma_ae_qp_mcqe {
u32 valid_ae_event;
};

#define OCRDMA_ASYNC_RDMA_EVE_CODE 0x14
#define OCRDMA_ASYNC_GRP5_EVE_CODE 0x5
enum ocrdma_async_event_code {
OCRDMA_ASYNC_LINK_EVE_CODE = 0x01,
OCRDMA_ASYNC_GRP5_EVE_CODE = 0x05,
OCRDMA_ASYNC_RDMA_EVE_CODE = 0x14
};

enum ocrdma_async_grp5_events {
OCRDMA_ASYNC_EVENT_QOS_VALUE = 0x01,
Expand All @@ -472,6 +475,44 @@ enum OCRDMA_ASYNC_EVENT_TYPE {
OCRDMA_MAX_ASYNC_ERRORS
};

struct ocrdma_ae_lnkst_mcqe {
u32 speed_state_ptn;
u32 qos_reason_falut;
u32 evt_tag;
u32 valid_ae_event;
};

enum {
OCRDMA_AE_LSC_PORT_NUM_MASK = 0x3F,
OCRDMA_AE_LSC_PT_SHIFT = 0x06,
OCRDMA_AE_LSC_PT_MASK = (0x03 <<
OCRDMA_AE_LSC_PT_SHIFT),
OCRDMA_AE_LSC_LS_SHIFT = 0x08,
OCRDMA_AE_LSC_LS_MASK = (0xFF <<
OCRDMA_AE_LSC_LS_SHIFT),
OCRDMA_AE_LSC_LD_SHIFT = 0x10,
OCRDMA_AE_LSC_LD_MASK = (0xFF <<
OCRDMA_AE_LSC_LD_SHIFT),
OCRDMA_AE_LSC_PPS_SHIFT = 0x18,
OCRDMA_AE_LSC_PPS_MASK = (0xFF <<
OCRDMA_AE_LSC_PPS_SHIFT),
OCRDMA_AE_LSC_PPF_MASK = 0xFF,
OCRDMA_AE_LSC_ER_SHIFT = 0x08,
OCRDMA_AE_LSC_ER_MASK = (0xFF <<
OCRDMA_AE_LSC_ER_SHIFT),
OCRDMA_AE_LSC_QOS_SHIFT = 0x10,
OCRDMA_AE_LSC_QOS_MASK = (0xFFFF <<
OCRDMA_AE_LSC_QOS_SHIFT)
};

enum {
OCRDMA_AE_LSC_PLINK_DOWN = 0x00,
OCRDMA_AE_LSC_PLINK_UP = 0x01,
OCRDMA_AE_LSC_LLINK_DOWN = 0x02,
OCRDMA_AE_LSC_LLINK_MASK = 0x02,
OCRDMA_AE_LSC_LLINK_UP = 0x03
};

/* mailbox command request and responses */
enum {
OCRDMA_MBX_QUERY_CFG_CQ_OVERFLOW_SHIFT = 2,
Expand Down Expand Up @@ -659,7 +700,7 @@ enum {
OCRDMA_PHY_PFLT_SHIFT = 0x18,
OCRDMA_QOS_LNKSP_MASK = 0xFFFF0000,
OCRDMA_QOS_LNKSP_SHIFT = 0x10,
OCRDMA_LLST_MASK = 0xFF,
OCRDMA_LINK_ST_MASK = 0x01,
OCRDMA_PLFC_MASK = 0x00000400,
OCRDMA_PLFC_SHIFT = 0x8,
OCRDMA_PLRFC_MASK = 0x00000200,
Expand All @@ -674,7 +715,7 @@ struct ocrdma_get_link_speed_rsp {

u32 pflt_pps_ld_pnum;
u32 qos_lsp;
u32 res_lls;
u32 res_lnk_st;
};

enum {
Expand Down
2 changes: 1 addition & 1 deletion drivers/infiniband/hw/ocrdma/ocrdma_verbs.c
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ static inline void get_link_speed_and_width(struct ocrdma_dev *dev,
int status;
u8 speed;

status = ocrdma_mbx_get_link_speed(dev, &speed);
status = ocrdma_mbx_get_link_speed(dev, &speed, NULL);
if (status)
speed = OCRDMA_PHYS_LINK_SPEED_ZERO;

Expand Down
39 changes: 38 additions & 1 deletion drivers/net/ethernet/emulex/benet/Kconfig
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
config BE2NET
tristate "ServerEngines' 10Gbps NIC - BladeEngine"
depends on PCI
---help---
help
This driver implements the NIC functionality for ServerEngines'
10Gbps network adapter - BladeEngine.

Expand All @@ -21,3 +21,40 @@ config BE2NET_VXLAN
---help---
Say Y here if you want to enable VXLAN offload support on
be2net driver.


config BE2NET_BE2
bool "Support for BE2 chipsets"
depends on BE2NET
default y
help
Say Y here if you want to use devices based on BE2
chipsets. (e.g. OneConnect OCe10xxx)

config BE2NET_BE3
bool "Support for BE3 chipsets"
depends on BE2NET
default y
help
Say Y here if you want to use devices based on BE3
chipsets. (e.g. OneConnect OCe11xxx)

config BE2NET_LANCER
bool "Support for Lancer chipsets"
depends on BE2NET
default y
help
Say Y here if you want to use devices based on Lancer
chipsets. (e.g LightPulse LPe12xxx)

config BE2NET_SKYHAWK
bool "Support for Skyhawk chipsets"
depends on BE2NET
default y
help
Say Y here if you want to use devices based on Skyhawk
chipsets. (e.g. OneConnect OCe14xxx)

comment "WARNING: be2net is useless without any enabled chip"
depends on BE2NET_BE2=n && BE2NET_BE3=n && BE2NET_LANCER=n && \
BE2NET_SKYHAWK=n && BE2NET
Loading