Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 31 Oct 2007 08:15:36 GMT
From:      Andrew Turner <andrew@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 128397 for review
Message-ID:  <200710310815.l9V8FaA9027101@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=128397

Change 128397 by andrew@andrew_hermies on 2007/10/31 08:15:23

	Update the s3c2410 uart driver to compile and run on a Neo1973

Affected files ...

.. //depot/projects/arm/src/sys/arm/s3c2xx0/uart_cpu_s3c2410.c#3 edit
.. //depot/projects/arm/src/sys/arm/s3c2xx0/uart_dev_s3c2410.c#3 edit

Differences ...

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

@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2003 Marcel Moolenaar
+ * Copyright (c) 2007 Andrew Turner
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -40,14 +41,15 @@
 
 bus_space_tag_t uart_bus_space_io;
 bus_space_tag_t uart_bus_space_mem;
+
+extern struct uart_class uart_s3c2410_class;
+
 int
 uart_cpu_eqres(struct uart_bas *b1, struct uart_bas *b2)
 {
 	return ((b1->bsh == b2->bsh && b1->bst == b2->bst) ? 1 : 0);
 }
 
-extern int got_mmu;
-
 extern struct uart_ops uart_s3c2410_ops;
 
 vm_offset_t s3c2410_uart_vaddr;
@@ -55,7 +57,7 @@
 int
 uart_cpu_getdev(int devtype, struct uart_devinfo *di)
 {
-	di->ops = uart_s3c2410_ops;
+	di->ops = uart_getops(&uart_s3c2410_class);
 	di->bas.chan = 0;
 	di->bas.bst = &s3c2xx0_bs_tag;
 	di->bas.bsh = s3c2410_uart_vaddr;

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

@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2003 Marcel Moolenaar
+ * Copyright (c) 2007 Andrew Turner
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -38,14 +39,13 @@
 #include <dev/uart/uart.h>
 #include <dev/uart/uart_cpu.h>
 #include <dev/uart/uart_bus.h>
+#include <arm/s3c2xx0/s3c2410reg.h>
 #include <arm/s3c2xx0/uart_dev_s3c2410.h>
 #include <arm/s3c2xx0/s3c2xx0reg.h>
 #include "uart_if.h"
 
 #define      DEFAULT_RCLK    3686400
 
-extern int got_mmu;
-
 /*
  * Low-level UART interface.
  */
@@ -53,11 +53,9 @@
 static void s3c2410_init(struct uart_bas *bas, int, int, int, int);
 static void s3c2410_term(struct uart_bas *bas);
 static void s3c2410_putc(struct uart_bas *bas, int);
-static int s3c2410_poll(struct uart_bas *bas);
+static int s3c2410_rxready(struct uart_bas *bas);
 static int s3c2410_getc(struct uart_bas *bas, struct mtx *mtx);
 
-int did_mmu = 0;
-
 extern SLIST_HEAD(uart_devinfo_list, uart_devinfo) uart_sysdevs;
 
 struct uart_ops uart_s3c2410_ops = {
@@ -65,7 +63,7 @@
 	.init = s3c2410_init,
 	.term = s3c2410_term,
 	.putc = s3c2410_putc,
-	.poll = s3c2410_poll,
+	.rxready = s3c2410_rxready,
 	.getc = s3c2410_getc,
 };
 
@@ -75,14 +73,6 @@
 	return (0);
 }
 
-static void
-s3c2410_addr_change(struct uart_bas *bas)
-{
-	
-	bas->bsh = 0xd000d000;
-	did_mmu = 1;
-}
-
 static int
 sscomspeed(long speed, long frequency)
 {
@@ -107,10 +97,7 @@
     int parity)
 {
 	int brd;
-	
-	/* XXX: sigh. */
-	if (!did_mmu && got_mmu) 
-		s3c2410_addr_change(bas);
+
 	if (bas->rclk == 0)
 		bas->rclk = DEFAULT_RCLK;
 	uart_setreg(bas, SSCOM_ULCON, 0x23);
@@ -135,10 +122,6 @@
 static void
 s3c2410_putc(struct uart_bas *bas, int c)
 {
-	/* XXX: sigh. */
-	if (!did_mmu && got_mmu) 
-		s3c2410_addr_change(bas);
-
 #if 0
 	while (uart_getreg(bas, SSCOM_UFSTAT) & UFSTAT_TXFULL);
 #endif
@@ -146,18 +129,16 @@
 }
 
 static int
-s3c2410_poll(struct uart_bas *bas)
+s3c2410_rxready(struct uart_bas *bas)
 {
-	return (sscom_getc(bas->bst, bas->bsh));
+	return ((uart_getreg(bas, SSCOM_UTRSTAT) & UTRSTAT_RXREADY) ==
+	    UTRSTAT_RXREADY);
 }
 
 static int
 s3c2410_getc(struct uart_bas *bas, struct mtx *mtx)
 {
 	int c;
-	/* XXX: sigh. */
-	if (!did_mmu && got_mmu) 
-		s3c2410_addr_change(bas);
 
 	while (!sscom_rxrdy(bas->bst, bas->bsh));
 	return sscom_getc(bas->bst, bas->bsh);
@@ -256,6 +237,7 @@
 	"s3c2410 class",
 	s3c2410_methods,
 	1,
+	.uc_ops = &uart_s3c2410_ops,
 	.uc_range = 8,
 	.uc_rclk = 3686400
 };



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200710310815.l9V8FaA9027101>