All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/4] rt2800: fix initialization after legacy driver
@ 2012-04-03  1:40 Jakub Kicinski
  2012-04-03  1:40 ` [PATCH v2 1/4] rt2800: introduce wpdma_disable function Jakub Kicinski
                   ` (3 more replies)
  0 siblings, 4 replies; 9+ messages in thread
From: Jakub Kicinski @ 2012-04-03  1:40 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless, users, Jakub Kicinski

Hi,

the main purpose of this set is to make it possible to switch between
rt2800pci and legacy driver w/o rebooting or suspending whole machine.
Today rt2800pci will fail to bring the interface up if it was earlier
operated by legacy drv. I'm sure it happens with rt3090, rt2860 seems
to work fine.

First two patches bring back disabling DMA before loading firmware, 
third and fourth actually fix the take over issue.

Jakub Kicinski (4):
  rt2800: introduce wpdma_disable function
  rt2800: add disabling of DMA before loading firmware
  rt2800: initialize queues before giving up due to DMA error
  rt2800: zero registers of unused TX rings

 drivers/net/wireless/rt2x00/rt2800lib.c |   36 +++++++++++++++++-------------
 drivers/net/wireless/rt2x00/rt2800lib.h |    1 +
 drivers/net/wireless/rt2x00/rt2800pci.c |   26 +++++++++++++---------
 3 files changed, 36 insertions(+), 27 deletions(-)

-- 
1.7.7.6


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

* [PATCH v2 1/4] rt2800: introduce wpdma_disable function
  2012-04-03  1:40 [PATCH v2 0/4] rt2800: fix initialization after legacy driver Jakub Kicinski
