mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-11 07:34:31 +00:00
serial: opencores_yanu: Avoid duplicate oc_serial_setbrg() implementation
The implementation of oc_serial_setbrg() for CONFIG_SYS_NIOS_FIXEDBAUD and !CONFIG_SYS_NIOS_FIXEDBAUD are very similar. Add a baudrate variable and set it to either CONFIG_BAUDRATE or gd->baudrate. Then we can unify the code for both cases. Signed-off-by: Axel Lin <axel.lin@ingics.com> Signed-off-by: Thomas Chou <thomas@wytron.com.tw>
This commit is contained in:
parent
18a6bcc139
commit
2d61e1bed2
1 changed files with 14 additions and 45 deletions
|
@ -18,62 +18,34 @@ DECLARE_GLOBAL_DATA_PTR;
|
|||
|
||||
static yanu_uart_t *uart = (yanu_uart_t *)CONFIG_SYS_NIOS_CONSOLE;
|
||||
|
||||
static void oc_serial_setbrg(void)
|
||||
{
|
||||
int n, k;
|
||||
const unsigned max_uns = 0xFFFFFFFF;
|
||||
unsigned best_n, best_m, baud;
|
||||
unsigned baudrate;
|
||||
|
||||
#if defined(CONFIG_SYS_NIOS_FIXEDBAUD)
|
||||
|
||||
/* Everything's already setup for fixed-baud PTF assignment */
|
||||
|
||||
static void oc_serial_setbrg(void)
|
||||
{
|
||||
int n, k;
|
||||
const unsigned max_uns = 0xFFFFFFFF;
|
||||
unsigned best_n, best_m, baud;
|
||||
|
||||
/* compute best N and M couple */
|
||||
best_n = YANU_MAX_PRESCALER_N;
|
||||
for (n = YANU_MAX_PRESCALER_N; n >= 0; n--) {
|
||||
if ((unsigned)CONFIG_SYS_CLK_FREQ / (1 << (n + 4)) >=
|
||||
(unsigned)CONFIG_BAUDRATE) {
|
||||
best_n = n;
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (k = 0;; k++) {
|
||||
if ((unsigned)CONFIG_BAUDRATE <= (max_uns >> (15+n-k)))
|
||||
break;
|
||||
}
|
||||
best_m =
|
||||
((unsigned)CONFIG_BAUDRATE * (1 << (15 + n - k))) /
|
||||
((unsigned)CONFIG_SYS_CLK_FREQ >> k);
|
||||
|
||||
baud = best_m + best_n * YANU_BAUDE;
|
||||
writel(baud, &uart->baud);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
baudrate = CONFIG_BAUDRATE;
|
||||
#else
|
||||
|
||||
static void oc_serial_setbrg(void)
|
||||
{
|
||||
int n, k;
|
||||
const unsigned max_uns = 0xFFFFFFFF;
|
||||
unsigned best_n, best_m, baud;
|
||||
|
||||
baudrate = gd->baudrate;
|
||||
#endif
|
||||
/* compute best N and M couple */
|
||||
best_n = YANU_MAX_PRESCALER_N;
|
||||
for (n = YANU_MAX_PRESCALER_N; n >= 0; n--) {
|
||||
if ((unsigned)CONFIG_SYS_CLK_FREQ / (1 << (n + 4)) >=
|
||||
gd->baudrate) {
|
||||
baudrate) {
|
||||
best_n = n;
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (k = 0;; k++) {
|
||||
if (gd->baudrate <= (max_uns >> (15+n-k)))
|
||||
if (baudrate <= (max_uns >> (15+n-k)))
|
||||
break;
|
||||
}
|
||||
best_m =
|
||||
(gd->baudrate * (1 << (15 + n - k))) /
|
||||
(baudrate * (1 << (15 + n - k))) /
|
||||
((unsigned)CONFIG_SYS_CLK_FREQ >> k);
|
||||
|
||||
baud = best_m + best_n * YANU_BAUDE;
|
||||
|
@ -82,9 +54,6 @@ static void oc_serial_setbrg(void)
|
|||
return;
|
||||
}
|
||||
|
||||
|
||||
#endif /* CONFIG_SYS_NIOS_FIXEDBAUD */
|
||||
|
||||
static int oc_serial_init(void)
|
||||
{
|
||||
unsigned action,control;
|
||||
|
|
Loading…
Reference in a new issue