|  | /* | 
|  | * 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; | 
|  | eth_getenv_enetaddr("ethaddr", parms->ethaddr); | 
|  | 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 |