2015-10-30 15:53 GMT+01:00 Benjamin Rood <benjaminjr...@gmail.com>:
> The documentation for the 8070 and 8072 SPCv chip explicitly states that
> a minimum of 500ms must elapse before issuing commands, otherwise the
> SPCv may not process them and the firmware may get into an unrecoverable
> state requiring a reboot.  While the Linux guys will probably think this
> is 'racy', it is called out in the chip documentation and inserting this
> delay makes power management function properly.
>
> Signed-off-by: Benjamin Rood <br...@attotech.com>
> ---
>  drivers/scsi/pm8001/pm8001_init.c | 12 ++++++++++++
>  1 file changed, 12 insertions(+)
>
> diff --git a/drivers/scsi/pm8001/pm8001_init.c 
> b/drivers/scsi/pm8001/pm8001_init.c
> index a0e55d4..ab99984 100644
> --- a/drivers/scsi/pm8001/pm8001_init.c
> +++ b/drivers/scsi/pm8001/pm8001_init.c
> @@ -1190,6 +1190,7 @@ static int pm8001_pci_resume(struct pci_dev *pdev)
>         int rc;
>         u8 i = 0, j;
>         u32 device_state;
> +       u32 wait_count;
>         DECLARE_COMPLETION_ONSTACK(completion);
>         pm8001_ha = sha->lldd_ha;
>         device_state = pdev->current_state;
> @@ -1243,6 +1244,17 @@ static int pm8001_pci_resume(struct pci_dev *pdev)
>                 for (i = 1; i < pm8001_ha->number_of_intr; i++)
>                         PM8001_CHIP_DISP->interrupt_enable(pm8001_ha, i);
>         }
> +
> +       if (pm8001_ha->chip_id == chip_8070 ||
> +               pm8001_ha->chip_id == chip_8072) {
> +               wait_count = 500;
> +               do {
> +                       mdelay(1);
> +               } while (--wait_count);
> +       }
> +
> +       /* Spin up the PHYs */
> +
>         pm8001_ha->flags = PM8001F_RUN_TIME;
>         for (i = 0; i < pm8001_ha->chip->n_phy; i++) {
>                 pm8001_ha->phy[i].enable_completion = &completion;
> --
> 2.4.3
>
Could we simply mdelay(500) instead the loop?
Also better to add a comment around.

Thanks,
Jack
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to