From: Peter Korsgaard <jacmet@sunsite.dk>
To: linuxppc-embedded@ozlabs.org
Subject: Re: [PATCH] Xilinx UART Lite 2.6.18 driver
Date: Mon, 06 Nov 2006 16:44:16 +0100 [thread overview]
Message-ID: <87u01czijz.fsf@sleipner.barco.com> (raw)
In-Reply-To: <609d5c8e0610301145y30d058afs467d27d344149936@mail.gmail.com> (David Bolcsfoldi's message of "Mon, 30 Oct 2006 11:45:45 -0800")
>>>>> "David" == David Bolcsfoldi <dbolcsfoldi@gmail.com> writes:
Hi,
>> This doesn't help much as you don't use the com_port argument in
>> the other functions.
David> True, it's utterly useless. I was planning on having an array
David> with base addresses which would be used to support the com_port
David> argument. But it didn't make it in this patch although I have
David> version that does this now.
You don't even need an array - you can use use the base address as the
com_port cookie, E.G.:
--- /dev/null
+++ linux-trunk/arch/ppc/boot/simple/uartlite_tty.c
@@ -0,0 +1,86 @@
+/*
+ * Boot support for Xilinx uartlite
+ *
+ * Copyright (C) 2006 David Bolcsfoldi <dbolcsfoldi@gmail.com>
+ *
+ * This file is licensed under the terms of the GNU General Public License
+ * version 2. This program is licensed "as is" without any warranty of any
+ * kind, whether express or implied.
+ */
+
+#include <asm/io.h>
+#include <linux/serial_uartlite.h>
+#include <platforms/4xx/xparameters/xparameters.h>
+
+unsigned long serial_init(int chan, void *ignored)
+{
+ unsigned long com_port = 0;
+
+ switch (chan) {
+#ifdef XPAR_UARTLITE_0_BASEADDR
+ case 0:
+ com_port = XPAR_UARTLITE_0_BASEADDR + 3;
+ break;
+#endif
+#ifdef XPAR_UARTLITE_1_BASEADDR
+ case 1:
+ com_port = XPAR_UARTLITE_1_BASEADDR + 3;
+ break;
+#endif
+#ifdef XPAR_UARTLITE_2_BASEADDR
+ case 2:
+ com_port = XPAR_UARTLITE_2_BASEADDR + 3;
+ break;
+#endif
+#ifdef XPAR_UARTLITE_3_BASEADDR
+ case 3:
+ com_port = XPAR_UARTLITE_3_BASEADDR + 3;
+ break;
+#endif
+ default:
+ break;
+ }
+
+ if (com_port) {
+ void __iomem *base = (void __iomem*)com_port;
+ writeb(0, base + ULITE_CONTROL);
+ writeb(ULITE_CONTROL_RST_RX | ULITE_CONTROL_RST_TX,
+ base + ULITE_CONTROL);
+ writeb(0, base + ULITE_CONTROL);
+ }
+
+ return com_port;
+}
+
+
+int serial_tstc(unsigned long com_port)
+{
+ void __iomem *base = (void __iomem*)com_port;
+
+ if (base)
+ return readb(base + ULITE_STATUS) & ULITE_STATUS_RXVALID;
+ else
+ return 0;
+}
+
+void serial_putc(unsigned long com_port, unsigned char c)
+{
+ void __iomem *base = (void __iomem*)com_port;
+
+ if (base) {
+ while (readb(base + ULITE_STATUS) & ULITE_STATUS_TXFULL);
+ writeb(c, base + ULITE_TX);
+ }
+}
+
+unsigned char serial_getc(unsigned long com_port)
+{
+ void __iomem *base = (void __iomem*)com_port;
+
+ if (base) {
+ while (!serial_tstc(com_port));
+ return readb(base + ULITE_RX);
+ }
+ else
+ return 0;
+}
>> Where did you get the XPAR_XUL_UART_ defines from? Our
>> xparameters.h seem to contain XPAR_UARTLITE_ defines instead.
David> I think that name is picked up from the name of the device in your
David> design, the defines get names XPAR_NNN_ and mine are called
David> XUL_UART.
Crap - Ok, then people just have to add linux-compatible defines to
the end of their xparameters.h - E.G
#define XPAR_UARTLITE_0_BASEADDR XPAR_XUL_UART_BASEADDR
>> You can always use the ppc_md.progress() stuff for really early
>> debugging if needed. I would prefer to keep this workaround out of
>> uartlite.c if it isn't needed.
David> I am pretty certain probe won't get called until ppc_sys_init has been
David> called which is fairly far into the booting process and even if
David> it did the platform_bus hasn't been initialized before the
David> ppc_sys_init is called, at least not with any of the devices
David> exported by ppc_sys_devices.
True. For really early stuff you'll need to use ppc_md.progress() (or
some additional hacking)
David> Thanks for the review! David
You're welcome.
--
Bye, Peter Korsgaard
next prev parent reply other threads:[~2006-11-06 15:44 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-10-10 20:49 [PATCH] Xilinx UART Lite 2.6.18 driver David Bolcsfoldi
2006-10-10 22:04 ` Grant Likely
2006-10-11 22:06 ` David H. Lynch Jr.
2006-10-12 10:34 ` Peter Korsgaard
2006-10-12 21:12 ` David Bolcsfoldi
2006-10-13 5:21 ` David Bolcsfoldi
2006-10-13 7:04 ` David H. Lynch Jr.
2006-10-13 7:22 ` Peter Korsgaard
[not found] ` <45329C42.3030000@dlasys.net>
2006-10-16 19:42 ` Peter Korsgaard
2006-10-13 7:11 ` Peter Korsgaard
2006-10-15 23:48 ` David Bolcsfoldi
2006-10-20 19:41 ` Peter Korsgaard
2006-10-27 15:03 ` Peter Korsgaard
2006-10-28 3:29 ` David H. Lynch Jr.
2006-10-30 8:23 ` Peter Korsgaard
2006-10-31 17:26 ` David H. Lynch Jr.
2006-10-30 19:45 ` David Bolcsfoldi
2006-11-06 15:44 ` Peter Korsgaard [this message]
2006-10-13 6:48 ` David H. Lynch Jr.
2006-10-13 7:15 ` Peter Korsgaard
2006-10-15 21:02 ` David H. Lynch Jr.
2006-10-16 19:49 ` Peter Korsgaard
2006-10-16 19:52 ` Peter Korsgaard
2006-10-13 7:08 ` Peter Korsgaard
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87u01czijz.fsf@sleipner.barco.com \
--to=jacmet@sunsite.dk \
--cc=linuxppc-embedded@ozlabs.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.