linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 8/9] ath5k: AHB port. Add AHB bus support.
       [not found] <22942120.791289486697022.JavaMail.wlan@CHBU500181>
@ 2010-11-11 14:58 ` Wojciech Dubowik
  2010-11-12 19:26   ` Bob Copeland
  0 siblings, 1 reply; 10+ messages in thread
From: Wojciech Dubowik @ 2010-11-11 14:58 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless


AHB specific functions are now in ahb.c file. There is no common
init functions which tries first pci and then ahb becasue on some
wisoc's PCI is not present. AHB bus is compiled in when
CONFIG_ATHEROS_AR231X is set in kernel.

Signed-off-by: Wojciech Dubowik <Wojciech.Dubowik@neratec.com>
---
 drivers/net/wireless/ath/ath5k/Makefile |    2 +-
 drivers/net/wireless/ath/ath5k/ahb.c    |  221 +++++++++++++++++++++++++++++++
 drivers/net/wireless/ath/ath5k/ath5k.h  |   12 ++
 drivers/net/wireless/ath/ath5k/base.c   |   16 ++-
 drivers/net/wireless/ath/ath5k/led.c    |    6 +
 drivers/net/wireless/ath/ath5k/reg.h    |   25 ++++
 6 files changed, 279 insertions(+), 3 deletions(-)
 create mode 100644 drivers/net/wireless/ath/ath5k/ahb.c

diff --git a/drivers/net/wireless/ath/ath5k/Makefile b/drivers/net/wireless/ath/ath5k/Makefile
index dae881c..50d5e08 100644
--- a/drivers/net/wireless/ath/ath5k/Makefile
+++ b/drivers/net/wireless/ath/ath5k/Makefile
@@ -15,5 +15,5 @@ ath5k-y				+= rfkill.o
 ath5k-y				+= ani.o
 ath5k-y				+= sysfs.o
 ath5k-$(CONFIG_ATH5K_DEBUG)	+= debug.o
