svn commit: r220423 - in head/sys/dev/ath/ath_hal: . ar5212

Adrian Chadd adrian at FreeBSD.org
Thu Apr 7 13:14:52 UTC 2011


Author: adrian
Date: Thu Apr  7 13:14:51 2011
New Revision: 220423
URL: http://svn.freebsd.org/changeset/base/220423

Log:
  Add some more OS_MARK probes to the RX DMA setup/teardown code path.
  
  I'm trying to debug the RX DMA path and help the ath9k guys with
  "RX dma abort stuck" issue that both our drivers have.

Modified:
  head/sys/dev/ath/ath_hal/ah_decode.h
  head/sys/dev/ath/ath_hal/ar5212/ar5212_recv.c

Modified: head/sys/dev/ath/ath_hal/ah_decode.h
==============================================================================
--- head/sys/dev/ath/ath_hal/ah_decode.h	Thu Apr  7 13:03:35 2011	(r220422)
+++ head/sys/dev/ath/ath_hal/ah_decode.h	Thu Apr  7 13:14:51 2011	(r220423)
@@ -51,5 +51,15 @@ enum {
 	AH_MARK_ANI_RESET,		/* ar*AniReset, opmode */
 	AH_MARK_ANI_POLL,		/* ar*AniReset, listen time */
 	AH_MARK_ANI_CONTROL,		/* ar*AniReset, cmd */
+	AH_MARK_RX_CTL,			/* RX DMA control */
 };
+
+enum {
+	AH_MARK_RX_CTL_PCU_START,
+	AH_MARK_RX_CTL_PCU_STOP,
+	AH_MARK_RX_CTL_DMA_START,
+	AH_MARK_RX_CTL_DMA_STOP,
+	AH_MARK_RX_CTL_DMA_STOP_ERR,
+};
+
 #endif /* _ATH_AH_DECODE_H_ */

Modified: head/sys/dev/ath/ath_hal/ar5212/ar5212_recv.c
==============================================================================
--- head/sys/dev/ath/ath_hal/ar5212/ar5212_recv.c	Thu Apr  7 13:03:35 2011	(r220422)
+++ head/sys/dev/ath/ath_hal/ar5212/ar5212_recv.c	Thu Apr  7 13:14:51 2011	(r220423)
@@ -59,8 +59,10 @@ ar5212EnableReceive(struct ath_hal *ah)
 HAL_BOOL
 ar5212StopDmaReceive(struct ath_hal *ah)
 {
+	OS_MARK(ah, AH_MARK_RX_CTL, AH_MARK_RX_CTL_DMA_STOP);
 	OS_REG_WRITE(ah, AR_CR, AR_CR_RXD);	/* Set receive disable bit */
 	if (!ath_hal_wait(ah, AR_CR, AR_CR_RXE, 0)) {
+		OS_MARK(ah, AH_MARK_RX_CTL, AH_MARK_RX_CTL_DMA_STOP_ERR);
 #ifdef AH_DEBUG
 		ath_hal_printf(ah, "%s: dma failed to stop in 10ms\n"
 			"AR_CR=0x%08x\nAR_DIAG_SW=0x%08x\n",
@@ -82,6 +84,7 @@ ar5212StartPcuReceive(struct ath_hal *ah
 {
 	struct ath_hal_private *ahp = AH_PRIVATE(ah);
 
+	OS_MARK(ah, AH_MARK_RX_CTL, AH_MARK_RX_CTL_PCU_START);
 	OS_REG_WRITE(ah, AR_DIAG_SW,
 		OS_REG_READ(ah, AR_DIAG_SW) &~ AR_DIAG_RX_DIS);
 	ar5212EnableMibCounters(ah);
@@ -95,6 +98,7 @@ ar5212StartPcuReceive(struct ath_hal *ah
 void
 ar5212StopPcuReceive(struct ath_hal *ah)
 {
+	OS_MARK(ah, AH_MARK_RX_CTL, AH_MARK_RX_CTL_PCU_STOP);
 	OS_REG_WRITE(ah, AR_DIAG_SW,
 		OS_REG_READ(ah, AR_DIAG_SW) | AR_DIAG_RX_DIS);
 	ar5212DisableMibCounters(ah);


More information about the svn-src-all mailing list