@ 2012-04-03  1:40 ` Jakub Kicinski
  2012-04-03  6:07   ` Gertjan van Wingerde
  2012-04-03  1:40 ` [PATCH v2 2/4] rt2800: add disabling of DMA before loading firmware Jakub Kicinski
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 9+ messages in thread
From: Jakub Kicinski @ 2012-04-03  1:40 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless, users, Jakub Kicinski

Introduce wpdma_disable function to simplify the code.

Signed-off-by: Jakub Kicinski <kubakici@wp.pl>
Reviewed-by: Stanislaw Gruszka <sgruszka@redhat.com>
---
 drivers/net/wireless/rt2x00/rt2800lib.c |   32 ++++++++++++++++--------------
 drivers/net/wireless/rt2x00/rt2800lib.h |    1 +
 drivers/net/wireless/rt2x00/rt2800pci.c |   10 +--------
 3 files changed, 19 insertions(+), 24 deletions(-)

diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
index 6c0a12e..8aee6d4 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -295,6 +295,20 @@ int rt2800_wait_wpdma_ready(struct rt2x00_dev *rt2x00dev)
 }
 EXPORT_SYMBOL_GPL(rt2800_wait_wpdma_ready);
 
+void rt2800_disable_wpdma(struct rt2x00_dev *rt2x00dev)
+{
+	u32 reg;
+
+	rt2800_register_read(rt2x00dev, WPDMA_GLO_CFG, &reg);
+	rt2x00_set_field32(&reg, WPDMA_GLO_CFG_ENABLE_TX_DMA, 0);
+	rt2x00_set_field32(&reg, WPDMA_GLO_CFG_TX_DMA_BUSY, 0);
+	rt2x00_set_field32(&reg, WPDMA_GLO_CFG_ENABLE_RX_DMA, 0);
+	rt2x00_set_field32(&reg, WPDMA_GLO_CFG_RX_DMA_BUSY, 0);
+	rt2x00_set_field32(&reg, WPDMA_GLO_CFG_TX_WRITEBACK_DONE, 1);
+	rt2800_register_write(rt2x00dev, WPDMA_GLO_CFG, reg);
+}
+EXPORT_SYMBOL_GPL(rt2800_disable_wpdma);
+
 static bool rt2800_check_firmware_crc(const u8 *data, const size_t len)
 {
 	u16 fw_crc;
@@ -436,10 +450,7 @@ int rt2800_load_firmware(struct rt2x00_dev *rt2x00dev,
 	 * Disable DMA, will be reenabled later when enabling
 	 * the radio.
 	 */
-	rt2800_register_read(rt2x00dev, WPDMA_GLO_CFG, &reg);
-	rt2x00_set_field32(&reg, WPDMA_GLO_CFG_ENABLE_TX_DMA, 0);
-	rt2x00_set_field32(&reg, WPDMA_GLO_CFG_ENABLE_RX_DMA, 0);
-	rt2800_register_write(rt2x00dev, WPDMA_GLO_CFG, reg);
+	rt2800_disable_wpdma(rt2x00dev);
 
 	/*
 	 * Initialize firmware.
@@ -2717,13 +2728,7 @@ static int rt2800_init_registers(struct rt2x00_dev *rt2x00dev)
 	unsigned int i;
 	int ret;
 
-	rt2800_register_read(rt2x00dev, WPDMA_GLO_CFG, &reg);
-	rt2x00_set_field32(&reg, WPDMA_GLO_CFG_ENABLE_TX_DMA, 0);
-	rt2x00_set_field32(&reg, WPDMA_GLO_CFG_TX_DMA_BUSY, 0);
-	rt2x00_set_field32(&reg, WPDMA_GLO_CFG_ENABLE_RX_DMA, 0);
-	rt2x00_set_field32(&reg, WPDMA_GLO_CFG_RX_DMA_BUSY, 0);
-	rt2x00_set_field32(&reg, WPDMA_GLO_CFG_TX_WRITEBACK_DONE, 1);
-	rt2800_register_write(rt2x00dev, WPDMA_GLO_CFG, reg);
+	rt2800_disable_wpdma(rt2x00dev);
 
 	ret = rt2800_drv_init_registers(rt2x00dev);
 	if (ret)
@@ -3997,10 +4002,7 @@ void rt2800_disable_radio(struct rt2x00_dev *rt2x00dev)
 {
 	u32 reg;
 
-	rt2800_register_read(rt2x00dev, WPDMA_GLO_CFG, &reg);
-	rt2x00_set_field32(&reg, WPDMA_GLO_CFG_ENABLE_TX_DMA, 0);
-	rt2x00_set_field32(&reg, WPDMA_GLO_CFG_ENABLE_RX_DMA, 0);
-	rt2800_register_write(rt2x00dev, WPDMA_GLO_CFG, reg);
+	rt2800_disable_wpdma(rt2x00dev);
 
 	/* Wait for DMA, ignore error */
 	rt2800_wait_wpdma_ready(rt2x00dev);
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.h b/drivers/net/wireless/rt2x00/rt2800lib.h
index 419e36c..18a0b67 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.h
+++ b/drivers/net/wireless/rt2x00/rt2800lib.h
@@ -208,5 +208,6 @@ int rt2800_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
 			u8 buf_size);
 int rt2800_get_survey(struct ieee80211_hw *hw, int idx,
 		      struct survey_info *survey);
+void rt2800_disable_wpdma(struct rt2x00_dev *rt2x00dev);
 
 #endif /* RT2800LIB_H */
diff --git a/drivers/net/wireless/rt2x00/rt2800pci.c b/drivers/net/wireless/rt2x00/rt2800pci.c
index 0397bbf..e499389 100644
--- a/drivers/net/wireless/rt2x00/rt2800pci.c
+++ b/drivers/net/wireless/rt2x00/rt2800pci.c
@@ -361,7 +361,6 @@ static void rt2800pci_clear_entry(struct queue_entry *entry)
 static int rt2800pci_init_queues(struct rt2x00_dev *rt2x00dev)
 {
 	struct queue_entry_priv_pci *entry_priv;
-	u32 reg;
 
 	/*
 	 * Initialize registers.
@@ -402,14 +401,7 @@ static int rt2800pci_init_queues(struct rt2x00_dev *rt2x00dev)
 				 rt2x00dev->rx[0].limit - 1);
 	rt2x00pci_register_write(rt2x00dev, RX_DRX_IDX, 0);
 
-	/*
-	 * Enable global DMA configuration
-	 */
-	rt2x00pci_register_read(rt2x00dev, WPDMA_GLO_CFG, &reg);
-	rt2x00_set_field32(&reg, WPDMA_GLO_CFG_ENABLE_TX_DMA, 0);
-	rt2x00_set_field32(&reg, WPDMA_GLO_CFG_ENABLE_RX_DMA, 0);
-	rt2x00_set_field32(&reg, WPDMA_GLO_CFG_TX_WRITEBACK_DONE, 1);
-	rt2x00pci_register_write(rt2x00dev, WPDMA_GLO_CFG, reg);
+	rt2800_disable_wpdma(rt2x00dev);
 
 	rt2x00pci_register_write(rt2x00dev, DELAY_INT_CFG, 0);
 
-- 
1.7.7.6


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

* [PATCH v2 2/4] rt2800: add disabling of DMA before loading firmware
  2012-04-03  1:40 [PATCH v2 0/4] rt2800: fix initialization after legacy driver Jakub Kicinski
  2012-04-03  1:40 ` [PATCH v2 1/4] rt2800: introduce wpdma_disable function Jakub Kicinski
