svn commit: r342537 - head/sys/dev/mrsas
Kashyap D Desai
kadesai at FreeBSD.org
Wed Dec 26 10:46:24 UTC 2018
Author: kadesai
Date: Wed Dec 26 10:46:23 2018
New Revision: 342537
URL: https://svnweb.freebsd.org/changeset/base/342537
Log:
This patch will add support for latest generation MegaRAID adapters- Aero(39xx).
Driver will throw a warning message when a Configurable secure type controller is
encountered.
Submitted by: Sumit Saxena <sumit.saxena at broadcom.com>
Reviewed by: Kashyap Desai <Kashyap.Desai at broadcom.com>
Approved by: ken
MFC after: 3 days
Sponsored by: Broadcom Inc
Modified:
head/sys/dev/mrsas/mrsas.c
head/sys/dev/mrsas/mrsas.h
head/sys/dev/mrsas/mrsas_cam.c
head/sys/dev/mrsas/mrsas_fp.c
Modified: head/sys/dev/mrsas/mrsas.c
==============================================================================
--- head/sys/dev/mrsas/mrsas.c Wed Dec 26 10:44:30 2018 (r342536)
+++ head/sys/dev/mrsas/mrsas.c Wed Dec 26 10:46:23 2018 (r342537)
@@ -201,6 +201,14 @@ MRSAS_CTLR_ID device_table[] = {
{0x1000, MRSAS_TOMCAT, 0xffff, 0xffff, "AVAGO Tomcat SAS Controller"},
{0x1000, MRSAS_VENTURA_4PORT, 0xffff, 0xffff, "AVAGO Ventura_4Port SAS Controller"},
{0x1000, MRSAS_CRUSADER_4PORT, 0xffff, 0xffff, "AVAGO Crusader_4Port SAS Controller"},
+ {0x1000, MRSAS_AERO_10E0, 0xffff, 0xffff, "BROADCOM AERO-10E0 SAS Controller"},
+ {0x1000, MRSAS_AERO_10E1, 0xffff, 0xffff, "BROADCOM AERO-10E1 SAS Controller"},
+ {0x1000, MRSAS_AERO_10E2, 0xffff, 0xffff, "BROADCOM AERO-10E2 SAS Controller"},
+ {0x1000, MRSAS_AERO_10E3, 0xffff, 0xffff, "BROADCOM AERO-10E3 SAS Controller"},
+ {0x1000, MRSAS_AERO_10E4, 0xffff, 0xffff, "BROADCOM AERO-10E4 SAS Controller"},
+ {0x1000, MRSAS_AERO_10E5, 0xffff, 0xffff, "BROADCOM AERO-10E5 SAS Controller"},
+ {0x1000, MRSAS_AERO_10E6, 0xffff, 0xffff, "BROADCOM AERO-10E6 SAS Controller"},
+ {0x1000, MRSAS_AERO_10E7, 0xffff, 0xffff, "BROADCOM AERO-10E7 SAS Controller"},
{0, 0, 0, 0, NULL}
};
@@ -845,20 +853,37 @@ mrsas_attach(device_t dev)
sc->mrsas_dev = dev;
sc->device_id = pci_get_device(dev);
- 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_CUTLASS_52) ||
- (sc->device_id == MRSAS_CUTLASS_53)) {
+ switch (sc->device_id) {
+ case MRSAS_INVADER:
+ case MRSAS_FURY:
+ case MRSAS_INTRUDER:
+ case MRSAS_INTRUDER_24:
+ case MRSAS_CUTLASS_52:
+ case MRSAS_CUTLASS_53:
sc->mrsas_gen3_ctrl = 1;
- } else if ((sc->device_id == MRSAS_VENTURA) ||
- (sc->device_id == MRSAS_CRUSADER) ||
- (sc->device_id == MRSAS_HARPOON) ||
- (sc->device_id == MRSAS_TOMCAT) ||
- (sc->device_id == MRSAS_VENTURA_4PORT) ||
- (sc->device_id == MRSAS_CRUSADER_4PORT)) {
+ break;
+ case MRSAS_VENTURA:
+ case MRSAS_CRUSADER:
+ case MRSAS_HARPOON:
+ case MRSAS_TOMCAT:
+ case MRSAS_VENTURA_4PORT:
+ case MRSAS_CRUSADER_4PORT:
sc->is_ventura = true;
+ break;
+ case MRSAS_AERO_10E1:
+ case MRSAS_AERO_10E5:
+ device_printf(dev, "Adapter is in configurable secure mode\n");
+ case MRSAS_AERO_10E2:
+ case MRSAS_AERO_10E6:
+ sc->is_aero = true;
+ break;
+ case MRSAS_AERO_10E0:
+ case MRSAS_AERO_10E3:
+ case MRSAS_AERO_10E4:
+ case MRSAS_AERO_10E7:
+ device_printf(dev, "Adapter is in non-secure mode\n");
+ return SUCCESS;
+
}
mrsas_get_tunables(sc);
@@ -874,8 +899,8 @@ mrsas_attach(device_t dev)
cmd |= PCIM_CMD_BUSMASTEREN;
pci_write_config(dev, PCIR_COMMAND, cmd, 2);
- /* For Ventura system registers are mapped to BAR0 */
- if (sc->is_ventura)
+ /* For Ventura/Aero system registers are mapped to BAR0 */
+ if (sc->is_ventura || sc->is_aero)
sc->reg_res_id = PCIR_BAR(0); /* BAR0 offset */
else
sc->reg_res_id = PCIR_BAR(1); /* BAR1 offset */
@@ -1099,7 +1124,7 @@ mrsas_detach(device_t dev)
mrsas_shutdown_ctlr(sc, MR_DCMD_CTRL_SHUTDOWN);
mrsas_disable_intr(sc);
- if (sc->is_ventura && sc->streamDetectByLD) {
+ if ((sc->is_ventura || sc->is_aero) && sc->streamDetectByLD) {
for (i = 0; i < MAX_LOGICAL_DRIVES_EXT; ++i)
free(sc->streamDetectByLD[i], M_MRSAS);
free(sc->streamDetectByLD, M_MRSAS);
@@ -2285,7 +2310,7 @@ mrsas_init_fw(struct mrsas_softc *sc)
if (ret != SUCCESS) {
return (ret);
}
- if (sc->is_ventura) {
+ if (sc->is_ventura || sc->is_aero) {
scratch_pad_3 = mrsas_read_reg(sc, offsetof(mrsas_reg_set, outbound_scratch_pad_3));
#if VD_EXT_DEBUG
device_printf(sc->mrsas_dev, "scratch_pad_3 0x%x\n", scratch_pad_3);
@@ -2316,7 +2341,7 @@ mrsas_init_fw(struct mrsas_softc *sc)
fw_msix_count = sc->msix_vectors;
if ((sc->mrsas_gen3_ctrl && (sc->msix_vectors > 8)) ||
- (sc->is_ventura && (sc->msix_vectors > 16)))
+ ((sc->is_ventura || sc->is_aero) && (sc->msix_vectors > 16)))
sc->msix_combined = true;
/*
* Save 1-15 reply post index
@@ -2359,7 +2384,7 @@ mrsas_init_fw(struct mrsas_softc *sc)
return (1);
}
- if (sc->is_ventura) {
+ if (sc->is_ventura || sc->is_aero) {
scratch_pad_4 = mrsas_read_reg(sc, offsetof(mrsas_reg_set,
outbound_scratch_pad_4));
if ((scratch_pad_4 & MR_NVME_PAGE_SIZE_MASK) >= MR_DEFAULT_NVME_PAGE_SHIFT)
@@ -2424,7 +2449,7 @@ mrsas_init_fw(struct mrsas_softc *sc)
return (1);
}
- if (sc->is_ventura && sc->drv_stream_detection) {
+ if ((sc->is_ventura || sc->is_aero) && sc->drv_stream_detection) {
sc->streamDetectByLD = malloc(sizeof(PTR_LD_STREAM_DETECT) *
MAX_LOGICAL_DRIVES_EXT, M_MRSAS, M_NOWAIT);
if (!sc->streamDetectByLD) {
@@ -2678,7 +2703,7 @@ mrsas_ioc_init(struct mrsas_softc *sc)
init_frame->flags |= MFI_FRAME_DONT_POST_IN_REPLY_QUEUE;
/* driver support Extended MSIX */
- if (sc->mrsas_gen3_ctrl || sc->is_ventura) {
+ if (sc->mrsas_gen3_ctrl || sc->is_ventura || sc->is_aero) {
init_frame->driver_operations.
mfi_capabilities.support_additional_msix = 1;
}
@@ -3306,7 +3331,7 @@ mrsas_reset_ctrl(struct mrsas_softc *sc, u_int8_t rese
megasas_setup_jbod_map(sc);
- if (sc->is_ventura && sc->streamDetectByLD) {
+ if ((sc->is_ventura || sc->is_aero) && sc->streamDetectByLD) {
for (j = 0; j < MAX_LOGICAL_DRIVES_EXT; ++j) {
memset(sc->streamDetectByLD[i], 0, sizeof(LD_STREAM_DETECT));
sc->streamDetectByLD[i]->mruBitMap = MR_STREAM_BITMAP;
@@ -3834,7 +3859,7 @@ mrsas_build_mptmfi_passthru(struct mrsas_softc *sc, st
io_req = mpt_cmd->io_request;
- if (sc->mrsas_gen3_ctrl || sc->is_ventura) {
+ if (sc->mrsas_gen3_ctrl || sc->is_ventura || sc->is_aero) {
pMpi25IeeeSgeChain64_t sgl_ptr_end = (pMpi25IeeeSgeChain64_t)&io_req->SGL;
sgl_ptr_end += sc->max_sge_in_main_msg - 1;
Modified: head/sys/dev/mrsas/mrsas.h
==============================================================================
--- head/sys/dev/mrsas/mrsas.h Wed Dec 26 10:44:30 2018 (r342536)
+++ head/sys/dev/mrsas/mrsas.h Wed Dec 26 10:46:23 2018 (r342537)
@@ -91,7 +91,16 @@ __FBSDID("$FreeBSD$");
#define MRSAS_TOMCAT 0x0017
#define MRSAS_VENTURA_4PORT 0x001B
#define MRSAS_CRUSADER_4PORT 0x001C
+#define MRSAS_AERO_10E0 0x10E0
+#define MRSAS_AERO_10E1 0x10E1
+#define MRSAS_AERO_10E2 0x10E2
+#define MRSAS_AERO_10E3 0x10E3
+#define MRSAS_AERO_10E4 0x10E4
+#define MRSAS_AERO_10E5 0x10E5
+#define MRSAS_AERO_10E6 0x10E6
+#define MRSAS_AERO_10E7 0x10E7
+
/*
* Firmware State Defines
*/
@@ -3355,6 +3364,7 @@ struct mrsas_softc {
u_int32_t nvme_page_size;
boolean_t is_ventura;
+ boolean_t is_aero;
boolean_t msix_combined;
u_int16_t maxRaidMapSize;
Modified: head/sys/dev/mrsas/mrsas_cam.c
==============================================================================
--- head/sys/dev/mrsas/mrsas_cam.c Wed Dec 26 10:44:30 2018 (r342536)
+++ head/sys/dev/mrsas/mrsas_cam.c Wed Dec 26 10:46:23 2018 (r342537)
@@ -867,7 +867,7 @@ mrsas_build_ldio_rw(struct mrsas_softc *sc, struct mrs
"max (0x%x) allowed\n", cmd->sge_count, sc->max_num_sge);
return (FAIL);
}
- if (sc->is_ventura)
+ if (sc->is_ventura || sc->is_aero)
io_request->RaidContext.raid_context_g35.numSGE = cmd->sge_count;
else {
/*
@@ -1071,7 +1071,7 @@ mrsas_setup_io(struct mrsas_softc *sc, struct mrsas_mp
cmd->request_desc->SCSIIO.MSIxIndex =
sc->msix_vectors ? smp_processor_id() % sc->msix_vectors : 0;
- if (sc->is_ventura) {
+ if (sc->is_ventura || sc->is_aero) {
if (sc->streamDetectByLD) {
mtx_lock(&sc->stream_lock);
mrsas_stream_detect(sc, cmd, &io_info);
@@ -1121,7 +1121,7 @@ mrsas_setup_io(struct mrsas_softc *sc, struct mrsas_mp
io_request->RaidContext.raid_context.regLockFlags |=
(MR_RL_FLAGS_GRANT_DESTINATION_CUDA |
MR_RL_FLAGS_SEQ_NUM_ENABLE);
- } else if (sc->is_ventura) {
+ } else if (sc->is_ventura || sc->is_aero) {
io_request->RaidContext.raid_context_g35.Type = MPI2_TYPE_CUDA;
io_request->RaidContext.raid_context_g35.nseg = 0x1;
io_request->RaidContext.raid_context_g35.routingFlags.bits.sqn = 1;
@@ -1139,14 +1139,14 @@ mrsas_setup_io(struct mrsas_softc *sc, struct mrsas_mp
&sc->load_balance_info[device_id], &io_info);
cmd->load_balance = MRSAS_LOAD_BALANCE_FLAG;
cmd->pd_r1_lb = io_info.pd_after_lb;
- if (sc->is_ventura)
+ if (sc->is_ventura || sc->is_aero)
io_request->RaidContext.raid_context_g35.spanArm = io_info.span_arm;
else
io_request->RaidContext.raid_context.spanArm = io_info.span_arm;
} else
cmd->load_balance = 0;
- if (sc->is_ventura)
+ if (sc->is_ventura || sc->is_aero)
cmd->r1_alt_dev_handle = io_info.r1_alt_dev_handle;
else
cmd->r1_alt_dev_handle = MR_DEVHANDLE_INVALID;
@@ -1170,7 +1170,7 @@ mrsas_setup_io(struct mrsas_softc *sc, struct mrsas_mp
(MR_RL_FLAGS_GRANT_DESTINATION_CPU0 |
MR_RL_FLAGS_SEQ_NUM_ENABLE);
io_request->RaidContext.raid_context.nseg = 0x1;
- } else if (sc->is_ventura) {
+ } else if (sc->is_ventura || sc->is_aero) {
io_request->RaidContext.raid_context_g35.Type = MPI2_TYPE_CUDA;
io_request->RaidContext.raid_context_g35.routingFlags.bits.sqn = 1;
io_request->RaidContext.raid_context_g35.nseg = 0x1;
@@ -1229,7 +1229,7 @@ mrsas_build_ldio_nonrw(struct mrsas_softc *sc, struct
"max (0x%x) allowed\n", cmd->sge_count, sc->max_num_sge);
return (1);
}
- if (sc->is_ventura)
+ if (sc->is_ventura || sc->is_aero)
io_request->RaidContext.raid_context_g35.numSGE = cmd->sge_count;
else {
/*
@@ -1294,7 +1294,7 @@ mrsas_build_syspdio(struct mrsas_softc *sc, struct mrs
device_id + 255;
io_request->RaidContext.raid_context.configSeqNum = pd_sync->seq[device_id].seqNum;
io_request->DevHandle = pd_sync->seq[device_id].devHandle;
- if (sc->is_ventura)
+ if (sc->is_ventura || sc->is_aero)
io_request->RaidContext.raid_context_g35.routingFlags.bits.sqn = 1;
else
io_request->RaidContext.raid_context.regLockFlags |=
@@ -1342,7 +1342,7 @@ mrsas_build_syspdio(struct mrsas_softc *sc, struct mrs
* Because the NON RW cmds will now go via FW Queue
* and not the Exception queue
*/
- if (sc->mrsas_gen3_ctrl || sc->is_ventura)
+ if (sc->mrsas_gen3_ctrl || sc->is_ventura || sc->is_aero)
io_request->IoFlags |= MPI25_SAS_DEVICE0_FLAGS_ENABLED_FAST_PATH;
cmd->request_desc->SCSIIO.RequestFlags =
@@ -1359,7 +1359,7 @@ mrsas_build_syspdio(struct mrsas_softc *sc, struct mrs
"max (0x%x) allowed\n", cmd->sge_count, sc->max_num_sge);
return (1);
}
- if (sc->is_ventura)
+ if (sc->is_ventura || sc->is_aero)
io_request->RaidContext.raid_context_g35.numSGE = cmd->sge_count;
else {
/*
@@ -1522,7 +1522,7 @@ static void mrsas_build_ieee_sgl(struct mrsas_mpt_cmd
io_request = cmd->io_request;
sgl_ptr = (pMpi25IeeeSgeChain64_t)&io_request->SGL;
- if (sc->mrsas_gen3_ctrl || sc->is_ventura) {
+ if (sc->mrsas_gen3_ctrl || sc->is_ventura || sc->is_aero) {
pMpi25IeeeSgeChain64_t sgl_ptr_end = sgl_ptr;
sgl_ptr_end += sc->max_sge_in_main_msg - 1;
@@ -1533,7 +1533,7 @@ static void mrsas_build_ieee_sgl(struct mrsas_mpt_cmd
sgl_ptr->Address = segs[i].ds_addr;
sgl_ptr->Length = segs[i].ds_len;
sgl_ptr->Flags = 0;
- if (sc->mrsas_gen3_ctrl || sc->is_ventura) {
+ if (sc->mrsas_gen3_ctrl || sc->is_ventura || sc->is_aero) {
if (i == nseg - 1)
sgl_ptr->Flags = IEEE_SGE_FLAGS_END_OF_LIST;
}
@@ -1543,7 +1543,7 @@ static void mrsas_build_ieee_sgl(struct mrsas_mpt_cmd
(nseg > sc->max_sge_in_main_msg)) {
pMpi25IeeeSgeChain64_t sg_chain;
- if (sc->mrsas_gen3_ctrl || sc->is_ventura) {
+ if (sc->mrsas_gen3_ctrl || sc->is_ventura || sc->is_aero) {
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;
@@ -1552,7 +1552,7 @@ static void mrsas_build_ieee_sgl(struct mrsas_mpt_cmd
} else
cmd->io_request->ChainOffset = sc->chain_offset_io_request;
sg_chain = sgl_ptr;
- if (sc->mrsas_gen3_ctrl || sc->is_ventura)
+ if (sc->mrsas_gen3_ctrl || sc->is_ventura || sc->is_aero)
sg_chain->Flags = IEEE_SGE_FLAGS_CHAIN_ELEMENT;
else
sg_chain->Flags = (IEEE_SGE_FLAGS_CHAIN_ELEMENT | MPI2_IEEE_SGE_FLAGS_IOCPLBNTA_ADDR);
Modified: head/sys/dev/mrsas/mrsas_fp.c
==============================================================================
--- head/sys/dev/mrsas/mrsas_fp.c Wed Dec 26 10:44:30 2018 (r342536)
+++ head/sys/dev/mrsas/mrsas_fp.c Wed Dec 26 10:46:23 2018 (r342537)
@@ -983,7 +983,7 @@ mr_spanset_get_phy_params(struct mrsas_softc *sc, u_in
}
*pdBlock += stripRef + MR_LdSpanPtrGet(ld, span, map)->startBlk;
- if (sc->is_ventura) {
+ if (sc->is_ventura || sc->is_aero) {
((RAID_CONTEXT_G35 *) pRAID_Context)->spanArm =
(span << RAID_CTX_SPANARM_SPAN_SHIFT) | physArm;
io_info->span_arm = (span << RAID_CTX_SPANARM_SPAN_SHIFT) | physArm;
@@ -1190,7 +1190,7 @@ MR_BuildRaidContext(struct mrsas_softc *sc, struct IO_
* if FP possible, set the SLUD bit in regLockFlags for
* ventura
*/
- else if ((sc->is_ventura) && !isRead &&
+ else if ((sc->is_ventura || sc->is_aero) && !isRead &&
(raid->writeMode == MR_RL_WRITE_BACK_MODE) && (raid->level <= 1) &&
raid->capability.fpCacheBypassCapable) {
((RAID_CONTEXT_G35 *) pRAID_Context)->routingFlags.bits.sld = 1;
@@ -1729,7 +1729,7 @@ MR_GetPhyParams(struct mrsas_softc *sc, u_int32_t ld,
}
*pdBlock += stripRef + MR_LdSpanPtrGet(ld, span, map)->startBlk;
- if (sc->is_ventura) {
+ if (sc->is_ventura || sc->is_aero) {
((RAID_CONTEXT_G35 *) pRAID_Context)->spanArm =
(span << RAID_CTX_SPANARM_SPAN_SHIFT) | physArm;
io_info->span_arm = (span << RAID_CTX_SPANARM_SPAN_SHIFT) | physArm;
More information about the svn-src-all
mailing list