From 360d9bb5ee2db4d409448667de606c05b3914d53 Mon Sep 17 00:00:00 2001 From: Kalle Valo Date: Fri, 31 Jul 2015 10:17:35 +0300 Subject: [PATCH] Revert "ath9k: export HW random number generator" This reverts commit 6301566e0b2dafa7d6779598621bca867962a0a2. Oleksij Rempel noticed that the randomness doesn't look to be good enough and Stephan Mueller commented: "I would say that the discussed RNG does not seem fit for hooking it up with the hwrandom framework." http://lkml.kernel.org/g/3945775.m5HblJPgiO@tauon.atsec.com So let's the revert the patch until we are sure that we can trust this random generator. Signed-off-by: Kalle Valo --- drivers/net/wireless/ath/ath9k/Kconfig | 7 --- drivers/net/wireless/ath/ath9k/Makefile | 1 - drivers/net/wireless/ath/ath9k/ath9k.h | 23 -------- drivers/net/wireless/ath/ath9k/main.c | 4 -- drivers/net/wireless/ath/ath9k/rng.c | 75 ------------------------- 5 files changed, 110 deletions(-) delete mode 100644 drivers/net/wireless/ath/ath9k/rng.c diff --git a/drivers/net/wireless/ath/ath9k/Kconfig b/drivers/net/wireless/ath/ath9k/Kconfig index bde62ec98bc7..fee0cadb0f5e 100644 --- a/drivers/net/wireless/ath/ath9k/Kconfig +++ b/drivers/net/wireless/ath/ath9k/Kconfig @@ -176,10 +176,3 @@ config ATH9K_HTC_DEBUGFS depends on ATH9K_HTC && DEBUG_FS ---help--- Say Y, if you need access to ath9k_htc's statistics. - -config ATH9K_HWRNG - bool "Random number generator support" - depends on ATH9K && (HW_RANDOM = y || HW_RANDOM = ATH9K) - default y - ---help--- - Provides a hardware random number generator to the kernel. diff --git a/drivers/net/wireless/ath/ath9k/Makefile b/drivers/net/wireless/ath/ath9k/Makefile index 76f9dc37500b..ecda613c2d54 100644 --- a/drivers/net/wireless/ath/ath9k/Makefile +++ b/drivers/net/wireless/ath/ath9k/Makefile @@ -15,7 +15,6 @@ ath9k-$(CONFIG_ATH9K_DFS_DEBUGFS) += dfs_debug.o ath9k-$(CONFIG_ATH9K_DFS_CERTIFIED) += dfs.o ath9k-$(CONFIG_ATH9K_TX99) += tx99.o ath9k-$(CONFIG_ATH9K_WOW) += wow.o -ath9k-$(CONFIG_ATH9K_HWRNG) += rng.o ath9k-$(CONFIG_ATH9K_DEBUGFS) += debug.o diff --git a/drivers/net/wireless/ath/ath9k/ath9k.h b/drivers/net/wireless/ath/ath9k/ath9k.h index 45596e5ae4db..a7a81b3969ce 100644 --- a/drivers/net/wireless/ath/ath9k/ath9k.h +++ b/drivers/net/wireless/ath/ath9k/ath9k.h @@ -23,7 +23,6 @@ #include #include #include -#include #include "common.h" #include "debug.h" @@ -1042,12 +1041,6 @@ struct ath_softc { u32 wow_intr_before_sleep; bool force_wow; #endif - -#ifdef CONFIG_ATH9K_HWRNG - struct hwrng rng; - bool rng_initialized; - u32 rng_last; -#endif }; /********/ @@ -1070,22 +1063,6 @@ static inline int ath9k_tx99_send(struct ath_softc *sc, } #endif /* CONFIG_ATH9K_TX99 */ -/***************************/ -/* Random Number Generator */ -/***************************/ -#ifdef CONFIG_ATH9K_HWRNG -void ath9k_rng_register(struct ath_softc *sc); -void ath9k_rng_unregister(struct ath_softc *sc); -#else -static inline void ath9k_rng_register(struct ath_softc *sc) -{ -} - -static inline void ath9k_rng_unregister(struct ath_softc *sc) -{ -} -#endif - static inline void ath_read_cachesize(struct ath_common *common, int *csz) { common->bus_ops->read_cachesize(common, csz); diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c index 5916ab2f4a3d..cfd45cb8ccfc 100644 --- a/drivers/net/wireless/ath/ath9k/main.c +++ b/drivers/net/wireless/ath/ath9k/main.c @@ -739,8 +739,6 @@ static int ath9k_start(struct ieee80211_hw *hw) ath9k_ps_restore(sc); - ath9k_rng_register(sc); - return 0; } @@ -830,8 +828,6 @@ static void ath9k_stop(struct ieee80211_hw *hw) ath9k_deinit_channel_context(sc); - ath9k_rng_unregister(sc); - mutex_lock(&sc->mutex); ath_cancel_work(sc); diff --git a/drivers/net/wireless/ath/ath9k/rng.c b/drivers/net/wireless/ath/ath9k/rng.c deleted file mode 100644 index d8fa7a535ab8..000000000000 --- a/drivers/net/wireless/ath/ath9k/rng.c +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (c) 2015 Qualcomm Atheros, Inc. - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include "ath9k.h" -#include "hw.h" -#include "ar9003_phy.h" - -static int ath9k_rng_data_read(struct hwrng *rng, u32 *data) -{ - u32 v1, v2; - struct ath_softc *sc = (struct ath_softc *)rng->priv; - struct ath_hw *ah = sc->sc_ah; - - ath9k_ps_wakeup(sc); - - REG_RMW_FIELD(ah, AR_PHY_TEST, AR_PHY_TEST_BBB_OBS_SEL, 5); - REG_CLR_BIT(ah, AR_PHY_TEST, AR_PHY_TEST_RX_OBS_SEL_BIT5); - REG_RMW_FIELD(ah, AR_PHY_TEST_CTL_STATUS, AR_PHY_TEST_CTL_RX_OBS_SEL, 0); - - v1 = REG_READ(ah, AR_PHY_TST_ADC); - v2 = REG_READ(ah, AR_PHY_TST_ADC); - - ath9k_ps_restore(sc); - - /* wait for data ready */ - if (v1 && v2 && sc->rng_last != v1 && v1 != v2) { - *data = (v1 & 0xffff) | (v2 << 16); - sc->rng_last = v2; - - return sizeof(u32); - } - - sc->rng_last = v2; - - return 0; -} - -void ath9k_rng_register(struct ath_softc *sc) -{ - struct ath_hw *ah = sc->sc_ah; - - if (WARN_ON(sc->rng_initialized)) - return; - - if (!AR_SREV_9300_20_OR_LATER(ah)) - return; - - sc->rng.name = "ath9k"; - sc->rng.data_read = ath9k_rng_data_read; - sc->rng.priv = (unsigned long)sc; - - if (!hwrng_register(&sc->rng)) - sc->rng_initialized = true; -} - -void ath9k_rng_unregister(struct ath_softc *sc) -{ - if (sc->rng_initialized) { - hwrng_unregister(&sc->rng); - sc->rng_initialized = false; - } -}