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 <benjamin.valentin@ml-pa.com>
This commit is contained in:
Benjamin Valentin 2019-03-26 16:38:37 +01:00 committed by Kumar Gala
commit 4cfd0fd1d0

View file

@ -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