Skip to content

Commit 48f0459

Browse files
committed
Merge branch 'altera_tse'
Vince Bridgers says: ==================== Altera TSE: Fix Sparse errors and misc issues This is version 2 of a patch series to correct sparse errors, cppcheck warnings, and workaound a multicast filtering issue in the Altera TSE Ethernet driver. Multicast filtering is not working as expected, so if present in the hardware will not be used and promiscuous mode enabled instead. This workaround will be replaced with a working solution when completely debugged, integrated and tested. Version 2 is different from the first submission by breaking out the workaround as a seperate patch and addressing a few structure instance declarations by making them const per review comments. If you find this patch acceptable, please consider this for inclusion into the Altera TSE driver source code. ==================== Signed-off-by: David S. Miller <[email protected]>
2 parents 200b916 + d91e5c0 commit 48f0459

File tree

10 files changed

+372
-275
lines changed

10 files changed

+372
-275
lines changed

drivers/net/ethernet/altera/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@
55
obj-$(CONFIG_ALTERA_TSE) += altera_tse.o
66
altera_tse-objs := altera_tse_main.o altera_tse_ethtool.o \
77
altera_msgdma.o altera_sgdma.o altera_utils.o
8+
ccflags-y += -D__CHECK_ENDIAN__

drivers/net/ethernet/altera/altera_msgdma.c

