From c52787c4d1ce1295d88d3b3a0259b43c6d402f14 Mon Sep 17 00:00:00 2001 From: Oane Kingma Date: Fri, 29 Nov 2019 21:32:13 +0100 Subject: [PATCH] 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 --- CODEOWNERS | 1 + boards/arm/efm32gg_stk3701a/CMakeLists.txt | 9 + boards/arm/efm32gg_stk3701a/Kconfig | 16 + boards/arm/efm32gg_stk3701a/Kconfig.board | 10 + boards/arm/efm32gg_stk3701a/Kconfig.defconfig | 66 +++++ boards/arm/efm32gg_stk3701a/board.c | 72 +++++ boards/arm/efm32gg_stk3701a/board.cmake | 6 + boards/arm/efm32gg_stk3701a/board.h | 29 ++ .../efm32gg_stk3701a/doc/efm32gg_stk3701a.jpg | Bin 0 -> 15218 bytes boards/arm/efm32gg_stk3701a/doc/index.rst | 200 +++++++++++++ .../arm/efm32gg_stk3701a/efm32gg_stk3701a.dts | 141 +++++++++ .../efm32gg_stk3701a/efm32gg_stk3701a.yaml | 18 ++ .../efm32gg_stk3701a_defconfig | 14 + dts/arm/silabs/efm32gg11b.dtsi | 276 ++++++++++++++++++ dts/arm/silabs/efm32gg11b820f2048gl192.dtsi | 35 +++ 15 files changed, 893 insertions(+) create mode 100644 boards/arm/efm32gg_stk3701a/CMakeLists.txt create mode 100644 boards/arm/efm32gg_stk3701a/Kconfig create mode 100644 boards/arm/efm32gg_stk3701a/Kconfig.board create mode 100644 boards/arm/efm32gg_stk3701a/Kconfig.defconfig create mode 100644 boards/arm/efm32gg_stk3701a/board.c create mode 100644 boards/arm/efm32gg_stk3701a/board.cmake create mode 100644 boards/arm/efm32gg_stk3701a/board.h create mode 100644 boards/arm/efm32gg_stk3701a/doc/efm32gg_stk3701a.jpg create mode 100644 boards/arm/efm32gg_stk3701a/doc/index.rst create mode 100644 boards/arm/efm32gg_stk3701a/efm32gg_stk3701a.dts create mode 100644 boards/arm/efm32gg_stk3701a/efm32gg_stk3701a.yaml create mode 100644 boards/arm/efm32gg_stk3701a/efm32gg_stk3701a_defconfig create mode 100644 dts/arm/silabs/efm32gg11b.dtsi create mode 100644 dts/arm/silabs/efm32gg11b820f2048gl192.dtsi diff --git a/CODEOWNERS b/CODEOWNERS index 26205f82411..544d8cf1f39 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -210,6 +210,7 @@ /dts/arm/nordic/ @ioannisg @carlescufi /dts/arm/nxp/ @MaureenHelm /dts/arm/microchip/ @franciscomunoz @albertofloyd @scottwcpg +/dts/arm/silabs/efm32gg11b* @oanerer /dts/riscv/microsemi-miv.dtsi @galak /dts/riscv/rv32m1* @MaureenHelm /dts/riscv/riscv32-fe310.dtsi @nategraff-sifive diff --git a/boards/arm/efm32gg_stk3701a/CMakeLists.txt b/boards/arm/efm32gg_stk3701a/CMakeLists.txt new file mode 100644 index 00000000000..5c1455add76 --- /dev/null +++ b/boards/arm/efm32gg_stk3701a/CMakeLists.txt @@ -0,0 +1,9 @@ +# Copyright (c) 2019 Interay Solutions B.V. +# Copyright (c) 2019 Oane Kingma +# SPDX-License-Identifier: Apache-2.0 + +if(CONFIG_UART_GECKO) + zephyr_library() + zephyr_library_sources(board.c) + zephyr_library_include_directories(${PROJECT_SOURCE_DIR}/drivers) +endif() diff --git a/boards/arm/efm32gg_stk3701a/Kconfig b/boards/arm/efm32gg_stk3701a/Kconfig new file mode 100644 index 00000000000..d708b33429a --- /dev/null +++ b/boards/arm/efm32gg_stk3701a/Kconfig @@ -0,0 +1,16 @@ +# EFM32GG STK3701A board configuration +# Copyright (c) 2019 Interay Solutions B.V. +# Copyright (c) 2019 Oane Kingma +# SPDX-License-Identifier: Apache-2.0 + +if BOARD_EFM32GG_STK3701A + +config BOARD_INIT_PRIORITY + int + default KERNEL_INIT_PRIORITY_DEFAULT + depends on GPIO + help + Board initialization priority. This must be bigger than + GPIO_GECKO_COMMON_INIT_PRIORITY. + +endif # BOARD_EFM32GG_STK3701A diff --git a/boards/arm/efm32gg_stk3701a/Kconfig.board b/boards/arm/efm32gg_stk3701a/Kconfig.board new file mode 100644 index 00000000000..77b8cdfaa00 --- /dev/null +++ b/boards/arm/efm32gg_stk3701a/Kconfig.board @@ -0,0 +1,10 @@ +# EFM32GG STK3701A board configuration +# Copyright (c) 2019 Interay Solutions B.V. +# Copyright (c) 2019 Oane Kingma +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_EFM32GG_STK3701A + bool "SiLabs EFM32GG-STK3701A (Giant Gecko 11)" + depends on SOC_SERIES_EFM32GG11B + select SOC_PART_NUMBER_EFM32GG11B820F2048GL192 + select HAS_DTS_I2C diff --git a/boards/arm/efm32gg_stk3701a/Kconfig.defconfig b/boards/arm/efm32gg_stk3701a/Kconfig.defconfig new file mode 100644 index 00000000000..c76083a2037 --- /dev/null +++ b/boards/arm/efm32gg_stk3701a/Kconfig.defconfig @@ -0,0 +1,66 @@ +# EFM32GG STK3701A default board configuration +# Copyright (c) 2019 Interay Solutions B.V. +# Copyright (c) 2019 Oane Kingma +# SPDX-License-Identifier: Apache-2.0 + +if BOARD_EFM32GG_STK3701A + +config BOARD + string + default "efm32gg_stk3701a" + +config CMU_HFXO_FREQ + default 50000000 + +config CMU_LFXO_FREQ + default 32768 + +if GPIO_GECKO + +config GPIO_GECKO_PORTA + default y + +config GPIO_GECKO_PORTB + default y + +config GPIO_GECKO_PORTC + default y + +config GPIO_GECKO_PORTD + default y + +config GPIO_GECKO_PORTE + default y + +config GPIO_GECKO_PORTF + default y + +config GPIO_GECKO_PORTG + default y + +config GPIO_GECKO_PORTH + default y + +config GPIO_GECKO_PORTI + default y + +endif # GPIO_GECKO + +if COUNTER + +config COUNTER_GECKO_RTCC + default y + +endif # COUNTER + +if NETWORKING + +config NET_L2_ETHERNET + default y + +config ETH_GECKO + default y if NET_L2_ETHERNET + +endif # NETWORKING + +endif # BOARD_EFM32GG_STK3701A diff --git a/boards/arm/efm32gg_stk3701a/board.c b/boards/arm/efm32gg_stk3701a/board.c new file mode 100644 index 00000000000..2bdeeacf102 --- /dev/null +++ b/boards/arm/efm32gg_stk3701a/board.c @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2019 Interay Solutions B.V. + * Copyright (c) 2019 Oane Kingma + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include "board.h" +#include +#include +#include "em_cmu.h" + +static int efm32gg_stk3701a_init(struct device *dev) +{ + struct device *cur_dev; + + ARG_UNUSED(dev); + + /* Enable the board controller to be able to use the serial port */ + cur_dev = device_get_binding(BC_ENABLE_GPIO_NAME); + if (!cur_dev) { + printk("Board controller gpio port was not found!\n"); + return -ENODEV; + } + + gpio_pin_configure(cur_dev, BC_ENABLE_GPIO_PIN, GPIO_DIR_OUT); + gpio_pin_write(cur_dev, BC_ENABLE_GPIO_PIN, 1); + +#ifdef CONFIG_ETH_GECKO + /* Enable the ethernet PHY power */ + cur_dev = device_get_binding(ETH_PWR_ENABLE_GPIO_NAME); + if (!cur_dev) { + printk("Ethernet PHY power gpio port was not found!\n"); + return -ENODEV; + } + + gpio_pin_configure(cur_dev, ETH_PWR_ENABLE_GPIO_PIN, GPIO_DIR_OUT); + gpio_pin_write(cur_dev, ETH_PWR_ENABLE_GPIO_PIN, 1); + + /* Configure ethernet reference clock */ + cur_dev = device_get_binding(ETH_REF_CLK_GPIO_NAME); + if (!cur_dev) { + printk("Ethernet reference clock gpio port was not found!\n"); + return -ENODEV; + } + + gpio_pin_configure(cur_dev, ETH_REF_CLK_GPIO_PIN, GPIO_DIR_OUT); + gpio_pin_write(cur_dev, ETH_REF_CLK_GPIO_PIN, 0); + + /* enable CMU_CLK2 as RMII reference clock */ + CMU->CTRL |= CMU_CTRL_CLKOUTSEL2_HFXO; + CMU->ROUTELOC0 = (CMU->ROUTELOC0 & ~_CMU_ROUTELOC0_CLKOUT2LOC_MASK) | + (ETH_REF_CLK_LOCATION << _CMU_ROUTELOC0_CLKOUT2LOC_SHIFT); + CMU->ROUTEPEN |= CMU_ROUTEPEN_CLKOUT2PEN; + + /* Release the ethernet PHY reset */ + cur_dev = device_get_binding(ETH_RESET_GPIO_NAME); + if (!cur_dev) { + printk("Ethernet PHY reset gpio port was not found!\n"); + return -ENODEV; + } + + gpio_pin_configure(cur_dev, ETH_RESET_GPIO_PIN, GPIO_DIR_OUT); + gpio_pin_write(cur_dev, ETH_RESET_GPIO_PIN, 1); +#endif /* CONFIG_ETH_GECKO */ + + return 0; +} + +/* needs to be done after GPIO driver init */ +SYS_INIT(efm32gg_stk3701a_init, PRE_KERNEL_1, CONFIG_BOARD_INIT_PRIORITY); diff --git a/boards/arm/efm32gg_stk3701a/board.cmake b/boards/arm/efm32gg_stk3701a/board.cmake new file mode 100644 index 00000000000..a3ced2516fa --- /dev/null +++ b/boards/arm/efm32gg_stk3701a/board.cmake @@ -0,0 +1,6 @@ +# Copyright (c) 2019 Interay Solutions B.V. +# Copyright (c) 2019 Oane Kingma +# SPDX-License-Identifier: Apache-2.0 + +board_runner_args(jlink "--device=EFM32GG11B820F2048") +include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake) diff --git a/boards/arm/efm32gg_stk3701a/board.h b/boards/arm/efm32gg_stk3701a/board.h new file mode 100644 index 00000000000..e0c8207b1d9 --- /dev/null +++ b/boards/arm/efm32gg_stk3701a/board.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2019 Interay Solutions B.V. + * Copyright (c) 2019 Oane Kingma + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef __INC_BOARD_H +#define __INC_BOARD_H + +/* This pin is used to enable the serial port using the board controller */ +#define BC_ENABLE_GPIO_NAME DT_GPIO_GECKO_PORTE_NAME +#define BC_ENABLE_GPIO_PIN 1 + +/* Ethernet specific pins */ +#ifdef CONFIG_ETH_GECKO +#define ETH_PWR_ENABLE_GPIO_NAME DT_GPIO_GECKO_PORTI_NAME +#define ETH_PWR_ENABLE_GPIO_PIN 10 + +#define ETH_RESET_GPIO_NAME DT_GPIO_GECKO_PORTH_NAME +#define ETH_RESET_GPIO_PIN 7 + +#define ETH_REF_CLK_GPIO_NAME DT_GPIO_GECKO_PORTD_NAME +#define ETH_REF_CLK_GPIO_PIN DT_INST_0_SILABS_GECKO_ETHERNET_LOCATION_RMII_REFCLK_2 +#define ETH_REF_CLK_LOCATION DT_INST_0_SILABS_GECKO_ETHERNET_LOCATION_RMII_REFCLK_0 + +#endif /* CONFIG_ETH_GECKO */ + +#endif /* __INC_BOARD_H */ diff --git a/boards/arm/efm32gg_stk3701a/doc/efm32gg_stk3701a.jpg b/boards/arm/efm32gg_stk3701a/doc/efm32gg_stk3701a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..38a341d79b989b6bca6920b3f0cc40ce1fb30ef2 GIT binary patch literal 15218 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 + +/ { + model = "Silicon Labs EFM32GG STK3701A board"; + compatible = "silabs,efm32gg_stk3701a", "silabs,efm32gg11b"; + + chosen { + zephyr,console = &usart4; + zephyr,shell-uart = &usart4; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + }; + + /* These aliases are provided for compatibility with samples */ + aliases { + led0 = &led0; + led1 = &led1; + sw0 = &button0; + sw1 = &button1; + }; + + leds { + compatible = "gpio-leds"; + led0: led_0 { + gpios = <&gpioh 10 0>; + label = "LED 0"; + }; + led1: led_1 { + gpios = <&gpioh 13 0>; + label = "LED 1"; + }; + }; + + buttons { + compatible = "gpio-keys"; + button0: button_0 { + /* gpio flags need validation */ + gpios = <&gpioc 8 GPIO_INT_ACTIVE_LOW>; + label = "User Push Button 0"; + }; + button1: button_1 { + /* gpio flags need validation */ + gpios = <&gpioc 9 GPIO_INT_ACTIVE_LOW>; + label = "User Push Button 1"; + }; + }; +}; + +&usart0 { + current-speed = <115200>; + location-rx = ; + location-tx = ; + status = "okay"; +}; + +&usart4 { + current-speed = <115200>; + location-rx = ; + location-tx = ; + status = "okay"; +}; + +&leuart0 { + current-speed = <9600>; + location-rx = ; + location-tx = ; + status = "okay"; +}; + +&i2c0 { + location-sda = ; + location-scl = ; + status = "okay"; +}; + +&i2c1 { + location-sda = ; + location-scl = ; + status = "okay"; +}; + +&rtcc0 { + prescaler = <1>; + status = "okay"; +}; + +&gpio { + location-swo = <0>; + status = "okay"; +}; + +ð0 { + /* local-mac-address = <>;*/ + + /* PHY address = 0 */ + phy-address = <0>; + + /* PHY management pins */ + location-mdio = ; + location-phy_mdc = ; + location-phy_mdio = ; + + /* RMII interface pins */ + location-rmii = ; + location-rmii_refclk = ; + location-rmii_crs_dv = ; + location-rmii_txd0 = ; + location-rmii_txd1 = ; + location-rmii_tx_en = ; + location-rmii_rxd0 = ; + location-rmii_rxd1 = ; + location-rmii_rx_er = ; + + status = "okay"; +}; + +&flash0 { + /* + * For more information, see: + * http://docs.zephyrproject.org/latest/guides/dts/index.html#flash-partitions + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + /* Set 6Kb of storage at the end of the 2048Kb of flash */ + storage_partition: partition@1fe800 { + label = "storage"; + reg = <0x001fe800 0x00001800>; + }; + }; +}; diff --git a/boards/arm/efm32gg_stk3701a/efm32gg_stk3701a.yaml b/boards/arm/efm32gg_stk3701a/efm32gg_stk3701a.yaml new file mode 100644 index 00000000000..2f59628591e --- /dev/null +++ b/boards/arm/efm32gg_stk3701a/efm32gg_stk3701a.yaml @@ -0,0 +1,18 @@ +identifier: efm32gg_stk3701a +name: EFM32GG-STK3701A +type: mcu +arch: arm +ram: 512 +flash: 2048 +toolchain: + - zephyr + - gccarmemb + - xtools +supported: + - i2c + - gpio + - netif:eth + - nvs +testing: + ignore_tags: + - bluetooth diff --git a/boards/arm/efm32gg_stk3701a/efm32gg_stk3701a_defconfig b/boards/arm/efm32gg_stk3701a/efm32gg_stk3701a_defconfig new file mode 100644 index 00000000000..6bf7e5973bb --- /dev/null +++ b/boards/arm/efm32gg_stk3701a/efm32gg_stk3701a_defconfig @@ -0,0 +1,14 @@ +# Copyright (c) 2019 Interay Solutions B.V. +# Copyright (c) 2019 Oane Kingma +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_ARM=y +CONFIG_SOC_SERIES_EFM32GG11B=y +CONFIG_BOARD_EFM32GG_STK3701A=y +CONFIG_CONSOLE=y +CONFIG_UART_CONSOLE=y +CONFIG_SERIAL=y +CONFIG_CORTEX_M_SYSTICK=y +CONFIG_GPIO=y +CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=50000000 +CONFIG_CMU_HFCLK_HFXO=y diff --git a/dts/arm/silabs/efm32gg11b.dtsi b/dts/arm/silabs/efm32gg11b.dtsi new file mode 100644 index 00000000000..49edd2a163f --- /dev/null +++ b/dts/arm/silabs/efm32gg11b.dtsi @@ -0,0 +1,276 @@ +/* + * Copyright (c) 2019 Interay Solutions B.V. + * Copyright (c) 2019 Oane Kingma + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include +#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 = ; + #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 = ; + #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 = ; + #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>; +}; diff --git a/dts/arm/silabs/efm32gg11b820f2048gl192.dtsi b/dts/arm/silabs/efm32gg11b820f2048gl192.dtsi new file mode 100644 index 00000000000..ab18fba465a --- /dev/null +++ b/dts/arm/silabs/efm32gg11b820f2048gl192.dtsi @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2019 Interay Solutions B.V. + * Copyright (c) 2019 Oane Kingma + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include + +/ { + sram0: memory@20000000 { + reg = <0x20000000 DT_SIZE_K(256)>; + }; + + soc { + compatible = "silabs,efm32gg11b820f2048gl192", "silabs,efm32gg11b", + "silabs,efm32", "simple-bus"; + + flash-controller@40000000 { + flash0: flash@0 { + reg = <0 DT_SIZE_K(2048)>; + }; + }; + + eth0: eth@40024000 { /* ETH0 */ + compatible = "silabs,gecko-ethernet"; + reg = <0x40024000 0xC14>; + interrupts = <59 0>; + status = "disabled"; + label = "ETH_0"; + }; + }; + +};