|  | /* | 
|  | * 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> | 
|  |  | 
|  | #if defined(CONFIG_LYNXKDI) | 
|  | #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)) ntohl(hdr->ih_ep); | 
|  | lynxos_bootparms_t *parms = (lynxos_bootparms_t *)0x0020; | 
|  | bd_t *kbd; | 
|  | u32 *psz = (u32 *)(ntohl(hdr->ih_load) + 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) == ntohl(hdr->ih_size) ){	/* FIXME: NOT SURE HERE ! */ | 
|  | char *args; | 
|  | char *cmdline = (char *)(ntohl(hdr->ih_load) + 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 | 
|  |  | 
|  | #endif	/* CONFIG_LYNXKDI */ |