diff options
| author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2006-10-03 00:47:58 -0400 |
|---|---|---|
| committer | Paul Mackerras <paulus@samba.org> | 2006-10-04 00:52:31 -0400 |
| commit | 2ec6ef1034632c67896955d52bf8efb99195b742 (patch) | |
| tree | 70d72ae09ccc2525be7769935eed57909c551695 | |
| parent | 54c9941288e86fad983e307e540808e155b16b34 (diff) | |
[POWERPC] Get default baud rate in udbg_scc
On powermac, when open firmware is set to use the SCC for console, this
causes the low level udbg early console to read back the speed and
re-use it instead of hard coding 57600 bps. This doesn't (yet) pass the
detected speed all the way to pmac_zilog though.
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
| -rw-r--r-- | arch/powerpc/platforms/powermac/udbg_scc.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/arch/powerpc/platforms/powermac/udbg_scc.c b/arch/powerpc/platforms/powermac/udbg_scc.c index ce1a235855f7..379db05b0082 100644 --- a/arch/powerpc/platforms/powermac/udbg_scc.c +++ b/arch/powerpc/platforms/powermac/udbg_scc.c | |||
| @@ -111,8 +111,6 @@ void udbg_scc_init(int force_scc) | |||
| 111 | pmac_call_feature(PMAC_FTR_SCC_ENABLE, ch, | 111 | pmac_call_feature(PMAC_FTR_SCC_ENABLE, ch, |
| 112 | PMAC_SCC_ASYNC | PMAC_SCC_FLAG_XMON, 1); | 112 | PMAC_SCC_ASYNC | PMAC_SCC_FLAG_XMON, 1); |
| 113 | 113 | ||
| 114 | |||
| 115 | /* Setup for 57600 8N1 */ | ||
| 116 | if (ch == ch_a) | 114 | if (ch == ch_a) |
| 117 | addr += 0x20; | 115 | addr += 0x20; |
| 118 | sccc = ioremap(addr & PAGE_MASK, PAGE_SIZE) ; | 116 | sccc = ioremap(addr & PAGE_MASK, PAGE_SIZE) ; |
| @@ -125,9 +123,21 @@ void udbg_scc_init(int force_scc) | |||
| 125 | x = in_8(sccc); | 123 | x = in_8(sccc); |
| 126 | out_8(sccc, 0x09); /* reset A or B side */ | 124 | out_8(sccc, 0x09); /* reset A or B side */ |
| 127 | out_8(sccc, 0xc0); | 125 | out_8(sccc, 0xc0); |
| 126 | |||
| 127 | /* If SCC was the OF output port, read the BRG value, else | ||
| 128 | * Setup for 57600 8N1 | ||
| 129 | */ | ||
| 130 | if (ch_def != NULL) { | ||
| 131 | out_8(sccc, 13); | ||
| 132 | scc_inittab[1] = in_8(sccc); | ||
| 133 | out_8(sccc, 12); | ||
| 134 | scc_inittab[3] = in_8(sccc); | ||
| 135 | } | ||
| 136 | |||
| 128 | for (i = 0; i < sizeof(scc_inittab); ++i) | 137 | for (i = 0; i < sizeof(scc_inittab); ++i) |
| 129 | out_8(sccc, scc_inittab[i]); | 138 | out_8(sccc, scc_inittab[i]); |
| 130 | 139 | ||
| 140 | |||
| 131 | udbg_putc = udbg_scc_putc; | 141 | udbg_putc = udbg_scc_putc; |
| 132 | udbg_getc = udbg_scc_getc; | 142 | udbg_getc = udbg_scc_getc; |
| 133 | udbg_getc_poll = udbg_scc_getc_poll; | 143 | udbg_getc_poll = udbg_scc_getc_poll; |
