mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-24 14:25:56 +00:00
Merge branch 'u-boot/master' into 'u-boot-arm/master'
Conflicts: drivers/video/exynos_fb.c
This commit is contained in:
commit
1812201997
270 changed files with 7074 additions and 2072 deletions
2
MAKEALL
2
MAKEALL
|
@ -664,7 +664,7 @@ build_target() {
|
||||||
export BUILD_DIR="${output_dir}"
|
export BUILD_DIR="${output_dir}"
|
||||||
|
|
||||||
target_arch=$(get_target_arch ${target})
|
target_arch=$(get_target_arch ${target})
|
||||||
eval cross_toolchain=\$CROSS_COMPILE_${target_arch^^}
|
eval cross_toolchain=\$CROSS_COMPILE_`echo $target_arch | tr '[:lower:]' '[:upper:]'`
|
||||||
if [ "${cross_toolchain}" ] ; then
|
if [ "${cross_toolchain}" ] ; then
|
||||||
MAKE="make CROSS_COMPILE=${cross_toolchain}"
|
MAKE="make CROSS_COMPILE=${cross_toolchain}"
|
||||||
elif [ "${CROSS_COMPILE}" ] ; then
|
elif [ "${CROSS_COMPILE}" ] ; then
|
||||||
|
|
6
Makefile
6
Makefile
|
@ -24,7 +24,7 @@
|
||||||
VERSION = 2013
|
VERSION = 2013
|
||||||
PATCHLEVEL = 04
|
PATCHLEVEL = 04
|
||||||
SUBLEVEL =
|
SUBLEVEL =
|
||||||
EXTRAVERSION = -rc1
|
EXTRAVERSION = -rc2
|
||||||
ifneq "$(SUBLEVEL)" ""
|
ifneq "$(SUBLEVEL)" ""
|
||||||
U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
|
U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
|
||||||
else
|
else
|
||||||
|
@ -402,8 +402,10 @@ ALL-y += $(obj)u-boot.srec $(obj)u-boot.bin $(obj)System.map
|
||||||
ALL-$(CONFIG_NAND_U_BOOT) += $(obj)u-boot-nand.bin
|
ALL-$(CONFIG_NAND_U_BOOT) += $(obj)u-boot-nand.bin
|
||||||
ALL-$(CONFIG_ONENAND_U_BOOT) += $(obj)u-boot-onenand.bin
|
ALL-$(CONFIG_ONENAND_U_BOOT) += $(obj)u-boot-onenand.bin
|
||||||
ALL-$(CONFIG_SPL) += $(obj)spl/u-boot-spl.bin
|
ALL-$(CONFIG_SPL) += $(obj)spl/u-boot-spl.bin
|
||||||
ALL-$(CONFIG_SPL) += $(obj)$(subst ",,$(CONFIG_SPL_TARGET))
|
|
||||||
ALL-$(CONFIG_OF_SEPARATE) += $(obj)u-boot.dtb $(obj)u-boot-dtb.bin
|
ALL-$(CONFIG_OF_SEPARATE) += $(obj)u-boot.dtb $(obj)u-boot-dtb.bin
|
||||||
|
ifneq ($(CONFIG_SPL_TARGET),)
|
||||||
|
ALL-$(CONFIG_SPL) += $(obj)$(subst ",,$(CONFIG_SPL_TARGET))
|
||||||
|
endif
|
||||||
|
|
||||||
# enable combined SPL/u-boot/dtb rules for tegra
|
# enable combined SPL/u-boot/dtb rules for tegra
|
||||||
ifneq ($(CONFIG_TEGRA),)
|
ifneq ($(CONFIG_TEGRA),)
|
||||||
|
|
95
README
95
README
|
@ -496,6 +496,13 @@ The following options need to be configured:
|
||||||
exists, unlike the similar options in the Linux kernel. Do not
|
exists, unlike the similar options in the Linux kernel. Do not
|
||||||
set these options unless they apply!
|
set these options unless they apply!
|
||||||
|
|
||||||
|
- CPU timer options:
|
||||||
|
CONFIG_SYS_HZ
|
||||||
|
|
||||||
|
The frequency of the timer returned by get_timer().
|
||||||
|
get_timer() must operate in milliseconds and this CONFIG
|
||||||
|
option must be set to 1000.
|
||||||
|
|
||||||
- Linux Kernel Interface:
|
- Linux Kernel Interface:
|
||||||
CONFIG_CLOCKS_IN_MHZ
|
CONFIG_CLOCKS_IN_MHZ
|
||||||
|
|
||||||
|
@ -1329,6 +1336,29 @@ The following options need to be configured:
|
||||||
CONFIG_SH_MMCIF_CLK
|
CONFIG_SH_MMCIF_CLK
|
||||||
Define the clock frequency for MMCIF
|
Define the clock frequency for MMCIF
|
||||||
|
|
||||||
|
- USB Device Firmware Update (DFU) class support:
|
||||||
|
CONFIG_DFU_FUNCTION
|
||||||
|
This enables the USB portion of the DFU USB class
|
||||||
|
|
||||||
|
CONFIG_CMD_DFU
|
||||||
|
This enables the command "dfu" which is used to have
|
||||||
|
U-Boot create a DFU class device via USB. This command
|
||||||
|
requires that the "dfu_alt_info" environment variable be
|
||||||
|
set and define the alt settings to expose to the host.
|
||||||
|
|
||||||
|
CONFIG_DFU_MMC
|
||||||
|
This enables support for exposing (e)MMC devices via DFU.
|
||||||
|
|
||||||
|
CONFIG_DFU_NAND
|
||||||
|
This enables support for exposing NAND devices via DFU.
|
||||||
|
|
||||||
|
CONFIG_SYS_DFU_MAX_FILE_SIZE
|
||||||
|
When updating files rather than the raw storage device,
|
||||||
|
we use a static buffer to copy the file into and then write
|
||||||
|
the buffer once we've been given the whole file. Define
|
||||||
|
this to the maximum filesize (in bytes) for the buffer.
|
||||||
|
Default is 4 MiB if undefined.
|
||||||
|
|
||||||
- Journaling Flash filesystem support:
|
- Journaling Flash filesystem support:
|
||||||
CONFIG_JFFS2_NAND, CONFIG_JFFS2_NAND_OFF, CONFIG_JFFS2_NAND_SIZE,
|
CONFIG_JFFS2_NAND, CONFIG_JFFS2_NAND_OFF, CONFIG_JFFS2_NAND_SIZE,
|
||||||
CONFIG_JFFS2_NAND_DEV
|
CONFIG_JFFS2_NAND_DEV
|
||||||
|
@ -1930,15 +1960,15 @@ CBFS (Coreboot Filesystem) support
|
||||||
|
|
||||||
I2C_READ
|
I2C_READ
|
||||||
|
|
||||||
Code that returns TRUE if the I2C data line is high,
|
Code that returns true if the I2C data line is high,
|
||||||
FALSE if it is low.
|
false if it is low.
|
||||||
|
|
||||||
eg: #define I2C_READ ((immr->im_cpm.cp_pbdat & PB_SDA) != 0)
|
eg: #define I2C_READ ((immr->im_cpm.cp_pbdat & PB_SDA) != 0)
|
||||||
|
|
||||||
I2C_SDA(bit)
|
I2C_SDA(bit)
|
||||||
|
|
||||||
If <bit> is TRUE, sets the I2C data line high. If it
|
If <bit> is true, sets the I2C data line high. If it
|
||||||
is FALSE, it clears it (low).
|
is false, it clears it (low).
|
||||||
|
|
||||||
eg: #define I2C_SDA(bit) \
|
eg: #define I2C_SDA(bit) \
|
||||||
if(bit) immr->im_cpm.cp_pbdat |= PB_SDA; \
|
if(bit) immr->im_cpm.cp_pbdat |= PB_SDA; \
|
||||||
|
@ -1946,8 +1976,8 @@ CBFS (Coreboot Filesystem) support
|
||||||
|
|
||||||
I2C_SCL(bit)
|
I2C_SCL(bit)
|
||||||
|
|
||||||
If <bit> is TRUE, sets the I2C clock line high. If it
|
If <bit> is true, sets the I2C clock line high. If it
|
||||||
is FALSE, it clears it (low).
|
is false, it clears it (low).
|
||||||
|
|
||||||
eg: #define I2C_SCL(bit) \
|
eg: #define I2C_SCL(bit) \
|
||||||
if(bit) immr->im_cpm.cp_pbdat |= PB_SCL; \
|
if(bit) immr->im_cpm.cp_pbdat |= PB_SCL; \
|
||||||
|
@ -2768,6 +2798,32 @@ FIT uImage format:
|
||||||
Adds the MTD partitioning infrastructure from the Linux
|
Adds the MTD partitioning infrastructure from the Linux
|
||||||
kernel. Needed for UBI support.
|
kernel. Needed for UBI support.
|
||||||
|
|
||||||
|
- UBI support
|
||||||
|
CONFIG_CMD_UBI
|
||||||
|
|
||||||
|
Adds commands for interacting with MTD partitions formatted
|
||||||
|
with the UBI flash translation layer
|
||||||
|
|
||||||
|
Requires also defining CONFIG_RBTREE
|
||||||
|
|
||||||
|
CONFIG_UBI_SILENCE_MSG
|
||||||
|
|
||||||
|
Make the verbose messages from UBI stop printing. This leaves
|
||||||
|
warnings and errors enabled.
|
||||||
|
|
||||||
|
- UBIFS support
|
||||||
|
CONFIG_CMD_UBIFS
|
||||||
|
|
||||||
|
Adds commands for interacting with UBI volumes formatted as
|
||||||
|
UBIFS. UBIFS is read-only in u-boot.
|
||||||
|
|
||||||
|
Requires UBI support as well as CONFIG_LZO
|
||||||
|
|
||||||
|
CONFIG_UBIFS_SILENCE_MSG
|
||||||
|
|
||||||
|
Make the verbose messages from UBIFS stop printing. This leaves
|
||||||
|
warnings and errors enabled.
|
||||||
|
|
||||||
- SPL framework
|
- SPL framework
|
||||||
CONFIG_SPL
|
CONFIG_SPL
|
||||||
Enable building of SPL globally.
|
Enable building of SPL globally.
|
||||||
|
@ -3487,6 +3543,33 @@ but it can not erase, write this NOR flash by SRIO or PCIE interface.
|
||||||
environment. If redundant environment is used, it will be copied to
|
environment. If redundant environment is used, it will be copied to
|
||||||
CONFIG_NAND_ENV_DST + CONFIG_ENV_SIZE.
|
CONFIG_NAND_ENV_DST + CONFIG_ENV_SIZE.
|
||||||
|
|
||||||
|
- CONFIG_ENV_IS_IN_UBI:
|
||||||
|
|
||||||
|
Define this if you have an UBI volume that you want to use for the
|
||||||
|
environment. This has the benefit of wear-leveling the environment
|
||||||
|
accesses, which is important on NAND.
|
||||||
|
|
||||||
|
- CONFIG_ENV_UBI_PART:
|
||||||
|
|
||||||
|
Define this to a string that is the mtd partition containing the UBI.
|
||||||
|
|
||||||
|
- CONFIG_ENV_UBI_VOLUME:
|
||||||
|
|
||||||
|
Define this to the name of the volume that you want to store the
|
||||||
|
environment in.
|
||||||
|
|
||||||
|
- CONFIG_ENV_UBI_VOLUME_REDUND:
|
||||||
|
|
||||||
|
Define this to the name of another volume to store a second copy of
|
||||||
|
the environment in. This will enable redundant environments in UBI.
|
||||||
|
It is assumed that both volumes are in the same MTD partition.
|
||||||
|
|
||||||
|
- CONFIG_UBI_SILENCE_MSG
|
||||||
|
- CONFIG_UBIFS_SILENCE_MSG
|
||||||
|
|
||||||
|
You will probably want to define these to avoid a really noisy system
|
||||||
|
when storing the env in UBI.
|
||||||
|
|
||||||
- CONFIG_SYS_SPI_INIT_OFFSET
|
- CONFIG_SYS_SPI_INIT_OFFSET
|
||||||
|
|
||||||
Defines offset to the initial SPI buffer area in DPRAM. The
|
Defines offset to the initial SPI buffer area in DPRAM. The
|
||||||
|
|
|
@ -45,8 +45,8 @@ int display_get_info(int type, struct display_info *di)
|
||||||
case DISPLAY_TYPE_LCD:
|
case DISPLAY_TYPE_LCD:
|
||||||
di->pixel_width = panel_info.vl_col;
|
di->pixel_width = panel_info.vl_col;
|
||||||
di->pixel_height = panel_info.vl_row;
|
di->pixel_height = panel_info.vl_row;
|
||||||
di->screen_rows = CONSOLE_ROWS;
|
di->screen_rows = lcd_get_screen_rows();
|
||||||
di->screen_cols = CONSOLE_COLS;
|
di->screen_cols = lcd_get_screen_columns();
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,9 +28,6 @@
|
||||||
#include <asm/arch/spr_misc.h>
|
#include <asm/arch/spr_misc.h>
|
||||||
#include <asm/arch/spr_defs.h>
|
#include <asm/arch/spr_defs.h>
|
||||||
|
|
||||||
#define FALSE 0
|
|
||||||
#define TRUE (!FALSE)
|
|
||||||
|
|
||||||
static void sel_1v8(void)
|
static void sel_1v8(void)
|
||||||
{
|
{
|
||||||
struct misc_regs *misc_p = (struct misc_regs *)CONFIG_SPEAR_MISCBASE;
|
struct misc_regs *misc_p = (struct misc_regs *)CONFIG_SPEAR_MISCBASE;
|
||||||
|
@ -133,8 +130,8 @@ void soc_init(void)
|
||||||
/*
|
/*
|
||||||
* xxx_boot_selected:
|
* xxx_boot_selected:
|
||||||
*
|
*
|
||||||
* return TRUE if the particular booting option is selected
|
* return true if the particular booting option is selected
|
||||||
* return FALSE otherwise
|
* return false otherwise
|
||||||
*/
|
*/
|
||||||
static u32 read_bootstrap(void)
|
static u32 read_bootstrap(void)
|
||||||
{
|
{
|
||||||
|
@ -150,18 +147,18 @@ int snor_boot_selected(void)
|
||||||
/* Check whether SNOR boot is selected */
|
/* Check whether SNOR boot is selected */
|
||||||
if ((bootstrap & CONFIG_SPEAR_ONLYSNORBOOT) ==
|
if ((bootstrap & CONFIG_SPEAR_ONLYSNORBOOT) ==
|
||||||
CONFIG_SPEAR_ONLYSNORBOOT)
|
CONFIG_SPEAR_ONLYSNORBOOT)
|
||||||
return TRUE;
|
return true;
|
||||||
|
|
||||||
if ((bootstrap & CONFIG_SPEAR_NORNANDBOOT) ==
|
if ((bootstrap & CONFIG_SPEAR_NORNANDBOOT) ==
|
||||||
CONFIG_SPEAR_NORNAND8BOOT)
|
CONFIG_SPEAR_NORNAND8BOOT)
|
||||||
return TRUE;
|
return true;
|
||||||
|
|
||||||
if ((bootstrap & CONFIG_SPEAR_NORNANDBOOT) ==
|
if ((bootstrap & CONFIG_SPEAR_NORNANDBOOT) ==
|
||||||
CONFIG_SPEAR_NORNAND16BOOT)
|
CONFIG_SPEAR_NORNAND16BOOT)
|
||||||
return TRUE;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
int nand_boot_selected(void)
|
int nand_boot_selected(void)
|
||||||
|
@ -172,20 +169,20 @@ int nand_boot_selected(void)
|
||||||
/* Check whether NAND boot is selected */
|
/* Check whether NAND boot is selected */
|
||||||
if ((bootstrap & CONFIG_SPEAR_NORNANDBOOT) ==
|
if ((bootstrap & CONFIG_SPEAR_NORNANDBOOT) ==
|
||||||
CONFIG_SPEAR_NORNAND8BOOT)
|
CONFIG_SPEAR_NORNAND8BOOT)
|
||||||
return TRUE;
|
return true;
|
||||||
|
|
||||||
if ((bootstrap & CONFIG_SPEAR_NORNANDBOOT) ==
|
if ((bootstrap & CONFIG_SPEAR_NORNANDBOOT) ==
|
||||||
CONFIG_SPEAR_NORNAND16BOOT)
|
CONFIG_SPEAR_NORNAND16BOOT)
|
||||||
return TRUE;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
int pnor_boot_selected(void)
|
int pnor_boot_selected(void)
|
||||||
{
|
{
|
||||||
/* Parallel NOR boot is not selected in any SPEAr600 revision */
|
/* Parallel NOR boot is not selected in any SPEAr600 revision */
|
||||||
return FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
int usb_boot_selected(void)
|
int usb_boot_selected(void)
|
||||||
|
@ -195,39 +192,39 @@ int usb_boot_selected(void)
|
||||||
if (USB_BOOT_SUPPORTED) {
|
if (USB_BOOT_SUPPORTED) {
|
||||||
/* Check whether USB boot is selected */
|
/* Check whether USB boot is selected */
|
||||||
if (!(bootstrap & CONFIG_SPEAR_USBBOOT))
|
if (!(bootstrap & CONFIG_SPEAR_USBBOOT))
|
||||||
return TRUE;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
int tftp_boot_selected(void)
|
int tftp_boot_selected(void)
|
||||||
{
|
{
|
||||||
/* TFTP boot is not selected in any SPEAr600 revision */
|
/* TFTP boot is not selected in any SPEAr600 revision */
|
||||||
return FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
int uart_boot_selected(void)
|
int uart_boot_selected(void)
|
||||||
{
|
{
|
||||||
/* UART boot is not selected in any SPEAr600 revision */
|
/* UART boot is not selected in any SPEAr600 revision */
|
||||||
return FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
int spi_boot_selected(void)
|
int spi_boot_selected(void)
|
||||||
{
|
{
|
||||||
/* SPI boot is not selected in any SPEAr600 revision */
|
/* SPI boot is not selected in any SPEAr600 revision */
|
||||||
return FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
int i2c_boot_selected(void)
|
int i2c_boot_selected(void)
|
||||||
{
|
{
|
||||||
/* I2C boot is not selected in any SPEAr600 revision */
|
/* I2C boot is not selected in any SPEAr600 revision */
|
||||||
return FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
int mmc_boot_selected(void)
|
int mmc_boot_selected(void)
|
||||||
{
|
{
|
||||||
return FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void plat_late_init(void)
|
void plat_late_init(void)
|
||||||
|
|
|
@ -120,7 +120,7 @@ u32 spl_boot(void)
|
||||||
/*
|
/*
|
||||||
* All the supported booting devices are listed here. Each of
|
* All the supported booting devices are listed here. Each of
|
||||||
* the booting type supported by the platform would define the
|
* the booting type supported by the platform would define the
|
||||||
* macro xxx_BOOT_SUPPORTED to TRUE.
|
* macro xxx_BOOT_SUPPORTED to true.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (SNOR_BOOT_SUPPORTED && snor_boot_selected()) {
|
if (SNOR_BOOT_SUPPORTED && snor_boot_selected()) {
|
||||||
|
|
|
@ -33,7 +33,6 @@ COBJS-$(CONFIG_CPU_PXA27X) = pxa2xx.o
|
||||||
COBJS-y += cpuinfo.o
|
COBJS-y += cpuinfo.o
|
||||||
|
|
||||||
COBJS = $(COBJS-y)
|
COBJS = $(COBJS-y)
|
||||||
COBJS += pxafb.o
|
|
||||||
COBJS += timer.o
|
COBJS += timer.o
|
||||||
COBJS += usb.o
|
COBJS += usb.o
|
||||||
|
|
||||||
|
|
|
@ -61,9 +61,6 @@ typedef unsigned int __kernel_gid32_t;
|
||||||
typedef unsigned short __kernel_old_uid_t;
|
typedef unsigned short __kernel_old_uid_t;
|
||||||
typedef unsigned short __kernel_old_gid_t;
|
typedef unsigned short __kernel_old_gid_t;
|
||||||
|
|
||||||
#define BOOL_WAS_DEFINED
|
|
||||||
typedef enum { false = 0, true = 1 } bool;
|
|
||||||
|
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
typedef long long __kernel_loff_t;
|
typedef long long __kernel_loff_t;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -96,7 +96,7 @@ int disable_interrupts (void)
|
||||||
sr = get_sr ();
|
sr = get_sr ();
|
||||||
set_sr (sr | 0x0700);
|
set_sr (sr | 0x0700);
|
||||||
|
|
||||||
return ((sr & 0x0700) == 0); /* return TRUE, if interrupts were enabled before */
|
return ((sr & 0x0700) == 0); /* return true, if interrupts were enabled before */
|
||||||
}
|
}
|
||||||
|
|
||||||
void int_handler (struct pt_regs *fp)
|
void int_handler (struct pt_regs *fp)
|
||||||
|
|
|
@ -59,7 +59,7 @@ void enable_interrupts(void)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* disable interrupts
|
* disable interrupts
|
||||||
* Return TRUE if GIE is enabled before we disable it.
|
* Return true if GIE is enabled before we disable it.
|
||||||
*/
|
*/
|
||||||
int disable_interrupts(void)
|
int disable_interrupts(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -513,7 +513,7 @@ void fsl_serdes_init(void)
|
||||||
size_t arglen;
|
size_t arglen;
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_SYS_P4080_ERRATUM_SERDES_A001
|
#ifdef CONFIG_SYS_P4080_ERRATUM_SERDES_A001
|
||||||
int need_serdes_a001; /* TRUE == need work-around for SERDES A001 */
|
int need_serdes_a001; /* true == need work-around for SERDES A001 */
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_SYS_P4080_ERRATUM_SERDES8
|
#ifdef CONFIG_SYS_P4080_ERRATUM_SERDES8
|
||||||
char buffer[HWCONFIG_BUFFER_SIZE];
|
char buffer[HWCONFIG_BUFFER_SIZE];
|
||||||
|
|
|
@ -37,7 +37,6 @@ COBJS-y += fec.o
|
||||||
COBJS-$(CONFIG_OF_LIBFDT) += fdt.o
|
COBJS-$(CONFIG_OF_LIBFDT) += fdt.o
|
||||||
COBJS-y += i2c.o
|
COBJS-y += i2c.o
|
||||||
COBJS-y += interrupts.o
|
COBJS-y += interrupts.o
|
||||||
COBJS-y += lcd.o
|
|
||||||
COBJS-y += scc.o
|
COBJS-y += scc.o
|
||||||
COBJS-y += serial.o
|
COBJS-y += serial.o
|
||||||
COBJS-y += speed.o
|
COBJS-y += speed.o
|
||||||
|
|
|
@ -167,6 +167,11 @@ void fdt_fixup_dr_usb(void *blob, bd_t *bd)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mode_idx < 0 || phy_idx < 0) {
|
||||||
|
puts("ERROR: wrong usb mode/phy defined!!\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
dr_mode_type = modes[mode_idx];
|
dr_mode_type = modes[mode_idx];
|
||||||
dr_phy_type = phys[phy_idx];
|
dr_phy_type = phys[phy_idx];
|
||||||
|
|
||||||
|
|
|
@ -88,8 +88,6 @@ void spd_ddr_init_hang (void) __attribute__((weak, alias("__spd_ddr_init_hang"))
|
||||||
#define NUMMEMTESTS 8
|
#define NUMMEMTESTS 8
|
||||||
#define NUMMEMWORDS 8
|
#define NUMMEMWORDS 8
|
||||||
#define MAXBXCR 4
|
#define MAXBXCR 4
|
||||||
#define TRUE 1
|
|
||||||
#define FALSE 0
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This DDR2 setup code can dynamically setup the TLB entries for the DDR2 memory
|
* This DDR2 setup code can dynamically setup the TLB entries for the DDR2 memory
|
||||||
|
@ -298,7 +296,7 @@ static void get_spd_info(unsigned long *dimm_populated,
|
||||||
unsigned char num_of_bytes;
|
unsigned char num_of_bytes;
|
||||||
unsigned char total_size;
|
unsigned char total_size;
|
||||||
|
|
||||||
dimm_found = FALSE;
|
dimm_found = false;
|
||||||
for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {
|
for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {
|
||||||
num_of_bytes = 0;
|
num_of_bytes = 0;
|
||||||
total_size = 0;
|
total_size = 0;
|
||||||
|
@ -307,16 +305,16 @@ static void get_spd_info(unsigned long *dimm_populated,
|
||||||
total_size = spd_read(iic0_dimm_addr[dimm_num], 1);
|
total_size = spd_read(iic0_dimm_addr[dimm_num], 1);
|
||||||
|
|
||||||
if ((num_of_bytes != 0) && (total_size != 0)) {
|
if ((num_of_bytes != 0) && (total_size != 0)) {
|
||||||
dimm_populated[dimm_num] = TRUE;
|
dimm_populated[dimm_num] = true;
|
||||||
dimm_found = TRUE;
|
dimm_found = true;
|
||||||
debug("DIMM slot %lu: populated\n", dimm_num);
|
debug("DIMM slot %lu: populated\n", dimm_num);
|
||||||
} else {
|
} else {
|
||||||
dimm_populated[dimm_num] = FALSE;
|
dimm_populated[dimm_num] = false;
|
||||||
debug("DIMM slot %lu: Not populated\n", dimm_num);
|
debug("DIMM slot %lu: Not populated\n", dimm_num);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dimm_found == FALSE) {
|
if (dimm_found == false) {
|
||||||
printf("ERROR - No memory installed. Install a DDR-SDRAM DIMM.\n\n");
|
printf("ERROR - No memory installed. Install a DDR-SDRAM DIMM.\n\n");
|
||||||
spd_ddr_init_hang ();
|
spd_ddr_init_hang ();
|
||||||
}
|
}
|
||||||
|
@ -330,7 +328,7 @@ static void check_mem_type(unsigned long *dimm_populated,
|
||||||
unsigned char dimm_type;
|
unsigned char dimm_type;
|
||||||
|
|
||||||
for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {
|
for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {
|
||||||
if (dimm_populated[dimm_num] == TRUE) {
|
if (dimm_populated[dimm_num] == true) {
|
||||||
dimm_type = spd_read(iic0_dimm_addr[dimm_num], 2);
|
dimm_type = spd_read(iic0_dimm_addr[dimm_num], 2);
|
||||||
switch (dimm_type) {
|
switch (dimm_type) {
|
||||||
case 7:
|
case 7:
|
||||||
|
@ -356,7 +354,7 @@ static void check_volt_type(unsigned long *dimm_populated,
|
||||||
unsigned long voltage_type;
|
unsigned long voltage_type;
|
||||||
|
|
||||||
for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {
|
for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {
|
||||||
if (dimm_populated[dimm_num] == TRUE) {
|
if (dimm_populated[dimm_num] == true) {
|
||||||
voltage_type = spd_read(iic0_dimm_addr[dimm_num], 8);
|
voltage_type = spd_read(iic0_dimm_addr[dimm_num], 8);
|
||||||
if (voltage_type != 0x04) {
|
if (voltage_type != 0x04) {
|
||||||
printf("ERROR: DIMM %lu with unsupported voltage level.\n",
|
printf("ERROR: DIMM %lu with unsupported voltage level.\n",
|
||||||
|
@ -398,12 +396,12 @@ static void program_cfg0(unsigned long *dimm_populated,
|
||||||
/*
|
/*
|
||||||
* FIXME: assume the DDR SDRAMs in both banks are the same
|
* FIXME: assume the DDR SDRAMs in both banks are the same
|
||||||
*/
|
*/
|
||||||
ecc_enabled = TRUE;
|
ecc_enabled = true;
|
||||||
for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {
|
for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {
|
||||||
if (dimm_populated[dimm_num] == TRUE) {
|
if (dimm_populated[dimm_num] == true) {
|
||||||
ecc = spd_read(iic0_dimm_addr[dimm_num], 11);
|
ecc = spd_read(iic0_dimm_addr[dimm_num], 11);
|
||||||
if (ecc != 0x02) {
|
if (ecc != 0x02) {
|
||||||
ecc_enabled = FALSE;
|
ecc_enabled = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -437,7 +435,7 @@ static void program_cfg0(unsigned long *dimm_populated,
|
||||||
/*
|
/*
|
||||||
* program Memory Data Error Checking
|
* program Memory Data Error Checking
|
||||||
*/
|
*/
|
||||||
if (ecc_enabled == TRUE) {
|
if (ecc_enabled == true) {
|
||||||
cfg0 |= SDRAM_CFG0_MCHK_GEN;
|
cfg0 |= SDRAM_CFG0_MCHK_GEN;
|
||||||
} else {
|
} else {
|
||||||
cfg0 |= SDRAM_CFG0_MCHK_NON;
|
cfg0 |= SDRAM_CFG0_MCHK_NON;
|
||||||
|
@ -493,7 +491,7 @@ static void program_rtr(unsigned long *dimm_populated,
|
||||||
bus_period_x_10 = ONE_BILLION / (sys_info.freqPLB / 10);
|
bus_period_x_10 = ONE_BILLION / (sys_info.freqPLB / 10);
|
||||||
|
|
||||||
for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {
|
for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {
|
||||||
if (dimm_populated[dimm_num] == TRUE) {
|
if (dimm_populated[dimm_num] == true) {
|
||||||
refresh_rate_type = 0x7F & spd_read(iic0_dimm_addr[dimm_num], 12);
|
refresh_rate_type = 0x7F & spd_read(iic0_dimm_addr[dimm_num], 12);
|
||||||
switch (refresh_rate_type) {
|
switch (refresh_rate_type) {
|
||||||
case 0x00:
|
case 0x00:
|
||||||
|
@ -585,15 +583,15 @@ static void program_tr0(unsigned long *dimm_populated,
|
||||||
t_rp_ns = 0;
|
t_rp_ns = 0;
|
||||||
t_rcd_ns = 0;
|
t_rcd_ns = 0;
|
||||||
t_ras_ns = 0;
|
t_ras_ns = 0;
|
||||||
cas_2_0_available = TRUE;
|
cas_2_0_available = true;
|
||||||
cas_2_5_available = TRUE;
|
cas_2_5_available = true;
|
||||||
cas_3_0_available = TRUE;
|
cas_3_0_available = true;
|
||||||
tcyc_2_0_ns_x_10 = 0;
|
tcyc_2_0_ns_x_10 = 0;
|
||||||
tcyc_2_5_ns_x_10 = 0;
|
tcyc_2_5_ns_x_10 = 0;
|
||||||
tcyc_3_0_ns_x_10 = 0;
|
tcyc_3_0_ns_x_10 = 0;
|
||||||
|
|
||||||
for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {
|
for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {
|
||||||
if (dimm_populated[dimm_num] == TRUE) {
|
if (dimm_populated[dimm_num] == true) {
|
||||||
wcsbc = spd_read(iic0_dimm_addr[dimm_num], 15);
|
wcsbc = spd_read(iic0_dimm_addr[dimm_num], 15);
|
||||||
t_rp_ns = spd_read(iic0_dimm_addr[dimm_num], 27) >> 2;
|
t_rp_ns = spd_read(iic0_dimm_addr[dimm_num], 27) >> 2;
|
||||||
t_rcd_ns = spd_read(iic0_dimm_addr[dimm_num], 29) >> 2;
|
t_rcd_ns = spd_read(iic0_dimm_addr[dimm_num], 29) >> 2;
|
||||||
|
@ -640,7 +638,7 @@ static void program_tr0(unsigned long *dimm_populated,
|
||||||
if (cas_index != 0) {
|
if (cas_index != 0) {
|
||||||
cas_index++;
|
cas_index++;
|
||||||
}
|
}
|
||||||
cas_3_0_available = FALSE;
|
cas_3_0_available = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (((cas_bit & 0x08) != 0) || (cas_index < 3)) {
|
if (((cas_bit & 0x08) != 0) || (cas_index < 3)) {
|
||||||
|
@ -650,7 +648,7 @@ static void program_tr0(unsigned long *dimm_populated,
|
||||||
if (cas_index != 0) {
|
if (cas_index != 0) {
|
||||||
cas_index++;
|
cas_index++;
|
||||||
}
|
}
|
||||||
cas_2_5_available = FALSE;
|
cas_2_5_available = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (((cas_bit & 0x04) != 0) || (cas_index < 3)) {
|
if (((cas_bit & 0x04) != 0) || (cas_index < 3)) {
|
||||||
|
@ -660,7 +658,7 @@ static void program_tr0(unsigned long *dimm_populated,
|
||||||
if (cas_index != 0) {
|
if (cas_index != 0) {
|
||||||
cas_index++;
|
cas_index++;
|
||||||
}
|
}
|
||||||
cas_2_0_available = FALSE;
|
cas_2_0_available = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -683,13 +681,13 @@ static void program_tr0(unsigned long *dimm_populated,
|
||||||
/*
|
/*
|
||||||
* Program SD_CASL field
|
* Program SD_CASL field
|
||||||
*/
|
*/
|
||||||
if ((cas_2_0_available == TRUE) &&
|
if ((cas_2_0_available == true) &&
|
||||||
(bus_period_x_10 >= tcyc_2_0_ns_x_10)) {
|
(bus_period_x_10 >= tcyc_2_0_ns_x_10)) {
|
||||||
tr0 |= SDRAM_TR0_SDCL_2_0_CLK;
|
tr0 |= SDRAM_TR0_SDCL_2_0_CLK;
|
||||||
} else if ((cas_2_5_available == TRUE) &&
|
} else if ((cas_2_5_available == true) &&
|
||||||
(bus_period_x_10 >= tcyc_2_5_ns_x_10)) {
|
(bus_period_x_10 >= tcyc_2_5_ns_x_10)) {
|
||||||
tr0 |= SDRAM_TR0_SDCL_2_5_CLK;
|
tr0 |= SDRAM_TR0_SDCL_2_5_CLK;
|
||||||
} else if ((cas_3_0_available == TRUE) &&
|
} else if ((cas_3_0_available == true) &&
|
||||||
(bus_period_x_10 >= tcyc_3_0_ns_x_10)) {
|
(bus_period_x_10 >= tcyc_3_0_ns_x_10)) {
|
||||||
tr0 |= SDRAM_TR0_SDCL_3_0_CLK;
|
tr0 |= SDRAM_TR0_SDCL_3_0_CLK;
|
||||||
} else {
|
} else {
|
||||||
|
@ -950,9 +948,9 @@ static void program_tr1(void)
|
||||||
current_fail_length = 0;
|
current_fail_length = 0;
|
||||||
current_start = 0;
|
current_start = 0;
|
||||||
rdclt_offset = 0;
|
rdclt_offset = 0;
|
||||||
window_found = FALSE;
|
window_found = false;
|
||||||
fail_found = FALSE;
|
fail_found = false;
|
||||||
pass_found = FALSE;
|
pass_found = false;
|
||||||
debug("Starting memory test ");
|
debug("Starting memory test ");
|
||||||
|
|
||||||
for (k = 0; k < NUMHALFCYCLES; k++) {
|
for (k = 0; k < NUMHALFCYCLES; k++) {
|
||||||
|
@ -963,8 +961,8 @@ static void program_tr1(void)
|
||||||
mtsdram(SDRAM0_TR1, (tr1 | SDRAM_TR1_RDCT_ENCODE(rdclt)));
|
mtsdram(SDRAM0_TR1, (tr1 | SDRAM_TR1_RDCT_ENCODE(rdclt)));
|
||||||
|
|
||||||
if (short_mem_test()) {
|
if (short_mem_test()) {
|
||||||
if (fail_found == TRUE) {
|
if (fail_found == true) {
|
||||||
pass_found = TRUE;
|
pass_found = true;
|
||||||
if (current_pass_length == 0) {
|
if (current_pass_length == 0) {
|
||||||
current_start = rdclt_offset + rdclt;
|
current_start = rdclt_offset + rdclt;
|
||||||
}
|
}
|
||||||
|
@ -983,10 +981,10 @@ static void program_tr1(void)
|
||||||
current_fail_length++;
|
current_fail_length++;
|
||||||
|
|
||||||
if (current_fail_length >= (dly_val>>2)) {
|
if (current_fail_length >= (dly_val>>2)) {
|
||||||
if (fail_found == FALSE) {
|
if (fail_found == false) {
|
||||||
fail_found = TRUE;
|
fail_found = true;
|
||||||
} else if (pass_found == TRUE) {
|
} else if (pass_found == true) {
|
||||||
window_found = TRUE;
|
window_found = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -994,9 +992,8 @@ static void program_tr1(void)
|
||||||
}
|
}
|
||||||
debug(".");
|
debug(".");
|
||||||
|
|
||||||
if (window_found == TRUE) {
|
if (window_found == true)
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
tr1 = tr1 ^ SDRAM_TR1_RDCD_MASK;
|
tr1 = tr1 ^ SDRAM_TR1_RDCD_MASK;
|
||||||
rdclt_offset += dly_val;
|
rdclt_offset += dly_val;
|
||||||
|
@ -1006,7 +1003,7 @@ static void program_tr1(void)
|
||||||
/*
|
/*
|
||||||
* make sure we find the window
|
* make sure we find the window
|
||||||
*/
|
*/
|
||||||
if (window_found == FALSE) {
|
if (window_found == false) {
|
||||||
printf("ERROR: Cannot determine a common read delay.\n");
|
printf("ERROR: Cannot determine a common read delay.\n");
|
||||||
spd_ddr_init_hang ();
|
spd_ddr_init_hang ();
|
||||||
}
|
}
|
||||||
|
@ -1115,7 +1112,7 @@ static unsigned long program_bxcr(unsigned long *dimm_populated,
|
||||||
bank_base_addr = CONFIG_SYS_SDRAM_BASE;
|
bank_base_addr = CONFIG_SYS_SDRAM_BASE;
|
||||||
|
|
||||||
for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {
|
for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {
|
||||||
if (dimm_populated[dimm_num] == TRUE) {
|
if (dimm_populated[dimm_num] == true) {
|
||||||
num_row_addr = spd_read(iic0_dimm_addr[dimm_num], 3);
|
num_row_addr = spd_read(iic0_dimm_addr[dimm_num], 3);
|
||||||
num_col_addr = spd_read(iic0_dimm_addr[dimm_num], 4);
|
num_col_addr = spd_read(iic0_dimm_addr[dimm_num], 4);
|
||||||
num_banks = spd_read(iic0_dimm_addr[dimm_num], 5);
|
num_banks = spd_read(iic0_dimm_addr[dimm_num], 5);
|
||||||
|
|
|
@ -241,13 +241,6 @@ void board_add_ram_info(int use_default)
|
||||||
/*-----------------------------------------------------------------------------+
|
/*-----------------------------------------------------------------------------+
|
||||||
* Defines
|
* Defines
|
||||||
*-----------------------------------------------------------------------------*/
|
*-----------------------------------------------------------------------------*/
|
||||||
#ifndef TRUE
|
|
||||||
#define TRUE 1
|
|
||||||
#endif
|
|
||||||
#ifndef FALSE
|
|
||||||
#define FALSE 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define SDRAM_DDR1 1
|
#define SDRAM_DDR1 1
|
||||||
#define SDRAM_DDR2 2
|
#define SDRAM_DDR2 2
|
||||||
#define SDRAM_NONE 0
|
#define SDRAM_NONE 0
|
||||||
|
@ -683,7 +676,7 @@ static void get_spd_info(unsigned long *dimm_populated,
|
||||||
unsigned char num_of_bytes;
|
unsigned char num_of_bytes;
|
||||||
unsigned char total_size;
|
unsigned char total_size;
|
||||||
|
|
||||||
dimm_found = FALSE;
|
dimm_found = false;
|
||||||
for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {
|
for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {
|
||||||
num_of_bytes = 0;
|
num_of_bytes = 0;
|
||||||
total_size = 0;
|
total_size = 0;
|
||||||
|
@ -696,16 +689,16 @@ static void get_spd_info(unsigned long *dimm_populated,
|
||||||
iic0_dimm_addr[dimm_num], total_size);
|
iic0_dimm_addr[dimm_num], total_size);
|
||||||
|
|
||||||
if ((num_of_bytes != 0) && (total_size != 0)) {
|
if ((num_of_bytes != 0) && (total_size != 0)) {
|
||||||
dimm_populated[dimm_num] = TRUE;
|
dimm_populated[dimm_num] = true;
|
||||||
dimm_found = TRUE;
|
dimm_found = true;
|
||||||
debug("DIMM slot %lu: populated\n", dimm_num);
|
debug("DIMM slot %lu: populated\n", dimm_num);
|
||||||
} else {
|
} else {
|
||||||
dimm_populated[dimm_num] = FALSE;
|
dimm_populated[dimm_num] = false;
|
||||||
debug("DIMM slot %lu: Not populated\n", dimm_num);
|
debug("DIMM slot %lu: Not populated\n", dimm_num);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dimm_found == FALSE) {
|
if (dimm_found == false) {
|
||||||
printf("ERROR - No memory installed. Install a DDR-SDRAM DIMM.\n\n");
|
printf("ERROR - No memory installed. Install a DDR-SDRAM DIMM.\n\n");
|
||||||
spd_ddr_init_hang ();
|
spd_ddr_init_hang ();
|
||||||
}
|
}
|
||||||
|
@ -724,7 +717,7 @@ static void check_mem_type(unsigned long *dimm_populated,
|
||||||
unsigned long dimm_type;
|
unsigned long dimm_type;
|
||||||
|
|
||||||
for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {
|
for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {
|
||||||
if (dimm_populated[dimm_num] == TRUE) {
|
if (dimm_populated[dimm_num] == true) {
|
||||||
dimm_type = spd_read(iic0_dimm_addr[dimm_num], 2);
|
dimm_type = spd_read(iic0_dimm_addr[dimm_num], 2);
|
||||||
switch (dimm_type) {
|
switch (dimm_type) {
|
||||||
case 1:
|
case 1:
|
||||||
|
@ -994,14 +987,14 @@ static void program_copt1(unsigned long *dimm_populated,
|
||||||
unsigned long val;
|
unsigned long val;
|
||||||
|
|
||||||
#ifdef CONFIG_DDR_ECC
|
#ifdef CONFIG_DDR_ECC
|
||||||
ecc_enabled = TRUE;
|
ecc_enabled = true;
|
||||||
#else
|
#else
|
||||||
ecc_enabled = FALSE;
|
ecc_enabled = false;
|
||||||
#endif
|
#endif
|
||||||
dimm_32bit = FALSE;
|
dimm_32bit = false;
|
||||||
dimm_64bit = FALSE;
|
dimm_64bit = false;
|
||||||
buf0 = FALSE;
|
buf0 = false;
|
||||||
buf1 = FALSE;
|
buf1 = false;
|
||||||
|
|
||||||
/*------------------------------------------------------------------
|
/*------------------------------------------------------------------
|
||||||
* Set memory controller options reg 1, SDRAM_MCOPT1.
|
* Set memory controller options reg 1, SDRAM_MCOPT1.
|
||||||
|
@ -1026,7 +1019,7 @@ static void program_copt1(unsigned long *dimm_populated,
|
||||||
/* test ecc support */
|
/* test ecc support */
|
||||||
ecc = (unsigned long)spd_read(iic0_dimm_addr[dimm_num], 11);
|
ecc = (unsigned long)spd_read(iic0_dimm_addr[dimm_num], 11);
|
||||||
if (ecc != 0x02) /* ecc not supported */
|
if (ecc != 0x02) /* ecc not supported */
|
||||||
ecc_enabled = FALSE;
|
ecc_enabled = false;
|
||||||
|
|
||||||
/* test bank count */
|
/* test bank count */
|
||||||
bankcount = (unsigned long)spd_read(iic0_dimm_addr[dimm_num], 17);
|
bankcount = (unsigned long)spd_read(iic0_dimm_addr[dimm_num], 17);
|
||||||
|
@ -1048,15 +1041,15 @@ static void program_copt1(unsigned long *dimm_populated,
|
||||||
if (registered == 1) { /* DDR2 always buffered */
|
if (registered == 1) { /* DDR2 always buffered */
|
||||||
/* TODO: what about above comments ? */
|
/* TODO: what about above comments ? */
|
||||||
mcopt1 |= SDRAM_MCOPT1_RDEN;
|
mcopt1 |= SDRAM_MCOPT1_RDEN;
|
||||||
buf0 = TRUE;
|
buf0 = true;
|
||||||
} else {
|
} else {
|
||||||
/* TODO: the mask 0x02 doesn't match Samsung def for byte 21. */
|
/* TODO: the mask 0x02 doesn't match Samsung def for byte 21. */
|
||||||
if ((attribute & 0x02) == 0x00) {
|
if ((attribute & 0x02) == 0x00) {
|
||||||
/* buffered not supported */
|
/* buffered not supported */
|
||||||
buf0 = FALSE;
|
buf0 = false;
|
||||||
} else {
|
} else {
|
||||||
mcopt1 |= SDRAM_MCOPT1_RDEN;
|
mcopt1 |= SDRAM_MCOPT1_RDEN;
|
||||||
buf0 = TRUE;
|
buf0 = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1068,14 +1061,14 @@ static void program_copt1(unsigned long *dimm_populated,
|
||||||
if (registered == 1) {
|
if (registered == 1) {
|
||||||
/* DDR2 always buffered */
|
/* DDR2 always buffered */
|
||||||
mcopt1 |= SDRAM_MCOPT1_RDEN;
|
mcopt1 |= SDRAM_MCOPT1_RDEN;
|
||||||
buf1 = TRUE;
|
buf1 = true;
|
||||||
} else {
|
} else {
|
||||||
if ((attribute & 0x02) == 0x00) {
|
if ((attribute & 0x02) == 0x00) {
|
||||||
/* buffered not supported */
|
/* buffered not supported */
|
||||||
buf1 = FALSE;
|
buf1 = false;
|
||||||
} else {
|
} else {
|
||||||
mcopt1 |= SDRAM_MCOPT1_RDEN;
|
mcopt1 |= SDRAM_MCOPT1_RDEN;
|
||||||
buf1 = TRUE;
|
buf1 = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1087,11 +1080,11 @@ static void program_copt1(unsigned long *dimm_populated,
|
||||||
switch (data_width) {
|
switch (data_width) {
|
||||||
case 72:
|
case 72:
|
||||||
case 64:
|
case 64:
|
||||||
dimm_64bit = TRUE;
|
dimm_64bit = true;
|
||||||
break;
|
break;
|
||||||
case 40:
|
case 40:
|
||||||
case 32:
|
case 32:
|
||||||
dimm_32bit = TRUE;
|
dimm_32bit = true;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
printf("WARNING: Detected a DIMM with a data width of %lu bits.\n",
|
printf("WARNING: Detected a DIMM with a data width of %lu bits.\n",
|
||||||
|
@ -1110,20 +1103,19 @@ static void program_copt1(unsigned long *dimm_populated,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((dimm_64bit == TRUE) && (dimm_32bit == TRUE)) {
|
if ((dimm_64bit == true) && (dimm_32bit == true)) {
|
||||||
printf("ERROR: Cannot mix 32 bit and 64 bit DDR-SDRAM DIMMs together.\n");
|
printf("ERROR: Cannot mix 32 bit and 64 bit DDR-SDRAM DIMMs together.\n");
|
||||||
spd_ddr_init_hang ();
|
spd_ddr_init_hang ();
|
||||||
}
|
} else if ((dimm_64bit == true) && (dimm_32bit == false)) {
|
||||||
else if ((dimm_64bit == TRUE) && (dimm_32bit == FALSE)) {
|
|
||||||
mcopt1 |= SDRAM_MCOPT1_DMWD_64;
|
mcopt1 |= SDRAM_MCOPT1_DMWD_64;
|
||||||
} else if ((dimm_64bit == FALSE) && (dimm_32bit == TRUE)) {
|
} else if ((dimm_64bit == false) && (dimm_32bit == true)) {
|
||||||
mcopt1 |= SDRAM_MCOPT1_DMWD_32;
|
mcopt1 |= SDRAM_MCOPT1_DMWD_32;
|
||||||
} else {
|
} else {
|
||||||
printf("ERROR: Please install only 32 or 64 bit DDR-SDRAM DIMMs.\n\n");
|
printf("ERROR: Please install only 32 or 64 bit DDR-SDRAM DIMMs.\n\n");
|
||||||
spd_ddr_init_hang ();
|
spd_ddr_init_hang ();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ecc_enabled == TRUE)
|
if (ecc_enabled == true)
|
||||||
mcopt1 |= SDRAM_MCOPT1_MCHK_GEN;
|
mcopt1 |= SDRAM_MCOPT1_MCHK_GEN;
|
||||||
else
|
else
|
||||||
mcopt1 |= SDRAM_MCOPT1_MCHK_NON;
|
mcopt1 |= SDRAM_MCOPT1_MCHK_NON;
|
||||||
|
@ -1171,14 +1163,14 @@ static void program_codt(unsigned long *dimm_populated,
|
||||||
total_rank += dimm_rank;
|
total_rank += dimm_rank;
|
||||||
total_dimm++;
|
total_dimm++;
|
||||||
if ((dimm_num == 0) && (total_dimm == 1))
|
if ((dimm_num == 0) && (total_dimm == 1))
|
||||||
firstSlot = TRUE;
|
firstSlot = true;
|
||||||
else
|
else
|
||||||
firstSlot = FALSE;
|
firstSlot = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (dimm_type == SDRAM_DDR2) {
|
if (dimm_type == SDRAM_DDR2) {
|
||||||
codt |= SDRAM_CODT_DQS_1_8_V_DDR2;
|
codt |= SDRAM_CODT_DQS_1_8_V_DDR2;
|
||||||
if ((total_dimm == 1) && (firstSlot == TRUE)) {
|
if ((total_dimm == 1) && (firstSlot == true)) {
|
||||||
if (total_rank == 1) { /* PUUU */
|
if (total_rank == 1) { /* PUUU */
|
||||||
codt |= CALC_ODT_R(0);
|
codt |= CALC_ODT_R(0);
|
||||||
modt0 = CALC_ODT_W(0);
|
modt0 = CALC_ODT_W(0);
|
||||||
|
@ -1193,7 +1185,7 @@ static void program_codt(unsigned long *dimm_populated,
|
||||||
modt2 = 0x00000000;
|
modt2 = 0x00000000;
|
||||||
modt3 = 0x00000000;
|
modt3 = 0x00000000;
|
||||||
}
|
}
|
||||||
} else if ((total_dimm == 1) && (firstSlot != TRUE)) {
|
} else if ((total_dimm == 1) && (firstSlot != true)) {
|
||||||
if (total_rank == 1) { /* UUPU */
|
if (total_rank == 1) { /* UUPU */
|
||||||
codt |= CALC_ODT_R(2);
|
codt |= CALC_ODT_R(2);
|
||||||
modt0 = 0x00000000;
|
modt0 = 0x00000000;
|
||||||
|
@ -1467,26 +1459,26 @@ static void program_mode(unsigned long *dimm_populated,
|
||||||
* the dimm modules installed.
|
* the dimm modules installed.
|
||||||
*-----------------------------------------------------------------*/
|
*-----------------------------------------------------------------*/
|
||||||
t_wr_ns = 0;
|
t_wr_ns = 0;
|
||||||
cas_2_0_available = TRUE;
|
cas_2_0_available = true;
|
||||||
cas_2_5_available = TRUE;
|
cas_2_5_available = true;
|
||||||
cas_3_0_available = TRUE;
|
cas_3_0_available = true;
|
||||||
cas_4_0_available = TRUE;
|
cas_4_0_available = true;
|
||||||
cas_5_0_available = TRUE;
|
cas_5_0_available = true;
|
||||||
max_2_0_tcyc_ns_x_100 = 10;
|
max_2_0_tcyc_ns_x_100 = 10;
|
||||||
max_2_5_tcyc_ns_x_100 = 10;
|
max_2_5_tcyc_ns_x_100 = 10;
|
||||||
max_3_0_tcyc_ns_x_100 = 10;
|
max_3_0_tcyc_ns_x_100 = 10;
|
||||||
max_4_0_tcyc_ns_x_100 = 10;
|
max_4_0_tcyc_ns_x_100 = 10;
|
||||||
max_5_0_tcyc_ns_x_100 = 10;
|
max_5_0_tcyc_ns_x_100 = 10;
|
||||||
sdram_ddr1 = TRUE;
|
sdram_ddr1 = true;
|
||||||
|
|
||||||
/* loop through all the DIMM slots on the board */
|
/* loop through all the DIMM slots on the board */
|
||||||
for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {
|
for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {
|
||||||
/* If a dimm is installed in a particular slot ... */
|
/* If a dimm is installed in a particular slot ... */
|
||||||
if (dimm_populated[dimm_num] != SDRAM_NONE) {
|
if (dimm_populated[dimm_num] != SDRAM_NONE) {
|
||||||
if (dimm_populated[dimm_num] == SDRAM_DDR1)
|
if (dimm_populated[dimm_num] == SDRAM_DDR1)
|
||||||
sdram_ddr1 = TRUE;
|
sdram_ddr1 = true;
|
||||||
else
|
else
|
||||||
sdram_ddr1 = FALSE;
|
sdram_ddr1 = false;
|
||||||
|
|
||||||
cas_bit = spd_read(iic0_dimm_addr[dimm_num], 18);
|
cas_bit = spd_read(iic0_dimm_addr[dimm_num], 18);
|
||||||
debug("cas_bit[SPD byte 18]=%02lx\n", cas_bit);
|
debug("cas_bit[SPD byte 18]=%02lx\n", cas_bit);
|
||||||
|
@ -1543,7 +1535,7 @@ static void program_mode(unsigned long *dimm_populated,
|
||||||
} else {
|
} else {
|
||||||
if (cas_index != 0)
|
if (cas_index != 0)
|
||||||
cas_index++;
|
cas_index++;
|
||||||
cas_4_0_available = FALSE;
|
cas_4_0_available = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (((cas_bit & 0x10) == 0x10) && (cas_index < 3) &&
|
if (((cas_bit & 0x10) == 0x10) && (cas_index < 3) &&
|
||||||
|
@ -1554,7 +1546,7 @@ static void program_mode(unsigned long *dimm_populated,
|
||||||
} else {
|
} else {
|
||||||
if (cas_index != 0)
|
if (cas_index != 0)
|
||||||
cas_index++;
|
cas_index++;
|
||||||
cas_3_0_available = FALSE;
|
cas_3_0_available = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (((cas_bit & 0x08) == 0x08) && (cas_index < 3) &&
|
if (((cas_bit & 0x08) == 0x08) && (cas_index < 3) &&
|
||||||
|
@ -1565,7 +1557,7 @@ static void program_mode(unsigned long *dimm_populated,
|
||||||
} else {
|
} else {
|
||||||
if (cas_index != 0)
|
if (cas_index != 0)
|
||||||
cas_index++;
|
cas_index++;
|
||||||
cas_2_5_available = FALSE;
|
cas_2_5_available = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (((cas_bit & 0x04) == 0x04) && (cas_index < 3) &&
|
if (((cas_bit & 0x04) == 0x04) && (cas_index < 3) &&
|
||||||
|
@ -1576,7 +1568,7 @@ static void program_mode(unsigned long *dimm_populated,
|
||||||
} else {
|
} else {
|
||||||
if (cas_index != 0)
|
if (cas_index != 0)
|
||||||
cas_index++;
|
cas_index++;
|
||||||
cas_2_0_available = FALSE;
|
cas_2_0_available = false;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/*
|
/*
|
||||||
|
@ -1592,7 +1584,7 @@ static void program_mode(unsigned long *dimm_populated,
|
||||||
} else {
|
} else {
|
||||||
if (cas_index != 0)
|
if (cas_index != 0)
|
||||||
cas_index++;
|
cas_index++;
|
||||||
cas_5_0_available = FALSE;
|
cas_5_0_available = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (((cas_bit & 0x10) == 0x10) && (cas_index < 3) &&
|
if (((cas_bit & 0x10) == 0x10) && (cas_index < 3) &&
|
||||||
|
@ -1603,7 +1595,7 @@ static void program_mode(unsigned long *dimm_populated,
|
||||||
} else {
|
} else {
|
||||||
if (cas_index != 0)
|
if (cas_index != 0)
|
||||||
cas_index++;
|
cas_index++;
|
||||||
cas_4_0_available = FALSE;
|
cas_4_0_available = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (((cas_bit & 0x08) == 0x08) && (cas_index < 3) &&
|
if (((cas_bit & 0x08) == 0x08) && (cas_index < 3) &&
|
||||||
|
@ -1614,7 +1606,7 @@ static void program_mode(unsigned long *dimm_populated,
|
||||||
} else {
|
} else {
|
||||||
if (cas_index != 0)
|
if (cas_index != 0)
|
||||||
cas_index++;
|
cas_index++;
|
||||||
cas_3_0_available = FALSE;
|
cas_3_0_available = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1636,14 +1628,17 @@ static void program_mode(unsigned long *dimm_populated,
|
||||||
debug("cycle_4_0_clk=%lu\n", cycle_4_0_clk);
|
debug("cycle_4_0_clk=%lu\n", cycle_4_0_clk);
|
||||||
debug("cycle_5_0_clk=%lu\n", cycle_5_0_clk);
|
debug("cycle_5_0_clk=%lu\n", cycle_5_0_clk);
|
||||||
|
|
||||||
if (sdram_ddr1 == TRUE) { /* DDR1 */
|
if (sdram_ddr1 == true) { /* DDR1 */
|
||||||
if ((cas_2_0_available == TRUE) && (sdram_freq <= cycle_2_0_clk)) {
|
if ((cas_2_0_available == true) &&
|
||||||
|
(sdram_freq <= cycle_2_0_clk)) {
|
||||||
mmode |= SDRAM_MMODE_DCL_DDR1_2_0_CLK;
|
mmode |= SDRAM_MMODE_DCL_DDR1_2_0_CLK;
|
||||||
*selected_cas = DDR_CAS_2;
|
*selected_cas = DDR_CAS_2;
|
||||||
} else if ((cas_2_5_available == TRUE) && (sdram_freq <= cycle_2_5_clk)) {
|
} else if ((cas_2_5_available == true) &&
|
||||||
|
(sdram_freq <= cycle_2_5_clk)) {
|
||||||
mmode |= SDRAM_MMODE_DCL_DDR1_2_5_CLK;
|
mmode |= SDRAM_MMODE_DCL_DDR1_2_5_CLK;
|
||||||
*selected_cas = DDR_CAS_2_5;
|
*selected_cas = DDR_CAS_2_5;
|
||||||
} else if ((cas_3_0_available == TRUE) && (sdram_freq <= cycle_3_0_clk)) {
|
} else if ((cas_3_0_available == true) &&
|
||||||
|
(sdram_freq <= cycle_3_0_clk)) {
|
||||||
mmode |= SDRAM_MMODE_DCL_DDR1_3_0_CLK;
|
mmode |= SDRAM_MMODE_DCL_DDR1_3_0_CLK;
|
||||||
*selected_cas = DDR_CAS_3;
|
*selected_cas = DDR_CAS_3;
|
||||||
} else {
|
} else {
|
||||||
|
@ -1656,13 +1651,16 @@ static void program_mode(unsigned long *dimm_populated,
|
||||||
debug("cas_3_0_available=%d\n", cas_3_0_available);
|
debug("cas_3_0_available=%d\n", cas_3_0_available);
|
||||||
debug("cas_4_0_available=%d\n", cas_4_0_available);
|
debug("cas_4_0_available=%d\n", cas_4_0_available);
|
||||||
debug("cas_5_0_available=%d\n", cas_5_0_available);
|
debug("cas_5_0_available=%d\n", cas_5_0_available);
|
||||||
if ((cas_3_0_available == TRUE) && (sdram_freq <= cycle_3_0_clk)) {
|
if ((cas_3_0_available == true) &&
|
||||||
|
(sdram_freq <= cycle_3_0_clk)) {
|
||||||
mmode |= SDRAM_MMODE_DCL_DDR2_3_0_CLK;
|
mmode |= SDRAM_MMODE_DCL_DDR2_3_0_CLK;
|
||||||
*selected_cas = DDR_CAS_3;
|
*selected_cas = DDR_CAS_3;
|
||||||
} else if ((cas_4_0_available == TRUE) && (sdram_freq <= cycle_4_0_clk)) {
|
} else if ((cas_4_0_available == true) &&
|
||||||
|
(sdram_freq <= cycle_4_0_clk)) {
|
||||||
mmode |= SDRAM_MMODE_DCL_DDR2_4_0_CLK;
|
mmode |= SDRAM_MMODE_DCL_DDR2_4_0_CLK;
|
||||||
*selected_cas = DDR_CAS_4;
|
*selected_cas = DDR_CAS_4;
|
||||||
} else if ((cas_5_0_available == TRUE) && (sdram_freq <= cycle_5_0_clk)) {
|
} else if ((cas_5_0_available == true) &&
|
||||||
|
(sdram_freq <= cycle_5_0_clk)) {
|
||||||
mmode |= SDRAM_MMODE_DCL_DDR2_5_0_CLK;
|
mmode |= SDRAM_MMODE_DCL_DDR2_5_0_CLK;
|
||||||
*selected_cas = DDR_CAS_5;
|
*selected_cas = DDR_CAS_5;
|
||||||
} else {
|
} else {
|
||||||
|
@ -1677,7 +1675,7 @@ static void program_mode(unsigned long *dimm_populated,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sdram_ddr1 == TRUE)
|
if (sdram_ddr1 == true)
|
||||||
mmode |= SDRAM_MMODE_WR_DDR1;
|
mmode |= SDRAM_MMODE_WR_DDR1;
|
||||||
else {
|
else {
|
||||||
|
|
||||||
|
@ -1851,16 +1849,16 @@ static void program_tr(unsigned long *dimm_populated,
|
||||||
t_wpc_ns = 0;
|
t_wpc_ns = 0;
|
||||||
t_wtr_ns = 0;
|
t_wtr_ns = 0;
|
||||||
t_rpc_ns = 0;
|
t_rpc_ns = 0;
|
||||||
sdram_ddr1 = TRUE;
|
sdram_ddr1 = true;
|
||||||
|
|
||||||
/* loop through all the DIMM slots on the board */
|
/* loop through all the DIMM slots on the board */
|
||||||
for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {
|
for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {
|
||||||
/* If a dimm is installed in a particular slot ... */
|
/* If a dimm is installed in a particular slot ... */
|
||||||
if (dimm_populated[dimm_num] != SDRAM_NONE) {
|
if (dimm_populated[dimm_num] != SDRAM_NONE) {
|
||||||
if (dimm_populated[dimm_num] == SDRAM_DDR2)
|
if (dimm_populated[dimm_num] == SDRAM_DDR2)
|
||||||
sdram_ddr1 = TRUE;
|
sdram_ddr1 = true;
|
||||||
else
|
else
|
||||||
sdram_ddr1 = FALSE;
|
sdram_ddr1 = false;
|
||||||
|
|
||||||
t_rcd_ns = max(t_rcd_ns, spd_read(iic0_dimm_addr[dimm_num], 29) >> 2);
|
t_rcd_ns = max(t_rcd_ns, spd_read(iic0_dimm_addr[dimm_num], 29) >> 2);
|
||||||
t_rrd_ns = max(t_rrd_ns, spd_read(iic0_dimm_addr[dimm_num], 28) >> 2);
|
t_rrd_ns = max(t_rrd_ns, spd_read(iic0_dimm_addr[dimm_num], 28) >> 2);
|
||||||
|
@ -1925,7 +1923,7 @@ static void program_tr(unsigned long *dimm_populated,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sdram_ddr1 == TRUE) { /* DDR1 */
|
if (sdram_ddr1 == true) { /* DDR1 */
|
||||||
if (sdram_freq < 200000000) {
|
if (sdram_freq < 200000000) {
|
||||||
sdtr2 |= SDRAM_SDTR2_WTR_1_CLK;
|
sdtr2 |= SDRAM_SDTR2_WTR_1_CLK;
|
||||||
sdtr2 |= SDRAM_SDTR2_WPC_2_CLK;
|
sdtr2 |= SDRAM_SDTR2_WPC_2_CLK;
|
||||||
|
@ -2548,8 +2546,8 @@ calibration_loop:
|
||||||
current_pass_length = 0;
|
current_pass_length = 0;
|
||||||
current_fail_length = 0;
|
current_fail_length = 0;
|
||||||
current_start = 0;
|
current_start = 0;
|
||||||
fail_found = FALSE;
|
fail_found = false;
|
||||||
pass_found = FALSE;
|
pass_found = false;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* get the delay line calibration register value
|
* get the delay line calibration register value
|
||||||
|
@ -2570,8 +2568,8 @@ calibration_loop:
|
||||||
* See if the rffd value passed.
|
* See if the rffd value passed.
|
||||||
*-----------------------------------------------------------------*/
|
*-----------------------------------------------------------------*/
|
||||||
if (short_mem_test()) {
|
if (short_mem_test()) {
|
||||||
if (fail_found == TRUE) {
|
if (fail_found == true) {
|
||||||
pass_found = TRUE;
|
pass_found = true;
|
||||||
if (current_pass_length == 0)
|
if (current_pass_length == 0)
|
||||||
current_start = rffd;
|
current_start = rffd;
|
||||||
|
|
||||||
|
@ -2589,13 +2587,12 @@ calibration_loop:
|
||||||
current_fail_length++;
|
current_fail_length++;
|
||||||
|
|
||||||
if (current_fail_length >= (dly_val >> 2)) {
|
if (current_fail_length >= (dly_val >> 2)) {
|
||||||
if (fail_found == FALSE) {
|
if (fail_found == false)
|
||||||
fail_found = TRUE;
|
fail_found = true;
|
||||||
} else if (pass_found == TRUE) {
|
else if (pass_found == true)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
} /* for rffd */
|
} /* for rffd */
|
||||||
|
|
||||||
/*------------------------------------------------------------------
|
/*------------------------------------------------------------------
|
||||||
|
@ -2618,9 +2615,9 @@ calibration_loop:
|
||||||
current_pass_length = 0;
|
current_pass_length = 0;
|
||||||
current_fail_length = 0;
|
current_fail_length = 0;
|
||||||
current_start = 0;
|
current_start = 0;
|
||||||
window_found = FALSE;
|
window_found = false;
|
||||||
fail_found = FALSE;
|
fail_found = false;
|
||||||
pass_found = FALSE;
|
pass_found = false;
|
||||||
|
|
||||||
for (rqfd = 0; rqfd <= SDRAM_RQDC_RQFD_MAX; rqfd++) {
|
for (rqfd = 0; rqfd <= SDRAM_RQDC_RQFD_MAX; rqfd++) {
|
||||||
mfsdram(SDRAM_RQDC, rqdc_reg);
|
mfsdram(SDRAM_RQDC, rqdc_reg);
|
||||||
|
@ -2635,8 +2632,8 @@ calibration_loop:
|
||||||
* See if the rffd value passed.
|
* See if the rffd value passed.
|
||||||
*-----------------------------------------------------------------*/
|
*-----------------------------------------------------------------*/
|
||||||
if (short_mem_test()) {
|
if (short_mem_test()) {
|
||||||
if (fail_found == TRUE) {
|
if (fail_found == true) {
|
||||||
pass_found = TRUE;
|
pass_found = true;
|
||||||
if (current_pass_length == 0)
|
if (current_pass_length == 0)
|
||||||
current_start = rqfd;
|
current_start = rqfd;
|
||||||
|
|
||||||
|
@ -2653,10 +2650,10 @@ calibration_loop:
|
||||||
current_pass_length = 0;
|
current_pass_length = 0;
|
||||||
current_fail_length++;
|
current_fail_length++;
|
||||||
|
|
||||||
if (fail_found == FALSE) {
|
if (fail_found == false) {
|
||||||
fail_found = TRUE;
|
fail_found = true;
|
||||||
} else if (pass_found == TRUE) {
|
} else if (pass_found == true) {
|
||||||
window_found = TRUE;
|
window_found = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2667,7 +2664,7 @@ calibration_loop:
|
||||||
/*------------------------------------------------------------------
|
/*------------------------------------------------------------------
|
||||||
* Make sure we found the valid read passing window. Halt if not
|
* Make sure we found the valid read passing window. Halt if not
|
||||||
*-----------------------------------------------------------------*/
|
*-----------------------------------------------------------------*/
|
||||||
if (window_found == FALSE) {
|
if (window_found == false) {
|
||||||
if (rqfd_start < SDRAM_RQDC_RQFD_MAX) {
|
if (rqfd_start < SDRAM_RQDC_RQFD_MAX) {
|
||||||
putc('\b');
|
putc('\b');
|
||||||
putc(slash[loopi++ % 8]);
|
putc(slash[loopi++ % 8]);
|
||||||
|
@ -2769,13 +2766,13 @@ static void test(void)
|
||||||
mtsdram(SDRAM_MCOPT1, (val & ~SDRAM_MCOPT1_MCHK_MASK) |
|
mtsdram(SDRAM_MCOPT1, (val & ~SDRAM_MCOPT1_MCHK_MASK) |
|
||||||
SDRAM_MCOPT1_MCHK_NON);
|
SDRAM_MCOPT1_MCHK_NON);
|
||||||
|
|
||||||
window_found = FALSE;
|
window_found = false;
|
||||||
begin_found[0] = FALSE;
|
begin_found[0] = false;
|
||||||
end_found[0] = FALSE;
|
end_found[0] = false;
|
||||||
search_end[0] = FALSE;
|
search_end[0] = false;
|
||||||
begin_found[1] = FALSE;
|
begin_found[1] = false;
|
||||||
end_found[1] = FALSE;
|
end_found[1] = false;
|
||||||
search_end[1] = FALSE;
|
search_end[1] = false;
|
||||||
|
|
||||||
for (dimm_num = 0; dimm_num < MAXDIMMS; dimm_num++) {
|
for (dimm_num = 0; dimm_num < MAXDIMMS; dimm_num++) {
|
||||||
mfsdram(SDRAM_MB0CF + (bxcr_num << 2), bxcf[bxcr_num]);
|
mfsdram(SDRAM_MB0CF + (bxcr_num << 2), bxcf[bxcr_num]);
|
||||||
|
@ -2812,32 +2809,32 @@ static void test(void)
|
||||||
* See if the rffd value passed.
|
* See if the rffd value passed.
|
||||||
*-----------------------------------------------------------------*/
|
*-----------------------------------------------------------------*/
|
||||||
if (i < NUMMEMTESTS) {
|
if (i < NUMMEMTESTS) {
|
||||||
if ((end_found[dimm_num] == FALSE) &&
|
if ((end_found[dimm_num] == false) &&
|
||||||
(search_end[dimm_num] == TRUE)) {
|
(search_end[dimm_num] == true)) {
|
||||||
end_found[dimm_num] = TRUE;
|
end_found[dimm_num] = true;
|
||||||
}
|
}
|
||||||
if ((end_found[0] == TRUE) &&
|
if ((end_found[0] == true) &&
|
||||||
(end_found[1] == TRUE))
|
(end_found[1] == true))
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
if (begin_found[dimm_num] == FALSE) {
|
if (begin_found[dimm_num] == false) {
|
||||||
begin_found[dimm_num] = TRUE;
|
begin_found[dimm_num] = true;
|
||||||
search_end[dimm_num] = TRUE;
|
search_end[dimm_num] = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
begin_found[dimm_num] = TRUE;
|
begin_found[dimm_num] = true;
|
||||||
end_found[dimm_num] = TRUE;
|
end_found[dimm_num] = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((begin_found[0] == TRUE) && (begin_found[1] == TRUE))
|
if ((begin_found[0] == true) && (begin_found[1] == true))
|
||||||
window_found = TRUE;
|
window_found = true;
|
||||||
|
|
||||||
/*------------------------------------------------------------------
|
/*------------------------------------------------------------------
|
||||||
* Make sure we found the valid read passing window. Halt if not
|
* Make sure we found the valid read passing window. Halt if not
|
||||||
*-----------------------------------------------------------------*/
|
*-----------------------------------------------------------------*/
|
||||||
if (window_found == FALSE) {
|
if (window_found == false) {
|
||||||
printf("ERROR: Cannot determine a common read delay for the "
|
printf("ERROR: Cannot determine a common read delay for the "
|
||||||
"DIMM(s) installed.\n");
|
"DIMM(s) installed.\n");
|
||||||
spd_ddr_init_hang ();
|
spd_ddr_init_hang ();
|
||||||
|
|
|
@ -53,13 +53,6 @@
|
||||||
/*-----------------------------------------------------------------------------+
|
/*-----------------------------------------------------------------------------+
|
||||||
* Defines
|
* Defines
|
||||||
*-----------------------------------------------------------------------------*/
|
*-----------------------------------------------------------------------------*/
|
||||||
#ifndef TRUE
|
|
||||||
#define TRUE 1
|
|
||||||
#endif
|
|
||||||
#ifndef FALSE
|
|
||||||
#define FALSE 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define MAXDIMMS 2
|
#define MAXDIMMS 2
|
||||||
#define MAXRANKS 2
|
#define MAXRANKS 2
|
||||||
|
|
||||||
|
@ -279,7 +272,7 @@ static void get_spd_info(unsigned long dimm_ranks[],
|
||||||
unsigned long num_dimm_banks)
|
unsigned long num_dimm_banks)
|
||||||
{
|
{
|
||||||
unsigned long dimm_num;
|
unsigned long dimm_num;
|
||||||
unsigned long dimm_found = FALSE;
|
unsigned long dimm_found = false;
|
||||||
unsigned long const max_ranks_per_dimm = (1 == num_dimm_banks) ? 2 : 1;
|
unsigned long const max_ranks_per_dimm = (1 == num_dimm_banks) ? 2 : 1;
|
||||||
unsigned char num_of_bytes;
|
unsigned char num_of_bytes;
|
||||||
unsigned char total_size;
|
unsigned char total_size;
|
||||||
|
@ -334,7 +327,7 @@ static void get_spd_info(unsigned long dimm_ranks[],
|
||||||
"\n\n");
|
"\n\n");
|
||||||
spd_ddr_init_hang();
|
spd_ddr_init_hang();
|
||||||
}
|
}
|
||||||
dimm_found = TRUE;
|
dimm_found = true;
|
||||||
debug("DIMM slot %lu: populated with %lu-rank DDR2 DIMM"
|
debug("DIMM slot %lu: populated with %lu-rank DDR2 DIMM"
|
||||||
"\n", dimm_num, ranks_on_dimm);
|
"\n", dimm_num, ranks_on_dimm);
|
||||||
if (ranks_on_dimm > max_ranks_per_dimm) {
|
if (ranks_on_dimm > max_ranks_per_dimm) {
|
||||||
|
@ -355,7 +348,7 @@ static void get_spd_info(unsigned long dimm_ranks[],
|
||||||
debug("DIMM slot %lu: Not populated\n", dimm_num);
|
debug("DIMM slot %lu: Not populated\n", dimm_num);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (dimm_found == FALSE) {
|
if (dimm_found == false) {
|
||||||
printf("ERROR: No memory installed.\n");
|
printf("ERROR: No memory installed.\n");
|
||||||
printf("Install at least one DDR2 DIMM.\n\n");
|
printf("Install at least one DDR2 DIMM.\n\n");
|
||||||
spd_ddr_init_hang();
|
spd_ddr_init_hang();
|
||||||
|
@ -882,7 +875,7 @@ static void program_ddr0_22(unsigned long dimm_ranks[],
|
||||||
/* Check for ECC */
|
/* Check for ECC */
|
||||||
if (0 == (spd_read(iic0_dimm_addr[dimm_num], 11) &
|
if (0 == (spd_read(iic0_dimm_addr[dimm_num], 11) &
|
||||||
0x02)) {
|
0x02)) {
|
||||||
ecc_available = FALSE;
|
ecc_available = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,19 +50,24 @@ wait_ticks:
|
||||||
stwu r1, -16(r1)
|
stwu r1, -16(r1)
|
||||||
mflr r0 /* save link register */
|
mflr r0 /* save link register */
|
||||||
stw r0, 20(r1) /* Use r0 or GDB will be unhappy */
|
stw r0, 20(r1) /* Use r0 or GDB will be unhappy */
|
||||||
mr r7, r3 /* save tick count */
|
stw r14, 12(r1) /* save used registers */
|
||||||
|
stw r15, 8(r1)
|
||||||
|
mr r14, r3 /* save tick count */
|
||||||
bl get_ticks /* Get start time */
|
bl get_ticks /* Get start time */
|
||||||
|
|
||||||
/* Calculate end time */
|
/* Calculate end time */
|
||||||
addc r7, r4, r7 /* Compute end time lower */
|
addc r14, r4, r14 /* Compute end time lower */
|
||||||
addze r6, r3 /* and end time upper */
|
addze r15, r3 /* and end time upper */
|
||||||
|
|
||||||
WATCHDOG_RESET /* Trigger watchdog, if needed */
|
WATCHDOG_RESET /* Trigger watchdog, if needed */
|
||||||
1: bl get_ticks /* Get current time */
|
1: bl get_ticks /* Get current time */
|
||||||
subfc r4, r4, r7 /* Subtract current time from end time */
|
subfc r4, r4, r14 /* Subtract current time from end time */
|
||||||
subfe. r3, r3, r6
|
subfe. r3, r3, r15
|
||||||
bge 1b /* Loop until time expired */
|
bge 1b /* Loop until time expired */
|
||||||
|
|
||||||
mtlr r0 /* restore link register */
|
lwz r15, 8(r1) /* restore saved registers */
|
||||||
|
lwz r14, 12(r1)
|
||||||
|
lwz r0, 20(r1)
|
||||||
addi r1,r1,16
|
addi r1,r1,16
|
||||||
|
mtlr r0
|
||||||
blr
|
blr
|
||||||
|
|
|
@ -134,6 +134,6 @@ SECTIONS
|
||||||
*(.bss)
|
*(.bss)
|
||||||
*(COMMON)
|
*(COMMON)
|
||||||
}
|
}
|
||||||
__bss_end__ = . ;
|
__bss_end = . ;
|
||||||
PROVIDE (end = .);
|
PROVIDE (end = .);
|
||||||
}
|
}
|
||||||
|
|
|
@ -383,7 +383,7 @@ unsigned int memoryGetDeviceWidth (DEVICE device)
|
||||||
* OUTPUT:
|
* OUTPUT:
|
||||||
* None.
|
* None.
|
||||||
* RETURN:
|
* RETURN:
|
||||||
* False for invalid size, true otherwise.
|
* false for invalid size, true otherwise.
|
||||||
*
|
*
|
||||||
* CAUTION: PCI_functions must be implemented later To_do !!!!!!!!!!!!!!!!!
|
* CAUTION: PCI_functions must be implemented later To_do !!!!!!!!!!!!!!!!!
|
||||||
*
|
*
|
||||||
|
@ -509,7 +509,7 @@ bool memoryMapBank (MEMORY_BANK bank, unsigned int bankBase,
|
||||||
* None.
|
* None.
|
||||||
*
|
*
|
||||||
* RETURN:
|
* RETURN:
|
||||||
* False for invalid size, true otherwise.
|
* false for invalid size, true otherwise.
|
||||||
*
|
*
|
||||||
* CAUTION: PCI_functions must be implemented later To_do !!!!!!!!!!!!!!!!!
|
* CAUTION: PCI_functions must be implemented later To_do !!!!!!!!!!!!!!!!!
|
||||||
*
|
*
|
||||||
|
@ -624,7 +624,7 @@ bool memoryMapDeviceSpace (DEVICE device, unsigned int deviceBase,
|
||||||
* None.
|
* None.
|
||||||
*
|
*
|
||||||
* RETURN:
|
* RETURN:
|
||||||
* False for invalid size, true otherwise.
|
* false for invalid size, true otherwise.
|
||||||
*
|
*
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
bool memorySetPciWindow (PCI_MEM_WINDOW pciWindow, unsigned int pciWindowBase,
|
bool memorySetPciWindow (PCI_MEM_WINDOW pciWindow, unsigned int pciWindowBase,
|
||||||
|
@ -885,7 +885,7 @@ void gtMemorySetInternalSramBaseAddr (unsigned int sramBaseAddress)
|
||||||
* None.
|
* None.
|
||||||
*
|
*
|
||||||
* RETURN:
|
* RETURN:
|
||||||
* False for invalid size, true otherwise.
|
* false for invalid size, true otherwise.
|
||||||
*
|
*
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
bool memorySetProtectRegion (MEMORY_PROTECT_WINDOW window,
|
bool memorySetProtectRegion (MEMORY_PROTECT_WINDOW window,
|
||||||
|
@ -1380,7 +1380,7 @@ void MemoryEnableWindow (MEMORY_WINDOW window)
|
||||||
* OUTPUT:
|
* OUTPUT:
|
||||||
* None.
|
* None.
|
||||||
* RETURN:
|
* RETURN:
|
||||||
* True for a closed window, false otherwise .
|
* true for a closed window, false otherwise .
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
MEMORY_WINDOW_STATUS MemoryGetMemWindowStatus (MEMORY_WINDOW window)
|
MEMORY_WINDOW_STATUS MemoryGetMemWindowStatus (MEMORY_WINDOW window)
|
||||||
{
|
{
|
||||||
|
|
|
@ -966,7 +966,7 @@ static int galmpsc_set_snoop (int mpsc, int value)
|
||||||
* None.
|
* None.
|
||||||
*
|
*
|
||||||
* RETURN:
|
* RETURN:
|
||||||
* True for success, false otherwise.
|
* true for success, false otherwise.
|
||||||
*
|
*
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
|
|
||||||
|
|
|
@ -46,13 +46,6 @@
|
||||||
**************************************************************************
|
**************************************************************************
|
||||||
**************************************************************************
|
**************************************************************************
|
||||||
*************************************************************************/
|
*************************************************************************/
|
||||||
#ifndef TRUE
|
|
||||||
#define TRUE 1
|
|
||||||
#endif
|
|
||||||
#ifndef FALSE
|
|
||||||
#define FALSE 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* In case not using SG on Tx, define MAX_SKB_FRAGS as 0 */
|
/* In case not using SG on Tx, define MAX_SKB_FRAGS as 0 */
|
||||||
#ifndef MAX_SKB_FRAGS
|
#ifndef MAX_SKB_FRAGS
|
||||||
#define MAX_SKB_FRAGS 0
|
#define MAX_SKB_FRAGS 0
|
||||||
|
|
|
@ -966,7 +966,7 @@ static int galmpsc_set_snoop (int mpsc, int value)
|
||||||
* None.
|
* None.
|
||||||
*
|
*
|
||||||
* RETURN:
|
* RETURN:
|
||||||
* True for success, false otherwise.
|
* true for success, false otherwise.
|
||||||
*
|
*
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
|
|
||||||
|
|
|
@ -47,13 +47,6 @@
|
||||||
**************************************************************************
|
**************************************************************************
|
||||||
**************************************************************************
|
**************************************************************************
|
||||||
*************************************************************************/
|
*************************************************************************/
|
||||||
#ifndef TRUE
|
|
||||||
#define TRUE 1
|
|
||||||
#endif
|
|
||||||
#ifndef FALSE
|
|
||||||
#define FALSE 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* In case not using SG on Tx, define MAX_SKB_FRAGS as 0 */
|
/* In case not using SG on Tx, define MAX_SKB_FRAGS as 0 */
|
||||||
#ifndef MAX_SKB_FRAGS
|
#ifndef MAX_SKB_FRAGS
|
||||||
#define MAX_SKB_FRAGS 0
|
#define MAX_SKB_FRAGS 0
|
||||||
|
|
|
@ -91,11 +91,6 @@ extern unsigned int INTERNAL_REG_BASE_ADDR;
|
||||||
#define _1G 0x40000000
|
#define _1G 0x40000000
|
||||||
#define _2G 0x80000000
|
#define _2G 0x80000000
|
||||||
|
|
||||||
#ifndef BOOL_WAS_DEFINED
|
|
||||||
#define BOOL_WAS_DEFINED
|
|
||||||
typedef enum _bool{false,true} bool;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Little to Big endian conversion macros */
|
/* Little to Big endian conversion macros */
|
||||||
|
|
||||||
#ifdef LE /* Little Endian */
|
#ifdef LE /* Little Endian */
|
||||||
|
|
|
@ -132,6 +132,6 @@ SECTIONS
|
||||||
*(.bss)
|
*(.bss)
|
||||||
*(COMMON)
|
*(COMMON)
|
||||||
}
|
}
|
||||||
__bss_end__ = . ;
|
__bss_end = . ;
|
||||||
PROVIDE (end = .);
|
PROVIDE (end = .);
|
||||||
}
|
}
|
||||||
|
|
|
@ -132,6 +132,6 @@ SECTIONS
|
||||||
*(.bss)
|
*(.bss)
|
||||||
*(COMMON)
|
*(COMMON)
|
||||||
}
|
}
|
||||||
__bss_end__ = . ;
|
__bss_end = . ;
|
||||||
PROVIDE (end = .);
|
PROVIDE (end = .);
|
||||||
}
|
}
|
||||||
|
|
|
@ -132,6 +132,6 @@ SECTIONS
|
||||||
*(.bss)
|
*(.bss)
|
||||||
*(COMMON)
|
*(COMMON)
|
||||||
}
|
}
|
||||||
__bss_end__ = . ;
|
__bss_end = . ;
|
||||||
PROVIDE (end = .);
|
PROVIDE (end = .);
|
||||||
}
|
}
|
||||||
|
|
|
@ -561,7 +561,8 @@ static char *menu_handle(struct menu_display *display)
|
||||||
char *s;
|
char *s;
|
||||||
char temp[6][200];
|
char temp[6][200];
|
||||||
|
|
||||||
m = menu_create(display->title, display->timeout, 1, ait_menu_print);
|
m = menu_create(display->title, display->timeout, 1, ait_menu_print,
|
||||||
|
NULL, NULL);
|
||||||
|
|
||||||
for (i = 0; display->menulist[i]; i++) {
|
for (i = 0; display->menulist[i]; i++) {
|
||||||
sprintf(key, "%d", i + 1);
|
sprintf(key, "%d", i + 1);
|
||||||
|
|
|
@ -477,16 +477,16 @@ int is_powerpc440ep_pass1(void)
|
||||||
pvr = get_pvr();
|
pvr = get_pvr();
|
||||||
|
|
||||||
if (pvr == PVR_POWERPC_440EP_PASS1)
|
if (pvr == PVR_POWERPC_440EP_PASS1)
|
||||||
return TRUE;
|
return true;
|
||||||
else if (pvr == PVR_POWERPC_440EP_PASS2)
|
else if (pvr == PVR_POWERPC_440EP_PASS2)
|
||||||
return FALSE;
|
return false;
|
||||||
else {
|
else {
|
||||||
printf("brdutil error 3\n");
|
printf("brdutil error 3\n");
|
||||||
for (;;)
|
for (;;)
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
return(FALSE);
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------+
|
/*----------------------------------------------------------------------------+
|
||||||
|
@ -495,9 +495,9 @@ int is_powerpc440ep_pass1(void)
|
||||||
int is_nand_selected(void)
|
int is_nand_selected(void)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_BAMBOO_NAND
|
#ifdef CONFIG_BAMBOO_NAND
|
||||||
return TRUE;
|
return true;
|
||||||
#else
|
#else
|
||||||
return FALSE;
|
return false;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -507,7 +507,7 @@ int is_nand_selected(void)
|
||||||
unsigned char config_on_ebc_cs4_is_small_flash(void)
|
unsigned char config_on_ebc_cs4_is_small_flash(void)
|
||||||
{
|
{
|
||||||
/* Not implemented yet => returns constant value */
|
/* Not implemented yet => returns constant value */
|
||||||
return TRUE;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------+
|
/*----------------------------------------------------------------------------+
|
||||||
|
@ -561,7 +561,7 @@ void ext_bus_cntlr_init(void)
|
||||||
/*-------------------------------------------------------------------------+
|
/*-------------------------------------------------------------------------+
|
||||||
| PPC440EP Pass1
|
| PPC440EP Pass1
|
||||||
+-------------------------------------------------------------------------*/
|
+-------------------------------------------------------------------------*/
|
||||||
if (is_powerpc440ep_pass1() == TRUE) {
|
if (is_powerpc440ep_pass1() == true) {
|
||||||
switch(bootstrap_settings) {
|
switch(bootstrap_settings) {
|
||||||
case SDR0_PSTRP0_BOOTSTRAP_SETTINGS0:
|
case SDR0_PSTRP0_BOOTSTRAP_SETTINGS0:
|
||||||
/* Default Strap Settings 0 : CPU 400 - PLB 133 - Boot EBC 8 bit 33MHz */
|
/* Default Strap Settings 0 : CPU 400 - PLB 133 - Boot EBC 8 bit 33MHz */
|
||||||
|
@ -738,7 +738,7 @@ void ext_bus_cntlr_init(void)
|
||||||
/*------------------------------------------------------------------------- */
|
/*------------------------------------------------------------------------- */
|
||||||
ebc0_cs0_bnap_value = EBC0_BNAP_SMALL_FLASH;
|
ebc0_cs0_bnap_value = EBC0_BNAP_SMALL_FLASH;
|
||||||
ebc0_cs0_bncr_value = EBC0_BNCR_SMALL_FLASH_CS0;
|
ebc0_cs0_bncr_value = EBC0_BNCR_SMALL_FLASH_CS0;
|
||||||
if ((is_nand_selected()) == TRUE) {
|
if ((is_nand_selected()) == true) {
|
||||||
/* NAND Flash */
|
/* NAND Flash */
|
||||||
ebc0_cs1_bnap_value = EBC0_BNAP_NAND_FLASH;
|
ebc0_cs1_bnap_value = EBC0_BNAP_NAND_FLASH;
|
||||||
ebc0_cs1_bncr_value = EBC0_BNCR_NAND_FLASH_CS1;
|
ebc0_cs1_bncr_value = EBC0_BNCR_NAND_FLASH_CS1;
|
||||||
|
@ -765,7 +765,7 @@ void ext_bus_cntlr_init(void)
|
||||||
/*------------------------------------------------------------------------- */
|
/*------------------------------------------------------------------------- */
|
||||||
ebc0_cs0_bnap_value = EBC0_BNAP_LARGE_FLASH_OR_SRAM;
|
ebc0_cs0_bnap_value = EBC0_BNAP_LARGE_FLASH_OR_SRAM;
|
||||||
ebc0_cs0_bncr_value = EBC0_BNCR_LARGE_FLASH_OR_SRAM_CS0;
|
ebc0_cs0_bncr_value = EBC0_BNCR_LARGE_FLASH_OR_SRAM_CS0;
|
||||||
if ((is_nand_selected()) == TRUE) {
|
if ((is_nand_selected()) == true) {
|
||||||
/* NAND Flash */
|
/* NAND Flash */
|
||||||
ebc0_cs1_bnap_value = EBC0_BNAP_NAND_FLASH;
|
ebc0_cs1_bnap_value = EBC0_BNAP_NAND_FLASH;
|
||||||
ebc0_cs1_bncr_value = EBC0_BNCR_NAND_FLASH_CS1;
|
ebc0_cs1_bncr_value = EBC0_BNCR_NAND_FLASH_CS1;
|
||||||
|
@ -812,7 +812,7 @@ void ext_bus_cntlr_init(void)
|
||||||
ebc0_cs0_bnap_value = 0;
|
ebc0_cs0_bnap_value = 0;
|
||||||
ebc0_cs0_bncr_value = 0;
|
ebc0_cs0_bncr_value = 0;
|
||||||
|
|
||||||
if ((is_nand_selected()) == TRUE) {
|
if ((is_nand_selected()) == true) {
|
||||||
/* NAND Flash */
|
/* NAND Flash */
|
||||||
ebc0_cs1_bnap_value = EBC0_BNAP_NAND_FLASH;
|
ebc0_cs1_bnap_value = EBC0_BNAP_NAND_FLASH;
|
||||||
ebc0_cs1_bncr_value = EBC0_BNCR_NAND_FLASH_CS1;
|
ebc0_cs1_bncr_value = EBC0_BNCR_NAND_FLASH_CS1;
|
||||||
|
@ -830,7 +830,7 @@ void ext_bus_cntlr_init(void)
|
||||||
ebc0_cs3_bncr_value = 0;
|
ebc0_cs3_bncr_value = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((config_on_ebc_cs4_is_small_flash()) == TRUE) {
|
if ((config_on_ebc_cs4_is_small_flash()) == true) {
|
||||||
/* Small Flash */
|
/* Small Flash */
|
||||||
ebc0_cs4_bnap_value = EBC0_BNAP_SMALL_FLASH;
|
ebc0_cs4_bnap_value = EBC0_BNAP_SMALL_FLASH;
|
||||||
ebc0_cs4_bncr_value = EBC0_BNCR_SMALL_FLASH_CS4;
|
ebc0_cs4_bncr_value = EBC0_BNCR_SMALL_FLASH_CS4;
|
||||||
|
|
|
@ -250,9 +250,6 @@
|
||||||
#define PVR_POWERPC_440EP_PASS1 0x42221850
|
#define PVR_POWERPC_440EP_PASS1 0x42221850
|
||||||
#define PVR_POWERPC_440EP_PASS2 0x422218D3
|
#define PVR_POWERPC_440EP_PASS2 0x422218D3
|
||||||
|
|
||||||
#define TRUE 1
|
|
||||||
#define FALSE 0
|
|
||||||
|
|
||||||
#define GPIO0 0
|
#define GPIO0 0
|
||||||
#define GPIO1 1
|
#define GPIO1 1
|
||||||
|
|
||||||
|
|
|
@ -47,9 +47,6 @@ void fpga_init (void);
|
||||||
#define DEBUGF(fmt,args...)
|
#define DEBUGF(fmt,args...)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define FALSE 0
|
|
||||||
#define TRUE 1
|
|
||||||
|
|
||||||
int board_early_init_f (void)
|
int board_early_init_f (void)
|
||||||
{
|
{
|
||||||
/*----------------------------------------------------------------------------+
|
/*----------------------------------------------------------------------------+
|
||||||
|
|
|
@ -32,8 +32,6 @@
|
||||||
|
|
||||||
#define V_ULONG(a) (*(volatile unsigned long *)( a ))
|
#define V_ULONG(a) (*(volatile unsigned long *)( a ))
|
||||||
#define V_BYTE(a) (*(volatile unsigned char *)( a ))
|
#define V_BYTE(a) (*(volatile unsigned char *)( a ))
|
||||||
#define TRUE 0x1
|
|
||||||
#define FALSE 0x0
|
|
||||||
#define BUFFER_SIZE 0x80000
|
#define BUFFER_SIZE 0x80000
|
||||||
#define NO_COMMAND 0
|
#define NO_COMMAND 0
|
||||||
#define GET_CODES 1
|
#define GET_CODES 1
|
||||||
|
|
|
@ -309,7 +309,7 @@ int read_flash(long nOffset, int *pnValue)
|
||||||
nValue = *(volatile unsigned short *)addr;
|
nValue = *(volatile unsigned short *)addr;
|
||||||
SSYNC();
|
SSYNC();
|
||||||
*pnValue = nValue;
|
*pnValue = nValue;
|
||||||
return TRUE;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
int poll_toggle_bit(long lOffset)
|
int poll_toggle_bit(long lOffset)
|
||||||
|
@ -398,7 +398,7 @@ int erase_block_flash(int nBlock, unsigned long address)
|
||||||
long ulSectorOff = 0x0;
|
long ulSectorOff = 0x0;
|
||||||
|
|
||||||
if ((nBlock < 0) || (nBlock > AFP_NumSectors))
|
if ((nBlock < 0) || (nBlock > AFP_NumSectors))
|
||||||
return FALSE;
|
return false;
|
||||||
|
|
||||||
ulSectorOff = (address - CONFIG_SYS_FLASH_BASE);
|
ulSectorOff = (address - CONFIG_SYS_FLASH_BASE);
|
||||||
|
|
||||||
|
|
|
@ -9,9 +9,6 @@
|
||||||
#define YELLOW (0xD292D210) /* yellow pixel pattern */
|
#define YELLOW (0xD292D210) /* yellow pixel pattern */
|
||||||
#define WHITE (0xFE80FE80) /* white pixel pattern */
|
#define WHITE (0xFE80FE80) /* white pixel pattern */
|
||||||
|
|
||||||
#define true 1
|
|
||||||
#define false 0
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
unsigned int sav;
|
unsigned int sav;
|
||||||
unsigned int eav;
|
unsigned int eav;
|
||||||
|
|
|
@ -91,6 +91,7 @@ static int splash_load_from_nand(u32 bmp_load_addr)
|
||||||
|
|
||||||
res = nand_read_skip_bad(&nand_info[nand_curr_device],
|
res = nand_read_skip_bad(&nand_info[nand_curr_device],
|
||||||
splash_screen_nand_offset, &bmp_header_size,
|
splash_screen_nand_offset, &bmp_header_size,
|
||||||
|
NULL, nand_info[nand_curr_device].size,
|
||||||
(u_char *)bmp_load_addr);
|
(u_char *)bmp_load_addr);
|
||||||
if (res < 0)
|
if (res < 0)
|
||||||
return res;
|
return res;
|
||||||
|
@ -103,6 +104,7 @@ static int splash_load_from_nand(u32 bmp_load_addr)
|
||||||
|
|
||||||
return nand_read_skip_bad(&nand_info[nand_curr_device],
|
return nand_read_skip_bad(&nand_info[nand_curr_device],
|
||||||
splash_screen_nand_offset, &bmp_size,
|
splash_screen_nand_offset, &bmp_size,
|
||||||
|
NULL, nand_info[nand_curr_device].size,
|
||||||
(u_char *)bmp_load_addr);
|
(u_char *)bmp_load_addr);
|
||||||
|
|
||||||
splash_address_too_high:
|
splash_address_too_high:
|
||||||
|
|
|
@ -381,14 +381,6 @@ static enum display_type env_parse_displaytype(char *displaytype)
|
||||||
return NONE;
|
return NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
int lcd_line_length;
|
|
||||||
int lcd_color_fg;
|
|
||||||
int lcd_color_bg;
|
|
||||||
void *lcd_base;
|
|
||||||
short console_col;
|
|
||||||
short console_row;
|
|
||||||
void *lcd_console_address;
|
|
||||||
|
|
||||||
void lcd_ctrl_init(void *lcdbase)
|
void lcd_ctrl_init(void *lcdbase)
|
||||||
{
|
{
|
||||||
struct prcm *prcm = (struct prcm *)PRCM_BASE;
|
struct prcm *prcm = (struct prcm *)PRCM_BASE;
|
||||||
|
|
|
@ -132,6 +132,6 @@ SECTIONS
|
||||||
*(.bss)
|
*(.bss)
|
||||||
*(COMMON)
|
*(COMMON)
|
||||||
}
|
}
|
||||||
__bss_end__ = . ;
|
__bss_end = . ;
|
||||||
PROVIDE (end = .);
|
PROVIDE (end = .);
|
||||||
}
|
}
|
||||||
|
|
|
@ -132,6 +132,6 @@ SECTIONS
|
||||||
*(.bss)
|
*(.bss)
|
||||||
*(COMMON)
|
*(COMMON)
|
||||||
}
|
}
|
||||||
__bss_end__ = . ;
|
__bss_end = . ;
|
||||||
PROVIDE (end = .);
|
PROVIDE (end = .);
|
||||||
}
|
}
|
||||||
|
|
|
@ -132,6 +132,6 @@ SECTIONS
|
||||||
*(.bss)
|
*(.bss)
|
||||||
*(COMMON)
|
*(COMMON)
|
||||||
}
|
}
|
||||||
__bss_end__ = . ;
|
__bss_end = . ;
|
||||||
PROVIDE (end = .);
|
PROVIDE (end = .);
|
||||||
}
|
}
|
||||||
|
|
|
@ -126,6 +126,6 @@ SECTIONS
|
||||||
*(.bss)
|
*(.bss)
|
||||||
*(COMMON)
|
*(COMMON)
|
||||||
}
|
}
|
||||||
__bss_end__ = . ;
|
__bss_end = . ;
|
||||||
PROVIDE (end = .);
|
PROVIDE (end = .);
|
||||||
}
|
}
|
||||||
|
|
|
@ -260,7 +260,7 @@ int lcd_init(uchar *lcd_reg, uchar *lcd_mem, S1D_REGS *regs, int reg_count,
|
||||||
/*
|
/*
|
||||||
* Big epson detected
|
* Big epson detected
|
||||||
*/
|
*/
|
||||||
reg_byte_swap = FALSE;
|
reg_byte_swap = false;
|
||||||
palette_index = 0x1e2;
|
palette_index = 0x1e2;
|
||||||
palette_value = 0x1e4;
|
palette_value = 0x1e4;
|
||||||
lcd_depth = 16;
|
lcd_depth = 16;
|
||||||
|
@ -269,7 +269,7 @@ int lcd_init(uchar *lcd_reg, uchar *lcd_mem, S1D_REGS *regs, int reg_count,
|
||||||
/*
|
/*
|
||||||
* Big epson detected (with register swap bug)
|
* Big epson detected (with register swap bug)
|
||||||
*/
|
*/
|
||||||
reg_byte_swap = TRUE;
|
reg_byte_swap = true;
|
||||||
palette_index = 0x1e3;
|
palette_index = 0x1e3;
|
||||||
palette_value = 0x1e5;
|
palette_value = 0x1e5;
|
||||||
lcd_depth = 16;
|
lcd_depth = 16;
|
||||||
|
@ -278,7 +278,7 @@ int lcd_init(uchar *lcd_reg, uchar *lcd_mem, S1D_REGS *regs, int reg_count,
|
||||||
/*
|
/*
|
||||||
* Small epson detected (704)
|
* Small epson detected (704)
|
||||||
*/
|
*/
|
||||||
reg_byte_swap = FALSE;
|
reg_byte_swap = false;
|
||||||
palette_index = 0x15;
|
palette_index = 0x15;
|
||||||
palette_value = 0x17;
|
palette_value = 0x17;
|
||||||
lcd_depth = 8;
|
lcd_depth = 8;
|
||||||
|
@ -287,7 +287,7 @@ int lcd_init(uchar *lcd_reg, uchar *lcd_mem, S1D_REGS *regs, int reg_count,
|
||||||
/*
|
/*
|
||||||
* Small epson detected (705)
|
* Small epson detected (705)
|
||||||
*/
|
*/
|
||||||
reg_byte_swap = FALSE;
|
reg_byte_swap = false;
|
||||||
palette_index = 0x15;
|
palette_index = 0x15;
|
||||||
palette_value = 0x17;
|
palette_value = 0x17;
|
||||||
lcd_depth = 8;
|
lcd_depth = 8;
|
||||||
|
@ -300,7 +300,7 @@ int lcd_init(uchar *lcd_reg, uchar *lcd_mem, S1D_REGS *regs, int reg_count,
|
||||||
/*
|
/*
|
||||||
* S1D13505 detected
|
* S1D13505 detected
|
||||||
*/
|
*/
|
||||||
reg_byte_swap = TRUE;
|
reg_byte_swap = true;
|
||||||
palette_index = 0x25;
|
palette_index = 0x25;
|
||||||
palette_value = 0x27;
|
palette_value = 0x27;
|
||||||
lcd_depth = 16;
|
lcd_depth = 16;
|
||||||
|
|
|
@ -35,11 +35,6 @@
|
||||||
#define LOAD_LONG(data) SWAP_LONG(data)
|
#define LOAD_LONG(data) SWAP_LONG(data)
|
||||||
#define LOAD_SHORT(data) SWAP_SHORT(data)
|
#define LOAD_SHORT(data) SWAP_SHORT(data)
|
||||||
|
|
||||||
#ifndef FALSE
|
|
||||||
#define FALSE 0
|
|
||||||
#define TRUE (!FALSE)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define S1D_WRITE_PALETTE(p,i,r,g,b) \
|
#define S1D_WRITE_PALETTE(p,i,r,g,b) \
|
||||||
{ \
|
{ \
|
||||||
out_8(&((uchar*)(p))[palette_index], (uchar)(i)); \
|
out_8(&((uchar*)(p))[palette_index], (uchar)(i)); \
|
||||||
|
|
|
@ -967,7 +967,7 @@ static int galmpsc_set_snoop (int mpsc, int value)
|
||||||
* None.
|
* None.
|
||||||
*
|
*
|
||||||
* RETURN:
|
* RETURN:
|
||||||
* True for success, false otherwise.
|
* true for success, false otherwise.
|
||||||
*
|
*
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
|
|
||||||
|
|
|
@ -47,13 +47,6 @@
|
||||||
**************************************************************************
|
**************************************************************************
|
||||||
**************************************************************************
|
**************************************************************************
|
||||||
*************************************************************************/
|
*************************************************************************/
|
||||||
#ifndef TRUE
|
|
||||||
#define TRUE 1
|
|
||||||
#endif
|
|
||||||
#ifndef FALSE
|
|
||||||
#define FALSE 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* In case not using SG on Tx, define MAX_SKB_FRAGS as 0 */
|
/* In case not using SG on Tx, define MAX_SKB_FRAGS as 0 */
|
||||||
#ifndef MAX_SKB_FRAGS
|
#ifndef MAX_SKB_FRAGS
|
||||||
#define MAX_SKB_FRAGS 0
|
#define MAX_SKB_FRAGS 0
|
||||||
|
|
|
@ -30,10 +30,6 @@
|
||||||
#define OK 0
|
#define OK 0
|
||||||
#define ERROR (-1)
|
#define ERROR (-1)
|
||||||
|
|
||||||
#define TRUE 1
|
|
||||||
#define FALSE 0
|
|
||||||
|
|
||||||
|
|
||||||
extern u_long pci9054_iobase;
|
extern u_long pci9054_iobase;
|
||||||
|
|
||||||
|
|
||||||
|
@ -97,7 +93,7 @@ static int PciEepromWriteLongVPD (int offs, unsigned int value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -113,7 +113,7 @@ void fpga_serialslave_init(void)
|
||||||
{
|
{
|
||||||
debug("%s:%d: Initialize serial slave interface\n", __FUNCTION__,
|
debug("%s:%d: Initialize serial slave interface\n", __FUNCTION__,
|
||||||
__LINE__);
|
__LINE__);
|
||||||
fpga_pgm_fn(FALSE, FALSE, 0); /* make sure program pin is inactive */
|
fpga_pgm_fn(false, false, 0); /* make sure program pin is inactive */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -188,7 +188,7 @@ int fpga_done_fn(int cookie)
|
||||||
int fpga_pre_config_fn(int cookie)
|
int fpga_pre_config_fn(int cookie)
|
||||||
{
|
{
|
||||||
debug("%s:%d: FPGA pre-configuration\n", __FUNCTION__, __LINE__);
|
debug("%s:%d: FPGA pre-configuration\n", __FUNCTION__, __LINE__);
|
||||||
fpga_reset(TRUE);
|
fpga_reset(true);
|
||||||
|
|
||||||
/* release init# */
|
/* release init# */
|
||||||
out_be32((void*)GPIO0_OR, in_be32((void*)GPIO0_OR) | GPIO0_FPGA_FORCEINIT);
|
out_be32((void*)GPIO0_OR, in_be32((void*)GPIO0_OR) | GPIO0_FPGA_FORCEINIT);
|
||||||
|
@ -213,9 +213,9 @@ int fpga_post_config_fn(int cookie)
|
||||||
/* enable PLD0..7 pins */
|
/* enable PLD0..7 pins */
|
||||||
out_be32((void*)GPIO1_OR, in_be32((void*)GPIO1_OR) & ~GPIO1_IOEN_N);
|
out_be32((void*)GPIO1_OR, in_be32((void*)GPIO1_OR) & ~GPIO1_IOEN_N);
|
||||||
|
|
||||||
fpga_reset(TRUE);
|
fpga_reset(true);
|
||||||
udelay (100);
|
udelay (100);
|
||||||
fpga_reset(FALSE);
|
fpga_reset(false);
|
||||||
udelay (100);
|
udelay (100);
|
||||||
|
|
||||||
FPGA_OUT32(&fpga->status, (gd->board_type << STATUS_HWREV_SHIFT) & STATUS_HWREV_MASK);
|
FPGA_OUT32(&fpga->status, (gd->board_type << STATUS_HWREV_SHIFT) & STATUS_HWREV_MASK);
|
||||||
|
@ -296,7 +296,7 @@ void ngcc_fpga_serialslave_init(void)
|
||||||
__FUNCTION__, __LINE__);
|
__FUNCTION__, __LINE__);
|
||||||
|
|
||||||
/* make sure program pin is inactive */
|
/* make sure program pin is inactive */
|
||||||
ngcc_fpga_pgm_fn (FALSE, FALSE, 0);
|
ngcc_fpga_pgm_fn(false, false, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -382,10 +382,10 @@ int ngcc_fpga_pre_config_fn(int cookie)
|
||||||
pmc440_fpga_t *fpga = (pmc440_fpga_t *)FPGA_BA;
|
pmc440_fpga_t *fpga = (pmc440_fpga_t *)FPGA_BA;
|
||||||
debug("%s:%d: FPGA pre-configuration\n", __FUNCTION__, __LINE__);
|
debug("%s:%d: FPGA pre-configuration\n", __FUNCTION__, __LINE__);
|
||||||
|
|
||||||
ngcc_fpga_reset(TRUE);
|
ngcc_fpga_reset(true);
|
||||||
FPGA_CLRBITS(&fpga->ctrla, 0xfffffe00);
|
FPGA_CLRBITS(&fpga->ctrla, 0xfffffe00);
|
||||||
|
|
||||||
ngcc_fpga_reset(TRUE);
|
ngcc_fpga_reset(true);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -401,7 +401,7 @@ int ngcc_fpga_post_config_fn(int cookie)
|
||||||
debug("%s:%d: NGCC FPGA post configuration\n", __FUNCTION__, __LINE__);
|
debug("%s:%d: NGCC FPGA post configuration\n", __FUNCTION__, __LINE__);
|
||||||
|
|
||||||
udelay (100);
|
udelay (100);
|
||||||
ngcc_fpga_reset(FALSE);
|
ngcc_fpga_reset(false);
|
||||||
|
|
||||||
FPGA_SETBITS(&fpga->ctrla, 0x29f8c000);
|
FPGA_SETBITS(&fpga->ctrla, 0x29f8c000);
|
||||||
|
|
||||||
|
|
|
@ -6,9 +6,6 @@
|
||||||
#include "eth.h"
|
#include "eth.h"
|
||||||
#include "eth_addrtbl.h"
|
#include "eth_addrtbl.h"
|
||||||
|
|
||||||
#define TRUE 1
|
|
||||||
#define FALSE 0
|
|
||||||
|
|
||||||
#define PRINTF printf
|
#define PRINTF printf
|
||||||
|
|
||||||
#ifdef CONFIG_GT_USE_MAC_HASH_TABLE
|
#ifdef CONFIG_GT_USE_MAC_HASH_TABLE
|
||||||
|
@ -160,8 +157,8 @@ u32 hashTableFunction (u32 macH, u32 macL, u32 HashSize, u32 hash_mode)
|
||||||
* rd - the RD field in the address table.
|
* rd - the RD field in the address table.
|
||||||
* Outputs
|
* Outputs
|
||||||
* address table entry is added.
|
* address table entry is added.
|
||||||
* TRUE if success.
|
* true if success.
|
||||||
* FALSE if table full
|
* false if table full
|
||||||
*/
|
*/
|
||||||
int addAddressTableEntry (u32 port, u32 macH, u32 macL, u32 rd, u32 skip)
|
int addAddressTableEntry (u32 port, u32 macH, u32 macL, u32 rd, u32 skip)
|
||||||
{
|
{
|
||||||
|
@ -206,7 +203,7 @@ int addAddressTableEntry (u32 port, u32 macH, u32 macL, u32 rd, u32 skip)
|
||||||
|
|
||||||
if (i == HOP_NUMBER) {
|
if (i == HOP_NUMBER) {
|
||||||
PRINTF ("addGT64260addressTableEntry: table section is full\n");
|
PRINTF ("addGT64260addressTableEntry: table section is full\n");
|
||||||
return (FALSE);
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -215,7 +212,7 @@ int addAddressTableEntry (u32 port, u32 macH, u32 macL, u32 rd, u32 skip)
|
||||||
entry->hi = newHi;
|
entry->hi = newHi;
|
||||||
entry->lo = newLo;
|
entry->lo = newLo;
|
||||||
DCACHE_FLUSH_N_SYNC ((u32) entry, MAC_ENTRY_SIZE);
|
DCACHE_FLUSH_N_SYNC ((u32) entry, MAC_ENTRY_SIZE);
|
||||||
return (TRUE);
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* CONFIG_GT_USE_MAC_HASH_TABLE */
|
#endif /* CONFIG_GT_USE_MAC_HASH_TABLE */
|
||||||
|
|
|
@ -132,6 +132,6 @@ SECTIONS
|
||||||
*(.bss)
|
*(.bss)
|
||||||
*(COMMON)
|
*(COMMON)
|
||||||
}
|
}
|
||||||
__bss_end__ = . ;
|
__bss_end = . ;
|
||||||
PROVIDE (end = .);
|
PROVIDE (end = .);
|
||||||
}
|
}
|
||||||
|
|
|
@ -182,7 +182,7 @@ void fpga_selectmap_init (void)
|
||||||
{
|
{
|
||||||
PRINTF ("%s:%d: Initialize SelectMap interface\n", __FUNCTION__,
|
PRINTF ("%s:%d: Initialize SelectMap interface\n", __FUNCTION__,
|
||||||
__LINE__);
|
__LINE__);
|
||||||
fpga_pgm_fn (FALSE, FALSE, 0); /* make sure program pin is inactive */
|
fpga_pgm_fn(false, false, 0); /* make sure program pin is inactive */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -314,7 +314,7 @@ int fpga_abort_fn (int cookie)
|
||||||
int fpga_pre_config_fn (int cookie)
|
int fpga_pre_config_fn (int cookie)
|
||||||
{
|
{
|
||||||
PRINTF ("%s:%d: FPGA pre-configuration\n", __FUNCTION__, __LINE__);
|
PRINTF ("%s:%d: FPGA pre-configuration\n", __FUNCTION__, __LINE__);
|
||||||
fpga_reset (TRUE);
|
fpga_reset(true);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -328,9 +328,9 @@ int fpga_post_config_fn (int cookie)
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
PRINTF ("%s:%d: FPGA post configuration\n", __FUNCTION__, __LINE__);
|
PRINTF ("%s:%d: FPGA post configuration\n", __FUNCTION__, __LINE__);
|
||||||
fpga_reset (TRUE);
|
fpga_reset(true);
|
||||||
udelay (1000);
|
udelay (1000);
|
||||||
fpga_reset (FALSE);
|
fpga_reset(false);
|
||||||
udelay (1000);
|
udelay (1000);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -138,6 +138,6 @@ SECTIONS
|
||||||
{
|
{
|
||||||
common/env_embedded.o (.ppcenv)
|
common/env_embedded.o (.ppcenv)
|
||||||
}
|
}
|
||||||
__bss_end__ = . ;
|
__bss_end = . ;
|
||||||
PROVIDE (end = .);
|
PROVIDE (end = .);
|
||||||
}
|
}
|
||||||
|
|
|
@ -132,6 +132,6 @@ SECTIONS
|
||||||
*(.bss)
|
*(.bss)
|
||||||
*(COMMON)
|
*(COMMON)
|
||||||
}
|
}
|
||||||
__bss_end__ = . ;
|
__bss_end = . ;
|
||||||
PROVIDE (end = .);
|
PROVIDE (end = .);
|
||||||
}
|
}
|
||||||
|
|
|
@ -132,6 +132,6 @@ SECTIONS
|
||||||
*(.bss)
|
*(.bss)
|
||||||
*(COMMON)
|
*(COMMON)
|
||||||
}
|
}
|
||||||
__bss_end__ = . ;
|
__bss_end = . ;
|
||||||
PROVIDE (end = .);
|
PROVIDE (end = .);
|
||||||
}
|
}
|
||||||
|
|
|
@ -133,6 +133,6 @@ SECTIONS
|
||||||
*(.bss)
|
*(.bss)
|
||||||
*(COMMON)
|
*(COMMON)
|
||||||
}
|
}
|
||||||
__bss_end__ = . ;
|
__bss_end = . ;
|
||||||
PROVIDE (end = .);
|
PROVIDE (end = .);
|
||||||
}
|
}
|
||||||
|
|
|
@ -133,6 +133,6 @@ SECTIONS
|
||||||
*(.bss)
|
*(.bss)
|
||||||
*(COMMON)
|
*(COMMON)
|
||||||
}
|
}
|
||||||
__bss_end__ = . ;
|
__bss_end = . ;
|
||||||
PROVIDE (end = .);
|
PROVIDE (end = .);
|
||||||
}
|
}
|
||||||
|
|
|
@ -133,6 +133,6 @@ SECTIONS
|
||||||
*(.bss)
|
*(.bss)
|
||||||
*(COMMON)
|
*(COMMON)
|
||||||
}
|
}
|
||||||
__bss_end__ = . ;
|
__bss_end = . ;
|
||||||
PROVIDE (end = .);
|
PROVIDE (end = .);
|
||||||
}
|
}
|
||||||
|
|
|
@ -132,6 +132,6 @@ SECTIONS
|
||||||
*(.bss)
|
*(.bss)
|
||||||
*(COMMON)
|
*(COMMON)
|
||||||
}
|
}
|
||||||
__bss_end__ = . ;
|
__bss_end = . ;
|
||||||
PROVIDE (end = .);
|
PROVIDE (end = .);
|
||||||
}
|
}
|
||||||
|
|
|
@ -132,6 +132,6 @@ SECTIONS
|
||||||
*(.bss)
|
*(.bss)
|
||||||
*(COMMON)
|
*(COMMON)
|
||||||
}
|
}
|
||||||
__bss_end__ = . ;
|
__bss_end = . ;
|
||||||
PROVIDE (end = .);
|
PROVIDE (end = .);
|
||||||
}
|
}
|
||||||
|
|
|
@ -133,6 +133,6 @@ SECTIONS
|
||||||
*(.bss)
|
*(.bss)
|
||||||
*(COMMON)
|
*(COMMON)
|
||||||
}
|
}
|
||||||
__bss_end__ = . ;
|
__bss_end = . ;
|
||||||
PROVIDE (end = .);
|
PROVIDE (end = .);
|
||||||
}
|
}
|
||||||
|
|
|
@ -162,7 +162,7 @@ int board_eth_init(bd_t *bis)
|
||||||
|
|
||||||
int overwrite_console(void)
|
int overwrite_console(void)
|
||||||
{
|
{
|
||||||
/* return TRUE if console should be overwritten */
|
/* return true if console should be overwritten */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -133,6 +133,6 @@ SECTIONS
|
||||||
*(.bss)
|
*(.bss)
|
||||||
*(COMMON)
|
*(COMMON)
|
||||||
}
|
}
|
||||||
__bss_end__ = . ;
|
__bss_end = . ;
|
||||||
PROVIDE (end = .);
|
PROVIDE (end = .);
|
||||||
}
|
}
|
||||||
|
|
|
@ -68,32 +68,12 @@ vidinfo_t panel_info = {
|
||||||
LCD_WIDTH, LCD_HEIGHT, LCD_BPP
|
LCD_WIDTH, LCD_HEIGHT, LCD_BPP
|
||||||
};
|
};
|
||||||
|
|
||||||
int lcd_line_length;
|
|
||||||
|
|
||||||
int lcd_color_fg;
|
|
||||||
int lcd_color_bg;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Frame buffer memory information
|
|
||||||
*/
|
|
||||||
void *lcd_base; /* Start of framebuffer memory */
|
|
||||||
void *lcd_console_address; /* Start of console buffer */
|
|
||||||
|
|
||||||
short console_col = 0;
|
|
||||||
short console_row = 0;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The device we use to communicate with PSoC
|
* The device we use to communicate with PSoC
|
||||||
*/
|
*/
|
||||||
int serial_inited = 0;
|
int serial_inited = 0;
|
||||||
|
|
||||||
/*
|
|
||||||
* Exported functions
|
|
||||||
*/
|
|
||||||
void lcd_initcolregs (void);
|
|
||||||
void lcd_ctrl_init (void *lcdbase);
|
|
||||||
void lcd_enable (void);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Imported functions to support the PSoC protocol
|
* Imported functions to support the PSoC protocol
|
||||||
*/
|
*/
|
||||||
|
@ -156,12 +136,12 @@ void lcd_enable (void)
|
||||||
|
|
||||||
#if !defined(SWAPPED_LCD)
|
#if !defined(SWAPPED_LCD)
|
||||||
for (i=0; i<fb_size; i++) {
|
for (i=0; i<fb_size; i++) {
|
||||||
serial_putc_raw_dev (PSOC_PSC, ((char *)lcd_base)[i]);
|
serial_putc_raw_dev(PSOC_PSC, ((char *)gd->fb_base)[i]);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
{
|
{
|
||||||
int x, y, pwidth;
|
int x, y, pwidth;
|
||||||
char *p = (char *)lcd_base;
|
char *p = (char *)gd->fb_base;
|
||||||
|
|
||||||
pwidth = ((panel_info.vl_col+7) >> 3);
|
pwidth = ((panel_info.vl_col+7) >> 3);
|
||||||
for (y=0; y<panel_info.vl_row; y++) {
|
for (y=0; y<panel_info.vl_row; y++) {
|
||||||
|
|
|
@ -450,7 +450,7 @@ STATUS flashWrite (flash_dev_t * dev, int pos, char *buf, int len)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* flashWritable returns TRUE if a range contains all F's.
|
* flashWritable returns true if a range contains all F's.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
STATUS flashWritable (flash_dev_t * dev, int pos, int len)
|
STATUS flashWritable (flash_dev_t * dev, int pos, int len)
|
||||||
|
|
|
@ -96,6 +96,6 @@ SECTIONS
|
||||||
common/env_embedded.o (.ppcenv)
|
common/env_embedded.o (.ppcenv)
|
||||||
} > ram
|
} > ram
|
||||||
|
|
||||||
__bss_end__ = . ;
|
__bss_end = . ;
|
||||||
PROVIDE (end = .);
|
PROVIDE (end = .);
|
||||||
}
|
}
|
||||||
|
|
|
@ -123,6 +123,6 @@ SECTIONS
|
||||||
*(COMMON)
|
*(COMMON)
|
||||||
}
|
}
|
||||||
|
|
||||||
__bss_end__ = . ;
|
__bss_end = . ;
|
||||||
PROVIDE (end = .);
|
PROVIDE (end = .);
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,13 +41,6 @@
|
||||||
#define PRINTF(fmt,args...)
|
#define PRINTF(fmt,args...)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef TRUE
|
|
||||||
#define TRUE 1
|
|
||||||
#endif
|
|
||||||
#ifndef FALSE
|
|
||||||
#define FALSE 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(CONFIG_PIP405)
|
#if defined(CONFIG_PIP405)
|
||||||
|
|
||||||
extern int drv_isa_kbd_init (void);
|
extern int drv_isa_kbd_init (void);
|
||||||
|
@ -116,9 +109,9 @@ unsigned char open_cfg_super_IO(int address)
|
||||||
out8(CONFIG_SYS_ISA_IO_BASE_ADDRESS | address,0x55); /* open config */
|
out8(CONFIG_SYS_ISA_IO_BASE_ADDRESS | address,0x55); /* open config */
|
||||||
out8(CONFIG_SYS_ISA_IO_BASE_ADDRESS | address,0x20); /* set address to DEV ID */
|
out8(CONFIG_SYS_ISA_IO_BASE_ADDRESS | address,0x20); /* set address to DEV ID */
|
||||||
if(in8(CONFIG_SYS_ISA_IO_BASE_ADDRESS | address | 0x1)==0x40) /* ok Device ID is correct */
|
if(in8(CONFIG_SYS_ISA_IO_BASE_ADDRESS | address | 0x1)==0x40) /* ok Device ID is correct */
|
||||||
return TRUE;
|
return true;
|
||||||
else
|
else
|
||||||
return FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void close_cfg_super_IO(int address)
|
void close_cfg_super_IO(int address)
|
||||||
|
@ -179,7 +172,7 @@ void isa_sio_loadtable(void)
|
||||||
|
|
||||||
void isa_sio_setup(void)
|
void isa_sio_setup(void)
|
||||||
{
|
{
|
||||||
if(open_cfg_super_IO(SIO_CFG_PORT)==TRUE)
|
if (open_cfg_super_IO(SIO_CFG_PORT) == true)
|
||||||
{
|
{
|
||||||
isa_sio_loadtable();
|
isa_sio_loadtable();
|
||||||
close_cfg_super_IO(0x3F0);
|
close_cfg_super_IO(0x3F0);
|
||||||
|
|
|
@ -77,8 +77,6 @@ DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
#undef SDRAM_DEBUG
|
#undef SDRAM_DEBUG
|
||||||
#define ENABLE_ECC /* for ecc boards */
|
#define ENABLE_ECC /* for ecc boards */
|
||||||
#define FALSE 0
|
|
||||||
#define TRUE 1
|
|
||||||
|
|
||||||
/* stdlib.h causes some compatibility problems; should fixe these! -- wd */
|
/* stdlib.h causes some compatibility problems; should fixe these! -- wd */
|
||||||
#ifndef __ldiv_t_defined
|
#ifndef __ldiv_t_defined
|
||||||
|
@ -771,7 +769,8 @@ int last_stage_init (void)
|
||||||
|
|
||||||
int overwrite_console (void)
|
int overwrite_console (void)
|
||||||
{
|
{
|
||||||
return ((in8 (PLD_EXT_CONF_REG) & 0x1)==0); /* return TRUE if console should be overwritten */
|
/* return true if console should be overwritten */
|
||||||
|
return ((in8(PLD_EXT_CONF_REG) & 0x1) == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -36,9 +36,6 @@ DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
#undef SDRAM_DEBUG
|
#undef SDRAM_DEBUG
|
||||||
|
|
||||||
#define FALSE 0
|
|
||||||
#define TRUE 1
|
|
||||||
|
|
||||||
/* stdlib.h causes some compatibility problems; should fixe these! -- wd */
|
/* stdlib.h causes some compatibility problems; should fixe these! -- wd */
|
||||||
#ifndef __ldiv_t_defined
|
#ifndef __ldiv_t_defined
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -700,7 +697,8 @@ int misc_init_r (void)
|
||||||
|
|
||||||
int overwrite_console (void)
|
int overwrite_console (void)
|
||||||
{
|
{
|
||||||
return (in8 (CONFIG_PORT_ADDR) & 0x1); /* return TRUE if console should be overwritten */
|
/* return true if console should be overwritten */
|
||||||
|
return in8(CONFIG_PORT_ADDR) & 0x1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -945,7 +943,7 @@ void print_pip405_info (void)
|
||||||
|
|
||||||
void user_led0 (unsigned char on)
|
void user_led0 (unsigned char on)
|
||||||
{
|
{
|
||||||
if (on == TRUE)
|
if (on == true)
|
||||||
out8 (PLD_LED_USER_REG, (in8 (PLD_LED_USER_REG) | 0x1));
|
out8 (PLD_LED_USER_REG, (in8 (PLD_LED_USER_REG) | 0x1));
|
||||||
else
|
else
|
||||||
out8 (PLD_LED_USER_REG, (in8 (PLD_LED_USER_REG) & 0xfe));
|
out8 (PLD_LED_USER_REG, (in8 (PLD_LED_USER_REG) & 0xfe));
|
||||||
|
@ -953,7 +951,7 @@ void user_led0 (unsigned char on)
|
||||||
|
|
||||||
void user_led1 (unsigned char on)
|
void user_led1 (unsigned char on)
|
||||||
{
|
{
|
||||||
if (on == TRUE)
|
if (on == true)
|
||||||
out8 (PLD_LED_USER_REG, (in8 (PLD_LED_USER_REG) | 0x2));
|
out8 (PLD_LED_USER_REG, (in8 (PLD_LED_USER_REG) | 0x2));
|
||||||
else
|
else
|
||||||
out8 (PLD_LED_USER_REG, (in8 (PLD_LED_USER_REG) & 0xfd));
|
out8 (PLD_LED_USER_REG, (in8 (PLD_LED_USER_REG) & 0xfd));
|
||||||
|
|
|
@ -132,6 +132,6 @@ SECTIONS
|
||||||
*(.bss)
|
*(.bss)
|
||||||
*(COMMON)
|
*(COMMON)
|
||||||
}
|
}
|
||||||
__bss_end__ = . ;
|
__bss_end = . ;
|
||||||
PROVIDE (end = .);
|
PROVIDE (end = .);
|
||||||
}
|
}
|
||||||
|
|
|
@ -132,6 +132,6 @@ SECTIONS
|
||||||
*(.bss)
|
*(.bss)
|
||||||
*(COMMON)
|
*(COMMON)
|
||||||
}
|
}
|
||||||
__bss_end__ = . ;
|
__bss_end = . ;
|
||||||
PROVIDE (end = .);
|
PROVIDE (end = .);
|
||||||
}
|
}
|
||||||
|
|
|
@ -132,6 +132,6 @@ SECTIONS
|
||||||
*(.bss)
|
*(.bss)
|
||||||
*(COMMON)
|
*(COMMON)
|
||||||
}
|
}
|
||||||
__bss_end__ = . ;
|
__bss_end = . ;
|
||||||
PROVIDE (end = .);
|
PROVIDE (end = .);
|
||||||
}
|
}
|
||||||
|
|
|
@ -132,6 +132,6 @@ SECTIONS
|
||||||
*(.bss)
|
*(.bss)
|
||||||
*(COMMON)
|
*(COMMON)
|
||||||
}
|
}
|
||||||
__bss_end__ = . ;
|
__bss_end = . ;
|
||||||
PROVIDE (end = .);
|
PROVIDE (end = .);
|
||||||
}
|
}
|
||||||
|
|
|
@ -132,6 +132,6 @@ SECTIONS
|
||||||
*(.bss)
|
*(.bss)
|
||||||
*(COMMON)
|
*(COMMON)
|
||||||
}
|
}
|
||||||
__bss_end__ = . ;
|
__bss_end = . ;
|
||||||
PROVIDE (end = .);
|
PROVIDE (end = .);
|
||||||
}
|
}
|
||||||
|
|
|
@ -132,6 +132,6 @@ SECTIONS
|
||||||
*(.bss)
|
*(.bss)
|
||||||
*(COMMON)
|
*(COMMON)
|
||||||
}
|
}
|
||||||
__bss_end__ = . ;
|
__bss_end = . ;
|
||||||
PROVIDE (end = .);
|
PROVIDE (end = .);
|
||||||
}
|
}
|
||||||
|
|
|
@ -962,7 +962,7 @@ static int galmpsc_set_snoop (int mpsc, int value)
|
||||||
* None.
|
* None.
|
||||||
*
|
*
|
||||||
* RETURN:
|
* RETURN:
|
||||||
* True for success, false otherwise.
|
* true for success, false otherwise.
|
||||||
*
|
*
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
|
|
||||||
|
|
|
@ -47,13 +47,6 @@
|
||||||
**************************************************************************
|
**************************************************************************
|
||||||
**************************************************************************
|
**************************************************************************
|
||||||
*************************************************************************/
|
*************************************************************************/
|
||||||
#ifndef TRUE
|
|
||||||
#define TRUE 1
|
|
||||||
#endif
|
|
||||||
#ifndef FALSE
|
|
||||||
#define FALSE 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* In case not using SG on Tx, define MAX_SKB_FRAGS as 0 */
|
/* In case not using SG on Tx, define MAX_SKB_FRAGS as 0 */
|
||||||
#ifndef MAX_SKB_FRAGS
|
#ifndef MAX_SKB_FRAGS
|
||||||
#define MAX_SKB_FRAGS 0
|
#define MAX_SKB_FRAGS 0
|
||||||
|
|
|
@ -125,6 +125,6 @@ SECTIONS
|
||||||
*(.bss)
|
*(.bss)
|
||||||
*(COMMON)
|
*(COMMON)
|
||||||
}
|
}
|
||||||
__bss_end__ = . ;
|
__bss_end = . ;
|
||||||
PROVIDE (end = .);
|
PROVIDE (end = .);
|
||||||
}
|
}
|
||||||
|
|
|
@ -94,11 +94,11 @@ uint Daq_BRG_Get_Div16(uint brg)
|
||||||
|
|
||||||
if (*brg_ptr & CPM_BRG_DIV16) {
|
if (*brg_ptr & CPM_BRG_DIV16) {
|
||||||
/* DIV16 active */
|
/* DIV16 active */
|
||||||
return (TRUE);
|
return true;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* DIV16 inactive */
|
/* DIV16 inactive */
|
||||||
return (FALSE);
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,11 +22,6 @@
|
||||||
* MA 02111-1307 USA
|
* MA 02111-1307 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef FALSE
|
|
||||||
#define FALSE 0
|
|
||||||
#define TRUE (!FALSE)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define SLRCLK_EN_MASK 0x00040000 /* PA13 - SLRCLK_EN* */
|
#define SLRCLK_EN_MASK 0x00040000 /* PA13 - SLRCLK_EN* */
|
||||||
|
|
||||||
#define MIN_SAMPLE_RATE 4000 /* Minimum sample rate */
|
#define MIN_SAMPLE_RATE 4000 /* Minimum sample rate */
|
||||||
|
|
|
@ -141,6 +141,6 @@ SECTIONS
|
||||||
*(.bss)
|
*(.bss)
|
||||||
*(COMMON)
|
*(COMMON)
|
||||||
}
|
}
|
||||||
__bss_end__ = . ;
|
__bss_end = . ;
|
||||||
PROVIDE (end = .);
|
PROVIDE (end = .);
|
||||||
}
|
}
|
||||||
|
|
|
@ -141,6 +141,6 @@ SECTIONS
|
||||||
*(.bss)
|
*(.bss)
|
||||||
*(COMMON)
|
*(COMMON)
|
||||||
}
|
}
|
||||||
__bss_end__ = . ;
|
__bss_end = . ;
|
||||||
PROVIDE (end = .);
|
PROVIDE (end = .);
|
||||||
}
|
}
|
||||||
|
|
|
@ -133,6 +133,6 @@ SECTIONS
|
||||||
*(.bss)
|
*(.bss)
|
||||||
*(COMMON)
|
*(COMMON)
|
||||||
}
|
}
|
||||||
__bss_end__ = . ;
|
__bss_end = . ;
|
||||||
PROVIDE (end = .);
|
PROVIDE (end = .);
|
||||||
}
|
}
|
||||||
|
|
|
@ -113,7 +113,7 @@ static int fpga_done_fn(int cookie)
|
||||||
static int fpga_pre_config_fn(int cookie)
|
static int fpga_pre_config_fn(int cookie)
|
||||||
{
|
{
|
||||||
debug("%s:%d: FPGA pre-configuration\n", __func__, __LINE__);
|
debug("%s:%d: FPGA pre-configuration\n", __func__, __LINE__);
|
||||||
fpga_reset(TRUE);
|
fpga_reset(true);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -128,9 +128,9 @@ static int fpga_post_config_fn(int cookie)
|
||||||
|
|
||||||
debug("%s:%d: FPGA post configuration\n", __func__, __LINE__);
|
debug("%s:%d: FPGA post configuration\n", __func__, __LINE__);
|
||||||
|
|
||||||
fpga_reset(TRUE);
|
fpga_reset(true);
|
||||||
udelay(100);
|
udelay(100);
|
||||||
fpga_reset(FALSE);
|
fpga_reset(false);
|
||||||
udelay(100);
|
udelay(100);
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
|
@ -200,7 +200,7 @@ static Xilinx_desc fpga[CONFIG_FPGA_COUNT] = {
|
||||||
static void fpga_serialslave_init(void)
|
static void fpga_serialslave_init(void)
|
||||||
{
|
{
|
||||||
debug("%s:%d: Initialize serial slave interface\n", __func__, __LINE__);
|
debug("%s:%d: Initialize serial slave interface\n", __func__, __LINE__);
|
||||||
fpga_pgm_fn(FALSE, FALSE, 0); /* make sure program pin is inactive */
|
fpga_pgm_fn(false, false, 0); /* make sure program pin is inactive */
|
||||||
}
|
}
|
||||||
|
|
||||||
static int expi_setup(int freq)
|
static int expi_setup(int freq)
|
||||||
|
|
|
@ -132,6 +132,6 @@ SECTIONS
|
||||||
*(.bss)
|
*(.bss)
|
||||||
*(COMMON)
|
*(COMMON)
|
||||||
}
|
}
|
||||||
__bss_end__ = . ;
|
__bss_end = . ;
|
||||||
PROVIDE (end = .);
|
PROVIDE (end = .);
|
||||||
}
|
}
|
||||||
|
|
|
@ -125,6 +125,6 @@ SECTIONS
|
||||||
*(.bss)
|
*(.bss)
|
||||||
*(COMMON)
|
*(COMMON)
|
||||||
}
|
}
|
||||||
__bss_end__ = . ;
|
__bss_end = . ;
|
||||||
PROVIDE (end = .);
|
PROVIDE (end = .);
|
||||||
}
|
}
|
||||||
|
|
|
@ -179,9 +179,9 @@ int fpga_post_config_fn(int cookie)
|
||||||
{
|
{
|
||||||
debug("%s:%d: FPGA post-configuration\n", __func__, __LINE__);
|
debug("%s:%d: FPGA post-configuration\n", __func__, __LINE__);
|
||||||
|
|
||||||
fpga_reset(TRUE);
|
fpga_reset(true);
|
||||||
udelay(100);
|
udelay(100);
|
||||||
fpga_reset(FALSE);
|
fpga_reset(false);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -132,6 +132,6 @@ SECTIONS
|
||||||
*(.bss)
|
*(.bss)
|
||||||
*(COMMON)
|
*(COMMON)
|
||||||
}
|
}
|
||||||
__bss_end__ = . ;
|
__bss_end = . ;
|
||||||
PROVIDE (end = .);
|
PROVIDE (end = .);
|
||||||
}
|
}
|
||||||
|
|
|
@ -137,6 +137,6 @@ SECTIONS
|
||||||
*(.bss)
|
*(.bss)
|
||||||
*(COMMON)
|
*(COMMON)
|
||||||
}
|
}
|
||||||
__bss_end__ = . ;
|
__bss_end = . ;
|
||||||
PROVIDE (end = .);
|
PROVIDE (end = .);
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,6 +66,7 @@ COBJS-$(CONFIG_ENV_IS_IN_NVRAM) += env_nvram.o
|
||||||
COBJS-$(CONFIG_ENV_IS_IN_ONENAND) += env_onenand.o
|
COBJS-$(CONFIG_ENV_IS_IN_ONENAND) += env_onenand.o
|
||||||
COBJS-$(CONFIG_ENV_IS_IN_SPI_FLASH) += env_sf.o
|
COBJS-$(CONFIG_ENV_IS_IN_SPI_FLASH) += env_sf.o
|
||||||
COBJS-$(CONFIG_ENV_IS_IN_REMOTE) += env_remote.o
|
COBJS-$(CONFIG_ENV_IS_IN_REMOTE) += env_remote.o
|
||||||
|
COBJS-$(CONFIG_ENV_IS_IN_UBI) += env_ubi.o
|
||||||
COBJS-$(CONFIG_ENV_IS_NOWHERE) += env_nowhere.o
|
COBJS-$(CONFIG_ENV_IS_NOWHERE) += env_nowhere.o
|
||||||
|
|
||||||
# command
|
# command
|
||||||
|
@ -75,6 +76,7 @@ COBJS-$(CONFIG_CMD_SOURCE) += cmd_source.o
|
||||||
COBJS-$(CONFIG_CMD_BDI) += cmd_bdinfo.o
|
COBJS-$(CONFIG_CMD_BDI) += cmd_bdinfo.o
|
||||||
COBJS-$(CONFIG_CMD_BEDBUG) += bedbug.o cmd_bedbug.o
|
COBJS-$(CONFIG_CMD_BEDBUG) += bedbug.o cmd_bedbug.o
|
||||||
COBJS-$(CONFIG_CMD_BMP) += cmd_bmp.o
|
COBJS-$(CONFIG_CMD_BMP) += cmd_bmp.o
|
||||||
|
COBJS-$(CONFIG_CMD_BOOTMENU) += cmd_bootmenu.o
|
||||||
COBJS-$(CONFIG_CMD_BOOTLDR) += cmd_bootldr.o
|
COBJS-$(CONFIG_CMD_BOOTLDR) += cmd_bootldr.o
|
||||||
COBJS-$(CONFIG_CMD_BOOTSTAGE) += cmd_bootstage.o
|
COBJS-$(CONFIG_CMD_BOOTSTAGE) += cmd_bootstage.o
|
||||||
COBJS-$(CONFIG_CMD_CACHE) += cmd_cache.o
|
COBJS-$(CONFIG_CMD_CACHE) += cmd_cache.o
|
||||||
|
|
|
@ -72,7 +72,7 @@ int downstring __P ((char *));
|
||||||
* F_INSTR - output raw instruction.
|
* F_INSTR - output raw instruction.
|
||||||
* F_LINENO - show line # info if available.
|
* F_LINENO - show line # info if available.
|
||||||
*
|
*
|
||||||
* Returns TRUE if the area was successfully disassembled or FALSE if
|
* Returns true if the area was successfully disassembled or false if
|
||||||
* a problem was encountered with accessing the memory.
|
* a problem was encountered with accessing the memory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -137,8 +137,8 @@ int disppc (unsigned char *memaddr, unsigned char *virtual, int num_instr,
|
||||||
for (i = 0; i < num_instr; ++i, memaddr += 4, ctx.virtual += 4) {
|
for (i = 0; i < num_instr; ++i, memaddr += 4, ctx.virtual += 4) {
|
||||||
#ifdef USE_SOURCE_CODE
|
#ifdef USE_SOURCE_CODE
|
||||||
if (ctx.flags & F_LINENO) {
|
if (ctx.flags & F_LINENO) {
|
||||||
if ((line_info_from_addr ((Elf32_Word) ctx.virtual, filename,
|
if ((line_info_from_addr ((Elf32_Word) ctx.virtual,
|
||||||
funcname, &line_no) == TRUE) &&
|
filename, funcname, &line_no) == true) &&
|
||||||
((line_no != last_line_no) ||
|
((line_no != last_line_no) ||
|
||||||
(strcmp (last_funcname, funcname) != 0))) {
|
(strcmp (last_funcname, funcname) != 0))) {
|
||||||
print_source_line (filename, funcname, line_no, pfunc);
|
print_source_line (filename, funcname, line_no, pfunc);
|
||||||
|
@ -154,15 +154,15 @@ int disppc (unsigned char *memaddr, unsigned char *virtual, int num_instr,
|
||||||
#ifdef USE_SOURCE_CODE
|
#ifdef USE_SOURCE_CODE
|
||||||
if (ctx.flags & F_SYMBOL) {
|
if (ctx.flags & F_SYMBOL) {
|
||||||
if ((symname =
|
if ((symname =
|
||||||
symbol_name_from_addr ((Elf32_Word) ctx.virtual,
|
symbol_name_from_addr((Elf32_Word) ctx.virtual,
|
||||||
TRUE, 0)) != 0) {
|
true, 0)) != 0) {
|
||||||
cursym = symname;
|
cursym = symname;
|
||||||
symoffset = 0;
|
symoffset = 0;
|
||||||
} else {
|
} else {
|
||||||
if ((cursym == 0) &&
|
if ((cursym == 0) &&
|
||||||
((symname =
|
((symname =
|
||||||
symbol_name_from_addr ((Elf32_Word) ctx.virtual,
|
symbol_name_from_addr((Elf32_Word) ctx.virtual,
|
||||||
FALSE, &symoffset)) != 0)) {
|
false, &symoffset)) != 0)) {
|
||||||
cursym = symname;
|
cursym = symname;
|
||||||
} else {
|
} else {
|
||||||
symoffset += 4;
|
symoffset += 4;
|
||||||
|
@ -205,7 +205,8 @@ int disppc (unsigned char *memaddr, unsigned char *virtual, int num_instr,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (((ctx.flags & F_SIMPLE) == 0) ||
|
if (((ctx.flags & F_SIMPLE) == 0) ||
|
||||||
(ctx.op->hfunc == 0) || ((*ctx.op->hfunc) (&ctx) == FALSE)) {
|
(ctx.op->hfunc == 0) ||
|
||||||
|
((*ctx.op->hfunc) (&ctx) == false)) {
|
||||||
sprintf (&ctx.data[ctx.datalen], "%-7s ", ctx.op->name);
|
sprintf (&ctx.data[ctx.datalen], "%-7s ", ctx.op->name);
|
||||||
ctx.datalen += 8;
|
ctx.datalen += 8;
|
||||||
print_operands (&ctx);
|
print_operands (&ctx);
|
||||||
|
@ -214,7 +215,7 @@ int disppc (unsigned char *memaddr, unsigned char *virtual, int num_instr,
|
||||||
(*pfunc) (ctx.data);
|
(*pfunc) (ctx.data);
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return true;
|
||||||
} /* disppc */
|
} /* disppc */
|
||||||
|
|
||||||
|
|
||||||
|
@ -364,10 +365,10 @@ int print_operands (struct ppc_ctx *ctx)
|
||||||
* value The address of an unsigned long to be filled in
|
* value The address of an unsigned long to be filled in
|
||||||
* with the value of the operand if it is found. This
|
* with the value of the operand if it is found. This
|
||||||
* will only be filled in if the function returns
|
* will only be filled in if the function returns
|
||||||
* TRUE. This may be passed as 0 if the value is
|
* true. This may be passed as 0 if the value is
|
||||||
* not required.
|
* not required.
|
||||||
*
|
*
|
||||||
* Returns TRUE if the operand was found or FALSE if it was not.
|
* Returns true if the operand was found or false if it was not.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int get_operand_value (struct opcode *op, unsigned long instr,
|
int get_operand_value (struct opcode *op, unsigned long instr,
|
||||||
|
@ -379,7 +380,7 @@ int get_operand_value (struct opcode *op, unsigned long instr,
|
||||||
/*------------------------------------------------------------*/
|
/*------------------------------------------------------------*/
|
||||||
|
|
||||||
if (field > n_operands) {
|
if (field > n_operands) {
|
||||||
return FALSE; /* bad operand ?! */
|
return false; /* bad operand ?! */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Walk through the operands and list each in order */
|
/* Walk through the operands and list each in order */
|
||||||
|
@ -393,10 +394,10 @@ int get_operand_value (struct opcode *op, unsigned long instr,
|
||||||
if (value) {
|
if (value) {
|
||||||
*value = (instr >> opr->shift) & ((1 << opr->bits) - 1);
|
*value = (instr >> opr->shift) & ((1 << opr->bits) - 1);
|
||||||
}
|
}
|
||||||
return TRUE;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return FALSE;
|
return false;
|
||||||
} /* operand_value */
|
} /* operand_value */
|
||||||
|
|
||||||
|
|
||||||
|
@ -649,7 +650,7 @@ int tbr_value (char *name)
|
||||||
* Arguments:
|
* Arguments:
|
||||||
* ctx A pointer to the disassembler context record.
|
* ctx A pointer to the disassembler context record.
|
||||||
*
|
*
|
||||||
* Returns TRUE if the simpler form was printed or FALSE if it was not.
|
* Returns true if the simpler form was printed or false if it was not.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int handle_bc (struct ppc_ctx *ctx)
|
int handle_bc (struct ppc_ctx *ctx)
|
||||||
|
@ -669,33 +670,33 @@ int handle_bc (struct ppc_ctx *ctx)
|
||||||
|
|
||||||
/*------------------------------------------------------------*/
|
/*------------------------------------------------------------*/
|
||||||
|
|
||||||
if (get_operand_value (ctx->op, ctx->instr, O_BO, &bo) == FALSE)
|
if (get_operand_value(ctx->op, ctx->instr, O_BO, &bo) == false)
|
||||||
return FALSE;
|
return false;
|
||||||
|
|
||||||
if (get_operand_value (ctx->op, ctx->instr, O_BI, &bi) == FALSE)
|
if (get_operand_value(ctx->op, ctx->instr, O_BI, &bi) == false)
|
||||||
return FALSE;
|
return false;
|
||||||
|
|
||||||
if ((bo == 12) && (bi == 0)) {
|
if ((bo == 12) && (bi == 0)) {
|
||||||
ctx->op = &blt;
|
ctx->op = &blt;
|
||||||
sprintf (&ctx->data[ctx->datalen], "%-7s ", ctx->op->name);
|
sprintf (&ctx->data[ctx->datalen], "%-7s ", ctx->op->name);
|
||||||
ctx->datalen += 8;
|
ctx->datalen += 8;
|
||||||
print_operands (ctx);
|
print_operands (ctx);
|
||||||
return TRUE;
|
return true;
|
||||||
} else if ((bo == 4) && (bi == 10)) {
|
} else if ((bo == 4) && (bi == 10)) {
|
||||||
ctx->op = =⃥
|
ctx->op = =⃥
|
||||||
sprintf (&ctx->data[ctx->datalen], "%-7s ", ctx->op->name);
|
sprintf (&ctx->data[ctx->datalen], "%-7s ", ctx->op->name);
|
||||||
ctx->datalen += 8;
|
ctx->datalen += 8;
|
||||||
print_operands (ctx);
|
print_operands (ctx);
|
||||||
return TRUE;
|
return true;
|
||||||
} else if ((bo == 16) && (bi == 0)) {
|
} else if ((bo == 16) && (bi == 0)) {
|
||||||
ctx->op = &bdnz;
|
ctx->op = &bdnz;
|
||||||
sprintf (&ctx->data[ctx->datalen], "%-7s ", ctx->op->name);
|
sprintf (&ctx->data[ctx->datalen], "%-7s ", ctx->op->name);
|
||||||
ctx->datalen += 8;
|
ctx->datalen += 8;
|
||||||
print_operands (ctx);
|
print_operands (ctx);
|
||||||
return TRUE;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return FALSE;
|
return false;
|
||||||
} /* handle_blt */
|
} /* handle_blt */
|
||||||
|
|
||||||
|
|
||||||
|
@ -719,7 +720,7 @@ int handle_bc (struct ppc_ctx *ctx)
|
||||||
* pfunc The address of a function to call to print the output.
|
* pfunc The address of a function to call to print the output.
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* Returns TRUE if it was able to output the line info, or false if it was
|
* Returns true if it was able to output the line info, or false if it was
|
||||||
* not.
|
* not.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -734,7 +735,7 @@ int print_source_line (char *filename, char *funcname,
|
||||||
sprintf (out_buf, "%s %s(): line %d", filename, funcname, line_no);
|
sprintf (out_buf, "%s %s(): line %d", filename, funcname, line_no);
|
||||||
(*pfunc) (out_buf);
|
(*pfunc) (out_buf);
|
||||||
|
|
||||||
return TRUE;
|
return true;
|
||||||
} /* print_source_line */
|
} /* print_source_line */
|
||||||
|
|
||||||
|
|
||||||
|
@ -1039,14 +1040,14 @@ int downstring (char *s)
|
||||||
* Arguments:
|
* Arguments:
|
||||||
* nextaddr The address (to be filled in) of the next
|
* nextaddr The address (to be filled in) of the next
|
||||||
* instruction to execute. This will only be a valid
|
* instruction to execute. This will only be a valid
|
||||||
* address if TRUE is returned.
|
* address if true is returned.
|
||||||
*
|
*
|
||||||
* step_over A flag indicating how to compute addresses for
|
* step_over A flag indicating how to compute addresses for
|
||||||
* branch statements:
|
* branch statements:
|
||||||
* TRUE = Step over the branch (next)
|
* true = Step over the branch (next)
|
||||||
* FALSE = step into the branch (step)
|
* false = step into the branch (step)
|
||||||
*
|
*
|
||||||
* Returns TRUE if it was able to compute the address. Returns FALSE if
|
* Returns true if it was able to compute the address. Returns false if
|
||||||
* it has a problem reading the current instruction or one of the registers.
|
* it has a problem reading the current instruction or one of the registers.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -1075,7 +1076,7 @@ int find_next_address (unsigned char *nextaddr, int step_over,
|
||||||
|
|
||||||
if (nextaddr == 0 || regs == 0) {
|
if (nextaddr == 0 || regs == 0) {
|
||||||
printf ("find_next_address: bad args");
|
printf ("find_next_address: bad args");
|
||||||
return FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
pc = regs->nip & 0xfffffffc;
|
pc = regs->nip & 0xfffffffc;
|
||||||
|
@ -1083,7 +1084,7 @@ int find_next_address (unsigned char *nextaddr, int step_over,
|
||||||
|
|
||||||
if ((op = find_opcode (instr)) == (struct opcode *) 0) {
|
if ((op = find_opcode (instr)) == (struct opcode *) 0) {
|
||||||
printf ("find_next_address: can't parse opcode 0x%lx", instr);
|
printf ("find_next_address: can't parse opcode 0x%lx", instr);
|
||||||
return FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
ctr = regs->ctr;
|
ctr = regs->ctr;
|
||||||
|
@ -1100,7 +1101,7 @@ int find_next_address (unsigned char *nextaddr, int step_over,
|
||||||
!get_operand_value (op, instr, O_BI, &bi) ||
|
!get_operand_value (op, instr, O_BI, &bi) ||
|
||||||
!get_operand_value (op, instr, O_AA, &aa) ||
|
!get_operand_value (op, instr, O_AA, &aa) ||
|
||||||
!get_operand_value (op, instr, O_LK, &lk))
|
!get_operand_value (op, instr, O_LK, &lk))
|
||||||
return FALSE;
|
return false;
|
||||||
|
|
||||||
if ((addr & (1 << 13)) != 0)
|
if ((addr & (1 << 13)) != 0)
|
||||||
addr = addr - (1 << 14);
|
addr = addr - (1 << 14);
|
||||||
|
@ -1116,7 +1117,7 @@ int find_next_address (unsigned char *nextaddr, int step_over,
|
||||||
if (!get_operand_value (op, instr, O_LI, &addr) ||
|
if (!get_operand_value (op, instr, O_LI, &addr) ||
|
||||||
!get_operand_value (op, instr, O_AA, &aa) ||
|
!get_operand_value (op, instr, O_AA, &aa) ||
|
||||||
!get_operand_value (op, instr, O_LK, &lk))
|
!get_operand_value (op, instr, O_LK, &lk))
|
||||||
return FALSE;
|
return false;
|
||||||
|
|
||||||
if ((addr & (1 << 23)) != 0)
|
if ((addr & (1 << 23)) != 0)
|
||||||
addr = addr - (1 << 24);
|
addr = addr - (1 << 24);
|
||||||
|
@ -1130,7 +1131,7 @@ int find_next_address (unsigned char *nextaddr, int step_over,
|
||||||
if (!get_operand_value (op, instr, O_BO, &bo) ||
|
if (!get_operand_value (op, instr, O_BO, &bo) ||
|
||||||
!get_operand_value (op, instr, O_BI, &bi) ||
|
!get_operand_value (op, instr, O_BI, &bi) ||
|
||||||
!get_operand_value (op, instr, O_LK, &lk))
|
!get_operand_value (op, instr, O_LK, &lk))
|
||||||
return FALSE;
|
return false;
|
||||||
|
|
||||||
addr = ctr;
|
addr = ctr;
|
||||||
aa = 1;
|
aa = 1;
|
||||||
|
@ -1143,7 +1144,7 @@ int find_next_address (unsigned char *nextaddr, int step_over,
|
||||||
if (!get_operand_value (op, instr, O_BO, &bo) ||
|
if (!get_operand_value (op, instr, O_BO, &bo) ||
|
||||||
!get_operand_value (op, instr, O_BI, &bi) ||
|
!get_operand_value (op, instr, O_BI, &bi) ||
|
||||||
!get_operand_value (op, instr, O_LK, &lk))
|
!get_operand_value (op, instr, O_LK, &lk))
|
||||||
return FALSE;
|
return false;
|
||||||
|
|
||||||
addr = lr;
|
addr = lr;
|
||||||
aa = 1;
|
aa = 1;
|
||||||
|
@ -1227,12 +1228,12 @@ int find_next_address (unsigned char *nextaddr, int step_over,
|
||||||
step = next = pc + 4;
|
step = next = pc + 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (step_over == TRUE)
|
if (step_over == true)
|
||||||
*(unsigned long *) nextaddr = next;
|
*(unsigned long *) nextaddr = next;
|
||||||
else
|
else
|
||||||
*(unsigned long *) nextaddr = step;
|
*(unsigned long *) nextaddr = step;
|
||||||
|
|
||||||
return TRUE;
|
return true;
|
||||||
} /* find_next_address */
|
} /* find_next_address */
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -788,9 +788,6 @@ static init_fnc_t init_sequence_f[] = {
|
||||||
/* TODO: can we rename this to timer_init()? */
|
/* TODO: can we rename this to timer_init()? */
|
||||||
init_timebase,
|
init_timebase,
|
||||||
#endif
|
#endif
|
||||||
#if defined(CONFIG_BOARD_EARLY_INIT_F)
|
|
||||||
board_early_init_f,
|
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_ARM
|
#ifdef CONFIG_ARM
|
||||||
timer_init, /* initialize timer */
|
timer_init, /* initialize timer */
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -292,7 +292,7 @@ int do_bedbug_step (cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!find_next_address ((unsigned char *) &addr, FALSE, bug_ctx.regs))
|
if (!find_next_address((unsigned char *) &addr, false, bug_ctx.regs))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
if (bug_ctx.set)
|
if (bug_ctx.set)
|
||||||
|
@ -323,7 +323,7 @@ int do_bedbug_next (cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!find_next_address ((unsigned char *) &addr, TRUE, bug_ctx.regs))
|
if (!find_next_address((unsigned char *) &addr, true, bug_ctx.regs))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
if (bug_ctx.set)
|
if (bug_ctx.set)
|
||||||
|
|
517
common/cmd_bootmenu.c
Normal file
517
common/cmd_bootmenu.c
Normal file
|
@ -0,0 +1,517 @@
|
||||||
|
/*
|
||||||
|
* (C) Copyright 2011-2013 Pali Rohár <pali.rohar@gmail.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 <command.h>
|
||||||
|
#include <ansi.h>
|
||||||
|
#include <menu.h>
|
||||||
|
#include <hush.h>
|
||||||
|
#include <watchdog.h>
|
||||||
|
#include <malloc.h>
|
||||||
|
#include <linux/string.h>
|
||||||
|
|
||||||
|
/* maximum bootmenu entries */
|
||||||
|
#define MAX_COUNT 99
|
||||||
|
|
||||||
|
/* maximal size of bootmenu env
|
||||||
|
* 9 = strlen("bootmenu_")
|
||||||
|
* 2 = strlen(MAX_COUNT)
|
||||||
|
* 1 = NULL term
|
||||||
|
*/
|
||||||
|
#define MAX_ENV_SIZE (9 + 2 + 1)
|
||||||
|
|
||||||
|
struct bootmenu_entry {
|
||||||
|
unsigned short int num; /* unique number 0 .. MAX_COUNT */
|
||||||
|
char key[3]; /* key identifier of number */
|
||||||
|
char *title; /* title of entry */
|
||||||
|
char *command; /* hush command of entry */
|
||||||
|
struct bootmenu_data *menu; /* this bootmenu */
|
||||||
|
struct bootmenu_entry *next; /* next menu entry (num+1) */
|
||||||
|
};
|
||||||
|
|
||||||
|
struct bootmenu_data {
|
||||||
|
int delay; /* delay for autoboot */
|
||||||
|
int active; /* active menu entry */
|
||||||
|
int count; /* total count of menu entries */
|
||||||
|
struct bootmenu_entry *first; /* first menu entry */
|
||||||
|
};
|
||||||
|
|
||||||
|
enum bootmenu_key {
|
||||||
|
KEY_NONE = 0,
|
||||||
|
KEY_UP,
|
||||||
|
KEY_DOWN,
|
||||||
|
KEY_SELECT,
|
||||||
|
};
|
||||||
|
|
||||||
|
static char *bootmenu_getoption(unsigned short int n)
|
||||||
|
{
|
||||||
|
char name[MAX_ENV_SIZE] = "bootmenu_";
|
||||||
|
|
||||||
|
if (n > MAX_COUNT)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
sprintf(name + 9, "%d", n);
|
||||||
|
return getenv(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void bootmenu_print_entry(void *data)
|
||||||
|
{
|
||||||
|
struct bootmenu_entry *entry = data;
|
||||||
|
int reverse = (entry->menu->active == entry->num);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Move cursor to line where the entry will be drown (entry->num)
|
||||||
|
* First 3 lines contain bootmenu header + 1 empty line
|
||||||
|
*/
|
||||||
|
printf(ANSI_CURSOR_POSITION, entry->num + 4, 1);
|
||||||
|
|
||||||
|
puts(" ");
|
||||||
|
|
||||||
|
if (reverse)
|
||||||
|
puts(ANSI_COLOR_REVERSE);
|
||||||
|
|
||||||
|
puts(entry->title);
|
||||||
|
|
||||||
|
if (reverse)
|
||||||
|
puts(ANSI_COLOR_RESET);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void bootmenu_autoboot_loop(struct bootmenu_data *menu,
|
||||||
|
enum bootmenu_key *key, int *esc)
|
||||||
|
{
|
||||||
|
int i, c;
|
||||||
|
|
||||||
|
if (menu->delay > 0) {
|
||||||
|
printf(ANSI_CURSOR_POSITION, menu->count + 5, 1);
|
||||||
|
printf(" Hit any key to stop autoboot: %2d ", menu->delay);
|
||||||
|
}
|
||||||
|
|
||||||
|
while (menu->delay > 0) {
|
||||||
|
for (i = 0; i < 100; ++i) {
|
||||||
|
if (!tstc()) {
|
||||||
|
WATCHDOG_RESET();
|
||||||
|
mdelay(10);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
menu->delay = -1;
|
||||||
|
c = getc();
|
||||||
|
|
||||||
|
switch (c) {
|
||||||
|
case '\e':
|
||||||
|
*esc = 1;
|
||||||
|
*key = KEY_NONE;
|
||||||
|
break;
|
||||||
|
case '\r':
|
||||||
|
*key = KEY_SELECT;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
*key = KEY_NONE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (menu->delay < 0)
|
||||||
|
break;
|
||||||
|
|
||||||
|
--menu->delay;
|
||||||
|
printf("\b\b\b%2d ", menu->delay);
|
||||||
|
}
|
||||||
|
|
||||||
|
printf(ANSI_CURSOR_POSITION, menu->count + 5, 1);
|
||||||
|
puts(ANSI_CLEAR_LINE);
|
||||||
|
|
||||||
|
if (menu->delay == 0)
|
||||||
|
*key = KEY_SELECT;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void bootmenu_loop(struct bootmenu_data *menu,
|
||||||
|
enum bootmenu_key *key, int *esc)
|
||||||
|
{
|
||||||
|
int c;
|
||||||
|
|
||||||
|
while (!tstc()) {
|
||||||
|
WATCHDOG_RESET();
|
||||||
|
mdelay(10);
|
||||||
|
}
|
||||||
|
|
||||||
|
c = getc();
|
||||||
|
|
||||||
|
switch (*esc) {
|
||||||
|
case 0:
|
||||||
|
/* First char of ANSI escape sequence '\e' */
|
||||||
|
if (c == '\e') {
|
||||||
|
*esc = 1;
|
||||||
|
*key = KEY_NONE;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
/* Second char of ANSI '[' */
|
||||||
|
if (c == '[') {
|
||||||
|
*esc = 2;
|
||||||
|
*key = KEY_NONE;
|
||||||
|
} else {
|
||||||
|
*esc = 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
case 3:
|
||||||
|
/* Third char of ANSI (number '1') - optional */
|
||||||
|
if (*esc == 2 && c == '1') {
|
||||||
|
*esc = 3;
|
||||||
|
*key = KEY_NONE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
*esc = 0;
|
||||||
|
|
||||||
|
/* ANSI 'A' - key up was pressed */
|
||||||
|
if (c == 'A')
|
||||||
|
*key = KEY_UP;
|
||||||
|
/* ANSI 'B' - key down was pressed */
|
||||||
|
else if (c == 'B')
|
||||||
|
*key = KEY_DOWN;
|
||||||
|
/* other key was pressed */
|
||||||
|
else
|
||||||
|
*key = KEY_NONE;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* enter key was pressed */
|
||||||
|
if (c == '\r')
|
||||||
|
*key = KEY_SELECT;
|
||||||
|
}
|
||||||
|
|
||||||
|
static char *bootmenu_choice_entry(void *data)
|
||||||
|
{
|
||||||
|
struct bootmenu_data *menu = data;
|
||||||
|
struct bootmenu_entry *iter;
|
||||||
|
enum bootmenu_key key = KEY_NONE;
|
||||||
|
int esc = 0;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
if (menu->delay >= 0) {
|
||||||
|
/* Autoboot was not stopped */
|
||||||
|
bootmenu_autoboot_loop(menu, &key, &esc);
|
||||||
|
} else {
|
||||||
|
/* Some key was pressed, so autoboot was stopped */
|
||||||
|
bootmenu_loop(menu, &key, &esc);
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (key) {
|
||||||
|
case KEY_UP:
|
||||||
|
if (menu->active > 0)
|
||||||
|
--menu->active;
|
||||||
|
/* no menu key selected, regenerate menu */
|
||||||
|
return NULL;
|
||||||
|
case KEY_DOWN:
|
||||||
|
if (menu->active < menu->count - 1)
|
||||||
|
++menu->active;
|
||||||
|
/* no menu key selected, regenerate menu */
|
||||||
|
return NULL;
|
||||||
|
case KEY_SELECT:
|
||||||
|
iter = menu->first;
|
||||||
|
for (i = 0; i < menu->active; ++i)
|
||||||
|
iter = iter->next;
|
||||||
|
return iter->key;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* never happens */
|
||||||
|
debug("bootmenu: this should not happen");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void bootmenu_destroy(struct bootmenu_data *menu)
|
||||||
|
{
|
||||||
|
struct bootmenu_entry *iter = menu->first;
|
||||||
|
struct bootmenu_entry *next;
|
||||||
|
|
||||||
|
while (iter) {
|
||||||
|
next = iter->next;
|
||||||
|
free(iter->title);
|
||||||
|
free(iter->command);
|
||||||
|
free(iter);
|
||||||
|
iter = next;
|
||||||
|
}
|
||||||
|
free(menu);
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct bootmenu_data *bootmenu_create(int delay)
|
||||||
|
{
|
||||||
|
unsigned short int i = 0;
|
||||||
|
const char *option;
|
||||||
|
struct bootmenu_data *menu;
|
||||||
|
struct bootmenu_entry *iter = NULL;
|
||||||
|
|
||||||
|
int len;
|
||||||
|
char *sep;
|
||||||
|
struct bootmenu_entry *entry;
|
||||||
|
|
||||||
|
menu = malloc(sizeof(struct bootmenu_data));
|
||||||
|
if (!menu)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
menu->delay = delay;
|
||||||
|
menu->active = 0;
|
||||||
|
menu->first = NULL;
|
||||||
|
|
||||||
|
while ((option = bootmenu_getoption(i))) {
|
||||||
|
sep = strchr(option, '=');
|
||||||
|
if (!sep) {
|
||||||
|
printf("Invalid bootmenu entry: %s\n", option);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
entry = malloc(sizeof(struct bootmenu_entry));
|
||||||
|
if (!entry)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
len = sep-option;
|
||||||
|
entry->title = malloc(len + 1);
|
||||||
|
if (!entry->title) {
|
||||||
|
free(entry);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
memcpy(entry->title, option, len);
|
||||||
|
entry->title[len] = 0;
|
||||||
|
|
||||||
|
len = strlen(sep + 1);
|
||||||
|
entry->command = malloc(len + 1);
|
||||||
|
if (!entry->command) {
|
||||||
|
free(entry->title);
|
||||||
|
free(entry);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
memcpy(entry->command, sep + 1, len);
|
||||||
|
entry->command[len] = 0;
|
||||||
|
|
||||||
|
sprintf(entry->key, "%d", i);
|
||||||
|
|
||||||
|
entry->num = i;
|
||||||
|
entry->menu = menu;
|
||||||
|
entry->next = NULL;
|
||||||
|
|
||||||
|
if (!iter)
|
||||||
|
menu->first = entry;
|
||||||
|
else
|
||||||
|
iter->next = entry;
|
||||||
|
|
||||||
|
iter = entry;
|
||||||
|
++i;
|
||||||
|
|
||||||
|
if (i == MAX_COUNT - 1)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Add U-Boot console entry at the end */
|
||||||
|
if (i <= MAX_COUNT - 1) {
|
||||||
|
entry = malloc(sizeof(struct bootmenu_entry));
|
||||||
|
if (!entry)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
entry->title = strdup("U-Boot console");
|
||||||
|
if (!entry->title) {
|
||||||
|
free(entry);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
entry->command = strdup("");
|
||||||
|
if (!entry->command) {
|
||||||
|
free(entry->title);
|
||||||
|
free(entry);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
sprintf(entry->key, "%d", i);
|
||||||
|
|
||||||
|
entry->num = i;
|
||||||
|
entry->menu = menu;
|
||||||
|
entry->next = NULL;
|
||||||
|
|
||||||
|
if (!iter)
|
||||||
|
menu->first = entry;
|
||||||
|
else
|
||||||
|
iter->next = entry;
|
||||||
|
|
||||||
|
iter = entry;
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
|
||||||
|
menu->count = i;
|
||||||
|
return menu;
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
bootmenu_destroy(menu);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void bootmenu_show(int delay)
|
||||||
|
{
|
||||||
|
int init = 0;
|
||||||
|
void *choice = NULL;
|
||||||
|
char *title = NULL;
|
||||||
|
char *command = NULL;
|
||||||
|
struct menu *menu;
|
||||||
|
struct bootmenu_data *bootmenu;
|
||||||
|
struct bootmenu_entry *iter;
|
||||||
|
char *option, *sep;
|
||||||
|
|
||||||
|
/* If delay is 0 do not create menu, just run first entry */
|
||||||
|
if (delay == 0) {
|
||||||
|
option = bootmenu_getoption(0);
|
||||||
|
if (!option) {
|
||||||
|
puts("bootmenu option 0 was not found\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
sep = strchr(option, '=');
|
||||||
|
if (!sep) {
|
||||||
|
puts("bootmenu option 0 is invalid\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
run_command(sep+1, 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
bootmenu = bootmenu_create(delay);
|
||||||
|
if (!bootmenu)
|
||||||
|
return;
|
||||||
|
|
||||||
|
menu = menu_create(NULL, bootmenu->delay, 1, bootmenu_print_entry,
|
||||||
|
bootmenu_choice_entry, bootmenu);
|
||||||
|
if (!menu) {
|
||||||
|
bootmenu_destroy(bootmenu);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (iter = bootmenu->first; iter; iter = iter->next) {
|
||||||
|
if (!menu_item_add(menu, iter->key, iter))
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Default menu entry is always first */
|
||||||
|
menu_default_set(menu, "0");
|
||||||
|
|
||||||
|
puts(ANSI_CURSOR_HIDE);
|
||||||
|
puts(ANSI_CLEAR_CONSOLE);
|
||||||
|
printf(ANSI_CURSOR_POSITION, 1, 1);
|
||||||
|
|
||||||
|
init = 1;
|
||||||
|
|
||||||
|
if (menu_get_choice(menu, &choice)) {
|
||||||
|
iter = choice;
|
||||||
|
title = strdup(iter->title);
|
||||||
|
command = strdup(iter->command);
|
||||||
|
}
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
menu_destroy(menu);
|
||||||
|
bootmenu_destroy(bootmenu);
|
||||||
|
|
||||||
|
if (init) {
|
||||||
|
puts(ANSI_CURSOR_SHOW);
|
||||||
|
puts(ANSI_CLEAR_CONSOLE);
|
||||||
|
printf(ANSI_CURSOR_POSITION, 1, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (title && command) {
|
||||||
|
debug("Starting entry '%s'\n", title);
|
||||||
|
free(title);
|
||||||
|
run_command(command, 0);
|
||||||
|
free(command);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_POSTBOOTMENU
|
||||||
|
run_command(CONFIG_POSTBOOTMENU, 0);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_display_statusline(struct menu *m)
|
||||||
|
{
|
||||||
|
struct bootmenu_entry *entry;
|
||||||
|
struct bootmenu_data *menu;
|
||||||
|
|
||||||
|
if (menu_default_choice(m, (void *)&entry) < 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
menu = entry->menu;
|
||||||
|
|
||||||
|
printf(ANSI_CURSOR_POSITION, 1, 1);
|
||||||
|
puts(ANSI_CLEAR_LINE);
|
||||||
|
printf(ANSI_CURSOR_POSITION, 2, 1);
|
||||||
|
puts(" *** U-Boot Boot Menu ***");
|
||||||
|
puts(ANSI_CLEAR_LINE_TO_END);
|
||||||
|
printf(ANSI_CURSOR_POSITION, 3, 1);
|
||||||
|
puts(ANSI_CLEAR_LINE);
|
||||||
|
|
||||||
|
/* First 3 lines are bootmenu header + 2 empty lines between entries */
|
||||||
|
printf(ANSI_CURSOR_POSITION, menu->count + 5, 1);
|
||||||
|
puts(ANSI_CLEAR_LINE);
|
||||||
|
printf(ANSI_CURSOR_POSITION, menu->count + 6, 1);
|
||||||
|
puts(" Press UP/DOWN to move, ENTER to select");
|
||||||
|
puts(ANSI_CLEAR_LINE_TO_END);
|
||||||
|
printf(ANSI_CURSOR_POSITION, menu->count + 7, 1);
|
||||||
|
puts(ANSI_CLEAR_LINE);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_MENU_SHOW
|
||||||
|
int menu_show(int bootdelay)
|
||||||
|
{
|
||||||
|
bootmenu_show(bootdelay);
|
||||||
|
return -1; /* -1 - abort boot and run monitor code */
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int do_bootmenu(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
|
||||||
|
{
|
||||||
|
char *delay_str = NULL;
|
||||||
|
int delay = 10;
|
||||||
|
|
||||||
|
#if defined(CONFIG_BOOTDELAY) && (CONFIG_BOOTDELAY >= 0)
|
||||||
|
delay = CONFIG_BOOTDELAY;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (argc >= 2)
|
||||||
|
delay_str = argv[1];
|
||||||
|
|
||||||
|
if (!delay_str)
|
||||||
|
delay_str = getenv("bootmenu_delay");
|
||||||
|
|
||||||
|
if (delay_str)
|
||||||
|
delay = (int)simple_strtol(delay_str, NULL, 10);
|
||||||
|
|
||||||
|
bootmenu_show(delay);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
U_BOOT_CMD(
|
||||||
|
bootmenu, 2, 1, do_bootmenu,
|
||||||
|
"ANSI terminal bootmenu",
|
||||||
|
"[delay]\n"
|
||||||
|
" - show ANSI terminal bootmenu with autoboot delay"
|
||||||
|
);
|
117
common/cmd_fdc.c
117
common/cmd_fdc.c
|
@ -39,13 +39,6 @@
|
||||||
#define PRINTF(fmt,args...)
|
#define PRINTF(fmt,args...)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef TRUE
|
|
||||||
#define TRUE 1
|
|
||||||
#endif
|
|
||||||
#ifndef FALSE
|
|
||||||
#define FALSE 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*#if defined(CONFIG_CMD_DATE) */
|
/*#if defined(CONFIG_CMD_DATE) */
|
||||||
/*#include <rtc.h> */
|
/*#include <rtc.h> */
|
||||||
/*#endif */
|
/*#endif */
|
||||||
|
@ -214,9 +207,9 @@ int wait_for_fdc_int(void)
|
||||||
timeout--;
|
timeout--;
|
||||||
udelay(10);
|
udelay(10);
|
||||||
if(timeout==0) /* timeout occured */
|
if(timeout==0) /* timeout occured */
|
||||||
return FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
return TRUE;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* reads a byte from the FIFO of the FDC and checks direction and RQM bit
|
/* reads a byte from the FIFO of the FDC and checks direction and RQM bit
|
||||||
|
@ -244,7 +237,7 @@ int fdc_need_more_output(void)
|
||||||
c=(unsigned char)read_fdc_byte();
|
c=(unsigned char)read_fdc_byte();
|
||||||
printf("Error: more output: %x\n",c);
|
printf("Error: more output: %x\n",c);
|
||||||
}
|
}
|
||||||
return TRUE;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -260,10 +253,10 @@ int write_fdc_byte(unsigned char val)
|
||||||
udelay(10);
|
udelay(10);
|
||||||
fdc_need_more_output();
|
fdc_need_more_output();
|
||||||
if(timeout==0) /* timeout occured */
|
if(timeout==0) /* timeout occured */
|
||||||
return FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
write_fdc_reg(FDC_FIFO,val);
|
write_fdc_reg(FDC_FIFO,val);
|
||||||
return TRUE;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* sets up all FDC commands and issues it to the FDC. If
|
/* sets up all FDC commands and issues it to the FDC. If
|
||||||
|
@ -344,9 +337,9 @@ int fdc_issue_cmd(FDC_COMMAND_STRUCT *pCMD,FD_GEO_STRUCT *pFG)
|
||||||
}
|
}
|
||||||
for(i=0;i<pCMD->cmdlen;i++) {
|
for(i=0;i<pCMD->cmdlen;i++) {
|
||||||
/* PRINTF("write cmd%d = 0x%02X\n",i,pCMD->cmd[i]); */
|
/* PRINTF("write cmd%d = 0x%02X\n",i,pCMD->cmd[i]); */
|
||||||
if(write_fdc_byte(pCMD->cmd[i])==FALSE) {
|
if (write_fdc_byte(pCMD->cmd[i]) == false) {
|
||||||
PRINTF("Error: timeout while issue cmd%d\n",i);
|
PRINTF("Error: timeout while issue cmd%d\n",i);
|
||||||
return FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
timeout=FDC_TIME_OUT;
|
timeout=FDC_TIME_OUT;
|
||||||
|
@ -355,12 +348,12 @@ int fdc_issue_cmd(FDC_COMMAND_STRUCT *pCMD,FD_GEO_STRUCT *pFG)
|
||||||
timeout--;
|
timeout--;
|
||||||
if(timeout==0) {
|
if(timeout==0) {
|
||||||
PRINTF(" timeout while reading result%d MSR=0x%02X\n",i,read_fdc_reg(FDC_MSR));
|
PRINTF(" timeout while reading result%d MSR=0x%02X\n",i,read_fdc_reg(FDC_MSR));
|
||||||
return FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pCMD->result[i]=(unsigned char)read_fdc_byte();
|
pCMD->result[i]=(unsigned char)read_fdc_byte();
|
||||||
}
|
}
|
||||||
return TRUE;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* selects the drive assigned in the cmd structur and
|
/* selects the drive assigned in the cmd structur and
|
||||||
|
@ -391,9 +384,10 @@ void stop_fdc_drive(FDC_COMMAND_STRUCT *pCMD)
|
||||||
int fdc_recalibrate(FDC_COMMAND_STRUCT *pCMD,FD_GEO_STRUCT *pFG)
|
int fdc_recalibrate(FDC_COMMAND_STRUCT *pCMD,FD_GEO_STRUCT *pFG)
|
||||||
{
|
{
|
||||||
pCMD->cmd[COMMAND]=FDC_CMD_RECALIBRATE;
|
pCMD->cmd[COMMAND]=FDC_CMD_RECALIBRATE;
|
||||||
if(fdc_issue_cmd(pCMD,pFG)==FALSE)
|
if (fdc_issue_cmd(pCMD, pFG) == false)
|
||||||
return FALSE;
|
return false;
|
||||||
while(wait_for_fdc_int()!=TRUE);
|
while (wait_for_fdc_int() != true);
|
||||||
|
|
||||||
pCMD->cmd[COMMAND]=FDC_CMD_SENSE_INT;
|
pCMD->cmd[COMMAND]=FDC_CMD_SENSE_INT;
|
||||||
return(fdc_issue_cmd(pCMD,pFG));
|
return(fdc_issue_cmd(pCMD,pFG));
|
||||||
}
|
}
|
||||||
|
@ -403,9 +397,10 @@ int fdc_recalibrate(FDC_COMMAND_STRUCT *pCMD,FD_GEO_STRUCT *pFG)
|
||||||
int fdc_seek(FDC_COMMAND_STRUCT *pCMD,FD_GEO_STRUCT *pFG)
|
int fdc_seek(FDC_COMMAND_STRUCT *pCMD,FD_GEO_STRUCT *pFG)
|
||||||
{
|
{
|
||||||
pCMD->cmd[COMMAND]=FDC_CMD_SEEK;
|
pCMD->cmd[COMMAND]=FDC_CMD_SEEK;
|
||||||
if(fdc_issue_cmd(pCMD,pFG)==FALSE)
|
if (fdc_issue_cmd(pCMD, pFG) == false)
|
||||||
return FALSE;
|
return false;
|
||||||
while(wait_for_fdc_int()!=TRUE);
|
while (wait_for_fdc_int() != true);
|
||||||
|
|
||||||
pCMD->cmd[COMMAND]=FDC_CMD_SENSE_INT;
|
pCMD->cmd[COMMAND]=FDC_CMD_SENSE_INT;
|
||||||
return(fdc_issue_cmd(pCMD,pFG));
|
return(fdc_issue_cmd(pCMD,pFG));
|
||||||
}
|
}
|
||||||
|
@ -421,7 +416,7 @@ int fdc_terminate(FDC_COMMAND_STRUCT *pCMD)
|
||||||
for(i=0;i<7;i++) {
|
for(i=0;i<7;i++) {
|
||||||
pCMD->result[i]=(unsigned char)read_fdc_byte();
|
pCMD->result[i]=(unsigned char)read_fdc_byte();
|
||||||
}
|
}
|
||||||
return TRUE;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* reads data from FDC, seek commands are issued automatic */
|
/* reads data from FDC, seek commands are issued automatic */
|
||||||
|
@ -440,18 +435,18 @@ int fdc_read_data(unsigned char *buffer, unsigned long blocks,FDC_COMMAND_STRUCT
|
||||||
retriesrw=0;
|
retriesrw=0;
|
||||||
retriescal=0;
|
retriescal=0;
|
||||||
offset=0;
|
offset=0;
|
||||||
if(fdc_seek(pCMD,pFG)==FALSE) {
|
if (fdc_seek(pCMD, pFG) == false) {
|
||||||
stop_fdc_drive(pCMD);
|
stop_fdc_drive(pCMD);
|
||||||
if (flags)
|
if (flags)
|
||||||
enable_interrupts();
|
enable_interrupts();
|
||||||
return FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
if((pCMD->result[STATUS_0]&0x20)!=0x20) {
|
if((pCMD->result[STATUS_0]&0x20)!=0x20) {
|
||||||
printf("Seek error Status: %02X\n",pCMD->result[STATUS_0]);
|
printf("Seek error Status: %02X\n",pCMD->result[STATUS_0]);
|
||||||
stop_fdc_drive(pCMD);
|
stop_fdc_drive(pCMD);
|
||||||
if (flags)
|
if (flags)
|
||||||
enable_interrupts();
|
enable_interrupts();
|
||||||
return FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
/* now determine the next seek point */
|
/* now determine the next seek point */
|
||||||
/* lastblk=pCMD->blnr + blocks; */
|
/* lastblk=pCMD->blnr + blocks; */
|
||||||
|
@ -466,11 +461,11 @@ int fdc_read_data(unsigned char *buffer, unsigned long blocks,FDC_COMMAND_STRUCT
|
||||||
retryrw:
|
retryrw:
|
||||||
len=sect_size * readblk;
|
len=sect_size * readblk;
|
||||||
pCMD->cmd[COMMAND]=FDC_CMD_READ;
|
pCMD->cmd[COMMAND]=FDC_CMD_READ;
|
||||||
if(fdc_issue_cmd(pCMD,pFG)==FALSE) {
|
if (fdc_issue_cmd(pCMD, pFG) == false) {
|
||||||
stop_fdc_drive(pCMD);
|
stop_fdc_drive(pCMD);
|
||||||
if (flags)
|
if (flags)
|
||||||
enable_interrupts();
|
enable_interrupts();
|
||||||
return FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
for (i=0;i<len;i++) {
|
for (i=0;i<len;i++) {
|
||||||
timeout=FDC_TIME_OUT;
|
timeout=FDC_TIME_OUT;
|
||||||
|
@ -492,15 +487,15 @@ retryrw:
|
||||||
stop_fdc_drive(pCMD);
|
stop_fdc_drive(pCMD);
|
||||||
if (flags)
|
if (flags)
|
||||||
enable_interrupts();
|
enable_interrupts();
|
||||||
return FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
PRINTF(" trying to recalibrate Try %d\n",retriescal);
|
PRINTF(" trying to recalibrate Try %d\n",retriescal);
|
||||||
if(fdc_recalibrate(pCMD,pFG)==FALSE) {
|
if (fdc_recalibrate(pCMD, pFG) == false) {
|
||||||
stop_fdc_drive(pCMD);
|
stop_fdc_drive(pCMD);
|
||||||
if (flags)
|
if (flags)
|
||||||
enable_interrupts();
|
enable_interrupts();
|
||||||
return FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
retriesrw=0;
|
retriesrw=0;
|
||||||
goto retrycal;
|
goto retrycal;
|
||||||
|
@ -512,7 +507,7 @@ retryrw:
|
||||||
} /* else >FDC_RW_RETRIES */
|
} /* else >FDC_RW_RETRIES */
|
||||||
}/* if output */
|
}/* if output */
|
||||||
timeout--;
|
timeout--;
|
||||||
}while(TRUE);
|
} while (true);
|
||||||
} /* for len */
|
} /* for len */
|
||||||
/* the last sector of a track or all data has been read,
|
/* the last sector of a track or all data has been read,
|
||||||
* we need to get the results */
|
* we need to get the results */
|
||||||
|
@ -530,22 +525,22 @@ retryrw:
|
||||||
readblk=blocks;
|
readblk=blocks;
|
||||||
retrycal:
|
retrycal:
|
||||||
/* a seek is necessary */
|
/* a seek is necessary */
|
||||||
if(fdc_seek(pCMD,pFG)==FALSE) {
|
if (fdc_seek(pCMD, pFG) == false) {
|
||||||
stop_fdc_drive(pCMD);
|
stop_fdc_drive(pCMD);
|
||||||
if (flags)
|
if (flags)
|
||||||
enable_interrupts();
|
enable_interrupts();
|
||||||
return FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
if((pCMD->result[STATUS_0]&0x20)!=0x20) {
|
if((pCMD->result[STATUS_0]&0x20)!=0x20) {
|
||||||
PRINTF("Seek error Status: %02X\n",pCMD->result[STATUS_0]);
|
PRINTF("Seek error Status: %02X\n",pCMD->result[STATUS_0]);
|
||||||
stop_fdc_drive(pCMD);
|
stop_fdc_drive(pCMD);
|
||||||
return FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
}while(TRUE); /* start over */
|
} while (true); /* start over */
|
||||||
stop_fdc_drive(pCMD); /* switch off drive */
|
stop_fdc_drive(pCMD); /* switch off drive */
|
||||||
if (flags)
|
if (flags)
|
||||||
enable_interrupts();
|
enable_interrupts();
|
||||||
return TRUE;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Scan all drives and check if drive is present and disk is inserted */
|
/* Scan all drives and check if drive is present and disk is inserted */
|
||||||
|
@ -559,20 +554,20 @@ int fdc_check_drive(FDC_COMMAND_STRUCT *pCMD, FD_GEO_STRUCT *pFG)
|
||||||
pCMD->drive=drives;
|
pCMD->drive=drives;
|
||||||
select_fdc_drive(pCMD);
|
select_fdc_drive(pCMD);
|
||||||
pCMD->blnr=0; /* set to the 1st block */
|
pCMD->blnr=0; /* set to the 1st block */
|
||||||
if(fdc_recalibrate(pCMD,pFG)==FALSE)
|
if (fdc_recalibrate(pCMD, pFG) == false)
|
||||||
continue;
|
continue;
|
||||||
if((pCMD->result[STATUS_0]&0x10)==0x10)
|
if((pCMD->result[STATUS_0]&0x10)==0x10)
|
||||||
continue;
|
continue;
|
||||||
/* ok drive connected check for disk */
|
/* ok drive connected check for disk */
|
||||||
state|=(1<<drives);
|
state|=(1<<drives);
|
||||||
pCMD->blnr=pFG->size; /* set to the last block */
|
pCMD->blnr=pFG->size; /* set to the last block */
|
||||||
if(fdc_seek(pCMD,pFG)==FALSE)
|
if (fdc_seek(pCMD, pFG) == false)
|
||||||
continue;
|
continue;
|
||||||
pCMD->blnr=0; /* set to the 1st block */
|
pCMD->blnr=0; /* set to the 1st block */
|
||||||
if(fdc_recalibrate(pCMD,pFG)==FALSE)
|
if (fdc_recalibrate(pCMD, pFG) == false)
|
||||||
continue;
|
continue;
|
||||||
pCMD->cmd[COMMAND]=FDC_CMD_READ_ID;
|
pCMD->cmd[COMMAND]=FDC_CMD_READ_ID;
|
||||||
if(fdc_issue_cmd(pCMD,pFG)==FALSE)
|
if (fdc_issue_cmd(pCMD, pFG) == false)
|
||||||
continue;
|
continue;
|
||||||
state|=(0x10<<drives);
|
state|=(0x10<<drives);
|
||||||
}
|
}
|
||||||
|
@ -584,7 +579,7 @@ int fdc_check_drive(FDC_COMMAND_STRUCT *pCMD, FD_GEO_STRUCT *pFG)
|
||||||
((state&(0x10<<i))==(0x10<<i)) ? pFG->name : "");
|
((state&(0x10<<i))==(0x10<<i)) ? pFG->name : "");
|
||||||
}
|
}
|
||||||
pCMD->flags=state;
|
pCMD->flags=state;
|
||||||
return TRUE;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -611,9 +606,9 @@ int fdc_setup(int drive, FDC_COMMAND_STRUCT *pCMD, FD_GEO_STRUCT *pFG)
|
||||||
write_fdc_reg(FDC_CCR,pFG->rate);
|
write_fdc_reg(FDC_CCR,pFG->rate);
|
||||||
/* then initialize the DSR */
|
/* then initialize the DSR */
|
||||||
write_fdc_reg(FDC_DSR,pFG->rate);
|
write_fdc_reg(FDC_DSR,pFG->rate);
|
||||||
if(wait_for_fdc_int()==FALSE) {
|
if (wait_for_fdc_int() == false) {
|
||||||
PRINTF("Time Out after writing CCR\n");
|
PRINTF("Time Out after writing CCR\n");
|
||||||
return FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
/* now issue sense Interrupt and status command
|
/* now issue sense Interrupt and status command
|
||||||
* assuming only one drive present (drive 0) */
|
* assuming only one drive present (drive 0) */
|
||||||
|
@ -621,7 +616,7 @@ int fdc_setup(int drive, FDC_COMMAND_STRUCT *pCMD, FD_GEO_STRUCT *pFG)
|
||||||
for(i=0;i<4;i++) {
|
for(i=0;i<4;i++) {
|
||||||
/* issue sense interrupt for all 4 possible drives */
|
/* issue sense interrupt for all 4 possible drives */
|
||||||
pCMD->cmd[COMMAND]=FDC_CMD_SENSE_INT;
|
pCMD->cmd[COMMAND]=FDC_CMD_SENSE_INT;
|
||||||
if(fdc_issue_cmd(pCMD,pFG)==FALSE) {
|
if (fdc_issue_cmd(pCMD, pFG) == false) {
|
||||||
PRINTF("Sense Interrupt for drive %d failed\n",i);
|
PRINTF("Sense Interrupt for drive %d failed\n",i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -629,24 +624,24 @@ int fdc_setup(int drive, FDC_COMMAND_STRUCT *pCMD, FD_GEO_STRUCT *pFG)
|
||||||
pCMD->drive=drive;
|
pCMD->drive=drive;
|
||||||
select_fdc_drive(pCMD);
|
select_fdc_drive(pCMD);
|
||||||
pCMD->cmd[COMMAND]=FDC_CMD_CONFIGURE;
|
pCMD->cmd[COMMAND]=FDC_CMD_CONFIGURE;
|
||||||
if(fdc_issue_cmd(pCMD,pFG)==FALSE) {
|
if (fdc_issue_cmd(pCMD, pFG) == false) {
|
||||||
PRINTF(" configure timeout\n");
|
PRINTF(" configure timeout\n");
|
||||||
stop_fdc_drive(pCMD);
|
stop_fdc_drive(pCMD);
|
||||||
return FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
/* issue specify command */
|
/* issue specify command */
|
||||||
pCMD->cmd[COMMAND]=FDC_CMD_SPECIFY;
|
pCMD->cmd[COMMAND]=FDC_CMD_SPECIFY;
|
||||||
if(fdc_issue_cmd(pCMD,pFG)==FALSE) {
|
if (fdc_issue_cmd(pCMD, pFG) == false) {
|
||||||
PRINTF(" specify timeout\n");
|
PRINTF(" specify timeout\n");
|
||||||
stop_fdc_drive(pCMD);
|
stop_fdc_drive(pCMD);
|
||||||
return FALSE;
|
return false;
|
||||||
|
|
||||||
}
|
}
|
||||||
/* then, we clear the reset in the DOR */
|
/* then, we clear the reset in the DOR */
|
||||||
/* fdc_check_drive(pCMD,pFG); */
|
/* fdc_check_drive(pCMD,pFG); */
|
||||||
/* write_fdc_reg(FDC_DOR,0x04); */
|
/* write_fdc_reg(FDC_DOR,0x04); */
|
||||||
|
|
||||||
return TRUE;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(CONFIG_CMD_FDOS)
|
#if defined(CONFIG_CMD_FDOS)
|
||||||
|
@ -664,30 +659,30 @@ int fdc_fdos_init (int drive)
|
||||||
FDC_COMMAND_STRUCT *pCMD = &cmd;
|
FDC_COMMAND_STRUCT *pCMD = &cmd;
|
||||||
|
|
||||||
/* setup FDC and scan for drives */
|
/* setup FDC and scan for drives */
|
||||||
if(fdc_setup(drive,pCMD,pFG)==FALSE) {
|
if (fdc_setup(drive, pCMD, pFG) == false) {
|
||||||
printf("\n** Error in setup FDC **\n");
|
printf("\n** Error in setup FDC **\n");
|
||||||
return FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
if(fdc_check_drive(pCMD,pFG)==FALSE) {
|
if (fdc_check_drive(pCMD, pFG) == false) {
|
||||||
printf("\n** Error in check_drives **\n");
|
printf("\n** Error in check_drives **\n");
|
||||||
return FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
if((pCMD->flags&(1<<drive))==0) {
|
if((pCMD->flags&(1<<drive))==0) {
|
||||||
/* drive not available */
|
/* drive not available */
|
||||||
printf("\n** Drive %d not available **\n",drive);
|
printf("\n** Drive %d not available **\n",drive);
|
||||||
return FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
if((pCMD->flags&(0x10<<drive))==0) {
|
if((pCMD->flags&(0x10<<drive))==0) {
|
||||||
/* no disk inserted */
|
/* no disk inserted */
|
||||||
printf("\n** No disk inserted in drive %d **\n",drive);
|
printf("\n** No disk inserted in drive %d **\n",drive);
|
||||||
return FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
/* ok, we have a valid source */
|
/* ok, we have a valid source */
|
||||||
pCMD->drive=drive;
|
pCMD->drive=drive;
|
||||||
|
|
||||||
/* read first block */
|
/* read first block */
|
||||||
pCMD->blnr=0;
|
pCMD->blnr=0;
|
||||||
return TRUE;
|
return true;
|
||||||
}
|
}
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
* int fdc_fdos_seek
|
* int fdc_fdos_seek
|
||||||
|
@ -747,11 +742,11 @@ int do_fdcboot (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
||||||
return CMD_RET_USAGE;
|
return CMD_RET_USAGE;
|
||||||
}
|
}
|
||||||
/* setup FDC and scan for drives */
|
/* setup FDC and scan for drives */
|
||||||
if(fdc_setup(boot_drive,pCMD,pFG)==FALSE) {
|
if (fdc_setup(boot_drive, pCMD, pFG) == false) {
|
||||||
printf("\n** Error in setup FDC **\n");
|
printf("\n** Error in setup FDC **\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if(fdc_check_drive(pCMD,pFG)==FALSE) {
|
if (fdc_check_drive(pCMD, pFG) == false) {
|
||||||
printf("\n** Error in check_drives **\n");
|
printf("\n** Error in check_drives **\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -769,7 +764,7 @@ int do_fdcboot (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
||||||
pCMD->drive=boot_drive;
|
pCMD->drive=boot_drive;
|
||||||
/* read first block */
|
/* read first block */
|
||||||
pCMD->blnr=0;
|
pCMD->blnr=0;
|
||||||
if(fdc_read_data((unsigned char *)addr,1,pCMD,pFG)==FALSE) {
|
if (fdc_read_data((unsigned char *)addr, 1, pCMD, pFG) == false) {
|
||||||
printf("\nRead error:");
|
printf("\nRead error:");
|
||||||
for(i=0;i<7;i++)
|
for(i=0;i<7;i++)
|
||||||
printf("result%d: 0x%02X\n",i,pCMD->result[i]);
|
printf("result%d: 0x%02X\n",i,pCMD->result[i]);
|
||||||
|
@ -801,7 +796,7 @@ int do_fdcboot (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
||||||
nrofblk++;
|
nrofblk++;
|
||||||
printf("Loading %ld Bytes (%d blocks) at 0x%08lx..\n",imsize,nrofblk,addr);
|
printf("Loading %ld Bytes (%d blocks) at 0x%08lx..\n",imsize,nrofblk,addr);
|
||||||
pCMD->blnr=0;
|
pCMD->blnr=0;
|
||||||
if(fdc_read_data((unsigned char *)addr,nrofblk,pCMD,pFG)==FALSE) {
|
if (fdc_read_data((unsigned char *)addr, nrofblk, pCMD, pFG) == false) {
|
||||||
/* read image block */
|
/* read image block */
|
||||||
printf("\nRead error:");
|
printf("\nRead error:");
|
||||||
for(i=0;i<7;i++)
|
for(i=0;i<7;i++)
|
||||||
|
|
|
@ -164,8 +164,12 @@ static int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcmp(argv[1], "rescan") == 0) {
|
if (strcmp(argv[1], "rescan") == 0) {
|
||||||
struct mmc *mmc = find_mmc_device(curr_device);
|
struct mmc *mmc;
|
||||||
|
|
||||||
|
if (argc != 2)
|
||||||
|
return CMD_RET_USAGE;
|
||||||
|
|
||||||
|
mmc = find_mmc_device(curr_device);
|
||||||
if (!mmc) {
|
if (!mmc) {
|
||||||
printf("no mmc device at slot %x\n", curr_device);
|
printf("no mmc device at slot %x\n", curr_device);
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -179,8 +183,12 @@ static int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
||||||
return 0;
|
return 0;
|
||||||
} else if (strncmp(argv[1], "part", 4) == 0) {
|
} else if (strncmp(argv[1], "part", 4) == 0) {
|
||||||
block_dev_desc_t *mmc_dev;
|
block_dev_desc_t *mmc_dev;
|
||||||
struct mmc *mmc = find_mmc_device(curr_device);
|
struct mmc *mmc;
|
||||||
|
|
||||||
|
if (argc != 2)
|
||||||
|
return CMD_RET_USAGE;
|
||||||
|
|
||||||
|
mmc = find_mmc_device(curr_device);
|
||||||
if (!mmc) {
|
if (!mmc) {
|
||||||
printf("no mmc device at slot %x\n", curr_device);
|
printf("no mmc device at slot %x\n", curr_device);
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -196,6 +204,8 @@ static int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
||||||
puts("get mmc type error!\n");
|
puts("get mmc type error!\n");
|
||||||
return 1;
|
return 1;
|
||||||
} else if (strcmp(argv[1], "list") == 0) {
|
} else if (strcmp(argv[1], "list") == 0) {
|
||||||
|
if (argc != 2)
|
||||||
|
return CMD_RET_USAGE;
|
||||||
print_mmc_devices('\n');
|
print_mmc_devices('\n');
|
||||||
return 0;
|
return 0;
|
||||||
} else if (strcmp(argv[1], "dev") == 0) {
|
} else if (strcmp(argv[1], "dev") == 0) {
|
||||||
|
|
|
@ -106,6 +106,8 @@
|
||||||
#include <onenand_uboot.h>
|
#include <onenand_uboot.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
/* special size referring to all the remaining space in a partition */
|
/* special size referring to all the remaining space in a partition */
|
||||||
#define SIZE_REMAINING 0xFFFFFFFF
|
#define SIZE_REMAINING 0xFFFFFFFF
|
||||||
|
|
||||||
|
@ -1537,6 +1539,7 @@ static int parse_mtdparts(const char *const mtdparts)
|
||||||
const char *p = mtdparts;
|
const char *p = mtdparts;
|
||||||
struct mtd_device *dev;
|
struct mtd_device *dev;
|
||||||
int err = 1;
|
int err = 1;
|
||||||
|
char tmp_parts[MTDPARTS_MAXLEN];
|
||||||
|
|
||||||
debug("\n---parse_mtdparts---\nmtdparts = %s\n\n", p);
|
debug("\n---parse_mtdparts---\nmtdparts = %s\n\n", p);
|
||||||
|
|
||||||
|
@ -1547,7 +1550,12 @@ static int parse_mtdparts(const char *const mtdparts)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* re-read 'mtdparts' variable, mtd_devices_init may be updating env */
|
/* re-read 'mtdparts' variable, mtd_devices_init may be updating env */
|
||||||
|
if (gd->flags & GD_FLG_ENV_READY) {
|
||||||
p = getenv("mtdparts");
|
p = getenv("mtdparts");
|
||||||
|
} else {
|
||||||
|
p = tmp_parts;
|
||||||
|
getenv_f("mtdparts", tmp_parts, MTDPARTS_MAXLEN);
|
||||||
|
}
|
||||||
|
|
||||||
if (strncmp(p, "mtdparts=", 9) != 0) {
|
if (strncmp(p, "mtdparts=", 9) != 0) {
|
||||||
printf("mtdparts variable doesn't start with 'mtdparts='\n");
|
printf("mtdparts variable doesn't start with 'mtdparts='\n");
|
||||||
|
@ -1705,6 +1713,7 @@ int mtdparts_init(void)
|
||||||
const char *current_partition;
|
const char *current_partition;
|
||||||
int ids_changed;
|
int ids_changed;
|
||||||
char tmp_ep[PARTITION_MAXLEN];
|
char tmp_ep[PARTITION_MAXLEN];
|
||||||
|
char tmp_parts[MTDPARTS_MAXLEN];
|
||||||
|
|
||||||
debug("\n---mtdparts_init---\n");
|
debug("\n---mtdparts_init---\n");
|
||||||
if (!initialized) {
|
if (!initialized) {
|
||||||
|
@ -1718,7 +1727,17 @@ int mtdparts_init(void)
|
||||||
|
|
||||||
/* get variables */
|
/* get variables */
|
||||||
ids = getenv("mtdids");
|
ids = getenv("mtdids");
|
||||||
|
/*
|
||||||
|
* The mtdparts variable tends to be long. If we need to access it
|
||||||
|
* before the env is relocated, then we need to use our own stack
|
||||||
|
* buffer. gd->env_buf will be too small.
|
||||||
|
*/
|
||||||
|
if (gd->flags & GD_FLG_ENV_READY) {
|
||||||
parts = getenv("mtdparts");
|
parts = getenv("mtdparts");
|
||||||
|
} else {
|
||||||
|
parts = tmp_parts;
|
||||||
|
getenv_f("mtdparts", tmp_parts, MTDPARTS_MAXLEN);
|
||||||
|
}
|
||||||
current_partition = getenv("partition");
|
current_partition = getenv("partition");
|
||||||
|
|
||||||
/* save it for later parsing, cannot rely on current partition pointer
|
/* save it for later parsing, cannot rely on current partition pointer
|
||||||
|
|
|
@ -137,7 +137,8 @@ static inline int str2long(const char *p, ulong *num)
|
||||||
return *p != '\0' && *endptr == '\0';
|
return *p != '\0' && *endptr == '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
static int get_part(const char *partname, int *idx, loff_t *off, loff_t *size)
|
static int get_part(const char *partname, int *idx, loff_t *off, loff_t *size,
|
||||||
|
loff_t *maxsize)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_CMD_MTDPARTS
|
#ifdef CONFIG_CMD_MTDPARTS
|
||||||
struct mtd_device *dev;
|
struct mtd_device *dev;
|
||||||
|
@ -160,6 +161,7 @@ static int get_part(const char *partname, int *idx, loff_t *off, loff_t *size)
|
||||||
|
|
||||||
*off = part->offset;
|
*off = part->offset;
|
||||||
*size = part->size;
|
*size = part->size;
|
||||||
|
*maxsize = part->size;
|
||||||
*idx = dev->id->num;
|
*idx = dev->id->num;
|
||||||
|
|
||||||
ret = set_dev(*idx);
|
ret = set_dev(*idx);
|
||||||
|
@ -173,10 +175,11 @@ static int get_part(const char *partname, int *idx, loff_t *off, loff_t *size)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static int arg_off(const char *arg, int *idx, loff_t *off, loff_t *maxsize)
|
static int arg_off(const char *arg, int *idx, loff_t *off, loff_t *size,
|
||||||
|
loff_t *maxsize)
|
||||||
{
|
{
|
||||||
if (!str2off(arg, off))
|
if (!str2off(arg, off))
|
||||||
return get_part(arg, idx, off, maxsize);
|
return get_part(arg, idx, off, size, maxsize);
|
||||||
|
|
||||||
if (*off >= nand_info[*idx].size) {
|
if (*off >= nand_info[*idx].size) {
|
||||||
puts("Offset exceeds device limit\n");
|
puts("Offset exceeds device limit\n");
|
||||||
|
@ -184,36 +187,35 @@ static int arg_off(const char *arg, int *idx, loff_t *off, loff_t *maxsize)
|
||||||
}
|
}
|
||||||
|
|
||||||
*maxsize = nand_info[*idx].size - *off;
|
*maxsize = nand_info[*idx].size - *off;
|
||||||
|
*size = *maxsize;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int arg_off_size(int argc, char *const argv[], int *idx,
|
static int arg_off_size(int argc, char *const argv[], int *idx,
|
||||||
loff_t *off, loff_t *size)
|
loff_t *off, loff_t *size, loff_t *maxsize)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
loff_t maxsize = 0;
|
|
||||||
|
|
||||||
if (argc == 0) {
|
if (argc == 0) {
|
||||||
*off = 0;
|
*off = 0;
|
||||||
*size = nand_info[*idx].size;
|
*size = nand_info[*idx].size;
|
||||||
|
*maxsize = *size;
|
||||||
goto print;
|
goto print;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = arg_off(argv[0], idx, off, &maxsize);
|
ret = arg_off(argv[0], idx, off, size, maxsize);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
if (argc == 1) {
|
if (argc == 1)
|
||||||
*size = maxsize;
|
|
||||||
goto print;
|
goto print;
|
||||||
}
|
|
||||||
|
|
||||||
if (!str2off(argv[1], size)) {
|
if (!str2off(argv[1], size)) {
|
||||||
printf("'%s' is not a number\n", argv[1]);
|
printf("'%s' is not a number\n", argv[1]);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (*size > maxsize) {
|
if (*size > *maxsize) {
|
||||||
puts("Size exceeds partition or device limit\n");
|
puts("Size exceeds partition or device limit\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -307,7 +309,8 @@ int do_nand_env_oob(cmd_tbl_t *cmdtp, int argc, char *const argv[])
|
||||||
if (argc < 3)
|
if (argc < 3)
|
||||||
goto usage;
|
goto usage;
|
||||||
|
|
||||||
if (arg_off(argv[2], &idx, &addr, &maxsize)) {
|
/* We don't care about size, or maxsize. */
|
||||||
|
if (arg_off(argv[2], &idx, &addr, &maxsize, &maxsize)) {
|
||||||
puts("Offset or partition name expected\n");
|
puts("Offset or partition name expected\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -426,7 +429,7 @@ static int do_nand(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
||||||
{
|
{
|
||||||
int i, ret = 0;
|
int i, ret = 0;
|
||||||
ulong addr;
|
ulong addr;
|
||||||
loff_t off, size;
|
loff_t off, size, maxsize;
|
||||||
char *cmd, *s;
|
char *cmd, *s;
|
||||||
nand_info_t *nand;
|
nand_info_t *nand;
|
||||||
#ifdef CONFIG_SYS_NAND_QUIET
|
#ifdef CONFIG_SYS_NAND_QUIET
|
||||||
|
@ -551,7 +554,8 @@ static int do_nand(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
||||||
|
|
||||||
printf("\nNAND %s: ", cmd);
|
printf("\nNAND %s: ", cmd);
|
||||||
/* skip first two or three arguments, look for offset and size */
|
/* skip first two or three arguments, look for offset and size */
|
||||||
if (arg_off_size(argc - o, argv + o, &dev, &off, &size) != 0)
|
if (arg_off_size(argc - o, argv + o, &dev, &off, &size,
|
||||||
|
&maxsize) != 0)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
nand = &nand_info[dev];
|
nand = &nand_info[dev];
|
||||||
|
@ -619,7 +623,7 @@ static int do_nand(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
||||||
if (s && !strcmp(s, ".raw")) {
|
if (s && !strcmp(s, ".raw")) {
|
||||||
raw = 1;
|
raw = 1;
|
||||||
|
|
||||||
if (arg_off(argv[3], &dev, &off, &size))
|
if (arg_off(argv[3], &dev, &off, &size, &maxsize))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
if (argc > 4 && !str2long(argv[4], &pagecount)) {
|
if (argc > 4 && !str2long(argv[4], &pagecount)) {
|
||||||
|
@ -635,7 +639,7 @@ static int do_nand(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
||||||
rwsize = pagecount * (nand->writesize + nand->oobsize);
|
rwsize = pagecount * (nand->writesize + nand->oobsize);
|
||||||
} else {
|
} else {
|
||||||
if (arg_off_size(argc - 3, argv + 3, &dev,
|
if (arg_off_size(argc - 3, argv + 3, &dev,
|
||||||
&off, &size) != 0)
|
&off, &size, &maxsize) != 0)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
rwsize = size;
|
rwsize = size;
|
||||||
|
@ -645,9 +649,11 @@ static int do_nand(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
||||||
!strcmp(s, ".e") || !strcmp(s, ".i")) {
|
!strcmp(s, ".e") || !strcmp(s, ".i")) {
|
||||||
if (read)
|
if (read)
|
||||||
ret = nand_read_skip_bad(nand, off, &rwsize,
|
ret = nand_read_skip_bad(nand, off, &rwsize,
|
||||||
|
NULL, maxsize,
|
||||||
(u_char *)addr);
|
(u_char *)addr);
|
||||||
else
|
else
|
||||||
ret = nand_write_skip_bad(nand, off, &rwsize,
|
ret = nand_write_skip_bad(nand, off, &rwsize,
|
||||||
|
NULL, maxsize,
|
||||||
(u_char *)addr, 0);
|
(u_char *)addr, 0);
|
||||||
#ifdef CONFIG_CMD_NAND_TRIMFFS
|
#ifdef CONFIG_CMD_NAND_TRIMFFS
|
||||||
} else if (!strcmp(s, ".trimffs")) {
|
} else if (!strcmp(s, ".trimffs")) {
|
||||||
|
@ -655,8 +661,8 @@ static int do_nand(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
||||||
printf("Unknown nand command suffix '%s'\n", s);
|
printf("Unknown nand command suffix '%s'\n", s);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
ret = nand_write_skip_bad(nand, off, &rwsize,
|
ret = nand_write_skip_bad(nand, off, &rwsize, NULL,
|
||||||
(u_char *)addr,
|
maxsize, (u_char *)addr,
|
||||||
WITH_DROP_FFS);
|
WITH_DROP_FFS);
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_CMD_NAND_YAFFS
|
#ifdef CONFIG_CMD_NAND_YAFFS
|
||||||
|
@ -665,9 +671,9 @@ static int do_nand(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
||||||
printf("Unknown nand command suffix '%s'.\n", s);
|
printf("Unknown nand command suffix '%s'.\n", s);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
ret = nand_write_skip_bad(nand, off, &rwsize,
|
ret = nand_write_skip_bad(nand, off, &rwsize, NULL,
|
||||||
(u_char *)addr,
|
maxsize, (u_char *)addr,
|
||||||
WITH_INLINE_OOB);
|
WITH_YAFFS_OOB);
|
||||||
#endif
|
#endif
|
||||||
} else if (!strcmp(s, ".oob")) {
|
} else if (!strcmp(s, ".oob")) {
|
||||||
/* out-of-band data */
|
/* out-of-band data */
|
||||||
|
@ -775,7 +781,8 @@ static int do_nand(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
||||||
if (s && !strcmp(s, ".allexcept"))
|
if (s && !strcmp(s, ".allexcept"))
|
||||||
allexcept = 1;
|
allexcept = 1;
|
||||||
|
|
||||||
if (arg_off_size(argc - 2, argv + 2, &dev, &off, &size) < 0)
|
if (arg_off_size(argc - 2, argv + 2, &dev, &off, &size,
|
||||||
|
&maxsize) < 0)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
if (!nand_unlock(&nand_info[dev], off, size, allexcept)) {
|
if (!nand_unlock(&nand_info[dev], off, size, allexcept)) {
|
||||||
|
@ -873,7 +880,8 @@ static int nand_load_image(cmd_tbl_t *cmdtp, nand_info_t *nand,
|
||||||
printf("\nLoading from %s, offset 0x%lx\n", nand->name, offset);
|
printf("\nLoading from %s, offset 0x%lx\n", nand->name, offset);
|
||||||
|
|
||||||
cnt = nand->writesize;
|
cnt = nand->writesize;
|
||||||
r = nand_read_skip_bad(nand, offset, &cnt, (u_char *) addr);
|
r = nand_read_skip_bad(nand, offset, &cnt, NULL, nand->size,
|
||||||
|
(u_char *)addr);
|
||||||
if (r) {
|
if (r) {
|
||||||
puts("** Read error\n");
|
puts("** Read error\n");
|
||||||
bootstage_error(BOOTSTAGE_ID_NAND_HDR_READ);
|
bootstage_error(BOOTSTAGE_ID_NAND_HDR_READ);
|
||||||
|
@ -905,7 +913,8 @@ static int nand_load_image(cmd_tbl_t *cmdtp, nand_info_t *nand,
|
||||||
}
|
}
|
||||||
bootstage_mark(BOOTSTAGE_ID_NAND_TYPE);
|
bootstage_mark(BOOTSTAGE_ID_NAND_TYPE);
|
||||||
|
|
||||||
r = nand_read_skip_bad(nand, offset, &cnt, (u_char *) addr);
|
r = nand_read_skip_bad(nand, offset, &cnt, NULL, nand->size,
|
||||||
|
(u_char *)addr);
|
||||||
if (r) {
|
if (r) {
|
||||||
puts("** Read error\n");
|
puts("** Read error\n");
|
||||||
bootstage_error(BOOTSTAGE_ID_NAND_READ);
|
bootstage_error(BOOTSTAGE_ID_NAND_READ);
|
||||||
|
|
|
@ -62,9 +62,10 @@ DECLARE_GLOBAL_DATA_PTR;
|
||||||
!defined(CONFIG_ENV_IS_IN_ONENAND) && \
|
!defined(CONFIG_ENV_IS_IN_ONENAND) && \
|
||||||
!defined(CONFIG_ENV_IS_IN_SPI_FLASH) && \
|
!defined(CONFIG_ENV_IS_IN_SPI_FLASH) && \
|
||||||
!defined(CONFIG_ENV_IS_IN_REMOTE) && \
|
!defined(CONFIG_ENV_IS_IN_REMOTE) && \
|
||||||
|
!defined(CONFIG_ENV_IS_IN_UBI) && \
|
||||||
!defined(CONFIG_ENV_IS_NOWHERE)
|
!defined(CONFIG_ENV_IS_NOWHERE)
|
||||||
# error Define one of CONFIG_ENV_IS_IN_{EEPROM|FLASH|DATAFLASH|ONENAND|\
|
# error Define one of CONFIG_ENV_IS_IN_{EEPROM|FLASH|DATAFLASH|ONENAND|\
|
||||||
SPI_FLASH|NVRAM|MMC|FAT|REMOTE} or CONFIG_ENV_IS_NOWHERE
|
SPI_FLASH|NVRAM|MMC|FAT|REMOTE|UBI} or CONFIG_ENV_IS_NOWHERE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -273,6 +274,10 @@ int setenv(const char *varname, const char *varvalue)
|
||||||
{
|
{
|
||||||
const char * const argv[4] = { "setenv", varname, varvalue, NULL };
|
const char * const argv[4] = { "setenv", varname, varvalue, NULL };
|
||||||
|
|
||||||
|
/* before import into hashtable */
|
||||||
|
if (!(gd->flags & GD_FLG_ENV_READY))
|
||||||
|
return 1;
|
||||||
|
|
||||||
if (varvalue == NULL || varvalue[0] == '\0')
|
if (varvalue == NULL || varvalue[0] == '\0')
|
||||||
return _do_env_set(0, 2, (char * const *)argv);
|
return _do_env_set(0, 2, (char * const *)argv);
|
||||||
else
|
else
|
||||||
|
|
|
@ -1280,7 +1280,8 @@ static struct menu *pxe_menu_to_menu(struct pxe_menu *cfg)
|
||||||
/*
|
/*
|
||||||
* Create a menu and add items for all the labels.
|
* Create a menu and add items for all the labels.
|
||||||
*/
|
*/
|
||||||
m = menu_create(cfg->title, cfg->timeout, cfg->prompt, label_print);
|
m = menu_create(cfg->title, cfg->timeout, cfg->prompt, label_print,
|
||||||
|
NULL, NULL);
|
||||||
|
|
||||||
if (!m)
|
if (!m)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
|
@ -110,7 +110,7 @@ void scsi_scan(int mode)
|
||||||
scsi_dev_desc[i].vendor[0]=0;
|
scsi_dev_desc[i].vendor[0]=0;
|
||||||
scsi_dev_desc[i].product[0]=0;
|
scsi_dev_desc[i].product[0]=0;
|
||||||
scsi_dev_desc[i].revision[0]=0;
|
scsi_dev_desc[i].revision[0]=0;
|
||||||
scsi_dev_desc[i].removable=FALSE;
|
scsi_dev_desc[i].removable = false;
|
||||||
scsi_dev_desc[i].if_type=IF_TYPE_SCSI;
|
scsi_dev_desc[i].if_type=IF_TYPE_SCSI;
|
||||||
scsi_dev_desc[i].dev=i;
|
scsi_dev_desc[i].dev=i;
|
||||||
scsi_dev_desc[i].part_type=PART_TYPE_UNKNOWN;
|
scsi_dev_desc[i].part_type=PART_TYPE_UNKNOWN;
|
||||||
|
@ -125,7 +125,7 @@ void scsi_scan(int mode)
|
||||||
pccb->pdata=(unsigned char *)&tempbuff;
|
pccb->pdata=(unsigned char *)&tempbuff;
|
||||||
pccb->datalen=512;
|
pccb->datalen=512;
|
||||||
scsi_setup_inquiry(pccb);
|
scsi_setup_inquiry(pccb);
|
||||||
if(scsi_exec(pccb)!=TRUE) {
|
if (scsi_exec(pccb) != true) {
|
||||||
if(pccb->contr_stat==SCSI_SEL_TIME_OUT) {
|
if(pccb->contr_stat==SCSI_SEL_TIME_OUT) {
|
||||||
debug ("Selection timeout ID %d\n",pccb->target);
|
debug ("Selection timeout ID %d\n",pccb->target);
|
||||||
continue; /* selection timeout => assuming no device present */
|
continue; /* selection timeout => assuming no device present */
|
||||||
|
@ -139,7 +139,7 @@ void scsi_scan(int mode)
|
||||||
continue; /* skip unknown devices */
|
continue; /* skip unknown devices */
|
||||||
}
|
}
|
||||||
if((modi&0x80)==0x80) /* drive is removable */
|
if((modi&0x80)==0x80) /* drive is removable */
|
||||||
scsi_dev_desc[scsi_max_devs].removable=TRUE;
|
scsi_dev_desc[scsi_max_devs].removable=true;
|
||||||
/* get info for this device */
|
/* get info for this device */
|
||||||
scsi_ident_cpy((unsigned char *)&scsi_dev_desc[scsi_max_devs].vendor[0],
|
scsi_ident_cpy((unsigned char *)&scsi_dev_desc[scsi_max_devs].vendor[0],
|
||||||
&tempbuff[8], 8);
|
&tempbuff[8], 8);
|
||||||
|
@ -152,8 +152,8 @@ void scsi_scan(int mode)
|
||||||
|
|
||||||
pccb->datalen=0;
|
pccb->datalen=0;
|
||||||
scsi_setup_test_unit_ready(pccb);
|
scsi_setup_test_unit_ready(pccb);
|
||||||
if(scsi_exec(pccb)!=TRUE) {
|
if (scsi_exec(pccb) != true) {
|
||||||
if(scsi_dev_desc[scsi_max_devs].removable==TRUE) {
|
if (scsi_dev_desc[scsi_max_devs].removable == true) {
|
||||||
scsi_dev_desc[scsi_max_devs].type=perq;
|
scsi_dev_desc[scsi_max_devs].type=perq;
|
||||||
goto removable;
|
goto removable;
|
||||||
}
|
}
|
||||||
|
@ -404,7 +404,7 @@ static ulong scsi_read(int device, ulong blknr, lbaint_t blkcnt, void *buffer)
|
||||||
debug("scsi_read_ext: startblk " LBAF
|
debug("scsi_read_ext: startblk " LBAF
|
||||||
", blccnt %x buffer %lx\n",
|
", blccnt %x buffer %lx\n",
|
||||||
start, smallblks, buf_addr);
|
start, smallblks, buf_addr);
|
||||||
if(scsi_exec(pccb)!=TRUE) {
|
if (scsi_exec(pccb) != true) {
|
||||||
scsi_print_error(pccb);
|
scsi_print_error(pccb);
|
||||||
blkcnt-=blks;
|
blkcnt-=blks;
|
||||||
break;
|
break;
|
||||||
|
@ -458,7 +458,7 @@ static ulong scsi_write(int device, ulong blknr,
|
||||||
}
|
}
|
||||||
debug("%s: startblk " LBAF ", blccnt %x buffer %lx\n",
|
debug("%s: startblk " LBAF ", blccnt %x buffer %lx\n",
|
||||||
__func__, start, smallblks, buf_addr);
|
__func__, start, smallblks, buf_addr);
|
||||||
if (scsi_exec(pccb) != TRUE) {
|
if (scsi_exec(pccb) != true) {
|
||||||
scsi_print_error(pccb);
|
scsi_print_error(pccb);
|
||||||
blkcnt -= blks;
|
blkcnt -= blks;
|
||||||
break;
|
break;
|
||||||
|
@ -521,7 +521,7 @@ int scsi_read_capacity(ccb *pccb, lbaint_t *capacity, unsigned long *blksz)
|
||||||
pccb->msgout[0] = SCSI_IDENTIFY; /* NOT USED */
|
pccb->msgout[0] = SCSI_IDENTIFY; /* NOT USED */
|
||||||
|
|
||||||
pccb->datalen = 8;
|
pccb->datalen = 8;
|
||||||
if (scsi_exec(pccb) != TRUE)
|
if (scsi_exec(pccb) != true)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
*capacity = ((lbaint_t)pccb->pdata[0] << 24) |
|
*capacity = ((lbaint_t)pccb->pdata[0] << 24) |
|
||||||
|
@ -547,7 +547,7 @@ int scsi_read_capacity(ccb *pccb, lbaint_t *capacity, unsigned long *blksz)
|
||||||
pccb->msgout[0] = SCSI_IDENTIFY; /* NOT USED */
|
pccb->msgout[0] = SCSI_IDENTIFY; /* NOT USED */
|
||||||
|
|
||||||
pccb->datalen = 16;
|
pccb->datalen = 16;
|
||||||
if (scsi_exec(pccb) != TRUE)
|
if (scsi_exec(pccb) != true)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
*capacity = ((uint64_t)pccb->pdata[0] << 56) |
|
*capacity = ((uint64_t)pccb->pdata[0] << 56) |
|
||||||
|
|
|
@ -5,8 +5,8 @@
|
||||||
* Licensed under the GPL-2 or later.
|
* Licensed under the GPL-2 or later.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <div64.h>
|
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
|
#include <div64.h>
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
#include <spi_flash.h>
|
#include <spi_flash.h>
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue