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_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 /* FIXME: NOT SURE HERE ! */ 44 if (le32_to_cpu(*psz) == image_get_data_size(hdr)) { 45 char *args; 46 char *cmdline = (char *)(image_get_load(hdr) + 0x020c); 47 int len; 48 49 printf("Booting Bluecat KDI ...\n"); 50 udelay(200*1000); /* Allow serial port to flush */ 51 if ((args = getenv("bootargs")) == NULL) 52 args = ""; 53 /* Prepend the cmdline */ 54 len = strlen(args); 55 if (len && (len + strlen(cmdline) + 2 < (0x0400 - 0x020c))) { 56 memmove(cmdline + strlen(args) + 1, cmdline, 57 strlen(cmdline)); 58 strcpy(cmdline, args); 59 cmdline[len] = ' '; 60 } 61 } 62 else { 63 printf("Booting LynxOS KDI ...\n"); 64 } 65 66 lynxkdi(); 67 } 68 #else 69 #error "Lynx KDI support not implemented for configured CPU" 70 #endif 71