From owner-svn-src-all@FreeBSD.ORG Wed Mar 9 04:39:36 2011 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id F2C58106564A; Wed, 9 Mar 2011 04:39:35 +0000 (UTC) (envelope-from adrian@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id D64908FC1A; Wed, 9 Mar 2011 04:39:35 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p294dZAg096849; Wed, 9 Mar 2011 04:39:35 GMT (envelope-from adrian@svn.freebsd.org) Received: (from adrian@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p294dZfL096845; Wed, 9 Mar 2011 04:39:35 GMT (envelope-from adrian@svn.freebsd.org) Message-Id: <201103090439.p294dZfL096845@svn.freebsd.org> From: Adrian Chadd Date: Wed, 9 Mar 2011 04:39:35 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r219419 - in head/sys/dev/ath/ath_hal: ar5212 ar5416 X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 09 Mar 2011 04:39:36 -0000 Author: adrian Date: Wed Mar 9 04:39:35 2011 New Revision: 219419 URL: http://svn.freebsd.org/changeset/base/219419 Log: For chips that are full reset in ar5416ChipReset(), save and restore the TSF. Merlin (ar9280) and later were full-reset if they're doing open-loop TX power control but the TSF wasn't being saved/restored. Add ar5212SetTsf64() which sets the 64 bit TSF appropriately. Modified: head/sys/dev/ath/ath_hal/ar5212/ar5212.h head/sys/dev/ath/ath_hal/ar5212/ar5212_misc.c head/sys/dev/ath/ath_hal/ar5416/ar5416_reset.c Modified: head/sys/dev/ath/ath_hal/ar5212/ar5212.h ============================================================================== --- head/sys/dev/ath/ath_hal/ar5212/ar5212.h Wed Mar 9 02:23:21 2011 (r219418) +++ head/sys/dev/ath/ath_hal/ar5212/ar5212.h Wed Mar 9 04:39:35 2011 (r219419) @@ -462,6 +462,7 @@ extern void ar5212WriteAssocid(struct at uint16_t assocId); extern uint32_t ar5212GetTsf32(struct ath_hal *ah); extern uint64_t ar5212GetTsf64(struct ath_hal *ah); +extern void ar5212SetTsf64(struct ath_hal *ah, uint64_t tsf64); extern void ar5212ResetTsf(struct ath_hal *ah); extern void ar5212SetBasicRate(struct ath_hal *ah, HAL_RATE_SET *pSet); extern uint32_t ar5212GetRandomSeed(struct ath_hal *ah); Modified: head/sys/dev/ath/ath_hal/ar5212/ar5212_misc.c ============================================================================== --- head/sys/dev/ath/ath_hal/ar5212/ar5212_misc.c Wed Mar 9 02:23:21 2011 (r219418) +++ head/sys/dev/ath/ath_hal/ar5212/ar5212_misc.c Wed Mar 9 04:39:35 2011 (r219419) @@ -264,6 +264,13 @@ ar5212GetTsf32(struct ath_hal *ah) return OS_REG_READ(ah, AR_TSF_L32); } +void +ar5212SetTsf64(struct ath_hal *ah, uint64_t tsf64) +{ + OS_REG_WRITE(ah, AR_TSF_L32, tsf64 & 0xffffffff); + OS_REG_WRITE(ah, AR_TSF_U32, (tsf64 >> 32) & 0xffffffff); +} + /* * Reset the current hardware tsf for stamlme. */ Modified: head/sys/dev/ath/ath_hal/ar5416/ar5416_reset.c ============================================================================== --- head/sys/dev/ath/ath_hal/ar5416/ar5416_reset.c Wed Mar 9 02:23:21 2011 (r219418) +++ head/sys/dev/ath/ath_hal/ar5416/ar5416_reset.c Wed Mar 9 04:39:35 2011 (r219419) @@ -95,6 +95,7 @@ ar5416Reset(struct ath_hal *ah, HAL_OPMO uint32_t powerVal, rssiThrReg; uint32_t ackTpcPow, ctsTpcPow, chirpTpcPow; int i; + uint64_t tsf = 0; OS_MARK(ah, AH_MARK_RESET, bChannelChange); @@ -151,6 +152,10 @@ ar5416Reset(struct ath_hal *ah, HAL_OPMO (AR_MAC_LED_ASSOC | AR_MAC_LED_MODE | AR_MAC_LED_BLINK_THRESH_SEL | AR_MAC_LED_BLINK_SLOW); + /* For chips on which the RTC reset is done, save TSF before it gets cleared */ + if (AR_SREV_MERLIN_20_OR_LATER(ah) && ath_hal_eepromGetFlag(ah, AR_EEP_OL_PWRCTRL)) + tsf = ar5212GetTsf64(ah); + if (!ar5416ChipReset(ah, chan)) { HALDEBUG(ah, HAL_DEBUG_ANY, "%s: chip reset failed\n", __func__); FAIL(HAL_EIO); @@ -159,6 +164,10 @@ ar5416Reset(struct ath_hal *ah, HAL_OPMO /* Restore bmiss rssi & count thresholds */ OS_REG_WRITE(ah, AR_RSSI_THR, rssiThrReg); + /* Restore TSF */ + if (tsf) + ar5212SetTsf64(ah, tsf); + OS_MARK(ah, AH_MARK_RESET_LINE, __LINE__); if (AR_SREV_MERLIN_10_OR_LATER(ah)) OS_REG_SET_BIT(ah, AR_GPIO_INPUT_EN_VAL, AR_GPIO_JTAG_DISABLE);