Return-path: Received: from charlotte.tuxdriver.com ([70.61.120.58]:40349 "EHLO smtp.tuxdriver.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755368AbaIZSAQ (ORCPT ); Fri, 26 Sep 2014 14:00:16 -0400 Date: Fri, 26 Sep 2014 13:45:01 -0400 From: "John W. Linville" To: Paul Bolle Cc: Jiri Slaby , Nick Kossifidis , "Luis R. Rodriguez" , Sergey Ryazanov , Oleksij Rempel , Richard Weinberger , Jonathan Bither , Hauke Mehrtens , ath5k-devel@venema.h4ckr.net, open@hauke-m.de, list@hauke-m.de, antonynpavlov@gmail.com, openwrt-devel@lists.openwrt.org, ath5k-devel@venema.h4ckr.net, linux-wireless@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH] [RESEND] ath5k: Remove AHB bus support Message-ID: <20140926174501.GI22967@tuxdriver.com> (sfid-20140926_200053_887282_DA6C52B3) References: <1403087119.1984.93.camel@x220> <1403091974.1984.102.camel@x220> <1409911856.7832.9.camel@x220> <1409916824.7832.20.camel@x220> <20140909182734.GJ29412@tuxdriver.com> <1410339221.11097.10.camel@x220> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii In-Reply-To: <1410339221.11097.10.camel@x220> Sender: linux-wireless-owner@vger.kernel.org List-ID: OK, I'm merging this... On Wed, Sep 10, 2014 at 10:53:41AM +0200, Paul Bolle wrote: > AHB bus support was added in v2.6.38, through commit a0b907ee2a71 > ("ath5k: Add AHB bus support."). That code can only be build if the > Kconfig symbol ATHEROS_AR231X is set. But that symbol has never been > added to the tree. So AHB bus support has always been dead code. > > Let's remove all code that depends on ATHEROS_AR231X. If that symbol > ever gets added to the tree the AHB bus support can be re-added too. > > Signed-off-by: Paul Bolle > --- > First sent in https://lkml.org/lkml/2013/5/13/303 . Updated on top of > next-20140909. > > Build tested only (no access to this hardware). > > drivers/net/wireless/ath/ath5k/Kconfig | 14 +- > drivers/net/wireless/ath/ath5k/Makefile | 1 - > drivers/net/wireless/ath/ath5k/ahb.c | 234 -------------------------------- > drivers/net/wireless/ath/ath5k/ath5k.h | 28 ---- > drivers/net/wireless/ath/ath5k/base.c | 14 -- > drivers/net/wireless/ath/ath5k/led.c | 6 - > 6 files changed, 3 insertions(+), 294 deletions(-) > delete mode 100644 drivers/net/wireless/ath/ath5k/ahb.c > > diff --git a/drivers/net/wireless/ath/ath5k/Kconfig b/drivers/net/wireless/ath/ath5k/Kconfig > index c9f81a388f15..93caf8e68901 100644 > --- a/drivers/net/wireless/ath/ath5k/Kconfig > +++ b/drivers/net/wireless/ath/ath5k/Kconfig > @@ -1,13 +1,12 @@ > config ATH5K > tristate "Atheros 5xxx wireless cards support" > - depends on (PCI || ATHEROS_AR231X) && MAC80211 > + depends on PCI && MAC80211 > select ATH_COMMON > select MAC80211_LEDS > select LEDS_CLASS > select NEW_LEDS > select AVERAGE > - select ATH5K_AHB if (ATHEROS_AR231X && !PCI) > - select ATH5K_PCI if (!ATHEROS_AR231X && PCI) > + select ATH5K_PCI > ---help--- > This module adds support for wireless adapters based on > Atheros 5xxx chipset. > @@ -52,16 +51,9 @@ config ATH5K_TRACER > > If unsure, say N. > > -config ATH5K_AHB > - bool "Atheros 5xxx AHB bus support" > - depends on (ATHEROS_AR231X && !PCI) > - ---help--- > - This adds support for WiSoC type chipsets of the 5xxx Atheros > - family. > - > config ATH5K_PCI > bool "Atheros 5xxx PCI bus support" > - depends on (!ATHEROS_AR231X && PCI) > + depends on PCI > ---help--- > This adds support for PCI type chipsets of the 5xxx Atheros > family. > diff --git a/drivers/net/wireless/ath/ath5k/Makefile b/drivers/net/wireless/ath/ath5k/Makefile > index 1b3a34f7f224..51e2d8668041 100644 > --- a/drivers/net/wireless/ath/ath5k/Makefile > +++ b/drivers/net/wireless/ath/ath5k/Makefile > @@ -17,6 +17,5 @@ ath5k-y += ani.o > ath5k-y += sysfs.o > ath5k-y += mac80211-ops.o > ath5k-$(CONFIG_ATH5K_DEBUG) += debug.o > -ath5k-$(CONFIG_ATH5K_AHB) += ahb.o > ath5k-$(CONFIG_ATH5K_PCI) += pci.o > obj-$(CONFIG_ATH5K) += ath5k.o > diff --git a/drivers/net/wireless/ath/ath5k/ahb.c b/drivers/net/wireless/ath/ath5k/ahb.c > deleted file mode 100644 > index 79bffe165cab..000000000000 > --- a/drivers/net/wireless/ath/ath5k/ahb.c > +++ /dev/null > @@ -1,234 +0,0 @@ > -/* > - * Copyright (c) 2008-2009 Atheros Communications Inc. > - * Copyright (c) 2009 Gabor Juhos > - * Copyright (c) 2009 Imre Kaloz > - * > - * 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 > -#include > -#include > -#include > -#include > -#include "ath5k.h" > -#include "debug.h" > -#include "base.h" > -#include "reg.h" > - > -/* return bus cachesize in 4B word units */ > -static void ath5k_ahb_read_cachesize(struct ath_common *common, int *csz) > -{ > - *csz = L1_CACHE_BYTES >> 2; > -} > - > -static bool > -ath5k_ahb_eeprom_read(struct ath_common *common, u32 off, u16 *data) > -{ > - struct ath5k_hw *ah = common->priv; > - struct platform_device *pdev = to_platform_device(ah->dev); > - struct ar231x_board_config *bcfg = dev_get_platdata(&pdev->dev); > - u16 *eeprom, *eeprom_end; > - > - eeprom = (u16 *) bcfg->radio; > - eeprom_end = ((void *) bcfg->config) + BOARD_CONFIG_BUFSZ; > - > - eeprom += off; > - if (eeprom > eeprom_end) > - return false; > - > - *data = *eeprom; > - return true; > -} > - > -int ath5k_hw_read_srev(struct ath5k_hw *ah) > -{ > - struct platform_device *pdev = to_platform_device(ah->dev); > - struct ar231x_board_config *bcfg = dev_get_platdata(&pdev->dev); > - ah->ah_mac_srev = bcfg->devid; > - return 0; > -} > - > -static int ath5k_ahb_eeprom_read_mac(struct ath5k_hw *ah, u8 *mac) > -{ > - struct platform_device *pdev = to_platform_device(ah->dev); > - struct ar231x_board_config *bcfg = dev_get_platdata(&pdev->dev); > - u8 *cfg_mac; > - > - if (to_platform_device(ah->dev)->id == 0) > - cfg_mac = bcfg->config->wlan0_mac; > - else > - cfg_mac = bcfg->config->wlan1_mac; > - > - memcpy(mac, cfg_mac, ETH_ALEN); > - return 0; > -} > - > -static const struct ath_bus_ops ath_ahb_bus_ops = { > - .ath_bus_type = ATH_AHB, > - .read_cachesize = ath5k_ahb_read_cachesize, > - .eeprom_read = ath5k_ahb_eeprom_read, > - .eeprom_read_mac = ath5k_ahb_eeprom_read_mac, > -}; > - > -/*Initialization*/ > -static int ath_ahb_probe(struct platform_device *pdev) > -{ > - struct ar231x_board_config *bcfg = dev_get_platdata(&pdev->dev); > - struct ath5k_hw *ah; > - struct ieee80211_hw *hw; > - struct resource *res; > - void __iomem *mem; > - int irq; > - int ret = 0; > - u32 reg; > - > - if (!dev_get_platdata(&pdev->dev)) { > - dev_err(&pdev->dev, "no platform data specified\n"); > - ret = -EINVAL; > - goto err_out; > - } > - > - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); > - if (res == NULL) { > - dev_err(&pdev->dev, "no memory resource found\n"); > - ret = -ENXIO; > - goto err_out; > - } > - > - mem = ioremap_nocache(res->start, resource_size(res)); > - if (mem == NULL) { > - dev_err(&pdev->dev, "ioremap failed\n"); > - ret = -ENOMEM; > - goto err_out; > - } > - > - res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); > - if (res == NULL) { > - dev_err(&pdev->dev, "no IRQ resource found\n"); > - ret = -ENXIO; > - goto err_iounmap; > - } > - > - irq = res->start; > - > - hw = ieee80211_alloc_hw(sizeof(struct ath5k_hw), &ath5k_hw_ops); > - if (hw == NULL) { > - dev_err(&pdev->dev, "no memory for ieee80211_hw\n"); > - ret = -ENOMEM; > - goto err_iounmap; > - } > - > - ah = hw->priv; > - ah->hw = hw; > - ah->dev = &pdev->dev; > - ah->iobase = mem; > - ah->irq = irq; > - ah->devid = bcfg->devid; > - > - if (bcfg->devid >= AR5K_SREV_AR2315_R6) { > - /* Enable WMAC AHB arbitration */ > - reg = ioread32((void __iomem *) AR5K_AR2315_AHB_ARB_CTL); > - reg |= AR5K_AR2315_AHB_ARB_CTL_WLAN; > - iowrite32(reg, (void __iomem *) AR5K_AR2315_AHB_ARB_CTL); > - > - /* Enable global WMAC swapping */ > - reg = ioread32((void __iomem *) AR5K_AR2315_BYTESWAP); > - reg |= AR5K_AR2315_BYTESWAP_WMAC; > - iowrite32(reg, (void __iomem *) AR5K_AR2315_BYTESWAP); > - } else { > - /* Enable WMAC DMA access (assuming 5312 or 231x*/ > - /* TODO: check other platforms */ > - reg = ioread32((void __iomem *) AR5K_AR5312_ENABLE); > - if (to_platform_device(ah->dev)->id == 0) > - reg |= AR5K_AR5312_ENABLE_WLAN0; > - else > - reg |= AR5K_AR5312_ENABLE_WLAN1; > - iowrite32(reg, (void __iomem *) AR5K_AR5312_ENABLE); > - > - /* > - * On a dual-band AR5312, the multiband radio is only > - * used as pass-through. Disable 2 GHz support in the > - * driver for it > - */ > - if (to_platform_device(ah->dev)->id == 0 && > - (bcfg->config->flags & (BD_WLAN0 | BD_WLAN1)) == > - (BD_WLAN1 | BD_WLAN0)) > - ah->ah_capabilities.cap_needs_2GHz_ovr = true; > - else > - ah->ah_capabilities.cap_needs_2GHz_ovr = false; > - } > - > - ret = ath5k_init_ah(ah, &ath_ahb_bus_ops); > - if (ret != 0) { > - dev_err(&pdev->dev, "failed to attach device, err=%d\n", ret); > - ret = -ENODEV; > - goto err_free_hw; > - } > - > - platform_set_drvdata(pdev, hw); > - > - return 0; > - > - err_free_hw: > - ieee80211_free_hw(hw); > - err_iounmap: > - iounmap(mem); > - err_out: > - return ret; > -} > - > -static int ath_ahb_remove(struct platform_device *pdev) > -{ > - struct ar231x_board_config *bcfg = dev_get_platdata(&pdev->dev); > - struct ieee80211_hw *hw = platform_get_drvdata(pdev); > - struct ath5k_hw *ah; > - u32 reg; > - > - if (!hw) > - return 0; > - > - ah = hw->priv; > - > - if (bcfg->devid >= AR5K_SREV_AR2315_R6) { > - /* Disable WMAC AHB arbitration */ > - reg = ioread32((void __iomem *) AR5K_AR2315_AHB_ARB_CTL); > - reg &= ~AR5K_AR2315_AHB_ARB_CTL_WLAN; > - iowrite32(reg, (void __iomem *) AR5K_AR2315_AHB_ARB_CTL); > - } else { > - /*Stop DMA access */ > - reg = ioread32((void __iomem *) AR5K_AR5312_ENABLE); > - if (to_platform_device(ah->dev)->id == 0) > - reg &= ~AR5K_AR5312_ENABLE_WLAN0; > - else > - reg &= ~AR5K_AR5312_ENABLE_WLAN1; > - iowrite32(reg, (void __iomem *) AR5K_AR5312_ENABLE); > - } > - > - ath5k_deinit_ah(ah); > - iounmap(ah->iobase); > - ieee80211_free_hw(hw); > - > - return 0; > -} > - > -static struct platform_driver ath_ahb_driver = { > - .probe = ath_ahb_probe, > - .remove = ath_ahb_remove, > - .driver = { > - .name = "ar231x-wmac", > - .owner = THIS_MODULE, > - }, > -}; > - > -module_platform_driver(ath_ahb_driver); > diff --git a/drivers/net/wireless/ath/ath5k/ath5k.h b/drivers/net/wireless/ath/ath5k/ath5k.h > index 85316bb3f8c6..ed2468220216 100644 > --- a/drivers/net/wireless/ath/ath5k/ath5k.h > +++ b/drivers/net/wireless/ath/ath5k/ath5k.h > @@ -1647,32 +1647,6 @@ static inline struct ath_regulatory *ath5k_hw_regulatory(struct ath5k_hw *ah) > return &(ath5k_hw_common(ah)->regulatory); > } > > -#ifdef CONFIG_ATHEROS_AR231X > -#define AR5K_AR2315_PCI_BASE ((void __iomem *)0xb0100000) > - > -static inline void __iomem *ath5k_ahb_reg(struct ath5k_hw *ah, u16 reg) > -{ > - /* On AR2315 and AR2317 the PCI clock domain registers > - * are outside of the WMAC register space */ > - if (unlikely((reg >= 0x4000) && (reg < 0x5000) && > - (ah->ah_mac_srev >= AR5K_SREV_AR2315_R6))) > - return AR5K_AR2315_PCI_BASE + reg; > - > - return ah->iobase + reg; > -} > - > -static inline u32 ath5k_hw_reg_read(struct ath5k_hw *ah, u16 reg) > -{ > - return ioread32(ath5k_ahb_reg(ah, reg)); > -} > - > -static inline void ath5k_hw_reg_write(struct ath5k_hw *ah, u32 val, u16 reg) > -{ > - iowrite32(val, ath5k_ahb_reg(ah, reg)); > -} > - > -#else > - > static inline u32 ath5k_hw_reg_read(struct ath5k_hw *ah, u16 reg) > { > return ioread32(ah->iobase + reg); > @@ -1683,8 +1657,6 @@ static inline void ath5k_hw_reg_write(struct ath5k_hw *ah, u32 val, u16 reg) > iowrite32(val, ah->iobase + reg); > } > > -#endif > - > static inline enum ath_bus_type ath5k_get_bus_type(struct ath5k_hw *ah) > { > return ath5k_hw_common(ah)->bus_ops->ath_bus_type; > diff --git a/drivers/net/wireless/ath/ath5k/base.c b/drivers/net/wireless/ath/ath5k/base.c > index 59a87247aac4..a4a09bb8f2f3 100644 > --- a/drivers/net/wireless/ath/ath5k/base.c > +++ b/drivers/net/wireless/ath/ath5k/base.c > @@ -99,15 +99,6 @@ static int ath5k_reset(struct ath5k_hw *ah, struct ieee80211_channel *chan, > > /* Known SREVs */ > static const struct ath5k_srev_name srev_names[] = { > -#ifdef CONFIG_ATHEROS_AR231X > - { "5312", AR5K_VERSION_MAC, AR5K_SREV_AR5312_R2 }, > - { "5312", AR5K_VERSION_MAC, AR5K_SREV_AR5312_R7 }, > - { "2313", AR5K_VERSION_MAC, AR5K_SREV_AR2313_R8 }, > - { "2315", AR5K_VERSION_MAC, AR5K_SREV_AR2315_R6 }, > - { "2315", AR5K_VERSION_MAC, AR5K_SREV_AR2315_R7 }, > - { "2317", AR5K_VERSION_MAC, AR5K_SREV_AR2317_R1 }, > - { "2317", AR5K_VERSION_MAC, AR5K_SREV_AR2317_R2 }, > -#else > { "5210", AR5K_VERSION_MAC, AR5K_SREV_AR5210 }, > { "5311", AR5K_VERSION_MAC, AR5K_SREV_AR5311 }, > { "5311A", AR5K_VERSION_MAC, AR5K_SREV_AR5311A }, > @@ -126,7 +117,6 @@ static const struct ath5k_srev_name srev_names[] = { > { "5418", AR5K_VERSION_MAC, AR5K_SREV_AR5418 }, > { "2425", AR5K_VERSION_MAC, AR5K_SREV_AR2425 }, > { "2417", AR5K_VERSION_MAC, AR5K_SREV_AR2417 }, > -#endif > { "xxxxx", AR5K_VERSION_MAC, AR5K_SREV_UNKNOWN }, > { "5110", AR5K_VERSION_RAD, AR5K_SREV_RAD_5110 }, > { "5111", AR5K_VERSION_RAD, AR5K_SREV_RAD_5111 }, > @@ -142,10 +132,6 @@ static const struct ath5k_srev_name srev_names[] = { > { "5413", AR5K_VERSION_RAD, AR5K_SREV_RAD_5413 }, > { "5424", AR5K_VERSION_RAD, AR5K_SREV_RAD_5424 }, > { "5133", AR5K_VERSION_RAD, AR5K_SREV_RAD_5133 }, > -#ifdef CONFIG_ATHEROS_AR231X > - { "2316", AR5K_VERSION_RAD, AR5K_SREV_RAD_2316 }, > - { "2317", AR5K_VERSION_RAD, AR5K_SREV_RAD_2317 }, > -#endif > { "xxxxx", AR5K_VERSION_RAD, AR5K_SREV_UNKNOWN }, > }; > > diff --git a/drivers/net/wireless/ath/ath5k/led.c b/drivers/net/wireless/ath/ath5k/led.c > index 2062d1190556..0beb7e7d6075 100644 > --- a/drivers/net/wireless/ath/ath5k/led.c > +++ b/drivers/net/wireless/ath/ath5k/led.c > @@ -163,20 +163,14 @@ int ath5k_init_leds(struct ath5k_hw *ah) > { > int ret = 0; > struct ieee80211_hw *hw = ah->hw; > -#ifndef CONFIG_ATHEROS_AR231X > struct pci_dev *pdev = ah->pdev; > -#endif > char name[ATH5K_LED_MAX_NAME_LEN + 1]; > const struct pci_device_id *match; > > if (!ah->pdev) > return 0; > > -#ifdef CONFIG_ATHEROS_AR231X > - match = NULL; > -#else > match = pci_match_id(&ath5k_led_devices[0], pdev); > -#endif > if (match) { > __set_bit(ATH_STAT_LEDSOFT, ah->status); > ah->led_pin = ATH_PIN(match->driver_data); > -- > 1.9.3 > > > -- John W. Linville Someday the world will need a hero, and you linville@tuxdriver.com might be all we have. Be ready.