Add variants for both eMMC and NAND, add automatic eMMC upgrade script.
continuous-integration/drone/push Build is passing Details

Signed-off-by: Yilin Sun <imi415@imi.moe>
This commit is contained in:
Yilin Sun 2024-04-21 14:25:00 +08:00
parent f7d56f4438
commit a9e25ef8b9
Signed by: imi415
GPG Key ID: 17F01E106F9F5E0A
5 changed files with 388 additions and 4 deletions

View File

@ -0,0 +1,295 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
// Copyright (C) 2022 Arm Ltd.
/*
* Common peripherals and configurations for MangoPi MQ-R boards.
*/
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/leds/common.h>
/dts-v1/;
#include <arm/allwinner/sun8i-t113s.dtsi>
/ {
model = "Tronlong TLT113-MiniEVM";
compatible = "tronlong,tlt113-minievm", "allwinner,sun8i-t113i";
aliases {
serial2 = &uart2;
mmc0 = &mmc0;
mmc2 = &mmc2;
};
chosen {
stdout-path = "serial2:115200n8";
};
leds {
compatible = "gpio-leds";
led-0 {
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_HEARTBEAT;
gpios = <&pio 2 0 GPIO_ACTIVE_HIGH>; /* PC0 */
linux,default-trigger = "heartbeat";
};
led-1 {
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_DISK;
gpios = <&pio 2 1 GPIO_ACTIVE_HIGH>; /* PC1 */
linux,default-trigger = "mmc2";
};
led-2 {
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_STATUS;
gpios = <&pio 6 11 GPIO_ACTIVE_HIGH>; /* PG11 */
linux,default-trigger = "default-on";
};
};
hdmi-connector {
compatible = "hdmi-connector";
ddc-i2c-bus = <&i2c0>;
label = "hdmi";
type = "a";
port {
hdmi_connector_in: endpoint {
remote-endpoint = <&bridge_hdmi_out>;
};
};
};
/* EC2232E DC/DC regulator on SoM */
reg_vcc5v: regulator-5v {
compatible = "regulator-fixed";
regulator-name = "vcc-5v";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
regulator-always-on;
};
/* EC2232E DC/DC regulator on SoM */
reg_3v3: regulator-3v3 {
compatible = "regulator-fixed";
regulator-name = "vcc-3v3";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
vin-supply = <&reg_vcc5v>;
};
/* EC2232E DC/DC regulator on SoM, also supplying VDD-SYS */
reg_vcc_core: regulator-core {
compatible = "regulator-fixed";
regulator-name = "vcc-core";
regulator-min-microvolt = <880000>;
regulator-max-microvolt = <880000>;
vin-supply = <&reg_vcc5v>;
};
reg_vbus_supply: regulator-vbus-otg {
compatible = "regulator-fixed";
regulator-name = "vbus-otg";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
gpio = <&pio 1 12 GPIO_ACTIVE_HIGH>;
vin-supply = <&reg_vcc5v>;
};
};
&cpu0 {
cpu-supply = <&reg_vcc_core>;
};
&cpu1 {
cpu-supply = <&reg_vcc_core>;
};
&wdt {
status = "okay";
};
&dcxo {
clock-frequency = <24000000>;
};
&ehci1 {
status = "okay";
};
&ohci1 {
status = "okay";
};
&pio {
vcc-pb-supply = <&reg_3v3>;
vcc-pd-supply = <&reg_3v3>;
vcc-pe-supply = <&reg_3v3>;
vcc-pf-supply = <&reg_3v3>;
vcc-pg-supply = <&reg_3v3>;
uart2_pg_pins: uart2-pg-pins {
pins = "PG17", "PG18";
function = "uart2";
};
rgmii_pg_pins: rgmii-pg-pins {
pins = "PG0", "PG1", "PG2", "PG3", "PG4",
"PG5", "PG6", "PG7", "PG8", "PG9",
"PG10", "PG12", "PG14", "PG15";
function = "emac";
};
i2c0_pins: i2c0-pins {
pins = "PB10", "PB11";
function = "i2c0";
};
i2c2_pins: i2c2-pins {
pins = "PE12", "PE13";
function = "i2c2";
};
};
&uart2 {
pinctrl-names = "default";
pinctrl-0 = <&uart2_pg_pins>;
status = "okay";
};
&mmc0 {
pinctrl-0 = <&mmc0_pins>;
pinctrl-names = "default";
vmmc-supply = <&reg_3v3>;
cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>; /* PF6 */
disable-wp;
bus-width = <4>;
status = "okay";
};
&mmc2 {
pinctrl-0 = <&mmc2_pins>;
pinctrl-names = "default";
vmmc-supply = <&reg_3v3>;
non-removable;
disable-wp;
bus-width = <4>;
status = "okay";
};
&emac {
pinctrl-0 = <&rgmii_pg_pins>;
pinctrl-names = "default";
status = "okay";
phy-handle = <&ephy>;
phy-mode = "rgmii-id";
allwinner,tx-delay-ps = <200>;
allwinner,rx-delay-ps = <0>;
phy-supply = <&reg_3v3>;
};
&mdio {
ephy: ethernet-phy@0 {
reg = <0>;
reset-gpios = <&pio 6 13 GPIO_ACTIVE_LOW>; /* PG13 */
rx-internal-delay-ps = <600>;
tx-internal-delay-ps = <450>;
reset-assert-us = <10000>;
reset-deassert-us = <1000000>;
};
};
&i2c0 {
pinctrl-names = "default";
pinctrl-0 = <&i2c0_pins>;
status = "okay";
};
&i2c2 {
pinctrl-names = "default";
pinctrl-0 = <&i2c2_pins>;
status = "okay";
hdmi_lontium_lt8912: hdmi@48 {
compatible = "lontium,lt8912b";
reg = <0x48>;
reset-gpios = <&pio 4 11 GPIO_ACTIVE_LOW>; /* PE11 */
status = "okay";
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
bridge_dsi_in: endpoint {
data-lanes = <0 1 2 3>;
remote-endpoint = <&host_dsi_out>;
};
};
port@1 {
reg = <1>;
bridge_hdmi_out: endpoint {
remote-endpoint = <&hdmi_connector_in>;
};
};
};
};
tcpc@60 {
compatible = "willsemi,wusb3801";
reg = <0x60>;
interrupt-parent = <&pio>;
interrupts = <4 3 IRQ_TYPE_LEVEL_LOW>; /* PE3 */
connector {
compatible = "usb-c-connector";
label = "USB-C";
vbus-supply = <&reg_vbus_supply>;
power-role = "source";
data-role = "dual";
typec-power-opmode = "default";
pd-disable;
};
};
};
&dsi {
status = "okay";
ports {
#address-cells = <1>;
#size-cells = <0>;
port {
host_dsi_out: endpoint {
remote-endpoint = <&bridge_dsi_in>;
};
};
};
};
&dphy {
status = "okay";
};
&tcon_top {
status = "okay";
};
&tcon_lcd0 {
status = "okay";
};
&usb_otg {
dr_mode = "peripheral";
status = "okay";
};
&usbphy {
usb1_vbus-supply = <&reg_vcc5v>;
status = "okay";
};

