Lines Matching refs:pm8001_ha
119 static void pm8001_phy_init(struct pm8001_hba_info *pm8001_ha, int phy_id) in pm8001_phy_init() argument
121 struct pm8001_phy *phy = &pm8001_ha->phy[phy_id]; in pm8001_phy_init()
124 phy->pm8001_ha = pm8001_ha; in pm8001_phy_init()
125 sas_phy->enabled = (phy_id < pm8001_ha->chip->n_phy) ? 1 : 0; in pm8001_phy_init()
136 sas_phy->ha = (struct sas_ha_struct *)pm8001_ha->shost->hostdata; in pm8001_phy_init()
145 static void pm8001_free(struct pm8001_hba_info *pm8001_ha) in pm8001_free() argument
149 if (!pm8001_ha) in pm8001_free()
153 if (pm8001_ha->memoryMap.region[i].virt_ptr != NULL) { in pm8001_free()
154 dma_free_coherent(&pm8001_ha->pdev->dev, in pm8001_free()
155 (pm8001_ha->memoryMap.region[i].total_len + in pm8001_free()
156 pm8001_ha->memoryMap.region[i].alignment), in pm8001_free()
157 pm8001_ha->memoryMap.region[i].virt_ptr, in pm8001_free()
158 pm8001_ha->memoryMap.region[i].phys_addr); in pm8001_free()
161 PM8001_CHIP_DISP->chip_iounmap(pm8001_ha); in pm8001_free()
163 kfree(pm8001_ha->tags); in pm8001_free()
164 kfree(pm8001_ha); in pm8001_free()
176 struct pm8001_hba_info *pm8001_ha; in pm8001_tasklet() local
180 pm8001_ha = irq_vector->drv_inst; in pm8001_tasklet()
181 if (unlikely(!pm8001_ha)) in pm8001_tasklet()
183 PM8001_CHIP_DISP->isr(pm8001_ha, irq_vector->irq_id); in pm8001_tasklet()
197 struct pm8001_hba_info *pm8001_ha; in pm8001_interrupt_handler_msix() local
200 pm8001_ha = irq_vector->drv_inst; in pm8001_interrupt_handler_msix()
202 if (unlikely(!pm8001_ha)) in pm8001_interrupt_handler_msix()
204 if (!PM8001_CHIP_DISP->is_our_interrupt(pm8001_ha)) in pm8001_interrupt_handler_msix()
207 tasklet_schedule(&pm8001_ha->tasklet[irq_vector->irq_id]); in pm8001_interrupt_handler_msix()
209 ret = PM8001_CHIP_DISP->isr(pm8001_ha, irq_vector->irq_id); in pm8001_interrupt_handler_msix()
221 struct pm8001_hba_info *pm8001_ha; in pm8001_interrupt_handler_intx() local
224 pm8001_ha = sha->lldd_ha; in pm8001_interrupt_handler_intx()
225 if (unlikely(!pm8001_ha)) in pm8001_interrupt_handler_intx()
227 if (!PM8001_CHIP_DISP->is_our_interrupt(pm8001_ha)) in pm8001_interrupt_handler_intx()
231 tasklet_schedule(&pm8001_ha->tasklet[0]); in pm8001_interrupt_handler_intx()
233 ret = PM8001_CHIP_DISP->isr(pm8001_ha, 0); in pm8001_interrupt_handler_intx()
243 static int pm8001_alloc(struct pm8001_hba_info *pm8001_ha, in pm8001_alloc() argument
247 spin_lock_init(&pm8001_ha->lock); in pm8001_alloc()
248 spin_lock_init(&pm8001_ha->bitmap_lock); in pm8001_alloc()
249 PM8001_INIT_DBG(pm8001_ha, in pm8001_alloc()
251 pm8001_ha->chip->n_phy)); in pm8001_alloc()
252 for (i = 0; i < pm8001_ha->chip->n_phy; i++) { in pm8001_alloc()
253 pm8001_phy_init(pm8001_ha, i); in pm8001_alloc()
254 pm8001_ha->port[i].wide_port_phymap = 0; in pm8001_alloc()
255 pm8001_ha->port[i].port_attached = 0; in pm8001_alloc()
256 pm8001_ha->port[i].port_state = 0; in pm8001_alloc()
257 INIT_LIST_HEAD(&pm8001_ha->port[i].list); in pm8001_alloc()
260 pm8001_ha->tags = kzalloc(PM8001_MAX_CCB, GFP_KERNEL); in pm8001_alloc()
261 if (!pm8001_ha->tags) in pm8001_alloc()
264 pm8001_ha->memoryMap.region[AAP1].num_elements = 1; in pm8001_alloc()
265 pm8001_ha->memoryMap.region[AAP1].element_size = PM8001_EVENT_LOG_SIZE; in pm8001_alloc()
266 pm8001_ha->memoryMap.region[AAP1].total_len = PM8001_EVENT_LOG_SIZE; in pm8001_alloc()
267 pm8001_ha->memoryMap.region[AAP1].alignment = 32; in pm8001_alloc()
270 pm8001_ha->memoryMap.region[IOP].num_elements = 1; in pm8001_alloc()
271 pm8001_ha->memoryMap.region[IOP].element_size = PM8001_EVENT_LOG_SIZE; in pm8001_alloc()
272 pm8001_ha->memoryMap.region[IOP].total_len = PM8001_EVENT_LOG_SIZE; in pm8001_alloc()
273 pm8001_ha->memoryMap.region[IOP].alignment = 32; in pm8001_alloc()
277 pm8001_ha->memoryMap.region[CI+i].num_elements = 1; in pm8001_alloc()
278 pm8001_ha->memoryMap.region[CI+i].element_size = 4; in pm8001_alloc()
279 pm8001_ha->memoryMap.region[CI+i].total_len = 4; in pm8001_alloc()
280 pm8001_ha->memoryMap.region[CI+i].alignment = 4; in pm8001_alloc()
284 pm8001_ha->memoryMap.region[IB+i].num_elements = in pm8001_alloc()
286 pm8001_ha->memoryMap.region[IB+i].element_size = 128; in pm8001_alloc()
287 pm8001_ha->memoryMap.region[IB+i].total_len = in pm8001_alloc()
289 pm8001_ha->memoryMap.region[IB+i].alignment = 128; in pm8001_alloc()
291 pm8001_ha->memoryMap.region[IB+i].num_elements = in pm8001_alloc()
293 pm8001_ha->memoryMap.region[IB+i].element_size = 64; in pm8001_alloc()
294 pm8001_ha->memoryMap.region[IB+i].total_len = in pm8001_alloc()
296 pm8001_ha->memoryMap.region[IB+i].alignment = 64; in pm8001_alloc()
302 pm8001_ha->memoryMap.region[PI+i].num_elements = 1; in pm8001_alloc()
303 pm8001_ha->memoryMap.region[PI+i].element_size = 4; in pm8001_alloc()
304 pm8001_ha->memoryMap.region[PI+i].total_len = 4; in pm8001_alloc()
305 pm8001_ha->memoryMap.region[PI+i].alignment = 4; in pm8001_alloc()
309 pm8001_ha->memoryMap.region[OB+i].num_elements = in pm8001_alloc()
311 pm8001_ha->memoryMap.region[OB+i].element_size = 128; in pm8001_alloc()
312 pm8001_ha->memoryMap.region[OB+i].total_len = in pm8001_alloc()
314 pm8001_ha->memoryMap.region[OB+i].alignment = 128; in pm8001_alloc()
317 pm8001_ha->memoryMap.region[OB+i].num_elements = in pm8001_alloc()
319 pm8001_ha->memoryMap.region[OB+i].element_size = 64; in pm8001_alloc()
320 pm8001_ha->memoryMap.region[OB+i].total_len = in pm8001_alloc()
322 pm8001_ha->memoryMap.region[OB+i].alignment = 64; in pm8001_alloc()
327 pm8001_ha->memoryMap.region[NVMD].num_elements = 1; in pm8001_alloc()
328 pm8001_ha->memoryMap.region[NVMD].element_size = 4096; in pm8001_alloc()
329 pm8001_ha->memoryMap.region[NVMD].total_len = 4096; in pm8001_alloc()
331 pm8001_ha->memoryMap.region[DEV_MEM].num_elements = 1; in pm8001_alloc()
332 pm8001_ha->memoryMap.region[DEV_MEM].element_size = PM8001_MAX_DEVICES * in pm8001_alloc()
334 pm8001_ha->memoryMap.region[DEV_MEM].total_len = PM8001_MAX_DEVICES * in pm8001_alloc()
338 pm8001_ha->memoryMap.region[CCB_MEM].num_elements = 1; in pm8001_alloc()
339 pm8001_ha->memoryMap.region[CCB_MEM].element_size = PM8001_MAX_CCB * in pm8001_alloc()
341 pm8001_ha->memoryMap.region[CCB_MEM].total_len = PM8001_MAX_CCB * in pm8001_alloc()
345 pm8001_ha->memoryMap.region[FW_FLASH].total_len = 4096; in pm8001_alloc()
347 pm8001_ha->memoryMap.region[FORENSIC_MEM].num_elements = 1; in pm8001_alloc()
348 pm8001_ha->memoryMap.region[FORENSIC_MEM].total_len = 0x10000; in pm8001_alloc()
349 pm8001_ha->memoryMap.region[FORENSIC_MEM].element_size = 0x10000; in pm8001_alloc()
350 pm8001_ha->memoryMap.region[FORENSIC_MEM].alignment = 0x10000; in pm8001_alloc()
352 if (pm8001_mem_alloc(pm8001_ha->pdev, in pm8001_alloc()
353 &pm8001_ha->memoryMap.region[i].virt_ptr, in pm8001_alloc()
354 &pm8001_ha->memoryMap.region[i].phys_addr, in pm8001_alloc()
355 &pm8001_ha->memoryMap.region[i].phys_addr_hi, in pm8001_alloc()
356 &pm8001_ha->memoryMap.region[i].phys_addr_lo, in pm8001_alloc()
357 pm8001_ha->memoryMap.region[i].total_len, in pm8001_alloc()
358 pm8001_ha->memoryMap.region[i].alignment) != 0) { in pm8001_alloc()
359 PM8001_FAIL_DBG(pm8001_ha, in pm8001_alloc()
366 pm8001_ha->devices = pm8001_ha->memoryMap.region[DEV_MEM].virt_ptr; in pm8001_alloc()
368 pm8001_ha->devices[i].dev_type = SAS_PHY_UNUSED; in pm8001_alloc()
369 pm8001_ha->devices[i].id = i; in pm8001_alloc()
370 pm8001_ha->devices[i].device_id = PM8001_MAX_DEVICES; in pm8001_alloc()
371 pm8001_ha->devices[i].running_req = 0; in pm8001_alloc()
373 pm8001_ha->ccb_info = pm8001_ha->memoryMap.region[CCB_MEM].virt_ptr; in pm8001_alloc()
375 pm8001_ha->ccb_info[i].ccb_dma_handle = in pm8001_alloc()
376 pm8001_ha->memoryMap.region[CCB_MEM].phys_addr + in pm8001_alloc()
378 pm8001_ha->ccb_info[i].task = NULL; in pm8001_alloc()
379 pm8001_ha->ccb_info[i].ccb_tag = 0xffffffff; in pm8001_alloc()
380 pm8001_ha->ccb_info[i].device = NULL; in pm8001_alloc()
381 ++pm8001_ha->tags_num; in pm8001_alloc()
383 pm8001_ha->flags = PM8001F_INIT_TIME; in pm8001_alloc()
385 pm8001_tag_init(pm8001_ha); in pm8001_alloc()
396 static int pm8001_ioremap(struct pm8001_hba_info *pm8001_ha) in pm8001_ioremap() argument
402 pdev = pm8001_ha->pdev; in pm8001_ioremap()
416 pm8001_ha->io_mem[logicalBar].membase = in pm8001_ioremap()
418 pm8001_ha->io_mem[logicalBar].memsize = in pm8001_ioremap()
420 pm8001_ha->io_mem[logicalBar].memvirtaddr = in pm8001_ioremap()
421 ioremap(pm8001_ha->io_mem[logicalBar].membase, in pm8001_ioremap()
422 pm8001_ha->io_mem[logicalBar].memsize); in pm8001_ioremap()
423 PM8001_INIT_DBG(pm8001_ha, in pm8001_ioremap()
426 PM8001_INIT_DBG(pm8001_ha, pm8001_printk( in pm8001_ioremap()
428 (u64)pm8001_ha->io_mem[logicalBar].membase, in pm8001_ioremap()
430 pm8001_ha->io_mem[logicalBar].memvirtaddr, in pm8001_ioremap()
431 pm8001_ha->io_mem[logicalBar].memsize)); in pm8001_ioremap()
433 pm8001_ha->io_mem[logicalBar].membase = 0; in pm8001_ioremap()
434 pm8001_ha->io_mem[logicalBar].memsize = 0; in pm8001_ioremap()
435 pm8001_ha->io_mem[logicalBar].memvirtaddr = 0; in pm8001_ioremap()
453 struct pm8001_hba_info *pm8001_ha; in pm8001_pci_alloc() local
457 pm8001_ha = sha->lldd_ha; in pm8001_pci_alloc()
458 if (!pm8001_ha) in pm8001_pci_alloc()
461 pm8001_ha->pdev = pdev; in pm8001_pci_alloc()
462 pm8001_ha->dev = &pdev->dev; in pm8001_pci_alloc()
463 pm8001_ha->chip_id = ent->driver_data; in pm8001_pci_alloc()
464 pm8001_ha->chip = &pm8001_chips[pm8001_ha->chip_id]; in pm8001_pci_alloc()
465 pm8001_ha->irq = pdev->irq; in pm8001_pci_alloc()
466 pm8001_ha->sas = sha; in pm8001_pci_alloc()
467 pm8001_ha->shost = shost; in pm8001_pci_alloc()
468 pm8001_ha->id = pm8001_id++; in pm8001_pci_alloc()
469 pm8001_ha->logging_level = 0x01; in pm8001_pci_alloc()
470 sprintf(pm8001_ha->name, "%s%d", DRV_NAME, pm8001_ha->id); in pm8001_pci_alloc()
472 if (pm8001_ha->chip_id != chip_8001) in pm8001_pci_alloc()
473 pm8001_ha->iomb_size = IOMB_SIZE_SPCV; in pm8001_pci_alloc()
475 pm8001_ha->iomb_size = IOMB_SIZE_SPC; in pm8001_pci_alloc()
480 || (pm8001_ha->chip_id == chip_8001)) in pm8001_pci_alloc()
481 tasklet_init(&pm8001_ha->tasklet[0], pm8001_tasklet, in pm8001_pci_alloc()
482 (unsigned long)&(pm8001_ha->irq_vector[0])); in pm8001_pci_alloc()
485 tasklet_init(&pm8001_ha->tasklet[j], pm8001_tasklet, in pm8001_pci_alloc()
486 (unsigned long)&(pm8001_ha->irq_vector[j])); in pm8001_pci_alloc()
488 pm8001_ioremap(pm8001_ha); in pm8001_pci_alloc()
489 if (!pm8001_alloc(pm8001_ha, ent)) in pm8001_pci_alloc()
490 return pm8001_ha; in pm8001_pci_alloc()
491 pm8001_free(pm8001_ha); in pm8001_pci_alloc()
568 struct pm8001_hba_info *pm8001_ha; in pm8001_post_sas_ha_init() local
571 pm8001_ha = sha->lldd_ha; in pm8001_post_sas_ha_init()
573 sha->sas_phy[i] = &pm8001_ha->phy[i].sas_phy; in pm8001_post_sas_ha_init()
574 sha->sas_port[i] = &pm8001_ha->port[i].sas_port; in pm8001_post_sas_ha_init()
576 (u8 *)&pm8001_ha->phy[i].dev_sas_addr; in pm8001_post_sas_ha_init()
579 sha->dev = pm8001_ha->dev; in pm8001_post_sas_ha_init()
582 sha->sas_addr = &pm8001_ha->sas_addr[0]; in pm8001_post_sas_ha_init()
594 static void pm8001_init_sas_add(struct pm8001_hba_info *pm8001_ha) in pm8001_init_sas_add() argument
608 pci_read_config_word(pm8001_ha->pdev, PCI_DEVICE_ID, &deviceid); in pm8001_init_sas_add()
609 pm8001_ha->nvmd_completion = &completion; in pm8001_init_sas_add()
611 if (pm8001_ha->chip_id == chip_8001) { in pm8001_init_sas_add()
619 } else if ((pm8001_ha->chip_id == chip_8070 || in pm8001_init_sas_add()
620 pm8001_ha->chip_id == chip_8072) && in pm8001_init_sas_add()
621 pm8001_ha->pdev->subsystem_vendor == PCI_VENDOR_ID_ATTO) { in pm8001_init_sas_add()
631 PM8001_INIT_DBG(pm8001_ha, pm8001_printk("mem alloc fail\n")); in pm8001_init_sas_add()
634 rc = PM8001_CHIP_DISP->get_nvmd_req(pm8001_ha, &payload); in pm8001_init_sas_add()
637 PM8001_INIT_DBG(pm8001_ha, pm8001_printk("nvmd failed\n")); in pm8001_init_sas_add()
643 if (pm8001_ha->chip_id == chip_8001) { in pm8001_init_sas_add()
645 pm8001_ha->sas_addr[j] = in pm8001_init_sas_add()
648 pm8001_ha->sas_addr[j] = in pm8001_init_sas_add()
650 } else if ((pm8001_ha->chip_id == chip_8070 || in pm8001_init_sas_add()
651 pm8001_ha->chip_id == chip_8072) && in pm8001_init_sas_add()
652 pm8001_ha->pdev->subsystem_vendor == PCI_VENDOR_ID_ATTO) { in pm8001_init_sas_add()
653 pm8001_ha->sas_addr[j] = in pm8001_init_sas_add()
656 pm8001_ha->sas_addr[j] = in pm8001_init_sas_add()
659 memcpy(sas_add, pm8001_ha->sas_addr, SAS_ADDR_SIZE); in pm8001_init_sas_add()
660 for (i = 0; i < pm8001_ha->chip->n_phy; i++) { in pm8001_init_sas_add()
663 memcpy(&pm8001_ha->phy[i].dev_sas_addr, in pm8001_init_sas_add()
665 PM8001_INIT_DBG(pm8001_ha, in pm8001_init_sas_add()
667 pm8001_ha->phy[i].dev_sas_addr)); in pm8001_init_sas_add()
671 for (i = 0; i < pm8001_ha->chip->n_phy; i++) { in pm8001_init_sas_add()
672 pm8001_ha->phy[i].dev_sas_addr = 0x50010c600047f9d0ULL; in pm8001_init_sas_add()
673 pm8001_ha->phy[i].dev_sas_addr = in pm8001_init_sas_add()
675 (*(u64 *)&pm8001_ha->phy[i].dev_sas_addr)); in pm8001_init_sas_add()
677 memcpy(pm8001_ha->sas_addr, &pm8001_ha->phy[0].dev_sas_addr, in pm8001_init_sas_add()
686 static int pm8001_get_phy_settings_info(struct pm8001_hba_info *pm8001_ha) in pm8001_get_phy_settings_info() argument
695 pm8001_ha->nvmd_completion = &completion; in pm8001_get_phy_settings_info()
704 rc = PM8001_CHIP_DISP->get_nvmd_req(pm8001_ha, &payload); in pm8001_get_phy_settings_info()
707 PM8001_INIT_DBG(pm8001_ha, pm8001_printk("nvmd failed\n")); in pm8001_get_phy_settings_info()
711 pm8001_set_phy_profile(pm8001_ha, sizeof(u8), payload.func_specific); in pm8001_get_phy_settings_info()
735 void pm8001_get_internal_phy_settings(struct pm8001_hba_info *pm8001_ha, in pm8001_get_internal_phy_settings() argument
755 void pm8001_get_external_phy_settings(struct pm8001_hba_info *pm8001_ha, in pm8001_get_external_phy_settings() argument
775 void pm8001_get_phy_mask(struct pm8001_hba_info *pm8001_ha, int *phymask) in pm8001_get_phy_mask() argument
777 switch (pm8001_ha->pdev->subsystem_device) { in pm8001_get_phy_mask()
801 PM8001_INIT_DBG(pm8001_ha, in pm8001_get_phy_mask()
803 pm8001_ha->pdev->subsystem_device)); in pm8001_get_phy_mask()
812 int pm8001_set_phy_settings_ven_117c_12G(struct pm8001_hba_info *pm8001_ha) in pm8001_set_phy_settings_ven_117c_12G() argument
822 pm8001_get_internal_phy_settings(pm8001_ha, &phycfg_int); in pm8001_set_phy_settings_ven_117c_12G()
823 pm8001_get_external_phy_settings(pm8001_ha, &phycfg_ext); in pm8001_set_phy_settings_ven_117c_12G()
824 pm8001_get_phy_mask(pm8001_ha, &phymask); in pm8001_set_phy_settings_ven_117c_12G()
826 for (i = 0; i < pm8001_ha->chip->n_phy; i++) { in pm8001_set_phy_settings_ven_117c_12G()
828 pm8001_set_phy_profile_single(pm8001_ha, i, in pm8001_set_phy_settings_ven_117c_12G()
833 pm8001_set_phy_profile_single(pm8001_ha, i, in pm8001_set_phy_settings_ven_117c_12G()
846 static int pm8001_configure_phy_settings(struct pm8001_hba_info *pm8001_ha) in pm8001_configure_phy_settings() argument
848 switch (pm8001_ha->pdev->subsystem_vendor) { in pm8001_configure_phy_settings()
850 if (pm8001_ha->pdev->device == 0x0042) /* 6Gb */ in pm8001_configure_phy_settings()
853 return pm8001_set_phy_settings_ven_117c_12G(pm8001_ha); in pm8001_configure_phy_settings()
860 return pm8001_get_phy_settings_info(pm8001_ha); in pm8001_configure_phy_settings()
870 static u32 pm8001_setup_msix(struct pm8001_hba_info *pm8001_ha) in pm8001_setup_msix() argument
879 if (pm8001_ha->chip_id == chip_8001) { in pm8001_setup_msix()
886 rc = pci_alloc_irq_vectors(pm8001_ha->pdev, number_of_intr, in pm8001_setup_msix()
890 pm8001_ha->number_of_intr = number_of_intr; in pm8001_setup_msix()
892 PM8001_INIT_DBG(pm8001_ha, pm8001_printk( in pm8001_setup_msix()
894 rc, pm8001_ha->number_of_intr)); in pm8001_setup_msix()
899 pm8001_ha->irq_vector[i].irq_id = i; in pm8001_setup_msix()
900 pm8001_ha->irq_vector[i].drv_inst = pm8001_ha; in pm8001_setup_msix()
902 rc = request_irq(pci_irq_vector(pm8001_ha->pdev, i), in pm8001_setup_msix()
904 intr_drvname[i], &(pm8001_ha->irq_vector[i])); in pm8001_setup_msix()
907 free_irq(pci_irq_vector(pm8001_ha->pdev, i), in pm8001_setup_msix()
908 &(pm8001_ha->irq_vector[i])); in pm8001_setup_msix()
910 pci_free_irq_vectors(pm8001_ha->pdev); in pm8001_setup_msix()
923 static u32 pm8001_request_irq(struct pm8001_hba_info *pm8001_ha) in pm8001_request_irq() argument
928 pdev = pm8001_ha->pdev; in pm8001_request_irq()
932 return pm8001_setup_msix(pm8001_ha); in pm8001_request_irq()
934 PM8001_INIT_DBG(pm8001_ha, in pm8001_request_irq()
942 pm8001_ha->irq_vector[0].irq_id = 0; in pm8001_request_irq()
943 pm8001_ha->irq_vector[0].drv_inst = pm8001_ha; in pm8001_request_irq()
945 DRV_NAME, SHOST_TO_SAS_HA(pm8001_ha->shost)); in pm8001_request_irq()
964 struct pm8001_hba_info *pm8001_ha; in pm8001_pci_probe() local
1009 pm8001_ha = pm8001_pci_alloc(pdev, ent, shost); in pm8001_pci_probe()
1010 if (!pm8001_ha) { in pm8001_pci_probe()
1014 list_add_tail(&pm8001_ha->list, &hba_list); in pm8001_pci_probe()
1015 PM8001_CHIP_DISP->chip_soft_rst(pm8001_ha); in pm8001_pci_probe()
1016 rc = PM8001_CHIP_DISP->chip_init(pm8001_ha); in pm8001_pci_probe()
1018 PM8001_FAIL_DBG(pm8001_ha, pm8001_printk( in pm8001_pci_probe()
1026 rc = pm8001_request_irq(pm8001_ha); in pm8001_pci_probe()
1028 PM8001_FAIL_DBG(pm8001_ha, pm8001_printk( in pm8001_pci_probe()
1033 PM8001_CHIP_DISP->interrupt_enable(pm8001_ha, 0); in pm8001_pci_probe()
1034 if (pm8001_ha->chip_id != chip_8001) { in pm8001_pci_probe()
1035 for (i = 1; i < pm8001_ha->number_of_intr; i++) in pm8001_pci_probe()
1036 PM8001_CHIP_DISP->interrupt_enable(pm8001_ha, i); in pm8001_pci_probe()
1038 pm80xx_set_thermal_config(pm8001_ha); in pm8001_pci_probe()
1041 pm8001_init_sas_add(pm8001_ha); in pm8001_pci_probe()
1043 if (pm8001_configure_phy_settings(pm8001_ha)) in pm8001_pci_probe()
1050 scsi_scan_host(pm8001_ha->shost); in pm8001_pci_probe()
1051 pm8001_ha->flags = PM8001F_RUN_TIME; in pm8001_pci_probe()
1055 scsi_remove_host(pm8001_ha->shost); in pm8001_pci_probe()
1057 pm8001_free(pm8001_ha); in pm8001_pci_probe()
1073 struct pm8001_hba_info *pm8001_ha; in pm8001_pci_remove() local
1075 pm8001_ha = sha->lldd_ha; in pm8001_pci_remove()
1077 sas_remove_host(pm8001_ha->shost); in pm8001_pci_remove()
1078 list_del(&pm8001_ha->list); in pm8001_pci_remove()
1079 PM8001_CHIP_DISP->interrupt_disable(pm8001_ha, 0xFF); in pm8001_pci_remove()
1080 PM8001_CHIP_DISP->chip_soft_rst(pm8001_ha); in pm8001_pci_remove()
1083 for (i = 0; i < pm8001_ha->number_of_intr; i++) in pm8001_pci_remove()
1085 for (i = 0; i < pm8001_ha->number_of_intr; i++) in pm8001_pci_remove()
1086 free_irq(pci_irq_vector(pdev, i), &pm8001_ha->irq_vector[i]); in pm8001_pci_remove()
1089 free_irq(pm8001_ha->irq, sha); in pm8001_pci_remove()
1094 (pm8001_ha->chip_id == chip_8001)) in pm8001_pci_remove()
1095 tasklet_kill(&pm8001_ha->tasklet[0]); in pm8001_pci_remove()
1098 tasklet_kill(&pm8001_ha->tasklet[j]); in pm8001_pci_remove()
1100 scsi_host_put(pm8001_ha->shost); in pm8001_pci_remove()
1101 pm8001_free(pm8001_ha); in pm8001_pci_remove()
1119 struct pm8001_hba_info *pm8001_ha; in pm8001_pci_suspend() local
1122 pm8001_ha = sha->lldd_ha; in pm8001_pci_suspend()
1125 scsi_block_requests(pm8001_ha->shost); in pm8001_pci_suspend()
1130 PM8001_CHIP_DISP->interrupt_disable(pm8001_ha, 0xFF); in pm8001_pci_suspend()
1131 PM8001_CHIP_DISP->chip_soft_rst(pm8001_ha); in pm8001_pci_suspend()
1133 for (i = 0; i < pm8001_ha->number_of_intr; i++) in pm8001_pci_suspend()
1135 for (i = 0; i < pm8001_ha->number_of_intr; i++) in pm8001_pci_suspend()
1136 free_irq(pci_irq_vector(pdev, i), &pm8001_ha->irq_vector[i]); in pm8001_pci_suspend()
1139 free_irq(pm8001_ha->irq, sha); in pm8001_pci_suspend()
1144 (pm8001_ha->chip_id == chip_8001)) in pm8001_pci_suspend()
1145 tasklet_kill(&pm8001_ha->tasklet[0]); in pm8001_pci_suspend()
1148 tasklet_kill(&pm8001_ha->tasklet[j]); in pm8001_pci_suspend()
1153 pm8001_ha->name, device_state); in pm8001_pci_suspend()
1169 struct pm8001_hba_info *pm8001_ha; in pm8001_pci_resume() local
1174 pm8001_ha = sha->lldd_ha; in pm8001_pci_resume()
1178 "operating state [D%d]\n", pdev, pm8001_ha->name, device_state); in pm8001_pci_resume()
1186 pm8001_ha->name); in pm8001_pci_resume()
1196 if (pm8001_ha->chip_id == chip_8001) { in pm8001_pci_resume()
1197 PM8001_CHIP_DISP->chip_soft_rst(pm8001_ha); in pm8001_pci_resume()
1198 PM8001_INIT_DBG(pm8001_ha, in pm8001_pci_resume()
1201 rc = PM8001_CHIP_DISP->chip_init(pm8001_ha); in pm8001_pci_resume()
1206 PM8001_CHIP_DISP->interrupt_disable(pm8001_ha, 0xFF); in pm8001_pci_resume()
1208 rc = pm8001_request_irq(pm8001_ha); in pm8001_pci_resume()
1214 (pm8001_ha->chip_id == chip_8001)) in pm8001_pci_resume()
1215 tasklet_init(&pm8001_ha->tasklet[0], pm8001_tasklet, in pm8001_pci_resume()
1216 (unsigned long)&(pm8001_ha->irq_vector[0])); in pm8001_pci_resume()
1219 tasklet_init(&pm8001_ha->tasklet[j], pm8001_tasklet, in pm8001_pci_resume()
1220 (unsigned long)&(pm8001_ha->irq_vector[j])); in pm8001_pci_resume()
1222 PM8001_CHIP_DISP->interrupt_enable(pm8001_ha, 0); in pm8001_pci_resume()
1223 if (pm8001_ha->chip_id != chip_8001) { in pm8001_pci_resume()
1224 for (i = 1; i < pm8001_ha->number_of_intr; i++) in pm8001_pci_resume()
1225 PM8001_CHIP_DISP->interrupt_enable(pm8001_ha, i); in pm8001_pci_resume()
1233 if (pm8001_ha->chip_id == chip_8070 || in pm8001_pci_resume()
1234 pm8001_ha->chip_id == chip_8072) { in pm8001_pci_resume()
1240 pm8001_ha->flags = PM8001F_RUN_TIME; in pm8001_pci_resume()
1241 for (i = 0; i < pm8001_ha->chip->n_phy; i++) { in pm8001_pci_resume()
1242 pm8001_ha->phy[i].enable_completion = &completion; in pm8001_pci_resume()
1243 PM8001_CHIP_DISP->phy_start_req(pm8001_ha, i); in pm8001_pci_resume()
1250 scsi_remove_host(pm8001_ha->shost); in pm8001_pci_resume()