staging/rdma/hfi1: Add one-time LCB reset
Add one-time LCB reset on driver load to pre-emptively work around any LCB power cycle issues. Reviewed-by: Easwar Hariharan <easwar.hariharan@intel.com> Signed-off-by: Dean Luick <dean.luick@intel.com> Signed-off-by: Jubin John <jubin.john@intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
92d207f315
commit
bbdeb33d27
|
@ -5896,6 +5896,23 @@ void init_qsfp(struct hfi1_pportdata *ppd)
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Do a one-time initialize of the LCB block.
|
||||
*/
|
||||
static void init_lcb(struct hfi1_devdata *dd)
|
||||
{
|
||||
/* the DC has been reset earlier in the driver load */
|
||||
|
||||
/* set LCB for cclk loopback on the port */
|
||||
write_csr(dd, DC_LCB_CFG_TX_FIFOS_RESET, 0x01);
|
||||
write_csr(dd, DC_LCB_CFG_LANE_WIDTH, 0x00);
|
||||
write_csr(dd, DC_LCB_CFG_REINIT_AS_SLAVE, 0x00);
|
||||
write_csr(dd, DC_LCB_CFG_CNT_FOR_SKIP_STALL, 0x110);
|
||||
write_csr(dd, DC_LCB_CFG_CLK_CNTR, 0x08);
|
||||
write_csr(dd, DC_LCB_CFG_LOOPBACK, 0x02);
|
||||
write_csr(dd, DC_LCB_CFG_TX_FIFOS_RESET, 0x00);
|
||||
}
|
||||
|
||||
int bringup_serdes(struct hfi1_pportdata *ppd)
|
||||
{
|
||||
struct hfi1_devdata *dd = ppd->dd;
|
||||
|
@ -5917,6 +5934,9 @@ int bringup_serdes(struct hfi1_pportdata *ppd)
|
|||
/* Set linkinit_reason on power up per OPA spec */
|
||||
ppd->linkinit_reason = OPA_LINKINIT_REASON_LINKUP;
|
||||
|
||||
/* one-time init of the LCB */
|
||||
init_lcb(dd);
|
||||
|
||||
if (loopback) {
|
||||
ret = init_loopback(dd);
|
||||
if (ret < 0)
|
||||
|
|
|
@ -318,6 +318,9 @@
|
|||
#define DC_LCB_CFG_TX_FIFOS_RADR_RST_VAL_SHIFT 0
|
||||
#define DC_LCB_CFG_TX_FIFOS_RESET (DC_LCB_CSRS + 0x000000000008)
|
||||
#define DC_LCB_CFG_TX_FIFOS_RESET_VAL_SHIFT 0
|
||||
#define DC_LCB_CFG_REINIT_AS_SLAVE (DC_LCB_CSRS + 0x000000000030)
|
||||
#define DC_LCB_CFG_CNT_FOR_SKIP_STALL (DC_LCB_CSRS + 0x000000000040)
|
||||
#define DC_LCB_CFG_CLK_CNTR (DC_LCB_CSRS + 0x000000000110)
|
||||
#define DC_LCB_ERR_CLR (DC_LCB_CSRS + 0x000000000308)
|
||||
#define DC_LCB_ERR_EN (DC_LCB_CSRS + 0x000000000310)
|
||||
#define DC_LCB_ERR_FLG (DC_LCB_CSRS + 0x000000000300)
|
||||
|
|
Loading…
Reference in New Issue