|
|
|
/*
|
|
|
|
* Copyright (c) Orbacom Systems, Inc <www.orbacom.com>
|
|
|
|
* All rights reserved.
|
|
|
|
*
|
|
|
|
* Redistribution and use in source and binary forms are freely
|
|
|
|
* permitted provided that the above copyright notice and this
|
|
|
|
* paragraph and the following disclaimer are duplicated in all
|
|
|
|
* such forms.
|
|
|
|
*
|
|
|
|
* This software is provided "AS IS" and without any express or
|
|
|
|
* implied warranties, including, without limitation, the implied
|
|
|
|
* warranties of merchantability and fitness for a particular
|
|
|
|
* purpose.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <common.h>
|
|
|
|
#include <asm/processor.h>
|
|
|
|
#include <image.h>
|
|
|
|
|
|
|
|
#include <lynxkdi.h>
|
|
|
|
|
|
|
|
DECLARE_GLOBAL_DATA_PTR;
|
|
|
|
|
|
|
|
#if defined(CONFIG_MPC8260) || defined(CONFIG_440EP) || defined(CONFIG_440GR)
|
|
|
|
void lynxkdi_boot (image_header_t *hdr)
|
|
|
|
{
|
|
|
|
void (*lynxkdi)(void) = (void(*)(void))image_get_ep (hdr);
|
|
|
|
lynxos_bootparms_t *parms = (lynxos_bootparms_t *)0x0020;
|
|
|
|
bd_t *kbd;
|
|
|
|
u32 *psz = (u32 *)(image_get_load (hdr) + 0x0204);
|
|
|
|
|
|
|
|
memset (parms, 0, sizeof(*parms));
|
|
|
|
kbd = gd->bd;
|
|
|
|
parms->clock_ref = kbd->bi_busfreq;
|
|
|
|
parms->dramsz = kbd->bi_memsize;
|
|
|
|
memcpy (parms->ethaddr, kbd->bi_enetaddr, 6);
|
|
|
|
mtspr (SPRN_SPRG2, 0x0020);
|
|
|
|
|
|
|
|
/* Do a simple check for Bluecat so we can pass the
|
|
|
|
* kernel command line parameters.
|
|
|
|
*/
|
|
|
|
if (le32_to_cpu (*psz) == image_get_data_size (hdr)) { /* FIXME: NOT SURE HERE ! */
|
|
|
|
char *args;
|
|
|
|
char *cmdline = (char *)(image_get_load (hdr) + 0x020c);
|
|
|
|
int len;
|
|
|
|
|
|
|
|
printf ("Booting Bluecat KDI ...\n");
|
|
|
|
udelay (200*1000); /* Allow serial port to flush */
|
|
|
|
if ((args = getenv ("bootargs")) == NULL)
|
|
|
|
args = "";
|
|
|
|
/* Prepend the cmdline */
|
|
|
|
len = strlen (args);
|
|
|
|
if (len && (len + strlen (cmdline) + 2 < (0x0400 - 0x020c))) {
|
|
|
|
memmove (cmdline + strlen (args) + 1, cmdline, strlen (cmdline));
|
|
|
|
strcpy (cmdline, args);
|
|
|
|
cmdline[len] = ' ';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
printf ("Booting LynxOS KDI ...\n");
|
|
|
|
}
|
|
|
|
|
|
|
|
lynxkdi ();
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#error "Lynx KDI support not implemented for configured CPU"
|
|
|
|
#endif
|