| /* |
| * 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 */ |