-ath5k-y				+= pci.o
+ath5k-y				+= $(if $(CONFIG_ATHEROS_AR231X),ahb,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
new file mode 100644
index 0000000..6e1aa65
--- /dev/null
+++ b/drivers/net/wireless/ath/ath5k/ahb.c
@@ -0,0 +1,221 @@
+/*
+ * Copyright (c) 2008-2009 Atheros Communications Inc.
+ * Copyright (c) 2009 Gabor Juhos <juhosg@openwrt.org>
+ * Copyright (c) 2009 Imre Kaloz <kaloz@openwrt.org>
+ *
+ * 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 <linux/nl80211.h>
+#include <linux/platform_device.h>
+#include <ar231x_platform.h>
+#include "ath5k.h"
+#include "debug.h"
+#include "base.h"
+#include "reg.h"
+#include "debug.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;
+}
+
+bool ath5k_ahb_eeprom_read(struct ath_common *common, u32 off, u16 *data)
+{
+	struct ath5k_softc *sc = common->priv;
+	struct platform_device *pdev = to_platform_device(sc->dev);
+	struct ar231x_board_config *bcfg = pdev->dev.platform_data;
+	u16 *eeprom, *eeprom_end;
+
+
+
+	bcfg = pdev->dev.platform_data;
+	eeprom = (u16 *) bcfg->radio;
+	eeprom_end = ((void *) bcfg->config) + BOARD_CONFIG_BUFSZ;
+
+	eeprom += off;
+	if (eeprom > eeprom_end)
+		return -EINVAL;
+
+	*data = *eeprom;
+	return 0;
+}
+
+int ath5k_bus_read_srev(struct ath5k_hw *ah)
+{
+	struct ath5k_softc *sc = ah->ah_sc;
+	struct platform_device *pdev = to_platform_device(sc->dev);
+	struct ar231x_board_config *bcfg = pdev->dev.platform_data;
+	ah->ah_mac_srev = bcfg->devid;
+	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,
+};
+
+/*Initialization*/
+static int ath_ahb_probe(struct platform_device *pdev)
+{
+	struct ar231x_board_config *bcfg = pdev->dev.platform_data;
+	struct ath5k_softc *sc;
+	struct ieee80211_hw *hw;
+	struct resource *res;
+	void __iomem *mem;
+	int irq;
+	int ret = 0;
+	u32 reg;
+
+	if (!pdev->dev.platform_data) {
+		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, res->end - res->start + 1);
+	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_out;
+	}
+
+	irq = res->start;
+
+	hw = ieee80211_alloc_hw(sizeof(struct ath5k_softc), &ath5k_hw_ops);
+	if (hw == NULL) {
+		dev_err(&pdev->dev, "no memory for ieee80211_hw\n");
+		ret = -ENOMEM;
+		goto err_out;
+	}
+
+	sc = hw->priv;
+	sc->hw = hw;
+	sc->dev = &pdev->dev;
+	sc->iobase = mem;
+	sc->irq = irq;
+	sc->devid = bcfg->devid;
+
+	if (bcfg->devid >= AR5K_SREV_AR2315_R6) {
+		/* Enable WMAC AHB arbitration */
+		reg = __raw_readl((void __iomem *) AR5K_AR2315_AHB_ARB_CTL);
+		reg |= AR5K_AR2315_AHB_ARB_CTL_WLAN;
+		__raw_writel(reg, (void __iomem *) AR5K_AR2315_AHB_ARB_CTL);
+
+		/* Enable global WMAC swapping */
+		reg = __raw_readl((void __iomem *) AR5K_AR2315_BYTESWAP);
+		reg |= AR5K_AR2315_BYTESWAP_WMAC;
+		__raw_writel(reg, (void __iomem *) AR5K_AR2315_BYTESWAP);
+	} else 	{
+		/* Enable WMAC DMA access (assuming 5312 or 231x*/
+		/* TODO: check other platforms */
+		reg = __raw_readl((void __iomem *) AR5K_AR5312_ENABLE);
+		if( to_platform_device(sc->dev)->id == 0) {
+			reg |= AR5K_AR5312_ENABLE_WLAN0;
+		} else {
+			reg |= AR5K_AR5312_ENABLE_WLAN1;
+		}
+		__raw_writel(reg, (void __iomem *) AR5K_AR5312_ENABLE);
+	}
+
+	ret = ath5k_attach(sc, &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);
+	platform_set_drvdata(pdev, NULL);
+ err_out:
+	return ret;
+}
+
+static int ath_ahb_remove(struct platform_device *pdev)
+{
+	struct ar231x_board_config *bcfg = pdev->dev.platform_data;
+	struct ieee80211_hw *hw = platform_get_drvdata(pdev);
+	struct ath5k_softc *sc;
+	u32 reg;
+
+	if (!hw)
+		return 0;
+
+	sc = hw->priv;
+
+	if (bcfg->devid >= AR5K_SREV_AR2315_R6) {
+		/* Disable WMAC AHB arbitration */
+		reg = __raw_readl((void __iomem *) AR5K_AR2315_AHB_ARB_CTL);
+		reg &= ~AR5K_AR2315_AHB_ARB_CTL_WLAN;
+		__raw_writel(reg, (void __iomem *) AR5K_AR2315_AHB_ARB_CTL);
+	} else {
+		/*Stop DMA access */
+		reg = __raw_readl((void __iomem *) AR5K_AR5312_ENABLE);
+		if( to_platform_device(sc->dev)->id == 0) {
+			reg &= ~AR5K_AR5312_ENABLE_WLAN0;
+		} else {
+			reg &= ~AR5K_AR5312_ENABLE_WLAN1;
+		}
+		__raw_writel(reg, (void __iomem *) AR5K_AR5312_ENABLE);
+	}
+	
+	ath5k_detach(sc);
+	platform_set_drvdata(pdev, NULL);
+
+	return 0;
+}
+
+static struct platform_driver ath_ahb_driver = {
+	.probe      = ath_ahb_probe,
+	.remove     = ath_ahb_remove,
+	.driver		= {
+		.name	= "ar231x-wmac",
+		.owner	= THIS_MODULE,
+	},
+};
+
+static int __init
+ath5k_ahb_init(void)
+{
+	return platform_driver_register(&ath_ahb_driver);
+}
+
+static void __exit
+ath5k_ahb_exit(void)
+{
+	platform_driver_unregister(&ath_ahb_driver);
+}
+
+module_init(ath5k_ahb_init);
+module_exit(ath5k_ahb_exit);
diff --git a/drivers/net/wireless/ath/ath5k/ath5k.h b/drivers/net/wireless/ath/ath5k/ath5k.h
index a13243a..1c46a63 100644
--- a/drivers/net/wireless/ath/ath5k/ath5k.h
+++ b/drivers/net/wireless/ath/ath5k/ath5k.h
@@ -303,12 +303,19 @@ struct ath5k_srev_name {
 #define AR5K_SREV_AR5311B	0x30 /* Spirit */
 #define AR5K_SREV_AR5211	0x40 /* Oahu */
 #define AR5K_SREV_AR5212	0x50 /* Venice */
+#define AR5K_SREV_AR5312_R2	0x52 /* AP31 */
 #define AR5K_SREV_AR5212_V4	0x54 /* ??? */
 #define AR5K_SREV_AR5213	0x55 /* ??? */
+#define AR5K_SREV_AR5312_R7	0x57 /* AP30 */
+#define AR5K_SREV_AR2313_R8	0x58 /* AP43 */
 #define AR5K_SREV_AR5213A	0x59 /* Hainan */
 #define AR5K_SREV_AR2413	0x78 /* Griffin lite */
 #define AR5K_SREV_AR2414	0x70 /* Griffin */
+#define AR5K_SREV_AR2315_R6 0x86 /* AP51-Light */
+#define AR5K_SREV_AR2315_R7 0x87 /* AP51-Full */
 #define AR5K_SREV_AR5424	0x90 /* Condor */
+#define AR5K_SREV_AR2317_R1 0x90 /* AP61-Light */
+#define AR5K_SREV_AR2317_R2 0x91 /* AP61-Full */
 #define AR5K_SREV_AR5413	0xa4 /* Eagle lite */
 #define AR5K_SREV_AR5414	0xa0 /* Eagle */
 #define AR5K_SREV_AR2415	0xb0 /* Talon */
@@ -1311,6 +1318,11 @@ static inline void ath5k_hw_reg_write(struct ath5k_hw *ah, u32 val, u16 reg)
 	iowrite32(val, ah->ah_iobase + reg);
 }
 
