On Aero/Sea A0 cards retry MPT Fusion registers reads for max three times

Due to HW Errta on Aero/Sea A0 chipset on secure boot mode & on heavy IO load,
sometimes read operation on MPT Fusion registers will give zero value,
So, as a workaround driver will retry the MPT Fusion register
read operation for max three times upon reading zero value form these
registers.

Submitted by: Sreekanth Reddy <sreekanth.reddy@broadcom.com>
Reviewed by:  Kashyap Desai <Kashyap.Desai@broadcom.com>
Approved by:  ken
MFC after:  3 days
Sponsored by:   Broadcom Inc
This commit is contained in:
Kashyap D Desai 2018-12-26 10:42:45 +00:00
parent 34c5490d26
commit 34213bec59
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=342534

View File

@ -530,7 +530,14 @@ struct scsi_read_capacity_eedp
static __inline uint32_t
mpr_regread(struct mpr_softc *sc, uint32_t offset)
{
return (bus_space_read_4(sc->mpr_btag, sc->mpr_bhandle, offset));
uint32_t ret_val, i = 0;
do {
ret_val =
bus_space_read_4(sc->mpr_btag, sc->mpr_bhandle, offset);
} while((sc->mpr_flags & MPR_FLAGS_SEA_IOC) &&
(ret_val == 0) && (++i < 3));
return ret_val;
}
static __inline void