@ 2012-04-03  1:40 ` Jakub Kicinski
  2012-04-03  6:08   ` Gertjan van Wingerde
  2012-04-03  1:40 ` [PATCH v2 3/4] rt2800: initialize queues before giving up due to DMA error Jakub Kicinski
  2012-04-03  1:40 ` [PATCH v2 4/4] rt2800: zero registers of unused TX rings Jakub Kicinski
  3 siblings, 1 reply; 9+ messages in thread
From: Jakub Kicinski @ 2012-04-03  1:40 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless, users, Jakub Kicinski

Legacy driver disables DMA before loading firmware.

Signed-off-by: Jakub Kicinski <kubakici@wp.pl>
Reviewed-by: Stanislaw Gruszka <sgruszka@redhat.com>
---
2011_0406_RT5390_RT5392_Linux_STA_V2.5.0.3_DPO
rtmp_init_inf.c:186
---
 drivers/net/wireless/rt2x00/rt2800lib.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
index 8aee6d4..cc6ca18 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -426,6 +426,8 @@ int rt2800_load_firmware(struct rt2x00_dev *rt2x00dev,
 		rt2800_register_write(rt2x00dev, PWR_PIN_CFG, 0x00000002);
 	}
 
+	rt2800_disable_wpdma(rt2x00dev);
+
 	/*
 	 * Write firmware to the device.
 	 */
-- 
1.7.7.6


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

* [PATCH v2 3/4] rt2800: initialize queues before giving up due to DMA error
  2012-04-03  1:40 [PATCH v2 0/4] rt2800: fix initialization after legacy driver Jakub Kicinski
  2012-04-03  1:40 ` [PATCH v2 1/4] rt2800: introduce wpdma_disable function Jakub Kicinski
  2012-04-03  1:40 ` [PATCH v2 2/4] rt2800: add disabling of DMA before loading firmware Jakub Kicinski
