Ejemplo n.º 1
0
static int _sti_asc_serial_setbrg(struct sti_asc_uart *uart, int baudrate)
{
	unsigned long val;
	int t, mode = 1;

	switch (baudrate) {
	case 9600:
		t = BAUDRATE_VAL_M0(9600);
		mode = 0;
		break;
	case 19200:
		t = BAUDRATE_VAL_M1(19200);
		break;
	case 38400:
		t = BAUDRATE_VAL_M1(38400);
		break;
	case 57600:
		t = BAUDRATE_VAL_M1(57600);
		break;
	default:
		debug("ASC: unsupported baud rate: %d, using 115200 instead.\n",
		      baudrate);
	case 115200:
		t = BAUDRATE_VAL_M1(115200);
		break;
	}

	/* disable the baudrate generator */
	val = readl(&uart->control);
	writel(val & ~RUN, &uart->control);

	/* set baud generator reload value */
	writel(t, &uart->baudrate);
	/* reset the RX & TX buffers */
	writel(1, &uart->txreset);
	writel(1, &uart->rxreset);

	/* set baud generator mode */
	if (mode)
		val |= BAUDMODE;

	/* finally, write value and enable ASC */
	writel(val, &uart->control);

	return 0;
}
Ejemplo n.º 2
0
static void stxh205_hom_early_console(void)
{

	writel(0x1189 & ~0x80, early_console_base + 0x0c); /* ctrl */
	writel(BAUDRATE_VAL_M1(115200), early_console_base); /* baud */
	writel(20, early_console_base + 0x1c);  /* timeout */
	writel(1, early_console_base + 0x10); /* int */
	writel(0x1189, early_console_base + 0x0c); /* ctrl */

	mdelay(100);

	pr_info("Early console ready\n");
}
Ejemplo n.º 3
0
static void hom_init_early_console(void __iomem *asc_base,
	unsigned long asc_clk)
{
#define BAUDRATE_VAL_M1(bps, clk)				\
	((((bps * (1 << 14)) + (1 << 13)) / (clk / (1 << 6))))
	writel(0x1189 & ~0x80, asc_base + 0x0c);/* ctrl */
	writel(BAUDRATE_VAL_M1(115200, asc_clk), asc_base); /* baud */
	writel(20, asc_base + 0x1c);		/* timeout */
	writel(1, asc_base + 0x10);		/* int */
	writel(0x1189, asc_base + 0x0c);	/* ctrl */

	mdelay(100);

	pr_info("stm pm hom: Early console ready\n");
}
Ejemplo n.º 4
0
/* initialize the ASC */
extern int serial_init (void)
{
	const int cflag = CREAD | HUPCL | CLOCAL | CSTOPB | CS8 | PARODD;
	unsigned long val;
	int baud = gd->baudrate;
	int t, mode=1;

	switch (baud) {
#if 0
	case 0:
		t = -1;
		break;
	case 2400:
		t = BAUDRATE_VAL_M0(2400);
		mode = 0;
		break;
	case 4800:
		t = BAUDRATE_VAL_M0(4800);
		mode = 0;
		break;
#endif
	case 9600:
		t = BAUDRATE_VAL_M0(9600);
		mode = 0;
		break;
	case 19200:
		t = BAUDRATE_VAL_M1(19200);
		break;
	case 38400:
		t = BAUDRATE_VAL_M1(38400);
		break;
	case 57600:
		t = BAUDRATE_VAL_M1(57600);
		break;
	default:
		printf ("ASC: unsupported baud rate: %d, using 115200 instead.\n", baud);
	case 115200:
		t = BAUDRATE_VAL_M1(115200);
		break;
	}

	/* wait for end of current transmission */
	TxCharReady ();

	/* disable the baudrate generator */
	val = p2_inl (UART_CONTROL_REG);
	p2_outl (UART_CONTROL_REG, (val & ~RUN));

	/* set baud generator reload value */
	p2_outl (UART_BAUDRATE_REG, t);

	/* reset the RX & TX buffers */
	p2_outl (UART_TXRESET_REG, 1);
	p2_outl (UART_RXRESET_REG, 1);

	/* build up the value to be written to CONTROL */
	val = RXENABLE | RUN;

	/* set character length */
	if ((cflag & CSIZE) == CS7)
		val |= MODE_7BIT_PAR;
	else {
		if (cflag & PARENB)
			val |= MODE_8BIT_PAR;
		else
			val |= MODE_8BIT;
	}

	/* set stop bit */
	/* it seems no '0 stop bits' option is available: by default
	 * we get 0.5 stop bits */
	if (cflag & CSTOPB)
		val |= STOP_1BIT;

	/* odd parity */
	if (cflag & PARODD)
		val |= PARITYODD;

#ifdef CONFIG_HWFLOW
	/*  set flow control */
	if (hwflow)
		val |= CTSENABLE;
#endif	/* CONFIG_HWFLOW */

	/* set baud generator mode */
	if (mode)
		val |= BAUDMODE;

	/* finally, write value and enable ASC */
	p2_outl (UART_CONTROL_REG, val);
	return 0;
}