mirror of
https://github.com/edk2-porting/linux-next.git
synced 2025-01-06 12:44:14 +08:00
iwlwifi: pcie: prepare the enablement of 31 TFD queues
Some devices have 31 TFD queues. Don't enable it yet since there are still issues with it, but at least prepare the code for it. There was a bug in the read pointer assignment, fix that. Also, move the inline functions to iwl-scd.h which is the right place. Reviewed-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
This commit is contained in:
parent
1e9c62fa91
commit
cb6bb128b7
@ -252,6 +252,7 @@
|
||||
#define SCD_QUEUE_CTX_REG2_WIN_SIZE_MSK (0x0000007F)
|
||||
#define SCD_QUEUE_CTX_REG2_FRAME_LIMIT_POS (16)
|
||||
#define SCD_QUEUE_CTX_REG2_FRAME_LIMIT_MSK (0x007F0000)
|
||||
#define SCD_GP_CTRL_ENABLE_31_QUEUES BIT(0)
|
||||
|
||||
/* Context Data */
|
||||
#define SCD_CONTEXT_MEM_LOWER_BOUND (SCD_MEM_LOWER_BOUND + 0x600)
|
||||
@ -285,32 +286,9 @@
|
||||
#define SCD_CHAINEXT_EN (SCD_BASE + 0x244)
|
||||
#define SCD_AGGR_SEL (SCD_BASE + 0x248)
|
||||
#define SCD_INTERRUPT_MASK (SCD_BASE + 0x108)
|
||||
#define SCD_GP_CTRL (SCD_BASE + 0x1a8)
|
||||
#define SCD_EN_CTRL (SCD_BASE + 0x254)
|
||||
|
||||
static inline unsigned int SCD_QUEUE_WRPTR(unsigned int chnl)
|
||||
{
|
||||
if (chnl < 20)
|
||||
return SCD_BASE + 0x18 + chnl * 4;
|
||||
WARN_ON_ONCE(chnl >= 32);
|
||||
return SCD_BASE + 0x284 + (chnl - 20) * 4;
|
||||
}
|
||||
|
||||
static inline unsigned int SCD_QUEUE_RDPTR(unsigned int chnl)
|
||||
{
|
||||
if (chnl < 20)
|
||||
return SCD_BASE + 0x68 + chnl * 4;
|
||||
WARN_ON_ONCE(chnl >= 32);
|
||||
return SCD_BASE + 0x2B4 + (chnl - 20) * 4;
|
||||
}
|
||||
|
||||
static inline unsigned int SCD_QUEUE_STATUS_BITS(unsigned int chnl)
|
||||
{
|
||||
if (chnl < 20)
|
||||
return SCD_BASE + 0x10c + chnl * 4;
|
||||
WARN_ON_ONCE(chnl >= 32);
|
||||
return SCD_BASE + 0x384 + (chnl - 20) * 4;
|
||||
}
|
||||
|
||||
/*********************** END TX SCHEDULER *************************************/
|
||||
|
||||
/* Oscillator clock */
|
||||
|
@ -69,14 +69,6 @@
|
||||
#include "iwl-prph.h"
|
||||
|
||||
|
||||
static inline void iwl_scd_txq_set_inactive(struct iwl_trans *trans,
|
||||
u16 txq_id)
|
||||
{
|
||||
iwl_write_prph(trans, SCD_QUEUE_STATUS_BITS(txq_id),
|
||||
(0 << SCD_QUEUE_STTS_REG_POS_ACTIVE)|
|
||||
(1 << SCD_QUEUE_STTS_REG_POS_SCD_ACT_EN));
|
||||
}
|
||||
|
||||
static inline void iwl_scd_txq_set_chain(struct iwl_trans *trans,
|
||||
u16 txq_id)
|
||||
{
|
||||
@ -115,4 +107,37 @@ static inline void iwl_scd_enable_set_active(struct iwl_trans *trans,
|
||||
{
|
||||
iwl_write_prph(trans, SCD_EN_CTRL, value);
|
||||
}
|
||||
|
||||
static inline unsigned int SCD_QUEUE_WRPTR(unsigned int chnl)
|
||||
{
|
||||
if (chnl < 20)
|
||||
return SCD_BASE + 0x18 + chnl * 4;
|
||||
WARN_ON_ONCE(chnl >= 32);
|
||||
return SCD_BASE + 0x284 + (chnl - 20) * 4;
|
||||
}
|
||||
|
||||
static inline unsigned int SCD_QUEUE_RDPTR(unsigned int chnl)
|
||||
{
|
||||
if (chnl < 20)
|
||||
return SCD_BASE + 0x68 + chnl * 4;
|
||||
WARN_ON_ONCE(chnl >= 32);
|
||||
return SCD_BASE + 0x2B4 + chnl * 4;
|
||||
}
|
||||
|
||||
static inline unsigned int SCD_QUEUE_STATUS_BITS(unsigned int chnl)
|
||||
{
|
||||
if (chnl < 20)
|
||||
return SCD_BASE + 0x10c + chnl * 4;
|
||||
WARN_ON_ONCE(chnl >= 32);
|
||||
return SCD_BASE + 0x334 + chnl * 4;
|
||||
}
|
||||
|
||||
static inline void iwl_scd_txq_set_inactive(struct iwl_trans *trans,
|
||||
u16 txq_id)
|
||||
{
|
||||
iwl_write_prph(trans, SCD_QUEUE_STATUS_BITS(txq_id),
|
||||
(0 << SCD_QUEUE_STTS_REG_POS_ACTIVE)|
|
||||
(1 << SCD_QUEUE_STTS_REG_POS_SCD_ACT_EN));
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -75,6 +75,7 @@
|
||||
#include "iwl-trans.h"
|
||||
#include "iwl-csr.h"
|
||||
#include "iwl-prph.h"
|
||||
#include "iwl-scd.h"
|
||||
#include "iwl-agn-hw.h"
|
||||
#include "iwl-fw-error-dump.h"
|
||||
#include "internal.h"
|
||||
|
@ -892,6 +892,10 @@ int iwl_pcie_tx_init(struct iwl_trans *trans)
|
||||
}
|
||||
}
|
||||
|
||||
if (trans->cfg->base_params->num_of_queues > 20)
|
||||
iwl_set_bits_prph(trans, SCD_GP_CTRL,
|
||||
SCD_GP_CTRL_ENABLE_31_QUEUES);
|
||||
|
||||
return 0;
|
||||
error:
|
||||
/*Upon error, free only if we allocated something */
|
||||
|
Loading…
Reference in New Issue
Block a user