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