mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-26 23:41:50 +00:00
Merge branch 'master' of git://git.denx.de/u-boot-mpc85xx
* 'master' of git://git.denx.de/u-boot-mpc85xx: fsl_lbc: add printout of LCRR and LBCR to local bus regs sbc8548: Fix up local bus init to be frequency aware sbc8548: enable support for hardware SPD errata workaround sbc8548: relocate fixed ddr init code to ddr.c file sbc8548: Make enabling SPD RAM configuration work sbc8548: Fix LBC SDRAM initialization settings sbc8548: enable ability to boot from alternate flash sbc8548: relocate 64MB user flash to sane boundary Revert "SBC8548: fix address mask to allow 64M flash" MPC85xxCDS: Fix missing LCRR_DBYP bits for 66-133MHz LBC eXMeritus HWW-1U-1A: Add support for the AT24C128N I2C EEPROM eXMeritus HWW-1U-1A: Minor environment variable tweaks
This commit is contained in:
commit
670c24f6f3
11 changed files with 393 additions and 109 deletions
|
@ -28,6 +28,8 @@ void print_lbc_regs(void)
|
||||||
printf("BR%d\t0x%08X\tOR%d\t0x%08X\n",
|
printf("BR%d\t0x%08X\tOR%d\t0x%08X\n",
|
||||||
i, get_lbc_br(i), i, get_lbc_or(i));
|
i, get_lbc_br(i), i, get_lbc_or(i));
|
||||||
}
|
}
|
||||||
|
printf("LBCR\t0x%08X\tLCRR\t0x%08X\n",
|
||||||
|
get_lbc_lbcr(), get_lbc_lcrr());
|
||||||
}
|
}
|
||||||
|
|
||||||
void init_early_memctl_regs(void)
|
void init_early_memctl_regs(void)
|
||||||
|
|
|
@ -475,6 +475,8 @@ extern void init_early_memctl_regs(void);
|
||||||
extern void upmconfig(uint upm, uint *table, uint size);
|
extern void upmconfig(uint upm, uint *table, uint size);
|
||||||
|
|
||||||
#define LBC_BASE_ADDR ((fsl_lbc_t *)CONFIG_SYS_LBC_ADDR)
|
#define LBC_BASE_ADDR ((fsl_lbc_t *)CONFIG_SYS_LBC_ADDR)
|
||||||
|
#define get_lbc_lcrr() (in_be32(&(LBC_BASE_ADDR)->lcrr))
|
||||||
|
#define get_lbc_lbcr() (in_be32(&(LBC_BASE_ADDR)->lbcr))
|
||||||
#define get_lbc_br(i) (in_be32(&(LBC_BASE_ADDR)->bank[i].br))
|
#define get_lbc_br(i) (in_be32(&(LBC_BASE_ADDR)->bank[i].br))
|
||||||
#define get_lbc_or(i) (in_be32(&(LBC_BASE_ADDR)->bank[i].or))
|
#define get_lbc_or(i) (in_be32(&(LBC_BASE_ADDR)->bank[i].or))
|
||||||
#define set_lbc_br(i, v) (out_be32(&(LBC_BASE_ADDR)->bank[i].br, v))
|
#define set_lbc_br(i, v) (out_be32(&(LBC_BASE_ADDR)->bank[i].br, v))
|
||||||
|
|
|
@ -275,7 +275,7 @@ local_bus_init(void)
|
||||||
lbc->lcrr &= (~0x80000000); /* DLL Enabled */
|
lbc->lcrr &= (~0x80000000); /* DLL Enabled */
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
lbc->lcrr &= (~0x8000000); /* DLL Enabled */
|
lbc->lcrr &= (~0x80000000); /* DLL Enabled */
|
||||||
udelay(200);
|
udelay(200);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -273,7 +273,7 @@ local_bus_init(void)
|
||||||
lbc->lcrr &= (~0x80000000); /* DLL Enabled */
|
lbc->lcrr &= (~0x80000000); /* DLL Enabled */
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
lbc->lcrr &= (~0x8000000); /* DLL Enabled */
|
lbc->lcrr &= (~0x80000000); /* DLL Enabled */
|
||||||
udelay(200);
|
udelay(200);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
|
#include <i2c.h>
|
||||||
|
|
||||||
#include <asm/fsl_ddr_sdram.h>
|
#include <asm/fsl_ddr_sdram.h>
|
||||||
#include <asm/fsl_ddr_dimm_params.h>
|
#include <asm/fsl_ddr_dimm_params.h>
|
||||||
|
@ -54,3 +55,79 @@ void fsl_ddr_board_options(memctl_options_t *popts,
|
||||||
*/
|
*/
|
||||||
popts->half_strength_driver_enable = 0;
|
popts->half_strength_driver_enable = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_SPD_EEPROM
|
||||||
|
/*
|
||||||
|
* Workaround for hardware errata. An i2c address conflict
|
||||||
|
* existed on earlier boards; the workaround moved the DDR
|
||||||
|
* SPD from 0x51 to 0x53. So we try and read 0x53 1st, and
|
||||||
|
* if that fails, then fall back to reading at 0x51.
|
||||||
|
*/
|
||||||
|
void get_spd(generic_spd_eeprom_t *spd, u8 i2c_address)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
#ifdef ALT_SPD_EEPROM_ADDRESS
|
||||||
|
if (i2c_address == SPD_EEPROM_ADDRESS) {
|
||||||
|
ret = i2c_read(ALT_SPD_EEPROM_ADDRESS, 0, 1, (uchar *)spd,
|
||||||
|
sizeof(generic_spd_eeprom_t));
|
||||||
|
if (ret == 0)
|
||||||
|
return; /* Good data at 0x53 */
|
||||||
|
memset(spd, 0, sizeof(generic_spd_eeprom_t));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
ret = i2c_read(i2c_address, 0, 1, (uchar *)spd,
|
||||||
|
sizeof(generic_spd_eeprom_t));
|
||||||
|
if (ret) {
|
||||||
|
printf("DDR: failed to read SPD from addr %u\n", i2c_address);
|
||||||
|
memset(spd, 0, sizeof(generic_spd_eeprom_t));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
/*
|
||||||
|
* fixed_sdram init -- doesn't use serial presence detect.
|
||||||
|
* Assumes 256MB DDR2 SDRAM SODIMM, without ECC, running at DDR400 speed.
|
||||||
|
*/
|
||||||
|
phys_size_t fixed_sdram(void)
|
||||||
|
{
|
||||||
|
volatile ccsr_ddr_t *ddr = (void *)(CONFIG_SYS_MPC85xx_DDR_ADDR);
|
||||||
|
|
||||||
|
out_be32(&ddr->cs0_bnds, 0x0000007f);
|
||||||
|
out_be32(&ddr->cs1_bnds, 0x008000ff);
|
||||||
|
out_be32(&ddr->cs2_bnds, 0x00000000);
|
||||||
|
out_be32(&ddr->cs3_bnds, 0x00000000);
|
||||||
|
|
||||||
|
out_be32(&ddr->cs0_config, 0x80010101);
|
||||||
|
out_be32(&ddr->cs1_config, 0x80010101);
|
||||||
|
out_be32(&ddr->cs2_config, 0x00000000);
|
||||||
|
out_be32(&ddr->cs3_config, 0x00000000);
|
||||||
|
|
||||||
|
out_be32(&ddr->timing_cfg_3, 0x00000000);
|
||||||
|
out_be32(&ddr->timing_cfg_0, 0x00220802);
|
||||||
|
out_be32(&ddr->timing_cfg_1, 0x38377322);
|
||||||
|
out_be32(&ddr->timing_cfg_2, 0x0fa044C7);
|
||||||
|
|
||||||
|
out_be32(&ddr->sdram_cfg, 0x4300C000);
|
||||||
|
out_be32(&ddr->sdram_cfg_2, 0x24401000);
|
||||||
|
|
||||||
|
out_be32(&ddr->sdram_mode, 0x23C00542);
|
||||||
|
out_be32(&ddr->sdram_mode_2, 0x00000000);
|
||||||
|
|
||||||
|
out_be32(&ddr->sdram_interval, 0x05080100);
|
||||||
|
out_be32(&ddr->sdram_md_cntl, 0x00000000);
|
||||||
|
out_be32(&ddr->sdram_data_init, 0x00000000);
|
||||||
|
out_be32(&ddr->sdram_clk_cntl, 0x03800000);
|
||||||
|
asm("sync;isync;msync");
|
||||||
|
udelay(500);
|
||||||
|
|
||||||
|
#ifdef CONFIG_DDR_ECC
|
||||||
|
/* Enable ECC checking */
|
||||||
|
out_be32(&ddr->sdram_cfg, CONFIG_SYS_DDR_CONTROL | 0x20000000);
|
||||||
|
#else
|
||||||
|
out_be32(&ddr->sdram_cfg, CONFIG_SYS_DDR_CONTROL);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return CONFIG_SYS_SDRAM_SIZE * 1024 * 1024;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
|
@ -36,22 +36,36 @@
|
||||||
* 0xe000_0000 0xe000_ffff CCSR 1M
|
* 0xe000_0000 0xe000_ffff CCSR 1M
|
||||||
* 0xe200_0000 0xe27f_ffff PCI1 IO 8M
|
* 0xe200_0000 0xe27f_ffff PCI1 IO 8M
|
||||||
* 0xe280_0000 0xe2ff_ffff PCIe IO 8M
|
* 0xe280_0000 0xe2ff_ffff PCIe IO 8M
|
||||||
|
* 0xec00_0000 0xefff_ffff FLASH (2nd bank) 64M
|
||||||
* 0xf000_0000 0xf7ff_ffff SDRAM 128M
|
* 0xf000_0000 0xf7ff_ffff SDRAM 128M
|
||||||
* 0xf8b0_0000 0xf80f_ffff EEPROM 1M
|
* 0xf8b0_0000 0xf80f_ffff EEPROM 1M
|
||||||
* 0xfb80_0000 0xff7f_ffff FLASH (2nd bank) 64M
|
|
||||||
* 0xff80_0000 0xffff_ffff FLASH (boot bank) 8M
|
* 0xff80_0000 0xffff_ffff FLASH (boot bank) 8M
|
||||||
*
|
*
|
||||||
|
* If swapped CS0/CS6 via JP12+SW2.8:
|
||||||
|
* 0xef80_0000 0xefff_ffff FLASH (2nd bank) 8M
|
||||||
|
* 0xfc00_0000 0xffff_ffff FLASH (boot bank) 64M
|
||||||
|
*
|
||||||
* Notes:
|
* Notes:
|
||||||
* CCSRBAR and L2-as-SRAM don't need a configured Local Access Window.
|
* CCSRBAR and L2-as-SRAM don't need a configured Local Access Window.
|
||||||
* If flash is 8M at default position (last 8M), no LAW needed.
|
* If flash is 8M at default position (last 8M), no LAW needed.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
struct law_entry law_table[] = {
|
struct law_entry law_table[] = {
|
||||||
|
#ifdef CONFIG_SYS_ALT_BOOT
|
||||||
|
SET_LAW(CONFIG_SYS_ALT_FLASH, LAW_SIZE_8M, LAW_TRGT_IF_LBC),
|
||||||
|
#else
|
||||||
|
SET_LAW(CONFIG_SYS_ALT_FLASH, LAW_SIZE_64M, LAW_TRGT_IF_LBC),
|
||||||
|
#endif
|
||||||
#ifndef CONFIG_SPD_EEPROM
|
#ifndef CONFIG_SPD_EEPROM
|
||||||
SET_LAW(CONFIG_SYS_DDR_SDRAM_BASE, LAW_SIZE_256M, LAW_TRGT_IF_DDR),
|
SET_LAW(CONFIG_SYS_DDR_SDRAM_BASE, LAW_SIZE_256M, LAW_TRGT_IF_DDR),
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef CONFIG_SYS_LBC_SDRAM_BASE
|
||||||
/* LBC window - maps 256M 0xf0000000 -> 0xffffffff */
|
/* LBC window - maps 256M 0xf0000000 -> 0xffffffff */
|
||||||
SET_LAW(CONFIG_SYS_LBC_SDRAM_BASE, LAW_SIZE_256M, LAW_TRGT_IF_LBC),
|
SET_LAW(CONFIG_SYS_LBC_SDRAM_BASE, LAW_SIZE_256M, LAW_TRGT_IF_LBC),
|
||||||
|
#else
|
||||||
|
/* LBC window - maps 128M 0xf8000000 -> 0xffffffff */
|
||||||
|
SET_LAW(CONFIG_SYS_EPLD_BASE, LAW_SIZE_128M, LAW_TRGT_IF_LBC),
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
int num_law_entries = ARRAY_SIZE(law_table);
|
int num_law_entries = ARRAY_SIZE(law_table);
|
||||||
|
|
|
@ -76,11 +76,15 @@ local_bus_init(void)
|
||||||
volatile ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
|
volatile ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
|
||||||
volatile fsl_lbc_t *lbc = LBC_BASE_ADDR;
|
volatile fsl_lbc_t *lbc = LBC_BASE_ADDR;
|
||||||
|
|
||||||
uint clkdiv;
|
uint clkdiv, lbc_mhz, lcrr = CONFIG_SYS_LBC_LCRR;
|
||||||
sys_info_t sysinfo;
|
sys_info_t sysinfo;
|
||||||
|
|
||||||
get_sys_info(&sysinfo);
|
get_sys_info(&sysinfo);
|
||||||
clkdiv = (in_be32(&lbc->lcrr) & LCRR_CLKDIV) * 2;
|
|
||||||
|
lbc_mhz = sysinfo.freqLocalBus / 1000000;
|
||||||
|
clkdiv = sysinfo.freqSystemBus / sysinfo.freqLocalBus;
|
||||||
|
|
||||||
|
debug("LCRR=0x%x, CD=%d, MHz=%d\n", lcrr, clkdiv, lbc_mhz);
|
||||||
|
|
||||||
out_be32(&gur->lbiuiplldcr1, 0x00078080);
|
out_be32(&gur->lbiuiplldcr1, 0x00078080);
|
||||||
if (clkdiv == 16) {
|
if (clkdiv == 16) {
|
||||||
|
@ -91,10 +95,38 @@ local_bus_init(void)
|
||||||
out_be32(&gur->lbiuiplldcr0, 0x5c0f1bf0);
|
out_be32(&gur->lbiuiplldcr0, 0x5c0f1bf0);
|
||||||
}
|
}
|
||||||
|
|
||||||
setbits_be32(&lbc->lcrr, 0x00030000);
|
/*
|
||||||
|
* Local Bus Clock > 83.3 MHz. According to timing
|
||||||
|
* specifications set LCRR[EADC] to 2 delay cycles.
|
||||||
|
*/
|
||||||
|
if (lbc_mhz > 83) {
|
||||||
|
lcrr &= ~LCRR_EADC;
|
||||||
|
lcrr |= LCRR_EADC_2;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* According to MPC8548ERMAD Rev. 1.3, 13.3.1.16, 13-30
|
||||||
|
* disable PLL bypass for Local Bus Clock > 83 MHz.
|
||||||
|
*/
|
||||||
|
if (lbc_mhz >= 66)
|
||||||
|
lcrr &= (~LCRR_DBYP); /* DLL Enabled */
|
||||||
|
|
||||||
|
else
|
||||||
|
lcrr |= LCRR_DBYP; /* DLL Bypass */
|
||||||
|
|
||||||
|
out_be32(&lbc->lcrr, lcrr);
|
||||||
asm("sync;isync;msync");
|
asm("sync;isync;msync");
|
||||||
|
|
||||||
|
/*
|
||||||
|
* According to MPC8548ERMAD Rev.1.3 read back LCRR
|
||||||
|
* and terminate with isync
|
||||||
|
*/
|
||||||
|
lcrr = in_be32(&lbc->lcrr);
|
||||||
|
asm ("isync;");
|
||||||
|
|
||||||
|
/* let DLL stabilize */
|
||||||
|
udelay(500);
|
||||||
|
|
||||||
out_be32(&lbc->ltesr, 0xffffffff); /* Clear LBC error IRQs */
|
out_be32(&lbc->ltesr, 0xffffffff); /* Clear LBC error IRQs */
|
||||||
out_be32(&lbc->lteir, 0xffffffff); /* Enable LBC error IRQs */
|
out_be32(&lbc->lteir, 0xffffffff); /* Enable LBC error IRQs */
|
||||||
}
|
}
|
||||||
|
@ -107,13 +139,14 @@ void lbc_sdram_init(void)
|
||||||
#if defined(CONFIG_SYS_LBC_SDRAM_SIZE)
|
#if defined(CONFIG_SYS_LBC_SDRAM_SIZE)
|
||||||
|
|
||||||
uint idx;
|
uint idx;
|
||||||
|
const unsigned long size = CONFIG_SYS_LBC_SDRAM_SIZE * 1024 * 1024;
|
||||||
volatile fsl_lbc_t *lbc = LBC_BASE_ADDR;
|
volatile fsl_lbc_t *lbc = LBC_BASE_ADDR;
|
||||||
uint *sdram_addr = (uint *)CONFIG_SYS_LBC_SDRAM_BASE;
|
uint *sdram_addr = (uint *)CONFIG_SYS_LBC_SDRAM_BASE;
|
||||||
uint lsdmr_common;
|
uint *sdram_addr2 = (uint *)(CONFIG_SYS_LBC_SDRAM_BASE + size/2);
|
||||||
|
|
||||||
puts(" SDRAM: ");
|
puts(" SDRAM: ");
|
||||||
|
|
||||||
print_size (CONFIG_SYS_LBC_SDRAM_SIZE * 1024 * 1024, "\n");
|
print_size(size, "\n");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Setup SDRAM Base and Option Registers
|
* Setup SDRAM Base and Option Registers
|
||||||
|
@ -130,48 +163,50 @@ void lbc_sdram_init(void)
|
||||||
out_be32(&lbc->mrtpr, CONFIG_SYS_LBC_MRTPR);
|
out_be32(&lbc->mrtpr, CONFIG_SYS_LBC_MRTPR);
|
||||||
asm("msync");
|
asm("msync");
|
||||||
|
|
||||||
/*
|
|
||||||
* MPC8548 uses "new" 15-16 style addressing.
|
|
||||||
*/
|
|
||||||
lsdmr_common = CONFIG_SYS_LBC_LSDMR_COMMON;
|
|
||||||
lsdmr_common |= LSDMR_BSMA1516;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Issue PRECHARGE ALL command.
|
* Issue PRECHARGE ALL command.
|
||||||
*/
|
*/
|
||||||
out_be32(&lbc->lsdmr, lsdmr_common | LSDMR_OP_PCHALL);
|
out_be32(&lbc->lsdmr, CONFIG_SYS_LBC_LSDMR_PCHALL);
|
||||||
asm("sync;msync");
|
asm("sync;msync");
|
||||||
*sdram_addr = 0xff;
|
*sdram_addr = 0xff;
|
||||||
ppcDcbf((unsigned long) sdram_addr);
|
ppcDcbf((unsigned long) sdram_addr);
|
||||||
|
*sdram_addr2 = 0xff;
|
||||||
|
ppcDcbf((unsigned long) sdram_addr2);
|
||||||
udelay(100);
|
udelay(100);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Issue 8 AUTO REFRESH commands.
|
* Issue 8 AUTO REFRESH commands.
|
||||||
*/
|
*/
|
||||||
for (idx = 0; idx < 8; idx++) {
|
for (idx = 0; idx < 8; idx++) {
|
||||||
out_be32(&lbc->lsdmr, lsdmr_common | LSDMR_OP_ARFRSH);
|
out_be32(&lbc->lsdmr, CONFIG_SYS_LBC_LSDMR_ARFRSH);
|
||||||
asm("sync;msync");
|
asm("sync;msync");
|
||||||
*sdram_addr = 0xff;
|
*sdram_addr = 0xff;
|
||||||
ppcDcbf((unsigned long) sdram_addr);
|
ppcDcbf((unsigned long) sdram_addr);
|
||||||
|
*sdram_addr2 = 0xff;
|
||||||
|
ppcDcbf((unsigned long) sdram_addr2);
|
||||||
udelay(100);
|
udelay(100);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Issue 8 MODE-set command.
|
* Issue 8 MODE-set command.
|
||||||
*/
|
*/
|
||||||
out_be32(&lbc->lsdmr, lsdmr_common | LSDMR_OP_MRW);
|
out_be32(&lbc->lsdmr, CONFIG_SYS_LBC_LSDMR_MRW);
|
||||||
asm("sync;msync");
|
asm("sync;msync");
|
||||||
*sdram_addr = 0xff;
|
*sdram_addr = 0xff;
|
||||||
ppcDcbf((unsigned long) sdram_addr);
|
ppcDcbf((unsigned long) sdram_addr);
|
||||||
|
*sdram_addr2 = 0xff;
|
||||||
|
ppcDcbf((unsigned long) sdram_addr2);
|
||||||
udelay(100);
|
udelay(100);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Issue NORMAL OP command.
|
* Issue RFEN command.
|
||||||
*/
|
*/
|
||||||
out_be32(&lbc->lsdmr, lsdmr_common | LSDMR_OP_NORMAL);
|
out_be32(&lbc->lsdmr, CONFIG_SYS_LBC_LSDMR_RFEN);
|
||||||
asm("sync;msync");
|
asm("sync;msync");
|
||||||
*sdram_addr = 0xff;
|
*sdram_addr = 0xff;
|
||||||
ppcDcbf((unsigned long) sdram_addr);
|
ppcDcbf((unsigned long) sdram_addr);
|
||||||
|
*sdram_addr2 = 0xff;
|
||||||
|
ppcDcbf((unsigned long) sdram_addr2);
|
||||||
udelay(200); /* Overkill. Must wait > 200 bus cycles */
|
udelay(200); /* Overkill. Must wait > 200 bus cycles */
|
||||||
|
|
||||||
#endif /* enable SDRAM init */
|
#endif /* enable SDRAM init */
|
||||||
|
@ -216,50 +251,6 @@ testdram(void)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined(CONFIG_SPD_EEPROM)
|
|
||||||
#define CONFIG_SYS_DDR_CONTROL 0xc300c000
|
|
||||||
/*************************************************************************
|
|
||||||
* fixed_sdram init -- doesn't use serial presence detect.
|
|
||||||
* assumes 256MB DDR2 SDRAM SODIMM, without ECC, running at DDR400 speed.
|
|
||||||
************************************************************************/
|
|
||||||
phys_size_t fixed_sdram(void)
|
|
||||||
{
|
|
||||||
volatile ccsr_ddr_t *ddr = (void *)(CONFIG_SYS_MPC85xx_DDR_ADDR);
|
|
||||||
|
|
||||||
out_be32(&ddr->cs0_bnds, 0x0000007f);
|
|
||||||
out_be32(&ddr->cs1_bnds, 0x008000ff);
|
|
||||||
out_be32(&ddr->cs2_bnds, 0x00000000);
|
|
||||||
out_be32(&ddr->cs3_bnds, 0x00000000);
|
|
||||||
out_be32(&ddr->cs0_config, 0x80010101);
|
|
||||||
out_be32(&ddr->cs1_config, 0x80010101);
|
|
||||||
out_be32(&ddr->cs2_config, 0x00000000);
|
|
||||||
out_be32(&ddr->cs3_config, 0x00000000);
|
|
||||||
out_be32(&ddr->timing_cfg_3, 0x00000000);
|
|
||||||
out_be32(&ddr->timing_cfg_0, 0x00220802);
|
|
||||||
out_be32(&ddr->timing_cfg_1, 0x38377322);
|
|
||||||
out_be32(&ddr->timing_cfg_2, 0x0fa044C7);
|
|
||||||
out_be32(&ddr->sdram_cfg, 0x4300C000);
|
|
||||||
out_be32(&ddr->sdram_cfg_2, 0x24401000);
|
|
||||||
out_be32(&ddr->sdram_mode, 0x23C00542);
|
|
||||||
out_be32(&ddr->sdram_mode_2, 0x00000000);
|
|
||||||
out_be32(&ddr->sdram_interval, 0x05080100);
|
|
||||||
out_be32(&ddr->sdram_md_cntl, 0x00000000);
|
|
||||||
out_be32(&ddr->sdram_data_init, 0x00000000);
|
|
||||||
out_be32(&ddr->sdram_clk_cntl, 0x03800000);
|
|
||||||
asm("sync;isync;msync");
|
|
||||||
udelay(500);
|
|
||||||
|
|
||||||
#if defined (CONFIG_DDR_ECC)
|
|
||||||
/* Enable ECC checking */
|
|
||||||
out_be32(&ddr->sdram_cfg, CONFIG_SYS_DDR_CONTROL | 0x20000000);
|
|
||||||
#else
|
|
||||||
out_be32(&ddr->sdram_cfg, CONFIG_SYS_DDR_CONTROL);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return CONFIG_SYS_SDRAM_SIZE * 1024 * 1024;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_PCI1
|
#ifdef CONFIG_PCI1
|
||||||
static struct pci_controller pci1_hose;
|
static struct pci_controller pci1_hose;
|
||||||
#endif /* CONFIG_PCI1 */
|
#endif /* CONFIG_PCI1 */
|
||||||
|
|
|
@ -46,12 +46,14 @@ struct fsl_e_tlb_entry tlb_table[] = {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* TLB 0: 64M Non-cacheable, guarded
|
* TLB 0: 64M Non-cacheable, guarded
|
||||||
* 0xfc000000 56M 8MB -> 64MB of user flash
|
* 0xfc000000 56M unused
|
||||||
* 0xff800000 8M boot FLASH
|
* 0xff800000 8M boot FLASH
|
||||||
|
* .... or ....
|
||||||
|
* 0xfc000000 64M user flash
|
||||||
|
*
|
||||||
* Out of reset this entry is only 4K.
|
* Out of reset this entry is only 4K.
|
||||||
*/
|
*/
|
||||||
SET_TLB_ENTRY(1, CONFIG_SYS_ALT_FLASH + 0x800000,
|
SET_TLB_ENTRY(1, 0xfc000000, 0xfc000000,
|
||||||
CONFIG_SYS_ALT_FLASH + 0x800000,
|
|
||||||
MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
|
MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
|
||||||
0, 0, BOOKE_PAGESZ_64M, 1),
|
0, 0, BOOKE_PAGESZ_64M, 1),
|
||||||
|
|
||||||
|
@ -74,6 +76,7 @@ struct fsl_e_tlb_entry tlb_table[] = {
|
||||||
MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
|
MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
|
||||||
0, 2, BOOKE_PAGESZ_64M, 1),
|
0, 2, BOOKE_PAGESZ_64M, 1),
|
||||||
|
|
||||||
|
#ifdef CONFIG_SYS_LBC_SDRAM_BASE
|
||||||
/*
|
/*
|
||||||
* TLB 3: 64M Cacheable, non-guarded
|
* TLB 3: 64M Cacheable, non-guarded
|
||||||
* 0xf0000000 64M LBC SDRAM First half
|
* 0xf0000000 64M LBC SDRAM First half
|
||||||
|
@ -90,6 +93,7 @@ struct fsl_e_tlb_entry tlb_table[] = {
|
||||||
CONFIG_SYS_LBC_SDRAM_BASE + 0x4000000,
|
CONFIG_SYS_LBC_SDRAM_BASE + 0x4000000,
|
||||||
MAS3_SX|MAS3_SW|MAS3_SR, 0,
|
MAS3_SX|MAS3_SW|MAS3_SR, 0,
|
||||||
0, 4, BOOKE_PAGESZ_64M, 1),
|
0, 4, BOOKE_PAGESZ_64M, 1),
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* TLB 5: 16M Cacheable, non-guarded
|
* TLB 5: 16M Cacheable, non-guarded
|
||||||
|
@ -102,9 +106,18 @@ struct fsl_e_tlb_entry tlb_table[] = {
|
||||||
MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
|
MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
|
||||||
0, 5, BOOKE_PAGESZ_16M, 1),
|
0, 5, BOOKE_PAGESZ_16M, 1),
|
||||||
|
|
||||||
|
#ifndef CONFIG_SYS_ALT_BOOT
|
||||||
|
/*
|
||||||
|
* TLB 6: 64M Non-cacheable, guarded
|
||||||
|
* 0xec000000 64M 64MB user FLASH
|
||||||
|
*/
|
||||||
|
SET_TLB_ENTRY(1, CONFIG_SYS_ALT_FLASH, CONFIG_SYS_ALT_FLASH,
|
||||||
|
MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
|
||||||
|
0, 6, BOOKE_PAGESZ_64M, 1),
|
||||||
|
#else
|
||||||
/*
|
/*
|
||||||
* TLB 6: 4M Non-cacheable, guarded
|
* TLB 6: 4M Non-cacheable, guarded
|
||||||
* 0xfb800000 4M 1st 4MB block of 64MB user FLASH
|
* 0xef800000 4M 1st 1/2 8MB soldered FLASH
|
||||||
*/
|
*/
|
||||||
SET_TLB_ENTRY(1, CONFIG_SYS_ALT_FLASH, CONFIG_SYS_ALT_FLASH,
|
SET_TLB_ENTRY(1, CONFIG_SYS_ALT_FLASH, CONFIG_SYS_ALT_FLASH,
|
||||||
MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
|
MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
|
||||||
|
@ -112,12 +125,13 @@ struct fsl_e_tlb_entry tlb_table[] = {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* TLB 7: 4M Non-cacheable, guarded
|
* TLB 7: 4M Non-cacheable, guarded
|
||||||
* 0xfbc00000 4M 2nd 4MB block of 64MB user FLASH
|
* 0xefc00000 4M 2nd half 8MB soldered FLASH
|
||||||
*/
|
*/
|
||||||
SET_TLB_ENTRY(1, CONFIG_SYS_ALT_FLASH + 0x400000,
|
SET_TLB_ENTRY(1, CONFIG_SYS_ALT_FLASH + 0x400000,
|
||||||
CONFIG_SYS_ALT_FLASH + 0x400000,
|
CONFIG_SYS_ALT_FLASH + 0x400000,
|
||||||
MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
|
MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
|
||||||
0, 7, BOOKE_PAGESZ_4M, 1),
|
0, 7, BOOKE_PAGESZ_4M, 1),
|
||||||
|
#endif
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -62,6 +62,43 @@ a 33MHz PCI configuration is currently untested.)
|
||||||
02.00.00 0x1148 0x9e00 Network controller 0x00
|
02.00.00 0x1148 0x9e00 Network controller 0x00
|
||||||
=>
|
=>
|
||||||
|
|
||||||
|
Memory Size and using SPD:
|
||||||
|
==========================
|
||||||
|
|
||||||
|
The default configuration uses hard coded memory configuration settings
|
||||||
|
for 256MB of DDR2 @400MHz. It does not by default use the DDR2 SPD
|
||||||
|
EEPROM data to read what memory is installed.
|
||||||
|
|
||||||
|
There is a hardware errata, which causes the older local bus SDRAM
|
||||||
|
SPD EEPROM to land at the same address as the DDR2 SPD EEPROM, so
|
||||||
|
that the SPD data can not be read reliably. You can test if your
|
||||||
|
board has the errata fix by running "i2c probe". If you see 0x53
|
||||||
|
as a valid device, it has been fixed. If you only see 0x50, 0x51
|
||||||
|
then your board does not have the fix.
|
||||||
|
|
||||||
|
You can also visually inspect the board to see if this hardware
|
||||||
|
fix has been applied:
|
||||||
|
|
||||||
|
1) Remove R314 (RES-R0174-033, 1K, 0603). R314 is located on
|
||||||
|
the back of the PCB behind the DDR SDRAM SODIMM connector.
|
||||||
|
2) Solder RES-R0174-033 (1K, 0603) resistor from R314 pin 2 pad
|
||||||
|
to R313 pin 2. Pin 2 for each resistor is the end of the
|
||||||
|
resistor closest to the CPU.
|
||||||
|
|
||||||
|
Boards without the mod will have R314 and R313 in parallel, like "||".
|
||||||
|
After the mod, they will be touching and form an "L" shape.
|
||||||
|
|
||||||
|
If you want to upgrade to larger RAM size, you can simply enable
|
||||||
|
#define CONFIG_SPD_EEPROM
|
||||||
|
#define CONFIG_DDR_SPD
|
||||||
|
in include/configs/sbc8548.h file. (The lines are already there
|
||||||
|
but listed as #undef).
|
||||||
|
|
||||||
|
If you did the i2c test, and your board does not have the errata
|
||||||
|
fix, then you will have to physically remove the LBC 128MB DIMM
|
||||||
|
from the board's socket to resolve the above i2c address overlap
|
||||||
|
issue and allow SPD autodetection of RAM to work.
|
||||||
|
|
||||||
|
|
||||||
Updating U-boot with U-boot:
|
Updating U-boot with U-boot:
|
||||||
============================
|
============================
|
||||||
|
@ -86,6 +123,33 @@ The "md" steps in the above are just a precautionary step that allow
|
||||||
you to confirm the u-boot version that was downloaded, and then confirm
|
you to confirm the u-boot version that was downloaded, and then confirm
|
||||||
that it was copied to flash.
|
that it was copied to flash.
|
||||||
|
|
||||||
|
The above assumes that you are using the default board settings which
|
||||||
|
have u-boot in the 8MB flash, tied to /CS0.
|
||||||
|
|
||||||
|
If you are running the default 8MB /CS0 settings but want to store an
|
||||||
|
image in the SODIMM that is built with CONFIG_SYS_ALT_BOOT enabled,
|
||||||
|
(as a backup, etc) then the steps will become:
|
||||||
|
|
||||||
|
tftp u-boot.bin
|
||||||
|
md 200000 10
|
||||||
|
protect off all
|
||||||
|
era eff00000 efffffff
|
||||||
|
cp.b 200000 eff00000 100000
|
||||||
|
md eff00000 10
|
||||||
|
protect on all
|
||||||
|
|
||||||
|
Finally, if you are running the alternate 64MB /CS0 settings and want
|
||||||
|
to update the in-use u-boot image, then (again with CONFIG_SYS_ALT_BOOT
|
||||||
|
enabled) the steps will become:
|
||||||
|
|
||||||
|
tftp u-boot.bin
|
||||||
|
md 200000 10
|
||||||
|
protect off all
|
||||||
|
era fff00000 ffffffff
|
||||||
|
cp.b 200000 fff00000 100000
|
||||||
|
md fff00000 10
|
||||||
|
protect on all
|
||||||
|
|
||||||
|
|
||||||
Hardware Reference:
|
Hardware Reference:
|
||||||
===================
|
===================
|
||||||
|
@ -100,6 +164,9 @@ Boot flash:
|
||||||
|
|
||||||
Sodimm flash:
|
Sodimm flash:
|
||||||
intel V28F128Jx, 16384x8 (4 devices) at 0xfb80_0000
|
intel V28F128Jx, 16384x8 (4 devices) at 0xfb80_0000
|
||||||
|
Note that this address reflects the default setting for
|
||||||
|
the JTAG debugging tools, but since the alignment is
|
||||||
|
rather inconvenient, u-boot puts it at 0xec00_0000.
|
||||||
|
|
||||||
|
|
||||||
Jumpers:
|
Jumpers:
|
||||||
|
@ -124,10 +191,9 @@ JP19 PCI mode PCI PCI-X
|
||||||
onto /CS0 and the SODIMM flash on /CS6 (default). When JP12
|
onto /CS0 and the SODIMM flash on /CS6 (default). When JP12
|
||||||
is jumpered parallel to the LBC-SDRAM, then /CS0 is for the
|
is jumpered parallel to the LBC-SDRAM, then /CS0 is for the
|
||||||
SODIMM flash and /CS6 is for the boot flash. Note that in this
|
SODIMM flash and /CS6 is for the boot flash. Note that in this
|
||||||
alternate setting, you also need to switch SW2.8 to ON. Currently
|
alternate setting, you also need to switch SW2.8 to ON.
|
||||||
u-boot doesn't support booting off the SODIMM in this alternate
|
See the setting CONFIG_SYS_ALT_BOOT if you want to use this setting
|
||||||
setting without manually altering BR0/OR0 and BR6/OR6 in the
|
and boot u-boot from the 64MB SODIMM
|
||||||
board config file appropriately.
|
|
||||||
|
|
||||||
|
|
||||||
Switches:
|
Switches:
|
||||||
|
@ -187,9 +253,12 @@ start end CS<n> width Desc.
|
||||||
0000_0000 0fff_ffff MCS0,1 64 DDR2 (256MB)
|
0000_0000 0fff_ffff MCS0,1 64 DDR2 (256MB)
|
||||||
f000_0000 f7ff_ffff CS3,4 32 LB SDRAM (128MB)
|
f000_0000 f7ff_ffff CS3,4 32 LB SDRAM (128MB)
|
||||||
f800_0000 f8b0_1fff CS5 - EPLD
|
f800_0000 f8b0_1fff CS5 - EPLD
|
||||||
fb80_0000 ff7f_ffff CS6 32 SODIMM flash (64MB)
|
fb80_0000 ff7f_ffff CS6 32 SODIMM flash (64MB) [*]
|
||||||
ff80_0000 ffff_ffff CS0 8 Boot flash (8MB)
|
ff80_0000 ffff_ffff CS0 8 Boot flash (8MB)
|
||||||
|
|
||||||
|
[*] fb80 represents the default programmed by WR JTAG register files,
|
||||||
|
but u-boot places the flash at either ec00 or fc00 based on JP12.
|
||||||
|
|
||||||
The EPLD on CS5 demuxes the following devices at the following offsets:
|
The EPLD on CS5 demuxes the following devices at the following offsets:
|
||||||
|
|
||||||
offset size width device
|
offset size width device
|
||||||
|
|
|
@ -240,7 +240,29 @@
|
||||||
/* Turn off RTC square-wave output to save battery */
|
/* Turn off RTC square-wave output to save battery */
|
||||||
#define CONFIG_SYS_RTC_DS1337_NOOSC
|
#define CONFIG_SYS_RTC_DS1337_NOOSC
|
||||||
|
|
||||||
/* PCA9554 is at I2C1-0x3f (I know it says "PCA953X", it's a PCA9554) */
|
/*
|
||||||
|
* AT24C128N EEPROM at I2C0-0x53.
|
||||||
|
*
|
||||||
|
* That Atmel EEPROM has 128kbit of memory (16kByte) divided into 256 pages
|
||||||
|
* of 64 bytes per page. The chip uses 2-byte addresses and has a max write
|
||||||
|
* cycle time of 20ms according to the datasheet.
|
||||||
|
*
|
||||||
|
* NOTE: Our environment is stored on regular direct-attached FLASH, this
|
||||||
|
* chip is only used as a write-protected backup for certain key settings
|
||||||
|
* such as the serial# and macaddr values. (EG: "env import")
|
||||||
|
*/
|
||||||
|
#define CONFIG_CMD_EEPROM
|
||||||
|
#define CONFIG_ENV_EEPROM_IS_ON_I2C
|
||||||
|
#define CONFIG_SYS_I2C_EEPROM_ADDR 0x53
|
||||||
|
#define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 2
|
||||||
|
#define CONFIG_SYS_EEPROM_PAGE_WRITE_BITS 6 /* 1 << 6 == 64 byte pages */
|
||||||
|
#define CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS 21
|
||||||
|
|
||||||
|
/*
|
||||||
|
* PCA9554 is at I2C1-0x3f (I know it says "PCA953X", it's a PCA9554). You
|
||||||
|
* must first select the I2C1 bus with "i2c dev 1" or the "pca953x" command
|
||||||
|
* will not be able to access the chip.
|
||||||
|
*/
|
||||||
#define CONFIG_PCA953X
|
#define CONFIG_PCA953X
|
||||||
#define CONFIG_CMD_PCA953X
|
#define CONFIG_CMD_PCA953X
|
||||||
#define CONFIG_CMD_PCA953X_INFO
|
#define CONFIG_CMD_PCA953X_INFO
|
||||||
|
@ -438,14 +460,20 @@ const char *hww1u1a_get_ps1(void);
|
||||||
|
|
||||||
/* Extra environment parameters */
|
/* Extra environment parameters */
|
||||||
#define CONFIG_EXTRA_ENV_SETTINGS \
|
#define CONFIG_EXTRA_ENV_SETTINGS \
|
||||||
"preboot=setenv bootargs \"${bootargs} "CONFIG_BOOTARGS_DYNAMIC"\"\0" \
|
"ethprime=e1000#0\0" \
|
||||||
|
"ethrotate=no\0" \
|
||||||
|
"setbootargs=setenv bootargs " \
|
||||||
|
"\"${bootargs} "CONFIG_BOOTARGS_DYNAMIC"\"\0" \
|
||||||
"perf_mode=performance\0" \
|
"perf_mode=performance\0" \
|
||||||
"hwconfig=" "fsl_ddr:ctlr_intlv=bank,bank_intlv=cs0_cs1;" \
|
"hwconfig=" "fsl_ddr:ctlr_intlv=bank,bank_intlv=cs0_cs1;" \
|
||||||
"usb1:dr_mode=host,phy_type=ulpi\0" \
|
"usb1:dr_mode=host,phy_type=ulpi\0" \
|
||||||
"flkernel=0xe8020000\0" \
|
"flkernel=0xe8000000\0" \
|
||||||
"flinitramfs=0xe8800000\0" \
|
"flinitramfs=0xe8800000\0" \
|
||||||
"fldevicetree=0xeff20000\0" \
|
"fldevicetree=0xeff20000\0" \
|
||||||
"flbootm=bootm ${flkernel} ${flinitramfs} ${fldevicetree}\0" \
|
"flbootm=bootm ${flkernel} ${flinitramfs} ${fldevicetree}\0" \
|
||||||
"flboot=run preboot; run flbootm\0"
|
"flboot=run preboot; run flbootm\0" \
|
||||||
|
"restore_eeprom=i2c dev 0 && " \
|
||||||
|
"eeprom read $loadaddr 0x0000 0x2000 && " \
|
||||||
|
"env import -c $loadaddr 0x2000\0"
|
||||||
|
|
||||||
#endif /* __CONFIG_H */
|
#endif /* __CONFIG_H */
|
||||||
|
|
|
@ -57,9 +57,19 @@
|
||||||
#define CONFIG_MPC8548 1 /* MPC8548 specific */
|
#define CONFIG_MPC8548 1 /* MPC8548 specific */
|
||||||
#define CONFIG_SBC8548 1 /* SBC8548 board specific */
|
#define CONFIG_SBC8548 1 /* SBC8548 board specific */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If you want to boot from the SODIMM flash, instead of the soldered
|
||||||
|
* on flash, set this, and change JP12, SW2:8 accordingly.
|
||||||
|
*/
|
||||||
|
#undef CONFIG_SYS_ALT_BOOT
|
||||||
|
|
||||||
#ifndef CONFIG_SYS_TEXT_BASE
|
#ifndef CONFIG_SYS_TEXT_BASE
|
||||||
|
#ifdef CONFIG_SYS_ALT_BOOT
|
||||||
|
#define CONFIG_SYS_TEXT_BASE 0xfff00000
|
||||||
|
#else
|
||||||
#define CONFIG_SYS_TEXT_BASE 0xfffa0000
|
#define CONFIG_SYS_TEXT_BASE 0xfffa0000
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#undef CONFIG_RIO
|
#undef CONFIG_RIO
|
||||||
|
|
||||||
|
@ -109,9 +119,17 @@
|
||||||
/* DDR Setup */
|
/* DDR Setup */
|
||||||
#define CONFIG_FSL_DDR2
|
#define CONFIG_FSL_DDR2
|
||||||
#undef CONFIG_FSL_DDR_INTERACTIVE
|
#undef CONFIG_FSL_DDR_INTERACTIVE
|
||||||
|
#undef CONFIG_DDR_ECC /* only for ECC DDR module */
|
||||||
|
/*
|
||||||
|
* A hardware errata caused the LBC SDRAM SPD and the DDR2 SPD
|
||||||
|
* to collide, meaning you couldn't reliably read either. So
|
||||||
|
* physically remove the LBC PC100 SDRAM module from the board
|
||||||
|
* before enabling the two SPD options below, or check that you
|
||||||
|
* have the hardware fix on your board via "i2c probe" and looking
|
||||||
|
* for a device at 0x53.
|
||||||
|
*/
|
||||||
#undef CONFIG_SPD_EEPROM /* Use SPD EEPROM for DDR setup */
|
#undef CONFIG_SPD_EEPROM /* Use SPD EEPROM for DDR setup */
|
||||||
#undef CONFIG_DDR_SPD
|
#undef CONFIG_DDR_SPD
|
||||||
#undef CONFIG_DDR_ECC /* only for ECC DDR module */
|
|
||||||
|
|
||||||
#define CONFIG_ECC_INIT_VIA_DDRCONTROLLER /* DDR controller or DMA? */
|
#define CONFIG_ECC_INIT_VIA_DDRCONTROLLER /* DDR controller or DMA? */
|
||||||
#define CONFIG_MEM_INIT_VALUE 0xDeadBeef
|
#define CONFIG_MEM_INIT_VALUE 0xDeadBeef
|
||||||
|
@ -124,14 +142,20 @@
|
||||||
#define CONFIG_DIMM_SLOTS_PER_CTLR 1
|
#define CONFIG_DIMM_SLOTS_PER_CTLR 1
|
||||||
#define CONFIG_CHIP_SELECTS_PER_CTRL 2
|
#define CONFIG_CHIP_SELECTS_PER_CTRL 2
|
||||||
|
|
||||||
/* I2C addresses of SPD EEPROMs */
|
/*
|
||||||
|
* The hardware fix for the I2C address collision puts the DDR
|
||||||
|
* SPD at 0x53, but if we are running on an older board w/o the
|
||||||
|
* fix, it will still be at 0x51. We check 0x53 1st.
|
||||||
|
*/
|
||||||
#define SPD_EEPROM_ADDRESS 0x51 /* CTLR 0 DIMM 0 */
|
#define SPD_EEPROM_ADDRESS 0x51 /* CTLR 0 DIMM 0 */
|
||||||
|
#define ALT_SPD_EEPROM_ADDRESS 0x53 /* CTLR 0 DIMM 0 */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Make sure required options are set
|
* Make sure required options are set
|
||||||
*/
|
*/
|
||||||
#ifndef CONFIG_SPD_EEPROM
|
#ifndef CONFIG_SPD_EEPROM
|
||||||
#define CONFIG_SYS_SDRAM_SIZE 256 /* DDR is 256MB */
|
#define CONFIG_SYS_SDRAM_SIZE 256 /* DDR is 256MB */
|
||||||
|
#define CONFIG_SYS_DDR_CONTROL 0xc300c000
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#undef CONFIG_CLOCKS_IN_MHZ
|
#undef CONFIG_CLOCKS_IN_MHZ
|
||||||
|
@ -139,28 +163,54 @@
|
||||||
/*
|
/*
|
||||||
* FLASH on the Local Bus
|
* FLASH on the Local Bus
|
||||||
* Two banks, one 8MB the other 64MB, using the CFI driver.
|
* Two banks, one 8MB the other 64MB, using the CFI driver.
|
||||||
* Boot from BR0/OR0 bank at 0xff80_0000
|
* JP12+SW2.8 are used to swap CS0 and CS6, defaults are to have
|
||||||
* Alternate BR6/OR6 bank at 0xfb80_0000
|
* CS0 the 8MB boot flash, and CS6 the 64MB flash.
|
||||||
*
|
*
|
||||||
* BR0:
|
* Default:
|
||||||
|
* ec00_0000 efff_ffff 64MB SODIMM
|
||||||
|
* ff80_0000 ffff_ffff 8MB soldered flash
|
||||||
|
*
|
||||||
|
* Alternate:
|
||||||
|
* ef80_0000 efff_ffff 8MB soldered flash
|
||||||
|
* fc00_0000 ffff_ffff 64MB SODIMM
|
||||||
|
*
|
||||||
|
* BR0_8M:
|
||||||
* Base address 0 = 0xff80_0000 = BR0[0:16] = 1111 1111 1000 0000 0
|
* Base address 0 = 0xff80_0000 = BR0[0:16] = 1111 1111 1000 0000 0
|
||||||
* Port Size = 8 bits = BRx[19:20] = 01
|
* Port Size = 8 bits = BRx[19:20] = 01
|
||||||
* Use GPCM = BRx[24:26] = 000
|
* Use GPCM = BRx[24:26] = 000
|
||||||
* Valid = BRx[31] = 1
|
* Valid = BRx[31] = 1
|
||||||
*
|
*
|
||||||
* 0 4 8 12 16 20 24 28
|
* BR0_64M:
|
||||||
* 1111 1111 1000 0000 0000 1000 0000 0001 = ff800801 BR0
|
* Base address 0 = 0xfc00_0000 = BR0[0:16] = 1111 1100 0000 0000 0
|
||||||
*
|
|
||||||
* BR6:
|
|
||||||
* Base address 6 = 0xfb80_0000 = BR6[0:16] = 1111 1011 1000 0000 0
|
|
||||||
* Port Size = 32 bits = BRx[19:20] = 11
|
* Port Size = 32 bits = BRx[19:20] = 11
|
||||||
|
*
|
||||||
|
* 0 4 8 12 16 20 24 28
|
||||||
|
* 1111 1111 1000 0000 0000 1000 0000 0001 = ff800801 BR0_8M
|
||||||
|
* 1111 1100 0000 0000 0001 1000 0000 0001 = fc001801 BR0_64M
|
||||||
|
*/
|
||||||
|
#define CONFIG_SYS_BR0_8M 0xff800801
|
||||||
|
#define CONFIG_SYS_BR0_64M 0xfc001801
|
||||||
|
|
||||||
|
/*
|
||||||
|
* BR6_8M:
|
||||||
|
* Base address 6 = 0xef80_0000 = BR6[0:16] = 1110 1111 1000 0000 0
|
||||||
|
* Port Size = 8 bits = BRx[19:20] = 01
|
||||||
* Use GPCM = BRx[24:26] = 000
|
* Use GPCM = BRx[24:26] = 000
|
||||||
* Valid = BRx[31] = 1
|
* Valid = BRx[31] = 1
|
||||||
|
|
||||||
|
* BR6_64M:
|
||||||
|
* Base address 6 = 0xec00_0000 = BR6[0:16] = 1110 1100 0000 0000 0
|
||||||
|
* Port Size = 32 bits = BRx[19:20] = 11
|
||||||
*
|
*
|
||||||
* 0 4 8 12 16 20 24 28
|
* 0 4 8 12 16 20 24 28
|
||||||
* 1111 1011 1000 0000 0001 1000 0000 0001 = fb801801 BR6
|
* 1110 1111 1000 0000 0000 1000 0000 0001 = ef800801 BR6_8M
|
||||||
*
|
* 1110 1100 0000 0000 0001 1000 0000 0001 = ec001801 BR6_64M
|
||||||
* OR0:
|
*/
|
||||||
|
#define CONFIG_SYS_BR6_8M 0xef800801
|
||||||
|
#define CONFIG_SYS_BR6_64M 0xec001801
|
||||||
|
|
||||||
|
/*
|
||||||
|
* OR0_8M:
|
||||||
* Addr Mask = 8M = OR1[0:16] = 1111 1111 1000 0000 0
|
* Addr Mask = 8M = OR1[0:16] = 1111 1111 1000 0000 0
|
||||||
* XAM = OR0[17:18] = 11
|
* XAM = OR0[17:18] = 11
|
||||||
* CSNT = OR0[20] = 1
|
* CSNT = OR0[20] = 1
|
||||||
|
@ -169,11 +219,20 @@
|
||||||
* TRLX = use relaxed timing = OR0[29] = 1
|
* TRLX = use relaxed timing = OR0[29] = 1
|
||||||
* EAD = use external address latch delay = OR0[31] = 1
|
* EAD = use external address latch delay = OR0[31] = 1
|
||||||
*
|
*
|
||||||
* 0 4 8 12 16 20 24 28
|
* OR0_64M:
|
||||||
* 1111 1111 1000 0000 0110 1110 0110 0101 = ff806e65 OR0
|
* Addr Mask = 64M = OR1[0:16] = 1111 1100 0000 0000 0
|
||||||
*
|
*
|
||||||
* OR6:
|
*
|
||||||
* Addr Mask = 64M = OR6[0:16] = 1111 1000 0000 0000 0
|
* 0 4 8 12 16 20 24 28
|
||||||
|
* 1111 1111 1000 0000 0110 1110 0110 0101 = ff806e65 OR0_8M
|
||||||
|
* 1111 1100 0000 0000 0110 1110 0110 0101 = fc006e65 OR0_64M
|
||||||
|
*/
|
||||||
|
#define CONFIG_SYS_OR0_8M 0xff806e65
|
||||||
|
#define CONFIG_SYS_OR0_64M 0xfc006e65
|
||||||
|
|
||||||
|
/*
|
||||||
|
* OR6_8M:
|
||||||
|
* Addr Mask = 8M = OR6[0:16] = 1111 1111 1000 0000 0
|
||||||
* XAM = OR6[17:18] = 11
|
* XAM = OR6[17:18] = 11
|
||||||
* CSNT = OR6[20] = 1
|
* CSNT = OR6[20] = 1
|
||||||
* ACS = half cycle delay = OR6[21:22] = 11
|
* ACS = half cycle delay = OR6[21:22] = 11
|
||||||
|
@ -181,20 +240,37 @@
|
||||||
* TRLX = use relaxed timing = OR6[29] = 1
|
* TRLX = use relaxed timing = OR6[29] = 1
|
||||||
* EAD = use external address latch delay = OR6[31] = 1
|
* EAD = use external address latch delay = OR6[31] = 1
|
||||||
*
|
*
|
||||||
|
* OR6_64M:
|
||||||
|
* Addr Mask = 64M = OR6[0:16] = 1111 1100 0000 0000 0
|
||||||
|
*
|
||||||
* 0 4 8 12 16 20 24 28
|
* 0 4 8 12 16 20 24 28
|
||||||
* 1111 1000 0000 0000 0110 1110 0110 0101 = f8006e65 OR6
|
* 1111 1111 1000 0000 0110 1110 0110 0101 = ff806e65 OR6_8M
|
||||||
|
* 1111 1100 0000 0000 0110 1110 0110 0101 = fc006e65 OR6_64M
|
||||||
*/
|
*/
|
||||||
|
#define CONFIG_SYS_OR6_8M 0xff806e65
|
||||||
|
#define CONFIG_SYS_OR6_64M 0xfc006e65
|
||||||
|
|
||||||
|
#ifndef CONFIG_SYS_ALT_BOOT /* JP12 in default position */
|
||||||
#define CONFIG_SYS_BOOT_BLOCK 0xff800000 /* start of 8MB Flash */
|
#define CONFIG_SYS_BOOT_BLOCK 0xff800000 /* start of 8MB Flash */
|
||||||
#define CONFIG_SYS_ALT_FLASH 0xfb800000 /* 64MB "user" flash */
|
#define CONFIG_SYS_ALT_FLASH 0xec000000 /* 64MB "user" flash */
|
||||||
#define CONFIG_SYS_FLASH_BASE CONFIG_SYS_BOOT_BLOCK /* start of FLASH 16M */
|
|
||||||
|
|
||||||
#define CONFIG_SYS_BR0_PRELIM 0xff800801
|
#define CONFIG_SYS_BR0_PRELIM CONFIG_SYS_BR0_8M
|
||||||
#define CONFIG_SYS_BR6_PRELIM 0xfb801801
|
#define CONFIG_SYS_OR0_PRELIM CONFIG_SYS_OR0_8M
|
||||||
|
|
||||||
#define CONFIG_SYS_OR0_PRELIM 0xff806e65
|
#define CONFIG_SYS_BR6_PRELIM CONFIG_SYS_BR6_64M
|
||||||
#define CONFIG_SYS_OR6_PRELIM 0xf8006e65
|
#define CONFIG_SYS_OR6_PRELIM CONFIG_SYS_OR6_64M
|
||||||
|
#else /* JP12 in alternate position */
|
||||||
|
#define CONFIG_SYS_BOOT_BLOCK 0xfc000000 /* start 64MB Flash */
|
||||||
|
#define CONFIG_SYS_ALT_FLASH 0xef800000 /* 8MB soldered flash */
|
||||||
|
|
||||||
|
#define CONFIG_SYS_BR0_PRELIM CONFIG_SYS_BR0_64M
|
||||||
|
#define CONFIG_SYS_OR0_PRELIM CONFIG_SYS_OR0_64M
|
||||||
|
|
||||||
|
#define CONFIG_SYS_BR6_PRELIM CONFIG_SYS_BR6_8M
|
||||||
|
#define CONFIG_SYS_OR6_PRELIM CONFIG_SYS_OR6_8M
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define CONFIG_SYS_FLASH_BASE CONFIG_SYS_BOOT_BLOCK
|
||||||
#define CONFIG_SYS_FLASH_BANKS_LIST {CONFIG_SYS_FLASH_BASE, \
|
#define CONFIG_SYS_FLASH_BANKS_LIST {CONFIG_SYS_FLASH_BASE, \
|
||||||
CONFIG_SYS_ALT_FLASH}
|
CONFIG_SYS_ALT_FLASH}
|
||||||
#define CONFIG_SYS_MAX_FLASH_BANKS 2 /* number of banks */
|
#define CONFIG_SYS_MAX_FLASH_BANKS 2 /* number of banks */
|
||||||
|
@ -221,6 +297,10 @@
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SDRAM on the Local Bus (CS3 and CS4)
|
* SDRAM on the Local Bus (CS3 and CS4)
|
||||||
|
* Note that most boards have a hardware errata where both the
|
||||||
|
* LBC SDRAM and the DDR2 SDRAM decode at 0x51, making it impossible
|
||||||
|
* to use CONFIG_DDR_SPD unless you physically remove the LBC DIMM.
|
||||||
|
* A hardware workaround is also available, see README.sbc8548 file.
|
||||||
*/
|
*/
|
||||||
#define CONFIG_SYS_LBC_SDRAM_BASE 0xf0000000 /* Localbus SDRAM */
|
#define CONFIG_SYS_LBC_SDRAM_BASE 0xf0000000 /* Localbus SDRAM */
|
||||||
#define CONFIG_SYS_LBC_SDRAM_SIZE 128 /* LBC SDRAM is 128MB */
|
#define CONFIG_SYS_LBC_SDRAM_SIZE 128 /* LBC SDRAM is 128MB */
|
||||||
|
@ -300,19 +380,26 @@
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Common settings for all Local Bus SDRAM commands.
|
* Common settings for all Local Bus SDRAM commands.
|
||||||
* At run time, either BSMA1516 (for CPU 1.1)
|
|
||||||
* or BSMA1617 (for CPU 1.0) (old)
|
|
||||||
* is OR'ed in too.
|
|
||||||
*/
|
*/
|
||||||
#define CONFIG_SYS_LBC_LSDMR_COMMON ( LSDMR_RFCR16 \
|
#define CONFIG_SYS_LBC_LSDMR_COMMON ( LSDMR_RFCR16 \
|
||||||
| LSDMR_PRETOACT7 \
|
| LSDMR_BSMA1516 \
|
||||||
| LSDMR_ACTTORW7 \
|
| LSDMR_PRETOACT3 \
|
||||||
|
| LSDMR_ACTTORW3 \
|
||||||
|
| LSDMR_BUFCMD \
|
||||||
| LSDMR_BL8 \
|
| LSDMR_BL8 \
|
||||||
| LSDMR_WRC4 \
|
| LSDMR_WRC2 \
|
||||||
| LSDMR_CL3 \
|
| LSDMR_CL3 \
|
||||||
| LSDMR_RFEN \
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
#define CONFIG_SYS_LBC_LSDMR_PCHALL \
|
||||||
|
(CONFIG_SYS_LBC_LSDMR_COMMON | LSDMR_OP_PCHALL)
|
||||||
|
#define CONFIG_SYS_LBC_LSDMR_ARFRSH \
|
||||||
|
(CONFIG_SYS_LBC_LSDMR_COMMON | LSDMR_OP_ARFRSH)
|
||||||
|
#define CONFIG_SYS_LBC_LSDMR_MRW \
|
||||||
|
(CONFIG_SYS_LBC_LSDMR_COMMON | LSDMR_OP_MRW)
|
||||||
|
#define CONFIG_SYS_LBC_LSDMR_RFEN \
|
||||||
|
(CONFIG_SYS_LBC_LSDMR_COMMON | LSDMR_RFEN)
|
||||||
|
|
||||||
#define CONFIG_SYS_INIT_RAM_LOCK 1
|
#define CONFIG_SYS_INIT_RAM_LOCK 1
|
||||||
#define CONFIG_SYS_INIT_RAM_ADDR 0xe4010000 /* Initial RAM address */
|
#define CONFIG_SYS_INIT_RAM_ADDR 0xe4010000 /* Initial RAM address */
|
||||||
#define CONFIG_SYS_INIT_RAM_SIZE 0x4000 /* Size of used area in RAM */
|
#define CONFIG_SYS_INIT_RAM_SIZE 0x4000 /* Size of used area in RAM */
|
||||||
|
@ -330,7 +417,7 @@
|
||||||
* thing for MONITOR_LEN in both cases.
|
* thing for MONITOR_LEN in both cases.
|
||||||
*/
|
*/
|
||||||
#define CONFIG_SYS_MONITOR_LEN (~CONFIG_SYS_TEXT_BASE + 1)
|
#define CONFIG_SYS_MONITOR_LEN (~CONFIG_SYS_TEXT_BASE + 1)
|
||||||
#define CONFIG_SYS_MALLOC_LEN (128 * 1024) /* Reserved for malloc */
|
#define CONFIG_SYS_MALLOC_LEN (1024 * 1024) /* Reserved for malloc */
|
||||||
|
|
||||||
/* Serial Port */
|
/* Serial Port */
|
||||||
#define CONFIG_CONS_INDEX 1
|
#define CONFIG_CONS_INDEX 1
|
||||||
|
|
Loading…
Add table
Reference in a new issue