Hello Marc,<br><br><div class="gmail_quote">2011/4/3 Marc Kleine-Budde <span dir="ltr">&lt;<a href="mailto:mkl@pengutronix.de">mkl@pengutronix.de</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="im">On 04/03/2011 12:25 PM, <a href="mailto:franck.jullien@gmail.com">franck.jullien@gmail.com</a> wrote:<br>
&gt; From: Franck JULLIEN &lt;<a href="mailto:franck.jullien@gmail.com">franck.jullien@gmail.com</a>&gt;<br>
<br>
</div>Please add your S-o-b to the driver. See Documentation/SubmittingPatches<br>
in a Linux-kernel tree.<br>
<br></blockquote><div><br></div><div>Ok I will. </div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
See comments inline.<br>
<div><div></div><div class="h5">&gt;<br>
&gt; ---<br>
&gt;  drivers/serial/Kconfig         |    5 ++<br>
&gt;  drivers/serial/Makefile        |   25 +++++-----<br>
&gt;  drivers/serial/serial_altera.c |   97 ++++++++++++++++++++++++++++++++++++++++<br>
&gt;  3 files changed, 115 insertions(+), 12 deletions(-)<br>
&gt;  create mode 100644 drivers/serial/serial_altera.c<br>
&gt;<br>
&gt; diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig<br>
&gt; index ffd877a..9e05f4b 100644<br>
&gt; --- a/drivers/serial/Kconfig<br>
&gt; +++ b/drivers/serial/Kconfig<br>
&gt; @@ -43,6 +43,11 @@ config DRIVER_SERIAL_BLACKFIN<br>
&gt;       default y<br>
&gt;       bool &quot;Blackfin serial driver&quot;<br>
&gt;<br>
&gt; +config DRIVER_SERIAL_ALTERA<br>
&gt; +     depends on NIOS2<br>
&gt; +     default y<br>
&gt; +     bool &quot;Altera serial driver&quot;<br>
&gt; +<br>
&gt;  config DRIVER_SERIAL_NS16550<br>
&gt;       default n<br>
&gt;       bool &quot;NS16550 serial driver&quot;<br>
&gt; diff --git a/drivers/serial/Makefile b/drivers/serial/Makefile<br>
&gt; index 9f0e12b..8067b74 100644<br>
&gt; --- a/drivers/serial/Makefile<br>
&gt; +++ b/drivers/serial/Makefile<br>
&gt; @@ -4,15 +4,16 @@<br>
&gt;  # serial_max3100.o<br>
&gt;  # serial_pl010.o<br>
&gt;  # serial_xuartlite.o<br>
&gt; -obj-$(CONFIG_DRIVER_SERIAL_ARM_DCC)          += arm_dcc.o<br>
&gt; -obj-$(CONFIG_SERIAL_AMBA_PL011) += amba-pl011.o<br>
&gt; -obj-$(CONFIG_DRIVER_SERIAL_IMX)                      += serial_imx.o<br>
&gt; -obj-$(CONFIG_DRIVER_SERIAL_STM378X)          += stm-serial.o<br>
&gt; -obj-$(CONFIG_DRIVER_SERIAL_ATMEL)            += atmel.o<br>
&gt; -obj-$(CONFIG_DRIVER_SERIAL_NETX)             += serial_netx.o<br>
&gt; -obj-$(CONFIG_DRIVER_SERIAL_LINUX_COMSOLE)    += linux_console.o<br>
&gt; -obj-$(CONFIG_DRIVER_SERIAL_MPC5XXX)          += serial_mpc5xxx.o<br>
&gt; -obj-$(CONFIG_DRIVER_SERIAL_BLACKFIN)         += serial_blackfin.o<br>
&gt; -obj-$(CONFIG_DRIVER_SERIAL_NS16550)          += serial_ns16550.o<br>
&gt; -obj-$(CONFIG_DRIVER_SERIAL_PL010)            += serial_pl010.o<br>
&gt; -obj-$(CONFIG_DRIVER_SERIAL_S3C24X0)          += serial_s3c24x0.o<br>
&gt; +obj-$(CONFIG_DRIVER_SERIAL_ARM_DCC)             += arm_dcc.o<br>
&gt; +obj-$(CONFIG_SERIAL_AMBA_PL011)                 += amba-pl011.o<br>
&gt; +obj-$(CONFIG_DRIVER_SERIAL_IMX)                 += serial_imx.o<br>
&gt; +obj-$(CONFIG_DRIVER_SERIAL_STM378X)             += stm-serial.o<br>
&gt; +obj-$(CONFIG_DRIVER_SERIAL_ATMEL)               += atmel.o<br>
&gt; +obj-$(CONFIG_DRIVER_SERIAL_NETX)                += serial_netx.o<br>
&gt; +obj-$(CONFIG_DRIVER_SERIAL_LINUX_COMSOLE)       += linux_console.o<br>
&gt; +obj-$(CONFIG_DRIVER_SERIAL_MPC5XXX)             += serial_mpc5xxx.o<br>
&gt; +obj-$(CONFIG_DRIVER_SERIAL_BLACKFIN)            += serial_blackfin.o<br>
&gt; +obj-$(CONFIG_DRIVER_SERIAL_NS16550)             += serial_ns16550.o<br>
&gt; +obj-$(CONFIG_DRIVER_SERIAL_PL010)               += serial_pl010.o<br>
&gt; +obj-$(CONFIG_DRIVER_SERIAL_S3C24X0)             += serial_s3c24x0.o<br>
&gt; +obj-$(CONFIG_DRIVER_SERIAL_ALTERA)              += serial_altera.o<br>
<br>
</div></div>Why do you reformat the whole file? Please don&#39;t do that.<br></blockquote><div><br></div><div><br></div><div>Because there is a mix between tabs and spaces before the &quot;+= ....&quot;. I think it&#39;s better to have spaces here in order</div>
<div>to maintain alignment no matter what the tab size is. Tell me if you&#39;re agree, if not, I&#39;ll just put my new line at the bottom..... :)</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

