-
Notifications
You must be signed in to change notification settings - Fork 176
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add sama5d3xek support with following feature - boot from NAND flash, PMECC support, 4bit ECC @ 512 bytes sector - boot from SPI flash support - boot from SD card support - LCD support - EMAC support - USB OHCI support Signed-off-by: Bo Shen <voice.shen@atmel.com> Signed-off-by: Andreas Bießmann <andreas.devel@googlemail.com>
- Loading branch information
Bo Shen
authored and
Andreas Bießmann
committed
May 21, 2013
1 parent
e5e8bb0
commit 3225f34
Showing
16 changed files
with
1,522 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
# | ||
# (C) Copyright 2000-2008 | ||
# Wolfgang Denk, DENX Software Engineering, wd@denx.de. | ||
# | ||
# (C) Copyright 2013 | ||
# Bo Shen <voice.shen@atmel.com> | ||
# | ||
# See file CREDITS for list of people who contributed to this | ||
# project. | ||
# | ||
# This program is free software; you can redistribute it and/or | ||
# modify it under the terms of the GNU General Public License as | ||
# published by the Free Software Foundation; either version 2 of | ||
# the License, or (at your option) any later version. | ||
# | ||
# This program is distributed in the hope that it will be useful, | ||
# but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
# GNU General Public License for more details. | ||
# | ||
# You should have received a copy of the GNU General Public License | ||
# along with this program; if not, write to the Free Software | ||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, | ||
# MA 02111-1307 USA | ||
# | ||
|
||
include $(TOPDIR)/config.mk | ||
|
||
LIB = $(obj)lib$(SOC).o | ||
|
||
COBJS-$(CONFIG_SAMA5D3) += sama5d3_devices.o | ||
COBJS-y += clock.o | ||
COBJS-y += cpu.o | ||
COBJS-y += reset.o | ||
COBJS-y += timer.o | ||
|
||
SRCS := $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c) | ||
OBJS := $(addprefix $(obj),$(SOBJS-y) $(COBJS-y)) | ||
|
||
all: $(obj).depend $(LIB) | ||
|
||
$(LIB): $(OBJS) | ||
$(call cmd_link_o_target, $(OBJS)) | ||
|
||
######################################################################### | ||
|
||
# defines $(obj).depend target | ||
include $(SRCTREE)/rules.mk | ||
|
||
sinclude $(obj).depend | ||
|
||
######################################################################### |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,125 @@ | ||
/* | ||
* [origin: Linux kernel linux/arch/arm/mach-at91/clock.c] | ||
* | ||
* Copyright (C) 2005 David Brownell | ||
* Copyright (C) 2005 Ivan Kokshaysky | ||
* Copyright (C) 2009 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> | ||
* Copyright (C) 2013 Bo Shen <voice.shen@atmel.com> | ||
* | ||
* This program is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License as published by | ||
* the Free Software Foundation; either version 2 of the License, or | ||
* (at your option) any later version. | ||
*/ | ||
|
||
#include <common.h> | ||
#include <asm/io.h> | ||
#include <asm/arch/hardware.h> | ||
#include <asm/arch/at91_pmc.h> | ||
#include <asm/arch/clk.h> | ||
|
||
#if !defined(CONFIG_AT91FAMILY) | ||
# error You need to define CONFIG_AT91FAMILY in your board config! | ||
#endif | ||
|
||
DECLARE_GLOBAL_DATA_PTR; | ||
|
||
static unsigned long at91_css_to_rate(unsigned long css) | ||
{ | ||
switch (css) { | ||
case AT91_PMC_MCKR_CSS_SLOW: | ||
return CONFIG_SYS_AT91_SLOW_CLOCK; | ||
case AT91_PMC_MCKR_CSS_MAIN: | ||
return gd->arch.main_clk_rate_hz; | ||
case AT91_PMC_MCKR_CSS_PLLA: | ||
return gd->arch.plla_rate_hz; | ||
} | ||
|
||
return 0; | ||
} | ||
|
||
static u32 at91_pll_rate(u32 freq, u32 reg) | ||
{ | ||
unsigned mul, div; | ||
|
||
div = reg & 0xff; | ||
mul = (reg >> 18) & 0x7f; | ||
if (div && mul) { | ||
freq /= div; | ||
freq *= mul + 1; | ||
} else { | ||
freq = 0; | ||
} | ||
|
||
return freq; | ||
} | ||
|
||
int at91_clock_init(unsigned long main_clock) | ||
{ | ||
unsigned freq, mckr; | ||
struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC; | ||
#ifndef CONFIG_SYS_AT91_MAIN_CLOCK | ||
unsigned tmp; | ||
/* | ||
* When the bootloader initialized the main oscillator correctly, | ||
* there's no problem using the cycle counter. But if it didn't, | ||
* or when using oscillator bypass mode, we must be told the speed | ||
* of the main clock. | ||
*/ | ||
if (!main_clock) { | ||
do { | ||
tmp = readl(&pmc->mcfr); | ||
} while (!(tmp & AT91_PMC_MCFR_MAINRDY)); | ||
tmp &= AT91_PMC_MCFR_MAINF_MASK; | ||
main_clock = tmp * (CONFIG_SYS_AT91_SLOW_CLOCK / 16); | ||
} | ||
#endif | ||
gd->arch.main_clk_rate_hz = main_clock; | ||
|
||
/* report if PLLA is more than mildly overclocked */ | ||
gd->arch.plla_rate_hz = at91_pll_rate(main_clock, readl(&pmc->pllar)); | ||
|
||
/* | ||
* MCK and CPU derive from one of those primary clocks. | ||
* For now, assume this parentage won't change. | ||
*/ | ||
mckr = readl(&pmc->mckr); | ||
|
||
/* plla divisor by 2 */ | ||
if (mckr & (1 << 12)) | ||
gd->arch.plla_rate_hz >>= 1; | ||
|
||
gd->arch.mck_rate_hz = at91_css_to_rate(mckr & AT91_PMC_MCKR_CSS_MASK); | ||
freq = gd->arch.mck_rate_hz; | ||
|
||
/* prescale */ | ||
freq >>= mckr & AT91_PMC_MCKR_PRES_MASK; | ||
|
||
switch (mckr & AT91_PMC_MCKR_MDIV_MASK) { | ||
case AT91_PMC_MCKR_MDIV_2: | ||
gd->arch.mck_rate_hz = freq / 2; | ||
break; | ||
case AT91_PMC_MCKR_MDIV_3: | ||
gd->arch.mck_rate_hz = freq / 3; | ||
break; | ||
case AT91_PMC_MCKR_MDIV_4: | ||
gd->arch.mck_rate_hz = freq / 4; | ||
break; | ||
default: | ||
break; | ||
} | ||
|
||
gd->arch.cpu_clk_rate_hz = freq; | ||
|
||
return 0; | ||
} | ||
|
||
void at91_periph_clk_enable(int id) | ||
{ | ||
struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC; | ||
|
||
if (id > 31) | ||
writel(1 << (id - 32), &pmc->pcer1); | ||
else | ||
writel(1 << id, &pmc->pcer); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,90 @@ | ||
/* | ||
* (C) Copyright 2010 | ||
* Reinhard Meyer, reinhard.meyer@emk-elektronik.de | ||
* (C) Copyright 2009 | ||
* Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> | ||
* (C) Copyright 2013 | ||
* Bo Shen <voice.shen@atmel.com> | ||
* | ||
* See file CREDITS for list of people who contributed to this | ||
* project. | ||
* | ||
* This program is free software; you can redistribute it and/or | ||
* modify it under the terms of the GNU General Public License as | ||
* published by the Free Software Foundation; either version 2 of | ||
* the License, or (at your option) any later version. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program; if not, write to the Free Software | ||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, | ||
* MA 02111-1307 USA | ||
*/ | ||
|
||
#include <common.h> | ||
#include <asm/io.h> | ||
#include <asm/arch/hardware.h> | ||
#include <asm/arch/at91_dbu.h> | ||
#include <asm/arch/at91_pmc.h> | ||
#include <asm/arch/at91_pit.h> | ||
#include <asm/arch/at91_gpbr.h> | ||
#include <asm/arch/clk.h> | ||
|
||
#ifndef CONFIG_SYS_AT91_MAIN_CLOCK | ||
#define CONFIG_SYS_AT91_MAIN_CLOCK 0 | ||
#endif | ||
|
||
int arch_cpu_init(void) | ||
{ | ||
return at91_clock_init(CONFIG_SYS_AT91_MAIN_CLOCK); | ||
} | ||
|
||
void arch_preboot_os(void) | ||
{ | ||
ulong cpiv; | ||
at91_pit_t *pit = (at91_pit_t *)ATMEL_BASE_PIT; | ||
|
||
cpiv = AT91_PIT_MR_PIV_MASK(readl(&pit->piir)); | ||
|
||
/* | ||
* Disable PITC | ||
* Add 0x1000 to current counter to stop it faster | ||
* without waiting for wrapping back to 0 | ||
*/ | ||
writel(cpiv + 0x1000, &pit->mr); | ||
} | ||
|
||
#if defined(CONFIG_DISPLAY_CPUINFO) | ||
int print_cpuinfo(void) | ||
{ | ||
char buf[32]; | ||
|
||
printf("CPU: %s\n", get_cpu_name()); | ||
printf("Crystal frequency: %8s MHz\n", | ||
strmhz(buf, get_main_clk_rate())); | ||
printf("CPU clock : %8s MHz\n", | ||
strmhz(buf, get_cpu_clk_rate())); | ||
printf("Master clock : %8s MHz\n", | ||
strmhz(buf, get_mck_clk_rate())); | ||
|
||
return 0; | ||
} | ||
#endif | ||
|
||
void enable_caches(void) | ||
{ | ||
} | ||
|
||
unsigned int get_chip_id(void) | ||
{ | ||
return readl(ATMEL_BASE_DBGU + AT91_DBU_CIDR) & ~AT91_DBU_CIDR_MASK; | ||
} | ||
|
||
unsigned int get_extension_chip_id(void) | ||
{ | ||
return readl(ATMEL_BASE_DBGU + AT91_DBU_EXID); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
/* | ||
* (C) Copyright 2007-2008 | ||
* Stelian Pop <stelian@popies.net> | ||
* Lead Tech Design <www.leadtechdesign.com> | ||
* | ||
* (C) Copyright 2013 | ||
* Bo Shen <voice.shen@atmel.com> | ||
* | ||
* See file CREDITS for list of people who contributed to this | ||
* project. | ||
* | ||
* This program is free software; you can redistribute it and/or | ||
* modify it under the terms of the GNU General Public License as | ||
* published by the Free Software Foundation; either version 2 of | ||
* the License, or (at your option) any later version. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program; if not, write to the Free Software | ||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, | ||
* MA 02111-1307 USA | ||
*/ | ||
|
||
#include <common.h> | ||
#include <asm/io.h> | ||
#include <asm/arch/hardware.h> | ||
#include <asm/arch/at91_rstc.h> | ||
|
||
/* Reset the cpu by telling the reset controller to do so */ | ||
void reset_cpu(ulong ignored) | ||
{ | ||
at91_rstc_t *rstc = (at91_rstc_t *)ATMEL_BASE_RSTC; | ||
|
||
writel(AT91_RSTC_KEY | ||
| AT91_RSTC_CR_PROCRST /* Processor Reset */ | ||
| AT91_RSTC_CR_PERRST /* Peripheral Reset */ | ||
#ifdef CONFIG_AT91RESET_EXTRST | ||
| AT91_RSTC_CR_EXTRST /* External Reset (assert nRST pin) */ | ||
#endif | ||
, &rstc->cr); | ||
/* never reached */ | ||
do { } while (1); | ||
} |
Oops, something went wrong.