Compare commits
257 Commits
v2022.04-r
...
v2021.10-s
| Author | SHA1 | Date | |
|---|---|---|---|
| ef9715e762 | |||
| 47611d9252 | |||
| a28201176d | |||
| 5dc7c456a1 | |||
| 65a6c3beaa | |||
| 9cf2cc3c51 | |||
| 3c48194ffa | |||
| ccb3a05989 | |||
| 4a22117825 | |||
| ab357b2439 | |||
| 83a972e588 | |||
| 3ed350c2a1 | |||
| 3076f946b7 | |||
| c92351ea00 | |||
| f4037f75b6 | |||
| 4e4356e9c5 | |||
| ef28f3f0a6 | |||
| 699d8964ba | |||
| d64ea4cb86 | |||
| 2f74425e8b | |||
| e117c2ad32 | |||
| 010f0e12ba | |||
| cd3d4a9d1f | |||
| 8b9a2476b7 | |||
| de79e6949f | |||
| fba8d6b38c | |||
| 0e3c42448a | |||
| 423ebb16d2 | |||
| 6ee50e27f0 | |||
| 8dfc59ce95 | |||
| 1d337aa8dc | |||
| d8c511144a | |||
| c189609d33 | |||
| 9bbe98426b | |||
| 3e6ec74c43 | |||
| 6ee1aad5b6 | |||
| 7c0508bcc8 | |||
| b25fc67425 | |||
| 5186289e66 | |||
| 97402fc9a3 | |||
| 92f9ee4c50 | |||
| 5f2761e423 | |||
| b1575c9704 | |||
| 796429d01e | |||
| f1ee2f5b66 | |||
| d7cf053394 | |||
| 7eeb19f152 | |||
| 158eb2b33c | |||
| 32a22b57c8 | |||
| 892438f57c | |||
| 43dbc2d182 | |||
| bc1af77ffc | |||
| 68a4a0b436 | |||
| 3e36da694a | |||
| b6322ffdec | |||
| 183f041e38 | |||
| 04f2753854 | |||
| 0a1a77dd91 | |||
| 51932b5bf2 | |||
| ebf26f9821 | |||
| bd92d42f2b | |||
| 530e7bfb2b | |||
| 1333335513 | |||
| 62a78a33f7 | |||
| 6f102bacfe | |||
| 91c57a9774 | |||
| 0b43c21748 | |||
| b8f032657d | |||
| e1c73a5934 | |||
| f82deb4aba | |||
| 13492aa128 | |||
| b088f253a7 | |||
| 71a2139af6 | |||
| 41d06ae22b | |||
| 999f41b7e4 | |||
| cee720d080 | |||
| 64c805e2fa | |||
| b149a188c3 | |||
| b943cf2c0b | |||
| 4959d833e1 | |||
| 9796e81234 | |||
| ee99077acf | |||
| 00b08c7b1a | |||
| 0e61924d5a | |||
| 58291d94e3 | |||
| 1009730a30 | |||
| 8b92965b88 | |||
| 0b2a568156 | |||
| b5bbc02ae5 | |||
| 600ae9915d | |||
| 4743b6c59d | |||
| d6a54e7dff | |||
| 3930ba7caf | |||
| 789f950180 | |||
| 5ce98f7445 | |||
| a0874404b3 | |||
| c2c185aa12 | |||
| d3fac41f5a | |||
| 38f55b6ae3 | |||
| c818787718 | |||
| e0408bf8e7 | |||
| 48e9be99dc | |||
| 887b4b40f1 | |||
| bc21c829c4 | |||
| 2ae4ea6d21 | |||
| 023dde0a2a | |||
| 75ea9e7593 | |||
| d57c9df2ec | |||
| 07dc0013ca | |||
| a1fd6aa0f7 | |||
| 232062cc15 | |||
| abb9b1c968 | |||
| 6bcc1dbb4e | |||
| d3a7749fed | |||
| e2020ba38b | |||
| 99db47d0d5 | |||
| 5dc7b144d8 | |||
| 1745850e87 | |||
| 897d27ce00 | |||
| 5f6ada1f1e | |||
| 5df0e43b06 | |||
| 9252e76a85 | |||
| e30b443ca6 | |||
| eacb8d4a59 | |||
| 41de7a85dc | |||
| 1a00281673 | |||
| 35fad85bf6 | |||
| e1cfddeba0 | |||
| 03ecc33869 | |||
| 23c079ada3 | |||
| ac58f7d935 | |||
| 01f0f22488 | |||
| 5be75f2f5c | |||
| ddd5c9d823 | |||
| a37b37e853 | |||
| ee5cbb9572 | |||
| a0e7701e23 | |||
| 913e44d801 | |||
| ce0f986a07 | |||
| ae882f6ac2 | |||
| b3ba91918e | |||
| ff405804c0 | |||
| b237385376 | |||
| 0e7a410018 | |||
| a963928634 | |||
| 22e746daf3 | |||
| ea3b32e88b | |||
| 7cbb48923a | |||
| 34a2d1841e | |||
| 0c46193206 | |||
| 59bfe705b0 | |||
| 9b1121a5e9 | |||
| fc338e0797 | |||
| 4d12f1fb9f | |||
| d71468e79c | |||
| dd0f840cf4 | |||
| f72092f680 | |||
| 244732bcb2 | |||
| f34b31e35d | |||
| 535c255a7f | |||
| 15c50dcc40 | |||
| 1d98a266bc | |||
| 752892df48 | |||
| 62b81b7417 | |||
| cb2875221f | |||
| a3e691ee50 | |||
| 612f23a797 | |||
| 3a64abd3fd | |||
| ec76df3f7c | |||
| 91b4aec89b | |||
| 1b7e12085a | |||
| fa5d924335 | |||
| 3526f86bff | |||
| a93ca496b2 | |||
| 2f5d46d0d1 | |||
| 6b0351ebf0 | |||
| d4bb6fbb7f | |||
| 44a1ac15b3 | |||
| ad7bc53147 | |||
| a840166a74 | |||
| a19d014f31 | |||
| 8182257dd0 | |||
| 96cc7f779f | |||
| 764d11bfc4 | |||
| 803cd3efbd | |||
| 14c24b4d0f | |||
| 3b44633605 | |||
| 56d81b0cdf | |||
| 8e9b5dba51 | |||
| c8abb1d5c4 | |||
| 9ade665fdb | |||
| 26c1a9ba94 | |||
| ca155ce57d | |||
| 4a92606312 | |||
| 17d24872c4 | |||
| 2e78e9199d | |||
| a989833c02 | |||
| 53583d5fe3 | |||
| 50c8046e55 | |||
| 722acf9498 | |||
| 74f171cb78 | |||
| 0d11b402ac | |||
| 07a21b542d | |||
| 7b602c2a1e | |||
| 88b8b0fae4 | |||
| c6bff9b672 | |||
| ded9b8b5f5 | |||
| eb59263402 | |||
| cf963a4569 | |||
| f6e3980172 | |||
| b2e6cc2e21 | |||
| c808e7dbb8 | |||
| 3e0c06d6f0 | |||
| cb1bebd7b8 | |||
| a11fb011b1 | |||
| 7ffe2fed45 | |||
| 52789c337a | |||
| 556623f655 | |||
| 75b8fae9df | |||
| 6559afefe7 | |||
| edafb68fac | |||
| 2f55c66b42 | |||
| 6bb428adfe | |||
| b4c0d7446a | |||
| c1937a96ed | |||
| fe30957324 | |||
| 205d9b5c68 | |||
| c752c93b62 | |||
| d914d373cb | |||
| 678e6aa8cf | |||
| 5f553e98ff | |||
| 25a35b580f | |||
| f434421fa5 | |||
| 85424c6acd | |||
| b4e8c92fd5 | |||
| e23f1695ab | |||
| 5571bfa33d | |||
| e24f1e85ab | |||
| 19d0c38478 | |||
| dab61d66dc | |||
| 58719fd87a | |||
| 1f3542b9d8 | |||
| b89cb2cd85 | |||
| 0c63ec6bbf | |||
| f395183193 | |||
| bcd3802dd7 | |||
| 0a58920b36 | |||
| 8f82e4f5a0 | |||
| e421a5b915 | |||
| b60f6692ba | |||
| 52c2efafd9 | |||
| 3f65bea896 | |||
| 8239f309fb | |||
| 6e0f44d777 | |||
| 0b061541ab | |||
| af69f7c624 | |||
| a10492dfbe |
30
CONTRIBUTING.md
Normal file
30
CONTRIBUTING.md
Normal file
@ -0,0 +1,30 @@
|
||||
# Contributing guide
|
||||
|
||||
This document serves as a checklist before contributing to this repository. It includes links to read up on if topics are unclear to you.
|
||||
|
||||
This guide mainly focuses on the proper use of Git.
|
||||
|
||||
## 1. Issues
|
||||
|
||||
STM32MPU projects do not activate "Github issues" feature for the time being. If you need to report an issue or question about this project deliverables, you can report them using [ ST Support Center ](https://my.st.com/ols#/ols/newrequest) or [ ST Community MPU Forum ](https://community.st.com/s/topic/0TO0X0000003u2AWAQ/stm32-mpus).
|
||||
|
||||
## 2. Pull Requests
|
||||
|
||||
STMicrolectronics is happy to receive contributions from the community, based on an initial Contributor License Agreement (CLA) procedure.
|
||||
|
||||
* If you are an individual writing original source code and you are sure **you own the intellectual property**, then you need to sign an Individual CLA (https://cla.st.com).
|
||||
* If you work for a company that wants also to allow you to contribute with your work, your company needs to provide a Corporate CLA (https://cla.st.com) mentioning your GitHub account name.
|
||||
* If you are not sure that a CLA (Individual or Corporate) has been signed for your GitHub account you can check here (https://cla.st.com).
|
||||
|
||||
Please note that:
|
||||
* The Corporate CLA will always take precedence over the Individual CLA.
|
||||
* One CLA submission is sufficient, for any project proposed by STMicroelectronics.
|
||||
|
||||
__How to proceed__
|
||||
|
||||
* We recommend to fork the project in your GitHub account to further develop your contribution. Please use the latest commit version.
|
||||
* Please, submit one Pull Request for one new feature or proposal. This will ease the analysis and final merge if accepted.
|
||||
|
||||
__Note__
|
||||
|
||||
Merge will not be done directly in GitHub but it will need first to follow internal integration process before public deliver in a standard release. The Pull request will stay open until it is merged and delivered.
|
||||
@ -438,6 +438,7 @@ F: drivers/power/regulator/stpmic1.c
|
||||
F: drivers/ram/stm32mp1/
|
||||
F: drivers/remoteproc/stm32_copro.c
|
||||
F: drivers/reset/stm32-reset.c
|
||||
F: drivers/rng/optee_rng.c
|
||||
F: drivers/rng/stm32mp1_rng.c
|
||||
F: drivers/rtc/stm32_rtc.c
|
||||
F: drivers/serial/serial_stm32.*
|
||||
|
||||
10
Makefile
10
Makefile
@ -3,7 +3,7 @@
|
||||
VERSION = 2021
|
||||
PATCHLEVEL = 10
|
||||
SUBLEVEL =
|
||||
EXTRAVERSION =
|
||||
EXTRAVERSION = -stm32mp-r1
|
||||
NAME =
|
||||
|
||||
# *DOCUMENTATION*
|
||||
@ -843,6 +843,7 @@ libs-y += drivers/usb/mtu3/
|
||||
libs-y += drivers/usb/musb/
|
||||
libs-y += drivers/usb/musb-new/
|
||||
libs-y += drivers/usb/phy/
|
||||
libs-y += drivers/usb/typec/
|
||||
libs-y += drivers/usb/ulpi/
|
||||
ifdef CONFIG_POST
|
||||
libs-y += post/
|
||||
@ -1123,6 +1124,13 @@ ifneq ($(CONFIG_DM),y)
|
||||
@echo >&2 "Failure to update may result in board removal."
|
||||
@echo >&2 "See doc/driver-model/migration.rst for more info."
|
||||
@echo >&2 "===================================================="
|
||||
endif
|
||||
ifeq ($(CONFIG_STM32MP15x_STM32IMAGE),y)
|
||||
@echo >&2 "===================== WARNING ======================"
|
||||
@echo >&2 "This board uses CONFIG_STM32MP15x_STM32IMAGE for STM32 image"
|
||||
@echo >&2 "support in TF-A and these configuration is deprecated."
|
||||
@echo >&2 "Please migrate to FIP support in TF-A instead."
|
||||
@echo >&2 "===================================================="
|
||||
endif
|
||||
$(call deprecated,CONFIG_WDT,DM watchdog,v2019.10,\
|
||||
$(CONFIG_WATCHDOG)$(CONFIG_HW_WATCHDOG))
|
||||
|
||||
8
SECURITY.md
Normal file
8
SECURITY.md
Normal file
@ -0,0 +1,8 @@
|
||||
# Report potential product security vulnerabilities
|
||||
ST places a high priority on security, and our Product Security Incident Response Team (PSIRT) is committed to rapidly addressing potential security vulnerabilities affecting our products. PSIRT's long history and vast experience in security allows ST to perform clear analyses and provide appropriate guidance on mitigations and solutions when applicable.
|
||||
If you wish to report potential security vulnerabilities regarding our products, **please do not report them through public GitHub issues.** Instead, we encourage you to report them to our ST PSIRT following the process described at: **https://www.st.com/content/st_com/en/security/report-vulnerabilities.html**
|
||||
|
||||
### IMPORTANT - READ CAREFULLY:
|
||||
STMicroelectronics International N.V., on behalf of itself, its affiliates and subsidiaries, (collectively “ST”) takes all potential security vulnerability reports or other related communications (“Report(s)”) seriously. In order to review Your Report (the terms “You” and “Yours” include your employer, and all affiliates, subsidiaries and related persons or entities) and take actions as deemed appropriate, ST requires that we have the rights and Your permission to do so.
|
||||
As such, by submitting Your Report to ST, You agree that You have the right to do so, and You grant to ST the rights to use the Report for purposes related to security vulnerability analysis, testing, correction, patching, reporting and any other related purpose or function.
|
||||
By submitting Your Report, You agree that ST’s [Privacy Policy](https://www.st.com/content/st_com/en/common/privacy-portal.html) applies to all related communications.
|
||||
@ -1749,7 +1749,6 @@ config ARCH_STM32
|
||||
select CPU_V7M
|
||||
select DM
|
||||
select DM_SERIAL
|
||||
select GPIO_EXTRA_HEADER
|
||||
imply CMD_DM
|
||||
|
||||
config ARCH_STI
|
||||
@ -1775,14 +1774,12 @@ config ARCH_STM32MP
|
||||
select DM_GPIO
|
||||
select DM_RESET
|
||||
select DM_SERIAL
|
||||
select GPIO_EXTRA_HEADER
|
||||
select MISC
|
||||
select OF_CONTROL
|
||||
select OF_LIBFDT
|
||||
select OF_SYSTEM_SETUP
|
||||
select PINCTRL
|
||||
select REGMAP
|
||||
select SUPPORT_SPL
|
||||
select SYSCON
|
||||
select SYSRESET
|
||||
select SYS_THUMB_BUILD
|
||||
|
||||
@ -18,7 +18,7 @@ static struct stv0991_cgu_regs *const stv0991_cgu_regs = \
|
||||
(struct stv0991_cgu_regs *) (CGU_BASE_ADDR);
|
||||
|
||||
#define READ_TIMER() (readl(&gpt1_regs_ptr->cnt) & GPT_FREE_RUNNING)
|
||||
#define GPT_RESOLUTION (CONFIG_STV0991_HZ_CLOCK / CONFIG_STV0991_HZ)
|
||||
#define GPT_RESOLUTION (CONFIG_SYS_HZ_CLOCK / CONFIG_SYS_HZ)
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
@ -67,7 +67,7 @@ void __udelay(unsigned long usec)
|
||||
{
|
||||
ulong tmo;
|
||||
ulong start = get_timer_masked();
|
||||
ulong tenudelcnt = CONFIG_STV0991_HZ_CLOCK / (1000 * 100);
|
||||
ulong tenudelcnt = CONFIG_SYS_HZ_CLOCK / (1000 * 100);
|
||||
ulong rndoff;
|
||||
|
||||
rndoff = (usec % 10) ? 1 : 0;
|
||||
@ -110,5 +110,5 @@ unsigned long long get_ticks(void)
|
||||
*/
|
||||
ulong get_tbclk(void)
|
||||
{
|
||||
return CONFIG_STV0991_HZ;
|
||||
return CONFIG_SYS_HZ;
|
||||
}
|
||||
|
||||
@ -1074,9 +1074,15 @@ dtb-$(CONFIG_ASPEED_AST2600) += ast2600-evb.dtb
|
||||
|
||||
dtb-$(CONFIG_ARCH_STI) += stih410-b2260.dtb
|
||||
|
||||
dtb-$(CONFIG_STM32MP13x) += \
|
||||
stm32mp135d-dk.dtb \
|
||||
stm32mp135f-dk.dtb
|
||||
|
||||
dtb-$(CONFIG_STM32MP15x) += \
|
||||
stm32mp157a-dk1.dtb \
|
||||
stm32mp157a-avenger96.dtb \
|
||||
stm32mp157a-dk1.dtb \
|
||||
stm32mp157a-ed1.dtb \
|
||||
stm32mp157a-ev1.dtb \
|
||||
stm32mp157a-icore-stm32mp1-ctouch2.dtb \
|
||||
stm32mp157a-icore-stm32mp1-edimm2.2.dtb \
|
||||
stm32mp157a-microgea-stm32mp1-microdev2.0.dtb \
|
||||
@ -1086,6 +1092,12 @@ dtb-$(CONFIG_STM32MP15x) += \
|
||||
stm32mp157c-ev1.dtb \
|
||||
stm32mp157c-odyssey.dtb \
|
||||
stm32mp15xx-dhcom-drc02.dtb \
|
||||
stm32mp157d-dk1.dtb \
|
||||
stm32mp157d-ed1.dtb \
|
||||
stm32mp157d-ev1.dtb \
|
||||
stm32mp157f-dk2.dtb \
|
||||
stm32mp157f-ed1.dtb \
|
||||
stm32mp157f-ev1.dtb \
|
||||
stm32mp15xx-dhcom-pdk2.dtb \
|
||||
stm32mp15xx-dhcom-picoitx.dtb \
|
||||
stm32mp15xx-dhcor-avenger96.dtb
|
||||
|
||||
@ -33,7 +33,7 @@
|
||||
|
||||
fmc: fmc@A0000000 {
|
||||
compatible = "st,stm32-fmc";
|
||||
reg = <0xA0000000 0x1000>;
|
||||
reg = <0xa0000000 0x1000>;
|
||||
clocks = <&rcc 0 STM32F4_AHB3_CLOCK(FMC)>;
|
||||
st,syscfg = <&syscfg>;
|
||||
pinctrl-0 = <&fmc_pins_d32>;
|
||||
|
||||
@ -177,7 +177,7 @@
|
||||
};
|
||||
|
||||
&qspi {
|
||||
reg = <0xA0001000 0x1000>, <0x90000000 0x4000000>;
|
||||
reg = <0xa0001000 0x1000>, <0x90000000 0x4000000>;
|
||||
qflash0: n25q512a@0 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
@ -33,7 +33,7 @@
|
||||
|
||||
fmc: fmc@A0000000 {
|
||||
compatible = "st,stm32-fmc";
|
||||
reg = <0xA0000000 0x1000>;
|
||||
reg = <0xa0000000 0x1000>;
|
||||
clocks = <&rcc 0 STM32F4_AHB3_CLOCK(FMC)>;
|
||||
pinctrl-0 = <&fmc_pins>;
|
||||
pinctrl-names = "default";
|
||||
|
||||
@ -34,7 +34,7 @@
|
||||
|
||||
fmc: fmc@A0000000 {
|
||||
compatible = "st,stm32-fmc";
|
||||
reg = <0xA0000000 0x1000>;
|
||||
reg = <0xa0000000 0x1000>;
|
||||
clocks = <&rcc 0 STM32F4_AHB3_CLOCK(FMC)>;
|
||||
st,syscfg = <&syscfg>;
|
||||
pinctrl-0 = <&fmc_pins_d32>;
|
||||
@ -70,7 +70,7 @@
|
||||
compatible = "st,stm32f469-qspi";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
reg = <0xA0001000 0x1000>, <0x90000000 0x10000000>;
|
||||
reg = <0xa0001000 0x1000>, <0x90000000 0x10000000>;
|
||||
reg-names = "qspi", "qspi_mm";
|
||||
interrupts = <91>;
|
||||
spi-max-frequency = <108000000>;
|
||||
@ -236,7 +236,7 @@
|
||||
};
|
||||
|
||||
&qspi {
|
||||
reg = <0xA0001000 0x1000>, <0x90000000 0x1000000>;
|
||||
reg = <0xa0001000 0x1000>, <0x90000000 0x1000000>;
|
||||
flash0: n25q128a@0 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
@ -7,7 +7,7 @@
|
||||
|
||||
fmc: fmc@A0000000 {
|
||||
compatible = "st,stm32-fmc";
|
||||
reg = <0xA0000000 0x1000>;
|
||||
reg = <0xa0000000 0x1000>;
|
||||
clocks = <&rcc 0 STM32F7_AHB3_CLOCK(FMC)>;
|
||||
pinctrl-0 = <&fmc_pins>;
|
||||
pinctrl-names = "default";
|
||||
@ -46,7 +46,7 @@
|
||||
compatible = "st,stm32f469-qspi";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
reg = <0xA0001000 0x1000>, <0x90000000 0x10000000>;
|
||||
reg = <0xa0001000 0x1000>, <0x90000000 0x10000000>;
|
||||
reg-names = "qspi", "qspi_mm";
|
||||
interrupts = <92>;
|
||||
spi-max-frequency = <108000000>;
|
||||
|
||||
@ -228,7 +228,7 @@
|
||||
};
|
||||
|
||||
&qspi {
|
||||
reg = <0xA0001000 0x1000>, <0x90000000 0x1000000>;
|
||||
reg = <0xa0001000 0x1000>, <0x90000000 0x1000000>;
|
||||
qflash0: n25q128a@0 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
@ -313,6 +313,7 @@
|
||||
clocks = <&rcc 1 CLK_I2C1>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
i2c-analog-filter;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@ -325,6 +326,7 @@
|
||||
clocks = <&rcc 1 CLK_I2C2>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
i2c-analog-filter;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@ -337,6 +339,7 @@
|
||||
clocks = <&rcc 1 CLK_I2C3>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
i2c-analog-filter;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@ -349,6 +352,7 @@
|
||||
clocks = <&rcc 1 CLK_I2C4>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
i2c-analog-filter;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
||||
@ -53,9 +53,9 @@
|
||||
soc {
|
||||
dsi: dsi@40016c00 {
|
||||
compatible = "st,stm32-dsi";
|
||||
reg = <0x40016C00 0x800>;
|
||||
reg = <0x40016c00 0x800>;
|
||||
resets = <&rcc STM32F7_APB2_RESET(DSI)>;
|
||||
clocks = <&rcc 0 STM32F7_APB2_CLOCK(DSI)>,
|
||||
clocks = <&rcc 0 STM32F7_APB2_CLOCK(DSI)>,
|
||||
<&rcc 0 STM32F7_APB2_CLOCK(LTDC)>,
|
||||
<&clk_hse>;
|
||||
clock-names = "pclk", "px_clk", "ref";
|
||||
@ -227,7 +227,7 @@
|
||||
};
|
||||
|
||||
&qspi {
|
||||
reg = <0xA0001000 0x1000>, <0x90000000 0x4000000>;
|
||||
reg = <0xa0001000 0x1000>, <0x90000000 0x4000000>;
|
||||
flash0: mx66l51235l@0 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
@ -124,6 +124,7 @@
|
||||
<32>;
|
||||
resets = <&rcc STM32H7_APB1L_RESET(I2C1)>;
|
||||
clocks = <&rcc I2C1_CK>;
|
||||
i2c-analog-filter;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@ -136,6 +137,7 @@
|
||||
<34>;
|
||||
resets = <&rcc STM32H7_APB1L_RESET(I2C2)>;
|
||||
clocks = <&rcc I2C2_CK>;
|
||||
i2c-analog-filter;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@ -148,6 +150,7 @@
|
||||
<73>;
|
||||
resets = <&rcc STM32H7_APB1L_RESET(I2C3)>;
|
||||
clocks = <&rcc I2C3_CK>;
|
||||
i2c-analog-filter;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@ -395,6 +398,7 @@
|
||||
<96>;
|
||||
resets = <&rcc STM32H7_APB4_RESET(I2C4)>;
|
||||
clocks = <&rcc I2C4_CK>;
|
||||
i2c-analog-filter;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
||||
644
arch/arm/dts/stm32mp13-pinctrl.dtsi
Normal file
644
arch/arm/dts/stm32mp13-pinctrl.dtsi
Normal file
@ -0,0 +1,644 @@
|
||||
// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
|
||||
/*
|
||||
* Copyright (C) STMicroelectronics 2021 - All Rights Reserved
|
||||
* Author: Alexandre Torgue <alexandre.torgue@foss.st.com>
|
||||
*/
|
||||
#include <dt-bindings/pinctrl/stm32-pinfunc.h>
|
||||
|
||||
&pinctrl {
|
||||
adc1_usb_cc_pins_a: adc1-usb-cc-pins-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('F', 12, ANALOG)>, /* ADC1 in6 */
|
||||
<STM32_PINMUX('A', 3, ANALOG)>; /* ADC1 in12 */
|
||||
};
|
||||
};
|
||||
|
||||
dcmipp_pins_a: dcmi-0 {
|
||||
pins1 {
|
||||
pinmux = <STM32_PINMUX('H', 8, AF13)>,/* DCMI_HSYNC */
|
||||
<STM32_PINMUX('G', 9, AF13)>,/* DCMI_VSYNC */
|
||||
<STM32_PINMUX('B', 7, AF14)>,/* DCMI_PIXCLK */
|
||||
<STM32_PINMUX('A', 9, AF13)>,/* DCMI_D0 */
|
||||
<STM32_PINMUX('D', 0, AF13)>,/* DCMI_D1 */
|
||||
<STM32_PINMUX('G', 10, AF13)>,/* DCMI_D2 */
|
||||
<STM32_PINMUX('E', 4, AF13)>,/* DCMI_D3 */
|
||||
<STM32_PINMUX('D', 11, AF14)>,/* DCMI_D4 */
|
||||
<STM32_PINMUX('D', 3, AF13)>,/* DCMI_D5 */
|
||||
<STM32_PINMUX('B', 8, AF13)>,/* DCMI_D6 */
|
||||
<STM32_PINMUX('E', 14, AF13)>;/* DCMI_D7 */
|
||||
bias-disable;
|
||||
};
|
||||
};
|
||||
|
||||
dcmipp_sleep_pins_a: dcmi-sleep-0 {
|
||||
pins1 {
|
||||
pinmux = <STM32_PINMUX('H', 8, ANALOG)>,/* DCMI_HSYNC */
|
||||
<STM32_PINMUX('G', 9, ANALOG)>,/* DCMI_VSYNC */
|
||||
<STM32_PINMUX('B', 7, ANALOG)>,/* DCMI_PIXCLK */
|
||||
<STM32_PINMUX('A', 9, ANALOG)>,/* DCMI_D0 */
|
||||
<STM32_PINMUX('D', 0, ANALOG)>,/* DCMI_D1 */
|
||||
<STM32_PINMUX('G', 10, ANALOG)>,/* DCMI_D2 */
|
||||
<STM32_PINMUX('E', 4, ANALOG)>,/* DCMI_D3 */
|
||||
<STM32_PINMUX('D', 11, ANALOG)>,/* DCMI_D4 */
|
||||
<STM32_PINMUX('D', 3, ANALOG)>,/* DCMI_D5 */
|
||||
<STM32_PINMUX('B', 8, ANALOG)>,/* DCMI_D6 */
|
||||
<STM32_PINMUX('E', 14, ANALOG)>;/* DCMI_D7 */
|
||||
};
|
||||
};
|
||||
|
||||
dfsdm_clkout_pins_a: dfsdm-clkout-pins-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('C', 3, AF3)>; /* DFSDM_CKOUT */
|
||||
bias-disable;
|
||||
drive-push-pull;
|
||||
slew-rate = <0>;
|
||||
};
|
||||
};
|
||||
|
||||
dfsdm_clkout_sleep_pins_a: dfsdm-clkout-sleep-pins-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('C', 3, ANALOG)>; /* DFSDM_CKOUT */
|
||||
};
|
||||
};
|
||||
|
||||
dfsdm_datin1_pins_a: dfsdm-datin1-pins-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('B', 1, AF6)>; /* DFSDM_DATIN1 */
|
||||
};
|
||||
};
|
||||
|
||||
dfsdm_datin1_sleep_pins_a: dfsdm-datin1-sleep-pins-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('B', 1, ANALOG)>; /* DFSDM_DATIN1 */
|
||||
};
|
||||
};
|
||||
|
||||
dfsdm_datin3_pins_a: dfsdm-datin3-pins-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('F', 13, AF6)>; /* DFSDM_DATIN3 */
|
||||
};
|
||||
};
|
||||
|
||||
dfsdm_datin3_sleep_pins_a: dfsdm-datin3-sleep-pins-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('F', 13, ANALOG)>; /* DFSDM_DATIN3 */
|
||||
};
|
||||
};
|
||||
|
||||
eth1_rmii_pins_a: eth1-rmii-1 {
|
||||
pins1 {
|
||||
pinmux = <STM32_PINMUX('G', 13, AF11)>, /* ETH_RMII_TXD0 */
|
||||
<STM32_PINMUX('G', 14, AF11)>, /* ETH_RMII_TXD1 */
|
||||
<STM32_PINMUX('B', 11, AF11)>, /* ETH_RMII_TX_EN */
|
||||
<STM32_PINMUX('A', 1, AF11)>, /* ETH_RMII_REF_CLK */
|
||||
<STM32_PINMUX('A', 2, AF11)>, /* ETH_MDIO */
|
||||
<STM32_PINMUX('G', 2, AF11)>; /* ETH_MDC */
|
||||
bias-disable;
|
||||
drive-push-pull;
|
||||
slew-rate = <1>;
|
||||
};
|
||||
|
||||
pins2 {
|
||||
pinmux = <STM32_PINMUX('C', 4, AF11)>, /* ETH_RMII_RXD0 */
|
||||
<STM32_PINMUX('C', 5, AF11)>, /* ETH_RMII_RXD1 */
|
||||
<STM32_PINMUX('C', 1, AF10)>; /* ETH_RMII_CRS_DV */
|
||||
bias-disable;
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
eth1_rmii_sleep_pins_a: eth1-rmii-sleep-1 {
|
||||
pins1 {
|
||||
pinmux = <STM32_PINMUX('G', 13, ANALOG)>, /* ETH_RMII_TXD0 */
|
||||
<STM32_PINMUX('G', 14, ANALOG)>, /* ETH_RMII_TXD1 */
|
||||
<STM32_PINMUX('B', 11, ANALOG)>, /* ETH_RMII_TX_EN */
|
||||
<STM32_PINMUX('A', 1, ANALOG)>, /* ETH_RMII_REF_CLK */
|
||||
<STM32_PINMUX('A', 2, ANALOG)>, /* ETH_MDIO */
|
||||
<STM32_PINMUX('G', 2, ANALOG)>, /* ETH_MDC */
|
||||
<STM32_PINMUX('C', 4, ANALOG)>, /* ETH_RMII_RXD0 */
|
||||
<STM32_PINMUX('C', 5, ANALOG)>, /* ETH_RMII_RXD1 */
|
||||
<STM32_PINMUX('C', 1, ANALOG)>; /* ETH_RMII_CRS_DV */
|
||||
};
|
||||
};
|
||||
|
||||
eth2_rmii_pins_a: eth2-rmii-2 {
|
||||
pins1 {
|
||||
pinmux = <STM32_PINMUX('F', 7, AF11)>, /* ETH_RMII_TXD0 */
|
||||
<STM32_PINMUX('G', 11, AF10)>, /* ETH_RMII_TXD1 */
|
||||
<STM32_PINMUX('G', 8, AF13)>, /* ETH_RMII_ETHCK */
|
||||
<STM32_PINMUX('F', 6, AF11)>, /* ETH_RMII_TX_EN */
|
||||
<STM32_PINMUX('B', 2, AF11)>, /* ETH_MDIO */
|
||||
<STM32_PINMUX('G', 5, AF10)>; /* ETH_MDC */
|
||||
bias-disable;
|
||||
drive-push-pull;
|
||||
slew-rate = <1>;
|
||||
};
|
||||
|
||||
pins2 {
|
||||
pinmux = <STM32_PINMUX('F', 4, AF11)>, /* ETH_RMII_RXD0 */
|
||||
<STM32_PINMUX('E', 2, AF10)>, /* ETH_RMII_RXD1 */
|
||||
<STM32_PINMUX('A', 12, AF11)>; /* ETH_RMII_CRS_DV */
|
||||
bias-disable;
|
||||
};
|
||||
};
|
||||
|
||||
eth2_rmii_sleep_pins_a: eth2-rmii-sleep-2 {
|
||||
pins1 {
|
||||
pinmux = <STM32_PINMUX('F', 7, ANALOG)>, /* ETH_RMII_TXD0 */
|
||||
<STM32_PINMUX('G', 11, ANALOG)>, /* ETH_RMII_TXD1 */
|
||||
<STM32_PINMUX('G', 8, ANALOG)>, /* ETH_RMII_ETHCK */
|
||||
<STM32_PINMUX('F', 6, ANALOG)>, /* ETH_RMII_TX_EN */
|
||||
<STM32_PINMUX('B', 2, ANALOG)>, /* ETH_MDIO */
|
||||
<STM32_PINMUX('G', 5, ANALOG)>, /* ETH_MDC */
|
||||
<STM32_PINMUX('F', 4, ANALOG)>, /* ETH_RMII_RXD0 */
|
||||
<STM32_PINMUX('E', 2, ANALOG)>, /* ETH_RMII_RXD1 */
|
||||
<STM32_PINMUX('A', 12, ANALOG)>; /* ETH_RMII_CRS_DV */
|
||||
};
|
||||
};
|
||||
|
||||
goodix_pins_a: goodix-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('F', 5, GPIO)>;
|
||||
bias-pull-down;
|
||||
};
|
||||
};
|
||||
|
||||
i2c1_pins_a: i2c1-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('D', 12, AF5)>, /* I2C1_SCL */
|
||||
<STM32_PINMUX('E', 8, AF5)>; /* I2C1_SDA */
|
||||
bias-disable;
|
||||
drive-open-drain;
|
||||
slew-rate = <0>;
|
||||
};
|
||||
};
|
||||
|
||||
i2c1_sleep_pins_a: i2c1-sleep-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('D', 12, ANALOG)>, /* I2C1_SCL */
|
||||
<STM32_PINMUX('E', 8, ANALOG)>; /* I2C1_SDA */
|
||||
};
|
||||
};
|
||||
|
||||
i2c5_pins_a: i2c5-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('D', 1, AF4)>, /* I2C5_SCL */
|
||||
<STM32_PINMUX('H', 6, AF4)>; /* I2C5_SDA */
|
||||
bias-disable;
|
||||
drive-open-drain;
|
||||
slew-rate = <0>;
|
||||
};
|
||||
};
|
||||
|
||||
i2c5_sleep_pins_a: i2c5-sleep-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('D', 1, ANALOG)>, /* I2C5_SCL */
|
||||
<STM32_PINMUX('H', 6, ANALOG)>; /* I2C5_SDA */
|
||||
};
|
||||
};
|
||||
|
||||
ltdc_pins_a: ltdc-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('D', 9, AF13)>, /* LCD_CLK */
|
||||
<STM32_PINMUX('C', 6, AF14)>, /* LCD_HSYNC */
|
||||
<STM32_PINMUX('G', 4, AF11)>, /* LCD_VSYNC */
|
||||
<STM32_PINMUX('H', 9, AF11)>, /* LCD_DE */
|
||||
<STM32_PINMUX('G', 7, AF14)>, /* LCD_R2 */
|
||||
<STM32_PINMUX('B', 12, AF13)>, /* LCD_R3 */
|
||||
<STM32_PINMUX('D', 14, AF14)>, /* LCD_R4 */
|
||||
<STM32_PINMUX('E', 7, AF14)>, /* LCD_R5 */
|
||||
<STM32_PINMUX('E', 13, AF14)>, /* LCD_R6 */
|
||||
<STM32_PINMUX('E', 9, AF14)>, /* LCD_R7 */
|
||||
<STM32_PINMUX('H', 13, AF14)>, /* LCD_G2 */
|
||||
<STM32_PINMUX('F', 3, AF14)>, /* LCD_G3 */
|
||||
<STM32_PINMUX('D', 5, AF14)>, /* LCD_G4 */
|
||||
<STM32_PINMUX('G', 0, AF14)>, /* LCD_G5 */
|
||||
<STM32_PINMUX('C', 7, AF14)>, /* LCD_G6 */
|
||||
<STM32_PINMUX('A', 15, AF11)>, /* LCD_G7 */
|
||||
<STM32_PINMUX('D', 10, AF14)>, /* LCD_B2 */
|
||||
<STM32_PINMUX('F', 2, AF14)>, /* LCD_B3 */
|
||||
<STM32_PINMUX('H', 14, AF11)>, /* LCD_B4 */
|
||||
<STM32_PINMUX('E', 0, AF14)>, /* LCD_B5 */
|
||||
<STM32_PINMUX('B', 6, AF7)>, /* LCD_B6 */
|
||||
<STM32_PINMUX('F', 1, AF13)>; /* LCD_B7 */
|
||||
bias-disable;
|
||||
drive-push-pull;
|
||||
slew-rate = <0>;
|
||||
};
|
||||
};
|
||||
|
||||
ltdc_sleep_pins_a: ltdc-sleep-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('D', 9, ANALOG)>, /* LCD_CLK */
|
||||
<STM32_PINMUX('C', 6, ANALOG)>, /* LCD_HSYNC */
|
||||
<STM32_PINMUX('G', 4, ANALOG)>, /* LCD_VSYNC */
|
||||
<STM32_PINMUX('H', 9, ANALOG)>, /* LCD_DE */
|
||||
<STM32_PINMUX('G', 7, ANALOG)>, /* LCD_R2 */
|
||||
<STM32_PINMUX('B', 12, ANALOG)>, /* LCD_R3 */
|
||||
<STM32_PINMUX('D', 14, ANALOG)>, /* LCD_R4 */
|
||||
<STM32_PINMUX('E', 7, ANALOG)>, /* LCD_R5 */
|
||||
<STM32_PINMUX('E', 13, ANALOG)>, /* LCD_R6 */
|
||||
<STM32_PINMUX('E', 9, ANALOG)>, /* LCD_R7 */
|
||||
<STM32_PINMUX('H', 13, ANALOG)>, /* LCD_G2 */
|
||||
<STM32_PINMUX('F', 3, ANALOG)>, /* LCD_G3 */
|
||||
<STM32_PINMUX('D', 5, ANALOG)>, /* LCD_G4 */
|
||||
<STM32_PINMUX('G', 0, ANALOG)>, /* LCD_G5 */
|
||||
<STM32_PINMUX('C', 7, ANALOG)>, /* LCD_G6 */
|
||||
<STM32_PINMUX('A', 15, ANALOG)>, /* LCD_G7 */
|
||||
<STM32_PINMUX('D', 10, ANALOG)>, /* LCD_B2 */
|
||||
<STM32_PINMUX('F', 2, ANALOG)>, /* LCD_B3 */
|
||||
<STM32_PINMUX('H', 14, ANALOG)>, /* LCD_B4 */
|
||||
<STM32_PINMUX('E', 0, ANALOG)>, /* LCD_B5 */
|
||||
<STM32_PINMUX('B', 6, ANALOG)>, /* LCD_B6 */
|
||||
<STM32_PINMUX('F', 1, ANALOG)>; /* LCD_B7 */
|
||||
};
|
||||
};
|
||||
|
||||
mcp23017_pins_a: mcp23017-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('G', 12, GPIO)>;
|
||||
bias-pull-up;
|
||||
};
|
||||
};
|
||||
|
||||
m_can2_pins_a: m-can2-0 {
|
||||
pins1 {
|
||||
pinmux = <STM32_PINMUX('G', 1, AF9)>; /* CAN2_TX */
|
||||
slew-rate = <1>;
|
||||
drive-push-pull;
|
||||
bias-disable;
|
||||
};
|
||||
pins2 {
|
||||
pinmux = <STM32_PINMUX('G', 3, AF9)>; /* CAN2_RX */
|
||||
bias-disable;
|
||||
};
|
||||
};
|
||||
|
||||
m_can2_sleep_pins_a: m_can2-sleep-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('G', 1, ANALOG)>, /* CAN2_TX */
|
||||
<STM32_PINMUX('G', 3, ANALOG)>; /* CAN2_RX */
|
||||
};
|
||||
};
|
||||
|
||||
pwm3_pins_a: pwm3-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('B', 1, AF2)>; /* TIM3_CH4 */
|
||||
bias-pull-down;
|
||||
drive-push-pull;
|
||||
slew-rate = <0>;
|
||||
};
|
||||
};
|
||||
|
||||
pwm3_sleep_pins_a: pwm3-sleep-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('B', 1, ANALOG)>; /* TIM3_CH4 */
|
||||
};
|
||||
};
|
||||
|
||||
pwm4_pins_a: pwm4-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('D', 13, AF2)>; /* TIM4_CH2 */
|
||||
bias-pull-down;
|
||||
drive-push-pull;
|
||||
slew-rate = <0>;
|
||||
};
|
||||
};
|
||||
|
||||
pwm4_sleep_pins_a: pwm4-sleep-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('D', 13, ANALOG)>; /* TIM4_CH2 */
|
||||
};
|
||||
};
|
||||
|
||||
pwm8_pins_a: pwm8-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('E', 5, AF3)>; /* TIM8_CH3 */
|
||||
bias-pull-down;
|
||||
drive-push-pull;
|
||||
slew-rate = <0>;
|
||||
};
|
||||
};
|
||||
|
||||
pwm8_sleep_pins_a: pwm8-sleep-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('E', 5, ANALOG)>; /* TIM8_CH3 */
|
||||
};
|
||||
};
|
||||
|
||||
pwm14_pins_a: pwm12-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('F', 9, AF9)>; /* TIM14_CH1 */
|
||||
bias-pull-down;
|
||||
drive-push-pull;
|
||||
slew-rate = <0>;
|
||||
};
|
||||
};
|
||||
|
||||
pwm14_sleep_pins_a: pwm12-sleep-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('F', 9, ANALOG)>; /* TIM14_CH1 */
|
||||
};
|
||||
};
|
||||
|
||||
rtc_out2_rmp_pins_a: rtc-out2-rmp-pins-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('I', 1, ANALOG)>; /* RTC_OUT2_RMP */
|
||||
};
|
||||
};
|
||||
|
||||
sai1_pins_a: sai1-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('A', 4, AF12)>, /* SAI1_SCK_A */
|
||||
<STM32_PINMUX('A', 0, AF6)>, /* SAI1_SD_B */
|
||||
<STM32_PINMUX('A', 5, AF6)>, /* SAI1_SD_A */
|
||||
<STM32_PINMUX('F', 11, AF6)>; /* SAI1_FS_A */
|
||||
slew-rate = <0>;
|
||||
drive-push-pull;
|
||||
bias-disable;
|
||||
};
|
||||
};
|
||||
|
||||
sai1_sleep_pins_a: sai1-sleep-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('A', 4, ANALOG)>, /* SAI1_SCK_A */
|
||||
<STM32_PINMUX('A', 0, ANALOG)>, /* SAI1_SD_B */
|
||||
<STM32_PINMUX('A', 5, ANALOG)>, /* SAI1_SD_A */
|
||||
<STM32_PINMUX('F', 11, ANALOG)>; /* SAI1_FS_A */
|
||||
};
|
||||
};
|
||||
|
||||
sdmmc1_b4_pins_a: sdmmc1-b4-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('C', 8, AF12)>, /* SDMMC1_D0 */
|
||||
<STM32_PINMUX('C', 9, AF12)>, /* SDMMC1_D1 */
|
||||
<STM32_PINMUX('C', 10, AF12)>, /* SDMMC1_D2 */
|
||||
<STM32_PINMUX('C', 11, AF12)>, /* SDMMC1_D3 */
|
||||
<STM32_PINMUX('D', 2, AF12)>; /* SDMMC1_CMD */
|
||||
slew-rate = <1>;
|
||||
drive-push-pull;
|
||||
bias-disable;
|
||||
};
|
||||
};
|
||||
|
||||
sdmmc1_b4_od_pins_a: sdmmc1-b4-od-0 {
|
||||
pins1 {
|
||||
pinmux = <STM32_PINMUX('C', 8, AF12)>, /* SDMMC1_D0 */
|
||||
<STM32_PINMUX('C', 9, AF12)>, /* SDMMC1_D1 */
|
||||
<STM32_PINMUX('C', 10, AF12)>, /* SDMMC1_D2 */
|
||||
<STM32_PINMUX('C', 11, AF12)>; /* SDMMC1_D3 */
|
||||
slew-rate = <1>;
|
||||
drive-push-pull;
|
||||
bias-disable;
|
||||
};
|
||||
pins2 {
|
||||
pinmux = <STM32_PINMUX('D', 2, AF12)>; /* SDMMC1_CMD */
|
||||
slew-rate = <1>;
|
||||
drive-open-drain;
|
||||
bias-disable;
|
||||
};
|
||||
};
|
||||
|
||||
sdmmc1_b4_sleep_pins_a: sdmmc1-b4-sleep-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('C', 8, ANALOG)>, /* SDMMC1_D0 */
|
||||
<STM32_PINMUX('C', 9, ANALOG)>, /* SDMMC1_D1 */
|
||||
<STM32_PINMUX('C', 10, ANALOG)>, /* SDMMC1_D2 */
|
||||
<STM32_PINMUX('C', 11, ANALOG)>, /* SDMMC1_D3 */
|
||||
<STM32_PINMUX('C', 12, ANALOG)>, /* SDMMC1_CK */
|
||||
<STM32_PINMUX('D', 2, ANALOG)>; /* SDMMC1_CMD */
|
||||
};
|
||||
};
|
||||
|
||||
sdmmc1_clk_pins_a: sdmmc1-clk-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('C', 12, AF12)>; /* SDMMC1_CK */
|
||||
slew-rate = <1>;
|
||||
drive-push-pull;
|
||||
bias-disable;
|
||||
};
|
||||
};
|
||||
|
||||
sdmmc2_b4_pins_a: sdmmc2-b4-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('B', 14, AF10)>, /* SDMMC2_D0 */
|
||||
<STM32_PINMUX('B', 15, AF10)>, /* SDMMC2_D1 */
|
||||
<STM32_PINMUX('B', 3, AF10)>, /* SDMMC2_D2 */
|
||||
<STM32_PINMUX('B', 4, AF10)>, /* SDMMC2_D3 */
|
||||
<STM32_PINMUX('G', 6, AF10)>; /* SDMMC2_CMD */
|
||||
slew-rate = <1>;
|
||||
drive-push-pull;
|
||||
bias-pull-up;
|
||||
};
|
||||
};
|
||||
|
||||
sdmmc2_b4_od_pins_a: sdmmc2-b4-od-0 {
|
||||
pins1 {
|
||||
pinmux = <STM32_PINMUX('B', 14, AF10)>, /* SDMMC2_D0 */
|
||||
<STM32_PINMUX('B', 15, AF10)>, /* SDMMC2_D1 */
|
||||
<STM32_PINMUX('B', 3, AF10)>, /* SDMMC2_D2 */
|
||||
<STM32_PINMUX('B', 4, AF10)>; /* SDMMC2_D3 */
|
||||
slew-rate = <1>;
|
||||
drive-push-pull;
|
||||
bias-pull-up;
|
||||
};
|
||||
pins2 {
|
||||
pinmux = <STM32_PINMUX('G', 6, AF10)>; /* SDMMC2_CMD */
|
||||
slew-rate = <1>;
|
||||
drive-open-drain;
|
||||
bias-pull-up;
|
||||
};
|
||||
};
|
||||
|
||||
sdmmc2_b4_sleep_pins_a: sdmmc2-b4-sleep-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('B', 14, ANALOG)>, /* SDMMC2_D0 */
|
||||
<STM32_PINMUX('B', 15, ANALOG)>, /* SDMMC2_D1 */
|
||||
<STM32_PINMUX('B', 3, ANALOG)>, /* SDMMC2_D2 */
|
||||
<STM32_PINMUX('B', 4, ANALOG)>, /* SDMMC2_D3 */
|
||||
<STM32_PINMUX('E', 3, ANALOG)>, /* SDMMC2_CK */
|
||||
<STM32_PINMUX('G', 6, ANALOG)>; /* SDMMC2_CMD */
|
||||
};
|
||||
};
|
||||
|
||||
sdmmc2_clk_pins_a: sdmmc2-clk-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('E', 3, AF10)>; /* SDMMC2_CK */
|
||||
slew-rate = <1>;
|
||||
drive-push-pull;
|
||||
bias-pull-up;
|
||||
};
|
||||
};
|
||||
|
||||
spi5_pins_a: spi5-0 {
|
||||
pins1 {
|
||||
pinmux = <STM32_PINMUX('H', 7, AF6)>, /* SPI5_SCK */
|
||||
<STM32_PINMUX('H', 3, AF5)>; /* SPI5_MOSI */
|
||||
bias-disable;
|
||||
drive-push-pull;
|
||||
slew-rate = <1>;
|
||||
};
|
||||
|
||||
pins2 {
|
||||
pinmux = <STM32_PINMUX('A', 8, AF5)>; /* SPI5_MISO */
|
||||
bias-disable;
|
||||
};
|
||||
};
|
||||
|
||||
spi5_sleep_pins_a: spi5-sleep-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('H', 7, ANALOG)>, /* SPI5_SCK */
|
||||
<STM32_PINMUX('A', 8, ANALOG)>, /* SPI5_MISO */
|
||||
<STM32_PINMUX('H', 3, ANALOG)>; /* SPI5_MOSI */
|
||||
};
|
||||
};
|
||||
|
||||
stm32g0_intn_pins_a: stm32g0-intn-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('I', 2, GPIO)>;
|
||||
bias-pull-up;
|
||||
};
|
||||
};
|
||||
|
||||
uart4_pins_a: uart4-0 {
|
||||
pins1 {
|
||||
pinmux = <STM32_PINMUX('D', 6, AF8)>; /* UART4_TX */
|
||||
bias-disable;
|
||||
drive-push-pull;
|
||||
slew-rate = <0>;
|
||||
};
|
||||
pins2 {
|
||||
pinmux = <STM32_PINMUX('D', 8, AF8)>; /* UART4_RX */
|
||||
bias-disable;
|
||||
};
|
||||
};
|
||||
|
||||
uart4_idle_pins_a: uart4-idle-0 {
|
||||
pins1 {
|
||||
pinmux = <STM32_PINMUX('D', 6, ANALOG)>; /* UART4_TX */
|
||||
};
|
||||
pins2 {
|
||||
pinmux = <STM32_PINMUX('D', 8, AF8)>; /* UART4_RX */
|
||||
bias-disable;
|
||||
};
|
||||
};
|
||||
|
||||
uart4_sleep_pins_a: uart4-sleep-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('D', 6, ANALOG)>, /* UART4_TX */
|
||||
<STM32_PINMUX('D', 8, ANALOG)>; /* UART4_RX */
|
||||
};
|
||||
};
|
||||
|
||||
uart8_pins_a: uart8-0 {
|
||||
pins1 {
|
||||
pinmux = <STM32_PINMUX('E', 1, AF8)>; /* UART8_TX */
|
||||
bias-disable;
|
||||
drive-push-pull;
|
||||
slew-rate = <0>;
|
||||
};
|
||||
pins2 {
|
||||
pinmux = <STM32_PINMUX('F', 9, AF8)>; /* UART8_RX */
|
||||
bias-pull-up;
|
||||
};
|
||||
};
|
||||
|
||||
uart8_idle_pins_a: uart8-idle-0 {
|
||||
pins1 {
|
||||
pinmux = <STM32_PINMUX('E', 1, ANALOG)>; /* UART8_TX */
|
||||
};
|
||||
pins2 {
|
||||
pinmux = <STM32_PINMUX('F', 9, AF8)>; /* UART8_RX */
|
||||
bias-pull-up;
|
||||
};
|
||||
};
|
||||
|
||||
uart8_sleep_pins_a: uart8-sleep-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('E', 1, ANALOG)>, /* UART8_TX */
|
||||
<STM32_PINMUX('F', 9, ANALOG)>; /* UART8_RX */
|
||||
};
|
||||
};
|
||||
|
||||
usart1_pins_a: usart1-0 {
|
||||
pins1 {
|
||||
pinmux = <STM32_PINMUX('C', 0, AF7)>, /* USART1_TX */
|
||||
<STM32_PINMUX('C', 2, AF7)>; /* USART1_RTS */
|
||||
bias-disable;
|
||||
drive-push-pull;
|
||||
slew-rate = <0>;
|
||||
};
|
||||
pins2 {
|
||||
pinmux = <STM32_PINMUX('B', 0, AF4)>, /* USART1_RX */
|
||||
<STM32_PINMUX('A', 7, AF7)>; /* USART1_CTS_NSS */
|
||||
bias-pull-up;
|
||||
};
|
||||
};
|
||||
|
||||
usart1_idle_pins_a: usart1-idle-0 {
|
||||
pins1 {
|
||||
pinmux = <STM32_PINMUX('C', 0, ANALOG)>, /* USART1_TX */
|
||||
<STM32_PINMUX('A', 7, ANALOG)>; /* USART1_CTS_NSS */
|
||||
};
|
||||
pins2 {
|
||||
pinmux = <STM32_PINMUX('C', 2, AF7)>; /* USART1_RTS */
|
||||
bias-disable;
|
||||
drive-push-pull;
|
||||
slew-rate = <0>;
|
||||
};
|
||||
pins3 {
|
||||
pinmux = <STM32_PINMUX('B', 0, AF4)>; /* USART1_RX */
|
||||
bias-pull-up;
|
||||
};
|
||||
};
|
||||
|
||||
usart1_sleep_pins_a: usart1-sleep-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('C', 0, ANALOG)>, /* USART1_TX */
|
||||
<STM32_PINMUX('C', 2, ANALOG)>, /* USART1_RTS */
|
||||
<STM32_PINMUX('A', 7, ANALOG)>, /* USART1_CTS_NSS */
|
||||
<STM32_PINMUX('B', 0, ANALOG)>; /* USART1_RX */
|
||||
};
|
||||
};
|
||||
|
||||
usart2_pins_a: usart2-0 {
|
||||
pins1 {
|
||||
pinmux = <STM32_PINMUX('H', 12, AF1)>, /* USART2_TX */
|
||||
<STM32_PINMUX('D', 4, AF3)>; /* USART2_RTS */
|
||||
bias-disable;
|
||||
drive-push-pull;
|
||||
slew-rate = <0>;
|
||||
};
|
||||
pins2 {
|
||||
pinmux = <STM32_PINMUX('D', 15, AF1)>, /* USART2_RX */
|
||||
<STM32_PINMUX('E', 11, AF2)>; /* USART2_CTS_NSS */
|
||||
bias-disable;
|
||||
};
|
||||
};
|
||||
|
||||
usart2_idle_pins_a: usart2-idle-0 {
|
||||
pins1 {
|
||||
pinmux = <STM32_PINMUX('H', 12, ANALOG)>, /* USART2_TX */
|
||||
<STM32_PINMUX('E', 11, ANALOG)>; /* USART2_CTS_NSS */
|
||||
};
|
||||
pins2 {
|
||||
pinmux = <STM32_PINMUX('D', 4, AF3)>; /* USART2_RTS */
|
||||
bias-disable;
|
||||
drive-push-pull;
|
||||
slew-rate = <0>;
|
||||
};
|
||||
pins3 {
|
||||
pinmux = <STM32_PINMUX('D', 15, AF1)>; /* USART2_RX */
|
||||
bias-disable;
|
||||
};
|
||||
};
|
||||
|
||||
usart2_sleep_pins_a: usart2-sleep-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('H', 12, ANALOG)>, /* USART2_TX */
|
||||
<STM32_PINMUX('D', 4, ANALOG)>, /* USART2_RTS */
|
||||
<STM32_PINMUX('D', 15, ANALOG)>, /* USART2_RX */
|
||||
<STM32_PINMUX('E', 11, ANALOG)>; /* USART2_CTS_NSS */
|
||||
};
|
||||
};
|
||||
};
|
||||
131
arch/arm/dts/stm32mp13-u-boot.dtsi
Normal file
131
arch/arm/dts/stm32mp13-u-boot.dtsi
Normal file
@ -0,0 +1,131 @@
|
||||
// SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
|
||||
/*
|
||||
* Copyright : STMicroelectronics 2020
|
||||
*/
|
||||
|
||||
/ {
|
||||
aliases {
|
||||
gpio0 = &gpioa;
|
||||
gpio1 = &gpiob;
|
||||
gpio2 = &gpioc;
|
||||
gpio3 = &gpiod;
|
||||
gpio4 = &gpioe;
|
||||
gpio5 = &gpiof;
|
||||
gpio6 = &gpiog;
|
||||
gpio7 = &gpioh;
|
||||
gpio8 = &gpioi;
|
||||
pinctrl0 = &pinctrl;
|
||||
};
|
||||
|
||||
firmware {
|
||||
optee {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
};
|
||||
|
||||
/* need PSCI for sysreset during board_f */
|
||||
psci {
|
||||
u-boot,dm-pre-proper;
|
||||
};
|
||||
|
||||
soc {
|
||||
u-boot,dm-pre-reloc;
|
||||
|
||||
ddr: ddr@5a003000 {
|
||||
u-boot,dm-pre-reloc;
|
||||
|
||||
compatible = "st,stm32mp13-ddr";
|
||||
|
||||
reg = <0x5A003000 0x550
|
||||
0x5A004000 0x234>;
|
||||
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&bsec {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&gpioa {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&gpiob {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&gpioc {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&gpiod {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&gpioe {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&gpiof {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&gpiog {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&gpioh {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&gpioi {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&iwdg2 {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
/* pre-reloc probe = reserve video frame buffer in video_reserve() */
|
||||
<dc {
|
||||
u-boot,dm-pre-proper;
|
||||
};
|
||||
|
||||
&pinctrl {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&rcc {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&scmi {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&scmi_clk {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&scmi_reset {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&scmi_shm {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&scmi_sram {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&syscfg {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&usbphyc {
|
||||
/* stm32-usbphyc-clk = ck_usbo_48m is a source clock of RCC CCF */
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
1664
arch/arm/dts/stm32mp131.dtsi
Normal file
1664
arch/arm/dts/stm32mp131.dtsi
Normal file
File diff suppressed because it is too large
Load Diff
87
arch/arm/dts/stm32mp133.dtsi
Normal file
87
arch/arm/dts/stm32mp133.dtsi
Normal file
@ -0,0 +1,87 @@
|
||||
// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
|
||||
/*
|
||||
* Copyright (C) STMicroelectronics 2021 - All Rights Reserved
|
||||
* Author: Alexandre Torgue <alexandre.torgue@foss.st.com> for STMicroelectronics.
|
||||
*/
|
||||
|
||||
#include "stm32mp131.dtsi"
|
||||
|
||||
/ {
|
||||
soc {
|
||||
adc_1: adc@48003000 {
|
||||
compatible = "st,stm32mp13-adc-core";
|
||||
reg = <0x48003000 0x400>;
|
||||
interrupts = <GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&rcc ADC1>, <&rcc ADC1_K>;
|
||||
clock-names = "bus", "adc";
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <1>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
status = "disabled";
|
||||
|
||||
adc1: adc@0 {
|
||||
compatible = "st,stm32mp13-adc";
|
||||
#io-channel-cells = <1>;
|
||||
reg = <0x0>;
|
||||
interrupt-parent = <&adc_1>;
|
||||
interrupts = <0>;
|
||||
dmas = <&dmamux1 9 0x400 0x80000001>;
|
||||
dma-names = "rx";
|
||||
nvmem-cells = <&vrefint>;
|
||||
nvmem-cell-names = "vrefint";
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
||||
m_can1: can@4400e000 {
|
||||
compatible = "bosch,m_can";
|
||||
reg = <0x4400e000 0x400>, <0x44011000 0x1400>;
|
||||
reg-names = "m_can", "message_ram";
|
||||
interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 22 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-names = "int0", "int1";
|
||||
clocks = <&scmi_clk CK_SCMI_HSE>, <&rcc FDCAN_K>;
|
||||
clock-names = "hclk", "cclk";
|
||||
bosch,mram-cfg = <0x0 0 0 32 0 0 2 2>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
m_can2: can@4400f000 {
|
||||
compatible = "bosch,m_can";
|
||||
reg = <0x4400f000 0x400>, <0x44011000 0x2800>;
|
||||
reg-names = "m_can", "message_ram";
|
||||
interrupts = <GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-names = "int0", "int1";
|
||||
clocks = <&scmi_clk CK_SCMI_HSE>, <&rcc FDCAN_K>;
|
||||
clock-names = "hclk", "cclk";
|
||||
bosch,mram-cfg = <0x1400 0 0 32 0 0 2 2>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
eth2: eth2@5800e000 {
|
||||
compatible = "snps,dwmac-4.20a", "st,stm32mp13-dwmac";
|
||||
reg = <0x5800e000 0x2000>;
|
||||
reg-names = "stmmaceth";
|
||||
interrupts-extended = <&intc GIC_SPI 97 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-names = "macirq";
|
||||
clock-names = "stmmaceth",
|
||||
"mac-clk-tx",
|
||||
"mac-clk-rx",
|
||||
"ethstp",
|
||||
"eth-ck";
|
||||
clocks = <&rcc ETH2MAC>,
|
||||
<&rcc ETH2TX>,
|
||||
<&rcc ETH2RX>,
|
||||
<&rcc ETH2STP>,
|
||||
<&rcc ETH2CK_K>;
|
||||
st,syscon = <&syscfg 0x4 0xff000000>;
|
||||
snps,mixed-burst;
|
||||
snps,pbl = <2>;
|
||||
snps,axi-config = <&stmmac_axi_config_0>;
|
||||
snps,tso;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
};
|
||||
32
arch/arm/dts/stm32mp135.dtsi
Normal file
32
arch/arm/dts/stm32mp135.dtsi
Normal file
@ -0,0 +1,32 @@
|
||||
// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
|
||||
/*
|
||||
* Copyright (C) STMicroelectronics 2021 - All Rights Reserved
|
||||
* Author: Alexandre Torgue <alexandre.torgue@foss.st.com> for STMicroelectronics.
|
||||
*/
|
||||
|
||||
#include "stm32mp133.dtsi"
|
||||
|
||||
/ {
|
||||
soc {
|
||||
dcmipp: dcmipp@5a000000 {
|
||||
compatible = "st,stm32mp13-dcmipp";
|
||||
reg = <0x5a000000 0x400>;
|
||||
interrupts = <GIC_SPI 79 IRQ_TYPE_LEVEL_HIGH>;
|
||||
resets = <&rcc DCMIPP_R>;
|
||||
clocks = <&rcc DCMIPP_K>;
|
||||
clock-names = "kclk";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
ltdc: display-controller@5a001000 {
|
||||
compatible = "st,stm32-ltdc";
|
||||
reg = <0x5a001000 0x400>;
|
||||
interrupts = <GIC_SPI 88 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&rcc LTDC_PX>;
|
||||
clock-names = "lcd";
|
||||
resets = <&scmi_reset RST_SCMI_LTDC>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
};
|
||||
70
arch/arm/dts/stm32mp135d-dk-u-boot.dtsi
Normal file
70
arch/arm/dts/stm32mp135d-dk-u-boot.dtsi
Normal file
@ -0,0 +1,70 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later OR BSD-3-Clause
|
||||
/*
|
||||
* Copyright (C) STMicroelectronics 2021 - All Rights Reserved
|
||||
*/
|
||||
|
||||
#include "stm32mp13-u-boot.dtsi"
|
||||
|
||||
/ {
|
||||
aliases {
|
||||
mmc0 = &sdmmc1;
|
||||
usb0 = &usbotg_hs;
|
||||
};
|
||||
|
||||
config {
|
||||
u-boot,boot-led = "led-blue";
|
||||
u-boot,error-led = "led-red";
|
||||
u-boot,mmc-env-partition = "u-boot-env";
|
||||
st,adc_usb_pd = <&adc1 6>, <&adc1 12>;
|
||||
st,fastboot-gpios = <&gpioa 13 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
|
||||
st,stm32prog-gpios = <&gpioa 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
|
||||
};
|
||||
|
||||
leds {
|
||||
led-red {
|
||||
color = <LED_COLOR_ID_RED>;
|
||||
gpios = <&gpioa 13 GPIO_ACTIVE_LOW>;
|
||||
default-state = "off";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&adc_1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&panel_rgb {
|
||||
compatible = "rocktech,rk043fn48h","simple-panel";
|
||||
|
||||
display-timings {
|
||||
timing@0 {
|
||||
clock-frequency = <10000000>;
|
||||
hactive = <480>;
|
||||
vactive = <272>;
|
||||
hfront-porch = <10>;
|
||||
hback-porch = <10>;
|
||||
hsync-len = <52>;
|
||||
vfront-porch = <10>;
|
||||
vback-porch = <10>;
|
||||
vsync-len = <10>;
|
||||
hsync-active = <0>;
|
||||
vsync-active = <0>;
|
||||
de-active = <1>;
|
||||
pixelclk-active = <1>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&uart4 {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&uart4_pins_a {
|
||||
u-boot,dm-pre-reloc;
|
||||
pins1 {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
pins2 {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
};
|
||||
687
arch/arm/dts/stm32mp135d-dk.dts
Normal file
687
arch/arm/dts/stm32mp135d-dk.dts
Normal file
@ -0,0 +1,687 @@
|
||||
// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
|
||||
/*
|
||||
* Copyright (C) STMicroelectronics 2022 - All Rights Reserved
|
||||
* Author: Alexandre Torgue <alexandre.torgue@foss.st.com> for STMicroelectronics.
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
#include <dt-bindings/input/input.h>
|
||||
#include <dt-bindings/leds/common.h>
|
||||
#include <dt-bindings/rtc/rtc-stm32.h>
|
||||
#include "stm32mp135.dtsi"
|
||||
#include "stm32mp13xd.dtsi"
|
||||
#include "stm32mp13-pinctrl.dtsi"
|
||||
|
||||
/ {
|
||||
model = "STMicroelectronics STM32MP135D-DK Discovery Board";
|
||||
compatible = "st,stm32mp135d-dk", "st,stm32mp135";
|
||||
|
||||
aliases {
|
||||
ethernet0 = ð1;
|
||||
ethernet1 = ð2;
|
||||
serial0 = &uart4;
|
||||
serial1 = &usart1;
|
||||
serial2 = &uart8;
|
||||
serial3 = &usart2;
|
||||
};
|
||||
|
||||
chosen {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
stdout-path = "serial0:115200n8";
|
||||
|
||||
framebuffer {
|
||||
compatible = "simple-framebuffer";
|
||||
clocks = <&rcc LTDC_PX>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
||||
clocks {
|
||||
clk_ext_camera: clk-ext-camera {
|
||||
#clock-cells = <0>;
|
||||
compatible = "fixed-clock";
|
||||
clock-frequency = <24000000>;
|
||||
};
|
||||
|
||||
clk_mco1: clk-mco1 {
|
||||
#clock-cells = <0>;
|
||||
compatible = "fixed-clock";
|
||||
clock-frequency = <24000000>;
|
||||
};
|
||||
};
|
||||
|
||||
memory@c0000000 {
|
||||
device_type = "memory";
|
||||
reg = <0xc0000000 0x20000000>;
|
||||
};
|
||||
|
||||
gpio-keys {
|
||||
compatible = "gpio-keys";
|
||||
|
||||
user-pa13 {
|
||||
label = "User-PA13";
|
||||
linux,code = <BTN_1>;
|
||||
gpios = <&gpioa 13 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
|
||||
};
|
||||
};
|
||||
|
||||
leds {
|
||||
compatible = "gpio-leds";
|
||||
|
||||
led-blue {
|
||||
function = LED_FUNCTION_HEARTBEAT;
|
||||
color = <LED_COLOR_ID_BLUE>;
|
||||
gpios = <&gpioa 14 GPIO_ACTIVE_LOW>;
|
||||
linux,default-trigger = "heartbeat";
|
||||
default-state = "off";
|
||||
};
|
||||
};
|
||||
|
||||
reserved-memory {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
|
||||
optee_framebuffer@dd000000 {
|
||||
reg = <0xdd000000 0x1000000>;
|
||||
no-map;
|
||||
};
|
||||
|
||||
optee@de000000 {
|
||||
reg = <0xde000000 0x2000000>;
|
||||
no-map;
|
||||
};
|
||||
};
|
||||
|
||||
v3v3_ao: v3v3_ao {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "v3v3_ao";
|
||||
regulator-min-microvolt = <3300000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
panel_backlight: panel-backlight {
|
||||
compatible = "gpio-backlight";
|
||||
gpios = <&gpioe 12 GPIO_ACTIVE_HIGH>;
|
||||
default-on;
|
||||
default-brightness-level = <0>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
panel_rgb: panel-rgb {
|
||||
compatible = "rocktech,rk043fn48h", "panel-dpi";
|
||||
enable-gpios = <&gpioi 7 GPIO_ACTIVE_HIGH>;
|
||||
backlight = <&panel_backlight>;
|
||||
power-supply = <&scmi_v3v3_sw>;
|
||||
data-mapping = "bgr666";
|
||||
status = "okay";
|
||||
|
||||
width-mm = <105>;
|
||||
height-mm = <67>;
|
||||
|
||||
port {
|
||||
panel_in_rgb: endpoint {
|
||||
remote-endpoint = <<dc_out_rgb>;
|
||||
};
|
||||
};
|
||||
|
||||
panel-timing {
|
||||
clock-frequency = <10000000>;
|
||||
hactive = <480>;
|
||||
vactive = <272>;
|
||||
hsync-len = <52>;
|
||||
hfront-porch = <10>;
|
||||
hback-porch = <10>;
|
||||
vsync-len = <10>;
|
||||
vfront-porch = <10>;
|
||||
vback-porch = <10>;
|
||||
hsync-active = <0>;
|
||||
vsync-active = <0>;
|
||||
de-active = <1>;
|
||||
pixelclk-active = <1>;
|
||||
};
|
||||
};
|
||||
|
||||
wifi_pwrseq: wifi-pwrseq {
|
||||
compatible = "mmc-pwrseq-simple";
|
||||
reset-gpios = <&mcp23017 11 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
};
|
||||
|
||||
&adc_1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&adc1_usb_cc_pins_a>;
|
||||
vdda-supply = <&scmi_vdd_adc>;
|
||||
vref-supply = <&scmi_vdd_adc>;
|
||||
status = "okay";
|
||||
adc1: adc@0 {
|
||||
/*
|
||||
* Type-C USB_PWR_CC1 & USB_PWR_CC2 on in6 & in12.
|
||||
* Use at least 5 * RC time, e.g. 5 * (Rp + Rd) * C:
|
||||
* 5 * (5.1 + 47kOhms) * 5pF => 1.3us.
|
||||
* Use arbitrary margin here (e.g. 5us).
|
||||
*/
|
||||
st,min-sample-time-nsecs = <5000>;
|
||||
/* USB Type-C CC1 & CC2 */
|
||||
st,adc-channels = <6 12>;
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
&crc1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&dcmipp {
|
||||
status = "okay";
|
||||
pinctrl-names = "default", "sleep";
|
||||
pinctrl-0 = <&dcmipp_pins_a>;
|
||||
pinctrl-1 = <&dcmipp_sleep_pins_a>;
|
||||
port {
|
||||
dcmipp_0: endpoint {
|
||||
remote-endpoint = <&mipid02_2>;
|
||||
bus-width = <8>;
|
||||
hsync-active = <0>;
|
||||
vsync-active = <0>;
|
||||
pclk-sample = <0>;
|
||||
pclk-max-frequency = <120000000>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&dma1 {
|
||||
sram = <&dma_pool>;
|
||||
};
|
||||
|
||||
&dma2 {
|
||||
sram = <&dma_pool>;
|
||||
};
|
||||
|
||||
&dts {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
ð1 {
|
||||
status = "okay";
|
||||
pinctrl-0 = <ð1_rmii_pins_a>;
|
||||
pinctrl-1 = <ð1_rmii_sleep_pins_a>;
|
||||
pinctrl-names = "default", "sleep";
|
||||
phy-mode = "rmii";
|
||||
max-speed = <100>;
|
||||
phy-handle = <&phy0_eth1>;
|
||||
nvmem-cells = <ðernet_mac1_address>;
|
||||
nvmem-cell-names = "mac-address";
|
||||
|
||||
mdio1 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
compatible = "snps,dwmac-mdio";
|
||||
|
||||
phy0_eth1: ethernet-phy@0 {
|
||||
compatible = "ethernet-phy-id0007.c131";
|
||||
reset-gpios = <&mcp23017 9 GPIO_ACTIVE_LOW>;
|
||||
reg = <0>;
|
||||
interrupt-parent = <&gpioi>;
|
||||
interrupts = <3 IRQ_TYPE_EDGE_RISING>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
ð2 {
|
||||
status = "okay";
|
||||
pinctrl-0 = <ð2_rmii_pins_a>;
|
||||
pinctrl-1 = <ð2_rmii_sleep_pins_a>;
|
||||
pinctrl-names = "default", "sleep";
|
||||
phy-mode = "rmii";
|
||||
max-speed = <100>;
|
||||
phy-handle = <&phy0_eth2>;
|
||||
st,ext-phyclk;
|
||||
phy-supply = <&scmi_v3v3_sw>;
|
||||
nvmem-cells = <ðernet_mac2_address>;
|
||||
nvmem-cell-names = "mac-address";
|
||||
|
||||
mdio1 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
compatible = "snps,dwmac-mdio";
|
||||
phy0_eth2: ethernet-phy@0 {
|
||||
compatible = "ethernet-phy-id0007.c131";
|
||||
reset-gpios = <&mcp23017 10 GPIO_ACTIVE_LOW>;
|
||||
reg = <0>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&i2c1 {
|
||||
pinctrl-names = "default", "sleep";
|
||||
pinctrl-0 = <&i2c1_pins_a>;
|
||||
pinctrl-1 = <&i2c1_sleep_pins_a>;
|
||||
i2c-scl-rising-time-ns = <96>;
|
||||
i2c-scl-falling-time-ns = <3>;
|
||||
clock-frequency = <1000000>;
|
||||
status = "okay";
|
||||
/* spare dmas for other usage */
|
||||
/delete-property/dmas;
|
||||
/delete-property/dma-names;
|
||||
|
||||
mcp23017: pinctrl@21 {
|
||||
compatible = "microchip,mcp23017";
|
||||
reg = <0x21>;
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
interrupts = <12 IRQ_TYPE_LEVEL_LOW>;
|
||||
interrupt-parent = <&gpiog>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&mcp23017_pins_a>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <2>;
|
||||
microchip,irq-mirror;
|
||||
};
|
||||
|
||||
stm32g0@53 {
|
||||
compatible = "st,stm32g0-typec";
|
||||
reg = <0x53>;
|
||||
/* Alert pin on PI2 */
|
||||
interrupts = <2 IRQ_TYPE_EDGE_FALLING>;
|
||||
interrupt-parent = <&gpioi>;
|
||||
/* Internal pull-up on PI2 */
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&stm32g0_intn_pins_a>;
|
||||
firmware-name = "stm32g0-ucsi.mp135f-dk.fw";
|
||||
power-domains = <&pd_core>;
|
||||
wakeup-source;
|
||||
connector {
|
||||
compatible = "usb-c-connector";
|
||||
label = "USB-C";
|
||||
|
||||
port {
|
||||
con_usb_c_g0_ep: endpoint {
|
||||
remote-endpoint = <&usbotg_hs_ep>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&i2c5 {
|
||||
pinctrl-names = "default", "sleep";
|
||||
pinctrl-0 = <&i2c5_pins_a>;
|
||||
pinctrl-1 = <&i2c5_sleep_pins_a>;
|
||||
i2c-scl-rising-time-ns = <170>;
|
||||
i2c-scl-falling-time-ns = <5>;
|
||||
clock-frequency = <400000>;
|
||||
status = "okay";
|
||||
/* spare dmas for other usage */
|
||||
/delete-property/dmas;
|
||||
/delete-property/dma-names;
|
||||
|
||||
gc2145: gc2145@3c {
|
||||
compatible = "galaxycore,gc2145";
|
||||
reg = <0x3c>;
|
||||
clocks = <&clk_ext_camera>;
|
||||
IOVDD-supply = <&scmi_v3v3_sw>;
|
||||
AVDD-supply = <&scmi_v3v3_sw>;
|
||||
DVDD-supply = <&scmi_v3v3_sw>;
|
||||
powerdown-gpios = <&mcp23017 3 (GPIO_ACTIVE_LOW | GPIO_PUSH_PULL)>;
|
||||
reset-gpios = <&mcp23017 4 (GPIO_ACTIVE_LOW | GPIO_PUSH_PULL)>;
|
||||
status = "okay";
|
||||
|
||||
port {
|
||||
gc2145_ep: endpoint {
|
||||
remote-endpoint = <&mipid02_0>;
|
||||
clock-lanes = <0>;
|
||||
data-lanes = <1 2>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
goodix: goodix_ts@5d {
|
||||
compatible = "goodix,gt911";
|
||||
reg = <0x5d>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&goodix_pins_a>;
|
||||
interrupt-parent = <&gpiof>;
|
||||
interrupts = <5 IRQ_TYPE_EDGE_FALLING>;
|
||||
reset-gpios = <&gpioh 2 GPIO_ACTIVE_LOW>;
|
||||
AVDD28-supply = <&scmi_v3v3_sw>;
|
||||
VDDIO-supply = <&scmi_v3v3_sw>;
|
||||
touchscreen-size-x = <480>;
|
||||
touchscreen-size-y = <272>;
|
||||
status = "okay" ;
|
||||
};
|
||||
|
||||
ov5640: camera@3c {
|
||||
compatible = "ovti,ov5640";
|
||||
reg = <0x3c>;
|
||||
clocks = <&clk_ext_camera>;
|
||||
clock-names = "xclk";
|
||||
DOVDD-supply = <&scmi_v3v3_sw>;
|
||||
status = "disabled";
|
||||
powerdown-gpios = <&mcp23017 3 (GPIO_ACTIVE_LOW | GPIO_PUSH_PULL)>;
|
||||
reset-gpios = <&mcp23017 4 (GPIO_ACTIVE_LOW | GPIO_PUSH_PULL)>;
|
||||
|
||||
port {
|
||||
ov5640_0: endpoint {
|
||||
clock-lanes = <0>;
|
||||
data-lanes = <1 2>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
stmipi: stmipi@14 {
|
||||
compatible = "st,st-mipid02";
|
||||
reg = <0x14>;
|
||||
status = "okay";
|
||||
clocks = <&clk_mco1>;
|
||||
clock-names = "xclk";
|
||||
VDDE-supply = <&scmi_v1v8_periph>;
|
||||
VDDIN-supply = <&scmi_v1v8_periph>;
|
||||
reset-gpios = <&mcp23017 2 (GPIO_ACTIVE_LOW | GPIO_PUSH_PULL)>;
|
||||
|
||||
ports {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
port@0 {
|
||||
reg = <0>;
|
||||
|
||||
mipid02_0: endpoint {
|
||||
data-lanes = <1 2>;
|
||||
lane-polarities = <0 0 0>;
|
||||
remote-endpoint = <&gc2145_ep>;
|
||||
};
|
||||
};
|
||||
port@2 {
|
||||
reg = <2>;
|
||||
|
||||
mipid02_2: endpoint {
|
||||
bus-width = <8>;
|
||||
hsync-active = <0>;
|
||||
vsync-active = <0>;
|
||||
pclk-sample = <0>;
|
||||
remote-endpoint = <&dcmipp_0>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&iwdg2 {
|
||||
timeout-sec = <32>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
<dc {
|
||||
pinctrl-names = "default", "sleep";
|
||||
pinctrl-0 = <<dc_pins_a>;
|
||||
pinctrl-1 = <<dc_sleep_pins_a>;
|
||||
status = "okay";
|
||||
|
||||
port {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
ltdc_out_rgb: endpoint@0 {
|
||||
reg = <0>;
|
||||
remote-endpoint = <&panel_in_rgb>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&rtc {
|
||||
st,lsco = <RTC_OUT2_RMP>;
|
||||
pinctrl-0 = <&rtc_out2_rmp_pins_a>;
|
||||
pinctrl-names = "default";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&scmi_regu {
|
||||
scmi_vddcpu: voltd-vddcpu {
|
||||
voltd-name = "vddcpu";
|
||||
regulator-name = "vddcpu";
|
||||
};
|
||||
scmi_vdd: voltd-vdd {
|
||||
voltd-name = "vdd";
|
||||
regulator-name = "vdd";
|
||||
};
|
||||
scmi_vddcore: voltd-vddcore {
|
||||
voltd-name = "vddcore";
|
||||
regulator-name = "vddcore";
|
||||
};
|
||||
scmi_vdd_adc: voltd-vdd_adc {
|
||||
voltd-name = "vdd_adc";
|
||||
regulator-name = "vdd_adc";
|
||||
};
|
||||
scmi_vdd_usb: voltd-vdd_usb {
|
||||
voltd-name = "vdd_usb";
|
||||
regulator-name = "vdd_usb";
|
||||
};
|
||||
scmi_vdd_sd: voltd-vdd_sd {
|
||||
voltd-name = "vdd_sd";
|
||||
regulator-name = "vdd_sd";
|
||||
};
|
||||
scmi_v1v8_periph: voltd-v1v8_periph {
|
||||
voltd-name = "v1v8_periph";
|
||||
regulator-name = "v1v8_periph";
|
||||
};
|
||||
scmi_v3v3_sw: voltd-v3v3_sw {
|
||||
voltd-name = "v3v3_sw";
|
||||
regulator-name = "v3v3_sw";
|
||||
};
|
||||
};
|
||||
|
||||
&sdmmc1 {
|
||||
pinctrl-names = "default", "opendrain", "sleep";
|
||||
pinctrl-0 = <&sdmmc1_b4_pins_a &sdmmc1_clk_pins_a>;
|
||||
pinctrl-1 = <&sdmmc1_b4_od_pins_a &sdmmc1_clk_pins_a>;
|
||||
pinctrl-2 = <&sdmmc1_b4_sleep_pins_a>;
|
||||
cd-gpios = <&gpioh 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
|
||||
disable-wp;
|
||||
st,neg-edge;
|
||||
bus-width = <4>;
|
||||
vmmc-supply = <&scmi_vdd_sd>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
/* Wifi */
|
||||
&sdmmc2 {
|
||||
arm,primecell-periphid = <0x10153180>;
|
||||
pinctrl-names = "default", "opendrain", "sleep";
|
||||
pinctrl-0 = <&sdmmc2_b4_pins_a &sdmmc2_clk_pins_a>;
|
||||
pinctrl-1 = <&sdmmc2_b4_od_pins_a &sdmmc2_clk_pins_a>;
|
||||
pinctrl-2 = <&sdmmc2_b4_sleep_pins_a>;
|
||||
non-removable;
|
||||
st,neg-edge;
|
||||
bus-width = <4>;
|
||||
vmmc-supply = <&v3v3_ao>;
|
||||
mmc-pwrseq = <&wifi_pwrseq>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
status = "okay";
|
||||
|
||||
brcmf: bcrmf@1 {
|
||||
reg = <1>;
|
||||
compatible = "brcm,bcm4329-fmac";
|
||||
};
|
||||
};
|
||||
|
||||
&spi5 {
|
||||
pinctrl-names = "default", "sleep";
|
||||
pinctrl-0 = <&spi5_pins_a>;
|
||||
pinctrl-1 = <&spi5_sleep_pins_a>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&sram {
|
||||
dma_pool: dma-sram@0 {
|
||||
reg = <0x0 0x4000>;
|
||||
pool;
|
||||
};
|
||||
};
|
||||
|
||||
&timers3 {
|
||||
/delete-property/dmas;
|
||||
/delete-property/dma-names;
|
||||
status = "disabled";
|
||||
pwm {
|
||||
pinctrl-0 = <&pwm3_pins_a>;
|
||||
pinctrl-1 = <&pwm3_sleep_pins_a>;
|
||||
pinctrl-names = "default", "sleep";
|
||||
status = "okay";
|
||||
};
|
||||
timer@2 {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
&timers4 {
|
||||
/delete-property/dmas;
|
||||
/delete-property/dma-names;
|
||||
status = "disabled";
|
||||
pwm {
|
||||
pinctrl-0 = <&pwm4_pins_a>;
|
||||
pinctrl-1 = <&pwm4_sleep_pins_a>;
|
||||
pinctrl-names = "default", "sleep";
|
||||
status = "okay";
|
||||
};
|
||||
timer@3 {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
&timers8 {
|
||||
/delete-property/dmas;
|
||||
/delete-property/dma-names;
|
||||
status = "disabled";
|
||||
pwm {
|
||||
pinctrl-0 = <&pwm8_pins_a>;
|
||||
pinctrl-1 = <&pwm8_sleep_pins_a>;
|
||||
pinctrl-names = "default", "sleep";
|
||||
status = "okay";
|
||||
};
|
||||
timer@7 {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
&timers14 {
|
||||
status = "disabled";
|
||||
pwm {
|
||||
pinctrl-0 = <&pwm14_pins_a>;
|
||||
pinctrl-1 = <&pwm14_sleep_pins_a>;
|
||||
pinctrl-names = "default", "sleep";
|
||||
status = "okay";
|
||||
};
|
||||
timer@13 {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
&uart4 {
|
||||
pinctrl-names = "default", "sleep", "idle";
|
||||
pinctrl-0 = <&uart4_pins_a>;
|
||||
pinctrl-1 = <&uart4_sleep_pins_a>;
|
||||
pinctrl-2 = <&uart4_idle_pins_a>;
|
||||
/delete-property/dmas;
|
||||
/delete-property/dma-names;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&uart8 {
|
||||
pinctrl-names = "default", "sleep", "idle";
|
||||
pinctrl-0 = <&uart8_pins_a>;
|
||||
pinctrl-1 = <&uart8_sleep_pins_a>;
|
||||
pinctrl-2 = <&uart8_idle_pins_a>;
|
||||
/delete-property/dmas;
|
||||
/delete-property/dma-names;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&usart1 {
|
||||
pinctrl-names = "default", "sleep", "idle";
|
||||
pinctrl-0 = <&usart1_pins_a>;
|
||||
pinctrl-1 = <&usart1_sleep_pins_a>;
|
||||
pinctrl-2 = <&usart1_idle_pins_a>;
|
||||
uart-has-rtscts;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
/* Bluetooth */
|
||||
&usart2 {
|
||||
pinctrl-names = "default", "sleep", "idle";
|
||||
pinctrl-0 = <&usart2_pins_a>;
|
||||
pinctrl-1 = <&usart2_sleep_pins_a>;
|
||||
pinctrl-2 = <&usart2_idle_pins_a>;
|
||||
uart-has-rtscts;
|
||||
status = "okay";
|
||||
|
||||
bluetooth {
|
||||
shutdown-gpios = <&mcp23017 13 GPIO_ACTIVE_HIGH>;
|
||||
compatible = "brcm,bcm43438-bt";
|
||||
max-speed = <3000000>;
|
||||
vbat-supply = <&v3v3_ao>;
|
||||
vddio-supply = <&v3v3_ao>;
|
||||
};
|
||||
};
|
||||
|
||||
&usbh_ehci {
|
||||
phys = <&usbphyc_port0>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usbotg_hs {
|
||||
phys = <&usbphyc_port1 0>;
|
||||
phy-names = "usb2-phy";
|
||||
usb-role-switch;
|
||||
status = "okay";
|
||||
port {
|
||||
usbotg_hs_ep: endpoint {
|
||||
remote-endpoint = <&con_usb_c_g0_ep>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&usbphyc {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usbphyc_port0 {
|
||||
phy-supply = <&scmi_vdd_usb>;
|
||||
st,current-boost-microamp = <1000>;
|
||||
st,decrease-hs-slew-rate;
|
||||
st,tune-hs-dc-level = <2>;
|
||||
st,enable-hs-rftime-reduction;
|
||||
st,trim-hs-current = <11>;
|
||||
st,trim-hs-impedance = <2>;
|
||||
st,tune-squelch-level = <1>;
|
||||
st,enable-hs-rx-gain-eq;
|
||||
st,no-hs-ftime-ctrl;
|
||||
st,no-lsfs-sc;
|
||||
|
||||
/*
|
||||
* Hack to keep hub active if wakeup source is enabled
|
||||
* otherwise the hub will wakeup the port0 as soon as the v3v3_sw is disabled
|
||||
*/
|
||||
connector {
|
||||
compatible = "usb-a-connector";
|
||||
vbus-supply = <&scmi_v3v3_sw>;
|
||||
};
|
||||
};
|
||||
|
||||
&usbphyc_port1 {
|
||||
phy-supply = <&scmi_vdd_usb>;
|
||||
st,current-boost-microamp = <1000>;
|
||||
st,decrease-hs-slew-rate;
|
||||
st,tune-hs-dc-level = <2>;
|
||||
st,enable-hs-rftime-reduction;
|
||||
st,trim-hs-current = <11>;
|
||||
st,trim-hs-impedance = <2>;
|
||||
st,tune-squelch-level = <1>;
|
||||
st,enable-hs-rx-gain-eq;
|
||||
st,no-hs-ftime-ctrl;
|
||||
st,no-lsfs-sc;
|
||||
};
|
||||
6
arch/arm/dts/stm32mp135f-dk-u-boot.dtsi
Normal file
6
arch/arm/dts/stm32mp135f-dk-u-boot.dtsi
Normal file
@ -0,0 +1,6 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later OR BSD-3-Clause
|
||||
/*
|
||||
* Copyright (C) STMicroelectronics 2021 - All Rights Reserved
|
||||
*/
|
||||
|
||||
#include "stm32mp135d-dk-u-boot.dtsi"
|
||||
689
arch/arm/dts/stm32mp135f-dk.dts
Normal file
689
arch/arm/dts/stm32mp135f-dk.dts
Normal file
@ -0,0 +1,689 @@
|
||||
// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
|
||||
/*
|
||||
* Copyright (C) STMicroelectronics 2021 - All Rights Reserved
|
||||
* Author: Alexandre Torgue <alexandre.torgue@foss.st.com> for STMicroelectronics.
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
#include <dt-bindings/input/input.h>
|
||||
#include <dt-bindings/leds/common.h>
|
||||
#include <dt-bindings/rtc/rtc-stm32.h>
|
||||
#include "stm32mp135.dtsi"
|
||||
#include "stm32mp13xf.dtsi"
|
||||
#include "stm32mp13-pinctrl.dtsi"
|
||||
|
||||
/ {
|
||||
model = "STMicroelectronics STM32MP135F-DK Discovery Board";
|
||||
compatible = "st,stm32mp135f-dk", "st,stm32mp135";
|
||||
|
||||
aliases {
|
||||
ethernet0 = ð1;
|
||||
ethernet1 = ð2;
|
||||
serial0 = &uart4;
|
||||
serial1 = &usart1;
|
||||
serial2 = &uart8;
|
||||
serial3 = &usart2;
|
||||
};
|
||||
|
||||
chosen {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
stdout-path = "serial0:115200n8";
|
||||
|
||||
framebuffer {
|
||||
compatible = "simple-framebuffer";
|
||||
clocks = <&rcc LTDC_PX>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
||||
clocks {
|
||||
clk_ext_camera: clk-ext-camera {
|
||||
#clock-cells = <0>;
|
||||
compatible = "fixed-clock";
|
||||
clock-frequency = <24000000>;
|
||||
};
|
||||
|
||||
clk_mco1: clk-mco1 {
|
||||
#clock-cells = <0>;
|
||||
compatible = "fixed-clock";
|
||||
clock-frequency = <24000000>;
|
||||
};
|
||||
};
|
||||
|
||||
memory@c0000000 {
|
||||
device_type = "memory";
|
||||
reg = <0xc0000000 0x20000000>;
|
||||
};
|
||||
|
||||
gpio-keys {
|
||||
compatible = "gpio-keys";
|
||||
|
||||
user-pa13 {
|
||||
label = "User-PA13";
|
||||
linux,code = <BTN_1>;
|
||||
gpios = <&gpioa 13 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
|
||||
};
|
||||
};
|
||||
|
||||
leds {
|
||||
compatible = "gpio-leds";
|
||||
|
||||
led-blue {
|
||||
function = LED_FUNCTION_HEARTBEAT;
|
||||
color = <LED_COLOR_ID_BLUE>;
|
||||
gpios = <&gpioa 14 GPIO_ACTIVE_LOW>;
|
||||
linux,default-trigger = "heartbeat";
|
||||
default-state = "off";
|
||||
};
|
||||
};
|
||||
|
||||
reserved-memory {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
|
||||
optee_framebuffer@dd000000 {
|
||||
reg = <0xdd000000 0x1000000>;
|
||||
no-map;
|
||||
};
|
||||
|
||||
optee@de000000 {
|
||||
reg = <0xde000000 0x2000000>;
|
||||
no-map;
|
||||
};
|
||||
};
|
||||
|
||||
v3v3_ao: v3v3_ao {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "v3v3_ao";
|
||||
regulator-min-microvolt = <3300000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
panel_backlight: panel-backlight {
|
||||
compatible = "gpio-backlight";
|
||||
gpios = <&gpioe 12 GPIO_ACTIVE_HIGH>;
|
||||
default-on;
|
||||
default-brightness-level = <0>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
panel_rgb: panel-rgb {
|
||||
compatible = "rocktech,rk043fn48h", "panel-dpi";
|
||||
enable-gpios = <&gpioi 7 GPIO_ACTIVE_HIGH>;
|
||||
backlight = <&panel_backlight>;
|
||||
power-supply = <&scmi_v3v3_sw>;
|
||||
data-mapping = "bgr666";
|
||||
status = "okay";
|
||||
|
||||
width-mm = <105>;
|
||||
height-mm = <67>;
|
||||
|
||||
port {
|
||||
panel_in_rgb: endpoint {
|
||||
remote-endpoint = <<dc_out_rgb>;
|
||||
};
|
||||
};
|
||||
|
||||
panel-timing {
|
||||
clock-frequency = <10000000>;
|
||||
hactive = <480>;
|
||||
vactive = <272>;
|
||||
hsync-len = <52>;
|
||||
hfront-porch = <10>;
|
||||
hback-porch = <10>;
|
||||
vsync-len = <10>;
|
||||
vfront-porch = <10>;
|
||||
vback-porch = <10>;
|
||||
hsync-active = <0>;
|
||||
vsync-active = <0>;
|
||||
de-active = <1>;
|
||||
pixelclk-active = <1>;
|
||||
};
|
||||
};
|
||||
|
||||
wifi_pwrseq: wifi-pwrseq {
|
||||
compatible = "mmc-pwrseq-simple";
|
||||
reset-gpios = <&mcp23017 11 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
};
|
||||
|
||||
&adc_1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&adc1_usb_cc_pins_a>;
|
||||
vdda-supply = <&scmi_vdd_adc>;
|
||||
vref-supply = <&scmi_vdd_adc>;
|
||||
status = "okay";
|
||||
adc1: adc@0 {
|
||||
/*
|
||||
* Type-C USB_PWR_CC1 & USB_PWR_CC2 on in6 & in12.
|
||||
* Use at least 5 * RC time, e.g. 5 * (Rp + Rd) * C:
|
||||
* 5 * (5.1 + 47kOhms) * 5pF => 1.3us.
|
||||
* Use arbitrary margin here (e.g. 5us).
|
||||
*/
|
||||
st,min-sample-time-nsecs = <5000>;
|
||||
/* USB Type-C CC1 & CC2 */
|
||||
st,adc-channels = <6 12>;
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
&crc1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&cryp {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&dcmipp {
|
||||
status = "okay";
|
||||
pinctrl-names = "default", "sleep";
|
||||
pinctrl-0 = <&dcmipp_pins_a>;
|
||||
pinctrl-1 = <&dcmipp_sleep_pins_a>;
|
||||
port {
|
||||
dcmipp_0: endpoint {
|
||||
remote-endpoint = <&mipid02_2>;
|
||||
bus-width = <8>;
|
||||
hsync-active = <0>;
|
||||
vsync-active = <0>;
|
||||
pclk-sample = <0>;
|
||||
pclk-max-frequency = <120000000>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&dma1 {
|
||||
sram = <&dma_pool>;
|
||||
};
|
||||
|
||||
&dma2 {
|
||||
sram = <&dma_pool>;
|
||||
};
|
||||
|
||||
&dts {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
ð1 {
|
||||
status = "okay";
|
||||
pinctrl-0 = <ð1_rmii_pins_a>;
|
||||
pinctrl-1 = <ð1_rmii_sleep_pins_a>;
|
||||
pinctrl-names = "default", "sleep";
|
||||
phy-mode = "rmii";
|
||||
max-speed = <100>;
|
||||
phy-handle = <&phy0_eth1>;
|
||||
nvmem-cells = <ðernet_mac1_address>;
|
||||
nvmem-cell-names = "mac-address";
|
||||
|
||||
mdio1 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
compatible = "snps,dwmac-mdio";
|
||||
|
||||
phy0_eth1: ethernet-phy@0 {
|
||||
compatible = "ethernet-phy-id0007.c131";
|
||||
reset-gpios = <&mcp23017 9 GPIO_ACTIVE_LOW>;
|
||||
reg = <0>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
ð2 {
|
||||
status = "okay";
|
||||
pinctrl-0 = <ð2_rmii_pins_a>;
|
||||
pinctrl-1 = <ð2_rmii_sleep_pins_a>;
|
||||
pinctrl-names = "default", "sleep";
|
||||
phy-mode = "rmii";
|
||||
max-speed = <100>;
|
||||
phy-handle = <&phy0_eth2>;
|
||||
st,ext-phyclk;
|
||||
phy-supply = <&scmi_v3v3_sw>;
|
||||
nvmem-cells = <ðernet_mac2_address>;
|
||||
nvmem-cell-names = "mac-address";
|
||||
|
||||
mdio1 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
compatible = "snps,dwmac-mdio";
|
||||
phy0_eth2: ethernet-phy@0 {
|
||||
compatible = "ethernet-phy-id0007.c131";
|
||||
reset-gpios = <&mcp23017 10 GPIO_ACTIVE_LOW>;
|
||||
reg = <0>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&i2c1 {
|
||||
pinctrl-names = "default", "sleep";
|
||||
pinctrl-0 = <&i2c1_pins_a>;
|
||||
pinctrl-1 = <&i2c1_sleep_pins_a>;
|
||||
i2c-scl-rising-time-ns = <96>;
|
||||
i2c-scl-falling-time-ns = <3>;
|
||||
clock-frequency = <1000000>;
|
||||
status = "okay";
|
||||
/* spare dmas for other usage */
|
||||
/delete-property/dmas;
|
||||
/delete-property/dma-names;
|
||||
|
||||
mcp23017: pinctrl@21 {
|
||||
compatible = "microchip,mcp23017";
|
||||
reg = <0x21>;
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
interrupts = <12 IRQ_TYPE_LEVEL_LOW>;
|
||||
interrupt-parent = <&gpiog>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&mcp23017_pins_a>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <2>;
|
||||
microchip,irq-mirror;
|
||||
};
|
||||
|
||||
stm32g0@53 {
|
||||
compatible = "st,stm32g0-typec";
|
||||
reg = <0x53>;
|
||||
/* Alert pin on PI2 */
|
||||
interrupts = <2 IRQ_TYPE_EDGE_FALLING>;
|
||||
interrupt-parent = <&gpioi>;
|
||||
/* Internal pull-up on PI2 */
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&stm32g0_intn_pins_a>;
|
||||
firmware-name = "stm32g0-ucsi.mp135f-dk.fw";
|
||||
power-domains = <&pd_core>;
|
||||
wakeup-source;
|
||||
connector {
|
||||
compatible = "usb-c-connector";
|
||||
label = "USB-C";
|
||||
|
||||
port {
|
||||
con_usb_c_g0_ep: endpoint {
|
||||
remote-endpoint = <&usbotg_hs_ep>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&i2c5 {
|
||||
pinctrl-names = "default", "sleep";
|
||||
pinctrl-0 = <&i2c5_pins_a>;
|
||||
pinctrl-1 = <&i2c5_sleep_pins_a>;
|
||||
i2c-scl-rising-time-ns = <170>;
|
||||
i2c-scl-falling-time-ns = <5>;
|
||||
clock-frequency = <400000>;
|
||||
status = "okay";
|
||||
/* spare dmas for other usage */
|
||||
/delete-property/dmas;
|
||||
/delete-property/dma-names;
|
||||
|
||||
gc2145: gc2145@3c {
|
||||
compatible = "galaxycore,gc2145";
|
||||
reg = <0x3c>;
|
||||
clocks = <&clk_ext_camera>;
|
||||
IOVDD-supply = <&scmi_v3v3_sw>;
|
||||
AVDD-supply = <&scmi_v3v3_sw>;
|
||||
DVDD-supply = <&scmi_v3v3_sw>;
|
||||
powerdown-gpios = <&mcp23017 3 (GPIO_ACTIVE_LOW | GPIO_PUSH_PULL)>;
|
||||
reset-gpios = <&mcp23017 4 (GPIO_ACTIVE_LOW | GPIO_PUSH_PULL)>;
|
||||
status = "okay";
|
||||
|
||||
port {
|
||||
gc2145_ep: endpoint {
|
||||
remote-endpoint = <&mipid02_0>;
|
||||
clock-lanes = <0>;
|
||||
data-lanes = <1 2>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
goodix: goodix_ts@5d {
|
||||
compatible = "goodix,gt911";
|
||||
reg = <0x5d>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&goodix_pins_a>;
|
||||
interrupt-parent = <&gpiof>;
|
||||
interrupts = <5 IRQ_TYPE_EDGE_FALLING>;
|
||||
reset-gpios = <&gpioh 2 GPIO_ACTIVE_LOW>;
|
||||
AVDD28-supply = <&scmi_v3v3_sw>;
|
||||
VDDIO-supply = <&scmi_v3v3_sw>;
|
||||
touchscreen-size-x = <480>;
|
||||
touchscreen-size-y = <272>;
|
||||
status = "okay" ;
|
||||
};
|
||||
|
||||
ov5640: camera@3c {
|
||||
compatible = "ovti,ov5640";
|
||||
reg = <0x3c>;
|
||||
clocks = <&clk_ext_camera>;
|
||||
clock-names = "xclk";
|
||||
DOVDD-supply = <&scmi_v3v3_sw>;
|
||||
status = "disabled";
|
||||
powerdown-gpios = <&mcp23017 3 (GPIO_ACTIVE_LOW | GPIO_PUSH_PULL)>;
|
||||
reset-gpios = <&mcp23017 4 (GPIO_ACTIVE_LOW | GPIO_PUSH_PULL)>;
|
||||
|
||||
port {
|
||||
ov5640_0: endpoint {
|
||||
clock-lanes = <0>;
|
||||
data-lanes = <1 2>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
stmipi: stmipi@14 {
|
||||
compatible = "st,st-mipid02";
|
||||
reg = <0x14>;
|
||||
status = "okay";
|
||||
clocks = <&clk_mco1>;
|
||||
clock-names = "xclk";
|
||||
VDDE-supply = <&scmi_v1v8_periph>;
|
||||
VDDIN-supply = <&scmi_v1v8_periph>;
|
||||
reset-gpios = <&mcp23017 2 (GPIO_ACTIVE_LOW | GPIO_PUSH_PULL)>;
|
||||
|
||||
ports {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
port@0 {
|
||||
reg = <0>;
|
||||
|
||||
mipid02_0: endpoint {
|
||||
data-lanes = <1 2>;
|
||||
lane-polarities = <0 0 0>;
|
||||
remote-endpoint = <&gc2145_ep>;
|
||||
};
|
||||
};
|
||||
port@2 {
|
||||
reg = <2>;
|
||||
|
||||
mipid02_2: endpoint {
|
||||
bus-width = <8>;
|
||||
hsync-active = <0>;
|
||||
vsync-active = <0>;
|
||||
pclk-sample = <0>;
|
||||
remote-endpoint = <&dcmipp_0>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&iwdg2 {
|
||||
timeout-sec = <32>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
<dc {
|
||||
pinctrl-names = "default", "sleep";
|
||||
pinctrl-0 = <<dc_pins_a>;
|
||||
pinctrl-1 = <<dc_sleep_pins_a>;
|
||||
status = "okay";
|
||||
|
||||
port {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
ltdc_out_rgb: endpoint@0 {
|
||||
reg = <0>;
|
||||
remote-endpoint = <&panel_in_rgb>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&rtc {
|
||||
st,lsco = <RTC_OUT2_RMP>;
|
||||
pinctrl-0 = <&rtc_out2_rmp_pins_a>;
|
||||
pinctrl-names = "default";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&scmi_regu {
|
||||
scmi_vddcpu: voltd-vddcpu {
|
||||
voltd-name = "vddcpu";
|
||||
regulator-name = "vddcpu";
|
||||
};
|
||||
scmi_vdd: voltd-vdd {
|
||||
voltd-name = "vdd";
|
||||
regulator-name = "vdd";
|
||||
};
|
||||
scmi_vddcore: voltd-vddcore {
|
||||
voltd-name = "vddcore";
|
||||
regulator-name = "vddcore";
|
||||
};
|
||||
scmi_vdd_adc: voltd-vdd_adc {
|
||||
voltd-name = "vdd_adc";
|
||||
regulator-name = "vdd_adc";
|
||||
};
|
||||
scmi_vdd_usb: voltd-vdd_usb {
|
||||
voltd-name = "vdd_usb";
|
||||
regulator-name = "vdd_usb";
|
||||
};
|
||||
scmi_vdd_sd: voltd-vdd_sd {
|
||||
voltd-name = "vdd_sd";
|
||||
regulator-name = "vdd_sd";
|
||||
};
|
||||
scmi_v1v8_periph: voltd-v1v8_periph {
|
||||
voltd-name = "v1v8_periph";
|
||||
regulator-name = "v1v8_periph";
|
||||
};
|
||||
scmi_v3v3_sw: voltd-v3v3_sw {
|
||||
voltd-name = "v3v3_sw";
|
||||
regulator-name = "v3v3_sw";
|
||||
};
|
||||
};
|
||||
|
||||
&sdmmc1 {
|
||||
pinctrl-names = "default", "opendrain", "sleep";
|
||||
pinctrl-0 = <&sdmmc1_b4_pins_a &sdmmc1_clk_pins_a>;
|
||||
pinctrl-1 = <&sdmmc1_b4_od_pins_a &sdmmc1_clk_pins_a>;
|
||||
pinctrl-2 = <&sdmmc1_b4_sleep_pins_a>;
|
||||
cd-gpios = <&gpioh 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
|
||||
disable-wp;
|
||||
st,neg-edge;
|
||||
bus-width = <4>;
|
||||
vmmc-supply = <&scmi_vdd_sd>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
/* Wifi */
|
||||
&sdmmc2 {
|
||||
arm,primecell-periphid = <0x10153180>;
|
||||
pinctrl-names = "default", "opendrain", "sleep";
|
||||
pinctrl-0 = <&sdmmc2_b4_pins_a &sdmmc2_clk_pins_a>;
|
||||
pinctrl-1 = <&sdmmc2_b4_od_pins_a &sdmmc2_clk_pins_a>;
|
||||
pinctrl-2 = <&sdmmc2_b4_sleep_pins_a>;
|
||||
non-removable;
|
||||
st,neg-edge;
|
||||
bus-width = <4>;
|
||||
vmmc-supply = <&v3v3_ao>;
|
||||
mmc-pwrseq = <&wifi_pwrseq>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
status = "okay";
|
||||
|
||||
brcmf: bcrmf@1 {
|
||||
reg = <1>;
|
||||
compatible = "brcm,bcm4329-fmac";
|
||||
};
|
||||
};
|
||||
|
||||
&spi5 {
|
||||
pinctrl-names = "default", "sleep";
|
||||
pinctrl-0 = <&spi5_pins_a>;
|
||||
pinctrl-1 = <&spi5_sleep_pins_a>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&sram {
|
||||
dma_pool: dma-sram@0 {
|
||||
reg = <0x0 0x4000>;
|
||||
pool;
|
||||
};
|
||||
};
|
||||
|
||||
&timers3 {
|
||||
/delete-property/dmas;
|
||||
/delete-property/dma-names;
|
||||
status = "disabled";
|
||||
pwm {
|
||||
pinctrl-0 = <&pwm3_pins_a>;
|
||||
pinctrl-1 = <&pwm3_sleep_pins_a>;
|
||||
pinctrl-names = "default", "sleep";
|
||||
status = "okay";
|
||||
};
|
||||
timer@2 {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
&timers4 {
|
||||
/delete-property/dmas;
|
||||
/delete-property/dma-names;
|
||||
status = "disabled";
|
||||
pwm {
|
||||
pinctrl-0 = <&pwm4_pins_a>;
|
||||
pinctrl-1 = <&pwm4_sleep_pins_a>;
|
||||
pinctrl-names = "default", "sleep";
|
||||
status = "okay";
|
||||
};
|
||||
timer@3 {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
&timers8 {
|
||||
/delete-property/dmas;
|
||||
/delete-property/dma-names;
|
||||
status = "disabled";
|
||||
pwm {
|
||||
pinctrl-0 = <&pwm8_pins_a>;
|
||||
pinctrl-1 = <&pwm8_sleep_pins_a>;
|
||||
pinctrl-names = "default", "sleep";
|
||||
status = "okay";
|
||||
};
|
||||
timer@7 {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
&timers14 {
|
||||
status = "disabled";
|
||||
pwm {
|
||||
pinctrl-0 = <&pwm14_pins_a>;
|
||||
pinctrl-1 = <&pwm14_sleep_pins_a>;
|
||||
pinctrl-names = "default", "sleep";
|
||||
status = "okay";
|
||||
};
|
||||
timer@13 {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
&uart4 {
|
||||
pinctrl-names = "default", "sleep", "idle";
|
||||
pinctrl-0 = <&uart4_pins_a>;
|
||||
pinctrl-1 = <&uart4_sleep_pins_a>;
|
||||
pinctrl-2 = <&uart4_idle_pins_a>;
|
||||
/delete-property/dmas;
|
||||
/delete-property/dma-names;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&uart8 {
|
||||
pinctrl-names = "default", "sleep", "idle";
|
||||
pinctrl-0 = <&uart8_pins_a>;
|
||||
pinctrl-1 = <&uart8_sleep_pins_a>;
|
||||
pinctrl-2 = <&uart8_idle_pins_a>;
|
||||
/delete-property/dmas;
|
||||
/delete-property/dma-names;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&usart1 {
|
||||
pinctrl-names = "default", "sleep", "idle";
|
||||
pinctrl-0 = <&usart1_pins_a>;
|
||||
pinctrl-1 = <&usart1_sleep_pins_a>;
|
||||
pinctrl-2 = <&usart1_idle_pins_a>;
|
||||
uart-has-rtscts;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
/* Bluetooth */
|
||||
&usart2 {
|
||||
pinctrl-names = "default", "sleep", "idle";
|
||||
pinctrl-0 = <&usart2_pins_a>;
|
||||
pinctrl-1 = <&usart2_sleep_pins_a>;
|
||||
pinctrl-2 = <&usart2_idle_pins_a>;
|
||||
uart-has-rtscts;
|
||||
status = "okay";
|
||||
|
||||
bluetooth {
|
||||
shutdown-gpios = <&mcp23017 13 GPIO_ACTIVE_HIGH>;
|
||||
compatible = "brcm,bcm43438-bt";
|
||||
max-speed = <3000000>;
|
||||
vbat-supply = <&v3v3_ao>;
|
||||
vddio-supply = <&v3v3_ao>;
|
||||
};
|
||||
};
|
||||
|
||||
&usbh_ehci {
|
||||
phys = <&usbphyc_port0>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usbotg_hs {
|
||||
phys = <&usbphyc_port1 0>;
|
||||
phy-names = "usb2-phy";
|
||||
usb-role-switch;
|
||||
status = "okay";
|
||||
port {
|
||||
usbotg_hs_ep: endpoint {
|
||||
remote-endpoint = <&con_usb_c_g0_ep>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&usbphyc {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usbphyc_port0 {
|
||||
phy-supply = <&scmi_vdd_usb>;
|
||||
st,current-boost-microamp = <1000>;
|
||||
st,decrease-hs-slew-rate;
|
||||
st,tune-hs-dc-level = <2>;
|
||||
st,enable-hs-rftime-reduction;
|
||||
st,trim-hs-current = <11>;
|
||||
st,trim-hs-impedance = <2>;
|
||||
st,tune-squelch-level = <1>;
|
||||
st,enable-hs-rx-gain-eq;
|
||||
st,no-hs-ftime-ctrl;
|
||||
st,no-lsfs-sc;
|
||||
|
||||
/*
|
||||
* Hack to keep hub active if wakeup source is enabled
|
||||
* otherwise the hub will wakeup the port0 as soon as the v3v3_sw is disabled
|
||||
*/
|
||||
connector {
|
||||
compatible = "usb-a-connector";
|
||||
vbus-supply = <&scmi_v3v3_sw>;
|
||||
};
|
||||
};
|
||||
|
||||
&usbphyc_port1 {
|
||||
phy-supply = <&scmi_vdd_usb>;
|
||||
st,current-boost-microamp = <1000>;
|
||||
st,decrease-hs-slew-rate;
|
||||
st,tune-hs-dc-level = <2>;
|
||||
st,enable-hs-rftime-reduction;
|
||||
st,trim-hs-current = <11>;
|
||||
st,trim-hs-impedance = <2>;
|
||||
st,tune-squelch-level = <1>;
|
||||
st,enable-hs-rx-gain-eq;
|
||||
st,no-hs-ftime-ctrl;
|
||||
st,no-lsfs-sc;
|
||||
};
|
||||
5
arch/arm/dts/stm32mp13xa.dtsi
Normal file
5
arch/arm/dts/stm32mp13xa.dtsi
Normal file
@ -0,0 +1,5 @@
|
||||
// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
|
||||
/*
|
||||
* Copyright (C) STMicroelectronics 2019 - All Rights Reserved
|
||||
* Author: Alexandre Torgue <alexandre.torgue@st.com> for STMicroelectronics.
|
||||
*/
|
||||
18
arch/arm/dts/stm32mp13xc.dtsi
Normal file
18
arch/arm/dts/stm32mp13xc.dtsi
Normal file
@ -0,0 +1,18 @@
|
||||
// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
|
||||
/*
|
||||
* Copyright (C) STMicroelectronics 2021 - All Rights Reserved
|
||||
* Author: Alexandre Torgue <alexandre.torgue@foss.st.com> for STMicroelectronics.
|
||||
*/
|
||||
|
||||
/ {
|
||||
soc {
|
||||
cryp: crypto@54002000 {
|
||||
compatible = "st,stm32mp1-cryp";
|
||||
reg = <0x54002000 0x400>;
|
||||
interrupts = <GIC_SPI 80 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&rcc CRYP1>;
|
||||
resets = <&rcc CRYP1_R>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
};
|
||||
5
arch/arm/dts/stm32mp13xd.dtsi
Normal file
5
arch/arm/dts/stm32mp13xd.dtsi
Normal file
@ -0,0 +1,5 @@
|
||||
// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
|
||||
/*
|
||||
* Copyright (C) STMicroelectronics 2021 - All Rights Reserved
|
||||
* Author: Alexandre Torgue <alexandre.torgue@foss.st.com> for STMicroelectronics.
|
||||
*/
|
||||
18
arch/arm/dts/stm32mp13xf.dtsi
Normal file
18
arch/arm/dts/stm32mp13xf.dtsi
Normal file
@ -0,0 +1,18 @@
|
||||
// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
|
||||
/*
|
||||
* Copyright (C) STMicroelectronics 2021 - All Rights Reserved
|
||||
* Author: Alexandre Torgue <alexandre.torgue@foss.st.com> for STMicroelectronics.
|
||||
*/
|
||||
|
||||
/ {
|
||||
soc {
|
||||
cryp: crypto@54002000 {
|
||||
compatible = "st,stm32mp1-cryp";
|
||||
reg = <0x54002000 0x400>;
|
||||
interrupts = <GIC_SPI 80 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&rcc CRYP1>;
|
||||
resets = <&rcc CRYP1_R>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
};
|
||||
@ -4,10 +4,24 @@
|
||||
*/
|
||||
#include <linux/stringify.h>
|
||||
|
||||
#ifdef CONFIG_SPL
|
||||
&ddr {
|
||||
clocks = <&rcc AXIDCG>,
|
||||
<&rcc DDRC1>,
|
||||
<&rcc DDRC2>,
|
||||
<&rcc DDRPHYC>,
|
||||
<&rcc DDRCAPB>,
|
||||
<&rcc DDRPHYCAPB>;
|
||||
|
||||
clock-names = "axidcg",
|
||||
"ddrc1",
|
||||
"ddrc2",
|
||||
"ddrphyc",
|
||||
"ddrcapb",
|
||||
"ddrphycapb";
|
||||
|
||||
config-DDR_MEM_COMPATIBLE {
|
||||
u-boot,dm-pre-reloc;
|
||||
|
||||
compatible = __stringify(st,DDR_MEM_COMPATIBLE);
|
||||
|
||||
st,mem-name = DDR_MEM_NAME;
|
||||
@ -116,27 +130,10 @@
|
||||
DDR_MR3
|
||||
>;
|
||||
|
||||
#ifdef DDR_PHY_CAL_SKIP
|
||||
st,phy-cal = <
|
||||
DDR_DX0DLLCR
|
||||
DDR_DX0DQTR
|
||||
DDR_DX0DQSTR
|
||||
DDR_DX1DLLCR
|
||||
DDR_DX1DQTR
|
||||
DDR_DX1DQSTR
|
||||
DDR_DX2DLLCR
|
||||
DDR_DX2DQTR
|
||||
DDR_DX2DQSTR
|
||||
DDR_DX3DLLCR
|
||||
DDR_DX3DQTR
|
||||
DDR_DX3DQSTR
|
||||
>;
|
||||
|
||||
#endif
|
||||
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
#endif
|
||||
|
||||
#undef DDR_MEM_COMPATIBLE
|
||||
#undef DDR_MEM_NAME
|
||||
@ -224,18 +221,6 @@
|
||||
#undef DDR_ODTCR
|
||||
#undef DDR_ZQ0CR1
|
||||
#undef DDR_DX0GCR
|
||||
#undef DDR_DX0DLLCR
|
||||
#undef DDR_DX0DQTR
|
||||
#undef DDR_DX0DQSTR
|
||||
#undef DDR_DX1GCR
|
||||
#undef DDR_DX1DLLCR
|
||||
#undef DDR_DX1DQTR
|
||||
#undef DDR_DX1DQSTR
|
||||
#undef DDR_DX2GCR
|
||||
#undef DDR_DX2DLLCR
|
||||
#undef DDR_DX2DQTR
|
||||
#undef DDR_DX2DQSTR
|
||||
#undef DDR_DX3GCR
|
||||
#undef DDR_DX3DLLCR
|
||||
#undef DDR_DX3DQTR
|
||||
#undef DDR_DX3DQSTR
|
||||
|
||||
@ -100,20 +100,8 @@
|
||||
#define DDR_ODTCR 0x00010000
|
||||
#define DDR_ZQ0CR1 0x00000038
|
||||
#define DDR_DX0GCR 0x0000CE81
|
||||
#define DDR_DX0DLLCR 0x40000000
|
||||
#define DDR_DX0DQTR 0xFFFFFFFF
|
||||
#define DDR_DX0DQSTR 0x3DB02000
|
||||
#define DDR_DX1GCR 0x0000CE81
|
||||
#define DDR_DX1DLLCR 0x40000000
|
||||
#define DDR_DX1DQTR 0xFFFFFFFF
|
||||
#define DDR_DX1DQSTR 0x3DB02000
|
||||
#define DDR_DX2GCR 0x0000CE80
|
||||
#define DDR_DX2DLLCR 0x40000000
|
||||
#define DDR_DX2DQTR 0xFFFFFFFF
|
||||
#define DDR_DX2DQSTR 0x3DB02000
|
||||
#define DDR_DX3GCR 0x0000CE80
|
||||
#define DDR_DX3DLLCR 0x40000000
|
||||
#define DDR_DX3DQTR 0xFFFFFFFF
|
||||
#define DDR_DX3DQSTR 0x3DB02000
|
||||
|
||||
#include "stm32mp15-ddr.dtsi"
|
||||
|
||||
@ -100,20 +100,8 @@
|
||||
#define DDR_ODTCR 0x00010000
|
||||
#define DDR_ZQ0CR1 0x00000038
|
||||
#define DDR_DX0GCR 0x0000CE81
|
||||
#define DDR_DX0DLLCR 0x40000000
|
||||
#define DDR_DX0DQTR 0xFFFFFFFF
|
||||
#define DDR_DX0DQSTR 0x3DB02000
|
||||
#define DDR_DX1GCR 0x0000CE81
|
||||
#define DDR_DX1DLLCR 0x40000000
|
||||
#define DDR_DX1DQTR 0xFFFFFFFF
|
||||
#define DDR_DX1DQSTR 0x3DB02000
|
||||
#define DDR_DX2GCR 0x0000CE81
|
||||
#define DDR_DX2DLLCR 0x40000000
|
||||
#define DDR_DX2DQTR 0xFFFFFFFF
|
||||
#define DDR_DX2DQSTR 0x3DB02000
|
||||
#define DDR_DX3GCR 0x0000CE81
|
||||
#define DDR_DX3DLLCR 0x40000000
|
||||
#define DDR_DX3DQTR 0xFFFFFFFF
|
||||
#define DDR_DX3DQSTR 0x3DB02000
|
||||
|
||||
#include "stm32mp15-ddr.dtsi"
|
||||
|
||||
@ -101,20 +101,8 @@
|
||||
#define DDR_ODTCR 0x00010000
|
||||
#define DDR_ZQ0CR1 0x00000038
|
||||
#define DDR_DX0GCR 0x0000CE81
|
||||
#define DDR_DX0DLLCR 0x40000000
|
||||
#define DDR_DX0DQTR 0xFFFFFFFF
|
||||
#define DDR_DX0DQSTR 0x3DB02000
|
||||
#define DDR_DX1GCR 0x0000CE81
|
||||
#define DDR_DX1DLLCR 0x40000000
|
||||
#define DDR_DX1DQTR 0xFFFFFFFF
|
||||
#define DDR_DX1DQSTR 0x3DB02000
|
||||
#define DDR_DX2GCR 0x0000CE81
|
||||
#define DDR_DX2DLLCR 0x40000000
|
||||
#define DDR_DX2DQTR 0xFFFFFFFF
|
||||
#define DDR_DX2DQSTR 0x3DB02000
|
||||
#define DDR_DX3GCR 0x0000CE81
|
||||
#define DDR_DX3DLLCR 0x40000000
|
||||
#define DDR_DX3DQTR 0xFFFFFFFF
|
||||
#define DDR_DX3DQSTR 0x3DB02000
|
||||
|
||||
#include "stm32mp15-ddr.dtsi"
|
||||
|
||||
@ -101,20 +101,8 @@
|
||||
#define DDR_ODTCR 0x00010000
|
||||
#define DDR_ZQ0CR1 0x00000038
|
||||
#define DDR_DX0GCR 0x0000CE81
|
||||
#define DDR_DX0DLLCR 0x40000000
|
||||
#define DDR_DX0DQTR 0xFFFFFFFF
|
||||
#define DDR_DX0DQSTR 0x3DB02000
|
||||
#define DDR_DX1GCR 0x0000CE81
|
||||
#define DDR_DX1DLLCR 0x40000000
|
||||
#define DDR_DX1DQTR 0xFFFFFFFF
|
||||
#define DDR_DX1DQSTR 0x3DB02000
|
||||
#define DDR_DX2GCR 0x0000CE81
|
||||
#define DDR_DX2DLLCR 0x40000000
|
||||
#define DDR_DX2DQTR 0xFFFFFFFF
|
||||
#define DDR_DX2DQSTR 0x3DB02000
|
||||
#define DDR_DX3GCR 0x0000CE81
|
||||
#define DDR_DX3DLLCR 0x40000000
|
||||
#define DDR_DX3DQTR 0xFFFFFFFF
|
||||
#define DDR_DX3DQSTR 0x3DB02000
|
||||
|
||||
#include "stm32mp15-ddr.dtsi"
|
||||
|
||||
@ -101,20 +101,8 @@
|
||||
#define DDR_ODTCR 0x00010000
|
||||
#define DDR_ZQ0CR1 0x00000038
|
||||
#define DDR_DX0GCR 0x0000CE81
|
||||
#define DDR_DX0DLLCR 0x40000000
|
||||
#define DDR_DX0DQTR 0xFFFFFFFF
|
||||
#define DDR_DX0DQSTR 0x3DB02000
|
||||
#define DDR_DX1GCR 0x0000CE81
|
||||
#define DDR_DX1DLLCR 0x40000000
|
||||
#define DDR_DX1DQTR 0xFFFFFFFF
|
||||
#define DDR_DX1DQSTR 0x3DB02000
|
||||
#define DDR_DX2GCR 0x0000CE81
|
||||
#define DDR_DX2DLLCR 0x40000000
|
||||
#define DDR_DX2DQTR 0xFFFFFFFF
|
||||
#define DDR_DX2DQSTR 0x3DB02000
|
||||
#define DDR_DX3GCR 0x0000CE81
|
||||
#define DDR_DX3DLLCR 0x40000000
|
||||
#define DDR_DX3DQTR 0xFFFFFFFF
|
||||
#define DDR_DX3DQSTR 0x3DB02000
|
||||
|
||||
#include "stm32mp15-ddr.dtsi"
|
||||
|
||||
@ -100,20 +100,8 @@
|
||||
#define DDR_ODTCR 0x00010000
|
||||
#define DDR_ZQ0CR1 0x00000038
|
||||
#define DDR_DX0GCR 0x0000CE81
|
||||
#define DDR_DX0DLLCR 0x40000000
|
||||
#define DDR_DX0DQTR 0xFFFFFFFF
|
||||
#define DDR_DX0DQSTR 0x3DB02000
|
||||
#define DDR_DX1GCR 0x0000CE81
|
||||
#define DDR_DX1DLLCR 0x40000000
|
||||
#define DDR_DX1DQTR 0xFFFFFFFF
|
||||
#define DDR_DX1DQSTR 0x3DB02000
|
||||
#define DDR_DX2GCR 0x0000CE81
|
||||
#define DDR_DX2DLLCR 0x40000000
|
||||
#define DDR_DX2DQTR 0xFFFFFFFF
|
||||
#define DDR_DX2DQSTR 0x3DB02000
|
||||
#define DDR_DX3GCR 0x0000CE81
|
||||
#define DDR_DX3DLLCR 0x40000000
|
||||
#define DDR_DX3DQTR 0xFFFFFFFF
|
||||
#define DDR_DX3DQSTR 0x3DB02000
|
||||
|
||||
#include "stm32mp15-ddr.dtsi"
|
||||
|
||||
524
arch/arm/dts/stm32mp15-m4-srm-pinctrl.dtsi
Normal file
524
arch/arm/dts/stm32mp15-m4-srm-pinctrl.dtsi
Normal file
@ -0,0 +1,524 @@
|
||||
// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
|
||||
/*
|
||||
* Copyright (C) STMicroelectronics 2019 - All Rights Reserved
|
||||
* Author: Fabien Dessenne <fabien.dessenne@st.com> for STMicroelectronics.
|
||||
*/
|
||||
|
||||
&pinctrl {
|
||||
m4_adc1_in6_pins_a: m4-adc1-in6 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('F', 12, RSVD)>;
|
||||
};
|
||||
};
|
||||
|
||||
m4_adc12_ain_pins_a: m4-adc12-ain-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('C', 3, RSVD)>, /* ADC1 in13 */
|
||||
<STM32_PINMUX('F', 12, RSVD)>, /* ADC1 in6 */
|
||||
<STM32_PINMUX('F', 13, RSVD)>, /* ADC2 in2 */
|
||||
<STM32_PINMUX('F', 14, RSVD)>; /* ADC2 in6 */
|
||||
};
|
||||
};
|
||||
|
||||
m4_adc12_usb_pwr_pins_a: m4-adc12-usb-pwr-pins-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('A', 4, RSVD)>, /* ADC12 in18 */
|
||||
<STM32_PINMUX('A', 5, RSVD)>; /* ADC12 in19 */
|
||||
};
|
||||
};
|
||||
|
||||
m4_cec_pins_a: m4-cec-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('A', 15, RSVD)>;
|
||||
};
|
||||
};
|
||||
|
||||
m4_cec_pins_b: m4-cec-1 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('B', 6, RSVD)>;
|
||||
};
|
||||
};
|
||||
|
||||
m4_dac_ch1_pins_a: m4-dac-ch1 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('A', 4, RSVD)>;
|
||||
};
|
||||
};
|
||||
|
||||
m4_dac_ch2_pins_a: m4-dac-ch2 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('A', 5, RSVD)>;
|
||||
};
|
||||
};
|
||||
|
||||
m4_dcmi_pins_a: m4-dcmi-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('H', 8, RSVD)>,/* DCMI_HSYNC */
|
||||
<STM32_PINMUX('B', 7, RSVD)>,/* DCMI_VSYNC */
|
||||
<STM32_PINMUX('A', 6, RSVD)>,/* DCMI_PIXCLK */
|
||||
<STM32_PINMUX('H', 9, RSVD)>,/* DCMI_D0 */
|
||||
<STM32_PINMUX('H', 10, RSVD)>,/* DCMI_D1 */
|
||||
<STM32_PINMUX('H', 11, RSVD)>,/* DCMI_D2 */
|
||||
<STM32_PINMUX('H', 12, RSVD)>,/* DCMI_D3 */
|
||||
<STM32_PINMUX('H', 14, RSVD)>,/* DCMI_D4 */
|
||||
<STM32_PINMUX('I', 4, RSVD)>,/* DCMI_D5 */
|
||||
<STM32_PINMUX('B', 8, RSVD)>,/* DCMI_D6 */
|
||||
<STM32_PINMUX('E', 6, RSVD)>,/* DCMI_D7 */
|
||||
<STM32_PINMUX('I', 1, RSVD)>,/* DCMI_D8 */
|
||||
<STM32_PINMUX('H', 7, RSVD)>,/* DCMI_D9 */
|
||||
<STM32_PINMUX('I', 3, RSVD)>,/* DCMI_D10 */
|
||||
<STM32_PINMUX('H', 15, RSVD)>;/* DCMI_D11 */
|
||||
};
|
||||
};
|
||||
|
||||
m4_dfsdm_clkout_pins_a: m4-dfsdm-clkout-pins-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('B', 13, RSVD)>; /* DFSDM_CKOUT */
|
||||
};
|
||||
};
|
||||
|
||||
m4_dfsdm_data1_pins_a: m4-dfsdm-data1-pins-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('C', 3, RSVD)>; /* DFSDM_DATA1 */
|
||||
};
|
||||
};
|
||||
|
||||
m4_dfsdm_data3_pins_a: m4-dfsdm-data3-pins-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('F', 13, RSVD)>; /* DFSDM_DATA3 */
|
||||
};
|
||||
};
|
||||
|
||||
m4_ethernet0_rgmii_pins_a: m4-rgmii-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('G', 5, RSVD)>, /* ETH_RGMII_CLK125 */
|
||||
<STM32_PINMUX('G', 4, RSVD)>, /* ETH_RGMII_GTX_CLK */
|
||||
<STM32_PINMUX('G', 13, RSVD)>, /* ETH_RGMII_TXD0 */
|
||||
<STM32_PINMUX('G', 14, RSVD)>, /* ETH_RGMII_TXD1 */
|
||||
<STM32_PINMUX('C', 2, RSVD)>, /* ETH_RGMII_TXD2 */
|
||||
<STM32_PINMUX('E', 2, RSVD)>, /* ETH_RGMII_TXD3 */
|
||||
<STM32_PINMUX('B', 11, RSVD)>, /* ETH_RGMII_TX_CTL */
|
||||
<STM32_PINMUX('C', 1, RSVD)>, /* ETH_MDC */
|
||||
<STM32_PINMUX('A', 2, RSVD)>, /* ETH_MDIO */
|
||||
<STM32_PINMUX('C', 4, RSVD)>, /* ETH_RGMII_RXD0 */
|
||||
<STM32_PINMUX('C', 5, RSVD)>, /* ETH_RGMII_RXD1 */
|
||||
<STM32_PINMUX('B', 0, RSVD)>, /* ETH_RGMII_RXD2 */
|
||||
<STM32_PINMUX('B', 1, RSVD)>, /* ETH_RGMII_RXD3 */
|
||||
<STM32_PINMUX('A', 1, RSVD)>, /* ETH_RGMII_RX_CLK */
|
||||
<STM32_PINMUX('A', 7, RSVD)>; /* ETH_RGMII_RX_CTL */
|
||||
};
|
||||
};
|
||||
|
||||
m4_fmc_pins_a: m4-fmc-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('D', 4, RSVD)>, /* FMC_NOE */
|
||||
<STM32_PINMUX('D', 5, RSVD)>, /* FMC_NWE */
|
||||
<STM32_PINMUX('D', 11, RSVD)>, /* FMC_A16_FMC_CLE */
|
||||
<STM32_PINMUX('D', 12, RSVD)>, /* FMC_A17_FMC_ALE */
|
||||
<STM32_PINMUX('D', 14, RSVD)>, /* FMC_D0 */
|
||||
<STM32_PINMUX('D', 15, RSVD)>, /* FMC_D1 */
|
||||
<STM32_PINMUX('D', 0, RSVD)>, /* FMC_D2 */
|
||||
<STM32_PINMUX('D', 1, RSVD)>, /* FMC_D3 */
|
||||
<STM32_PINMUX('E', 7, RSVD)>, /* FMC_D4 */
|
||||
<STM32_PINMUX('E', 8, RSVD)>, /* FMC_D5 */
|
||||
<STM32_PINMUX('E', 9, RSVD)>, /* FMC_D6 */
|
||||
<STM32_PINMUX('E', 10, RSVD)>, /* FMC_D7 */
|
||||
<STM32_PINMUX('G', 9, RSVD)>, /* FMC_NE2_FMC_NCE */
|
||||
<STM32_PINMUX('D', 6, RSVD)>; /* FMC_NWAIT */
|
||||
};
|
||||
};
|
||||
|
||||
m4_hdp0_pins_a: m4-hdp0-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('I', 12, RSVD)>; /* HDP0 */
|
||||
};
|
||||
};
|
||||
|
||||
m4_hdp6_pins_a: m4-hdp6-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('K', 5, RSVD)>; /* HDP6 */
|
||||
};
|
||||
};
|
||||
|
||||
m4_hdp7_pins_a: m4-hdp7-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('K', 6, RSVD)>; /* HDP7 */
|
||||
};
|
||||
};
|
||||
|
||||
m4_i2c1_pins_a: m4-i2c1-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('D', 12, RSVD)>, /* I2C1_SCL */
|
||||
<STM32_PINMUX('F', 15, RSVD)>; /* I2C1_SDA */
|
||||
};
|
||||
};
|
||||
|
||||
m4_i2c2_pins_a: m4-i2c2-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('H', 4, RSVD)>, /* I2C2_SCL */
|
||||
<STM32_PINMUX('H', 5, RSVD)>; /* I2C2_SDA */
|
||||
};
|
||||
};
|
||||
|
||||
m4_i2c5_pins_a: m4-i2c5-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('A', 11, RSVD)>, /* I2C5_SCL */
|
||||
<STM32_PINMUX('A', 12, RSVD)>; /* I2C5_SDA */
|
||||
};
|
||||
};
|
||||
|
||||
m4_i2s2_pins_a: m4-i2s2-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('I', 3, RSVD)>, /* I2S2_SDO */
|
||||
<STM32_PINMUX('B', 9, RSVD)>, /* I2S2_WS */
|
||||
<STM32_PINMUX('A', 9, RSVD)>; /* I2S2_CK */
|
||||
};
|
||||
};
|
||||
|
||||
m4_ltdc_pins_a: m4-ltdc-a-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('G', 7, RSVD)>, /* LCD_CLK */
|
||||
<STM32_PINMUX('I', 10, RSVD)>, /* LCD_HSYNC */
|
||||
<STM32_PINMUX('I', 9, RSVD)>, /* LCD_VSYNC */
|
||||
<STM32_PINMUX('F', 10, RSVD)>, /* LCD_DE */
|
||||
<STM32_PINMUX('H', 2, RSVD)>, /* LCD_R0 */
|
||||
<STM32_PINMUX('H', 3, RSVD)>, /* LCD_R1 */
|
||||
<STM32_PINMUX('H', 8, RSVD)>, /* LCD_R2 */
|
||||
<STM32_PINMUX('H', 9, RSVD)>, /* LCD_R3 */
|
||||
<STM32_PINMUX('H', 10, RSVD)>, /* LCD_R4 */
|
||||
<STM32_PINMUX('C', 0, RSVD)>, /* LCD_R5 */
|
||||
<STM32_PINMUX('H', 12, RSVD)>, /* LCD_R6 */
|
||||
<STM32_PINMUX('E', 15, RSVD)>, /* LCD_R7 */
|
||||
<STM32_PINMUX('E', 5, RSVD)>, /* LCD_G0 */
|
||||
<STM32_PINMUX('E', 6, RSVD)>, /* LCD_G1 */
|
||||
<STM32_PINMUX('H', 13, RSVD)>, /* LCD_G2 */
|
||||
<STM32_PINMUX('H', 14, RSVD)>, /* LCD_G3 */
|
||||
<STM32_PINMUX('H', 15, RSVD)>, /* LCD_G4 */
|
||||
<STM32_PINMUX('I', 0, RSVD)>, /* LCD_G5 */
|
||||
<STM32_PINMUX('I', 1, RSVD)>, /* LCD_G6 */
|
||||
<STM32_PINMUX('I', 2, RSVD)>, /* LCD_G7 */
|
||||
<STM32_PINMUX('D', 9, RSVD)>, /* LCD_B0 */
|
||||
<STM32_PINMUX('G', 12, RSVD)>, /* LCD_B1 */
|
||||
<STM32_PINMUX('G', 10, RSVD)>, /* LCD_B2 */
|
||||
<STM32_PINMUX('D', 10, RSVD)>, /* LCD_B3 */
|
||||
<STM32_PINMUX('I', 4, RSVD)>, /* LCD_B4 */
|
||||
<STM32_PINMUX('A', 3, RSVD)>, /* LCD_B5 */
|
||||
<STM32_PINMUX('B', 8, RSVD)>, /* LCD_B6 */
|
||||
<STM32_PINMUX('D', 8, RSVD)>; /* LCD_B7 */
|
||||
};
|
||||
};
|
||||
|
||||
m4_ltdc_pins_b: m4-ltdc-b-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('I', 14, RSVD)>, /* LCD_CLK */
|
||||
<STM32_PINMUX('I', 12, RSVD)>, /* LCD_HSYNC */
|
||||
<STM32_PINMUX('I', 13, RSVD)>, /* LCD_VSYNC */
|
||||
<STM32_PINMUX('K', 7, RSVD)>, /* LCD_DE */
|
||||
<STM32_PINMUX('I', 15, RSVD)>, /* LCD_R0 */
|
||||
<STM32_PINMUX('J', 0, RSVD)>, /* LCD_R1 */
|
||||
<STM32_PINMUX('J', 1, RSVD)>, /* LCD_R2 */
|
||||
<STM32_PINMUX('J', 2, RSVD)>, /* LCD_R3 */
|
||||
<STM32_PINMUX('J', 3, RSVD)>, /* LCD_R4 */
|
||||
<STM32_PINMUX('J', 4, RSVD)>, /* LCD_R5 */
|
||||
<STM32_PINMUX('J', 5, RSVD)>, /* LCD_R6 */
|
||||
<STM32_PINMUX('J', 6, RSVD)>, /* LCD_R7 */
|
||||
<STM32_PINMUX('J', 7, RSVD)>, /* LCD_G0 */
|
||||
<STM32_PINMUX('J', 8, RSVD)>, /* LCD_G1 */
|
||||
<STM32_PINMUX('J', 9, RSVD)>, /* LCD_G2 */
|
||||
<STM32_PINMUX('J', 10, RSVD)>, /* LCD_G3 */
|
||||
<STM32_PINMUX('J', 11, RSVD)>, /* LCD_G4 */
|
||||
<STM32_PINMUX('K', 0, RSVD)>, /* LCD_G5 */
|
||||
<STM32_PINMUX('K', 1, RSVD)>, /* LCD_G6 */
|
||||
<STM32_PINMUX('K', 2, RSVD)>, /* LCD_G7 */
|
||||
<STM32_PINMUX('J', 12, RSVD)>, /* LCD_B0 */
|
||||
<STM32_PINMUX('J', 13, RSVD)>, /* LCD_B1 */
|
||||
<STM32_PINMUX('J', 14, RSVD)>, /* LCD_B2 */
|
||||
<STM32_PINMUX('J', 15, RSVD)>, /* LCD_B3 */
|
||||
<STM32_PINMUX('K', 3, RSVD)>, /* LCD_B4 */
|
||||
<STM32_PINMUX('K', 4, RSVD)>, /* LCD_B5 */
|
||||
<STM32_PINMUX('K', 5, RSVD)>, /* LCD_B6 */
|
||||
<STM32_PINMUX('K', 6, RSVD)>; /* LCD_B7 */
|
||||
};
|
||||
};
|
||||
|
||||
m4_m_can1_pins_a: m4-m-can1-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('H', 13, RSVD)>, /* CAN1_TX */
|
||||
<STM32_PINMUX('I', 9, RSVD)>; /* CAN1_RX */
|
||||
};
|
||||
};
|
||||
|
||||
m4_pwm1_pins_a: m4-pwm1-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('E', 9, RSVD)>, /* TIM1_CH1 */
|
||||
<STM32_PINMUX('E', 11, RSVD)>, /* TIM1_CH2 */
|
||||
<STM32_PINMUX('E', 14, RSVD)>; /* TIM1_CH4 */
|
||||
};
|
||||
};
|
||||
|
||||
m4_pwm2_pins_a: m4-pwm2-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('A', 3, RSVD)>; /* TIM2_CH4 */
|
||||
};
|
||||
};
|
||||
|
||||
m4_pwm3_pins_a: m4-pwm3-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('C', 7, RSVD)>; /* TIM3_CH2 */
|
||||
};
|
||||
};
|
||||
|
||||
m4_pwm4_pins_a: m4-pwm4-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('D', 14, RSVD)>, /* TIM4_CH3 */
|
||||
<STM32_PINMUX('D', 15, RSVD)>; /* TIM4_CH4 */
|
||||
};
|
||||
};
|
||||
|
||||
m4_pwm4_pins_b: m4-pwm4-1 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('D', 13, RSVD)>; /* TIM4_CH2 */
|
||||
};
|
||||
};
|
||||
|
||||
m4_pwm5_pins_a: m4-pwm5-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('H', 11, RSVD)>; /* TIM5_CH2 */
|
||||
};
|
||||
};
|
||||
|
||||
m4_pwm8_pins_a: m4-pwm8-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('I', 2, RSVD)>; /* TIM8_CH4 */
|
||||
};
|
||||
};
|
||||
|
||||
m4_pwm12_pins_a: m4-pwm12-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('H', 6, RSVD)>; /* TIM12_CH1 */
|
||||
};
|
||||
};
|
||||
|
||||
m4_qspi_bk1_pins_a: m4-qspi-bk1-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('F', 8, RSVD)>, /* QSPI_BK1_IO0 */
|
||||
<STM32_PINMUX('F', 9, RSVD)>, /* QSPI_BK1_IO1 */
|
||||
<STM32_PINMUX('F', 7, RSVD)>, /* QSPI_BK1_IO2 */
|
||||
<STM32_PINMUX('F', 6, RSVD)>, /* QSPI_BK1_IO3 */
|
||||
<STM32_PINMUX('B', 6, RSVD)>; /* QSPI_BK1_NCS */
|
||||
};
|
||||
};
|
||||
|
||||
m4_qspi_bk2_pins_a: m4-qspi-bk2-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('H', 2, RSVD)>, /* QSPI_BK2_IO0 */
|
||||
<STM32_PINMUX('H', 3, RSVD)>, /* QSPI_BK2_IO1 */
|
||||
<STM32_PINMUX('G', 10, RSVD)>, /* QSPI_BK2_IO2 */
|
||||
<STM32_PINMUX('G', 7, RSVD)>, /* QSPI_BK2_IO3 */
|
||||
<STM32_PINMUX('C', 0, RSVD)>; /* QSPI_BK2_NCS */
|
||||
};
|
||||
};
|
||||
|
||||
m4_qspi_clk_pins_a: m4-qspi-clk-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('F', 10, RSVD)>; /* QSPI_CLK */
|
||||
};
|
||||
};
|
||||
|
||||
m4_rtc_out2_rmp_pins_a: m4-rtc-out2-rmp-pins-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('I', 8, RSVD)>; /* RTC_OUT2_RMP */
|
||||
};
|
||||
};
|
||||
|
||||
m4_sai2a_pins_a: m4-sai2a-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('I', 5, RSVD)>, /* SAI2_SCK_A */
|
||||
<STM32_PINMUX('I', 6, RSVD)>, /* SAI2_SD_A */
|
||||
<STM32_PINMUX('I', 7, RSVD)>, /* SAI2_FS_A */
|
||||
<STM32_PINMUX('E', 0, RSVD)>; /* SAI2_MCLK_A */
|
||||
};
|
||||
};
|
||||
|
||||
m4_sai2b_pins_a: m4-sai2b-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('E', 12, RSVD)>, /* SAI2_SCK_B */
|
||||
<STM32_PINMUX('E', 13, RSVD)>, /* SAI2_FS_B */
|
||||
<STM32_PINMUX('E', 14, RSVD)>, /* SAI2_MCLK_B */
|
||||
<STM32_PINMUX('F', 11, RSVD)>; /* SAI2_SD_B */
|
||||
};
|
||||
};
|
||||
|
||||
m4_sai2b_pins_b: m4-sai2b-2 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('F', 11, RSVD)>; /* SAI2_SD_B */
|
||||
};
|
||||
};
|
||||
|
||||
m4_sai4a_pins_a: m4-sai4a-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('B', 5, RSVD)>; /* SAI4_SD_A */
|
||||
};
|
||||
};
|
||||
|
||||
m4_sdmmc1_b4_pins_a: m4-sdmmc1-b4-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('C', 8, RSVD)>, /* SDMMC1_D0 */
|
||||
<STM32_PINMUX('C', 9, RSVD)>, /* SDMMC1_D1 */
|
||||
<STM32_PINMUX('C', 10, RSVD)>, /* SDMMC1_D2 */
|
||||
<STM32_PINMUX('C', 11, RSVD)>, /* SDMMC1_D3 */
|
||||
<STM32_PINMUX('D', 2, RSVD)>, /* SDMMC1_CMD */
|
||||
<STM32_PINMUX('C', 12, RSVD)>; /* SDMMC1_CK */
|
||||
};
|
||||
};
|
||||
|
||||
m4_sdmmc1_dir_pins_a: m4-sdmmc1-dir-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('F', 2, RSVD)>, /* SDMMC1_D0DIR */
|
||||
<STM32_PINMUX('C', 7, RSVD)>, /* SDMMC1_D123DIR */
|
||||
<STM32_PINMUX('B', 9, RSVD)>, /* SDMMC1_CDIR */
|
||||
<STM32_PINMUX('E', 4, RSVD)>; /* SDMMC1_CKIN */
|
||||
};
|
||||
};
|
||||
|
||||
m4_sdmmc2_b4_pins_a: m4-sdmmc2-b4-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('B', 14, RSVD)>, /* SDMMC2_D0 */
|
||||
<STM32_PINMUX('B', 15, RSVD)>, /* SDMMC2_D1 */
|
||||
<STM32_PINMUX('B', 3, RSVD)>, /* SDMMC2_D2 */
|
||||
<STM32_PINMUX('B', 4, RSVD)>, /* SDMMC2_D3 */
|
||||
<STM32_PINMUX('G', 6, RSVD)>, /* SDMMC2_CMD */
|
||||
<STM32_PINMUX('E', 3, RSVD)>; /* SDMMC2_CK */
|
||||
};
|
||||
};
|
||||
|
||||
m4_sdmmc2_b4_pins_b: m4-sdmmc2-b4-1 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('B', 14, RSVD)>, /* SDMMC2_D0 */
|
||||
<STM32_PINMUX('B', 15, RSVD)>, /* SDMMC2_D1 */
|
||||
<STM32_PINMUX('B', 3, RSVD)>, /* SDMMC2_D2 */
|
||||
<STM32_PINMUX('B', 4, RSVD)>, /* SDMMC2_D3 */
|
||||
<STM32_PINMUX('G', 6, RSVD)>, /* SDMMC2_CMD */
|
||||
<STM32_PINMUX('E', 3, RSVD)>; /* SDMMC2_CK */
|
||||
};
|
||||
};
|
||||
|
||||
m4_sdmmc2_d47_pins_a: m4-sdmmc2-d47-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('A', 8, RSVD)>, /* SDMMC2_D4 */
|
||||
<STM32_PINMUX('A', 9, RSVD)>, /* SDMMC2_D5 */
|
||||
<STM32_PINMUX('E', 5, RSVD)>, /* SDMMC2_D6 */
|
||||
<STM32_PINMUX('D', 3, RSVD)>; /* SDMMC2_D7 */
|
||||
};
|
||||
};
|
||||
|
||||
m4_sdmmc3_b4_pins_a: m4-sdmmc3-b4-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('F', 0, RSVD)>, /* SDMMC3_D0 */
|
||||
<STM32_PINMUX('F', 4, RSVD)>, /* SDMMC3_D1 */
|
||||
<STM32_PINMUX('F', 5, RSVD)>, /* SDMMC3_D2 */
|
||||
<STM32_PINMUX('D', 7, RSVD)>, /* SDMMC3_D3 */
|
||||
<STM32_PINMUX('F', 1, RSVD)>, /* SDMMC3_CMD */
|
||||
<STM32_PINMUX('G', 15, RSVD)>; /* SDMMC3_CK */
|
||||
};
|
||||
};
|
||||
|
||||
m4_spdifrx_pins_a: m4-spdifrx-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('G', 12, RSVD)>; /* SPDIF_IN1 */
|
||||
};
|
||||
};
|
||||
|
||||
m4_spi4_pins_a: m4-spi4-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('E', 12, RSVD)>, /* SPI4_SCK */
|
||||
<STM32_PINMUX('E', 14, RSVD)>, /* SPI4_MOSI */
|
||||
<STM32_PINMUX('E', 13, RSVD)>; /* SPI4_MISO */
|
||||
};
|
||||
};
|
||||
|
||||
m4_spi5_pins_a: m4-spi5-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('F', 7, RSVD)>, /* SPI5_SCK */
|
||||
<STM32_PINMUX('F', 9, RSVD)>, /* SPI5_MOSI */
|
||||
<STM32_PINMUX('F', 8, RSVD)>; /* SPI5_MISO */
|
||||
};
|
||||
};
|
||||
|
||||
m4_stusb1600_pins_a: m4-stusb1600-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('I', 11, RSVD)>;
|
||||
};
|
||||
};
|
||||
|
||||
m4_uart4_pins_a: m4-uart4-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('G', 11, RSVD)>, /* UART4_TX */
|
||||
<STM32_PINMUX('B', 2, RSVD)>; /* UART4_RX */
|
||||
};
|
||||
};
|
||||
|
||||
m4_uart7_pins_a: m4-uart7-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('E', 8, RSVD)>, /* USART7_TX */
|
||||
<STM32_PINMUX('E', 7, RSVD)>; /* USART7_RX */
|
||||
};
|
||||
};
|
||||
|
||||
m4_usart2_pins_a: m4-usart2-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('D', 5, RSVD)>, /* USART2_TX */
|
||||
<STM32_PINMUX('D', 4, RSVD)>, /* USART2_RTS */
|
||||
<STM32_PINMUX('D', 6, RSVD)>, /* USART2_RX */
|
||||
<STM32_PINMUX('D', 3, RSVD)>; /* USART2_CTS_NSS */
|
||||
};
|
||||
};
|
||||
|
||||
m4_usart3_pins_a: m4-usart3-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('B', 10, RSVD)>, /* USART3_TX */
|
||||
<STM32_PINMUX('G', 8, RSVD)>, /* USART3_RTS */
|
||||
<STM32_PINMUX('B', 12, RSVD)>, /* USART3_RX */
|
||||
<STM32_PINMUX('I', 10, RSVD)>; /* USART3_CTS_NSS */
|
||||
};
|
||||
};
|
||||
|
||||
m4_usart3_pins_b: m4-usart3-1 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('B', 10, RSVD)>, /* USART3_TX */
|
||||
<STM32_PINMUX('G', 8, RSVD)>, /* USART3_RTS */
|
||||
<STM32_PINMUX('B', 12, RSVD)>, /* USART3_RX */
|
||||
<STM32_PINMUX('B', 13, RSVD)>; /* USART3_CTS_NSS */
|
||||
};
|
||||
};
|
||||
|
||||
m4_usbotg_hs_pins_a: m4-usbotg_hs-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('A', 10, RSVD)>; /* OTG_ID */
|
||||
};
|
||||
};
|
||||
|
||||
m4_usbotg_fs_dp_dm_pins_a: m4-usbotg-fs-dp-dm-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('A', 11, RSVD)>, /* OTG_FS_DM */
|
||||
<STM32_PINMUX('A', 12, RSVD)>; /* OTG_FS_DP */
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&pinctrl_z {
|
||||
m4_i2c4_pins_a: m4-i2c4-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('Z', 4, RSVD)>, /* I2C4_SCL */
|
||||
<STM32_PINMUX('Z', 5, RSVD)>; /* I2C4_SDA */
|
||||
};
|
||||
};
|
||||
|
||||
m4_spi1_pins_a: m4-spi1-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('Z', 0, RSVD)>, /* SPI1_SCK */
|
||||
<STM32_PINMUX('Z', 2, RSVD)>, /* SPI1_MOSI */
|
||||
<STM32_PINMUX('Z', 1, RSVD)>; /* SPI1_MISO */
|
||||
};
|
||||
};
|
||||
};
|
||||
447
arch/arm/dts/stm32mp15-m4-srm.dtsi
Normal file
447
arch/arm/dts/stm32mp15-m4-srm.dtsi
Normal file
@ -0,0 +1,447 @@
|
||||
// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
|
||||
/*
|
||||
* Copyright (C) STMicroelectronics 2019 - All Rights Reserved
|
||||
* Author: Fabien Dessenne <fabien.dessenne@st.com> for STMicroelectronics.
|
||||
*/
|
||||
|
||||
&m4_rproc {
|
||||
m4_system_resources {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
m4_timers2: timer@40000000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x40000000 0x400>;
|
||||
clocks = <&rcc TIM2_K>;
|
||||
clock-names = "int";
|
||||
status = "disabled";
|
||||
};
|
||||
m4_timers3: timer@40001000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x40001000 0x400>;
|
||||
clocks = <&rcc TIM3_K>;
|
||||
clock-names = "int";
|
||||
status = "disabled";
|
||||
};
|
||||
m4_timers4: timer@40002000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x40002000 0x400>;
|
||||
clocks = <&rcc TIM4_K>;
|
||||
clock-names = "int";
|
||||
status = "disabled";
|
||||
};
|
||||
m4_timers5: timer@40003000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x40003000 0x400>;
|
||||
clocks = <&rcc TIM5_K>;
|
||||
clock-names = "int";
|
||||
status = "disabled";
|
||||
};
|
||||
m4_timers6: timer@40004000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x40004000 0x400>;
|
||||
clocks = <&rcc TIM6_K>;
|
||||
clock-names = "int";
|
||||
status = "disabled";
|
||||
};
|
||||
m4_timers7: timer@40005000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x40005000 0x400>;
|
||||
clocks = <&rcc TIM7_K>;
|
||||
clock-names = "int";
|
||||
status = "disabled";
|
||||
};
|
||||
m4_timers12: timer@40006000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x40006000 0x400>;
|
||||
clocks = <&rcc TIM12_K>;
|
||||
clock-names = "int";
|
||||
status = "disabled";
|
||||
};
|
||||
m4_timers13: timer@40007000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x40007000 0x400>;
|
||||
clocks = <&rcc TIM13_K>;
|
||||
clock-names = "int";
|
||||
status = "disabled";
|
||||
};
|
||||
m4_timers14: timer@40008000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x40008000 0x400>;
|
||||
clocks = <&rcc TIM14_K>;
|
||||
clock-names = "int";
|
||||
status = "disabled";
|
||||
};
|
||||
m4_lptimer1: timer@40009000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x40009000 0x400>;
|
||||
clocks = <&rcc LPTIM1_K>;
|
||||
clock-names = "mux";
|
||||
status = "disabled";
|
||||
};
|
||||
m4_spi2: spi@4000b000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x4000b000 0x400>;
|
||||
clocks = <&rcc SPI2_K>;
|
||||
status = "disabled";
|
||||
};
|
||||
m4_i2s2: audio-controller@4000b000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x4000b000 0x400>;
|
||||
status = "disabled";
|
||||
};
|
||||
m4_spi3: spi@4000c000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x4000c000 0x400>;
|
||||
clocks = <&rcc SPI3_K>;
|
||||
status = "disabled";
|
||||
};
|
||||
m4_i2s3: audio-controller@4000c000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x4000c000 0x400>;
|
||||
status = "disabled";
|
||||
};
|
||||
m4_spdifrx: audio-controller@4000d000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x4000d000 0x400>;
|
||||
clocks = <&rcc SPDIF_K>;
|
||||
clock-names = "kclk";
|
||||
status = "disabled";
|
||||
};
|
||||
m4_usart2: serial@4000e000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x4000e000 0x400>;
|
||||
interrupt-parent = <&exti>;
|
||||
interrupts = <27 1>;
|
||||
clocks = <&rcc USART2_K>;
|
||||
status = "disabled";
|
||||
};
|
||||
m4_usart3: serial@4000f000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x4000f000 0x400>;
|
||||
interrupt-parent = <&exti>;
|
||||
interrupts = <28 1>;
|
||||
clocks = <&rcc USART3_K>;
|
||||
status = "disabled";
|
||||
};
|
||||
m4_uart4: serial@40010000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x40010000 0x400>;
|
||||
interrupt-parent = <&exti>;
|
||||
interrupts = <30 1>;
|
||||
clocks = <&rcc UART4_K>;
|
||||
status = "disabled";
|
||||
};
|
||||
m4_uart5: serial@40011000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x40011000 0x400>;
|
||||
interrupt-parent = <&exti>;
|
||||
interrupts = <31 1>;
|
||||
clocks = <&rcc UART5_K>;
|
||||
status = "disabled";
|
||||
};
|
||||
m4_i2c1: i2c@40012000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x40012000 0x400>;
|
||||
interrupt-parent = <&exti>;
|
||||
interrupts = <21 1>;
|
||||
clocks = <&rcc I2C1_K>;
|
||||
status = "disabled";
|
||||
};
|
||||
m4_i2c2: i2c@40013000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x40013000 0x400>;
|
||||
interrupt-parent = <&exti>;
|
||||
interrupts = <22 1>;
|
||||
clocks = <&rcc I2C2_K>;
|
||||
status = "disabled";
|
||||
};
|
||||
m4_i2c3: i2c@40014000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x40014000 0x400>;
|
||||
interrupt-parent = <&exti>;
|
||||
interrupts = <23 1>;
|
||||
clocks = <&rcc I2C3_K>;
|
||||
status = "disabled";
|
||||
};
|
||||
m4_i2c5: i2c@40015000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x40015000 0x400>;
|
||||
interrupt-parent = <&exti>;
|
||||
interrupts = <25 1>;
|
||||
clocks = <&rcc I2C5_K>;
|
||||
status = "disabled";
|
||||
};
|
||||
m4_cec: cec@40016000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x40016000 0x400>;
|
||||
interrupt-parent = <&exti>;
|
||||
interrupts = <69 1>;
|
||||
clocks = <&rcc CEC_K>, <&rcc CEC>;
|
||||
clock-names = "cec", "hdmi-cec";
|
||||
status = "disabled";
|
||||
};
|
||||
m4_dac: dac@40017000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x40017000 0x400>;
|
||||
clocks = <&rcc DAC12>;
|
||||
clock-names = "pclk";
|
||||
status = "disabled";
|
||||
};
|
||||
m4_uart7: serial@40018000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x40018000 0x400>;
|
||||
interrupt-parent = <&exti>;
|
||||
interrupts = <32 1>;
|
||||
clocks = <&rcc UART7_K>;
|
||||
status = "disabled";
|
||||
};
|
||||
m4_uart8: serial@40019000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x40019000 0x400>;
|
||||
interrupt-parent = <&exti>;
|
||||
interrupts = <33 1>;
|
||||
clocks = <&rcc UART8_K>;
|
||||
status = "disabled";
|
||||
};
|
||||
m4_timers1: timer@44000000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x44000000 0x400>;
|
||||
clocks = <&rcc TIM1_K>;
|
||||
clock-names = "int";
|
||||
status = "disabled";
|
||||
};
|
||||
m4_timers8: timer@44001000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x44001000 0x400>;
|
||||
clocks = <&rcc TIM8_K>;
|
||||
clock-names = "int";
|
||||
status = "disabled";
|
||||
};
|
||||
m4_usart6: serial@44003000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x44003000 0x400>;
|
||||
interrupt-parent = <&exti>;
|
||||
interrupts = <29 1>;
|
||||
clocks = <&rcc USART6_K>;
|
||||
status = "disabled";
|
||||
};
|
||||
m4_spi1: spi@44004000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x44004000 0x400>;
|
||||
clocks = <&rcc SPI1_K>;
|
||||
status = "disabled";
|
||||
};
|
||||
m4_i2s1: audio-controller@44004000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x44004000 0x400>;
|
||||
status = "disabled";
|
||||
};
|
||||
m4_spi4: spi@44005000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x44005000 0x400>;
|
||||
clocks = <&rcc SPI4_K>;
|
||||
status = "disabled";
|
||||
};
|
||||
m4_timers15: timer@44006000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x44006000 0x400>;
|
||||
clocks = <&rcc TIM15_K>;
|
||||
clock-names = "int";
|
||||
status = "disabled";
|
||||
};
|
||||
m4_timers16: timer@44007000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x44007000 0x400>;
|
||||
clocks = <&rcc TIM16_K>;
|
||||
clock-names = "int";
|
||||
status = "disabled";
|
||||
};
|
||||
m4_timers17: timer@44008000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x44008000 0x400>;
|
||||
clocks = <&rcc TIM17_K>;
|
||||
clock-names = "int";
|
||||
status = "disabled";
|
||||
};
|
||||
m4_spi5: spi@44009000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x44009000 0x400>;
|
||||
clocks = <&rcc SPI5_K>;
|
||||
status = "disabled";
|
||||
};
|
||||
m4_sai1: sai@4400a000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x4400a000 0x4>;
|
||||
clocks = <&rcc SAI1_K>;
|
||||
clock-names = "sai_ck";
|
||||
status = "disabled";
|
||||
};
|
||||
m4_sai2: sai@4400b000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x4400b000 0x4>;
|
||||
clocks = <&rcc SAI2_K>;
|
||||
clock-names = "sai_ck";
|
||||
status = "disabled";
|
||||
};
|
||||
m4_sai3: sai@4400c000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x4400c000 0x4>;
|
||||
clocks = <&rcc SAI3_K>;
|
||||
clock-names = "sai_ck";
|
||||
status = "disabled";
|
||||
};
|
||||
m4_dfsdm: dfsdm@4400d000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x4400d000 0x800>;
|
||||
clocks = <&rcc DFSDM_K>, <&rcc ADFSDM_K>;
|
||||
clock-names = "dfsdm", "audio";
|
||||
status = "disabled";
|
||||
};
|
||||
m4_m_can1: can@4400e000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x4400e000 0x400>, <0x44011000 0x2800>;
|
||||
clocks = <&scmi_clk CK_SCMI_HSE>, <&rcc FDCAN_K>;
|
||||
clock-names = "hclk", "cclk";
|
||||
status = "disabled";
|
||||
};
|
||||
m4_m_can2: can@4400f000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x4400f000 0x400>, <0x44011000 0x2800>;
|
||||
clocks = <&scmi_clk CK_SCMI_HSE>, <&rcc FDCAN_K>;
|
||||
clock-names = "hclk", "cclk";
|
||||
status = "disabled";
|
||||
};
|
||||
m4_dma1: dma@48000000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x48000000 0x400>;
|
||||
clocks = <&rcc DMA1>;
|
||||
status = "disabled";
|
||||
};
|
||||
m4_dma2: dma@48001000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x48001000 0x400>;
|
||||
clocks = <&rcc DMA2>;
|
||||
status = "disabled";
|
||||
};
|
||||
m4_dmamux1: dma-router@48002000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x48002000 0x1c>;
|
||||
clocks = <&rcc DMAMUX>;
|
||||
status = "disabled";
|
||||
};
|
||||
m4_adc: adc@48003000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x48003000 0x400>;
|
||||
clocks = <&rcc ADC12>, <&rcc ADC12_K>;
|
||||
clock-names = "bus", "adc";
|
||||
status = "disabled";
|
||||
};
|
||||
m4_sdmmc3: sdmmc@48004000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x48004000 0x400>, <0x48005000 0x400>;
|
||||
clocks = <&rcc SDMMC3_K>;
|
||||
status = "disabled";
|
||||
};
|
||||
m4_usbotg_hs: usb-otg@49000000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x49000000 0x10000>;
|
||||
clocks = <&rcc USBO_K>;
|
||||
clock-names = "otg";
|
||||
status = "disabled";
|
||||
};
|
||||
m4_hash2: hash@4c002000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x4c002000 0x400>;
|
||||
clocks = <&rcc HASH2>;
|
||||
status = "disabled";
|
||||
};
|
||||
m4_rng2: rng@4c003000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x4c003000 0x400>;
|
||||
clocks = <&rcc RNG2_K>;
|
||||
status = "disabled";
|
||||
};
|
||||
m4_crc2: crc@4c004000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x4c004000 0x400>;
|
||||
clocks = <&rcc CRC2>;
|
||||
status = "disabled";
|
||||
};
|
||||
m4_cryp2: cryp@4c005000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x4c005000 0x400>;
|
||||
clocks = <&rcc CRYP2>;
|
||||
status = "disabled";
|
||||
};
|
||||
m4_dcmi: dcmi@4c006000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x4c006000 0x400>;
|
||||
clocks = <&rcc DCMI>;
|
||||
clock-names = "mclk";
|
||||
status = "disabled";
|
||||
};
|
||||
m4_lptimer2: timer@50021000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x50021000 0x400>;
|
||||
clocks = <&rcc LPTIM2_K>;
|
||||
clock-names = "mux";
|
||||
status = "disabled";
|
||||
};
|
||||
m4_lptimer3: timer@50022000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x50022000 0x400>;
|
||||
clocks = <&rcc LPTIM3_K>;
|
||||
clock-names = "mux";
|
||||
status = "disabled";
|
||||
};
|
||||
m4_lptimer4: timer@50023000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x50023000 0x400>;
|
||||
clocks = <&rcc LPTIM4_K>;
|
||||
clock-names = "mux";
|
||||
status = "disabled";
|
||||
};
|
||||
m4_lptimer5: timer@50024000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x50024000 0x400>;
|
||||
clocks = <&rcc LPTIM5_K>;
|
||||
clock-names = "mux";
|
||||
status = "disabled";
|
||||
};
|
||||
m4_sai4: sai@50027000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x50027000 0x4>;
|
||||
clocks = <&rcc SAI4_K>;
|
||||
clock-names = "sai_ck";
|
||||
status = "disabled";
|
||||
};
|
||||
m4_fmc: memory-controller@58002000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x5800200 0x1000>;
|
||||
clocks = <&rcc FMC_K>;
|
||||
status = "disabled";
|
||||
};
|
||||
m4_qspi: qspi@58003000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x58003000 0x1000>, <0x70000000 0x10000000>;
|
||||
clocks = <&rcc QSPI_K>;
|
||||
status = "disabled";
|
||||
};
|
||||
m4_ethernet0: ethernet@5800a000 {
|
||||
compatible = "rproc-srm-dev";
|
||||
reg = <0x5800a000 0x2000>;
|
||||
clock-names = "stmmaceth",
|
||||
"mac-clk-tx",
|
||||
"mac-clk-rx",
|
||||
"ethstp",
|
||||
"syscfg-clk";
|
||||
clocks = <&rcc ETHMAC>,
|
||||
<&rcc ETHTX>,
|
||||
<&rcc ETHRX>,
|
||||
<&rcc ETHSTP>,
|
||||
<&rcc SYSCFG>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
};
|
||||
152
arch/arm/dts/stm32mp15-no-scmi.dtsi
Normal file
152
arch/arm/dts/stm32mp15-no-scmi.dtsi
Normal file
@ -0,0 +1,152 @@
|
||||
// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
|
||||
/*
|
||||
* Copyright (C) STMicroelectronics 2020 - All Rights Reserved
|
||||
* Author: Gabriel Fernandez <gabriel.fernandez@st.com> for STMicroelectronics.
|
||||
*/
|
||||
|
||||
/ {
|
||||
|
||||
clocks {
|
||||
clk_hse: clk-hse {
|
||||
#clock-cells = <0>;
|
||||
compatible = "fixed-clock";
|
||||
clock-frequency = <24000000>;
|
||||
};
|
||||
|
||||
clk_hsi: clk-hsi {
|
||||
#clock-cells = <0>;
|
||||
compatible = "fixed-clock";
|
||||
clock-frequency = <64000000>;
|
||||
};
|
||||
|
||||
clk_lse: clk-lse {
|
||||
#clock-cells = <0>;
|
||||
compatible = "fixed-clock";
|
||||
clock-frequency = <32768>;
|
||||
};
|
||||
|
||||
clk_lsi: clk-lsi {
|
||||
#clock-cells = <0>;
|
||||
compatible = "fixed-clock";
|
||||
clock-frequency = <32000>;
|
||||
};
|
||||
|
||||
clk_csi: clk-csi {
|
||||
#clock-cells = <0>;
|
||||
compatible = "fixed-clock";
|
||||
clock-frequency = <4000000>;
|
||||
};
|
||||
};
|
||||
|
||||
cpus {
|
||||
cpu0: cpu@0 {
|
||||
clocks = <&rcc CK_MPU>;
|
||||
};
|
||||
|
||||
cpu1: cpu@1 {
|
||||
clocks = <&rcc CK_MPU>;
|
||||
};
|
||||
};
|
||||
|
||||
reboot {
|
||||
compatible = "syscon-reboot";
|
||||
regmap = <&rcc>;
|
||||
offset = <0x404>;
|
||||
mask = <0x1>;
|
||||
};
|
||||
|
||||
soc {
|
||||
m_can1: can@4400e000 {
|
||||
clocks = <&rcc CK_HSE>, <&rcc FDCAN_K>;
|
||||
};
|
||||
|
||||
m_can2: can@4400f000 {
|
||||
clocks = <&rcc CK_HSE>, <&rcc FDCAN_K>;
|
||||
};
|
||||
|
||||
cryp1: cryp@54001000 {
|
||||
clocks = <&rcc CRYP1>;
|
||||
resets = <&rcc CRYP1_R>;
|
||||
};
|
||||
|
||||
dsi: dsi@5a000000 {
|
||||
clocks = <&rcc DSI_K>, <&clk_hse>, <&rcc DSI_PX>;
|
||||
};
|
||||
};
|
||||
|
||||
ahb {
|
||||
m4_rproc: m4@10000000 {
|
||||
resets = <&rcc MCU_R>, <&rcc MCU_HOLD_BOOT_R>;
|
||||
|
||||
m4_system_resources {
|
||||
m4_m_can1: can@4400e000 {
|
||||
clocks = <&rcc CK_HSE>, <&rcc FDCAN_K>;
|
||||
};
|
||||
|
||||
m4_m_can2: can@4400f000 {
|
||||
clocks = <&rcc CK_HSE>, <&rcc FDCAN_K>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
firmware {
|
||||
/delete-node/ scmi;
|
||||
};
|
||||
/delete-node/ sram@2ffff000;
|
||||
};
|
||||
|
||||
&bsec {
|
||||
clocks = <&rcc BSEC>;
|
||||
};
|
||||
|
||||
&gpioz {
|
||||
clocks = <&rcc GPIOZ>;
|
||||
};
|
||||
|
||||
&hash1 {
|
||||
clocks = <&rcc HASH1>;
|
||||
resets = <&rcc HASH1_R>;
|
||||
};
|
||||
|
||||
&i2c4 {
|
||||
clocks = <&rcc I2C4_K>;
|
||||
resets = <&rcc I2C4_R>;
|
||||
};
|
||||
|
||||
&i2c6 {
|
||||
clocks = <&rcc I2C6_K>;
|
||||
resets = <&rcc I2C6_R>;
|
||||
};
|
||||
|
||||
&iwdg2 {
|
||||
clocks = <&rcc IWDG2>, <&rcc CK_LSI>;
|
||||
};
|
||||
|
||||
&mdma1 {
|
||||
clocks = <&rcc MDMA>;
|
||||
resets = <&rcc MDMA_R>;
|
||||
};
|
||||
|
||||
&rcc {
|
||||
compatible = "st,stm32mp1-rcc", "syscon";
|
||||
clocks = <&clk_hse>, <&clk_hsi>, <&clk_csi>, <&clk_lse>, <&clk_lsi>;
|
||||
};
|
||||
|
||||
&rng1 {
|
||||
clocks = <&rcc RNG1_K>;
|
||||
resets = <&rcc RNG1_R>;
|
||||
};
|
||||
|
||||
&rtc {
|
||||
clocks = <&rcc RTCAPB>, <&rcc RTC>;
|
||||
};
|
||||
|
||||
&spi6 {
|
||||
clocks = <&rcc SPI6_K>;
|
||||
resets = <&rcc SPI6_R>;
|
||||
};
|
||||
|
||||
&usart1 {
|
||||
clocks = <&rcc USART1_K>;
|
||||
};
|
||||
@ -151,6 +151,45 @@
|
||||
};
|
||||
};
|
||||
|
||||
dfsdm_clkout_pins_a: dfsdm-clkout-pins-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('B', 13, AF3)>; /* DFSDM_CKOUT */
|
||||
bias-disable;
|
||||
drive-push-pull;
|
||||
slew-rate = <0>;
|
||||
};
|
||||
};
|
||||
|
||||
dfsdm_clkout_sleep_pins_a: dfsdm-clkout-sleep-pins-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('B', 13, ANALOG)>; /* DFSDM_CKOUT */
|
||||
};
|
||||
};
|
||||
|
||||
dfsdm_data1_pins_a: dfsdm-data1-pins-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('C', 3, AF3)>; /* DFSDM_DATA1 */
|
||||
};
|
||||
};
|
||||
|
||||
dfsdm_data1_sleep_pins_a: dfsdm-data1-sleep-pins-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('C', 3, ANALOG)>; /* DFSDM_DATA1 */
|
||||
};
|
||||
};
|
||||
|
||||
dfsdm_data3_pins_a: dfsdm-data3-pins-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('F', 13, AF6)>; /* DFSDM_DATA3 */
|
||||
};
|
||||
};
|
||||
|
||||
dfsdm_data3_sleep_pins_a: dfsdm-data3-sleep-pins-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('F', 13, ANALOG)>; /* DFSDM_DATA3 */
|
||||
};
|
||||
};
|
||||
|
||||
ethernet0_rgmii_pins_a: rgmii-0 {
|
||||
pins1 {
|
||||
pinmux = <STM32_PINMUX('G', 5, AF11)>, /* ETH_RGMII_CLK125 */
|
||||
@ -437,6 +476,51 @@
|
||||
};
|
||||
};
|
||||
|
||||
hdp0_pins_a: hdp0-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('I', 12, AF2)>; /* HDP0 */
|
||||
bias-disable;
|
||||
drive-push-pull;
|
||||
slew-rate = <2>;
|
||||
};
|
||||
};
|
||||
|
||||
hdp0_pins_sleep_a: hdp0-sleep-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('I', 12, ANALOG)>; /* HDP0 */
|
||||
};
|
||||
};
|
||||
|
||||
hdp6_pins_a: hdp6-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('K', 5, AF2)>; /* HDP6 */
|
||||
bias-disable;
|
||||
drive-push-pull;
|
||||
slew-rate = <2>;
|
||||
};
|
||||
};
|
||||
|
||||
hdp6_pins_sleep_a: hdp6-sleep-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('K', 5, ANALOG)>; /* HDP6 */
|
||||
};
|
||||
};
|
||||
|
||||
hdp7_pins_a: hdp7-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('K', 6, AF2)>; /* HDP7 */
|
||||
bias-disable;
|
||||
drive-push-pull;
|
||||
slew-rate = <2>;
|
||||
};
|
||||
};
|
||||
|
||||
hdp7_pins_sleep_a: hdp7-sleep-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('K', 6, ANALOG)>; /* HDP7 */
|
||||
};
|
||||
};
|
||||
|
||||
i2c1_pins_a: i2c1-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('D', 12, AF5)>, /* I2C1_SCL */
|
||||
@ -1139,6 +1223,12 @@
|
||||
};
|
||||
};
|
||||
|
||||
rtc_out2_rmp_pins_a: rtc-out2-rmp-pins-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('I', 8, ANALOG)>; /* RTC_OUT2_RMP */
|
||||
};
|
||||
};
|
||||
|
||||
sai2a_pins_a: sai2a-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('I', 5, AF10)>, /* SAI2_SCK_A */
|
||||
@ -1179,7 +1269,7 @@
|
||||
};
|
||||
};
|
||||
|
||||
sai2a_pins_c: sai2a-4 {
|
||||
sai2a_pins_c: sai2a-2 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('D', 13, AF10)>, /* SAI2_SCK_A */
|
||||
<STM32_PINMUX('D', 11, AF10)>, /* SAI2_SD_A */
|
||||
@ -1190,7 +1280,7 @@
|
||||
};
|
||||
};
|
||||
|
||||
sai2a_sleep_pins_c: sai2a-5 {
|
||||
sai2a_sleep_pins_c: sai2a-2 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('D', 13, ANALOG)>, /* SAI2_SCK_A */
|
||||
<STM32_PINMUX('D', 11, ANALOG)>, /* SAI2_SD_A */
|
||||
@ -1235,14 +1325,14 @@
|
||||
};
|
||||
};
|
||||
|
||||
sai2b_pins_c: sai2a-4 {
|
||||
sai2b_pins_c: sai2b-2 {
|
||||
pins1 {
|
||||
pinmux = <STM32_PINMUX('F', 11, AF10)>; /* SAI2_SD_B */
|
||||
bias-disable;
|
||||
};
|
||||
};
|
||||
|
||||
sai2b_sleep_pins_c: sai2a-sleep-5 {
|
||||
sai2b_sleep_pins_c: sai2b-sleep-2 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('F', 11, ANALOG)>; /* SAI2_SD_B */
|
||||
};
|
||||
@ -1716,9 +1806,55 @@
|
||||
};
|
||||
};
|
||||
|
||||
spi4_pins_b: spi4-1 {
|
||||
pins1 {
|
||||
pinmux = <STM32_PINMUX('E', 12, AF5)>, /* SPI4_SCK */
|
||||
<STM32_PINMUX('E', 14, AF5)>; /* SPI4_MOSI */
|
||||
bias-disable;
|
||||
drive-push-pull;
|
||||
slew-rate = <1>;
|
||||
};
|
||||
|
||||
pins2 {
|
||||
pinmux = <STM32_PINMUX('E', 13, AF5)>; /* SPI4_MISO */
|
||||
bias-disable;
|
||||
};
|
||||
};
|
||||
|
||||
spi4_sleep_pins_b: spi4-sleep-1 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('E', 12, ANALOG)>, /* SPI4_SCK */
|
||||
<STM32_PINMUX('E', 13, ANALOG)>, /* SPI4_MISO */
|
||||
<STM32_PINMUX('E', 14, ANALOG)>; /* SPI4_MOSI */
|
||||
};
|
||||
};
|
||||
|
||||
spi5_pins_a: spi5-0 {
|
||||
pins1 {
|
||||
pinmux = <STM32_PINMUX('F', 7, AF5)>, /* SPI5_SCK */
|
||||
<STM32_PINMUX('F', 9, AF5)>; /* SPI5_MOSI */
|
||||
bias-disable;
|
||||
drive-push-pull;
|
||||
slew-rate = <1>;
|
||||
};
|
||||
|
||||
pins2 {
|
||||
pinmux = <STM32_PINMUX('F', 8, AF5)>; /* SPI5_MISO */
|
||||
bias-disable;
|
||||
};
|
||||
};
|
||||
|
||||
spi5_sleep_pins_a: spi5-sleep-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('F', 7, ANALOG)>, /* SPI5_SCK */
|
||||
<STM32_PINMUX('F', 8, ANALOG)>, /* SPI5_MISO */
|
||||
<STM32_PINMUX('F', 9, ANALOG)>; /* SPI5_MOSI */
|
||||
};
|
||||
};
|
||||
|
||||
stusb1600_pins_a: stusb1600-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('I', 11, ANALOG)>;
|
||||
pinmux = <STM32_PINMUX('I', 11, GPIO)>;
|
||||
bias-pull-up;
|
||||
};
|
||||
};
|
||||
@ -1737,20 +1873,20 @@
|
||||
};
|
||||
|
||||
uart4_idle_pins_a: uart4-idle-0 {
|
||||
pins1 {
|
||||
pinmux = <STM32_PINMUX('G', 11, ANALOG)>; /* UART4_TX */
|
||||
};
|
||||
pins2 {
|
||||
pinmux = <STM32_PINMUX('B', 2, AF8)>; /* UART4_RX */
|
||||
bias-disable;
|
||||
};
|
||||
pins1 {
|
||||
pinmux = <STM32_PINMUX('G', 11, ANALOG)>; /* UART4_TX */
|
||||
};
|
||||
pins2 {
|
||||
pinmux = <STM32_PINMUX('B', 2, AF8)>; /* UART4_RX */
|
||||
bias-disable;
|
||||
};
|
||||
};
|
||||
|
||||
uart4_sleep_pins_a: uart4-sleep-0 {
|
||||
pins {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('G', 11, ANALOG)>, /* UART4_TX */
|
||||
<STM32_PINMUX('B', 2, ANALOG)>; /* UART4_RX */
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
uart4_pins_b: uart4-1 {
|
||||
@ -1816,7 +1952,7 @@
|
||||
};
|
||||
pins2 {
|
||||
pinmux = <STM32_PINMUX('E', 7, AF7)>; /* UART7_RX */
|
||||
bias-disable;
|
||||
bias-pull-up;
|
||||
};
|
||||
};
|
||||
|
||||
@ -1826,7 +1962,7 @@
|
||||
};
|
||||
pins2 {
|
||||
pinmux = <STM32_PINMUX('E', 7, AF7)>; /* UART7_RX */
|
||||
bias-disable;
|
||||
bias-pull-up;
|
||||
};
|
||||
};
|
||||
|
||||
@ -1912,7 +2048,7 @@
|
||||
<STM32_PINMUX('D', 4, AF7)>; /* USART2_RTS */
|
||||
bias-disable;
|
||||
drive-push-pull;
|
||||
slew-rate = <3>;
|
||||
slew-rate = <0>;
|
||||
};
|
||||
pins2 {
|
||||
pinmux = <STM32_PINMUX('D', 6, AF7)>, /* USART2_RX */
|
||||
@ -1930,7 +2066,7 @@
|
||||
pinmux = <STM32_PINMUX('D', 4, AF7)>; /* USART2_RTS */
|
||||
bias-disable;
|
||||
drive-push-pull;
|
||||
slew-rate = <3>;
|
||||
slew-rate = <0>;
|
||||
};
|
||||
pins3 {
|
||||
pinmux = <STM32_PINMUX('D', 6, AF7)>; /* USART2_RX */
|
||||
@ -2012,7 +2148,7 @@
|
||||
pins2 {
|
||||
pinmux = <STM32_PINMUX('B', 12, AF8)>, /* USART3_RX */
|
||||
<STM32_PINMUX('B', 13, AF7)>; /* USART3_CTS_NSS */
|
||||
bias-disable;
|
||||
bias-pull-up;
|
||||
};
|
||||
};
|
||||
|
||||
@ -2029,7 +2165,7 @@
|
||||
};
|
||||
pins3 {
|
||||
pinmux = <STM32_PINMUX('B', 12, AF8)>; /* USART3_RX */
|
||||
bias-disable;
|
||||
bias-pull-up;
|
||||
};
|
||||
};
|
||||
|
||||
@ -2120,4 +2256,12 @@
|
||||
bias-disable;
|
||||
};
|
||||
};
|
||||
|
||||
spi1_sleep_pins_a: spi1-sleep-0 {
|
||||
pins {
|
||||
pinmux = <STM32_PINMUX('Z', 0, ANALOG)>, /* SPI1_SCK */
|
||||
<STM32_PINMUX('Z', 1, ANALOG)>, /* SPI1_MISO */
|
||||
<STM32_PINMUX('Z', 2, ANALOG)>; /* SPI1_MOSI */
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@ -21,8 +21,14 @@
|
||||
pinctrl1 = &pinctrl_z;
|
||||
};
|
||||
|
||||
clocks {
|
||||
u-boot,dm-pre-reloc;
|
||||
binman: binman {
|
||||
multiple-images;
|
||||
};
|
||||
|
||||
firmware {
|
||||
optee {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
};
|
||||
|
||||
/* need PSCI for sysreset during board_f */
|
||||
@ -30,14 +36,6 @@
|
||||
u-boot,dm-pre-proper;
|
||||
};
|
||||
|
||||
reboot {
|
||||
u-boot,dm-pre-reloc;
|
||||
compatible = "syscon-reboot";
|
||||
regmap = <&rcc>;
|
||||
offset = <0x404>;
|
||||
mask = <0x1>;
|
||||
};
|
||||
|
||||
soc {
|
||||
u-boot,dm-pre-reloc;
|
||||
|
||||
@ -49,20 +47,6 @@
|
||||
reg = <0x5A003000 0x550
|
||||
0x5A004000 0x234>;
|
||||
|
||||
clocks = <&rcc AXIDCG>,
|
||||
<&rcc DDRC1>,
|
||||
<&rcc DDRC2>,
|
||||
<&rcc DDRPHYC>,
|
||||
<&rcc DDRCAPB>,
|
||||
<&rcc DDRPHYCAPB>;
|
||||
|
||||
clock-names = "axidcg",
|
||||
"ddrc1",
|
||||
"ddrc2",
|
||||
"ddrphyc",
|
||||
"ddrcapb",
|
||||
"ddrphycapb";
|
||||
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
@ -72,36 +56,6 @@
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&clk_csi {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&clk_hsi {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&clk_hse {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&clk_lsi {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&clk_lse {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&cpu0_opp_table {
|
||||
u-boot,dm-spl;
|
||||
opp-650000000 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
opp-800000000 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
};
|
||||
|
||||
&gpioa {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
@ -159,13 +113,6 @@
|
||||
u-boot,dm-pre-proper;
|
||||
};
|
||||
|
||||
/* temp = waiting kernel update */
|
||||
&m4_rproc {
|
||||
resets = <&rcc MCU_R>,
|
||||
<&rcc MCU_HOLD_BOOT_R>;
|
||||
reset-names = "mcu_rst", "hold_boot";
|
||||
};
|
||||
|
||||
&pinctrl {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
@ -174,30 +121,34 @@
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&pwr_regulators {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&rcc {
|
||||
u-boot,dm-pre-reloc;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
};
|
||||
|
||||
&sdmmc1 {
|
||||
compatible = "st,stm32-sdmmc2", "arm,pl18x", "arm,primecell";
|
||||
#ifdef CONFIG_TFABOOT
|
||||
&scmi {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&sdmmc2 {
|
||||
compatible = "st,stm32-sdmmc2", "arm,pl18x", "arm,primecell";
|
||||
&scmi_clk {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&sdmmc3 {
|
||||
compatible = "st,stm32-sdmmc2", "arm,pl18x", "arm,primecell";
|
||||
&scmi_reset {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&scmi_shm {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&scmi_sram {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
#endif
|
||||
|
||||
&usart1 {
|
||||
resets = <&rcc USART1_R>;
|
||||
resets = <&scmi_reset RST_SCMI_USART1>;
|
||||
};
|
||||
|
||||
&usart2 {
|
||||
@ -228,3 +179,89 @@
|
||||
resets = <&rcc UART8_R>;
|
||||
};
|
||||
|
||||
#if defined(CONFIG_STM32MP15x_STM32IMAGE)
|
||||
&binman {
|
||||
u-boot-stm32 {
|
||||
filename = "u-boot.stm32";
|
||||
mkimage {
|
||||
args = "-T stm32image -a 0xC0100000 -e 0xC0100000";
|
||||
u-boot {
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_SPL)
|
||||
&binman {
|
||||
spl-stm32 {
|
||||
filename = "u-boot-spl.stm32";
|
||||
mkimage {
|
||||
args = "-T stm32image -a 0x2FFC2500 -e 0x2FFC2500";
|
||||
u-boot-spl {
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
#endif
|
||||
|
||||
/* NO MORE USE SCMI SUPPORT for BASIC boot chain */
|
||||
#ifndef CONFIG_TFABOOT
|
||||
|
||||
#include "stm32mp15-no-scmi.dtsi"
|
||||
|
||||
/ {
|
||||
clocks {
|
||||
u-boot,dm-pre-reloc;
|
||||
|
||||
clk_hse: clk-hse {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
clk_hsi: clk-hsi {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
clk_lse: clk-lse {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
clk_lsi: clk-lsi {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
clk_csi: clk-csi {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
};
|
||||
|
||||
reboot {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
};
|
||||
|
||||
&cpu0_opp_table {
|
||||
u-boot,dm-spl;
|
||||
opp-650000000 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
opp-800000000 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
};
|
||||
|
||||
/* only for vdd-supply in sysconf_init() */
|
||||
&pwr_regulators {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&rcc {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
};
|
||||
|
||||
&usart1 {
|
||||
resets = <&rcc USART1_R>;
|
||||
};
|
||||
|
||||
#endif /* CONFIG_TFABOOT */
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -10,9 +10,11 @@
|
||||
cpus {
|
||||
cpu1: cpu@1 {
|
||||
compatible = "arm,cortex-a7";
|
||||
clock-frequency = <650000000>;
|
||||
device_type = "cpu";
|
||||
reg = <1>;
|
||||
clocks = <&scmi_clk CK_SCMI_MPU>;
|
||||
clock-names = "cpu";
|
||||
operating-points-v2 = <&cpu0_opp_table>;
|
||||
};
|
||||
};
|
||||
|
||||
@ -22,6 +24,13 @@
|
||||
interrupt-affinity = <&cpu0>, <&cpu1>;
|
||||
};
|
||||
|
||||
timer {
|
||||
interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>,
|
||||
<GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>,
|
||||
<GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>,
|
||||
<GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>;
|
||||
};
|
||||
|
||||
soc {
|
||||
m_can1: can@4400e000 {
|
||||
compatible = "bosch,m_can";
|
||||
@ -30,7 +39,7 @@
|
||||
interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-names = "int0", "int1";
|
||||
clocks = <&rcc CK_HSE>, <&rcc FDCAN_K>;
|
||||
clocks = <&scmi_clk CK_SCMI_HSE>, <&rcc FDCAN_K>;
|
||||
clock-names = "hclk", "cclk";
|
||||
bosch,mram-cfg = <0x0 0 0 32 0 0 2 2>;
|
||||
status = "disabled";
|
||||
@ -43,7 +52,7 @@
|
||||
interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 22 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-names = "int0", "int1";
|
||||
clocks = <&rcc CK_HSE>, <&rcc FDCAN_K>;
|
||||
clocks = <&scmi_clk CK_SCMI_HSE>, <&rcc FDCAN_K>;
|
||||
clock-names = "hclk", "cclk";
|
||||
bosch,mram-cfg = <0x1400 0 0 32 0 0 2 2>;
|
||||
status = "disabled";
|
||||
|
||||
@ -20,7 +20,8 @@
|
||||
dsi: dsi@5a000000 {
|
||||
compatible = "st,stm32-dsi";
|
||||
reg = <0x5a000000 0x800>;
|
||||
clocks = <&rcc DSI_K>, <&clk_hse>, <&rcc DSI_PX>;
|
||||
phy-dsi-supply = <®18>;
|
||||
clocks = <&rcc DSI_K>, <&scmi_clk CK_SCMI_HSE>, <&rcc DSI_PX>;
|
||||
clock-names = "pclk", "ref", "px_clk";
|
||||
resets = <&rcc DSI_R>;
|
||||
reset-names = "apb";
|
||||
|
||||
@ -15,7 +15,7 @@
|
||||
config {
|
||||
u-boot,boot-led = "heartbeat";
|
||||
u-boot,error-led = "error";
|
||||
u-boot,mmc-env-partition = "fip";
|
||||
u-boot,mmc-env-partition = "u-boot-env";
|
||||
st,adc_usb_pd = <&adc1 18>, <&adc1 19>;
|
||||
st,fastboot-gpios = <&gpioa 13 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
|
||||
st,stm32prog-gpios = <&gpioa 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
|
||||
@ -27,28 +27,16 @@
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_STM32MP15x_STM32IMAGE
|
||||
/* only needed for boot with TF-A, witout FIP support */
|
||||
firmware {
|
||||
optee {
|
||||
compatible = "linaro,optee-tz";
|
||||
method = "smc";
|
||||
};
|
||||
};
|
||||
|
||||
reserved-memory {
|
||||
u-boot,dm-spl;
|
||||
|
||||
optee@de000000 {
|
||||
reg = <0xde000000 0x02000000>;
|
||||
no-map;
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
};
|
||||
#endif
|
||||
|
||||
led {
|
||||
red {
|
||||
led-red {
|
||||
label = "error";
|
||||
gpios = <&gpioa 13 GPIO_ACTIVE_LOW>;
|
||||
default-state = "off";
|
||||
@ -61,6 +49,7 @@
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
#ifndef CONFIG_TFABOOT
|
||||
&clk_hse {
|
||||
st,digbypass;
|
||||
};
|
||||
@ -76,6 +65,10 @@
|
||||
};
|
||||
};
|
||||
|
||||
&i2s2 {
|
||||
clocks = <&rcc SPI2>, <&rcc SPI2_K>, <&rcc PLL3_Q>, <&rcc PLL3_R>;
|
||||
};
|
||||
|
||||
&pmic {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
@ -172,6 +165,10 @@
|
||||
};
|
||||
};
|
||||
|
||||
&sai2 {
|
||||
clocks = <&rcc SAI2>, <&rcc PLL3_Q>, <&rcc PLL3_R>;
|
||||
};
|
||||
|
||||
&sdmmc1 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
@ -185,6 +182,7 @@
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
};
|
||||
#endif
|
||||
|
||||
&uart4 {
|
||||
u-boot,dm-pre-reloc;
|
||||
@ -202,6 +200,3 @@
|
||||
};
|
||||
};
|
||||
|
||||
&usbotg_hs {
|
||||
u-boot,force-b-session-valid;
|
||||
};
|
||||
|
||||
@ -7,6 +7,7 @@
|
||||
/dts-v1/;
|
||||
|
||||
#include "stm32mp157.dtsi"
|
||||
#include "stm32mp15xa.dtsi"
|
||||
#include "stm32mp15-pinctrl.dtsi"
|
||||
#include "stm32mp15xxac-pinctrl.dtsi"
|
||||
#include "stm32mp15xx-dkx.dtsi"
|
||||
@ -15,13 +16,6 @@
|
||||
model = "STMicroelectronics STM32MP157A-DK1 Discovery Board";
|
||||
compatible = "st,stm32mp157a-dk1", "st,stm32mp157";
|
||||
|
||||
aliases {
|
||||
ethernet0 = ðernet0;
|
||||
serial0 = &uart4;
|
||||
serial1 = &usart3;
|
||||
serial2 = &uart7;
|
||||
};
|
||||
|
||||
chosen {
|
||||
stdout-path = "serial0:115200n8";
|
||||
};
|
||||
|
||||
211
arch/arm/dts/stm32mp157a-ed1-u-boot.dtsi
Normal file
211
arch/arm/dts/stm32mp157a-ed1-u-boot.dtsi
Normal file
@ -0,0 +1,211 @@
|
||||
// SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
|
||||
/*
|
||||
* Copyright : STMicroelectronics 2018
|
||||
*/
|
||||
|
||||
#include <dt-bindings/clock/stm32mp1-clksrc.h>
|
||||
#include "stm32mp15-u-boot.dtsi"
|
||||
#include "stm32mp15-ddr3-2x4Gb-1066-binG.dtsi"
|
||||
|
||||
/ {
|
||||
aliases {
|
||||
i2c3 = &i2c4;
|
||||
};
|
||||
|
||||
config {
|
||||
u-boot,boot-led = "heartbeat";
|
||||
u-boot,error-led = "error";
|
||||
u-boot,mmc-env-partition = "u-boot-env";
|
||||
st,fastboot-gpios = <&gpioa 13 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
|
||||
st,stm32prog-gpios = <&gpioa 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
|
||||
};
|
||||
|
||||
led {
|
||||
led-red {
|
||||
label = "error";
|
||||
gpios = <&gpioa 13 GPIO_ACTIVE_LOW>;
|
||||
default-state = "off";
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
#if defined(CONFIG_STM32MP15x_STM32IMAGE) || defined(CONFIG_SPL)
|
||||
config {
|
||||
u-boot,mmc-env-partition = "ssbl";
|
||||
};
|
||||
#endif
|
||||
};
|
||||
|
||||
#ifndef CONFIG_TFABOOT
|
||||
&clk_hse {
|
||||
st,digbypass;
|
||||
};
|
||||
|
||||
&i2c4 {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&i2c4_pins_a {
|
||||
u-boot,dm-pre-reloc;
|
||||
pins {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
};
|
||||
|
||||
&pmic {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&rcc {
|
||||
st,clksrc = <
|
||||
CLK_MPU_PLL1P
|
||||
CLK_AXI_PLL2P
|
||||
CLK_MCU_PLL3P
|
||||
CLK_PLL12_HSE
|
||||
CLK_PLL3_HSE
|
||||
CLK_PLL4_HSE
|
||||
CLK_RTC_LSE
|
||||
CLK_MCO1_DISABLED
|
||||
CLK_MCO2_DISABLED
|
||||
>;
|
||||
|
||||
st,clkdiv = <
|
||||
1 /*MPU*/
|
||||
0 /*AXI*/
|
||||
0 /*MCU*/
|
||||
1 /*APB1*/
|
||||
1 /*APB2*/
|
||||
1 /*APB3*/
|
||||
1 /*APB4*/
|
||||
2 /*APB5*/
|
||||
23 /*RTC*/
|
||||
0 /*MCO1*/
|
||||
0 /*MCO2*/
|
||||
>;
|
||||
|
||||
st,pkcs = <
|
||||
CLK_CKPER_HSE
|
||||
CLK_FMC_ACLK
|
||||
CLK_QSPI_ACLK
|
||||
CLK_ETH_DISABLED
|
||||
CLK_SDMMC12_PLL4P
|
||||
CLK_DSI_DSIPLL
|
||||
CLK_STGEN_HSE
|
||||
CLK_USBPHY_HSE
|
||||
CLK_SPI2S1_PLL3Q
|
||||
CLK_SPI2S23_PLL3Q
|
||||
CLK_SPI45_HSI
|
||||
CLK_SPI6_HSI
|
||||
CLK_I2C46_HSI
|
||||
CLK_SDMMC3_PLL4P
|
||||
CLK_USBO_USBPHY
|
||||
CLK_ADC_CKPER
|
||||
CLK_CEC_LSE
|
||||
CLK_I2C12_HSI
|
||||
CLK_I2C35_HSI
|
||||
CLK_UART1_HSI
|
||||
CLK_UART24_HSI
|
||||
CLK_UART35_HSI
|
||||
CLK_UART6_HSI
|
||||
CLK_UART78_HSI
|
||||
CLK_SPDIF_PLL4P
|
||||
CLK_FDCAN_PLL4R
|
||||
CLK_SAI1_PLL3Q
|
||||
CLK_SAI2_PLL3Q
|
||||
CLK_SAI3_PLL3Q
|
||||
CLK_SAI4_PLL3Q
|
||||
CLK_RNG1_LSI
|
||||
CLK_RNG2_LSI
|
||||
CLK_LPTIM1_PCLK1
|
||||
CLK_LPTIM23_PCLK3
|
||||
CLK_LPTIM45_LSE
|
||||
>;
|
||||
|
||||
/* VCO = 1066.0 MHz => P = 266 (AXI), Q = 533 (GPU), R = 533 (DDR) */
|
||||
pll2: st,pll@1 {
|
||||
compatible = "st,stm32mp1-pll";
|
||||
reg = <1>;
|
||||
cfg = < 2 65 1 0 0 PQR(1,1,1) >;
|
||||
frac = < 0x1400 >;
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
/* VCO = 417.8 MHz => P = 209, Q = 24, R = 11 */
|
||||
pll3: st,pll@2 {
|
||||
compatible = "st,stm32mp1-pll";
|
||||
reg = <2>;
|
||||
cfg = < 1 33 1 16 36 PQR(1,1,1) >;
|
||||
frac = < 0x1a04 >;
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
/* VCO = 594.0 MHz => P = 99, Q = 74, R = 74 */
|
||||
pll4: st,pll@3 {
|
||||
compatible = "st,stm32mp1-pll";
|
||||
reg = <3>;
|
||||
cfg = < 3 98 5 7 7 PQR(1,1,1) >;
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
};
|
||||
|
||||
&sdmmc1 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&sdmmc1_b4_pins_a {
|
||||
u-boot,dm-spl;
|
||||
pins1 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
pins2 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
};
|
||||
|
||||
&sdmmc1_dir_pins_a {
|
||||
u-boot,dm-spl;
|
||||
pins1 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
pins2 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
};
|
||||
|
||||
&sdmmc2 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&sdmmc2_b4_pins_a {
|
||||
u-boot,dm-spl;
|
||||
pins1 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
pins2 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
};
|
||||
|
||||
&sdmmc2_d47_pins_a {
|
||||
u-boot,dm-spl;
|
||||
pins {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
};
|
||||
#endif
|
||||
|
||||
&uart4 {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&uart4_pins_a {
|
||||
u-boot,dm-pre-reloc;
|
||||
pins1 {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
pins2 {
|
||||
u-boot,dm-pre-reloc;
|
||||
/* pull-up on rx to avoid floating level */
|
||||
bias-pull-up;
|
||||
};
|
||||
};
|
||||
32
arch/arm/dts/stm32mp157a-ed1.dts
Normal file
32
arch/arm/dts/stm32mp157a-ed1.dts
Normal file
@ -0,0 +1,32 @@
|
||||
// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
|
||||
/*
|
||||
* Copyright (C) STMicroelectronics 2019 - All Rights Reserved
|
||||
* Author: Alexandre Torgue <alexandre.torgue@st.com> for STMicroelectronics.
|
||||
*/
|
||||
/dts-v1/;
|
||||
|
||||
#include "stm32mp157.dtsi"
|
||||
#include "stm32mp15xa.dtsi"
|
||||
#include "stm32mp15-pinctrl.dtsi"
|
||||
#include "stm32mp15xxaa-pinctrl.dtsi"
|
||||
#include "stm32mp15xx-edx.dtsi"
|
||||
|
||||
/ {
|
||||
model = "STMicroelectronics STM32MP157A eval daughter";
|
||||
compatible = "st,stm32mp157a-ed1", "st,stm32mp157";
|
||||
|
||||
chosen {
|
||||
stdout-path = "serial0:115200n8";
|
||||
};
|
||||
|
||||
reserved-memory {
|
||||
gpu_reserved: gpu@f6000000 {
|
||||
reg = <0xf6000000 0x8000000>;
|
||||
no-map;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&gpu {
|
||||
contiguous-area = <&gpu_reserved>;
|
||||
};
|
||||
61
arch/arm/dts/stm32mp157a-ev1-u-boot.dtsi
Normal file
61
arch/arm/dts/stm32mp157a-ev1-u-boot.dtsi
Normal file
@ -0,0 +1,61 @@
|
||||
// SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
|
||||
/*
|
||||
* Copyright : STMicroelectronics 2018
|
||||
*/
|
||||
|
||||
#include "stm32mp157c-ed1-u-boot.dtsi"
|
||||
|
||||
/ {
|
||||
aliases {
|
||||
gpio26 = &stmfx_pinctrl;
|
||||
i2c1 = &i2c2;
|
||||
i2c4 = &i2c5;
|
||||
pinctrl2 = &stmfx_pinctrl;
|
||||
spi0 = &qspi;
|
||||
usb0 = &usbotg_hs;
|
||||
};
|
||||
};
|
||||
|
||||
#ifndef CONFIG_TFABOOT
|
||||
&flash0 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&qspi {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&qspi_clk_pins_a {
|
||||
u-boot,dm-spl;
|
||||
pins {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
};
|
||||
|
||||
&qspi_bk1_pins_a {
|
||||
u-boot,dm-spl;
|
||||
pins1 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
pins2 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
};
|
||||
|
||||
&qspi_bk2_pins_a {
|
||||
u-boot,dm-spl;
|
||||
pins1 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
pins2 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
};
|
||||
&sai2 {
|
||||
clocks = <&rcc SAI2>, <&rcc PLL3_Q>, <&rcc PLL3_R>;
|
||||
};
|
||||
|
||||
&sai4 {
|
||||
clocks = <&rcc SAI4>, <&rcc PLL3_Q>, <&rcc PLL3_R>;
|
||||
};
|
||||
#endif
|
||||
103
arch/arm/dts/stm32mp157a-ev1.dts
Normal file
103
arch/arm/dts/stm32mp157a-ev1.dts
Normal file
@ -0,0 +1,103 @@
|
||||
// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
|
||||
/*
|
||||
* Copyright (C) STMicroelectronics 2019 - All Rights Reserved
|
||||
* Author: Alexandre Torgue <alexandre.torgue@st.com> for STMicroelectronics.
|
||||
*/
|
||||
/dts-v1/;
|
||||
|
||||
#include "stm32mp157a-ed1.dts"
|
||||
#include "stm32mp15xx-evx.dtsi"
|
||||
|
||||
/ {
|
||||
model = "STMicroelectronics STM32MP157A eval daughter on eval mother";
|
||||
compatible = "st,stm32mp157a-ev1", "st,stm32mp157a-ed1", "st,stm32mp157";
|
||||
|
||||
chosen {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
stdout-path = "serial0:115200n8";
|
||||
|
||||
framebuffer {
|
||||
compatible = "simple-framebuffer";
|
||||
clocks = <&rcc LTDC_PX>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
||||
aliases {
|
||||
ethernet0 = ðernet0;
|
||||
};
|
||||
|
||||
panel_backlight: panel-backlight {
|
||||
compatible = "gpio-backlight";
|
||||
gpios = <&gpiod 13 GPIO_ACTIVE_LOW>;
|
||||
default-on;
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
&dsi {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
status = "okay";
|
||||
|
||||
ports {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
port@0 {
|
||||
reg = <0>;
|
||||
dsi_in: endpoint {
|
||||
remote-endpoint = <<dc_ep0_out>;
|
||||
};
|
||||
};
|
||||
|
||||
port@1 {
|
||||
reg = <1>;
|
||||
dsi_out: endpoint {
|
||||
remote-endpoint = <&dsi_panel_in>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
panel_dsi: panel-dsi@0 {
|
||||
compatible = "raydium,rm68200";
|
||||
reg = <0>;
|
||||
reset-gpios = <&gpiof 15 GPIO_ACTIVE_LOW>;
|
||||
backlight = <&panel_backlight>;
|
||||
power-supply = <&v3v3>;
|
||||
status = "okay";
|
||||
|
||||
port {
|
||||
dsi_panel_in: endpoint {
|
||||
remote-endpoint = <&dsi_out>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&i2c2 {
|
||||
gt9147: goodix_ts@5d {
|
||||
compatible = "goodix,gt9147";
|
||||
reg = <0x5d>;
|
||||
panel = <&panel_dsi>;
|
||||
pinctrl-0 = <&goodix_pins>;
|
||||
pinctrl-names = "default";
|
||||
status = "okay";
|
||||
|
||||
interrupts = <14 IRQ_TYPE_EDGE_RISING>;
|
||||
interrupt-parent = <&stmfx_pinctrl>;
|
||||
};
|
||||
};
|
||||
|
||||
<dc {
|
||||
status = "okay";
|
||||
|
||||
port {
|
||||
ltdc_ep0_out: endpoint@0 {
|
||||
reg = <0>;
|
||||
remote-endpoint = <&dsi_in>;
|
||||
};
|
||||
};
|
||||
};
|
||||
@ -53,6 +53,7 @@
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
#ifndef CONFIG_TFABOOT
|
||||
&rcc {
|
||||
st,clksrc = <
|
||||
CLK_MPU_PLL1P
|
||||
@ -144,3 +145,4 @@
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
};
|
||||
#endif
|
||||
|
||||
@ -25,6 +25,7 @@
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
#ifndef CONFIG_TFABOOT
|
||||
&rcc {
|
||||
st,clksrc = <
|
||||
CLK_MPU_PLL1P
|
||||
@ -116,3 +117,4 @@
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
};
|
||||
#endif
|
||||
|
||||
@ -11,21 +11,32 @@
|
||||
#include "stm32mp15-pinctrl.dtsi"
|
||||
#include "stm32mp15xxac-pinctrl.dtsi"
|
||||
#include "stm32mp15xx-dkx.dtsi"
|
||||
#include <dt-bindings/rtc/rtc-stm32.h>
|
||||
|
||||
/ {
|
||||
model = "STMicroelectronics STM32MP157C-DK2 Discovery Board";
|
||||
compatible = "st,stm32mp157c-dk2", "st,stm32mp157";
|
||||
|
||||
aliases {
|
||||
ethernet0 = ðernet0;
|
||||
serial0 = &uart4;
|
||||
serial1 = &usart3;
|
||||
serial2 = &uart7;
|
||||
serial3 = &usart2;
|
||||
};
|
||||
|
||||
chosen {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
stdout-path = "serial0:115200n8";
|
||||
|
||||
framebuffer {
|
||||
compatible = "simple-framebuffer";
|
||||
clocks = <&rcc LTDC_PX>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
||||
wifi_pwrseq: wifi-pwrseq {
|
||||
compatible = "mmc-pwrseq-simple";
|
||||
reset-gpios = <&gpioh 4 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
};
|
||||
|
||||
@ -35,7 +46,6 @@
|
||||
|
||||
&dsi {
|
||||
status = "okay";
|
||||
phy-dsi-supply = <®18>;
|
||||
|
||||
ports {
|
||||
port@0 {
|
||||
@ -53,7 +63,7 @@
|
||||
};
|
||||
};
|
||||
|
||||
panel@0 {
|
||||
panel_otm8009a: panel-otm8009a@0 {
|
||||
compatible = "orisetech,otm8009a";
|
||||
reg = <0>;
|
||||
reset-gpios = <&gpioe 4 GPIO_ACTIVE_LOW>;
|
||||
@ -77,6 +87,9 @@
|
||||
interrupt-controller;
|
||||
touchscreen-size-x = <480>;
|
||||
touchscreen-size-y = <800>;
|
||||
panel = <&panel_otm8009a>;
|
||||
vcc-supply = <&v3v3>;
|
||||
iovcc-supply = <&v3v3>;
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
@ -92,10 +105,48 @@
|
||||
};
|
||||
};
|
||||
|
||||
&rtc {
|
||||
st,lsco = <RTC_OUT2_RMP>;
|
||||
pinctrl-0 = <&rtc_out2_rmp_pins_a>;
|
||||
pinctrl-names = "default";
|
||||
};
|
||||
|
||||
/* Wifi */
|
||||
&sdmmc2 {
|
||||
arm,primecell-periphid = <0x10153180>;
|
||||
pinctrl-names = "default", "opendrain", "sleep";
|
||||
pinctrl-0 = <&sdmmc2_b4_pins_a>;
|
||||
pinctrl-1 = <&sdmmc2_b4_od_pins_a>;
|
||||
pinctrl-2 = <&sdmmc2_b4_sleep_pins_a>;
|
||||
non-removable;
|
||||
st,neg-edge;
|
||||
bus-width = <4>;
|
||||
vmmc-supply = <&v3v3>;
|
||||
mmc-pwrseq = <&wifi_pwrseq>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
status = "okay";
|
||||
|
||||
brcmf: bcrmf@1 {
|
||||
reg = <1>;
|
||||
compatible = "brcm,bcm4329-fmac";
|
||||
};
|
||||
};
|
||||
|
||||
/* Bluetooth */
|
||||
&usart2 {
|
||||
pinctrl-names = "default", "sleep", "idle";
|
||||
pinctrl-0 = <&usart2_pins_c>;
|
||||
pinctrl-1 = <&usart2_sleep_pins_c>;
|
||||
pinctrl-2 = <&usart2_idle_pins_c>;
|
||||
status = "disabled";
|
||||
uart-has-rtscts;
|
||||
status = "okay";
|
||||
|
||||
bluetooth {
|
||||
shutdown-gpios = <&gpioz 6 GPIO_ACTIVE_HIGH>;
|
||||
compatible = "brcm,bcm43438-bt";
|
||||
max-speed = <3000000>;
|
||||
vbat-supply = <&v3v3>;
|
||||
vddio-supply = <&v3v3>;
|
||||
};
|
||||
};
|
||||
|
||||
@ -3,224 +3,4 @@
|
||||
* Copyright : STMicroelectronics 2018
|
||||
*/
|
||||
|
||||
#include <dt-bindings/clock/stm32mp1-clksrc.h>
|
||||
#include "stm32mp15-u-boot.dtsi"
|
||||
#include "stm32mp15-ddr3-2x4Gb-1066-binG.dtsi"
|
||||
|
||||
/ {
|
||||
aliases {
|
||||
i2c3 = &i2c4;
|
||||
};
|
||||
|
||||
config {
|
||||
u-boot,boot-led = "heartbeat";
|
||||
u-boot,error-led = "error";
|
||||
u-boot,mmc-env-partition = "fip";
|
||||
st,fastboot-gpios = <&gpioa 13 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
|
||||
st,stm32prog-gpios = <&gpioa 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
|
||||
};
|
||||
|
||||
#if defined(CONFIG_STM32MP15x_STM32IMAGE) || defined(CONFIG_SPL)
|
||||
config {
|
||||
u-boot,mmc-env-partition = "ssbl";
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_STM32MP15x_STM32IMAGE
|
||||
/* only needed for boot with TF-A, witout FIP support */
|
||||
firmware {
|
||||
optee {
|
||||
compatible = "linaro,optee-tz";
|
||||
method = "smc";
|
||||
};
|
||||
};
|
||||
|
||||
reserved-memory {
|
||||
optee@fe000000 {
|
||||
reg = <0xfe000000 0x02000000>;
|
||||
no-map;
|
||||
};
|
||||
};
|
||||
#endif
|
||||
|
||||
led {
|
||||
red {
|
||||
label = "error";
|
||||
gpios = <&gpioa 13 GPIO_ACTIVE_LOW>;
|
||||
default-state = "off";
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&clk_hse {
|
||||
st,digbypass;
|
||||
};
|
||||
|
||||
&i2c4 {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&i2c4_pins_a {
|
||||
u-boot,dm-pre-reloc;
|
||||
pins {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
};
|
||||
|
||||
&pmic {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&rcc {
|
||||
st,clksrc = <
|
||||
CLK_MPU_PLL1P
|
||||
CLK_AXI_PLL2P
|
||||
CLK_MCU_PLL3P
|
||||
CLK_PLL12_HSE
|
||||
CLK_PLL3_HSE
|
||||
CLK_PLL4_HSE
|
||||
CLK_RTC_LSE
|
||||
CLK_MCO1_DISABLED
|
||||
CLK_MCO2_DISABLED
|
||||
>;
|
||||
|
||||
st,clkdiv = <
|
||||
1 /*MPU*/
|
||||
0 /*AXI*/
|
||||
0 /*MCU*/
|
||||
1 /*APB1*/
|
||||
1 /*APB2*/
|
||||
1 /*APB3*/
|
||||
1 /*APB4*/
|
||||
2 /*APB5*/
|
||||
23 /*RTC*/
|
||||
0 /*MCO1*/
|
||||
0 /*MCO2*/
|
||||
>;
|
||||
|
||||
st,pkcs = <
|
||||
CLK_CKPER_HSE
|
||||
CLK_FMC_ACLK
|
||||
CLK_QSPI_ACLK
|
||||
CLK_ETH_DISABLED
|
||||
CLK_SDMMC12_PLL4P
|
||||
CLK_DSI_DSIPLL
|
||||
CLK_STGEN_HSE
|
||||
CLK_USBPHY_HSE
|
||||
CLK_SPI2S1_PLL3Q
|
||||
CLK_SPI2S23_PLL3Q
|
||||
CLK_SPI45_HSI
|
||||
CLK_SPI6_HSI
|
||||
CLK_I2C46_HSI
|
||||
CLK_SDMMC3_PLL4P
|
||||
CLK_USBO_USBPHY
|
||||
CLK_ADC_CKPER
|
||||
CLK_CEC_LSE
|
||||
CLK_I2C12_HSI
|
||||
CLK_I2C35_HSI
|
||||
CLK_UART1_HSI
|
||||
CLK_UART24_HSI
|
||||
CLK_UART35_HSI
|
||||
CLK_UART6_HSI
|
||||
CLK_UART78_HSI
|
||||
CLK_SPDIF_PLL4P
|
||||
CLK_FDCAN_PLL4R
|
||||
CLK_SAI1_PLL3Q
|
||||
CLK_SAI2_PLL3Q
|
||||
CLK_SAI3_PLL3Q
|
||||
CLK_SAI4_PLL3Q
|
||||
CLK_RNG1_LSI
|
||||
CLK_RNG2_LSI
|
||||
CLK_LPTIM1_PCLK1
|
||||
CLK_LPTIM23_PCLK3
|
||||
CLK_LPTIM45_LSE
|
||||
>;
|
||||
|
||||
/* VCO = 1066.0 MHz => P = 266 (AXI), Q = 533 (GPU), R = 533 (DDR) */
|
||||
pll2: st,pll@1 {
|
||||
compatible = "st,stm32mp1-pll";
|
||||
reg = <1>;
|
||||
cfg = < 2 65 1 0 0 PQR(1,1,1) >;
|
||||
frac = < 0x1400 >;
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
/* VCO = 417.8 MHz => P = 209, Q = 24, R = 11 */
|
||||
pll3: st,pll@2 {
|
||||
compatible = "st,stm32mp1-pll";
|
||||
reg = <2>;
|
||||
cfg = < 1 33 1 16 36 PQR(1,1,1) >;
|
||||
frac = < 0x1a04 >;
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
/* VCO = 594.0 MHz => P = 99, Q = 74, R = 74 */
|
||||
pll4: st,pll@3 {
|
||||
compatible = "st,stm32mp1-pll";
|
||||
reg = <3>;
|
||||
cfg = < 3 98 5 7 7 PQR(1,1,1) >;
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
};
|
||||
|
||||
&sdmmc1 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&sdmmc1_b4_pins_a {
|
||||
u-boot,dm-spl;
|
||||
pins1 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
pins2 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
};
|
||||
|
||||
&sdmmc1_dir_pins_a {
|
||||
u-boot,dm-spl;
|
||||
pins1 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
pins2 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
};
|
||||
|
||||
&sdmmc2 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&sdmmc2_b4_pins_a {
|
||||
u-boot,dm-spl;
|
||||
pins1 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
pins2 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
};
|
||||
|
||||
&sdmmc2_d47_pins_a {
|
||||
u-boot,dm-spl;
|
||||
pins {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
};
|
||||
|
||||
&uart4 {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
&uart4_pins_a {
|
||||
u-boot,dm-pre-reloc;
|
||||
pins1 {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
pins2 {
|
||||
u-boot,dm-pre-reloc;
|
||||
/* pull-up on rx to avoid floating level */
|
||||
bias-pull-up;
|
||||
};
|
||||
};
|
||||
#include "stm32mp157a-ed1-u-boot.dtsi"
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
|
||||
/*
|
||||
* Copyright (C) STMicroelectronics 2017 - All Rights Reserved
|
||||
* Author: Ludovic Barre <ludovic.barre@st.com> for STMicroelectronics.
|
||||
* Copyright (C) STMicroelectronics 2019 - All Rights Reserved
|
||||
* Author: Alexandre Torgue <alexandre.torgue@st.com> for STMicroelectronics.
|
||||
*/
|
||||
/dts-v1/;
|
||||
|
||||
@ -9,8 +9,7 @@
|
||||
#include "stm32mp15xc.dtsi"
|
||||
#include "stm32mp15-pinctrl.dtsi"
|
||||
#include "stm32mp15xxaa-pinctrl.dtsi"
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
#include <dt-bindings/mfd/st,stpmic1.h>
|
||||
#include "stm32mp15xx-edx.dtsi"
|
||||
|
||||
/ {
|
||||
model = "STMicroelectronics STM32MP157C eval daughter";
|
||||
@ -20,389 +19,18 @@
|
||||
stdout-path = "serial0:115200n8";
|
||||
};
|
||||
|
||||
memory@c0000000 {
|
||||
device_type = "memory";
|
||||
reg = <0xC0000000 0x40000000>;
|
||||
};
|
||||
|
||||
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;
|
||||
};
|
||||
|
||||
gpu_reserved: gpu@e8000000 {
|
||||
reg = <0xe8000000 0x8000000>;
|
||||
gpu_reserved: gpu@f6000000 {
|
||||
reg = <0xf6000000 0x8000000>;
|
||||
no-map;
|
||||
};
|
||||
};
|
||||
|
||||
aliases {
|
||||
serial0 = &uart4;
|
||||
};
|
||||
|
||||
sd_switch: regulator-sd_switch {
|
||||
compatible = "regulator-gpio";
|
||||
regulator-name = "sd_switch";
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <2900000>;
|
||||
regulator-type = "voltage";
|
||||
regulator-always-on;
|
||||
|
||||
gpios = <&gpiof 14 GPIO_ACTIVE_HIGH>;
|
||||
gpios-states = <0>;
|
||||
states = <1800000 0x1>,
|
||||
<2900000 0x0>;
|
||||
};
|
||||
|
||||
vin: vin {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "vin";
|
||||
regulator-min-microvolt = <5000000>;
|
||||
regulator-max-microvolt = <5000000>;
|
||||
regulator-always-on;
|
||||
};
|
||||
};
|
||||
|
||||
&adc {
|
||||
/* ANA0, ANA1 are dedicated pins and don't need pinctrl: only in6. */
|
||||
pinctrl-0 = <&adc1_in6_pins_a>;
|
||||
pinctrl-names = "default";
|
||||
vdd-supply = <&vdd>;
|
||||
vdda-supply = <&vdda>;
|
||||
vref-supply = <&vdda>;
|
||||
status = "disabled";
|
||||
adc1: adc@0 {
|
||||
st,adc-channels = <0 1 6>;
|
||||
/* 16.5 ck_cycles sampling time */
|
||||
st,min-sample-time-nsecs = <400>;
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
&cpu0{
|
||||
cpu-supply = <&vddcore>;
|
||||
};
|
||||
|
||||
&cpu1{
|
||||
cpu-supply = <&vddcore>;
|
||||
};
|
||||
|
||||
&crc1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&cryp1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&dac {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&dac_ch1_pins_a &dac_ch2_pins_a>;
|
||||
vref-supply = <&vdda>;
|
||||
status = "disabled";
|
||||
dac1: dac@1 {
|
||||
status = "okay";
|
||||
};
|
||||
dac2: dac@2 {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
&dts {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&gpu {
|
||||
contiguous-area = <&gpu_reserved>;
|
||||
};
|
||||
|
||||
&hash1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&i2c4 {
|
||||
pinctrl-names = "default", "sleep";
|
||||
pinctrl-0 = <&i2c4_pins_a>;
|
||||
pinctrl-1 = <&i2c4_sleep_pins_a>;
|
||||
i2c-scl-rising-time-ns = <185>;
|
||||
i2c-scl-falling-time-ns = <20>;
|
||||
clock-frequency = <400000>;
|
||||
status = "okay";
|
||||
/* spare dmas for other usage */
|
||||
/delete-property/dmas;
|
||||
/delete-property/dma-names;
|
||||
|
||||
pmic: stpmic@33 {
|
||||
compatible = "st,stpmic1";
|
||||
reg = <0x33>;
|
||||
interrupts-extended = <&gpioa 0 IRQ_TYPE_EDGE_FALLING>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <2>;
|
||||
status = "okay";
|
||||
|
||||
regulators {
|
||||
compatible = "st,stpmic1-regulators";
|
||||
buck1-supply = <&vin>;
|
||||
buck2-supply = <&vin>;
|
||||
buck3-supply = <&vin>;
|
||||
buck4-supply = <&vin>;
|
||||
ldo1-supply = <&v3v3>;
|
||||
ldo2-supply = <&v3v3>;
|
||||
ldo3-supply = <&vdd_ddr>;
|
||||
ldo4-supply = <&vin>;
|
||||
ldo5-supply = <&v3v3>;
|
||||
ldo6-supply = <&v3v3>;
|
||||
vref_ddr-supply = <&vin>;
|
||||
boost-supply = <&vin>;
|
||||
pwr_sw1-supply = <&bst_out>;
|
||||
pwr_sw2-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>;
|
||||
};
|
||||
|
||||
vdda: ldo1 {
|
||||
regulator-name = "vdda";
|
||||
regulator-min-microvolt = <2900000>;
|
||||
regulator-max-microvolt = <2900000>;
|
||||
interrupts = <IT_CURLIM_LDO1 0>;
|
||||
};
|
||||
|
||||
v2v8: ldo2 {
|
||||
regulator-name = "v2v8";
|
||||
regulator-min-microvolt = <2800000>;
|
||||
regulator-max-microvolt = <2800000>;
|
||||
interrupts = <IT_CURLIM_LDO2 0>;
|
||||
};
|
||||
|
||||
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";
|
||||
interrupts = <IT_CURLIM_LDO4 0>;
|
||||
};
|
||||
|
||||
vdd_sd: ldo5 {
|
||||
regulator-name = "vdd_sd";
|
||||
regulator-min-microvolt = <2900000>;
|
||||
regulator-max-microvolt = <2900000>;
|
||||
interrupts = <IT_CURLIM_LDO5 0>;
|
||||
regulator-boot-on;
|
||||
};
|
||||
|
||||
v1v8: ldo6 {
|
||||
regulator-name = "v1v8";
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <1800000>;
|
||||
interrupts = <IT_CURLIM_LDO6 0>;
|
||||
};
|
||||
|
||||
vref_ddr: vref_ddr {
|
||||
regulator-name = "vref_ddr";
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
bst_out: boost {
|
||||
regulator-name = "bst_out";
|
||||
interrupts = <IT_OCP_BOOST 0>;
|
||||
};
|
||||
|
||||
vbus_otg: pwr_sw1 {
|
||||
regulator-name = "vbus_otg";
|
||||
interrupts = <IT_OCP_OTG 0>;
|
||||
};
|
||||
|
||||
vbus_sw: pwr_sw2 {
|
||||
regulator-name = "vbus_sw";
|
||||
interrupts = <IT_OCP_SWOUT 0>;
|
||||
regulator-active-discharge = <1>;
|
||||
};
|
||||
};
|
||||
|
||||
onkey {
|
||||
compatible = "st,stpmic1-onkey";
|
||||
interrupts = <IT_PONKEY_F 0>, <IT_PONKEY_R 0>;
|
||||
interrupt-names = "onkey-falling", "onkey-rising";
|
||||
power-off-time-sec = <10>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
watchdog {
|
||||
compatible = "st,stpmic1-wdt";
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&ipcc {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&iwdg2 {
|
||||
timeout-sec = <32>;
|
||||
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";
|
||||
};
|
||||
|
||||
&pwr_regulators {
|
||||
vdd-supply = <&vdd>;
|
||||
vdd_3v3_usbfs-supply = <&vdd_usb>;
|
||||
};
|
||||
|
||||
&rng1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&rtc {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&sdmmc1 {
|
||||
pinctrl-names = "default", "opendrain", "sleep";
|
||||
pinctrl-0 = <&sdmmc1_b4_pins_a &sdmmc1_dir_pins_a>;
|
||||
pinctrl-1 = <&sdmmc1_b4_od_pins_a &sdmmc1_dir_pins_a>;
|
||||
pinctrl-2 = <&sdmmc1_b4_sleep_pins_a &sdmmc1_dir_sleep_pins_a>;
|
||||
cd-gpios = <&gpiog 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
|
||||
disable-wp;
|
||||
st,sig-dir;
|
||||
st,neg-edge;
|
||||
st,use-ckin;
|
||||
bus-width = <4>;
|
||||
vmmc-supply = <&vdd_sd>;
|
||||
vqmmc-supply = <&sd_switch>;
|
||||
sd-uhs-sdr12;
|
||||
sd-uhs-sdr25;
|
||||
sd-uhs-sdr50;
|
||||
sd-uhs-ddr50;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&sdmmc2 {
|
||||
pinctrl-names = "default", "opendrain", "sleep";
|
||||
pinctrl-0 = <&sdmmc2_b4_pins_a &sdmmc2_d47_pins_a>;
|
||||
pinctrl-1 = <&sdmmc2_b4_od_pins_a &sdmmc2_d47_pins_a>;
|
||||
pinctrl-2 = <&sdmmc2_b4_sleep_pins_a &sdmmc2_d47_sleep_pins_a>;
|
||||
non-removable;
|
||||
no-sd;
|
||||
no-sdio;
|
||||
st,neg-edge;
|
||||
bus-width = <8>;
|
||||
vmmc-supply = <&v3v3>;
|
||||
vqmmc-supply = <&vdd>;
|
||||
mmc-ddr-3_3v;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&timers6 {
|
||||
status = "okay";
|
||||
/* spare dmas for other usage */
|
||||
/delete-property/dmas;
|
||||
/delete-property/dma-names;
|
||||
timer@5 {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
&uart4 {
|
||||
pinctrl-names = "default", "sleep", "idle";
|
||||
pinctrl-0 = <&uart4_pins_a>;
|
||||
pinctrl-1 = <&uart4_sleep_pins_a>;
|
||||
pinctrl-2 = <&uart4_idle_pins_a>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usbotg_hs {
|
||||
vbus-supply = <&vbus_otg>;
|
||||
};
|
||||
|
||||
&usbphyc_port0 {
|
||||
phy-supply = <&vdd_usb>;
|
||||
};
|
||||
|
||||
&usbphyc_port1 {
|
||||
phy-supply = <&vdd_usb>;
|
||||
};
|
||||
|
||||
@ -3,51 +3,4 @@
|
||||
* Copyright : STMicroelectronics 2018
|
||||
*/
|
||||
|
||||
#include "stm32mp157c-ed1-u-boot.dtsi"
|
||||
|
||||
/ {
|
||||
aliases {
|
||||
gpio26 = &stmfx_pinctrl;
|
||||
i2c1 = &i2c2;
|
||||
i2c4 = &i2c5;
|
||||
pinctrl2 = &stmfx_pinctrl;
|
||||
spi0 = &qspi;
|
||||
usb0 = &usbotg_hs;
|
||||
};
|
||||
};
|
||||
|
||||
&flash0 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&qspi {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&qspi_clk_pins_a {
|
||||
u-boot,dm-spl;
|
||||
pins {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
};
|
||||
|
||||
&qspi_bk1_pins_a {
|
||||
u-boot,dm-spl;
|
||||
pins1 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
pins2 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
};
|
||||
|
||||
&qspi_bk2_pins_a {
|
||||
u-boot,dm-spl;
|
||||
pins1 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
pins2 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
};
|
||||
|
||||
#include "stm32mp157a-ev1-u-boot.dtsi"
|
||||
|
||||
@ -1,69 +1,27 @@
|
||||
// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
|
||||
/*
|
||||
* Copyright (C) STMicroelectronics 2017 - All Rights Reserved
|
||||
* Author: Ludovic Barre <ludovic.barre@st.com> for STMicroelectronics.
|
||||
* Copyright (C) STMicroelectronics 2019 - All Rights Reserved
|
||||
* Author: Alexandre Torgue <alexandre.torgue@st.com> for STMicroelectronics.
|
||||
*/
|
||||
/dts-v1/;
|
||||
|
||||
#include "stm32mp157c-ed1.dts"
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
#include <dt-bindings/input/input.h>
|
||||
#include "stm32mp15xx-evx.dtsi"
|
||||
|
||||
/ {
|
||||
model = "STMicroelectronics STM32MP157C eval daughter on eval mother";
|
||||
compatible = "st,stm32mp157c-ev1", "st,stm32mp157c-ed1", "st,stm32mp157";
|
||||
|
||||
chosen {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
stdout-path = "serial0:115200n8";
|
||||
};
|
||||
|
||||
aliases {
|
||||
serial0 = &uart4;
|
||||
serial1 = &usart3;
|
||||
ethernet0 = ðernet0;
|
||||
};
|
||||
|
||||
clocks {
|
||||
clk_ext_camera: clk-ext-camera {
|
||||
#clock-cells = <0>;
|
||||
compatible = "fixed-clock";
|
||||
clock-frequency = <24000000>;
|
||||
};
|
||||
};
|
||||
|
||||
joystick {
|
||||
compatible = "gpio-keys";
|
||||
pinctrl-0 = <&joystick_pins>;
|
||||
pinctrl-names = "default";
|
||||
button-0 {
|
||||
label = "JoySel";
|
||||
linux,code = <KEY_ENTER>;
|
||||
interrupt-parent = <&stmfx_pinctrl>;
|
||||
interrupts = <0 IRQ_TYPE_EDGE_RISING>;
|
||||
};
|
||||
button-1 {
|
||||
label = "JoyDown";
|
||||
linux,code = <KEY_DOWN>;
|
||||
interrupt-parent = <&stmfx_pinctrl>;
|
||||
interrupts = <1 IRQ_TYPE_EDGE_RISING>;
|
||||
};
|
||||
button-2 {
|
||||
label = "JoyLeft";
|
||||
linux,code = <KEY_LEFT>;
|
||||
interrupt-parent = <&stmfx_pinctrl>;
|
||||
interrupts = <2 IRQ_TYPE_EDGE_RISING>;
|
||||
};
|
||||
button-3 {
|
||||
label = "JoyRight";
|
||||
linux,code = <KEY_RIGHT>;
|
||||
interrupt-parent = <&stmfx_pinctrl>;
|
||||
interrupts = <3 IRQ_TYPE_EDGE_RISING>;
|
||||
};
|
||||
button-4 {
|
||||
label = "JoyUp";
|
||||
linux,code = <KEY_UP>;
|
||||
interrupt-parent = <&stmfx_pinctrl>;
|
||||
interrupts = <4 IRQ_TYPE_EDGE_RISING>;
|
||||
framebuffer {
|
||||
compatible = "simple-framebuffer";
|
||||
clocks = <&rcc LTDC_PX>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
||||
@ -75,35 +33,15 @@
|
||||
};
|
||||
};
|
||||
|
||||
&cec {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&cec_pins_a>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&dcmi {
|
||||
status = "okay";
|
||||
pinctrl-names = "default", "sleep";
|
||||
pinctrl-0 = <&dcmi_pins_a>;
|
||||
pinctrl-1 = <&dcmi_sleep_pins_a>;
|
||||
|
||||
port {
|
||||
dcmi_0: endpoint {
|
||||
remote-endpoint = <&ov5640_0>;
|
||||
bus-type = <5>;
|
||||
bus-width = <8>;
|
||||
hsync-active = <0>;
|
||||
vsync-active = <0>;
|
||||
pclk-sample = <1>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&dsi {
|
||||
phy-dsi-supply = <®18>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
status = "okay";
|
||||
|
||||
ports {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
port@0 {
|
||||
reg = <0>;
|
||||
dsi_in: endpoint {
|
||||
@ -119,7 +57,7 @@
|
||||
};
|
||||
};
|
||||
|
||||
panel-dsi@0 {
|
||||
panel_dsi: panel-dsi@0 {
|
||||
compatible = "raydium,rm68200";
|
||||
reg = <0>;
|
||||
reset-gpios = <&gpiof 15 GPIO_ACTIVE_LOW>;
|
||||
@ -135,104 +73,18 @@
|
||||
};
|
||||
};
|
||||
|
||||
ðernet0 {
|
||||
status = "okay";
|
||||
pinctrl-0 = <ðernet0_rgmii_pins_a>;
|
||||
pinctrl-1 = <ðernet0_rgmii_sleep_pins_a>;
|
||||
pinctrl-names = "default", "sleep";
|
||||
phy-mode = "rgmii-id";
|
||||
max-speed = <1000>;
|
||||
phy-handle = <&phy0>;
|
||||
|
||||
mdio0 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
compatible = "snps,dwmac-mdio";
|
||||
phy0: ethernet-phy@0 {
|
||||
reg = <0>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&fmc {
|
||||
pinctrl-names = "default", "sleep";
|
||||
pinctrl-0 = <&fmc_pins_a>;
|
||||
pinctrl-1 = <&fmc_sleep_pins_a>;
|
||||
status = "okay";
|
||||
|
||||
nand-controller@4,0 {
|
||||
status = "okay";
|
||||
|
||||
nand@0 {
|
||||
reg = <0>;
|
||||
nand-on-flash-bbt;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&i2c2 {
|
||||
pinctrl-names = "default", "sleep";
|
||||
pinctrl-0 = <&i2c2_pins_a>;
|
||||
pinctrl-1 = <&i2c2_sleep_pins_a>;
|
||||
i2c-scl-rising-time-ns = <185>;
|
||||
i2c-scl-falling-time-ns = <20>;
|
||||
status = "okay";
|
||||
|
||||
ov5640: camera@3c {
|
||||
compatible = "ovti,ov5640";
|
||||
reg = <0x3c>;
|
||||
clocks = <&clk_ext_camera>;
|
||||
clock-names = "xclk";
|
||||
DOVDD-supply = <&v2v8>;
|
||||
powerdown-gpios = <&stmfx_pinctrl 18 (GPIO_ACTIVE_HIGH | GPIO_PUSH_PULL)>;
|
||||
reset-gpios = <&stmfx_pinctrl 19 (GPIO_ACTIVE_LOW | GPIO_PUSH_PULL)>;
|
||||
rotation = <180>;
|
||||
gt9147: goodix_ts@5d {
|
||||
compatible = "goodix,gt9147";
|
||||
reg = <0x5d>;
|
||||
panel = <&panel_dsi>;
|
||||
pinctrl-0 = <&goodix_pins>;
|
||||
pinctrl-names = "default";
|
||||
status = "okay";
|
||||
|
||||
port {
|
||||
ov5640_0: endpoint {
|
||||
remote-endpoint = <&dcmi_0>;
|
||||
bus-width = <8>;
|
||||
data-shift = <2>; /* lines 9:2 are used */
|
||||
hsync-active = <0>;
|
||||
vsync-active = <0>;
|
||||
pclk-sample = <1>;
|
||||
};
|
||||
};
|
||||
interrupts = <14 IRQ_TYPE_EDGE_RISING>;
|
||||
interrupt-parent = <&stmfx_pinctrl>;
|
||||
};
|
||||
|
||||
stmfx: stmfx@42 {
|
||||
compatible = "st,stmfx-0300";
|
||||
reg = <0x42>;
|
||||
interrupts = <8 IRQ_TYPE_EDGE_RISING>;
|
||||
interrupt-parent = <&gpioi>;
|
||||
vdd-supply = <&v3v3>;
|
||||
|
||||
stmfx_pinctrl: pinctrl {
|
||||
compatible = "st,stmfx-0300-pinctrl";
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <2>;
|
||||
gpio-ranges = <&stmfx_pinctrl 0 0 24>;
|
||||
|
||||
joystick_pins: joystick-pins {
|
||||
pins = "gpio0", "gpio1", "gpio2", "gpio3", "gpio4";
|
||||
bias-pull-down;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&i2c5 {
|
||||
pinctrl-names = "default", "sleep";
|
||||
pinctrl-0 = <&i2c5_pins_a>;
|
||||
pinctrl-1 = <&i2c5_sleep_pins_a>;
|
||||
i2c-scl-rising-time-ns = <185>;
|
||||
i2c-scl-falling-time-ns = <20>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
<dc {
|
||||
@ -245,133 +97,3 @@
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&m_can1 {
|
||||
pinctrl-names = "default", "sleep";
|
||||
pinctrl-0 = <&m_can1_pins_a>;
|
||||
pinctrl-1 = <&m_can1_sleep_pins_a>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&qspi {
|
||||
pinctrl-names = "default", "sleep";
|
||||
pinctrl-0 = <&qspi_clk_pins_a &qspi_bk1_pins_a &qspi_bk2_pins_a>;
|
||||
pinctrl-1 = <&qspi_clk_sleep_pins_a &qspi_bk1_sleep_pins_a &qspi_bk2_sleep_pins_a>;
|
||||
reg = <0x58003000 0x1000>, <0x70000000 0x4000000>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
status = "okay";
|
||||
|
||||
flash0: mx66l51235l@0 {
|
||||
compatible = "jedec,spi-nor";
|
||||
reg = <0>;
|
||||
spi-rx-bus-width = <4>;
|
||||
spi-max-frequency = <108000000>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
};
|
||||
|
||||
flash1: mx66l51235l@1 {
|
||||
compatible = "jedec,spi-nor";
|
||||
reg = <1>;
|
||||
spi-rx-bus-width = <4>;
|
||||
spi-max-frequency = <108000000>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
};
|
||||
};
|
||||
|
||||
&sdmmc3 {
|
||||
pinctrl-names = "default", "opendrain", "sleep";
|
||||
pinctrl-0 = <&sdmmc3_b4_pins_a>;
|
||||
pinctrl-1 = <&sdmmc3_b4_od_pins_a>;
|
||||
pinctrl-2 = <&sdmmc3_b4_sleep_pins_a>;
|
||||
broken-cd;
|
||||
st,neg-edge;
|
||||
bus-width = <4>;
|
||||
vmmc-supply = <&v3v3>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&spi1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&spi1_pins_a>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&timers2 {
|
||||
/* spare dmas for other usage (un-delete to enable pwm capture) */
|
||||
/delete-property/dmas;
|
||||
/delete-property/dma-names;
|
||||
status = "disabled";
|
||||
pwm {
|
||||
pinctrl-0 = <&pwm2_pins_a>;
|
||||
pinctrl-1 = <&pwm2_sleep_pins_a>;
|
||||
pinctrl-names = "default", "sleep";
|
||||
status = "okay";
|
||||
};
|
||||
timer@1 {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
&timers8 {
|
||||
/delete-property/dmas;
|
||||
/delete-property/dma-names;
|
||||
status = "disabled";
|
||||
pwm {
|
||||
pinctrl-0 = <&pwm8_pins_a>;
|
||||
pinctrl-1 = <&pwm8_sleep_pins_a>;
|
||||
pinctrl-names = "default", "sleep";
|
||||
status = "okay";
|
||||
};
|
||||
timer@7 {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
&timers12 {
|
||||
/delete-property/dmas;
|
||||
/delete-property/dma-names;
|
||||
status = "disabled";
|
||||
pwm {
|
||||
pinctrl-0 = <&pwm12_pins_a>;
|
||||
pinctrl-1 = <&pwm12_sleep_pins_a>;
|
||||
pinctrl-names = "default", "sleep";
|
||||
status = "okay";
|
||||
};
|
||||
timer@11 {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
&usart3 {
|
||||
pinctrl-names = "default", "sleep", "idle";
|
||||
pinctrl-0 = <&usart3_pins_b>;
|
||||
pinctrl-1 = <&usart3_sleep_pins_b>;
|
||||
pinctrl-2 = <&usart3_idle_pins_b>;
|
||||
/*
|
||||
* HW flow control USART3_RTS is optional, and isn't default wired to
|
||||
* the connector. SB23 needs to be soldered in order to use it, and R77
|
||||
* (ETH_CLK) should be removed.
|
||||
*/
|
||||
uart-has-rtscts;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&usbh_ehci {
|
||||
phys = <&usbphyc_port0>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usbotg_hs {
|
||||
pinctrl-0 = <&usbotg_hs_pins_a>;
|
||||
pinctrl-names = "default";
|
||||
phys = <&usbphyc_port1 0>;
|
||||
phy-names = "usb2-phy";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usbphyc {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
@ -13,9 +13,11 @@
|
||||
};
|
||||
};
|
||||
|
||||
#ifndef CONFIG_TFABOOT
|
||||
&clk_hse {
|
||||
st,digbypass;
|
||||
};
|
||||
#endif
|
||||
|
||||
&i2c2 {
|
||||
u-boot,dm-pre-reloc;
|
||||
@ -32,6 +34,7 @@
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
#ifndef CONFIG_TFABOOT
|
||||
&rcc {
|
||||
st,clksrc = <
|
||||
CLK_MPU_PLL1P
|
||||
@ -144,3 +147,4 @@
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
};
|
||||
#endif
|
||||
|
||||
6
arch/arm/dts/stm32mp157d-dk1-u-boot.dtsi
Normal file
6
arch/arm/dts/stm32mp157d-dk1-u-boot.dtsi
Normal file
@ -0,0 +1,6 @@
|
||||
// SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
|
||||
/*
|
||||
* Copyright : STMicroelectronics 2019
|
||||
*/
|
||||
|
||||
#include "stm32mp157a-dk1-u-boot.dtsi"
|
||||
26
arch/arm/dts/stm32mp157d-dk1.dts
Normal file
26
arch/arm/dts/stm32mp157d-dk1.dts
Normal file
@ -0,0 +1,26 @@
|
||||
// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
|
||||
/*
|
||||
* Copyright (C) STMicroelectronics 2019 - All Rights Reserved
|
||||
* Author: Alexandre Torgue <alexandre.torgue@st.com> for STMicroelectronics.
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
|
||||
#include "stm32mp157.dtsi"
|
||||
#include "stm32mp15xd.dtsi"
|
||||
#include "stm32mp15-pinctrl.dtsi"
|
||||
#include "stm32mp15xxac-pinctrl.dtsi"
|
||||
#include "stm32mp15xx-dkx.dtsi"
|
||||
|
||||
/ {
|
||||
model = "STMicroelectronics STM32MP157D-DK1 Discovery Board";
|
||||
compatible = "st,stm32mp157d-dk1", "st,stm32mp157";
|
||||
|
||||
aliases {
|
||||
ethernet0 = ðernet0;
|
||||
};
|
||||
|
||||
chosen {
|
||||
stdout-path = "serial0:115200n8";
|
||||
};
|
||||
};
|
||||
6
arch/arm/dts/stm32mp157d-ed1-u-boot.dtsi
Normal file
6
arch/arm/dts/stm32mp157d-ed1-u-boot.dtsi
Normal file
@ -0,0 +1,6 @@
|
||||
// SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
|
||||
/*
|
||||
* Copyright : STMicroelectronics 2019
|
||||
*/
|
||||
|
||||
#include "stm32mp157a-ed1-u-boot.dtsi"
|
||||
32
arch/arm/dts/stm32mp157d-ed1.dts
Normal file
32
arch/arm/dts/stm32mp157d-ed1.dts
Normal file
@ -0,0 +1,32 @@
|
||||
// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
|
||||
/*
|
||||
* Copyright (C) STMicroelectronics 2019 - All Rights Reserved
|
||||
* Author: Alexandre Torgue <alexandre.torgue@st.com> for STMicroelectronics.
|
||||
*/
|
||||
/dts-v1/;
|
||||
|
||||
#include "stm32mp157.dtsi"
|
||||
#include "stm32mp15xd.dtsi"
|
||||
#include "stm32mp15-pinctrl.dtsi"
|
||||
#include "stm32mp15xxaa-pinctrl.dtsi"
|
||||
#include "stm32mp15xx-edx.dtsi"
|
||||
|
||||
/ {
|
||||
model = "STMicroelectronics STM32MP157D eval daughter";
|
||||
compatible = "st,stm32mp157d-ed1", "st,stm32mp157";
|
||||
|
||||
chosen {
|
||||
stdout-path = "serial0:115200n8";
|
||||
};
|
||||
|
||||
reserved-memory {
|
||||
gpu_reserved: gpu@f6000000 {
|
||||
reg = <0xf6000000 0x8000000>;
|
||||
no-map;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&gpu {
|
||||
contiguous-area = <&gpu_reserved>;
|
||||
};
|
||||
6
arch/arm/dts/stm32mp157d-ev1-u-boot.dtsi
Normal file
6
arch/arm/dts/stm32mp157d-ev1-u-boot.dtsi
Normal file
@ -0,0 +1,6 @@
|
||||
// SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
|
||||
/*
|
||||
* Copyright : STMicroelectronics 2019
|
||||
*/
|
||||
|
||||
#include "stm32mp157a-ev1-u-boot.dtsi"
|
||||
103
arch/arm/dts/stm32mp157d-ev1.dts
Normal file
103
arch/arm/dts/stm32mp157d-ev1.dts
Normal file
@ -0,0 +1,103 @@
|
||||
// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
|
||||
/*
|
||||
* Copyright (C) STMicroelectronics 2019 - All Rights Reserved
|
||||
* Author: Alexandre Torgue <alexandre.torgue@st.com> for STMicroelectronics.
|
||||
*/
|
||||
/dts-v1/;
|
||||
|
||||
#include "stm32mp157d-ed1.dts"
|
||||
#include "stm32mp15xx-evx.dtsi"
|
||||
|
||||
/ {
|
||||
model = "STMicroelectronics STM32MP157D eval daughter on eval mother";
|
||||
compatible = "st,stm32mp157d-ev1", "st,stm32mp157d-ed1", "st,stm32mp157";
|
||||
|
||||
chosen {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
stdout-path = "serial0:115200n8";
|
||||
|
||||
framebuffer {
|
||||
compatible = "simple-framebuffer";
|
||||
clocks = <&rcc LTDC_PX>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
||||
aliases {
|
||||
ethernet0 = ðernet0;
|
||||
};
|
||||
|
||||
panel_backlight: panel-backlight {
|
||||
compatible = "gpio-backlight";
|
||||
gpios = <&gpiod 13 GPIO_ACTIVE_LOW>;
|
||||
default-on;
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
&dsi {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
status = "okay";
|
||||
|
||||
ports {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
port@0 {
|
||||
reg = <0>;
|
||||
dsi_in: endpoint {
|
||||
remote-endpoint = <<dc_ep0_out>;
|
||||
};
|
||||
};
|
||||
|
||||
port@1 {
|
||||
reg = <1>;
|
||||
dsi_out: endpoint {
|
||||
remote-endpoint = <&dsi_panel_in>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
panel_dsi: panel-dsi@0 {
|
||||
compatible = "raydium,rm68200";
|
||||
reg = <0>;
|
||||
reset-gpios = <&gpiof 15 GPIO_ACTIVE_LOW>;
|
||||
backlight = <&panel_backlight>;
|
||||
power-supply = <&v3v3>;
|
||||
status = "okay";
|
||||
|
||||
port {
|
||||
dsi_panel_in: endpoint {
|
||||
remote-endpoint = <&dsi_out>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&i2c2 {
|
||||
gt9147: goodix_ts@5d {
|
||||
compatible = "goodix,gt9147";
|
||||
reg = <0x5d>;
|
||||
panel = <&panel_dsi>;
|
||||
pinctrl-0 = <&goodix_pins>;
|
||||
pinctrl-names = "default";
|
||||
status = "okay";
|
||||
|
||||
interrupts = <14 IRQ_TYPE_EDGE_RISING>;
|
||||
interrupt-parent = <&stmfx_pinctrl>;
|
||||
};
|
||||
};
|
||||
|
||||
<dc {
|
||||
status = "okay";
|
||||
|
||||
port {
|
||||
ltdc_ep0_out: endpoint@0 {
|
||||
reg = <0>;
|
||||
remote-endpoint = <&dsi_in>;
|
||||
};
|
||||
};
|
||||
};
|
||||
6
arch/arm/dts/stm32mp157f-dk2-u-boot.dtsi
Normal file
6
arch/arm/dts/stm32mp157f-dk2-u-boot.dtsi
Normal file
@ -0,0 +1,6 @@
|
||||
// SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
|
||||
/*
|
||||
* Copyright : STMicroelectronics 2019
|
||||
*/
|
||||
|
||||
#include "stm32mp157c-dk2-u-boot.dtsi"
|
||||
152
arch/arm/dts/stm32mp157f-dk2.dts
Normal file
152
arch/arm/dts/stm32mp157f-dk2.dts
Normal file
@ -0,0 +1,152 @@
|
||||
// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
|
||||
/*
|
||||
* Copyright (C) STMicroelectronics 2019 - All Rights Reserved
|
||||
* Author: Alexandre Torgue <alexandre.torgue@st.com> for STMicroelectronics.
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
|
||||
#include "stm32mp157.dtsi"
|
||||
#include "stm32mp15xf.dtsi"
|
||||
#include "stm32mp15-pinctrl.dtsi"
|
||||
#include "stm32mp15xxac-pinctrl.dtsi"
|
||||
#include "stm32mp15xx-dkx.dtsi"
|
||||
#include <dt-bindings/rtc/rtc-stm32.h>
|
||||
|
||||
/ {
|
||||
model = "STMicroelectronics STM32MP157F-DK2 Discovery Board";
|
||||
compatible = "st,stm32mp157f-dk2", "st,stm32mp157";
|
||||
|
||||
aliases {
|
||||
serial3 = &usart2;
|
||||
};
|
||||
|
||||
chosen {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
stdout-path = "serial0:115200n8";
|
||||
|
||||
framebuffer {
|
||||
compatible = "simple-framebuffer";
|
||||
clocks = <&rcc LTDC_PX>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
||||
wifi_pwrseq: wifi-pwrseq {
|
||||
compatible = "mmc-pwrseq-simple";
|
||||
reset-gpios = <&gpioh 4 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
};
|
||||
|
||||
&cryp1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&dsi {
|
||||
status = "okay";
|
||||
|
||||
ports {
|
||||
port@0 {
|
||||
reg = <0>;
|
||||
dsi_in: endpoint {
|
||||
remote-endpoint = <<dc_ep1_out>;
|
||||
};
|
||||
};
|
||||
|
||||
port@1 {
|
||||
reg = <1>;
|
||||
dsi_out: endpoint {
|
||||
remote-endpoint = <&panel_in>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
panel_otm8009a: panel-otm8009a@0 {
|
||||
compatible = "orisetech,otm8009a";
|
||||
reg = <0>;
|
||||
reset-gpios = <&gpioe 4 GPIO_ACTIVE_LOW>;
|
||||
power-supply = <&v3v3>;
|
||||
status = "okay";
|
||||
|
||||
port {
|
||||
panel_in: endpoint {
|
||||
remote-endpoint = <&dsi_out>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&i2c1 {
|
||||
touchscreen@38 {
|
||||
compatible = "focaltech,ft6236";
|
||||
reg = <0x38>;
|
||||
interrupts = <2 2>;
|
||||
interrupt-parent = <&gpiof>;
|
||||
interrupt-controller;
|
||||
touchscreen-size-x = <480>;
|
||||
touchscreen-size-y = <800>;
|
||||
panel = <&panel_otm8009a>;
|
||||
vcc-supply = <&v3v3>;
|
||||
iovcc-supply = <&v3v3>;
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
<dc {
|
||||
status = "okay";
|
||||
|
||||
port {
|
||||
ltdc_ep1_out: endpoint@1 {
|
||||
reg = <1>;
|
||||
remote-endpoint = <&dsi_in>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&rtc {
|
||||
st,lsco = <RTC_OUT2_RMP>;
|
||||
pinctrl-0 = <&rtc_out2_rmp_pins_a>;
|
||||
pinctrl-names = "default";
|
||||
};
|
||||
|
||||
/* Wifi */
|
||||
&sdmmc2 {
|
||||
arm,primecell-periphid = <0x10153180>;
|
||||
pinctrl-names = "default", "opendrain", "sleep";
|
||||
pinctrl-0 = <&sdmmc2_b4_pins_a>;
|
||||
pinctrl-1 = <&sdmmc2_b4_od_pins_a>;
|
||||
pinctrl-2 = <&sdmmc2_b4_sleep_pins_a>;
|
||||
non-removable;
|
||||
st,neg-edge;
|
||||
bus-width = <4>;
|
||||
vmmc-supply = <&v3v3>;
|
||||
mmc-pwrseq = <&wifi_pwrseq>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
status = "okay";
|
||||
|
||||
brcmf: bcrmf@1 {
|
||||
reg = <1>;
|
||||
compatible = "brcm,bcm4329-fmac";
|
||||
};
|
||||
};
|
||||
|
||||
/* Bluetooth */
|
||||
&usart2 {
|
||||
pinctrl-names = "default", "sleep", "idle";
|
||||
pinctrl-0 = <&usart2_pins_c>;
|
||||
pinctrl-1 = <&usart2_sleep_pins_c>;
|
||||
pinctrl-2 = <&usart2_idle_pins_c>;
|
||||
uart-has-rtscts;
|
||||
status = "okay";
|
||||
|
||||
bluetooth {
|
||||
shutdown-gpios = <&gpioz 6 GPIO_ACTIVE_HIGH>;
|
||||
compatible = "brcm,bcm43438-bt";
|
||||
max-speed = <3000000>;
|
||||
vbat-supply = <&v3v3>;
|
||||
vddio-supply = <&v3v3>;
|
||||
};
|
||||
};
|
||||
6
arch/arm/dts/stm32mp157f-ed1-u-boot.dtsi
Normal file
6
arch/arm/dts/stm32mp157f-ed1-u-boot.dtsi
Normal file
@ -0,0 +1,6 @@
|
||||
// SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
|
||||
/*
|
||||
* Copyright : STMicroelectronics 2019
|
||||
*/
|
||||
|
||||
#include "stm32mp157c-ed1-u-boot.dtsi"
|
||||
36
arch/arm/dts/stm32mp157f-ed1.dts
Normal file
36
arch/arm/dts/stm32mp157f-ed1.dts
Normal file
@ -0,0 +1,36 @@
|
||||
// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
|
||||
/*
|
||||
* Copyright (C) STMicroelectronics 2019 - All Rights Reserved
|
||||
* Author: Alexandre Torgue <alexandre.torgue@st.com> for STMicroelectronics.
|
||||
*/
|
||||
/dts-v1/;
|
||||
|
||||
#include "stm32mp157.dtsi"
|
||||
#include "stm32mp15xf.dtsi"
|
||||
#include "stm32mp15-pinctrl.dtsi"
|
||||
#include "stm32mp15xxaa-pinctrl.dtsi"
|
||||
#include "stm32mp15xx-edx.dtsi"
|
||||
|
||||
/ {
|
||||
model = "STMicroelectronics STM32MP157F eval daughter";
|
||||
compatible = "st,stm32mp157f-ed1", "st,stm32mp157";
|
||||
|
||||
chosen {
|
||||
stdout-path = "serial0:115200n8";
|
||||
};
|
||||
|
||||
reserved-memory {
|
||||
gpu_reserved: gpu@f6000000 {
|
||||
reg = <0xf6000000 0x8000000>;
|
||||
no-map;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&cryp1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&gpu {
|
||||
contiguous-area = <&gpu_reserved>;
|
||||
};
|
||||
6
arch/arm/dts/stm32mp157f-ev1-u-boot.dtsi
Normal file
6
arch/arm/dts/stm32mp157f-ev1-u-boot.dtsi
Normal file
@ -0,0 +1,6 @@
|
||||
// SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
|
||||
/*
|
||||
* Copyright : STMicroelectronics 2019
|
||||
*/
|
||||
|
||||
#include "stm32mp157c-ev1-u-boot.dtsi"
|
||||
99
arch/arm/dts/stm32mp157f-ev1.dts
Normal file
99
arch/arm/dts/stm32mp157f-ev1.dts
Normal file
@ -0,0 +1,99 @@
|
||||
// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
|
||||
/*
|
||||
* Copyright (C) STMicroelectronics 2019 - All Rights Reserved
|
||||
* Author: Alexandre Torgue <alexandre.torgue@st.com> for STMicroelectronics.
|
||||
*/
|
||||
/dts-v1/;
|
||||
|
||||
#include "stm32mp157f-ed1.dts"
|
||||
#include "stm32mp15xx-evx.dtsi"
|
||||
|
||||
/ {
|
||||
model = "STMicroelectronics STM32MP157F eval daughter on eval mother";
|
||||
compatible = "st,stm32mp157f-ev1", "st,stm32mp157f-ed1", "st,stm32mp157";
|
||||
|
||||
chosen {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
stdout-path = "serial0:115200n8";
|
||||
|
||||
framebuffer {
|
||||
compatible = "simple-framebuffer";
|
||||
clocks = <&rcc LTDC_PX>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
||||
panel_backlight: panel-backlight {
|
||||
compatible = "gpio-backlight";
|
||||
gpios = <&gpiod 13 GPIO_ACTIVE_LOW>;
|
||||
default-on;
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
&dsi {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
status = "okay";
|
||||
|
||||
ports {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
port@0 {
|
||||
reg = <0>;
|
||||
dsi_in: endpoint {
|
||||
remote-endpoint = <<dc_ep0_out>;
|
||||
};
|
||||
};
|
||||
|
||||
port@1 {
|
||||
reg = <1>;
|
||||
dsi_out: endpoint {
|
||||
remote-endpoint = <&dsi_panel_in>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
panel_dsi: panel-dsi@0 {
|
||||
compatible = "raydium,rm68200";
|
||||
reg = <0>;
|
||||
reset-gpios = <&gpiof 15 GPIO_ACTIVE_LOW>;
|
||||
backlight = <&panel_backlight>;
|
||||
power-supply = <&v3v3>;
|
||||
status = "okay";
|
||||
|
||||
port {
|
||||
dsi_panel_in: endpoint {
|
||||
remote-endpoint = <&dsi_out>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&i2c2 {
|
||||
gt9147: goodix_ts@5d {
|
||||
compatible = "goodix,gt9147";
|
||||
reg = <0x5d>;
|
||||
panel = <&panel_dsi>;
|
||||
pinctrl-0 = <&goodix_pins>;
|
||||
pinctrl-names = "default";
|
||||
status = "okay";
|
||||
|
||||
interrupts = <14 IRQ_TYPE_EDGE_RISING>;
|
||||
interrupt-parent = <&stmfx_pinctrl>;
|
||||
};
|
||||
};
|
||||
|
||||
<dc {
|
||||
status = "okay";
|
||||
|
||||
port {
|
||||
ltdc_ep0_out: endpoint@0 {
|
||||
reg = <0>;
|
||||
remote-endpoint = <&dsi_in>;
|
||||
};
|
||||
};
|
||||
};
|
||||
13
arch/arm/dts/stm32mp15xa.dtsi
Normal file
13
arch/arm/dts/stm32mp15xa.dtsi
Normal file
@ -0,0 +1,13 @@
|
||||
// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
|
||||
/*
|
||||
* Copyright (C) STMicroelectronics 2019 - All Rights Reserved
|
||||
* Author: Alexandre Torgue <alexandre.torgue@st.com> for STMicroelectronics.
|
||||
*/
|
||||
|
||||
&cpu0_opp_table {
|
||||
opp-650000000 {
|
||||
opp-hz = /bits/ 64 <650000000>;
|
||||
opp-microvolt = <1200000>;
|
||||
opp-supported-hw = <0x1>;
|
||||
};
|
||||
};
|
||||
@ -4,14 +4,16 @@
|
||||
* Author: Alexandre Torgue <alexandre.torgue@st.com> for STMicroelectronics.
|
||||
*/
|
||||
|
||||
#include "stm32mp15xa.dtsi"
|
||||
|
||||
/ {
|
||||
soc {
|
||||
cryp1: cryp@54001000 {
|
||||
compatible = "st,stm32mp1-cryp";
|
||||
reg = <0x54001000 0x400>;
|
||||
interrupts = <GIC_SPI 79 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&rcc CRYP1>;
|
||||
resets = <&rcc CRYP1_R>;
|
||||
clocks = <&scmi_clk CK_SCMI_CRYP1>;
|
||||
resets = <&scmi_reset RST_SCMI_CRYP1>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
||||
42
arch/arm/dts/stm32mp15xd.dtsi
Normal file
42
arch/arm/dts/stm32mp15xd.dtsi
Normal file
@ -0,0 +1,42 @@
|
||||
// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
|
||||
/*
|
||||
* Copyright (C) STMicroelectronics 2019 - All Rights Reserved
|
||||
* Author: Alexandre Torgue <alexandre.torgue@st.com> for STMicroelectronics.
|
||||
*/
|
||||
|
||||
&cpu0_opp_table {
|
||||
opp-800000000 {
|
||||
opp-hz = /bits/ 64 <800000000>;
|
||||
opp-microvolt = <1350000>;
|
||||
opp-supported-hw = <0x2>;
|
||||
};
|
||||
opp-400000000 {
|
||||
opp-hz = /bits/ 64 <400000000>;
|
||||
opp-microvolt = <1200000>;
|
||||
opp-supported-hw = <0x2>;
|
||||
opp-suspend;
|
||||
};
|
||||
};
|
||||
|
||||
&cpu_thermal {
|
||||
trips {
|
||||
cpu-crit {
|
||||
temperature = <105000>;
|
||||
hysteresis = <0>;
|
||||
type = "critical";
|
||||
};
|
||||
|
||||
cpu_alert: cpu-alert {
|
||||
temperature = <95000>;
|
||||
hysteresis = <10000>;
|
||||
type = "passive";
|
||||
};
|
||||
};
|
||||
|
||||
cooling-maps {
|
||||
map0 {
|
||||
trip = <&cpu_alert>;
|
||||
cooling-device = <&cpu0 1 1>;
|
||||
};
|
||||
};
|
||||
};
|
||||
20
arch/arm/dts/stm32mp15xf.dtsi
Normal file
20
arch/arm/dts/stm32mp15xf.dtsi
Normal file
@ -0,0 +1,20 @@
|
||||
// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
|
||||
/*
|
||||
* Copyright (C) STMicroelectronics 2019 - All Rights Reserved
|
||||
* Author: Alexandre Torgue <alexandre.torgue@st.com> for STMicroelectronics.
|
||||
*/
|
||||
|
||||
#include "stm32mp15xd.dtsi"
|
||||
|
||||
/ {
|
||||
soc {
|
||||
cryp1: cryp@54001000 {
|
||||
compatible = "st,stm32mp1-cryp";
|
||||
reg = <0x54001000 0x400>;
|
||||
interrupts = <GIC_SPI 79 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&scmi_clk CK_SCMI_CRYP1>;
|
||||
resets = <&scmi_reset RST_SCMI_CRYP1>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
};
|
||||
@ -50,15 +50,6 @@
|
||||
};
|
||||
};
|
||||
|
||||
&gpiof {
|
||||
snor-nwp {
|
||||
gpio-hog;
|
||||
gpios = <7 0>;
|
||||
output-high;
|
||||
line-name = "spi-nor-nwp";
|
||||
};
|
||||
};
|
||||
|
||||
&i2c4 {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
@ -131,6 +122,7 @@
|
||||
};
|
||||
};
|
||||
|
||||
#ifndef CONFIG_TFABOOT
|
||||
&rcc {
|
||||
st,clksrc = <
|
||||
CLK_MPU_PLL1P
|
||||
@ -222,9 +214,14 @@
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
};
|
||||
#endif
|
||||
|
||||
&sdmmc1 {
|
||||
u-boot,dm-spl;
|
||||
st,use-ckin;
|
||||
st,cmd-gpios = <&gpiod 2 0>;
|
||||
st,ck-gpios = <&gpioc 12 0>;
|
||||
st,ckin-gpios = <&gpioe 4 0>;
|
||||
};
|
||||
|
||||
&sdmmc1_b4_pins_a {
|
||||
|
||||
@ -19,8 +19,23 @@
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
ðernet0 {
|
||||
mdio0 {
|
||||
ethernet-phy@7 {
|
||||
reset-gpios = <&gpioz 2 GPIO_ACTIVE_LOW>;
|
||||
reset-assert-us = <11000>;
|
||||
reset-deassert-us = <1000>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&sdmmc1 {
|
||||
u-boot,dm-spl;
|
||||
st,use-ckin;
|
||||
st,cmd-gpios = <&gpiod 2 0>;
|
||||
st,ck-gpios = <&gpioc 12 0>;
|
||||
st,ckin-gpios = <&gpioe 4 0>;
|
||||
};
|
||||
|
||||
&sdmmc1_b4_pins_a {
|
||||
|
||||
@ -25,15 +25,6 @@
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&gpiof {
|
||||
snor-nwp {
|
||||
gpio-hog;
|
||||
gpios = <7 0>;
|
||||
output-high;
|
||||
line-name = "spi-nor-nwp";
|
||||
};
|
||||
};
|
||||
|
||||
&i2c4 {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
@ -70,6 +61,7 @@
|
||||
};
|
||||
};
|
||||
|
||||
#ifndef CONFIG_TFABOOT
|
||||
&rcc {
|
||||
st,clksrc = <
|
||||
CLK_MPU_PLL1P
|
||||
@ -161,3 +153,4 @@
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
};
|
||||
#endif
|
||||
|
||||
@ -4,10 +4,19 @@
|
||||
* Author: Alexandre Torgue <alexandre.torgue@st.com> for STMicroelectronics.
|
||||
*/
|
||||
|
||||
#include "stm32mp15-m4-srm.dtsi"
|
||||
#include "stm32mp15-m4-srm-pinctrl.dtsi"
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
#include <dt-bindings/mfd/st,stpmic1.h>
|
||||
|
||||
/ {
|
||||
aliases {
|
||||
ethernet0 = ðernet0;
|
||||
serial0 = &uart4;
|
||||
serial1 = &usart3;
|
||||
serial2 = &uart7;
|
||||
};
|
||||
|
||||
memory@c0000000 {
|
||||
device_type = "memory";
|
||||
reg = <0xc0000000 0x20000000>;
|
||||
@ -42,6 +51,12 @@
|
||||
no-map;
|
||||
};
|
||||
|
||||
mcu_rsc_table: mcu_rsc_table@10048000 {
|
||||
compatible = "shared-dma-pool";
|
||||
reg = <0x10048000 0x8000>;
|
||||
no-map;
|
||||
};
|
||||
|
||||
mcuram: mcuram@30000000 {
|
||||
compatible = "shared-dma-pool";
|
||||
reg = <0x30000000 0x40000>;
|
||||
@ -58,6 +73,11 @@
|
||||
reg = <0xd4000000 0x4000000>;
|
||||
no-map;
|
||||
};
|
||||
|
||||
optee@de000000 {
|
||||
reg = <0xde000000 0x2000000>;
|
||||
no-map;
|
||||
};
|
||||
};
|
||||
|
||||
led {
|
||||
@ -70,9 +90,9 @@
|
||||
};
|
||||
};
|
||||
|
||||
sound {
|
||||
sound: sound {
|
||||
compatible = "audio-graph-card";
|
||||
label = "STM32MP1-DK";
|
||||
label = "STM32MP15-DK";
|
||||
routing =
|
||||
"Playback" , "MCLK",
|
||||
"Capture" , "MCLK",
|
||||
@ -92,11 +112,11 @@
|
||||
|
||||
&adc {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&adc12_ain_pins_a>, <&adc12_usb_cc_pins_a>;
|
||||
pinctrl-0 = <&adc12_usb_cc_pins_a>;
|
||||
vdd-supply = <&vdd>;
|
||||
vdda-supply = <&vdd>;
|
||||
vref-supply = <&vrefbuf>;
|
||||
status = "disabled";
|
||||
status = "okay";
|
||||
adc1: adc@0 {
|
||||
/*
|
||||
* Type-C USB_PWR_CC1 & USB_PWR_CC2 on in18 & in19.
|
||||
@ -105,13 +125,13 @@
|
||||
* Use arbitrary margin here (e.g. 5us).
|
||||
*/
|
||||
st,min-sample-time-nsecs = <5000>;
|
||||
/* AIN connector, USB Type-C CC1 & CC2 */
|
||||
st,adc-channels = <0 1 6 13 18 19>;
|
||||
/* USB Type-C CC1 & CC2 */
|
||||
st,adc-channels = <18 19>;
|
||||
status = "okay";
|
||||
};
|
||||
adc2: adc@100 {
|
||||
/* AIN connector, USB Type-C CC1 & CC2 */
|
||||
st,adc-channels = <0 1 2 6 18 19>;
|
||||
/* USB Type-C CC1 & CC2 */
|
||||
st,adc-channels = <18 19>;
|
||||
st,min-sample-time-nsecs = <5000>;
|
||||
status = "okay";
|
||||
};
|
||||
@ -124,14 +144,6 @@
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&crc1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&dts {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&cpu0{
|
||||
cpu-supply = <&vddcore>;
|
||||
};
|
||||
@ -140,6 +152,22 @@
|
||||
cpu-supply = <&vddcore>;
|
||||
};
|
||||
|
||||
&crc1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&dma1 {
|
||||
sram = <&dma_pool>;
|
||||
};
|
||||
|
||||
&dma2 {
|
||||
sram = <&dma_pool>;
|
||||
};
|
||||
|
||||
&dts {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
ðernet0 {
|
||||
status = "okay";
|
||||
pinctrl-0 = <ðernet0_rgmii_pins_a>;
|
||||
@ -148,6 +176,8 @@
|
||||
phy-mode = "rgmii-id";
|
||||
max-speed = <1000>;
|
||||
phy-handle = <&phy0>;
|
||||
nvmem-cells = <ðernet_mac_address>;
|
||||
nvmem-cell-names = "mac-address";
|
||||
|
||||
mdio0 {
|
||||
#address-cells = <1>;
|
||||
@ -228,15 +258,15 @@
|
||||
cs42l51_tx_endpoint: endpoint@0 {
|
||||
reg = <0>;
|
||||
remote-endpoint = <&sai2a_endpoint>;
|
||||
frame-master;
|
||||
bitclock-master;
|
||||
frame-master = <&cs42l51_tx_endpoint>;
|
||||
bitclock-master = <&cs42l51_tx_endpoint>;
|
||||
};
|
||||
|
||||
cs42l51_rx_endpoint: endpoint@1 {
|
||||
reg = <1>;
|
||||
remote-endpoint = <&sai2b_endpoint>;
|
||||
frame-master;
|
||||
bitclock-master;
|
||||
frame-master = <&cs42l51_rx_endpoint>;
|
||||
bitclock-master = <&cs42l51_rx_endpoint>;
|
||||
};
|
||||
};
|
||||
};
|
||||
@ -257,7 +287,7 @@
|
||||
stusb1600@28 {
|
||||
compatible = "st,stusb1600";
|
||||
reg = <0x28>;
|
||||
interrupts = <11 IRQ_TYPE_EDGE_FALLING>;
|
||||
interrupts = <11 IRQ_TYPE_LEVEL_LOW>;
|
||||
interrupt-parent = <&gpioi>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&stusb1600_pins_a>;
|
||||
@ -281,7 +311,7 @@
|
||||
pmic: stpmic@33 {
|
||||
compatible = "st,stpmic1";
|
||||
reg = <0x33>;
|
||||
interrupts-extended = <&gpioa 0 IRQ_TYPE_EDGE_FALLING>;
|
||||
interrupts-extended = <&exti_pwr 55 IRQ_TYPE_EDGE_FALLING>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <2>;
|
||||
status = "okay";
|
||||
@ -390,21 +420,21 @@
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
bst_out: boost {
|
||||
bst_out: boost {
|
||||
regulator-name = "bst_out";
|
||||
interrupts = <IT_OCP_BOOST 0>;
|
||||
};
|
||||
};
|
||||
|
||||
vbus_otg: pwr_sw1 {
|
||||
regulator-name = "vbus_otg";
|
||||
interrupts = <IT_OCP_OTG 0>;
|
||||
};
|
||||
};
|
||||
|
||||
vbus_sw: pwr_sw2 {
|
||||
vbus_sw: pwr_sw2 {
|
||||
regulator-name = "vbus_sw";
|
||||
interrupts = <IT_OCP_SWOUT 0>;
|
||||
regulator-active-discharge = <1>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
onkey {
|
||||
@ -477,11 +507,12 @@
|
||||
|
||||
&m4_rproc {
|
||||
memory-region = <&retram>, <&mcuram>, <&mcuram2>, <&vdev0vring0>,
|
||||
<&vdev0vring1>, <&vdev0buffer>;
|
||||
mboxes = <&ipcc 0>, <&ipcc 1>, <&ipcc 2>;
|
||||
mbox-names = "vq0", "vq1", "shutdown";
|
||||
<&vdev0vring1>, <&vdev0buffer>, <&mcu_rsc_table>;
|
||||
mboxes = <&ipcc 0>, <&ipcc 1>, <&ipcc 2>, <&ipcc 3>;
|
||||
mbox-names = "vq0", "vq1", "shutdown", "detach";
|
||||
interrupt-parent = <&exti>;
|
||||
interrupts = <68 1>;
|
||||
wakeup-source;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
@ -490,10 +521,6 @@
|
||||
vdd_3v3_usbfs-supply = <&vdd_usb>;
|
||||
};
|
||||
|
||||
&rng1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&rtc {
|
||||
status = "okay";
|
||||
};
|
||||
@ -509,8 +536,6 @@
|
||||
sai2a: audio-controller@4400b004 {
|
||||
#clock-cells = <0>;
|
||||
dma-names = "tx";
|
||||
clocks = <&rcc SAI2_K>;
|
||||
clock-names = "sai_ck";
|
||||
status = "okay";
|
||||
|
||||
sai2a_port: port {
|
||||
@ -568,6 +593,27 @@
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&spi4 {
|
||||
pinctrl-names = "default", "sleep";
|
||||
pinctrl-0 = <&spi4_pins_b>;
|
||||
pinctrl-1 = <&spi4_sleep_pins_b>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&spi5 {
|
||||
pinctrl-names = "default", "sleep";
|
||||
pinctrl-0 = <&spi5_pins_a>;
|
||||
pinctrl-1 = <&spi5_sleep_pins_a>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&sram {
|
||||
dma_pool: dma_pool@0 {
|
||||
reg = <0x50000 0x10000>;
|
||||
pool;
|
||||
};
|
||||
};
|
||||
|
||||
&timers1 {
|
||||
/* spare dmas for other usage */
|
||||
/delete-property/dmas;
|
||||
@ -658,6 +704,8 @@
|
||||
pinctrl-0 = <&uart4_pins_a>;
|
||||
pinctrl-1 = <&uart4_sleep_pins_a>;
|
||||
pinctrl-2 = <&uart4_idle_pins_a>;
|
||||
/delete-property/dmas;
|
||||
/delete-property/dma-names;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
@ -666,6 +714,8 @@
|
||||
pinctrl-0 = <&uart7_pins_c>;
|
||||
pinctrl-1 = <&uart7_sleep_pins_c>;
|
||||
pinctrl-2 = <&uart7_idle_pins_c>;
|
||||
/delete-property/dmas;
|
||||
/delete-property/dma-names;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@ -702,10 +752,36 @@
|
||||
|
||||
&usbphyc_port0 {
|
||||
phy-supply = <&vdd_usb>;
|
||||
st,tune-hs-dc-level = <2>;
|
||||
st,enable-fs-rftime-tuning;
|
||||
st,enable-hs-rftime-reduction;
|
||||
st,trim-hs-current = <15>;
|
||||
st,trim-hs-impedance = <1>;
|
||||
st,tune-squelch-level = <3>;
|
||||
st,tune-hs-rx-offset = <2>;
|
||||
st,no-lsfs-sc;
|
||||
|
||||
/*
|
||||
* Hack to keep hub active until all connected devices are suspended
|
||||
* otherwise the hub will be powered off as soon as the v3v3 is disabled
|
||||
* and it can disturb connected devices.
|
||||
*/
|
||||
connector {
|
||||
compatible = "usb-a-connector";
|
||||
vbus-supply = <&v3v3>;
|
||||
};
|
||||
};
|
||||
|
||||
&usbphyc_port1 {
|
||||
phy-supply = <&vdd_usb>;
|
||||
st,tune-hs-dc-level = <2>;
|
||||
st,enable-fs-rftime-tuning;
|
||||
st,enable-hs-rftime-reduction;
|
||||
st,trim-hs-current = <15>;
|
||||
st,trim-hs-impedance = <1>;
|
||||
st,tune-squelch-level = <3>;
|
||||
st,tune-hs-rx-offset = <2>;
|
||||
st,no-lsfs-sc;
|
||||
};
|
||||
|
||||
&vrefbuf {
|
||||
|
||||
419
arch/arm/dts/stm32mp15xx-edx.dtsi
Normal file
419
arch/arm/dts/stm32mp15xx-edx.dtsi
Normal file
@ -0,0 +1,419 @@
|
||||
// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
|
||||
/*
|
||||
* Copyright (C) STMicroelectronics 2017 - All Rights Reserved
|
||||
* Author: Ludovic Barre <ludovic.barre@st.com> for STMicroelectronics.
|
||||
*/
|
||||
|
||||
#include "stm32mp15-m4-srm.dtsi"
|
||||
#include "stm32mp15-m4-srm-pinctrl.dtsi"
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
#include <dt-bindings/mfd/st,stpmic1.h>
|
||||
|
||||
/ {
|
||||
memory@c0000000 {
|
||||
device_type = "memory";
|
||||
reg = <0xC0000000 0x40000000>;
|
||||
};
|
||||
|
||||
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;
|
||||
};
|
||||
|
||||
mcu_rsc_table: mcu_rsc_table@10048000 {
|
||||
compatible = "shared-dma-pool";
|
||||
reg = <0x10048000 0x8000>;
|
||||
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;
|
||||
};
|
||||
|
||||
optee@fe000000 {
|
||||
reg = <0xfe000000 0x2000000>;
|
||||
no-map;
|
||||
};
|
||||
};
|
||||
|
||||
aliases {
|
||||
serial0 = &uart4;
|
||||
};
|
||||
|
||||
led {
|
||||
compatible = "gpio-leds";
|
||||
led-blue {
|
||||
label = "heartbeat";
|
||||
gpios = <&gpiod 9 GPIO_ACTIVE_HIGH>;
|
||||
linux,default-trigger = "heartbeat";
|
||||
default-state = "off";
|
||||
};
|
||||
};
|
||||
|
||||
sd_switch: regulator-sd_switch {
|
||||
compatible = "regulator-gpio";
|
||||
regulator-name = "sd_switch";
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <2900000>;
|
||||
regulator-type = "voltage";
|
||||
regulator-always-on;
|
||||
|
||||
gpios = <&gpiof 14 GPIO_ACTIVE_HIGH>;
|
||||
gpios-states = <0>;
|
||||
states = <1800000 0x1>,
|
||||
<2900000 0x0>;
|
||||
};
|
||||
|
||||
vin: vin {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "vin";
|
||||
regulator-min-microvolt = <5000000>;
|
||||
regulator-max-microvolt = <5000000>;
|
||||
regulator-always-on;
|
||||
};
|
||||
};
|
||||
|
||||
&adc {
|
||||
/* ANA0, ANA1 are dedicated pins and don't need pinctrl: only in6. */
|
||||
pinctrl-0 = <&adc1_in6_pins_a>;
|
||||
pinctrl-names = "default";
|
||||
vdd-supply = <&vdd>;
|
||||
vdda-supply = <&vdda>;
|
||||
vref-supply = <&vdda>;
|
||||
status = "disabled";
|
||||
adc1: adc@0 {
|
||||
st,adc-channels = <0 1 6>;
|
||||
/* 16.5 ck_cycles sampling time */
|
||||
st,min-sample-time-nsecs = <400>;
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
&cpu0{
|
||||
cpu-supply = <&vddcore>;
|
||||
};
|
||||
|
||||
&cpu1{
|
||||
cpu-supply = <&vddcore>;
|
||||
};
|
||||
|
||||
&crc1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&dac {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&dac_ch1_pins_a &dac_ch2_pins_a>;
|
||||
vref-supply = <&vdda>;
|
||||
status = "disabled";
|
||||
dac1: dac@1 {
|
||||
status = "okay";
|
||||
};
|
||||
dac2: dac@2 {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
&dma1 {
|
||||
sram = <&dma_pool>;
|
||||
};
|
||||
|
||||
&dma2 {
|
||||
sram = <&dma_pool>;
|
||||
};
|
||||
|
||||
&dts {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&hash1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&i2c4 {
|
||||
pinctrl-names = "default", "sleep";
|
||||
pinctrl-0 = <&i2c4_pins_a>;
|
||||
pinctrl-1 = <&i2c4_sleep_pins_a>;
|
||||
i2c-scl-rising-time-ns = <185>;
|
||||
i2c-scl-falling-time-ns = <20>;
|
||||
clock-frequency = <400000>;
|
||||
status = "okay";
|
||||
/* spare dmas for other usage */
|
||||
/delete-property/dmas;
|
||||
/delete-property/dma-names;
|
||||
|
||||
pmic: stpmic@33 {
|
||||
compatible = "st,stpmic1";
|
||||
reg = <0x33>;
|
||||
interrupts-extended = <&exti_pwr 55 IRQ_TYPE_EDGE_FALLING>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <2>;
|
||||
status = "okay";
|
||||
regulators {
|
||||
compatible = "st,stpmic1-regulators";
|
||||
buck1-supply = <&vin>;
|
||||
buck2-supply = <&vin>;
|
||||
buck3-supply = <&vin>;
|
||||
buck4-supply = <&vin>;
|
||||
ldo1-supply = <&v3v3>;
|
||||
ldo2-supply = <&v3v3>;
|
||||
ldo3-supply = <&vdd_ddr>;
|
||||
ldo4-supply = <&vin>;
|
||||
ldo5-supply = <&v3v3>;
|
||||
ldo6-supply = <&v3v3>;
|
||||
vref_ddr-supply = <&vin>;
|
||||
boost-supply = <&vin>;
|
||||
pwr_sw1-supply = <&bst_out>;
|
||||
pwr_sw2-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>;
|
||||
};
|
||||
|
||||
vdda: ldo1 {
|
||||
regulator-name = "vdda";
|
||||
regulator-min-microvolt = <2900000>;
|
||||
regulator-max-microvolt = <2900000>;
|
||||
interrupts = <IT_CURLIM_LDO1 0>;
|
||||
};
|
||||
|
||||
v2v8: ldo2 {
|
||||
regulator-name = "v2v8";
|
||||
regulator-min-microvolt = <2800000>;
|
||||
regulator-max-microvolt = <2800000>;
|
||||
interrupts = <IT_CURLIM_LDO2 0>;
|
||||
};
|
||||
|
||||
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";
|
||||
interrupts = <IT_CURLIM_LDO4 0>;
|
||||
};
|
||||
|
||||
vdd_sd: ldo5 {
|
||||
regulator-name = "vdd_sd";
|
||||
regulator-min-microvolt = <2900000>;
|
||||
regulator-max-microvolt = <2900000>;
|
||||
interrupts = <IT_CURLIM_LDO5 0>;
|
||||
regulator-boot-on;
|
||||
};
|
||||
|
||||
v1v8: ldo6 {
|
||||
regulator-name = "v1v8";
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <1800000>;
|
||||
interrupts = <IT_CURLIM_LDO6 0>;
|
||||
};
|
||||
|
||||
vref_ddr: vref_ddr {
|
||||
regulator-name = "vref_ddr";
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
bst_out: boost {
|
||||
regulator-name = "bst_out";
|
||||
interrupts = <IT_OCP_BOOST 0>;
|
||||
};
|
||||
|
||||
vbus_otg: pwr_sw1 {
|
||||
regulator-name = "vbus_otg";
|
||||
interrupts = <IT_OCP_OTG 0>;
|
||||
};
|
||||
|
||||
vbus_sw: pwr_sw2 {
|
||||
regulator-name = "vbus_sw";
|
||||
interrupts = <IT_OCP_SWOUT 0>;
|
||||
regulator-active-discharge = <1>;
|
||||
};
|
||||
};
|
||||
|
||||
onkey {
|
||||
compatible = "st,stpmic1-onkey";
|
||||
interrupts = <IT_PONKEY_F 0>, <IT_PONKEY_R 0>;
|
||||
interrupt-names = "onkey-falling", "onkey-rising";
|
||||
power-off-time-sec = <10>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
watchdog {
|
||||
compatible = "st,stpmic1-wdt";
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&ipcc {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&iwdg2 {
|
||||
timeout-sec = <32>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&m4_rproc {
|
||||
memory-region = <&retram>, <&mcuram>, <&mcuram2>, <&vdev0vring0>,
|
||||
<&vdev0vring1>, <&vdev0buffer>, <&mcu_rsc_table>;
|
||||
mboxes = <&ipcc 0>, <&ipcc 1>, <&ipcc 2>, <&ipcc 3>;
|
||||
mbox-names = "vq0", "vq1", "shutdown", "detach";
|
||||
interrupt-parent = <&exti>;
|
||||
interrupts = <68 1>;
|
||||
wakeup-source;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&pwr_regulators {
|
||||
vdd-supply = <&vdd>;
|
||||
vdd_3v3_usbfs-supply = <&vdd_usb>;
|
||||
};
|
||||
|
||||
&rtc {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&sdmmc1 {
|
||||
pinctrl-names = "default", "opendrain", "sleep";
|
||||
pinctrl-0 = <&sdmmc1_b4_pins_a &sdmmc1_dir_pins_a>;
|
||||
pinctrl-1 = <&sdmmc1_b4_od_pins_a &sdmmc1_dir_pins_a>;
|
||||
pinctrl-2 = <&sdmmc1_b4_sleep_pins_a &sdmmc1_dir_sleep_pins_a>;
|
||||
cd-gpios = <&gpiog 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
|
||||
disable-wp;
|
||||
st,sig-dir;
|
||||
st,neg-edge;
|
||||
st,use-ckin;
|
||||
bus-width = <4>;
|
||||
vmmc-supply = <&vdd_sd>;
|
||||
vqmmc-supply = <&sd_switch>;
|
||||
sd-uhs-sdr12;
|
||||
sd-uhs-sdr25;
|
||||
sd-uhs-sdr50;
|
||||
sd-uhs-ddr50;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&sdmmc2 {
|
||||
pinctrl-names = "default", "opendrain", "sleep";
|
||||
pinctrl-0 = <&sdmmc2_b4_pins_a &sdmmc2_d47_pins_a>;
|
||||
pinctrl-1 = <&sdmmc2_b4_od_pins_a &sdmmc2_d47_pins_a>;
|
||||
pinctrl-2 = <&sdmmc2_b4_sleep_pins_a &sdmmc2_d47_sleep_pins_a>;
|
||||
non-removable;
|
||||
no-sd;
|
||||
no-sdio;
|
||||
st,neg-edge;
|
||||
bus-width = <8>;
|
||||
vmmc-supply = <&v3v3>;
|
||||
vqmmc-supply = <&vdd>;
|
||||
mmc-ddr-3_3v;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&sram {
|
||||
dma_pool: dma_pool@0 {
|
||||
reg = <0x50000 0x10000>;
|
||||
pool;
|
||||
};
|
||||
};
|
||||
|
||||
&timers6 {
|
||||
status = "okay";
|
||||
/* spare dmas for other usage */
|
||||
/delete-property/dmas;
|
||||
/delete-property/dma-names;
|
||||
timer@5 {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
&uart4 {
|
||||
pinctrl-names = "default", "sleep", "idle";
|
||||
pinctrl-0 = <&uart4_pins_a>;
|
||||
pinctrl-1 = <&uart4_sleep_pins_a>;
|
||||
pinctrl-2 = <&uart4_idle_pins_a>;
|
||||
/delete-property/dmas;
|
||||
/delete-property/dma-names;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usbotg_hs {
|
||||
vbus-supply = <&vbus_otg>;
|
||||
};
|
||||
|
||||
&usbphyc_port0 {
|
||||
phy-supply = <&vdd_usb>;
|
||||
};
|
||||
|
||||
&usbphyc_port1 {
|
||||
phy-supply = <&vdd_usb>;
|
||||
};
|
||||
690
arch/arm/dts/stm32mp15xx-evx.dtsi
Normal file
690
arch/arm/dts/stm32mp15xx-evx.dtsi
Normal file
@ -0,0 +1,690 @@
|
||||
// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
|
||||
/*
|
||||
* Copyright (C) STMicroelectronics 2017 - All Rights Reserved
|
||||
* Author: Ludovic Barre <ludovic.barre@st.com> for STMicroelectronics.
|
||||
*/
|
||||
|
||||
#include <dt-bindings/input/input.h>
|
||||
#include <dt-bindings/soc/stm32-hdp.h>
|
||||
|
||||
/ {
|
||||
aliases {
|
||||
ethernet0 = ðernet0;
|
||||
serial1 = &usart3;
|
||||
};
|
||||
|
||||
clocks {
|
||||
clk_ext_camera: clk-ext-camera {
|
||||
#clock-cells = <0>;
|
||||
compatible = "fixed-clock";
|
||||
clock-frequency = <24000000>;
|
||||
};
|
||||
};
|
||||
|
||||
joystick {
|
||||
compatible = "gpio-keys";
|
||||
pinctrl-0 = <&joystick_pins>;
|
||||
pinctrl-names = "default";
|
||||
button-0 {
|
||||
label = "JoySel";
|
||||
linux,code = <KEY_ENTER>;
|
||||
interrupt-parent = <&stmfx_pinctrl>;
|
||||
interrupts = <0 IRQ_TYPE_EDGE_RISING>;
|
||||
};
|
||||
button-1 {
|
||||
label = "JoyDown";
|
||||
linux,code = <KEY_DOWN>;
|
||||
interrupt-parent = <&stmfx_pinctrl>;
|
||||
interrupts = <1 IRQ_TYPE_EDGE_RISING>;
|
||||
};
|
||||
button-2 {
|
||||
label = "JoyLeft";
|
||||
linux,code = <KEY_LEFT>;
|
||||
interrupt-parent = <&stmfx_pinctrl>;
|
||||
interrupts = <2 IRQ_TYPE_EDGE_RISING>;
|
||||
};
|
||||
button-3 {
|
||||
label = "JoyRight";
|
||||
linux,code = <KEY_RIGHT>;
|
||||
interrupt-parent = <&stmfx_pinctrl>;
|
||||
interrupts = <3 IRQ_TYPE_EDGE_RISING>;
|
||||
};
|
||||
button-4 {
|
||||
label = "JoyUp";
|
||||
linux,code = <KEY_UP>;
|
||||
interrupt-parent = <&stmfx_pinctrl>;
|
||||
interrupts = <4 IRQ_TYPE_EDGE_RISING>;
|
||||
};
|
||||
};
|
||||
|
||||
spdif_out: spdif-out {
|
||||
#sound-dai-cells = <0>;
|
||||
compatible = "linux,spdif-dit";
|
||||
status = "okay";
|
||||
|
||||
spdif_out_port: port {
|
||||
spdif_out_endpoint: endpoint {
|
||||
remote-endpoint = <&sai4a_endpoint>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
spdif_in: spdif-in {
|
||||
#sound-dai-cells = <0>;
|
||||
compatible = "linux,spdif-dir";
|
||||
status = "okay";
|
||||
|
||||
spdif_in_port: port {
|
||||
spdif_in_endpoint: endpoint {
|
||||
remote-endpoint = <&spdifrx_endpoint>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
sound: sound {
|
||||
compatible = "audio-graph-card";
|
||||
label = "STM32MP15-EV";
|
||||
routing =
|
||||
"AIF1CLK" , "MCLK1",
|
||||
"AIF2CLK" , "MCLK1",
|
||||
"IN1LN" , "MICBIAS2",
|
||||
"DMIC2DAT" , "MICBIAS1",
|
||||
"DMIC1DAT" , "MICBIAS1";
|
||||
dais = <&sai2a_port &sai2b_port &sai4a_port &spdifrx_port
|
||||
&dfsdm0_port &dfsdm1_port &dfsdm2_port &dfsdm3_port>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
dmic0: dmic-0 {
|
||||
compatible = "dmic-codec";
|
||||
#sound-dai-cells = <1>;
|
||||
sound-name-prefix = "dmic0";
|
||||
status = "okay";
|
||||
|
||||
port {
|
||||
dmic0_endpoint: endpoint {
|
||||
remote-endpoint = <&dfsdm_endpoint0>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
dmic1: dmic-1 {
|
||||
compatible = "dmic-codec";
|
||||
#sound-dai-cells = <1>;
|
||||
sound-name-prefix = "dmic1";
|
||||
status = "okay";
|
||||
|
||||
port {
|
||||
dmic1_endpoint: endpoint {
|
||||
remote-endpoint = <&dfsdm_endpoint1>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
dmic2: dmic-2 {
|
||||
compatible = "dmic-codec";
|
||||
#sound-dai-cells = <1>;
|
||||
sound-name-prefix = "dmic2";
|
||||
status = "okay";
|
||||
|
||||
port {
|
||||
dmic2_endpoint: endpoint {
|
||||
remote-endpoint = <&dfsdm_endpoint2>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
dmic3: dmic-3 {
|
||||
compatible = "dmic-codec";
|
||||
#sound-dai-cells = <1>;
|
||||
sound-name-prefix = "dmic3";
|
||||
status = "okay";
|
||||
|
||||
port {
|
||||
dmic3_endpoint: endpoint {
|
||||
remote-endpoint = <&dfsdm_endpoint3>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
&cec {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&cec_pins_a>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&dcmi {
|
||||
status = "okay";
|
||||
pinctrl-names = "default", "sleep";
|
||||
pinctrl-0 = <&dcmi_pins_a>;
|
||||
pinctrl-1 = <&dcmi_sleep_pins_a>;
|
||||
|
||||
port {
|
||||
dcmi_0: endpoint {
|
||||
remote-endpoint = <&ov5640_0>;
|
||||
bus-type = <5>;
|
||||
bus-width = <8>;
|
||||
hsync-active = <0>;
|
||||
vsync-active = <0>;
|
||||
pclk-sample = <1>;
|
||||
pclk-max-frequency = <77000000>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&dfsdm {
|
||||
pinctrl-names = "default", "sleep";
|
||||
pinctrl-0 = <&dfsdm_clkout_pins_a
|
||||
&dfsdm_data1_pins_a &dfsdm_data3_pins_a>;
|
||||
pinctrl-1 = <&dfsdm_clkout_sleep_pins_a
|
||||
&dfsdm_data1_sleep_pins_a &dfsdm_data3_sleep_pins_a>;
|
||||
spi-max-frequency = <2048000>;
|
||||
|
||||
clocks = <&rcc DFSDM_K>, <&rcc ADFSDM_K>;
|
||||
clock-names = "dfsdm", "audio";
|
||||
status = "okay";
|
||||
|
||||
dfsdm0: filter@0 {
|
||||
compatible = "st,stm32-dfsdm-dmic";
|
||||
st,adc-channels = <3>;
|
||||
st,adc-channel-names = "dmic_u1";
|
||||
st,adc-channel-types = "SPI_R";
|
||||
st,adc-channel-clk-src = "CLKOUT";
|
||||
st,filter-order = <3>;
|
||||
status = "okay";
|
||||
|
||||
asoc_pdm0: dfsdm-dai {
|
||||
compatible = "st,stm32h7-dfsdm-dai";
|
||||
#sound-dai-cells = <0>;
|
||||
io-channels = <&dfsdm0 0>;
|
||||
status = "okay";
|
||||
|
||||
dfsdm0_port: port {
|
||||
dfsdm_endpoint0: endpoint {
|
||||
remote-endpoint = <&dmic0_endpoint>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
dfsdm1: filter@1 {
|
||||
compatible = "st,stm32-dfsdm-dmic";
|
||||
st,adc-channels = <0>;
|
||||
st,adc-channel-names = "dmic_u2";
|
||||
st,adc-channel-types = "SPI_F";
|
||||
st,adc-channel-clk-src = "CLKOUT";
|
||||
st,filter-order = <3>;
|
||||
st,adc-alt-channel = <1>;
|
||||
status = "okay";
|
||||
|
||||
asoc_pdm1: dfsdm-dai {
|
||||
compatible = "st,stm32h7-dfsdm-dai";
|
||||
#sound-dai-cells = <0>;
|
||||
io-channels = <&dfsdm1 0>;
|
||||
status = "okay";
|
||||
|
||||
dfsdm1_port: port {
|
||||
dfsdm_endpoint1: endpoint {
|
||||
remote-endpoint = <&dmic1_endpoint>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
dfsdm2: filter@2 {
|
||||
compatible = "st,stm32-dfsdm-dmic";
|
||||
st,adc-channels = <2>;
|
||||
st,adc-channel-names = "dmic_u3";
|
||||
st,adc-channel-types = "SPI_F";
|
||||
st,adc-channel-clk-src = "CLKOUT";
|
||||
st,adc-alt-channel = <1>;
|
||||
st,filter-order = <3>;
|
||||
status = "okay";
|
||||
|
||||
asoc_pdm2: dfsdm-dai {
|
||||
compatible = "st,stm32h7-dfsdm-dai";
|
||||
#sound-dai-cells = <0>;
|
||||
io-channels = <&dfsdm2 0>;
|
||||
status = "okay";
|
||||
|
||||
dfsdm2_port: port {
|
||||
dfsdm_endpoint2: endpoint {
|
||||
remote-endpoint = <&dmic2_endpoint>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
dfsdm3: filter@3 {
|
||||
compatible = "st,stm32-dfsdm-dmic";
|
||||
st,adc-channels = <1>;
|
||||
st,adc-channel-names = "dmic_u4";
|
||||
st,adc-channel-types = "SPI_R";
|
||||
st,adc-channel-clk-src = "CLKOUT";
|
||||
st,filter-order = <3>;
|
||||
status = "okay";
|
||||
|
||||
asoc_pdm3: dfsdm-dai {
|
||||
compatible = "st,stm32h7-dfsdm-dai";
|
||||
#sound-dai-cells = <0>;
|
||||
io-channels = <&dfsdm3 0>;
|
||||
status = "okay";
|
||||
|
||||
dfsdm3_port: port {
|
||||
dfsdm_endpoint3: endpoint {
|
||||
remote-endpoint = <&dmic3_endpoint>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
ðernet0 {
|
||||
status = "okay";
|
||||
pinctrl-0 = <ðernet0_rgmii_pins_a>;
|
||||
pinctrl-1 = <ðernet0_rgmii_sleep_pins_a>;
|
||||
pinctrl-names = "default", "sleep";
|
||||
phy-mode = "rgmii-id";
|
||||
max-speed = <1000>;
|
||||
phy-handle = <&phy0>;
|
||||
|
||||
mdio0 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
compatible = "snps,dwmac-mdio";
|
||||
phy0: ethernet-phy@0 {
|
||||
reg = <0>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&fmc {
|
||||
pinctrl-names = "default", "sleep";
|
||||
pinctrl-0 = <&fmc_pins_a>;
|
||||
pinctrl-1 = <&fmc_sleep_pins_a>;
|
||||
status = "okay";
|
||||
|
||||
nand-controller@4,0 {
|
||||
status = "okay";
|
||||
|
||||
nand@0 {
|
||||
reg = <0>;
|
||||
nand-on-flash-bbt;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&hdp {
|
||||
pinctrl-names = "default", "sleep";
|
||||
pinctrl-0 = <&hdp0_pins_a &hdp6_pins_a &hdp7_pins_a>;
|
||||
pinctrl-1 = <&hdp0_pins_sleep_a &hdp6_pins_sleep_a &hdp7_pins_sleep_a>;
|
||||
status = "disabled";
|
||||
|
||||
muxing-hdp = <(STM32_HDP(0, HDP0_GPOVAL_0) |
|
||||
STM32_HDP(6, HDP6_GPOVAL_6) |
|
||||
STM32_HDP(7, HDP7_GPOVAL_7))>;
|
||||
};
|
||||
|
||||
&i2c2 {
|
||||
pinctrl-names = "default", "sleep";
|
||||
pinctrl-0 = <&i2c2_pins_a>;
|
||||
pinctrl-1 = <&i2c2_sleep_pins_a>;
|
||||
i2c-scl-rising-time-ns = <185>;
|
||||
i2c-scl-falling-time-ns = <20>;
|
||||
status = "okay";
|
||||
/delete-property/dmas;
|
||||
/delete-property/dma-names;
|
||||
|
||||
wm8994: wm8994@1b {
|
||||
compatible = "wlf,wm8994";
|
||||
#sound-dai-cells = <0>;
|
||||
reg = <0x1b>;
|
||||
status = "okay";
|
||||
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
|
||||
DBVDD-supply = <&vdd>;
|
||||
SPKVDD1-supply = <&vdd>;
|
||||
SPKVDD2-supply = <&vdd>;
|
||||
AVDD2-supply = <&v1v8>;
|
||||
CPVDD-supply = <&v1v8>;
|
||||
|
||||
wlf,ldoena-always-driven;
|
||||
|
||||
clocks = <&sai2a>;
|
||||
clock-names = "MCLK1";
|
||||
|
||||
wlf,gpio-cfg = <0x8101 0xa100 0xa100 0xa100 0xa101 0xa101 0xa100 0xa101 0xa101 0xa101 0xa101>;
|
||||
|
||||
ports {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
wm8994_tx_port: port@0 {
|
||||
reg = <0>;
|
||||
wm8994_tx_endpoint: endpoint {
|
||||
remote-endpoint = <&sai2a_endpoint>;
|
||||
};
|
||||
};
|
||||
|
||||
wm8994_rx_port: port@1 {
|
||||
reg = <1>;
|
||||
wm8994_rx_endpoint: endpoint {
|
||||
remote-endpoint = <&sai2b_endpoint>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
ov5640: camera@3c {
|
||||
compatible = "ovti,ov5640";
|
||||
reg = <0x3c>;
|
||||
clocks = <&clk_ext_camera>;
|
||||
clock-names = "xclk";
|
||||
DOVDD-supply = <&v2v8>;
|
||||
powerdown-gpios = <&stmfx_pinctrl 18 (GPIO_ACTIVE_HIGH | GPIO_PUSH_PULL)>;
|
||||
reset-gpios = <&stmfx_pinctrl 19 (GPIO_ACTIVE_LOW | GPIO_PUSH_PULL)>;
|
||||
rotation = <180>;
|
||||
status = "okay";
|
||||
|
||||
port {
|
||||
ov5640_0: endpoint {
|
||||
remote-endpoint = <&dcmi_0>;
|
||||
bus-width = <8>;
|
||||
data-shift = <2>; /* lines 9:2 are used */
|
||||
hsync-active = <0>;
|
||||
vsync-active = <0>;
|
||||
pclk-sample = <1>;
|
||||
pclk-max-frequency = <77000000>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
stmfx: stmfx@42 {
|
||||
compatible = "st,stmfx-0300";
|
||||
reg = <0x42>;
|
||||
interrupts = <8 IRQ_TYPE_EDGE_RISING>;
|
||||
interrupt-parent = <&gpioi>;
|
||||
vdd-supply = <&v3v3>;
|
||||
|
||||
stmfx_pinctrl: pinctrl {
|
||||
compatible = "st,stmfx-0300-pinctrl";
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <2>;
|
||||
gpio-ranges = <&stmfx_pinctrl 0 0 24>;
|
||||
|
||||
goodix_pins: goodix {
|
||||
pins = "gpio14";
|
||||
bias-pull-down;
|
||||
};
|
||||
|
||||
joystick_pins: joystick-pins {
|
||||
pins = "gpio0", "gpio1", "gpio2", "gpio3", "gpio4";
|
||||
bias-pull-down;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&i2c4 {
|
||||
pmic: stpmic@33 {
|
||||
regulators {
|
||||
v1v8: ldo6 {
|
||||
regulator-enable-ramp-delay = <300000>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&i2c5 {
|
||||
pinctrl-names = "default", "sleep";
|
||||
pinctrl-0 = <&i2c5_pins_a>;
|
||||
pinctrl-1 = <&i2c5_sleep_pins_a>;
|
||||
i2c-scl-rising-time-ns = <185>;
|
||||
i2c-scl-falling-time-ns = <20>;
|
||||
/delete-property/dmas;
|
||||
/delete-property/dma-names;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&m_can1 {
|
||||
pinctrl-names = "default", "sleep";
|
||||
pinctrl-0 = <&m_can1_pins_a>;
|
||||
pinctrl-1 = <&m_can1_sleep_pins_a>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&qspi {
|
||||
pinctrl-names = "default", "sleep";
|
||||
pinctrl-0 = <&qspi_clk_pins_a &qspi_bk1_pins_a &qspi_bk2_pins_a>;
|
||||
pinctrl-1 = <&qspi_clk_sleep_pins_a &qspi_bk1_sleep_pins_a &qspi_bk2_sleep_pins_a>;
|
||||
reg = <0x58003000 0x1000>, <0x70000000 0x4000000>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
status = "okay";
|
||||
|
||||
flash0: mx66l51235l@0 {
|
||||
compatible = "jedec,spi-nor";
|
||||
reg = <0>;
|
||||
spi-rx-bus-width = <4>;
|
||||
spi-max-frequency = <108000000>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
};
|
||||
|
||||
flash1: mx66l51235l@1 {
|
||||
compatible = "jedec,spi-nor";
|
||||
reg = <1>;
|
||||
spi-rx-bus-width = <4>;
|
||||
spi-max-frequency = <108000000>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
};
|
||||
};
|
||||
|
||||
&sai2 {
|
||||
clocks = <&rcc SAI2>, <&rcc PLL3_Q>, <&rcc PLL3_R>;
|
||||
pinctrl-names = "default", "sleep";
|
||||
pinctrl-0 = <&sai2a_pins_a>, <&sai2b_pins_a>;
|
||||
pinctrl-1 = <&sai2a_sleep_pins_a>, <&sai2b_sleep_pins_a>;
|
||||
clock-names = "pclk", "x8k", "x11k";
|
||||
status = "okay";
|
||||
|
||||
sai2a: audio-controller@4400b004 {
|
||||
#clock-cells = <0>;
|
||||
dma-names = "tx";
|
||||
status = "okay";
|
||||
|
||||
sai2a_port: port {
|
||||
sai2a_endpoint: endpoint {
|
||||
remote-endpoint = <&wm8994_tx_endpoint>;
|
||||
format = "i2s";
|
||||
mclk-fs = <256>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
sai2b: audio-controller@4400b024 {
|
||||
dma-names = "rx";
|
||||
clocks = <&rcc SAI2_K>, <&sai2a>;
|
||||
clock-names = "sai_ck", "MCLK";
|
||||
status = "okay";
|
||||
|
||||
sai2b_port: port {
|
||||
sai2b_endpoint: endpoint {
|
||||
remote-endpoint = <&wm8994_rx_endpoint>;
|
||||
format = "i2s";
|
||||
mclk-fs = <256>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&sai4 {
|
||||
clocks = <&rcc SAI4>, <&rcc PLL3_Q>, <&rcc PLL3_R>;
|
||||
clock-names = "pclk", "x8k", "x11k";
|
||||
status = "okay";
|
||||
|
||||
sai4a: audio-controller@50027004 {
|
||||
pinctrl-names = "default", "sleep";
|
||||
pinctrl-0 = <&sai4a_pins_a>;
|
||||
pinctrl-1 = <&sai4a_sleep_pins_a>;
|
||||
dma-names = "tx";
|
||||
st,iec60958;
|
||||
status = "okay";
|
||||
|
||||
sai4a_port: port {
|
||||
sai4a_endpoint: endpoint {
|
||||
remote-endpoint = <&spdif_out_endpoint>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&sdmmc3 {
|
||||
pinctrl-names = "default", "opendrain", "sleep";
|
||||
pinctrl-0 = <&sdmmc3_b4_pins_a>;
|
||||
pinctrl-1 = <&sdmmc3_b4_od_pins_a>;
|
||||
pinctrl-2 = <&sdmmc3_b4_sleep_pins_a>;
|
||||
broken-cd;
|
||||
st,neg-edge;
|
||||
bus-width = <4>;
|
||||
vmmc-supply = <&v3v3>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&spdifrx {
|
||||
pinctrl-names = "default", "sleep";
|
||||
pinctrl-0 = <&spdifrx_pins_a>;
|
||||
pinctrl-1 = <&spdifrx_sleep_pins_a>;
|
||||
status = "okay";
|
||||
|
||||
spdifrx_port: port {
|
||||
spdifrx_endpoint: endpoint {
|
||||
remote-endpoint = <&spdif_in_endpoint>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&spi1 {
|
||||
pinctrl-names = "default", "sleep";
|
||||
pinctrl-0 = <&spi1_pins_a>;
|
||||
pinctrl-1 = <&spi1_sleep_pins_a>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&timers2 {
|
||||
/* spare dmas for other usage (un-delete to enable pwm capture) */
|
||||
/delete-property/dmas;
|
||||
/delete-property/dma-names;
|
||||
status = "disabled";
|
||||
pwm {
|
||||
pinctrl-0 = <&pwm2_pins_a>;
|
||||
pinctrl-1 = <&pwm2_sleep_pins_a>;
|
||||
pinctrl-names = "default", "sleep";
|
||||
status = "okay";
|
||||
};
|
||||
timer@1 {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
&timers8 {
|
||||
/delete-property/dmas;
|
||||
/delete-property/dma-names;
|
||||
status = "disabled";
|
||||
pwm {
|
||||
pinctrl-0 = <&pwm8_pins_a>;
|
||||
pinctrl-1 = <&pwm8_sleep_pins_a>;
|
||||
pinctrl-names = "default", "sleep";
|
||||
status = "okay";
|
||||
};
|
||||
timer@7 {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
&timers12 {
|
||||
/delete-property/dmas;
|
||||
/delete-property/dma-names;
|
||||
status = "disabled";
|
||||
pwm {
|
||||
pinctrl-0 = <&pwm12_pins_a>;
|
||||
pinctrl-1 = <&pwm12_sleep_pins_a>;
|
||||
pinctrl-names = "default", "sleep";
|
||||
status = "okay";
|
||||
};
|
||||
timer@11 {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
&usart3 {
|
||||
pinctrl-names = "default", "sleep", "idle";
|
||||
pinctrl-0 = <&usart3_pins_b>;
|
||||
pinctrl-1 = <&usart3_sleep_pins_b>;
|
||||
pinctrl-2 = <&usart3_idle_pins_b>;
|
||||
/*
|
||||
* HW flow control USART3_RTS is optional, and isn't default wired to
|
||||
* the connector. SB23 needs to be soldered in order to use it, and R77
|
||||
* (ETH_CLK) should be removed.
|
||||
*/
|
||||
uart-has-rtscts;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&usbh_ehci {
|
||||
phys = <&usbphyc_port0>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usbotg_hs {
|
||||
pinctrl-0 = <&usbotg_hs_pins_a>;
|
||||
pinctrl-names = "default";
|
||||
phys = <&usbphyc_port1 0>;
|
||||
phy-names = "usb2-phy";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usbphyc {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usbphyc_port0 {
|
||||
st,tune-hs-dc-level = <2>;
|
||||
st,enable-fs-rftime-tuning;
|
||||
st,enable-hs-rftime-reduction;
|
||||
st,trim-hs-current = <15>;
|
||||
st,trim-hs-impedance = <1>;
|
||||
st,tune-squelch-level = <3>;
|
||||
st,tune-hs-rx-offset = <2>;
|
||||
st,no-lsfs-sc;
|
||||
|
||||
/*
|
||||
* Hack to keep hub active until all connected devices are suspended
|
||||
* otherwise the hub will be powered off as soon as the v3v3 is disabled
|
||||
* and it can disturb connected devices.
|
||||
*/
|
||||
connector {
|
||||
compatible = "usb-a-connector";
|
||||
vbus-supply = <&v3v3>;
|
||||
};
|
||||
};
|
||||
|
||||
&usbphyc_port1 {
|
||||
st,tune-hs-dc-level = <2>;
|
||||
st,enable-fs-rftime-tuning;
|
||||
st,enable-hs-rftime-reduction;
|
||||
st,trim-hs-current = <15>;
|
||||
st,trim-hs-impedance = <1>;
|
||||
st,tune-squelch-level = <3>;
|
||||
st,tune-hs-rx-offset = <2>;
|
||||
st,no-lsfs-sc;
|
||||
};
|
||||
@ -1,15 +0,0 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0+ */
|
||||
/*
|
||||
* (C) Copyright 2011
|
||||
* Yuri Tikhonov, Emcraft Systems, yur@emcraft.com
|
||||
*
|
||||
* (C) Copyright 2015
|
||||
* Kamil Lulko, <kamil.lulko@gmail.com>
|
||||
*/
|
||||
|
||||
#ifndef _STM32_GPIO_H_
|
||||
#define _STM32_GPIO_H_
|
||||
|
||||
#include <asm/arch-stm32/gpio.h>
|
||||
|
||||
#endif /* _STM32_GPIO_H_ */
|
||||
@ -1,12 +0,0 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0+ */
|
||||
/*
|
||||
* Copyright (C) 2016, STMicroelectronics - All Rights Reserved
|
||||
* Author(s): Vikas Manocha, <vikas.manocha@st.com> for STMicroelectronics.
|
||||
*/
|
||||
|
||||
#ifndef _STM32_GPIO_H_
|
||||
#define _STM32_GPIO_H_
|
||||
|
||||
#include <asm/arch-stm32/gpio.h>
|
||||
|
||||
#endif /* _STM32_GPIO_H_ */
|
||||
@ -1,12 +0,0 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0+ */
|
||||
/*
|
||||
* Copyright (C) 2017, STMicroelectronics - All Rights Reserved
|
||||
* Author(s): Patrice Chotard, <patrice.chotard@foss.st.com> for STMicroelectronics.
|
||||
*/
|
||||
|
||||
#ifndef _STM32_GPIO_H_
|
||||
#define _STM32_GPIO_H_
|
||||
|
||||
#include <asm/arch-stm32/gpio.h>
|
||||
|
||||
#endif /* _STM32_GPIO_H_ */
|
||||
@ -36,7 +36,7 @@ struct gpt_regs *const gpt1_regs_ptr =
|
||||
#define GPT_FREE_RUNNING 0xFFFF
|
||||
|
||||
/* Timer, HZ specific defines */
|
||||
#define CONFIG_STV0991_HZ 1000
|
||||
#define CONFIG_STV0991_HZ_CLOCK (27*1000*1000)/GPT_PRESCALER_128
|
||||
#define CONFIG_SYS_HZ 1000
|
||||
#define CONFIG_SYS_HZ_CLOCK ((27 * 1000 * 1000) / GPT_PRESCALER_128)
|
||||
|
||||
#endif
|
||||
|
||||
@ -33,12 +33,15 @@ config SYS_MALLOC_LEN
|
||||
config ENV_SIZE
|
||||
default 0x2000
|
||||
|
||||
config STM32MP15x
|
||||
bool "Support STMicroelectronics STM32MP15x Soc"
|
||||
select ARCH_SUPPORT_PSCI if !TFABOOT
|
||||
select ARM_SMCCC if TFABOOT
|
||||
choice
|
||||
prompt "Select STMicroelectronics STM32MPxxx Soc"
|
||||
default STM32MP15x
|
||||
|
||||
config STM32MP13x
|
||||
bool "Support STMicroelectronics STM32MP13x Soc"
|
||||
select ARM_SMCCC
|
||||
select CPU_V7A
|
||||
select CPU_V7_HAS_NONSEC if !TFABOOT
|
||||
select CPU_V7_HAS_NONSEC
|
||||
select CPU_V7_HAS_VIRT
|
||||
select OF_BOARD_SETUP
|
||||
select PINCTRL_STM32
|
||||
@ -47,113 +50,37 @@ config STM32MP15x
|
||||
select STM32_SERIAL
|
||||
select SYS_ARCH_TIMER
|
||||
imply CMD_NVEDIT_INFO
|
||||
imply SYSRESET_PSCI if TFABOOT
|
||||
imply SYSRESET_SYSCON if !TFABOOT
|
||||
help
|
||||
support of STMicroelectronics SOC STM32MP13x family
|
||||
STMicroelectronics MPU with core ARMv7
|
||||
|
||||
config STM32MP15x
|
||||
bool "Support STMicroelectronics STM32MP15x Soc"
|
||||
select ARCH_SUPPORT_PSCI
|
||||
select BINMAN
|
||||
select CPU_V7A
|
||||
select CPU_V7_HAS_NONSEC
|
||||
select CPU_V7_HAS_VIRT
|
||||
select OF_BOARD_SETUP
|
||||
select PINCTRL_STM32
|
||||
select STM32_RCC
|
||||
select STM32_RESET
|
||||
select STM32_SERIAL
|
||||
select SUPPORT_SPL
|
||||
select SYS_ARCH_TIMER
|
||||
imply CMD_NVEDIT_INFO
|
||||
help
|
||||
support of STMicroelectronics SOC STM32MP15x family
|
||||
STM32MP157, STM32MP153 or STM32MP151
|
||||
STMicroelectronics MPU with core ARMv7
|
||||
dual core A7 for STM32MP157/3, monocore for STM32MP151
|
||||
target all the STMicroelectronics board with SOC STM32MP1 family
|
||||
|
||||
config STM32MP15x_STM32IMAGE
|
||||
bool "Support STM32 image for generated U-Boot image"
|
||||
depends on STM32MP15x && TFABOOT
|
||||
help
|
||||
Support of STM32 image generation for SOC STM32MP15x
|
||||
for TF-A boot when FIP container is not used
|
||||
|
||||
choice
|
||||
prompt "STM32MP15x board select"
|
||||
optional
|
||||
|
||||
config TARGET_ST_STM32MP15x
|
||||
bool "STMicroelectronics STM32MP15x boards"
|
||||
select STM32MP15x
|
||||
imply BOOTCOUNT_LIMIT
|
||||
imply BOOTSTAGE
|
||||
imply CMD_BOOTCOUNT
|
||||
imply CMD_BOOTSTAGE
|
||||
imply CMD_CLS if CMD_BMP
|
||||
imply DISABLE_CONSOLE
|
||||
imply PRE_CONSOLE_BUFFER
|
||||
imply SILENT_CONSOLE
|
||||
help
|
||||
target the STMicroelectronics board with SOC STM32MP15x
|
||||
managed by board/st/stm32mp1:
|
||||
Evalulation board (EV1) or Discovery board (DK1 and DK2).
|
||||
The difference between board are managed with devicetree
|
||||
|
||||
config TARGET_MICROGEA_STM32MP1
|
||||
bool "Engicam MicroGEA STM32MP1 SOM"
|
||||
select STM32MP15x
|
||||
imply BOOTCOUNT_LIMIT
|
||||
imply BOOTSTAGE
|
||||
imply CMD_BOOTCOUNT
|
||||
imply CMD_BOOTSTAGE
|
||||
imply CMD_CLS if CMD_BMP
|
||||
imply DISABLE_CONSOLE
|
||||
imply PRE_CONSOLE_BUFFER
|
||||
imply SILENT_CONSOLE
|
||||
help
|
||||
MicroGEA STM32MP1 is a STM32MP157A based Micro SOM.
|
||||
|
||||
MicroGEA STM32MP1 MicroDev 2.0:
|
||||
* MicroDev 2.0 is a general purpose miniature carrier board with CAN,
|
||||
LTE and LVDS panel interfaces.
|
||||
* MicroGEA STM32MP1 needs to mount on top of this MicroDev 2.0 board
|
||||
for creating complete MicroGEA STM32MP1 MicroDev 2.0 Carrier board.
|
||||
|
||||
MicroGEA STM32MP1 MicroDev 2.0 7" OF:
|
||||
* 7" OF is a capacitive touch 7" Open Frame panel solutions with LVDS
|
||||
panel and toucscreen.
|
||||
* MicroGEA STM32MP1 needs to mount on top of MicroDev 2.0 board with
|
||||
pluged 7" OF for creating complete MicroGEA STM32MP1 MicroDev 2.0 7"
|
||||
Open Frame Solution board.
|
||||
|
||||
config TARGET_ICORE_STM32MP1
|
||||
bool "Engicam i.Core STM32MP1 SOM"
|
||||
select STM32MP15x
|
||||
imply BOOTCOUNT_LIMIT
|
||||
imply BOOTSTAGE
|
||||
imply CMD_BOOTCOUNT
|
||||
imply CMD_BOOTSTAGE
|
||||
imply CMD_CLS if CMD_BMP
|
||||
imply DISABLE_CONSOLE
|
||||
imply PRE_CONSOLE_BUFFER
|
||||
imply SILENT_CONSOLE
|
||||
help
|
||||
i.Core STM32MP1 is an EDIMM SOM based on STM32MP157A.
|
||||
|
||||
i.Core STM32MP1 EDIMM2.2:
|
||||
* EDIMM2.2 is a Form Factor Capacitive Evaluation Board.
|
||||
* i.Core STM32MP1 needs to mount on top of EDIMM2.2 for
|
||||
creating complete i.Core STM32MP1 EDIMM2.2 Starter Kit.
|
||||
|
||||
i.Core STM32MP1 C.TOUCH 2.0
|
||||
* C.TOUCH 2.0 is a general purpose Carrier board.
|
||||
* i.Core STM32MP1 needs to mount on top of this Carrier board
|
||||
for creating complete i.Core STM32MP1 C.TOUCH 2.0 board.
|
||||
|
||||
config TARGET_DH_STM32MP1_PDK2
|
||||
bool "DH STM32MP1 PDK2"
|
||||
select STM32MP15x
|
||||
imply BOOTCOUNT_LIMIT
|
||||
imply CMD_BOOTCOUNT
|
||||
help
|
||||
Target the DH PDK2 development kit with STM32MP15x SoM.
|
||||
|
||||
endchoice
|
||||
|
||||
config SYS_TEXT_BASE
|
||||
default 0xC0100000
|
||||
|
||||
config NR_DRAM_BANKS
|
||||
default 1
|
||||
|
||||
config DDR_CACHEABLE_SIZE
|
||||
hex "Size of the DDR marked cacheable in pre-reloc stage"
|
||||
default 0x10000000 if TFABOOT
|
||||
default 0x40000000
|
||||
help
|
||||
Define the size of the DDR marked as cacheable in U-Boot
|
||||
@ -174,7 +101,7 @@ config SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION_MMC2
|
||||
|
||||
config STM32_ETZPC
|
||||
bool "STM32 Extended TrustZone Protection"
|
||||
depends on STM32MP15x
|
||||
depends on STM32MP15x || STM32MP13x
|
||||
default y
|
||||
help
|
||||
Say y to enable STM32 Extended TrustZone Protection
|
||||
@ -197,41 +124,8 @@ config CMD_STM32KEY
|
||||
This command is used to evaluate the secure boot on stm32mp SOC,
|
||||
it is deactivated by default in real products.
|
||||
|
||||
config PRE_CON_BUF_ADDR
|
||||
default 0xC02FF000
|
||||
|
||||
config PRE_CON_BUF_SZ
|
||||
default 4096
|
||||
|
||||
config BOOTSTAGE_STASH_ADDR
|
||||
default 0xC3000000
|
||||
|
||||
if BOOTCOUNT_LIMIT
|
||||
config SYS_BOOTCOUNT_SINGLEWORD
|
||||
default y
|
||||
|
||||
# TAMP_BOOTCOUNT = TAMP_BACKUP_REGISTER(21)
|
||||
config SYS_BOOTCOUNT_ADDR
|
||||
default 0x5C00A154
|
||||
endif
|
||||
|
||||
if DEBUG_UART
|
||||
|
||||
config DEBUG_UART_BOARD_INIT
|
||||
default y
|
||||
|
||||
# debug on UART4 by default
|
||||
config DEBUG_UART_BASE
|
||||
default 0x40010000
|
||||
|
||||
# clock source is HSI on reset
|
||||
config DEBUG_UART_CLOCK
|
||||
default 64000000
|
||||
endif
|
||||
source "arch/arm/mach-stm32mp/Kconfig.13x"
|
||||
source "arch/arm/mach-stm32mp/Kconfig.15x"
|
||||
|
||||
source "arch/arm/mach-stm32mp/cmd_stm32prog/Kconfig"
|
||||
source "board/dhelectronics/dh_stm32mp1/Kconfig"
|
||||
source "board/engicam/stm32mp1/Kconfig"
|
||||
source "board/st/stm32mp1/Kconfig"
|
||||
|
||||
endif
|
||||
|
||||
57
arch/arm/mach-stm32mp/Kconfig.13x
Normal file
57
arch/arm/mach-stm32mp/Kconfig.13x
Normal file
@ -0,0 +1,57 @@
|
||||
if STM32MP13x
|
||||
|
||||
choice
|
||||
prompt "STM32MP13x board select"
|
||||
optional
|
||||
|
||||
config TARGET_ST_STM32MP13x
|
||||
bool "STMicroelectronics STM32MP13x boards"
|
||||
imply BOOTSTAGE
|
||||
imply CMD_BOOTSTAGE
|
||||
imply CMD_CLS if CMD_BMP
|
||||
imply DISABLE_CONSOLE
|
||||
imply PRE_CONSOLE_BUFFER
|
||||
imply SILENT_CONSOLE
|
||||
help
|
||||
target the STMicroelectronics board with SOC STM32MP13x
|
||||
managed by board/st/stm32mp1.
|
||||
The difference between board are managed with devicetree
|
||||
|
||||
endchoice
|
||||
|
||||
config SYS_TEXT_BASE
|
||||
default 0xC0000000
|
||||
|
||||
config PRE_CON_BUF_ADDR
|
||||
default 0xC0800000
|
||||
|
||||
config PRE_CON_BUF_SZ
|
||||
default 4096
|
||||
|
||||
config BOOTSTAGE_STASH_ADDR
|
||||
default 0xC3000000
|
||||
|
||||
if BOOTCOUNT_GENERIC
|
||||
config SYS_BOOTCOUNT_SINGLEWORD
|
||||
default y
|
||||
|
||||
# TAMP_BOOTCOUNT = TAMP_BACKUP_REGISTER(31)
|
||||
config SYS_BOOTCOUNT_ADDR
|
||||
default 0x5C00A17C
|
||||
endif
|
||||
|
||||
if DEBUG_UART
|
||||
|
||||
# debug on UART4 by default
|
||||
config DEBUG_UART_BASE
|
||||
default 0x40010000
|
||||
|
||||
# clock source is HSI on reset
|
||||
config DEBUG_UART_CLOCK
|
||||
default 48000000 if STM32_FPGA
|
||||
default 64000000
|
||||
endif
|
||||
|
||||
source "board/st/stm32mp1/Kconfig"
|
||||
|
||||
endif
|
||||
134
arch/arm/mach-stm32mp/Kconfig.15x
Normal file
134
arch/arm/mach-stm32mp/Kconfig.15x
Normal file
@ -0,0 +1,134 @@
|
||||
if STM32MP15x
|
||||
|
||||
config STM32MP15x_STM32IMAGE
|
||||
bool "Support STM32 image for generated U-Boot image"
|
||||
depends on TFABOOT
|
||||
help
|
||||
Support of STM32 image generation for SOC STM32MP15x
|
||||
for TF-A boot when FIP container is not used
|
||||
|
||||
choice
|
||||
prompt "STM32MP15x board select"
|
||||
optional
|
||||
|
||||
config TARGET_ST_STM32MP15x
|
||||
bool "STMicroelectronics STM32MP15x boards"
|
||||
imply BOOTSTAGE
|
||||
imply CMD_BOOTSTAGE
|
||||
imply CMD_CLS if CMD_BMP
|
||||
imply DISABLE_CONSOLE
|
||||
imply PRE_CONSOLE_BUFFER
|
||||
imply SILENT_CONSOLE
|
||||
help
|
||||
target the STMicroelectronics board with SOC STM32MP15x
|
||||
managed by board/st/stm32mp1:
|
||||
Evalulation board (EV1) or Discovery board (DK1 and DK2).
|
||||
The difference between board are managed with devicetree
|
||||
|
||||
config TARGET_DH_STM32MP1_PDK2
|
||||
bool "DH STM32MP1 PDK2"
|
||||
help
|
||||
Target the DH PDK2 development kit with STM32MP15x SoM.
|
||||
|
||||
config TARGET_MICROGEA_STM32MP1
|
||||
bool "Engicam MicroGEA STM32MP1 SOM"
|
||||
imply BOOTSTAGE
|
||||
imply CMD_BOOTSTAGE
|
||||
imply CMD_CLS if CMD_BMP
|
||||
imply DISABLE_CONSOLE
|
||||
imply PRE_CONSOLE_BUFFER
|
||||
imply SILENT_CONSOLE
|
||||
help
|
||||
MicroGEA STM32MP1 is a STM32MP157A based Micro SOM.
|
||||
|
||||
MicroGEA STM32MP1 MicroDev 2.0:
|
||||
* MicroDev 2.0 is a general purpose miniature carrier board with CAN,
|
||||
LTE and LVDS panel interfaces.
|
||||
* MicroGEA STM32MP1 needs to mount on top of this MicroDev 2.0 board
|
||||
for creating complete MicroGEA STM32MP1 MicroDev 2.0 Carrier board.
|
||||
|
||||
MicroGEA STM32MP1 MicroDev 2.0 7" OF:
|
||||
* 7" OF is a capacitive touch 7" Open Frame panel solutions with LVDS
|
||||
panel and toucscreen.
|
||||
* MicroGEA STM32MP1 needs to mount on top of MicroDev 2.0 board with
|
||||
pluged 7" OF for creating complete MicroGEA STM32MP1 MicroDev 2.0 7"
|
||||
Open Frame Solution board.
|
||||
|
||||
config TARGET_ICORE_STM32MP1
|
||||
bool "Engicam i.Core STM32MP1 SOM"
|
||||
imply BOOTSTAGE
|
||||
imply CMD_BOOTSTAGE
|
||||
imply CMD_CLS if CMD_BMP
|
||||
imply DISABLE_CONSOLE
|
||||
imply PRE_CONSOLE_BUFFER
|
||||
imply SILENT_CONSOLE
|
||||
help
|
||||
i.Core STM32MP1 is an EDIMM SOM based on STM32MP157A.
|
||||
|
||||
i.Core STM32MP1 EDIMM2.2:
|
||||
* EDIMM2.2 is a Form Factor Capacitive Evaluation Board.
|
||||
* i.Core STM32MP1 needs to mount on top of EDIMM2.2 for
|
||||
creating complete i.Core STM32MP1 EDIMM2.2 Starter Kit.
|
||||
|
||||
i.Core STM32MP1 C.TOUCH 2.0
|
||||
* C.TOUCH 2.0 is a general purpose Carrier board.
|
||||
* i.Core STM32MP1 needs to mount on top of this Carrier board
|
||||
for creating complete i.Core STM32MP1 C.TOUCH 2.0 board.
|
||||
|
||||
endchoice
|
||||
|
||||
config STM32MP15_PWR
|
||||
bool "Enable driver for STM32MP15x PWR"
|
||||
depends on DM_REGULATOR && DM_PMIC
|
||||
default y
|
||||
help
|
||||
This config enables implementation of driver-model pmic and
|
||||
regulator uclass features for access to STM32MP15x PWR.
|
||||
|
||||
config SPL_STM32MP15_PWR
|
||||
bool "Enable driver for STM32MP15x PWR in SPL"
|
||||
depends on SPL && SPL_DM_REGULATOR && SPL_DM_PMIC
|
||||
default y
|
||||
help
|
||||
This config enables implementation of driver-model pmic and
|
||||
regulator uclass features for access to STM32MP15x PWR in SPL.
|
||||
config SYS_TEXT_BASE
|
||||
default 0xC0100000
|
||||
|
||||
config PRE_CON_BUF_ADDR
|
||||
default 0xC02FF000
|
||||
|
||||
config PRE_CON_BUF_SZ
|
||||
default 4096
|
||||
|
||||
config BOOTSTAGE_STASH_ADDR
|
||||
default 0xC3000000
|
||||
|
||||
if BOOTCOUNT_GENERIC
|
||||
config SYS_BOOTCOUNT_SINGLEWORD
|
||||
default y
|
||||
|
||||
# TAMP_BOOTCOUNT = TAMP_BACKUP_REGISTER(21)
|
||||
config SYS_BOOTCOUNT_ADDR
|
||||
default 0x5C00A154
|
||||
endif
|
||||
|
||||
if DEBUG_UART
|
||||
|
||||
config DEBUG_UART_BOARD_INIT
|
||||
default y
|
||||
|
||||
# debug on UART4 by default
|
||||
config DEBUG_UART_BASE
|
||||
default 0x40010000
|
||||
|
||||
# clock source is HSI on reset
|
||||
config DEBUG_UART_CLOCK
|
||||
default 64000000
|
||||
endif
|
||||
|
||||
source "board/st/stm32mp1/Kconfig"
|
||||
source "board/dhelectronics/dh_stm32mp1/Kconfig"
|
||||
source "board/engicam/stm32mp1/Kconfig"
|
||||
|
||||
endif
|
||||
@ -8,6 +8,9 @@ obj-y += dram_init.o
|
||||
obj-y += syscon.o
|
||||
obj-y += bsec.o
|
||||
|
||||
obj-$(CONFIG_STM32MP13x) += stm32mp13x.o
|
||||
obj-$(CONFIG_STM32MP15x) += stm32mp15x.o
|
||||
|
||||
ifdef CONFIG_SPL_BUILD
|
||||
obj-y += spl.o
|
||||
obj-y += tzc400.o
|
||||
@ -19,5 +22,5 @@ obj-$(CONFIG_ARMV7_PSCI) += psci.o
|
||||
obj-$(CONFIG_TFABOOT) += boot_params.o
|
||||
endif
|
||||
|
||||
obj-$(CONFIG_$(SPL_)DM_REGULATOR) += pwr_regulator.o
|
||||
obj-$(CONFIG_$(SPL_)STM32MP15_PWR) += pwr_regulator.o
|
||||
obj-$(CONFIG_OF_SYSTEM_SETUP) += fdt.o
|
||||
|
||||
@ -10,14 +10,17 @@
|
||||
#include <dm.h>
|
||||
#include <log.h>
|
||||
#include <misc.h>
|
||||
#include <tee.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/arch/bsec.h>
|
||||
#include <asm/arch/stm32mp1_smc.h>
|
||||
#include <dm/device.h>
|
||||
#include <dm/device_compat.h>
|
||||
#include <linux/arm-smccc.h>
|
||||
#include <linux/iopoll.h>
|
||||
|
||||
#define BSEC_OTP_MAX_VALUE 95
|
||||
#define BSEC_OTP_UPPER_START 32
|
||||
#define BSEC_TIMEOUT_US 10000
|
||||
|
||||
/* BSEC REGISTER OFFSET (base relative) */
|
||||
@ -41,6 +44,7 @@
|
||||
/* BSEC_CONTROL Register */
|
||||
#define BSEC_READ 0x000
|
||||
#define BSEC_WRITE 0x100
|
||||
#define BSEC_LOCK 0x200
|
||||
|
||||
/* LOCK Register */
|
||||
#define OTP_LOCK_MASK 0x1F
|
||||
@ -61,6 +65,48 @@
|
||||
*/
|
||||
#define BSEC_LOCK_PROGRAM 0x04
|
||||
|
||||
#define PTA_BSEC_UUID { 0x94cf71ad, 0x80e6, 0x40b5, \
|
||||
{ 0xa7, 0xc6, 0x3d, 0xc5, 0x01, 0xeb, 0x28, 0x03 } }
|
||||
|
||||
/*
|
||||
* Read OTP memory
|
||||
*
|
||||
* [in] value a: OTP start offset in byte
|
||||
* b: access type
|
||||
* 0 to read from shadow
|
||||
* 1 to read from fuse
|
||||
* 2 to read lock status
|
||||
* [out] memref buffer: Output buffer to store read values
|
||||
* size: Size of OTP to be read
|
||||
*
|
||||
* Return codes:
|
||||
* TEE_SUCCESS - Invoke command success
|
||||
* TEE_ERROR_BAD_PARAMETERS - Incorrect input param
|
||||
*/
|
||||
#define PTA_BSEC_READ_MEM 0x0 /* Read OTP */
|
||||
|
||||
/*
|
||||
* Write OTP memory
|
||||
*
|
||||
* [in] value a: OTP start offset in byte
|
||||
* b: access type
|
||||
* 0 to write to shadow
|
||||
* 1 to write to fuse
|
||||
* 2 to update the lock status
|
||||
* [in] memref buffer: Input buffer to read values
|
||||
* size: Size of OTP to be written
|
||||
*
|
||||
* Return codes:
|
||||
* TEE_SUCCESS - Invoke command success
|
||||
* TEE_ERROR_BAD_PARAMETERS - Incorrect input param
|
||||
*/
|
||||
#define PTA_BSEC_WRITE_MEM 0x1 /* Write OTP */
|
||||
|
||||
/* value of PTA_BSEC access type = value[in] b */
|
||||
#define SHADOW_ACCESS 0
|
||||
#define FUSE_ACCESS 1
|
||||
#define LOCK_ACCESS 2
|
||||
|
||||
/**
|
||||
* bsec_lock() - manage lock for each type SR/SP/SW
|
||||
* @address: address of bsec IP register
|
||||
@ -160,6 +206,7 @@ static int bsec_power_safmem(u32 base, bool power)
|
||||
|
||||
/**
|
||||
* bsec_shadow_register() - copy safmen otp to bsec data
|
||||
* @dev: bsec IP device
|
||||
* @base: base address of bsec IP
|
||||
* @otp: otp number (0 - BSEC_OTP_MAX_VALUE)
|
||||
* Return: 0 if no error
|
||||
@ -203,6 +250,7 @@ static int bsec_shadow_register(struct udevice *dev, u32 base, u32 otp)
|
||||
|
||||
/**
|
||||
* bsec_read_shadow() - read an otp data value from shadow
|
||||
* @dev: bsec IP device
|
||||
* @base: base address of bsec IP
|
||||
* @val: read value
|
||||
* @otp: otp number (0 - BSEC_OTP_MAX_VALUE)
|
||||
@ -217,6 +265,7 @@ static int bsec_read_shadow(struct udevice *dev, u32 base, u32 *val, u32 otp)
|
||||
|
||||
/**
|
||||
* bsec_write_shadow() - write value in BSEC data register in shadow
|
||||
* @dev: bsec IP device
|
||||
* @base: base address of bsec IP
|
||||
* @val: value to write
|
||||
* @otp: otp number (0 - BSEC_OTP_MAX_VALUE)
|
||||
@ -235,6 +284,7 @@ static int bsec_write_shadow(struct udevice *dev, u32 base, u32 val, u32 otp)
|
||||
|
||||
/**
|
||||
* bsec_program_otp() - program a bit in SAFMEM
|
||||
* @dev: bsec IP device
|
||||
* @base: base address of bsec IP
|
||||
* @val: value to program
|
||||
* @otp: otp number (0 - BSEC_OTP_MAX_VALUE)
|
||||
@ -284,18 +334,82 @@ static int bsec_program_otp(struct udevice *dev, long base, u32 val, u32 otp)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* bsec_permanent_lock_otp() - permanent lock of OTP in SAFMEM
|
||||
* @dev: bsec IP device
|
||||
* @base: base address of bsec IP
|
||||
* @otp: otp number (0 - BSEC_OTP_MAX_VALUE)
|
||||
* Return: 0 if no error
|
||||
*/
|
||||
static int bsec_permanent_lock_otp(struct udevice *dev, long base, uint32_t otp)
|
||||
{
|
||||
int ret;
|
||||
bool power_up = false;
|
||||
u32 val, addr;
|
||||
|
||||
/* check if safemem is power up */
|
||||
if (!(readl(base + BSEC_OTP_STATUS_OFF) & BSEC_MODE_PWR_MASK)) {
|
||||
ret = bsec_power_safmem(base, true);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
power_up = true;
|
||||
}
|
||||
|
||||
/*
|
||||
* low OTPs = 2 bits word for low OTPs, 1 bits per word for upper OTP
|
||||
* and only 16 bits used in WRDATA
|
||||
*/
|
||||
if (otp < BSEC_OTP_UPPER_START) {
|
||||
addr = otp / 8;
|
||||
val = 0x03 << ((otp * 2) & 0xF);
|
||||
} else {
|
||||
addr = BSEC_OTP_UPPER_START / 8 +
|
||||
((otp - BSEC_OTP_UPPER_START) / 16);
|
||||
val = 0x01 << (otp & 0xF);
|
||||
}
|
||||
|
||||
/* set value in write register*/
|
||||
writel(val, base + BSEC_OTP_WRDATA_OFF);
|
||||
|
||||
/* set BSEC_OTP_CTRL_OFF with the otp addr and lock request*/
|
||||
writel(addr | BSEC_WRITE | BSEC_LOCK, base + BSEC_OTP_CTRL_OFF);
|
||||
|
||||
/* check otp status*/
|
||||
ret = readl_poll_timeout(base + BSEC_OTP_STATUS_OFF,
|
||||
val, (val & BSEC_MODE_BUSY_MASK) == 0,
|
||||
BSEC_TIMEOUT_US);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (val & BSEC_MODE_PROGFAIL_MASK)
|
||||
ret = -EACCES;
|
||||
else
|
||||
ret = bsec_check_error(base, otp);
|
||||
|
||||
if (power_up)
|
||||
bsec_power_safmem(base, false);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* BSEC MISC driver *******************************************************/
|
||||
struct stm32mp_bsec_plat {
|
||||
u32 base;
|
||||
};
|
||||
|
||||
struct stm32mp_bsec_privdata {
|
||||
struct udevice *tee;
|
||||
u32 tee_session;
|
||||
};
|
||||
|
||||
static int stm32mp_bsec_read_otp(struct udevice *dev, u32 *val, u32 otp)
|
||||
{
|
||||
struct stm32mp_bsec_plat *plat;
|
||||
u32 tmp_data = 0;
|
||||
int ret;
|
||||
|
||||
if (IS_ENABLED(CONFIG_TFABOOT))
|
||||
if (IS_ENABLED(CONFIG_ARM_SMCCC) && !IS_ENABLED(CONFIG_SPL_BUILD))
|
||||
return stm32_smc(STM32_SMC_BSEC,
|
||||
STM32_SMC_READ_OTP,
|
||||
otp, 0, val);
|
||||
@ -326,7 +440,7 @@ static int stm32mp_bsec_read_shadow(struct udevice *dev, u32 *val, u32 otp)
|
||||
{
|
||||
struct stm32mp_bsec_plat *plat;
|
||||
|
||||
if (IS_ENABLED(CONFIG_TFABOOT))
|
||||
if (IS_ENABLED(CONFIG_ARM_SMCCC) && !IS_ENABLED(CONFIG_SPL_BUILD))
|
||||
return stm32_smc(STM32_SMC_BSEC,
|
||||
STM32_SMC_READ_SHADOW,
|
||||
otp, 0, val);
|
||||
@ -339,9 +453,14 @@ static int stm32mp_bsec_read_shadow(struct udevice *dev, u32 *val, u32 otp)
|
||||
static int stm32mp_bsec_read_lock(struct udevice *dev, u32 *val, u32 otp)
|
||||
{
|
||||
struct stm32mp_bsec_plat *plat = dev_get_plat(dev);
|
||||
u32 wrlock;
|
||||
|
||||
/* return OTP permanent write lock status */
|
||||
*val = bsec_read_lock(plat->base + BSEC_WRLOCK_OFF, otp);
|
||||
wrlock = bsec_read_lock(plat->base + BSEC_WRLOCK_OFF, otp);
|
||||
|
||||
*val = 0;
|
||||
if (wrlock)
|
||||
*val = BSEC_LOCK_PERM;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -350,7 +469,7 @@ static int stm32mp_bsec_write_otp(struct udevice *dev, u32 val, u32 otp)
|
||||
{
|
||||
struct stm32mp_bsec_plat *plat;
|
||||
|
||||
if (IS_ENABLED(CONFIG_TFABOOT))
|
||||
if (IS_ENABLED(CONFIG_ARM_SMCCC) && !IS_ENABLED(CONFIG_SPL_BUILD))
|
||||
return stm32_smc_exec(STM32_SMC_BSEC,
|
||||
STM32_SMC_PROG_OTP,
|
||||
otp, val);
|
||||
@ -365,7 +484,7 @@ static int stm32mp_bsec_write_shadow(struct udevice *dev, u32 val, u32 otp)
|
||||
{
|
||||
struct stm32mp_bsec_plat *plat;
|
||||
|
||||
if (IS_ENABLED(CONFIG_TFABOOT))
|
||||
if (IS_ENABLED(CONFIG_ARM_SMCCC) && !IS_ENABLED(CONFIG_SPL_BUILD))
|
||||
return stm32_smc_exec(STM32_SMC_BSEC,
|
||||
STM32_SMC_WRITE_SHADOW,
|
||||
otp, val);
|
||||
@ -377,27 +496,103 @@ static int stm32mp_bsec_write_shadow(struct udevice *dev, u32 val, u32 otp)
|
||||
|
||||
static int stm32mp_bsec_write_lock(struct udevice *dev, u32 val, u32 otp)
|
||||
{
|
||||
if (!IS_ENABLED(CONFIG_TFABOOT))
|
||||
return -ENOTSUPP;
|
||||
struct stm32mp_bsec_plat *plat;
|
||||
|
||||
if (val == 1)
|
||||
/* only permanent write lock is supported in U-Boot */
|
||||
if (!(val & BSEC_LOCK_PERM)) {
|
||||
dev_dbg(dev, "lock option without BSEC_LOCK_PERM: %x\n", val);
|
||||
return 0; /* nothing to do */
|
||||
}
|
||||
|
||||
if (IS_ENABLED(CONFIG_ARM_SMCCC) && !IS_ENABLED(CONFIG_SPL_BUILD))
|
||||
return stm32_smc_exec(STM32_SMC_BSEC,
|
||||
STM32_SMC_WRLOCK_OTP,
|
||||
otp, 0);
|
||||
if (val == 0)
|
||||
return 0; /* nothing to do */
|
||||
|
||||
return -EINVAL;
|
||||
plat = dev_get_plat(dev);
|
||||
|
||||
return bsec_permanent_lock_otp(dev, plat->base, otp);
|
||||
}
|
||||
|
||||
static int bsec_optee_pta_open(struct udevice *dev)
|
||||
{
|
||||
struct stm32mp_bsec_privdata *priv = dev_get_priv(dev);
|
||||
const struct tee_optee_ta_uuid uuid = PTA_BSEC_UUID;
|
||||
struct tee_open_session_arg arg;
|
||||
struct udevice *tee = NULL;
|
||||
int rc;
|
||||
|
||||
tee = tee_find_device(NULL, NULL, NULL, NULL);
|
||||
if (!tee)
|
||||
return -ENODEV;
|
||||
|
||||
memset(&arg, 0, sizeof(arg));
|
||||
tee_optee_ta_uuid_to_octets(arg.uuid, &uuid);
|
||||
arg.clnt_login = TEE_LOGIN_REE_KERNEL;
|
||||
rc = tee_open_session(tee, &arg, 0, NULL);
|
||||
if (rc < 0)
|
||||
return -ENODEV;
|
||||
|
||||
priv->tee = tee;
|
||||
priv->tee_session = arg.session;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int bsec_optee_pta(struct udevice *dev, int cmd, int type, int offset,
|
||||
void *buff, ulong size)
|
||||
{
|
||||
struct stm32mp_bsec_privdata *priv = dev_get_priv(dev);
|
||||
struct tee_invoke_arg arg;
|
||||
struct tee_param param[2];
|
||||
struct tee_shm *fw_shm;
|
||||
int rc;
|
||||
|
||||
rc = tee_shm_register(priv->tee, buff, size, 0, &fw_shm);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
memset(&arg, 0, sizeof(arg));
|
||||
arg.func = cmd;
|
||||
arg.session = priv->tee_session;
|
||||
|
||||
memset(param, 0, sizeof(param));
|
||||
|
||||
param[0].attr = TEE_PARAM_ATTR_TYPE_VALUE_INPUT;
|
||||
param[0].u.value.a = offset;
|
||||
param[0].u.value.b = type;
|
||||
|
||||
if (cmd == PTA_BSEC_WRITE_MEM)
|
||||
param[1].attr = TEE_PARAM_ATTR_TYPE_MEMREF_INPUT;
|
||||
else
|
||||
param[1].attr = TEE_PARAM_ATTR_TYPE_MEMREF_OUTPUT;
|
||||
|
||||
param[1].u.memref.shm = fw_shm;
|
||||
param[1].u.memref.size = size;
|
||||
|
||||
rc = tee_invoke_func(priv->tee, &arg, 2, param);
|
||||
if (rc < 0 || arg.ret != 0) {
|
||||
dev_err(priv->tee,
|
||||
"PTA_BSEC invoke failed TEE err: %x, err:%x\n",
|
||||
arg.ret, rc);
|
||||
if (!rc)
|
||||
rc = -EIO;
|
||||
}
|
||||
|
||||
tee_shm_free(fw_shm);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
static int stm32mp_bsec_read(struct udevice *dev, int offset,
|
||||
void *buf, int size)
|
||||
{
|
||||
struct stm32mp_bsec_privdata *priv = dev_get_priv(dev);
|
||||
int ret;
|
||||
int i;
|
||||
bool shadow = true, lock = false;
|
||||
int nb_otp = size / sizeof(u32);
|
||||
int otp;
|
||||
int otp, cmd;
|
||||
unsigned int offs = offset;
|
||||
|
||||
if (offs >= STM32_BSEC_LOCK_OFFSET) {
|
||||
@ -411,6 +606,19 @@ static int stm32mp_bsec_read(struct udevice *dev, int offset,
|
||||
if ((offs % 4) || (size % 4))
|
||||
return -EINVAL;
|
||||
|
||||
if (IS_ENABLED(CONFIG_OPTEE) && priv->tee) {
|
||||
cmd = FUSE_ACCESS;
|
||||
if (shadow)
|
||||
cmd = SHADOW_ACCESS;
|
||||
if (lock)
|
||||
cmd = LOCK_ACCESS;
|
||||
ret = bsec_optee_pta(dev, PTA_BSEC_READ_MEM, cmd, offs, buf, size);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
otp = offs / sizeof(u32);
|
||||
|
||||
for (i = otp; i < (otp + nb_otp) && i <= BSEC_OTP_MAX_VALUE; i++) {
|
||||
@ -435,11 +643,12 @@ static int stm32mp_bsec_read(struct udevice *dev, int offset,
|
||||
static int stm32mp_bsec_write(struct udevice *dev, int offset,
|
||||
const void *buf, int size)
|
||||
{
|
||||
struct stm32mp_bsec_privdata *priv = dev_get_priv(dev);
|
||||
int ret = 0;
|
||||
int i;
|
||||
bool shadow = true, lock = false;
|
||||
int nb_otp = size / sizeof(u32);
|
||||
int otp;
|
||||
int otp, cmd;
|
||||
unsigned int offs = offset;
|
||||
|
||||
if (offs >= STM32_BSEC_LOCK_OFFSET) {
|
||||
@ -453,6 +662,19 @@ static int stm32mp_bsec_write(struct udevice *dev, int offset,
|
||||
if ((offs % 4) || (size % 4))
|
||||
return -EINVAL;
|
||||
|
||||
if (IS_ENABLED(CONFIG_OPTEE) && priv->tee) {
|
||||
cmd = FUSE_ACCESS;
|
||||
if (shadow)
|
||||
cmd = SHADOW_ACCESS;
|
||||
if (lock)
|
||||
cmd = LOCK_ACCESS;
|
||||
ret = bsec_optee_pta(dev, PTA_BSEC_WRITE_MEM, cmd, offs, (void *)buf, size);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
otp = offs / sizeof(u32);
|
||||
|
||||
for (i = otp; i < otp + nb_otp && i <= BSEC_OTP_MAX_VALUE; i++) {
|
||||
@ -501,12 +723,14 @@ static int stm32mp_bsec_probe(struct udevice *dev)
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (IS_ENABLED(CONFIG_OPTEE))
|
||||
bsec_optee_pta_open(dev);
|
||||
|
||||
/*
|
||||
* update unlocked shadow for OTP cleared by the rom code
|
||||
* only executed in U-Boot proper when TF-A is not used
|
||||
* only executed in SPL, it is done in TF-A for TFABOOT
|
||||
*/
|
||||
|
||||
if (!IS_ENABLED(CONFIG_TFABOOT) && !IS_ENABLED(CONFIG_SPL_BUILD)) {
|
||||
if (IS_ENABLED(CONFIG_SPL_BUILD)) {
|
||||
plat = dev_get_plat(dev);
|
||||
|
||||
for (otp = 57; otp <= BSEC_OTP_MAX_VALUE; otp++)
|
||||
@ -517,7 +741,23 @@ static int stm32mp_bsec_probe(struct udevice *dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int stm32mp_bsec_remove(struct udevice *dev)
|
||||
{
|
||||
struct stm32mp_bsec_privdata *priv = dev_get_priv(dev);
|
||||
int ret;
|
||||
|
||||
if (IS_ENABLED(CONFIG_OPTEE) && priv && priv->tee) {
|
||||
ret = tee_close_session(priv->tee, priv->tee_session);
|
||||
if (ret)
|
||||
return ret;
|
||||
priv->tee = NULL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct udevice_id stm32mp_bsec_ids[] = {
|
||||
{ .compatible = "st,stm32mp13-bsec" },
|
||||
{ .compatible = "st,stm32mp15-bsec" },
|
||||
{}
|
||||
};
|
||||
@ -527,9 +767,11 @@ U_BOOT_DRIVER(stm32mp_bsec) = {
|
||||
.id = UCLASS_MISC,
|
||||
.of_match = stm32mp_bsec_ids,
|
||||
.of_to_plat = stm32mp_bsec_of_to_plat,
|
||||
.plat_auto = sizeof(struct stm32mp_bsec_plat),
|
||||
.plat_auto = sizeof(struct stm32mp_bsec_plat),
|
||||
.priv_auto = sizeof(struct stm32mp_bsec_privdata),
|
||||
.ops = &stm32mp_bsec_ops,
|
||||
.probe = stm32mp_bsec_probe,
|
||||
.remove = stm32mp_bsec_remove,
|
||||
};
|
||||
|
||||
bool bsec_dbgswenable(void)
|
||||
@ -551,3 +793,20 @@ bool bsec_dbgswenable(void)
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
u32 get_otp(int index, int shift, int mask)
|
||||
{
|
||||
int ret;
|
||||
struct udevice *dev;
|
||||
u32 otp = 0;
|
||||
|
||||
ret = uclass_get_device_by_driver(UCLASS_MISC,
|
||||
DM_DRIVER_GET(stm32mp_bsec),
|
||||
&dev);
|
||||
|
||||
if (!ret)
|
||||
ret = misc_read(dev, STM32_BSEC_SHADOW(index),
|
||||
&otp, sizeof(otp));
|
||||
|
||||
return (otp >> shift) & mask;
|
||||
}
|
||||
|
||||
@ -8,16 +8,82 @@
|
||||
#include <console.h>
|
||||
#include <log.h>
|
||||
#include <misc.h>
|
||||
#include <asm/arch/bsec.h>
|
||||
#include <dm/device.h>
|
||||
#include <dm/uclass.h>
|
||||
|
||||
/* Closed device : bit 6 of OPT0*/
|
||||
/*
|
||||
* Closed device: OTP0
|
||||
* STM32MP15x: bit 6 of OPT0
|
||||
* STM32MP13x: 0b111111 = 0x3F for OTP_SECURED closed device
|
||||
*/
|
||||
#define STM32_OTP_CLOSE_ID 0
|
||||
#define STM32_OTP_CLOSE_MASK BIT(6)
|
||||
#define STM32_OTP_STM32MP13x_CLOSE_MASK 0x3F
|
||||
#define STM32_OTP_STM32MP15x_CLOSE_MASK BIT(6)
|
||||
|
||||
/* HASH of key: 8 OTPs, starting with OTP24) */
|
||||
#define STM32_OTP_HASH_KEY_START 24
|
||||
#define STM32_OTP_HASH_KEY_SIZE 8
|
||||
/* PKH is the first element of the key list */
|
||||
#define STM32KEY_PKH 0
|
||||
|
||||
struct stm32key {
|
||||
char *name;
|
||||
char *desc;
|
||||
u8 start;
|
||||
u8 size;
|
||||
};
|
||||
|
||||
const struct stm32key stm32mp13_list[] = {
|
||||
[STM32KEY_PKH] = {
|
||||
.name = "PKHTH",
|
||||
.desc = "Hash of the 8 ECC Public Keys Hashes Table (ECDSA is the authentication algorithm)",
|
||||
.start = 24,
|
||||
.size = 8,
|
||||
},
|
||||
{
|
||||
.name = "EDMK",
|
||||
.desc = "Encryption/Decryption Master Key",
|
||||
.start = 92,
|
||||
.size = 4,
|
||||
}
|
||||
};
|
||||
|
||||
const struct stm32key stm32mp15_list[] = {
|
||||
[STM32KEY_PKH] = {
|
||||
.name = "PKH",
|
||||
.desc = "Hash of the ECC Public Key (ECDSA is the authentication algorithm)",
|
||||
.start = 24,
|
||||
.size = 8,
|
||||
}
|
||||
};
|
||||
|
||||
/* index of current selected key in stm32key list, 0 = PKH by default */
|
||||
static u8 stm32key_index;
|
||||
|
||||
static u8 get_key_nb(void)
|
||||
{
|
||||
if (IS_ENABLED(CONFIG_STM32MP13x))
|
||||
return ARRAY_SIZE(stm32mp13_list);
|
||||
|
||||
if (IS_ENABLED(CONFIG_STM32MP15x))
|
||||
return ARRAY_SIZE(stm32mp15_list);
|
||||
}
|
||||
|
||||
static const struct stm32key *get_key(u8 index)
|
||||
{
|
||||
if (IS_ENABLED(CONFIG_STM32MP13x))
|
||||
return &stm32mp13_list[index];
|
||||
|
||||
if (IS_ENABLED(CONFIG_STM32MP15x))
|
||||
return &stm32mp15_list[index];
|
||||
}
|
||||
|
||||
static u32 get_otp_close_mask(void)
|
||||
{
|
||||
if (IS_ENABLED(CONFIG_STM32MP13x))
|
||||
return STM32_OTP_STM32MP13x_CLOSE_MASK;
|
||||
|
||||
if (IS_ENABLED(CONFIG_STM32MP15x))
|
||||
return STM32_OTP_STM32MP15x_CLOSE_MASK;
|
||||
}
|
||||
|
||||
static int get_misc_dev(struct udevice **dev)
|
||||
{
|
||||
@ -30,108 +96,115 @@ static int get_misc_dev(struct udevice **dev)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void read_hash_value(u32 addr)
|
||||
static void read_key_value(const struct stm32key *key, u32 addr)
|
||||
{
|
||||
int i;
|
||||
|
||||
printf("Read KEY at 0x%x\n", addr);
|
||||
for (i = 0; i < STM32_OTP_HASH_KEY_SIZE; i++) {
|
||||
printf("OTP value %i: %x\n", STM32_OTP_HASH_KEY_START + i,
|
||||
__be32_to_cpu(*(u32 *)addr));
|
||||
for (i = 0; i < key->size; i++) {
|
||||
printf("%s OTP %i: [%08x] %08x\n", key->name, key->start + i,
|
||||
addr, __be32_to_cpu(*(u32 *)addr));
|
||||
addr += 4;
|
||||
}
|
||||
}
|
||||
|
||||
static int read_hash_otp(bool print, bool *locked, bool *closed)
|
||||
static int read_key_otp(struct udevice *dev, const struct stm32key *key, bool print, bool *locked)
|
||||
{
|
||||
struct udevice *dev;
|
||||
int i, word, ret;
|
||||
int nb_invalid = 0, nb_zero = 0, nb_lock = 0;
|
||||
int nb_invalid = 0, nb_zero = 0, nb_lock = 0, nb_lock_err = 0;
|
||||
u32 val, lock;
|
||||
bool status;
|
||||
|
||||
ret = get_misc_dev(&dev);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
for (i = 0, word = STM32_OTP_HASH_KEY_START; i < STM32_OTP_HASH_KEY_SIZE; i++, word++) {
|
||||
for (i = 0, word = key->start; i < key->size; i++, word++) {
|
||||
ret = misc_read(dev, STM32_BSEC_OTP(word), &val, 4);
|
||||
if (ret != 4)
|
||||
val = ~0x0;
|
||||
ret = misc_read(dev, STM32_BSEC_LOCK(word), &lock, 4);
|
||||
if (ret != 4)
|
||||
lock = -1;
|
||||
lock = BSEC_LOCK_ERROR;
|
||||
if (print)
|
||||
printf("OTP HASH %i: %x lock : %d\n", word, val, lock);
|
||||
printf("%s OTP %i: %08x lock : %08x\n", key->name, word, val, lock);
|
||||
if (val == ~0x0)
|
||||
nb_invalid++;
|
||||
else if (val == 0x0)
|
||||
nb_zero++;
|
||||
if (lock == 1)
|
||||
if (lock & BSEC_LOCK_PERM)
|
||||
nb_lock++;
|
||||
if (lock & BSEC_LOCK_ERROR)
|
||||
nb_lock_err++;
|
||||
}
|
||||
|
||||
word = STM32_OTP_CLOSE_ID;
|
||||
ret = misc_read(dev, STM32_BSEC_OTP(word), &val, 4);
|
||||
if (ret != 4)
|
||||
val = 0x0;
|
||||
ret = misc_read(dev, STM32_BSEC_LOCK(word), &lock, 4);
|
||||
if (ret != 4)
|
||||
lock = -1;
|
||||
|
||||
status = (val & STM32_OTP_CLOSE_MASK) == STM32_OTP_CLOSE_MASK;
|
||||
if (closed)
|
||||
*closed = status;
|
||||
if (print)
|
||||
printf("OTP %d: closed status: %d lock : %d\n", word, status, lock);
|
||||
|
||||
status = (nb_lock == STM32_OTP_HASH_KEY_SIZE);
|
||||
status = nb_lock_err || (nb_lock == key->size);
|
||||
if (locked)
|
||||
*locked = status;
|
||||
if (!status && print)
|
||||
printf("Hash of key is not locked!\n");
|
||||
if (nb_lock_err && print)
|
||||
printf("%s lock is invalid!\n", key->name);
|
||||
else if (!status && print)
|
||||
printf("%s is not locked!\n", key->name);
|
||||
|
||||
if (nb_invalid == STM32_OTP_HASH_KEY_SIZE) {
|
||||
if (nb_invalid == key->size) {
|
||||
if (print)
|
||||
printf("Hash of key is invalid!\n");
|
||||
printf("%s is invalid!\n", key->name);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (nb_zero == STM32_OTP_HASH_KEY_SIZE) {
|
||||
if (nb_zero == key->size) {
|
||||
if (print)
|
||||
printf("Hash of key is free!\n");
|
||||
printf("%s is free!\n", key->name);
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int fuse_hash_value(u32 addr, bool print)
|
||||
static int read_close_status(struct udevice *dev, bool print, bool *closed)
|
||||
{
|
||||
int word, ret, result;
|
||||
u32 val, lock, mask;
|
||||
bool status;
|
||||
|
||||
result = 0;
|
||||
word = STM32_OTP_CLOSE_ID;
|
||||
ret = misc_read(dev, STM32_BSEC_OTP(word), &val, 4);
|
||||
if (ret < 0)
|
||||
result = ret;
|
||||
if (ret != 4)
|
||||
val = 0x0;
|
||||
|
||||
ret = misc_read(dev, STM32_BSEC_LOCK(word), &lock, 4);
|
||||
if (ret < 0)
|
||||
result = ret;
|
||||
if (ret != 4)
|
||||
lock = BSEC_LOCK_ERROR;
|
||||
|
||||
mask = get_otp_close_mask();
|
||||
status = (val & mask) == mask;
|
||||
if (closed)
|
||||
*closed = status;
|
||||
if (print)
|
||||
printf("OTP %d: closed status: %d lock : %08x\n", word, status, lock);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static int fuse_key_value(struct udevice *dev, const struct stm32key *key, u32 addr, bool print)
|
||||
{
|
||||
struct udevice *dev;
|
||||
u32 word, val;
|
||||
int i, ret;
|
||||
|
||||
ret = get_misc_dev(&dev);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
for (i = 0, word = STM32_OTP_HASH_KEY_START;
|
||||
i < STM32_OTP_HASH_KEY_SIZE;
|
||||
i++, word++, addr += 4) {
|
||||
for (i = 0, word = key->start; i < key->size; i++, word++, addr += 4) {
|
||||
val = __be32_to_cpu(*(u32 *)addr);
|
||||
if (print)
|
||||
printf("Fuse OTP %i : %x\n", word, val);
|
||||
printf("Fuse %s OTP %i : %08x\n", key->name, word, val);
|
||||
|
||||
ret = misc_write(dev, STM32_BSEC_OTP(word), &val, 4);
|
||||
if (ret != 4) {
|
||||
log_err("Fuse OTP %i failed\n", word);
|
||||
log_err("Fuse %s OTP %i failed\n", key->name, word);
|
||||
return ret;
|
||||
}
|
||||
/* on success, lock the OTP for HASH key */
|
||||
val = 1;
|
||||
/* on success, lock the OTP for the key */
|
||||
val = BSEC_LOCK_PERM;
|
||||
ret = misc_write(dev, STM32_BSEC_LOCK(word), &val, 4);
|
||||
if (ret != 4) {
|
||||
log_err("Lock OTP %i failed\n", word);
|
||||
log_err("Lock %s OTP %i failed\n", key->name, word);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
@ -153,28 +226,103 @@ static int confirm_prog(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int do_stm32key_read(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
|
||||
static void display_key_info(const struct stm32key *key)
|
||||
{
|
||||
u32 addr;
|
||||
printf("%s : %s\n", key->name, key->desc);
|
||||
printf("\tOTP%d..%d\n", key->start, key->start + key->size);
|
||||
}
|
||||
|
||||
static int do_stm32key_list(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < get_key_nb(); i++)
|
||||
display_key_info(get_key(i));
|
||||
|
||||
return CMD_RET_SUCCESS;
|
||||
}
|
||||
|
||||
static int do_stm32key_select(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
|
||||
{
|
||||
const struct stm32key *key;
|
||||
int i;
|
||||
|
||||
if (argc == 1) {
|
||||
read_hash_otp(true, NULL, NULL);
|
||||
printf("Selected key:\n");
|
||||
key = get_key(stm32key_index);
|
||||
display_key_info(key);
|
||||
return CMD_RET_SUCCESS;
|
||||
}
|
||||
|
||||
for (i = 0; i < get_key_nb(); i++) {
|
||||
key = get_key(i);
|
||||
if (!strcmp(key->name, argv[1])) {
|
||||
printf("%s selected\n", key->name);
|
||||
stm32key_index = i;
|
||||
return CMD_RET_SUCCESS;
|
||||
}
|
||||
}
|
||||
|
||||
printf("Unknown key %s\n", argv[1]);
|
||||
|
||||
return CMD_RET_FAILURE;
|
||||
}
|
||||
|
||||
static int do_stm32key_read(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
|
||||
{
|
||||
const struct stm32key *key;
|
||||
struct udevice *dev;
|
||||
u32 addr;
|
||||
int ret, i;
|
||||
int result;
|
||||
|
||||
ret = get_misc_dev(&dev);
|
||||
|
||||
if (argc == 1) {
|
||||
if (ret)
|
||||
return CMD_RET_FAILURE;
|
||||
key = get_key(stm32key_index);
|
||||
ret = read_key_otp(dev, key, true, NULL);
|
||||
if (ret != -ENOENT)
|
||||
return CMD_RET_FAILURE;
|
||||
return CMD_RET_SUCCESS;
|
||||
}
|
||||
|
||||
if (!strcmp("-a", argv[1])) {
|
||||
if (ret)
|
||||
return CMD_RET_FAILURE;
|
||||
result = CMD_RET_SUCCESS;
|
||||
for (i = 0; i < get_key_nb(); i++) {
|
||||
key = get_key(i);
|
||||
ret = read_key_otp(dev, key, true, NULL);
|
||||
if (ret != -ENOENT)
|
||||
result = CMD_RET_FAILURE;
|
||||
}
|
||||
ret = read_close_status(dev, true, NULL);
|
||||
if (ret)
|
||||
result = CMD_RET_FAILURE;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
addr = hextoul(argv[1], NULL);
|
||||
if (!addr)
|
||||
return CMD_RET_USAGE;
|
||||
|
||||
read_hash_value(addr);
|
||||
key = get_key(stm32key_index);
|
||||
printf("Read %s at 0x%08x\n", key->name, addr);
|
||||
read_key_value(key, addr);
|
||||
|
||||
return CMD_RET_SUCCESS;
|
||||
}
|
||||
|
||||
static int do_stm32key_fuse(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
|
||||
{
|
||||
const struct stm32key *key = get_key(stm32key_index);
|
||||
struct udevice *dev;
|
||||
u32 addr;
|
||||
bool yes = false, lock, closed;
|
||||
int ret;
|
||||
bool yes = false, lock;
|
||||
|
||||
if (argc < 2)
|
||||
return CMD_RET_USAGE;
|
||||
@ -189,29 +337,38 @@ static int do_stm32key_fuse(struct cmd_tbl *cmdtp, int flag, int argc, char *con
|
||||
if (!addr)
|
||||
return CMD_RET_USAGE;
|
||||
|
||||
if (read_hash_otp(!yes, &lock, &closed) != -ENOENT) {
|
||||
ret = get_misc_dev(&dev);
|
||||
if (ret)
|
||||
return CMD_RET_FAILURE;
|
||||
|
||||
if (read_key_otp(dev, key, !yes, &lock) != -ENOENT) {
|
||||
printf("Error: can't fuse again the OTP\n");
|
||||
return CMD_RET_FAILURE;
|
||||
}
|
||||
|
||||
if (lock || closed) {
|
||||
printf("Error: invalid OTP configuration (lock=%d, closed=%d)\n", lock, closed);
|
||||
if (lock) {
|
||||
printf("Error: %s is locked\n", key->name);
|
||||
return CMD_RET_FAILURE;
|
||||
}
|
||||
|
||||
if (!yes) {
|
||||
printf("Writing %s with\n", key->name);
|
||||
read_key_value(key, addr);
|
||||
}
|
||||
|
||||
if (!yes && !confirm_prog())
|
||||
return CMD_RET_FAILURE;
|
||||
|
||||
if (fuse_hash_value(addr, !yes))
|
||||
if (fuse_key_value(dev, key, addr, !yes))
|
||||
return CMD_RET_FAILURE;
|
||||
|
||||
printf("Hash key updated !\n");
|
||||
printf("%s updated !\n", key->name);
|
||||
|
||||
return CMD_RET_SUCCESS;
|
||||
}
|
||||
|
||||
static int do_stm32key_close(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
|
||||
{
|
||||
const struct stm32key *key;
|
||||
bool yes, lock, closed;
|
||||
struct udevice *dev;
|
||||
u32 val;
|
||||
@ -224,32 +381,36 @@ static int do_stm32key_close(struct cmd_tbl *cmdtp, int flag, int argc, char *co
|
||||
yes = true;
|
||||
}
|
||||
|
||||
ret = read_hash_otp(!yes, &lock, &closed);
|
||||
if (ret) {
|
||||
if (ret == -ENOENT)
|
||||
printf("Error: OTP not programmed!\n");
|
||||
ret = get_misc_dev(&dev);
|
||||
if (ret)
|
||||
return CMD_RET_FAILURE;
|
||||
|
||||
if (read_close_status(dev, !yes, &closed))
|
||||
return CMD_RET_FAILURE;
|
||||
}
|
||||
|
||||
if (closed) {
|
||||
printf("Error: already closed!\n");
|
||||
return CMD_RET_FAILURE;
|
||||
}
|
||||
|
||||
/* check PKH status before to close */
|
||||
key = get_key(STM32KEY_PKH);
|
||||
ret = read_key_otp(dev, key, !yes, &lock);
|
||||
if (ret) {
|
||||
if (ret == -ENOENT)
|
||||
printf("Error: %s not programmed!\n", key->name);
|
||||
return CMD_RET_FAILURE;
|
||||
}
|
||||
if (!lock)
|
||||
printf("Warning: OTP not locked!\n");
|
||||
printf("Warning: %s not locked!\n", key->name);
|
||||
|
||||
if (!yes && !confirm_prog())
|
||||
return CMD_RET_FAILURE;
|
||||
|
||||
ret = get_misc_dev(&dev);
|
||||
if (ret)
|
||||
return CMD_RET_FAILURE;
|
||||
|
||||
val = STM32_OTP_CLOSE_MASK;
|
||||
val = get_otp_close_mask();
|
||||
ret = misc_write(dev, STM32_BSEC_OTP(STM32_OTP_CLOSE_ID), &val, 4);
|
||||
if (ret != 4) {
|
||||
printf("Error: can't update OTP\n");
|
||||
printf("Error: can't update OTP %d\n", STM32_OTP_CLOSE_ID);
|
||||
return CMD_RET_FAILURE;
|
||||
}
|
||||
|
||||
@ -259,11 +420,15 @@ static int do_stm32key_close(struct cmd_tbl *cmdtp, int flag, int argc, char *co
|
||||
}
|
||||
|
||||
static char stm32key_help_text[] =
|
||||
"read [<addr>]: Read the hash stored at addr in memory or in OTP\n"
|
||||
"stm32key fuse [-y] <addr> : Fuse hash stored at addr in OTP\n"
|
||||
"stm32key close [-y] : Close the device, the hash stored in OTP\n";
|
||||
"list : list the supported key with description\n"
|
||||
"stm32key select [<key>] : Select the key identified by <key> or display the key used for read/fuse command\n"
|
||||
"stm32key read [<addr> | -a ] : Read the curent key at <addr> or current / all (-a) key in OTP\n"
|
||||
"stm32key fuse [-y] <addr> : Fuse the current key at addr in OTP\n"
|
||||
"stm32key close [-y] : Close the device, force use of PKH stored in OTP\n";
|
||||
|
||||
U_BOOT_CMD_WITH_SUBCMDS(stm32key, "Fuse ST Hash key", stm32key_help_text,
|
||||
U_BOOT_CMD_WITH_SUBCMDS(stm32key, "Manage key on STM32", stm32key_help_text,
|
||||
U_BOOT_SUBCMD_MKENT(list, 1, 0, do_stm32key_list),
|
||||
U_BOOT_SUBCMD_MKENT(select, 2, 0, do_stm32key_select),
|
||||
U_BOOT_SUBCMD_MKENT(read, 2, 0, do_stm32key_read),
|
||||
U_BOOT_SUBCMD_MKENT(fuse, 3, 0, do_stm32key_fuse),
|
||||
U_BOOT_SUBCMD_MKENT(close, 2, 0, do_stm32key_close));
|
||||
|
||||
@ -1,4 +1,3 @@
|
||||
|
||||
config CMD_STM32PROG
|
||||
bool "command stm32prog for STM32CudeProgrammer"
|
||||
select DFU
|
||||
@ -31,4 +30,11 @@ config CMD_STM32PROG_SERIAL
|
||||
help
|
||||
activate the command "stm32prog serial" for STM32MP soc family
|
||||
with the tools STM32CubeProgrammer using U-Boot serial device
|
||||
and UART protocol.
|
||||
and UART protocol.
|
||||
|
||||
config CMD_STM32PROG_OTP
|
||||
bool "support stm32prog for OTP update"
|
||||
depends on CMD_STM32PROG
|
||||
default y if ARM_SMCCC || OPTEE
|
||||
help
|
||||
Support the OTP update with the command "stm32prog" for STM32MP
|
||||
|
||||
@ -73,16 +73,9 @@ static int do_stm32prog(struct cmd_tbl *cmdtp, int flag, int argc,
|
||||
|
||||
/* check STM32IMAGE presence */
|
||||
if (size == 0) {
|
||||
stm32prog_header_check((struct raw_header_s *)addr, &header);
|
||||
stm32prog_header_check(addr, &header);
|
||||
if (header.type == HEADER_STM32IMAGE) {
|
||||
size = header.image_length + BL_HEADER_SIZE;
|
||||
|
||||
#if defined(CONFIG_LEGACY_IMAGE_FORMAT)
|
||||
/* uImage detected in STM32IMAGE, execute the script */
|
||||
if (IMAGE_FORMAT_LEGACY ==
|
||||
genimg_get_format((void *)(addr + BL_HEADER_SIZE)))
|
||||
return image_source_script(addr + BL_HEADER_SIZE, "script@1");
|
||||
#endif
|
||||
size = header.image_length + header.length;
|
||||
}
|
||||
}
|
||||
|
||||
@ -160,6 +153,8 @@ static int do_stm32prog(struct cmd_tbl *cmdtp, int flag, int argc,
|
||||
else if (CONFIG_IS_ENABLED(CMD_BOOTZ))
|
||||
do_bootz(cmdtp, 0, 4, bootm_argv);
|
||||
}
|
||||
if (data->script)
|
||||
image_source_script(data->script, "script@stm32prog");
|
||||
|
||||
if (reset) {
|
||||
puts("Reset...\n");
|
||||
|
||||
@ -6,12 +6,15 @@
|
||||
#include <command.h>
|
||||
#include <console.h>
|
||||
#include <dfu.h>
|
||||
#include <image.h>
|
||||
#include <malloc.h>
|
||||
#include <misc.h>
|
||||
#include <mmc.h>
|
||||
#include <part.h>
|
||||
#include <tee.h>
|
||||
#include <asm/arch/stm32mp1_smc.h>
|
||||
#include <asm/global_data.h>
|
||||
#include <dm/device_compat.h>
|
||||
#include <dm/uclass.h>
|
||||
#include <jffs2/load_kernel.h>
|
||||
#include <linux/list.h>
|
||||
@ -46,7 +49,7 @@
|
||||
EFI_GUID(0xFD58F1C7, 0xBE0D, 0x4338, \
|
||||
0x88, 0xE9, 0xAD, 0x8F, 0x05, 0x0A, 0xEB, 0x18)
|
||||
|
||||
/* RAW parttion (binary / bootloader) used Linux - reserved UUID */
|
||||
/* RAW partition (binary / bootloader) used Linux - reserved UUID */
|
||||
#define LINUX_RESERVED_UUID "8DA63339-0007-60C0-C436-083AC8230908"
|
||||
|
||||
/*
|
||||
@ -60,6 +63,28 @@ static const efi_guid_t uuid_mmc[3] = {
|
||||
ROOTFS_MMC2_UUID
|
||||
};
|
||||
|
||||
/* FIP type partition UUID used by TF-A*/
|
||||
#define FIP_TYPE_UUID "19D5DF83-11B0-457B-BE2C-7559C13142A5"
|
||||
|
||||
/* unique partition guid (uuid) for FIP partitions A/B */
|
||||
#define FIP_A_UUID \
|
||||
EFI_GUID(0x4FD84C93, 0x54EF, 0x463F, \
|
||||
0xA7, 0xEF, 0xAE, 0x25, 0xFF, 0x88, 0x70, 0x87)
|
||||
|
||||
#define FIP_B_UUID \
|
||||
EFI_GUID(0x09C54952, 0xD5BF, 0x45AF, \
|
||||
0xAC, 0xEE, 0x33, 0x53, 0x03, 0x76, 0x6F, 0xB3)
|
||||
|
||||
static const char * const fip_part_name[] = {
|
||||
"fip-a",
|
||||
"fip-b"
|
||||
};
|
||||
|
||||
static const efi_guid_t fip_part_uuid[] = {
|
||||
FIP_A_UUID,
|
||||
FIP_B_UUID
|
||||
};
|
||||
|
||||
/* order of column in flash layout file */
|
||||
enum stm32prog_col_t {
|
||||
COL_OPTION,
|
||||
@ -81,6 +106,109 @@ struct fip_toc_header {
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
/* OPTEE TA NVMEM helpers fucntions */
|
||||
#define TA_NVMEM_UUID { 0x1a8342cc, 0x81a5, 0x4512, \
|
||||
{ 0x99, 0xfe, 0x9e, 0x2b, 0x3e, 0x37, 0xd6, 0x26 } }
|
||||
|
||||
/*
|
||||
* Read NVMEM memory for STM32CubeProgrammer
|
||||
*
|
||||
* [in] value a: Type
|
||||
* 0 to read OTP
|
||||
* [out] memref buffer: Output buffer to store read values
|
||||
* size: Size of buffer to be read
|
||||
*
|
||||
* Return codes:
|
||||
* TEE_SUCCESS - Invoke command success
|
||||
* TEE_ERROR_BAD_PARAMETERS - Incorrect input param
|
||||
*/
|
||||
#define TA_NVMEM_READ 0x0
|
||||
|
||||
/*
|
||||
* Write NVMEM memory for STM32CubeProgrammer
|
||||
*
|
||||
* [in] value a: Type
|
||||
* 0 to read OTP
|
||||
* [in] memref buffer: Input buffer to read values
|
||||
* size: Size of buffer to be written
|
||||
*
|
||||
* Return codes:
|
||||
* TEE_SUCCESS - Invoke command success
|
||||
* TEE_ERROR_BAD_PARAMETERS - Incorrect input param
|
||||
*/
|
||||
#define TA_NVMEM_WRITE 0x1
|
||||
|
||||
/* value of TA_NVMEM type = value[in] a */
|
||||
#define NVMEM_OTP 0
|
||||
|
||||
static int optee_ta_open(struct stm32prog_data *data)
|
||||
{
|
||||
const struct tee_optee_ta_uuid uuid = TA_NVMEM_UUID;
|
||||
struct tee_open_session_arg arg;
|
||||
struct udevice *tee = NULL;
|
||||
int rc;
|
||||
|
||||
if (data->tee)
|
||||
return 0;
|
||||
|
||||
tee = tee_find_device(NULL, NULL, NULL, NULL);
|
||||
if (!tee)
|
||||
return -ENODEV;
|
||||
|
||||
memset(&arg, 0, sizeof(arg));
|
||||
tee_optee_ta_uuid_to_octets(arg.uuid, &uuid);
|
||||
rc = tee_open_session(tee, &arg, 0, NULL);
|
||||
if (rc < 0)
|
||||
return -ENODEV;
|
||||
|
||||
data->tee = tee;
|
||||
data->tee_session = arg.session;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int optee_ta_invoke(struct stm32prog_data *data, int cmd, int type,
|
||||
void *buff, ulong size)
|
||||
{
|
||||
struct tee_invoke_arg arg;
|
||||
struct tee_param param[2];
|
||||
struct tee_shm *buff_shm;
|
||||
int rc;
|
||||
|
||||
rc = tee_shm_register(data->tee, buff, size, 0, &buff_shm);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
memset(&arg, 0, sizeof(arg));
|
||||
arg.func = cmd;
|
||||
arg.session = data->tee_session;
|
||||
|
||||
memset(param, 0, sizeof(param));
|
||||
param[0].attr = TEE_PARAM_ATTR_TYPE_VALUE_INPUT;
|
||||
param[0].u.value.a = type;
|
||||
|
||||
if (cmd == TA_NVMEM_WRITE)
|
||||
param[1].attr = TEE_PARAM_ATTR_TYPE_MEMREF_INPUT;
|
||||
else
|
||||
param[1].attr = TEE_PARAM_ATTR_TYPE_MEMREF_OUTPUT;
|
||||
|
||||
param[1].u.memref.shm = buff_shm;
|
||||
param[1].u.memref.size = size;
|
||||
|
||||
rc = tee_invoke_func(data->tee, &arg, 2, param);
|
||||
if (rc < 0 || arg.ret != 0) {
|
||||
dev_err(data->tee,
|
||||
"TA_NVMEM invoke failed TEE err: %x, err:%x\n",
|
||||
arg.ret, rc);
|
||||
if (!rc)
|
||||
rc = -EIO;
|
||||
}
|
||||
|
||||
tee_shm_free(buff_shm);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
/* partition handling routines : CONFIG_CMD_MTDPARTS */
|
||||
int mtdparts_init(void);
|
||||
int find_dev_and_part(const char *id, struct mtd_device **dev,
|
||||
@ -101,52 +229,98 @@ static bool stm32prog_is_fip_header(struct fip_toc_header *header)
|
||||
return (header->name == FIP_TOC_HEADER_NAME) && header->serial_number;
|
||||
}
|
||||
|
||||
void stm32prog_header_check(struct raw_header_s *raw_header,
|
||||
struct image_header_s *header)
|
||||
static bool stm32prog_is_stm32_header_v1(struct stm32_header_v1 *header)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
if (header->magic_number !=
|
||||
(('S' << 0) | ('T' << 8) | ('M' << 16) | (0x32 << 24))) {
|
||||
log_debug("%s:invalid magic number : 0x%x\n",
|
||||
__func__, header->magic_number);
|
||||
return false;
|
||||
}
|
||||
if (header->header_version != 0x00010000) {
|
||||
log_debug("%s:invalid header version : 0x%x\n",
|
||||
__func__, header->header_version);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (header->reserved1 || header->reserved2) {
|
||||
log_debug("%s:invalid reserved field\n", __func__);
|
||||
return false;
|
||||
}
|
||||
for (i = 0; i < sizeof(header->padding); i++) {
|
||||
if (header->padding[i] != 0) {
|
||||
log_debug("%s:invalid padding field\n", __func__);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool stm32prog_is_stm32_header_v2(struct stm32_header_v2 *header)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
if (header->magic_number !=
|
||||
(('S' << 0) | ('T' << 8) | ('M' << 16) | (0x32 << 24))) {
|
||||
log_debug("%s:invalid magic number : 0x%x\n",
|
||||
__func__, header->magic_number);
|
||||
return false;
|
||||
}
|
||||
if (header->header_version != 0x00020000) {
|
||||
log_debug("%s:invalid header version : 0x%x\n",
|
||||
__func__, header->header_version);
|
||||
return false;
|
||||
}
|
||||
if (header->reserved1 || header->reserved2)
|
||||
return false;
|
||||
|
||||
for (i = 0; i < sizeof(header->padding); i++) {
|
||||
if (header->padding[i] != 0) {
|
||||
log_debug("%s:invalid padding field\n", __func__);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void stm32prog_header_check(uintptr_t raw_header, struct image_header_s *header)
|
||||
{
|
||||
struct stm32_header_v1 *v1_header = (struct stm32_header_v1 *)raw_header;
|
||||
struct stm32_header_v2 *v2_header = (struct stm32_header_v2 *)raw_header;
|
||||
|
||||
if (!raw_header || !header) {
|
||||
log_debug("%s:no header data\n", __func__);
|
||||
return;
|
||||
}
|
||||
|
||||
if (stm32prog_is_fip_header((struct fip_toc_header *)raw_header)) {
|
||||
header->type = HEADER_FIP;
|
||||
header->length = 0;
|
||||
return;
|
||||
}
|
||||
if (stm32prog_is_stm32_header_v1(v1_header)) {
|
||||
header->type = HEADER_STM32IMAGE;
|
||||
header->image_checksum = le32_to_cpu(v1_header->image_checksum);
|
||||
header->image_length = le32_to_cpu(v1_header->image_length);
|
||||
header->length = sizeof(struct stm32_header_v1);
|
||||
return;
|
||||
}
|
||||
if (stm32prog_is_stm32_header_v2(v2_header)) {
|
||||
header->type = HEADER_STM32IMAGE_V2;
|
||||
header->image_checksum = le32_to_cpu(v2_header->image_checksum);
|
||||
header->image_length = le32_to_cpu(v2_header->image_length);
|
||||
header->length = sizeof(struct stm32_header_v1) +
|
||||
v2_header->extension_headers_length;
|
||||
return;
|
||||
}
|
||||
|
||||
header->type = HEADER_NONE;
|
||||
header->image_checksum = 0x0;
|
||||
header->image_length = 0x0;
|
||||
|
||||
if (stm32prog_is_fip_header((struct fip_toc_header *)raw_header)) {
|
||||
header->type = HEADER_FIP;
|
||||
return;
|
||||
}
|
||||
|
||||
if (raw_header->magic_number !=
|
||||
(('S' << 0) | ('T' << 8) | ('M' << 16) | (0x32 << 24))) {
|
||||
log_debug("%s:invalid magic number : 0x%x\n",
|
||||
__func__, raw_header->magic_number);
|
||||
return;
|
||||
}
|
||||
/* only header v1.0 supported */
|
||||
if (raw_header->header_version != 0x00010000) {
|
||||
log_debug("%s:invalid header version : 0x%x\n",
|
||||
__func__, raw_header->header_version);
|
||||
return;
|
||||
}
|
||||
if (raw_header->reserved1 != 0x0 || raw_header->reserved2) {
|
||||
log_debug("%s:invalid reserved field\n", __func__);
|
||||
return;
|
||||
}
|
||||
for (i = 0; i < (sizeof(raw_header->padding) / 4); i++) {
|
||||
if (raw_header->padding[i] != 0) {
|
||||
log_debug("%s:invalid padding field\n", __func__);
|
||||
return;
|
||||
}
|
||||
}
|
||||
header->type = HEADER_STM32IMAGE;
|
||||
header->image_checksum = le32_to_cpu(raw_header->image_checksum);
|
||||
header->image_length = le32_to_cpu(raw_header->image_length);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
static u32 stm32prog_header_checksum(u32 addr, struct image_header_s *header)
|
||||
@ -255,6 +429,8 @@ static int parse_type(struct stm32prog_data *data,
|
||||
part->bin_nb =
|
||||
dectoul(&p[7], NULL);
|
||||
}
|
||||
} else if (!strcmp(p, "FIP")) {
|
||||
part->part_type = PART_FIP;
|
||||
} else if (!strcmp(p, "System")) {
|
||||
part->part_type = PART_SYSTEM;
|
||||
} else if (!strcmp(p, "FileSystem")) {
|
||||
@ -376,11 +552,11 @@ static int parse_flash_layout(struct stm32prog_data *data,
|
||||
data->part_nb = 0;
|
||||
|
||||
/* check if STM32image is detected */
|
||||
stm32prog_header_check((struct raw_header_s *)addr, &header);
|
||||
stm32prog_header_check(addr, &header);
|
||||
if (header.type == HEADER_STM32IMAGE) {
|
||||
u32 checksum;
|
||||
|
||||
addr = addr + BL_HEADER_SIZE;
|
||||
addr = addr + header.length;
|
||||
size = header.image_length;
|
||||
|
||||
checksum = stm32prog_header_checksum(addr, &header);
|
||||
@ -835,8 +1011,8 @@ static int treat_partition_list(struct stm32prog_data *data)
|
||||
/* skip partition with IP="none" */
|
||||
if (part->target == STM32PROG_NONE) {
|
||||
if (IS_SELECT(part)) {
|
||||
stm32prog_err("Layout: selected none phase = 0x%x",
|
||||
part->id);
|
||||
stm32prog_err("Layout: selected none phase = 0x%x for part %s",
|
||||
part->id, part->name);
|
||||
return -EINVAL;
|
||||
}
|
||||
continue;
|
||||
@ -844,14 +1020,14 @@ static int treat_partition_list(struct stm32prog_data *data)
|
||||
|
||||
if (part->id == PHASE_FLASHLAYOUT ||
|
||||
part->id > PHASE_LAST_USER) {
|
||||
stm32prog_err("Layout: invalid phase = 0x%x",
|
||||
part->id);
|
||||
stm32prog_err("Layout: invalid phase = 0x%x for part %s",
|
||||
part->id, part->name);
|
||||
return -EINVAL;
|
||||
}
|
||||
for (j = i + 1; j < data->part_nb; j++) {
|
||||
if (part->id == data->part_array[j].id) {
|
||||
stm32prog_err("Layout: duplicated phase 0x%x at line %d and %d",
|
||||
part->id, i, j);
|
||||
stm32prog_err("Layout: duplicated phase 0x%x for part %s and %s",
|
||||
part->id, part->name, data->part_array[j].name);
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
@ -906,9 +1082,10 @@ static int create_gpt_partitions(struct stm32prog_data *data)
|
||||
char uuid[UUID_STR_LEN + 1];
|
||||
unsigned char *uuid_bin;
|
||||
unsigned int mmc_id;
|
||||
int i;
|
||||
int i, j;
|
||||
bool rootfs_found;
|
||||
struct stm32prog_part_t *part;
|
||||
const char *type_str;
|
||||
|
||||
buf = malloc(buflen);
|
||||
if (!buf)
|
||||
@ -950,33 +1127,46 @@ static int create_gpt_partitions(struct stm32prog_data *data)
|
||||
part->addr,
|
||||
part->size);
|
||||
|
||||
if (part->part_type == PART_BINARY)
|
||||
offset += snprintf(buf + offset,
|
||||
buflen - offset,
|
||||
",type="
|
||||
LINUX_RESERVED_UUID);
|
||||
else
|
||||
offset += snprintf(buf + offset,
|
||||
buflen - offset,
|
||||
",type=linux");
|
||||
switch (part->part_type) {
|
||||
case PART_BINARY:
|
||||
type_str = LINUX_RESERVED_UUID;
|
||||
break;
|
||||
case PART_FIP:
|
||||
type_str = FIP_TYPE_UUID;
|
||||
break;
|
||||
default:
|
||||
type_str = "linux";
|
||||
break;
|
||||
}
|
||||
offset += snprintf(buf + offset,
|
||||
buflen - offset,
|
||||
",type=%s", type_str);
|
||||
|
||||
if (part->part_type == PART_SYSTEM)
|
||||
offset += snprintf(buf + offset,
|
||||
buflen - offset,
|
||||
",bootable");
|
||||
|
||||
/* partition UUID */
|
||||
uuid_bin = NULL;
|
||||
if (!rootfs_found && !strcmp(part->name, "rootfs")) {
|
||||
mmc_id = part->dev_id;
|
||||
rootfs_found = true;
|
||||
if (mmc_id < ARRAY_SIZE(uuid_mmc)) {
|
||||
uuid_bin =
|
||||
(unsigned char *)uuid_mmc[mmc_id].b;
|
||||
uuid_bin_to_str(uuid_bin, uuid,
|
||||
UUID_STR_FORMAT_GUID);
|
||||
offset += snprintf(buf + offset,
|
||||
buflen - offset,
|
||||
",uuid=%s", uuid);
|
||||
}
|
||||
if (mmc_id < ARRAY_SIZE(uuid_mmc))
|
||||
uuid_bin = (unsigned char *)uuid_mmc[mmc_id].b;
|
||||
}
|
||||
if (part->part_type == PART_FIP) {
|
||||
for (j = 0; j < ARRAY_SIZE(fip_part_name); j++)
|
||||
if (!strcmp(part->name, fip_part_name[j])) {
|
||||
uuid_bin = (unsigned char *)fip_part_uuid[j].b;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (uuid_bin) {
|
||||
uuid_bin_to_str(uuid_bin, uuid, UUID_STR_FORMAT_GUID);
|
||||
offset += snprintf(buf + offset,
|
||||
buflen - offset,
|
||||
",uuid=%s", uuid);
|
||||
}
|
||||
|
||||
offset += snprintf(buf + offset, buflen - offset, ";");
|
||||
@ -1154,7 +1344,9 @@ static int dfu_init_entities(struct stm32prog_data *data)
|
||||
struct dfu_entity *dfu;
|
||||
int alt_nb;
|
||||
|
||||
alt_nb = 2; /* number of virtual = CMD, OTP*/
|
||||
alt_nb = 1; /* number of virtual = CMD*/
|
||||
if (IS_ENABLED(CONFIG_CMD_STM32PROG_OTP))
|
||||
alt_nb++; /* OTP*/
|
||||
if (CONFIG_IS_ENABLED(DM_PMIC))
|
||||
alt_nb++; /* PMIC NVMEM*/
|
||||
|
||||
@ -1205,8 +1397,12 @@ static int dfu_init_entities(struct stm32prog_data *data)
|
||||
if (!ret)
|
||||
ret = stm32prog_alt_add_virt(dfu, "virtual", PHASE_CMD, CMD_SIZE);
|
||||
|
||||
if (!ret)
|
||||
ret = stm32prog_alt_add_virt(dfu, "OTP", PHASE_OTP, OTP_SIZE);
|
||||
if (!ret && IS_ENABLED(CONFIG_CMD_STM32PROG_OTP)) {
|
||||
ret = optee_ta_open(data);
|
||||
log_debug("optee_ta result %d\n", ret);
|
||||
ret = stm32prog_alt_add_virt(dfu, "OTP", PHASE_OTP,
|
||||
data->tee ? OTP_SIZE_TA : OTP_SIZE_SMC);
|
||||
}
|
||||
|
||||
if (!ret && CONFIG_IS_ENABLED(DM_PMIC))
|
||||
ret = stm32prog_alt_add_virt(dfu, "PMIC", PHASE_PMIC, PMIC_SIZE);
|
||||
@ -1224,19 +1420,26 @@ static int dfu_init_entities(struct stm32prog_data *data)
|
||||
int stm32prog_otp_write(struct stm32prog_data *data, u32 offset, u8 *buffer,
|
||||
long *size)
|
||||
{
|
||||
u32 otp_size = data->tee ? OTP_SIZE_TA : OTP_SIZE_SMC;
|
||||
log_debug("%s: %x %lx\n", __func__, offset, *size);
|
||||
|
||||
if (!IS_ENABLED(CONFIG_CMD_STM32PROG_OTP)) {
|
||||
stm32prog_err("OTP update not supported");
|
||||
|
||||
return -ENOTSUPP;
|
||||
}
|
||||
|
||||
if (!data->otp_part) {
|
||||
data->otp_part = memalign(CONFIG_SYS_CACHELINE_SIZE, OTP_SIZE);
|
||||
data->otp_part = memalign(CONFIG_SYS_CACHELINE_SIZE, otp_size);
|
||||
if (!data->otp_part)
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
if (!offset)
|
||||
memset(data->otp_part, 0, OTP_SIZE);
|
||||
memset(data->otp_part, 0, otp_size);
|
||||
|
||||
if (offset + *size > OTP_SIZE)
|
||||
*size = OTP_SIZE - offset;
|
||||
if (offset + *size > otp_size)
|
||||
*size = otp_size - offset;
|
||||
|
||||
memcpy((void *)((u32)data->otp_part + offset), buffer, *size);
|
||||
|
||||
@ -1246,12 +1449,13 @@ int stm32prog_otp_write(struct stm32prog_data *data, u32 offset, u8 *buffer,
|
||||
int stm32prog_otp_read(struct stm32prog_data *data, u32 offset, u8 *buffer,
|
||||
long *size)
|
||||
{
|
||||
u32 otp_size = data->tee ? OTP_SIZE_TA : OTP_SIZE_SMC;
|
||||
int result = 0;
|
||||
|
||||
if (!IS_ENABLED(CONFIG_ARM_SMCCC)) {
|
||||
if (!IS_ENABLED(CONFIG_CMD_STM32PROG_OTP)) {
|
||||
stm32prog_err("OTP update not supported");
|
||||
|
||||
return -1;
|
||||
return -ENOTSUPP;
|
||||
}
|
||||
|
||||
log_debug("%s: %x %lx\n", __func__, offset, *size);
|
||||
@ -1259,7 +1463,7 @@ int stm32prog_otp_read(struct stm32prog_data *data, u32 offset, u8 *buffer,
|
||||
if (!offset) {
|
||||
if (!data->otp_part)
|
||||
data->otp_part =
|
||||
memalign(CONFIG_SYS_CACHELINE_SIZE, OTP_SIZE);
|
||||
memalign(CONFIG_SYS_CACHELINE_SIZE, otp_size);
|
||||
|
||||
if (!data->otp_part) {
|
||||
result = -ENOMEM;
|
||||
@ -1267,11 +1471,16 @@ int stm32prog_otp_read(struct stm32prog_data *data, u32 offset, u8 *buffer,
|
||||
}
|
||||
|
||||
/* init struct with 0 */
|
||||
memset(data->otp_part, 0, OTP_SIZE);
|
||||
memset(data->otp_part, 0, otp_size);
|
||||
|
||||
/* call the service */
|
||||
result = stm32_smc_exec(STM32_SMC_BSEC, STM32_SMC_READ_ALL,
|
||||
(u32)data->otp_part, 0);
|
||||
result = -ENOTSUPP;
|
||||
if (data->tee && CONFIG_IS_ENABLED(OPTEE))
|
||||
result = optee_ta_invoke(data, TA_NVMEM_READ, NVMEM_OTP,
|
||||
data->otp_part, OTP_SIZE_TA);
|
||||
else if (IS_ENABLED(CONFIG_ARM_SMCCC))
|
||||
result = stm32_smc_exec(STM32_SMC_BSEC, STM32_SMC_READ_ALL,
|
||||
(u32)data->otp_part, 0);
|
||||
if (result)
|
||||
goto end_otp_read;
|
||||
}
|
||||
@ -1281,8 +1490,8 @@ int stm32prog_otp_read(struct stm32prog_data *data, u32 offset, u8 *buffer,
|
||||
goto end_otp_read;
|
||||
}
|
||||
|
||||
if (offset + *size > OTP_SIZE)
|
||||
*size = OTP_SIZE - offset;
|
||||
if (offset + *size > otp_size)
|
||||
*size = otp_size - offset;
|
||||
memcpy(buffer, (void *)((u32)data->otp_part + offset), *size);
|
||||
|
||||
end_otp_read:
|
||||
@ -1296,10 +1505,10 @@ int stm32prog_otp_start(struct stm32prog_data *data)
|
||||
int result = 0;
|
||||
struct arm_smccc_res res;
|
||||
|
||||
if (!IS_ENABLED(CONFIG_ARM_SMCCC)) {
|
||||
if (!IS_ENABLED(CONFIG_CMD_STM32PROG_OTP)) {
|
||||
stm32prog_err("OTP update not supported");
|
||||
|
||||
return -1;
|
||||
return -ENOTSUPP;
|
||||
}
|
||||
|
||||
if (!data->otp_part) {
|
||||
@ -1307,28 +1516,34 @@ int stm32prog_otp_start(struct stm32prog_data *data)
|
||||
return -1;
|
||||
}
|
||||
|
||||
arm_smccc_smc(STM32_SMC_BSEC, STM32_SMC_WRITE_ALL,
|
||||
(u32)data->otp_part, 0, 0, 0, 0, 0, &res);
|
||||
result = -ENOTSUPP;
|
||||
if (data->tee && CONFIG_IS_ENABLED(OPTEE)) {
|
||||
result = optee_ta_invoke(data, TA_NVMEM_WRITE, NVMEM_OTP,
|
||||
data->otp_part, OTP_SIZE_TA);
|
||||
} else if (IS_ENABLED(CONFIG_ARM_SMCCC)) {
|
||||
arm_smccc_smc(STM32_SMC_BSEC, STM32_SMC_WRITE_ALL,
|
||||
(u32)data->otp_part, 0, 0, 0, 0, 0, &res);
|
||||
|
||||
if (!res.a0) {
|
||||
switch (res.a1) {
|
||||
case 0:
|
||||
result = 0;
|
||||
break;
|
||||
case 1:
|
||||
stm32prog_err("Provisioning");
|
||||
result = 0;
|
||||
break;
|
||||
default:
|
||||
log_err("%s: OTP incorrect value (err = %ld)\n",
|
||||
__func__, res.a1);
|
||||
if (!res.a0) {
|
||||
switch (res.a1) {
|
||||
case 0:
|
||||
result = 0;
|
||||
break;
|
||||
case 1:
|
||||
stm32prog_err("Provisioning");
|
||||
result = 0;
|
||||
break;
|
||||
default:
|
||||
log_err("%s: OTP incorrect value (err = %ld)\n",
|
||||
__func__, res.a1);
|
||||
result = -EINVAL;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
log_err("%s: Failed to exec svc=%x op=%x in secure mode (err = %ld)\n",
|
||||
__func__, STM32_SMC_BSEC, STM32_SMC_WRITE_ALL, res.a0);
|
||||
result = -EINVAL;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
log_err("%s: Failed to exec svc=%x op=%x in secure mode (err = %ld)\n",
|
||||
__func__, STM32_SMC_BSEC, STM32_SMC_WRITE_ALL, res.a0);
|
||||
result = -EINVAL;
|
||||
}
|
||||
|
||||
free(data->otp_part);
|
||||
@ -1431,7 +1646,7 @@ static int stm32prog_copy_fsbl(struct stm32prog_part_t *part)
|
||||
int ret, i;
|
||||
void *fsbl;
|
||||
struct image_header_s header;
|
||||
struct raw_header_s raw_header;
|
||||
struct stm32_header_v2 raw_header; /* V2 size > v1 size */
|
||||
struct dfu_entity *dfu;
|
||||
long size, offset;
|
||||
|
||||
@ -1443,17 +1658,18 @@ static int stm32prog_copy_fsbl(struct stm32prog_part_t *part)
|
||||
|
||||
/* read header */
|
||||
dfu_transaction_cleanup(dfu);
|
||||
size = BL_HEADER_SIZE;
|
||||
size = sizeof(raw_header);
|
||||
ret = dfu->read_medium(dfu, 0, (void *)&raw_header, &size);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
stm32prog_header_check(&raw_header, &header);
|
||||
if (header.type != HEADER_STM32IMAGE)
|
||||
stm32prog_header_check((ulong)&raw_header, &header);
|
||||
if (header.type != HEADER_STM32IMAGE &&
|
||||
header.type != HEADER_STM32IMAGE_V2)
|
||||
return -ENOENT;
|
||||
|
||||
/* read header + payload */
|
||||
size = header.image_length + BL_HEADER_SIZE;
|
||||
size = header.image_length + header.length;
|
||||
size = round_up(size, part->dev->mtd->erasesize);
|
||||
fsbl = calloc(1, size);
|
||||
if (!fsbl)
|
||||
@ -1483,7 +1699,16 @@ error:
|
||||
static void stm32prog_end_phase(struct stm32prog_data *data, u64 offset)
|
||||
{
|
||||
if (data->phase == PHASE_FLASHLAYOUT) {
|
||||
if (parse_flash_layout(data, STM32_DDR_BASE, 0))
|
||||
#if defined(CONFIG_LEGACY_IMAGE_FORMAT)
|
||||
if (genimg_get_format((void *)STM32_DDR_BASE) == IMAGE_FORMAT_LEGACY) {
|
||||
data->script = STM32_DDR_BASE;
|
||||
data->phase = PHASE_END;
|
||||
log_notice("U-Boot script received\n");
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
log_notice("\nFlashLayout received, size = %lld\n", offset);
|
||||
if (parse_flash_layout(data, STM32_DDR_BASE, offset))
|
||||
stm32prog_err("Layout: invalid FlashLayout");
|
||||
return;
|
||||
}
|
||||
@ -1739,6 +1964,12 @@ void stm32prog_clean(struct stm32prog_data *data)
|
||||
free(data->part_array);
|
||||
free(data->otp_part);
|
||||
free(data->buffer);
|
||||
|
||||
if (CONFIG_IS_ENABLED(OPTEE) && data->tee) {
|
||||
tee_close_session(data->tee, data->tee_session);
|
||||
data->tee = NULL;
|
||||
data->tee_session = 0x0;
|
||||
}
|
||||
}
|
||||
|
||||
/* DFU callback: used after serial and direct DFU USB access */
|
||||
|
||||
@ -20,7 +20,8 @@
|
||||
#define DEFAULT_ADDRESS 0xFFFFFFFF
|
||||
|
||||
#define CMD_SIZE 512
|
||||
#define OTP_SIZE 1024
|
||||
#define OTP_SIZE_SMC 1024
|
||||
#define OTP_SIZE_TA 776
|
||||
#define PMIC_SIZE 8
|
||||
|
||||
enum stm32prog_target {
|
||||
@ -41,6 +42,7 @@ enum stm32prog_link_t {
|
||||
enum stm32prog_header_t {
|
||||
HEADER_NONE,
|
||||
HEADER_STM32IMAGE,
|
||||
HEADER_STM32IMAGE_V2,
|
||||
HEADER_FIP,
|
||||
};
|
||||
|
||||
@ -48,11 +50,12 @@ struct image_header_s {
|
||||
enum stm32prog_header_t type;
|
||||
u32 image_checksum;
|
||||
u32 image_length;
|
||||
u32 length;
|
||||
};
|
||||
|
||||
struct raw_header_s {
|
||||
struct stm32_header_v1 {
|
||||
u32 magic_number;
|
||||
u32 image_signature[64 / 4];
|
||||
u8 image_signature[64];
|
||||
u32 image_checksum;
|
||||
u32 header_version;
|
||||
u32 image_length;
|
||||
@ -63,19 +66,38 @@ struct raw_header_s {
|
||||
u32 version_number;
|
||||
u32 option_flags;
|
||||
u32 ecdsa_algorithm;
|
||||
u32 ecdsa_public_key[64 / 4];
|
||||
u32 padding[83 / 4];
|
||||
u32 binary_type;
|
||||
u8 ecdsa_public_key[64];
|
||||
u8 padding[83];
|
||||
u8 binary_type;
|
||||
};
|
||||
|
||||
#define BL_HEADER_SIZE sizeof(struct raw_header_s)
|
||||
struct stm32_header_v2 {
|
||||
u32 magic_number;
|
||||
u8 image_signature[64];
|
||||
u32 image_checksum;
|
||||
u32 header_version;
|
||||
u32 image_length;
|
||||
u32 image_entry_point;
|
||||
u32 reserved1;
|
||||
u32 load_address;
|
||||
u32 reserved2;
|
||||
u32 version_number;
|
||||
u32 extension_flags;
|
||||
u32 extension_headers_length;
|
||||
u32 binary_type;
|
||||
u8 padding[16];
|
||||
u32 extension_header_type;
|
||||
u32 extension_header_length;
|
||||
u8 extension_padding[376];
|
||||
};
|
||||
|
||||
/* partition type in flashlayout file */
|
||||
enum stm32prog_part_type {
|
||||
PART_BINARY,
|
||||
PART_FIP,
|
||||
PART_SYSTEM,
|
||||
PART_FILESYSTEM,
|
||||
RAW_IMAGE
|
||||
RAW_IMAGE,
|
||||
};
|
||||
|
||||
/* device information */
|
||||
@ -147,6 +169,12 @@ struct stm32prog_data {
|
||||
u32 dtb;
|
||||
u32 initrd;
|
||||
u32 initrd_size;
|
||||
|
||||
u32 script;
|
||||
|
||||
/* OPTEE PTA NVMEM */
|
||||
struct udevice *tee;
|
||||
u32 tee_session;
|
||||
};
|
||||
|
||||
extern struct stm32prog_data *stm32prog_data;
|
||||
@ -166,8 +194,7 @@ int stm32prog_pmic_read(struct stm32prog_data *data, u32 offset,
|
||||
int stm32prog_pmic_start(struct stm32prog_data *data);
|
||||
|
||||
/* generic part*/
|
||||
void stm32prog_header_check(struct raw_header_s *raw_header,
|
||||
struct image_header_s *header);
|
||||
void stm32prog_header_check(uintptr_t raw_header, struct image_header_s *header);
|
||||
int stm32prog_dfu_init(struct stm32prog_data *data);
|
||||
void stm32prog_next_phase(struct stm32prog_data *data);
|
||||
void stm32prog_do_reset(struct stm32prog_data *data);
|
||||
|
||||
@ -181,7 +181,7 @@ int stm32prog_get_medium_size_virt(struct dfu_entity *dfu, u64 *size)
|
||||
*size = CMD_SIZE;
|
||||
break;
|
||||
case PHASE_OTP:
|
||||
*size = OTP_SIZE;
|
||||
*size = stm32prog_data->tee ? OTP_SIZE_TA : OTP_SIZE_SMC;
|
||||
break;
|
||||
case PHASE_PMIC:
|
||||
*size = PMIC_SIZE;
|
||||
@ -206,9 +206,12 @@ bool stm32prog_usb_loop(struct stm32prog_data *data, int dev)
|
||||
g_dnl_set_product(product);
|
||||
|
||||
if (stm32prog_data->phase == PHASE_FLASHLAYOUT) {
|
||||
/* forget any previous Control C */
|
||||
clear_ctrlc();
|
||||
ret = run_usb_dnl_gadget(dev, "usb_dnl_dfu");
|
||||
if (ret || stm32prog_data->phase != PHASE_FLASHLAYOUT)
|
||||
return ret;
|
||||
/* DFU reset received, no error or CtrlC */
|
||||
if (ret || stm32prog_data->phase != PHASE_FLASHLAYOUT || had_ctrlc())
|
||||
return ret; /* true = reset on DFU error */
|
||||
/* prepare the second enumeration with the FlashLayout */
|
||||
stm32prog_dfu_init(data);
|
||||
}
|
||||
|
||||
@ -1,29 +0,0 @@
|
||||
# SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
|
||||
#
|
||||
# Copyright (C) 2018, STMicroelectronics - All Rights Reserved
|
||||
#
|
||||
|
||||
ifndef CONFIG_SPL
|
||||
INPUTS-$(CONFIG_STM32MP15x_STM32IMAGE) += u-boot.stm32
|
||||
else
|
||||
ifdef CONFIG_SPL_BUILD
|
||||
INPUTS-y += u-boot-spl.stm32
|
||||
endif
|
||||
endif
|
||||
|
||||
MKIMAGEFLAGS_u-boot.stm32 = -T stm32image -a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_TEXT_BASE)
|
||||
|
||||
u-boot.stm32: MKIMAGEOUTPUT = u-boot.stm32.log
|
||||
|
||||
u-boot.stm32: u-boot.bin FORCE
|
||||
$(call if_changed,mkimage)
|
||||
|
||||
MKIMAGEFLAGS_u-boot-spl.stm32 = -T stm32image -a $(CONFIG_SPL_TEXT_BASE) -e $(CONFIG_SPL_TEXT_BASE)
|
||||
|
||||
spl/u-boot-spl.stm32: MKIMAGEOUTPUT = spl/u-boot-spl.stm32.log
|
||||
|
||||
spl/u-boot-spl.stm32: spl/u-boot-spl.bin FORCE
|
||||
$(call if_changed,mkimage)
|
||||
|
||||
u-boot-spl.stm32 : spl/u-boot-spl.stm32
|
||||
$(call if_changed,copy)
|
||||
@ -16,7 +16,6 @@
|
||||
#include <misc.h>
|
||||
#include <net.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/arch/bsec.h>
|
||||
#include <asm/arch/stm32.h>
|
||||
#include <asm/arch/sys_proto.h>
|
||||
#include <asm/global_data.h>
|
||||
@ -24,66 +23,10 @@
|
||||
#include <dm/uclass.h>
|
||||
#include <linux/bitops.h>
|
||||
|
||||
/* RCC register */
|
||||
#define RCC_TZCR (STM32_RCC_BASE + 0x00)
|
||||
#define RCC_DBGCFGR (STM32_RCC_BASE + 0x080C)
|
||||
#define RCC_BDCR (STM32_RCC_BASE + 0x0140)
|
||||
#define RCC_MP_APB5ENSETR (STM32_RCC_BASE + 0x0208)
|
||||
#define RCC_MP_AHB5ENSETR (STM32_RCC_BASE + 0x0210)
|
||||
#define RCC_BDCR_VSWRST BIT(31)
|
||||
#define RCC_BDCR_RTCSRC GENMASK(17, 16)
|
||||
#define RCC_DBGCFGR_DBGCKEN BIT(8)
|
||||
|
||||
/* Security register */
|
||||
#define ETZPC_TZMA1_SIZE (STM32_ETZPC_BASE + 0x04)
|
||||
#define ETZPC_DECPROT0 (STM32_ETZPC_BASE + 0x10)
|
||||
|
||||
#define TZC_GATE_KEEPER (STM32_TZC_BASE + 0x008)
|
||||
#define TZC_REGION_ATTRIBUTE0 (STM32_TZC_BASE + 0x110)
|
||||
#define TZC_REGION_ID_ACCESS0 (STM32_TZC_BASE + 0x114)
|
||||
|
||||
#define TAMP_CR1 (STM32_TAMP_BASE + 0x00)
|
||||
|
||||
#define PWR_CR1 (STM32_PWR_BASE + 0x00)
|
||||
#define PWR_MCUCR (STM32_PWR_BASE + 0x14)
|
||||
#define PWR_CR1_DBP BIT(8)
|
||||
#define PWR_MCUCR_SBF BIT(6)
|
||||
|
||||
/* DBGMCU register */
|
||||
#define DBGMCU_IDC (STM32_DBGMCU_BASE + 0x00)
|
||||
#define DBGMCU_APB4FZ1 (STM32_DBGMCU_BASE + 0x2C)
|
||||
#define DBGMCU_APB4FZ1_IWDG2 BIT(2)
|
||||
#define DBGMCU_IDC_DEV_ID_MASK GENMASK(11, 0)
|
||||
#define DBGMCU_IDC_DEV_ID_SHIFT 0
|
||||
#define DBGMCU_IDC_REV_ID_MASK GENMASK(31, 16)
|
||||
#define DBGMCU_IDC_REV_ID_SHIFT 16
|
||||
|
||||
/* GPIOZ registers */
|
||||
#define GPIOZ_SECCFGR 0x54004030
|
||||
|
||||
/* boot interface from Bootrom
|
||||
* - boot instance = bit 31:16
|
||||
* - boot device = bit 15:0
|
||||
*/
|
||||
#define BOOTROM_PARAM_ADDR 0x2FFC0078
|
||||
#define BOOTROM_MODE_MASK GENMASK(15, 0)
|
||||
#define BOOTROM_MODE_SHIFT 0
|
||||
#define BOOTROM_INSTANCE_MASK GENMASK(31, 16)
|
||||
#define BOOTROM_INSTANCE_SHIFT 16
|
||||
|
||||
/* Device Part Number (RPN) = OTP_DATA1 lower 8 bits */
|
||||
#define RPN_SHIFT 0
|
||||
#define RPN_MASK GENMASK(7, 0)
|
||||
|
||||
/* Package = bit 27:29 of OTP16
|
||||
* - 100: LBGA448 (FFI) => AA = LFBGA 18x18mm 448 balls p. 0.8mm
|
||||
* - 011: LBGA354 (LCI) => AB = LFBGA 16x16mm 359 balls p. 0.8mm
|
||||
* - 010: TFBGA361 (FFC) => AC = TFBGA 12x12mm 361 balls p. 0.5mm
|
||||
* - 001: TFBGA257 (LCC) => AD = TFBGA 10x10mm 257 balls p. 0.5mm
|
||||
* - others: Reserved
|
||||
*/
|
||||
#define PKG_SHIFT 27
|
||||
#define PKG_MASK GENMASK(2, 0)
|
||||
#define RPN_MASK_STM32MP13x GENMASK(14, 0)
|
||||
#define RPN_MASK_STM32MP15x GENMASK(7, 0)
|
||||
|
||||
/*
|
||||
* early TLB into the .data section so that it not get cleared
|
||||
@ -93,120 +36,6 @@ u8 early_tlb[PGTABLE_SIZE] __section(".data") __aligned(0x4000);
|
||||
|
||||
struct lmb lmb;
|
||||
|
||||
#if !defined(CONFIG_SPL) || defined(CONFIG_SPL_BUILD)
|
||||
#ifndef CONFIG_TFABOOT
|
||||
static void security_init(void)
|
||||
{
|
||||
/* Disable the backup domain write protection */
|
||||
/* the protection is enable at each reset by hardware */
|
||||
/* And must be disable by software */
|
||||
setbits_le32(PWR_CR1, PWR_CR1_DBP);
|
||||
|
||||
while (!(readl(PWR_CR1) & PWR_CR1_DBP))
|
||||
;
|
||||
|
||||
/* If RTC clock isn't enable so this is a cold boot then we need
|
||||
* to reset the backup domain
|
||||
*/
|
||||
if (!(readl(RCC_BDCR) & RCC_BDCR_RTCSRC)) {
|
||||
setbits_le32(RCC_BDCR, RCC_BDCR_VSWRST);
|
||||
while (!(readl(RCC_BDCR) & RCC_BDCR_VSWRST))
|
||||
;
|
||||
clrbits_le32(RCC_BDCR, RCC_BDCR_VSWRST);
|
||||
}
|
||||
|
||||
/* allow non secure access in Write/Read for all peripheral */
|
||||
writel(GENMASK(25, 0), ETZPC_DECPROT0);
|
||||
|
||||
/* Open SYSRAM for no secure access */
|
||||
writel(0x0, ETZPC_TZMA1_SIZE);
|
||||
|
||||
/* enable TZC1 TZC2 clock */
|
||||
writel(BIT(11) | BIT(12), RCC_MP_APB5ENSETR);
|
||||
|
||||
/* Region 0 set to no access by default */
|
||||
/* bit 0 / 16 => nsaid0 read/write Enable
|
||||
* bit 1 / 17 => nsaid1 read/write Enable
|
||||
* ...
|
||||
* bit 15 / 31 => nsaid15 read/write Enable
|
||||
*/
|
||||
writel(0xFFFFFFFF, TZC_REGION_ID_ACCESS0);
|
||||
/* bit 30 / 31 => Secure Global Enable : write/read */
|
||||
/* bit 0 / 1 => Region Enable for filter 0/1 */
|
||||
writel(BIT(0) | BIT(1) | BIT(30) | BIT(31), TZC_REGION_ATTRIBUTE0);
|
||||
|
||||
/* Enable Filter 0 and 1 */
|
||||
setbits_le32(TZC_GATE_KEEPER, BIT(0) | BIT(1));
|
||||
|
||||
/* RCC trust zone deactivated */
|
||||
writel(0x0, RCC_TZCR);
|
||||
|
||||
/* TAMP: deactivate the internal tamper
|
||||
* Bit 23 ITAMP8E: monotonic counter overflow
|
||||
* Bit 20 ITAMP5E: RTC calendar overflow
|
||||
* Bit 19 ITAMP4E: HSE monitoring
|
||||
* Bit 18 ITAMP3E: LSE monitoring
|
||||
* Bit 16 ITAMP1E: RTC power domain supply monitoring
|
||||
*/
|
||||
writel(0x0, TAMP_CR1);
|
||||
|
||||
/* GPIOZ: deactivate the security */
|
||||
writel(BIT(0), RCC_MP_AHB5ENSETR);
|
||||
writel(0x0, GPIOZ_SECCFGR);
|
||||
}
|
||||
#endif /* CONFIG_TFABOOT */
|
||||
|
||||
/*
|
||||
* Debug init
|
||||
*/
|
||||
static void dbgmcu_init(void)
|
||||
{
|
||||
/*
|
||||
* Freeze IWDG2 if Cortex-A7 is in debug mode
|
||||
* done in TF-A for TRUSTED boot and
|
||||
* DBGMCU access is controlled by BSEC_DENABLE.DBGSWENABLE
|
||||
*/
|
||||
if (!IS_ENABLED(CONFIG_TFABOOT) && bsec_dbgswenable()) {
|
||||
setbits_le32(RCC_DBGCFGR, RCC_DBGCFGR_DBGCKEN);
|
||||
setbits_le32(DBGMCU_APB4FZ1, DBGMCU_APB4FZ1_IWDG2);
|
||||
}
|
||||
}
|
||||
|
||||
void spl_board_init(void)
|
||||
{
|
||||
dbgmcu_init();
|
||||
}
|
||||
#endif /* !defined(CONFIG_SPL) || defined(CONFIG_SPL_BUILD) */
|
||||
|
||||
#if !defined(CONFIG_TFABOOT) && \
|
||||
(!defined(CONFIG_SPL) || defined(CONFIG_SPL_BUILD))
|
||||
/* get bootmode from ROM code boot context: saved in TAMP register */
|
||||
static void update_bootmode(void)
|
||||
{
|
||||
u32 boot_mode;
|
||||
u32 bootrom_itf = readl(BOOTROM_PARAM_ADDR);
|
||||
u32 bootrom_device, bootrom_instance;
|
||||
|
||||
/* enable TAMP clock = RTCAPBEN */
|
||||
writel(BIT(8), RCC_MP_APB5ENSETR);
|
||||
|
||||
/* read bootrom context */
|
||||
bootrom_device =
|
||||
(bootrom_itf & BOOTROM_MODE_MASK) >> BOOTROM_MODE_SHIFT;
|
||||
bootrom_instance =
|
||||
(bootrom_itf & BOOTROM_INSTANCE_MASK) >> BOOTROM_INSTANCE_SHIFT;
|
||||
boot_mode =
|
||||
((bootrom_device << BOOT_TYPE_SHIFT) & BOOT_TYPE_MASK) |
|
||||
((bootrom_instance << BOOT_INSTANCE_SHIFT) &
|
||||
BOOT_INSTANCE_MASK);
|
||||
|
||||
/* save the boot mode in TAMP backup register */
|
||||
clrsetbits_le32(TAMP_BOOT_CONTEXT,
|
||||
TAMP_BOOT_MODE_MASK,
|
||||
boot_mode << TAMP_BOOT_MODE_SHIFT);
|
||||
}
|
||||
#endif
|
||||
|
||||
u32 get_bootmode(void)
|
||||
{
|
||||
/* read bootmode from TAMP backup register */
|
||||
@ -228,8 +57,11 @@ void dram_bank_mmu_setup(int bank)
|
||||
enum dcache_option option;
|
||||
|
||||
if (IS_ENABLED(CONFIG_SPL_BUILD)) {
|
||||
/* STM32_SYSRAM_BASE exist only when SPL is supported */
|
||||
#ifdef CONFIG_SPL
|
||||
start = ALIGN_DOWN(STM32_SYSRAM_BASE, MMU_SECTION_SIZE);
|
||||
size = ALIGN(STM32_SYSRAM_SIZE, MMU_SECTION_SIZE);
|
||||
#endif
|
||||
} else if (gd->flags & GD_FLG_RELOC) {
|
||||
/* bd->bi_dram is available only after relocation */
|
||||
start = bd->bi_dram[bank].start;
|
||||
@ -276,36 +108,32 @@ static void early_enable_caches(void)
|
||||
*/
|
||||
int arch_cpu_init(void)
|
||||
{
|
||||
u32 boot_mode;
|
||||
|
||||
early_enable_caches();
|
||||
|
||||
/* early armv7 timer init: needed for polling */
|
||||
timer_init();
|
||||
|
||||
#if !defined(CONFIG_SPL) || defined(CONFIG_SPL_BUILD)
|
||||
#ifndef CONFIG_TFABOOT
|
||||
security_init();
|
||||
update_bootmode();
|
||||
#endif
|
||||
/* Reset Coprocessor state unless it wakes up from Standby power mode */
|
||||
if (!(readl(PWR_MCUCR) & PWR_MCUCR_SBF)) {
|
||||
writel(TAMP_COPRO_STATE_OFF, TAMP_COPRO_STATE);
|
||||
writel(0, TAMP_COPRO_RSC_TBL_ADDRESS);
|
||||
}
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* weak function for SOC specific initialization */
|
||||
__weak void stm32mp_cpu_init(void)
|
||||
{
|
||||
}
|
||||
|
||||
int mach_cpu_init(void)
|
||||
{
|
||||
u32 boot_mode;
|
||||
|
||||
stm32mp_cpu_init();
|
||||
|
||||
boot_mode = get_bootmode();
|
||||
|
||||
if (IS_ENABLED(CONFIG_CMD_STM32PROG_SERIAL) &&
|
||||
(boot_mode & TAMP_BOOT_DEVICE_MASK) == BOOT_SERIAL_UART)
|
||||
gd->flags |= GD_FLG_SILENT | GD_FLG_DISABLE_CONSOLE;
|
||||
#if defined(CONFIG_DEBUG_UART) && \
|
||||
!defined(CONFIG_TFABOOT) && \
|
||||
(!defined(CONFIG_SPL) || defined(CONFIG_SPL_BUILD))
|
||||
else
|
||||
else if (IS_ENABLED(CONFIG_DEBUG_UART) && IS_ENABLED(CONFIG_SPL_BUILD))
|
||||
debug_uart_init();
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -326,52 +154,18 @@ void enable_caches(void)
|
||||
dcache_enable();
|
||||
}
|
||||
|
||||
static u32 read_idc(void)
|
||||
{
|
||||
/* DBGMCU access is controlled by BSEC_DENABLE.DBGSWENABLE */
|
||||
if (bsec_dbgswenable()) {
|
||||
setbits_le32(RCC_DBGCFGR, RCC_DBGCFGR_DBGCKEN);
|
||||
|
||||
return readl(DBGMCU_IDC);
|
||||
}
|
||||
|
||||
if (CONFIG_IS_ENABLED(STM32MP15x))
|
||||
return CPU_DEV_STM32MP15; /* STM32MP15x and unknown revision */
|
||||
else
|
||||
return 0x0;
|
||||
}
|
||||
|
||||
u32 get_cpu_dev(void)
|
||||
{
|
||||
return (read_idc() & DBGMCU_IDC_DEV_ID_MASK) >> DBGMCU_IDC_DEV_ID_SHIFT;
|
||||
}
|
||||
|
||||
u32 get_cpu_rev(void)
|
||||
{
|
||||
return (read_idc() & DBGMCU_IDC_REV_ID_MASK) >> DBGMCU_IDC_REV_ID_SHIFT;
|
||||
}
|
||||
|
||||
static u32 get_otp(int index, int shift, int mask)
|
||||
{
|
||||
int ret;
|
||||
struct udevice *dev;
|
||||
u32 otp = 0;
|
||||
|
||||
ret = uclass_get_device_by_driver(UCLASS_MISC,
|
||||
DM_DRIVER_GET(stm32mp_bsec),
|
||||
&dev);
|
||||
|
||||
if (!ret)
|
||||
ret = misc_read(dev, STM32_BSEC_SHADOW(index),
|
||||
&otp, sizeof(otp));
|
||||
|
||||
return (otp >> shift) & mask;
|
||||
}
|
||||
|
||||
/* Get Device Part Number (RPN) from OTP */
|
||||
static u32 get_cpu_rpn(void)
|
||||
{
|
||||
return get_otp(BSEC_OTP_RPN, RPN_SHIFT, RPN_MASK);
|
||||
int mask;
|
||||
|
||||
if (IS_ENABLED(CONFIG_STM32MP13x))
|
||||
mask = RPN_MASK_STM32MP13x;
|
||||
|
||||
if (IS_ENABLED(CONFIG_STM32MP15x))
|
||||
mask = RPN_MASK_STM32MP15x;
|
||||
|
||||
return get_otp(BSEC_OTP_RPN, RPN_SHIFT, mask);
|
||||
}
|
||||
|
||||
u32 get_cpu_type(void)
|
||||
@ -379,87 +173,7 @@ u32 get_cpu_type(void)
|
||||
return (get_cpu_dev() << 16) | get_cpu_rpn();
|
||||
}
|
||||
|
||||
/* Get Package options from OTP */
|
||||
u32 get_cpu_package(void)
|
||||
{
|
||||
return get_otp(BSEC_OTP_PKG, PKG_SHIFT, PKG_MASK);
|
||||
}
|
||||
|
||||
static const char * const soc_type[] = {
|
||||
"????",
|
||||
"151C", "151A", "151F", "151D",
|
||||
"153C", "153A", "153F", "153D",
|
||||
"157C", "157A", "157F", "157D"
|
||||
};
|
||||
|
||||
static const char * const soc_pkg[] = { "??", "AD", "AC", "AB", "AA" };
|
||||
static const char * const soc_rev[] = { "?", "A", "B", "Z" };
|
||||
|
||||
static void get_cpu_string_offsets(unsigned int *type, unsigned int *pkg,
|
||||
unsigned int *rev)
|
||||
{
|
||||
u32 cpu_type = get_cpu_type();
|
||||
u32 ct = cpu_type & ~(BIT(7) | BIT(0));
|
||||
u32 cm = ((cpu_type & BIT(7)) >> 6) | (cpu_type & BIT(0));
|
||||
u32 cp = get_cpu_package();
|
||||
|
||||
/* Bits 0 and 7 are the ACDF, 00:C 01:A 10:F 11:D */
|
||||
switch (ct) {
|
||||
case CPU_STM32MP151Cxx:
|
||||
*type = cm + 1;
|
||||
break;
|
||||
case CPU_STM32MP153Cxx:
|
||||
*type = cm + 5;
|
||||
break;
|
||||
case CPU_STM32MP157Cxx:
|
||||
*type = cm + 9;
|
||||
break;
|
||||
default:
|
||||
*type = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
/* Package */
|
||||
switch (cp) {
|
||||
case PKG_AA_LBGA448:
|
||||
case PKG_AB_LBGA354:
|
||||
case PKG_AC_TFBGA361:
|
||||
case PKG_AD_TFBGA257:
|
||||
*pkg = cp;
|
||||
break;
|
||||
default:
|
||||
*pkg = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
/* Revision */
|
||||
switch (get_cpu_rev()) {
|
||||
case CPU_REVA:
|
||||
*rev = 1;
|
||||
break;
|
||||
case CPU_REVB:
|
||||
*rev = 2;
|
||||
break;
|
||||
case CPU_REVZ:
|
||||
*rev = 3;
|
||||
break;
|
||||
default:
|
||||
*rev = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void get_soc_name(char name[SOC_NAME_SIZE])
|
||||
{
|
||||
unsigned int type, pkg, rev;
|
||||
|
||||
get_cpu_string_offsets(&type, &pkg, &rev);
|
||||
|
||||
snprintf(name, SOC_NAME_SIZE, "STM32MP%s%s Rev.%s",
|
||||
soc_type[type], soc_pkg[pkg], soc_rev[rev]);
|
||||
}
|
||||
|
||||
#if defined(CONFIG_DISPLAY_CPUINFO)
|
||||
/* used when CONFIG_DISPLAY_CPUINFO is activated */
|
||||
int print_cpuinfo(void)
|
||||
{
|
||||
char name[SOC_NAME_SIZE];
|
||||
@ -469,7 +183,6 @@ int print_cpuinfo(void)
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif /* CONFIG_DISPLAY_CPUINFO */
|
||||
|
||||
static void setup_boot_mode(void)
|
||||
{
|
||||
@ -599,40 +312,52 @@ static void setup_boot_mode(void)
|
||||
*/
|
||||
__weak int setup_mac_address(void)
|
||||
{
|
||||
#if defined(CONFIG_NET)
|
||||
int ret;
|
||||
int i;
|
||||
u32 otp[2];
|
||||
u32 otp[3];
|
||||
uchar enetaddr[6];
|
||||
struct udevice *dev;
|
||||
int nb_eth, nb_otp, index;
|
||||
|
||||
/* MAC already in environment */
|
||||
if (eth_env_get_enetaddr("ethaddr", enetaddr))
|
||||
if (!IS_ENABLED(CONFIG_NET))
|
||||
return 0;
|
||||
|
||||
nb_eth = get_eth_nb();
|
||||
|
||||
/* 6 bytes for each MAC addr and 4 bytes for each OTP */
|
||||
nb_otp = DIV_ROUND_UP(6 * nb_eth, 4);
|
||||
|
||||
ret = uclass_get_device_by_driver(UCLASS_MISC,
|
||||
DM_DRIVER_GET(stm32mp_bsec),
|
||||
&dev);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = misc_read(dev, STM32_BSEC_SHADOW(BSEC_OTP_MAC),
|
||||
otp, sizeof(otp));
|
||||
ret = misc_read(dev, STM32_BSEC_SHADOW(BSEC_OTP_MAC), otp, 4 * nb_otp);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
for (i = 0; i < 6; i++)
|
||||
enetaddr[i] = ((uint8_t *)&otp)[i];
|
||||
for (index = 0; index < nb_eth; index++) {
|
||||
/* MAC already in environment */
|
||||
if (eth_env_get_enetaddr_by_index("eth", index, enetaddr))
|
||||
continue;
|
||||
|
||||
if (!is_valid_ethaddr(enetaddr)) {
|
||||
log_err("invalid MAC address in OTP %pM\n", enetaddr);
|
||||
return -EINVAL;
|
||||
for (i = 0; i < 6; i++)
|
||||
enetaddr[i] = ((uint8_t *)&otp)[i + 6 * index];
|
||||
|
||||
if (!is_valid_ethaddr(enetaddr)) {
|
||||
log_err("invalid MAC address %d in OTP %pM\n",
|
||||
index, enetaddr);
|
||||
return -EINVAL;
|
||||
}
|
||||
log_debug("OTP MAC address %d = %pM\n", index, enetaddr);
|
||||
ret = eth_env_set_enetaddr_by_index("eth", index, enetaddr);
|
||||
if (ret) {
|
||||
log_err("Failed to set mac address %pM from OTP: %d\n",
|
||||
enetaddr, ret);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
log_debug("OTP MAC address = %pM\n", enetaddr);
|
||||
ret = eth_env_set_enetaddr("ethaddr", enetaddr);
|
||||
if (ret)
|
||||
log_err("Failed to set mac address %pM from OTP: %d\n", enetaddr, ret);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -664,15 +389,8 @@ static int setup_serial_number(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void setup_soc_type_pkg_rev(void)
|
||||
__weak void stm32mp_misc_init(void)
|
||||
{
|
||||
unsigned int type, pkg, rev;
|
||||
|
||||
get_cpu_string_offsets(&type, &pkg, &rev);
|
||||
|
||||
env_set("soc_type", soc_type[type]);
|
||||
env_set("soc_pkg", soc_pkg[pkg]);
|
||||
env_set("soc_rev", soc_rev[rev]);
|
||||
}
|
||||
|
||||
int arch_misc_init(void)
|
||||
@ -680,7 +398,7 @@ int arch_misc_init(void)
|
||||
setup_boot_mode();
|
||||
setup_mac_address();
|
||||
setup_serial_number();
|
||||
setup_soc_type_pkg_rev();
|
||||
stm32mp_misc_init();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -28,13 +28,120 @@
|
||||
|
||||
#define ETZPC_RESERVED 0xffffffff
|
||||
|
||||
#define STM32_FDCAN_BASE 0x4400e000
|
||||
#define STM32_CRYP2_BASE 0x4c005000
|
||||
#define STM32_CRYP1_BASE 0x54001000
|
||||
#define STM32_GPU_BASE 0x59000000
|
||||
#define STM32_DSI_BASE 0x5a000000
|
||||
#define STM32MP13_FDCAN_BASE 0x4400F000
|
||||
#define STM32MP13_ADC1_BASE 0x48003000
|
||||
#define STM32MP13_TSC_BASE 0x5000B000
|
||||
#define STM32MP13_CRYP_BASE 0x54002000
|
||||
#define STM32MP13_ETH2_BASE 0x5800E000
|
||||
#define STM32MP13_DCMIPP_BASE 0x5A000000
|
||||
#define STM32MP13_LTDC_BASE 0x5A010000
|
||||
|
||||
static const u32 stm32mp1_ip_addr[] = {
|
||||
#define STM32MP15_FDCAN_BASE 0x4400e000
|
||||
#define STM32MP15_CRYP2_BASE 0x4c005000
|
||||
#define STM32MP15_CRYP1_BASE 0x54001000
|
||||
#define STM32MP15_GPU_BASE 0x59000000
|
||||
#define STM32MP15_DSI_BASE 0x5a000000
|
||||
|
||||
static const u32 stm32mp13_ip_addr[] = {
|
||||
0x50025000, /* 0 VREFBUF APB3 */
|
||||
0x50021000, /* 1 LPTIM2 APB3 */
|
||||
0x50022000, /* 2 LPTIM3 APB3 */
|
||||
STM32MP13_LTDC_BASE, /* 3 LTDC APB4 */
|
||||
STM32MP13_DCMIPP_BASE, /* 4 DCMIPP APB4 */
|
||||
0x5A006000, /* 5 USBPHYCTRL APB4 */
|
||||
0x5A003000, /* 6 DDRCTRLPHY APB4 */
|
||||
ETZPC_RESERVED, /* 7 Reserved*/
|
||||
ETZPC_RESERVED, /* 8 Reserved*/
|
||||
ETZPC_RESERVED, /* 9 Reserved*/
|
||||
0x5C006000, /* 10 TZC APB5 */
|
||||
0x58001000, /* 11 MCE APB5 */
|
||||
0x5C000000, /* 12 IWDG1 APB5 */
|
||||
0x5C008000, /* 13 STGENC APB5 */
|
||||
ETZPC_RESERVED, /* 14 Reserved*/
|
||||
ETZPC_RESERVED, /* 15 Reserved*/
|
||||
0x4C000000, /* 16 USART1 APB6 */
|
||||
0x4C001000, /* 17 USART2 APB6 */
|
||||
0x4C002000, /* 18 SPI4 APB6 */
|
||||
0x4C003000, /* 19 SPI5 APB6 */
|
||||
0x4C004000, /* 20 I2C3 APB6 */
|
||||
0x4C005000, /* 21 I2C4 APB6 */
|
||||
0x4C006000, /* 22 I2C5 APB6 */
|
||||
0x4C007000, /* 23 TIM12 APB6 */
|
||||
0x4C008000, /* 24 TIM13 APB6 */
|
||||
0x4C009000, /* 25 TIM14 APB6 */
|
||||
0x4C00A000, /* 26 TIM15 APB6 */
|
||||
0x4C00B000, /* 27 TIM16 APB6 */
|
||||
0x4C00C000, /* 28 TIM17 APB6 */
|
||||
ETZPC_RESERVED, /* 29 Reserved*/
|
||||
ETZPC_RESERVED, /* 30 Reserved*/
|
||||
ETZPC_RESERVED, /* 31 Reserved*/
|
||||
STM32MP13_ADC1_BASE, /* 32 ADC1 AHB2 */
|
||||
0x48004000, /* 33 ADC2 AHB2 */
|
||||
0x49000000, /* 34 OTG AHB2 */
|
||||
ETZPC_RESERVED, /* 35 Reserved*/
|
||||
ETZPC_RESERVED, /* 36 Reserved*/
|
||||
STM32MP13_TSC_BASE, /* 37 TSC AHB4 */
|
||||
ETZPC_RESERVED, /* 38 Reserved*/
|
||||
ETZPC_RESERVED, /* 39 Reserved*/
|
||||
0x54004000, /* 40 RNG AHB5 */
|
||||
0x54003000, /* 41 HASH AHB5 */
|
||||
STM32MP13_CRYP_BASE, /* 42 CRYPT AHB5 */
|
||||
0x54005000, /* 43 SAES AHB5 */
|
||||
0x54006000, /* 44 PKA AHB5 */
|
||||
0x54000000, /* 45 BKPSRAM AHB5 */
|
||||
ETZPC_RESERVED, /* 46 Reserved*/
|
||||
ETZPC_RESERVED, /* 47 Reserved*/
|
||||
0x5800A000, /* 48 ETH1 AHB6 */
|
||||
STM32MP13_ETH2_BASE, /* 49 ETH2 AHB6 */
|
||||
0x58005000, /* 50 SDMMC1 AHB6 */
|
||||
0x58007000, /* 51 SDMMC2 AHB6 */
|
||||
ETZPC_RESERVED, /* 52 Reserved*/
|
||||
ETZPC_RESERVED, /* 53 Reserved*/
|
||||
0x58002000, /* 54 FMC AHB6 */
|
||||
0x58003000, /* 55 QSPI AHB6 */
|
||||
ETZPC_RESERVED, /* 56 Reserved*/
|
||||
ETZPC_RESERVED, /* 57 Reserved*/
|
||||
ETZPC_RESERVED, /* 58 Reserved*/
|
||||
ETZPC_RESERVED, /* 59 Reserved*/
|
||||
0x30000000, /* 60 SRAM1 MLAHB */
|
||||
0x30004000, /* 61 SRAM2 MLAHB */
|
||||
0x30006000, /* 62 SRAM3 MLAHB */
|
||||
ETZPC_RESERVED, /* 63 Reserved*/
|
||||
ETZPC_RESERVED, /* 64 Reserved*/
|
||||
ETZPC_RESERVED, /* 65 Reserved*/
|
||||
ETZPC_RESERVED, /* 66 Reserved*/
|
||||
ETZPC_RESERVED, /* 67 Reserved*/
|
||||
ETZPC_RESERVED, /* 68 Reserved*/
|
||||
ETZPC_RESERVED, /* 69 Reserved*/
|
||||
ETZPC_RESERVED, /* 70 Reserved*/
|
||||
ETZPC_RESERVED, /* 71 Reserved*/
|
||||
ETZPC_RESERVED, /* 72 Reserved*/
|
||||
ETZPC_RESERVED, /* 73 Reserved*/
|
||||
ETZPC_RESERVED, /* 74 Reserved*/
|
||||
ETZPC_RESERVED, /* 75 Reserved*/
|
||||
ETZPC_RESERVED, /* 76 Reserved*/
|
||||
ETZPC_RESERVED, /* 77 Reserved*/
|
||||
ETZPC_RESERVED, /* 78 Reserved*/
|
||||
ETZPC_RESERVED, /* 79 Reserved*/
|
||||
ETZPC_RESERVED, /* 80 Reserved*/
|
||||
ETZPC_RESERVED, /* 81 Reserved*/
|
||||
ETZPC_RESERVED, /* 82 Reserved*/
|
||||
ETZPC_RESERVED, /* 83 Reserved*/
|
||||
ETZPC_RESERVED, /* 84 Reserved*/
|
||||
ETZPC_RESERVED, /* 85 Reserved*/
|
||||
ETZPC_RESERVED, /* 86 Reserved*/
|
||||
ETZPC_RESERVED, /* 87 Reserved*/
|
||||
ETZPC_RESERVED, /* 88 Reserved*/
|
||||
ETZPC_RESERVED, /* 89 Reserved*/
|
||||
ETZPC_RESERVED, /* 90 Reserved*/
|
||||
ETZPC_RESERVED, /* 91 Reserved*/
|
||||
ETZPC_RESERVED, /* 92 Reserved*/
|
||||
ETZPC_RESERVED, /* 93 Reserved*/
|
||||
ETZPC_RESERVED, /* 94 Reserved*/
|
||||
ETZPC_RESERVED, /* 95 Reserved*/
|
||||
};
|
||||
|
||||
static const u32 stm32mp15_ip_addr[] = {
|
||||
0x5c008000, /* 00 stgenc */
|
||||
0x54000000, /* 01 bkpsram */
|
||||
0x5c003000, /* 02 iwdg1 */
|
||||
@ -44,7 +151,7 @@ static const u32 stm32mp1_ip_addr[] = {
|
||||
ETZPC_RESERVED, /* 06 reserved */
|
||||
0x54003000, /* 07 rng1 */
|
||||
0x54002000, /* 08 hash1 */
|
||||
STM32_CRYP1_BASE, /* 09 cryp1 */
|
||||
STM32MP15_CRYP1_BASE, /* 09 cryp1 */
|
||||
0x5a003000, /* 0A ddrctrl */
|
||||
0x5a004000, /* 0B ddrphyc */
|
||||
0x5c009000, /* 0C i2c6 */
|
||||
@ -97,7 +204,7 @@ static const u32 stm32mp1_ip_addr[] = {
|
||||
0x4400b000, /* 3B sai2 */
|
||||
0x4400c000, /* 3C sai3 */
|
||||
0x4400d000, /* 3D dfsdm */
|
||||
STM32_FDCAN_BASE, /* 3E tt_fdcan */
|
||||
STM32MP15_FDCAN_BASE, /* 3E tt_fdcan */
|
||||
ETZPC_RESERVED, /* 3F reserved */
|
||||
0x50021000, /* 40 lptim2 */
|
||||
0x50022000, /* 41 lptim3 */
|
||||
@ -110,7 +217,7 @@ static const u32 stm32mp1_ip_addr[] = {
|
||||
0x48003000, /* 48 adc */
|
||||
0x4c002000, /* 49 hash2 */
|
||||
0x4c003000, /* 4A rng2 */
|
||||
STM32_CRYP2_BASE, /* 4B cryp2 */
|
||||
STM32MP15_CRYP2_BASE, /* 4B cryp2 */
|
||||
ETZPC_RESERVED, /* 4C reserved */
|
||||
ETZPC_RESERVED, /* 4D reserved */
|
||||
ETZPC_RESERVED, /* 4E reserved */
|
||||
@ -163,8 +270,14 @@ static int stm32_fdt_fixup_etzpc(void *fdt, int soc_node)
|
||||
int offset, shift;
|
||||
u32 addr, status, decprot[ETZPC_DECPROT_NB];
|
||||
|
||||
array = stm32mp1_ip_addr;
|
||||
array_size = ARRAY_SIZE(stm32mp1_ip_addr);
|
||||
if (IS_ENABLED(CONFIG_STM32MP13x)) {
|
||||
array = stm32mp13_ip_addr;
|
||||
array_size = ARRAY_SIZE(stm32mp13_ip_addr);
|
||||
}
|
||||
if (IS_ENABLED(CONFIG_STM32MP15x)) {
|
||||
array = stm32mp15_ip_addr;
|
||||
array_size = ARRAY_SIZE(stm32mp15_ip_addr);
|
||||
}
|
||||
|
||||
for (i = 0; i < ETZPC_DECPROT_NB; i++)
|
||||
decprot[i] = readl(ETZPC_DECPROT(i));
|
||||
@ -248,6 +361,107 @@ static void stm32_fdt_disable_optee(void *blob)
|
||||
}
|
||||
}
|
||||
|
||||
static void stm32mp13_fdt_fixup(void *blob, int soc, u32 cpu, char *name)
|
||||
{
|
||||
switch (cpu) {
|
||||
case CPU_STM32MP131Fxx:
|
||||
case CPU_STM32MP131Dxx:
|
||||
case CPU_STM32MP131Cxx:
|
||||
case CPU_STM32MP131Axx:
|
||||
stm32_fdt_disable(blob, soc, STM32MP13_FDCAN_BASE, "can", name);
|
||||
stm32_fdt_disable(blob, soc, STM32MP13_ADC1_BASE, "adc", name);
|
||||
fallthrough;
|
||||
case CPU_STM32MP133Fxx:
|
||||
case CPU_STM32MP133Dxx:
|
||||
case CPU_STM32MP133Cxx:
|
||||
case CPU_STM32MP133Axx:
|
||||
stm32_fdt_disable(blob, soc, STM32MP13_LTDC_BASE, "ltdc", name);
|
||||
stm32_fdt_disable(blob, soc, STM32MP13_DCMIPP_BASE, "dcmipp",
|
||||
name);
|
||||
stm32_fdt_disable(blob, soc, STM32MP13_TSC_BASE, "tsc", name);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
switch (cpu) {
|
||||
case CPU_STM32MP135Dxx:
|
||||
case CPU_STM32MP135Axx:
|
||||
case CPU_STM32MP133Dxx:
|
||||
case CPU_STM32MP133Axx:
|
||||
case CPU_STM32MP131Dxx:
|
||||
case CPU_STM32MP131Axx:
|
||||
stm32_fdt_disable(blob, soc, STM32MP13_CRYP_BASE, "cryp", name);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void stm32mp15_fdt_fixup(void *blob, int soc, u32 cpu, char *name)
|
||||
{
|
||||
u32 pkg;
|
||||
|
||||
switch (cpu) {
|
||||
case CPU_STM32MP151Fxx:
|
||||
case CPU_STM32MP151Dxx:
|
||||
case CPU_STM32MP151Cxx:
|
||||
case CPU_STM32MP151Axx:
|
||||
stm32_fdt_fixup_cpu(blob, name);
|
||||
/* after cpu delete we can't trust the soc offsets anymore */
|
||||
soc = fdt_path_offset(blob, "/soc");
|
||||
stm32_fdt_disable(blob, soc, STM32MP15_FDCAN_BASE, "can", name);
|
||||
fallthrough;
|
||||
case CPU_STM32MP153Fxx:
|
||||
case CPU_STM32MP153Dxx:
|
||||
case CPU_STM32MP153Cxx:
|
||||
case CPU_STM32MP153Axx:
|
||||
stm32_fdt_disable(blob, soc, STM32MP15_GPU_BASE, "gpu", name);
|
||||
stm32_fdt_disable(blob, soc, STM32MP15_DSI_BASE, "dsi", name);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
switch (cpu) {
|
||||
case CPU_STM32MP157Dxx:
|
||||
case CPU_STM32MP157Axx:
|
||||
case CPU_STM32MP153Dxx:
|
||||
case CPU_STM32MP153Axx:
|
||||
case CPU_STM32MP151Dxx:
|
||||
case CPU_STM32MP151Axx:
|
||||
stm32_fdt_disable(blob, soc, STM32MP15_CRYP1_BASE, "cryp",
|
||||
name);
|
||||
stm32_fdt_disable(blob, soc, STM32MP15_CRYP2_BASE, "cryp",
|
||||
name);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
switch (get_cpu_package()) {
|
||||
case STM32MP15_PKG_AA_LBGA448:
|
||||
pkg = STM32MP_PKG_AA;
|
||||
break;
|
||||
case STM32MP15_PKG_AB_LBGA354:
|
||||
pkg = STM32MP_PKG_AB;
|
||||
break;
|
||||
case STM32MP15_PKG_AC_TFBGA361:
|
||||
pkg = STM32MP_PKG_AC;
|
||||
break;
|
||||
case STM32MP15_PKG_AD_TFBGA257:
|
||||
pkg = STM32MP_PKG_AD;
|
||||
break;
|
||||
default:
|
||||
pkg = 0;
|
||||
break;
|
||||
}
|
||||
if (pkg) {
|
||||
do_fixup_by_compat_u32(blob, "st,stm32mp157-pinctrl",
|
||||
"st,package", pkg, false);
|
||||
do_fixup_by_compat_u32(blob, "st,stm32mp157-z-pinctrl",
|
||||
"st,package", pkg, false);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* This function is called right before the kernel is booted. "blob" is the
|
||||
* device tree that will be passed to the kernel.
|
||||
@ -256,10 +470,13 @@ int ft_system_setup(void *blob, struct bd_info *bd)
|
||||
{
|
||||
int ret = 0;
|
||||
int soc;
|
||||
u32 pkg, cpu;
|
||||
u32 cpu;
|
||||
char name[SOC_NAME_SIZE];
|
||||
|
||||
soc = fdt_path_offset(blob, "/soc");
|
||||
/* when absent, nothing to do */
|
||||
if (soc == -FDT_ERR_NOTFOUND)
|
||||
return 0;
|
||||
if (soc < 0)
|
||||
return soc;
|
||||
|
||||
@ -273,77 +490,24 @@ int ft_system_setup(void *blob, struct bd_info *bd)
|
||||
cpu = get_cpu_type();
|
||||
get_soc_name(name);
|
||||
|
||||
switch (cpu) {
|
||||
case CPU_STM32MP151Fxx:
|
||||
case CPU_STM32MP151Dxx:
|
||||
case CPU_STM32MP151Cxx:
|
||||
case CPU_STM32MP151Axx:
|
||||
stm32_fdt_fixup_cpu(blob, name);
|
||||
/* after cpu delete we can't trust the soc offsets anymore */
|
||||
soc = fdt_path_offset(blob, "/soc");
|
||||
stm32_fdt_disable(blob, soc, STM32_FDCAN_BASE, "can", name);
|
||||
/* fall through */
|
||||
case CPU_STM32MP153Fxx:
|
||||
case CPU_STM32MP153Dxx:
|
||||
case CPU_STM32MP153Cxx:
|
||||
case CPU_STM32MP153Axx:
|
||||
stm32_fdt_disable(blob, soc, STM32_GPU_BASE, "gpu", name);
|
||||
stm32_fdt_disable(blob, soc, STM32_DSI_BASE, "dsi", name);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (IS_ENABLED(CONFIG_STM32MP13x))
|
||||
stm32mp13_fdt_fixup(blob, soc, cpu, name);
|
||||
if (IS_ENABLED(CONFIG_STM32MP15x)) {
|
||||
stm32mp15_fdt_fixup(blob, soc, cpu, name);
|
||||
|
||||
switch (cpu) {
|
||||
case CPU_STM32MP157Dxx:
|
||||
case CPU_STM32MP157Axx:
|
||||
case CPU_STM32MP153Dxx:
|
||||
case CPU_STM32MP153Axx:
|
||||
case CPU_STM32MP151Dxx:
|
||||
case CPU_STM32MP151Axx:
|
||||
stm32_fdt_disable(blob, soc, STM32_CRYP1_BASE, "cryp", name);
|
||||
stm32_fdt_disable(blob, soc, STM32_CRYP2_BASE, "cryp", name);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
/*
|
||||
* TEMP: remove OP-TEE nodes in kernel device tree
|
||||
* copied from U-Boot device tree by optee_copy_fdt_nodes
|
||||
* when OP-TEE is not detected (probe failed)
|
||||
* these OP-TEE nodes are present in <board>-u-boot.dtsi
|
||||
* under CONFIG_STM32MP15x_STM32IMAGE only for compatibility
|
||||
* when FIP is not used by TF-A
|
||||
*/
|
||||
if (CONFIG_IS_ENABLED(STM32MP15x_STM32IMAGE) &&
|
||||
CONFIG_IS_ENABLED(OPTEE) &&
|
||||
!tee_find_device(NULL, NULL, NULL, NULL))
|
||||
stm32_fdt_disable_optee(blob);
|
||||
}
|
||||
|
||||
switch (get_cpu_package()) {
|
||||
case PKG_AA_LBGA448:
|
||||
pkg = STM32MP_PKG_AA;
|
||||
break;
|
||||
case PKG_AB_LBGA354:
|
||||
pkg = STM32MP_PKG_AB;
|
||||
break;
|
||||
case PKG_AC_TFBGA361:
|
||||
pkg = STM32MP_PKG_AC;
|
||||
break;
|
||||
case PKG_AD_TFBGA257:
|
||||
pkg = STM32MP_PKG_AD;
|
||||
break;
|
||||
default:
|
||||
pkg = 0;
|
||||
break;
|
||||
}
|
||||
if (pkg) {
|
||||
do_fixup_by_compat_u32(blob, "st,stm32mp157-pinctrl",
|
||||
"st,package", pkg, false);
|
||||
do_fixup_by_compat_u32(blob, "st,stm32mp157-z-pinctrl",
|
||||
"st,package", pkg, false);
|
||||
}
|
||||
|
||||
/*
|
||||
* TEMP: remove OP-TEE nodes in kernel device tree
|
||||
* copied from U-Boot device tree by optee_copy_fdt_nodes
|
||||
* when OP-TEE is not detected (probe failed)
|
||||
* these OP-TEE nodes are present in <board>-u-boot.dtsi
|
||||
* under CONFIG_STM32MP15x_STM32IMAGE only for compatibility
|
||||
* when FIP is not used by TF-A
|
||||
*/
|
||||
if (CONFIG_IS_ENABLED(STM32MP15x_STM32IMAGE) &&
|
||||
CONFIG_IS_ENABLED(OPTEE) &&
|
||||
!tee_find_device(NULL, NULL, NULL, NULL))
|
||||
stm32_fdt_disable_optee(blob);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -5,3 +5,11 @@
|
||||
|
||||
/* check self hosted debug status = BSEC_DENABLE.DBGSWENABLE */
|
||||
bool bsec_dbgswenable(void);
|
||||
|
||||
/* Bitfield definition for LOCK status */
|
||||
/* warning: bit 31 is reserved in PTA NVEM for OTP_UPDATE_REQ */
|
||||
#define BSEC_LOCK_PERM BIT(30)
|
||||
#define BSEC_LOCK_SHADOW_R BIT(29)
|
||||
#define BSEC_LOCK_SHADOW_W BIT(28)
|
||||
#define BSEC_LOCK_SHADOW_P BIT(27)
|
||||
#define BSEC_LOCK_ERROR BIT(26)
|
||||
|
||||
@ -1,87 +0,0 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0+ */
|
||||
/*
|
||||
* (C) Copyright 2016
|
||||
* Vikas Manocha, <vikas.manocha@st.com>
|
||||
*/
|
||||
|
||||
#ifndef _STM32_GPIO_H_
|
||||
#define _STM32_GPIO_H_
|
||||
#include <asm/gpio.h>
|
||||
|
||||
enum stm32_gpio_mode {
|
||||
STM32_GPIO_MODE_IN = 0,
|
||||
STM32_GPIO_MODE_OUT,
|
||||
STM32_GPIO_MODE_AF,
|
||||
STM32_GPIO_MODE_AN
|
||||
};
|
||||
|
||||
enum stm32_gpio_otype {
|
||||
STM32_GPIO_OTYPE_PP = 0,
|
||||
STM32_GPIO_OTYPE_OD
|
||||
};
|
||||
|
||||
enum stm32_gpio_speed {
|
||||
STM32_GPIO_SPEED_2M = 0,
|
||||
STM32_GPIO_SPEED_25M,
|
||||
STM32_GPIO_SPEED_50M,
|
||||
STM32_GPIO_SPEED_100M
|
||||
};
|
||||
|
||||
enum stm32_gpio_pupd {
|
||||
STM32_GPIO_PUPD_NO = 0,
|
||||
STM32_GPIO_PUPD_UP,
|
||||
STM32_GPIO_PUPD_DOWN
|
||||
};
|
||||
|
||||
enum stm32_gpio_af {
|
||||
STM32_GPIO_AF0 = 0,
|
||||
STM32_GPIO_AF1,
|
||||
STM32_GPIO_AF2,
|
||||
STM32_GPIO_AF3,
|
||||
STM32_GPIO_AF4,
|
||||
STM32_GPIO_AF5,
|
||||
STM32_GPIO_AF6,
|
||||
STM32_GPIO_AF7,
|
||||
STM32_GPIO_AF8,
|
||||
STM32_GPIO_AF9,
|
||||
STM32_GPIO_AF10,
|
||||
STM32_GPIO_AF11,
|
||||
STM32_GPIO_AF12,
|
||||
STM32_GPIO_AF13,
|
||||
STM32_GPIO_AF14,
|
||||
STM32_GPIO_AF15
|
||||
};
|
||||
|
||||
struct stm32_gpio_dsc {
|
||||
u8 port;
|
||||
u8 pin;
|
||||
};
|
||||
|
||||
struct stm32_gpio_ctl {
|
||||
enum stm32_gpio_mode mode;
|
||||
enum stm32_gpio_otype otype;
|
||||
enum stm32_gpio_speed speed;
|
||||
enum stm32_gpio_pupd pupd;
|
||||
enum stm32_gpio_af af;
|
||||
};
|
||||
|
||||
struct stm32_gpio_regs {
|
||||
u32 moder; /* GPIO port mode */
|
||||
u32 otyper; /* GPIO port output type */
|
||||
u32 ospeedr; /* GPIO port output speed */
|
||||
u32 pupdr; /* GPIO port pull-up/pull-down */
|
||||
u32 idr; /* GPIO port input data */
|
||||
u32 odr; /* GPIO port output data */
|
||||
u32 bsrr; /* GPIO port bit set/reset */
|
||||
u32 lckr; /* GPIO port configuration lock */
|
||||
u32 afr[2]; /* GPIO alternate function */
|
||||
};
|
||||
|
||||
struct stm32_gpio_priv {
|
||||
struct stm32_gpio_regs *regs;
|
||||
unsigned int gpio_range;
|
||||
};
|
||||
|
||||
int stm32_offset_to_index(struct udevice *dev, unsigned int offset);
|
||||
|
||||
#endif /* _STM32_GPIO_H_ */
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user