Use U-Boot nvmem to load mac from eeprom. Update dts. Enable UAS/USB-SCSI in kernel.

This commit is contained in:
Lukas Schmid 2025-01-21 22:09:06 +01:00 committed by Lukas Schmid
parent 71f4898b2a
commit 619c533e40
6 changed files with 404 additions and 459 deletions

View File

@ -1,6 +1,11 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (C) 2025 Lukas Schmid <lukas.schmid@netcube.li>
*/
/dts-v1/;
#include "allwinner/sun8i-v3s.dtsi"
#include <dt-bindings/input/input.h>
#include <dt-bindings/leds/common.h>
#include <dt-bindings/gpio/gpio.h>
@ -12,56 +17,52 @@
aliases {
serial0 = &uart0;
ethernet0 = &emac;
rtc0 = &sysrtc;
rtc0 = &ds3232;
rtc1 = &rtc; /* not battery backed */
};
chosen {
stdout-path = "serial0:115200n8";
};
cpus {
cpu0: cpu@0 {
clock-frequency = <1200000000>;
};
};
leds {
compatible = "gpio-leds";
heartbeat_led {
gpios = <&pio 4 4 GPIO_ACTIVE_HIGH>; /* PE4 */
linux,default-trigger = "heartbeat";
function = LED_FUNCTION_HEARTBEAT;
color = <LED_COLOR_ID_GREEN>;
};
mmc0_act_led {
gpios = <&pio 5 6 GPIO_ACTIVE_HIGH>; /* PF6 */
linux,default-trigger = "mmc0";
function = LED_FUNCTION_DISK;
color = <LED_COLOR_ID_GREEN>;
};
/* 40 MHz Crystal Oscillator on PCB */
clk_can0: clock-can0 {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <40000000>;
};
gpio-keys {
compatible = "gpio-keys";
autorepeat;
user {
label = "User Defined Switch";
linux,code = <148>;
key-user {
label = "GPIO Key User";
linux,code = <KEY_PROG1>;
gpios = <&pio 1 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; /* PB2 */
};
};
reg_vcc5v0: vcc5v0 {
compatible = "regulator-fixed";
regulator-name = "vcc5v0";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
leds {
compatible = "gpio-leds";
led-heartbeat {
gpios = <&pio 4 4 GPIO_ACTIVE_HIGH>; /* PE4 */
linux,default-trigger = "heartbeat";
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_HEARTBEAT;
};
led-mmc0-act {
gpios = <&pio 5 6 GPIO_ACTIVE_HIGH>; /* PF6 */
linux,default-trigger = "mmc0";
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_DISK;
};
};
reg_vcc3v3: vcc3v3 {
/* EA3036C Switching 3 Channel Regulator - Channel 2 */
reg_vcc3v3: regulator-3v3 {
compatible = "regulator-fixed";
regulator-name = "vcc3v3";
regulator-min-microvolt = <3300000>;
@ -69,72 +70,15 @@
vin-supply = <&reg_vcc5v0>;
};
reg_vcc3v0: vcc3v0 {
/* K7805-1000R3 Switching Regulator supplied from main 12/24V terminal block */
reg_vcc5v0: regulator-5v0 {
compatible = "regulator-fixed";
regulator-name = "vcc3v0";
regulator-min-microvolt = <3000000>;
regulator-max-microvolt = <3000000>;
vin-supply = <&reg_vcc3v3>;
};
can0_osc: can0_osc {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <40000000>;
regulator-name = "vcc5v0";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
};
};
/* mmc0 (Boot) */
&mmc0 {
pinctrl-names = "default";
pinctrl-0 = <&mmc0_pins>;
vmmc-supply = <&reg_vcc3v3>;
bus-width = <4>;
broken-cd;
status = "okay";
};
/* mmc1 (SDIO) */
&mmc1 {
pinctrl-names = "default";
pinctrl-0 = <&mmc1_pins>;
vmmc-supply = <&reg_vcc3v3>;
bus-width = <4>;
broken-cd;
status = "okay";
};
/* USB */
&usb_otg {
extcon = <&usb0_extcon 0>;
dr_mode = "otg";
status = "okay";
};
&usbphy {
usb0_id_det-gpios = <&pio 1 4 GPIO_ACTIVE_HIGH>; /* PB4 */
status = "okay";
};
&ehci {
/delete-property/ phys;
/delete-property/ phy-names;
status = "okay";
};
&ohci {
/delete-property/ phys;
/delete-property/ phy-names;
status = "okay";
};
/* ADC */
&lradc {
vref-supply = <&reg_vcc3v0>;
status = "disabled";
};
/* Sound Card */
&codec {
allwinner,audio-routing =
"Headphone", "HP",
@ -144,96 +88,66 @@
status = "okay";
};
/* Main Serial */
&uart0 {
pinctrl-0 = <&uart0_pb_pins>;
pinctrl-names = "default";
&ehci {
status = "okay";
};
/* ESP Serial */
&uart1 {
pinctrl-0 = <&uart1_pins>;
pinctrl-names = "default";
&emac {
allwinner,leds-active-low;
nvmem-cells = <&eth0_macaddress>;
nvmem-cell-names = "mac-address";
status = "okay";
};
/* 1st I2C */
&i2c0 {
pinctrl-0 = <&i2c0_pins>;
pinctrl-names = "default";
status = "okay";
idrom: eeprom@50 {
ds3232: rtc@68 {
compatible = "dallas,ds3232";
reg = <0x68>;
};
eeprom0: eeprom@50 {
compatible = "atmel,24c02"; /* actually it's a 24AA02E48 */
reg = <0x50>;
pagesize = <16>;
read-only;
reg = <0x50>;
vcc-supply = <&reg_vcc3v3>;
#address-cells = <1>;
#size-cells = <1>;
eth0_macaddress: eth0_macaddress@FA {
reg = <0xFA 0x06>;
eth0_macaddress: macaddress@fa {
reg = <0xfa 0x06>;
};
};
usb0_extcon: tusb320@60 {
tusb320: typec@60 {
compatible = "ti,tusb320";
reg = <0x60>;
interrupt-parent = <&pio>;
interrupts = <1 5 IRQ_TYPE_EDGE_FALLING>;
};
sysrtc: rtc@68 {
compatible = "dallas,ds3232";
reg = <0x68>;
};
};
/* Ethernet */
&emac {
allwinner,leds-active-low;
nvmem-cells = <&eth0_macaddress>; /* custom nvmem reference */
nvmem-cell-names = "mac-address"; /* see ethernet-controller.yaml */
/* Exposed as the Flash/SD Header on the board */
&mmc0 {
vmmc-supply = <&reg_vcc3v3>;
bus-width = <4>;
broken-cd;
status = "okay";
};
/* SPI */
&spi0 {
#address-cells = <1>;
#size-cells = <0>;
pinctrl-names = "default";
pinctrl-0 = <&spi0_pins>;
cs-gpios = <0>, <&pio 1 0 GPIO_ACTIVE_LOW>; /* PB0 */
/* Connected to the on-board ESP32 */
&mmc1 {
vmmc-supply = <&reg_vcc3v3>;
bus-width = <4>;
broken-cd;
status = "okay";
flash@0 {
#address-cells = <1>;
#size-cells = <1>;
reg = <0>;
compatible = "jedec,spi-nor";
label = "firmware";
spi-max-frequency = <40000000>;
};
can@1 {
compatible = "microchip,mcp2518fd";
reg = <1>;
clocks = <&can0_osc>;
pinctrl-names = "default";
pinctrl-0 = <&can0_pins>;
spi-max-frequency = <20000000>;
interrupt-parent = <&pio>;
interrupts = <1 1 IRQ_TYPE_LEVEL_LOW>;
vdd-supply = <&reg_vcc3v3>;
xceiver-supply = <&reg_vcc3v3>;
};
};
&rtc {
status = "disabled";
&ohci {
status = "okay";
};
&pio {
@ -243,32 +157,117 @@
vcc-pf-supply = <&reg_vcc3v3>;
vcc-pg-supply = <&reg_vcc3v3>;
gpio-reserved-ranges = <0 32>, <42 22>, <68 28>, <96 32>, <153 7>, <167 25>, <198 26>;
gpio-line-names = "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", //PA
"CAN_nCS", "CAN_nINT", "USER_SW", "PB3", "USB_ID", "USBC_nINT", "I2C0_SCL", "I2C0_SDA", "UART0_TX", "UART0_RX", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", //PB
"SPI_MISO", "SPI_SCK", "FLASH_nCS", "SPI_MOSI", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", //PC
"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", //PD
"Q12", "Q11", "Q10", "Q9", "LED_SYS0", "I1", "Q1", "Q2", "I2", "I3", "Q3", "Q4", "I4", "I5", "Q5", "Q6", "I6", "I7", "Q7", "Q8", "I8", "UART1_TXD", "UART1_RXD", "ESP_nRST", "ESP_nBOOT", "", "", "", "", "", "", "", //PE
"SD_D1", "SD_D0", "SD_CLK", "SD_CMD", "SD_D3", "SD_D2", "LED_SYS1", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", //PF
"ESP_CLK", "ESP_CMD", "ESP_D0", "ESP_D1", "ESP_D2", "ESP_D3", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""; //PG
gpio-line-names = "", "", "", "", // PA
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"CAN_nCS", "CAN_nINT", "USER_SW", "PB3", // PB
"USB_ID", "USBC_nINT", "I2C0_SCL", "I2C0_SDA",
"UART0_TX", "UART0_RX", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"SPI_MISO", "SPI_SCK", "FLASH_nCS", "SPI_MOSI", // PC
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "", // PD
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"Q12", "Q11", "Q10", "Q9", // PE
"LED_SYS0", "I1", "Q1", "Q2",
"I2", "I3", "Q3", "Q4",
"I4", "I5", "Q5", "Q6",
"I6", "I7", "Q7", "Q8",
"I8", "UART1_TXD", "UART1_RXD", "ESP_nRST",
"ESP_nBOOT", "", "", "",
"", "", "", "",
"SD_D1", "SD_D0", "SD_CLK", "SD_CMD", // PF
"SD_D3", "SD_D2", "LED_SYS1", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"ESP_CLK", "ESP_CMD", "ESP_D0", "ESP_D1", // PG
"ESP_D2", "ESP_D3", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "";
uart0_pins: uart0-pins {
pins = "PB8", "PB9";
function = "uart0";
};
uart1_pins: uart1-pins {
uart1_pe_pins: uart1-pe-pins {
pins = "PE21", "PE22";
function = "uart1";
};
};
spi0_pins: spi0-pins {
pins = "PC0", "PC1", "PC2", "PC3";
function = "spi0";
/* Exposed as a USB-C connector with USB-Serial converter */
&uart0 {
pinctrl-0 = <&uart0_pb_pins>;
pinctrl-names = "default";
status = "okay";
};
/* Connected to the Bootloader/Console of the ESP32 */
&uart1 {
pinctrl-0 = <&uart1_pe_pins>;
pinctrl-names = "default";
status = "okay";
};
&usb_otg {
extcon = <&tusb320 0>;
dr_mode = "otg";
status = "okay";
};
&usbphy {
usb0_id_det-gpios = <&pio 1 4 GPIO_ACTIVE_HIGH>; /* PB4 */
status = "okay";
};
&spi0 {
#address-cells = <1>;
#size-cells = <0>;
cs-gpios = <0>, <&pio 1 0 GPIO_ACTIVE_LOW>; /* PB0 */
status = "okay";
flash@0 {
compatible = "jedec,spi-nor";
reg = <0>;
#address-cells = <1>;
#size-cells = <1>;
label = "firmware";
spi-max-frequency = <40000000>;
};
can0_pins: can0-pins {
pins = "PB1";
function = "gpio_in";
can@1 {
compatible = "microchip,mcp2518fd";
reg = <1>;
clocks = <&clk_can0>;
interrupt-parent = <&pio>;
interrupts = <1 1 IRQ_TYPE_LEVEL_LOW>; /* PB1 */
spi-max-frequency = <20000000>;
vdd-supply = <&reg_vcc3v3>;
xceiver-supply = <&reg_vcc3v3>;
};
};

View File

@ -38,6 +38,8 @@ CONFIG_MTD=y
CONFIG_MTD_CMDLINE_PARTS=y
CONFIG_MTD_SPI_NOR=y
CONFIG_EEPROM_AT24=y
CONFIG_SCSI=y
CONFIG_BLK_DEV_SD=y
CONFIG_NETDEVICES=y
CONFIG_SUN4I_EMAC=y
# CONFIG_NET_VENDOR_ARC is not set
@ -71,6 +73,7 @@ CONFIG_I2C_CHARDEV=y
CONFIG_I2C_MV64XXX=y
CONFIG_SPI=y
CONFIG_SPI_SUN6I=y
CONFIG_SPI_SPIDEV=m
CONFIG_POWER_SUPPLY=y
CONFIG_THERMAL=y
CONFIG_CPU_THERMAL=y
@ -103,6 +106,8 @@ CONFIG_USB_EHCI_HCD=y
CONFIG_USB_EHCI_HCD_PLATFORM=y
CONFIG_USB_OHCI_HCD=y
CONFIG_USB_OHCI_HCD_PLATFORM=y
CONFIG_USB_STORAGE=y
CONFIG_USB_UAS=y
CONFIG_USB_MUSB_HDRC=y
CONFIG_USB_MUSB_SUNXI=y
CONFIG_NOP_USB_XCEIV=y

View File

@ -1,6 +1,11 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (C) 2025 Lukas Schmid <lukas.schmid@netcube.li>
*/
/dts-v1/;
#include "sun8i-v3s.dtsi"
#include <dt-bindings/input/input.h>
#include <dt-bindings/leds/common.h>
#include <dt-bindings/gpio/gpio.h>
@ -12,56 +17,52 @@
aliases {
serial0 = &uart0;
ethernet0 = &emac;
rtc0 = &sysrtc;
rtc0 = &ds3232;
rtc1 = &rtc; /* not battery backed */
};
chosen {
stdout-path = "serial0:115200n8";
};
cpus {
cpu0: cpu@0 {
clock-frequency = <1200000000>;
};
};
leds {
compatible = "gpio-leds";
heartbeat_led {
gpios = <&pio 4 4 GPIO_ACTIVE_HIGH>; /* PE4 */
linux,default-trigger = "heartbeat";
function = LED_FUNCTION_HEARTBEAT;
color = <LED_COLOR_ID_GREEN>;
};
mmc0_act_led {
gpios = <&pio 5 6 GPIO_ACTIVE_HIGH>; /* PF6 */
linux,default-trigger = "mmc0";
function = LED_FUNCTION_DISK;
color = <LED_COLOR_ID_GREEN>;
};
/* 40 MHz Crystal Oscillator on PCB */
clk_can0: clock-can0 {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <40000000>;
};
gpio-keys {
compatible = "gpio-keys";
autorepeat;
user {
label = "User Defined Switch";
linux,code = <148>;
key-user {
label = "GPIO Key User";
linux,code = <KEY_PROG1>;
gpios = <&pio 1 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; /* PB2 */
};
};
reg_vcc5v0: vcc5v0 {
compatible = "regulator-fixed";
regulator-name = "vcc5v0";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
leds {
compatible = "gpio-leds";
led-heartbeat {
gpios = <&pio 4 4 GPIO_ACTIVE_HIGH>; /* PE4 */
linux,default-trigger = "heartbeat";
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_HEARTBEAT;
};
led-mmc0-act {
gpios = <&pio 5 6 GPIO_ACTIVE_HIGH>; /* PF6 */
linux,default-trigger = "mmc0";
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_DISK;
};
};
reg_vcc3v3: vcc3v3 {
/* EA3036C Switching 3 Channel Regulator - Channel 2 */
reg_vcc3v3: regulator-3v3 {
compatible = "regulator-fixed";
regulator-name = "vcc3v3";
regulator-min-microvolt = <3300000>;
@ -69,72 +70,15 @@
vin-supply = <&reg_vcc5v0>;
};
reg_vcc3v0: vcc3v0 {
/* K7805-1000R3 Switching Regulator supplied from main 12/24V terminal block */
reg_vcc5v0: regulator-5v0 {
compatible = "regulator-fixed";
regulator-name = "vcc3v0";
regulator-min-microvolt = <3000000>;
regulator-max-microvolt = <3000000>;
vin-supply = <&reg_vcc3v3>;
};
can0_osc: can0_osc {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <40000000>;
regulator-name = "vcc5v0";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
};
};
/* mmc0 (Boot) */
&mmc0 {
pinctrl-names = "default";
pinctrl-0 = <&mmc0_pins>;
vmmc-supply = <&reg_vcc3v3>;
bus-width = <4>;
broken-cd;
status = "okay";
};
/* mmc1 (SDIO) */
&mmc1 {
pinctrl-names = "default";
pinctrl-0 = <&mmc1_pins>;
vmmc-supply = <&reg_vcc3v3>;
bus-width = <4>;
broken-cd;
status = "okay";
};
/* USB */
&usb_otg {
extcon = <&usb0_extcon 0>;
dr_mode = "otg";
status = "okay";
};
&usbphy {
usb0_id_det-gpios = <&pio 1 4 GPIO_ACTIVE_LOW>; /* PB4 */
status = "okay";
};
&ehci {
/delete-property/ phys;
/delete-property/ phy-names;
status = "okay";
};
&ohci {
/delete-property/ phys;
/delete-property/ phy-names;
status = "okay";
};
/* ADC */
&lradc {
vref-supply = <&reg_vcc3v0>;
status = "disabled";
};
/* Sound Card */
&codec {
allwinner,audio-routing =
"Headphone", "HP",
@ -144,96 +88,66 @@
status = "okay";
};
/* Main Serial */
&uart0 {
pinctrl-0 = <&uart0_pb_pins>;
pinctrl-names = "default";
&ehci {
status = "okay";
};
/* ESP Serial */
&uart1 {
pinctrl-0 = <&uart1_pins>;
pinctrl-names = "default";
&emac {
allwinner,leds-active-low;
nvmem-cells = <&eth0_macaddress>;
nvmem-cell-names = "mac-address";
status = "okay";
};
/* 1st I2C */
&i2c0 {
pinctrl-0 = <&i2c0_pins>;
pinctrl-names = "default";
status = "okay";
idrom: eeprom@50 {
ds3232: rtc@68 {
compatible = "dallas,ds3232";
reg = <0x68>;
};
eeprom0: eeprom@50 {
compatible = "atmel,24c02"; /* actually it's a 24AA02E48 */
reg = <0x50>;
pagesize = <16>;
read-only;
reg = <0x50>;
vcc-supply = <&reg_vcc3v3>;
#address-cells = <1>;
#size-cells = <1>;
eth0_macaddress: eth0_macaddress@FA {
reg = <0xFA 0x06>;
eth0_macaddress: macaddress@fa {
reg = <0xfa 0x06>;
};
};
usb0_extcon: tusb320@60 {
tusb320: typec@60 {
compatible = "ti,tusb320";
reg = <0x60>;
interrupt-parent = <&pio>;
interrupts = <1 5 IRQ_TYPE_EDGE_FALLING>;
};
sysrtc: rtc@68 {
compatible = "dallas,ds3232";
reg = <0x68>;
};
};
/* Ethernet */
&emac {
allwinner,leds-active-low;
nvmem-cells = <&eth0_macaddress>; /* custom nvmem reference */
nvmem-cell-names = "mac-address"; /* see ethernet-controller.yaml */
/* Exposed as the Flash/SD Header on the board */
&mmc0 {
vmmc-supply = <&reg_vcc3v3>;
bus-width = <4>;
broken-cd;
status = "okay";
};
/* SPI */
&spi0 {
#address-cells = <1>;
#size-cells = <0>;
pinctrl-names = "default";
pinctrl-0 = <&spi0_pins>;
cs-gpios = <0>, <&pio 1 0 GPIO_ACTIVE_LOW>; /* PB0 */
/* Connected to the on-board ESP32 */
&mmc1 {
vmmc-supply = <&reg_vcc3v3>;
bus-width = <4>;
broken-cd;
status = "okay";
flash@0 {
#address-cells = <1>;
#size-cells = <1>;
reg = <0>;
compatible = "jedec,spi-nor";
label = "firmware";
spi-max-frequency = <40000000>;
};
can@1 {
compatible = "microchip,mcp2518fd";
reg = <1>;
clocks = <&can0_osc>;
pinctrl-names = "default";
pinctrl-0 = <&can0_pins>;
spi-max-frequency = <20000000>;
interrupt-parent = <&pio>;
interrupts = <1 1 IRQ_TYPE_LEVEL_LOW>;
vdd-supply = <&reg_vcc3v3>;
xceiver-supply = <&reg_vcc3v3>;
};
};
&rtc {
status = "disabled";
&ohci {
status = "okay";
};
&pio {
@ -243,32 +157,117 @@
vcc-pf-supply = <&reg_vcc3v3>;
vcc-pg-supply = <&reg_vcc3v3>;
gpio-reserved-ranges = <0 32>, <42 22>, <68 28>, <96 32>, <153 7>, <167 25>, <198 26>;
gpio-line-names = "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", //PA
"CAN_nCS", "CAN_nINT", "USER_SW", "PB3", "USB_ID", "USBC_nINT", "I2C0_SCL", "I2C0_SDA", "UART0_TX", "UART0_RX", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", //PB
"SPI_MISO", "SPI_SCK", "FLASH_nCS", "SPI_MOSI", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", //PC
"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", //PD
"Q12", "Q11", "Q10", "Q9", "LED_SYS0", "I1", "Q1", "Q2", "I2", "I3", "Q3", "Q4", "I4", "I5", "Q5", "Q6", "I6", "I7", "Q7", "Q8", "I8", "UART1_TXD", "UART1_RXD", "ESP_nRST", "ESP_nBOOT", "", "", "", "", "", "", "", //PE
"SD_D1", "SD_D0", "SD_CLK", "SD_CMD", "SD_D3", "SD_D2", "LED_SYS1", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", //PF
"ESP_CLK", "ESP_CMD", "ESP_D0", "ESP_D1", "ESP_D2", "ESP_D3", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""; //PG
gpio-line-names = "", "", "", "", // PA
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"CAN_nCS", "CAN_nINT", "USER_SW", "PB3", // PB
"USB_ID", "USBC_nINT", "I2C0_SCL", "I2C0_SDA",
"UART0_TX", "UART0_RX", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"SPI_MISO", "SPI_SCK", "FLASH_nCS", "SPI_MOSI", // PC
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "", // PD
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"Q12", "Q11", "Q10", "Q9", // PE
"LED_SYS0", "I1", "Q1", "Q2",
"I2", "I3", "Q3", "Q4",
"I4", "I5", "Q5", "Q6",
"I6", "I7", "Q7", "Q8",
"I8", "UART1_TXD", "UART1_RXD", "ESP_nRST",
"ESP_nBOOT", "", "", "",
"", "", "", "",
"SD_D1", "SD_D0", "SD_CLK", "SD_CMD", // PF
"SD_D3", "SD_D2", "LED_SYS1", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"ESP_CLK", "ESP_CMD", "ESP_D0", "ESP_D1", // PG
"ESP_D2", "ESP_D3", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "";
uart0_pins: uart0-pins {
pins = "PB8", "PB9";
function = "uart0";
};
uart1_pins: uart1-pins {
uart1_pe_pins: uart1-pe-pins {
pins = "PE21", "PE22";
function = "uart1";
};
};
spi0_pins: spi0-pins {
pins = "PC0", "PC1", "PC2", "PC3";
function = "spi0";
/* Exposed as a USB-C connector with USB-Serial converter */
&uart0 {
pinctrl-0 = <&uart0_pb_pins>;
pinctrl-names = "default";
status = "okay";
};
/* Connected to the Bootloader/Console of the ESP32 */
&uart1 {
pinctrl-0 = <&uart1_pe_pins>;
pinctrl-names = "default";
status = "okay";
};
&usb_otg {
extcon = <&tusb320 0>;
dr_mode = "otg";
status = "okay";
};
&usbphy {
usb0_id_det-gpios = <&pio 1 4 GPIO_ACTIVE_HIGH>; /* PB4 */
status = "okay";
};
&spi0 {
#address-cells = <1>;
#size-cells = <0>;
cs-gpios = <0>, <&pio 1 0 GPIO_ACTIVE_LOW>; /* PB0 */
status = "okay";
flash@0 {
compatible = "jedec,spi-nor";
reg = <0>;
#address-cells = <1>;
#size-cells = <1>;
label = "firmware";
spi-max-frequency = <40000000>;
};
can0_pins: can0-pins {
pins = "PB1";
function = "gpio_in";
can@1 {
compatible = "microchip,mcp2518fd";
reg = <1>;
clocks = <&clk_can0>;
interrupt-parent = <&pio>;
interrupts = <1 1 IRQ_TYPE_LEVEL_LOW>; /* PB1 */
spi-max-frequency = <20000000>;
vdd-supply = <&reg_vcc3v3>;
xceiver-supply = <&reg_vcc3v3>;
};
};

View File

@ -0,0 +1,55 @@
From 6630de878d64b23f9c49001af38755b35bc80d4a Mon Sep 17 00:00:00 2001
From: Lukas Schmid <lukas.schmid@netcube.li>
Date: Tue, 21 Jan 2025 21:42:42 +0100
Subject: [PATCH] Remove ethaddr init from sunxi/board.c as it conflicts with
nvmem-cells
---
board/sunxi/board.c | 26 --------------------------
1 file changed, 26 deletions(-)
diff --git a/board/sunxi/board.c b/board/sunxi/board.c
index 961cdcde..4e5b4d13 100644
--- a/board/sunxi/board.c
+++ b/board/sunxi/board.c
@@ -760,37 +760,11 @@ static void setup_environment(const void *fdt)
{
char serial_string[17] = { 0 };
unsigned int sid[4];
- uint8_t mac_addr[6];
- char ethaddr[16];
int i;
if (!get_unique_sid(sid))
return;
- for (i = 0; i < 4; i++) {
- sprintf(ethaddr, "ethernet%d", i);
- if (!fdt_get_alias(fdt, ethaddr))
- continue;
-
- if (i == 0)
- strcpy(ethaddr, "ethaddr");
- else
- sprintf(ethaddr, "eth%daddr", i);
-
- if (env_get(ethaddr))
- continue;
-
- /* Non OUI / registered MAC address */
- mac_addr[0] = (i << 4) | 0x02;
- mac_addr[1] = (sid[0] >> 0) & 0xff;
- mac_addr[2] = (sid[3] >> 24) & 0xff;
- mac_addr[3] = (sid[3] >> 16) & 0xff;
- mac_addr[4] = (sid[3] >> 8) & 0xff;
- mac_addr[5] = (sid[3] >> 0) & 0xff;
-
- eth_env_set_enetaddr(ethaddr, mac_addr);
- }
-
if (!env_get("serial#")) {
snprintf(serial_string, sizeof(serial_string),
"%08x%08x", sid[0], sid[3]);
--
2.47.1

View File

@ -1,114 +0,0 @@
From b651bd630e8514714fcf145980bd41ef974fe670 Mon Sep 17 00:00:00 2001
From: Lukas Schmid <lukas.schmid@netcube.li>
Date: Wed, 1 Jan 2025 20:51:08 +0100
Subject: [PATCH] eth: sunxi: board-init: Try to load macaddr from eeprom
Upstream: N/A
Signed-off-by: Lukas Schmid <lukas.schmid@netcube.li>
---
board/sunxi/board.c | 77 ++++++++++++++++++++++++++++++++++-----------
1 file changed, 59 insertions(+), 18 deletions(-)
diff --git a/board/sunxi/board.c b/board/sunxi/board.c
index 961cdcd..5f20324 100644
--- a/board/sunxi/board.c
+++ b/board/sunxi/board.c
@@ -185,6 +185,43 @@ enum env_location env_get_location(enum env_operation op, int prio)
return ENVL_UNKNOWN;
}
+#define EEPROM_BUS_ADDR 0
+#define EEPROM_ADDR 0x50
+
+static int eth_addr_init(void)
+{
+ int rc;
+ u8 mac[6];
+ char mstr[20];
+
+ struct udevice *dev;
+ struct udevice *bus;
+
+ rc = uclass_get_device_by_seq(UCLASS_I2C, EEPROM_BUS_ADDR, &bus);
+ if (rc) {
+ printf("Couldn't get i2c bus.\n");
+ return rc;
+ }
+
+ rc = dm_i2c_probe(bus, EEPROM_ADDR, 0, &dev);
+ if (rc) {
+ printf("Couldn't get i2c eeprom.\n");
+ return rc;
+ }
+
+ rc = dm_i2c_read(dev, 0xFA, mac, 6);
+ if (rc) {
+ printf("i2c_read failed\n");
+ return rc;
+ }
+
+ sprintf(mstr, "%0X:%0X:%0X:%0X:%0X:%0X",mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
+ printf("ethaddr set to: %s\n", mstr);
+ eth_env_set_enetaddr("ethaddr", mac);
+
+ return 0;
+}
+
/* called only from U-Boot proper */
int board_init(void)
{
@@ -767,28 +804,32 @@ static void setup_environment(const void *fdt)
if (!get_unique_sid(sid))
return;
- for (i = 0; i < 4; i++) {
- sprintf(ethaddr, "ethernet%d", i);
- if (!fdt_get_alias(fdt, ethaddr))
- continue;
+ /* Try to load the macaddr from eeprom, but fallback to sid based macaddr if failed */
+ if (eth_addr_init() != 0) {
- if (i == 0)
- strcpy(ethaddr, "ethaddr");
- else
- sprintf(ethaddr, "eth%daddr", i);
+ for (i = 0; i < 4; i++) {
+ sprintf(ethaddr, "ethernet%d", i);
+ if (!fdt_get_alias(fdt, ethaddr))
+ continue;
- if (env_get(ethaddr))
- continue;
+ if (i == 0)
+ strcpy(ethaddr, "ethaddr");
+ else
+ sprintf(ethaddr, "eth%daddr", i);
- /* Non OUI / registered MAC address */
- mac_addr[0] = (i << 4) | 0x02;
- mac_addr[1] = (sid[0] >> 0) & 0xff;
- mac_addr[2] = (sid[3] >> 24) & 0xff;
- mac_addr[3] = (sid[3] >> 16) & 0xff;
- mac_addr[4] = (sid[3] >> 8) & 0xff;
- mac_addr[5] = (sid[3] >> 0) & 0xff;
+ if (env_get(ethaddr))
+ continue;
- eth_env_set_enetaddr(ethaddr, mac_addr);
+ /* Non OUI / registered MAC address */
+ mac_addr[0] = (i << 4) | 0x02;
+ mac_addr[1] = (sid[0] >> 0) & 0xff;
+ mac_addr[2] = (sid[3] >> 24) & 0xff;
+ mac_addr[3] = (sid[3] >> 16) & 0xff;
+ mac_addr[4] = (sid[3] >> 8) & 0xff;
+ mac_addr[5] = (sid[3] >> 0) & 0xff;
+
+ eth_env_set_enetaddr(ethaddr, mac_addr);
+ }
}
if (!env_get("serial#")) {
--
2.46.1

View File

@ -25,10 +25,11 @@ CONFIG_MTDIDS_DEFAULT="nor0=firmware"
CONFIG_MTDPARTS_DEFAULT="mtdparts=firmware:1M(u-boot)ro,512k(u-boot-env1),512k(u-boot-env2),-(user)"
CONFIG_CMD_DIAG=y
# CONFIG_ENV_IS_IN_FAT is not set
CONFIG_ENV_IS_IN_MMC=y
CONFIG_ENV_SPI_MAX_HZ=1000000
CONFIG_SYS_REDUNDAND_ENVIRONMENT=y
CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
CONFIG_USE_HOSTNAME=y
CONFIG_HOSTNAME="kumquat"
CONFIG_VERSION_VARIABLE=y
# CONFIG_USB_FUNCTION_FASTBOOT is not set
CONFIG_SYS_I2C_MVTWSI=y