Raspberrypi CM3, u-boot console and kernel patch #raspberrypi #dunfell #kernel #rpi #cm3


Romain Crausaz <romain.crausaz@...>
 

Dear all,
 
I have 4 different topics on which I can't find a correct answer on internet.

I am developing a new system base on the Raspberrypi CM3+ with our custom board. I am using Yocto with the meta-raspberrypi and the dunfell branch (for LTS)
 
Here is what I would like to achieve:
  1. Get UART0 or UART1 as the standard console for u-boot and the linux kernel on pins 32 and 33
  2. Make u-boot pass my device tree (stored in the boot partition) to the kernel and not the device tree generated by the first stage bootloader
  3. U-boot message ?
  4. Patch kernel which sources are in work-shared
--------------------------------------------------------------------------------------------------------------------------------------
Regarding the first point, I already created a new device tree within u-boot and set it as the default bootloader in my default config. I have some troubles to understand how everything works between the first stage bootloader, u-boot, u-boot internal device tree and the kernel device tree.
 
Here is the different things I tried:
  • Use UART0 on pins 32 and 33
    • In the u-boot device tree:
chosen {
    stdout-path = "serial0:115200n8";
}
...
&uart0 {
    pinctrl-names= "default";
    pinctrl-0 = <&uart0_gpio32>;
    status = "okay";
}
    • In the config.txt:
enable_uart=1
dtoverlay=uart0,txd0_pin=32,rxd0_pin=33,pin_func=7
    • This works but only for the kernel, I don't get any output from u-boot and can't stop the boot process.
  • Use UART1 on pins 32 and 33: more or less the same modification but with different values (uart1_gpio32, serial1, etc..) and same results
I would like to know if there is an other file I should modify to get this working. When I use the uart0 or uart1 on pin 14 and 15 everything works perfectly.
 
Here is my device tree patch for u-boot:
diff --git a/arch/arm/dts/bcm2837-rpi-cm3-digisens.dts b/arch/arm/dts/bcm2837-rpi-cm3-digisens.dts
index e69de29bb2..f6c0efd18d 100644
--- a/arch/arm/dts/bcm2837-rpi-cm3-digisens.dts
+++ b/arch/arm/dts/bcm2837-rpi-cm3-digisens.dts
@@ -0,0 +1,175 @@
+// SPDX-License-Identifier: GPL-2.0
+/dts-v1/;
+#include "bcm2837.dtsi"
+#include "bcm2836-rpi.dtsi"
+#include "bcm283x-rpi-smsc9514.dtsi"
+#include "bcm283x-rpi-usb-host.dtsi"
+
+/ {
+     compatible = "raspberrypi,3-compute-module", "brcm,bcm2837";
+     model = "Raspberry Pi Compute Module 3 DIGI-SENS baseboard";
+
+     memory@0 {
+     reg = <0 0x40000000>;
+ };
+
+ leds {
+     act {
+         gpios = <&expgpio 2 GPIO_ACTIVE_HIGH>;
+     };
+ };
+
+ chosen {
+     /* 8250 auxiliary UART instead of pl011 */
+     stdout-path = "serial1:115200n8";
+ };
+
+ reg_3v3: fixed-regulator {
+     compatible = "regulator-fixed";
+     regulator-name = "3V3";
+     regulator-min-microvolt = <3300000>;
+     regulator-max-microvolt = <3300000>;
+     regulator-always-on;
+ };
+
+ reg_1v8: fixed-regulator {
+     compatible = "regulator-fixed";
+     regulator-name = "1V8";
+     regulator-min-microvolt = <1800000>;
+     regulator-max-microvolt = <1800000>;
+     regulator-always-on;
+     };
+};
+
+&firmware {
+     expgpio: gpio {
+         compatible = "raspberrypi,firmware-gpio";
+         gpio-controller;
+         #gpio-cells = <2>;
+         gpio-line-names = "HDMI_HPD_N",
+             "EMMC_EN_N",
+             "NC",
+             "NC",
+             "NC",
+             "NC",
+             "NC",
+             "NC";
+         status = "okay";
+ };
+};
+
+&hdmi {
+     hpd-gpios = <&expgpio 1 GPIO_ACTIVE_LOW>;
+};
+
+&uart1 {
+     pinctrl-names = "default";
+     pinctrl-0 = <&uart0_gpio32>;
+     status = "okay";
+};
+
+
+&sdhost {
+     pinctrl-names = "default";
+     pinctrl-0 = <&sdhost_gpio48>;
+     bus-width = <4>;
+     vmmc-supply = <&reg_3v3>;
+     vqmmc-supply = <&reg_1v8>;
+     status = "okay";
+};
(in my defconfig for u-boot I have the following default device tree parameter: +CONFIG_DEFAULT_DEVICE_TREE="bcm2837-rpi-cm3-digisens")
 
--------------------------------------------------------------------------------------------------------------------------------------
The second point seems pretty clear to me. I will change the bootscript and load the file with the fatload command and pass it to the kernel. However I wonder if it might create some problems if the first stage bootloader has already reserved the pins.
 
--------------------------------------------------------------------------------------------------------------------------------------
When u-boot is starting correctly (for the moment only on pin 14 and 15) I have the following warning and I was not able to find any explanation about it:
U-Boot 2020.01 (Jan 06 2020 - 20:56:31 +0000)
 
DRAM:  948 MiB
RPI Compute Module 3+ (0xa02100)
MMC:   mmc@7e202000: 0
Loading Environment from FAT... WARNING at drivers/mmc/bcm2835_sdhost.c:410/bcm2835_send_command()!
WARNING at drivers/mmc/bcm2835_sdhost.c:410/bcm2835_send_command()!
*** Warning - bad CRC, using default environment
 
In:    serial
Out:   vidconsole
Err:   vidconsole
Net:   No ethernet found.
starting USB...
Bus usb@7e980000: scanning bus usb@7e980000 for devices... 1 USB Device(s) found
       scanning usb for storage devices... 0 Storage Device(s) found
Hit any key to stop autoboot:  0
WARNING at drivers/mmc/bcm2835_sdhost.c:410/bcm2835_send_command()!
WARNING at drivers/mmc/bcm2835_sdhost.c:410/bcm2835_send_command()!
switch to partitions #0, OK
mmc0(part 0) is current device
Scanning mmc 0:1...
Found U-Boot script /boot.scr
Should I simply ignore it ?
 
--------------------------------------------------------------------------------------------------------------------------------------
Finally I have some troubles when I try to patch the kernel. I have always been working with IMX SOC and (Karo-electronics bsp). With the meta-raspberry, the kernel sources are in the work-shared directory. When I create a patch with for example this command: 
 
git diff arch/arm/boot/dts/overlays/uart0-cm3-overlay.dts > /.../0001-uart0.patch
I have the following error when I run bitbake: "Patch failures can be resolved in the linux source directory"
--------------------------------------------------------------------------------------------------------------------------------------
 
Thank you in advance for your time. Let me know if you need more information.
 
Best regards
Romain