• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * SBE 2T3E3 synchronous serial card driver for Linux
3  *
4  * Copyright (C) 2009-2010 Krzysztof Halasa <khc@pm.waw.pl>
5  *
6  * This program is free software; you can redistribute it and/or modify it
7  * under the terms of version 2 of the GNU General Public License
8  * as published by the Free Software Foundation.
9  *
10  * This code is based on a driver written by SBE Inc.
11  */
12 
13 #include <linux/netdevice.h>
14 #include <linux/types.h>
15 #include <linux/errno.h>
16 #include <linux/io.h>
17 #include "2t3e3.h"
18 #include "ctrl.h"
19 
dc_init(struct channel * sc)20 void dc_init(struct channel *sc)
21 {
22 	u32 val;
23 
24 	dc_stop(sc);
25 	/*dc_reset(sc);*/ /* do not want to reset here */
26 
27 	/*
28 	 * BUS_MODE (CSR0)
29 	 */
30 	val = SBE_2T3E3_21143_VAL_READ_LINE_ENABLE |
31 		SBE_2T3E3_21143_VAL_READ_MULTIPLE_ENABLE |
32 		SBE_2T3E3_21143_VAL_TRANSMIT_AUTOMATIC_POLLING_200us |
33 		SBE_2T3E3_21143_VAL_BUS_ARBITRATION_RR;
34 
35 	if (sc->h.command & 16)
36 		val |= SBE_2T3E3_21143_VAL_WRITE_AND_INVALIDATE_ENABLE;
37 
38 	switch (sc->h.cache_size) {
39 	case 32:
40 		val |= SBE_2T3E3_21143_VAL_CACHE_ALIGNMENT_32;
41 		break;
42 	case 16:
43 		val |= SBE_2T3E3_21143_VAL_CACHE_ALIGNMENT_16;
44 		break;
45 	case 8:
46 		val |= SBE_2T3E3_21143_VAL_CACHE_ALIGNMENT_8;
47 		break;
48 	default:
49 		break;
50 	}
51 
52 	dc_write(sc->addr, SBE_2T3E3_21143_REG_BUS_MODE, val);
53 
54 	/* OPERATION_MODE (CSR6) */
55 	val = SBE_2T3E3_21143_VAL_RECEIVE_ALL |
56 		SBE_2T3E3_21143_VAL_MUST_BE_ONE |
57 		SBE_2T3E3_21143_VAL_THRESHOLD_CONTROL_BITS_1 |
58 		SBE_2T3E3_21143_VAL_LOOPBACK_OFF |
59 		SBE_2T3E3_21143_VAL_PASS_ALL_MULTICAST |
60 		SBE_2T3E3_21143_VAL_PROMISCUOUS_MODE |
61 		SBE_2T3E3_21143_VAL_PASS_BAD_FRAMES;
62 	dc_write(sc->addr, SBE_2T3E3_21143_REG_OPERATION_MODE, val);
63 	if (sc->p.loopback == SBE_2T3E3_LOOPBACK_ETHERNET)
64 		sc->p.loopback = SBE_2T3E3_LOOPBACK_NONE;
65 
66 #if 0 /* No need to clear this register - and it may be in use */
67 	/*
68 	 * BOOT_ROM_SERIAL_ROM_AND_MII_MANAGEMENT (CSR9)
69 	 */
70 	val = 0;
71 	dc_write(sc->addr, SBE_2T3E3_21143_REG_BOOT_ROM_SERIAL_ROM_AND_MII_MANAGEMENT, val);
72 #endif
73 
74 	/*
75 	 * GENERAL_PURPOSE_TIMER_AND_INTERRUPT_MITIGATION_CONTROL (CSR11)
76 	 */
77 	val = SBE_2T3E3_21143_VAL_CYCLE_SIZE |
78 		SBE_2T3E3_21143_VAL_TRANSMIT_TIMER |
79 		SBE_2T3E3_21143_VAL_NUMBER_OF_TRANSMIT_PACKETS |
80 		SBE_2T3E3_21143_VAL_RECEIVE_TIMER |
81 		SBE_2T3E3_21143_VAL_NUMBER_OF_RECEIVE_PACKETS;
82 	dc_write(sc->addr, SBE_2T3E3_21143_REG_GENERAL_PURPOSE_TIMER_AND_INTERRUPT_MITIGATION_CONTROL, val);
83 
84 	/* prepare descriptors and data for receive and transmit procecsses */
85 	if (dc_init_descriptor_list(sc) != 0)
86 		return;
87 
88 	/* clear ethernet interrupts status */
89 	dc_write(sc->addr, SBE_2T3E3_21143_REG_STATUS, 0xFFFFFFFF);
90 
91 	/* SIA mode registers */
92 	dc_set_output_port(sc);
93 }
94 
dc_start(struct channel * sc)95 void dc_start(struct channel *sc)
96 {
97 	u32 val;
98 
99 	if (!(sc->r.flags & SBE_2T3E3_FLAG_NETWORK_UP))
100 		return;
101 
102 	dc_init(sc);
103 
104 	/* get actual LOS and OOF status */
105 	switch (sc->p.frame_type) {
106 	case SBE_2T3E3_FRAME_TYPE_E3_G751:
107 	case SBE_2T3E3_FRAME_TYPE_E3_G832:
108 		val = exar7250_read(sc, SBE_2T3E3_FRAMER_REG_E3_RX_CONFIGURATION_STATUS_2);
109 		dev_dbg(&sc->pdev->dev, "Start Framer Rx Status = %02X\n", val);
110 		sc->s.OOF = val & SBE_2T3E3_FRAMER_VAL_E3_RX_OOF ? 1 : 0;
111 		break;
112 	case SBE_2T3E3_FRAME_TYPE_T3_CBIT:
113 	case SBE_2T3E3_FRAME_TYPE_T3_M13:
114 		val = exar7250_read(sc, SBE_2T3E3_FRAMER_REG_T3_RX_CONFIGURATION_STATUS);
115 		dev_dbg(&sc->pdev->dev, "Start Framer Rx Status = %02X\n", val);
116 		sc->s.OOF = val & SBE_2T3E3_FRAMER_VAL_T3_RX_OOF ? 1 : 0;
117 		break;
118 	default:
119 		break;
120 	}
121 	cpld_LOS_update(sc);
122 
123 	/* start receive and transmit processes */
124 	dc_transmitter_onoff(sc, SBE_2T3E3_ON);
125 	dc_receiver_onoff(sc, SBE_2T3E3_ON);
126 
127 	/* start interrupts */
128 	dc_start_intr(sc);
129 }
130 
131 #define MAX_INT_WAIT_CNT	12000
dc_stop(struct channel * sc)132 void dc_stop(struct channel *sc)
133 {
134 	int wcnt;
135 
136 	/* stop receive and transmit processes */
137 	dc_receiver_onoff(sc, SBE_2T3E3_OFF);
138 	dc_transmitter_onoff(sc, SBE_2T3E3_OFF);
139 
140 	/* turn off ethernet interrupts */
141 	dc_stop_intr(sc);
142 
143 	/* wait to ensure the interrupts have been completed */
144 	for (wcnt = 0; wcnt < MAX_INT_WAIT_CNT; wcnt++) {
145 		udelay(5);
146 		if (!sc->interrupt_active)
147 			break;
148 	}
149 	if (wcnt >= MAX_INT_WAIT_CNT)
150 		dev_warn(&sc->pdev->dev, "SBE 2T3E3: Interrupt active too long\n");
151 
152 	/* clear all receive/transmit data */
153 	dc_drop_descriptor_list(sc);
154 }
155 
dc_start_intr(struct channel * sc)156 void dc_start_intr(struct channel *sc)
157 {
158 	if (sc->p.loopback == SBE_2T3E3_LOOPBACK_NONE && sc->s.OOF)
159 		return;
160 
161 	if (sc->p.receiver_on || sc->p.transmitter_on) {
162 		if (!sc->ether.interrupt_enable_mask)
163 			dc_write(sc->addr, SBE_2T3E3_21143_REG_STATUS, 0xFFFFFFFF);
164 
165 		sc->ether.interrupt_enable_mask =
166 			SBE_2T3E3_21143_VAL_NORMAL_INTERRUPT_SUMMARY_ENABLE |
167 			SBE_2T3E3_21143_VAL_ABNORMAL_INTERRUPT_SUMMARY_ENABLE |
168 			SBE_2T3E3_21143_VAL_RECEIVE_STOPPED_ENABLE |
169 			SBE_2T3E3_21143_VAL_RECEIVE_BUFFER_UNAVAILABLE_ENABLE |
170 			SBE_2T3E3_21143_VAL_RECEIVE_INTERRUPT_ENABLE |
171 			SBE_2T3E3_21143_VAL_TRANSMIT_UNDERFLOW_INTERRUPT_ENABLE |
172 			SBE_2T3E3_21143_VAL_TRANSMIT_BUFFER_UNAVAILABLE_ENABLE |
173 			SBE_2T3E3_21143_VAL_TRANSMIT_STOPPED_ENABLE |
174 			SBE_2T3E3_21143_VAL_TRANSMIT_INTERRUPT_ENABLE;
175 
176 		dc_write(sc->addr, SBE_2T3E3_21143_REG_INTERRUPT_ENABLE,
177 			 sc->ether.interrupt_enable_mask);
178 	}
179 }
180 
dc_stop_intr(struct channel * sc)181 void dc_stop_intr(struct channel *sc)
182 {
183 	sc->ether.interrupt_enable_mask = 0;
184 	dc_write(sc->addr, SBE_2T3E3_21143_REG_INTERRUPT_ENABLE, 0);
185 }
186 
dc_reset(struct channel * sc)187 void dc_reset(struct channel *sc)
188 {
189 	/* turn off ethernet interrupts */
190 	dc_write(sc->addr, SBE_2T3E3_21143_REG_INTERRUPT_ENABLE, 0);
191 	dc_write(sc->addr, SBE_2T3E3_21143_REG_STATUS, 0xFFFFFFFF);
192 
193 	/* software reset */
194 	dc_set_bits(sc->addr, SBE_2T3E3_21143_REG_BUS_MODE,
195 		   SBE_2T3E3_21143_VAL_SOFTWARE_RESET);
196 	udelay(4); /* 50 PCI cycles < 2us */
197 
198 	/* clear hardware configuration */
199 	dc_write(sc->addr, SBE_2T3E3_21143_REG_BUS_MODE, 0);
200 
201 	/* clear software configuration */
202 	dc_write(sc->addr, SBE_2T3E3_21143_REG_OPERATION_MODE, 0);
203 
204 	/* turn off SIA reset */
205 	dc_set_bits(sc->addr, SBE_2T3E3_21143_REG_SIA_CONNECTIVITY,
206 		   SBE_2T3E3_21143_VAL_SIA_RESET);
207 	dc_write(sc->addr, SBE_2T3E3_21143_REG_SIA_TRANSMIT_AND_RECEIVE, 0);
208 	dc_write(sc->addr, SBE_2T3E3_21143_REG_SIA_AND_GENERAL_PURPOSE_PORT, 0);
209 }
210 
211 
dc_receiver_onoff(struct channel * sc,u32 mode)212 void dc_receiver_onoff(struct channel *sc, u32 mode)
213 {
214 	u32 i, state = 0;
215 
216 	if (sc->p.receiver_on == mode)
217 		return;
218 
219 	switch (mode) {
220 	case SBE_2T3E3_OFF:
221 		if (dc_read(sc->addr, SBE_2T3E3_21143_REG_OPERATION_MODE) &
222 		    SBE_2T3E3_21143_VAL_RECEIVE_START) {
223 			dc_clear_bits(sc->addr, SBE_2T3E3_21143_REG_OPERATION_MODE,
224 				      SBE_2T3E3_21143_VAL_RECEIVE_START);
225 
226 			for (i = 0; i < 16; i++) {
227 				state = dc_read(sc->addr, SBE_2T3E3_21143_REG_STATUS) &
228 					SBE_2T3E3_21143_VAL_RECEIVE_PROCESS_STATE;
229 				if (state == SBE_2T3E3_21143_VAL_RX_STOPPED)
230 					break;
231 				udelay(5);
232 			}
233 			if (state != SBE_2T3E3_21143_VAL_RX_STOPPED)
234 				dev_warn(&sc->pdev->dev, "SBE 2T3E3: Rx failed to stop\n");
235 			else
236 				dev_info(&sc->pdev->dev, "SBE 2T3E3: Rx off\n");
237 		}
238 		break;
239 	case SBE_2T3E3_ON:
240 		dc_set_bits(sc->addr, SBE_2T3E3_21143_REG_OPERATION_MODE,
241 			   SBE_2T3E3_21143_VAL_RECEIVE_START);
242 		udelay(100);
243 		dc_write(sc->addr, SBE_2T3E3_21143_REG_RECEIVE_POLL_DEMAND, 0xFFFFFFFF);
244 		break;
245 	default:
246 		return;
247 	}
248 
249 	sc->p.receiver_on = mode;
250 }
251 
dc_transmitter_onoff(struct channel * sc,u32 mode)252 void dc_transmitter_onoff(struct channel *sc, u32 mode)
253 {
254 	u32 i, state = 0;
255 
256 	if (sc->p.transmitter_on == mode)
257 		return;
258 
259 	switch (mode) {
260 	case SBE_2T3E3_OFF:
261 		if (dc_read(sc->addr, SBE_2T3E3_21143_REG_OPERATION_MODE) &
262 		    SBE_2T3E3_21143_VAL_TRANSMISSION_START) {
263 			dc_clear_bits(sc->addr, SBE_2T3E3_21143_REG_OPERATION_MODE,
264 				      SBE_2T3E3_21143_VAL_TRANSMISSION_START);
265 
266 			for (i = 0; i < 16; i++) {
267 				state = dc_read(sc->addr, SBE_2T3E3_21143_REG_STATUS) &
268 					SBE_2T3E3_21143_VAL_TRANSMISSION_PROCESS_STATE;
269 				if (state == SBE_2T3E3_21143_VAL_TX_STOPPED)
270 					break;
271 				udelay(5);
272 			}
273 			if (state != SBE_2T3E3_21143_VAL_TX_STOPPED)
274 				dev_warn(&sc->pdev->dev, "SBE 2T3E3: Tx failed to stop\n");
275 		}
276 		break;
277 	case SBE_2T3E3_ON:
278 		dc_set_bits(sc->addr, SBE_2T3E3_21143_REG_OPERATION_MODE,
279 			   SBE_2T3E3_21143_VAL_TRANSMISSION_START);
280 		udelay(100);
281 		dc_write(sc->addr, SBE_2T3E3_21143_REG_TRANSMIT_POLL_DEMAND, 0xFFFFFFFF);
282 		break;
283 	default:
284 		return;
285 	}
286 
287 	sc->p.transmitter_on = mode;
288 }
289 
290 
291 
dc_set_loopback(struct channel * sc,u32 mode)292 void dc_set_loopback(struct channel *sc, u32 mode)
293 {
294 	u32 val;
295 
296 	switch (mode) {
297 	case SBE_2T3E3_21143_VAL_LOOPBACK_OFF:
298 	case SBE_2T3E3_21143_VAL_LOOPBACK_INTERNAL:
299 		break;
300 	default:
301 		return;
302 	}
303 
304 #if 0
305 	/* restart SIA */
306 	dc_clear_bits(sc->addr, SBE_2T3E3_21143_REG_SIA_CONNECTIVITY,
307 		      SBE_2T3E3_21143_VAL_SIA_RESET);
308 	udelay(1000);
309 	dc_set_bits(sc->addr, SBE_2T3E3_21143_REG_SIA_CONNECTIVITY,
310 		    SBE_2T3E3_21143_VAL_SIA_RESET);
311 #endif
312 
313 	/* select loopback mode */
314 	val = dc_read(sc->addr, SBE_2T3E3_21143_REG_OPERATION_MODE) &
315 		~SBE_2T3E3_21143_VAL_OPERATING_MODE;
316 	val |= mode;
317 	dc_write(sc->addr, SBE_2T3E3_21143_REG_OPERATION_MODE, val);
318 
319 	if (mode == SBE_2T3E3_21143_VAL_LOOPBACK_OFF)
320 		dc_set_bits(sc->addr, SBE_2T3E3_21143_REG_OPERATION_MODE,
321 			   SBE_2T3E3_21143_VAL_FULL_DUPLEX_MODE);
322 	else
323 		dc_clear_bits(sc->addr, SBE_2T3E3_21143_REG_OPERATION_MODE,
324 			      SBE_2T3E3_21143_VAL_FULL_DUPLEX_MODE);
325 }
326 
dc_init_descriptor_list(struct channel * sc)327 u32 dc_init_descriptor_list(struct channel *sc)
328 {
329 	u32 i, j;
330 	struct sk_buff *m;
331 
332 	if (sc->ether.rx_ring == NULL)
333 		sc->ether.rx_ring = kzalloc(SBE_2T3E3_RX_DESC_RING_SIZE *
334 					    sizeof(t3e3_rx_desc_t), GFP_KERNEL);
335 	if (sc->ether.rx_ring == NULL) {
336 		dev_err(&sc->pdev->dev, "SBE 2T3E3: no buffer space for RX ring\n");
337 		return ENOMEM;
338 	}
339 
340 	if (sc->ether.tx_ring == NULL)
341 		sc->ether.tx_ring = kzalloc(SBE_2T3E3_TX_DESC_RING_SIZE *
342 					    sizeof(t3e3_tx_desc_t), GFP_KERNEL);
343 	if (sc->ether.tx_ring == NULL) {
344 		kfree(sc->ether.rx_ring);
345 		sc->ether.rx_ring = NULL;
346 		dev_err(&sc->pdev->dev, "SBE 2T3E3: no buffer space for RX ring\n");
347 		return ENOMEM;
348 	}
349 
350 
351 	/*
352 	 * Receive ring
353 	 */
354 	for (i = 0; i < SBE_2T3E3_RX_DESC_RING_SIZE; i++) {
355 		sc->ether.rx_ring[i].rdes0 = SBE_2T3E3_RX_DESC_21143_OWN;
356 		sc->ether.rx_ring[i].rdes1 =
357 			SBE_2T3E3_RX_DESC_SECOND_ADDRESS_CHAINED | SBE_2T3E3_MTU;
358 
359 		if (sc->ether.rx_data[i] == NULL) {
360 			if (!(m = dev_alloc_skb(MCLBYTES))) {
361 				for (j = 0; j < i; j++) {
362 					dev_kfree_skb_any(sc->ether.rx_data[j]);
363 					sc->ether.rx_data[j] = NULL;
364 				}
365 				kfree(sc->ether.rx_ring);
366 				sc->ether.rx_ring = NULL;
367 				kfree(sc->ether.tx_ring);
368 				sc->ether.tx_ring = NULL;
369 				dev_err(&sc->pdev->dev, "SBE 2T3E3: token_alloc err:"
370 					" no buffer space for RX ring\n");
371 				return ENOBUFS;
372 			}
373 			sc->ether.rx_data[i] = m;
374 		}
375 		sc->ether.rx_ring[i].rdes2 = virt_to_phys(sc->ether.rx_data[i]->data);
376 
377 		sc->ether.rx_ring[i].rdes3 = virt_to_phys(
378 			&sc->ether.rx_ring[(i + 1) % SBE_2T3E3_RX_DESC_RING_SIZE]);
379 	}
380 	sc->ether.rx_ring[SBE_2T3E3_RX_DESC_RING_SIZE - 1].rdes1 |=
381 		SBE_2T3E3_RX_DESC_END_OF_RING;
382 	sc->ether.rx_ring_current_read = 0;
383 
384 	dc_write(sc->addr, SBE_2T3E3_21143_REG_RECEIVE_LIST_BASE_ADDRESS,
385 		 virt_to_phys(&sc->ether.rx_ring[0]));
386 
387 	/*
388 	 * Transmit ring
389 	 */
390 	for (i = 0; i < SBE_2T3E3_TX_DESC_RING_SIZE; i++) {
391 		sc->ether.tx_ring[i].tdes0 = 0;
392 		sc->ether.tx_ring[i].tdes1 = SBE_2T3E3_TX_DESC_SECOND_ADDRESS_CHAINED |
393 			SBE_2T3E3_TX_DESC_DISABLE_PADDING;
394 
395 		sc->ether.tx_ring[i].tdes2 = 0;
396 		sc->ether.tx_data[i] = NULL;
397 
398 		sc->ether.tx_ring[i].tdes3 = virt_to_phys(
399 			&sc->ether.tx_ring[(i + 1) % SBE_2T3E3_TX_DESC_RING_SIZE]);
400 	}
401 	sc->ether.tx_ring[SBE_2T3E3_TX_DESC_RING_SIZE - 1].tdes1 |=
402 		SBE_2T3E3_TX_DESC_END_OF_RING;
403 
404 	dc_write(sc->addr, SBE_2T3E3_21143_REG_TRANSMIT_LIST_BASE_ADDRESS,
405 		 virt_to_phys(&sc->ether.tx_ring[0]));
406 	sc->ether.tx_ring_current_read = 0;
407 	sc->ether.tx_ring_current_write = 0;
408 	sc->ether.tx_free_cnt = SBE_2T3E3_TX_DESC_RING_SIZE;
409 	spin_lock_init(&sc->ether.tx_lock);
410 
411 	return 0;
412 }
413 
dc_clear_descriptor_list(struct channel * sc)414 void dc_clear_descriptor_list(struct channel *sc)
415 {
416 	u32 i;
417 
418 	/* clear CSR3 and CSR4 */
419 	dc_write(sc->addr, SBE_2T3E3_21143_REG_RECEIVE_LIST_BASE_ADDRESS, 0);
420 	dc_write(sc->addr, SBE_2T3E3_21143_REG_TRANSMIT_LIST_BASE_ADDRESS, 0);
421 
422 	/* free all data buffers on TX ring */
423 	for (i = 0; i < SBE_2T3E3_TX_DESC_RING_SIZE; i++) {
424 		if (sc->ether.tx_data[i] != NULL) {
425 			dev_kfree_skb_any(sc->ether.tx_data[i]);
426 			sc->ether.tx_data[i] = NULL;
427 		}
428 	}
429 }
430 
dc_drop_descriptor_list(struct channel * sc)431 void dc_drop_descriptor_list(struct channel *sc)
432 {
433 	u32 i;
434 
435 	dc_clear_descriptor_list(sc);
436 
437 	/* free all data buffers on RX ring */
438 	for (i = 0; i < SBE_2T3E3_RX_DESC_RING_SIZE; i++) {
439 		if (sc->ether.rx_data[i] != NULL) {
440 			dev_kfree_skb_any(sc->ether.rx_data[i]);
441 			sc->ether.rx_data[i] = NULL;
442 		}
443 	}
444 
445 	kfree(sc->ether.rx_ring);
446 	sc->ether.rx_ring = NULL;
447 	kfree(sc->ether.tx_ring);
448 	sc->ether.tx_ring = NULL;
449 }
450 
451 
dc_set_output_port(struct channel * sc)452 void dc_set_output_port(struct channel *sc)
453 {
454 	dc_clear_bits(sc->addr, SBE_2T3E3_21143_REG_OPERATION_MODE,
455 		      SBE_2T3E3_21143_VAL_PORT_SELECT);
456 
457 	dc_write(sc->addr, SBE_2T3E3_21143_REG_SIA_STATUS, 0x00000301);
458 	dc_write(sc->addr, SBE_2T3E3_21143_REG_SIA_CONNECTIVITY, 0);
459 	dc_write(sc->addr, SBE_2T3E3_21143_REG_SIA_TRANSMIT_AND_RECEIVE, 0);
460 	dc_write(sc->addr, SBE_2T3E3_21143_REG_SIA_AND_GENERAL_PURPOSE_PORT, 0x08000011);
461 
462 	dc_set_bits(sc->addr, SBE_2T3E3_21143_REG_OPERATION_MODE,
463 		   SBE_2T3E3_21143_VAL_TRANSMIT_THRESHOLD_MODE_100Mbs |
464 		   SBE_2T3E3_21143_VAL_HEARTBEAT_DISABLE |
465 		   SBE_2T3E3_21143_VAL_PORT_SELECT |
466 		   SBE_2T3E3_21143_VAL_FULL_DUPLEX_MODE);
467 }
468 
dc_restart(struct channel * sc)469 void dc_restart(struct channel *sc)
470 {
471 	dev_warn(&sc->pdev->dev, "SBE 2T3E3: 21143 restart\n");
472 
473 	dc_stop(sc);
474 	dc_reset(sc);
475 	dc_init(sc);	/* stop + reset + init */
476 	dc_start(sc);
477 }
478