View File

@ -17,6 +17,7 @@
aliases {
serial2 = &uart2;
mmc0 = &mmc0;
};
chosen {
@ -28,7 +29,7 @@
led-0 {
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_STATUS;
function = LED_FUNCTION_HEARTBEAT;
gpios = <&pio 2 0 GPIO_ACTIVE_HIGH>; /* PC0 */
linux,default-trigger = "heartbeat";
};
@ -42,7 +43,7 @@
led-2 {
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_HEARTBEAT;
function = LED_FUNCTION_STATUS;
gpios = <&pio 6 11 GPIO_ACTIVE_HIGH>; /* PG11 */
linux,default-trigger = "default-on";
};
@ -168,7 +169,7 @@
pinctrl-0 = <&mmc0_pins>;
pinctrl-names = "default";
vmmc-supply = <&reg_3v3>;
cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>;
cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>; /* PF6 */
disable-wp;
bus-width = <4>;
status = "okay";

View File

@ -23,9 +23,14 @@ BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_lwgw_PATH)/patches/kernel"
BR2_LINUX_KERNEL_DEFCONFIG="sunxi"
BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_lwgw_PATH)/board/t113i-minievm/linux.fragment"
BR2_LINUX_KERNEL_DTS_SUPPORT=y
BR2_LINUX_KERNEL_CUSTOM_DTS_PATH="$(BR2_EXTERNAL_lwgw_PATH)/board/t113i-minievm/sun8i-t113i-tronlong-tlt113-minievm.dts"
BR2_LINUX_KERNEL_CUSTOM_DTS_PATH="$(BR2_EXTERNAL_lwgw_PATH)/board/t113i-minievm/sun8i-t113i-tronlong-tlt113-minievm-emmc.dts $(BR2_EXTERNAL_lwgw_PATH)/board/t113i-minievm/sun8i-t113i-tronlong-tlt113-minievm-nand.dts"
BR2_LINUX_KERNEL_DTB_OVERLAY_SUPPORT=y
BR2_LINUX_KERNEL_INSTALL_TARGET=y
BR2_PACKAGE_DOSFSTOOLS=y
BR2_PACKAGE_DOSFSTOOLS_MKFS_FAT=y
BR2_PACKAGE_E2FSPROGS=y
BR2_PACKAGE_E2FSPROGS_E4DEFRAG=y
BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y
BR2_PACKAGE_MTD=y
BR2_PACKAGE_GPSD=y
BR2_PACKAGE_GPSD_USER=y

