Raspberrypi3: Mini UART driver

Niteesh gsnb.gn at gmail.com
Mon Dec 23 18:48:54 UTC 2019


Is the correct port minor number set during the initialization? What is the
application want's to
access some other port?

On Tue, Dec 24, 2019 at 12:16 AM Niteesh <gsnb.gn at gmail.com> wrote:

> I would like to clarify my doubts regarding the console driver. I went
> through the documentation
> for the console driver
> https://docs.rtems.org/branches/master/bsp-howto/console.html#introduction
> .
> But it is quite different from how some BSPs initialize.
> Correct me if I am wrong
> The console_tbl contains the various entries of serial ports.
> The console_fns is a struct of function pointers, which point to the BSP
> uart functions.
> The BSP_output_char_function_type is what will be called for printing a
> char on to the console.
> How does RTEMS initialize the uart? It's seems not to be same for all BSPs.
> The doc says that the driver's initialization function is called once
> during the rtems initialization process.
> The console init function install the serial driver using
> rtems_termios_device_install but there seems to be
> no such function in the raspberry pi? But there is a entry in console_fns
> for init function, but then how does it
> gets called?
> And for BSP's with multiple serial's, the output function chooses the
> right serial using console_port_minor,
> Is it during initialization?
> What is the need for get and set register functions?
>
> On Mon, Dec 23, 2019 at 1:04 AM Christian Mauderer <list at c-mauderer.de>
> wrote:
>
>> On 22/12/2019 19:45, Joel Sherrill wrote:
>> >
>> >
>> > On Sun, Dec 22, 2019, 12:29 PM Niteesh <gsnb.gn at gmail.com
>> > <mailto:gsnb.gn at gmail.com>> wrote:
>> >
>> >     On Sun, Dec 22, 2019 at 8:44 PM Christian Mauderer
>> >     <list at c-mauderer.de <mailto:list at c-mauderer.de>> wrote:
>> >
>> >         Hello Niteesh,
>> >
>> >         thanks for doing that work.
>> >
>> >         On 22/12/2019 12:10, Niteesh wrote:
>> >         > The rpi1 and rpi2 use the PL011 UART, whereas, with RPI's
>> >         equipped with
>> >         > wireless/Bluetooth module, the PL011 is connected to the
>> Bluetooth
>> >         > module, and the mini UART is used as the primary UART.
>> >
>> >         In my opinion it would be great if you could use the FDT to
>> >         distinguish
>> >         between the boards. That should allow to add raspberry 3 (and
>> >         maybe 4)
>> >         support without adding another BSP. More BSPs mean a bigger
>> >         maintenance
>> >         effort for the RTEMS community.
>> >
>> >     Learning more about FDT is on my list for a long time.  I would love
>> >     to work on that
>> >     but I have almost no exp with FDT's.
>> >     But another thing could also be done, in
>> >     raspberrypi/start/bspstart.c we get the revision and
>> >     model of the board using the mailbox. Every board has a unique id,
>> >     which we could use to initialize
>> >     the BSP. But using FDT seems to be a more elegant option, it is a
>> >     lot of work I think, but we could take
>> >     help from libbsd and linux I suppose. What do you think?
>> >
>> >
>> > I think there are almost always two steps to a project like this: get it
>> > to work and make it nice. :)
>> >
>> > If you fix the startup code to read the board revision and memory size,
>> > you can get a working BSP that dynamically adapts to the models and
>> > memory variations with minimal modifications. If you want to then
>> > convert the BSP to FDT, it will be a LOT easier to debug with a working
>> BSP.
>> >
>> > Plus you may be able to identify every variation point based on just the
>> > model info. Then FDT is just a matter of switching the source of
>> > some/all of the info.
>> >
>> > That would be my work plan anyway.
>>
>> I agree with Joel that a secure development basis (also known as "hack")
>> as a first step is a good idea. You maybe even just make the mini UART
>> the default driver while you are developing. Then you can be sure that
>> you have the right driver.
>>
>> As soon as that works you can either change to the revision method or
>> (better) to the FDT one and after that the patches can be merged. Using
>> the FDT isn't that complicated. Basically you search for a node based on
>> different parameters. For an example you can take a look at the imx BSP.
>> In imx_uart_probe (bsps/arm/imx/console/console-config.c) a fdt node is
>> searched and based on that a UART driver is used. But again: Follow
>> Joels suggestion to start simple and secure.
>>
>> >
>> >         >
>> >         >
>> >
>> https://www.raspberrypi.org/app/uploads/2012/02/BCM2835-ARM-Peripherals.pdf
>> >         > But from the above doc (PAGE 10), the mini uart has 16550 like
>> >         registers
>> >         > and RTEMS already has the driver for it
>> >         > bsps/shared/dev/serial/ns16550.c. But I am not sure how
>> >         compatible they
>> >         > are? Should a new driver be implemented from scratch or use
>> >         ns16550 if
>> >         > possible?
>> >
>> >         In general it's better to re-use existing code. That has
>> multiple
>> >         advantages:
>> >
>> >         - It reduces the maintenance effort. Fewer code means fewer
>> work.
>> >         - If you have multiple driver for the same or similar hardware
>> >         it can
>> >         happen that a bug is fixed in one but not the other.
>> >         - It's simpler to find a hardware to test changes.
>> >         - The driver becomes more universal with every new supported
>> >         hardware.
>> >         That increases the chance that it fits the next new hardware.
>> >
>> >         I'm sure there are some more if you ask someone else.
>> >
>> >     I do understand the issues, I just spent some time reading the
>> >     driver code.
>> >     I think we could most probably use it. I will take a closer look and
>> >     will update.
>> >
>>
>> Great.
>>
>> >
>> >
>> >         >
>> >         > Also, the core clock on which the PL011 is based on is changed
>> >         in rpi3.
>> >         > Rpi1 and 2 use 250Mhz as the default clock but it was changed
>> >         to 400Mhz
>> >         > in Rpi3 and newer
>> >
>> >         Again: Would be great if that could be adapted based on FDT or
>> by
>> >         reading the right registers.
>> >
>> >         >
>> >         > Few differences between PL011 and Mini uart
>> >         > The mini UART has smaller FIFOs. Combined with the lack of
>> >         flow control,
>> >         > this makes it more prone to losing characters at higher baud
>> >         rates. It
>> >         > is also generally less capable than the PL011, mainly due to
>> >         its baud
>> >         > rate link to the VPU clock speed.
>> >
>> >         That shouldn't really be a problem for the system console.
>> >
>> >         >
>> >         > The particular deficiencies of the mini UART compared to the
>> >         PL011 are :
>> >         >
>> >         > No break detection
>> >         > No framing errors detection
>> >         > No parity bit
>> >         > No receive timeout interrupt
>> >         > No DCD, DSR, DTR or RI signals
>> >         >
>> >
>> >     _______________________________________________
>> >     devel mailing list
>> >     devel at rtems.org <mailto:devel at rtems.org>
>> >     http://lists.rtems.org/mailman/listinfo/devel
>> >
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20191224/51abcc6e/attachment-0001.html>


More information about the devel mailing list