mirror of
https://github.com/u-boot/u-boot.git
synced 2024-11-24 12:44:23 +08:00
avr32: convert to dram_init()
Signed-off-by: Andreas Bießmann <andreas.devel@googlemail.com> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
e9ed41cc5c
commit
186678600a
@ -26,5 +26,6 @@ typedef struct bd_info {
|
||||
#define IH_ARCH_DEFAULT IH_ARCH_AVR32
|
||||
|
||||
int arch_cpu_init(void);
|
||||
int dram_init(void);
|
||||
|
||||
#endif /* __ASM_U_BOOT_H__ */
|
||||
|
@ -11,3 +11,4 @@ obj-y += memset.o
|
||||
obj-y += board.o
|
||||
obj-$(CONFIG_CMD_BOOTM) += bootm.o
|
||||
obj-y += interrupts.o
|
||||
obj-y += dram_init.o
|
||||
|
@ -29,6 +29,12 @@ DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
unsigned long monitor_flash_len;
|
||||
|
||||
__weak void dram_init_banksize(void)
|
||||
{
|
||||
gd->bd->bi_dram[0].start = CONFIG_SYS_SDRAM_BASE;
|
||||
gd->bd->bi_dram[0].size = gd->ram_size;
|
||||
}
|
||||
|
||||
/* Weak aliases for optional board functions */
|
||||
static int __do_nothing(void)
|
||||
{
|
||||
@ -82,7 +88,6 @@ void board_init_f(ulong board_type)
|
||||
unsigned long monitor_len;
|
||||
unsigned long monitor_addr;
|
||||
unsigned long addr;
|
||||
long sdram_size;
|
||||
|
||||
/* Initialize the global data pointer */
|
||||
memset(&gd_data, 0, sizeof(gd_data));
|
||||
@ -97,10 +102,10 @@ void board_init_f(ulong board_type)
|
||||
serial_init();
|
||||
console_init_f();
|
||||
display_banner();
|
||||
sdram_size = initdram(board_type);
|
||||
dram_init();
|
||||
|
||||
/* If we have no SDRAM, we can't go on */
|
||||
if (sdram_size <= 0)
|
||||
if (gd->ram_size <= 0)
|
||||
panic("No working SDRAM available\n");
|
||||
|
||||
/*
|
||||
@ -114,7 +119,7 @@ void board_init_f(ulong board_type)
|
||||
* - global data struct
|
||||
* - stack
|
||||
*/
|
||||
addr = CONFIG_SYS_SDRAM_BASE + sdram_size;
|
||||
addr = CONFIG_SYS_SDRAM_BASE + gd->ram_size;
|
||||
monitor_len = (char *)(&__bss_end) - _text;
|
||||
|
||||
/*
|
||||
@ -156,12 +161,7 @@ void board_init_f(ulong board_type)
|
||||
*(--new_sp) = 0;
|
||||
*(--new_sp) = 0;
|
||||
|
||||
/*
|
||||
* Initialize the board information struct with the
|
||||
* information we have.
|
||||
*/
|
||||
bd->bi_dram[0].start = CONFIG_SYS_SDRAM_BASE;
|
||||
bd->bi_dram[0].size = sdram_size;
|
||||
dram_init_banksize();
|
||||
|
||||
memcpy(new_gd, gd, sizeof(gd_t));
|
||||
|
||||
|
17
arch/avr32/lib/dram_init.c
Normal file
17
arch/avr32/lib/dram_init.c
Normal file
@ -0,0 +1,17 @@
|
||||
/*
|
||||
* Copyright (C) 2015 Andreas Bießmann <andreas.devel@googlemail.com>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
#include <common.h>
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
int dram_init(void)
|
||||
{
|
||||
/* check for the maximum amount of memory possible on AP7000 devices */
|
||||
gd->ram_size = get_ram_size(
|
||||
(void *)CONFIG_SYS_SDRAM_BASE,
|
||||
(256<<20));
|
||||
return 0;
|
||||
}
|
@ -52,6 +52,8 @@ int board_early_init_f(void)
|
||||
hmatrix_slave_write(EBI, SFR, HMATRIX_BIT(EBI_SDRAM_ENABLE));
|
||||
|
||||
portmux_enable_ebi(16, 23, 0, PORTMUX_DRIVE_HIGH);
|
||||
sdram_init(uncached(EBI_SDRAM_BASE), &sdram_config);
|
||||
|
||||
portmux_enable_usart1(PORTMUX_DRIVE_MIN);
|
||||
|
||||
#if defined(CONFIG_MACB)
|
||||
@ -68,24 +70,6 @@ int board_early_init_f(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
phys_size_t initdram(int board_type)
|
||||
{
|
||||
unsigned long expected_size;
|
||||
unsigned long actual_size;
|
||||
void *sdram_base;
|
||||
|
||||
sdram_base = uncached(EBI_SDRAM_BASE);
|
||||
|
||||
expected_size = sdram_init(sdram_base, &sdram_config);
|
||||
actual_size = get_ram_size(sdram_base, expected_size);
|
||||
|
||||
if (expected_size != actual_size)
|
||||
printf("Warning: Only %lu of %lu MiB SDRAM is working\n",
|
||||
actual_size >> 20, expected_size >> 20);
|
||||
|
||||
return actual_size;
|
||||
}
|
||||
|
||||
int board_early_init_r(void)
|
||||
{
|
||||
gd->bd->bi_phy_id[0] = 0x01;
|
||||
|
@ -69,6 +69,9 @@ int board_early_init_f(void)
|
||||
portmux_select_gpio(PORTMUX_PORT_E, 1 << 23,
|
||||
PORTMUX_DIR_OUTPUT | PORTMUX_INIT_HIGH
|
||||
| PORTMUX_DRIVE_MIN);
|
||||
|
||||
sdram_init(uncached(EBI_SDRAM_BASE), &sdram_config);
|
||||
|
||||
portmux_enable_usart1(PORTMUX_DRIVE_MIN);
|
||||
|
||||
#if defined(CONFIG_MACB)
|
||||
@ -85,24 +88,6 @@ int board_early_init_f(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
phys_size_t initdram(int board_type)
|
||||
{
|
||||
unsigned long expected_size;
|
||||
unsigned long actual_size;
|
||||
void *sdram_base;
|
||||
|
||||
sdram_base = uncached(EBI_SDRAM_BASE);
|
||||
|
||||
expected_size = sdram_init(sdram_base, &sdram_config);
|
||||
actual_size = get_ram_size(sdram_base, expected_size);
|
||||
|
||||
if (expected_size != actual_size)
|
||||
printf("Warning: Only %lu of %lu MiB SDRAM is working\n",
|
||||
actual_size >> 20, expected_size >> 20);
|
||||
|
||||
return actual_size;
|
||||
}
|
||||
|
||||
int board_early_init_r(void)
|
||||
{
|
||||
gd->bd->bi_phy_id[0] = 0x01;
|
||||
|
@ -78,7 +78,10 @@ int board_early_init_f(void)
|
||||
hmatrix_slave_write(EBI, SFR, HMATRIX_BIT(EBI_SDRAM_ENABLE));
|
||||
|
||||
portmux_enable_ebi(sdram_config.data_bits, 23, 0, PORTMUX_DRIVE_HIGH);
|
||||
sdram_init(uncached(EBI_SDRAM_BASE), &sdram_config);
|
||||
|
||||
portmux_enable_usart1(PORTMUX_DRIVE_MIN);
|
||||
|
||||
#if defined(CONFIG_MACB)
|
||||
portmux_enable_macb0(PORTMUX_MACB_MII, PORTMUX_DRIVE_LOW);
|
||||
portmux_enable_macb1(PORTMUX_MACB_MII, PORTMUX_DRIVE_LOW);
|
||||
@ -90,24 +93,6 @@ int board_early_init_f(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
phys_size_t initdram(int board_type)
|
||||
{
|
||||
unsigned long expected_size;
|
||||
unsigned long actual_size;
|
||||
void *sdram_base;
|
||||
|
||||
sdram_base = uncached(EBI_SDRAM_BASE);
|
||||
|
||||
expected_size = sdram_init(sdram_base, &sdram_config);
|
||||
actual_size = get_ram_size(sdram_base, expected_size);
|
||||
|
||||
if (expected_size != actual_size)
|
||||
printf("Warning: Only %lu of %lu MiB SDRAM is working\n",
|
||||
actual_size >> 20, expected_size >> 20);
|
||||
|
||||
return actual_size;
|
||||
}
|
||||
|
||||
int board_early_init_r(void)
|
||||
{
|
||||
gd->bd->bi_phy_id[0] = 0x10;
|
||||
|
@ -52,6 +52,9 @@ int board_early_init_f(void)
|
||||
hmatrix_slave_write(EBI, SFR, HMATRIX_BIT(EBI_SDRAM_ENABLE));
|
||||
|
||||
portmux_enable_ebi(32, 23, 0, PORTMUX_DRIVE_HIGH);
|
||||
|
||||
sdram_init(uncached(EBI_SDRAM_BASE), &sdram_config);
|
||||
|
||||
portmux_enable_usart3(PORTMUX_DRIVE_MIN);
|
||||
#if defined(CONFIG_MACB)
|
||||
portmux_enable_macb0(PORTMUX_MACB_MII, PORTMUX_DRIVE_HIGH);
|
||||
@ -63,24 +66,6 @@ int board_early_init_f(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
phys_size_t initdram(int board_type)
|
||||
{
|
||||
unsigned long expected_size;
|
||||
unsigned long actual_size;
|
||||
void *sdram_base;
|
||||
|
||||
sdram_base = uncached(EBI_SDRAM_BASE);
|
||||
|
||||
expected_size = sdram_init(sdram_base, &sdram_config);
|
||||
actual_size = get_ram_size(sdram_base, expected_size);
|
||||
|
||||
if (expected_size != actual_size)
|
||||
printf("Warning: Only %lu of %lu MiB SDRAM is working\n",
|
||||
actual_size >> 20, expected_size >> 20);
|
||||
|
||||
return actual_size;
|
||||
}
|
||||
|
||||
int board_early_init_r(void)
|
||||
{
|
||||
gd->bd->bi_phy_id[0] = 0x01;
|
||||
|
@ -53,6 +53,8 @@ int board_early_init_f(void)
|
||||
hmatrix_slave_write(EBI, SFR, HMATRIX_BIT(EBI_SDRAM_ENABLE));
|
||||
|
||||
portmux_enable_ebi(SDRAM_DATA_32BIT, 23, 0, PORTMUX_DRIVE_HIGH);
|
||||
sdram_init(uncached(EBI_SDRAM_BASE), &sdram_config);
|
||||
|
||||
portmux_enable_usart0(PORTMUX_DRIVE_MIN);
|
||||
portmux_enable_usart1(PORTMUX_DRIVE_MIN);
|
||||
#if defined(CONFIG_MACB)
|
||||
@ -69,24 +71,6 @@ int board_early_init_f(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
phys_size_t initdram(int board_type)
|
||||
{
|
||||
unsigned long expected_size;
|
||||
unsigned long actual_size;
|
||||
void *sdram_base;
|
||||
|
||||
sdram_base = uncached(EBI_SDRAM_BASE);
|
||||
|
||||
expected_size = sdram_init(sdram_base, &sdram_config);
|
||||
actual_size = get_ram_size(sdram_base, expected_size);
|
||||
|
||||
if (expected_size != actual_size)
|
||||
printf("Warning: Only %lu of %lu MiB SDRAM is working\n",
|
||||
actual_size >> 20, expected_size >> 20);
|
||||
|
||||
return actual_size;
|
||||
}
|
||||
|
||||
int board_early_init_r(void)
|
||||
{
|
||||
gd->bd->bi_phy_id[0] = 0x00;
|
||||
|
@ -91,6 +91,8 @@ int board_early_init_f(void)
|
||||
|
||||
/* Enable 26 address bits and NCS2 */
|
||||
portmux_enable_ebi(16, 26, PORTMUX_EBI_CS(2), PORTMUX_DRIVE_HIGH);
|
||||
sdram_init(uncached(EBI_SDRAM_BASE), &sdram_config);
|
||||
|
||||
portmux_enable_usart1(PORTMUX_DRIVE_MIN);
|
||||
|
||||
/* de-assert "force sys reset" pin */
|
||||
@ -151,24 +153,6 @@ int board_early_init_f(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
phys_size_t initdram(int board_type)
|
||||
{
|
||||
unsigned long expected_size;
|
||||
unsigned long actual_size;
|
||||
void *sdram_base;
|
||||
|
||||
sdram_base = uncached(EBI_SDRAM_BASE);
|
||||
|
||||
expected_size = sdram_init(sdram_base, &sdram_config);
|
||||
actual_size = get_ram_size(sdram_base, expected_size);
|
||||
|
||||
if (expected_size != actual_size)
|
||||
printf("Warning: Only %lu of %lu MiB SDRAM is working\n",
|
||||
actual_size >> 20, expected_size >> 20);
|
||||
|
||||
return actual_size;
|
||||
}
|
||||
|
||||
int board_early_init_r(void)
|
||||
{
|
||||
gd->bd->bi_phy_id[0] = 0x01;
|
||||
|
@ -63,6 +63,8 @@ int board_early_init_f(void)
|
||||
hmatrix_slave_write(EBI, SFR, HMATRIX_BIT(EBI_SDRAM_ENABLE));
|
||||
|
||||
portmux_enable_ebi(32, 23, 0, PORTMUX_DRIVE_HIGH);
|
||||
sdram_init(uncached(EBI_SDRAM_BASE), &sdram_config);
|
||||
|
||||
portmux_enable_usart1(PORTMUX_DRIVE_MIN);
|
||||
|
||||
#if defined(CONFIG_MACB)
|
||||
@ -74,24 +76,6 @@ int board_early_init_f(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
phys_size_t initdram(int board_type)
|
||||
{
|
||||
unsigned long expected_size;
|
||||
unsigned long actual_size;
|
||||
void *sdram_base;
|
||||
|
||||
sdram_base = uncached(EBI_SDRAM_BASE);
|
||||
|
||||
expected_size = sdram_init(sdram_base, &sdram_config);
|
||||
actual_size = get_ram_size(sdram_base, expected_size);
|
||||
|
||||
if (expected_size != actual_size)
|
||||
printf("Warning: Only %lu of %lu MiB SDRAM is working\n",
|
||||
actual_size >> 20, expected_size >> 20);
|
||||
|
||||
return actual_size;
|
||||
}
|
||||
|
||||
int board_early_init_r(void)
|
||||
{
|
||||
gd->bd->bi_phy_id[0] = 0x01;
|
||||
|
Loading…
Reference in New Issue
Block a user