2006-04-26 22:58:56 +00:00
|
|
|
/*
|
2010-03-29 17:51:07 +00:00
|
|
|
* Copyright 2006,2009-2010 Freescale Semiconductor, Inc.
|
2006-05-31 17:44:44 +00:00
|
|
|
* Jeff Brown
|
2006-04-26 22:58:56 +00:00
|
|
|
* Srikanth Srinivasan (srikanth.srinivasan@freescale.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 <watchdog.h>
|
|
|
|
#include <command.h>
|
|
|
|
#include <asm/cache.h>
|
2008-05-09 00:02:51 +00:00
|
|
|
#include <asm/mmu.h>
|
2006-04-26 22:58:56 +00:00
|
|
|
#include <mpc86xx.h>
|
2008-01-23 22:31:06 +00:00
|
|
|
#include <asm/fsl_law.h>
|
2006-04-26 22:58:56 +00:00
|
|
|
|
2009-07-31 06:38:14 +00:00
|
|
|
DECLARE_GLOBAL_DATA_PTR;
|
|
|
|
|
2009-02-05 17:25:25 +00:00
|
|
|
/*
|
|
|
|
* Default board reset function
|
|
|
|
*/
|
|
|
|
static void
|
|
|
|
__board_reset(void)
|
|
|
|
{
|
|
|
|
/* Do nothing */
|
|
|
|
}
|
2009-04-20 16:08:46 +00:00
|
|
|
void board_reset(void) __attribute__((weak, alias("__board_reset")));
|
2009-02-05 17:25:25 +00:00
|
|
|
|
|
|
|
|
2006-08-22 17:06:18 +00:00
|
|
|
int
|
|
|
|
checkcpu(void)
|
2006-04-26 22:58:56 +00:00
|
|
|
{
|
|
|
|
sys_info_t sysinfo;
|
|
|
|
uint pvr, svr;
|
|
|
|
uint major, minor;
|
86xx: Update CPU info output on bootup
- Update style of 86xx CPU information on boot to more closely
match 85xx boards
- Fix detection of 8641/8641D
- Use strmhz() to display frequencies
- Display L1 information
- Display L2 cache size
- Fixed CPU/SVR version output
== Before ==
Freescale PowerPC
CPU:
Core: E600 Core 0, Version: 0.2, (0x80040202)
System: Unknown, Version: 2.1, (0x80900121)
Clocks: CPU:1066 MHz, MPX: 533 MHz, DDR: 266 MHz, LBC: 133 MHz
L2: Enabled
Board: X-ES XPedite5170 3U VPX SBC
== After ==
CPU: 8641D, Version: 2.1, (0x80900121)
Core: E600 Core 0, Version: 2.2, (0x80040202)
Clock Configuration:
CPU:1066.667 MHz, MPX:533.333 MHz
DDR:266.667 MHz (533.333 MT/s data rate), LBC:133.333 MHz
L1: D-cache 32 KB enabled
I-cache 32 KB enabled
L2: 512 KB enabled
Board: X-ES XPedite5170 3U VPX SBC
Signed-off-by: Peter Tyser <ptyser@xes-inc.com>
2009-02-06 20:30:40 +00:00
|
|
|
char buf1[32], buf2[32];
|
2008-10-16 13:01:15 +00:00
|
|
|
volatile immap_t *immap = (immap_t *) CONFIG_SYS_IMMR;
|
2007-10-16 20:26:51 +00:00
|
|
|
volatile ccsr_gur_t *gur = &immap->im_gur;
|
2009-06-18 13:23:01 +00:00
|
|
|
struct cpu_type *cpu;
|
86xx: Update CPU info output on bootup
- Update style of 86xx CPU information on boot to more closely
match 85xx boards
- Fix detection of 8641/8641D
- Use strmhz() to display frequencies
- Display L1 information
- Display L2 cache size
- Fixed CPU/SVR version output
== Before ==
Freescale PowerPC
CPU:
Core: E600 Core 0, Version: 0.2, (0x80040202)
System: Unknown, Version: 2.1, (0x80900121)
Clocks: CPU:1066 MHz, MPX: 533 MHz, DDR: 266 MHz, LBC: 133 MHz
L2: Enabled
Board: X-ES XPedite5170 3U VPX SBC
== After ==
CPU: 8641D, Version: 2.1, (0x80900121)
Core: E600 Core 0, Version: 2.2, (0x80040202)
Clock Configuration:
CPU:1066.667 MHz, MPX:533.333 MHz
DDR:266.667 MHz (533.333 MT/s data rate), LBC:133.333 MHz
L1: D-cache 32 KB enabled
I-cache 32 KB enabled
L2: 512 KB enabled
Board: X-ES XPedite5170 3U VPX SBC
Signed-off-by: Peter Tyser <ptyser@xes-inc.com>
2009-02-06 20:30:40 +00:00
|
|
|
uint msscr0 = mfspr(MSSCR0);
|
2006-04-26 22:58:56 +00:00
|
|
|
|
|
|
|
svr = get_svr();
|
|
|
|
major = SVR_MAJ(svr);
|
|
|
|
minor = SVR_MIN(svr);
|
|
|
|
|
2009-09-03 14:12:40 +00:00
|
|
|
if (cpu_numcores() > 1) {
|
|
|
|
#ifndef CONFIG_MP
|
|
|
|
puts("Unicore software on multiprocessor system!!\n"
|
|
|
|
"To enable mutlticore build define CONFIG_MP\n");
|
|
|
|
#endif
|
|
|
|
}
|
86xx: Update CPU info output on bootup
- Update style of 86xx CPU information on boot to more closely
match 85xx boards
- Fix detection of 8641/8641D
- Use strmhz() to display frequencies
- Display L1 information
- Display L2 cache size
- Fixed CPU/SVR version output
== Before ==
Freescale PowerPC
CPU:
Core: E600 Core 0, Version: 0.2, (0x80040202)
System: Unknown, Version: 2.1, (0x80900121)
Clocks: CPU:1066 MHz, MPX: 533 MHz, DDR: 266 MHz, LBC: 133 MHz
L2: Enabled
Board: X-ES XPedite5170 3U VPX SBC
== After ==
CPU: 8641D, Version: 2.1, (0x80900121)
Core: E600 Core 0, Version: 2.2, (0x80040202)
Clock Configuration:
CPU:1066.667 MHz, MPX:533.333 MHz
DDR:266.667 MHz (533.333 MT/s data rate), LBC:133.333 MHz
L1: D-cache 32 KB enabled
I-cache 32 KB enabled
L2: 512 KB enabled
Board: X-ES XPedite5170 3U VPX SBC
Signed-off-by: Peter Tyser <ptyser@xes-inc.com>
2009-02-06 20:30:40 +00:00
|
|
|
puts("CPU: ");
|
|
|
|
|
2012-12-13 20:48:48 +00:00
|
|
|
cpu = gd->arch.cpu;
|
2009-07-31 06:38:14 +00:00
|
|
|
|
2009-09-02 08:05:21 +00:00
|
|
|
puts(cpu->name);
|
2009-06-18 13:23:01 +00:00
|
|
|
|
2006-04-26 22:58:56 +00:00
|
|
|
printf(", Version: %d.%d, (0x%08x)\n", major, minor, svr);
|
86xx: Update CPU info output on bootup
- Update style of 86xx CPU information on boot to more closely
match 85xx boards
- Fix detection of 8641/8641D
- Use strmhz() to display frequencies
- Display L1 information
- Display L2 cache size
- Fixed CPU/SVR version output
== Before ==
Freescale PowerPC
CPU:
Core: E600 Core 0, Version: 0.2, (0x80040202)
System: Unknown, Version: 2.1, (0x80900121)
Clocks: CPU:1066 MHz, MPX: 533 MHz, DDR: 266 MHz, LBC: 133 MHz
L2: Enabled
Board: X-ES XPedite5170 3U VPX SBC
== After ==
CPU: 8641D, Version: 2.1, (0x80900121)
Core: E600 Core 0, Version: 2.2, (0x80040202)
Clock Configuration:
CPU:1066.667 MHz, MPX:533.333 MHz
DDR:266.667 MHz (533.333 MT/s data rate), LBC:133.333 MHz
L1: D-cache 32 KB enabled
I-cache 32 KB enabled
L2: 512 KB enabled
Board: X-ES XPedite5170 3U VPX SBC
Signed-off-by: Peter Tyser <ptyser@xes-inc.com>
2009-02-06 20:30:40 +00:00
|
|
|
puts("Core: ");
|
|
|
|
|
|
|
|
pvr = get_pvr();
|
|
|
|
major = PVR_E600_MAJ(pvr);
|
|
|
|
minor = PVR_E600_MIN(pvr);
|
|
|
|
|
2013-04-21 16:11:02 +00:00
|
|
|
printf("e600 Core %d", (msscr0 & 0x20) ? 1 : 0);
|
86xx: Update CPU info output on bootup
- Update style of 86xx CPU information on boot to more closely
match 85xx boards
- Fix detection of 8641/8641D
- Use strmhz() to display frequencies
- Display L1 information
- Display L2 cache size
- Fixed CPU/SVR version output
== Before ==
Freescale PowerPC
CPU:
Core: E600 Core 0, Version: 0.2, (0x80040202)
System: Unknown, Version: 2.1, (0x80900121)
Clocks: CPU:1066 MHz, MPX: 533 MHz, DDR: 266 MHz, LBC: 133 MHz
L2: Enabled
Board: X-ES XPedite5170 3U VPX SBC
== After ==
CPU: 8641D, Version: 2.1, (0x80900121)
Core: E600 Core 0, Version: 2.2, (0x80040202)
Clock Configuration:
CPU:1066.667 MHz, MPX:533.333 MHz
DDR:266.667 MHz (533.333 MT/s data rate), LBC:133.333 MHz
L1: D-cache 32 KB enabled
I-cache 32 KB enabled
L2: 512 KB enabled
Board: X-ES XPedite5170 3U VPX SBC
Signed-off-by: Peter Tyser <ptyser@xes-inc.com>
2009-02-06 20:30:40 +00:00
|
|
|
if (gur->pordevsr & MPC86xx_PORDEVSR_CORE1TE)
|
|
|
|
puts("\n Core1Translation Enabled");
|
|
|
|
debug(" (MSSCR0=%x, PORDEVSR=%x)", msscr0, gur->pordevsr);
|
|
|
|
|
|
|
|
printf(", Version: %d.%d, (0x%08x)\n", major, minor, pvr);
|
2006-04-26 22:58:56 +00:00
|
|
|
|
|
|
|
get_sys_info(&sysinfo);
|
|
|
|
|
86xx: Update CPU info output on bootup
- Update style of 86xx CPU information on boot to more closely
match 85xx boards
- Fix detection of 8641/8641D
- Use strmhz() to display frequencies
- Display L1 information
- Display L2 cache size
- Fixed CPU/SVR version output
== Before ==
Freescale PowerPC
CPU:
Core: E600 Core 0, Version: 0.2, (0x80040202)
System: Unknown, Version: 2.1, (0x80900121)
Clocks: CPU:1066 MHz, MPX: 533 MHz, DDR: 266 MHz, LBC: 133 MHz
L2: Enabled
Board: X-ES XPedite5170 3U VPX SBC
== After ==
CPU: 8641D, Version: 2.1, (0x80900121)
Core: E600 Core 0, Version: 2.2, (0x80040202)
Clock Configuration:
CPU:1066.667 MHz, MPX:533.333 MHz
DDR:266.667 MHz (533.333 MT/s data rate), LBC:133.333 MHz
L1: D-cache 32 KB enabled
I-cache 32 KB enabled
L2: 512 KB enabled
Board: X-ES XPedite5170 3U VPX SBC
Signed-off-by: Peter Tyser <ptyser@xes-inc.com>
2009-02-06 20:30:40 +00:00
|
|
|
puts("Clock Configuration:\n");
|
|
|
|
printf(" CPU:%-4s MHz, ", strmhz(buf1, sysinfo.freqProcessor));
|
|
|
|
printf("MPX:%-4s MHz\n", strmhz(buf1, sysinfo.freqSystemBus));
|
|
|
|
printf(" DDR:%-4s MHz (%s MT/s data rate), ",
|
|
|
|
strmhz(buf1, sysinfo.freqSystemBus / 2),
|
|
|
|
strmhz(buf2, sysinfo.freqSystemBus));
|
2006-04-27 15:15:16 +00:00
|
|
|
|
mpc8[56]xx: Put localbus clock in sysinfo and gd
Currently MPC85xx and MPC86xx boards just calculate the localbus frequency
and print it out, but don't save it.
This changes where its calculated and stored to be more consistent with the
CPU, CCB, TB, and DDR frequencies and the MPC83xx localbus clock.
The localbus frequency is added to sysinfo and calculated when sysinfo is
set up, in cpu/mpc8[56]xx/speed.c, the same as the other frequencies are.
get_clocks() copies the frequency into the global data, as the other
frequencies are, into a new field that is only enabled for MPC85xx and
MPC86xx.
checkcpu() in cpu/mpc8[56]xx/cpu.c will print out the local bus frequency
from sysinfo, like the other frequencies, instead of calculating it on the
spot.
Signed-off-by: Trent Piepho <tpiepho@freescale.com>
Acked-by: Kumar Gala <galak@kernel.crashing.org>
Acked-by: Jon Loeliger <jdl@freescale.com>
2008-12-03 23:16:37 +00:00
|
|
|
if (sysinfo.freqLocalBus > LCRR_CLKDIV) {
|
86xx: Update CPU info output on bootup
- Update style of 86xx CPU information on boot to more closely
match 85xx boards
- Fix detection of 8641/8641D
- Use strmhz() to display frequencies
- Display L1 information
- Display L2 cache size
- Fixed CPU/SVR version output
== Before ==
Freescale PowerPC
CPU:
Core: E600 Core 0, Version: 0.2, (0x80040202)
System: Unknown, Version: 2.1, (0x80900121)
Clocks: CPU:1066 MHz, MPX: 533 MHz, DDR: 266 MHz, LBC: 133 MHz
L2: Enabled
Board: X-ES XPedite5170 3U VPX SBC
== After ==
CPU: 8641D, Version: 2.1, (0x80900121)
Core: E600 Core 0, Version: 2.2, (0x80040202)
Clock Configuration:
CPU:1066.667 MHz, MPX:533.333 MHz
DDR:266.667 MHz (533.333 MT/s data rate), LBC:133.333 MHz
L1: D-cache 32 KB enabled
I-cache 32 KB enabled
L2: 512 KB enabled
Board: X-ES XPedite5170 3U VPX SBC
Signed-off-by: Peter Tyser <ptyser@xes-inc.com>
2009-02-06 20:30:40 +00:00
|
|
|
printf("LBC:%-4s MHz\n", strmhz(buf1, sysinfo.freqLocalBus));
|
2006-04-26 22:58:56 +00:00
|
|
|
} else {
|
2009-01-12 13:50:35 +00:00
|
|
|
printf("LBC: unknown (LCRR[CLKDIV] = 0x%02lx)\n",
|
mpc8[56]xx: Put localbus clock in sysinfo and gd
Currently MPC85xx and MPC86xx boards just calculate the localbus frequency
and print it out, but don't save it.
This changes where its calculated and stored to be more consistent with the
CPU, CCB, TB, and DDR frequencies and the MPC83xx localbus clock.
The localbus frequency is added to sysinfo and calculated when sysinfo is
set up, in cpu/mpc8[56]xx/speed.c, the same as the other frequencies are.
get_clocks() copies the frequency into the global data, as the other
frequencies are, into a new field that is only enabled for MPC85xx and
MPC86xx.
checkcpu() in cpu/mpc8[56]xx/cpu.c will print out the local bus frequency
from sysinfo, like the other frequencies, instead of calculating it on the
spot.
Signed-off-by: Trent Piepho <tpiepho@freescale.com>
Acked-by: Kumar Gala <galak@kernel.crashing.org>
Acked-by: Jon Loeliger <jdl@freescale.com>
2008-12-03 23:16:37 +00:00
|
|
|
sysinfo.freqLocalBus);
|
2006-04-26 22:58:56 +00:00
|
|
|
}
|
|
|
|
|
86xx: Update CPU info output on bootup
- Update style of 86xx CPU information on boot to more closely
match 85xx boards
- Fix detection of 8641/8641D
- Use strmhz() to display frequencies
- Display L1 information
- Display L2 cache size
- Fixed CPU/SVR version output
== Before ==
Freescale PowerPC
CPU:
Core: E600 Core 0, Version: 0.2, (0x80040202)
System: Unknown, Version: 2.1, (0x80900121)
Clocks: CPU:1066 MHz, MPX: 533 MHz, DDR: 266 MHz, LBC: 133 MHz
L2: Enabled
Board: X-ES XPedite5170 3U VPX SBC
== After ==
CPU: 8641D, Version: 2.1, (0x80900121)
Core: E600 Core 0, Version: 2.2, (0x80040202)
Clock Configuration:
CPU:1066.667 MHz, MPX:533.333 MHz
DDR:266.667 MHz (533.333 MT/s data rate), LBC:133.333 MHz
L1: D-cache 32 KB enabled
I-cache 32 KB enabled
L2: 512 KB enabled
Board: X-ES XPedite5170 3U VPX SBC
Signed-off-by: Peter Tyser <ptyser@xes-inc.com>
2009-02-06 20:30:40 +00:00
|
|
|
puts("L1: D-cache 32 KB enabled\n");
|
|
|
|
puts(" I-cache 32 KB enabled\n");
|
|
|
|
|
|
|
|
puts("L2: ");
|
|
|
|
if (get_l2cr() & 0x80000000) {
|
|
|
|
#if defined(CONFIG_MPC8610)
|
|
|
|
puts("256");
|
|
|
|
#elif defined(CONFIG_MPC8641)
|
|
|
|
puts("512");
|
|
|
|
#endif
|
|
|
|
puts(" KB enabled\n");
|
|
|
|
} else {
|
2006-05-31 17:44:44 +00:00
|
|
|
puts("Disabled\n");
|
86xx: Update CPU info output on bootup
- Update style of 86xx CPU information on boot to more closely
match 85xx boards
- Fix detection of 8641/8641D
- Use strmhz() to display frequencies
- Display L1 information
- Display L2 cache size
- Fixed CPU/SVR version output
== Before ==
Freescale PowerPC
CPU:
Core: E600 Core 0, Version: 0.2, (0x80040202)
System: Unknown, Version: 2.1, (0x80900121)
Clocks: CPU:1066 MHz, MPX: 533 MHz, DDR: 266 MHz, LBC: 133 MHz
L2: Enabled
Board: X-ES XPedite5170 3U VPX SBC
== After ==
CPU: 8641D, Version: 2.1, (0x80900121)
Core: E600 Core 0, Version: 2.2, (0x80040202)
Clock Configuration:
CPU:1066.667 MHz, MPX:533.333 MHz
DDR:266.667 MHz (533.333 MT/s data rate), LBC:133.333 MHz
L1: D-cache 32 KB enabled
I-cache 32 KB enabled
L2: 512 KB enabled
Board: X-ES XPedite5170 3U VPX SBC
Signed-off-by: Peter Tyser <ptyser@xes-inc.com>
2009-02-06 20:30:40 +00:00
|
|
|
}
|
2006-04-27 15:15:16 +00:00
|
|
|
|
|
|
|
return 0;
|
2006-04-26 22:58:56 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2010-12-03 16:28:47 +00:00
|
|
|
int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
2006-04-26 22:58:56 +00:00
|
|
|
{
|
2009-02-05 17:25:25 +00:00
|
|
|
volatile immap_t *immap = (immap_t *)CONFIG_SYS_IMMR;
|
|
|
|
volatile ccsr_gur_t *gur = &immap->im_gur;
|
2006-04-27 15:15:16 +00:00
|
|
|
|
2009-02-05 17:25:25 +00:00
|
|
|
/* Attempt board-specific reset */
|
|
|
|
board_reset();
|
2006-04-27 15:15:16 +00:00
|
|
|
|
2009-02-05 17:25:25 +00:00
|
|
|
/* Next try asserting HRESET_REQ */
|
|
|
|
out_be32(&gur->rstcr, MPC86xx_RSTCR_HRST_REQ);
|
2006-04-27 15:15:16 +00:00
|
|
|
|
2009-02-05 17:25:25 +00:00
|
|
|
while (1)
|
|
|
|
;
|
2010-12-03 16:28:47 +00:00
|
|
|
|
|
|
|
return 1;
|
2006-04-26 22:58:56 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Get timebase clock frequency
|
|
|
|
*/
|
2006-08-22 17:06:18 +00:00
|
|
|
unsigned long
|
|
|
|
get_tbclk(void)
|
2006-04-26 22:58:56 +00:00
|
|
|
{
|
2006-08-22 17:06:18 +00:00
|
|
|
sys_info_t sys_info;
|
2006-04-26 22:58:56 +00:00
|
|
|
|
|
|
|
get_sys_info(&sys_info);
|
2006-04-27 15:15:16 +00:00
|
|
|
return (sys_info.freqSystemBus + 3L) / 4L;
|
2006-04-26 22:58:56 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#if defined(CONFIG_WATCHDOG)
|
|
|
|
void
|
|
|
|
watchdog_reset(void)
|
|
|
|
{
|
2008-05-13 03:50:36 +00:00
|
|
|
#if defined(CONFIG_MPC8610)
|
|
|
|
/*
|
|
|
|
* This actually feed the hard enabled watchdog.
|
|
|
|
*/
|
2008-10-16 13:01:15 +00:00
|
|
|
volatile immap_t *immap = (immap_t *)CONFIG_SYS_IMMR;
|
2008-05-13 03:50:36 +00:00
|
|
|
volatile ccsr_wdt_t *wdt = &immap->im_wdt;
|
|
|
|
volatile ccsr_gur_t *gur = &immap->im_gur;
|
|
|
|
u32 tmp = gur->pordevsr;
|
|
|
|
|
|
|
|
if (tmp & 0x4000) {
|
|
|
|
wdt->swsrr = 0x556c;
|
|
|
|
wdt->swsrr = 0xaa39;
|
|
|
|
}
|
|
|
|
#endif
|
2006-04-26 22:58:56 +00:00
|
|
|
}
|
|
|
|
#endif /* CONFIG_WATCHDOG */
|
|
|
|
|
2008-01-23 22:31:06 +00:00
|
|
|
/*
|
|
|
|
* Print out the state of various machine registers.
|
2008-05-09 00:02:51 +00:00
|
|
|
* Currently prints out LAWs, BR0/OR0, and BATs
|
2008-01-23 22:31:06 +00:00
|
|
|
*/
|
|
|
|
void mpc86xx_reginfo(void)
|
|
|
|
{
|
2008-05-09 00:02:51 +00:00
|
|
|
print_bats();
|
2008-01-23 22:31:06 +00:00
|
|
|
print_laws();
|
2010-06-17 16:37:20 +00:00
|
|
|
print_lbc_regs();
|
2006-04-26 22:58:56 +00:00
|
|
|
}
|
2010-03-29 17:51:07 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Set the DDR BATs to reflect the actual size of DDR.
|
|
|
|
*
|
|
|
|
* dram_size is the actual size of DDR, in bytes
|
|
|
|
*
|
|
|
|
* Note: we assume that CONFIG_MAX_MEM_MAPPED is 2G or smaller as we only
|
|
|
|
* are using a single BAT to cover DDR.
|
|
|
|
*
|
|
|
|
* If this is not true, (e.g. CONFIG_MAX_MEM_MAPPED is 2GB but HID0_XBSEN
|
|
|
|
* is not defined) then we might have a situation where U-Boot will attempt
|
|
|
|
* to relocated itself outside of the region mapped by DBAT0.
|
|
|
|
* This will cause a machine check.
|
|
|
|
*
|
|
|
|
* Currently we are limited to power of two sized DDR since we only use a
|
|
|
|
* single bat. If a non-power of two size is used that is less than
|
|
|
|
* CONFIG_MAX_MEM_MAPPED u-boot will crash.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
void setup_ddr_bat(phys_addr_t dram_size)
|
|
|
|
{
|
|
|
|
unsigned long batu, bl;
|
|
|
|
|
|
|
|
bl = TO_BATU_BL(min(dram_size, CONFIG_MAX_MEM_MAPPED));
|
|
|
|
|
|
|
|
if (BATU_SIZE(bl) != dram_size) {
|
|
|
|
u64 sz = (u64)dram_size - BATU_SIZE(bl);
|
|
|
|
print_size(sz, " left unmapped\n");
|
|
|
|
}
|
|
|
|
|
|
|
|
batu = bl | BATU_VS | BATU_VP;
|
|
|
|
write_bat(DBAT0, batu, CONFIG_SYS_DBAT0L);
|
|
|
|
write_bat(IBAT0, batu, CONFIG_SYS_IBAT0L);
|
|
|
|
}
|