From owner-p4-projects@FreeBSD.ORG Wed Oct 31 08:15:36 2007 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id B5DB816A41A; Wed, 31 Oct 2007 08:15:36 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 5C98B16A420 for ; Wed, 31 Oct 2007 08:15:36 +0000 (UTC) (envelope-from andrew@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 4CF5613C494 for ; Wed, 31 Oct 2007 08:15:36 +0000 (UTC) (envelope-from andrew@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.1/8.14.1) with ESMTP id l9V8FahU027104 for ; Wed, 31 Oct 2007 08:15:36 GMT (envelope-from andrew@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.1/8.14.1/Submit) id l9V8FaA9027101 for perforce@freebsd.org; Wed, 31 Oct 2007 08:15:36 GMT (envelope-from andrew@freebsd.org) Date: Wed, 31 Oct 2007 08:15:36 GMT Message-Id: <200710310815.l9V8FaA9027101@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to andrew@freebsd.org using -f From: Andrew Turner To: Perforce Change Reviews Cc: Subject: PERFORCE change 128397 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 31 Oct 2007 08:15:37 -0000 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 #include #include +#include #include #include #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 };