From 8f12b9896f168073a276f6f7e06e73a43dcecd0f Mon Sep 17 00:00:00 2001
From: Bas Stottelaar <basstottelaar@gmail.com>
Date: Wed, 29 Nov 2017 19:50:50 +0100
Subject: [PATCH] cpu: efm32_common + ef32mg1p: replace with generalized efm32
 cpu

---
 cpu/{efm32_common => efm32}/Makefile          |  5 +-
 cpu/{efm32_common => efm32}/Makefile.dep      |  4 +-
 cpu/{efm32_common => efm32}/Makefile.features |  4 ++
 cpu/efm32/Makefile.include                    | 34 ++++++++++
 cpu/{efm32_common => efm32}/cpu.c             |  2 +-
 cpu/efm32/doc.txt                             | 66 +++++++++++++++++++
 cpu/efm32/efm32-info.mk                       | 27 ++++++++
 cpu/efm32/families/efr32mg1p/Makefile         |  6 ++
 cpu/efm32/families/efr32mg1p/cpus.txt         | 27 ++++++++
 .../include/vendor/efr32mg1p132f256gm32.h     |  0
 .../include/vendor/efr32mg1p132f256gm48.h     |  0
 .../efr32mg1p/include/vendor/efr32mg1p_acmp.h |  0
 .../efr32mg1p/include/vendor/efr32mg1p_adc.h  |  0
 .../include/vendor/efr32mg1p_af_pins.h        |  0
 .../include/vendor/efr32mg1p_af_ports.h       |  0
 .../efr32mg1p/include/vendor/efr32mg1p_cmu.h  |  0
 .../include/vendor/efr32mg1p_cryotimer.h      |  0
 .../include/vendor/efr32mg1p_crypto.h         |  0
 .../include/vendor/efr32mg1p_devinfo.h        |  0
 .../include/vendor/efr32mg1p_dma_descriptor.h |  0
 .../include/vendor/efr32mg1p_dmareq.h         |  0
 .../efr32mg1p/include/vendor/efr32mg1p_emu.h  |  0
 .../include/vendor/efr32mg1p_fpueh.h          |  0
 .../include/vendor/efr32mg1p_gpcrc.h          |  0
 .../efr32mg1p/include/vendor/efr32mg1p_gpio.h |  0
 .../include/vendor/efr32mg1p_gpio_p.h         |  0
 .../efr32mg1p/include/vendor/efr32mg1p_i2c.h  |  0
 .../efr32mg1p/include/vendor/efr32mg1p_idac.h |  0
 .../efr32mg1p/include/vendor/efr32mg1p_ldma.h |  0
 .../include/vendor/efr32mg1p_ldma_ch.h        |  0
 .../include/vendor/efr32mg1p_letimer.h        |  0
 .../include/vendor/efr32mg1p_leuart.h         |  0
 .../efr32mg1p/include/vendor/efr32mg1p_msc.h  |  0
 .../efr32mg1p/include/vendor/efr32mg1p_pcnt.h |  0
 .../efr32mg1p/include/vendor/efr32mg1p_prs.h  |  0
 .../include/vendor/efr32mg1p_prs_ch.h         |  0
 .../include/vendor/efr32mg1p_prs_signals.h    |  0
 .../efr32mg1p/include/vendor/efr32mg1p_rmu.h  |  0
 .../include/vendor/efr32mg1p_romtable.h       |  0
 .../efr32mg1p/include/vendor/efr32mg1p_rtcc.h |  0
 .../include/vendor/efr32mg1p_rtcc_cc.h        |  0
 .../include/vendor/efr32mg1p_rtcc_ret.h       |  0
 .../include/vendor/efr32mg1p_timer.h          |  0
 .../include/vendor/efr32mg1p_timer_cc.h       |  0
 .../include/vendor/efr32mg1p_usart.h          |  0
 .../efr32mg1p/include/vendor/efr32mg1p_wdog.h |  0
 .../include/vendor/efr32mg1p_wdog_pch.h       |  0
 .../efr32mg1p/include/vendor/em_device.h      | 56 +++++++++++++++-
 .../include/vendor/system_efr32mg1p.h         |  0
 .../families/efr32mg1p/system.c}              |  0
 cpu/{ => efm32/families}/efr32mg1p/vectors.c  | 21 +++++-
 cpu/{efr32mg1p => efm32}/include/cpu_conf.h   | 10 +--
 .../include/periph_cpu.h                      |  2 +-
 cpu/{efr32mg1p => efm32}/periph/Makefile      |  0
 cpu/{efm32_common => efm32}/periph/adc.c      |  2 +-
 cpu/{efm32_common => efm32}/periph/cpuid.c    |  2 +-
 cpu/{efm32_common => efm32}/periph/dac.c      |  2 +-
 .../periph/flashpage.c                        |  2 +-
 cpu/{efm32_common => efm32}/periph/gpio.c     |  2 +-
 cpu/{efm32_common => efm32}/periph/hwrng.c    |  2 +-
 cpu/{efm32_common => efm32}/periph/i2c.c      |  2 +-
 cpu/{efm32_common => efm32}/periph/pm.c       |  2 +-
 cpu/{efm32_common => efm32}/periph/pwm.c      |  2 +-
 .../periph/rtc_series0.c                      |  2 +-
 .../periph/rtc_series1.c                      |  2 +-
 .../periph/rtt_series0.c                      |  2 +-
 .../periph/rtt_series1.c                      |  2 +-
 cpu/{efm32_common => efm32}/periph/spi.c      |  2 +-
 cpu/{efm32_common => efm32}/periph/timer.c    |  2 +-
 cpu/{efm32_common => efm32}/periph/uart.c     |  2 +-
 cpu/efm32_common/Makefile.include             | 20 ------
 cpu/efm32_common/doc.txt                      |  5 --
 cpu/efm32_common/periph/Makefile              |  3 -
 cpu/efr32mg1p/Makefile                        | 10 ---
 cpu/efr32mg1p/Makefile.dep                    |  1 -
 cpu/efr32mg1p/Makefile.features               |  2 -
 cpu/efr32mg1p/Makefile.include                | 12 ----
 cpu/efr32mg1p/doc.txt                         | 10 ---
 .../ldscripts/efr32mg1p132f256gm32.ld         | 28 --------
 .../ldscripts/efr32mg1p132f256gm48.ld         | 28 --------
 80 files changed, 265 insertions(+), 150 deletions(-)
 rename cpu/{efm32_common => efm32}/Makefile (54%)
 rename cpu/{efm32_common => efm32}/Makefile.dep (50%)
 rename cpu/{efm32_common => efm32}/Makefile.features (60%)
 create mode 100644 cpu/efm32/Makefile.include
 rename cpu/{efm32_common => efm32}/cpu.c (99%)
 create mode 100644 cpu/efm32/doc.txt
 create mode 100644 cpu/efm32/efm32-info.mk
 create mode 100644 cpu/efm32/families/efr32mg1p/Makefile
 create mode 100644 cpu/efm32/families/efr32mg1p/cpus.txt
 rename cpu/{ => efm32/families}/efr32mg1p/include/vendor/efr32mg1p132f256gm32.h (100%)
 rename cpu/{ => efm32/families}/efr32mg1p/include/vendor/efr32mg1p132f256gm48.h (100%)
 rename cpu/{ => efm32/families}/efr32mg1p/include/vendor/efr32mg1p_acmp.h (100%)
 rename cpu/{ => efm32/families}/efr32mg1p/include/vendor/efr32mg1p_adc.h (100%)
 rename cpu/{ => efm32/families}/efr32mg1p/include/vendor/efr32mg1p_af_pins.h (100%)
 rename cpu/{ => efm32/families}/efr32mg1p/include/vendor/efr32mg1p_af_ports.h (100%)
 rename cpu/{ => efm32/families}/efr32mg1p/include/vendor/efr32mg1p_cmu.h (100%)
 rename cpu/{ => efm32/families}/efr32mg1p/include/vendor/efr32mg1p_cryotimer.h (100%)
 rename cpu/{ => efm32/families}/efr32mg1p/include/vendor/efr32mg1p_crypto.h (100%)
 rename cpu/{ => efm32/families}/efr32mg1p/include/vendor/efr32mg1p_devinfo.h (100%)
 rename cpu/{ => efm32/families}/efr32mg1p/include/vendor/efr32mg1p_dma_descriptor.h (100%)
 rename cpu/{ => efm32/families}/efr32mg1p/include/vendor/efr32mg1p_dmareq.h (100%)
 rename cpu/{ => efm32/families}/efr32mg1p/include/vendor/efr32mg1p_emu.h (100%)
 rename cpu/{ => efm32/families}/efr32mg1p/include/vendor/efr32mg1p_fpueh.h (100%)
 rename cpu/{ => efm32/families}/efr32mg1p/include/vendor/efr32mg1p_gpcrc.h (100%)
 rename cpu/{ => efm32/families}/efr32mg1p/include/vendor/efr32mg1p_gpio.h (100%)
 rename cpu/{ => efm32/families}/efr32mg1p/include/vendor/efr32mg1p_gpio_p.h (100%)
 rename cpu/{ => efm32/families}/efr32mg1p/include/vendor/efr32mg1p_i2c.h (100%)
 rename cpu/{ => efm32/families}/efr32mg1p/include/vendor/efr32mg1p_idac.h (100%)
 rename cpu/{ => efm32/families}/efr32mg1p/include/vendor/efr32mg1p_ldma.h (100%)
 rename cpu/{ => efm32/families}/efr32mg1p/include/vendor/efr32mg1p_ldma_ch.h (100%)
 rename cpu/{ => efm32/families}/efr32mg1p/include/vendor/efr32mg1p_letimer.h (100%)
 rename cpu/{ => efm32/families}/efr32mg1p/include/vendor/efr32mg1p_leuart.h (100%)
 rename cpu/{ => efm32/families}/efr32mg1p/include/vendor/efr32mg1p_msc.h (100%)
 rename cpu/{ => efm32/families}/efr32mg1p/include/vendor/efr32mg1p_pcnt.h (100%)
 rename cpu/{ => efm32/families}/efr32mg1p/include/vendor/efr32mg1p_prs.h (100%)
 rename cpu/{ => efm32/families}/efr32mg1p/include/vendor/efr32mg1p_prs_ch.h (100%)
 rename cpu/{ => efm32/families}/efr32mg1p/include/vendor/efr32mg1p_prs_signals.h (100%)
 rename cpu/{ => efm32/families}/efr32mg1p/include/vendor/efr32mg1p_rmu.h (100%)
 rename cpu/{ => efm32/families}/efr32mg1p/include/vendor/efr32mg1p_romtable.h (100%)
 rename cpu/{ => efm32/families}/efr32mg1p/include/vendor/efr32mg1p_rtcc.h (100%)
 rename cpu/{ => efm32/families}/efr32mg1p/include/vendor/efr32mg1p_rtcc_cc.h (100%)
 rename cpu/{ => efm32/families}/efr32mg1p/include/vendor/efr32mg1p_rtcc_ret.h (100%)
 rename cpu/{ => efm32/families}/efr32mg1p/include/vendor/efr32mg1p_timer.h (100%)
 rename cpu/{ => efm32/families}/efr32mg1p/include/vendor/efr32mg1p_timer_cc.h (100%)
 rename cpu/{ => efm32/families}/efr32mg1p/include/vendor/efr32mg1p_usart.h (100%)
 rename cpu/{ => efm32/families}/efr32mg1p/include/vendor/efr32mg1p_wdog.h (100%)
 rename cpu/{ => efm32/families}/efr32mg1p/include/vendor/efr32mg1p_wdog_pch.h (100%)
 rename cpu/{ => efm32/families}/efr32mg1p/include/vendor/em_device.h (65%)
 rename cpu/{ => efm32/families}/efr32mg1p/include/vendor/system_efr32mg1p.h (100%)
 rename cpu/{efr32mg1p/system_efr32mg1p.c => efm32/families/efr32mg1p/system.c} (100%)
 rename cpu/{ => efm32/families}/efr32mg1p/vectors.c (77%)
 rename cpu/{efr32mg1p => efm32}/include/cpu_conf.h (76%)
 rename cpu/{efm32_common => efm32}/include/periph_cpu.h (99%)
 rename cpu/{efr32mg1p => efm32}/periph/Makefile (100%)
 rename cpu/{efm32_common => efm32}/periph/adc.c (98%)
 rename cpu/{efm32_common => efm32}/periph/cpuid.c (94%)
 rename cpu/{efm32_common => efm32}/periph/dac.c (98%)
 rename cpu/{efm32_common => efm32}/periph/flashpage.c (96%)
 rename cpu/{efm32_common => efm32}/periph/gpio.c (99%)
 rename cpu/{efm32_common => efm32}/periph/hwrng.c (97%)
 rename cpu/{efm32_common => efm32}/periph/i2c.c (99%)
 rename cpu/{efm32_common => efm32}/periph/pm.c (96%)
 rename cpu/{efm32_common => efm32}/periph/pwm.c (98%)
 rename cpu/{efm32_common => efm32}/periph/rtc_series0.c (99%)
 rename cpu/{efm32_common => efm32}/periph/rtc_series1.c (99%)
 rename cpu/{efm32_common => efm32}/periph/rtt_series0.c (98%)
 rename cpu/{efm32_common => efm32}/periph/rtt_series1.c (99%)
 rename cpu/{efm32_common => efm32}/periph/spi.c (98%)
 rename cpu/{efm32_common => efm32}/periph/timer.c (99%)
 rename cpu/{efm32_common => efm32}/periph/uart.c (99%)
 delete mode 100644 cpu/efm32_common/Makefile.include
 delete mode 100644 cpu/efm32_common/doc.txt
 delete mode 100644 cpu/efm32_common/periph/Makefile
 delete mode 100644 cpu/efr32mg1p/Makefile
 delete mode 100644 cpu/efr32mg1p/Makefile.dep
 delete mode 100644 cpu/efr32mg1p/Makefile.features
 delete mode 100644 cpu/efr32mg1p/Makefile.include
 delete mode 100644 cpu/efr32mg1p/doc.txt
 delete mode 100644 cpu/efr32mg1p/ldscripts/efr32mg1p132f256gm32.ld
 delete mode 100644 cpu/efr32mg1p/ldscripts/efr32mg1p132f256gm48.ld

