|
@@ -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, ®);
|
|
|
+ rt2x00_set_field32(®, WPDMA_GLO_CFG_ENABLE_TX_DMA, 0);
|
|
|
+ rt2x00_set_field32(®, WPDMA_GLO_CFG_TX_DMA_BUSY, 0);
|
|
|
+ rt2x00_set_field32(®, WPDMA_GLO_CFG_ENABLE_RX_DMA, 0);
|
|
|
+ rt2x00_set_field32(®, WPDMA_GLO_CFG_RX_DMA_BUSY, 0);
|
|
|
+ rt2x00_set_field32(®, 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, ®);
|
|
|
- rt2x00_set_field32(®, WPDMA_GLO_CFG_ENABLE_TX_DMA, 0);
|
|
|
- rt2x00_set_field32(®, 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, ®);
|
|
|
- rt2x00_set_field32(®, WPDMA_GLO_CFG_ENABLE_TX_DMA, 0);
|
|
|
- rt2x00_set_field32(®, WPDMA_GLO_CFG_TX_DMA_BUSY, 0);
|
|
|
- rt2x00_set_field32(®, WPDMA_GLO_CFG_ENABLE_RX_DMA, 0);
|
|
|
- rt2x00_set_field32(®, WPDMA_GLO_CFG_RX_DMA_BUSY, 0);
|
|
|
- rt2x00_set_field32(®, 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, ®);
|
|
|
- rt2x00_set_field32(®, WPDMA_GLO_CFG_ENABLE_TX_DMA, 0);
|
|
|
- rt2x00_set_field32(®, 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);
|