mail archive of the barebox mailing list
 help / color / mirror / Atom feed
From: Rouven Czerwinski <r.czerwinski@pengutronix.de>
To: "Robert Carnecky (Neopsis)" <robert@neopsis.com>
Cc: barebox@lists.infradead.org, Ahmad Fatoum <a.fatoum@pengutronix.de>
Subject: Re: Mini UART on RaspberryPi CM3/CM3+
Date: Tue, 20 Oct 2020 14:45:23 +0200	[thread overview]
Message-ID: <28a2117b0b108448ee9ab9d2bad725a3bd561c99.camel@pengutronix.de> (raw)
In-Reply-To: <CABMENH4JhxWE5eUxj8oYDjJSTixwrWShvSew8zRwrxV9v2k89g@mail.gmail.com>

On Tue, 2020-10-20 at 14:22 +0200, Robert Carnecky (Neopsis) wrote:
> On Tue, Oct 20, 2020 at 6:04 AM Rouven Czerwinski
> <r.czerwinski@pengutronix.de> wrote:
> > 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@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@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
> > 
> 
> The thread sent by Rouven describes really the same issue and, like
> me, without a solution.
> As I wrote in my summary, there is one combination of config.txt and
> barebox
> device tree booting into barebox console on uart1 and kernel console
> on uart1:
> 
> barebox device tree:
> 
> / {
>   chosen {
>      stdout-path = "&uart1";
>   };
>  };
> 
> &uart1 {
>         pinctrl-names = "default";
>         pinctrl-0 = <&uart1_gpio14>;
>         status = "okay";
>  };
> 
> &uart0 {
>      pinctrl-names = "default";
>      pinctrl-0 = <&uart0_gpio32>;
>      status = "okay";
>  };
> 
> 
> config.txt:
> kernel=barebox-raspberry-pi-cm3.img
> enable_uart=1
> 
> Unfortunately, in this case the content of /proc/cpuinfo in Linux
> is  wrong,
> which is in my opinion barebox bug.

According to [1], the serial number is directly read from the device
tree, this node is not populated by barebox. This leaves the following
possible options:

1) Fix the barebox NS16550 driver to probe on the rpi3 CM3 miniuart.
Then boot with the vc.dtb file.

2) Read the serial-number from the vc.dtb file and fixup the serial
number before booting with the barebox device tree

3) Find out if the RPI serial number can be read using the mailbox
communication interface to the VC core, retrieve the number and fix it
up into the device tree before boot. A quick google says this could be
the case, see [2].

[1]: 
https://elixir.bootlin.com/linux/latest/source/arch/arm/kernel/setup.c#L951
[2]: 
https://github.com/Terminus-IMRC/mailbox/blob/b96aa3cc8dfee2be2c8f835e09e812000910a5ff/src/wrap_ours.c#L114

Regards,
Rouven


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

  reply	other threads:[~2020-10-20 12:45 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-10-05 10:07 Robert Carnecky (Neopsis)
2020-10-05 11:16 ` Ahmad Fatoum
2020-10-09 12:30   ` Robert Carnecky (Neopsis)
2020-10-09 14:18     ` Ahmad Fatoum
2020-10-17 11:31       ` Robert Carnecky (Neopsis)
2020-10-17 21:29         ` Ahmad Fatoum
2020-10-17 23:17           ` Robert Carnecky (Neopsis)
2020-10-19  9:28             ` Ahmad Fatoum
2020-10-19 22:29               ` Robert Carnecky (Neopsis)
2020-10-20  3:59                 ` Rouven Czerwinski
2020-10-20  4:04                   ` Rouven Czerwinski
2020-10-20 12:22                     ` Robert Carnecky (Neopsis)
2020-10-20 12:45                       ` Rouven Czerwinski [this message]
2020-10-20 17:04                         ` Robert Carnecky (Neopsis)
2020-10-21  8:21                           ` Robert Carnecky (Neopsis)

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=28a2117b0b108448ee9ab9d2bad725a3bd561c99.camel@pengutronix.de \
    --to=r.czerwinski@pengutronix.de \
    --cc=a.fatoum@pengutronix.de \
    --cc=barebox@lists.infradead.org \
    --cc=robert@neopsis.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox