Mini UART on RaspberryPi CM3/CM3+

Rouven Czerwinski r.czerwinski at pengutronix.de
Tue Oct 20 00:04:41 EDT 2020


On Tue, 2020-10-20 at 05:59 +0200, Rouven Czerwinski wrote:
> On Tue, 2020-10-20 at 00:29 +0200, Robert Carnecky (Neopsis) wrote:
> > On Mon, Oct 19, 2020 at 11:28 AM Ahmad Fatoum <
> > a.fatoum at pengutronix.de> wrote:
> > > Hello,
> > > 
> > > On 10/18/20 1:17 AM, Robert Carnecky (Neopsis) wrote:
> > > > On Sat, Oct 17, 2020 at 11:29 PM Ahmad Fatoum <
> > > > a.fatoum at pengutronix.de> wrote:
> > > > > Hi,
> > > > > 
> > > > > On 10/17/20 1:31 PM, Robert Carnecky (Neopsis) wrote:
> > > > > > Finally, I managed to boot into barebox menu using UART1
> > > > > > (/dev/ttyS0)
> > > > > > as the console. The solution was to remove all UART related
> > > > > > overlays
> > > > > > from config.txt and only activate UART1.
> > > > > > 
> > > > > >    enable_uart=1
> > > > > > 
> > > > > > Anyway, another problem occurred. When booting via barebox
> > > > > > the CPU
> > > > > > serial number is wrong. Obviously, barebox somehow
> > > > > > manipulates the
> > > > > > internal structures and
> > > > > > 
> > > > > >    cat /proc/cpuinfo
> > > > > > 
> > > > > > returns always
> > > > > > 
> > > > > >    Hardware        : BCM2835
> > > > > >    Revision          : 0000
> > > > > >    Serial              : 0000000000000000
> > > > > >    Model              : Raspberry Pi Compute Module 3 IO
> > > > > > board V3.0
> > > > > > 
> > > > > > When I boot the same image directly without barebox boot
> > > > > > loader, the
> > > > > > info is OK.  I found some discussions about U-Boot and
> > > > > > wrong serial
> > > > > > number here
> > > > > > 
> > > > > >   
> > > > > > https://www.raspberrypi.org/forums/viewtopic.php?t=183474#p1162778
> > > > > > 
> > > > > > maybe that's barebox related too. Anyway, that is a
> > > > > > definitive no go
> > > > > > with barebox for us because parts of our software are
> > > > > > expecting the
> > > > > > unique serial number.
> > > > > 
> > > > > I believe you can boot Linux with /vc.dtb and you'll get the
> > > > > same
> > > > > device tree passed to Linux as if you booted without passing
> > > > > through
> > > > > barebox.
> > > > 
> > > > Yes, but then I lose my Linux console! A summary, in all cases
> > > > Barebox device
> > > > tree in arch/arm/dts/bcm2837-rpi-cm3.dts was updated following
> > > > your hint, e.g.
> > > > 
> > > > / {
> > > >   chosen {
> > > >      stdout-path = "&uart1";
> > > >   };
> > > >  };
> > > > 
> > > > &uart1 {
> > > >         pinctrl-names = "default";
> > > >         pinctrl-0 = <&uart1_gpio14>;
> > > >         status = "okay";
> > > >  };
> > > > 
> > > > &uart0 {
> > > >      pinctrl-names = "default";
> > > >      pinctrl-0 = <&uart0_gpio32>;
> > > >      status = "okay";
> > > >  };
> > > > 
> > > > 1. Booting kernel direct, works as expected (console on uart1),
> > > > expected behavior
> > > > 
> > > > kernel=zImage
> > > > enable_uart=1
> > > > dtoverlay=uart0,txd0_pin=32,rxd0_pin=33,pin_func=7
> > > > dtoverlay=uart1,txd1_pin=14,rxd1_pin=15
> > > > 
> > > > 2. With Barebox loader. The same config.txt as in case 1),
> > > >     - no Barebox console
> > > >     - kernel boots with the console on uart1
> > > > 
> > > > kernel=barebox-raspberry-pi-cm3.img
> > > > enable_uart=1
> > > > dtoverlay=uart0,txd0_pin=32,rxd0_pin=33,pin_func=7
> > > > dtoverlay=uart1,txd1_pin=14,rxd1_pin=15
> > > > 
> > > > 3.  With Barebox loader, no uart overlays in config.txt.
> > > >     - Barebox console on uart1 ok,
> > > >     - kernel console on uart1
> > > >     - almost done), but ... no cpuinfo
> > > > 
> > > > kernel=barebox-raspberry-pi-cm3.img
> > > > enable_uart=1
> > > > 
> > > > 4. With Barebox loader, no uart overlays in config.txt, Linux
> > > > boots with vc.dtb.
> > > >     - Barebox console on uart1 ok
> > > >     - no Linux console, Linux boots with cpuinfo ok
> > > > 
> > > > kernel=barebox-raspberry-pi-cm3.img
> > > > enable_uart=1
> > > > 
> > > > I did not found any combination when I get the Barebox console
> > > > and
> > > > Linux console on uart1
> > > > and with cpuinfo ok. If the serial number is not needed, case
> > > > 3) should be ok.
> > > 
> > > What happens if you combine 2. and 4. ?
> > > So you have enable_uart=1, the uart overlays _and_ Linux boots
> > > with vc.dtb?
> > 
> > Negativ. Whenever I enable overlays in the config.txt that map
> > uart0
> > to pin32/33 and
> > uart1 to pin 14/15 (console), I do not get Barebox console. It does
> > not depend on the device
> > tree passed to the kernel. This interaction between Barebox device
> > tree and Raspberry config.txt
> > overlays is a bit strange for me.
> > 
> > Just an idea - does Barebox fully support this hardware? From the
> > 2835
> > ARM Peripherals Guide,
> > chapter 2.2 miniUART :
> > 
> > > The implemented UART is not a 16650 compatible UART However as
> > > far as possible
> > > the first 8 control and status registers are laid out like a
> > > 16550 UART. Al 16550 register
> > > bits which are not supported can be written but will be ignored
> > > and read back as 0.
> > > All control bits for simple UART receive/transmit operations are
> > > available.
> > 
> > Barebox has support for NS16650 ( CONFIG_DRIVER_SERIAL_NS16550) but
> > not for
> > Raspberry miniUART.
> > 
> > Anyway, I am giving up. I am sure I tested all combinations of
> > overlays, I have written my
> > own dts, nothing works as I need (console=uart1, incl. proper
> > serial
> > number handling).
> > There is no problem to get the console on uart0/ttyAMA0, but not on
> > uart1/ttyS0.
> > The Raspberry way how they are handling uarts lacks all logic and
> > is completely
> > unclear.
> 
> Hi,
> 
> looking into arch/arm/dts/bcm2837-rpi-cm3.dts:
> / {
>         chosen {
>                 stdout-path = &uart0;
>         };
> };
> 
> The CM3 module is currently default configured to use uart0 as the
> stdout path, while bcm2837-rpi-3.dts is configured for uart1.
> This was done in ab76f9d09d3b7b77fc00d84bc2fac6bfbf82c69c after the
> miniuart support was added to the NS16550 driver
> in 77de547cd179b910cdcb8530df15d77a0fc66a3c.

Disregard this, I didn't read the whole thread. There however was
another user who tried to use the miniuart and had failures on probe on
the CM3. Unfortunately the barebox archives don't have these mails,
I'll attach an mbox which has the whole thread.


Regards,
Rouven Czerwinski

-------------- next part --------------
A non-text attachment was scrubbed...
Name: Mini_UART_support_for_Raspberry_Pi_CM3_?.mbox
Type: application/mbox
Size: 50845 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/barebox/attachments/20201020/f6426811/attachment-0001.mbox>


More information about the barebox mailing list