+static inline enum ath_bus_type ath5k_get_bus_type(struct ath5k_hw *ah)
+{
+	return ath5k_hw_common(ah)->bus_ops->ath_bus_type;
+}
+
 static inline void ath5k_read_cachesize(struct ath_common *common, int *csz)
 {
 	common->bus_ops->read_cachesize(common, csz);
diff --git a/drivers/net/wireless/ath/ath5k/base.c b/drivers/net/wireless/ath/ath5k/base.c
index 22464e2..13d5da5 100644
--- a/drivers/net/wireless/ath/ath5k/base.c
+++ b/drivers/net/wireless/ath/ath5k/base.c
@@ -86,6 +86,15 @@ static void ath5k_beacon_update_timers(struct ath5k_softc *sc, u64 bc_tsf);
 
 /* 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 },
@@ -104,6 +113,7 @@ 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 },
@@ -117,10 +127,12 @@ static const struct ath5k_srev_name srev_names[] = {
 	{ "2112B",	AR5K_VERSION_RAD,	AR5K_SREV_RAD_2112B },
 	{ "2413",	AR5K_VERSION_RAD,	AR5K_SREV_RAD_2413 },
 	{ "5413",	AR5K_VERSION_RAD,	AR5K_SREV_RAD_5413 },
-	{ "2316",	AR5K_VERSION_RAD,	AR5K_SREV_RAD_2316 },
-	{ "2317",	AR5K_VERSION_RAD,	AR5K_SREV_RAD_2317 },
 	{ "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 1f5a991..be43158 100644
--- a/drivers/net/wireless/ath/ath5k/led.c
+++ b/drivers/net/wireless/ath/ath5k/led.c
@@ -161,14 +161,20 @@ int ath5k_init_leds(struct ath5k_softc *sc)
 {
 	int ret = 0;
 	struct ieee80211_hw *hw = sc->hw;
+#ifndef CONFIG_ATHEROS_AR231X
 	struct pci_dev *pdev = sc->pdev;
+#endif
 	char name[ATH5K_LED_MAX_NAME_LEN + 1];
 	const struct pci_device_id *match;
 
 	if (!sc->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, sc->status);
 		sc->led_pin = ATH_PIN(match->driver_data);
diff --git a/drivers/net/wireless/ath/ath5k/reg.h b/drivers/net/wireless/ath/ath5k/reg.h
index ca79ecd..2ed6b43 100644
--- a/drivers/net/wireless/ath/ath5k/reg.h
+++ b/drivers/net/wireless/ath/ath5k/reg.h
@@ -2558,3 +2558,28 @@
  */
 #define AR5K_PHY_PDADC_TXPOWER_BASE	0xa280
 #define	AR5K_PHY_PDADC_TXPOWER(_n)	(AR5K_PHY_PDADC_TXPOWER_BASE + ((_n) << 2))
+
+/*
+ * Platform registers for WiSoC
+ */
+#define AR5K_AR5312_RESET		0xbc003020
+#define AR5K_AR5312_RESET_BB0_COLD	0x00000004
+#define AR5K_AR5312_RESET_BB1_COLD	0x00000200
+#define AR5K_AR5312_RESET_WMAC0		0x00002000
+#define AR5K_AR5312_RESET_BB0_WARM	0x00004000
+#define AR5K_AR5312_RESET_WMAC1		0x00020000
+#define AR5K_AR5312_RESET_BB1_WARM	0x00040000
+
+#define AR5K_AR5312_ENABLE		0xbc003080
+#define AR5K_AR5312_ENABLE_WLAN0    0x00000001
+#define AR5K_AR5312_ENABLE_WLAN1    0x00000008
+
+#define AR5K_AR2315_RESET		0xb1000004
+#define AR5K_AR2315_RESET_WMAC		0x00000001
+#define AR5K_AR2315_RESET_BB_WARM	0x00000002
+
+#define AR5K_AR2315_AHB_ARB_CTL		0xb1000008
+#define AR5K_AR2315_AHB_ARB_CTL_WLAN	0x00000002
+
+#define AR5K_AR2315_BYTESWAP	0xb100000c
+#define AR5K_AR2315_BYTESWAP_WMAC	0x00000002
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH 8/9] ath5k: AHB port. Add AHB bus support.
  2010-11-11 14:58 ` Wojciech Dubowik
@ 2010-11-12 19:26   ` Bob Copeland
  2010-11-12 19:36     ` Felix Fietkau
  0 siblings, 1 reply; 10+ messages in thread
From: Bob Copeland @ 2010-11-12 19:26 UTC (permalink / raw)
  To: Wojciech Dubowik; +Cc: linville, linux-wireless

On Thu, Nov 11, 2010 at 9:58 AM, Wojciech Dubowik <dubowoj@neratec.com> wrote:
>
> AHB specific functions are now in ahb.c file. There is no common
> init functions which tries first pci and then ahb becasue on some

'because'

> --- a/drivers/net/wireless/ath/ath5k/Makefile
> +++ b/drivers/net/wireless/ath/ath5k/Makefile
> @@ -15,5 +15,5 @@ ath5k-y                               += rfkill.o
>  ath5k-y                                += ani.o
>  ath5k-y                                += sysfs.o
>  ath5k-$(CONFIG_ATH5K_DEBUG)    += debug.o
> -ath5k-y                                += pci.o
> +ath5k-y                                += $(if $(CONFIG_ATHEROS_AR231X),ahb,pci).o
>  obj-$(CONFIG_ATH5K)            += ath5k.o

This is not the right way.. what if someone wants both in one kernel?

-- 
Bob Copeland %% www.bobcopeland.com

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 8/9] ath5k: AHB port. Add AHB bus support.
  2010-11-12 19:26   ` Bob Copeland