View File

@ -0,0 +1,10 @@
[Unit]
Description=Execute SD Card upgrade
[Service]
Type=oneshot
ExecStart=/opt/sdcard_upgrade.sh
StandardOutput=journal
[Install]
WantedBy=multi-user.target

View File

@ -0,0 +1,73 @@
#!/bin/bash
set -e
set -x
LED_INDICATOR_NAME="green:status"
LED_INDICATOR_PATH="/sys/class/leds/${LED_INDICATOR_NAME}"
LED_INDICATOR_TRIG="none"
MMC_CARD_DEVICE="/dev/mmcblk0"
MMC_CARD_PART_USER="${MMC_CARD_DEVICE}p3"
MMC_EMMC_DEVICE="/dev/mmcblk2"
MMC_EMMC_PART_BOOT="${MMC_EMMC_DEVICE}p1"
MMC_EMMC_PART_ROOT="${MMC_EMMC_DEVICE}p2"
UPGRADE_PART_MOUNT_POINT="/mnt"
UPGRADE_ROOT_IMAGE_NAME="rootfs.ext2"
UPGRADE_ROOT_IMAGE_PATH="${UPGRADE_PART_MOUNT_POINT}/${UPGRADE_ROOT_IMAGE_NAME}"
UPGRADE_BOOT_IMAGE_NAME="u-boot-sunxi-with-spl.bin"
UPGRADE_BOOT_IMAGE_PATH="${UPGRADE_PART_MOUNT_POINT}/${UPGRADE_BOOT_IMAGE_NAME}"
if [ ! -b "${MMC_CARD_PART_USER}" ]; then
echo "No user partition present on SD card."
exit -1
fi
echo "Mount user partition on /mnt ..."
mount "${MMC_CARD_PART_USER}" /mnt
# Update eMMC ROOTFS partition
if [ -f "${UPGRADE_ROOT_IMAGE_PATH}" ]; then
echo "Flashing rootfs image to eMMC, please wait..."
dd if="${UPGRADE_ROOT_IMAGE_PATH}" of="${MMC_EMMC_PART_ROOT}" bs=4M
echo "Flash complete, resizing FS to fill the partition..."
resize2fs "${MMC_EMMC_PART_ROOT}"
echo "Finished updating rootfs."
fi
# Update eMMC BOOT partition
if [ -f "${UPGRADE_BOOT_IMAGE_PATH}" ]; then
echo "Flashing bootloader to eMMC, please wait..."
dd if="${UPGRADE_BOOT_IMAGE_PATH}" of="${MMC_EMMC_DEVICE}" bs=8k seek=1
echo "Finished updating bootloader."
fi
echo "Syncing disks..."
sync
echo "Unmounting upgrade partition..."
umount "${MMC_CARD_PART_USER}"
echo "Flash completed, remove SD card and reboot."
if [ ! -f "${LED_INDICATOR_PATH}/trigger" ]; then
echo "Status LED not available, exiting..."
exit 0
fi
echo none > "${LED_INDICATOR_PATH}/trigger"
# Blink STATUS LED (on base board)
while true; do
echo 0 > "${LED_INDICATOR_PATH}/brightness"
sleep 0.1
echo 1 > "${LED_INDICATOR_PATH}/brightness"
sleep 0.1
done