scsi: pm80xx: Reset PI and CI memory during re-initialization
Producer index(PI) outbound queue and consumer index(CI) for Outbound queue are in DMA memory. During resume(), the stale PI and CI Values will lead to unexpected behavior. These values should be reset to 0 during driver reinitialization. Link: https://lore.kernel.org/r/20210415103352.3580-8-Viswas.G@microchip.com Acked-by: Jack Wang <jinpu.wang@cloud.ionos.com> Signed-off-by: Viswas G <Viswas.G@microchip.com> Signed-off-by: Ruksar Devadi <Ruksar.devadi@microchip.com> Signed-off-by: Ashokkumar N <Ashokkumar.N@microchip.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
4f5deeb40f
commit
b431472bc8
|
@ -240,6 +240,7 @@ static void init_default_table_values(struct pm8001_hba_info *pm8001_ha)
|
||||||
pm8001_ha->memoryMap.region[ci_offset + i].phys_addr_lo;
|
pm8001_ha->memoryMap.region[ci_offset + i].phys_addr_lo;
|
||||||
pm8001_ha->inbnd_q_tbl[i].ci_virt =
|
pm8001_ha->inbnd_q_tbl[i].ci_virt =
|
||||||
pm8001_ha->memoryMap.region[ci_offset + i].virt_ptr;
|
pm8001_ha->memoryMap.region[ci_offset + i].virt_ptr;
|
||||||
|
pm8001_write_32(pm8001_ha->inbnd_q_tbl[i].ci_virt, 0, 0);
|
||||||
offsetib = i * 0x20;
|
offsetib = i * 0x20;
|
||||||
pm8001_ha->inbnd_q_tbl[i].pi_pci_bar =
|
pm8001_ha->inbnd_q_tbl[i].pi_pci_bar =
|
||||||
get_pci_bar_index(pm8001_mr32(addressib,
|
get_pci_bar_index(pm8001_mr32(addressib,
|
||||||
|
@ -268,6 +269,7 @@ static void init_default_table_values(struct pm8001_hba_info *pm8001_ha)
|
||||||
0 | (10 << 16) | (i << 24);
|
0 | (10 << 16) | (i << 24);
|
||||||
pm8001_ha->outbnd_q_tbl[i].pi_virt =
|
pm8001_ha->outbnd_q_tbl[i].pi_virt =
|
||||||
pm8001_ha->memoryMap.region[pi_offset + i].virt_ptr;
|
pm8001_ha->memoryMap.region[pi_offset + i].virt_ptr;
|
||||||
|
pm8001_write_32(pm8001_ha->outbnd_q_tbl[i].pi_virt, 0, 0);
|
||||||
offsetob = i * 0x24;
|
offsetob = i * 0x24;
|
||||||
pm8001_ha->outbnd_q_tbl[i].ci_pci_bar =
|
pm8001_ha->outbnd_q_tbl[i].ci_pci_bar =
|
||||||
get_pci_bar_index(pm8001_mr32(addressob,
|
get_pci_bar_index(pm8001_mr32(addressob,
|
||||||
|
|
|
@ -787,6 +787,7 @@ static void init_default_table_values(struct pm8001_hba_info *pm8001_ha)
|
||||||
pm8001_ha->memoryMap.region[ci_offset + i].phys_addr_lo;
|
pm8001_ha->memoryMap.region[ci_offset + i].phys_addr_lo;
|
||||||
pm8001_ha->inbnd_q_tbl[i].ci_virt =
|
pm8001_ha->inbnd_q_tbl[i].ci_virt =
|
||||||
pm8001_ha->memoryMap.region[ci_offset + i].virt_ptr;
|
pm8001_ha->memoryMap.region[ci_offset + i].virt_ptr;
|
||||||
|
pm8001_write_32(pm8001_ha->inbnd_q_tbl[i].ci_virt, 0, 0);
|
||||||
offsetib = i * 0x20;
|
offsetib = i * 0x20;
|
||||||
pm8001_ha->inbnd_q_tbl[i].pi_pci_bar =
|
pm8001_ha->inbnd_q_tbl[i].pi_pci_bar =
|
||||||
get_pci_bar_index(pm8001_mr32(addressib,
|
get_pci_bar_index(pm8001_mr32(addressib,
|
||||||
|
@ -820,6 +821,7 @@ static void init_default_table_values(struct pm8001_hba_info *pm8001_ha)
|
||||||
pm8001_ha->outbnd_q_tbl[i].interrup_vec_cnt_delay = (i << 24);
|
pm8001_ha->outbnd_q_tbl[i].interrup_vec_cnt_delay = (i << 24);
|
||||||
pm8001_ha->outbnd_q_tbl[i].pi_virt =
|
pm8001_ha->outbnd_q_tbl[i].pi_virt =
|
||||||
pm8001_ha->memoryMap.region[pi_offset + i].virt_ptr;
|
pm8001_ha->memoryMap.region[pi_offset + i].virt_ptr;
|
||||||
|
pm8001_write_32(pm8001_ha->outbnd_q_tbl[i].pi_virt, 0, 0);
|
||||||
offsetob = i * 0x24;
|
offsetob = i * 0x24;
|
||||||
pm8001_ha->outbnd_q_tbl[i].ci_pci_bar =
|
pm8001_ha->outbnd_q_tbl[i].ci_pci_bar =
|
||||||
get_pci_bar_index(pm8001_mr32(addressob,
|
get_pci_bar_index(pm8001_mr32(addressob,
|
||||||
|
|
Loading…
Reference in New Issue