[SCSI] lpfc 8.3.11: Driver management improvements via BSG
- Add BSG support for PCI loopback testing. - Add BSG support for extended mailbox commands. Signed-off-by: Alex Iannicelli <alex.iannicelli@emulex.com> Signed-off-by: James Smart <james.smart@emulex.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
This commit is contained in:

committed by
James Bottomley

parent
cb5172eafd
commit
7a47027743
@@ -1216,7 +1216,7 @@ lpfc_config_port(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
|
||||
phba->pcb->feature = FEATURE_INITIAL_SLI2;
|
||||
|
||||
/* Setup Mailbox pointers */
|
||||
phba->pcb->mailBoxSize = sizeof(MAILBOX_t);
|
||||
phba->pcb->mailBoxSize = sizeof(MAILBOX_t) + MAILBOX_EXT_SIZE;
|
||||
offset = (uint8_t *)phba->mbox - (uint8_t *)phba->slim2p.virt;
|
||||
pdma_addr = phba->slim2p.phys + offset;
|
||||
phba->pcb->mbAddrHigh = putPaddrHigh(pdma_addr);
|
||||
@@ -1272,28 +1272,41 @@ lpfc_config_port(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
|
||||
*
|
||||
*/
|
||||
|
||||
if (phba->sli_rev == 3) {
|
||||
phba->host_gp = &mb_slim->us.s3.host[0];
|
||||
phba->hbq_put = &mb_slim->us.s3.hbq_put[0];
|
||||
} else {
|
||||
phba->host_gp = &mb_slim->us.s2.host[0];
|
||||
if (phba->cfg_hostmem_hgp && phba->sli_rev != 3) {
|
||||
phba->host_gp = &phba->mbox->us.s2.host[0];
|
||||
phba->hbq_put = NULL;
|
||||
}
|
||||
offset = (uint8_t *)&phba->mbox->us.s2.host -
|
||||
(uint8_t *)phba->slim2p.virt;
|
||||
pdma_addr = phba->slim2p.phys + offset;
|
||||
phba->pcb->hgpAddrHigh = putPaddrHigh(pdma_addr);
|
||||
phba->pcb->hgpAddrLow = putPaddrLow(pdma_addr);
|
||||
} else {
|
||||
/* Always Host Group Pointer is in SLIM */
|
||||
mb->un.varCfgPort.hps = 1;
|
||||
|
||||
/* mask off BAR0's flag bits 0 - 3 */
|
||||
phba->pcb->hgpAddrLow = (bar_low & PCI_BASE_ADDRESS_MEM_MASK) +
|
||||
(void __iomem *)phba->host_gp -
|
||||
(void __iomem *)phba->MBslimaddr;
|
||||
if (bar_low & PCI_BASE_ADDRESS_MEM_TYPE_64)
|
||||
phba->pcb->hgpAddrHigh = bar_high;
|
||||
else
|
||||
phba->pcb->hgpAddrHigh = 0;
|
||||
/* write HGP data to SLIM at the required longword offset */
|
||||
memset(&hgp, 0, sizeof(struct lpfc_hgp));
|
||||
if (phba->sli_rev == 3) {
|
||||
phba->host_gp = &mb_slim->us.s3.host[0];
|
||||
phba->hbq_put = &mb_slim->us.s3.hbq_put[0];
|
||||
} else {
|
||||
phba->host_gp = &mb_slim->us.s2.host[0];
|
||||
phba->hbq_put = NULL;
|
||||
}
|
||||
|
||||
for (i=0; i < phba->sli.num_rings; i++) {
|
||||
lpfc_memcpy_to_slim(phba->host_gp + i, &hgp,
|
||||
/* mask off BAR0's flag bits 0 - 3 */
|
||||
phba->pcb->hgpAddrLow = (bar_low & PCI_BASE_ADDRESS_MEM_MASK) +
|
||||
(void __iomem *)phba->host_gp -
|
||||
(void __iomem *)phba->MBslimaddr;
|
||||
if (bar_low & PCI_BASE_ADDRESS_MEM_TYPE_64)
|
||||
phba->pcb->hgpAddrHigh = bar_high;
|
||||
else
|
||||
phba->pcb->hgpAddrHigh = 0;
|
||||
/* write HGP data to SLIM at the required longword offset */
|
||||
memset(&hgp, 0, sizeof(struct lpfc_hgp));
|
||||
|
||||
for (i = 0; i < phba->sli.num_rings; i++) {
|
||||
lpfc_memcpy_to_slim(phba->host_gp + i, &hgp,
|
||||
sizeof(*phba->host_gp));
|
||||
}
|
||||
}
|
||||
|
||||
/* Setup Port Group offset */
|
||||
|
Reference in New Issue
Block a user