From 4cfd0fd1d0b940dda6ebf5f04fdcb12e4b9a799a Mon Sep 17 00:00:00 2001 From: Benjamin Valentin Date: Tue, 26 Mar 2019 16:38:37 +0100 Subject: [PATCH] soc: sam0: Add SERCOM fixup for samd5x The SERCOMS on SAMD5x/SAME5x are connected to different MCLK APBMASKs. There is no systematic way to tell whether a SERCOM is connected to APBA, APBB, APBC or APBD, so rely on the information from ASF instead of replicating it elsewhere. This is needed for SPI, I2C and UART support on the SAMD5x/SAME5x platform. Signed-off-by: Benjamin Valentin --- .../atmel_sam0/common/sercom_fixup_samd5x.h | 141 ++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 soc/arm/atmel_sam0/common/sercom_fixup_samd5x.h diff --git a/soc/arm/atmel_sam0/common/sercom_fixup_samd5x.h b/soc/arm/atmel_sam0/common/sercom_fixup_samd5x.h new file mode 100644 index 00000000000..3bb2bcad06c --- /dev/null +++ b/soc/arm/atmel_sam0/common/sercom_fixup_samd5x.h @@ -0,0 +1,141 @@ +/* + * Copyright (c) 2019 ML!PA Consulting GmbH + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifdef MCLK_APBAMASK_SERCOM0 +#define MCLK_SERCOM0 (&MCLK->APBAMASK.reg) +#define MCLK_SERCOM0_MASK (MCLK_APBAMASK_SERCOM0) +#endif +#ifdef MCLK_APBBMASK_SERCOM0 +#define MCLK_SERCOM0 (&MCLK->APBBMASK.reg) +#define MCLK_SERCOM0_MASK (MCLK_APBBMASK_SERCOM0) +#endif +#ifdef MCLK_APBCMASK_SERCOM0 +#define MCLK_SERCOM0 (&MCLK->APBCMASK.reg) +#define MCLK_SERCOM0_MASK (MCLK_APBCMASK_SERCOM0) +#endif +#ifdef MCLK_APBDMASK_SERCOM0 +#define MCLK_SERCOM0 (&MCLK->APBDMASK.reg) +#define MCLK_SERCOM0_MASK (MCLK_APBDMASK_SERCOM0) +#endif + +#ifdef MCLK_APBAMASK_SERCOM1 +#define MCLK_SERCOM1 (&MCLK->APBAMASK.reg) +#define MCLK_SERCOM1_MASK (MCLK_APBAMASK_SERCOM1) +#endif +#ifdef MCLK_APBBMASK_SERCOM1 +#define MCLK_SERCOM1 (&MCLK->APBBMASK.reg) +#define MCLK_SERCOM1_MASK (MCLK_APBBMASK_SERCOM1) +#endif +#ifdef MCLK_APBCMASK_SERCOM1 +#define MCLK_SERCOM1 (&MCLK->APBCMASK.reg) +#define MCLK_SERCOM1_MASK (MCLK_APBCMASK_SERCOM1) +#endif +#ifdef MCLK_APBDMASK_SERCOM1 +#define MCLK_SERCOM1 (&MCLK->APBDMASK.reg) +#define MCLK_SERCOM1_MASK (MCLK_APBDMASK_SERCOM1) +#endif + +#ifdef MCLK_APBAMASK_SERCOM2 +#define MCLK_SERCOM2 (&MCLK->APBAMASK.reg) +#define MCLK_SERCOM2_MASK (MCLK_APBAMASK_SERCOM2) +#endif +#ifdef MCLK_APBBMASK_SERCOM2 +#define MCLK_SERCOM2 (&MCLK->APBBMASK.reg) +#define MCLK_SERCOM2_MASK (MCLK_APBBMASK_SERCOM2) +#endif +#ifdef MCLK_APBCMASK_SERCOM2 +#define MCLK_SERCOM2 (&MCLK->APBCMASK.reg) +#define MCLK_SERCOM2_MASK (MCLK_APBCMASK_SERCOM2) +#endif +#ifdef MCLK_APBDMASK_SERCOM2 +#define MCLK_SERCOM2 (&MCLK->APBDMASK.reg) +#define MCLK_SERCOM2_MASK (MCLK_APBDMASK_SERCOM2) +#endif + +#ifdef MCLK_APBAMASK_SERCOM3 +#define MCLK_SERCOM3 (&MCLK->APBAMASK.reg) +#define MCLK_SERCOM3_MASK (MCLK_APBAMASK_SERCOM3) +#endif +#ifdef MCLK_APBBMASK_SERCOM3 +#define MCLK_SERCOM3 (&MCLK->APBBMASK.reg) +#define MCLK_SERCOM3_MASK (MCLK_APBBMASK_SERCOM3) +#endif +#ifdef MCLK_APBCMASK_SERCOM3 +#define MCLK_SERCOM3 (&MCLK->APBCMASK.reg) +#define MCLK_SERCOM3_MASK (MCLK_APBCMASK_SERCOM3) +#endif +#ifdef MCLK_APBDMASK_SERCOM3 +#define MCLK_SERCOM3 (&MCLK->APBDMASK.reg) +#define MCLK_SERCOM3_MASK (MCLK_APBDMASK_SERCOM3) +#endif + +#ifdef MCLK_APBAMASK_SERCOM4 +#define MCLK_SERCOM4 (&MCLK->APBAMASK.reg) +#define MCLK_SERCOM4_MASK (MCLK_APBAMASK_SERCOM4) +#endif +#ifdef MCLK_APBBMASK_SERCOM4 +#define MCLK_SERCOM4 (&MCLK->APBBMASK.reg) +#define MCLK_SERCOM4_MASK (MCLK_APBBMASK_SERCOM4) +#endif +#ifdef MCLK_APBCMASK_SERCOM4 +#define MCLK_SERCOM4 (&MCLK->APBCMASK.reg) +#define MCLK_SERCOM4_MASK (MCLK_APBCMASK_SERCOM4) +#endif +#ifdef MCLK_APBDMASK_SERCOM4 +#define MCLK_SERCOM4 (&MCLK->APBDMASK.reg) +#define MCLK_SERCOM4_MASK (MCLK_APBDMASK_SERCOM4) +#endif + +#ifdef MCLK_APBAMASK_SERCOM5 +#define MCLK_SERCOM5 (&MCLK->APBAMASK.reg) +#define MCLK_SERCOM5_MASK (MCLK_APBAMASK_SERCOM5) +#endif +#ifdef MCLK_APBBMASK_SERCOM5 +#define MCLK_SERCOM5 (&MCLK->APBBMASK.reg) +#define MCLK_SERCOM5_MASK (MCLK_APBBMASK_SERCOM5) +#endif +#ifdef MCLK_APBCMASK_SERCOM5 +#define MCLK_SERCOM5 (&MCLK->APBCMASK.reg) +#define MCLK_SERCOM5_MASK (MCLK_APBCMASK_SERCOM5) +#endif +#ifdef MCLK_APBDMASK_SERCOM5 +#define MCLK_SERCOM5 (&MCLK->APBDMASK.reg) +#define MCLK_SERCOM5_MASK (MCLK_APBDMASK_SERCOM5) +#endif + +#ifdef MCLK_APBAMASK_SERCOM6 +#define MCLK_SERCOM6 (&MCLK->APBAMASK.reg) +#define MCLK_SERCOM6_MASK (MCLK_APBAMASK_SERCOM6) +#endif +#ifdef MCLK_APBBMASK_SERCOM6 +#define MCLK_SERCOM6 (&MCLK->APBBMASK.reg) +#define MCLK_SERCOM6_MASK (MCLK_APBBMASK_SERCOM6) +#endif +#ifdef MCLK_APBCMASK_SERCOM6 +#define MCLK_SERCOM6 (&MCLK->APBCMASK.reg) +#define MCLK_SERCOM6_MASK (MCLK_APBCMASK_SERCOM6) +#endif +#ifdef MCLK_APBDMASK_SERCOM6 +#define MCLK_SERCOM6 (&MCLK->APBDMASK.reg) +#define MCLK_SERCOM6_MASK (MCLK_APBDMASK_SERCOM6) +#endif + +#ifdef MCLK_APBAMASK_SERCOM7 +#define MCLK_SERCOM7 (&MCLK->APBAMASK.reg) +#define MCLK_SERCOM7_MASK (MCLK_APBAMASK_SERCOM7) +#endif +#ifdef MCLK_APBBMASK_SERCOM7 +#define MCLK_SERCOM7 (&MCLK->APBBMASK.reg) +#define MCLK_SERCOM7_MASK (MCLK_APBBMASK_SERCOM7) +#endif +#ifdef MCLK_APBCMASK_SERCOM7 +#define MCLK_SERCOM7 (&MCLK->APBCMASK.reg) +#define MCLK_SERCOM7_MASK (MCLK_APBCMASK_SERCOM7) +#endif +#ifdef MCLK_APBDMASK_SERCOM7 +#define MCLK_SERCOM7 (&MCLK->APBDMASK.reg) +#define MCLK_SERCOM7_MASK (MCLK_APBDMASK_SERCOM7) +#endif