+======================================================================
+Modifications since 1.2.0:
+======================================================================
+
+* Fix flash sector size for SMDK2400, and flash bank size for TRAB
+
+* Fix undefined variables problem in lib_ppc/board.c for some boards
+
+* Patch by Denis Peter, 30 Sep 2002:
+ Fixed MPL (PIP405, MIP405) boards (do_bsp(..) calling convention)
+ Cleaned up MPL (PIP405, MIP405) boards.
+
======================================================================
Modifications for 1.2.0:
======================================================================
#include <asm/processor.h>
#include <i2c.h>
#include <devices.h>
+#include <pci.h>
+#include "video.h"
extern int gunzip (void *, int, unsigned char *, int *);
extern int mem_test(unsigned long start, unsigned long ramsize, int quiet);
}
-int do_mplcommon(cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[])
+int do_mplcommon(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{
ulong size,src,ld_addr;
int result;
#if (CONFIG_COMMANDS & CFG_CMD_FDC)
if (strcmp(argv[2], "floppy") == 0) {
char *local_args[3];
- extern int do_fdcboot (cmd_tbl_t *, bd_t *, int, int, char *[]);
+ extern int do_fdcboot (cmd_tbl_t *, int, int, char *[]);
printf ("\nupdating bootloader image from floppy\n");
local_args[0] = argv[0];
if(argc==4) {
local_args[1] = argv[3];
local_args[2] = NULL;
ld_addr=simple_strtoul(argv[3], NULL, 16);
- result=do_fdcboot(cmdtp, bd, 0, 2, local_args);
+ result=do_fdcboot(cmdtp, 0, 2, local_args);
}
else {
local_args[1] = NULL;
ld_addr=CFG_LOAD_ADDR;
- result=do_fdcboot(cmdtp, bd, 0, 1, local_args);
+ result=do_fdcboot(cmdtp, 0, 1, local_args);
}
result=mpl_prg_image(ld_addr);
switch_cs(sw); /* Switch flash back */
}while(result);
return 0;
}
- if (strcmp(argv[1], "clearenvvalues") == 0)
+ if (strcmp(argv[1], "clearenvvalues") == 0)
{
if (strcmp(argv[2], "yes") == 0)
{
set_backup_values(1);
return 0;
}
-#if 0
- if (strcmp(argv[1], "test") == 0) {
- char *local_args[6];
- int i;
- extern int do_doc(cmd_tbl_t *, bd_t *, int, int, char *[]);
- local_args[0] = argv[0];
- for(i=1;i<5;i++) {
- if(i+1<argc) {
- local_args[i]=argv[i+1];
- }
- else {
- local_args[i]=NULL;
- }
- }
- local_args[5]=NULL;
- result=do_doc(cmdtp, bd, 0, argc-1, local_args);
- return 0;
- }
- if (strcmp(argv[1], "test1") == 0) {
- char *local_args[6];
- int i;
- extern int do_docboot(cmd_tbl_t *, bd_t *, int, int, char *[]);
- local_args[0] = argv[0];
- for(i=1;i<5;i++) {
- if(i+1<argc) {
- local_args[i]=argv[i+1];
- }
- else {
- local_args[i]=NULL;
- }
- }
- local_args[5]=NULL;
- result=do_docboot(cmdtp, bd, 0, argc-1, local_args);
- return 0;
- }
-#endif
printf("Usage:\n%s\n", cmdtp->usage);
return 1;
}
doc_probe(MULTI_PURPOSE_SOCKET_ADDR);
}
#endif
+
+#ifdef CONFIG_VIDEO
+/******************************************************
+ * Routines to display the Board information
+ * to the screen (since the VGA will be initialized as last,
+ * we must resend the infos)
+ */
+
+void video_write_board_info (void)
+{
+ DECLARE_GLOBAL_DATA_PTR;
+
+ extern char version_string[];
+ unsigned long pvr = get_pvr ();
+ char buf[32], tmpbuf[80];
+ PPC405_SYS_INFO sys_info;
+ unsigned char *s = getenv ("serial#");
+ unsigned char *e;
+ unsigned char bc,sw;
+
+ /* first write PPCBOOT Info */
+ video_puts ("\n");
+ video_puts (version_string);
+ video_puts ("\n\n");
+ /* then CPU and board infos */
+ get_sys_info (&sys_info);
+ video_puts ("CPU: IBM PowerPC 405GP Rev. ");
+ switch (pvr) {
+ case PVR_405GP_RB:
+ video_putc ('B');
+ break;
+ case PVR_405GP_RC:
+ video_putc ('C');
+ break;
+ case PVR_405GP_RD:
+ video_putc ('D');
+ break;
+ case PVR_405GP_RE:
+ video_putc ('E');
+ break;
+ default:
+ video_puts ("unknown");
+ break;
+ }
+ sprintf (tmpbuf, " at %s MHz (PLB=%lu, OPB=%lu, EBC=%lu MHz)\n",
+ strmhz (buf, gd->cpu_clk), sys_info.freqPLB / 1000000,
+ sys_info.freqPLB / sys_info.pllOpbDiv / 1000000,
+ sys_info.freqPLB / sys_info.pllExtBusDiv / 1000000);
+ video_puts (tmpbuf);
+ if (mfdcr (strap) & PSR_PCI_ASYNC_EN)
+ video_puts (" PCI async ext clock used, ");
+ else {
+ sprintf (buf, " PCI sync clock at %lu MHz, ",
+ sys_info.freqPLB / sys_info.pllPciDiv / 1000000);
+ video_puts (buf);
+ }
+ if (mfdcr (strap) & PSR_PCI_ARBIT_EN)
+ video_puts ("internal PCI arbiter enabled\n");
+ else
+ video_puts ("external PCI arbiter enabled\n");
+ video_puts (" 16 kB I-Cache 8 kB D-Cache\n");
+ /* now some board infos */
+ video_puts ("Board: ");
+#ifdef CONFIG_PIP405
+ if (!s || strncmp (s, "PIP405", 6)) {
+ bc = video_set_attr (VGA_ATTR_CLR_RED | VGA_ATTR_ITN);
+ video_puts ("### No HW ID - assuming PIP405");
+ }
+#endif
+#ifdef CONFIG_MIP405
+ if (!s || strncmp (s, "MIP405", 6)) {
+ bc = video_set_attr (VGA_ATTR_CLR_RED | VGA_ATTR_ITN);
+ video_puts ("### No HW ID - assuming MIP405");
+ }
+#endif
+ else {
+ bc = video_set_attr (VGA_ATTR_CLR_GRN);
+ for (e = s; *e; ++e) {
+ if (*e == ' ')
+ break;
+ }
+ for (; s < e; ++s) {
+ if (*s == '_') {
+ ++s;
+ break;
+ }
+ video_putc (*s);
+ }
+ video_puts (" Serial No.: ");
+ for (; s < e; ++s) {
+ video_putc (*s);
+ }
+ }
+ video_set_attr (bc);
+ bc = in8 (CONFIG_PORT_ADDR);
+ sprintf (buf, " Boot Config 0x%02X\n", bc);
+ video_puts (buf);
+ /* DRAM size */
+ video_puts ("DRAM: ");
+ sprintf (buf, "%lu MBytes\n", gd->bd->bi_memsize / 0x100000);
+ video_puts (buf);
+ /* flash size: */
+ video_puts ("FLASH: ");
+ sw = switch_cs (0);
+ switch_cs (sw);
+ if (sw == 0) {
+ bc = video_set_attr (VGA_ATTR_CLR_GRN);
+ video_puts ("(Flash boot)");
+ video_set_attr (bc);
+ } else {
+ bc = video_set_attr (VGA_ATTR_CLR_RED | VGA_ATTR_ITN);
+ video_puts ("(Multi Purpose Socket boot)");
+ video_set_attr (bc);
+ }
+ sprintf (buf, " %lu MBytes\n", gd->bd->bi_flashsize / 0x100000);
+ video_puts (buf);
+}
+
+#endif
}
}
+
static void pci_pip405_fixup_irq(struct pci_controller *hose, pci_dev_t dev)
{
unsigned char int_line = 0xff;
/*
* Write pci interrupt line register
*/
- if(PCI_DEV_NUMBER(dev)>PCI_HIGHEST_ON_BOARD_ID) {
- /* only external (PC104+) residing devices will be written */
+ if(PCI_DEV(dev)==0) /* Device0 = PPC405 -> skip */
+ return;
+ if(PCI_FUNC(dev)==0)
+ {
+ /* assuming all function 0 are using their INTA# Pin*/
int_line=PCI_IRQ_VECTOR(dev);
pci_hose_write_config_byte(hose, dev, PCI_INTERRUPT_LINE, int_line);
+#ifdef DEBUG
+ printf("Fixup IRQ: dev %d (%x) int line %d 0x%x\n",
+ PCI_DEV(dev),dev,int_line,int_line);
+#endif
}
}
void pci_init(void)
{
+ /*we want the ptrs to RAM not flash (ie don't use init list)*/
+ hose.fixup_irq = pci_pip405_fixup_irq;
+ hose.config_table = pci_pip405_config_table;
pci_405gp_init(&hose);
}
*
*/
#define PCI_HIGHEST_ON_BOARD_ID 19
-#define PCI_DEV_NUMBER(x) (((x>>11) & 0x1f) + 10)
-#define PCI_IRQ_VECTOR(x) (PCI_DEV_NUMBER(x) % 4) + 28
+/*#define PCI_DEV_NUMBER(x) (((x>>11) & 0x1f) + 10) */
+#define PCI_IRQ_VECTOR(x) ((PCI_DEV(x) + 10) % 4) + 28
+
/* PCI Device List for PIP405 */
{PCI_CFG_PIIX4_SMBBA, 0x00005000, 4}, /* set SMBBA to "valid" value */
{ } /* end of device table */
};
-
-/* VGA Controller ct69000 (logical device 0) */
-static struct pci_pip405_config_entry vga_ct69000[] = {
- {PCI_BASE_ADDRESS_0, 0x80000000, 4}, /* Frame buffer access */
- {PCI_ROM_ADDRESS, 0x00000000, 4}, /* disable ROM */
- {PCI_INTERRUPT_LINE, 29, 1}, /* Int vector = 29 */
- {PCI_COMMAND, 0x0003, 2}, /* enable IO access */
- { } /* end of device table */
-};
-
-/* Symbois 810 function 0 */
-static struct pci_pip405_config_entry symbois_810_f0[] = {
- {PCI_BASE_ADDRESS_0, 0x00001001, 4}, /* IO Base address */
- {PCI_BASE_ADDRESS_1, 0x81000000, 4}, /* Memory Base address */
- {PCI_INTERRUPT_LINE, 30, 1}, /* Int vector = 30 */
- {PCI_COMMAND, 0x0006, 2}, /* enable Memory access and busmaster */
- {0xFFFF, 0,0} /* end of device table */
-};
-
/* PPC405 Dummy only used to prevent autosetup on this host bridge */
static struct pci_pip405_config_entry ibm405_dummy[] = {
{ } /* end of device table */
void pci_405gp_setup_vga(struct pci_controller *hose, pci_dev_t dev,
struct pci_config_table *entry);
-
+
+
static struct pci_config_table pci_pip405_config_table[]={
{PCI_VENDOR_ID_IBM, /* 405 dummy */
PCI_DEVICE_ID_IBM_405GP,
PCI_ANY_ID, PCI_ANY_ID, 3,
pci_pip405_write_regs, {(unsigned long) piix4_pmm_cntrl_f3}},
- {PCI_VENDOR_ID_CT, /* VGA Controller ct69000 (logical device 0) */
- PCI_DEVICE_ID_CT_69000,
- PCI_ANY_ID,
- PCI_ANY_ID, PCI_ANY_ID, 0,
- pci_pip405_write_regs, {(unsigned long) vga_ct69000}},
-
- {PCI_VENDOR_ID_NCR, /* Symbois 810 function 0 */
- PCI_DEVICE_ID_NCR_53C810,
- PCI_ANY_ID,
- PCI_ANY_ID, PCI_ANY_ID, 0,
- pci_pip405_write_regs, {(unsigned long) symbois_810_f0}},
-
- {PCI_ANY_ID,
+ {PCI_ANY_ID,
PCI_ANY_ID,
PCI_CLASS_DISPLAY_VGA,
PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
*/
#include <common.h>
+
+#ifdef CONFIG_VIDEO
+
#include <command.h>
#include <asm/processor.h>
#include <devices.h>
#include "vga_table.h"
+
#ifdef CONFIG_VIDEO_CT69000
#define VIDEO_VEND_ID 0x102C
#define VIDEO_DEV_ID 0x00C0
int drv_video_init (void)
{
int error, devices = 1 ;
- device_t vgadev ;
+ device_t vgadev ;
int busdevfunc;
busdevfunc=pci_find_device(VIDEO_VEND_ID,VIDEO_DEV_ID,0); /* get PCI Device ID */
if(busdevfunc==-1) {
+#ifdef CONFIG_VIDEO_ONBOARD
printf("Error VGA Controller (%04X,%04X) not found\n",VIDEO_VEND_ID,VIDEO_DEV_ID);
+#endif
return -1;
}
video_init(busdevfunc);
video_write_board_info();
- memset (&vgadev, 0, sizeof(vgadev));
-
- strcpy(vgadev.name, "vga");
- vgadev.flags = DEV_FLAGS_OUTPUT | DEV_FLAGS_SYSTEM;
- vgadev.putc = video_putc;
- vgadev.puts = video_puts;
- vgadev.getc = NULL;
- vgadev.tstc = NULL;
+ memset (&vgadev, 0, sizeof(vgadev));
- error = device_register (&vgadev);
+ strcpy(vgadev.name, "vga");
+ vgadev.flags = DEV_FLAGS_OUTPUT | DEV_FLAGS_SYSTEM;
+ vgadev.putc = video_putc;
+ vgadev.puts = video_puts;
+ vgadev.getc = NULL;
+ vgadev.tstc = NULL;
+ error = device_register (&vgadev);
- return (error == 0) ? devices : error ;
+ return (error == 0) ? devices : error ;
}
}
#endif
+#endif /* CONFIG_VIDEO */
*
*/
+#ifdef CONFIG_VIDEO
#ifndef _VIDEO_H
#define _VIDEO_H
#define VGA_ATTR_INVERT(A) ((((A)&0x7)<<4)|(((A)&0x70)>>4) |((A)&0x88))
-#endif
+#endif /* _VIDEO_H */
+#endif /* CONFIG_VIDEO */
LIB = lib$(BOARD).a
OBJS = $(BOARD).o ../common/flash.o cmd_mip405.o ../common/pci.o \
- ../common/usb_uhci.o ../common/memtst.o ../common/common_util.o
+ ../common/usb_uhci.o ../common/memtst.o ../common/common_util.o \
+ ../common/video.o
SOBJS = init.o
extern void print_mip405_info(void);
-extern int do_mplcommon(cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[]);
+extern int do_mplcommon(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]);
/* ------------------------------------------------------------------------- */
-int do_mip405(cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[])
+int do_mip405(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{
ulong led_on;
user_led0(led_on);
return 0;
}
- return (do_mplcommon(cmdtp, bd, flag, argc, argv));
+ return (do_mplcommon(cmdtp, flag, argc, argv));
}
/* ------------------------------------------------------------------------- */
int misc_init_r (void)
{
-#if 0
- unsigned char bc;
- char buf[128];
- unsigned char *s;
-
- bc = in8 (PLD_EXT_CONF_REG);
- bc >>= 4;
- bc &= 0x0f;
- sprintf (buf, "bootcmd%d", bc);
- s = getenv (buf);
- if (s) {
- sprintf (buf, "%s", s);
- setenv ("bootcmd", buf);
- }
- sprintf (buf, "bootargs%d", bc);
- s = getenv (buf);
- if (s) {
- sprintf (buf, "%s", s);
- setenv ("bootargs", buf);
- }
-#endif
- /* it is time to swap the flash permanently to the flash area */
-/* switch_cs(FALSE); */
return (0);
}
+
void print_mip405_rev (void)
{
unsigned char part, vers, cfg, rev;
int overwrite_console (void)
{
- return (in8 (PLD_EXT_CONF_REG) & 0x1); /* return TRUE if console should be overwritten */
+ return ((in8 (PLD_EXT_CONF_REG) & 0x1)==0); /* return TRUE if console should be overwritten */
}
}
-/******************************************************
- * Routines to display the Board information
- * to the screen (since the VGA will be initialized as last,
- * we must resend the infos)
- */
-#ifdef CONFIG_VIDEO
-void video_put_dev_string (block_dev_desc_t * dev_desc)
-{
- char buf[80];
- ldiv_t mb;
- unsigned long lba512; /* number of blocks if 512bytes block size */
-
- if (dev_desc->type != DEV_TYPE_UNKNOWN) {
- if (dev_desc->if_type == IF_TYPE_SCSI)
- sprintf (buf, "SCSI %d: (%d:%d) ", dev_desc->dev,
- dev_desc->target, dev_desc->lun);
- else
- sprintf (buf, "IDE %d: ", dev_desc->dev);
- video_puts (buf);
- switch (dev_desc->type & 0x1F) {
- case DEV_TYPE_HARDDISK:
- video_puts ("Hard Disk");
- break;
- case DEV_TYPE_CDROM:
- video_puts ("CD ROM");
- break;
- case DEV_TYPE_OPDISK:
- video_puts ("Optical Device");
- break;
- case DEV_TYPE_TAPE:
- video_puts ("Tape");
- break;
- default:
- video_puts ("unknown");
- break;
- }
- video_puts (" ");
- video_puts (dev_desc->vendor);
- video_puts (" ");
- if (dev_desc->if_type != IF_TYPE_IDE)
- video_puts (dev_desc->product);
-
- if ((dev_desc->lba * dev_desc->blksz) > 0L) {
- lba512 = dev_desc->lba * (dev_desc->blksz / 512);
- mb = ldiv (lba512, 2048); /* (1024 *1024 / 512 MB */
- /* round to 1 digit */
- mb.rem *= 10 * 512;
- mb.rem += 512 * 1024;
- mb.rem /= 1024 * 1024;
- sprintf (buf, " %ld x %ld Bytes = %ld.%ld MB\n", dev_desc->lba,
- dev_desc->blksz, mb.quot, mb.rem);
- } else {
- sprintf (buf, " Capacity: not available\n");
- }
- video_puts (buf);
- }
-}
-
-void video_write_board_info (void)
-{
- DECLARE_GLOBAL_DATA_PTR;
-
- extern char version_string[];
- unsigned long pvr = get_pvr ();
- char buf[32], tmpbuf[80];
- PPC405_SYS_INFO sys_info;
- unsigned char *s = getenv ("serial#");
- unsigned char *e;
- unsigned char bc;
- block_dev_desc_t *dev_desc;
- int i;
-
- /* first write PPCBOOT Info */
- video_puts ("\n");
- video_puts (version_string);
- video_puts ("\n\n");
- /* then CPU and board infos */
- get_sys_info (&sys_info);
- video_puts ("CPU: IBM PowerPC 405GP Rev. ");
- switch (pvr) {
- case PVR_405GP_RB:
- video_putc ('B');
- break;
- case PVR_405GP_RC:
- video_putc ('C');
- break;
- case PVR_405GP_RD:
- video_putc ('D');
- break;
- case PVR_405GP_RE:
- video_putc ('E');
- break;
- default:
- video_puts ("unknown");
- break;
- }
- sprintf (tmpbuf, " at %s MHz (PLB=%lu, OPB=%lu, EBC=%lu MHz)\n",
- strmhz (buf, gd->cpu_clk), sys_info.freqPLB / 1000000,
- sys_info.freqPLB / sys_info.pllOpbDiv / 1000000,
- sys_info.freqPLB / sys_info.pllExtBusDiv / 1000000);
- video_puts (tmpbuf);
- if (mfdcr (strap) & PSR_PCI_ASYNC_EN)
- video_puts (" PCI async ext clock used, ");
- else {
- sprintf (buf, " PCI sync clock at %lu MHz, ",
- sys_info.freqPLB / sys_info.pllPciDiv / 1000000);
- video_puts (buf);
- }
- if (mfdcr (strap) & PSR_PCI_ARBIT_EN)
- video_puts ("internal PCI arbiter enabled\n");
- else
- video_puts ("external PCI arbiter enabled\n");
- video_puts (" 16 kB I-Cache 8 kB D-Cache\n");
- /* now some board infos */
- video_puts ("Board: ");
- if (!s || strncmp (s, "PIP405", 6)) {
- bc = video_set_attr (VGA_ATTR_CLR_RED | VGA_ATTR_ITN);
- video_puts ("### No HW ID - assuming PIP405");
- } else {
- bc = video_set_attr (VGA_ATTR_CLR_GRN);
- for (e = s; *e; ++e) {
- if (*e == ' ')
- break;
- }
- for (; s < e; ++s) {
- if (*s == '_') {
- ++s;
- break;
- }
- video_putc (*s);
- }
- video_puts (" Serial No.: ");
- for (; s < e; ++s) {
- video_putc (*s);
- }
- }
- video_set_attr (bc);
- bc = in8 (CONFIG_PORT_ADDR);
- sprintf (buf, " Boot Config 0x%02X\n", bc);
- video_puts (buf);
- /* DRAM size */
-#if 0
- video_puts ("DRAM: ");
- sprintf (buf, "%lu MBytes\n", gd->bd->bi_memsize / 0x100000);
- video_puts (buf);
- /* flash size: */
- video_puts ("FLASH: ");
- if (switch_cs (0) == 0) {
- bc = video_set_attr (VGA_ATTR_CLR_GRN);
- video_puts ("(Flash boot)");
- video_set_attr (bc);
- } else {
- switch_cs (1); /* back to boot mode */
- bc = video_set_attr (VGA_ATTR_CLR_RED | VGA_ATTR_ITN);
- video_puts ("(Multi Purpose Socket boot)");
- video_set_attr (bc);
- }
- sprintf (buf, " %lu MBytes\n", gd->bd->bi_flashsize / 0x100000);
- video_puts (buf);
- /* revisions */
- video_puts ("Rev: ");
- sprintf (tmpbuf, "PCB Rev: %c PLD%d Rev %d PLD%d Rev %d\n\n",
- (in8 (PLD_BOARD_CFG_REG) & 0xf) + 'A',
- in8 (PLD_PART_REG) & 0xf, in8 (PLD_VERS_REG) & 0xf,
- (in8 (PLD_PART_REG) >> 4) & 0xf,
- (in8 (PLD_VERS_REG) >> 4) & 0xf);
- video_puts (tmpbuf);
- for (i = 0; i < CFG_IDE_MAXDEVICE; i++) {
- dev_desc = (block_dev_desc_t *) ide_get_dev (i);
- video_put_dev_string (dev_desc);
- }
- video_puts ("\n");
- for (i = 0; i < CFG_SCSI_MAX_DEVICE; i++) {
- dev_desc = (block_dev_desc_t *) scsi_get_dev (i);
- video_put_dev_string (dev_desc);
- }
- video_puts ("\n");
-#endif /* 0 */
-}
-
-#endif /* CONFIG_VIDEO */
OBJS = $(BOARD).o \
../common/flash.o cmd_pip405.o ../common/pci.o \
- ../common/isa.o ../common/kbd.o ../common/video.o \
+ ../common/isa.o ../common/kbd.o \
../common/usb_uhci.o \
- ../common/memtst.o ../common/common_util.o
+ ../common/memtst.o ../common/common_util.o ../common/video.o
SOBJS = init.o
extern void print_pip405_info(void);
-extern int do_mplcommon(cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[]);
+extern int do_mplcommon(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]);
/* ------------------------------------------------------------------------- */
-int do_pip405(cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[])
+int do_pip405(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{
ulong led_on,led_nr;
return 0;
}
-#if 0
- if (strcmp(argv[1], "flash") == 0)
- {
- if (strcmp(argv[2], "floppy") == 0) {
- char *local_args[3];
- extern int do_fdcboot (cmd_tbl_t *, bd_t *, int, int, char *[]);
- printf ("\nupdating bootloader image from floppy\n");
- local_args[0] = argv[0];
- if(argc==4) {
- local_args[1] = argv[3];
- local_args[2] = NULL;
- load_addr=simple_strtoul(argv[3], NULL, 16);
- result=do_fdcboot(cmdtp, bd, 0, 2, local_args);
- }
- else {
- local_args[1] = NULL;
- load_addr=CFG_LOAD_ADDR;
- result=do_fdcboot(cmdtp, bd, 0, 1, local_args);
- }
- result=mpl_prg_image(load_addr);
- return result;
- }
- if (strcmp(argv[2], "mem") == 0) {
- if(argc==4) {
- load_addr=simple_strtoul(argv[3], NULL, 16);
- }
- else {
- load_addr=CFG_LOAD_ADDR;
- }
- printf ("\nupdating bootloader image from memory at %lX\n",load_addr);
- result=mpl_prg_image(load_addr);
- return result;
- }
- if (strcmp(argv[2], "mps") == 0) {
- printf ("\nupdating bootloader image from MSP\n");
- result=mpl_prg(src,size);
- return result;
- }
- }
- if (strcmp(argv[1], "getback") == 0) {
- get_backup_values(&back);
- back.signature[3]=0;
- back.serial_name[16]=0;
- back.eth_addr[20]=0;
- printf("GetBackUp: signature: %s\n",back.signature);
- printf(" serial#: %s\n",back.serial_name);
- printf(" ethaddr: %s\n",back.eth_addr);
- return 0;
- }
- if (strcmp(argv[1], "setback") == 0) {
- set_backup_values(1);
- return 0;
- }
- if (strcmp(argv[1], "clearenvvalues") == 0)
- {
- if (strcmp(argv[2], "yes") == 0)
- {
- clear_env_values();
- return 0;
- }
- }
- if (strcmp(argv[1], "mem") == 0)
- {
- result=0;
- if(argc==3)
- {
- result = (int)simple_strtol(argv[2], NULL, 16);
- }
- src=(unsigned long)&result;
- src-=CFG_MEMTEST_START;
- src-=(100*1024); /* - 100k */
- src&=0xfff00000;
- size=0;
- do {
- size++;
- printf("Pass %ld\n",size);
- mem_test(CFG_MEMTEST_START,src,1);
- if(ctrlc())
- break;
- if(result>0)
- result--;
-
- }while(result);
- return 0;
- }
- #endif
- return (do_mplcommon(cmdtp, bd, flag, argc, argv));
+ return (do_mplcommon(cmdtp, flag, argc, argv));
}
/* ------------------------------------------------------------------------- */
#include <asm/processor.h>
#include <i2c.h>
#include "../common/isa.h"
-#include "../common/video.h"
+//#include "../common/video.h"
#include "../common/common_util.h"
int misc_init_r (void)
{
- unsigned char bc;
- char buf[128];
- unsigned char *s;
-
- bc = in8 (CONFIG_PORT_ADDR);
- bc >>= 4;
- bc &= 0x0f;
- sprintf (buf, "bootcmd%d", bc);
- s = getenv (buf);
- if (s) {
- sprintf (buf, "%s", s);
- setenv ("bootcmd", buf);
- }
- sprintf (buf, "bootargs%d", bc);
- s = getenv (buf);
- if (s) {
- sprintf (buf, "%s", s);
- setenv ("bootargs", buf);
- }
return (0);
}
}
-/******************************************************
- * Routines to display the Board information
- * to the screen (since the VGA will be initialized as last,
- * we must resend the infos)
- */
-
-void video_put_dev_string (block_dev_desc_t * dev_desc)
-{
- char buf[80];
- ldiv_t mb, gb;
- unsigned long lba512; /* number of blocks if 512bytes block size */
-
- if (dev_desc->type != DEV_TYPE_UNKNOWN) {
- if (dev_desc->if_type == IF_TYPE_SCSI)
- sprintf (buf, "SCSI %d: (%d:%d) ", dev_desc->dev,
- dev_desc->target, dev_desc->lun);
- else
- sprintf (buf, "IDE %d: ", dev_desc->dev);
- video_puts (buf);
- switch (dev_desc->type & 0x1F) {
- case DEV_TYPE_HARDDISK:
- video_puts ("Hard Disk");
- break;
- case DEV_TYPE_CDROM:
- video_puts ("CD ROM");
- break;
- case DEV_TYPE_OPDISK:
- video_puts ("Optical Device");
- break;
- case DEV_TYPE_TAPE:
- video_puts ("Tape");
- break;
- default:
- video_puts ("unknown");
- break;
- }
- video_puts (" ");
- video_puts (dev_desc->vendor);
- video_puts (" ");
- if (dev_desc->if_type != IF_TYPE_IDE)
- video_puts (dev_desc->product);
-
- if ((dev_desc->lba * dev_desc->blksz) > 0L) {
- lba512 = (dev_desc->lba * (dev_desc->blksz / 512));
- mb = ldiv (lba512, 2048); /* (1024 *1024 / 512 MB */
- /* we do NOT round, because if we round 0.95MByte up, we get 0.10MByte !! */
- mb.rem *= 10;
- mb.rem /= 2048;
- gb = ldiv (10 * mb.quot + mb.rem, 10240);
- gb.rem += 512;
- gb.rem /= 1024;
- printf (" Capacity: %ld.%ld MB = %ld.%ld GB (%ld x %ld)\n",
- mb.quot, mb.rem,
- gb.quot, gb.rem,
- dev_desc->lba, dev_desc->blksz);
- } else {
- sprintf (buf, " Capacity: not available\n");
- }
- video_puts (buf);
- }
-}
-
-void video_write_board_info (void)
-{
- DECLARE_GLOBAL_DATA_PTR;
-
- extern char version_string[];
- unsigned long pvr = get_pvr ();
- char buf[32], tmpbuf[80];
- PPC405_SYS_INFO sys_info;
- unsigned char *s = getenv ("serial#");
- unsigned char *e;
- unsigned char bc,sw;
-
- /* first write PPCBOOT Info */
- video_puts ("\n");
- video_puts (version_string);
- video_puts ("\n\n");
- /* then CPU and board infos */
- get_sys_info (&sys_info);
- video_puts ("CPU: IBM PowerPC 405GP Rev. ");
- switch (pvr) {
- case PVR_405GP_RB:
- video_putc ('B');
- break;
- case PVR_405GP_RC:
- video_putc ('C');
- break;
- case PVR_405GP_RD:
- video_putc ('D');
- break;
- case PVR_405GP_RE:
- video_putc ('E');
- break;
- default:
- video_puts ("unknown");
- break;
- }
- sprintf (tmpbuf, " at %s MHz (PLB=%lu, OPB=%lu, EBC=%lu MHz)\n",
- strmhz (buf, gd->cpu_clk), sys_info.freqPLB / 1000000,
- sys_info.freqPLB / sys_info.pllOpbDiv / 1000000,
- sys_info.freqPLB / sys_info.pllExtBusDiv / 1000000);
- video_puts (tmpbuf);
- if (mfdcr (strap) & PSR_PCI_ASYNC_EN)
- video_puts (" PCI async ext clock used, ");
- else {
- sprintf (buf, " PCI sync clock at %lu MHz, ",
- sys_info.freqPLB / sys_info.pllPciDiv / 1000000);
- video_puts (buf);
- }
- if (mfdcr (strap) & PSR_PCI_ARBIT_EN)
- video_puts ("internal PCI arbiter enabled\n");
- else
- video_puts ("external PCI arbiter enabled\n");
- video_puts (" 16 kB I-Cache 8 kB D-Cache\n");
- /* now some board infos */
- video_puts ("Board: ");
- if (!s || strncmp (s, "PIP405", 6)) {
- bc = video_set_attr (VGA_ATTR_CLR_RED | VGA_ATTR_ITN);
- video_puts ("### No HW ID - assuming PIP405");
- } else {
- bc = video_set_attr (VGA_ATTR_CLR_GRN);
- for (e = s; *e; ++e) {
- if (*e == ' ')
- break;
- }
- for (; s < e; ++s) {
- if (*s == '_') {
- ++s;
- break;
- }
- video_putc (*s);
- }
- video_puts (" Serial No.: ");
- for (; s < e; ++s) {
- video_putc (*s);
- }
- }
- video_set_attr (bc);
- bc = in8 (CONFIG_PORT_ADDR);
- sprintf (buf, " Boot Config 0x%02X\n", bc);
- video_puts (buf);
- /* DRAM size */
- video_puts ("DRAM: ");
- sprintf (buf, "%lu MBytes\n", gd->bd->bi_memsize / 0x100000);
- video_puts (buf);
- /* flash size: */
- video_puts ("FLASH: ");
- sw = switch_cs (0);
- switch_cs (sw);
- if (sw == 0) {
- bc = video_set_attr (VGA_ATTR_CLR_GRN);
- video_puts ("(Flash boot)");
- video_set_attr (bc);
- } else {
- bc = video_set_attr (VGA_ATTR_CLR_RED | VGA_ATTR_ITN);
- video_puts ("(Multi Purpose Socket boot)");
- video_set_attr (bc);
- }
- sprintf (buf, " %lu MBytes\n", gd->bd->bi_flashsize / 0x100000);
- video_puts (buf);
-}
* MA 02111-1307 USA
*/
+/* #define DEBUG */
+
#include <common.h>
-#define FLASH_BANK_SIZE 0x800000
-#define MAIN_SECT_SIZE 0x20000
+#define FLASH_BANK_SIZE 0x1000000 /* 2 x 8 MB */
+#define MAIN_SECT_SIZE 0x40000 /* 2 x 128 kB */
flash_info_t flash_info[CFG_MAX_FLASH_BANKS];
int cflag;
#endif
+ debug ("flash_erase: s_first %d s_last %d\n", s_first, s_last);
+
/* first look for protection bits */
if (info->flash_id == FLASH_UNKNOWN)
/* Start erase on unprotected sectors */
for (sect = s_first; sect <= s_last && !ctrlc (); sect++) {
-#if 0
- printf ("Erasing sector %2d ... ", sect);
-#endif
+
+ debug ("Erasing sector %2d @ %08lX... ",
+ sect, info->start[sect]);
/* arm simple, non interrupt dependent timer */
reset_timer_masked ();
ulong myflush (void);
-#define FLASH_BANK_SIZE 0x800000 /* 8 MB */
+#define FLASH_BANK_SIZE 0x800000 /* 8 MB */
/* this varies depending on the sector */
-#define MAIN_SECT_SIZE 0x10000 /* 64 KB */
+#define MAIN_SECT_SIZE 0x20000 /* 2 x 64 kB */
flash_info_t flash_info[CFG_MAX_FLASH_BANKS];
* MA 02111-1307 USA
*/
+/* #define DEBUG */
+
#include <common.h>
#if defined(CFG_ENV_IS_IN_FLASH) /* Environment is in Flash */
{
int rc = 1;
- if (flash_sect_protect (0, (ulong)flash_addr, end_addr))
- {
+ debug ("Protect off %08lX ... %08lX\n",
+ (ulong)flash_addr, end_addr);
+
+ if (flash_sect_protect (0, (ulong)flash_addr, end_addr)) {
goto Done;
}
- if (flash_sect_protect (0, (ulong)flash_addr_new, end_addr_new))
- {
+ debug ("Protect off %08lX ... %08lX\n",
+ (ulong)flash_addr_new, end_addr_new);
+
+ if (flash_sect_protect (0, (ulong)flash_addr_new, end_addr_new)) {
goto Done;
}
puts ("Erasing Flash...");
- if (flash_sect_erase ((ulong)flash_addr_new, end_addr_new))
- {
+ debug (" %08lX ... %08lX ...",
+ (ulong)flash_addr_new, end_addr_new);
+
+ if (flash_sect_erase ((ulong)flash_addr_new, end_addr_new)) {
goto Done;
}
puts ("Writing to Flash... ");
+ debug (" %08lX ... %08lX ...",
+ (ulong)&(flash_addr_new->data),
+ sizeof(env_ptr->data)+(ulong)&(flash_addr_new->data));
if (flash_write(env_ptr->data,
(ulong)&(flash_addr_new->data),
sizeof(env_ptr->data)) ||
#define CONFIG_BAUDRATE 9600 /* STD Baudrate */
#define CONFIG_BOOTDELAY 5
/* autoboot (do NOT change this set environment variable "bootdelay" to -1 instead) */
+#define CONFIG_BOOT_RETRY_TIME -10 /* feature is avaiable but not enabled */
+#define CONFIG_ZERO_BOOTDELAY_CHECK /* check console even if bootdelay = 0 */
#define CONFIG_BOOTCOMMAND "diskboot 200000 0:1; bootm" /* autoboot command */
#define CONFIG_BOOTARGS "console=ttyS0,9600 root=/dev/hda5" /* boot arguments */
#define PER_UART1_ADDR 0xF4200000 /* smallest window is 1MByte 0x10 0000*/
#define MULTI_PURPOSE_SOCKET_ADDR 0xF8000000
+#define CONFIG_PORT_ADDR PER_PLD_ADDR + 5
/************************************************************
* Video support
************************************************************/
-#undef CONFIG_VIDEO /*To enable video controller support */
-#undef CONFIG_VIDEO_CT69000
+#define CONFIG_VIDEO /*To enable video controller support */
+#define CONFIG_VIDEO_CT69000
/************************************************************
* USB support EXPERIMENTAL
CFG_CMD_ELF | \
CFG_CMD_USB | \
CFG_CMD_MII | \
+ CFG_CMD_SDRAM | \
CFG_CMD_DOC | \
CFG_CMD_BSP )
/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
#define CONFIG_BOOTDELAY 5
/* autoboot (do NOT change this set environment variable "bootdelay" to -1 instead) */
+#define CONFIG_BOOT_RETRY_TIME -10 /* feature is avaiable but not enabled */
+#define CONFIG_ZERO_BOOTDELAY_CHECK /* check console even if bootdelay = 0 */
+
#define CONFIG_BOOTCOMMAND "diskboot 200000 0:1; bootm" /* autoboot command */
#define CONFIG_BOOTARGS "console=ttyS0,9600 root=/dev/hda5" /* boot arguments */
************************************************************/
#define CONFIG_VIDEO /*To enable video controller support */
#define CONFIG_VIDEO_CT69000
+#define CONFIG_VIDEO_ONBOARD /* Video controller is on-board */
/************************************************************
* USB support
#define CFG_ENV_IS_IN_FLASH 1
/* Address and size of Primary Environment Sector */
-#define CFG_ENV_ADDR (PHYS_FLASH_1 + 0x20000)
-#define CFG_ENV_SIZE 0x20000
+#define CFG_ENV_ADDR (PHYS_FLASH_1 + 0x40000)
+#define CFG_ENV_SIZE 0x40000
/* Address and size of Redundant Environment Sector */
#define CFG_ENV_ADDR_REDUND (CFG_ENV_ADDR + CFG_ENV_SIZE)
ulong len, addr, addr_sp;
gd_t *id;
init_fnc_t **init_fnc_ptr;
+#ifdef CONFIG_PRAM
+ int i;
+ ulong reg;
+ uchar tmp[64]; /* long enough for environment variables */
+#endif
/* Pointer is writable since we allocated a register for it */
gd = (gd_t *) (CFG_INIT_RAM_ADDR + CFG_GBL_DATA_OFFSET);
s = getenv ("eth1addr");
- for (reg = 0; reg < 6; ++reg) {
- bd->bi_enet1addr[reg] = s ? simple_strtoul (s, &e, 16) : 0;
+ for (i = 0; i < 6; ++i) {
+ bd->bi_enet1addr[i] = s ? simple_strtoul (s, &e, 16) : 0;
if (s)
s = (*e) ? e + 1 : e;
}
s = getenv ("eth2addr");
- for (reg = 0; reg < 6; ++reg) {
- bd->bi_enet2addr[reg] = s ? simple_strtoul (s, &e, 16) : 0;
+ for (i = 0; i < 6; ++i) {
+ bd->bi_enet2addr[i] = s ? simple_strtoul (s, &e, 16) : 0;
if (s)
s = (*e) ? e + 1 : e;
}