@ 2010-11-12 19:36     ` Felix Fietkau
  2010-11-12 19:51       ` Wojciech Dubowik
  0 siblings, 1 reply; 10+ messages in thread
From: Felix Fietkau @ 2010-11-12 19:36 UTC (permalink / raw)
  To: Bob Copeland; +Cc: Wojciech Dubowik, linville, linux-wireless

On 2010-11-12 8:26 PM, Bob Copeland wrote:
> On Thu, Nov 11, 2010 at 9:58 AM, Wojciech Dubowik <dubowoj@neratec.com> wrote:
>>
>> AHB specific functions are now in ahb.c file. There is no common
>> init functions which tries first pci and then ahb becasue on some
> 
> 'because'
> 
>> --- a/drivers/net/wireless/ath/ath5k/Makefile
>> +++ b/drivers/net/wireless/ath/ath5k/Makefile
>> @@ -15,5 +15,5 @@ ath5k-y                               += rfkill.o
>>  ath5k-y                                += ani.o
>>  ath5k-y                                += sysfs.o
>>  ath5k-$(CONFIG_ATH5K_DEBUG)    += debug.o
>> -ath5k-y                                += pci.o
>> +ath5k-y                                += $(if $(CONFIG_ATHEROS_AR231X),ahb,pci).o
>>  obj-$(CONFIG_ATH5K)            += ath5k.o
> 
> This is not the right way.. what if someone wants both in one kernel?
Having both in the kernel is completely pointless. There are no devices
that can support both, nor will there ever be.

