boards/arm: Add initial support for SiLabs Giant Gecko GG11 STK

This commit adds initial support for the Silicon Labs EFM32
Giant Gecko GG11 StarterKit.

Features supported for now are NVIC, SysTick, GPIO, Flash,
Counter, I2C, UART and Ethernet. Support for Watchdog and
ADC will follow as soon as their respective PRs are merged.

Signed-off-by: Oane Kingma <o.kingma@interay.com>
This commit is contained in:
Oane Kingma 2019-11-29 21:32:13 +01:00 committed by Maureen Helm
commit c52787c4d1
15 changed files with 893 additions and 0 deletions

View file

@ -0,0 +1,276 @@
/*
* Copyright (c) 2019 Interay Solutions B.V.
* Copyright (c) 2019 Oane Kingma
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <arm/armv7-m.dtsi>
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/i2c/i2c.h>
#include "gpio_gecko.h"
/ {
cpus {
#address-cells = <1>;
#size-cells = <0>;
cpu@0 {
compatible = "arm,cortex-m4f";
reg = <0>;
};
};
sram0: memory@20000000 {
device_type = "memory";
compatible = "mmio-sram";
};
soc {
flash-controller@40000000 {
compatible = "silabs,gecko-flash-controller";
label = "FLASH_CTRL";
reg = <0x40000000 0x110>;
interrupts = <33 0>;
#address-cells = <1>;
#size-cells = <1>;
flash0: flash@0 {
compatible = "soc-nv-flash";
label = "FLASH_0";
write-block-size = <4>;
erase-block-size = <2048>;
};
};
rtcc0: rtcc@40062000 { /* RTCC0 */
compatible = "silabs,gecko-rtcc";
reg = <0x40062000 0x184>;
interrupts = <31 0>;
clock-frequency = <32768>;
prescaler = <1>;
status = "disabled";
label = "RTCC_0";
};
uart0: uart@40014000 { /* UART0 */
compatible = "silabs,gecko-uart";
reg = <0x40014000 0x400>;
interrupts = <21 0 22 0>;
interrupt-names = "rx", "tx";
peripheral-id = <0>;
status = "disabled";
label = "UART_0";
};
uart1: uart@40014400 { /* UART1 */
compatible = "silabs,gecko-uart";
reg = <0x40014400 0x400>;
interrupts = <23 0 24 0>;
interrupt-names = "rx", "tx";
peripheral-id = <1>;
status = "disabled";
label = "UART_1";
};
usart0: usart@40010000 { /* USART0 */
compatible = "silabs,gecko-usart";
reg = <0x40010000 0x400>;
interrupts = <6 0 7 0>;
interrupt-names = "rx", "tx";
peripheral-id = <0>;
status = "disabled";
label = "USART_0";
};
usart1: usart@40010400 { /* USART1 */
compatible = "silabs,gecko-usart";
reg = <0x40010400 0x400>;
interrupts = <17 0 18 0>;
interrupt-names = "rx", "tx";
peripheral-id = <1>;
status = "disabled";
label = "USART_1";
};
usart2: usart@40010800 { /* USART2 */
compatible = "silabs,gecko-usart";
reg = <0x40010800 0x400>;
interrupts = <19 0 20 0>;
interrupt-names = "rx", "tx";
peripheral-id = <2>;
status = "disabled";
label = "USART_2";
};
usart3: usart@40010c00 { /* USART3 */
compatible = "silabs,gecko-usart";
reg = <0x40010c00 0x400>;
interrupts = <37 0 38 0>;
interrupt-names = "rx", "tx";
peripheral-id = <3>;
status = "disabled";
label = "USART_3";
};
usart4: usart@40011000 { /* USART4 */
compatible = "silabs,gecko-usart";
reg = <0x40011000 0x400>;
interrupts = <39 0 40 0>;
interrupt-names = "rx", "tx";
peripheral-id = <4>;
status = "disabled";
label = "USART_4";
};
usart5: usart@40011400 { /* USART5 */
compatible = "silabs,gecko-usart";
reg = <0x40011400 0x400>;
interrupts = <50 0 51 0>;
interrupt-names = "rx", "tx";
peripheral-id = <5>;
status = "disabled";
label = "USART_5";
};
leuart0: leuart@4006a000 { /* LEUART0 */
compatible = "silabs,gecko-leuart";
reg = <0x4006a000 0x400>;
interrupts = <25 0>;
peripheral-id = <0>;
status = "disabled";
label = "LEUART_0";
};
leuart1: leuart@4006a400 { /* LEUART1 */
compatible = "silabs,gecko-leuart";
reg = <0x4006a400 0x400>;
interrupts = <26 0>;
peripheral-id = <1>;
status = "disabled";
label = "LEUART_1";
};
i2c0: i2c@40089000 {
compatible = "silabs,gecko-i2c";
clock-frequency = <I2C_BITRATE_STANDARD>;
#address-cells = <1>;
#size-cells = <0>;
reg = <0x40089000 0x400>;
interrupts = <11 0>;
label = "I2C_0";
status = "disabled";
};
i2c1: i2c@40089400 {
compatible = "silabs,gecko-i2c";
clock-frequency = <I2C_BITRATE_STANDARD>;
#address-cells = <1>;
#size-cells = <0>;
reg = <0x40089400 0x400>;
interrupts = <12 0>;
label = "I2C_1";
status = "disabled";
};
i2c2: i2c@40089800 {
compatible = "silabs,gecko-i2c";
clock-frequency = <I2C_BITRATE_STANDARD>;
#address-cells = <1>;
#size-cells = <0>;
reg = <0x40089800 0x400>;
interrupts = <45 0>;
label = "I2C_2";
status = "disabled";
};
gpio: gpio@40088400 {
compatible = "silabs,efm32-gpio";
reg = <0x40088400 0xc00>;
interrupts = <3 2 13 2>;
interrupt-names = "GPIO_EVEN", "GPIO_ODD";
label = "GPIO";
ranges;
#address-cells = <1>;
#size-cells = <1>;
gpioa: gpio@40088000 {
compatible = "silabs,efm32-gpio-port";
reg = <0x40088000 0x30>;
label = "GPIO_A";
gpio-controller;
#gpio-cells = <2>;
};
gpiob: gpio@40088030 {
compatible = "silabs,efm32-gpio-port";
reg = <0x40088030 0x30>;
label = "GPIO_B";
gpio-controller;
#gpio-cells = <2>;
};
gpioc: gpio@40088060 {
compatible = "silabs,efm32-gpio-port";
reg = <0x40088060 0x30>;
label = "GPIO_C";
gpio-controller;
#gpio-cells = <2>;
};
gpiod: gpio@40088090 {
compatible = "silabs,efm32-gpio-port";
reg = <0x40088090 0x30>;
label = "GPIO_D";
gpio-controller;
#gpio-cells = <2>;
};
gpioe: gpio@400880c0 {
compatible = "silabs,efm32-gpio-port";
reg = <0x400880c0 0x30>;
label = "GPIO_E";
gpio-controller;
#gpio-cells = <2>;
};
gpiof: gpio@400880f0 {
compatible = "silabs,efm32-gpio-port";
reg = <0x400880f0 0x30>;
label = "GPIO_F";
gpio-controller;
#gpio-cells = <2>;
};
gpiog: gpio@40088120 {
compatible = "silabs,efm32-gpio-port";
reg = <0x40088120 0x30>;
label = "GPIO_G";
gpio-controller;
#gpio-cells = <2>;
};
gpioh: gpio@40088150 {
compatible = "silabs,efm32-gpio-port";
reg = <0x40088150 0x30>;
label = "GPIO_H";
gpio-controller;
#gpio-cells = <2>;
};
gpioi: gpio@40088180 {
compatible = "silabs,efm32-gpio-port";
reg = <0x40088180 0x30>;
label = "GPIO_I";
gpio-controller;
#gpio-cells = <2>;
};
};
};
};
&nvic {
arm,num-irq-priority-bits = <3>;
};