@@ -1220,31 +1220,25 @@ mpt_attach(struct pci_dev *pdev, const struct pci_device_id *id)
12201220 port = psize = 0 ;
12211221 for (ii = 0 ; ii < DEVICE_COUNT_RESOURCE ; ii ++ ) {
12221222 if (pci_resource_flags (pdev , ii ) & PCI_BASE_ADDRESS_SPACE_IO ) {
1223+ if (psize )
1224+ continue ;
12231225 /* Get I/O space! */
12241226 port = pci_resource_start (pdev , ii );
12251227 psize = pci_resource_len (pdev ,ii );
12261228 } else {
1229+ if (msize )
1230+ continue ;
12271231 /* Get memmap */
12281232 mem_phys = pci_resource_start (pdev , ii );
12291233 msize = pci_resource_len (pdev ,ii );
1230- break ;
12311234 }
12321235 }
12331236 ioc -> mem_size = msize ;
12341237
1235- if (ii == DEVICE_COUNT_RESOURCE ) {
1236- printk (KERN_ERR MYNAM ": ERROR - MPT adapter has no memory regions defined!\n" );
1237- kfree (ioc );
1238- return - EINVAL ;
1239- }
1240-
1241- dinitprintk ((KERN_INFO MYNAM ": MPT adapter @ %lx, msize=%dd bytes\n" , mem_phys , msize ));
1242- dinitprintk ((KERN_INFO MYNAM ": (port i/o @ %lx, psize=%dd bytes)\n" , port , psize ));
1243-
12441238 mem = NULL ;
12451239 /* Get logical ptr for PciMem0 space */
12461240 /*mem = ioremap(mem_phys, msize);*/
1247- mem = ioremap (mem_phys , 0x100 );
1241+ mem = ioremap (mem_phys , msize );
12481242 if (mem == NULL ) {
12491243 printk (KERN_ERR MYNAM ": ERROR - Unable to map adapter memory!\n" );
12501244 kfree (ioc );
@@ -1344,11 +1338,6 @@ mpt_attach(struct pci_dev *pdev, const struct pci_device_id *id)
13441338 ioc -> bus_type = SAS ;
13451339 ioc -> errata_flag_1064 = 1 ;
13461340 }
1347- else if (pdev -> device == MPI_MANUFACTPAGE_DEVID_SAS1066 ) {
1348- ioc -> prod_name = "LSISAS1066" ;
1349- ioc -> bus_type = SAS ;
1350- ioc -> errata_flag_1064 = 1 ;
1351- }
13521341 else if (pdev -> device == MPI_MANUFACTPAGE_DEVID_SAS1068 ) {
13531342 ioc -> prod_name = "LSISAS1068" ;
13541343 ioc -> bus_type = SAS ;
@@ -1358,14 +1347,14 @@ mpt_attach(struct pci_dev *pdev, const struct pci_device_id *id)
13581347 ioc -> prod_name = "LSISAS1064E" ;
13591348 ioc -> bus_type = SAS ;
13601349 }
1361- else if (pdev -> device == MPI_MANUFACTPAGE_DEVID_SAS1066E ) {
1362- ioc -> prod_name = "LSISAS1066E" ;
1363- ioc -> bus_type = SAS ;
1364- }
13651350 else if (pdev -> device == MPI_MANUFACTPAGE_DEVID_SAS1068E ) {
13661351 ioc -> prod_name = "LSISAS1068E" ;
13671352 ioc -> bus_type = SAS ;
13681353 }
1354+ else if (pdev -> device == MPI_MANUFACTPAGE_DEVID_SAS1078 ) {
1355+ ioc -> prod_name = "LSISAS1078" ;
1356+ ioc -> bus_type = SAS ;
1357+ }
13691358
13701359 if (ioc -> errata_flag_1064 )
13711360 pci_disable_io_access (pdev );
@@ -3185,6 +3174,37 @@ mpt_diag_reset(MPT_ADAPTER *ioc, int ignore, int sleepFlag)
31853174 u32 diag1val = 0 ;
31863175#endif
31873176
3177+ if (ioc -> pcidev -> device == MPI_MANUFACTPAGE_DEVID_SAS1078 ) {
3178+ drsprintk ((MYIOC_s_WARN_FMT "%s: Doorbell=%p; 1078 reset "
3179+ "address=%p\n" , ioc -> name , __FUNCTION__ ,
3180+ & ioc -> chip -> Doorbell , & ioc -> chip -> Reset_1078 ));
3181+ CHIPREG_WRITE32 (& ioc -> chip -> Reset_1078 , 0x07 );
3182+ if (sleepFlag == CAN_SLEEP )
3183+ msleep (1 );
3184+ else
3185+ mdelay (1 );
3186+
3187+ for (count = 0 ; count < 60 ; count ++ ) {
3188+ doorbell = CHIPREG_READ32 (& ioc -> chip -> Doorbell );
3189+ doorbell &= MPI_IOC_STATE_MASK ;
3190+
3191+ drsprintk ((MYIOC_s_INFO_FMT
3192+ "looking for READY STATE: doorbell=%x"
3193+ " count=%d\n" ,
3194+ ioc -> name , doorbell , count ));
3195+ if (doorbell == MPI_IOC_STATE_READY ) {
3196+ return 0 ;
3197+ }
3198+
3199+ /* wait 1 sec */
3200+ if (sleepFlag == CAN_SLEEP )
3201+ msleep (1000 );
3202+ else
3203+ mdelay (1000 );
3204+ }
3205+ return -1 ;
3206+ }
3207+
31883208 /* Clear any existing interrupts */
31893209 CHIPREG_WRITE32 (& ioc -> chip -> IntStatus , 0 );
31903210
0 commit comments