diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2018-11-05 15:45:00 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2018-11-06 09:39:22 +0100 |
commit | 30f4a93d2b420608c1f98126393de66ff2d3c085 (patch) | |
tree | 819146f37b094a29728e67858546eb9fc717e046 /arch/arm/mach-at91 | |
parent | e08031d5796be2eb61e0fef50319cc58d184bb75 (diff) | |
download | barebox-30f4a93d2b420608c1f98126393de66ff2d3c085.tar.gz barebox-30f4a93d2b420608c1f98126393de66ff2d3c085.tar.xz |
ARM: at91: make at91sam926x_board_init board specific
The base addresses used in at91sam926x_board_init() differ with each
SoC. The board knows which SoC we are running on though, so create and
use SoC specific variants of these functions which pass the appropriate
base addresses to at91sam926x_board_init().
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch/arm/mach-at91')
-rw-r--r-- | arch/arm/mach-at91/include/mach/at91sam926x_board_init.h | 35 | ||||
-rw-r--r-- | arch/arm/mach-at91/include/mach/at91sam9_smc.h | 6 |
2 files changed, 30 insertions, 11 deletions
diff --git a/arch/arm/mach-at91/include/mach/at91sam926x_board_init.h b/arch/arm/mach-at91/include/mach/at91sam926x_board_init.h index 36fb84b63c..cbb08b9c7e 100644 --- a/arch/arm/mach-at91/include/mach/at91sam926x_board_init.h +++ b/arch/arm/mach-at91/include/mach/at91sam926x_board_init.h @@ -120,7 +120,8 @@ static void __always_inline at91sam926x_sdramc_init(struct at91sam926x_board_cfg access_sdram(); } -static void __always_inline at91sam926x_board_init(struct at91sam926x_board_cfg *cfg) +static void __always_inline at91sam926x_board_init(void __iomem *smcbase, + struct at91sam926x_board_cfg *cfg) { u32 r; void __iomem *pmc = IOMEM(AT91SAM926X_BASE_PMC); @@ -139,10 +140,10 @@ static void __always_inline at91sam926x_board_init(struct at91sam926x_board_cfg writel(cfg->ebi_csa, cfg->matrix_csa); /* flash */ - at91_smc_write(cfg->smc_cs, AT91_SAM9_SMC_MODE, cfg->smc_mode); - at91_smc_write(cfg->smc_cs, AT91_SMC_CYCLE, cfg->smc_cycle); - at91_smc_write(cfg->smc_cs, AT91_SMC_PULSE, cfg->smc_pulse); - at91_smc_write(cfg->smc_cs, AT91_SMC_SETUP, cfg->smc_setup); + writel(cfg->smc_mode, smcbase + cfg->smc_cs * 0x10 + AT91_SAM9_SMC_MODE); + writel(cfg->smc_cycle, smcbase + cfg->smc_cs * 0x10 + AT91_SMC_CYCLE); + writel(cfg->smc_pulse, smcbase + cfg->smc_cs * 0x10 + AT91_SMC_PULSE); + writel(cfg->smc_setup, smcbase + cfg->smc_cs * 0x10 + AT91_SMC_SETUP); /* PMC Check if the PLL is already initialized */ r = readl(pmc + AT91_PMC_MCKR); @@ -184,4 +185,28 @@ static void __always_inline at91sam926x_board_init(struct at91sam926x_board_cfg writel(0xffffffff, pmc + AT91_PMC_PCER); } +#if defined CONFIG_ARCH_AT91SAM9260 +#include <mach/at91sam9260.h> +static void __always_inline at91sam9260_board_init(struct at91sam926x_board_cfg *cfg) +{ + at91sam926x_board_init(IOMEM(AT91SAM9260_BASE_SMC), cfg); +} +#endif + +#if defined CONFIG_ARCH_AT91SAM9261 || defined CONFIG_ARCH_AT91SAM9G10 +#include <mach/at91sam9261.h> +static void __always_inline at91sam9261_board_init(struct at91sam926x_board_cfg *cfg) +{ + at91sam926x_board_init(IOMEM(AT91SAM9261_BASE_SMC), cfg); +} +#endif + +#if defined CONFIG_ARCH_AT91SAM9263 +#include <mach/at91sam9263.h> +static void __always_inline at91sam9263_board_init(struct at91sam926x_board_cfg *cfg) +{ + at91sam926x_board_init(IOMEM(AT91SAM9263_BASE_SMC0), cfg); +} +#endif + #endif /* __AT91SAM926X_BOARD_INIT_H__ */ diff --git a/arch/arm/mach-at91/include/mach/at91sam9_smc.h b/arch/arm/mach-at91/include/mach/at91sam9_smc.h index d19cf82eca..0908f6df25 100644 --- a/arch/arm/mach-at91/include/mach/at91sam9_smc.h +++ b/arch/arm/mach-at91/include/mach/at91sam9_smc.h @@ -16,12 +16,6 @@ #ifndef AT91SAM9_SMC_H #define AT91SAM9_SMC_H -#define at91_smc_read(id, field) \ - __raw_readl(AT91_BASE_SMC + ((id) * 0x10) + field) - -#define at91_smc_write(id, field, value) \ - __raw_writel(value, AT91_BASE_SMC + ((id) * 0x10) + field) - #ifndef __ASSEMBLY__ struct sam9_smc_config { /* Setup register */ |