@ 2012-04-03  1:40 ` Jakub Kicinski
  2012-04-05 10:04   ` Stanislaw Gruszka
  2012-04-03  1:40 ` [PATCH v2 4/4] rt2800: zero registers of unused TX rings Jakub Kicinski
  3 siblings, 1 reply; 9+ messages in thread
From: Jakub Kicinski @ 2012-04-03  1:40 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless, users, Jakub Kicinski

Don't immediately abort .start if DMA is busy before we
initialize the queues. Some drivers do not deinitialize
queues properly and we would fail to take over after them.

This behaviour is consistent with legacy driver.

Signed-off-by: Jakub Kicinski <kubakici@wp.pl>
Acked-by: Gertjan van Wingerde <gwingerde@gmail.com>
---
2011_0406_RT5390_RT5392_Linux_STA_V2.5.0.3_DPO
common/rtmp_init.c:2007
---
 drivers/net/wireless/rt2x00/rt2800lib.c |    2 +-
 drivers/net/wireless/rt2x00/rt2800pci.c |    6 ++++--
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
index cc6ca18..bd19802 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -290,7 +290,7 @@ int rt2800_wait_wpdma_ready(struct rt2x00_dev *rt2x00dev)
 		msleep(10);
 	}
 
-	ERROR(rt2x00dev, "WPDMA TX/RX busy, aborting.\n");
+	ERROR(rt2x00dev, "WPDMA TX/RX busy [0x%08x].\n", reg);
 	return -EACCES;
 }
 EXPORT_SYMBOL_GPL(rt2800_wait_wpdma_ready);
diff --git a/drivers/net/wireless/rt2x00/rt2800pci.c b/drivers/net/wireless/rt2x00/rt2800pci.c
index e499389..4366c23 100644
--- a/drivers/net/wireless/rt2x00/rt2800pci.c
+++ b/drivers/net/wireless/rt2x00/rt2800pci.c
@@ -496,8 +496,10 @@ static int rt2800pci_enable_radio(struct rt2x00_dev *rt2x00dev)
 {
 	int retval;
 
-	if (unlikely(rt2800_wait_wpdma_ready(rt2x00dev) ||
-		     rt2800pci_init_queues(rt2x00dev)))
+	/* Wait for DMA, ignore error until we initialize queues. */
+	rt2800_wait_wpdma_ready(rt2x00dev);
+
+	if (unlikely(rt2800pci_init_queues(rt2x00dev)))
 		return -EIO;
 
 	retval = rt2800_enable_radio(rt2x00dev);
-- 
1.7.7.6


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

* [PATCH v2 4/4] rt2800: zero registers of unused TX rings
  2012-04-03  1:40 [PATCH v2 0/4] rt2800: fix initialization after legacy driver Jakub Kicinski
                   ` (2 preceding siblings ...)
  2012-04-03  1:40 ` [PATCH v2 3/4] rt2800: initialize queues before giving up due to DMA error Jakub Kicinski
@ 2012-04-03  1:40 ` Jakub Kicinski
  2012-04-05 10:05   ` Stanislaw Gruszka
  3 siblings, 1 reply; 9+ messages in thread
From: Jakub Kicinski @ 2012-04-03  1:40 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless, users, Jakub Kicinski

This is needed if we take over after drivers which use those.

Signed-off-by: Jakub Kicinski <kubakici@wp.pl>
Acked-by: Gertjan van Wingerde <gwingerde@gmail.com>
---
 drivers/net/wireless/rt2x00/rt2800pci.c |   10 ++++++++++
 1 files changed, 10 insertions(+), 0 deletions(-)

diff --git a/drivers/net/wireless/rt2x00/rt2800pci.c b/drivers/net/wireless/rt2x00/rt2800pci.c
index 4366c23..f9f36cf 100644
--- a/drivers/net/wireless/rt2x00/rt2800pci.c
+++ b/drivers/net/wireless/rt2x00/rt2800pci.c
@@ -393,6 +393,16 @@ static int rt2800pci_init_queues(struct rt2x00_dev *rt2x00dev)
 	rt2x00pci_register_write(rt2x00dev, TX_CTX_IDX3, 0);
 	rt2x00pci_register_write(rt2x00dev, TX_DTX_IDX3, 0);
 
+	rt2x00pci_register_write(rt2x00dev, TX_BASE_PTR4, 0);
+	rt2x00pci_register_write(rt2x00dev, TX_MAX_CNT4, 0);
+	rt2x00pci_register_write(rt2x00dev, TX_CTX_IDX4, 0);
+	rt2x00pci_register_write(rt2x00dev, TX_DTX_IDX4, 0);
+
+	rt2x00pci_register_write(rt2x00dev, TX_BASE_PTR5, 0);
+	rt2x00pci_register_write(rt2x00dev, TX_MAX_CNT5, 0);
+	rt2x00pci_register_write(rt2x00dev, TX_CTX_IDX5, 0);
+	rt2x00pci_register_write(rt2x00dev, TX_DTX_IDX5, 0);
+
 	entry_priv = rt2x00dev->rx->entries[0].priv_data;
 	rt2x00pci_register_write(rt2x00dev, RX_BASE_PTR, entry_priv->desc_dma);
 	rt2x00pci_register_write(rt2x00dev, RX_MAX_CNT,
-- 
1.7.7.6


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

* Re: [PATCH v2 1/4] rt2800: introduce wpdma_disable function
  2012-04-03  1:40 ` [PATCH v2 1/4] rt2800: introduce wpdma_disable function Jakub Kicinski
