[U-Boot] [PATCH 1/1] at91sam9/at91cap: improve clock framework

calculate dynamically the clock rate and pllb setting for usb
Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD plagnioj@jcrosoft.com --- board/atmel/at91cap9adk/at91cap9adk.c | 3 +- board/atmel/at91sam9261ek/at91sam9261ek.c | 3 +- board/atmel/at91sam9263ek/at91sam9263ek.c | 3 +- board/atmel/at91sam9rlek/at91sam9rlek.c | 3 +- cpu/arm926ejs/at91/Makefile | 2 + cpu/arm926ejs/at91/clock.c | 196 +++++++++++++++++++++++++++++ cpu/arm926ejs/at91/cpu.c | 14 ++ drivers/spi/atmel_dataflash_spi.c | 7 +- drivers/usb/atmel_usb.c | 3 +- include/asm-arm/arch-at91/clk.h | 17 ++- include/asm-arm/arch-at91/hardware.h | 3 + include/asm-arm/u-boot-arm.h | 3 + include/configs/afeb9260.h | 6 +- include/configs/at91cap9adk.h | 7 +- include/configs/at91sam9260ek.h | 9 +-- include/configs/at91sam9261ek.h | 6 +- include/configs/at91sam9263ek.h | 7 +- include/configs/at91sam9rlek.h | 6 +- lib_arm/board.c | 3 + 19 files changed, 254 insertions(+), 47 deletions(-) create mode 100644 cpu/arm926ejs/at91/clock.c create mode 100644 cpu/arm926ejs/at91/cpu.c
diff --git a/board/atmel/at91cap9adk/at91cap9adk.c b/board/atmel/at91cap9adk/at91cap9adk.c index e8025e7..f52edaa 100644 --- a/board/atmel/at91cap9adk/at91cap9adk.c +++ b/board/atmel/at91cap9adk/at91cap9adk.c @@ -29,6 +29,7 @@ #include <asm/arch/at91_common.h> #include <asm/arch/at91_pmc.h> #include <asm/arch/at91_rstc.h> +#include <asm/arch/clk.h> #include <asm/arch/gpio.h> #include <asm/arch/io.h> #include <asm/arch/hardware.h> @@ -283,7 +284,7 @@ void lcd_show_board_info(void) lcd_printf ("at91support@atmel.com\n"); lcd_printf ("%s CPU at %s MHz\n", AT91_CPU_NAME, - strmhz(temp, AT91_CPU_CLOCK)); + strmhz(temp, get_cpu_clk_rate()));
dram_size = 0; for (i = 0; i < CONFIG_NR_DRAM_BANKS; i++) diff --git a/board/atmel/at91sam9261ek/at91sam9261ek.c b/board/atmel/at91sam9261ek/at91sam9261ek.c index bae4092..a89cb8b 100644 --- a/board/atmel/at91sam9261ek/at91sam9261ek.c +++ b/board/atmel/at91sam9261ek/at91sam9261ek.c @@ -29,6 +29,7 @@ #include <asm/arch/at91_common.h> #include <asm/arch/at91_pmc.h> #include <asm/arch/at91_rstc.h> +#include <asm/arch/clk.h> #include <asm/arch/gpio.h> #include <asm/arch/io.h> #include <lcd.h> @@ -185,7 +186,7 @@ void lcd_show_board_info(void) lcd_printf ("at91support@atmel.com\n"); lcd_printf ("%s CPU at %s MHz\n", AT91_CPU_NAME, - strmhz(temp, AT91_CPU_CLOCK)); + strmhz(temp, get_cpu_clk_rate()));
dram_size = 0; for (i = 0; i < CONFIG_NR_DRAM_BANKS; i++) diff --git a/board/atmel/at91sam9263ek/at91sam9263ek.c b/board/atmel/at91sam9263ek/at91sam9263ek.c index 1d52845..57d5c95 100644 --- a/board/atmel/at91sam9263ek/at91sam9263ek.c +++ b/board/atmel/at91sam9263ek/at91sam9263ek.c @@ -30,6 +30,7 @@ #include <asm/arch/at91_common.h> #include <asm/arch/at91_pmc.h> #include <asm/arch/at91_rstc.h> +#include <asm/arch/clk.h> #include <asm/arch/gpio.h> #include <asm/arch/io.h> #include <asm/arch/hardware.h> @@ -206,7 +207,7 @@ void lcd_show_board_info(void) lcd_printf ("at91support@atmel.com\n"); lcd_printf ("%s CPU at %s MHz\n", AT91_CPU_NAME, - strmhz(temp, AT91_CPU_CLOCK)); + strmhz(temp, get_cpu_clk_rate()));
dram_size = 0; for (i = 0; i < CONFIG_NR_DRAM_BANKS; i++) diff --git a/board/atmel/at91sam9rlek/at91sam9rlek.c b/board/atmel/at91sam9rlek/at91sam9rlek.c index 908b9c8..7013ba2 100644 --- a/board/atmel/at91sam9rlek/at91sam9rlek.c +++ b/board/atmel/at91sam9rlek/at91sam9rlek.c @@ -29,6 +29,7 @@ #include <asm/arch/at91_common.h> #include <asm/arch/at91_pmc.h> #include <asm/arch/at91_rstc.h> +#include <asm/arch/clk.h> #include <asm/arch/gpio.h> #include <asm/arch/io.h> #include <lcd.h> @@ -157,7 +158,7 @@ void lcd_show_board_info(void) lcd_printf ("at91support@atmel.com\n"); lcd_printf ("%s CPU at %s MHz\n", AT91_CPU_NAME, - strmhz(temp, AT91_CPU_CLOCK)); + strmhz(temp, get_cpu_clk_rate()));
dram_size = 0; for (i = 0; i < CONFIG_NR_DRAM_BANKS; i++) diff --git a/cpu/arm926ejs/at91/Makefile b/cpu/arm926ejs/at91/Makefile index 038af82..685cee1 100644 --- a/cpu/arm926ejs/at91/Makefile +++ b/cpu/arm926ejs/at91/Makefile @@ -61,6 +61,8 @@ COBJS-y += at91sam9rl_serial.o COBJS-$(CONFIG_HAS_DATAFLASH) += at91sam9rl_spi.o endif COBJS-$(CONFIG_AT91_LED) += led.o +COBJS-y += clock.o +COBJS-y += cpu.o COBJS-y += timer.o SOBJS = lowlevel_init.o
diff --git a/cpu/arm926ejs/at91/clock.c b/cpu/arm926ejs/at91/clock.c new file mode 100644 index 0000000..44b3634 --- /dev/null +++ b/cpu/arm926ejs/at91/clock.c @@ -0,0 +1,196 @@ +/* + * [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 + * + * 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 <config.h> +#include <asm/arch/hardware.h> +#include <asm/arch/at91_pmc.h> +#include <asm/arch/clk.h> +#include <asm/arch/io.h> + +static unsigned long cpu_clk_rate_hz; +static unsigned long main_clk_rate_hz; +static unsigned long mck_rate_hz; +static unsigned long plla_rate_hz; +static unsigned long pllb_rate_hz; +static u32 at91_pllb_usb_init; + +unsigned long get_cpu_clk_rate(void) +{ + return cpu_clk_rate_hz; +} + +unsigned long get_main_clk_rate(void) +{ + return main_clk_rate_hz; +} + +unsigned long get_mck_clk_rate(void) +{ + return mck_rate_hz; +} + +unsigned long get_plla_clk_rate(void) +{ + return plla_rate_hz; +} + +unsigned long get_pllb_clk_rate(void) +{ + return pllb_rate_hz; +} + +u32 get_pllb_init(void) +{ + return at91_pllb_usb_init; +} + +static unsigned long at91_css_to_rate(unsigned long css) +{ + switch (css) { + case AT91_PMC_CSS_SLOW: + return AT91_SLOW_CLOCK; + case AT91_PMC_CSS_MAIN: + return main_clk_rate_hz; + case AT91_PMC_CSS_PLLA: + return plla_rate_hz; + case AT91_PMC_CSS_PLLB: + return pllb_rate_hz; + } + + return 0; +} + +static unsigned at91_pll_calc(unsigned main_freq, unsigned out_freq) +{ + unsigned i, div = 0, mul = 0, diff = 1 << 30; + unsigned ret = (out_freq > 155000000) ? 0xbe00 : 0x3e00; + + /* PLL output max 240 MHz (or 180 MHz per errata) */ + if (out_freq > 240000000) + goto fail; + + for (i = 1; i < 256; i++) { + int diff1; + unsigned input, mul1; + + /* + * PLL input between 1MHz and 32MHz per spec, but lower + * frequences seem necessary in some cases so allow 100K. + * Warning: some newer products need 2MHz min. + */ + input = main_freq / i; +#if defined(CONFIG_AT91SAM9G20) + if (input < 2000000) + continue; +#endif + if (input < 100000) + continue; + if (input > 32000000) + continue; + + mul1 = out_freq / input; +#if defined(CONFIG_AT91SAM9G20) + if (mul > 63) + continue; +#endif + if (mul1 > 2048) + continue; + if (mul1 < 2) + goto fail; + + diff1 = out_freq - input * mul1; + if (diff1 < 0) + diff1 = -diff1; + if (diff > diff1) { + diff = diff1; + div = i; + mul = mul1; + if (diff == 0) + break; + } + } + if (i == 256 && diff > (out_freq >> 5)) + goto fail; + return ret | ((mul - 1) << 16) | div; +fail: + return 0; +} + +static u32 at91_pll_rate(u32 freq, u32 reg) +{ + unsigned mul, div; + + div = reg & 0xff; + mul = (reg >> 16) & 0x7ff; + if (div && mul) { + freq /= div; + freq *= mul + 1; + } else + freq = 0; + + return freq; +} + +int at91_clock_init(unsigned long main_clock) +{ + unsigned tmp, freq, mckr; + + /* + * 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 = at91_sys_read(AT91_CKGR_MCFR); + } while (!(tmp & AT91_PMC_MAINRDY)); + main_clock = (tmp & AT91_PMC_MAINF) * (AT91_SLOW_CLOCK / 16); + } + main_clk_rate_hz = main_clock; + + /* report if PLLA is more than mildly overclocked */ + plla_rate_hz = at91_pll_rate(main_clock, at91_sys_read(AT91_CKGR_PLLAR)); + + /* + * USB clock init: choose 48 MHz PLLB value, + * disable 48MHz clock during usb peripheral suspend. + * + * REVISIT: assumes MCK doesn't derive from PLLB! + */ + at91_pllb_usb_init = at91_pll_calc(main_clock, 48000000 * 2) | + AT91_PMC_USB96M; + pllb_rate_hz = at91_pll_rate(main_clock, at91_pllb_usb_init); + + /* + * MCK and CPU derive from one of those primary clocks. + * For now, assume this parentage won't change. + */ + mckr = at91_sys_read(AT91_PMC_MCKR); + freq = mck_rate_hz = at91_css_to_rate(mckr & AT91_PMC_CSS); + freq /= (1 << ((mckr & AT91_PMC_PRES) >> 2)); /* prescale */ +#if defined(CONFIG_AT91RM9200) + mck_rate_hz = freq / (1 + ((mckr & AT91_PMC_MDIV) >> 8)); /* mdiv */ +#elif defined(CONFIG_AT91SAM9G20) + mck_rate_hz = (mckr & AT91_PMC_MDIV) ? + freq / ((mckr & AT91_PMC_MDIV) >> 7) : freq; /* mdiv ; (x >> 7) = ((x >> 8) * 2) */ + if (mckr & AT91_PMC_PDIV) + freq /= 2; /* processor clock division */ +#else + mck_rate_hz = freq / (1 << ((mckr & AT91_PMC_MDIV) >> 8)); /* mdiv */ +#endif + cpu_clk_rate_hz = freq; + + return 0; +} + diff --git a/cpu/arm926ejs/at91/cpu.c b/cpu/arm926ejs/at91/cpu.c new file mode 100644 index 0000000..a9705cf --- /dev/null +++ b/cpu/arm926ejs/at91/cpu.c @@ -0,0 +1,14 @@ +#include <config.h> +#include <asm/arch/hardware.h> +#include <asm/arch/at91_pmc.h> +#include <asm/arch/clk.h> +#include <asm/arch/io.h> + +int arch_cpu_init(void) +{ +#ifdef AT91_MAIN_CLOCK + return at91_clock_init(AT91_MAIN_CLOCK); +#else + return at91_clock_init(0); +#endif +} diff --git a/drivers/spi/atmel_dataflash_spi.c b/drivers/spi/atmel_dataflash_spi.c index 3eb252c..614965c 100644 --- a/drivers/spi/atmel_dataflash_spi.c +++ b/drivers/spi/atmel_dataflash_spi.c @@ -21,6 +21,7 @@
#include <common.h> #include <asm/arch/hardware.h> +#include <asm/arch/clk.h> #include <asm/arch/gpio.h> #include <asm/arch/io.h> #include <asm/arch/at91_pio.h> @@ -45,7 +46,7 @@ void AT91F_SpiInit(void) writel(AT91_SPI_NCPHA | (AT91_SPI_DLYBS & DATAFLASH_TCSS) | (AT91_SPI_DLYBCT & DATAFLASH_TCHS) | - ((AT91_MASTER_CLOCK / AT91_SPI_CLK) << 8), + ((get_mck_clk_rate() / AT91_SPI_CLK) << 8), AT91_BASE_SPI + AT91_SPI_CSR(0));
#ifdef CONFIG_SYS_DATAFLASH_LOGIC_ADDR_CS1 @@ -53,7 +54,7 @@ void AT91F_SpiInit(void) writel(AT91_SPI_NCPHA | (AT91_SPI_DLYBS & DATAFLASH_TCSS) | (AT91_SPI_DLYBCT & DATAFLASH_TCHS) | - ((AT91_MASTER_CLOCK / AT91_SPI_CLK) << 8), + ((get_mck_clk_rate() / AT91_SPI_CLK) << 8), AT91_BASE_SPI + AT91_SPI_CSR(1)); #endif
@@ -62,7 +63,7 @@ void AT91F_SpiInit(void) writel(AT91_SPI_NCPHA | (AT91_SPI_DLYBS & DATAFLASH_TCSS) | (AT91_SPI_DLYBCT & DATAFLASH_TCHS) | - ((AT91_MASTER_CLOCK / AT91_SPI_CLK) << 8), + ((get_mck_clk_rate() / AT91_SPI_CLK) << 8), AT91_BASE_SPI + AT91_SPI_CSR(3)); #endif
diff --git a/drivers/usb/atmel_usb.c b/drivers/usb/atmel_usb.c index 7c44ad0..c35319c 100644 --- a/drivers/usb/atmel_usb.c +++ b/drivers/usb/atmel_usb.c @@ -28,6 +28,7 @@ #include <asm/arch/hardware.h> #include <asm/arch/io.h> #include <asm/arch/at91_pmc.h> +#include <asm/arch/clk.h>
int usb_cpu_init(void) { @@ -35,7 +36,7 @@ int usb_cpu_init(void) #if defined(CONFIG_AT91CAP9) || defined(CONFIG_AT91SAM9260) || \ defined(CONFIG_AT91SAM9263) || defined(CONFIG_AT91SAM9G20) /* Enable PLLB */ - at91_sys_write(AT91_CKGR_PLLBR, CONFIG_SYS_AT91_PLLB); + at91_sys_write(AT91_CKGR_PLLBR, get_pllb_init()); while ((at91_sys_read(AT91_PMC_SR) & AT91_PMC_LOCKB) != AT91_PMC_LOCKB) ; #endif diff --git a/include/asm-arm/arch-at91/clk.h b/include/asm-arm/arch-at91/clk.h index 85ab68e..6aaf82e 100644 --- a/include/asm-arm/arch-at91/clk.h +++ b/include/asm-arm/arch-at91/clk.h @@ -2,6 +2,7 @@ * (C) Copyright 2007 * Stelian Pop stelian.pop@leadtechdesign.com * Lead Tech Design <www.leadtechdesign.com> + * Copyright (C) 2009 Jean-Christophe PLAGNIOL-VILLARD plagnioj@jcrosoft.com * * See file CREDITS for list of people who contributed to this * project. @@ -26,24 +27,32 @@
#include <asm/arch/hardware.h>
+unsigned long get_cpu_clk_rate(void); +unsigned long get_main_clk_rate(void); +unsigned long get_mck_clk_rate(void); +unsigned long get_plla_clk_rate(void); +unsigned long get_pllb_clk_rate(void); +unsigned int get_pllb_init(void); + static inline unsigned long get_macb_pclk_rate(unsigned int dev_id) { - return AT91_MASTER_CLOCK; + return get_mck_clk_rate(); }
static inline unsigned long get_usart_clk_rate(unsigned int dev_id) { - return AT91_MASTER_CLOCK; + return get_mck_clk_rate(); }
static inline unsigned long get_lcdc_clk_rate(unsigned int dev_id) { - return AT91_MASTER_CLOCK; + return get_mck_clk_rate(); }
static inline unsigned long get_twi_clk_rate(unsigned int dev_id) { - return AT91_MASTER_CLOCK; + return get_mck_clk_rate(); }
+int at91_clock_init(unsigned long main_clock); #endif /* __ASM_ARM_ARCH_CLK_H__ */ diff --git a/include/asm-arm/arch-at91/hardware.h b/include/asm-arm/arch-at91/hardware.h index fff82e4..756a242 100644 --- a/include/asm-arm/arch-at91/hardware.h +++ b/include/asm-arm/arch-at91/hardware.h @@ -70,4 +70,7 @@ #define AT91_SDRAM_BASE AT91_CHIPSELECT_1 #endif
+/* Clocks */ +#define AT91_SLOW_CLOCK 32768 /* slow clock */ + #endif diff --git a/include/asm-arm/u-boot-arm.h b/include/asm-arm/u-boot-arm.h index 4ee5a32..e7d58fe 100644 --- a/include/asm-arm/u-boot-arm.h +++ b/include/asm-arm/u-boot-arm.h @@ -40,6 +40,9 @@ extern ulong FIQ_STACK_START; /* top of FIQ stack */ int cpu_init(void); int cleanup_before_linux(void);
+/* cpu/.../arch/cpu.c */ +int arch_cpu_init(void); + /* board/.../... */ int board_init(void); int dram_init (void); diff --git a/include/configs/afeb9260.h b/include/configs/afeb9260.h index bcd8d35..13cb8b9 100644 --- a/include/configs/afeb9260.h +++ b/include/configs/afeb9260.h @@ -27,15 +27,11 @@ #define __CONFIG_H
/* ARM asynchronous clock */ -#define AT91_MAIN_CLOCK 18429952 /* from 18.432 MHz crystal */ -#define AT91_MASTER_CLOCK 89999598 /* peripheral = main / 2 */ -#define CONFIG_SYS_AT91_PLLB 0x107c3e18 /* PLLB settings for USB */ #define CONFIG_SYS_HZ 1000000 /* 1us resolution */
-#define AT91_SLOW_CLOCK 32768 /* slow clock */ - #define CONFIG_AT91SAM9260 1 /* It's an Atmel AT91SAM9260 SoC*/ #define CONFIG_AFEB9260 1 /* on an AFEB9260 Board */ +#define CONFIG_ARCH_CPU_INIT #undef CONFIG_USE_IRQ /* we don't need IRQ/FIQ stuff */
#define CONFIG_CMDLINE_TAG 1 /* enable passing of ATAGs */ diff --git a/include/configs/at91cap9adk.h b/include/configs/at91cap9adk.h index af81f1d..8958c9c 100644 --- a/include/configs/at91cap9adk.h +++ b/include/configs/at91cap9adk.h @@ -29,17 +29,12 @@
/* ARM asynchronous clock */ #define AT91_CPU_NAME "AT91CAP9" -#define AT91_MAIN_CLOCK 12000000 /* 12 MHz crystal */ -#define AT91_MASTER_CLOCK 100000000 /* peripheral */ -#define AT91_CPU_CLOCK 200000000 /* cpu */ -#define CONFIG_SYS_AT91_PLLB 0x10073e01 /* PLLB settings for USB */ #define CONFIG_SYS_HZ 1000000 /* 1us resolution */
-#define AT91_SLOW_CLOCK 32768 /* slow clock */ - #define CONFIG_ARM926EJS 1 /* This is an ARM926EJS Core */ #define CONFIG_AT91CAP9 1 /* It's an Atmel AT91CAP9 SoC */ #define CONFIG_AT91CAP9ADK 1 /* on an AT91CAP9ADK Board */ +#define CONFIG_ARCH_CPU_INIT #undef CONFIG_USE_IRQ /* we don't need IRQ/FIQ stuff */
#define CONFIG_CMDLINE_TAG 1 /* enable passing of ATAGs */ diff --git a/include/configs/at91sam9260ek.h b/include/configs/at91sam9260ek.h index ac58f27..b06c819 100644 --- a/include/configs/at91sam9260ek.h +++ b/include/configs/at91sam9260ek.h @@ -28,26 +28,19 @@ #define __CONFIG_H
/* ARM asynchronous clock */ -#define AT91_MAIN_CLOCK 18432000 /* 18.432 MHz crystal */ -#define CONFIG_SYS_AT91_PLLB 0x107c3e18 /* PLLB settings for USB */ #define CONFIG_SYS_HZ 1000000 /* 1us resolution */
-#define AT91_SLOW_CLOCK 32768 /* slow clock */ - #define CONFIG_ARM926EJS 1 /* This is an ARM926EJS Core */
#ifdef CONFIG_AT91SAM9G20EK #define AT91_CPU_NAME "AT91SAM9G20" -#define AT91_MASTER_CLOCK 132000000 /* peripheral */ -#define AT91_CPU_CLOCK 396000000 /* cpu */ #define CONFIG_AT91SAM9G20 1 /* It's an Atmel AT91SAM9G20 SoC*/ #else #define AT91_CPU_NAME "AT91SAM9260" -#define AT91_MASTER_CLOCK 100000000 /* peripheral */ -#define AT91_CPU_CLOCK 200000000 /* cpu */ #define CONFIG_AT91SAM9260 1 /* It's an Atmel AT91SAM9260 SoC*/ #endif
+#define CONFIG_ARCH_CPU_INIT #undef CONFIG_USE_IRQ /* we don't need IRQ/FIQ stuff */
#define CONFIG_CMDLINE_TAG 1 /* enable passing of ATAGs */ diff --git a/include/configs/at91sam9261ek.h b/include/configs/at91sam9261ek.h index 57bb9fa..7dfe126 100644 --- a/include/configs/at91sam9261ek.h +++ b/include/configs/at91sam9261ek.h @@ -29,16 +29,12 @@
/* ARM asynchronous clock */ #define AT91_CPU_NAME "AT91SAM9261" -#define AT91_MAIN_CLOCK 18432000 /* 18.432 MHz crystal */ -#define AT91_MASTER_CLOCK 100000000 /* peripheral */ -#define AT91_CPU_CLOCK 200000000 /* cpu */ #define CONFIG_SYS_HZ 1000000 /* 1us resolution */
-#define AT91_SLOW_CLOCK 32768 /* slow clock */ - #define CONFIG_ARM926EJS 1 /* This is an ARM926EJS Core */ #define CONFIG_AT91SAM9261 1 /* It's an Atmel AT91SAM9261 SoC*/ #define CONFIG_AT91SAM9261EK 1 /* on an AT91SAM9261EK Board */ +#define CONFIG_ARCH_CPU_INIT #undef CONFIG_USE_IRQ /* we don't need IRQ/FIQ stuff */
#define CONFIG_CMDLINE_TAG 1 /* enable passing of ATAGs */ diff --git a/include/configs/at91sam9263ek.h b/include/configs/at91sam9263ek.h index fc87241..e29fc57 100644 --- a/include/configs/at91sam9263ek.h +++ b/include/configs/at91sam9263ek.h @@ -29,17 +29,12 @@
/* ARM asynchronous clock */ #define AT91_CPU_NAME "AT91SAM9263" -#define AT91_MAIN_CLOCK 16367660 /* 16.367 MHz crystal */ -#define AT91_MASTER_CLOCK 100000000 /* peripheral */ -#define AT91_CPU_CLOCK 200000000 /* cpu */ -#define CONFIG_SYS_AT91_PLLB 0x133a3e8d /* PLLB settings for USB */ #define CONFIG_SYS_HZ 1000000 /* 1us resolution */
-#define AT91_SLOW_CLOCK 32768 /* slow clock */ - #define CONFIG_ARM926EJS 1 /* This is an ARM926EJS Core */ #define CONFIG_AT91SAM9263 1 /* It's an Atmel AT91SAM9263 SoC*/ #define CONFIG_AT91SAM9263EK 1 /* on an AT91SAM9263EK Board */ +#define CONFIG_ARCH_CPU_INIT #undef CONFIG_USE_IRQ /* we don't need IRQ/FIQ stuff */
#define CONFIG_CMDLINE_TAG 1 /* enable passing of ATAGs */ diff --git a/include/configs/at91sam9rlek.h b/include/configs/at91sam9rlek.h index cef98e4..a670e35 100644 --- a/include/configs/at91sam9rlek.h +++ b/include/configs/at91sam9rlek.h @@ -29,16 +29,12 @@
/* ARM asynchronous clock */ #define AT91_CPU_NAME "AT91SAM9RL" -#define AT91_MAIN_CLOCK 12000000 /* 12 MHz crystal */ -#define AT91_MASTER_CLOCK 100000000 /* peripheral */ -#define AT91_CPU_CLOCK 200000000 /* cpu */ #define CONFIG_SYS_HZ 1000000 /* 1us resolution */
-#define AT91_SLOW_CLOCK 32768 /* slow clock */ - #define CONFIG_ARM926EJS 1 /* This is an ARM926EJS Core */ #define CONFIG_AT91SAM9RL 1 /* It's an Atmel AT91SAM9RL SoC*/ #define CONFIG_AT91SAM9RLEK 1 /* on an AT91SAM9RLEK Board */ +#define CONFIG_ARCH_CPU_INIT #undef CONFIG_USE_IRQ /* we don't need IRQ/FIQ stuff */
#define CONFIG_CMDLINE_TAG 1 /* enable passing of ATAGs */ diff --git a/lib_arm/board.c b/lib_arm/board.c index 3dfaec0..6847ea8 100644 --- a/lib_arm/board.c +++ b/lib_arm/board.c @@ -262,6 +262,9 @@ int print_cpuinfo (void); /* test-only */
init_fnc_t *init_sequence[] = { cpu_init, /* basic cpu dependent setup */ +#if defined(CONFIG_ARCH_CPU_INIT) + arch_cpu_init, /* basic arch cpu dependent setup */ +#endif board_init, /* basic board dependent setup */ interrupt_init, /* set up exceptions */ env_init, /* initialize environment */

Dear Jean-Christophe PLAGNIOL-VILLARD,
In message 1238486824-19007-1-git-send-email-plagnioj@jcrosoft.com you wrote:
calculate dynamically the clock rate and pllb setting for usb
Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD plagnioj@jcrosoft.com
board/atmel/at91cap9adk/at91cap9adk.c | 3 +- board/atmel/at91sam9261ek/at91sam9261ek.c | 3 +- board/atmel/at91sam9263ek/at91sam9263ek.c | 3 +- board/atmel/at91sam9rlek/at91sam9rlek.c | 3 +- cpu/arm926ejs/at91/Makefile | 2 + cpu/arm926ejs/at91/clock.c | 196 +++++++++++++++++++++++++++++ cpu/arm926ejs/at91/cpu.c | 14 ++ drivers/spi/atmel_dataflash_spi.c | 7 +- drivers/usb/atmel_usb.c | 3 +- include/asm-arm/arch-at91/clk.h | 17 ++- include/asm-arm/arch-at91/hardware.h | 3 + include/asm-arm/u-boot-arm.h | 3 + include/configs/afeb9260.h | 6 +- include/configs/at91cap9adk.h | 7 +- include/configs/at91sam9260ek.h | 9 +-- include/configs/at91sam9261ek.h | 6 +- include/configs/at91sam9263ek.h | 7 +- include/configs/at91sam9rlek.h | 6 +- lib_arm/board.c | 3 + 19 files changed, 254 insertions(+), 47 deletions(-) create mode 100644 cpu/arm926ejs/at91/clock.c create mode 100644 cpu/arm926ejs/at91/cpu.c
What is the impact of this patch on the memory footprint of the system?
Best regards,
Wolfgang Denk

On 22:59 Tue 31 Mar , Wolfgang Denk wrote:
Dear Jean-Christophe PLAGNIOL-VILLARD,
In message 1238486824-19007-1-git-send-email-plagnioj@jcrosoft.com you wrote:
calculate dynamically the clock rate and pllb setting for usb
Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD plagnioj@jcrosoft.com
board/atmel/at91cap9adk/at91cap9adk.c | 3 +- board/atmel/at91sam9261ek/at91sam9261ek.c | 3 +- board/atmel/at91sam9263ek/at91sam9263ek.c | 3 +- board/atmel/at91sam9rlek/at91sam9rlek.c | 3 +- cpu/arm926ejs/at91/Makefile | 2 + cpu/arm926ejs/at91/clock.c | 196 +++++++++++++++++++++++++++++ cpu/arm926ejs/at91/cpu.c | 14 ++ drivers/spi/atmel_dataflash_spi.c | 7 +- drivers/usb/atmel_usb.c | 3 +- include/asm-arm/arch-at91/clk.h | 17 ++- include/asm-arm/arch-at91/hardware.h | 3 + include/asm-arm/u-boot-arm.h | 3 + include/configs/afeb9260.h | 6 +- include/configs/at91cap9adk.h | 7 +- include/configs/at91sam9260ek.h | 9 +-- include/configs/at91sam9261ek.h | 6 +- include/configs/at91sam9263ek.h | 7 +- include/configs/at91sam9rlek.h | 6 +- lib_arm/board.c | 3 + 19 files changed, 254 insertions(+), 47 deletions(-) create mode 100644 cpu/arm926ejs/at91/clock.c create mode 100644 cpu/arm926ejs/at91/cpu.c
What is the impact of this patch on the memory footprint of the system?
708 bytes on the 9263ek
Best Regards, J.

Dear Jean-Christophe PLAGNIOL-VILLARD,
In message 20090331210130.GJ24923@game.jcrosoft.org you wrote:
On 22:59 Tue 31 Mar , Wolfgang Denk wrote:
Dear Jean-Christophe PLAGNIOL-VILLARD,
In message 1238486824-19007-1-git-send-email-plagnioj@jcrosoft.com you wrote:
calculate dynamically the clock rate and pllb setting for usb
Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD plagnioj@jcrosoft.com
board/atmel/at91cap9adk/at91cap9adk.c | 3 +- board/atmel/at91sam9261ek/at91sam9261ek.c | 3 +- board/atmel/at91sam9263ek/at91sam9263ek.c | 3 +- board/atmel/at91sam9rlek/at91sam9rlek.c | 3 +- cpu/arm926ejs/at91/Makefile | 2 + cpu/arm926ejs/at91/clock.c | 196 +++++++++++++++++++++++++++++ cpu/arm926ejs/at91/cpu.c | 14 ++ drivers/spi/atmel_dataflash_spi.c | 7 +- drivers/usb/atmel_usb.c | 3 +- include/asm-arm/arch-at91/clk.h | 17 ++- include/asm-arm/arch-at91/hardware.h | 3 + include/asm-arm/u-boot-arm.h | 3 + include/configs/afeb9260.h | 6 +- include/configs/at91cap9adk.h | 7 +- include/configs/at91sam9260ek.h | 9 +-- include/configs/at91sam9261ek.h | 6 +- include/configs/at91sam9263ek.h | 7 +- include/configs/at91sam9rlek.h | 6 +- lib_arm/board.c | 3 + 19 files changed, 254 insertions(+), 47 deletions(-) create mode 100644 cpu/arm926ejs/at91/clock.c create mode 100644 cpu/arm926ejs/at91/cpu.c
What is the impact of this patch on the memory footprint of the system?
708 bytes on the 9263ek
708 bytes more or less? And how much on the others processors?
Best regards,
Wolfgang Denk

On 23:26 Tue 31 Mar , Wolfgang Denk wrote:
Dear Jean-Christophe PLAGNIOL-VILLARD,
In message 20090331210130.GJ24923@game.jcrosoft.org you wrote:
On 22:59 Tue 31 Mar , Wolfgang Denk wrote:
Dear Jean-Christophe PLAGNIOL-VILLARD,
In message 1238486824-19007-1-git-send-email-plagnioj@jcrosoft.com you wrote:
calculate dynamically the clock rate and pllb setting for usb
Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD plagnioj@jcrosoft.com
board/atmel/at91cap9adk/at91cap9adk.c | 3 +- board/atmel/at91sam9261ek/at91sam9261ek.c | 3 +- board/atmel/at91sam9263ek/at91sam9263ek.c | 3 +- board/atmel/at91sam9rlek/at91sam9rlek.c | 3 +- cpu/arm926ejs/at91/Makefile | 2 + cpu/arm926ejs/at91/clock.c | 196 +++++++++++++++++++++++++++++ cpu/arm926ejs/at91/cpu.c | 14 ++ drivers/spi/atmel_dataflash_spi.c | 7 +- drivers/usb/atmel_usb.c | 3 +- include/asm-arm/arch-at91/clk.h | 17 ++- include/asm-arm/arch-at91/hardware.h | 3 + include/asm-arm/u-boot-arm.h | 3 + include/configs/afeb9260.h | 6 +- include/configs/at91cap9adk.h | 7 +- include/configs/at91sam9260ek.h | 9 +-- include/configs/at91sam9261ek.h | 6 +- include/configs/at91sam9263ek.h | 7 +- include/configs/at91sam9rlek.h | 6 +- lib_arm/board.c | 3 + 19 files changed, 254 insertions(+), 47 deletions(-) create mode 100644 cpu/arm926ejs/at91/clock.c create mode 100644 cpu/arm926ejs/at91/cpu.c
What is the impact of this patch on the memory footprint of the system?
708 bytes on the 9263ek
708 bytes more or less? And how much on the others processors?
more 9260ek => +704 9261ek => +680 9263ek => +708 9rlek => +648 cap9adk => +708
based on the pm9623 and pm9261 precedently patch it will be less or the same
Best Regards, J.
participants (2)
-
Jean-Christophe PLAGNIOL-VILLARD
-
Wolfgang Denk