1 // SPDX-License-Identifier: GPL-2.0
3 * zs.c: Serial port driver for IOASIC DECstations.
5 * Derived from drivers/sbus/char/sunserial.c by Paul Mackerras.
6 * Derived from drivers/macintosh/macserial.c by Harald Koerfgen.
9 * Copyright (C) 1998-2000 Harald Koerfgen
10 * Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2007 Maciej W. Rozycki
12 * For the rest of the code the original Copyright applies:
13 * Copyright (C) 1996 Paul Mackerras (Paul.Mackerras@cs.anu.edu.au)
14 * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
17 * Note: for IOASIC systems the wiring is as follows:
20 * DIN-7 MJ-4 signal SCC
25 * DB-25 MMJ-6 signal SCC
32 * 12 DSRS(DCE) -> ~A.CTS (*)
37 * 23 DSRS(DTE) <- ~B.RTS
39 * (*) EIA-232 defines the signal at this pin to be SCD, while DSRS(DCE)
40 * is shared with DSRS(DTE) at pin 23.
42 * As you can immediately notice the wiring of the RTS, DTR and DSR signals
43 * is a bit odd. This makes the handling of port B unnecessarily
44 * complicated and prevents the use of some automatic modes of operation.
47 #if defined(CONFIG_SERIAL_ZS_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
51 #include <linux/bug.h>
52 #include <linux/console.h>
53 #include <linux/delay.h>
54 #include <linux/errno.h>
55 #include <linux/init.h>
56 #include <linux/interrupt.h>
58 #include <linux/ioport.h>
59 #include <linux/irqflags.h>
60 #include <linux/kernel.h>
61 #include <linux/module.h>
62 #include <linux/major.h>
63 #include <linux/serial.h>
64 #include <linux/serial_core.h>
65 #include <linux/spinlock.h>
66 #include <linux/sysrq.h>
67 #include <linux/tty.h>
68 #include <linux/tty_flip.h>
69 #include <linux/types.h>
71 #include <linux/atomic.h>
73 #include <asm/dec/interrupts.h>
74 #include <asm/dec/ioasic_addrs.h>
75 #include <asm/dec/system.h>
80 MODULE_AUTHOR("Maciej W. Rozycki <macro@linux-mips.org>");
81 MODULE_DESCRIPTION("DECstation Z85C30 serial driver");
82 MODULE_LICENSE("GPL");
85 static char zs_name
[] __initdata
= "DECstation Z85C30 serial driver version ";
86 static char zs_version
[] __initdata
= "0.10";
89 * It would be nice to dynamically allocate everything that
90 * depends on ZS_NUM_SCCS, so we could support any number of
91 * Z85C30s, but for now...
93 #define ZS_NUM_SCCS 2 /* Max # of ZS chips supported. */
94 #define ZS_NUM_CHAN 2 /* 2 channels per chip. */
95 #define ZS_CHAN_A 0 /* Index of the channel A. */
96 #define ZS_CHAN_B 1 /* Index of the channel B. */
97 #define ZS_CHAN_IO_SIZE 8 /* IOMEM space size. */
98 #define ZS_CHAN_IO_STRIDE 4 /* Register alignment. */
99 #define ZS_CHAN_IO_OFFSET 1 /* The SCC resides on the high byte
100 of the 16-bit IOBUS. */
101 #define ZS_CLOCK 7372800 /* Z85C30 PCLK input clock rate. */
103 #define to_zport(uport) container_of(uport, struct zs_port, port)
106 resource_size_t scc
[ZS_NUM_SCCS
];
107 int irq
[ZS_NUM_SCCS
];
110 static struct zs_scc zs_sccs
[ZS_NUM_SCCS
];
112 static u8 zs_init_regs
[ZS_NUM_REGS
] __initdata
= {
114 PAR_SPEC
, /* write 1 */
117 X16CLK
| SB1
, /* write 4 */
119 0, 0, 0, /* write 6, 7, 8 */
120 MIE
| DLC
| NV
, /* write 9 */
122 TCBR
| RCBR
, /* write 11 */
123 0, 0, /* BRG time constant, write 12 + 13 */
124 BRSRC
| BRENABL
, /* write 14 */
135 * Reading and writing Z85C30 registers.
137 static void recovery_delay(void)
142 static u8
read_zsreg(struct zs_port
*zport
, int reg
)
144 void __iomem
*control
= zport
->port
.membase
+ ZS_CHAN_IO_OFFSET
;
148 writeb(reg
& 0xf, control
);
152 retval
= readb(control
);
157 static void write_zsreg(struct zs_port
*zport
, int reg
, u8 value
)
159 void __iomem
*control
= zport
->port
.membase
+ ZS_CHAN_IO_OFFSET
;
162 writeb(reg
& 0xf, control
);
163 fast_iob(); recovery_delay();
165 writeb(value
, control
);
171 static u8
read_zsdata(struct zs_port
*zport
)
173 void __iomem
*data
= zport
->port
.membase
+
174 ZS_CHAN_IO_STRIDE
+ ZS_CHAN_IO_OFFSET
;
177 retval
= readb(data
);
182 static void write_zsdata(struct zs_port
*zport
, u8 value
)
184 void __iomem
*data
= zport
->port
.membase
+
185 ZS_CHAN_IO_STRIDE
+ ZS_CHAN_IO_OFFSET
;
196 struct zs_port
*zport
;
199 for (i
= 0; i
< ZS_NUM_SCCS
* ZS_NUM_CHAN
; i
++) {
200 zport
= &zs_sccs
[i
/ ZS_NUM_CHAN
].zport
[i
% ZS_NUM_CHAN
];
205 for (j
= 0; j
< 16; j
++)
206 printk("W%-2d = 0x%02x\t", j
, zport
->regs
[j
]);
208 for (j
= 0; j
< 16; j
++)
209 printk("R%-2d = 0x%02x\t", j
, read_zsreg(zport
, j
));
216 static void zs_spin_lock_cond_irq(spinlock_t
*lock
, int irq
)
224 static void zs_spin_unlock_cond_irq(spinlock_t
*lock
, int irq
)
227 spin_unlock_irq(lock
);
232 static int zs_receive_drain(struct zs_port
*zport
)
236 while ((read_zsreg(zport
, R0
) & Rx_CH_AV
) && --loops
)
241 static int zs_transmit_drain(struct zs_port
*zport
, int irq
)
243 struct zs_scc
*scc
= zport
->scc
;
246 while (!(read_zsreg(zport
, R0
) & Tx_BUF_EMP
) && --loops
) {
247 zs_spin_unlock_cond_irq(&scc
->zlock
, irq
);
249 zs_spin_lock_cond_irq(&scc
->zlock
, irq
);
254 static int zs_line_drain(struct zs_port
*zport
, int irq
)
256 struct zs_scc
*scc
= zport
->scc
;
259 while (!(read_zsreg(zport
, R1
) & ALL_SNT
) && --loops
) {
260 zs_spin_unlock_cond_irq(&scc
->zlock
, irq
);
262 zs_spin_lock_cond_irq(&scc
->zlock
, irq
);
268 static void load_zsregs(struct zs_port
*zport
, u8
*regs
, int irq
)
270 /* Let the current transmission finish. */
271 zs_line_drain(zport
, irq
);
273 write_zsreg(zport
, R3
, regs
[3] & ~RxENABLE
);
274 write_zsreg(zport
, R5
, regs
[5] & ~TxENAB
);
275 write_zsreg(zport
, R4
, regs
[4]);
276 write_zsreg(zport
, R9
, regs
[9]);
277 write_zsreg(zport
, R1
, regs
[1]);
278 write_zsreg(zport
, R2
, regs
[2]);
279 write_zsreg(zport
, R10
, regs
[10]);
280 write_zsreg(zport
, R14
, regs
[14] & ~BRENABL
);
281 write_zsreg(zport
, R11
, regs
[11]);
282 write_zsreg(zport
, R12
, regs
[12]);
283 write_zsreg(zport
, R13
, regs
[13]);
284 write_zsreg(zport
, R14
, regs
[14]);
285 write_zsreg(zport
, R15
, regs
[15]);
286 if (regs
[3] & RxENABLE
)
287 write_zsreg(zport
, R3
, regs
[3]);
288 if (regs
[5] & TxENAB
)
289 write_zsreg(zport
, R5
, regs
[5]);
295 * Status handling routines.
299 * zs_tx_empty() -- get the transmitter empty status
301 * Purpose: Let user call ioctl() to get info when the UART physically
302 * is emptied. On bus types like RS485, the transmitter must
303 * release the bus after transmitting. This must be done when
304 * the transmit shift register is empty, not be done when the
305 * transmit holding register is empty. This functionality
306 * allows an RS485 driver to be written in user space.
308 static unsigned int zs_tx_empty(struct uart_port
*uport
)
310 struct zs_port
*zport
= to_zport(uport
);
311 struct zs_scc
*scc
= zport
->scc
;
315 spin_lock_irqsave(&scc
->zlock
, flags
);
316 status
= read_zsreg(zport
, R1
);
317 spin_unlock_irqrestore(&scc
->zlock
, flags
);
319 return status
& ALL_SNT
? TIOCSER_TEMT
: 0;
322 static unsigned int zs_raw_get_ab_mctrl(struct zs_port
*zport_a
,
323 struct zs_port
*zport_b
)
325 u8 status_a
, status_b
;
328 status_a
= read_zsreg(zport_a
, R0
);
329 status_b
= read_zsreg(zport_b
, R0
);
331 mctrl
= ((status_b
& CTS
) ? TIOCM_CTS
: 0) |
332 ((status_b
& DCD
) ? TIOCM_CAR
: 0) |
333 ((status_a
& DCD
) ? TIOCM_RNG
: 0) |
334 ((status_a
& SYNC_HUNT
) ? TIOCM_DSR
: 0);
339 static unsigned int zs_raw_get_mctrl(struct zs_port
*zport
)
341 struct zs_port
*zport_a
= &zport
->scc
->zport
[ZS_CHAN_A
];
343 return zport
!= zport_a
? zs_raw_get_ab_mctrl(zport_a
, zport
) : 0;
346 static unsigned int zs_raw_xor_mctrl(struct zs_port
*zport
)
348 struct zs_port
*zport_a
= &zport
->scc
->zport
[ZS_CHAN_A
];
349 unsigned int mmask
, mctrl
, delta
;
352 if (zport
== zport_a
)
355 mask_a
= zport_a
->regs
[15];
356 mask_b
= zport
->regs
[15];
358 mmask
= ((mask_b
& CTSIE
) ? TIOCM_CTS
: 0) |
359 ((mask_b
& DCDIE
) ? TIOCM_CAR
: 0) |
360 ((mask_a
& DCDIE
) ? TIOCM_RNG
: 0) |
361 ((mask_a
& SYNCIE
) ? TIOCM_DSR
: 0);
363 mctrl
= zport
->mctrl
;
366 mctrl
|= zs_raw_get_ab_mctrl(zport_a
, zport
) & mmask
;
369 delta
= mctrl
^ zport
->mctrl
;
371 zport
->mctrl
= mctrl
;
376 static unsigned int zs_get_mctrl(struct uart_port
*uport
)
378 struct zs_port
*zport
= to_zport(uport
);
379 struct zs_scc
*scc
= zport
->scc
;
382 spin_lock(&scc
->zlock
);
383 mctrl
= zs_raw_get_mctrl(zport
);
384 spin_unlock(&scc
->zlock
);
389 static void zs_set_mctrl(struct uart_port
*uport
, unsigned int mctrl
)
391 struct zs_port
*zport
= to_zport(uport
);
392 struct zs_scc
*scc
= zport
->scc
;
393 struct zs_port
*zport_a
= &scc
->zport
[ZS_CHAN_A
];
396 spin_lock(&scc
->zlock
);
397 if (zport
!= zport_a
) {
398 if (mctrl
& TIOCM_DTR
)
399 zport_a
->regs
[5] |= DTR
;
401 zport_a
->regs
[5] &= ~DTR
;
402 if (mctrl
& TIOCM_RTS
)
403 zport_a
->regs
[5] |= RTS
;
405 zport_a
->regs
[5] &= ~RTS
;
406 write_zsreg(zport_a
, R5
, zport_a
->regs
[5]);
409 /* Rarely modified, so don't poke at hardware unless necessary. */
410 oldloop
= zport
->regs
[14];
412 if (mctrl
& TIOCM_LOOP
)
416 if (newloop
!= oldloop
) {
417 zport
->regs
[14] = newloop
;
418 write_zsreg(zport
, R14
, zport
->regs
[14]);
420 spin_unlock(&scc
->zlock
);
423 static void zs_raw_stop_tx(struct zs_port
*zport
)
425 write_zsreg(zport
, R0
, RES_Tx_P
);
426 zport
->tx_stopped
= 1;
429 static void zs_stop_tx(struct uart_port
*uport
)
431 struct zs_port
*zport
= to_zport(uport
);
432 struct zs_scc
*scc
= zport
->scc
;
434 spin_lock(&scc
->zlock
);
435 zs_raw_stop_tx(zport
);
436 spin_unlock(&scc
->zlock
);
439 static void zs_raw_transmit_chars(struct zs_port
*);
441 static void zs_start_tx(struct uart_port
*uport
)
443 struct zs_port
*zport
= to_zport(uport
);
444 struct zs_scc
*scc
= zport
->scc
;
446 spin_lock(&scc
->zlock
);
447 if (zport
->tx_stopped
) {
448 zs_transmit_drain(zport
, 0);
449 zport
->tx_stopped
= 0;
450 zs_raw_transmit_chars(zport
);
452 spin_unlock(&scc
->zlock
);
455 static void zs_stop_rx(struct uart_port
*uport
)
457 struct zs_port
*zport
= to_zport(uport
);
458 struct zs_scc
*scc
= zport
->scc
;
459 struct zs_port
*zport_a
= &scc
->zport
[ZS_CHAN_A
];
461 spin_lock(&scc
->zlock
);
462 zport
->regs
[15] &= ~BRKIE
;
463 zport
->regs
[1] &= ~(RxINT_MASK
| TxINT_ENAB
);
464 zport
->regs
[1] |= RxINT_DISAB
;
466 if (zport
!= zport_a
) {
467 /* A-side DCD tracks RI and SYNC tracks DSR. */
468 zport_a
->regs
[15] &= ~(DCDIE
| SYNCIE
);
469 write_zsreg(zport_a
, R15
, zport_a
->regs
[15]);
470 if (!(zport_a
->regs
[15] & BRKIE
)) {
471 zport_a
->regs
[1] &= ~EXT_INT_ENAB
;
472 write_zsreg(zport_a
, R1
, zport_a
->regs
[1]);
475 /* This-side DCD tracks DCD and CTS tracks CTS. */
476 zport
->regs
[15] &= ~(DCDIE
| CTSIE
);
477 zport
->regs
[1] &= ~EXT_INT_ENAB
;
479 /* DCD tracks RI and SYNC tracks DSR for the B side. */
480 if (!(zport
->regs
[15] & (DCDIE
| SYNCIE
)))
481 zport
->regs
[1] &= ~EXT_INT_ENAB
;
484 write_zsreg(zport
, R15
, zport
->regs
[15]);
485 write_zsreg(zport
, R1
, zport
->regs
[1]);
486 spin_unlock(&scc
->zlock
);
489 static void zs_enable_ms(struct uart_port
*uport
)
491 struct zs_port
*zport
= to_zport(uport
);
492 struct zs_scc
*scc
= zport
->scc
;
493 struct zs_port
*zport_a
= &scc
->zport
[ZS_CHAN_A
];
495 if (zport
== zport_a
)
498 spin_lock(&scc
->zlock
);
500 /* Clear Ext interrupts if not being handled already. */
501 if (!(zport_a
->regs
[1] & EXT_INT_ENAB
))
502 write_zsreg(zport_a
, R0
, RES_EXT_INT
);
504 /* A-side DCD tracks RI and SYNC tracks DSR. */
505 zport_a
->regs
[1] |= EXT_INT_ENAB
;
506 zport_a
->regs
[15] |= DCDIE
| SYNCIE
;
508 /* This-side DCD tracks DCD and CTS tracks CTS. */
509 zport
->regs
[15] |= DCDIE
| CTSIE
;
511 zs_raw_xor_mctrl(zport
);
513 write_zsreg(zport_a
, R1
, zport_a
->regs
[1]);
514 write_zsreg(zport_a
, R15
, zport_a
->regs
[15]);
515 write_zsreg(zport
, R15
, zport
->regs
[15]);
516 spin_unlock(&scc
->zlock
);
519 static void zs_break_ctl(struct uart_port
*uport
, int break_state
)
521 struct zs_port
*zport
= to_zport(uport
);
522 struct zs_scc
*scc
= zport
->scc
;
525 spin_lock_irqsave(&scc
->zlock
, flags
);
526 if (break_state
== -1)
527 zport
->regs
[5] |= SND_BRK
;
529 zport
->regs
[5] &= ~SND_BRK
;
530 write_zsreg(zport
, R5
, zport
->regs
[5]);
531 spin_unlock_irqrestore(&scc
->zlock
, flags
);
536 * Interrupt handling routines.
538 #define Rx_BRK 0x0100 /* BREAK event software flag. */
539 #define Rx_SYS 0x0200 /* SysRq event software flag. */
541 static void zs_receive_chars(struct zs_port
*zport
)
543 struct uart_port
*uport
= &zport
->port
;
544 struct zs_scc
*scc
= zport
->scc
;
545 struct uart_icount
*icount
;
546 unsigned int avail
, status
, ch
, flag
;
549 for (count
= 16; count
; count
--) {
550 spin_lock(&scc
->zlock
);
551 avail
= read_zsreg(zport
, R0
) & Rx_CH_AV
;
552 spin_unlock(&scc
->zlock
);
556 spin_lock(&scc
->zlock
);
557 status
= read_zsreg(zport
, R1
) & (Rx_OVR
| FRM_ERR
| PAR_ERR
);
558 ch
= read_zsdata(zport
);
559 spin_unlock(&scc
->zlock
);
563 icount
= &uport
->icount
;
566 /* Handle the null char got when BREAK is removed. */
568 status
|= zport
->tty_break
;
569 if (unlikely(status
&
570 (Rx_OVR
| FRM_ERR
| PAR_ERR
| Rx_SYS
| Rx_BRK
))) {
571 zport
->tty_break
= 0;
573 /* Reset the error indication. */
574 if (status
& (Rx_OVR
| FRM_ERR
| PAR_ERR
)) {
575 spin_lock(&scc
->zlock
);
576 write_zsreg(zport
, R0
, ERR_RES
);
577 spin_unlock(&scc
->zlock
);
580 if (status
& (Rx_SYS
| Rx_BRK
)) {
582 /* SysRq discards the null char. */
585 } else if (status
& FRM_ERR
)
587 else if (status
& PAR_ERR
)
592 status
&= uport
->read_status_mask
;
595 else if (status
& FRM_ERR
)
597 else if (status
& PAR_ERR
)
601 if (uart_handle_sysrq_char(uport
, ch
))
604 uart_insert_char(uport
, status
, Rx_OVR
, ch
, flag
);
607 tty_flip_buffer_push(&uport
->state
->port
);
610 static void zs_raw_transmit_chars(struct zs_port
*zport
)
612 struct circ_buf
*xmit
= &zport
->port
.state
->xmit
;
614 /* XON/XOFF chars. */
615 if (zport
->port
.x_char
) {
616 write_zsdata(zport
, zport
->port
.x_char
);
617 zport
->port
.icount
.tx
++;
618 zport
->port
.x_char
= 0;
622 /* If nothing to do or stopped or hardware stopped. */
623 if (uart_circ_empty(xmit
) || uart_tx_stopped(&zport
->port
)) {
624 zs_raw_stop_tx(zport
);
629 write_zsdata(zport
, xmit
->buf
[xmit
->tail
]);
630 xmit
->tail
= (xmit
->tail
+ 1) & (UART_XMIT_SIZE
- 1);
631 zport
->port
.icount
.tx
++;
633 if (uart_circ_chars_pending(xmit
) < WAKEUP_CHARS
)
634 uart_write_wakeup(&zport
->port
);
636 /* Are we are done? */
637 if (uart_circ_empty(xmit
))
638 zs_raw_stop_tx(zport
);
641 static void zs_transmit_chars(struct zs_port
*zport
)
643 struct zs_scc
*scc
= zport
->scc
;
645 spin_lock(&scc
->zlock
);
646 zs_raw_transmit_chars(zport
);
647 spin_unlock(&scc
->zlock
);
650 static void zs_status_handle(struct zs_port
*zport
, struct zs_port
*zport_a
)
652 struct uart_port
*uport
= &zport
->port
;
653 struct zs_scc
*scc
= zport
->scc
;
657 spin_lock(&scc
->zlock
);
659 /* Get status from Read Register 0. */
660 status
= read_zsreg(zport
, R0
);
662 if (zport
->regs
[15] & BRKIE
) {
663 brk
= status
& BRK_ABRT
;
664 if (brk
&& !zport
->brk
) {
665 spin_unlock(&scc
->zlock
);
666 if (uart_handle_break(uport
))
667 zport
->tty_break
= Rx_SYS
;
669 zport
->tty_break
= Rx_BRK
;
670 spin_lock(&scc
->zlock
);
675 if (zport
!= zport_a
) {
676 delta
= zs_raw_xor_mctrl(zport
);
677 spin_unlock(&scc
->zlock
);
679 if (delta
& TIOCM_CTS
)
680 uart_handle_cts_change(uport
,
681 zport
->mctrl
& TIOCM_CTS
);
682 if (delta
& TIOCM_CAR
)
683 uart_handle_dcd_change(uport
,
684 zport
->mctrl
& TIOCM_CAR
);
685 if (delta
& TIOCM_RNG
)
687 if (delta
& TIOCM_DSR
)
691 wake_up_interruptible(&uport
->state
->port
.delta_msr_wait
);
693 spin_lock(&scc
->zlock
);
696 /* Clear the status condition... */
697 write_zsreg(zport
, R0
, RES_EXT_INT
);
699 spin_unlock(&scc
->zlock
);
703 * This is the Z85C30 driver's generic interrupt routine.
705 static irqreturn_t
zs_interrupt(int irq
, void *dev_id
)
707 struct zs_scc
*scc
= dev_id
;
708 struct zs_port
*zport_a
= &scc
->zport
[ZS_CHAN_A
];
709 struct zs_port
*zport_b
= &scc
->zport
[ZS_CHAN_B
];
710 irqreturn_t status
= IRQ_NONE
;
715 * NOTE: The read register 3, which holds the irq status,
716 * does so for both channels on each chip. Although
717 * the status value itself must be read from the A
718 * channel and is only valid when read from channel A.
719 * Yes... broken hardware...
721 for (count
= 16; count
; count
--) {
722 spin_lock(&scc
->zlock
);
723 zs_intreg
= read_zsreg(zport_a
, R3
);
724 spin_unlock(&scc
->zlock
);
729 * We do not like losing characters, so we prioritise
730 * interrupt sources a little bit differently than
731 * the SCC would, was it allowed to.
733 if (zs_intreg
& CHBRxIP
)
734 zs_receive_chars(zport_b
);
735 if (zs_intreg
& CHARxIP
)
736 zs_receive_chars(zport_a
);
737 if (zs_intreg
& CHBEXT
)
738 zs_status_handle(zport_b
, zport_a
);
739 if (zs_intreg
& CHAEXT
)
740 zs_status_handle(zport_a
, zport_a
);
741 if (zs_intreg
& CHBTxIP
)
742 zs_transmit_chars(zport_b
);
743 if (zs_intreg
& CHATxIP
)
744 zs_transmit_chars(zport_a
);
746 status
= IRQ_HANDLED
;
754 * Finally, routines used to initialize the serial port.
756 static int zs_startup(struct uart_port
*uport
)
758 struct zs_port
*zport
= to_zport(uport
);
759 struct zs_scc
*scc
= zport
->scc
;
764 irq_guard
= atomic_add_return(1, &scc
->irq_guard
);
765 if (irq_guard
== 1) {
766 ret
= request_irq(zport
->port
.irq
, zs_interrupt
,
767 IRQF_SHARED
, "scc", scc
);
769 atomic_add(-1, &scc
->irq_guard
);
770 printk(KERN_ERR
"zs: can't get irq %d\n",
776 spin_lock_irqsave(&scc
->zlock
, flags
);
778 /* Clear the receive FIFO. */
779 zs_receive_drain(zport
);
781 /* Clear the interrupt registers. */
782 write_zsreg(zport
, R0
, ERR_RES
);
783 write_zsreg(zport
, R0
, RES_Tx_P
);
784 /* But Ext only if not being handled already. */
785 if (!(zport
->regs
[1] & EXT_INT_ENAB
))
786 write_zsreg(zport
, R0
, RES_EXT_INT
);
788 /* Finally, enable sequencing and interrupts. */
789 zport
->regs
[1] &= ~RxINT_MASK
;
790 zport
->regs
[1] |= RxINT_ALL
| TxINT_ENAB
| EXT_INT_ENAB
;
791 zport
->regs
[3] |= RxENABLE
;
792 zport
->regs
[15] |= BRKIE
;
793 write_zsreg(zport
, R1
, zport
->regs
[1]);
794 write_zsreg(zport
, R3
, zport
->regs
[3]);
795 write_zsreg(zport
, R5
, zport
->regs
[5]);
796 write_zsreg(zport
, R15
, zport
->regs
[15]);
798 /* Record the current state of RR0. */
799 zport
->mctrl
= zs_raw_get_mctrl(zport
);
800 zport
->brk
= read_zsreg(zport
, R0
) & BRK_ABRT
;
802 zport
->tx_stopped
= 1;
804 spin_unlock_irqrestore(&scc
->zlock
, flags
);
809 static void zs_shutdown(struct uart_port
*uport
)
811 struct zs_port
*zport
= to_zport(uport
);
812 struct zs_scc
*scc
= zport
->scc
;
816 spin_lock_irqsave(&scc
->zlock
, flags
);
818 zport
->regs
[3] &= ~RxENABLE
;
819 write_zsreg(zport
, R5
, zport
->regs
[5]);
820 write_zsreg(zport
, R3
, zport
->regs
[3]);
822 spin_unlock_irqrestore(&scc
->zlock
, flags
);
824 irq_guard
= atomic_add_return(-1, &scc
->irq_guard
);
826 free_irq(zport
->port
.irq
, scc
);
830 static void zs_reset(struct zs_port
*zport
)
832 struct zs_scc
*scc
= zport
->scc
;
836 spin_lock_irqsave(&scc
->zlock
, flags
);
837 irq
= !irqs_disabled_flags(flags
);
838 if (!scc
->initialised
) {
839 /* Reset the pointer first, just in case... */
840 read_zsreg(zport
, R0
);
841 /* And let the current transmission finish. */
842 zs_line_drain(zport
, irq
);
843 write_zsreg(zport
, R9
, FHWRES
);
845 write_zsreg(zport
, R9
, 0);
846 scc
->initialised
= 1;
848 load_zsregs(zport
, zport
->regs
, irq
);
849 spin_unlock_irqrestore(&scc
->zlock
, flags
);
852 static void zs_set_termios(struct uart_port
*uport
, struct ktermios
*termios
,
853 struct ktermios
*old_termios
)
855 struct zs_port
*zport
= to_zport(uport
);
856 struct zs_scc
*scc
= zport
->scc
;
857 struct zs_port
*zport_a
= &scc
->zport
[ZS_CHAN_A
];
859 unsigned int baud
, brg
;
862 spin_lock_irqsave(&scc
->zlock
, flags
);
863 irq
= !irqs_disabled_flags(flags
);
866 zport
->regs
[3] &= ~RxNBITS_MASK
;
867 zport
->regs
[5] &= ~TxNBITS_MASK
;
868 switch (termios
->c_cflag
& CSIZE
) {
870 zport
->regs
[3] |= Rx5
;
871 zport
->regs
[5] |= Tx5
;
874 zport
->regs
[3] |= Rx6
;
875 zport
->regs
[5] |= Tx6
;
878 zport
->regs
[3] |= Rx7
;
879 zport
->regs
[5] |= Tx7
;
883 zport
->regs
[3] |= Rx8
;
884 zport
->regs
[5] |= Tx8
;
888 /* Parity and stop bits. */
889 zport
->regs
[4] &= ~(XCLK_MASK
| SB_MASK
| PAR_ENA
| PAR_EVEN
);
890 if (termios
->c_cflag
& CSTOPB
)
891 zport
->regs
[4] |= SB2
;
893 zport
->regs
[4] |= SB1
;
894 if (termios
->c_cflag
& PARENB
)
895 zport
->regs
[4] |= PAR_ENA
;
896 if (!(termios
->c_cflag
& PARODD
))
897 zport
->regs
[4] |= PAR_EVEN
;
898 switch (zport
->clk_mode
) {
900 zport
->regs
[4] |= X64CLK
;
903 zport
->regs
[4] |= X32CLK
;
906 zport
->regs
[4] |= X16CLK
;
909 zport
->regs
[4] |= X1CLK
;
915 baud
= uart_get_baud_rate(uport
, termios
, old_termios
, 0,
916 uport
->uartclk
/ zport
->clk_mode
/ 4);
918 brg
= ZS_BPS_TO_BRG(baud
, uport
->uartclk
/ zport
->clk_mode
);
919 zport
->regs
[12] = brg
& 0xff;
920 zport
->regs
[13] = (brg
>> 8) & 0xff;
922 uart_update_timeout(uport
, termios
->c_cflag
, baud
);
924 uport
->read_status_mask
= Rx_OVR
;
925 if (termios
->c_iflag
& INPCK
)
926 uport
->read_status_mask
|= FRM_ERR
| PAR_ERR
;
927 if (termios
->c_iflag
& (IGNBRK
| BRKINT
| PARMRK
))
928 uport
->read_status_mask
|= Rx_BRK
;
930 uport
->ignore_status_mask
= 0;
931 if (termios
->c_iflag
& IGNPAR
)
932 uport
->ignore_status_mask
|= FRM_ERR
| PAR_ERR
;
933 if (termios
->c_iflag
& IGNBRK
) {
934 uport
->ignore_status_mask
|= Rx_BRK
;
935 if (termios
->c_iflag
& IGNPAR
)
936 uport
->ignore_status_mask
|= Rx_OVR
;
939 if (termios
->c_cflag
& CREAD
)
940 zport
->regs
[3] |= RxENABLE
;
942 zport
->regs
[3] &= ~RxENABLE
;
944 if (zport
!= zport_a
) {
945 if (!(termios
->c_cflag
& CLOCAL
)) {
946 zport
->regs
[15] |= DCDIE
;
948 zport
->regs
[15] &= ~DCDIE
;
949 if (termios
->c_cflag
& CRTSCTS
) {
950 zport
->regs
[15] |= CTSIE
;
952 zport
->regs
[15] &= ~CTSIE
;
953 zs_raw_xor_mctrl(zport
);
956 /* Load up the new values. */
957 load_zsregs(zport
, zport
->regs
, irq
);
959 spin_unlock_irqrestore(&scc
->zlock
, flags
);
964 * Required solely so that the initial PROM-based console
965 * works undisturbed in parallel with this one.
967 static void zs_pm(struct uart_port
*uport
, unsigned int state
,
968 unsigned int oldstate
)
970 struct zs_port
*zport
= to_zport(uport
);
973 zport
->regs
[5] |= TxENAB
;
975 zport
->regs
[5] &= ~TxENAB
;
976 write_zsreg(zport
, R5
, zport
->regs
[5]);
980 static const char *zs_type(struct uart_port
*uport
)
985 static void zs_release_port(struct uart_port
*uport
)
987 iounmap(uport
->membase
);
989 release_mem_region(uport
->mapbase
, ZS_CHAN_IO_SIZE
);
992 static int zs_map_port(struct uart_port
*uport
)
995 uport
->membase
= ioremap_nocache(uport
->mapbase
,
997 if (!uport
->membase
) {
998 printk(KERN_ERR
"zs: Cannot map MMIO\n");
1004 static int zs_request_port(struct uart_port
*uport
)
1008 if (!request_mem_region(uport
->mapbase
, ZS_CHAN_IO_SIZE
, "scc")) {
1009 printk(KERN_ERR
"zs: Unable to reserve MMIO resource\n");
1012 ret
= zs_map_port(uport
);
1014 release_mem_region(uport
->mapbase
, ZS_CHAN_IO_SIZE
);
1020 static void zs_config_port(struct uart_port
*uport
, int flags
)
1022 struct zs_port
*zport
= to_zport(uport
);
1024 if (flags
& UART_CONFIG_TYPE
) {
1025 if (zs_request_port(uport
))
1028 uport
->type
= PORT_ZS
;
1034 static int zs_verify_port(struct uart_port
*uport
, struct serial_struct
*ser
)
1036 struct zs_port
*zport
= to_zport(uport
);
1039 if (ser
->type
!= PORT_UNKNOWN
&& ser
->type
!= PORT_ZS
)
1041 if (ser
->irq
!= uport
->irq
)
1043 if (ser
->baud_base
!= uport
->uartclk
/ zport
->clk_mode
/ 4)
1049 static const struct uart_ops zs_ops
= {
1050 .tx_empty
= zs_tx_empty
,
1051 .set_mctrl
= zs_set_mctrl
,
1052 .get_mctrl
= zs_get_mctrl
,
1053 .stop_tx
= zs_stop_tx
,
1054 .start_tx
= zs_start_tx
,
1055 .stop_rx
= zs_stop_rx
,
1056 .enable_ms
= zs_enable_ms
,
1057 .break_ctl
= zs_break_ctl
,
1058 .startup
= zs_startup
,
1059 .shutdown
= zs_shutdown
,
1060 .set_termios
= zs_set_termios
,
1063 .release_port
= zs_release_port
,
1064 .request_port
= zs_request_port
,
1065 .config_port
= zs_config_port
,
1066 .verify_port
= zs_verify_port
,
1070 * Initialize Z85C30 port structures.
1072 static int __init
zs_probe_sccs(void)
1075 struct zs_parms zs_parms
;
1076 int chip
, side
, irq
;
1083 irq
= dec_interrupt
[DEC_IRQ_SCC0
];
1085 zs_parms
.scc
[n_chips
] = IOASIC_SCC0
;
1086 zs_parms
.irq
[n_chips
] = dec_interrupt
[DEC_IRQ_SCC0
];
1089 irq
= dec_interrupt
[DEC_IRQ_SCC1
];
1091 zs_parms
.scc
[n_chips
] = IOASIC_SCC1
;
1092 zs_parms
.irq
[n_chips
] = dec_interrupt
[DEC_IRQ_SCC1
];
1100 for (chip
= 0; chip
< n_chips
; chip
++) {
1101 spin_lock_init(&zs_sccs
[chip
].zlock
);
1102 for (side
= 0; side
< ZS_NUM_CHAN
; side
++) {
1103 struct zs_port
*zport
= &zs_sccs
[chip
].zport
[side
];
1104 struct uart_port
*uport
= &zport
->port
;
1106 zport
->scc
= &zs_sccs
[chip
];
1107 zport
->clk_mode
= 16;
1109 uport
->irq
= zs_parms
.irq
[chip
];
1110 uport
->uartclk
= ZS_CLOCK
;
1111 uport
->fifosize
= 1;
1112 uport
->iotype
= UPIO_MEM
;
1113 uport
->flags
= UPF_BOOT_AUTOCONF
;
1114 uport
->ops
= &zs_ops
;
1115 uport
->line
= chip
* ZS_NUM_CHAN
+ side
;
1116 uport
->mapbase
= dec_kn_slot_base
+
1117 zs_parms
.scc
[chip
] +
1118 (side
^ ZS_CHAN_B
) * ZS_CHAN_IO_SIZE
;
1120 for (i
= 0; i
< ZS_NUM_REGS
; i
++)
1121 zport
->regs
[i
] = zs_init_regs
[i
];
1129 #ifdef CONFIG_SERIAL_ZS_CONSOLE
1130 static void zs_console_putchar(struct uart_port
*uport
, int ch
)
1132 struct zs_port
*zport
= to_zport(uport
);
1133 struct zs_scc
*scc
= zport
->scc
;
1135 unsigned long flags
;
1137 spin_lock_irqsave(&scc
->zlock
, flags
);
1138 irq
= !irqs_disabled_flags(flags
);
1139 if (zs_transmit_drain(zport
, irq
))
1140 write_zsdata(zport
, ch
);
1141 spin_unlock_irqrestore(&scc
->zlock
, flags
);
1145 * Print a string to the serial port trying not to disturb
1146 * any possible real use of the port...
1148 static void zs_console_write(struct console
*co
, const char *s
,
1151 int chip
= co
->index
/ ZS_NUM_CHAN
, side
= co
->index
% ZS_NUM_CHAN
;
1152 struct zs_port
*zport
= &zs_sccs
[chip
].zport
[side
];
1153 struct zs_scc
*scc
= zport
->scc
;
1154 unsigned long flags
;
1158 /* Disable transmit interrupts and enable the transmitter. */
1159 spin_lock_irqsave(&scc
->zlock
, flags
);
1160 txint
= zport
->regs
[1];
1161 txenb
= zport
->regs
[5];
1162 if (txint
& TxINT_ENAB
) {
1163 zport
->regs
[1] = txint
& ~TxINT_ENAB
;
1164 write_zsreg(zport
, R1
, zport
->regs
[1]);
1166 if (!(txenb
& TxENAB
)) {
1167 zport
->regs
[5] = txenb
| TxENAB
;
1168 write_zsreg(zport
, R5
, zport
->regs
[5]);
1170 spin_unlock_irqrestore(&scc
->zlock
, flags
);
1172 uart_console_write(&zport
->port
, s
, count
, zs_console_putchar
);
1174 /* Restore transmit interrupts and the transmitter enable. */
1175 spin_lock_irqsave(&scc
->zlock
, flags
);
1176 irq
= !irqs_disabled_flags(flags
);
1177 zs_line_drain(zport
, irq
);
1178 if (!(txenb
& TxENAB
)) {
1179 zport
->regs
[5] &= ~TxENAB
;
1180 write_zsreg(zport
, R5
, zport
->regs
[5]);
1182 if (txint
& TxINT_ENAB
) {
1183 zport
->regs
[1] |= TxINT_ENAB
;
1184 write_zsreg(zport
, R1
, zport
->regs
[1]);
1186 /* Resume any transmission as the TxIP bit won't be set. */
1187 if (!zport
->tx_stopped
)
1188 zs_raw_transmit_chars(zport
);
1190 spin_unlock_irqrestore(&scc
->zlock
, flags
);
1194 * Setup serial console baud/bits/parity. We do two things here:
1195 * - construct a cflag setting for the first uart_open()
1196 * - initialise the serial port
1197 * Return non-zero if we didn't find a serial port.
1199 static int __init
zs_console_setup(struct console
*co
, char *options
)
1201 int chip
= co
->index
/ ZS_NUM_CHAN
, side
= co
->index
% ZS_NUM_CHAN
;
1202 struct zs_port
*zport
= &zs_sccs
[chip
].zport
[side
];
1203 struct uart_port
*uport
= &zport
->port
;
1210 ret
= zs_map_port(uport
);
1215 zs_pm(uport
, 0, -1);
1218 uart_parse_options(options
, &baud
, &parity
, &bits
, &flow
);
1219 return uart_set_options(uport
, co
, baud
, parity
, bits
, flow
);
1222 static struct uart_driver zs_reg
;
1223 static struct console zs_console
= {
1225 .write
= zs_console_write
,
1226 .device
= uart_console_device
,
1227 .setup
= zs_console_setup
,
1228 .flags
= CON_PRINTBUFFER
,
1236 static int __init
zs_serial_console_init(void)
1240 ret
= zs_probe_sccs();
1243 register_console(&zs_console
);
1248 console_initcall(zs_serial_console_init
);
1250 #define SERIAL_ZS_CONSOLE &zs_console
1252 #define SERIAL_ZS_CONSOLE NULL
1253 #endif /* CONFIG_SERIAL_ZS_CONSOLE */
1255 static struct uart_driver zs_reg
= {
1256 .owner
= THIS_MODULE
,
1257 .driver_name
= "serial",
1261 .nr
= ZS_NUM_SCCS
* ZS_NUM_CHAN
,
1262 .cons
= SERIAL_ZS_CONSOLE
,
1265 /* zs_init inits the driver. */
1266 static int __init
zs_init(void)
1270 pr_info("%s%s\n", zs_name
, zs_version
);
1272 /* Find out how many Z85C30 SCCs we have. */
1273 ret
= zs_probe_sccs();
1277 ret
= uart_register_driver(&zs_reg
);
1281 for (i
= 0; i
< ZS_NUM_SCCS
* ZS_NUM_CHAN
; i
++) {
1282 struct zs_scc
*scc
= &zs_sccs
[i
/ ZS_NUM_CHAN
];
1283 struct zs_port
*zport
= &scc
->zport
[i
% ZS_NUM_CHAN
];
1284 struct uart_port
*uport
= &zport
->port
;
1287 uart_add_one_port(&zs_reg
, uport
);
1293 static void __exit
zs_exit(void)
1297 for (i
= ZS_NUM_SCCS
* ZS_NUM_CHAN
- 1; i
>= 0; i
--) {
1298 struct zs_scc
*scc
= &zs_sccs
[i
/ ZS_NUM_CHAN
];
1299 struct zs_port
*zport
= &scc
->zport
[i
% ZS_NUM_CHAN
];
1300 struct uart_port
*uport
= &zport
->port
;
1303 uart_remove_one_port(&zs_reg
, uport
);
1306 uart_unregister_driver(&zs_reg
);
1309 module_init(zs_init
);
1310 module_exit(zs_exit
);