@ 2012-04-03  6:07   ` Gertjan van Wingerde
  0 siblings, 0 replies; 9+ messages in thread
From: Gertjan van Wingerde @ 2012-04-03  6:07 UTC (permalink / raw)
  To: Jakub Kicinski; +Cc: linville, linux-wireless, users

On Tue, Apr 3, 2012 at 3:40 AM, Jakub Kicinski <kubakici@wp.pl> wrote:
> Introduce wpdma_disable function to simplify the code.
>
> Signed-off-by: Jakub Kicinski <kubakici@wp.pl>
> Reviewed-by: Stanislaw Gruszka <sgruszka@redhat.com>

Acked-by: Gertjan van Wingerde <gwingerde@gmail.com>

> ---
>  drivers/net/wireless/rt2x00/rt2800lib.c |   32 ++++++++++++++++--------------
>  drivers/net/wireless/rt2x00/rt2800lib.h |    1 +
>  drivers/net/wireless/rt2x00/rt2800pci.c |   10 +--------
>  3 files changed, 19 insertions(+), 24 deletions(-)
>
> diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
> index 6c0a12e..8aee6d4 100644
> --- a/drivers/net/wireless/rt2x00/rt2800lib.c
> +++ b/drivers/net/wireless/rt2x00/rt2800lib.c
> @@ -295,6 +295,20 @@ int rt2800_wait_wpdma_ready(struct rt2x00_dev *rt2x00dev)
>  }
>  EXPORT_SYMBOL_GPL(rt2800_wait_wpdma_ready);
>
> +void rt2800_disable_wpdma(struct rt2x00_dev *rt2x00dev)
> +{
> +       u32 reg;
> +
> +       rt2800_register_read(rt2x00dev, WPDMA_GLO_CFG, &reg);
> +       rt2x00_set_field32(&reg, WPDMA_GLO_CFG_ENABLE_TX_DMA, 0);
> +       rt2x00_set_field32(&reg, WPDMA_GLO_CFG_TX_DMA_BUSY, 0);
> +       rt2x00_set_field32(&reg, WPDMA_GLO_CFG_ENABLE_RX_DMA, 0);
> +       rt2x00_set_field32(&reg, WPDMA_GLO_CFG_RX_DMA_BUSY, 0);
> +       rt2x00_set_field32(&reg, WPDMA_GLO_CFG_TX_WRITEBACK_DONE, 1);
> +       rt2800_register_write(rt2x00dev, WPDMA_GLO_CFG, reg);
> +}
> +EXPORT_SYMBOL_GPL(rt2800_disable_wpdma);
> +
>  static bool rt2800_check_firmware_crc(const u8 *data, const size_t len)
>  {
>        u16 fw_crc;
> @@ -436,10 +450,7 @@ int rt2800_load_firmware(struct rt2x00_dev *rt2x00dev,
>         * Disable DMA, will be reenabled later when enabling
>         * the radio.
>         */
> -       rt2800_register_read(rt2x00dev, WPDMA_GLO_CFG, &reg);
> -       rt2x00_set_field32(&reg, WPDMA_GLO_CFG_ENABLE_TX_DMA, 0);
> -       rt2x00_set_field32(&reg, WPDMA_GLO_CFG_ENABLE_RX_DMA, 0);
> -       rt2800_register_write(rt2x00dev, WPDMA_GLO_CFG, reg);
> +       rt2800_disable_wpdma(rt2x00dev);
>
>        /*
>         * Initialize firmware.
> @@ -2717,13 +2728,7 @@ static int rt2800_init_registers(struct rt2x00_dev *rt2x00dev)
>        unsigned int i;
>        int ret;
>
> -       rt2800_register_read(rt2x00dev, WPDMA_GLO_CFG, &reg);
> -       rt2x00_set_field32(&reg, WPDMA_GLO_CFG_ENABLE_TX_DMA, 0);
> -       rt2x00_set_field32(&reg, WPDMA_GLO_CFG_TX_DMA_BUSY, 0);
> -       rt2x00_set_field32(&reg, WPDMA_GLO_CFG_ENABLE_RX_DMA, 0);
> -       rt2x00_set_field32(&reg, WPDMA_GLO_CFG_RX_DMA_BUSY, 0);
> -       rt2x00_set_field32(&reg, WPDMA_GLO_CFG_TX_WRITEBACK_DONE, 1);
> -       rt2800_register_write(rt2x00dev, WPDMA_GLO_CFG, reg);
> +       rt2800_disable_wpdma(rt2x00dev);
>
>        ret = rt2800_drv_init_registers(rt2x00dev);
>        if (ret)
> @@ -3997,10 +4002,7 @@ void rt2800_disable_radio(struct rt2x00_dev *rt2x00dev)
>  {
>        u32 reg;
>
> -       rt2800_register_read(rt2x00dev, WPDMA_GLO_CFG, &reg);
> -       rt2x00_set_field32(&reg, WPDMA_GLO_CFG_ENABLE_TX_DMA, 0);
> -       rt2x00_set_field32(&reg, WPDMA_GLO_CFG_ENABLE_RX_DMA, 0);
> -       rt2800_register_write(rt2x00dev, WPDMA_GLO_CFG, reg);
> +       rt2800_disable_wpdma(rt2x00dev);
>
>        /* Wait for DMA, ignore error */
>        rt2800_wait_wpdma_ready(rt2x00dev);
> diff --git a/drivers/net/wireless/rt2x00/rt2800lib.h b/drivers/net/wireless/rt2x00/rt2800lib.h
> index 419e36c..18a0b67 100644
> --- a/drivers/net/wireless/rt2x00/rt2800lib.h
> +++ b/drivers/net/wireless/rt2x00/rt2800lib.h
> @@ -208,5 +208,6 @@ int rt2800_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
>                        u8 buf_size);
>  int rt2800_get_survey(struct ieee80211_hw *hw, int idx,
>                      struct survey_info *survey);
> +void rt2800_disable_wpdma(struct rt2x00_dev *rt2x00dev);
>
>  #endif /* RT2800LIB_H */
> diff --git a/drivers/net/wireless/rt2x00/rt2800pci.c b/drivers/net/wireless/rt2x00/rt2800pci.c
> index 0397bbf..e499389 100644
> --- a/drivers/net/wireless/rt2x00/rt2800pci.c
> +++ b/drivers/net/wireless/rt2x00/rt2800pci.c
> @@ -361,7 +361,6 @@ static void rt2800pci_clear_entry(struct queue_entry *entry)
>  static int rt2800pci_init_queues(struct rt2x00_dev *rt2x00dev)
>  {
>        struct queue_entry_priv_pci *entry_priv;
> -       u32 reg;
>
>        /*
>         * Initialize registers.
> @@ -402,14 +401,7 @@ static int rt2800pci_init_queues(struct rt2x00_dev *rt2x00dev)
>                                 rt2x00dev->rx[0].limit - 1);
>        rt2x00pci_register_write(rt2x00dev, RX_DRX_IDX, 0);
>
> -       /*
> -        * Enable global DMA configuration
> -        */
> -       rt2x00pci_register_read(rt2x00dev, WPDMA_GLO_CFG, &reg);
> -       rt2x00_set_field32(&reg, WPDMA_GLO_CFG_ENABLE_TX_DMA, 0);
> -       rt2x00_set_field32(&reg, WPDMA_GLO_CFG_ENABLE_RX_DMA, 0);
> -       rt2x00_set_field32(&reg, WPDMA_GLO_CFG_TX_WRITEBACK_DONE, 1);
> -       rt2x00pci_register_write(rt2x00dev, WPDMA_GLO_CFG, reg);
> +       rt2800_disable_wpdma(rt2x00dev);
>
>        rt2x00pci_register_write(rt2x00dev, DELAY_INT_CFG, 0);
>
> --
> 1.7.7.6
>
> --
> 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



-- 
---
Gertjan

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

* Re: [PATCH v2 2/4] rt2800: add disabling of DMA before loading firmware
  2012-04-03  1:40 ` [PATCH v2 2/4] rt2800: add disabling of DMA before loading firmware Jakub Kicinski
