47 #include <linux/module.h>
48 #include <linux/kernel.h>
49 #include <linux/slab.h>
51 #include <linux/errno.h>
52 #include <linux/kdev_t.h>
56 #include <linux/reboot.h>
60 #include <scsi/scsi.h>
73 #define my_NAME "Fusion MPT SPI Host driver"
74 #define my_VERSION MPT_LINUX_VERSION_COMMON
75 #define MYNAM "mptspi"
85 MODULE_PARM_DESC(mpt_saf_te,
" Force enabling SEP Processor: enable=1 (default=MPTSCSIH_SAF_TE=0)");
87 static void mptspi_write_offset(
struct scsi_target *,
int);
88 static void mptspi_write_width(
struct scsi_target *,
int);
89 static int mptspi_write_spi_device_pg1(
struct scsi_target *,
108 mptspi_setTargetNegoParms(MPT_SCSI_HOST *hd, VirtTarget *
target,
111 MPT_ADAPTER *
ioc = hd->ioc;
112 SpiCfgData *pspi_data = &ioc->spi_data;
113 int id = (
int) target->id;
121 target->negoFlags = pspi_data->noQas;
126 offset = pspi_data->maxSyncOffset;
127 target->tflags &= ~MPT_TARGET_FLAGS_Q_YES;
129 if (scsi_device_wide(sdev))
132 if (scsi_device_sync(sdev)) {
133 factor = pspi_data->minSyncFactor;
134 if (!scsi_device_dt(sdev))
137 if (!scsi_device_ius(sdev) &&
138 !scsi_device_qas(sdev))
142 if (scsi_device_qas(sdev)) {
144 printk(MYIOC_s_DEBUG_FMT
"Enabling QAS due to "
145 "byte56=%02x on id=%d!\n", ioc->name,
146 scsi_device_qas(sdev),
id));
150 scsi_device_ius(sdev))
151 target->negoFlags |= MPT_TAPE_NEGO_IDP;
154 offset = pspi_data->maxSyncOffset;
162 if (target->raidVolume == 1)
171 target->tflags &= ~MPT_TARGET_FLAGS_Q_YES;
175 if (pspi_data->nvram && (pspi_data->nvram[
id] != MPT_HOST_NVRAM_INVALID)) {
177 nfactor = (
nvram & MPT_NVRAM_SYNC_MASK) >> 8;
180 width =
nvram & MPT_NVRAM_WIDE_DISABLE ? 0 : 1;
187 if (nfactor < pspi_data->minSyncFactor )
188 nfactor = pspi_data->minSyncFactor;
190 factor =
max(factor, nfactor);
209 target->minSyncFactor = factor;
210 target->maxOffset =
offset;
211 target->maxWidth =
width;
217 target->tflags |= MPT_TARGET_FLAGS_VALID_NEGO;
222 target->negoFlags |= MPT_TARGET_NO_NEGO_WIDE;
225 target->negoFlags |= MPT_TARGET_NO_NEGO_SYNC;
230 if (noQas && (pspi_data->noQas == 0)) {
231 pspi_data->noQas |= MPT_TARGET_NO_NEGO_QAS;
232 target->negoFlags |= MPT_TARGET_NO_NEGO_QAS;
238 "Disabling QAS due to noQas=%02x on id=%d!\n", ioc->name, noQas,
id));
254 mptspi_writeIOCPage4(MPT_SCSI_HOST *hd,
u8 channel ,
u8 id)
256 MPT_ADAPTER *ioc = hd->ioc;
270 "writeIOCPage4 : no msg frames!\n",ioc->name));
279 req_idx =
le16_to_cpu(mf->u.frame.hwhdr.msgctxu.fld.req_idx);
280 frameOffset = ioc->req_sz -
sizeof(
IOCPage4_t);
291 for (ii=0; ii < 8; ii++) {
295 IOCPage4Ptr = ioc->spi_data.pIocPg4;
296 dataDma = ioc->spi_data.IocPg4_dma;
308 ioc->add_sge((
char *)&pReq->
PageBufferSGE, flagsLength, dataDma);
311 "writeIOCPage4: MaxSEP=%d ActiveSEP=%d id=%d bus=%d\n",
333 mptspi_initTarget(MPT_SCSI_HOST *hd, VirtTarget *vtarget,
346 vtarget->type = sdev->
type;
351 vtarget->tflags |= MPT_TARGET_FLAGS_SAF_TE_ISSUED;
352 mptspi_writeIOCPage4(hd, vtarget->channel, vtarget->id);
354 !(vtarget->tflags & MPT_TARGET_FLAGS_SAF_TE_ISSUED )) {
356 if (sdev->
inquiry[44] ==
'S' &&
362 vtarget->tflags |= MPT_TARGET_FLAGS_SAF_TE_ISSUED;
363 mptspi_writeIOCPage4(hd, vtarget->channel, vtarget->id);
367 mptspi_setTargetNegoParms(hd, vtarget, sdev);
381 mptspi_is_raid(
struct _MPT_SCSI_HOST *hd,
u32 id)
384 MPT_ADAPTER *ioc = hd->ioc;
386 if (!ioc->raid_data.pIocPg2)
389 if (!ioc->raid_data.pIocPg2->NumActiveVolumes)
391 for (i=0; i < ioc->raid_data.pIocPg2->NumActiveVolumes; i++) {
392 if (ioc->raid_data.pIocPg2->RaidVolume[i].VolumeID ==
id) {
402 static int mptspi_target_alloc(
struct scsi_target *starget)
405 struct _MPT_SCSI_HOST *hd = shost_priv(shost);
413 vtarget = kzalloc(
sizeof(VirtTarget),
GFP_KERNEL);
417 vtarget->ioc_id = ioc->id;
418 vtarget->tflags = MPT_TARGET_FLAGS_Q_YES;
419 vtarget->id = (
u8)starget->
id;
421 vtarget->starget = starget;
429 vtarget->channel = 0;
436 mptspi_is_raid(hd, starget->
id)) {
437 vtarget->raidVolume = 1;
439 "RAID Volume @ channel=%d id=%d\n", ioc->name, starget->
channel,
443 if (ioc->spi_data.nvram &&
444 ioc->spi_data.nvram[starget->
id] != MPT_HOST_NVRAM_INVALID) {
446 spi_min_period(starget) = (nvram & MPT_NVRAM_SYNC_MASK) >> MPT_NVRAM_SYNC_SHIFT;
447 spi_max_width(starget) = nvram & MPT_NVRAM_WIDE_DISABLE ? 0 : 1;
456 mptspi_write_width(starget, 0);
477 mptspi_print_write_nego(
struct _MPT_SCSI_HOST *hd,
struct scsi_target *starget,
u32 ii)
480 " ( %s factor = 0x%02x @ offset = 0x%02x %s%s%s%s%s%s%s%s)\n",
481 hd->ioc->name, starget->
id, ii,
483 ((ii >> 8) & 0xFF), ((ii >> 16) & 0xFF),
502 mptspi_print_read_nego(
struct _MPT_SCSI_HOST *hd,
struct scsi_target *starget,
u32 ii)
505 " ( %s factor = 0x%02x @ offset = 0x%02x %s%s%s%s%s%s%s%s)\n",
506 hd->ioc->name, starget->
id, ii,
508 ((ii >> 8) & 0xFF), ((ii >> 16) & 0xFF),
519 static int mptspi_read_spi_device_pg0(
struct scsi_target *starget,
523 struct _MPT_SCSI_HOST *hd = shost_priv(shost);
524 struct _MPT_ADAPTER *ioc = hd->ioc;
528 struct _x_config_parms
cfg;
534 mptspi_is_raid(hd, starget->
id))
537 size = ioc->spi_data.sdp0length * 4;
545 if (spi_dev_pg0 ==
NULL) {
547 "dma_alloc_coherent for parameters failed\n", ioc->name);
553 hdr.PageVersion = ioc->spi_data.sdp0version;
554 hdr.PageLength = ioc->spi_data.sdp0length;
561 cfg.physAddr = spi_dev_pg0_dma;
564 cfg.pageAddr = starget->
id;
572 memcpy(pass_pg0, spi_dev_pg0, size);
601 static void mptspi_read_parameters(
struct scsi_target *starget)
606 mptspi_read_spi_device_pg0(starget, &spi_dev_pg0);
626 MPT_ADAPTER *ioc = hd->ioc;
630 unsigned long timeleft;
638 "%s: no msg frames!\n", ioc->name, __func__));
660 ddvprintk(ioc,
printk(MYIOC_s_DEBUG_FMT
"RAID Volume action=%x channel=%d id=%d\n",
661 ioc->name, pReq->
Action, channel,
id));
663 INITIALIZE_MGMT_STATUS(ioc->internal_cmds.status)
666 if (!(ioc->internal_cmds.status & MPT_MGMT_STATUS_COMMAND_GOOD)) {
669 ioc->name, __func__));
670 if (ioc->internal_cmds.status & MPT_MGMT_STATUS_DID_IOCRESET)
673 printk(MYIOC_s_WARN_FMT
"Issuing Reset from %s!!\n",
674 ioc->name, __func__);
681 ret = ioc->internal_cmds.completion_code;
684 CLEAR_MGMT_STATUS(ioc->internal_cmds.status)
689 static void mptspi_dv_device(
struct _MPT_SCSI_HOST *hd,
693 MPT_ADAPTER *ioc = hd->ioc;
697 mptspi_is_raid(hd, sdev->
id))
704 "Integrated RAID quiesce failed\n", ioc->name);
708 hd->spi_pending |= (1 << sdev->
id);
710 hd->spi_pending &= ~(1 << sdev->
id);
715 "Integrated RAID resume failed\n", ioc->name);
722 static int mptspi_slave_alloc(
struct scsi_device *sdev)
724 MPT_SCSI_HOST *hd = shost_priv(sdev->
host);
728 MPT_ADAPTER *ioc = hd->ioc;
734 vdevice = kzalloc(
sizeof(VirtDevice),
GFP_KERNEL);
736 printk(MYIOC_s_ERR_FMT
"slave_alloc kmalloc(%zd) FAILED!\n",
737 ioc->name,
sizeof(VirtDevice));
741 vdevice->lun = sdev->
lun;
746 vdevice->vtarget = vtarget;
755 static int mptspi_slave_configure(
struct scsi_device *sdev)
757 struct _MPT_SCSI_HOST *hd = shost_priv(sdev->
host);
761 mptspi_initTarget(hd, vtarget, sdev);
769 " max_offset=0x%02x max_width=%d\n", hd->ioc->name,
775 !(mptspi_is_raid(hd, sdev->
id))) &&
777 mptspi_dv_device(hd, sdev);
785 struct _MPT_SCSI_HOST *hd = shost_priv(SCpnt->
device->host);
786 VirtDevice *vdevice = SCpnt->
device->hostdata;
787 MPT_ADAPTER *ioc = hd->ioc;
789 if (!vdevice || !vdevice->vtarget) {
795 if (SCpnt->
device->channel == 1 &&
813 VirtTarget *vtarget = starget->
hostdata;
814 VirtDevice *vdevice = sdev->hostdata;
817 if (vtarget->num_luns == 1 && vdevice->configured_lun) {
823 pg1.Configuration = 0;
825 mptspi_write_spi_device_pg1(starget, &pg1);
833 .proc_name =
"mptspi",
835 .name =
"MPT SPI Host",
837 .queuecommand = mptspi_qcmd,
838 .target_alloc = mptspi_target_alloc,
839 .slave_alloc = mptspi_slave_alloc,
840 .slave_configure = mptspi_slave_configure,
841 .target_destroy = mptspi_target_destroy,
842 .slave_destroy = mptspi_slave_destroy,
858 static int mptspi_write_spi_device_pg1(
struct scsi_target *starget,
862 struct _MPT_SCSI_HOST *hd = shost_priv(shost);
863 struct _MPT_ADAPTER *ioc = hd->ioc;
867 struct _x_config_parms
cfg;
877 mptspi_is_raid(hd, starget->
id))
880 size = ioc->spi_data.sdp1length * 4;
885 "dma_alloc_coherent for parameters failed\n", ioc->name);
891 hdr.PageVersion = ioc->spi_data.sdp1version;
892 hdr.PageLength = ioc->spi_data.sdp1length;
899 cfg.physAddr = pg1_dma;
902 cfg.pageAddr = starget->
id;
904 memcpy(pg1, pass_pg1, size);
916 for (i = 0 ; i < 16; i++) {
920 "IDP:ON\n", ioc->name);
933 "mpt_config failed\n", ioc->name);
955 mptspi_read_parameters(starget);
959 nego = mptspi_getRP(starget);
965 mptspi_write_spi_device_pg1(starget, &pg1);
968 static void mptspi_write_period(
struct scsi_target *starget,
int period)
980 mptspi_read_parameters(starget);
985 }
else if (period == 9) {
991 nego = mptspi_getRP(starget);
997 mptspi_write_spi_device_pg1(starget, &pg1);
1000 static void mptspi_write_dt(
struct scsi_target *starget,
int dt)
1006 mptspi_read_parameters(starget);
1013 nego = mptspi_getRP(starget);
1020 mptspi_write_spi_device_pg1(starget, &pg1);
1023 static void mptspi_write_iu(
struct scsi_target *starget,
int iu)
1029 mptspi_read_parameters(starget);
1036 nego = mptspi_getRP(starget);
1042 mptspi_write_spi_device_pg1(starget, &pg1);
1045 #define MPTSPI_SIMPLE_TRANSPORT_PARM(parm) \
1046 static void mptspi_write_##parm(struct scsi_target *starget, int parm)\
1048 struct _CONFIG_PAGE_SCSI_DEVICE_1 pg1; \
1051 spi_##parm(starget) = parm; \
1053 nego = mptspi_getRP(starget); \
1055 pg1.RequestedParameters = cpu_to_le32(nego); \
1057 pg1.Configuration = 0; \
1059 mptspi_write_spi_device_pg1(starget, &pg1); \
1071 struct Scsi_Host *shost = dev_to_shost(&starget->dev);
1072 struct _MPT_SCSI_HOST *hd = shost_priv(shost);
1073 VirtTarget *vtarget = starget->hostdata;
1076 if ((vtarget->negoFlags & MPT_TARGET_NO_NEGO_QAS) ||
1077 hd->ioc->spi_data.noQas)
1082 nego = mptspi_getRP(starget);
1088 mptspi_write_spi_device_pg1(starget, &pg1);
1104 nego = mptspi_getRP(starget);
1110 mptspi_write_spi_device_pg1(starget, &pg1);
1115 struct _MPT_SCSI_HOST *
hd;
1123 struct _MPT_SCSI_HOST *hd = wqw->
hd;
1124 MPT_ADAPTER *ioc = hd->ioc;
1127 int disk = wqw->
disk;
1133 pg3 = ioc->raid_data.pIocPg3;
1139 VirtTarget *vtarget = starget->
hostdata;
1147 if(vtarget->id != disk)
1151 "Integrated RAID requests DV of new device\n", ioc->name);
1152 mptspi_dv_device(hd, sdev);
1155 "Integrated RAID detects new device %d\n", ioc->name, disk);
1160 static void mpt_dv_raid(
struct _MPT_SCSI_HOST *hd,
int disk)
1163 MPT_ADAPTER *ioc = hd->ioc;
1167 "Failed to act on RAID event for physical disk %d\n",
1182 struct _MPT_SCSI_HOST *hd = shost_priv(ioc->sh);
1184 if (ioc->bus_type !=
SPI)
1193 mpt_dv_raid(hd, disk);
1202 struct _MPT_SCSI_HOST *hd =
1203 (
struct _MPT_SCSI_HOST *)dev_to_shost(starget->
dev.parent)->hostdata;
1204 return ((mptspi_is_raid(hd, starget->
id)) &&
1205 starget->
channel == 0) ? 1 : 0;
1209 .get_offset = mptspi_read_parameters,
1210 .set_offset = mptspi_write_offset,
1212 .get_period = mptspi_read_parameters,
1213 .set_period = mptspi_write_period,
1215 .get_width = mptspi_read_parameters,
1216 .set_width = mptspi_write_width,
1218 .get_iu = mptspi_read_parameters,
1219 .set_iu = mptspi_write_iu,
1221 .get_dt = mptspi_read_parameters,
1222 .set_dt = mptspi_write_dt,
1224 .get_qas = mptspi_read_parameters,
1225 .set_qas = mptspi_write_qas,
1227 .get_wr_flow = mptspi_read_parameters,
1228 .set_wr_flow = mptspi_write_wr_flow,
1230 .get_rd_strm = mptspi_read_parameters,
1231 .set_rd_strm = mptspi_write_rd_strm,
1233 .get_rti = mptspi_read_parameters,
1234 .set_rti = mptspi_write_rti,
1236 .get_pcomp_en = mptspi_read_parameters,
1237 .set_pcomp_en = mptspi_write_pcomp_en,
1239 .get_hold_mcs = mptspi_read_parameters,
1240 .set_hold_mcs = mptspi_write_hold_mcs,
1242 .deny_binding = mptspi_deny_binding,
1269 struct _MPT_SCSI_HOST *hd = wqw->
hd;
1274 MPT_ADAPTER *ioc = hd->ioc;
1278 if (hd->spi_pending) {
1280 if (hd->spi_pending & (1 << sdev->
id))
1283 nego = mptspi_getRP(starget);
1287 mptspi_write_spi_device_pg1(starget, &pg1);
1291 mptspi_dv_device(hd, sdev);
1296 mptspi_dv_renegotiate(
struct _MPT_SCSI_HOST *hd)
1313 mptspi_ioc_reset(MPT_ADAPTER *ioc,
int reset_phase)
1318 if ((ioc->bus_type !=
SPI) || (!rc))
1323 if (reset_phase == MPT_IOC_POST_RESET &&
1325 struct _MPT_SCSI_HOST *hd = shost_priv(ioc->sh);
1327 mptspi_dv_renegotiate(hd);
1338 mptspi_resume(
struct pci_dev *pdev)
1340 MPT_ADAPTER *ioc = pci_get_drvdata(pdev);
1341 struct _MPT_SCSI_HOST *hd = shost_priv(ioc->sh);
1344 rc = mptscsih_resume(pdev);
1345 mptspi_dv_renegotiate(hd);
1366 unsigned long flags;
1377 ioc = pci_get_drvdata(pdev);
1378 ioc->DoneCtx = mptspiDoneCtx;
1379 ioc->TaskCtx = mptspiTaskCtx;
1380 ioc->InternalCtx = mptspiInternalCtx;
1386 "Skipping because it's not operational!\n",
1389 goto out_mptspi_probe;
1393 printk(MYIOC_s_WARN_FMT
"Skipping because it's disabled!\n",
1396 goto out_mptspi_probe;
1402 for (ii=0; ii < ioc->facts.NumberOfPorts; ii++) {
1403 if (ioc->pfacts[ii].ProtocolFlags &
1410 "Skipping ioc=%p because SCSI Initiator mode is NOT enabled!\n",
1419 "Unable to register controller with SCSI subsystem\n",
1422 goto out_mptspi_probe;
1448 sh->
max_id = ioc->devices_per_bus;
1454 if (ioc->ir_firmware)
1458 sh->
this_id = ioc->pfacts[0].PortSCSIID;
1473 scale = ioc->req_sz/ioc->SGE_size;
1474 if (ioc->sg_addr_size ==
sizeof(
u64)) {
1475 numSGE = (scale - 1) *
1476 (ioc->facts.MaxChainDepth-1) + scale +
1477 (ioc->req_sz - 60) / ioc->SGE_size;
1479 numSGE = 1 + (scale - 1) *
1480 (ioc->facts.MaxChainDepth-1) + scale +
1481 (ioc->req_sz - 64) / ioc->SGE_size;
1487 "Resetting sg_tablesize to %d from %d\n",
1492 spin_unlock_irqrestore(&ioc->FreeQlock, flags);
1494 hd = shost_priv(sh);
1500 ioc->ScsiLookup = kcalloc(ioc->req_depth,
sizeof(
void *),
GFP_ATOMIC);
1501 if (!ioc->ScsiLookup) {
1503 goto out_mptspi_probe;
1508 ioc->name, ioc->ScsiLookup));
1510 ioc->spi_data.Saf_Te = mpt_saf_te;
1515 ioc->spi_data.noQas = 0;
1517 hd->last_queue_full = 0;
1518 hd->spi_pending = 0;
1522 if (ioc->spi_data.sdp0length != 0)
1525 error = scsi_add_host (sh, &ioc->pcidev->dev);
1528 "scsi_add_host failed\n", ioc->name));
1529 goto out_mptspi_probe;
1535 if (ioc->spi_data.bus_reset)
1551 .id_table = mptspi_pci_table,
1552 .probe = mptspi_probe,
1556 .suspend = mptscsih_suspend,
1557 .resume = mptspi_resume,
1575 if (!mptspi_transport_template)
1579 "mptscsih_io_done");
1581 "mptscsih_taskmgmt_complete");
1583 MPTSPI_DRIVER,
"mptscsih_scandv_complete");
1588 error = pci_register_driver(&mptspi_driver);