Re: [PATCH 6/7] pm80xx: Reset PI and CI memory during re-initialize

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Mar 4, 2021 at 5:47 PM <Viswas.G@xxxxxxxxxxxxx> wrote:
>
>
> > -----Original Message-----
> > From: Jinpu Wang <jinpu.wang@xxxxxxxxxxxxxxx>
> > Sent: Thursday, March 4, 2021 3:07 PM
> > To: Viswas G - I30667 <Viswas.G@xxxxxxxxxxxxx>
> > Cc: Linux SCSI Mailinglist <linux-scsi@xxxxxxxxxxxxxxx>; Vasanthalakshmi
> > Tharmarajan - I30664 <Vasanthalakshmi.Tharmarajan@xxxxxxxxxxxxx>;
> > Ruksar Devadi - I52327 <Ruksar.devadi@xxxxxxxxxxxxx>; Vishakha
> > Channapattan <vishakhavc@xxxxxxxxxx>; Radha Ramachandran
> > <radha@xxxxxxxxxx>
> > Subject: Re: [PATCH 6/7] pm80xx: Reset PI and CI memory during re-initialize
> >
> > EXTERNAL EMAIL: Do not click links or open attachments unless you know the
> > content is safe
> >
> > On Wed, Feb 24, 2021 at 4:48 PM Viswas G <Viswas.G@xxxxxxxxxxxxx>
> > wrote:
> > >
> > > Producer index(PI) outbound queue and consumer index(CI) for Outbound
> > > queue are in DMA memory. These values should be reset to 0 during
> > > driver reinitialization.
> >
> > Why "reinitialization", the function  init_default_table_values is called from
> > chip init?
>
> Yes. This called from both probe() and resume(). During resume(), the stale PI and CI
> Values will leads to unexpected behavior.
Can you add this part to the commit message?
>
> > >
> > > Signed-off-by: Viswas G <Viswas.G@xxxxxxxxxxxxx>
> > > Signed-off-by: Ruksar Devadi <Ruksar.devadi@xxxxxxxxxxxxx>
> > > Signed-off-by: Ashokkumar N <Ashokkumar.N@xxxxxxxxxxxxx>
With that,
Acked-by: Jack Wang <jinpu.wang@xxxxxxxxxxxxxxx>
> > > ---
> > >  drivers/scsi/pm8001/pm8001_hwi.c | 2 ++
> > > drivers/scsi/pm8001/pm80xx_hwi.c | 2 ++
> > >  2 files changed, 4 insertions(+)
> > >
> > > diff --git a/drivers/scsi/pm8001/pm8001_hwi.c
> > > b/drivers/scsi/pm8001/pm8001_hwi.c
> > > index 4e0ce044ac69..783149b8b127 100644
> > > --- a/drivers/scsi/pm8001/pm8001_hwi.c
> > > +++ b/drivers/scsi/pm8001/pm8001_hwi.c
> > > @@ -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->inbnd_q_tbl[i].ci_virt               =
> > >                         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;
> > >                 pm8001_ha->inbnd_q_tbl[i].pi_pci_bar            =
> > >                         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);
> > >                 pm8001_ha->outbnd_q_tbl[i].pi_virt              =
> > >                         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;
> > >                 pm8001_ha->outbnd_q_tbl[i].ci_pci_bar           =
> > >                         get_pci_bar_index(pm8001_mr32(addressob,
> > > diff --git a/drivers/scsi/pm8001/pm80xx_hwi.c
> > > b/drivers/scsi/pm8001/pm80xx_hwi.c
> > > index 1aa3a499c85a..0f2c57e054ac 100644
> > > --- a/drivers/scsi/pm8001/pm80xx_hwi.c
> > > +++ b/drivers/scsi/pm8001/pm80xx_hwi.c
> > > @@ -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->inbnd_q_tbl[i].ci_virt               =
> > >                         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;
> > >                 pm8001_ha->inbnd_q_tbl[i].pi_pci_bar            =
> > >                         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].pi_virt              =
> > >                         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;
> > >                 pm8001_ha->outbnd_q_tbl[i].ci_pci_bar           =
> > >                         get_pci_bar_index(pm8001_mr32(addressob,
> > > --
> > > 2.16.3
> > >



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]

  Powered by Linux