1 --- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h
2 +++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h
7 -#define CKCTL_6345_CPU_EN (1 << 0)
8 -#define CKCTL_6345_BUS_EN (1 << 1)
9 -#define CKCTL_6345_EBI_EN (1 << 2)
10 -#define CKCTL_6345_UART_EN (1 << 3)
11 -#define CKCTL_6345_ADSLPHY_EN (1 << 4)
12 -#define CKCTL_6345_ENET_EN (1 << 7)
13 -#define CKCTL_6345_USBH_EN (1 << 8)
14 +#define CKCTL_6345_CPU_EN (1 << 16)
15 +#define CKCTL_6345_BUS_EN (1 << 17)
16 +#define CKCTL_6345_EBI_EN (1 << 18)
17 +#define CKCTL_6345_UART_EN (1 << 19)
18 +#define CKCTL_6345_ADSLPHY_EN (1 << 20)
19 +#define CKCTL_6345_ENET_EN (1 << 23)
20 +#define CKCTL_6345_USBH_EN (1 << 24)
22 -#define CKCTL_6345_ALL_SAFE_EN (CKCTL_6345_ENET_EN | \
23 - CKCTL_6345_USBH_EN | \
24 +#define CKCTL_6345_ALL_SAFE_EN (CKCTL_6345_USBH_EN | \
25 CKCTL_6345_ADSLPHY_EN)
27 #define CKCTL_6348_ADSLPHY_EN (1 << 0)
29 #define ENETSW_MIB_REG_COUNT 47
32 +/* Broadcom 6345 ENET DMA definitions */
33 +#define ENETDMA_6345_CHANCFG_REG(x) (0x00 + (x) * 0x40)
34 +#define ENETDMA_6345_CHANCFG_EN_SHIFT 0
35 +#define ENETDMA_6345_CHANCFG_EN_MASK (1 << ENETDMA_6345_CHANCFG_EN_SHIFT)
36 +#define ENETDMA_6345_PKTHALT_SHIFT 1
37 +#define ENETDMA_6345_PKTHALT_MASK (1 << ENETDMA_6345_PKTHALT_SHIFT)
38 +#define ENETDMA_6345_CHAINING_SHIFT 2
39 +#define ENETDMA_6345_CHAINING_MASK (1 << ENETDMA_6345_CHAINING_SHIFT)
40 +#define ENETDMA_6345_WRAP_EN_SHIFT 3
41 +#define ENETDMA_6345_WRAP_EN_MASK (1 << ENETDMA_6345_WRAP_EN_SHIFT)
42 +#define ENETDMA_6345_FLOWC_EN_SHIFT 4
43 +#define ENETDMA_6345_FLOWC_EN_MASK (1 << ENETDMA_6345_FLOWC_EN_SHIFT)
45 +#define ENETDMA_6345_MAXBURST_REG(x) (0x04 + (x) * 0x40)
47 +#define ENETDMA_6345_RSTART_REG(x) (0x08 + (x) * 0x40)
49 +#define ENETDMA_6345_LEN_REG(x) (0x0C + (x) * 0x40)
51 +#define ENETDMA_6345_BSTAT_REG(x) (0x10 + (x) * 0x40)
53 +#define ENETDMA_6345_IR_REG(x) (0x14 + (x) * 0x40)
54 +#define ENETDMA_6345_IR_BUFDONE_MASK (1 << 0)
55 +#define ENETDMA_6345_IR_PKTDONE_MASK (1 << 1)
56 +#define ENETDMA_6345_IR_NOTOWNER_MASK (1 << 2)
58 +#define ENETDMA_6345_IRMASK_REG(x) (0x18 + (x) * 0x40)
60 +#define ENETDMA_6345_FC_REG(x) (0x1C + (x) * 0x40)
62 +#define ENETDMA_6345_BUFALLOC_REG(x) (0x20 + (x) * 0x40)
65 /*************************************************************************
66 * _REG relative to RSET_OHCI_PRIV
67 *************************************************************************/
68 --- a/drivers/net/ethernet/broadcom/bcm63xx_enet.c
69 +++ b/drivers/net/ethernet/broadcom/bcm63xx_enet.c
71 #include <linux/if_vlan.h>
73 #include <bcm63xx_dev_enet.h>
74 +#include <bcm63xx_cpu.h>
75 #include "bcm63xx_enet.h"
77 static char bcm_enet_driver_name[] = "bcm63xx_enet";
78 @@ -178,6 +179,7 @@ static void bcm_enet_mdio_write_mii(stru
79 static int bcm_enet_refill_rx(struct net_device *dev)
81 struct bcm_enet_priv *priv;
82 + unsigned int desc_shift = BCMCPU_IS_6345() ? DMADESC_6345_SHIFT : 0;
84 priv = netdev_priv(dev);
86 @@ -206,7 +208,7 @@ static int bcm_enet_refill_rx(struct net
87 len_stat = priv->rx_skb_size << DMADESC_LENGTH_SHIFT;
88 len_stat |= DMADESC_OWNER_MASK;
89 if (priv->rx_dirty_desc == priv->rx_ring_size - 1) {
90 - len_stat |= DMADESC_WRAP_MASK;
91 + len_stat |= (DMADESC_WRAP_MASK >> desc_shift);
92 priv->rx_dirty_desc = 0;
94 priv->rx_dirty_desc++;
95 @@ -217,7 +219,10 @@ static int bcm_enet_refill_rx(struct net
96 priv->rx_desc_count++;
98 /* tell dma engine we allocated one buffer */
99 - enet_dma_writel(priv, 1, ENETDMA_BUFALLOC_REG(priv->rx_chan));
100 + if (!BCMCPU_IS_6345())
101 + enet_dma_writel(priv, 1, ENETDMA_BUFALLOC_REG(priv->rx_chan));
103 + enet_dma_writel(priv, 1, ENETDMA_6345_BUFALLOC_REG(priv->rx_chan));
106 /* If rx ring is still empty, set a timer to try allocating
107 @@ -255,6 +260,7 @@ static int bcm_enet_receive_queue(struct
108 struct bcm_enet_priv *priv;
111 + unsigned int desc_shift = BCMCPU_IS_6345() ? DMADESC_6345_SHIFT : 0;
113 priv = netdev_priv(dev);
114 kdev = &priv->pdev->dev;
115 @@ -293,7 +299,7 @@ static int bcm_enet_receive_queue(struct
117 /* if the packet does not have start of packet _and_
118 * end of packet flag set, then just recycle it */
119 - if ((len_stat & DMADESC_ESOP_MASK) != DMADESC_ESOP_MASK) {
120 + if ((len_stat & (DMADESC_ESOP_MASK >> desc_shift)) != (DMADESC_ESOP_MASK >> desc_shift)) {
121 dev->stats.rx_dropped++;
124 @@ -353,8 +359,15 @@ static int bcm_enet_receive_queue(struct
125 bcm_enet_refill_rx(dev);
128 - enet_dma_writel(priv, ENETDMA_CHANCFG_EN_MASK,
129 - ENETDMA_CHANCFG_REG(priv->rx_chan));
130 + if (!BCMCPU_IS_6345())
131 + enet_dma_writel(priv, ENETDMA_CHANCFG_EN_MASK,
132 + ENETDMA_CHANCFG_REG(priv->rx_chan));
134 + enet_dma_writel(priv, ENETDMA_6345_CHANCFG_EN_MASK |
135 + ENETDMA_6345_CHAINING_MASK |
136 + ENETDMA_6345_WRAP_EN_MASK |
137 + ENETDMA_6345_FLOWC_EN_MASK,
138 + ENETDMA_6345_CHANCFG_REG(priv->rx_chan));
142 @@ -429,10 +442,21 @@ static int bcm_enet_poll(struct napi_str
146 - enet_dma_writel(priv, ENETDMA_IR_PKTDONE_MASK,
147 - ENETDMA_IR_REG(priv->rx_chan));
148 - enet_dma_writel(priv, ENETDMA_IR_PKTDONE_MASK,
149 - ENETDMA_IR_REG(priv->tx_chan));
150 + if (!BCMCPU_IS_6345()) {
151 + enet_dma_writel(priv, ENETDMA_IR_PKTDONE_MASK,
152 + ENETDMA_IR_REG(priv->rx_chan));
153 + enet_dma_writel(priv, ENETDMA_IR_PKTDONE_MASK,
154 + ENETDMA_IR_REG(priv->tx_chan));
156 + enet_dma_writel(priv, ENETDMA_IR_BUFDONE_MASK |
157 + ENETDMA_IR_PKTDONE_MASK |
158 + ENETDMA_IR_NOTOWNER_MASK,
159 + ENETDMA_6345_IR_REG(priv->rx_chan));
160 + enet_dma_writel(priv, ENETDMA_IR_BUFDONE_MASK |
161 + ENETDMA_IR_PKTDONE_MASK |
162 + ENETDMA_IR_NOTOWNER_MASK,
163 + ENETDMA_6345_IR_REG(priv->tx_chan));
166 /* reclaim sent skb */
167 tx_work_done = bcm_enet_tx_reclaim(dev, 0);
168 @@ -451,10 +475,21 @@ static int bcm_enet_poll(struct napi_str
171 /* restore rx/tx interrupt */
172 - enet_dma_writel(priv, ENETDMA_IR_PKTDONE_MASK,
173 - ENETDMA_IRMASK_REG(priv->rx_chan));
174 - enet_dma_writel(priv, ENETDMA_IR_PKTDONE_MASK,
175 - ENETDMA_IRMASK_REG(priv->tx_chan));
176 + if (!BCMCPU_IS_6345()) {
177 + enet_dma_writel(priv, ENETDMA_IR_PKTDONE_MASK,
178 + ENETDMA_IRMASK_REG(priv->rx_chan));
179 + enet_dma_writel(priv, ENETDMA_IR_PKTDONE_MASK,
180 + ENETDMA_IRMASK_REG(priv->tx_chan));
182 + enet_dma_writel(priv, ENETDMA_IR_BUFDONE_MASK |
183 + ENETDMA_IR_PKTDONE_MASK |
184 + ENETDMA_IR_NOTOWNER_MASK,
185 + ENETDMA_6345_IRMASK_REG(priv->rx_chan));
186 + enet_dma_writel(priv, ENETDMA_IR_BUFDONE_MASK |
187 + ENETDMA_IR_PKTDONE_MASK |
188 + ENETDMA_IR_NOTOWNER_MASK,
189 + ENETDMA_6345_IRMASK_REG(priv->tx_chan));
194 @@ -497,8 +532,13 @@ static irqreturn_t bcm_enet_isr_dma(int
195 priv = netdev_priv(dev);
197 /* mask rx/tx interrupts */
198 - enet_dma_writel(priv, 0, ENETDMA_IRMASK_REG(priv->rx_chan));
199 - enet_dma_writel(priv, 0, ENETDMA_IRMASK_REG(priv->tx_chan));
200 + if (!BCMCPU_IS_6345()) {
201 + enet_dma_writel(priv, 0, ENETDMA_IRMASK_REG(priv->rx_chan));
202 + enet_dma_writel(priv, 0, ENETDMA_IRMASK_REG(priv->tx_chan));
204 + enet_dma_writel(priv, 0, ENETDMA_6345_IRMASK_REG(priv->rx_chan));
205 + enet_dma_writel(priv, 0, ENETDMA_6345_IRMASK_REG(priv->tx_chan));
208 napi_schedule(&priv->napi);
210 @@ -514,6 +554,7 @@ static int bcm_enet_start_xmit(struct sk
211 struct bcm_enet_desc *desc;
214 + unsigned int desc_shift = BCMCPU_IS_6345() ? DMADESC_6345_SHIFT : 0;
216 priv = netdev_priv(dev);
218 @@ -539,14 +580,13 @@ static int bcm_enet_start_xmit(struct sk
221 len_stat = (skb->len << DMADESC_LENGTH_SHIFT) & DMADESC_LENGTH_MASK;
222 - len_stat |= DMADESC_ESOP_MASK |
223 - DMADESC_APPEND_CRC |
224 - DMADESC_OWNER_MASK;
225 + len_stat |= ((DMADESC_ESOP_MASK >> desc_shift) |
226 + DMADESC_APPEND_CRC | DMADESC_OWNER_MASK);
228 priv->tx_curr_desc++;
229 if (priv->tx_curr_desc == priv->tx_ring_size) {
230 priv->tx_curr_desc = 0;
231 - len_stat |= DMADESC_WRAP_MASK;
232 + len_stat |= (DMADESC_WRAP_MASK >> desc_shift);
234 priv->tx_desc_count--;
236 @@ -557,8 +597,15 @@ static int bcm_enet_start_xmit(struct sk
240 - enet_dma_writel(priv, ENETDMA_CHANCFG_EN_MASK,
241 - ENETDMA_CHANCFG_REG(priv->tx_chan));
242 + if (!BCMCPU_IS_6345())
243 + enet_dma_writel(priv, ENETDMA_CHANCFG_EN_MASK,
244 + ENETDMA_CHANCFG_REG(priv->tx_chan));
246 + enet_dma_writel(priv, ENETDMA_6345_CHANCFG_EN_MASK |
247 + ENETDMA_6345_CHAINING_MASK |
248 + ENETDMA_6345_WRAP_EN_MASK |
249 + ENETDMA_6345_FLOWC_EN_MASK,
250 + ENETDMA_6345_CHANCFG_REG(priv->tx_chan));
252 /* stop queue if no more desc available */
253 if (!priv->tx_desc_count)
254 @@ -686,6 +733,9 @@ static void bcm_enet_set_flow(struct bcm
255 val &= ~ENET_RXCFG_ENFLOW_MASK;
256 enet_writel(priv, val, ENET_RXCFG_REG);
258 + if (BCMCPU_IS_6345())
261 /* tx flow control (pause frame generation) */
262 val = enet_dma_readl(priv, ENETDMA_CFG_REG);
264 @@ -833,8 +883,13 @@ static int bcm_enet_open(struct net_devi
266 /* mask all interrupts and request them */
267 enet_writel(priv, 0, ENET_IRMASK_REG);
268 - enet_dma_writel(priv, 0, ENETDMA_IRMASK_REG(priv->rx_chan));
269 - enet_dma_writel(priv, 0, ENETDMA_IRMASK_REG(priv->tx_chan));
270 + if (!BCMCPU_IS_6345()) {
271 + enet_dma_writel(priv, 0, ENETDMA_IRMASK_REG(priv->rx_chan));
272 + enet_dma_writel(priv, 0, ENETDMA_IRMASK_REG(priv->tx_chan));
274 + enet_dma_writel(priv, 0, ENETDMA_6345_IRMASK_REG(priv->rx_chan));
275 + enet_dma_writel(priv, 0, ENETDMA_6345_IRMASK_REG(priv->tx_chan));
278 ret = request_irq(dev->irq, bcm_enet_isr_mac, 0, dev->name, dev);
280 @@ -913,8 +968,12 @@ static int bcm_enet_open(struct net_devi
281 priv->rx_curr_desc = 0;
283 /* initialize flow control buffer allocation */
284 - enet_dma_writel(priv, ENETDMA_BUFALLOC_FORCE_MASK | 0,
285 - ENETDMA_BUFALLOC_REG(priv->rx_chan));
286 + if (!BCMCPU_IS_6345())
287 + enet_dma_writel(priv, ENETDMA_BUFALLOC_FORCE_MASK | 0,
288 + ENETDMA_BUFALLOC_REG(priv->rx_chan));
290 + enet_dma_writel(priv, ENETDMA_BUFALLOC_FORCE_MASK | 0,
291 + ENETDMA_6345_BUFALLOC_REG(priv->rx_chan));
293 if (bcm_enet_refill_rx(dev)) {
294 dev_err(kdev, "cannot allocate rx skb queue\n");
295 @@ -923,37 +982,62 @@ static int bcm_enet_open(struct net_devi
298 /* write rx & tx ring addresses */
299 - enet_dma_writel(priv, priv->rx_desc_dma,
300 - ENETDMA_RSTART_REG(priv->rx_chan));
301 - enet_dma_writel(priv, priv->tx_desc_dma,
302 - ENETDMA_RSTART_REG(priv->tx_chan));
303 + if (!BCMCPU_IS_6345()) {
304 + enet_dma_writel(priv, priv->rx_desc_dma,
305 + ENETDMA_RSTART_REG(priv->rx_chan));
306 + enet_dma_writel(priv, priv->tx_desc_dma,
307 + ENETDMA_RSTART_REG(priv->tx_chan));
309 + enet_dma_writel(priv, priv->rx_desc_dma,
310 + ENETDMA_6345_RSTART_REG(priv->rx_chan));
311 + enet_dma_writel(priv, priv->tx_desc_dma,
312 + ENETDMA_6345_RSTART_REG(priv->tx_chan));
315 /* clear remaining state ram for rx & tx channel */
316 - enet_dma_writel(priv, 0, ENETDMA_SRAM2_REG(priv->rx_chan));
317 - enet_dma_writel(priv, 0, ENETDMA_SRAM2_REG(priv->tx_chan));
318 - enet_dma_writel(priv, 0, ENETDMA_SRAM3_REG(priv->rx_chan));
319 - enet_dma_writel(priv, 0, ENETDMA_SRAM3_REG(priv->tx_chan));
320 - enet_dma_writel(priv, 0, ENETDMA_SRAM4_REG(priv->rx_chan));
321 - enet_dma_writel(priv, 0, ENETDMA_SRAM4_REG(priv->tx_chan));
322 + if (!BCMCPU_IS_6345()) {
323 + enet_dma_writel(priv, 0, ENETDMA_SRAM2_REG(priv->rx_chan));
324 + enet_dma_writel(priv, 0, ENETDMA_SRAM2_REG(priv->tx_chan));
325 + enet_dma_writel(priv, 0, ENETDMA_SRAM3_REG(priv->rx_chan));
326 + enet_dma_writel(priv, 0, ENETDMA_SRAM3_REG(priv->tx_chan));
327 + enet_dma_writel(priv, 0, ENETDMA_SRAM4_REG(priv->rx_chan));
328 + enet_dma_writel(priv, 0, ENETDMA_SRAM4_REG(priv->tx_chan));
330 + enet_dma_writel(priv, 0, ENETDMA_6345_FC_REG(priv->rx_chan));
331 + enet_dma_writel(priv, 0, ENETDMA_6345_FC_REG(priv->tx_chan));
334 /* set max rx/tx length */
335 enet_writel(priv, priv->hw_mtu, ENET_RXMAXLEN_REG);
336 enet_writel(priv, priv->hw_mtu, ENET_TXMAXLEN_REG);
338 /* set dma maximum burst len */
339 - enet_dma_writel(priv, BCMENET_DMA_MAXBURST,
340 - ENETDMA_MAXBURST_REG(priv->rx_chan));
341 - enet_dma_writel(priv, BCMENET_DMA_MAXBURST,
342 - ENETDMA_MAXBURST_REG(priv->tx_chan));
343 + if (!BCMCPU_IS_6345()) {
344 + enet_dma_writel(priv, BCMENET_DMA_MAXBURST,
345 + ENETDMA_MAXBURST_REG(priv->rx_chan));
346 + enet_dma_writel(priv, BCMENET_DMA_MAXBURST,
347 + ENETDMA_MAXBURST_REG(priv->tx_chan));
349 + enet_dma_writel(priv, BCMENET_DMA_MAXBURST,
350 + ENETDMA_6345_MAXBURST_REG(priv->rx_chan));
351 + enet_dma_writel(priv, BCMENET_DMA_MAXBURST,
352 + ENETDMA_6345_MAXBURST_REG(priv->tx_chan));
355 /* set correct transmit fifo watermark */
356 enet_writel(priv, BCMENET_TX_FIFO_TRESH, ENET_TXWMARK_REG);
358 /* set flow control low/high threshold to 1/3 / 2/3 */
359 - val = priv->rx_ring_size / 3;
360 - enet_dma_writel(priv, val, ENETDMA_FLOWCL_REG(priv->rx_chan));
361 - val = (priv->rx_ring_size * 2) / 3;
362 - enet_dma_writel(priv, val, ENETDMA_FLOWCH_REG(priv->rx_chan));
363 + if (!BCMCPU_IS_6345()) {
364 + val = priv->rx_ring_size / 3;
365 + enet_dma_writel(priv, val, ENETDMA_FLOWCL_REG(priv->rx_chan));
366 + val = (priv->rx_ring_size * 2) / 3;
367 + enet_dma_writel(priv, val, ENETDMA_FLOWCH_REG(priv->rx_chan));
369 + enet_dma_writel(priv, 5, ENETDMA_6345_FC_REG(priv->rx_chan));
370 + enet_dma_writel(priv, priv->rx_ring_size, ENETDMA_6345_LEN_REG(priv->rx_chan));
371 + enet_dma_writel(priv, priv->tx_ring_size, ENETDMA_6345_LEN_REG(priv->tx_chan));
374 /* all set, enable mac and interrupts, start dma engine and
375 * kick rx dma channel */
376 @@ -961,27 +1045,58 @@ static int bcm_enet_open(struct net_devi
377 val = enet_readl(priv, ENET_CTL_REG);
378 val |= ENET_CTL_ENABLE_MASK;
379 enet_writel(priv, val, ENET_CTL_REG);
380 - enet_dma_writel(priv, ENETDMA_CFG_EN_MASK, ENETDMA_CFG_REG);
381 - enet_dma_writel(priv, ENETDMA_CHANCFG_EN_MASK,
382 - ENETDMA_CHANCFG_REG(priv->rx_chan));
384 + if (!BCMCPU_IS_6345()) {
385 + enet_dma_writel(priv, ENETDMA_CFG_EN_MASK, ENETDMA_CFG_REG);
386 + enet_dma_writel(priv, ENETDMA_CHANCFG_EN_MASK,
387 + ENETDMA_CHANCFG_REG(priv->rx_chan));
389 + enet_dma_writel(priv, ENETDMA_6345_CHANCFG_EN_MASK |
390 + ENETDMA_6345_CHAINING_MASK |
391 + ENETDMA_6345_WRAP_EN_MASK |
392 + ENETDMA_6345_FLOWC_EN_MASK,
393 + ENETDMA_6345_CHANCFG_REG(priv->rx_chan));
396 /* watch "mib counters about to overflow" interrupt */
397 enet_writel(priv, ENET_IR_MIB, ENET_IR_REG);
398 enet_writel(priv, ENET_IR_MIB, ENET_IRMASK_REG);
400 /* watch "packet transferred" interrupt in rx and tx */
401 - enet_dma_writel(priv, ENETDMA_IR_PKTDONE_MASK,
402 - ENETDMA_IR_REG(priv->rx_chan));
403 - enet_dma_writel(priv, ENETDMA_IR_PKTDONE_MASK,
404 - ENETDMA_IR_REG(priv->tx_chan));
405 + if (!BCMCPU_IS_6345()) {
406 + enet_dma_writel(priv, ENETDMA_IR_PKTDONE_MASK,
407 + ENETDMA_IR_REG(priv->rx_chan));
408 + enet_dma_writel(priv, ENETDMA_IR_PKTDONE_MASK,
409 + ENETDMA_IR_REG(priv->tx_chan));
411 + enet_dma_writel(priv, ENETDMA_IR_BUFDONE_MASK |
412 + ENETDMA_IR_PKTDONE_MASK |
413 + ENETDMA_IR_NOTOWNER_MASK,
414 + ENETDMA_6345_IR_REG(priv->rx_chan));
415 + enet_dma_writel(priv, ENETDMA_IR_BUFDONE_MASK |
416 + ENETDMA_IR_PKTDONE_MASK |
417 + ENETDMA_IR_NOTOWNER_MASK,
418 + ENETDMA_6345_IR_REG(priv->tx_chan));
421 /* make sure we enable napi before rx interrupt */
422 napi_enable(&priv->napi);
424 - enet_dma_writel(priv, ENETDMA_IR_PKTDONE_MASK,
425 - ENETDMA_IRMASK_REG(priv->rx_chan));
426 - enet_dma_writel(priv, ENETDMA_IR_PKTDONE_MASK,
427 - ENETDMA_IRMASK_REG(priv->tx_chan));
428 + if (!BCMCPU_IS_6345()) {
429 + enet_dma_writel(priv, ENETDMA_IR_PKTDONE_MASK,
430 + ENETDMA_IRMASK_REG(priv->rx_chan));
431 + enet_dma_writel(priv, ENETDMA_IR_PKTDONE_MASK,
432 + ENETDMA_IRMASK_REG(priv->tx_chan));
434 + enet_dma_writel(priv, ENETDMA_IR_BUFDONE_MASK |
435 + ENETDMA_IR_PKTDONE_MASK |
436 + ENETDMA_IR_NOTOWNER_MASK,
437 + ENETDMA_6345_IRMASK_REG(priv->rx_chan));
438 + enet_dma_writel(priv, ENETDMA_IR_BUFDONE_MASK |
439 + ENETDMA_IR_PKTDONE_MASK |
440 + ENETDMA_IR_NOTOWNER_MASK,
441 + ENETDMA_6345_IRMASK_REG(priv->tx_chan));
445 phy_start(priv->phydev);
446 @@ -1061,13 +1176,19 @@ static void bcm_enet_disable_dma(struct
450 - enet_dma_writel(priv, 0, ENETDMA_CHANCFG_REG(chan));
451 + if (!BCMCPU_IS_6345())
452 + enet_dma_writel(priv, 0, ENETDMA_CHANCFG_REG(chan));
454 + enet_dma_writel(priv, 0, ENETDMA_6345_CHANCFG_REG(chan));
460 - val = enet_dma_readl(priv, ENETDMA_CHANCFG_REG(chan));
461 + if (!BCMCPU_IS_6345())
462 + val = enet_dma_readl(priv, ENETDMA_CHANCFG_REG(chan));
464 + val = enet_dma_readl(priv, ENETDMA_6345_CHANCFG_REG(chan));
465 if (!(val & ENETDMA_CHANCFG_EN_MASK))
468 @@ -1094,8 +1215,13 @@ static int bcm_enet_stop(struct net_devi
470 /* mask all interrupts */
471 enet_writel(priv, 0, ENET_IRMASK_REG);
472 - enet_dma_writel(priv, 0, ENETDMA_IRMASK_REG(priv->rx_chan));
473 - enet_dma_writel(priv, 0, ENETDMA_IRMASK_REG(priv->tx_chan));
474 + if (!BCMCPU_IS_6345()) {
475 + enet_dma_writel(priv, 0, ENETDMA_IRMASK_REG(priv->rx_chan));
476 + enet_dma_writel(priv, 0, ENETDMA_IRMASK_REG(priv->tx_chan));
478 + enet_dma_writel(priv, 0, ENETDMA_6345_IRMASK_REG(priv->rx_chan));
479 + enet_dma_writel(priv, 0, ENETDMA_6345_IRMASK_REG(priv->tx_chan));
482 /* make sure no mib update is scheduled */
483 cancel_work_sync(&priv->mib_update_task);
484 @@ -1622,6 +1748,7 @@ static int __devinit bcm_enet_probe(stru
485 const char *clk_name;
486 unsigned int iomem_size;
488 + unsigned int chan_offset = 0;
490 /* stop if shared driver failed, assume driver->probe will be
491 * called in the same order we register devices (correct ?) */
492 @@ -1661,10 +1788,13 @@ static int __devinit bcm_enet_probe(stru
493 priv->irq_tx = res_irq_tx->start;
494 priv->mac_id = pdev->id;
496 + if (BCMCPU_IS_6345())
499 /* get rx & tx dma channel id for this mac */
500 if (priv->mac_id == 0) {
503 + priv->rx_chan = 0 + chan_offset;
504 + priv->tx_chan = 1 + chan_offset;
508 --- a/drivers/net/ethernet/broadcom/bcm63xx_enet.h
509 +++ b/drivers/net/ethernet/broadcom/bcm63xx_enet.h
510 @@ -46,6 +46,9 @@ struct bcm_enet_desc {
511 #define DMADESC_ESOP_MASK (DMADESC_EOP_MASK | DMADESC_SOP_MASK)
512 #define DMADESC_WRAP_MASK (1 << 12)
514 +/* Shift down for EOP, SOP and WRAP bits */
515 +#define DMADESC_6345_SHIFT (3)
517 #define DMADESC_UNDER_MASK (1 << 9)
518 #define DMADESC_APPEND_CRC (1 << 8)
519 #define DMADESC_OVSIZE_MASK (1 << 4)
520 --- a/arch/mips/bcm63xx/dev-enet.c
521 +++ b/arch/mips/bcm63xx/dev-enet.c
522 @@ -104,7 +104,7 @@ int __init bcm63xx_enet_register(int uni
526 - if (unit == 1 && BCMCPU_IS_6338())
527 + if (unit == 1 && (BCMCPU_IS_6338() || BCMCPU_IS_6345()))
530 if (!shared_device_registered) {