PERFORCE change 158109 for review

Andrew Turner andrew at FreeBSD.org
Mon Feb 23 01:41:18 PST 2009


http://perforce.freebsd.org/chv.cgi?CH=158109

Change 158109 by andrew at andrew_bender on 2009/02/23 09:41:04

	Calculate the value of pclk before cninit to use in uart
	In uart_cpu_getdev return an error when we are looking for anything other than a console
	Increase the uart baud rate to 115200
	Fix sscomspeed to return the correct value
	Remove the error calculation from sscomspeed as it wasn't used
	Replace DEFAULT_RCLK with s3c2410_pclk

Affected files ...

.. //depot/projects/arm/src/sys/arm/s3c2xx0/s3c24x0_machdep.c#4 edit
.. //depot/projects/arm/src/sys/arm/s3c2xx0/uart_cpu_s3c2410.c#4 edit
.. //depot/projects/arm/src/sys/arm/s3c2xx0/uart_dev_s3c2410.c#10 edit

Differences ...

==== //depot/projects/arm/src/sys/arm/s3c2xx0/s3c24x0_machdep.c#4 (text+ko) ====

@@ -109,6 +109,8 @@
 #define ABT_STACK_SIZE	1
 #define UND_STACK_SIZE	1
 
+extern int s3c2410_pclk;
+
 extern u_int data_abort_handler_address;
 extern u_int prefetch_abort_handler_address;
 extern u_int undefined_handler_address;
@@ -386,10 +388,11 @@
 	/* Disable all peripheral interrupts */
 	ioreg_write32(S3C24X0_INTCTL_BASE + INTCTL_INTMSK, ~0);
 	memsize = board_init();
+	/* Find pclk for uart */
+	s3c24x0_clock_freq2(S3C24X0_CLKMAN_BASE, NULL, NULL, &s3c2410_pclk);
 	cninit();
 
 	/* Set stack for exception handlers */
-
 	data_abort_handler_address = (u_int)data_abort_handler;
 	prefetch_abort_handler_address = (u_int)prefetch_abort_handler;
 	undefined_handler_address = (u_int)undefinedinstruction_bounce;

==== //depot/projects/arm/src/sys/arm/s3c2xx0/uart_cpu_s3c2410.c#4 (text+ko) ====

@@ -42,6 +42,11 @@
 bus_space_tag_t uart_bus_space_io;
 bus_space_tag_t uart_bus_space_mem;
 
+extern struct uart_ops uart_s3c2410_ops;
+
+vm_offset_t s3c2410_uart_vaddr;
+unsigned int s3c2410_pclk;
+
 extern struct uart_class uart_s3c2410_class;
 
 int
@@ -50,20 +55,19 @@
 	return ((b1->bsh == b2->bsh && b1->bst == b2->bst) ? 1 : 0);
 }
 
-extern struct uart_ops uart_s3c2410_ops;
-
-vm_offset_t s3c2410_uart_vaddr;
-
 int
 uart_cpu_getdev(int devtype, struct uart_devinfo *di)
 {
+	if (devtype != UART_DEV_CONSOLE)
+		return (ENXIO);
+
 	di->ops = uart_getops(&uart_s3c2410_class);
 	di->bas.chan = 0;
 	di->bas.bst = &s3c2xx0_bs_tag;
 	di->bas.bsh = s3c2410_uart_vaddr;
 	di->bas.regshft = 0;
-	di->bas.rclk = 0;
-	di->baudrate = 9600;
+	di->bas.rclk = s3c2410_pclk;
+	di->baudrate = 115200;
 	di->databits = 8;
 	di->stopbits = 1;
 	di->parity = UART_PARITY_NONE;

==== //depot/projects/arm/src/sys/arm/s3c2xx0/uart_dev_s3c2410.c#10 (text+ko) ====

@@ -46,8 +46,6 @@
 #include <arm/s3c2xx0/s3c2xx0reg.h>
 #include "uart_if.h"
 
-#define      DEFAULT_RCLK    3686400
-
 /* Finds the subirq from the parent */
 #define get_sub_irq(parent, offset) \
 	((parent == S3C24X0_INT_UART0) ? S3C24X0_SUBIRQ_MIN + offset : \
@@ -57,6 +55,8 @@
 #define TX_OFF	1
 #define ERR_OFF	2
 
+extern unsigned int s3c2410_pclk;
+
 static int sscomspeed(long, long);
 static int s3c24x0_uart_param(struct uart_bas *, int, int, int, int);
 
@@ -75,21 +75,12 @@
 static int
 sscomspeed(long speed, long frequency)
 {
-#define	divrnd(n, q)	(((n)*2/(q)+1)/2)	/* divide and round off */
+	int x;
 
-	int x, err;
-
-	if (speed <= 0)
+	if (speed <= 0 || frequency <= 0)
 		return -1;
-	x = divrnd(frequency / 16, speed);
-	if (x <= 0)
-		return -1;
-	err = divrnd(((quad_t)frequency) * 1000 / 16, speed * x) - 1000;
-	if (err < 0)
-		err = -err;
+	x = (frequency / 16) / speed;
 	return x-1;
-
-#undef	divrnd
 }
 
 static int
@@ -164,7 +155,8 @@
     int parity)
 {
 	if (bas->rclk == 0)
-		bas->rclk = DEFAULT_RCLK;
+		bas->rclk = s3c2410_pclk;
+	KASSERT(bas->rclk != 0, ("s3c2410_init: Invalid rclk"));
 
 	uart_setreg(bas, SSCOM_UCON, 0);
 	uart_setreg(bas, SSCOM_UFCON,
@@ -309,6 +301,10 @@
 {
 	int error;
 
+	if (sc->sc_bas.rclk == 0)
+		sc->sc_bas.rclk = s3c2410_pclk;
+	KASSERT(sc->sc_bas.rclk != 0, ("s3c2410_init: Invalid rclk"));
+
 	uart_lock(sc->sc_hwmtx);
 	error = s3c24x0_uart_param(&sc->sc_bas, baudrate, databits, stopbits,
 	    parity);
@@ -366,5 +362,5 @@
 	1,
 	.uc_ops = &uart_s3c2410_ops,
 	.uc_range = 8,
-	.uc_rclk = DEFAULT_RCLK
+	.uc_rclk = 0,
 };


More information about the p4-projects mailing list