svn commit: r278104 - head/sys/mips/atheros

Sean Bruno sbruno at FreeBSD.org
Mon Feb 2 17:33:01 UTC 2015


Author: sbruno
Date: Mon Feb  2 17:33:00 2015
New Revision: 278104
URL: https://svnweb.freebsd.org/changeset/base/278104

Log:
  The linux driver code for the MDIO bus does a read-after-write
  which seems to be required on MIPS74k platforms for correct
  behaviour.
  
  Reviewed by:	adrian

Modified:
  head/sys/mips/atheros/if_argevar.h

Modified: head/sys/mips/atheros/if_argevar.h
==============================================================================
--- head/sys/mips/atheros/if_argevar.h	Mon Feb  2 17:32:50 2015	(r278103)
+++ head/sys/mips/atheros/if_argevar.h	Mon Feb  2 17:33:00 2015	(r278104)
@@ -74,8 +74,20 @@
 #define ARGE_CLEAR_BITS(sc, reg, bits)	\
 	ARGE_WRITE(sc, reg, ARGE_READ(sc, (reg)) & ~(bits))
 
-#define ARGE_MDIO_WRITE(_sc, _reg, _val)	\
-	ARGE_WRITE((_sc), (_reg), (_val))
+/*
+ * The linux driver code for the MDIO bus does a read-after-write
+ * which seems to be required on MIPS74k platforms for correct
+ * behaviour.
+ *
+ * So, ARGE_WRITE() does the write + barrier, and the following
+ * ARGE_READ() seems to flush the thing all the way through the device
+ * FIFO(s) before we continue issuing MDIO bus updates.
+ */
+#define ARGE_MDIO_WRITE(_sc, _reg, _val) \
+	do { \
+		ARGE_WRITE((_sc), (_reg), (_val)); \
+		ARGE_READ((_sc), (_reg)); \
+	} while (0)
 #define ARGE_MDIO_READ(_sc, _reg)	\
 	ARGE_READ((_sc), (_reg))
 #define	ARGE_MDIO_BARRIER_READ(_sc)	ARGE_BARRIER_READ(_sc)


More information about the svn-src-all mailing list