- Felix

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 8/9] ath5k: AHB port. Add AHB bus support.
  2010-11-12 19:36     ` Felix Fietkau
@ 2010-11-12 19:51       ` Wojciech Dubowik
  2010-11-12 19:55         ` Felix Fietkau
  0 siblings, 1 reply; 10+ messages in thread
From: Wojciech Dubowik @ 2010-11-12 19:51 UTC (permalink / raw)
  To: Bob Copeland; +Cc: linville, linux-wireless, Felix Fietkau

> From: "Felix Fietkau" <nbd@openwrt.org>
> To: "Bob Copeland" <me@bobcopeland.com>
> Cc: "Wojciech Dubowik" <dubowoj@neratec.com>, linville@tuxdriver.com, linux-wireless@vger.kernel.org
> Sent: Freitag, 12. November 2010 20:36:51
> Subject: Re: [PATCH 8/9] ath5k: AHB port. Add AHB bus support.
> On 2010-11-12 8:26 PM, Bob Copeland wrote:
> > On Thu, Nov 11, 2010 at 9:58 AM, Wojciech Dubowik
> > <dubowoj@neratec.com> wrote:
> >>
> >> AHB specific functions are now in ahb.c file. There is no common
> >> init functions which tries first pci and then ahb becasue on some
> >
> > 'because'
> >
> >> --- a/drivers/net/wireless/ath/ath5k/Makefile
> >> +++ b/drivers/net/wireless/ath/ath5k/Makefile
> >> @@ -15,5 +15,5 @@ ath5k-y += rfkill.o
> >>  ath5k-y += ani.o
> >>  ath5k-y += sysfs.o
> >>  ath5k-$(CONFIG_ATH5K_DEBUG) += debug.o
> >> -ath5k-y += pci.o
> >> +ath5k-y += $(if $(CONFIG_ATHEROS_AR231X),ahb,pci).o
> >>  obj-$(CONFIG_ATH5K) += ath5k.o
> >
> > This is not the right way.. what if someone wants both in one
> > kernel?
> Having both in the kernel is completely pointless. There are no
> devices
> that can support both, nor will there ever be.
> 
> - Felix

I agree. The only advantage would be that some of the typos and missing
functions in either of the files would be detected during compile time.
My AR5312 board crashes when I enable PCI. I guess it's fixable but it's
out of the scope of the ath5k driver...

br,
Wojtek

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 8/9] ath5k: AHB port. Add AHB bus support.
  2010-11-12 19:51       ` Wojciech Dubowik
@ 2010-11-12 19:55         ` Felix Fietkau
  2010-11-13 13:27           ` Bob Copeland
  0 siblings, 1 reply; 10+ messages in thread
From: Felix Fietkau @ 2010-11-12 19:55 UTC (permalink / raw)
  To: Wojciech Dubowik; +Cc: Bob Copeland, linville, linux-wireless

On 2010-11-12 8:51 PM, Wojciech Dubowik wrote:
>> From: "Felix Fietkau" <nbd@openwrt.org>
>> To: "Bob Copeland" <me@bobcopeland.com>
>> Cc: "Wojciech Dubowik" <dubowoj@neratec.com>, linville@tuxdriver.com, linux-wireless@vger.kernel.org
>> Sent: Freitag, 12. November 2010 20:36:51
>> Subject: Re: [PATCH 8/9] ath5k: AHB port. Add AHB bus support.
>> On 2010-11-12 8:26 PM, Bob Copeland wrote:
>> > On Thu, Nov 11, 2010 at 9:58 AM, Wojciech Dubowik
>> > <dubowoj@neratec.com> wrote:
>> >>
>> >> AHB specific functions are now in ahb.c file. There is no common
>> >> init functions which tries first pci and then ahb becasue on some
>> >
>> > 'because'
>> >
>> >> --- a/drivers/net/wireless/ath/ath5k/Makefile
>> >> +++ b/drivers/net/wireless/ath/ath5k/Makefile
>> >> @@ -15,5 +15,5 @@ ath5k-y += rfkill.o
>> >>  ath5k-y += ani.o
>> >>  ath5k-y += sysfs.o
>> >>  ath5k-$(CONFIG_ATH5K_DEBUG) += debug.o
>> >> -ath5k-y += pci.o
>> >> +ath5k-y += $(if $(CONFIG_ATHEROS_AR231X),ahb,pci).o
>> >>  obj-$(CONFIG_ATH5K) += ath5k.o
>> >
>> > This is not the right way.. what if someone wants both in one
>> > kernel?
>> Having both in the kernel is completely pointless. There are no
>> devices
>> that can support both, nor will there ever be.
>> 
>> - Felix
> 
> I agree. The only advantage would be that some of the typos and missing
> functions in either of the files would be detected during compile time.
> My AR5312 board crashes when I enable PCI. I guess it's fixable but it's
> out of the scope of the ath5k driver...
Well, AR5312 does not have PCI. Only AR2315 has it, and there is only
one device that even uses it (Atheros never officially supported it).

- Felix

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 8/9] ath5k: AHB port. Add AHB bus support.
  2010-11-12 19:55         ` Felix Fietkau
@ 2010-11-13 13:27           ` Bob Copeland
  0 siblings, 0 replies; 10+ messages in thread
