lpfc 8.2.8 : Update driver for new SLI-3 features
Subsystems (2)
PATCH 7/15 lpfc 8.2.8 : Update driver for new SLI-3 features
Update driver for new SLI-3 features:
- interrupt enhancements
- lose adapter doorbell writes
- inlining support for FCP_Ixx cmds
Signed-off-by James Smart <[email protected]>
---
lpfc.h | 22 +++++-- lpfc_ct.c | 4 - lpfc_debugfs.c | 52 ++++------------- lpfc_els.c | 4 - lpfc_hw.h | 63 ++++++++++++++------- lpfc_init.c | 28 +++++---- lpfc_mbox.c | 75 +++++++++++++------------ lpfc_scsi.c | 165 +++++++++++++++++++++++++++++++++++++++++---------------- lpfc_sli.c | 122 ++++++++++++++++++++++-------------------- 9 files changed, 315 insertions(+), 220 deletions(-)
drivers/scsi/lpfc/lpfc_ct.c +2 -2
@@ -212,7 +212,7 @@ lpfc_alloc_ct_rsp(struct lpfc_hba *phba,else list_add_tail (&mp->list, &mlist->list); - bpl->tus.f.bdeFlags =BUFF_USE_RCV ; + bpl->tus.f.bdeFlags =BUFF_TYPE_BDE_64I ;/* build buffer ptr list for IOCB */ bpl->addrLow =le32_to_cpu (putPaddrLow (mp->phys) ); bpl->addrHigh =le32_to_cpu (putPaddrHigh (mp->phys) );
@@ -283,7 +283,7 @@ lpfc_gen_req(struct lpfc_vport *vport, s icmd->un.genreq64.bdl.ulpIoTag32 =0 ; icmd->un.genreq64.bdl.addrHigh =putPaddrHigh (bmp->phys); icmd->un.genreq64.bdl.addrLow =putPaddrLow (bmp->phys); - icmd->un.genreq64.bdl.bdeFlags =BUFF_TYPE_BDL ; + icmd->un.genreq64.bdl.bdeFlags =BUFF_TYPE_BLP_64 ; icmd->un.genreq64.bdl.bdeSize = (num_entry *sizeof (struct ulp_bde64 ));if (usr_flg)
drivers/scsi/lpfc/lpfc_debugfs.c +12 -40
70 lines not on this page · raw message
drivers/scsi/lpfc/lpfc_els.c +2 -2
@@ -200,7 +200,7 @@ lpfc_prep_els_iocb(struct lpfc_vport *vp icmd->un.elsreq64.bdl.addrHigh =putPaddrHigh (pbuflist->phys); icmd->un.elsreq64.bdl.addrLow =putPaddrLow (pbuflist->phys); - icmd->un.elsreq64.bdl.bdeFlags =BUFF_TYPE_BDL ; + icmd->un.elsreq64.bdl.bdeFlags =BUFF_TYPE_BLP_64 ; icmd->un.elsreq64.remoteID = did;/* DID */ if (expectRsp) { icmd->un.elsreq64.bdl.bdeSize = (2 *sizeof (struct ulp_bde64 ));
@@ -235,7 +235,7 @@ lpfc_prep_els_iocb(struct lpfc_vport *vp bpl->addrLow =le32_to_cpu (putPaddrLow (prsp->phys)); bpl->addrHigh =le32_to_cpu (putPaddrHigh (prsp->phys)); bpl->tus.f.bdeSize =FCELSSIZE ; - bpl->tus.f.bdeFlags =BUFF_USE_RCV ; + bpl->tus.f.bdeFlags =BUFF_TYPE_BDE_64 ; bpl->tus.w =le32_to_cpu (bpl->tus.w); }
drivers/scsi/lpfc/lpfc.h +15 -7
@@ -407,10 +407,11 @@ struct lpfc_hba {struct lpfc_sli sli;uint32_t sli_rev;/* SLI2 or SLI3 */ uint32_t sli3_options;/* Mask of enabled SLI3 options */ -#define LPFC_SLI3_ENABLED 0x01 -#define LPFC_SLI3_HBQ_ENABLED 0x02 -#define LPFC_SLI3_NPIV_ENABLED 0x04 -#define LPFC_SLI3_VPORT_TEARDOWN 0x08 +#define LPFC_SLI3_HBQ_ENABLED 0x01 +#define LPFC_SLI3_NPIV_ENABLED 0x02 +#define LPFC_SLI3_VPORT_TEARDOWN 0x04 +#define LPFC_SLI3_CRP_ENABLED 0x08 +#define LPFC_SLI3_INB_ENABLED 0x10uint32_t iocb_cmd_size;uint32_t iocb_rsp_size;
@@ -422,10 +423,16 @@ struct lpfc_hba {#define LS_NPIV_FAB_SUPPORTED 0x2/* Fabric supports NPIV */ #define LS_IGNORE_ERATT 0x4/* intr handler should ignore ERATT */ -struct lpfc_sli2_slim *slim2p; -struct lpfc_dmabuf hbqslimp; +struct lpfc_dmabuf slim2p; + +MAILBOX_t *mbox; +uint32_t *inb_ha_copy; +uint32_t *inb_counter; +uint32_t inb_last_counter; +struct _PCB *pcb; +struct _IOCB *IOCBs; -dma_addr_t slim2p_mapping; +struct lpfc_dmabuf hbqslimp;uint16_t pci_cfg_value;
@@ -514,6 +521,7 @@ struct lpfc_hba {void __iomem *HCregaddr;/* virtual address for host ctl reg */ struct lpfc_hgp __iomem *host_gp;/* Host side get/put pointers */ +struct lpfc_pgp *port_gp;uint32_t __iomem *hbq_put;/* Address in SLIM to HBQ put ptrs */ uint32_t *hbq_get;/* Host mem address of HBQ get ptrs */
drivers/scsi/lpfc/lpfc_hw.h +43 -20
98 lines not on this page · raw message
drivers/scsi/lpfc/lpfc_init.c +17 -11
@@ -2312,12 +2312,18 @@ lpfc_pci_probe_one(struct pci_dev *pdev, }/* Allocate memory for SLI-2 structures */ - phba->slim2p =dma_alloc_coherent (&phba->pcidev->dev,SLI2_SLIM_SIZE , - &phba->slim2p_mapping,GFP_KERNEL ); -if (!phba->slim2p) + phba->slim2p.virt =dma_alloc_coherent (&phba->pcidev->dev, +SLI2_SLIM_SIZE , + &phba->slim2p.phys, +GFP_KERNEL ); +if (!phba->slim2p.virt) goto out_iounmap; -memset (phba->slim2p,0 ,SLI2_SLIM_SIZE ); +memset (phba->slim2p.virt,0 ,SLI2_SLIM_SIZE ); + phba->mbox = phba->slim2p.virt; + phba->pcb = (phba->slim2p.virt +sizeof (MAILBOX_t)); + phba->IOCBs = (phba->slim2p.virt +sizeof (MAILBOX_t) + +sizeof (struct _PCB )); phba->hbqslimp.virt = dma_alloc_coherent(&phba->pcidev->dev, lpfc_sli_hbq_size(),
@@ -2513,11 +2519,11 @@ out_free_iocbq: }lpfc_mem_free (phba); out_free_hbqslimp: -dma_free_coherent (&pdev->dev,lpfc_sli_hbq_size (), phba->hbqslimp.virt, - phba->hbqslimp.phys); +dma_free_coherent (&pdev->dev,lpfc_sli_hbq_size (), + phba->hbqslimp.virt, phba->hbqslimp.phys); out_free_slim: -dma_free_coherent (&pdev->dev,SLI2_SLIM_SIZE , phba->slim2p, - phba->slim2p_mapping); +dma_free_coherent (&pdev->dev,SLI2_SLIM_SIZE , + phba->slim2p.virt, phba->slim2p.phys); out_iounmap:iounmap (phba->ctrl_regs_memmap_p); out_iounmap_slim:
@@ -2599,12 +2605,12 @@ lpfc_pci_remove_one(struct pci_dev *pdevlpfc_scsi_free (phba);lpfc_mem_free (phba); -dma_free_coherent (&pdev->dev,lpfc_sli_hbq_size (), phba->hbqslimp.virt, - phba->hbqslimp.phys); +dma_free_coherent (&pdev->dev,lpfc_sli_hbq_size (), + phba->hbqslimp.virt, phba->hbqslimp.phys);/* Free resources associated with SLI2 interface */ dma_free_coherent (&pdev->dev,SLI2_SLIM_SIZE , - phba->slim2p, phba->slim2p_mapping); + phba->slim2p.virt, phba->slim2p.phys);/* unmap adapter SLIM and Control Registers */ iounmap (phba->ctrl_regs_memmap_p);
drivers/scsi/lpfc/lpfc_mbox.c +38 -37
142 lines not on this page · raw message
drivers/scsi/lpfc/lpfc_scsi.c +120 -45
232 lines not on this page · raw message
drivers/scsi/lpfc/lpfc_sli.c +66 -56
260 lines not on this page · raw message