diff --git a/cpu/efm32_common/Makefile b/cpu/efm32/Makefile
similarity index 54%
rename from cpu/efm32_common/Makefile
rename to cpu/efm32/Makefile
index 79b967fc6d..f70451361e 100644
--- a/cpu/efm32_common/Makefile
+++ b/cpu/efm32/Makefile
@@ -1,7 +1,6 @@
-# define the module that is build
-MODULE = efm32_common
+MODULE = cpu
 
 # add a list of subdirectories, that should also be build
-DIRS = periph
+DIRS = periph families/$(EFM32_FAMILY) $(RIOTCPU)/cortexm_common
 
 include $(RIOTBASE)/Makefile.base
diff --git a/cpu/efm32_common/Makefile.dep b/cpu/efm32/Makefile.dep
similarity index 50%
rename from cpu/efm32_common/Makefile.dep
rename to cpu/efm32/Makefile.dep
index ac33230682..9d63028a74 100644
--- a/cpu/efm32_common/Makefile.dep
+++ b/cpu/efm32/Makefile.dep
@@ -1,7 +1,7 @@
 ifneq (,$(filter periph_rtc,$(USEMODULE)))
-  USEMODULE += periph_rtc_series$(CPU_SERIES)
+  USEMODULE += periph_rtc_series$(EFM32_SERIES)
 endif
 
 ifneq (,$(filter periph_rtt,$(USEMODULE)))
-  USEMODULE += periph_rtt_series$(CPU_SERIES)
+  USEMODULE += periph_rtt_series$(EFM32_SERIES)
 endif