From: Bob Copeland @ 2010-11-13 13:27 UTC (permalink / raw)
  To: Felix Fietkau; +Cc: Wojciech Dubowik, linville, linux-wireless

On Fri, Nov 12, 2010 at 08:55:36PM +0100, Felix Fietkau wrote:
> On 2010-11-12 8:51 PM, Wojciech Dubowik wrote:
> >> Having both in the kernel is completely pointless. There are no
> >> devices
> >> that can support both, nor will there ever be.
> > 
> > I agree. The only advantage would be that some of the typos and missing
> > functions in either of the files would be detected during compile time.

Compile-testing coverage is a fine reason to allow people to compile
both modules.  Ok, I accept that it's a bit of a pain to create separate
modules, but can we at least do it like:

ath5k-$(CONFIG_ATH5K_PCI) += pci.o
ath5k-$(CONFIG_ATH5K_AHB) += ahb.o

and add the appropriate selects and mutual exclusion to the Kconfig?
Of course, that presupposes a Kconfig entry for CONFIG_ATHEROS_AR2316
where there is not one currently.

-- 
Bob Copeland %% www.bobcopeland.com


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 8/9] ath5k: AHB port. Add AHB bus support.
       [not found] <16168765.161289826231239.JavaMail.wlan@CHBU500181>
@ 2010-11-15 13:16 ` Wojciech Dubowik
  2010-11-15 15:07   ` Bob Copeland
  0 siblings, 1 reply; 10+ messages in thread
From: Wojciech Dubowik @ 2010-11-15 13:16 UTC (permalink / raw)
  To: Bob Copeland; +Cc: linville, linux-wireless, Felix Fietkau

> On Fri, Nov 12, 2010 at 08:55:36PM +0100, Felix Fietkau wrote:
> > On 2010-11-12 8:51 PM, Wojciech Dubowik wrote:
> > >> Having both in the kernel is completely pointless. There are no
> > >> devices
> > >> that can support both, nor will there ever be.
> > > 
> > > I agree. The only advantage would be that some of the typos and
> missing
> > > functions in either of the files would be detected during compile
> time.
> 
> Compile-testing coverage is a fine reason to allow people to compile
> both modules.  Ok, I accept that it's a bit of a pain to create
> separate
> modules, but can we at least do it like:
> 
> ath5k-$(CONFIG_ATH5K_PCI) += pci.o
> ath5k-$(CONFIG_ATH5K_AHB) += ahb.o
> 
> and add the appropriate selects and mutual exclusion to the Kconfig?
> Of course, that presupposes a Kconfig entry for CONFIG_ATHEROS_AR2316
> where there is not one currently.
> 
> -- 
> Bob Copeland %% www.bobcopeland.com

What about such changes compared to original patch? It's then possible to
compile both modules at the same time. Of course linking won't work because
I would need to separate functions like in ath9k.

---
diff --git a/drivers/net/wireless/ath/ath5k/Kconfig b/drivers/net/wireless/ath/ath5k/Kconfig
index eb83b7b..eba97f8 100644
--- a/drivers/net/wireless/ath/ath5k/Kconfig
+++ b/drivers/net/wireless/ath/ath5k/Kconfig
@@ -1,9 +1,11 @@
 config ATH5K
        tristate "Atheros 5xxx wireless cards support"
-       depends on PCI && MAC80211
+       depends on (PCI || ATHEROS_AR231X) && MAC80211
        select MAC80211_LEDS
        select LEDS_CLASS
        select NEW_LEDS
+       select ATH5K_AHB if ATHEROS_AR231X
+       select ATH5K_PCI if PCI
        ---help---
          This module adds support for wireless adapters based on
          Atheros 5xxx chipset.
@@ -37,3 +39,14 @@ config ATH5K_DEBUG
 
          modprobe ath5k debug=0x00000400
 
+config ATH5K_AHB
+       bool "Atheros 5xxx AHB bus support"
+       depends on ATHEROS_AR231X
+       ---help---
+       This adds support for WiSoC type chipsets of the 5xxx family
+
+config ATH5K_PCI
+       bool "Atheros 5xxx PCI bus support"
+       depends on PCI
+       ---help---
+       This adds support for PCI type chipsets of the 5xxx family
diff --git a/drivers/net/wireless/ath/ath5k/Makefile b/drivers/net/wireless/ath/ath5k/Makefile
index 50d5e08..a16b178 100644
--- a/drivers/net/wireless/ath/ath5k/Makefile
+++ b/drivers/net/wireless/ath/ath5k/Makefile
@@ -15,5 +15,6 @@ ath5k-y                               += rfkill.o
 ath5k-y                                += ani.o
 ath5k-y                                += sysfs.o
 ath5k-$(CONFIG_ATH5K_DEBUG)    += debug.o