@ 2012-04-03  6:08   ` Gertjan van Wingerde
  0 siblings, 0 replies; 9+ messages in thread
From: Gertjan van Wingerde @ 2012-04-03  6:08 UTC (permalink / raw)
  To: Jakub Kicinski; +Cc: linville, linux-wireless, users

On Tue, Apr 3, 2012 at 3:40 AM, Jakub Kicinski <kubakici@wp.pl> wrote:
> Legacy driver disables DMA before loading firmware.
>
> Signed-off-by: Jakub Kicinski <kubakici@wp.pl>
> Reviewed-by: Stanislaw Gruszka <sgruszka@redhat.com>

Acked-by: Gertjan van Wingerde <gwingerde@gmail.com>

> ---
> 2011_0406_RT5390_RT5392_Linux_STA_V2.5.0.3_DPO
> rtmp_init_inf.c:186
> ---
>  drivers/net/wireless/rt2x00/rt2800lib.c |    2 ++
>  1 files changed, 2 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
> index 8aee6d4..cc6ca18 100644
> --- a/drivers/net/wireless/rt2x00/rt2800lib.c
> +++ b/drivers/net/wireless/rt2x00/rt2800lib.c
> @@ -426,6 +426,8 @@ int rt2800_load_firmware(struct rt2x00_dev *rt2x00dev,
>                rt2800_register_write(rt2x00dev, PWR_PIN_CFG, 0x00000002);
>        }
>
> +       rt2800_disable_wpdma(rt2x00dev);
> +
>        /*
>         * Write firmware to the device.
>         */
> --
> 1.7.7.6
>
> --
> 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



-- 
---
Gertjan

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

* Re: [PATCH v2 3/4] rt2800: initialize queues before giving up due to DMA error
  2012-04-03  1:40 ` [PATCH v2 3/4] rt2800: initialize queues before giving up due to DMA error Jakub Kicinski
