Commit 961629bd authored by Jakub Kicinski's avatar Jakub Kicinski

Merge branch 'ucc_geth-improvements'

Rasmus Villemoes says:

====================
ucc_geth improvements

This is a resend of some improvements to the ucc_geth driver that was
previously sent together with bug fixes, which have by now been
applied.

v2: rebase to net/master; address minor style issues; don't introduce
a use-after-free in patch "don't statically allocate eight
ucc_geth_info".
====================

Link: https://lore.kernel.org/r/20210119150802.19997-1-rasmus.villemoes@prevas.dkSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents e0171b87 9b0dfef4
This diff is collapsed.
...@@ -1076,8 +1076,6 @@ struct ucc_geth_tad_params { ...@@ -1076,8 +1076,6 @@ struct ucc_geth_tad_params {
/* GETH protocol initialization structure */ /* GETH protocol initialization structure */
struct ucc_geth_info { struct ucc_geth_info {
struct ucc_fast_info uf_info; struct ucc_fast_info uf_info;
u8 numQueuesTx;
u8 numQueuesRx;
int ipCheckSumCheck; int ipCheckSumCheck;
int ipCheckSumGenerate; int ipCheckSumGenerate;
int rxExtendedFiltering; int rxExtendedFiltering;
...@@ -1165,9 +1163,7 @@ struct ucc_geth_private { ...@@ -1165,9 +1163,7 @@ struct ucc_geth_private {
struct ucc_geth_exf_global_pram __iomem *p_exf_glbl_param; struct ucc_geth_exf_global_pram __iomem *p_exf_glbl_param;
u32 exf_glbl_param_offset; u32 exf_glbl_param_offset;
struct ucc_geth_rx_global_pram __iomem *p_rx_glbl_pram; struct ucc_geth_rx_global_pram __iomem *p_rx_glbl_pram;
u32 rx_glbl_pram_offset;
struct ucc_geth_tx_global_pram __iomem *p_tx_glbl_pram; struct ucc_geth_tx_global_pram __iomem *p_tx_glbl_pram;
u32 tx_glbl_pram_offset;
struct ucc_geth_send_queue_mem_region __iomem *p_send_q_mem_reg; struct ucc_geth_send_queue_mem_region __iomem *p_send_q_mem_reg;
u32 send_q_mem_reg_offset; u32 send_q_mem_reg_offset;
struct ucc_geth_thread_data_tx __iomem *p_thread_data_tx; struct ucc_geth_thread_data_tx __iomem *p_thread_data_tx;
...@@ -1185,9 +1181,7 @@ struct ucc_geth_private { ...@@ -1185,9 +1181,7 @@ struct ucc_geth_private {
struct ucc_geth_rx_bd_queues_entry __iomem *p_rx_bd_qs_tbl; struct ucc_geth_rx_bd_queues_entry __iomem *p_rx_bd_qs_tbl;
u32 rx_bd_qs_tbl_offset; u32 rx_bd_qs_tbl_offset;
u8 __iomem *p_tx_bd_ring[NUM_TX_QUEUES]; u8 __iomem *p_tx_bd_ring[NUM_TX_QUEUES];
u32 tx_bd_ring_offset[NUM_TX_QUEUES];
u8 __iomem *p_rx_bd_ring[NUM_RX_QUEUES]; u8 __iomem *p_rx_bd_ring[NUM_RX_QUEUES];
u32 rx_bd_ring_offset[NUM_RX_QUEUES];
u8 __iomem *confBd[NUM_TX_QUEUES]; u8 __iomem *confBd[NUM_TX_QUEUES];
u8 __iomem *txBd[NUM_TX_QUEUES]; u8 __iomem *txBd[NUM_TX_QUEUES];
u8 __iomem *rxBd[NUM_RX_QUEUES]; u8 __iomem *rxBd[NUM_RX_QUEUES];
......
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
static struct gen_pool *muram_pool; static struct gen_pool *muram_pool;
static spinlock_t cpm_muram_lock; static spinlock_t cpm_muram_lock;
static u8 __iomem *muram_vbase; static void __iomem *muram_vbase;
static phys_addr_t muram_pbase; static phys_addr_t muram_pbase;
struct muram_block { struct muram_block {
...@@ -223,9 +223,9 @@ void __iomem *cpm_muram_addr(unsigned long offset) ...@@ -223,9 +223,9 @@ void __iomem *cpm_muram_addr(unsigned long offset)
} }
EXPORT_SYMBOL(cpm_muram_addr); EXPORT_SYMBOL(cpm_muram_addr);
unsigned long cpm_muram_offset(void __iomem *addr) unsigned long cpm_muram_offset(const void __iomem *addr)
{ {
return addr - (void __iomem *)muram_vbase; return addr - muram_vbase;
} }
EXPORT_SYMBOL(cpm_muram_offset); EXPORT_SYMBOL(cpm_muram_offset);
...@@ -235,6 +235,18 @@ EXPORT_SYMBOL(cpm_muram_offset); ...@@ -235,6 +235,18 @@ EXPORT_SYMBOL(cpm_muram_offset);
*/ */
dma_addr_t cpm_muram_dma(void __iomem *addr) dma_addr_t cpm_muram_dma(void __iomem *addr)
{ {
return muram_pbase + ((u8 __iomem *)addr - muram_vbase); return muram_pbase + (addr - muram_vbase);
} }
EXPORT_SYMBOL(cpm_muram_dma); EXPORT_SYMBOL(cpm_muram_dma);
/*
* As cpm_muram_free, but takes the virtual address rather than the
* muram offset.
*/
void cpm_muram_free_addr(const void __iomem *addr)
{
if (!addr)
return;
cpm_muram_free(cpm_muram_offset(addr));
}
EXPORT_SYMBOL(cpm_muram_free_addr);
...@@ -27,12 +27,6 @@ ...@@ -27,12 +27,6 @@
#define QE_NUM_OF_BRGS 16 #define QE_NUM_OF_BRGS 16
#define QE_NUM_OF_PORTS 1024 #define QE_NUM_OF_PORTS 1024
/* Memory partitions
*/
#define MEM_PART_SYSTEM 0
#define MEM_PART_SECONDARY 1
#define MEM_PART_MURAM 2
/* Clocks and BRGs */ /* Clocks and BRGs */
enum qe_clock { enum qe_clock {
QE_CLK_NONE = 0, QE_CLK_NONE = 0,
...@@ -102,8 +96,9 @@ s32 cpm_muram_alloc(unsigned long size, unsigned long align); ...@@ -102,8 +96,9 @@ s32 cpm_muram_alloc(unsigned long size, unsigned long align);
void cpm_muram_free(s32 offset); void cpm_muram_free(s32 offset);
s32 cpm_muram_alloc_fixed(unsigned long offset, unsigned long size); s32 cpm_muram_alloc_fixed(unsigned long offset, unsigned long size);
void __iomem *cpm_muram_addr(unsigned long offset); void __iomem *cpm_muram_addr(unsigned long offset);
unsigned long cpm_muram_offset(void __iomem *addr); unsigned long cpm_muram_offset(const void __iomem *addr);
dma_addr_t cpm_muram_dma(void __iomem *addr); dma_addr_t cpm_muram_dma(void __iomem *addr);
void cpm_muram_free_addr(const void __iomem *addr);
#else #else
static inline s32 cpm_muram_alloc(unsigned long size, static inline s32 cpm_muram_alloc(unsigned long size,
unsigned long align) unsigned long align)
...@@ -126,7 +121,7 @@ static inline void __iomem *cpm_muram_addr(unsigned long offset) ...@@ -126,7 +121,7 @@ static inline void __iomem *cpm_muram_addr(unsigned long offset)
return NULL; return NULL;
} }
static inline unsigned long cpm_muram_offset(void __iomem *addr) static inline unsigned long cpm_muram_offset(const void __iomem *addr)
{ {
return -ENOSYS; return -ENOSYS;
} }
...@@ -135,6 +130,9 @@ static inline dma_addr_t cpm_muram_dma(void __iomem *addr) ...@@ -135,6 +130,9 @@ static inline dma_addr_t cpm_muram_dma(void __iomem *addr)
{ {
return 0; return 0;
} }
static inline void cpm_muram_free_addr(const void __iomem *addr)
{
}
#endif /* defined(CONFIG_CPM) || defined(CONFIG_QUICC_ENGINE) */ #endif /* defined(CONFIG_CPM) || defined(CONFIG_QUICC_ENGINE) */
/* QE PIO */ /* QE PIO */
...@@ -239,6 +237,7 @@ static inline int qe_alive_during_sleep(void) ...@@ -239,6 +237,7 @@ static inline int qe_alive_during_sleep(void)
#define qe_muram_addr cpm_muram_addr #define qe_muram_addr cpm_muram_addr
#define qe_muram_offset cpm_muram_offset #define qe_muram_offset cpm_muram_offset
#define qe_muram_dma cpm_muram_dma #define qe_muram_dma cpm_muram_dma
#define qe_muram_free_addr cpm_muram_free_addr
#ifdef CONFIG_PPC32 #ifdef CONFIG_PPC32
#define qe_iowrite8(val, addr) out_8(addr, val) #define qe_iowrite8(val, addr) out_8(addr, val)
......
...@@ -146,7 +146,6 @@ struct ucc_fast_info { ...@@ -146,7 +146,6 @@ struct ucc_fast_info {
resource_size_t regs; resource_size_t regs;
int irq; int irq;
u32 uccm_mask; u32 uccm_mask;
int bd_mem_part;
int brkpt_support; int brkpt_support;
int grant_support; int grant_support;
int tsa; int tsa;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment