From f3b731600751a9a2859c1fd01805ee6324340bdb Mon Sep 17 00:00:00 2001 From: Ahmad Fatoum Date: Fri, 24 Apr 2020 19:17:25 +0200 Subject: v7a: barebox: add support for Linux Automation MC-1 This adds barebox support for the Linux Automation GmbH MC-1 board built around the Octavo Systems OSD32MP157C-512M SiP. The patches have been posted[1] upstream, but are not yet accepted. It's however expected for them to be part of barebox v2020.06.0, at which time we can drop the patchset again. [1]: https://lists.infradead.org/pipermail/barebox/2020-April/041653.html Signed-off-by: Ahmad Fatoum --- ...stm32mp-add-Linux-Automation-MC-1-support.patch | 815 +++++++++++++++++++++ ...-lxa-mc1-break-reg_3v3-dependency-on-PMIC.patch | 60 ++ ...0.04.0-customers-pengutronix-distrokit-v7.patch | 22 + .../platform-v7a/patches/barebox-2020.04.0/series | 12 + 4 files changed, 909 insertions(+) create mode 100644 configs/platform-v7a/patches/barebox-2020.04.0/0001-ARM-stm32mp-add-Linux-Automation-MC-1-support.patch create mode 100644 configs/platform-v7a/patches/barebox-2020.04.0/0002-ARM-stm32mp-lxa-mc1-break-reg_3v3-dependency-on-PMIC.patch create mode 100644 configs/platform-v7a/patches/barebox-2020.04.0/0101-Release-2020.04.0-customers-pengutronix-distrokit-v7.patch create mode 100644 configs/platform-v7a/patches/barebox-2020.04.0/series (limited to 'configs/platform-v7a/patches') diff --git a/configs/platform-v7a/patches/barebox-2020.04.0/0001-ARM-stm32mp-add-Linux-Automation-MC-1-support.patch b/configs/platform-v7a/patches/barebox-2020.04.0/0001-ARM-stm32mp-add-Linux-Automation-MC-1-support.patch new file mode 100644 index 0000000..f660302 --- /dev/null +++ b/configs/platform-v7a/patches/barebox-2020.04.0/0001-ARM-stm32mp-add-Linux-Automation-MC-1-support.patch @@ -0,0 +1,815 @@ +From: Ahmad Fatoum +Date: Tue, 14 Jan 2020 18:11:14 +0100 +Subject: [PATCH] ARM: stm32mp: add Linux Automation MC-1 support + +This adds support for the Linux Automation GmbH MC-1 board built around +the Octavo Systems OSD32MP157C-512M SiP. + +The device tree is based on the one in linux-stm32/stm32-next, which +will probably be merged for Linux v5.8-rc1. Instead of waiting that +long, we import it here with some stuff removed/changed, so it's usable +for both barebox and Linux, without the prerequisite patches. + +The non-barebox specific parts have been moved into separate DTSIs +(arch/arm/dts/stm32mp{157c-lxa-mc1,15xx-osd32}.dtsi), so both can be +dropped after the v5.8-rc1 sync with only include path change necessary +in arch/arm/dts/stm32mp157c-lxa-mc1.dts. + +Signed-off-by: Ahmad Fatoum +--- + arch/arm/boards/Makefile | 1 + + arch/arm/boards/lxa-mc1/Makefile | 2 + + arch/arm/boards/lxa-mc1/board.c | 31 +++ + arch/arm/boards/lxa-mc1/lowlevel.c | 26 +++ + arch/arm/dts/Makefile | 1 + + arch/arm/dts/stm32mp157c-lxa-mc1.dts | 42 ++++ + arch/arm/dts/stm32mp157c-lxa-mc1.dtsi | 362 ++++++++++++++++++++++++++++++++++ + arch/arm/dts/stm32mp15xx-osd32.dtsi | 229 +++++++++++++++++++++ + arch/arm/mach-stm32mp/Kconfig | 4 + + images/Makefile.stm32mp | 5 + + 10 files changed, 703 insertions(+) + create mode 100644 arch/arm/boards/lxa-mc1/Makefile + create mode 100644 arch/arm/boards/lxa-mc1/board.c + create mode 100644 arch/arm/boards/lxa-mc1/lowlevel.c + create mode 100644 arch/arm/dts/stm32mp157c-lxa-mc1.dts + create mode 100644 arch/arm/dts/stm32mp157c-lxa-mc1.dtsi + create mode 100644 arch/arm/dts/stm32mp15xx-osd32.dtsi + +diff --git a/arch/arm/boards/Makefile b/arch/arm/boards/Makefile +index 9fe458e0a390..e9e9163d589b 100644 +--- a/arch/arm/boards/Makefile ++++ b/arch/arm/boards/Makefile +@@ -129,6 +129,7 @@ obj-$(CONFIG_MACH_SOCFPGA_TERASIC_SOCKIT) += terasic-sockit/ + obj-$(CONFIG_MACH_SOLIDRUN_CUBOX) += solidrun-cubox/ + obj-$(CONFIG_MACH_SOLIDRUN_MICROSOM) += solidrun-microsom/ + obj-$(CONFIG_MACH_STM32MP157C_DK2) += stm32mp157c-dk2/ ++obj-$(CONFIG_MACH_LXA_MC1) += lxa-mc1/ + obj-$(CONFIG_MACH_TECHNEXION_PICO_HOBBIT) += technexion-pico-hobbit/ + obj-$(CONFIG_MACH_TECHNEXION_WANDBOARD) += technexion-wandboard/ + obj-$(CONFIG_MACH_TNY_A9260) += tny-a926x/ +diff --git a/arch/arm/boards/lxa-mc1/Makefile b/arch/arm/boards/lxa-mc1/Makefile +new file mode 100644 +index 000000000000..092c31d6b28d +--- /dev/null ++++ b/arch/arm/boards/lxa-mc1/Makefile +@@ -0,0 +1,2 @@ ++lwl-y += lowlevel.o ++obj-y += board.o +diff --git a/arch/arm/boards/lxa-mc1/board.c b/arch/arm/boards/lxa-mc1/board.c +new file mode 100644 +index 000000000000..d36924fc2793 +--- /dev/null ++++ b/arch/arm/boards/lxa-mc1/board.c +@@ -0,0 +1,31 @@ ++// SPDX-License-Identifier: GPL-2.0+ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++static int mc1_device_init(void) ++{ ++ int flags; ++ if (!of_machine_is_compatible("lxa,stm32mp157c-mc1")) ++ return 0; ++ ++ flags = bootsource_get_instance() == 0 ? BBU_HANDLER_FLAG_DEFAULT : 0; ++ stm32mp_bbu_mmc_register_handler("sd", "/dev/mmc0.ssbl", flags); ++ ++ flags = bootsource_get_instance() == 1 ? BBU_HANDLER_FLAG_DEFAULT : 0; ++ stm32mp_bbu_mmc_register_handler("emmc", "/dev/mmc1.ssbl", flags); ++ ++ ++ if (bootsource_get_instance() == 0) ++ of_device_enable_path("/chosen/environment-sd"); ++ else ++ of_device_enable_path("/chosen/environment-emmc"); ++ ++ barebox_set_hostname("lxa-mc1"); ++ ++ return 0; ++} ++device_initcall(mc1_device_init); +diff --git a/arch/arm/boards/lxa-mc1/lowlevel.c b/arch/arm/boards/lxa-mc1/lowlevel.c +new file mode 100644 +index 000000000000..274f824a1662 +--- /dev/null ++++ b/arch/arm/boards/lxa-mc1/lowlevel.c +@@ -0,0 +1,26 @@ ++// SPDX-License-Identifier: GPL-2.0+ ++#include ++#include ++#include ++ ++extern char __dtb_z_stm32mp157c_lxa_mc1_start[]; ++ ++static void setup_uart(void) ++{ ++ /* first stage has set up the UART, so nothing to do here */ ++ putc_ll('>'); ++} ++ ++ENTRY_FUNCTION(start_stm32mp157c_lxa_mc1, r0, r1, r2) ++{ ++ void *fdt; ++ ++ stm32mp_cpu_lowlevel_init(); ++ ++ if (IS_ENABLED(CONFIG_DEBUG_LL)) ++ setup_uart(); ++ ++ fdt = __dtb_z_stm32mp157c_lxa_mc1_start + get_runtime_offset(); ++ ++ stm32mp1_barebox_entry(fdt); ++} +diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile +index ddfe64e83bdf..1aeaa61e017e 100644 +--- a/arch/arm/dts/Makefile ++++ b/arch/arm/dts/Makefile +@@ -94,6 +94,7 @@ lwl-dtb-$(CONFIG_MACH_SOLIDRUN_MICROSOM) += imx6dl-hummingboard.dtb.o imx6q-humm + imx6dl-hummingboard2.dtb.o imx6q-hummingboard2.dtb.o \ + imx6q-h100.dtb.o + lwl-dtb-$(CONFIG_MACH_STM32MP157C_DK2) += stm32mp157c-dk2.dtb.o ++lwl-dtb-$(CONFIG_MACH_LXA_MC1) += stm32mp157c-lxa-mc1.dtb.o + lwl-dtb-$(CONFIG_MACH_SCB9328) += imx1-scb9328.dtb.o + lwl-dtb-$(CONFIG_MACH_TECHNEXION_WANDBOARD) += imx6q-wandboard.dtb.o imx6dl-wandboard.dtb.o + lwl-dtb-$(CONFIG_MACH_TECHNEXION_PICO_HOBBIT) += imx6ul-pico-hobbit.dtb.o +diff --git a/arch/arm/dts/stm32mp157c-lxa-mc1.dts b/arch/arm/dts/stm32mp157c-lxa-mc1.dts +new file mode 100644 +index 000000000000..742739424ea7 +--- /dev/null ++++ b/arch/arm/dts/stm32mp157c-lxa-mc1.dts +@@ -0,0 +1,42 @@ ++// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) ++/* ++ * Copyright (C) 2020 Ahmad Fatoum, Pengutronix ++ */ ++ ++#include "stm32mp157c-lxa-mc1.dtsi" ++#include "stm32mp151.dtsi" ++ ++/ { ++ chosen { ++ environment-sd { ++ compatible = "barebox,environment"; ++ device-path = &sdmmc1, "partname:barebox-environment"; ++ }; ++ ++ environment-emmc { ++ compatible = "barebox,environment"; ++ device-path = &sdmmc2, "partname:barebox-environment"; ++ }; ++ }; ++ ++}; ++ ++&panel { ++ display-timings { ++ timing { /* edt,etm0700g0dh6 */ ++ clock-frequency = <33260000>; ++ hactive = <800>; ++ vactive = <480>; ++ hfront-porch = <40>; ++ hsync-len = <128>; ++ hback-porch = <88>; ++ vfront-porch = <10>; ++ vsync-len = <2>; ++ vback-porch = <33>; ++ hsync-active = <0>; ++ vsync-active = <0>; ++ de-active = <1>; ++ pixelclk-active = <0>; ++ }; ++ }; ++}; +diff --git a/arch/arm/dts/stm32mp157c-lxa-mc1.dtsi b/arch/arm/dts/stm32mp157c-lxa-mc1.dtsi +new file mode 100644 +index 000000000000..6603cf280eb2 +--- /dev/null ++++ b/arch/arm/dts/stm32mp157c-lxa-mc1.dtsi +@@ -0,0 +1,362 @@ ++/* SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-3-Clause) */ ++/* ++ * Copyright (C) 2020 STMicroelectronics - All Rights Reserved ++ * Copyright (C) 2020 Ahmad Fatoum, Pengutronix ++ */ ++ ++/dts-v1/; ++ ++#include ++#include "stm32mp15xx-osd32.dtsi" ++#include ++ ++#include ++#include ++ ++/ { ++ model = "Linux Automation MC-1 board"; ++ compatible = "lxa,stm32mp157c-mc1", "st,stm32mp157"; ++ ++ aliases { ++ ethernet0 = ðernet0; ++ mmc0 = &sdmmc1; ++ mmc1 = &sdmmc2; ++ serial0 = &uart4; ++ }; ++ ++ backlight: backlight { ++ compatible = "pwm-backlight"; ++ pwms = <&backlight_pwm 1 100000 PWM_POLARITY_INVERTED>; ++ brightness-levels = <0 31 63 95 127 159 191 223 255>; ++ default-brightness-level = <7>; ++ power-supply = <®_5v2>; /* 3V3_BACKLIGHT */ ++ }; ++ ++ chosen { ++ stdout-path = &uart4; ++ }; ++ ++ led-act { ++ compatible = "gpio-leds"; ++ ++ led-green { ++ label = "mc1:green:act"; ++ gpios = <&gpioa 13 GPIO_ACTIVE_LOW>; ++ linux,default-trigger = "heartbeat"; ++ }; ++ }; ++ ++ led-rgb { ++ compatible = "pwm-leds"; ++ ++ led-red { ++ label = "mc1:red:rgb"; ++ pwms = <&leds_pwm 1 1000000 0>; ++ max-brightness = <255>; ++ active-low; ++ }; ++ ++ led-green { ++ label = "mc1:green:rgb"; ++ pwms = <&leds_pwm 2 1000000 0>; ++ max-brightness = <255>; ++ active-low; ++ }; ++ ++ led-blue { ++ label = "mc1:blue:rgb"; ++ pwms = <&leds_pwm 3 1000000 0>; ++ max-brightness = <255>; ++ active-low; ++ }; ++ }; ++ ++ panel: panel { ++ compatible = "edt,etm0700g0edh6", "simple-panel"; ++ backlight = <&backlight>; ++ enable-gpios = <&gpiod 4 GPIO_ACTIVE_HIGH>; ++ power-supply = <®_3v3>; ++ ++ port { ++ panel_input: endpoint { ++ remote-endpoint = <<dc_ep0_out>; ++ }; ++ }; ++ }; ++ ++ reg_3v3: regulator_3v3 { ++ compatible = "regulator-fixed"; ++ regulator-name = "3V3"; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-always-on; ++ vin-supply = <&v3v3>; ++ }; ++ ++ /* supplied by either debug board or PoE */ ++ reg_5v2: regulator_5v2 { ++ compatible = "regulator-fixed"; ++ regulator-name = "5V2"; ++ regulator-min-microvolt = <5200000>; ++ regulator-max-microvolt = <5200000>; ++ regulator-always-on; ++ }; ++}; ++ ++ðernet0 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <ðernet0_rgmii_mc1pins_b>; ++ phy-mode = "rgmii-id"; ++ phy-handle = <ðphy>; ++ status = "okay"; ++ ++ mdio0 { ++ compatible = "snps,dwmac-mdio"; ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ++ ethphy: ethernet-phy@3 { /* KSZ9031RN */ ++ reg = <3>; ++ reset-gpios = <&gpiog 0 GPIO_ACTIVE_LOW>; /* ETH_RST# */ ++ interrupt-parent = <&gpioa>; ++ interrupts = <6 IRQ_TYPE_EDGE_FALLING>; /* ETH_MDINT# */ ++ rxc-skew-ps = <1860>; ++ txc-skew-ps = <1860>; ++ reset-assert-us = <10000>; ++ reset-deassert-us = <300>; ++ micrel,force-master; ++ }; ++ }; ++}; ++ ++&gpioz { ++ gpio-line-names = "HWID0", "HWID1", "HWID2", "HWID3", "", "", ++ "HWID4", "HWID5"; ++}; ++ ++&gpu { ++ status = "okay"; ++}; ++ ++&i2c5 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&i2c5_mc1pins_b>; ++ clock-frequency = <400000>; ++ status = "okay"; ++ ++ touchscreen@38 { ++ compatible = "edt,edt-ft5x06"; ++ interrupt-parent = <&gpiod>; ++ interrupts = <11 IRQ_TYPE_EDGE_FALLING>; /* TOUCH_INT# */ ++ vcc-supply = <®_3v3>; ++ reg = <0x38>; ++ reset-gpios = <&gpiof 8 GPIO_ACTIVE_LOW>; /* TOUCH_RESET# */ ++ touchscreen-size-x = <1792>; ++ touchscreen-size-y = <1024>; ++ wakeup-source; ++ }; ++}; ++ ++<dc { ++ pinctrl-names = "default"; ++ pinctrl-0 = <<dc_mc1pins_c>; ++ status = "okay"; ++ ++ port { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ltdc_ep0_out: endpoint@0 { ++ reg = <0>; ++ remote-endpoint = <&panel_input>; ++ }; ++ }; ++}; ++ ++&pmic { ++ regulators { ++ buck4-supply = <®_5v2>; /* VIN */ ++ ldo2-supply = <®_5v2>; /* PMIC_LDO25IN */ ++ ldo5-supply = <®_5v2>; /* PMIC_LDO25IN */ ++ boost-supply = <®_5v2>; /* PMIC_BSTIN */ ++ pwr_sw2-supply = <&bst_out>; /* PMIC_SWIN */ ++ }; ++}; ++ ++&sdmmc1 { ++ pinctrl-names = "default", "opendrain"; ++ pinctrl-0 = <&sdmmc1_b4_pins_a>; ++ pinctrl-1 = <&sdmmc1_b4_od_pins_a>; ++ bus-width = <4>; ++ cd-gpios = <&gpioh 3 GPIO_ACTIVE_LOW>; ++ disable-wp; ++ no-1-8-v; ++ st,neg-edge; ++ vmmc-supply = <®_3v3>; ++ status = "okay"; ++}; ++ ++&sdmmc1_b4_pins_a { ++ /* ++ * board lacks external pull-ups on SDMMC lines. Class 10 SD refuses to ++ * work, thus enable internal pull-ups. ++ */ ++ pins1 { ++ /delete-property/ bias-disable; ++ bias-pull-up; ++ }; ++ pins2 { ++ /delete-property/ bias-disable; ++ bias-pull-up; ++ }; ++}; ++ ++&sdmmc2 { ++ pinctrl-names = "default", "opendrain"; ++ pinctrl-0 = <&sdmmc2_b4_pins_a &sdmmc2_d47_mc1pins_b>; ++ pinctrl-1 = <&sdmmc2_b4_od_pins_a &sdmmc2_d47_mc1pins_b>; ++ bus-width = <8>; ++ no-1-8-v; ++ no-sd; ++ no-sdio; ++ non-removable; ++ st,neg-edge; ++ vmmc-supply = <®_3v3>; ++ status = "okay"; ++}; ++ ++&timers3 { ++ status = "okay"; ++ ++ backlight_pwm: pwm { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pwm3_mc1pins_b>; ++ status = "okay"; ++ }; ++}; ++ ++&timers5 { ++ status = "okay"; ++ ++ leds_pwm: pwm { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pwm5_mc1pins_b>; ++ status = "okay"; ++ }; ++}; ++ ++&uart4 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&uart4_pins_a>; ++ status = "okay"; ++}; ++ ++&pinctrl { ++ ethernet0_rgmii_mc1pins_b: mc1-rgmii-1 { ++ pins1 { ++ pinmux = , /* ETH_RGMII_CLK125 */ ++ , /* ETH_RGMII_GTX_CLK */ ++ , /* ETH_RGMII_TXD0 */ ++ , /* ETH_RGMII_TXD1 */ ++ , /* ETH_RGMII_TXD2 */ ++ , /* ETH_RGMII_TXD3 */ ++ , /* ETH_RGMII_TX_CTL */ ++ ; /* ETH_MDC */ ++ bias-disable; ++ drive-push-pull; ++ slew-rate = <2>; ++ }; ++ pins2 { ++ pinmux = ; /* ETH_MDIO */ ++ bias-disable; ++ drive-push-pull; ++ slew-rate = <0>; ++ }; ++ pins3 { ++ pinmux = , /* ETH_RGMII_RXD0 */ ++ , /* ETH_RGMII_RXD1 */ ++ , /* ETH_RGMII_RXD2 */ ++ , /* ETH_RGMII_RXD3 */ ++ , /* ETH_RGMII_RX_CLK */ ++ ; /* ETH_RGMII_RX_CTL */ ++ bias-disable; ++ }; ++ }; ++ ++ i2c5_mc1pins_b: mc1-i2c5-1 { ++ pins { ++ pinmux = , /* I2C5_SCL */ ++ ; /* I2C5_SDA */ ++ bias-disable; ++ drive-open-drain; ++ slew-rate = <0>; ++ }; ++ }; ++ ++ ltdc_mc1pins_c: mc1-ltdc-2 { ++ pins1 { ++ pinmux = , /* LTDC_R6 */ ++ , /* LTDC_B7 */ ++ , /* LTDC_R5 */ ++ , /* LTDC_G7 */ ++ , /* LTDC_B2 */ ++ , /* LTDC_B3 */ ++ , /* LTDC_G3 */ ++ , /* LTDC_B4 */ ++ , /* LTDC_DE */ ++ , /* LTDC_R7 */ ++ , /* LTDC_G5 */ ++ , /* LTDC_R2 */ ++ , /* LTDC_R3 */ ++ , /* LTDC_R4 */ ++ , /* LTDC_G2 */ ++ , /* LTDC_G4 */ ++ , /* LTDC_G6 */ ++ , /* LTDC_B5 */ ++ , /* LTDC_B6 */ ++ , /* LTDC_VSYNC */ ++ ; /* LTDC_HSYNC */ ++ bias-disable; ++ drive-push-pull; ++ slew-rate = <0>; ++ }; ++ pins2 { ++ pinmux = ; /* LTDC_CLK */ ++ bias-disable; ++ drive-push-pull; ++ slew-rate = <1>; ++ }; ++ }; ++ ++ pwm3_mc1pins_b: mc1-pwm3-1 { ++ pins { ++ pinmux = ; /* TIM3_CH2 */ ++ bias-disable; ++ drive-push-pull; ++ slew-rate = <0>; ++ }; ++ }; ++ ++ pwm5_mc1pins_b: mc1-pwm5-1 { ++ pins { ++ pinmux = , /* TIM5_CH2 */ ++ , /* TIM5_CH3 */ ++ ; /* TIM5_CH4 */ ++ bias-disable; ++ drive-push-pull; ++ slew-rate = <0>; ++ }; ++ }; ++ ++ sdmmc2_d47_mc1pins_b: mc1-sdmmc2-d47-1 { ++ pins { ++ pinmux = , /* SDMMC2_D4 */ ++ , /* SDMMC2_D5 */ ++ , /* SDMMC2_D6 */ ++ ; /* SDMMC2_D7 */ ++ slew-rate = <1>; ++ drive-push-pull; ++ bias-disable; ++ }; ++ }; ++ ++}; +diff --git a/arch/arm/dts/stm32mp15xx-osd32.dtsi b/arch/arm/dts/stm32mp15xx-osd32.dtsi +new file mode 100644 +index 000000000000..87508350339e +--- /dev/null ++++ b/arch/arm/dts/stm32mp15xx-osd32.dtsi +@@ -0,0 +1,229 @@ ++/* SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-3-Clause) */ ++/* ++ * Copyright (C) 2020 STMicroelectronics - All Rights Reserved ++ * Copyright (C) 2020 Ahmad Fatoum, Pengutronix ++ */ ++ ++#include ++ ++#include ++ ++/ { ++ reserved-memory { ++ #address-cells = <1>; ++ #size-cells = <1>; ++ ranges; ++ ++ mcuram2: mcuram2@10000000 { ++ compatible = "shared-dma-pool"; ++ reg = <0x10000000 0x40000>; ++ no-map; ++ }; ++ ++ vdev0vring0: vdev0vring0@10040000 { ++ compatible = "shared-dma-pool"; ++ reg = <0x10040000 0x1000>; ++ no-map; ++ }; ++ ++ vdev0vring1: vdev0vring1@10041000 { ++ compatible = "shared-dma-pool"; ++ reg = <0x10041000 0x1000>; ++ no-map; ++ }; ++ ++ vdev0buffer: vdev0buffer@10042000 { ++ compatible = "shared-dma-pool"; ++ reg = <0x10042000 0x4000>; ++ no-map; ++ }; ++ ++ mcuram: mcuram@30000000 { ++ compatible = "shared-dma-pool"; ++ reg = <0x30000000 0x40000>; ++ no-map; ++ }; ++ ++ retram: retram@38000000 { ++ compatible = "shared-dma-pool"; ++ reg = <0x38000000 0x10000>; ++ no-map; ++ }; ++ }; ++ ++ reg_sip_eeprom: regulator_eeprom { ++ compatible = "regulator-fixed"; ++ regulator-name = "sip_eeprom"; ++ regulator-always-on; ++ }; ++}; ++ ++&i2c4 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&i2c4_pins_a>; ++ clock-frequency = <400000>; ++ i2c-scl-rising-time-ns = <185>; ++ i2c-scl-falling-time-ns = <20>; ++ status = "okay"; ++ ++ pmic: stpmic@33 { ++ compatible = "st,stpmic1"; ++ reg = <0x33>; ++ interrupts-extended = <&gpioa 0 IRQ_TYPE_EDGE_FALLING>; ++ interrupt-controller; ++ #interrupt-cells = <2>; ++ ++ regulators { ++ compatible = "st,stpmic1-regulators"; ++ ++ ldo1-supply = <&v3v3>; ++ ldo6-supply = <&v3v3>; ++ pwr_sw1-supply = <&bst_out>; ++ ++ vddcore: buck1 { ++ regulator-name = "vddcore"; ++ regulator-min-microvolt = <1200000>; ++ regulator-max-microvolt = <1350000>; ++ regulator-always-on; ++ regulator-initial-mode = <0>; ++ regulator-over-current-protection; ++ }; ++ ++ vdd_ddr: buck2 { ++ regulator-name = "vdd_ddr"; ++ regulator-min-microvolt = <1350000>; ++ regulator-max-microvolt = <1350000>; ++ regulator-always-on; ++ regulator-initial-mode = <0>; ++ regulator-over-current-protection; ++ }; ++ ++ vdd: buck3 { ++ regulator-name = "vdd"; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-always-on; ++ st,mask-reset; ++ regulator-initial-mode = <0>; ++ regulator-over-current-protection; ++ }; ++ ++ v3v3: buck4 { ++ regulator-name = "v3v3"; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-always-on; ++ regulator-over-current-protection; ++ regulator-initial-mode = <0>; ++ }; ++ ++ v1v8_audio: ldo1 { ++ regulator-name = "v1v8_audio"; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ regulator-always-on; ++ interrupts = ; ++ ++ }; ++ ++ v3v3_hdmi: ldo2 { ++ regulator-name = "v3v3_hdmi"; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-always-on; ++ interrupts = ; ++ ++ }; ++ ++ vtt_ddr: ldo3 { ++ regulator-name = "vtt_ddr"; ++ regulator-min-microvolt = <500000>; ++ regulator-max-microvolt = <750000>; ++ regulator-always-on; ++ regulator-over-current-protection; ++ }; ++ ++ vdd_usb: ldo4 { ++ regulator-name = "vdd_usb"; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ interrupts = ; ++ }; ++ ++ vdda: ldo5 { ++ regulator-name = "vdda"; ++ regulator-min-microvolt = <2900000>; ++ regulator-max-microvolt = <2900000>; ++ interrupts = ; ++ regulator-boot-on; ++ }; ++ ++ v1v2_hdmi: ldo6 { ++ regulator-name = "v1v2_hdmi"; ++ regulator-min-microvolt = <1200000>; ++ regulator-max-microvolt = <1200000>; ++ regulator-always-on; ++ interrupts = ; ++ ++ }; ++ ++ vref_ddr: vref_ddr { ++ regulator-name = "vref_ddr"; ++ regulator-always-on; ++ regulator-over-current-protection; ++ }; ++ ++ bst_out: boost { ++ regulator-name = "bst_out"; ++ interrupts = ; ++ }; ++ ++ vbus_otg: pwr_sw1 { ++ regulator-name = "vbus_otg"; ++ interrupts = ; ++ regulator-active-discharge; ++ }; ++ ++ vbus_sw: pwr_sw2 { ++ regulator-name = "vbus_sw"; ++ interrupts = ; ++ regulator-active-discharge; ++ }; ++ }; ++ ++ onkey { ++ compatible = "st,stpmic1-onkey"; ++ interrupts = , ; ++ interrupt-names = "onkey-falling", "onkey-rising"; ++ }; ++ ++ pmic_watchdog: watchdog { ++ compatible = "st,stpmic1-wdt"; ++ status = "disabled"; ++ }; ++ }; ++ ++ sip_eeprom: eeprom@50 { ++ compatible = "atmel,24c32"; ++ vcc-supply = <®_sip_eeprom>; ++ reg = <0x50>; ++ }; ++}; ++ ++&ipcc { ++ status = "okay"; ++}; ++ ++&m4_rproc { ++ memory-region = <&retram>, <&mcuram>, <&mcuram2>, <&vdev0vring0>, ++ <&vdev0vring1>, <&vdev0buffer>; ++ mboxes = <&ipcc 0>, <&ipcc 1>, <&ipcc 2>; ++ mbox-names = "vq0", "vq1", "shutdown"; ++ interrupt-parent = <&exti>; ++ interrupts = <68 1>; ++ status = "okay"; ++}; ++ ++&rng1 { ++ status = "okay"; ++}; +diff --git a/arch/arm/mach-stm32mp/Kconfig b/arch/arm/mach-stm32mp/Kconfig +index 9b55a3d21843..6e816ef9d1a4 100644 +--- a/arch/arm/mach-stm32mp/Kconfig ++++ b/arch/arm/mach-stm32mp/Kconfig +@@ -12,4 +12,8 @@ config MACH_STM32MP157C_DK2 + select ARCH_STM32MP157 + bool "STM32MP157C-DK2 board" + ++config MACH_LXA_MC1 ++ select ARCH_STM32MP157 ++ bool "Linux Automation MC-1 board" ++ + endif +diff --git a/images/Makefile.stm32mp b/images/Makefile.stm32mp +index 910e029a5b66..38872c952571 100644 +--- a/images/Makefile.stm32mp ++++ b/images/Makefile.stm32mp +@@ -17,3 +17,8 @@ pblb-$(CONFIG_MACH_STM32MP157C_DK2) += start_stm32mp157c_dk2 + FILE_barebox-stm32mp157c-dk2.img = start_stm32mp157c_dk2.pblb.stm32 + OPTS_start_stm32mp157c_dk2.pblb.stm32 = $(STM32MP1_OPTS) + image-$(CONFIG_MACH_STM32MP157C_DK2) += barebox-stm32mp157c-dk2.img ++ ++pblb-$(CONFIG_MACH_LXA_MC1) += start_stm32mp157c_lxa_mc1 ++FILE_barebox-stm32mp157c-lxa-mc1.img = start_stm32mp157c_lxa_mc1.pblb.stm32 ++OPTS_start_stm32mp157c_lxa_mc1.pblb.stm32 = $(STM32MP1_OPTS) ++image-$(CONFIG_MACH_LXA_MC1) += barebox-stm32mp157c-lxa-mc1.img diff --git a/configs/platform-v7a/patches/barebox-2020.04.0/0002-ARM-stm32mp-lxa-mc1-break-reg_3v3-dependency-on-PMIC.patch b/configs/platform-v7a/patches/barebox-2020.04.0/0002-ARM-stm32mp-lxa-mc1-break-reg_3v3-dependency-on-PMIC.patch new file mode 100644 index 0000000..451bb7b --- /dev/null +++ b/configs/platform-v7a/patches/barebox-2020.04.0/0002-ARM-stm32mp-lxa-mc1-break-reg_3v3-dependency-on-PMIC.patch @@ -0,0 +1,60 @@ +From: Ahmad Fatoum +Date: Thu, 13 Feb 2020 11:10:44 +0100 +Subject: [PATCH] ARM: stm32mp: lxa-mc1: break reg_3v3 dependency on PMIC + +While the regulator is indeed powered by the PMIC, basically the whole +system is, and it's always on. Linux doesn't handle this specially +however and will defer SDMMC probe till after the PMIC is probed costing +us some valuable boot time. Fix this up. + +Signed-off-by: Ahmad Fatoum +--- + arch/arm/boards/lxa-mc1/board.c | 29 ++++++++++++++++++++++++++++- + 1 file changed, 28 insertions(+), 1 deletion(-) + +diff --git a/arch/arm/boards/lxa-mc1/board.c b/arch/arm/boards/lxa-mc1/board.c +index d36924fc2793..7f1f3ccd7e06 100644 +--- a/arch/arm/boards/lxa-mc1/board.c ++++ b/arch/arm/boards/lxa-mc1/board.c +@@ -5,6 +5,28 @@ + #include + #include + #include ++#include ++ ++static int of_fixup_regulator_supply_disable(struct device_node *root, void *path) ++{ ++ struct device_node *node; ++ struct property *prop; ++ ++ node = of_find_node_by_path_from(root, path); ++ if (!node) { ++ pr_warn("fixup for %s failed: not found\n", (const char *)path); ++ return -ENOENT; ++ } ++ ++ if (!of_property_read_bool(node, "regulator-always-on")) ++ return 0; ++ ++ prop = of_find_property(node, "vin-supply", NULL); ++ if (prop) ++ of_delete_property(prop); ++ ++ return 0; ++} + + static int mc1_device_init(void) + { +@@ -26,6 +48,11 @@ static int mc1_device_init(void) + + barebox_set_hostname("lxa-mc1"); + +- return 0; ++ /* The regulator is powered by the PMIC, but is always on as far as ++ * software is concerned. Break the reference to the PMIC, so the OS ++ * doesn't need to defer SDMMC/Ethernet peripherals till after the PMIC ++ * is up. ++ */ ++ return of_register_fixup(of_fixup_regulator_supply_disable, "/regulator_3v3"); + } + device_initcall(mc1_device_init); diff --git a/configs/platform-v7a/patches/barebox-2020.04.0/0101-Release-2020.04.0-customers-pengutronix-distrokit-v7.patch b/configs/platform-v7a/patches/barebox-2020.04.0/0101-Release-2020.04.0-customers-pengutronix-distrokit-v7.patch new file mode 100644 index 0000000..3f85f36 --- /dev/null +++ b/configs/platform-v7a/patches/barebox-2020.04.0/0101-Release-2020.04.0-customers-pengutronix-distrokit-v7.patch @@ -0,0 +1,22 @@ +From: Ahmad Fatoum +Date: Fri, 24 Apr 2020 18:03:30 +0200 +Subject: [PATCH] Release + 2020.04.0/customers/pengutronix/distrokit-v7a/20200424-2 + +--- + Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Makefile b/Makefile +index b3d67b0863ac..c51276a8b2af 100644 +--- a/Makefile ++++ b/Makefile +@@ -1,7 +1,7 @@ + VERSION = 2020 + PATCHLEVEL = 04 + SUBLEVEL = 0 +-EXTRAVERSION = ++EXTRAVERSION =-20200424-2 + NAME = None + + # *DOCUMENTATION* diff --git a/configs/platform-v7a/patches/barebox-2020.04.0/series b/configs/platform-v7a/patches/barebox-2020.04.0/series new file mode 100644 index 0000000..83b5861 --- /dev/null +++ b/configs/platform-v7a/patches/barebox-2020.04.0/series @@ -0,0 +1,12 @@ +# umpf-base: v2020.04.0 +# umpf-name: 2020.04.0/customers/pengutronix/distrokit-v7a +# umpf-version: 2020.04.0/customers/pengutronix/distrokit-v7a/20200424-2 +# umpf-topic: v2020.04.0/customers/lag/mc1 +# umpf-hashinfo: 2e41d9501ca57285e1e5e4750e6faba8df7addf2 +# umpf-topic-range: a999dc558770732d475e423060d54b93e36436ce..b379003cdf62913430a3ddad52a8b3a0ce87ab6f +0001-ARM-stm32mp-add-Linux-Automation-MC-1-support.patch +0002-ARM-stm32mp-lxa-mc1-break-reg_3v3-dependency-on-PMIC.patch +# umpf-release: 2020.04.0/customers/pengutronix/distrokit-v7a/20200424-2 +# umpf-topic-range: b379003cdf62913430a3ddad52a8b3a0ce87ab6f..1db48ec1cf199fd9c9f17c8e3c243824ee4f5f5c +0101-Release-2020.04.0-customers-pengutronix-distrokit-v7.patch +# umpf-end -- cgit v1.2.3