@ 2012-04-05 10:04   ` Stanislaw Gruszka
  0 siblings, 0 replies; 9+ messages in thread
From: Stanislaw Gruszka @ 2012-04-05 10:04 UTC (permalink / raw)
  To: Jakub Kicinski; +Cc: linville, linux-wireless, users

On Tue, Apr 03, 2012 at 03:40:49AM +0200, Jakub Kicinski wrote:
> Don't immediately abort .start if DMA is busy before we
> initialize the queues. Some drivers do not deinitialize
> queues properly and we would fail to take over after them.
> 
> This behaviour is consistent with legacy driver.
> 
> Signed-off-by: Jakub Kicinski <kubakici@wp.pl>
> Acked-by: Gertjan van Wingerde <gwingerde@gmail.com>
Reviewed-by: Stanislaw Gruszka <sgruszka@redhat.com>

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

* Re: [PATCH v2 4/4] rt2800: zero registers of unused TX rings
  2012-04-03  1:40 ` [PATCH v2 4/4] rt2800: zero registers of unused TX rings Jakub Kicinski
@ 2012-04-05 10:05   ` Stanislaw Gruszka
  0 siblings, 0 replies; 9+ messages in thread
From: Stanislaw Gruszka @ 2012-04-05 10:05 UTC (permalink / raw)
  To: Jakub Kicinski; +Cc: linville, linux-wireless, users

On Tue, Apr 03, 2012 at 03:40:50AM +0200, Jakub Kicinski wrote:
> This is needed if we take over after drivers which use those.
> 
> Signed-off-by: Jakub Kicinski <kubakici@wp.pl>
> Acked-by: Gertjan van Wingerde <gwingerde@gmail.com>
Reviewed-by: Stanislaw Gruszka <sgruszka@redhat.com>

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

end of thread, other threads:[~2012-04-05 10:06 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-04-03  1:40 [PATCH v2 0/4] rt2800: fix initialization after legacy driver Jakub Kicinski
2012-04-03  1:40 ` [PATCH v2 1/4] rt2800: introduce wpdma_disable function Jakub Kicinski
2012-04-03  6:07   ` Gertjan van Wingerde
2012-04-03  1:40 ` [PATCH v2 2/4] rt2800: add disabling of DMA before loading firmware Jakub Kicinski
2012-04-03  6:08   ` Gertjan van Wingerde
2012-04-03  1:40 ` [PATCH v2 3/4] rt2800: initialize queues before giving up due to DMA error Jakub Kicinski
2012-04-05 10:04   ` Stanislaw Gruszka
2012-04-03  1:40 ` [PATCH v2 4/4] rt2800: zero registers of unused TX rings Jakub Kicinski
2012-04-05 10:05   ` Stanislaw Gruszka

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.