Update tooling for custom kernels (#6)

Improve support for custom device trees when kernel updates are received

* Modified make-trees.sh so that it builds for all installed kernels.
* A new script flash-latest.sh that copies the resulting .dtb files into the /etc/flash-kernel/dtbs/ override folder.

The build-trees README is updated for this, and shows how to configure flash-kernel to use the custom .dtbs.

Kernel upgrade should now go:

[after a new kernel upgrade is installed]
* Upgrade source: cd source && apt source linux-riscv
* Build dtb's: cd build-trees &&; ./make_dtbs.sh
* Install device tree via softlinks ./flash_latest.sh
* Reboot
This commit is contained in:
Owen Carter
2024-09-19 14:52:55 +02:00
committed by GitHub
parent 9f11caaf73
commit 520118f143
18 changed files with 1469 additions and 240 deletions
+52 -4
View File
@@ -1,19 +1,34 @@
# Alternate device tree Examples:
Each folder contains a `.dts` file and a README showing the GPIO pin mappings.
Copy the desired `.dts` file to the [build-trees](../build-trees) folder and follow the readme there to build the device-tree binaries.
## Use
Copy the desired `.dts` file(s) to the [build-trees](../build-trees) folder and follow the readme there to build the device-tree binaries.
There are instructions at the end of that document on how you can use a custom `.dtb` and make it permanent across reboots and kernel upgrades.
There are instructions at the end of that document on how to make this permanent across reboots and kernel upgrades, some example flash-kernel database entries are given below for convenience.
## Caveat
The issue with using these trees is that **if** the upstream device tree or includes is modified you need to manually rebuild these trees.
EG any changes to the upstream `sun20i-d1-mangopi-mq-pro.dts` source needs to be detected and applied too. You need to examine file histories to do this.
- Fortunately this should not be an issue in practice; the kernel *should* remain very stable going forward. Ubuntu 24.04.1 is a LTS release..
The authors personal advice is to use this only if needed; or as a learning excercise.
## HAT
[Emulates a standard PI hat pinout](./hat)
* 1x SPI
* 2x I2C
* Console UART only
* 16 unassigned GPIO pins
## LoRa HAT
[Expanded HAT pinout for my LoRa hat use](./lora-hat)
* 1x SPI
* 2x I2C
* 1x UART (plus the console uart)
* 4x PWM
* 11 unassigned GPIO pins
## SPI and I2C
[SPI plus I2C interfaces](./spi_i2c)
[SPI plus I2C interfaces](./spi-i2c)
* 1x SPI
* 4x I2C
* 3x UART (plus the console uart)
@@ -25,3 +40,36 @@ The authors personal advice is to use this only if needed; or as a learning exce
* UART3 has RTC/CTS pins available too
* 2x I2C
* 12 unassigned GPIO pins
#### Example `/etc/flash-kernel/db` entries
```text
# Custom kernels
Machine: MQpro HAT
Kernel-Flavors: any
DTB-Id: custom/mqpro-hat.dtb
Boot-Script-Path: /boot/boot.scr
U-Boot-Script-Name: bootscr.uboot-generic
Required-Packages: u-boot-tools
Machine: MQpro LoRa HAT
Kernel-Flavors: any
DTB-Id: custom/mqpro-lora-hat.dtb
Boot-Script-Path: /boot/boot.scr
U-Boot-Script-Name: bootscr.uboot-generic
Required-Packages: u-boot-tools
Machine: MQpro Serial
Kernel-Flavors: any
DTB-Id: custom/mqpro-serial.dtb
Boot-Script-Path: /boot/boot.scr
U-Boot-Script-Name: bootscr.uboot-generic
Required-Packages: u-boot-tools
Machine: MQpro SPI I2C
Kernel-Flavors: any
DTB-Id: custom/mqpro-spi-i2c.dtb
Boot-Script-Path: /boot/boot.scr
U-Boot-Script-Name: bootscr.uboot-generic
Required-Packages: u-boot-tools
```
+71
View File
@@ -0,0 +1,71 @@
# A device tree for Raspberry PI HATs..
Designed to mimic the standard PI gpio assignments for use with PI HAT's
* i2c**0** and spi**1** ports are located on the same Pins as the PI I2C-**1** and SPI-**0** on the PI gpio header
* i2c3 is on the same pins as I2C-0 on the Pi (normally reserved as the Pi EEPROM Data pins)
```
MangoPI MQ Pro GPIO header (dtb name: MangoPi MQ Pro)
Gpio Header:
func des pin pin des func
3v3 1 --o o-- 2 5v
i2c0.sda (2502000.i2c:205) PG13 3 --o o-- 4 5v
i2c0.scl (2502000.i2c:204) PG12 5 --o o-- 6 gnd
free (39) PB7 7 --o o-- 8 PB8 uart0.tx (2500000.serial:40)
gnd 9 --o o-- 10 PB9 uart0.rx (2500000.serial:41)
free (117) PD21 11 --o o-- 12 PB5 free (37)
free (118) PD22 13 --o o-- 14 gnd
free (32) PB0 15 --o o-- 16 PB1 free (33)
3v3 17 --o o-- 18 PD14 spi1.hold (4026000.spi:110)
spi1.mosi (4026000.spi:108) PD12 19 --o o-- 20 gnd
spi1.miso (4026000.spi:109) PD13 21 --o o-- 22 PC1 free (65)
spi1.clk (4026000.spi:107) PD11 23 --o o-- 24 PD10 spi1.cs (4026000.spi:106)
gnd 25 --o o-- 26 PD15 spi1.wp (4026000.spi:111)
i2c3.sda (2502c00.i2c:145) PE17 27 --o o-- 28 PE16 i2c3.sck (2502c00.i2c:144)
free (42) PB10 29 --o o-- 30 gnd
free (43) PB11 31 --o o-- 32 PC0 free (64)
free (44) PB12 33 --o o-- 34 gnd
free (38) PB6 35 --o o-- 36 PB2 free (34)
free (113) PD17 37 --o o-- 38 PB3 free (35)
gnd 39 --o o-- 40 PB4 free (36)
Other gpio outputs of interest:
-- PD18: Blue Status Led - gpio (2000000.pinctrl:114)
Notes:
- I2C pins 3,5,27 and 28 (PG13, PG12, PE17 and PE16) have 10K pullup resistors to 3v3
- The Status LED (PD18) is common with the LED_PWM pin on the DSI/LVDS output
```
MangoPI MQ Pro GPIO header (dtb name: MangoPi MQ Pro)
Gpio Header:
func des pin pin des func
3v3 1 --o o-- 2 5v
i2c0 (2502000.i2c:205) PG13 3 --o o-- 4 5v
i2c0 (2502000.i2c:204) PG12 5 --o o-- 6 gnd
free (39) PB7 7 --o o-- 8 PB8 uart0 (2500000.serial:40)
gnd 9 --o o-- 10 PB9 uart0 (2500000.serial:41)
free (117) PD21 11 --o o-- 12 PB5 free (37)
free (118) PD22 13 --o o-- 14 gnd
free (32) PB0 15 --o o-- 16 PB1 free (33)
3v3 17 --o o-- 18 PD14 spi1 (4026000.spi:110)
spi1 (4026000.spi:108) PD12 19 --o o-- 20 gnd
spi1 (4026000.spi:109) PD13 21 --o o-- 22 PC1 free (65)
spi1 (4026000.spi:107) PD11 23 --o o-- 24 PD10 spi1 (4026000.spi:106)
gnd 25 --o o-- 26 PD15 spi1 (4026000.spi:111)
i2c3 (2502c00.i2c:145) PE17 27 --o o-- 28 PE16 i2c3 (2502c00.i2c:144)
free (42) PB10 29 --o o-- 30 gnd
free (43) PB11 31 --o o-- 32 PC0 free (64)
free (44) PB12 33 --o o-- 34 gnd
free (38) PB6 35 --o o-- 36 PB2 free (34)
free (113) PD17 37 --o o-- 38 PB3 free (35)
gnd 39 --o o-- 40 PB4 free (36)
Other gpio outputs of interest:
-- PD18: Blue Status Led - gpio (2000000.pinctrl:114)
Notes:
- I2C pins 3,5,27 and 28 (PG13, PG12, PE17 and PE16) have 10K pullup resistors to 3v3
- The Status LED (PD18) is common with the LED_PWM pin on the DSI/LVDS output
+425
View File
@@ -0,0 +1,425 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
// Copyright (C) 2022 Samuel Holland <samuel@sholland.org>
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/leds/common.h>
/dts-v1/;
#include "sun20i-d1.dtsi"
#include "sun20i-common-regulators.dtsi"
/ {
model = "MangoPi MQ Pro";
compatible = "widora,mangopi-mq-pro", "allwinner,sun20i-d1";
aliases {
ethernet0 = &rtl8723ds;
serial0 = &uart0;
};
chosen {
stdout-path = "serial0:115200n8";
};
hdmi_connector: connector {
compatible = "hdmi-connector";
type = "c";
port {
hdmi_connector_in: endpoint {
remote-endpoint = <&hdmi_out_connector>;
};
};
};
leds {
compatible = "gpio-leds";
led-0 {
color = <LED_COLOR_ID_BLUE>;
function = LED_FUNCTION_STATUS;
gpios = <&pio 3 18 GPIO_ACTIVE_HIGH>; /* PD18 */
};
};
reg_avdd2v8: avdd2v8 {
compatible = "regulator-fixed";
regulator-name = "avdd2v8";
regulator-min-microvolt = <2800000>;
regulator-max-microvolt = <2800000>;
vin-supply = <&reg_vcc_3v3>;
};
reg_dvdd: dvdd {
compatible = "regulator-fixed";
regulator-name = "dvdd";
regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <1200000>;
vin-supply = <&reg_vcc_3v3>;
};
reg_vdd_cpu: vdd-cpu {
compatible = "regulator-fixed";
regulator-name = "vdd-cpu";
regulator-min-microvolt = <1100000>;
regulator-max-microvolt = <1100000>;
vin-supply = <&reg_vcc>;
};
wifi_pwrseq: wifi-pwrseq {
compatible = "mmc-pwrseq-simple";
reset-gpios = <&pio 6 17 GPIO_ACTIVE_LOW>; /* PG17 */
};
};
&cpu0 {
cpu-supply = <&reg_vdd_cpu>;
};
&dcxo {
clock-frequency = <24000000>;
};
&codec {
routing = "Internal Speaker", "HPOUTL",
"Internal Speaker", "HPOUTR";
widgets = "Speaker", "Internal Speaker";
status = "okay";
};
&de {
status = "okay";
};
&ehci1 {
status = "okay";
};
&hdmi {
status = "okay";
};
&hdmi_out {
hdmi_out_connector: endpoint {
remote-endpoint = <&hdmi_connector_in>;
};
};
&hdmi_phy {
status = "okay";
};
&mmc0 {
bus-width = <4>;
cd-gpios = <&pio 5 6 GPIO_ACTIVE_HIGH>; /* PF6 */
disable-wp;
vmmc-supply = <&reg_vcc_3v3>;
vqmmc-supply = <&reg_vcc_3v3>;
pinctrl-0 = <&mmc0_pins>;
pinctrl-names = "default";
status = "okay";
};
&mmc1 {
bus-width = <4>;
mmc-pwrseq = <&wifi_pwrseq>;
non-removable;
vmmc-supply = <&reg_vcc_3v3>;
vqmmc-supply = <&reg_vcc_3v3>;
pinctrl-0 = <&mmc1_pins>;
pinctrl-names = "default";
status = "okay";
rtl8723ds: wifi@1 {
reg = <1>;
interrupt-parent = <&pio>;
interrupts = <6 10 IRQ_TYPE_LEVEL_LOW>; /* PG10 */
interrupt-names = "host-wake";
};
};
&ohci1 {
status = "okay";
};
&pio {
vcc-pe-supply = <&reg_avdd2v8>;
/omit-if-no-ref/
i2c0_pg12_pins: i2c0-pg12-pins {
pins = "PG12", "PG13";
function = "i2c0";
};
/omit-if-no-ref/
i2c1_pb4_pins: i2c1-pb4-pins {
pins = "PB4", "PB5";
function = "i2c1";
};
/omit-if-no-ref/
i2c2_pb0_pins: i2c2-pb0-pins {
pins = "PB0", "PB1";
function = "i2c2";
};
/omit-if-no-ref/
i2c2_pc0_pins: i2c2-pc0-pins {
pins = "PC0", "PC1";
function = "i2c2";
};
/omit-if-no-ref/
i2c3_pe16_pins: i2c3-pe16-pins {
pins = "PE16", "PE17";
function = "i2c3";
};
/omit-if-no-ref/
uart2_pc0_pins: uart2-pc0-pins {
pins = "PC0", "PC1";
function = "uart2";
};
/omit-if-no-ref/
uart3_pd10_pins: uart3-pd10-pins {
pins = "PD10", "PD11";
function = "uart3";
};
/omit-if-no-ref/
uart3_pd13_rts_cts_pins: uart3-pd13-rts-cts-pins {
pins = "PD13", "PD14";
function = "uart3";
};
/omit-if-no-ref/
uart3_pb6_pins: uart3-pb6-pins {
pins = "PB6", "PB7";
function = "uart3";
};
/omit-if-no-ref/
uart4_pb2_pins: uart4-pb2-pins {
pins = "PB2", "PB3";
function = "uart4";
};
/omit-if-no-ref/
uart5_pb4_pins: uart5-pb4-pins {
pins = "PB4", "PB5";
function = "uart5";
};
/omit-if-no-ref/
pwm0_pb5_pin: pwm0-pb5-pin {
pins = "PB5";
function = "pwm0";
};
/omit-if-no-ref/
pwm0_pb12_pin: pwm0-pb12-pin {
pins = "PB12";
function = "pwm0";
};
/omit-if-no-ref/
pwm0_pg12_pin: pwm0-pg12-pin {
pins = "PG12";
function = "pwm0";
};
/omit-if-no-ref/
pwm1_pb6_pin: pwm1-pb6-pin {
pins = "PB6";
function = "pwm1";
};
/omit-if-no-ref/
pwm1_pd17_pin: pwm1-pd17-pin {
pins = "PD17";
function = "pwm1";
};
/omit-if-no-ref/
pwm2_pb11_pin: pwm2-pb11-pin {
pins = "PB11";
function = "pwm2";
};
/omit-if-no-ref/
pwm2_pg13_pin: pwm2-pg13-pin {
pins = "PG13";
function = "pwm2";
};
/omit-if-no-ref/
pwm3_pb0_pin: pwm3-pb0-pin {
pins = "PB0";
function = "pwm3";
};
/omit-if-no-ref/
pwm4_pb1_pin: pwm4-pb1-pin {
pins = "PB1";
function = "pwm4";
};
/omit-if-no-ref/
pwm5_pb8_pin: pwm5-pb8-pin {
pins = "PB8";
function = "pwm5";
};
/omit-if-no-ref/
pwm5_pd21_pin: pwm5-pd21-pin {
pins = "PD21";
function = "pwm5";
};
/omit-if-no-ref/
pwm6_pb9_pin: pwm6-pb9-pin {
pins = "PB9";
function = "pwm6";
};
/omit-if-no-ref/
pwm7_pb10_pin: pwm7-pb10-pin {
pins = "PB10";
function = "pwm7";
};
/omit-if-no-ref/
pwm7_pd22_pin: pwm7-pd22-pin {
pins = "PD22";
function = "pwm7";
};
/omit-if-no-ref/
pwm7_pe16_pin: pwm7-pe16-pin {
pins = "PE16";
function = "pwm7";
};
};
/* disabled
&pwm {
pinctrl-0 = <&pwm0_pb12_pin>, <&pwm1_pb6_pin>, <&pwm2_pb11_pin>, <&pwm4_pb1_pin>;
pinctrl-names = "default";
status = "okay";
};
*/
&spi1 {
pinctrl-0 = <&spi1_pd_pins>; // can conflict uart3
pinctrl-names = "default";
status = "okay";
};
&i2c0 {
pinctrl-0 = <&i2c0_pg12_pins>;
pinctrl-names = "default";
status = "okay";
};
/* disabled
&i2c1 {
pinctrl-0 = <&i2c1_pb4_pins>; // can conflict uart5
pinctrl-names = "default";
status = "okay";
};
*/
/* disabled
&i2c2 {
pinctrl-0 = <&i2c2_pb0_pins>;
pinctrl-names = "default";
status = "okay";
};
*/
/* disabled
&i2c2 {
pinctrl-0 = <&i2c2_pc0_pins>; // can conflict uart2
pinctrl-names = "default";
status = "okay";
};
*/
&i2c3 {
pinctrl-0 = <&i2c3_pe16_pins>;
pinctrl-names = "default";
status = "okay";
};
&uart0 {
pinctrl-0 = <&uart0_pb8_pins>;
pinctrl-names = "default";
status = "okay";
};
&uart1 {
uart-has-rtscts;
pinctrl-0 = <&uart1_pg6_pins>, <&uart1_pg8_rts_cts_pins>;
pinctrl-names = "default";
status = "okay";
bluetooth {
compatible = "realtek,rtl8723ds-bt";
device-wake-gpios = <&pio 6 18 GPIO_ACTIVE_HIGH>; /* PG18 */
enable-gpios = <&pio 6 15 GPIO_ACTIVE_HIGH>; /* PG15 */
host-wake-gpios = <&pio 6 14 GPIO_ACTIVE_HIGH>; /* PG14 */
};
};
/* disabled
&uart2 {
pinctrl-0 = <&uart2_pc0_pins>;
pinctrl-names = "default";
status = "okay";
};
*/
/* disabled
&uart3 {
uart-has-rtscts;
pinctrl-0 = <&uart3_pd10_pins>, <&uart3_pd13_rts_cts_pins>; // conflicts spi1
pinctrl-names = "default";
status = "okay";
};
*/
/* disabled
&uart3 {
pinctrl-0 = <&uart3_pb6_pins>;
pinctrl-names = "default";
status = "okay";
};
*/
/* disabled
&uart4 {
pinctrl-0 = <&uart4_pb2_pins>;
pinctrl-names = "default";
status = "okay";
};
*/
/* disabled
&uart5 {
pinctrl-0 = <&uart5_pb4_pins>; // conflicts i2c1
pinctrl-names = "default";
status = "okay";
};
*/
&usb_otg {
dr_mode = "peripheral";
status = "okay";
};
&usbphy {
usb1_vbus-supply = <&reg_vcc>;
status = "okay";
};
+45
View File
@@ -0,0 +1,45 @@
# A device tree for my LORA HAT..
Designed to mimic the standard PI gpio assignments for use with PI HAT's
* i2c0 and spi1 ports are located on the same Pins as the PI I2C-1 and SPI-0 on the PI gpio header
* i2c3 is on the same pins as I2C-0 on the Pi (normally reserved as the Pi EEPROM Data pins)
In addition it:
* Brings uart4 out on pins 36 and 38 (so I can leave the console free)
* Has 4 PWM channels for a RGB status led, and I2C screen brightness
Nb: screen is https://www.waveshare.com/wiki/3.5inch_RPi_LCD_(A)
```
MangoPI MQ Pro GPIO header (dtb name: MangoPi MQ Pro)
Gpio Header:
func des pin pin des func
3v3 1 --o o-- 2 5v
i2c0.sda (2502000.i2c:205) PG13 3 --o o-- 4 5v
i2c0.scl (2502000.i2c:204) PG12 5 --o o-- 6 gnd
free (39) PB7 7 --o o-- 8 PB8 uart0.tx (2500000.serial:40)
gnd 9 --o o-- 10 PB9 uart0.rx (2500000.serial:41)
free (117) PD21 11 --o o-- 12 PB5 free (37)
free (118) PD22 13 --o o-- 14 gnd
free (32) PB0 15 --o o-- 16 PB1 pwm4 (2000c00.pwm:33)
3v3 17 --o o-- 18 PD14 spi1.hold (4026000.spi:110)
spi1.mosi (4026000.spi:108) PD12 19 --o o-- 20 gnd
spi1.miso (4026000.spi:109) PD13 21 --o o-- 22 PC1 free (65)
spi1.clk (4026000.spi:107) PD11 23 --o o-- 24 PD10 spi1.cs (4026000.spi:106)
gnd 25 --o o-- 26 PD15 spi1.wp (4026000.spi:111)
i2c3.sda (2502c00.i2c:145) PE17 27 --o o-- 28 PE16 i2c3.sck (2502c00.i2c:144)
free (42) PB10 29 --o o-- 30 gnd
pwm2 (2000c00.pwm:43) PB11 31 --o o-- 32 PC0 free (64)
pwm0 (2000c00.pwm:44) PB12 33 --o o-- 34 gnd
pwm1 (2000c00.pwm:38) PB6 35 --o o-- 36 PB2 uart4.tx (2501000.serial:34)
free (113) PD17 37 --o o-- 38 PB3 uart4.rx (2501000.serial:35)
gnd 39 --o o-- 40 PB4 free (36)
Other gpio outputs of interest:
-- PD18: Blue Status Led - gpio (2000000.pinctrl:114)
Notes:
- I2C pins 3,5,27 and 28 (PG13, PG12, PE17 and PE16) have 10K pullup resistors to 3v3
- The Status LED (PD18) is common with the LED_PWM pin on the DSI/LVDS output
```
@@ -211,10 +211,106 @@
pins = "PB4", "PB5";
function = "uart5";
};
/omit-if-no-ref/
pwm0_pb5_pin: pwm0-pb5-pin {
pins = "PB5";
function = "pwm0";
};
/omit-if-no-ref/
pwm0_pb12_pin: pwm0-pb12-pin {
pins = "PB12";
function = "pwm0";
};
/omit-if-no-ref/
pwm0_pg12_pin: pwm0-pg12-pin {
pins = "PG12";
function = "pwm0";
};
/omit-if-no-ref/
pwm1_pb6_pin: pwm1-pb6-pin {
pins = "PB6";
function = "pwm1";
};
/omit-if-no-ref/
pwm1_pd17_pin: pwm1-pd17-pin {
pins = "PD17";
function = "pwm1";
};
/omit-if-no-ref/
pwm2_pb11_pin: pwm2-pb11-pin {
pins = "PB11";
function = "pwm2";
};
/omit-if-no-ref/
pwm2_pg13_pin: pwm2-pg13-pin {
pins = "PG13";
function = "pwm2";
};
/omit-if-no-ref/
pwm3_pb0_pin: pwm3-pb0-pin {
pins = "PB0";
function = "pwm3";
};
/omit-if-no-ref/
pwm4_pb1_pin: pwm4-pb1-pin {
pins = "PB1";
function = "pwm4";
};
/omit-if-no-ref/
pwm5_pb8_pin: pwm5-pb8-pin {
pins = "PB8";
function = "pwm5";
};
/omit-if-no-ref/
pwm5_pd21_pin: pwm5-pd21-pin {
pins = "PD21";
function = "pwm5";
};
/omit-if-no-ref/
pwm6_pb9_pin: pwm6-pb9-pin {
pins = "PB9";
function = "pwm6";
};
/omit-if-no-ref/
pwm7_pb10_pin: pwm7-pb10-pin {
pins = "PB10";
function = "pwm7";
};
/omit-if-no-ref/
pwm7_pd22_pin: pwm7-pd22-pin {
pins = "PD22";
function = "pwm7";
};
/omit-if-no-ref/
pwm7_pe16_pin: pwm7-pe16-pin {
pins = "PE16";
function = "pwm7";
};
};
&pwm {
pinctrl-0 = <&pwm0_pb12_pin>, <&pwm1_pb6_pin>, <&pwm2_pb11_pin>, <&pwm4_pb1_pin>;
pinctrl-names = "default";
status = "okay";
};
&spi1 {
pinctrl-0 = <&spi1_pd_pins>; // conflicts uart3
pinctrl-0 = <&spi1_pd_pins>; // can conflict uart3
pinctrl-names = "default";
status = "okay";
};
@@ -227,29 +323,33 @@
/* disabled
&i2c1 {
pinctrl-0 = <&i2c1_pb4_pins>; // conflicts uart5
pinctrl-0 = <&i2c1_pb4_pins>; // can conflict uart5
pinctrl-names = "default";
status = "okay";
};
*/
/* disabled
&i2c2 {
pinctrl-0 = <&i2c2_pb0_pins>;
pinctrl-names = "default";
status = "okay";
};
*/
/* disabled
&i2c2 {
pinctrl-0 = <&i2c2_pc0_pins>; // conflicts uart2
pinctrl-0 = <&i2c2_pc0_pins>; // can conflict uart2
pinctrl-names = "default";
status = "okay";
};
*/
&i2c3 {
pinctrl-0 = <&i2c3_pe16_pins>;
pinctrl-names = "default";
status = "okay";
};
*/
&uart0 {
pinctrl-0 = <&uart0_pb8_pins>;
@@ -271,20 +371,24 @@
};
};
/* Disabled
/* disabled
&uart2 {
pinctrl-0 = <&uart2_pc0_pins>;
pinctrl-names = "default";
status = "okay";
};
*/
/* disabled
&uart3 {
uart-has-rtscts;
pinctrl-0 = <&uart3_pd10_pins>, <&uart3_pd13_rts_cts_pins>; // conflicts spi1
pinctrl-names = "default";
status = "okay";
};
*/
/* disabled
&uart3 {
pinctrl-0 = <&uart3_pb6_pins>;
pinctrl-names = "default";
@@ -298,7 +402,7 @@
status = "okay";
};
/* Disabled
/* disabled
&uart5 {
pinctrl-0 = <&uart5_pb4_pins>; // conflicts i2c1
pinctrl-names = "default";
-39
View File
@@ -1,39 +0,0 @@
# A device tree for my LORA HAT..
* Brings a UART out for talking to the HAT
* Leaves pins `7`, `13` and `15` free since these are used to control and monitor the HAT
* Has the SPI interface in case I add a screen, and an I2C interface for talking to peripherals.
Nb: screen is https://www.waveshare.com/wiki/3.5inch_RPi_LCD_(A)
```
MangoPI MQ Pro GPIO header (dtb name: MangoPi MQ Pro)
Gpio Header:
func des pin pin des func
3v3 1 --o o-- 2 5v
i2c0 (2502000.i2c:205) PG13 3 --o o-- 4 5v
i2c0 (2502000.i2c:204) PG12 5 --o o-- 6 gnd
free (39) PB7 7 --o o-- 8 PB8 uart0 (2500000.serial:40)
gnd 9 --o o-- 10 PB9 uart0 (2500000.serial:41)
free (117) PD21 11 --o o-- 12 PB5 free (37)
free (118) PD22 13 --o o-- 14 gnd
free (32) PB0 15 --o o-- 16 PB1 free (33)
3v3 17 --o o-- 18 PD14 spi1 (4026000.spi:110)
spi1 (4026000.spi:108) PD12 19 --o o-- 20 gnd
spi1 (4026000.spi:109) PD13 21 --o o-- 22 PC1 free (65)
spi1 (4026000.spi:107) PD11 23 --o o-- 24 PD10 spi1 (4026000.spi:106)
gnd 25 --o o-- 26 PD15 spi1 (4026000.spi:111)
free (145) PE17 27 --o o-- 28 PE16 free (144)
free (42) PB10 29 --o o-- 30 gnd
free (43) PB11 31 --o o-- 32 PC0 free (64)
free (44) PB12 33 --o o-- 34 gnd
free (38) PB6 35 --o o-- 36 PB2 uart4 (2501000.serial:34)
free (113) PD17 37 --o o-- 38 PB3 uart4 (2501000.serial:35)
gnd 39 --o o-- 40 PB4 free (36)
Other gpio outputs of interest:
-- PD18: Blue Status Led - gpio (2000000.pinctrl:114)
Notes:
- I2C pins 3,5,27 and 28 (PG13, PG12, PE17 and PE16) have 10K pullup resistors to 3v3
- The Status LED (PD18) is common with the LED_PWM pin on the DSI/LVDS output
```
+21 -21
View File
@@ -2,27 +2,27 @@
MangoPI MQ Pro GPIO header (dtb name: MangoPi MQ Pro)
Gpio Header:
func des pin pin des func
3v3 1 --o o-- 2 5v
i2c0.sda (2502000.i2c:205) PG13 3 --o o-- 4 5v
i2c0.sck (2502000.i2c:204) PG12 5 --o o-- 6 gnd
free (39) PB7 7 --o o-- 8 PB8 uart0.tx (2500000.serial:40)
gnd 9 --o o-- 10 PB9 uart0.rx (2500000.serial:41)
free (117) PD21 11 --o o-- 12 PB5 uart5.rx (2501400.serial:37)
free (118) PD22 13 --o o-- 14 gnd
free (32) PB0 15 --o o-- 16 PB1 free (33)
3v3 17 --o o-- 18 PD14 uart3.cts (2500c00.serial:110)
free (108) PD12 19 --o o-- 20 gnd
uart3.rts (2500c00.serial:109) PD13 21 --o o-- 22 PC1 uart2.rx (2500800.serial:65)
uart3.rx (2500c00.serial:107) PD11 23 --o o-- 24 PD10 uart3.tx (2500c00.serial:106)
gnd 25 --o o-- 26 PD15 free (111)
i2c3.sda (2502c00.i2c:145) PE17 27 --o o-- 28 PE16 i2c3.sck (2502c00.i2c:144)
free (42) PB10 29 --o o-- 30 gnd
free (43) PB11 31 --o o-- 32 PC0 uart2.tx (2500800.serial:64)
free (44) PB12 33 --o o-- 34 gnd
free (38) PB6 35 --o o-- 36 PB2 uart4.tx (2501000.serial:34)
free (113) PD17 37 --o o-- 38 PB3 uart4.rx (2501000.serial:35)
gnd 39 --o o-- 40 PB4 uart5.tx (2501400.serial:36)
func des pin pin des func
3v3 1 --o o-- 2 5v
i2c0.sda (2502000.i2c:205) PG13 3 --o o-- 4 5v
i2c0.sck (2502000.i2c:204) PG12 5 --o o-- 6 gnd
free (39) PB7 7 --o o-- 8 PB8 uart0.tx (2500000.serial:40)
gnd 9 --o o-- 10 PB9 uart0.rx (2500000.serial:41)
free (117) PD21 11 --o o-- 12 PB5 uart5.rx (2501400.serial:37)
free (118) PD22 13 --o o-- 14 gnd
free (32) PB0 15 --o o-- 16 PB1 free (33)
3v3 17 --o o-- 18 PD14 uart3.cts (2500c00.serial:110)
free (108) PD12 19 --o o-- 20 gnd
uart3.rts (2500c00.serial:109) PD13 21 --o o-- 22 PC1 uart2.rx (2500800.serial:65)
uart3.rx (2500c00.serial:107) PD11 23 --o o-- 24 PD10 uart3.tx (2500c00.serial:106)
gnd 25 --o o-- 26 PD15 free (111)
i2c3.sda (2502c00.i2c:145) PE17 27 --o o-- 28 PE16 i2c3.sck (2502c00.i2c:144)
free (42) PB10 29 --o o-- 30 gnd
free (43) PB11 31 --o o-- 32 PC0 uart2.tx (2500800.serial:64)
free (44) PB12 33 --o o-- 34 gnd
free (38) PB6 35 --o o-- 36 PB2 uart4.tx (2501000.serial:34)
free (113) PD17 37 --o o-- 38 PB3 uart4.rx (2501000.serial:35)
gnd 39 --o o-- 40 PB4 uart5.tx (2501400.serial:36)
Other gpio outputs of interest:
-- PD18: Blue Status Led - gpio (2000000.pinctrl:114)
+104 -6
View File
@@ -211,11 +211,109 @@
pins = "PB4", "PB5";
function = "uart5";
};
/omit-if-no-ref/
pwm0_pb5_pin: pwm0-pb5-pin {
pins = "PB5";
function = "pwm0";
};
/omit-if-no-ref/
pwm0_pb12_pin: pwm0-pb12-pin {
pins = "PB12";
function = "pwm0";
};
/omit-if-no-ref/
pwm0_pg12_pin: pwm0-pg12-pin {
pins = "PG12";
function = "pwm0";
};
/omit-if-no-ref/
pwm1_pb6_pin: pwm1-pb6-pin {
pins = "PB6";
function = "pwm1";
};
/omit-if-no-ref/
pwm1_pd17_pin: pwm1-pd17-pin {
pins = "PD17";
function = "pwm1";
};
/omit-if-no-ref/
pwm2_pb11_pin: pwm2-pb11-pin {
pins = "PB11";
function = "pwm2";
};
/omit-if-no-ref/
pwm2_pg13_pin: pwm2-pg13-pin {
pins = "PG13";
function = "pwm2";
};
/omit-if-no-ref/
pwm3_pb0_pin: pwm3-pb0-pin {
pins = "PB0";
function = "pwm3";
};
/omit-if-no-ref/
pwm4_pb1_pin: pwm4-pb1-pin {
pins = "PB1";
function = "pwm4";
};
/omit-if-no-ref/
pwm5_pb8_pin: pwm5-pb8-pin {
pins = "PB8";
function = "pwm5";
};
/omit-if-no-ref/
pwm5_pd21_pin: pwm5-pd21-pin {
pins = "PD21";
function = "pwm5";
};
/omit-if-no-ref/
pwm6_pb9_pin: pwm6-pb9-pin {
pins = "PB9";
function = "pwm6";
};
/omit-if-no-ref/
pwm7_pb10_pin: pwm7-pb10-pin {
pins = "PB10";
function = "pwm7";
};
/omit-if-no-ref/
pwm7_pd22_pin: pwm7-pd22-pin {
pins = "PD22";
function = "pwm7";
};
/omit-if-no-ref/
pwm7_pe16_pin: pwm7-pe16-pin {
pins = "PE16";
function = "pwm7";
};
};
/* Disabled
/* disabled
&pwm {
pinctrl-0 = <&pwm0_pb12_pin>, <&pwm1_pb6_pin>, <&pwm2_pb11_pin>, <&pwm4_pb1_pin>;
pinctrl-names = "default";
status = "okay";
};
*/
/* disabled
&spi1 {
pinctrl-0 = <&spi1_pd_pins>; // conflicts uart3
pinctrl-0 = <&spi1_pd_pins>; // can conflict uart3
pinctrl-names = "default";
status = "okay";
};
@@ -227,9 +325,9 @@
status = "okay";
};
/* Disabled
/* disabled
&i2c1 {
pinctrl-0 = <&i2c1_pb4_pins>; // conflicts uart5
pinctrl-0 = <&i2c1_pb4_pins>; // can conflict uart5
pinctrl-names = "default";
status = "okay";
};
@@ -244,7 +342,7 @@
*/
&i2c2 {
pinctrl-0 = <&i2c2_pc0_pins>; // conflicts uart2
pinctrl-0 = <&i2c2_pc0_pins>; // can conflict uart2
pinctrl-names = "default";
status = "okay";
};
@@ -288,7 +386,7 @@
status = "okay";
};
/* Disabled
/* disabled
&uart3 {
pinctrl-0 = <&uart3_pb6_pins>;
pinctrl-names = "default";
@@ -2,27 +2,27 @@
MangoPI MQ Pro GPIO header (dtb name: MangoPi MQ Pro)
Gpio Header:
func des pin pin des func
3v3 1 --o o-- 2 5v
i2c0.sda (2502000.i2c:205) PG13 3 --o o-- 4 5v
i2c0.sck (2502000.i2c:204) PG12 5 --o o-- 6 gnd
uart3.rx (2500c00.serial:39 PB7 7 --o o-- 8 PB8 uart0.tx (2500000.serial:40)
gnd 9 --o o-- 10 PB9 uart0.rx (2500000.serial:41)
free (117) PD21 11 --o o-- 12 PB5 i2c1.sda (2502400.i2c:37)
free (118) PD22 13 --o o-- 14 gnd
i2c2.sck (2502800.i2c:32) PB0 15 --o o-- 16 PB1 i2c2.sda (2502800.i2c:33)
3v3 17 --o o-- 18 PD14 spi1.hold (4026000.spi:110)
spi1.mosi (4026000.spi:108) PD12 19 --o o-- 20 gnd
spi1.miso (4026000.spi:109) PD13 21 --o o-- 22 PC1 uart2.rx (2500800.serial:65)
spi1.clk (4026000.spi:107) PD11 23 --o o-- 24 PD10 spi1.cs (4026000.spi:106)
gnd 25 --o o-- 26 PD15 spi1.wp (4026000.spi:111)
i2c3.sda (2502c00.i2c:145) PE17 27 --o o-- 28 PE16 i2c3.sck (2502c00.i2c:144)
free (42) PB10 29 --o o-- 30 gnd
free (43) PB11 31 --o o-- 32 PC0 uart2.tx (2500800.serial:64)
free (44) PB12 33 --o o-- 34 gnd
uart3.tx (2500c00.serial:38) PB6 35 --o o-- 36 PB2 uart4.tx (2501000.serial:34)
free (113) PD17 37 --o o-- 38 PB3 uart4.rx (2501000.serial:35)
gnd 39 --o o-- 40 PB4 i2c1.sck (2502400.i2c:36)
func des pin pin des func
3v3 1 --o o-- 2 5v
i2c0.sda (2502000.i2c:205) PG13 3 --o o-- 4 5v
i2c0.sck (2502000.i2c:204) PG12 5 --o o-- 6 gnd
uart3.rx (2500c00.serial:39 PB7 7 --o o-- 8 PB8 uart0.tx (2500000.serial:40)
gnd 9 --o o-- 10 PB9 uart0.rx (2500000.serial:41)
free (117) PD21 11 --o o-- 12 PB5 i2c1.sda (2502400.i2c:37)
free (118) PD22 13 --o o-- 14 gnd
i2c2.sck (2502800.i2c:32) PB0 15 --o o-- 16 PB1 i2c2.sda (2502800.i2c:33)
3v3 17 --o o-- 18 PD14 spi1.hold (4026000.spi:110)
spi1.mosi (4026000.spi:108) PD12 19 --o o-- 20 gnd
spi1.miso (4026000.spi:109) PD13 21 --o o-- 22 PC1 uart2.rx (2500800.serial:65)
spi1.clk (4026000.spi:107) PD11 23 --o o-- 24 PD10 spi1.cs (4026000.spi:106)
gnd 25 --o o-- 26 PD15 spi1.wp (4026000.spi:111)
i2c3.sda (2502c00.i2c:145) PE17 27 --o o-- 28 PE16 i2c3.sck (2502c00.i2c:144)
free (42) PB10 29 --o o-- 30 gnd
free (43) PB11 31 --o o-- 32 PC0 uart2.tx (2500800.serial:64)
free (44) PB12 33 --o o-- 34 gnd
uart3.tx (2500c00.serial:38) PB6 35 --o o-- 36 PB2 uart4.tx (2501000.serial:34)
free (113) PD17 37 --o o-- 38 PB3 uart4.rx (2501000.serial:35)
gnd 39 --o o-- 40 PB4 i2c1.sck (2502400.i2c:36)
Other gpio outputs of interest:
-- PD18: Blue Status Led - gpio (2000000.pinctrl:114)
@@ -211,10 +211,108 @@
pins = "PB4", "PB5";
function = "uart5";
};
/omit-if-no-ref/
pwm0_pb5_pin: pwm0-pb5-pin {
pins = "PB5";
function = "pwm0";
};
/omit-if-no-ref/
pwm0_pb12_pin: pwm0-pb12-pin {
pins = "PB12";
function = "pwm0";
};
/omit-if-no-ref/
pwm0_pg12_pin: pwm0-pg12-pin {
pins = "PG12";
function = "pwm0";
};
/omit-if-no-ref/
pwm1_pb6_pin: pwm1-pb6-pin {
pins = "PB6";
function = "pwm1";
};
/omit-if-no-ref/
pwm1_pd17_pin: pwm1-pd17-pin {
pins = "PD17";
function = "pwm1";
};
/omit-if-no-ref/
pwm2_pb11_pin: pwm2-pb11-pin {
pins = "PB11";
function = "pwm2";
};
/omit-if-no-ref/
pwm2_pg13_pin: pwm2-pg13-pin {
pins = "PG13";
function = "pwm2";
};
/omit-if-no-ref/
pwm3_pb0_pin: pwm3-pb0-pin {
pins = "PB0";
function = "pwm3";
};
/omit-if-no-ref/
pwm4_pb1_pin: pwm4-pb1-pin {
pins = "PB1";
function = "pwm4";
};
/omit-if-no-ref/
pwm5_pb8_pin: pwm5-pb8-pin {
pins = "PB8";
function = "pwm5";
};
/omit-if-no-ref/
pwm5_pd21_pin: pwm5-pd21-pin {
pins = "PD21";
function = "pwm5";
};
/omit-if-no-ref/
pwm6_pb9_pin: pwm6-pb9-pin {
pins = "PB9";
function = "pwm6";
};
/omit-if-no-ref/
pwm7_pb10_pin: pwm7-pb10-pin {
pins = "PB10";
function = "pwm7";
};
/omit-if-no-ref/
pwm7_pd22_pin: pwm7-pd22-pin {
pins = "PD22";
function = "pwm7";
};
/omit-if-no-ref/
pwm7_pe16_pin: pwm7-pe16-pin {
pins = "PE16";
function = "pwm7";
};
};
/* disabled
&pwm {
pinctrl-0 = <&pwm0_pb12_pin>, <&pwm1_pb6_pin>, <&pwm2_pb11_pin>, <&pwm4_pb1_pin>;
pinctrl-names = "default";
status = "okay";
};
*/
&spi1 {
pinctrl-0 = <&spi1_pd_pins>; // conflicts uart3
pinctrl-0 = <&spi1_pd_pins>; // can conflict uart3
pinctrl-names = "default";
status = "okay";
};
@@ -226,7 +324,7 @@
};
&i2c1 {
pinctrl-0 = <&i2c1_pb4_pins>; // conflicts uart5
pinctrl-0 = <&i2c1_pb4_pins>; // can conflict uart5
pinctrl-names = "default";
status = "okay";
};
@@ -239,7 +337,7 @@
/* disabled
&i2c2 {
pinctrl-0 = <&i2c2_pc0_pins>; // conflicts uart2
pinctrl-0 = <&i2c2_pc0_pins>; // can conflict uart2
pinctrl-names = "default";
status = "okay";
};
@@ -277,7 +375,7 @@
status = "okay";
};
/* Disabled
/* disabled
&uart3 {
uart-has-rtscts;
pinctrl-0 = <&uart3_pd10_pins>, <&uart3_pd13_rts_cts_pins>; // conflicts spi1
@@ -298,7 +396,7 @@
status = "okay";
};
/* Disabled
/* disabled
&uart5 {
pinctrl-0 = <&uart5_pb4_pins>; // conflicts i2c1
pinctrl-names = "default";