···1+/*2+ * This file is subject to the terms and conditions of the GNU General Public3+ * License. See the file "COPYING" in the main directory of this archive4+ * for more details.5+ *6+ * Copyright (C) 2002, 2003, 06, 07 Ralf Baechle (ralf@linux-mips.org)7+ * Copyright (C) 2007 MIPS Technologies, Inc.8+ * written by Ralf Baechle (ralf@linux-mips.org)9+ */10+#include <linux/console.h>11+#include <linux/init.h>12+13+extern void prom_putchar(char);14+15+static void early_console_write(struct console *con, const char *s, unsigned n)16+{17+ while (n-- && *s) {18+ if (*s == '\n')19+ prom_putchar('\r');20+ prom_putchar(*s);21+ s++;22+ }23+}24+25+static struct console early_console = {26+ .name = "early",27+ .write = early_console_write,28+ .flags = CON_PRINTBUFFER | CON_BOOT,29+ .index = -130+};31+32+void __init setup_early_printk(void)33+{34+ register_console(&early_console);35+}36+37+void __init disable_early_printk(void)38+{39+ unregister_console(&early_console);40+}
···110 sizeof(struct lasat_eeprom_struct) - 4);111112 if (crc != lasat_board_info.li_eeprom_info.crc32) {113- prom_printf("WARNING...\nWARNING...\nEEPROM CRC does not match calculated, attempting to soldier on...\n");0114 }115116- if (lasat_board_info.li_eeprom_info.version != LASAT_EEPROM_VERSION)117- {118- prom_printf("WARNING...\nWARNING...\nEEPROM version %d, wanted version %d, attempting to soldier on...\n",119 (unsigned int)lasat_board_info.li_eeprom_info.version,120 LASAT_EEPROM_VERSION);121 }···125 cfg1 = lasat_board_info.li_eeprom_info.cfg[1];126127 if ( LASAT_W0_DSCTYPE(cfg0) != 1) {128- prom_printf("WARNING...\nWARNING...\nInvalid configuration read from EEPROM, attempting to soldier on...");00129 }130 /* We have a valid configuration */131
···110 sizeof(struct lasat_eeprom_struct) - 4);111112 if (crc != lasat_board_info.li_eeprom_info.crc32) {113+ printk(KERN_WARNING "WARNING...\nWARNING...\nEEPROM CRC does "114+ "not match calculated, attempting to soldier on...\n");115 }116117+ if (lasat_board_info.li_eeprom_info.version != LASAT_EEPROM_VERSION) {118+ printk(KERN_WARNING "WARNING...\nWARNING...\nEEPROM version "119+ "%d, wanted version %d, attempting to soldier on...\n",120 (unsigned int)lasat_board_info.li_eeprom_info.version,121 LASAT_EEPROM_VERSION);122 }···124 cfg1 = lasat_board_info.li_eeprom_info.cfg[1];125126 if ( LASAT_W0_DSCTYPE(cfg0) != 1) {127+ printk(KERN_WARNING "WARNING...\nWARNING...\n"128+ "Invalid configuration read from EEPROM, attempting to "129+ "soldier on...");130 }131 /* We have a valid configuration */132
+11-36
arch/mips/lasat/prom.c
···23#define PROM_PUTC_ADDR PROM_JUMP_TABLE_ENTRY(1)24#define PROM_MONITOR_ADDR PROM_JUMP_TABLE_ENTRY(2)2526-static void null_prom_printf(const char * fmt, ...)27-{28-}29-30static void null_prom_display(const char *string, int pos, int clear)31{32}···36}3738/* these are functions provided by the bootloader */39-static void (* prom_putc)(char c) = null_prom_putc;40-void (* prom_printf)(const char * fmt, ...) = null_prom_printf;0000041void (* prom_display)(const char *string, int pos, int clear) =42 null_prom_display;43void (* prom_monitor)(void) = null_prom_monitor;4445unsigned int lasat_ndelay_divider;46-47-#define PROM_PRINTFBUF_SIZE 25648-static char prom_printfbuf[PROM_PRINTFBUF_SIZE];49-50-static void real_prom_printf(const char * fmt, ...)51-{52- va_list ap;53- int len;54- char *c = prom_printfbuf;55- int i;56-57- va_start(ap, fmt);58- len = vsnprintf(prom_printfbuf, PROM_PRINTFBUF_SIZE, fmt, ap);59- va_end(ap);60-61- /* output overflowed the buffer */62- if (len < 0 || len > PROM_PRINTFBUF_SIZE)63- len = PROM_PRINTFBUF_SIZE;64-65- for (i=0; i < len; i++) {66- if (*c == '\n')67- prom_putc('\r');68- prom_putc(*c++);69- }70-}7172static void setup_prom_vectors(void)73{···5556 if (version >= 307) {57 prom_display = (void *)PROM_DISPLAY_ADDR;58- prom_putc = (void *)PROM_PUTC_ADDR;59- prom_printf = real_prom_printf;60 prom_monitor = (void *)PROM_MONITOR_ADDR;61 }62- prom_printf("prom vectors set up\n");63}6465static struct at93c_defs at93c_defs[N_MACHTYPES] = {···76 setup_prom_vectors();7778 if (current_cpu_data.cputype == CPU_R5000) {79- prom_printf("LASAT 200 board\n");80 mips_machtype = MACH_LASAT_200;81 lasat_ndelay_divider = LASAT_200_DIVIDER;82 } else {83- prom_printf("LASAT 100 board\n");84 mips_machtype = MACH_LASAT_100;85 lasat_ndelay_divider = LASAT_100_DIVIDER;86 }
···23#define PROM_PUTC_ADDR PROM_JUMP_TABLE_ENTRY(1)24#define PROM_MONITOR_ADDR PROM_JUMP_TABLE_ENTRY(2)25000026static void null_prom_display(const char *string, int pos, int clear)27{28}···40}4142/* these are functions provided by the bootloader */43+static void (* __prom_putc)(char c) = null_prom_putc;44+45+void prom_putchar(char c)46+{47+ __prom_putc(c);48+}49+50void (* prom_display)(const char *string, int pos, int clear) =51 null_prom_display;52void (* prom_monitor)(void) = null_prom_monitor;5354unsigned int lasat_ndelay_divider;00000000000000000000000005556static void setup_prom_vectors(void)57{···7980 if (version >= 307) {81 prom_display = (void *)PROM_DISPLAY_ADDR;82+ __prom_putc = (void *)PROM_PUTC_ADDR;083 prom_monitor = (void *)PROM_MONITOR_ADDR;84 }85+ printk("prom vectors set up\n");86}8788static struct at93c_defs at93c_defs[N_MACHTYPES] = {···101 setup_prom_vectors();102103 if (current_cpu_data.cputype == CPU_R5000) {104+ printk("LASAT 200 board\n");105 mips_machtype = MACH_LASAT_200;106 lasat_ndelay_divider = LASAT_200_DIVIDER;107 } else {108+ printk("LASAT 100 board\n");109 mips_machtype = MACH_LASAT_100;110 lasat_ndelay_divider = LASAT_100_DIVIDER;111 }
···2#define PROM_H3extern void (* prom_display)(const char *string, int pos, int clear);4extern void (* prom_monitor)(void);05#endif
+1-1
arch/mips/lasat/setup.c
···178 /* Switch from prom exception handler to normal mode */179 change_c0_status(ST0_BEV,0);180181- prom_printf("Lasat specific initialization complete\n");182}
···178 /* Switch from prom exception handler to normal mode */179 change_c0_status(ST0_BEV,0);180181+ pr_info("Lasat specific initialization complete\n");182}
···17 *18 * Putting things on the screen/serial line using YAMONs facilities.19 */020#include <linux/init.h>21-#include <linux/kernel.h>22#include <linux/serial_reg.h>23-#include <linux/spinlock.h>24#include <asm/io.h>2526#ifdef CONFIG_MIPS_ATLAS···6667 return 1;68}69-70-char prom_getchar(void)71-{72- while (!(serial_in(UART_LSR) & UART_LSR_DR))73- ;74-75- return serial_in(UART_RX);76-}77-
···17 *18 * Putting things on the screen/serial line using YAMONs facilities.19 */20+#include <linux/console.h>21#include <linux/init.h>022#include <linux/serial_reg.h>023#include <asm/io.h>2425#ifdef CONFIG_MIPS_ATLAS···6768 return 1;69}000000000
+5-1
arch/mips/mips-boards/sim/Makefile
···1#2# Copyright (C) 2005 MIPS Technologies, Inc. All rights reserved.003#4# This program is free software; you can distribute it and/or modify it5# under the terms of the GNU General Public License (Version 2) as···17# 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.18#1920-obj-y := sim_setup.o sim_mem.o sim_time.o sim_printf.o sim_int.o sim_cmdline.o0021obj-$(CONFIG_SMP) += sim_smp.o
···1#2# Copyright (C) 2005 MIPS Technologies, Inc. All rights reserved.3+# Copyright (C) 2007 MIPS Technologies, Inc.4+# written by Ralf Baechle (ralf@linux-mips.org)5#6# This program is free software; you can distribute it and/or modify it7# under the terms of the GNU General Public License (Version 2) as···15# 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.16#1718+obj-y := sim_setup.o sim_mem.o sim_time.o sim_int.o sim_cmdline.o19+20+obj-$(CONFIG_EARLY_PRINTK) += sim_console.o21obj-$(CONFIG_SMP) += sim_smp.o
···1/*2- * Carsten Langgaard, carstenl@mips.com3- * Copyright (C) 1999,2000 MIPS Technologies, Inc. All rights reserved.4- *5 * This program is free software; you can distribute it and/or modify it6 * under the terms of the GNU General Public License (Version 2) as7 * published by the Free Software Foundation.···12 * with this program; if not, write to the Free Software Foundation, Inc.,13 * 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.14 *15- * Putting things on the screen/serial line using YAMONs facilities.00016 */17#include <linux/init.h>18-#include <linux/kernel.h>19#include <linux/serial_reg.h>20-#include <linux/spinlock.h>21#include <asm/io.h>22-#include <asm/system.h>2324static inline unsigned int serial_in(int offset)25{···31 outb(value, 0x3f8 + offset);32}3334-int putPromChar(char c)35{36 while ((serial_in(UART_LSR) & UART_LSR_THRE) == 0)37 ;3839 serial_out(UART_TX, c);40-41- return 1;42-}43-44-char getPromChar(void)45-{46- while (!(serial_in(UART_LSR) & 1))47- ;48-49- return serial_in(UART_RX);50-}51-52-void prom_printf(char *fmt, ...)53-{54- va_list args;55- int l;56- char *p, *buf_end;57- char buf[1024];58-59- va_start(args, fmt);60- l = vsprintf(buf, fmt, args); /* hopefully i < sizeof(buf) */61- va_end(args);62-63- buf_end = buf + l;64-65- for (p = buf; p < buf_end; p++) {66- /* Crude cr/nl handling is better than none */67- if (*p == '\n')68- putPromChar('\r');69- putPromChar(*p);70- }71}
···1/*0002 * This program is free software; you can distribute it and/or modify it3 * under the terms of the GNU General Public License (Version 2) as4 * published by the Free Software Foundation.···15 * with this program; if not, write to the Free Software Foundation, Inc.,16 * 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.17 *18+ * Carsten Langgaard, carstenl@mips.com19+ * Copyright (C) 1999,2000 MIPS Technologies, Inc. All rights reserved.20+ * Copyright (C) 2007 MIPS Technologies, Inc.21+ * written by Ralf Baechle22 */23#include <linux/init.h>024#include <linux/serial_reg.h>025#include <asm/io.h>02627static inline unsigned int serial_in(int offset)28{···34 outb(value, 0x3f8 + offset);35}3637+void __init prom_putchar(char c)38{39 while ((serial_in(UART_LSR) & UART_LSR_THRE) == 0)40 ;4142 serial_out(UART_TX, c);000000000000000000000000000000043}
···116config SIBYTE_CFE117 bool "Booting from CFE"118 depends on SIBYTE_SB1xxx_SOC0119 help120 Make use of the CFE API for enumerating available memory,121 controlling secondary CPUs, and possibly console output.···132config SIBYTE_STANDALONE133 bool134 depends on SIBYTE_SB1xxx_SOC && !SIBYTE_CFE0135 default y136137config SIBYTE_STANDALONE_RAM_SIZE
···116config SIBYTE_CFE117 bool "Booting from CFE"118 depends on SIBYTE_SB1xxx_SOC119+ select SYS_HAS_EARLY_PRINTK120 help121 Make use of the CFE API for enumerating available memory,122 controlling secondary CPUs, and possibly console output.···131config SIBYTE_STANDALONE132 bool133 depends on SIBYTE_SB1xxx_SOC && !SIBYTE_CFE134+ select SYS_HAS_EARLY_PRINTK135 default y136137config SIBYTE_STANDALONE_RAM_SIZE
+1-1
arch/mips/sibyte/bcm1480/irq.c
···420#ifdef CONFIG_GDB_CONSOLE421 register_gdb_console();422#endif423- prom_printf("Waiting for GDB on UART port %d\n", kgdb_port);424 set_debug_traps();425 breakpoint();426 }
···420#ifdef CONFIG_GDB_CONSOLE421 register_gdb_console();422#endif423+ printk("Waiting for GDB on UART port %d\n", kgdb_port);424 set_debug_traps();425 breakpoint();426 }
···221 goto fail;222 }223 initrd_end = initrd_start + initrd_size;224- prom_printf("Found initrd of %lx@%lx\n", initrd_size, initrd_start);225 return 1;226 fail:227- prom_printf("Bad initrd argument. Disabling initrd\n");228 initrd_start = 0;229 initrd_end = 0;230 return 1;···281 }282 if (cfe_eptseal != CFE_EPTSEAL) {283 /* too early for panic to do any good */284- prom_printf("CFE's entrypoint seal doesn't match. Spinning.");285 while (1) ;286 }287 cfe_init(cfe_handle, cfe_ept);···303 } else {304 /* The loader should have set the command line */305 /* too early for panic to do any good */306- prom_printf("LINUX_CMDLINE not defined in cfe.");307 while (1) ;308 }309 }
···221 goto fail;222 }223 initrd_end = initrd_start + initrd_size;224+ printk("Found initrd of %lx@%lx\n", initrd_size, initrd_start);225 return 1;226 fail:227+ printk("Bad initrd argument. Disabling initrd\n");228 initrd_start = 0;229 initrd_end = 0;230 return 1;···281 }282 if (cfe_eptseal != CFE_EPTSEAL) {283 /* too early for panic to do any good */284+ printk("CFE's entrypoint seal doesn't match. Spinning.");285 while (1) ;286 }287 cfe_init(cfe_handle, cfe_ept);···303 } else {304 /* The loader should have set the command line */305 /* too early for panic to do any good */306+ printk("LINUX_CMDLINE not defined in cfe.");307 while (1) ;308 }309 }
+12-12
arch/mips/sibyte/sb1250/setup.c
···67 ret = setup_bcm112x();68 break;69 default:70- prom_printf("Unknown SOC type %x\n", soc_type);71 ret = 1;72 break;73 }···112 pass_str = "A0-A6";113 war_pass = K_SYS_REVISION_BCM1250_PASS2;114 } else {115- prom_printf("Unknown BCM1250 rev %x\n", soc_pass);116 ret = 1;117 }118 break;···140 pass_str = "A2";141 break;142 default:143- prom_printf("Unknown %s rev %x\n", soc_str, soc_pass);144 ret = 1;145 }146 return ret;···158 soc_pass = G_SYS_REVISION(sys_rev);159160 if (sys_rev_decode()) {161- prom_printf("Restart after failure to identify SiByte chip\n");162 machine_restart(NULL);163 }164165 plldiv = G_SYS_PLL_DIV(__raw_readq(IOADDR(A_SCD_SYSTEM_CFG)));166 zbbus_mhz = ((plldiv >> 1) * 50) + ((plldiv & 1) * 25);167168- prom_printf("Broadcom SiByte %s %s @ %d MHz (SB1 rev %d)\n",169 soc_str, pass_str, zbbus_mhz * 2, sb1_pass);170- prom_printf("Board type: %s\n", get_system_type());171172 switch (war_pass) {173 case K_SYS_REVISION_BCM1250_PASS1:174#ifndef CONFIG_SB1_PASS_1_WORKAROUNDS175- prom_printf("@@@@ This is a BCM1250 A0-A2 (Pass 1) board, "176 "and the kernel doesn't have the proper "177 "workarounds compiled in. @@@@\n");178 bad_config = 1;···182 /* Pass 2 - easiest as default for now - so many numbers */183#if !defined(CONFIG_SB1_PASS_2_WORKAROUNDS) || \184 !defined(CONFIG_SB1_PASS_2_1_WORKAROUNDS)185- prom_printf("@@@@ This is a BCM1250 A3-A10 board, and the "186 "kernel doesn't have the proper workarounds "187 "compiled in. @@@@\n");188 bad_config = 1;189#endif190#ifdef CONFIG_CPU_HAS_PREFETCH191- prom_printf("@@@@ Prefetches may be enabled in this kernel, "192 "but are buggy on this board. @@@@\n");193 bad_config = 1;194#endif195 break;196 case K_SYS_REVISION_BCM1250_PASS2_2:197#ifndef CONFIG_SB1_PASS_2_WORKAROUNDS198- prom_printf("@@@@ This is a BCM1250 B1/B2. board, and the "199 "kernel doesn't have the proper workarounds "200 "compiled in. @@@@\n");201 bad_config = 1;202#endif203#if defined(CONFIG_SB1_PASS_2_1_WORKAROUNDS) || \204 !defined(CONFIG_CPU_HAS_PREFETCH)205- prom_printf("@@@@ This is a BCM1250 B1/B2, but the kernel is "206 "conservatively configured for an 'A' stepping. "207 "@@@@\n");208#endif···211 break;212 }213 if (bad_config) {214- prom_printf("Invalid configuration for this chip.\n");215 machine_restart(NULL);216 }217}
···67 ret = setup_bcm112x();68 break;69 default:70+ printk("Unknown SOC type %x\n", soc_type);71 ret = 1;72 break;73 }···112 pass_str = "A0-A6";113 war_pass = K_SYS_REVISION_BCM1250_PASS2;114 } else {115+ printk("Unknown BCM1250 rev %x\n", soc_pass);116 ret = 1;117 }118 break;···140 pass_str = "A2";141 break;142 default:143+ printk("Unknown %s rev %x\n", soc_str, soc_pass);144 ret = 1;145 }146 return ret;···158 soc_pass = G_SYS_REVISION(sys_rev);159160 if (sys_rev_decode()) {161+ printk("Restart after failure to identify SiByte chip\n");162 machine_restart(NULL);163 }164165 plldiv = G_SYS_PLL_DIV(__raw_readq(IOADDR(A_SCD_SYSTEM_CFG)));166 zbbus_mhz = ((plldiv >> 1) * 50) + ((plldiv & 1) * 25);167168+ printk("Broadcom SiByte %s %s @ %d MHz (SB1 rev %d)\n",169 soc_str, pass_str, zbbus_mhz * 2, sb1_pass);170+ printk("Board type: %s\n", get_system_type());171172 switch (war_pass) {173 case K_SYS_REVISION_BCM1250_PASS1:174#ifndef CONFIG_SB1_PASS_1_WORKAROUNDS175+ printk("@@@@ This is a BCM1250 A0-A2 (Pass 1) board, "176 "and the kernel doesn't have the proper "177 "workarounds compiled in. @@@@\n");178 bad_config = 1;···182 /* Pass 2 - easiest as default for now - so many numbers */183#if !defined(CONFIG_SB1_PASS_2_WORKAROUNDS) || \184 !defined(CONFIG_SB1_PASS_2_1_WORKAROUNDS)185+ printk("@@@@ This is a BCM1250 A3-A10 board, and the "186 "kernel doesn't have the proper workarounds "187 "compiled in. @@@@\n");188 bad_config = 1;189#endif190#ifdef CONFIG_CPU_HAS_PREFETCH191+ printk("@@@@ Prefetches may be enabled in this kernel, "192 "but are buggy on this board. @@@@\n");193 bad_config = 1;194#endif195 break;196 case K_SYS_REVISION_BCM1250_PASS2_2:197#ifndef CONFIG_SB1_PASS_2_WORKAROUNDS198+ printk("@@@@ This is a BCM1250 B1/B2. board, and the "199 "kernel doesn't have the proper workarounds "200 "compiled in. @@@@\n");201 bad_config = 1;202#endif203#if defined(CONFIG_SB1_PASS_2_1_WORKAROUNDS) || \204 !defined(CONFIG_CPU_HAS_PREFETCH)205+ printk("@@@@ This is a BCM1250 B1/B2, but the kernel is "206 "conservatively configured for an 'A' stepping. "207 "@@@@\n");208#endif···211 break;212 }213 if (bad_config) {214+ printk("Invalid configuration for this chip.\n");215 machine_restart(NULL);216 }217}
+16-35
arch/mips/sni/sniprom.c
···9 * Copyright (C) 2005-2006 Thomas Bogendoerfer (tsbogend@alpha.franken.de)10 */110012#include <linux/kernel.h>13#include <linux/init.h>14#include <linux/string.h>···34#define PROM_ENTRY(x) (PROM_VEC + (x))353637-#define DEBUG38-#ifdef DEBUG39-#define DBG_PRINTF(x...) prom_printf(x)40-#else41-#define DBG_PRINTF(x...)42-#endif43-44static int *(*__prom_putchar)(int) = (int *(*)(int))PROM_ENTRY(PROM_PUTCHAR);00000045static char *(*__prom_getenv)(char *) = (char *(*)(char *))PROM_ENTRY(PROM_GETENV);46static void (*__prom_get_memconf)(void *) = (void (*)(void *))PROM_ENTRY(PROM_GET_MEMCONF);4748char *prom_getenv (char *s)49{50 return __prom_getenv(s);51-}52-53-void prom_printf(char *fmt, ...)54-{55- va_list args;56- char ppbuf[1024];57- char *bptr;58-59- va_start(args, fmt);60- vsprintf(ppbuf, fmt, args);61-62- bptr = ppbuf;63-64- while (*bptr != 0) {65- if (*bptr == '\n')66- __prom_putchar('\r');67-68- __prom_putchar(*bptr++);69- }70- va_end(args);71}7273void __init prom_free_prom_memory(void)···75{76 int i;7778- prom_printf("SNI IDProm dump:\n");79 for (i = 0; i < 256; i++) {80 if (i%16 == 0)81- prom_printf("%04x ", i);8283- prom_printf("%02x ", *(unsigned char *) (SNI_IDPROM_BASE + i));8485 if (i % 16 == 15)86- prom_printf("\n");87 }88}89#endif···102 /* MemSIZE from prom in 16MByte chunks */103 memsize = *((unsigned char *) SNI_IDPROM_MEMSIZE) * 16;104105- DBG_PRINTF("IDProm memsize: %lu MByte\n", memsize);106107 /* get memory bank layout from prom */108 __prom_get_memconf(&memconf);109110- DBG_PRINTF("prom_get_mem_conf memory configuration:\n");111 for (i = 0;i < 8 && memconf[i].size; i++) {112 if (sni_brd_type == SNI_BRD_PCI_TOWER ||113 sni_brd_type == SNI_BRD_PCI_TOWER_CPLUS) {···116 memconf[i].base -= 0x20000000;117 }118 }119- DBG_PRINTF("Bank%d: %08x @ %08x\n", i,120 memconf[i].size, memconf[i].base);121 add_memory_region(memconf[i].base, memconf[i].size, BOOT_MEM_RAM);122 }···229 systype = "RM300-Exx";230 break;231 }232- DBG_PRINTF("Found SNI brdtype %02x name %s\n", sni_brd_type,systype);233234#ifdef DEBUG235 sni_idprom_dump();
···9 * Copyright (C) 2005-2006 Thomas Bogendoerfer (tsbogend@alpha.franken.de)10 */1112+#define DEBUG13+14#include <linux/kernel.h>15#include <linux/init.h>16#include <linux/string.h>···32#define PROM_ENTRY(x) (PROM_VEC + (x))3334000000035static int *(*__prom_putchar)(int) = (int *(*)(int))PROM_ENTRY(PROM_PUTCHAR);36+37+void prom_putchar(char c)38+{39+ __prom_putchar(c);40+}41+42static char *(*__prom_getenv)(char *) = (char *(*)(char *))PROM_ENTRY(PROM_GETENV);43static void (*__prom_get_memconf)(void *) = (void (*)(void *))PROM_ENTRY(PROM_GET_MEMCONF);4445char *prom_getenv (char *s)46{47 return __prom_getenv(s);0000000000000000000048}4950void __init prom_free_prom_memory(void)···94{95 int i;9697+ pr_debug("SNI IDProm dump:\n");98 for (i = 0; i < 256; i++) {99 if (i%16 == 0)100+ pr_debug("%04x ", i);101102+ printk("%02x ", *(unsigned char *) (SNI_IDPROM_BASE + i));103104 if (i % 16 == 15)105+ printk("\n");106 }107}108#endif···121 /* MemSIZE from prom in 16MByte chunks */122 memsize = *((unsigned char *) SNI_IDPROM_MEMSIZE) * 16;123124+ pr_debug("IDProm memsize: %lu MByte\n", memsize);125126 /* get memory bank layout from prom */127 __prom_get_memconf(&memconf);128129+ pr_debug("prom_get_mem_conf memory configuration:\n");130 for (i = 0;i < 8 && memconf[i].size; i++) {131 if (sni_brd_type == SNI_BRD_PCI_TOWER ||132 sni_brd_type == SNI_BRD_PCI_TOWER_CPLUS) {···135 memconf[i].base -= 0x20000000;136 }137 }138+ pr_debug("Bank%d: %08x @ %08x\n", i,139 memconf[i].size, memconf[i].base);140 add_memory_region(memconf[i].base, memconf[i].size, BOOT_MEM_RAM);141 }···248 systype = "RM300-Exx";249 break;250 }251+ pr_debug("Found SNI brdtype %02x name %s\n", sni_brd_type,systype);252253#ifdef DEBUG254 sni_idprom_dump();