diff --git a/cpu/efm32_common/Makefile.features b/cpu/efm32/Makefile.features
similarity index 60%
rename from cpu/efm32_common/Makefile.features
rename to cpu/efm32/Makefile.features
index cfebd4882f..327743ecc7 100644
--- a/cpu/efm32_common/Makefile.features
+++ b/cpu/efm32/Makefile.features
@@ -1,3 +1,7 @@
 FEATURES_PROVIDED += periph_cpuid
 FEATURES_PROVIDED += periph_flashpage
 FEATURES_PROVIDED += periph_pm
+
+ifeq (1,$(EFM32_TNRG))
+  FEATURES_PROVIDED += periph_hwrng
+endif
diff --git a/cpu/efm32/Makefile.include b/cpu/efm32/Makefile.include
new file mode 100644
index 0000000000..d27dc50a2e
--- /dev/null
+++ b/cpu/efm32/Makefile.include
@@ -0,0 +1,34 @@
+include $(RIOTCPU)/efm32/efm32-info.mk
+
+export CPU_ARCH = $(EFM32_ARCHITECTURE)
+export CPU_FAM = $(EFM32_FAMILY)
+
+# the em_device.h header requires a global define with the cpu model
+export CFLAGS += -D$(shell echo $(CPU_MODEL) | tr 'a-z' 'A-Z')
+
+# include Gecko SDK package
+USEPKG += gecko_sdk
+
+# CMSIS-DSP is needed for arm_math.h on Cortex-M0+ architectures
+ifeq ($(CPU_ARCH),cortex-m0plus)
+  USEPKG += cmsis-dsp
+endif
+
+# include common periph module
+USEMODULE += periph_common
+
+# include layered power management
+USEMODULE += pm_layered
+
+# include vendor device headers
+INCLUDES += -I$(RIOTCPU)/efm32/families/$(EFM32_FAMILY)/include/vendor
+
+# include cortexm_common
+LINKER_SCRIPT = cortexm.ld
+
+ROM_START_ADDR = $(EFM32_FLASH_START)
+ROM_LEN = $(EFM32_FLASH_SIZE)
+RAM_START_ADDR = $(EFM32_SRAM_START)
+RAM_LEN = $(EFM32_SRAM_SIZE)
+
+include $(RIOTMAKE)/arch/cortexm.inc.mk
diff --git a/cpu/efm32_common/cpu.c b/cpu/efm32/cpu.c
similarity index 99%
rename from cpu/efm32_common/cpu.c
rename to cpu/efm32/cpu.c
index 0421a0bcd2..02e785ba31 100644
--- a/cpu/efm32_common/cpu.c
+++ b/cpu/efm32/cpu.c
@@ -7,7 +7,7 @@
  */
 
 /**
- * @ingroup     cpu_efm32_common
+ * @ingroup     cpu_efm32
  * @{
  *
  * @file
diff --git a/cpu/efm32/doc.txt b/cpu/efm32/doc.txt
new file mode 100644
index 0000000000..86b70aa47d
--- /dev/null
+++ b/cpu/efm32/doc.txt
@@ -0,0 +1,66 @@
+/**
+ * @defgroup        cpu_efm32 Silicon Labs EFM32/EFR32/EZR32
+ * @ingroup         cpu
+ * @brief           Implementation of Silicon Labs's EFM32/EFR32/EZR32 MCUs
+ *
+ * This module contains all code and definitions for the Silicon Labs
+ * EFM32/EFR32/EZR32 MCUs. It uses the Gecko SDK (vendor library) for the
+ * peripheral drivers.
+ *
+ *
+ * Supported Peripherals
+ * =====================
+ *
+ * The following peripherals are supported (depends on microcontroller):
+ *   - ADC
+ *   - CPUID
+ *   - DAC
+ *   - Flash page
+ *   - GPIO
+ *   - HW RNG
+ *   - I2C
+ *   - Power Management
+ *   - PWM
+ *   - RTC
+ *   - RTT
+ *   - SPI
+ *   - Timer
+ *   - UART (including low-power)
+ *
+ *
+ * Clock Configuration
+ * ===================
+ *
+ * By default the microcontroller will run on the internal RC-oscillator. If
+ * an external crystal is available, you can configure it to use by setting
+ * `CLOCK_HF=cmuSelect_HFXO`. The same applies for `CLOCK_LFA`, `CLOCK_LFB` and
+ * `CLOCK_LFE` using `cmuSelect_LFXO`.
+ *
+ * If the internal RC-oscillator is not used, it will be disabled.
+ *
+ * Refer to the reference manual of the specific microcontroller for the
+ * specifics.
+ *
+ *
+ * EMU and CMU Configuration
+ * =========================
+ *
+ * The Energy Management Unit (EMU) and Clock Management Unit (CMU) are
+ * initialized using default values provided by the Gecko SDK. You can override
+ * any of the following defaults to use other values:
+ *
+ *   - `CMU_HFXOINIT`
+ *   - `CMU_LFXOINIT`
+ *   - `EMU_DCDCINIT`
+ *   - `EMU_EM23INIT`
+ *   - `EMU_EM4INIT`
+ *
+ * Refer to the Gecko SDK for more information about these values.
+ *
+ *
+ * Low-power Configuration
+ * =======================
+ *
+ * The EFM32/EFR32/EZR32 MCUs have support for low-power peripherals. Support
+ * is enabled by default, but can be disabled by setting LOW_POWER_ENABLED=0.
+ */
diff --git a/cpu/efm32/efm32-info.mk b/cpu/efm32/efm32-info.mk
new file mode 100644
index 0000000000..2d687b0ad3
--- /dev/null
+++ b/cpu/efm32/efm32-info.mk
@@ -0,0 +1,27 @@
+# Find the header file that should exist if the CPU is supported.
+EFM32_HEADER = $(wildcard $(RIOTCPU)/efm32/families/*/include/vendor/$(CPU_MODEL).h)
+
+ifeq (,$(EFM32_HEADER))
+  $(error Header file for $(CPU_MODEL) is missing)
+endif
+
+# Lookup up CPU information using grep.
+EFM32_INFO = $(shell grep $(CPU_MODEL) $(shell dirname $(EFM32_HEADER))/../../cpus.txt)
+
+ifeq (,$(EFM32_INFO))
+  $(error Unable to read CPU information for $(CPU_MODEL))
+endif
+
+# Export variables to use in this build.
+export EFM32_FAMILY = $(word 2, $(EFM32_INFO))
+export EFM32_SERIES = $(word 3, $(EFM32_INFO))
+export EFM32_ARCHITECTURE = $(word 4, $(EFM32_INFO))
+
+export EFM32_FLASH_START = $(word 5, $(EFM32_INFO))
+export EFM32_FLASH_SIZE = $(word 6, $(EFM32_INFO))
+export EFM32_SRAM_START = $(word 7, $(EFM32_INFO))
+export EFM32_SRAM_SIZE = $(word 8, $(EFM32_INFO))
+
+export EFM32_CRYPTO = $(word 9, $(EFM32_INFO))
+export EFM32_TRNG = $(word 10, $(EFM32_INFO))
+export EFM32_RADIO = $(word 11, $(EFM32_INFO))
diff --git a/cpu/efm32/families/efr32mg1p/Makefile b/cpu/efm32/families/efr32mg1p/Makefile
new file mode 100644
index 0000000000..adfea32360
--- /dev/null
+++ b/cpu/efm32/families/efr32mg1p/Makefile
@@ -0,0 +1,6 @@
+MODULE = cpu
+
+# (file triggers compiler bug. see #5775)
+SRC_NOLTO += vectors.c
+
+include $(RIOTBASE)/Makefile.base
diff --git a/cpu/efm32/families/efr32mg1p/cpus.txt b/cpu/efm32/families/efr32mg1p/cpus.txt
new file mode 100644
index 0000000000..cd0bd8f7e7
--- /dev/null
+++ b/cpu/efm32/families/efr32mg1p/cpus.txt
@@ -0,0 +1,27 @@
+# This file is automatically generated, and should not be changed. There is
+# propbably little reason to edit this file anyway, since it should already
+# contain all information for the EFR32MG1P family of CPUs.
+
+# The intended usage is to grep for the exact model name, and split by spaces
+# to get the required information.
+
+# CPU - Family - Series - Architecture - Flash base - Flash size - SRAM base - SRAM size - Crypto? - TRNG? - Radio?
+efr32mg1p632f256gm32 efr32mg1p 1 cortex-m4f 0x00000000 0x00040000 0x20000000 0x00007c00 1 0 1
+efr32mg1p132f256gm48 efr32mg1p 1 cortex-m4f 0x00000000 0x00040000 0x20000000 0x00007c00 1 0 1
+efr32mg1p233f256gm48 efr32mg1p 1 cortex-m4f 0x00000000 0x00040000 0x20000000 0x00007c00 1 0 1
+efr32mg1p132f256im32 efr32mg1p 1 cortex-m4f 0x00000000 0x00040000 0x20000000 0x00007c00 1 0 1
+efr32mg1p232f256im32 efr32mg1p 1 cortex-m4f 0x00000000 0x00040000 0x20000000 0x00007c00 1 0 1
+efr32mg1p133f256gm48 efr32mg1p 1 cortex-m4f 0x00000000 0x00040000 0x20000000 0x00007c00 1 0 1
+efr32mg1p232f256gm48 efr32mg1p 1 cortex-m4f 0x00000000 0x00040000 0x20000000 0x00007c00 1 0 1
+efr32mg1p732f256im32 efr32mg1p 1 cortex-m4f 0x00000000 0x00040000 0x20000000 0x00007c00 1 0 1
+efr32mg1p232f256gj43 efr32mg1p 1 cortex-m4f 0x00000000 0x00040000 0x20000000 0x00007c00 1 0 1
+efr32mg1p232f256gm32 efr32mg1p 1 cortex-m4f 0x00000000 0x00040000 0x20000000 0x00007c00 1 0 1
+efr32mg1p231f256gm48 efr32mg1p 1 cortex-m4f 0x00000000 0x00040000 0x20000000 0x00007c00 1 0 1
+efr32mg1p732f256gm32 efr32mg1p 1 cortex-m4f 0x00000000 0x00040000 0x20000000 0x00007c00 1 0 1
+efr32mg1p232f256im48 efr32mg1p 1 cortex-m4f 0x00000000 0x00040000 0x20000000 0x00007c00 1 0 1
+efr32mg1p132f256im48 efr32mg1p 1 cortex-m4f 0x00000000 0x00040000 0x20000000 0x00007c00 1 0 1
+efr32mg1p632f256im32 efr32mg1p 1 cortex-m4f 0x00000000 0x00040000 0x20000000 0x00007c00 1 0 1
+efr32mg1p131f256gm48 efr32mg1p 1 cortex-m4f 0x00000000 0x00040000 0x20000000 0x00007c00 1 0 1
+efr32mg1p132f256gm32 efr32mg1p 1 cortex-m4f 0x00000000 0x00040000 0x20000000 0x00007c00 1 0 1
+efr32mg1p233f256im48 efr32mg1p 1 cortex-m4f 0x00000000 0x00040000 0x20000000 0x00007c00 1 0 1
+efr32mg1p132f256gj43 efr32mg1p 1 cortex-m4f 0x00000000 0x00040000 0x20000000 0x00007c00 1 0 1
diff --git a/cpu/efr32mg1p/include/vendor/efr32mg1p132f256gm32.h b/cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p132f256gm32.h
similarity index 100%
rename from cpu/efr32mg1p/include/vendor/efr32mg1p132f256gm32.h
rename to cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p132f256gm32.h
diff --git a/cpu/efr32mg1p/include/vendor/efr32mg1p132f256gm48.h b/cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p132f256gm48.h
similarity index 100%
rename from cpu/efr32mg1p/include/vendor/efr32mg1p132f256gm48.h
rename to cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p132f256gm48.h
diff --git a/cpu/efr32mg1p/include/vendor/efr32mg1p_acmp.h b/cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_acmp.h
similarity index 100%
rename from cpu/efr32mg1p/include/vendor/efr32mg1p_acmp.h
rename to cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_acmp.h
diff --git a/cpu/efr32mg1p/include/vendor/efr32mg1p_adc.h b/cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_adc.h
similarity index 100%
rename from cpu/efr32mg1p/include/vendor/efr32mg1p_adc.h
rename to cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_adc.h
diff --git a/cpu/efr32mg1p/include/vendor/efr32mg1p_af_pins.h b/cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_af_pins.h
similarity index 100%
rename from cpu/efr32mg1p/include/vendor/efr32mg1p_af_pins.h
rename to cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_af_pins.h
diff --git a/cpu/efr32mg1p/include/vendor/efr32mg1p_af_ports.h b/cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_af_ports.h
similarity index 100%
rename from cpu/efr32mg1p/include/vendor/efr32mg1p_af_ports.h
rename to cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_af_ports.h
diff --git a/cpu/efr32mg1p/include/vendor/efr32mg1p_cmu.h b/cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_cmu.h
similarity index 100%
rename from cpu/efr32mg1p/include/vendor/efr32mg1p_cmu.h
rename to cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_cmu.h
diff --git a/cpu/efr32mg1p/include/vendor/efr32mg1p_cryotimer.h b/cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_cryotimer.h
similarity index 100%
rename from cpu/efr32mg1p/include/vendor/efr32mg1p_cryotimer.h
rename to cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_cryotimer.h
diff --git a/cpu/efr32mg1p/include/vendor/efr32mg1p_crypto.h b/cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_crypto.h
similarity index 100%
rename from cpu/efr32mg1p/include/vendor/efr32mg1p_crypto.h
rename to cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_crypto.h
diff --git a/cpu/efr32mg1p/include/vendor/efr32mg1p_devinfo.h b/cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_devinfo.h
similarity index 100%
rename from cpu/efr32mg1p/include/vendor/efr32mg1p_devinfo.h
rename to cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_devinfo.h
diff --git a/cpu/efr32mg1p/include/vendor/efr32mg1p_dma_descriptor.h b/cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_dma_descriptor.h
similarity index 100%
rename from cpu/efr32mg1p/include/vendor/efr32mg1p_dma_descriptor.h
rename to cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_dma_descriptor.h
diff --git a/cpu/efr32mg1p/include/vendor/efr32mg1p_dmareq.h b/cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_dmareq.h
similarity index 100%
rename from cpu/efr32mg1p/include/vendor/efr32mg1p_dmareq.h
rename to cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_dmareq.h
diff --git a/cpu/efr32mg1p/include/vendor/efr32mg1p_emu.h b/cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_emu.h
similarity index 100%
rename from cpu/efr32mg1p/include/vendor/efr32mg1p_emu.h
rename to cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_emu.h
diff --git a/cpu/efr32mg1p/include/vendor/efr32mg1p_fpueh.h b/cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_fpueh.h
similarity index 100%
rename from cpu/efr32mg1p/include/vendor/efr32mg1p_fpueh.h
rename to cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_fpueh.h
diff --git a/cpu/efr32mg1p/include/vendor/efr32mg1p_gpcrc.h b/cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_gpcrc.h
similarity index 100%
rename from cpu/efr32mg1p/include/vendor/efr32mg1p_gpcrc.h
rename to cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_gpcrc.h
diff --git a/cpu/efr32mg1p/include/vendor/efr32mg1p_gpio.h b/cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_gpio.h
similarity index 100%
rename from cpu/efr32mg1p/include/vendor/efr32mg1p_gpio.h
rename to cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_gpio.h
diff --git a/cpu/efr32mg1p/include/vendor/efr32mg1p_gpio_p.h b/cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_gpio_p.h
similarity index 100%
rename from cpu/efr32mg1p/include/vendor/efr32mg1p_gpio_p.h
rename to cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_gpio_p.h
diff --git a/cpu/efr32mg1p/include/vendor/efr32mg1p_i2c.h b/cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_i2c.h
similarity index 100%
rename from cpu/efr32mg1p/include/vendor/efr32mg1p_i2c.h
rename to cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_i2c.h
diff --git a/cpu/efr32mg1p/include/vendor/efr32mg1p_idac.h b/cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_idac.h
similarity index 100%
rename from cpu/efr32mg1p/include/vendor/efr32mg1p_idac.h
rename to cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_idac.h
diff --git a/cpu/efr32mg1p/include/vendor/efr32mg1p_ldma.h b/cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_ldma.h
similarity index 100%
rename from cpu/efr32mg1p/include/vendor/efr32mg1p_ldma.h
rename to cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_ldma.h
diff --git a/cpu/efr32mg1p/include/vendor/efr32mg1p_ldma_ch.h b/cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_ldma_ch.h
similarity index 100%
rename from cpu/efr32mg1p/include/vendor/efr32mg1p_ldma_ch.h
rename to cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_ldma_ch.h
diff --git a/cpu/efr32mg1p/include/vendor/efr32mg1p_letimer.h b/cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_letimer.h
similarity index 100%
rename from cpu/efr32mg1p/include/vendor/efr32mg1p_letimer.h
rename to cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_letimer.h
diff --git a/cpu/efr32mg1p/include/vendor/efr32mg1p_leuart.h b/cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_leuart.h
similarity index 100%
rename from cpu/efr32mg1p/include/vendor/efr32mg1p_leuart.h
rename to cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_leuart.h
diff --git a/cpu/efr32mg1p/include/vendor/efr32mg1p_msc.h b/cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_msc.h
similarity index 100%
rename from cpu/efr32mg1p/include/vendor/efr32mg1p_msc.h
rename to cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_msc.h
diff --git a/cpu/efr32mg1p/include/vendor/efr32mg1p_pcnt.h b/cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_pcnt.h
similarity index 100%
rename from cpu/efr32mg1p/include/vendor/efr32mg1p_pcnt.h
rename to cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_pcnt.h
diff --git a/cpu/efr32mg1p/include/vendor/efr32mg1p_prs.h b/cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_prs.h
similarity index 100%
rename from cpu/efr32mg1p/include/vendor/efr32mg1p_prs.h
rename to cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_prs.h
diff --git a/cpu/efr32mg1p/include/vendor/efr32mg1p_prs_ch.h b/cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_prs_ch.h
similarity index 100%
rename from cpu/efr32mg1p/include/vendor/efr32mg1p_prs_ch.h
rename to cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_prs_ch.h
diff --git a/cpu/efr32mg1p/include/vendor/efr32mg1p_prs_signals.h b/cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_prs_signals.h
similarity index 100%
rename from cpu/efr32mg1p/include/vendor/efr32mg1p_prs_signals.h
rename to cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_prs_signals.h
diff --git a/cpu/efr32mg1p/include/vendor/efr32mg1p_rmu.h b/cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_rmu.h
similarity index 100%
rename from cpu/efr32mg1p/include/vendor/efr32mg1p_rmu.h
rename to cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_rmu.h
diff --git a/cpu/efr32mg1p/include/vendor/efr32mg1p_romtable.h b/cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_romtable.h
similarity index 100%
rename from cpu/efr32mg1p/include/vendor/efr32mg1p_romtable.h
rename to cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_romtable.h
diff --git a/cpu/efr32mg1p/include/vendor/efr32mg1p_rtcc.h b/cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_rtcc.h
similarity index 100%
rename from cpu/efr32mg1p/include/vendor/efr32mg1p_rtcc.h
rename to cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_rtcc.h
diff --git a/cpu/efr32mg1p/include/vendor/efr32mg1p_rtcc_cc.h b/cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_rtcc_cc.h
similarity index 100%
rename from cpu/efr32mg1p/include/vendor/efr32mg1p_rtcc_cc.h
rename to cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_rtcc_cc.h
diff --git a/cpu/efr32mg1p/include/vendor/efr32mg1p_rtcc_ret.h b/cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_rtcc_ret.h
similarity index 100%
rename from cpu/efr32mg1p/include/vendor/efr32mg1p_rtcc_ret.h
rename to cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_rtcc_ret.h
diff --git a/cpu/efr32mg1p/include/vendor/efr32mg1p_timer.h b/cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_timer.h
similarity index 100%
rename from cpu/efr32mg1p/include/vendor/efr32mg1p_timer.h
rename to cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_timer.h
diff --git a/cpu/efr32mg1p/include/vendor/efr32mg1p_timer_cc.h b/cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_timer_cc.h
similarity index 100%
rename from cpu/efr32mg1p/include/vendor/efr32mg1p_timer_cc.h
rename to cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_timer_cc.h
diff --git a/cpu/efr32mg1p/include/vendor/efr32mg1p_usart.h b/cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_usart.h
similarity index 100%
rename from cpu/efr32mg1p/include/vendor/efr32mg1p_usart.h
rename to cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_usart.h
diff --git a/cpu/efr32mg1p/include/vendor/efr32mg1p_wdog.h b/cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_wdog.h
similarity index 100%
rename from cpu/efr32mg1p/include/vendor/efr32mg1p_wdog.h
rename to cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_wdog.h
diff --git a/cpu/efr32mg1p/include/vendor/efr32mg1p_wdog_pch.h b/cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_wdog_pch.h
similarity index 100%
rename from cpu/efr32mg1p/include/vendor/efr32mg1p_wdog_pch.h
rename to cpu/efm32/families/efr32mg1p/include/vendor/efr32mg1p_wdog_pch.h
diff --git a/cpu/efr32mg1p/include/vendor/em_device.h b/cpu/efm32/families/efr32mg1p/include/vendor/em_device.h
similarity index 65%
rename from cpu/efr32mg1p/include/vendor/em_device.h
rename to cpu/efm32/families/efr32mg1p/include/vendor/em_device.h
index 10546dfa58..ab163292cb 100644
--- a/cpu/efr32mg1p/include/vendor/em_device.h
+++ b/cpu/efm32/families/efr32mg1p/include/vendor/em_device.h
@@ -49,12 +49,63 @@ extern "C" {
 #ifndef EM_DEVICE_H
 #define EM_DEVICE_H
 
-#if defined(EFR32MG1P132F256GM48)
-#include "efr32mg1p132f256gm48.h"
+#if defined(EFR32MG1P131F256GM48)
+#include "efr32mg1p131f256gm48.h"
+
+#elif defined(EFR32MG1P132F256GJ43)
+#include "efr32mg1p132f256gj43.h"
 
 #elif defined(EFR32MG1P132F256GM32)
 #include "efr32mg1p132f256gm32.h"
 
+#elif defined(EFR32MG1P132F256GM48)
+#include "efr32mg1p132f256gm48.h"
+
+#elif defined(EFR32MG1P132F256IM32)
+#include "efr32mg1p132f256im32.h"
+
+#elif defined(EFR32MG1P132F256IM48)
+#include "efr32mg1p132f256im48.h"
+
+#elif defined(EFR32MG1P133F256GM48)
+#include "efr32mg1p133f256gm48.h"
+
+#elif defined(EFR32MG1P231F256GM48)
+#include "efr32mg1p231f256gm48.h"
+
+#elif defined(EFR32MG1P232F256GJ43)
+#include "efr32mg1p232f256gj43.h"
+
+#elif defined(EFR32MG1P232F256GM32)
+#include "efr32mg1p232f256gm32.h"
+
+#elif defined(EFR32MG1P232F256GM48)
+#include "efr32mg1p232f256gm48.h"
+
+#elif defined(EFR32MG1P232F256IM32)
+#include "efr32mg1p232f256im32.h"
+
+#elif defined(EFR32MG1P232F256IM48)
+#include "efr32mg1p232f256im48.h"
+
+#elif defined(EFR32MG1P233F256GM48)
+#include "efr32mg1p233f256gm48.h"
+
+#elif defined(EFR32MG1P233F256IM48)
+#include "efr32mg1p233f256im48.h"
+
+#elif defined(EFR32MG1P632F256GM32)
+#include "efr32mg1p632f256gm32.h"
+
+#elif defined(EFR32MG1P632F256IM32)
+#include "efr32mg1p632f256im32.h"
+
+#elif defined(EFR32MG1P732F256GM32)
+#include "efr32mg1p732f256gm32.h"
+
+#elif defined(EFR32MG1P732F256IM32)
+#include "efr32mg1p732f256im32.h"
+
 #else
 #error "em_device.h: PART NUMBER undefined"
 #endif
@@ -62,3 +113,4 @@ extern "C" {
 #ifdef __cplusplus
 }
 #endif
+
diff --git a/cpu/efr32mg1p/include/vendor/system_efr32mg1p.h b/cpu/efm32/families/efr32mg1p/include/vendor/system_efr32mg1p.h
similarity index 100%
rename from cpu/efr32mg1p/include/vendor/system_efr32mg1p.h
rename to cpu/efm32/families/efr32mg1p/include/vendor/system_efr32mg1p.h
diff --git a/cpu/efr32mg1p/system_efr32mg1p.c b/cpu/efm32/families/efr32mg1p/system.c
similarity index 100%
rename from cpu/efr32mg1p/system_efr32mg1p.c
rename to cpu/efm32/families/efr32mg1p/system.c
diff --git a/cpu/efr32mg1p/vectors.c b/cpu/efm32/families/efr32mg1p/vectors.c
similarity index 77%
rename from cpu/efr32mg1p/vectors.c
rename to cpu/efm32/families/efr32mg1p/vectors.c
index 79643a95b5..4389a2fcb7 100644
--- a/cpu/efr32mg1p/vectors.c
+++ b/cpu/efm32/families/efr32mg1p/vectors.c
@@ -19,7 +19,6 @@
  * @}
  */
 
-#include <stdint.h>
 #include "vectors_cortexm.h"
 
 /* define a local dummy handler as it needs to be in the same compilation unit
@@ -31,7 +30,13 @@ void dummy_handler(void)
 
 /* Silicon Labs specific interrupt vector */
 WEAK_DEFAULT void isr_emu(void);
+WEAK_DEFAULT void isr_frc_pri(void);
 WEAK_DEFAULT void isr_wdog0(void);
+WEAK_DEFAULT void isr_frc(void);
+WEAK_DEFAULT void isr_modem(void);
+WEAK_DEFAULT void isr_rac_seq(void);
+WEAK_DEFAULT void isr_rac_rsm(void);
+WEAK_DEFAULT void isr_bufc(void);
 WEAK_DEFAULT void isr_ldma(void);
 WEAK_DEFAULT void isr_gpio_even(void);
 WEAK_DEFAULT void isr_timer0(void);
@@ -51,14 +56,24 @@ WEAK_DEFAULT void isr_cmu(void);
 WEAK_DEFAULT void isr_msc(void);
 WEAK_DEFAULT void isr_crypto(void);
 WEAK_DEFAULT void isr_letimer0(void);
+WEAK_DEFAULT void isr_agc(void);
+WEAK_DEFAULT void isr_protimer(void);
 WEAK_DEFAULT void isr_rtcc(void);
+WEAK_DEFAULT void isr_synth(void);
 WEAK_DEFAULT void isr_cryotimer(void);
+WEAK_DEFAULT void isr_rfsense(void);
 WEAK_DEFAULT void isr_fpueh(void);
 
 /* interrupt vector table */
 ISR_VECTOR(1) const isr_t vector_cpu[CPU_IRQ_NUMOF] = {
     [ 0] = isr_emu,                /* EMU */
+    [ 1] = isr_frc_pri,            /* FRC_PRI */
     [ 2] = isr_wdog0,              /* WDOG0 */
+    [ 3] = isr_frc,                /* FRC */
+    [ 4] = isr_modem,              /* MODEM */
+    [ 5] = isr_rac_seq,            /* RAC_SEQ */
+    [ 6] = isr_rac_rsm,            /* RAC_RSM */
+    [ 7] = isr_bufc,               /* BUFC */
     [ 8] = isr_ldma,               /* LDMA */
     [ 9] = isr_gpio_even,          /* GPIO_EVEN */
     [10] = isr_timer0,             /* TIMER0 */
@@ -78,7 +93,11 @@ ISR_VECTOR(1) const isr_t vector_cpu[CPU_IRQ_NUMOF] = {
     [24] = isr_msc,                /* MSC */
     [25] = isr_crypto,             /* CRYPTO */
     [26] = isr_letimer0,           /* LETIMER0 */
+    [27] = isr_agc,                /* AGC */
+    [28] = isr_protimer,           /* PROTIMER */
     [29] = isr_rtcc,               /* RTCC */
+    [30] = isr_synth,              /* SYNTH */
     [31] = isr_cryotimer,          /* CRYOTIMER */
+    [32] = isr_rfsense,            /* RFSENSE */
     [33] = isr_fpueh,              /* FPUEH */
 };
diff --git a/cpu/efr32mg1p/include/cpu_conf.h b/cpu/efm32/include/cpu_conf.h
similarity index 76%
rename from cpu/efr32mg1p/include/cpu_conf.h
rename to cpu/efm32/include/cpu_conf.h
index c289916169..1c8d4748e9 100644
--- a/cpu/efr32mg1p/include/cpu_conf.h
+++ b/cpu/efm32/include/cpu_conf.h
@@ -7,9 +7,9 @@
  */
 
 /**
- * @defgroup    cpu_efr32mg1p Silicon Labs EFR32MG1P
+ * @defgroup    cpu_efm32 Silicon Labs EFM32/EFR32/EZR32
  * @ingroup     cpu
- * @brief       Support for the Silicon Labs EFR32MG1P CPU
+ * @brief       Support for Silicon Labs EFM32/EFR32/EZR32 CPUs
  * @{
  *
  * @file
@@ -31,12 +31,12 @@ extern "C" {
 #endif
 
 /**
- * @brief   ARM Cortex-M4 specific CPU configuration
+ * @brief   ARM Cortex-M specific CPU configuration
  * @{
  */
 #define CPU_DEFAULT_IRQ_PRIO            (1U)
-#define CPU_IRQ_NUMOF                   (FPUEH_IRQn + 1)
-#define CPU_FLASH_BASE                  FLASH_BASE
+#define CPU_IRQ_NUMOF                   (EXT_IRQ_COUNT + 1)
+#define CPU_FLASH_BASE                  (FLASH_BASE)
 /** @} */
 
 /**
diff --git a/cpu/efm32_common/include/periph_cpu.h b/cpu/efm32/include/periph_cpu.h
similarity index 99%
rename from cpu/efm32_common/include/periph_cpu.h
rename to cpu/efm32/include/periph_cpu.h
index dbfed9e58d..18c9d25b48 100644
--- a/cpu/efm32_common/include/periph_cpu.h
+++ b/cpu/efm32/include/periph_cpu.h
@@ -7,7 +7,7 @@
  */
 
 /**
- * @ingroup     cpu_efm32_common
+ * @ingroup     cpu_efm32
  * @{
  *
  * @file
diff --git a/cpu/efr32mg1p/periph/Makefile b/cpu/efm32/periph/Makefile
similarity index 100%
rename from cpu/efr32mg1p/periph/Makefile
rename to cpu/efm32/periph/Makefile
diff --git a/cpu/efm32_common/periph/adc.c b/cpu/efm32/periph/adc.c
similarity index 98%
rename from cpu/efm32_common/periph/adc.c
rename to cpu/efm32/periph/adc.c
index b8cf8280f5..f98ffac661 100644
--- a/cpu/efm32_common/periph/adc.c
+++ b/cpu/efm32/periph/adc.c
@@ -7,7 +7,7 @@
  */
 
 /**
- * @ingroup     cpu_efm32_common
+ * @ingroup     cpu_efm32
  * @ingroup     drivers_periph_adc
  * @{
  *
diff --git a/cpu/efm32_common/periph/cpuid.c b/cpu/efm32/periph/cpuid.c
similarity index 94%
rename from cpu/efm32_common/periph/cpuid.c
rename to cpu/efm32/periph/cpuid.c
index 8a9c81fcfb..05861a7410 100644
--- a/cpu/efm32_common/periph/cpuid.c
+++ b/cpu/efm32/periph/cpuid.c
@@ -7,7 +7,7 @@
  */
 
 /**
- * @ingroup     cpu_efm32_common
+ * @ingroup     cpu_efm32
  * @ingroup     drivers_periph_cpuid
  * @{
  *
diff --git a/cpu/efm32_common/periph/dac.c b/cpu/efm32/periph/dac.c
similarity index 98%
rename from cpu/efm32_common/periph/dac.c
rename to cpu/efm32/periph/dac.c
index ba7da549fe..cd7c7b7301 100644
--- a/cpu/efm32_common/periph/dac.c
+++ b/cpu/efm32/periph/dac.c
@@ -7,7 +7,7 @@
  */
 
 /**
- * @ingroup     cpu_efm32_common
+ * @ingroup     cpu_efm32
  * @ingroup     drivers_periph_dac
  * @{
  *
diff --git a/cpu/efm32_common/periph/flashpage.c b/cpu/efm32/periph/flashpage.c
similarity index 96%
rename from cpu/efm32_common/periph/flashpage.c
rename to cpu/efm32/periph/flashpage.c
index 58ced472b9..3209537f67 100644
--- a/cpu/efm32_common/periph/flashpage.c
+++ b/cpu/efm32/periph/flashpage.c
@@ -7,7 +7,7 @@
  */
 
 /**
- * @ingroup     cpu_efm32_common
+ * @ingroup     cpu_efm32
  * @ingroup     drivers_periph_flashpage
  * @{
  *
diff --git a/cpu/efm32_common/periph/gpio.c b/cpu/efm32/periph/gpio.c
similarity index 99%
rename from cpu/efm32_common/periph/gpio.c
rename to cpu/efm32/periph/gpio.c
index db8eb86fec..0746bbb522 100644
--- a/cpu/efm32_common/periph/gpio.c
+++ b/cpu/efm32/periph/gpio.c
@@ -7,7 +7,7 @@
  */
 
 /**
- * @ingroup     cpu_efm32_common
+ * @ingroup     cpu_efm32
  * @ingroup     drivers_periph_gpio
  * @{
  *
diff --git a/cpu/efm32_common/periph/hwrng.c b/cpu/efm32/periph/hwrng.c
similarity index 97%
rename from cpu/efm32_common/periph/hwrng.c
rename to cpu/efm32/periph/hwrng.c
index 1d34109642..aeb450d2bd 100644
--- a/cpu/efm32_common/periph/hwrng.c
+++ b/cpu/efm32/periph/hwrng.c
@@ -7,7 +7,7 @@
  */
 
 /**
- * @ingroup     cpu_efm32_common
+ * @ingroup     cpu_efm32
  * @ingroup     drivers_periph_hwrng
  * @{
  *
diff --git a/cpu/efm32_common/periph/i2c.c b/cpu/efm32/periph/i2c.c
similarity index 99%
rename from cpu/efm32_common/periph/i2c.c
rename to cpu/efm32/periph/i2c.c
index d3a085b662..b1a5970fd6 100644
--- a/cpu/efm32_common/periph/i2c.c
+++ b/cpu/efm32/periph/i2c.c
@@ -7,7 +7,7 @@
  */
 
 /**
- * @ingroup     cpu_efm32_common
+ * @ingroup     cpu_efm32
  * @ingroup     drivers_periph_i2c
  * @{
  *
diff --git a/cpu/efm32_common/periph/pm.c b/cpu/efm32/periph/pm.c
similarity index 96%
rename from cpu/efm32_common/periph/pm.c
rename to cpu/efm32/periph/pm.c
index 2cdac1f9a8..f88c3ffd97 100644
--- a/cpu/efm32_common/periph/pm.c
+++ b/cpu/efm32/periph/pm.c
@@ -7,7 +7,7 @@
  */
 
 /**
- * @ingroup     cpu_efm32_common
+ * @ingroup     cpu_efm32
  * @ingroup     drivers_periph_pm
  * @{
  *
diff --git a/cpu/efm32_common/periph/pwm.c b/cpu/efm32/periph/pwm.c
similarity index 98%
rename from cpu/efm32_common/periph/pwm.c
rename to cpu/efm32/periph/pwm.c
index 8b5ad350f3..80679e755e 100644
--- a/cpu/efm32_common/periph/pwm.c
+++ b/cpu/efm32/periph/pwm.c
@@ -7,7 +7,7 @@
  */
 
 /**
- * @ingroup     cpu_efm32_common
+ * @ingroup     cpu_efm32
  * @ingroup     drivers_periph_pwm
  * @{
  *
diff --git a/cpu/efm32_common/periph/rtc_series0.c b/cpu/efm32/periph/rtc_series0.c
similarity index 99%
rename from cpu/efm32_common/periph/rtc_series0.c
rename to cpu/efm32/periph/rtc_series0.c
index 5edf2dd147..ef75a7e675 100644
--- a/cpu/efm32_common/periph/rtc_series0.c
+++ b/cpu/efm32/periph/rtc_series0.c
@@ -7,7 +7,7 @@
  */
 
 /**
- * @ingroup     cpu_efm32_common
+ * @ingroup     cpu_efm32
  * @ingroup     drivers_periph_rtc
  * @{
  *
diff --git a/cpu/efm32_common/periph/rtc_series1.c b/cpu/efm32/periph/rtc_series1.c
similarity index 99%
rename from cpu/efm32_common/periph/rtc_series1.c
rename to cpu/efm32/periph/rtc_series1.c
index 7bb817d1ab..d4938283ac 100644
--- a/cpu/efm32_common/periph/rtc_series1.c
+++ b/cpu/efm32/periph/rtc_series1.c
@@ -7,7 +7,7 @@
  */
 
 /**
- * @ingroup     cpu_efm32_common
+ * @ingroup     cpu_efm32
  * @ingroup     drivers_periph_rtc
  * @{
  *
diff --git a/cpu/efm32_common/periph/rtt_series0.c b/cpu/efm32/periph/rtt_series0.c
similarity index 98%
rename from cpu/efm32_common/periph/rtt_series0.c
rename to cpu/efm32/periph/rtt_series0.c
index c75951e315..86b8846169 100644
--- a/cpu/efm32_common/periph/rtt_series0.c
+++ b/cpu/efm32/periph/rtt_series0.c
@@ -7,7 +7,7 @@
  */
 
 /**
- * @ingroup     cpu_efm32_common
+ * @ingroup     cpu_efm32
  * @ingroup     drivers_periph_rtt
  * @{
  *
diff --git a/cpu/efm32_common/periph/rtt_series1.c b/cpu/efm32/periph/rtt_series1.c
similarity index 99%
rename from cpu/efm32_common/periph/rtt_series1.c
rename to cpu/efm32/periph/rtt_series1.c
index f8fce5eddc..c67e60b2cf 100644
--- a/cpu/efm32_common/periph/rtt_series1.c
+++ b/cpu/efm32/periph/rtt_series1.c
@@ -7,7 +7,7 @@
  */
 
 /**
- * @ingroup     cpu_efm32_common
+ * @ingroup     cpu_efm32
  * @ingroup     drivers_periph_rtt
  * @{
  *
diff --git a/cpu/efm32_common/periph/spi.c b/cpu/efm32/periph/spi.c
similarity index 98%
rename from cpu/efm32_common/periph/spi.c
rename to cpu/efm32/periph/spi.c
index d593566bd0..f0b75f9a17 100644
--- a/cpu/efm32_common/periph/spi.c
+++ b/cpu/efm32/periph/spi.c
@@ -7,7 +7,7 @@
  */
 
 /**
- * @ingroup     cpu_efm32_common
+ * @ingroup     cpu_efm32
  * @ingroup     drivers_periph_spi
  * @{
  *
diff --git a/cpu/efm32_common/periph/timer.c b/cpu/efm32/periph/timer.c
similarity index 99%
rename from cpu/efm32_common/periph/timer.c
rename to cpu/efm32/periph/timer.c
index 2891ce5567..2305eb5c3e 100644
--- a/cpu/efm32_common/periph/timer.c
+++ b/cpu/efm32/periph/timer.c
@@ -7,7 +7,7 @@
  */
 
 /**
- * @ingroup     cpu_efm32_common
+ * @ingroup     cpu_efm32
  * @ingroup     drivers_periph_timer
  * @{
  *
diff --git a/cpu/efm32_common/periph/uart.c b/cpu/efm32/periph/uart.c
similarity index 99%
rename from cpu/efm32_common/periph/uart.c
rename to cpu/efm32/periph/uart.c
index f7ae6d6155..adaadf2142 100644
--- a/cpu/efm32_common/periph/uart.c
+++ b/cpu/efm32/periph/uart.c
@@ -7,7 +7,7 @@
  */
 
 /**
- * @ingroup     cpu_efm32_common
+ * @ingroup     cpu_efm32
  * @ingroup     drivers_periph_uart
  * @{
  *
diff --git a/cpu/efm32_common/Makefile.include b/cpu/efm32_common/Makefile.include
deleted file mode 100644
index 5b233183a5..0000000000
--- a/cpu/efm32_common/Makefile.include
+++ /dev/null
@@ -1,20 +0,0 @@
-# the em_device.h header requires a global define with the cpu model
-export CFLAGS += -D$(shell echo $(CPU_MODEL) | tr 'a-z' 'A-Z')
-
-# include emlib package
-USEPKG += emlib
-
-# include efm32 common
-USEMODULE += efm32_common
-
-# include common periph module
-USEMODULE += periph_common
-
-# include efm32 common periph drivers
-USEMODULE += efm32_common_periph
-
-# include layered power management
-USEMODULE += pm_layered
-
-# export the common include directory
-export INCLUDES += -I$(RIOTCPU)/efm32_common/include
diff --git a/cpu/efm32_common/doc.txt b/cpu/efm32_common/doc.txt
deleted file mode 100644
index ac02dada51..0000000000
--- a/cpu/efm32_common/doc.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-/**
- * @defgroup    cpu_efm32_common Silicon Labs Exx32 MCU
- * @ingroup     cpu
- * @brief       Common implementations for the Exx32 family of CPUs
- */
diff --git a/cpu/efm32_common/periph/Makefile b/cpu/efm32_common/periph/Makefile
deleted file mode 100644
index eb60ec07db..0000000000
--- a/cpu/efm32_common/periph/Makefile
+++ /dev/null
@@ -1,3 +0,0 @@
-MODULE = efm32_common_periph
-
-include $(RIOTMAKE)/periph.mk
diff --git a/cpu/efr32mg1p/Makefile b/cpu/efr32mg1p/Makefile
deleted file mode 100644
index 22730f62e1..0000000000
--- a/cpu/efr32mg1p/Makefile
+++ /dev/null
@@ -1,10 +0,0 @@
-# define the module that is build
-MODULE = cpu
-
-# add a list of subdirectories, that should also be build
-DIRS = periph $(RIOTCPU)/cortexm_common $(RIOTCPU)/efm32_common
-
-# (file triggers compiler bug. see #5775)
-SRC_NOLTO += vectors.c
-
-include $(RIOTBASE)/Makefile.base
diff --git a/cpu/efr32mg1p/Makefile.dep b/cpu/efr32mg1p/Makefile.dep
deleted file mode 100644
index 1515a5eab1..0000000000
--- a/cpu/efr32mg1p/Makefile.dep
+++ /dev/null
@@ -1 +0,0 @@
-include $(RIOTCPU)/efm32_common/Makefile.dep
diff --git a/cpu/efr32mg1p/Makefile.features b/cpu/efr32mg1p/Makefile.features
deleted file mode 100644
index 389068b881..0000000000
--- a/cpu/efr32mg1p/Makefile.features
+++ /dev/null
@@ -1,2 +0,0 @@
-
-include $(RIOTCPU)/efm32_common/Makefile.features
diff --git a/cpu/efr32mg1p/Makefile.include b/cpu/efr32mg1p/Makefile.include
deleted file mode 100644
index d2d38383ca..0000000000
--- a/cpu/efr32mg1p/Makefile.include
+++ /dev/null
@@ -1,12 +0,0 @@
-export CPU_ARCH = cortex-m4
-export CPU_FAM = efr32mg1p
-export CPU_SERIES = 1
-
-# include vendor device headers
-export INCLUDES += -I$(RIOTCPU)/efr32mg1p/include/vendor
-
-# include cortexm_common
-include $(RIOTMAKE)/arch/cortexm.inc.mk
-
-# include efm32_common
-include $(RIOTCPU)/efm32_common/Makefile.include
diff --git a/cpu/efr32mg1p/doc.txt b/cpu/efr32mg1p/doc.txt
deleted file mode 100644
index fcae1dfbfb..0000000000
--- a/cpu/efr32mg1p/doc.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-/**
- * @defgroup        cpu_efr32mg1p Silicon Labs EFR32MG1P
- * @ingroup         cpu
- * @brief           Implementation of Silicon Labs's EFR32MG1P MCU
- */
-
-/**
- * @defgroup        cpu_efr32mg1p_definitions Silicon Labs EFR32MG1P definitions
- * @ingroup         cpu_efr32mg1p
- */
diff --git a/cpu/efr32mg1p/ldscripts/efr32mg1p132f256gm32.ld b/cpu/efr32mg1p/ldscripts/efr32mg1p132f256gm32.ld
deleted file mode 100644
index 944d3a9618..0000000000
--- a/cpu/efr32mg1p/ldscripts/efr32mg1p132f256gm32.ld
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (C) 2015-2017 Freie Universität Berlin
- *
- * This file is subject to the terms and conditions of the GNU Lesser
- * General Public License v2.1. See the file LICENSE in the top level
- * directory for more details.
- */
-
-/**
- * @addtogroup      cpu_efr32mg1p
- * @{
- *
- * @file
- * @brief           Memory definitions for the EFR32MG1P132F256GM32 CPU
- *
- * @author          Hauke Petersen <hauke.petersen@fu-berlin.de>
- * @author          Bas Stottelaar <basstottelaar@gmail.com>
- *
- * @}
- */
-
-MEMORY
-{
-    rom (rx)    : ORIGIN = 0x00000000, LENGTH = 262144
-    ram (rwx)   : ORIGIN = 0x20000000, LENGTH = 31744
-}
-
-INCLUDE cortexm_base.ld
diff --git a/cpu/efr32mg1p/ldscripts/efr32mg1p132f256gm48.ld b/cpu/efr32mg1p/ldscripts/efr32mg1p132f256gm48.ld
deleted file mode 100644
index 99b6ee64d8..0000000000
--- a/cpu/efr32mg1p/ldscripts/efr32mg1p132f256gm48.ld
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (C) 2015-2017 Freie Universität Berlin
- *
- * This file is subject to the terms and conditions of the GNU Lesser
- * General Public License v2.1. See the file LICENSE in the top level
- * directory for more details.
- */
-
-/**
- * @addtogroup      cpu_efr32mg1p
- * @{
- *
- * @file
- * @brief           Memory definitions for the EFR32MG1P132F256GM48 CPU
- *
- * @author          Hauke Petersen <hauke.petersen@fu-berlin.de>
- * @author          Bas Stottelaar <basstottelaar@gmail.com>
- *
- * @}
- */
-
-MEMORY
-{
-    rom (rx)    : ORIGIN = 0x00000000, LENGTH = 262144
-    ram (rwx)   : ORIGIN = 0x20000000, LENGTH = 31744
-}
-
-INCLUDE cortexm_base.ld
-- 
GitLab