Added support for Avago/Broadcom Cutlass(12 Gbps- 16 port count) controllers.

Submitted by:   Sumit Saxena <Sumit.Saxena@broadcom.com>
Reviewed by:    Kashyap Desai <Kashyap.Desai@broadcom.com>
MFC after:  3 days
Sponsored by:   AVAGO/BROADCOM Limited
This commit is contained in:
Kashyap D Desai 2016-06-02 12:26:55 +00:00
parent 6fc44742fd
commit 8cd174a463
4 changed files with 43 additions and 13 deletions

View File

@ -188,6 +188,8 @@ MRSAS_CTLR_ID device_table[] = {
{0x1000, MRSAS_FURY, 0xffff, 0xffff, "AVAGO Fury SAS Controller"},
{0x1000, MRSAS_INTRUDER, 0xffff, 0xffff, "AVAGO Intruder SAS Controller"},
{0x1000, MRSAS_INTRUDER_24, 0xffff, 0xffff, "AVAGO Intruder_24 SAS Controller"},
{0x1000, MRSAS_CUTLASS_52, 0xffff, 0xffff, "AVAGO Cutlass_52 SAS Controller"},
{0x1000, MRSAS_CUTLASS_53, 0xffff, 0xffff, "AVAGO Cutlass_53 SAS Controller"},
{0, 0, 0, 0, NULL}
};
@ -1630,7 +1632,9 @@ mrsas_complete_cmd(struct mrsas_softc *sc, u_int32_t MSIxIndex)
if ((sc->device_id == MRSAS_INVADER) ||
(sc->device_id == MRSAS_FURY) ||
(sc->device_id == MRSAS_INTRUDER) ||
(sc->device_id == MRSAS_INTRUDER_24))
(sc->device_id == MRSAS_INTRUDER_24) ||
(sc->device_id == MRSAS_CUTLASS_52) ||
(sc->device_id == MRSAS_CUTLASS_53))
mrsas_write_reg(sc, sc->msix_reg_offset[MSIxIndex / 8],
((MSIxIndex & 0x7) << 24) |
sc->last_reply_idx[MSIxIndex]);
@ -1654,7 +1658,9 @@ mrsas_complete_cmd(struct mrsas_softc *sc, u_int32_t MSIxIndex)
if ((sc->device_id == MRSAS_INVADER) ||
(sc->device_id == MRSAS_FURY) ||
(sc->device_id == MRSAS_INTRUDER) ||
(sc->device_id == MRSAS_INTRUDER_24)) {
(sc->device_id == MRSAS_INTRUDER_24) ||
(sc->device_id == MRSAS_CUTLASS_52) ||
(sc->device_id == MRSAS_CUTLASS_53)) {
mrsas_write_reg(sc, sc->msix_reg_offset[MSIxIndex / 8],
((MSIxIndex & 0x7) << 24) |
sc->last_reply_idx[MSIxIndex]);
@ -2455,7 +2461,9 @@ mrsas_ioc_init(struct mrsas_softc *sc)
if ((sc->device_id == MRSAS_INVADER) ||
(sc->device_id == MRSAS_FURY) ||
(sc->device_id == MRSAS_INTRUDER) ||
(sc->device_id == MRSAS_INTRUDER_24)) {
(sc->device_id == MRSAS_INTRUDER_24) ||
(sc->device_id == MRSAS_CUTLASS_52) ||
(sc->device_id == MRSAS_CUTLASS_53)) {
init_frame->driver_operations.
mfi_capabilities.support_additional_msix = 1;
}
@ -3491,7 +3499,9 @@ mrsas_build_mptmfi_passthru(struct mrsas_softc *sc, struct mrsas_mfi_cmd *mfi_cm
if ((sc->device_id == MRSAS_INVADER) ||
(sc->device_id == MRSAS_FURY) ||
(sc->device_id == MRSAS_INTRUDER) ||
(sc->device_id == MRSAS_INTRUDER_24)) {
(sc->device_id == MRSAS_INTRUDER_24) ||
(sc->device_id == MRSAS_CUTLASS_52) ||
(sc->device_id == MRSAS_CUTLASS_53)) {
pMpi25IeeeSgeChain64_t sgl_ptr_end = (pMpi25IeeeSgeChain64_t)&io_req->SGL;
sgl_ptr_end += sc->max_sge_in_main_msg - 1;

View File

@ -82,6 +82,8 @@ __FBSDID("$FreeBSD$");
#define MRSAS_FURY 0x005f
#define MRSAS_INTRUDER 0x00ce
#define MRSAS_INTRUDER_24 0x00cf
#define MRSAS_CUTLASS_52 0x0052
#define MRSAS_CUTLASS_53 0x0053
#define MRSAS_PCI_BAR0 0x10
#define MRSAS_PCI_BAR1 0x14
#define MRSAS_PCI_BAR2 0x1C

View File

@ -880,7 +880,9 @@ mrsas_setup_io(struct mrsas_softc *sc, struct mrsas_mpt_cmd *cmd,
if ((sc->device_id == MRSAS_INVADER) ||
(sc->device_id == MRSAS_FURY) ||
(sc->device_id == MRSAS_INTRUDER) ||
(sc->device_id == MRSAS_INTRUDER_24)) {
(sc->device_id == MRSAS_INTRUDER_24) ||
(sc->device_id == MRSAS_CUTLASS_52) ||
(sc->device_id == MRSAS_CUTLASS_53)) {
if (io_request->RaidContext.regLockFlags == REGION_TYPE_UNUSED)
cmd->request_desc->SCSIIO.RequestFlags =
(MRSAS_REQ_DESCRIPT_FLAGS_NO_LOCK <<
@ -912,7 +914,9 @@ mrsas_setup_io(struct mrsas_softc *sc, struct mrsas_mpt_cmd *cmd,
if ((sc->device_id == MRSAS_INVADER) ||
(sc->device_id == MRSAS_FURY) ||
(sc->device_id == MRSAS_INTRUDER) ||
(sc->device_id == MRSAS_INTRUDER_24)) {
(sc->device_id == MRSAS_INTRUDER_24) ||
(sc->device_id == MRSAS_CUTLASS_52) ||
(sc->device_id == MRSAS_CUTLASS_53)) {
if (io_request->RaidContext.regLockFlags == REGION_TYPE_UNUSED)
cmd->request_desc->SCSIIO.RequestFlags =
(MRSAS_REQ_DESCRIPT_FLAGS_NO_LOCK <<
@ -1191,7 +1195,9 @@ mrsas_data_load_cb(void *arg, bus_dma_segment_t *segs, int nseg, int error)
if ((sc->device_id == MRSAS_INVADER) ||
(sc->device_id == MRSAS_FURY) ||
(sc->device_id == MRSAS_INTRUDER) ||
(sc->device_id == MRSAS_INTRUDER_24)) {
(sc->device_id == MRSAS_INTRUDER_24) ||
(sc->device_id == MRSAS_CUTLASS_52) ||
(sc->device_id == MRSAS_CUTLASS_53)) {
pMpi25IeeeSgeChain64_t sgl_ptr_end = sgl_ptr;
sgl_ptr_end += sc->max_sge_in_main_msg - 1;
@ -1205,7 +1211,9 @@ mrsas_data_load_cb(void *arg, bus_dma_segment_t *segs, int nseg, int error)
if ((sc->device_id == MRSAS_INVADER) ||
(sc->device_id == MRSAS_FURY) ||
(sc->device_id == MRSAS_INTRUDER) ||
(sc->device_id == MRSAS_INTRUDER_24)) {
(sc->device_id == MRSAS_INTRUDER_24) ||
(sc->device_id == MRSAS_CUTLASS_52) ||
(sc->device_id == MRSAS_CUTLASS_53)) {
if (i == nseg - 1)
sgl_ptr->Flags = IEEE_SGE_FLAGS_END_OF_LIST;
}
@ -1218,7 +1226,9 @@ mrsas_data_load_cb(void *arg, bus_dma_segment_t *segs, int nseg, int error)
if ((sc->device_id == MRSAS_INVADER) ||
(sc->device_id == MRSAS_FURY) ||
(sc->device_id == MRSAS_INTRUDER) ||
(sc->device_id == MRSAS_INTRUDER_24)) {
(sc->device_id == MRSAS_INTRUDER_24) ||
(sc->device_id == MRSAS_CUTLASS_52) ||
(sc->device_id == MRSAS_CUTLASS_53)) {
if ((cmd->io_request->IoFlags & MPI25_SAS_DEVICE0_FLAGS_ENABLED_FAST_PATH)
!= MPI25_SAS_DEVICE0_FLAGS_ENABLED_FAST_PATH)
cmd->io_request->ChainOffset = sc->chain_offset_io_request;
@ -1230,7 +1240,9 @@ mrsas_data_load_cb(void *arg, bus_dma_segment_t *segs, int nseg, int error)
if ((sc->device_id == MRSAS_INVADER) ||
(sc->device_id == MRSAS_FURY) ||
(sc->device_id == MRSAS_INTRUDER) ||
(sc->device_id == MRSAS_INTRUDER_24))
(sc->device_id == MRSAS_INTRUDER_24) ||
(sc->device_id == MRSAS_CUTLASS_52) ||
(sc->device_id == MRSAS_CUTLASS_53))
sg_chain->Flags = IEEE_SGE_FLAGS_CHAIN_ELEMENT;
else
sg_chain->Flags = (IEEE_SGE_FLAGS_CHAIN_ELEMENT | MPI2_IEEE_SGE_FLAGS_IOCPLBNTA_ADDR);

View File

@ -752,7 +752,9 @@ mr_spanset_get_phy_params(struct mrsas_softc *sc, u_int32_t ld, u_int64_t stripR
if ((sc->device_id == MRSAS_INVADER) ||
(sc->device_id == MRSAS_FURY) ||
(sc->device_id == MRSAS_INTRUDER) ||
(sc->device_id == MRSAS_INTRUDER_24))
(sc->device_id == MRSAS_INTRUDER_24) ||
(sc->device_id == MRSAS_CUTLASS_52) ||
(sc->device_id == MRSAS_CUTLASS_53))
do_invader = 1;
/* Get row and span from io_info for Uneven Span IO. */
@ -966,7 +968,9 @@ MR_BuildRaidContext(struct mrsas_softc *sc, struct IO_REQUEST_INFO *io_info,
if ((sc->device_id == MRSAS_INVADER) ||
(sc->device_id == MRSAS_FURY) ||
(sc->device_id == MRSAS_INTRUDER) ||
(sc->device_id == MRSAS_INTRUDER_24))
(sc->device_id == MRSAS_INTRUDER_24) ||
(sc->device_id == MRSAS_CUTLASS_52) ||
(sc->device_id == MRSAS_CUTLASS_53))
pRAID_Context->regLockFlags = (isRead) ? raid->regTypeReqOnRead : raid->regTypeReqOnWrite;
else
pRAID_Context->regLockFlags = (isRead) ? REGION_TYPE_SHARED_READ : raid->regTypeReqOnWrite;
@ -1454,7 +1458,9 @@ MR_GetPhyParams(struct mrsas_softc *sc, u_int32_t ld,
if ((sc->device_id == MRSAS_INVADER) ||
(sc->device_id == MRSAS_FURY) ||
(sc->device_id == MRSAS_INTRUDER) ||
(sc->device_id == MRSAS_INTRUDER_24))
(sc->device_id == MRSAS_INTRUDER_24) ||
(sc->device_id == MRSAS_CUTLASS_52) ||
(sc->device_id == MRSAS_CUTLASS_53))
do_invader = 1;
row = mega_div64_32(stripRow, raid->rowDataSize);