-ath5k-y                                += $(if $(CONFIG_ATHEROS_AR231X),ahb,pci).o
+ath5k-$(CONFIG_ATH5K_PCI)      += pci.o
+ath5k-$(CONFIG_ATH5K_AHB)      += ahb.o
 obj-$(CONFIG_ATH5K)            += ath5k.o

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH 8/9] ath5k: AHB port. Add AHB bus support.
  2010-11-15 13:16 ` [PATCH 8/9] ath5k: AHB port. Add AHB bus support Wojciech Dubowik
@ 2010-11-15 15:07   ` Bob Copeland
  0 siblings, 0 replies; 10+ messages in thread
From: Bob Copeland @ 2010-11-15 15:07 UTC (permalink / raw)
  To: Wojciech Dubowik; +Cc: linville, linux-wireless, Felix Fietkau

On Mon, Nov 15, 2010 at 02:16:06PM +0100, Wojciech Dubowik wrote:
> What about such changes compared to original patch? It's then possible to
> compile both modules at the same time. Of course linking won't work because
> I would need to separate functions like in ath9k.

Is there a plan to add a config entry for ATHEROS_AR231X (or did
I miss it?)  Someone will one day run their Kconfig checker and
report it missing.

> --- a/drivers/net/wireless/ath/ath5k/Kconfig
> +++ b/drivers/net/wireless/ath/ath5k/Kconfig
> @@ -1,9 +1,11 @@
>  config ATH5K
>         tristate "Atheros 5xxx wireless cards support"
> -       depends on PCI && MAC80211
> +       depends on (PCI || ATHEROS_AR231X) && MAC80211
>         select MAC80211_LEDS
>         select LEDS_CLASS
>         select NEW_LEDS
> +       select ATH5K_AHB if ATHEROS_AR231X
> +       select ATH5K_PCI if PCI

I like this better, but there probably needs to be a mutual
exclusion so that randconfig builds don't break.  Then you don't
get to build both still, but the resulting Makefile is a bit more
normal.  And then if someone shows up saying that they really do
have some AR231X device with PCI, then it's more obvious what they
need to do to fix it (i.e. separate bus interfaces from core).

Something like?
select ATH5K_PCI if (PCI && !ATHEROS_AR231X)
or
depends on ((PCI && !ATHEROS_AR231X) || (!PCI && ATHEROS_AR231X)) ...

-- 
Bob Copeland %% www.bobcopeland.com


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 8/9] ath5k: AHB port. Add AHB bus support.
       [not found] <25235417.301289836112686.JavaMail.wlan@CHBU500181>
@ 2010-11-15 15:49 ` Wojciech Dubowik
  2010-11-15 16:37   ` Florian Fainelli
  0 siblings, 1 reply; 10+ messages in thread
From: Wojciech Dubowik @ 2010-11-15 15:49 UTC (permalink / raw)
  To: Bob Copeland; +Cc: linville, linux-wireless, Felix Fietkau

> On Mon, Nov 15, 2010 at 02:16:06PM +0100, Wojciech Dubowik wrote:
> > What about such changes compared to original patch? It's then
> possible to
> > compile both modules at the same time. Of course linking won't work
> because
> > I would need to separate functions like in ath9k.
> 
> Is there a plan to add a config entry for ATHEROS_AR231X (or did
> I miss it?)  Someone will one day run their Kconfig checker and
> report it missing.
> 
Openwrt has whole implementation but I have no idea why it's not 
in the official kernel.

Actually the same applies to ath9k because ATHEROS_AR71XX definition
needed for AHB is not specified in latest kernel.
http://www.mail-archive.com/ath9k-devel@lists.ath9k.org/msg03660.html

> > --- a/drivers/net/wireless/ath/ath5k/Kconfig
> > +++ b/drivers/net/wireless/ath/ath5k/Kconfig
> > @@ -1,9 +1,11 @@
> >  config ATH5K
> >         tristate "Atheros 5xxx wireless cards support"
> > -       depends on PCI && MAC80211
> > +       depends on (PCI || ATHEROS_AR231X) && MAC80211
> >         select MAC80211_LEDS
> >         select LEDS_CLASS
> >         select NEW_LEDS
> > +       select ATH5K_AHB if ATHEROS_AR231X
> > +       select ATH5K_PCI if PCI
> 
> I like this better, but there probably needs to be a mutual
> exclusion so that randconfig builds don't break.  Then you don't
> get to build both still, but the resulting Makefile is a bit more
> normal.  And then if someone shows up saying that they really do
> have some AR231X device with PCI, then it's more obvious what they
> need to do to fix it (i.e. separate bus interfaces from core).
> 
> Something like?
> select ATH5K_PCI if (PCI && !ATHEROS_AR231X)
> or
> depends on ((PCI && !ATHEROS_AR231X) || (!PCI && ATHEROS_AR231X)) ...

