diff options
author | Oleksij Rempel <o.rempel@pengutronix.de> | 2021-04-23 16:28:28 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2021-05-12 07:56:30 +0200 |
commit | 931dbaf438b6afc4359b16f79a0b837738702560 (patch) | |
tree | 380083ca48c1954d15553b4a4b021b398df43a37 /arch/arm/mach-at91 | |
parent | 4fc0369b1a55cc5e3068a76e0917cb5d11e13d92 (diff) | |
download | barebox-931dbaf438b6afc4359b16f79a0b837738702560.tar.gz barebox-931dbaf438b6afc4359b16f79a0b837738702560.tar.xz |
ARM: at91: add sama5d3_lowlevel_init() helpers
This code can be potentially reused with other sama5d3 based boards
Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
Link: https://lore.barebox.org/20210423142829.29468-6-o.rempel@pengutronix.de
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch/arm/mach-at91')
-rw-r--r-- | arch/arm/mach-at91/Makefile | 1 | ||||
-rw-r--r-- | arch/arm/mach-at91/include/mach/sama5d3_ll.h | 24 | ||||
-rw-r--r-- | arch/arm/mach-at91/sama5d3_ll.c | 34 |
3 files changed, 59 insertions, 0 deletions
diff --git a/arch/arm/mach-at91/Makefile b/arch/arm/mach-at91/Makefile index 9cfba28fa0..c895af7a2f 100644 --- a/arch/arm/mach-at91/Makefile +++ b/arch/arm/mach-at91/Makefile @@ -30,6 +30,7 @@ obj-$(CONFIG_SOC_SAMA5D3) += sama5d3.o sama5d3_devices.o endif lwl-$(CONFIG_SOC_SAMA5D2) += sama5d2_ll.o obj-$(CONFIG_SOC_SAMA5D2) += sama5d2.o +lwl-$(CONFIG_SOC_SAMA5D3) += sama5d3_ll.o obj-$(CONFIG_SOC_AT91SAM9G20) += at91sam9260.o at91sam9260_devices.o obj-$(CONFIG_SOC_AT91SAM9G45) += at91sam9g45.o at91sam9g45_devices.o obj-$(CONFIG_SOC_AT91SAM9X5) += at91sam9x5.o at91sam9x5_devices.o diff --git a/arch/arm/mach-at91/include/mach/sama5d3_ll.h b/arch/arm/mach-at91/include/mach/sama5d3_ll.h new file mode 100644 index 0000000000..b5b6b5d820 --- /dev/null +++ b/arch/arm/mach-at91/include/mach/sama5d3_ll.h @@ -0,0 +1,24 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#ifndef __SAMA5D3_LL_H__ +#define __SAMA5D3_LL_H__ + +#include <mach/at91_pmc_ll.h> +#include <mach/debug_ll.h> +#include <mach/early_udelay.h> + +void sama5d3_lowlevel_init(void); + +static inline void sama5d3_pmc_enable_periph_clock(int clk) +{ + at91_pmc_enable_periph_clock(IOMEM(SAMA5D3_BASE_PMC), clk); +} + +/* requires relocation */ +static inline void sama5d3_udelay_init(unsigned int msc) +{ + early_udelay_init(IOMEM(SAMA5D3_BASE_PMC), IOMEM(SAMA5D3_BASE_PIT), + SAMA5D3_ID_PIT, msc, AT91_PMC_LL_SAMA5D3); +} + +#endif /* __SAMA5D3_LL_H__ */ diff --git a/arch/arm/mach-at91/sama5d3_ll.c b/arch/arm/mach-at91/sama5d3_ll.c new file mode 100644 index 0000000000..4650593699 --- /dev/null +++ b/arch/arm/mach-at91/sama5d3_ll.c @@ -0,0 +1,34 @@ +// SPDX-License-Identifier: GPL-2.0-only AND BSD-1-Clause +// SPDX-FileCopyrightText: 2017, Microchip Corporation + +#include <mach/at91_wdt.h> +#include <mach/barebox-arm.h> +#include <mach/sama5d3_ll.h> + +void sama5d3_lowlevel_init(void) +{ + arm_cpu_lowlevel_init(); + + at91_wdt_disable(IOMEM(SAMA5D3_BASE_WDT)); + at91_pmc_init(IOMEM(SAMA5D3_BASE_PMC), AT91_PMC_LL_SAMA5D3); + + /* At this stage the main oscillator + * is supposed to be enabled PCK = MCK = MOSC + */ + + /* Configure PLLA = MOSC * (PLL_MULA + 1) / PLL_DIVA */ + at91_pmc_cfg_plla(IOMEM(SAMA5D3_BASE_PMC), AT91_PMC3_MUL_(43) + | AT91_PMC_OUT_0 | AT91_PMC_PLLCOUNT + | AT91_PMC_DIV_BYPASS, AT91_PMC_LL_SAMA5D3); + + /* Initialize PLLA charge pump */ + at91_pmc_init_pll(IOMEM(SAMA5D3_BASE_PMC), AT91_PMC_IPLLA_3); + + /* Switch PCK/MCK on Main clock output */ + at91_pmc_cfg_mck(IOMEM(SAMA5D3_BASE_PMC), AT91SAM9_PMC_MDIV_4 + | AT91_PMC_CSS_MAIN, AT91_PMC_LL_SAMA5D3); + + /* Switch PCK/MCK on PLLA output */ + at91_pmc_cfg_mck(IOMEM(SAMA5D3_BASE_PMC), AT91SAM9_PMC_MDIV_4 + | AT91_PMC_CSS_PLLA, AT91_PMC_LL_SAMA5D3); +} |