1 /* 2 * Copyright (c) Orbacom Systems, Inc <www.orbacom.com> 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms are freely 6 * permitted provided that the above copyright notice and this 7 * paragraph and the following disclaimer are duplicated in all 8 * such forms. 9 * 10 * This software is provided "AS IS" and without any express or 11 * implied warranties, including, without limitation, the implied 12 * warranties of merchantability and fitness for a particular 13 * purpose. 14 */ 15 16 #include <common.h> 17 #include <asm/processor.h> 18 #include <image.h> 19 #include <net.h> 20 21 #include <lynxkdi.h> 22 23 DECLARE_GLOBAL_DATA_PTR; 24 25 #if defined(CONFIG_MPC8260) || defined(CONFIG_440EP) || defined(CONFIG_440GR) 26 void lynxkdi_boot (image_header_t *hdr) 27 { 28 void (*lynxkdi)(void) = (void(*)(void))image_get_ep (hdr); 29 lynxos_bootparms_t *parms = (lynxos_bootparms_t *)0x0020; 30 bd_t *kbd; 31 u32 *psz = (u32 *)(image_get_load (hdr) + 0x0204); 32 33 memset (parms, 0, sizeof(*parms)); 34 kbd = gd->bd; 35 parms->clock_ref = kbd->bi_busfreq; 36 parms->dramsz = kbd->bi_memsize; 37 eth_getenv_enetaddr("ethaddr", parms->ethaddr); 38 mtspr (SPRN_SPRG2, 0x0020); 39 40 /* Do a simple check for Bluecat so we can pass the 41 * kernel command line parameters. 42 */ 43 if (le32_to_cpu (*psz) == image_get_data_size (hdr)) { /* FIXME: NOT SURE HERE ! */ 44 char *args; 45 char *cmdline = (char *)(image_get_load (hdr) + 0x020c); 46 int len; 47 48 printf ("Booting Bluecat KDI ...\n"); 49 udelay (200*1000); /* Allow serial port to flush */ 50 if ((args = getenv ("bootargs")) == NULL) 51 args = ""; 52 /* Prepend the cmdline */ 53 len = strlen (args); 54 if (len && (len + strlen (cmdline) + 2 < (0x0400 - 0x020c))) { 55 memmove (cmdline + strlen (args) + 1, cmdline, strlen (cmdline)); 56 strcpy (cmdline, args); 57 cmdline[len] = ' '; 58 } 59 } 60 else { 61 printf ("Booting LynxOS KDI ...\n"); 62 } 63 64 lynxkdi (); 65 } 66 #else 67 #error "Lynx KDI support not implemented for configured CPU" 68 #endif 69