I will make it exclusive and post in the the series if there are
no more comments.

Wojtek

> 
> -- 
> Bob Copeland %% www.bobcopeland.com

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 8/9] ath5k: AHB port. Add AHB bus support.
  2010-11-15 15:49 ` Wojciech Dubowik
@ 2010-11-15 16:37   ` Florian Fainelli
  0 siblings, 0 replies; 10+ messages in thread
From: Florian Fainelli @ 2010-11-15 16:37 UTC (permalink / raw)
  To: Wojciech Dubowik; +Cc: Bob Copeland, linville, linux-wireless, Felix Fietkau

On Monday 15 November 2010 16:49:47 Wojciech Dubowik wrote:
> > On Mon, Nov 15, 2010 at 02:16:06PM +0100, Wojciech Dubowik wrote:
> > > What about such changes compared to original patch? It's then
> > 
> > possible to
> > 
> > > compile both modules at the same time. Of course linking won't work
> > 
> > because
> > 
> > > I would need to separate functions like in ath9k.
> > 
> > Is there a plan to add a config entry for ATHEROS_AR231X (or did
> > I miss it?)  Someone will one day run their Kconfig checker and
> > report it missing.
> 
> Openwrt has whole implementation but I have no idea why it's not
> in the official kernel.
> 
> Actually the same applies to ath9k because ATHEROS_AR71XX definition
> needed for AHB is not specified in latest kernel.
> http://www.mail-archive.com/ath9k-devel@lists.ath9k.org/msg03660.html

Support for Atheros AR71xx chips has been submitted for review a couple of 
days ago: http://www.linux-mips.org/archives/linux-mips/2010-11/msg00085.html

the Kconfig symbol name should be changed accordingly when the patches are 
accepted.

> 
> > > --- a/drivers/net/wireless/ath/ath5k/Kconfig
> > > +++ b/drivers/net/wireless/ath/ath5k/Kconfig
> > > @@ -1,9 +1,11 @@
> > > 
> > >  config ATH5K
> > >  
> > >         tristate "Atheros 5xxx wireless cards support"
> > > 
> > > -       depends on PCI && MAC80211
> > > +       depends on (PCI || ATHEROS_AR231X) && MAC80211
> > > 
> > >         select MAC80211_LEDS
> > >         select LEDS_CLASS
> > >         select NEW_LEDS
> > > 
> > > +       select ATH5K_AHB if ATHEROS_AR231X
> > > +       select ATH5K_PCI if PCI
> > 
> > I like this better, but there probably needs to be a mutual
> > exclusion so that randconfig builds don't break.  Then you don't
> > get to build both still, but the resulting Makefile is a bit more
> > normal.  And then if someone shows up saying that they really do
> > have some AR231X device with PCI, then it's more obvious what they
> > need to do to fix it (i.e. separate bus interfaces from core).
> > 
> > Something like?
> > select ATH5K_PCI if (PCI && !ATHEROS_AR231X)
> > or
> > depends on ((PCI && !ATHEROS_AR231X) || (!PCI && ATHEROS_AR231X)) ...
> 
> I will make it exclusive and post in the the series if there are
> no more comments.
> 
> Wojtek
> 
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-wireless"
> in the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2010-11-15 16:37 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <16168765.161289826231239.JavaMail.wlan@CHBU500181>
2010-11-15 13:16 ` [PATCH 8/9] ath5k: AHB port. Add AHB bus support Wojciech Dubowik
2010-11-15 15:07   ` Bob Copeland
     [not found] <25235417.301289836112686.JavaMail.wlan@CHBU500181>
2010-11-15 15:49 ` Wojciech Dubowik
2010-11-15 16:37   ` Florian Fainelli
     [not found] <22942120.791289486697022.JavaMail.wlan@CHBU500181>
2010-11-11 14:58 ` Wojciech Dubowik
2010-11-12 19:26   ` Bob Copeland
2010-11-12 19:36     ` Felix Fietkau
2010-11-12 19:51       ` Wojciech Dubowik
2010-11-12 19:55         ` Felix Fietkau
2010-11-13 13:27           ` Bob Copeland

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).