Lines changed: 55 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -37,18 +37,16 @@ void msgdma_start_rxdma(struct altera_tse_private *priv)
3737
void msgdma_reset(struct altera_tse_private *priv)
3838
{
3939
int counter;
40-
struct msgdma_csr *txcsr =
41-
(struct msgdma_csr *)priv->tx_dma_csr;
42-
struct msgdma_csr *rxcsr =
43-
(struct msgdma_csr *)priv->rx_dma_csr;
4440

4541
/* Reset Rx mSGDMA */
46-
iowrite32(MSGDMA_CSR_STAT_MASK, &rxcsr->status);
47-
iowrite32(MSGDMA_CSR_CTL_RESET, &rxcsr->control);
42+
csrwr32(MSGDMA_CSR_STAT_MASK, priv->rx_dma_csr,
43+
msgdma_csroffs(status));
44+
csrwr32(MSGDMA_CSR_CTL_RESET, priv->rx_dma_csr,
45+
msgdma_csroffs(control));
4846

4947
counter = 0;
5048
while (counter++ < ALTERA_TSE_SW_RESET_WATCHDOG_CNTR) {
51-
if (tse_bit_is_clear(&rxcsr->status,
49+
if (tse_bit_is_clear(priv->rx_dma_csr, msgdma_csroffs(status),
5250
MSGDMA_CSR_STAT_RESETTING))
5351
break;
5452
udelay(1);
@@ -59,15 +57,18 @@ void msgdma_reset(struct altera_tse_private *priv)
5957
"TSE Rx mSGDMA resetting bit never cleared!\n");
6058

6159
/* clear all status bits */
62-
iowrite32(MSGDMA_CSR_STAT_MASK, &rxcsr->status);
60+
csrwr32(MSGDMA_CSR_STAT_MASK, priv->rx_dma_csr, msgdma_csroffs(status));
6361

6462
/* Reset Tx mSGDMA */
65-
iowrite32(MSGDMA_CSR_STAT_MASK, &txcsr->status);
66-
iowrite32(MSGDMA_CSR_CTL_RESET, &txcsr->control);
63+
csrwr32(MSGDMA_CSR_STAT_MASK, priv->tx_dma_csr,
64+
msgdma_csroffs(status));
65+
66+
csrwr32(MSGDMA_CSR_CTL_RESET, priv->tx_dma_csr,
67+
msgdma_csroffs(control));
6768

6869
counter = 0;
6970
while (counter++ < ALTERA_TSE_SW_RESET_WATCHDOG_CNTR) {
70-
if (tse_bit_is_clear(&txcsr->status,
71+
if (tse_bit_is_clear(priv->tx_dma_csr, msgdma_csroffs(status),
7172
MSGDMA_CSR_STAT_RESETTING))
7273
break;
7374
udelay(1);
@@ -78,58 +79,58 @@ void msgdma_reset(struct altera_tse_private *priv)
7879
"TSE Tx mSGDMA resetting bit never cleared!\n");
7980

8081
/* clear all status bits */
81-
iowrite32(MSGDMA_CSR_STAT_MASK, &txcsr->status);
82+
csrwr32(MSGDMA_CSR_STAT_MASK, priv->tx_dma_csr, msgdma_csroffs(status));
8283
}
8384

8485
void msgdma_disable_rxirq(struct altera_tse_private *priv)
8586
{
86-
struct msgdma_csr *csr = priv->rx_dma_csr;
87-
tse_clear_bit(&csr->control, MSGDMA_CSR_CTL_GLOBAL_INTR);
87+
tse_clear_bit(priv->rx_dma_csr, msgdma_csroffs(control),
88+
MSGDMA_CSR_CTL_GLOBAL_INTR);
8889
}
8990

9091
void msgdma_enable_rxirq(struct altera_tse_private *priv)
9192
{
92-
struct msgdma_csr *csr = priv->rx_dma_csr;
93-
tse_set_bit(&csr->control, MSGDMA_CSR_CTL_GLOBAL_INTR);
93+
tse_set_bit(priv->rx_dma_csr, msgdma_csroffs(control),
94+
MSGDMA_CSR_CTL_GLOBAL_INTR);
9495
}
9596

9697
void msgdma_disable_txirq(struct altera_tse_private *priv)
9798
{
98-
struct msgdma_csr *csr = priv->tx_dma_csr;
99-
tse_clear_bit(&csr->control, MSGDMA_CSR_CTL_GLOBAL_INTR);
99+
tse_clear_bit(priv->tx_dma_csr, msgdma_csroffs(control),
100+
MSGDMA_CSR_CTL_GLOBAL_INTR);
100101
}
101102

102103
void msgdma_enable_txirq(struct altera_tse_private *priv)
103104
{
104-
struct msgdma_csr *csr = priv->tx_dma_csr;
105-
tse_set_bit(&csr->control, MSGDMA_CSR_CTL_GLOBAL_INTR);
105+
tse_set_bit(priv->tx_dma_csr, msgdma_csroffs(control),
106+
MSGDMA_CSR_CTL_GLOBAL_INTR);
106107
}
107108

108109
void msgdma_clear_rxirq(struct altera_tse_private *priv)
109110
{
110-
struct msgdma_csr *csr = priv->rx_dma_csr;
111-
iowrite32(MSGDMA_CSR_STAT_IRQ, &csr->status);
111+
csrwr32(MSGDMA_CSR_STAT_IRQ, priv->rx_dma_csr, msgdma_csroffs(status));
112112
}
113113

114114
void msgdma_clear_txirq(struct altera_tse_private *priv)
115115
{
116-
struct msgdma_csr *csr = priv->tx_dma_csr;
117-
iowrite32(MSGDMA_CSR_STAT_IRQ, &csr->status);
116+
csrwr32(MSGDMA_CSR_STAT_IRQ, priv->tx_dma_csr, msgdma_csroffs(status));
118117
}
119118

120119
/* return 0 to indicate transmit is pending */
121120
int msgdma_tx_buffer(struct altera_tse_private *priv, struct tse_buffer *buffer)
122121
{
123-
struct msgdma_extended_desc *desc = priv->tx_dma_desc;
124-
125-
iowrite32(lower_32_bits(buffer->dma_addr), &desc->read_addr_lo);
126-
iowrite32(upper_32_bits(buffer->dma_addr), &desc->read_addr_hi);
127-
iowrite32(0, &desc->write_addr_lo);
128-
iowrite32(0, &desc->write_addr_hi);
129-
iowrite32(buffer->len, &desc->len);
130-
iowrite32(0, &desc->burst_seq_num);
131-
iowrite32(MSGDMA_DESC_TX_STRIDE, &desc->stride);
132-
iowrite32(MSGDMA_DESC_CTL_TX_SINGLE, &desc->control);
122+
csrwr32(lower_32_bits(buffer->dma_addr), priv->tx_dma_desc,
123+
msgdma_descroffs(read_addr_lo));
124+
csrwr32(upper_32_bits(buffer->dma_addr), priv->tx_dma_desc,
125+
msgdma_descroffs(read_addr_hi));
126+
csrwr32(0, priv->tx_dma_desc, msgdma_descroffs(write_addr_lo));
127+
csrwr32(0, priv->tx_dma_desc, msgdma_descroffs(write_addr_hi));
128+
csrwr32(buffer->len, priv->tx_dma_desc, msgdma_descroffs(len));
129+
csrwr32(0, priv->tx_dma_desc, msgdma_descroffs(burst_seq_num));
130+
csrwr32(MSGDMA_DESC_TX_STRIDE, priv->tx_dma_desc,
131+
msgdma_descroffs(stride));
132+
csrwr32(MSGDMA_DESC_CTL_TX_SINGLE, priv->tx_dma_desc,
133+
msgdma_descroffs(control));
133134
return 0;
134135
}
135136

@@ -138,17 +139,16 @@ u32 msgdma_tx_completions(struct altera_tse_private *priv)
138139
u32 ready = 0;
139140
u32 inuse;
140141
u32 status;
141-
struct msgdma_csr *txcsr =
142-
(struct msgdma_csr *)priv->tx_dma_csr;
143142

144143
/* Get number of sent descriptors */
145-
inuse = ioread32(&txcsr->rw_fill_level) & 0xffff;
144+
inuse = csrrd32(priv->tx_dma_csr, msgdma_csroffs(rw_fill_level))
145+
& 0xffff;
146146

147147
if (inuse) { /* Tx FIFO is not empty */
148148
ready = priv->tx_prod - priv->tx_cons - inuse - 1;
149149
} else {
150150
/* Check for buffered last packet */
151-
status = ioread32(&txcsr->status);
151+
status = csrrd32(priv->tx_dma_csr, msgdma_csroffs(status));
152152
if (status & MSGDMA_CSR_STAT_BUSY)
153153
ready = priv->tx_prod - priv->tx_cons - 1;
154154
else
@@ -162,7 +162,6 @@ u32 msgdma_tx_completions(struct altera_tse_private *priv)
162162
void msgdma_add_rx_desc(struct altera_tse_private *priv,
163163
struct tse_buffer *rxbuffer)
164164
{
165-
struct msgdma_extended_desc *desc = priv->rx_dma_desc;
166165
u32 len = priv->rx_dma_buf_sz;
167166
dma_addr_t dma_addr = rxbuffer->dma_addr;
168167
u32 control = (MSGDMA_DESC_CTL_END_ON_EOP
@@ -172,14 +171,16 @@ void msgdma_add_rx_desc(struct altera_tse_private *priv,
172171
| MSGDMA_DESC_CTL_TR_ERR_IRQ
173172
| MSGDMA_DESC_CTL_GO);
174173

175-
iowrite32(0, &desc->read_addr_lo);
176-
iowrite32(0, &desc->read_addr_hi);
177-
iowrite32(lower_32_bits(dma_addr), &desc->write_addr_lo);
178-
iowrite32(upper_32_bits(dma_addr), &desc->write_addr_hi);
179-
iowrite32(len, &desc->len);
180-
iowrite32(0, &desc->burst_seq_num);
181-
iowrite32(0x00010001, &desc->stride);
182-
iowrite32(control, &desc->control);
174+
csrwr32(0, priv->rx_dma_desc, msgdma_descroffs(read_addr_lo));
175+
csrwr32(0, priv->rx_dma_desc, msgdma_descroffs(read_addr_hi));
176+
csrwr32(lower_32_bits(dma_addr), priv->rx_dma_desc,
177+
msgdma_descroffs(write_addr_lo));
178+
csrwr32(upper_32_bits(dma_addr), priv->rx_dma_desc,
179+
msgdma_descroffs(write_addr_hi));
180+
csrwr32(len, priv->rx_dma_desc, msgdma_descroffs(len));
181+
csrwr32(0, priv->rx_dma_desc, msgdma_descroffs(burst_seq_num));
182+
csrwr32(0x00010001, priv->rx_dma_desc, msgdma_descroffs(stride));
183+
csrwr32(control, priv->rx_dma_desc, msgdma_descroffs(control));
183184
}
184185

185186
/* status is returned on upper 16 bits,
@@ -190,14 +191,13 @@ u32 msgdma_rx_status(struct altera_tse_private *priv)
190191
u32 rxstatus = 0;
191192
u32 pktlength;
192193
u32 pktstatus;
193-
struct msgdma_csr *rxcsr =
194-
(struct msgdma_csr *)priv->rx_dma_csr;
195-
struct msgdma_response *rxresp =
196-
(struct msgdma_response *)priv->rx_dma_resp;
197-
198-
if (ioread32(&rxcsr->resp_fill_level) & 0xffff) {
199-
pktlength = ioread32(&rxresp->bytes_transferred);
200-
pktstatus = ioread32(&rxresp->status);
194+
195+
if (csrrd32(priv->rx_dma_csr, msgdma_csroffs(resp_fill_level))
196+
& 0xffff) {
197+
pktlength = csrrd32(priv->rx_dma_resp,
198+
msgdma_respoffs(bytes_transferred));
199+
pktstatus = csrrd32(priv->rx_dma_resp,
200+
msgdma_respoffs(status));
201201
rxstatus = pktstatus;
202202
rxstatus = rxstatus << 16;
203203
rxstatus |= (pktlength & 0xffff);

drivers/net/ethernet/altera/altera_msgdmahw.h

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,6 @@
1717
#ifndef __ALTERA_MSGDMAHW_H__
1818
#define __ALTERA_MSGDMAHW_H__
1919

20-
/* mSGDMA standard descriptor format
21-
*/
22-
struct msgdma_desc {
23-
u32 read_addr; /* data buffer source address */
24-
u32 write_addr; /* data buffer destination address */
25-
u32 len; /* the number of bytes to transfer per descriptor */
26-
u32 control; /* characteristics of the transfer */
27-
};
28-
2920
/* mSGDMA extended descriptor format
3021
*/
3122
struct msgdma_extended_desc {
@@ -159,6 +150,10 @@ struct msgdma_response {
159150
u32 status;
160151
};
161152

153+
#define msgdma_respoffs(a) (offsetof(struct msgdma_response, a))
154+
#define msgdma_csroffs(a) (offsetof(struct msgdma_csr, a))
155+
#define msgdma_descroffs(a) (offsetof(struct msgdma_extended_desc, a))
156+
162157
/* mSGDMA response register bit definitions
163158
*/
164159
#define MSGDMA_RESP_EARLY_TERM BIT(8)

0 commit comments

Comments
 (0)