<div><div></div><div class="h5"><br>
&gt; diff --git a/drivers/serial/serial_altera.c b/drivers/serial/serial_altera.c<br>
&gt; new file mode 100644<br>
&gt; index 0000000..03e48d1<br>
&gt; --- /dev/null<br>
&gt; +++ b/drivers/serial/serial_altera.c<br>
&gt; @@ -0,0 +1,97 @@<br>
&gt; +/*<br>
&gt; + * (C) Copyright 2011, Franck JULLIEN, &lt;<a href="mailto:elec4fun@gmail.com">elec4fun@gmail.com</a>&gt;<br>
&gt; + *<br>
&gt; + * See file CREDITS for list of people who contributed to this<br>
&gt; + * project.<br>
&gt; + *<br>
&gt; + * This program is free software; you can redistribute it and/or<br>
&gt; + * modify it under the terms of the GNU General Public License as<br>
&gt; + * published by the Free Software Foundation; either version 2 of<br>
&gt; + * the License, or (at your option) any later version.<br>
&gt; + *<br>
&gt; + * This program is distributed in the hope that it will be useful,<br>
&gt; + * but WITHOUT ANY WARRANTY; without even the implied warranty of<br>
&gt; + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the<br>
&gt; + * GNU General Public License for more details.<br>
&gt; + *<br>
&gt; + * You should have received a copy of the GNU General Public License<br>
&gt; + * along with this program; if not, write to the Free Software<br>
&gt; + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,<br>
&gt; + * MA 02111-1307 USA<br>
&gt; + */<br>
&gt; +<br>
&gt; +#include &lt;common.h&gt;<br>
&gt; +#include &lt;driver.h&gt;<br>
&gt; +#include &lt;init.h&gt;<br>
&gt; +#include &lt;malloc.h&gt;<br>
&gt; +#include &lt;asm/io.h&gt;<br>
&gt; +#include &lt;asm/nios2-io.h&gt;<br>
&gt; +<br>
&gt; +static int altera_serial_setbaudrate(struct console_device *cdev, int baudrate)<br>
&gt; +{<br>
&gt; +     volatile struct nios_uart * uart = (struct nios_uart *)cdev-&gt;dev-&gt;map_base;<br>
</div></div>                                   ^<br>
<br>
please remove this space.<br>
<br></blockquote><div><br></div><div>Damn, I used the checkpatch script though, should have seen it....</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

no volatiles please.<br>
<div class="im"><br></div></blockquote><div><br></div><div><br></div><div>Yeah I know but last time I removed those volatile, the driver didn&#39;t work anymore ?!? I&#39;ve done a test after I read your reply and it</div>
<div>works without so I&#39;ll remove them.</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div class="im">
&gt; +     unsigned div;<br>
&gt; +<br>
&gt; +     div = (CPU_FREQ / baudrate) - 1;<br>
&gt; +     writel(div, &amp;uart-&gt;divisor);<br>
&gt; +<br>
&gt; +     return 0;<br>
&gt; +}<br>
&gt; +<br>
&gt; +static void altera_serial_putc(struct console_device *cdev, char c)<br>
&gt; +{<br>
&gt; +     volatile struct nios_uart *uart = (struct nios_uart *)cdev-&gt;dev-&gt;map_base;<br>
&gt; +<br>
&gt; +     if (c == &#39;\n&#39;)<br>
&gt; +             altera_serial_putc(cdev, &#39;\r&#39;);<br>
<br>
</div>Why this? Only the at91rm9200 driver does this and I don&#39;t know why....<br>
<div class="im"><br></div></blockquote><div><br></div><div>Because I copied it from U-Boot :) Removed.</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="im">
&gt; +<br>
&gt; +     while ((readl(&amp;uart-&gt;status) &amp; NIOS_UART_TRDY) == 0);<br>
&gt; +     writel(c, &amp;uart-&gt;txdata);<br>
&gt; +}<br>
&gt; +<br>
&gt; +static int altera_serial_tstc(struct console_device *cdev)<br>
&gt; +{<br>
&gt; +     volatile struct nios_uart *uart = (struct nios_uart *)cdev-&gt;dev-&gt;map_base;<br>
<br>
</div>No volatiles<br>
<div class="im"><br>
&gt; +<br>
&gt; +     return readl(&amp;uart-&gt;status) &amp; NIOS_UART_RRDY;<br>
&gt; +}<br>
&gt; +<br>
&gt; +static int altera_serial_getc(struct console_device *cdev)<br>
&gt; +{<br>
&gt; +     volatile struct nios_uart *uart = (struct nios_uart *)cdev-&gt;dev-&gt;map_base;<br>
</div>dito<br>
<div class="im">&gt; +<br>
&gt; +     while (altera_serial_tstc(cdev) == 0);<br>
</div>please add a comment, or at least an empty line after while<br>
<div class="im"><br></div></blockquote><div><br></div><div>Do you guys put the semi colon on the next line also ?</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="im">
&gt; +     return readl(&amp;uart-&gt;rxdata) &amp; 0x000000FF;<br>
&gt; +}<br>
&gt; +<br>
&gt; +static int altera_serial_probe(struct device_d *dev)<br>
&gt; +{<br>
&gt; +     struct console_device *cdev;<br>
&gt; +<br>
&gt; +     cdev = malloc(sizeof(struct console_device));<br>
<br>
</div>malloc can fail, use xmalloc instead<br>
<div class="im"><br></div></blockquote><div><br></div><div>Done.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div class="im">
&gt; +     dev-&gt;type_data = cdev;<br>
&gt; +     cdev-&gt;dev = dev;<br>
&gt; +     cdev-&gt;f_caps = CONSOLE_STDIN | CONSOLE_STDOUT | CONSOLE_STDERR;<br>
&gt; +     cdev-&gt;tstc = altera_serial_tstc;<br>
&gt; +     cdev-&gt;putc = altera_serial_putc;<br>
&gt; +     cdev-&gt;getc = altera_serial_getc;<br>
&gt; +     cdev-&gt;setbrg = altera_serial_setbaudrate;<br>
&gt; +<br>
&gt; +     console_register(cdev);<br>
&gt; +<br>
&gt; +     return 0;<br>
&gt; +}<br>
&gt; +<br>
&gt; +static struct driver_d altera_serial_driver = {<br>
&gt; +     .name  = &quot;altera_serial&quot;,<br>
</div>             ^^<br>
one space is enough<br>
<div class="im"><br></div></blockquote><div><br></div><div>Copied from blackfin :) Patch it ?</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="im">
&gt; +     .probe = altera_serial_probe,<br>
&gt; +};<br>
&gt; +<br>
&gt; +static int altera_serial_init(void)<br>
&gt; +{<br>
&gt; +     register_driver(&amp;altera_serial_driver);<br>
&gt; +     return 0;<br>
<br>
</div>I think return register_driver(); is preferred.<br>
<div class="im"><br></div></blockquote><div><br></div><div><br></div><div>Copied from blackfin :) Patch it ?</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="im">
&gt; +}<br>
&gt; +<br>
&gt; +console_initcall(altera_serial_init);<br>
&gt; +<br>
<br>
</div>cheers, Marc<br>
<font color="#888888"><br>
--<br>
Pengutronix e.K.                  | Marc Kleine-Budde           |<br>
Industrial Linux Solutions        | Phone: +49-231-2826-924     |<br>
Vertretung West/Dortmund          | Fax:   +49-5121-206917-5555 |<br>
Amtsgericht Hildesheim, HRA 2686  | <a href="http://www.pengutronix.de" target="_blank">http://www.pengutronix.de</a>   |<br>
<br>
</font></blockquote></div><br><div>Do you want me to patch files each time I see a wrong coding style in the code ? Because I&#39;m so focused</div><div>on that since I&#39;m working on the nios2 port (and since I display tabs and white spaces in my favorite editor :))</div>
<div>that I can see coding style mistakes in a lot of files :) (for example, leading spaces in serial_imx line 222, 228, </div><div>245, 313,.... checkpatch gives 9 errors and 44 warnings on this file).</div><div><br></div>
<div>Regards,</div><div>Franck.</div>