mirror of
https://github.com/freebsd/freebsd-src
synced 2024-10-04 23:50:27 +00:00
cxgbe(4): New knob to limit driver to the specified types of doorbells.
hw.cxgbe.doorbells_allowed="0xf" The adapter's doorbells bitmap is clipped to the value specified in the tunable, which is meant for debug and workarounds only. There is no change in default behavior. MFC after: 1 week Sponsored by: Chelsio Communications
This commit is contained in:
parent
d72db09005
commit
ba95b4aea7
|
@ -1364,6 +1364,7 @@ void t4_add_adapter(struct adapter *);
|
|||
int t4_detach_common(device_t);
|
||||
int t4_map_bars_0_and_4(struct adapter *);
|
||||
int t4_map_bar_2(struct adapter *);
|
||||
int t4_adj_doorbells(struct adapter *);
|
||||
int t4_setup_intr_handlers(struct adapter *);
|
||||
void t4_sysctls(struct adapter *);
|
||||
int begin_synchronized_op(struct adapter *, struct vi_info *, int, char *);
|
||||
|
|
|
@ -604,6 +604,11 @@ static int t5_write_combine = 0;
|
|||
SYSCTL_INT(_hw_cxl, OID_AUTO, write_combine, CTLFLAG_RDTUN, &t5_write_combine,
|
||||
0, "Use WC instead of UC for BAR2");
|
||||
|
||||
/* From t4_sysctls: doorbells = {"\20\1UDB\2WCWR\3UDBWC\4KDB"} */
|
||||
static int t4_doorbells_allowed = 0xf;
|
||||
SYSCTL_INT(_hw_cxgbe, OID_AUTO, doorbells_allowed, CTLFLAG_RDTUN,
|
||||
&t4_doorbells_allowed, 0, "Limit tx queues to these doorbells");
|
||||
|
||||
static int t4_num_vis = 1;
|
||||
SYSCTL_INT(_hw_cxgbe, OID_AUTO, num_vis, CTLFLAG_RDTUN, &t4_num_vis, 0,
|
||||
"Number of VIs per port");
|
||||
|
@ -1347,6 +1352,10 @@ t4_attach(device_t dev)
|
|||
if (rc != 0)
|
||||
goto done; /* error message displayed already */
|
||||
|
||||
rc = t4_adj_doorbells(sc);
|
||||
if (rc != 0)
|
||||
goto done; /* error message displayed already */
|
||||
|
||||
rc = t4_create_dma_tag(sc);
|
||||
if (rc != 0)
|
||||
goto done; /* error message displayed already */
|
||||
|
@ -3760,6 +3769,18 @@ t4_map_bar_2(struct adapter *sc)
|
|||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
t4_adj_doorbells(struct adapter *sc)
|
||||
{
|
||||
if ((sc->doorbells & t4_doorbells_allowed) != 0) {
|
||||
sc->doorbells &= t4_doorbells_allowed;
|
||||
return (0);
|
||||
}
|
||||
CH_ERR(sc, "No usable doorbell (available = 0x%x, allowed = 0x%x).\n",
|
||||
sc->doorbells, t4_doorbells_allowed);
|
||||
return (EINVAL);
|
||||
}
|
||||
|
||||
struct memwin_init {
|
||||
uint32_t base;
|
||||
uint32_t aperture;
|
||||
|
|
|
@ -589,6 +589,10 @@ t4vf_attach(device_t dev)
|
|||
if (rc != 0)
|
||||
goto done; /* error message displayed already */
|
||||
|
||||
rc = t4_adj_doorbells(sc);
|
||||
if (rc != 0)
|
||||
goto done; /* error message displayed already */
|
||||
|
||||
rc = t4_create_dma_tag(sc);
|
||||
if (rc != 0)
|
||||
goto done; /* error message displayed already */
|
||||
|
|
Loading…
Reference in a new issue