svn commit: r301203 - head/sys/dev/mrsas

Kashyap D Desai kadesai at FreeBSD.org
Thu Jun 2 12:26:57 UTC 2016


Author: kadesai
Date: Thu Jun  2 12:26:55 2016
New Revision: 301203
URL: https://svnweb.freebsd.org/changeset/base/301203

Log:
  Added support for Avago/Broadcom Cutlass(12 Gbps- 16 port count) controllers.
  
  Submitted by:   Sumit Saxena <Sumit.Saxena at broadcom.com>
  Reviewed by:    Kashyap Desai <Kashyap.Desai at broadcom.com>
  MFC after:  3 days
  Sponsored by:   AVAGO/BROADCOM Limited

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	Thu Jun  2 12:01:58 2016	(r301202)
+++ head/sys/dev/mrsas/mrsas.c	Thu Jun  2 12:26:55 2016	(r301203)
@@ -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 *s
 				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 *s
 		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
 	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;

Modified: head/sys/dev/mrsas/mrsas.h
==============================================================================
--- head/sys/dev/mrsas/mrsas.h	Thu Jun  2 12:01:58 2016	(r301202)
+++ head/sys/dev/mrsas/mrsas.h	Thu Jun  2 12:26:55 2016	(r301203)
@@ -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

Modified: head/sys/dev/mrsas/mrsas_cam.c
==============================================================================
--- head/sys/dev/mrsas/mrsas_cam.c	Thu Jun  2 12:01:58 2016	(r301202)
+++ head/sys/dev/mrsas/mrsas_cam.c	Thu Jun  2 12:26:55 2016	(r301203)
@@ -880,7 +880,9 @@ mrsas_setup_io(struct mrsas_softc *sc, s
 		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, s
 		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_se
 	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_se
 			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_se
 				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_se
 				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);

Modified: head/sys/dev/mrsas/mrsas_fp.c
==============================================================================
--- head/sys/dev/mrsas/mrsas_fp.c	Thu Jun  2 12:01:58 2016	(r301202)
+++ head/sys/dev/mrsas/mrsas_fp.c	Thu Jun  2 12:26:55 2016	(r301203)
@@ -752,7 +752,9 @@ mr_spanset_get_phy_params(struct mrsas_s
 	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 *
 	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, 
 	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);


More information about the svn-src-all mailing list