162306a36Sopenharmony_ci/* 262306a36Sopenharmony_ci * This file is subject to the terms and conditions of the GNU General Public 362306a36Sopenharmony_ci * License. See the file "COPYING" in the main directory of this archive 462306a36Sopenharmony_ci * for more details. 562306a36Sopenharmony_ci * 662306a36Sopenharmony_ci * PROM library initialisation code. 762306a36Sopenharmony_ci * 862306a36Sopenharmony_ci * Copyright (C) 1996 David S. Miller (davem@davemloft.net) 962306a36Sopenharmony_ci */ 1062306a36Sopenharmony_ci#include <linux/init.h> 1162306a36Sopenharmony_ci#include <linux/kernel.h> 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci#include <asm/bootinfo.h> 1462306a36Sopenharmony_ci#include <asm/sgialib.h> 1562306a36Sopenharmony_ci#include <asm/smp-ops.h> 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci#undef DEBUG_PROM_INIT 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ci/* Master romvec interface. */ 2062306a36Sopenharmony_cistruct linux_romvec *romvec; 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci#if defined(CONFIG_64BIT) && defined(CONFIG_FW_ARC32) 2362306a36Sopenharmony_ci/* stack for calling 32bit ARC prom */ 2462306a36Sopenharmony_ciu64 o32_stk[4096]; 2562306a36Sopenharmony_ci#endif 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_civoid __init prom_init(void) 2862306a36Sopenharmony_ci{ 2962306a36Sopenharmony_ci PSYSTEM_PARAMETER_BLOCK pb = PROMBLOCK; 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ci romvec = ROMVECTOR; 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_ci if (pb->magic != 0x53435241) { 3462306a36Sopenharmony_ci printk(KERN_CRIT "Aieee, bad prom vector magic %08lx\n", 3562306a36Sopenharmony_ci (unsigned long) pb->magic); 3662306a36Sopenharmony_ci while(1) 3762306a36Sopenharmony_ci ; 3862306a36Sopenharmony_ci } 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_ci prom_init_cmdline(fw_arg0, (LONG *)fw_arg1); 4162306a36Sopenharmony_ci prom_identify_arch(); 4262306a36Sopenharmony_ci printk(KERN_INFO "PROMLIB: ARC firmware Version %d Revision %d\n", 4362306a36Sopenharmony_ci pb->ver, pb->rev); 4462306a36Sopenharmony_ci prom_meminit(); 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ci#ifdef DEBUG_PROM_INIT 4762306a36Sopenharmony_ci pr_info("Press a key to reboot\n"); 4862306a36Sopenharmony_ci ArcRead(0, &c, 1, &cnt); 4962306a36Sopenharmony_ci ArcEnterInteractiveMode(); 5062306a36Sopenharmony_ci#endif 5162306a36Sopenharmony_ci} 52