Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 26 Dec 2018 10:42:45 +0000 (UTC)
From:      Kashyap D Desai <kadesai@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r342534 - head/sys/dev/mpr
Message-ID:  <201812261042.wBQAgjcx040976@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kadesai
Date: Wed Dec 26 10:42:45 2018
New Revision: 342534
URL: https://svnweb.freebsd.org/changeset/base/342534

Log:
  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

Modified:
  head/sys/dev/mpr/mprvar.h

Modified: head/sys/dev/mpr/mprvar.h
==============================================================================
--- head/sys/dev/mpr/mprvar.h	Wed Dec 26 10:41:53 2018	(r342533)
+++ head/sys/dev/mpr/mprvar.h	Wed Dec 26 10:42:45 2018	(r342534)
@@ -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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201812261042.wBQAgjcx040976>