| /* | 
 |  * MPC82xx setup and early boot code plus other random bits. | 
 |  * | 
 |  * Author: Vitaly Bordug <[email protected]> | 
 |  * | 
 |  * Copyright (c) 2006 MontaVista Software, Inc. | 
 |  * | 
 |  * This program is free software; you can redistribute  it and/or modify it | 
 |  * under  the terms of  the GNU General  Public License as published by the | 
 |  * Free Software Foundation;  either version 2 of the  License, or (at your | 
 |  * option) any later version. | 
 |  */ | 
 |  | 
 | #include <linux/stddef.h> | 
 | #include <linux/kernel.h> | 
 | #include <linux/init.h> | 
 | #include <linux/errno.h> | 
 | #include <linux/reboot.h> | 
 | #include <linux/pci.h> | 
 | #include <linux/interrupt.h> | 
 | #include <linux/kdev_t.h> | 
 | #include <linux/major.h> | 
 | #include <linux/console.h> | 
 | #include <linux/delay.h> | 
 | #include <linux/seq_file.h> | 
 | #include <linux/root_dev.h> | 
 | #include <linux/initrd.h> | 
 | #include <linux/module.h> | 
 | #include <linux/fsl_devices.h> | 
 | #include <linux/fs_uart_pd.h> | 
 |  | 
 | #include <asm/system.h> | 
 | #include <asm/pgtable.h> | 
 | #include <asm/page.h> | 
 | #include <asm/atomic.h> | 
 | #include <asm/time.h> | 
 | #include <asm/io.h> | 
 | #include <asm/machdep.h> | 
 | #include <asm/bootinfo.h> | 
 | #include <asm/pci-bridge.h> | 
 | #include <asm/mpc8260.h> | 
 | #include <asm/irq.h> | 
 | #include <mm/mmu_decl.h> | 
 | #include <asm/prom.h> | 
 | #include <asm/cpm2.h> | 
 | #include <asm/udbg.h> | 
 | #include <asm/i8259.h> | 
 | #include <linux/fs_enet_pd.h> | 
 |  | 
 | #include <sysdev/fsl_soc.h> | 
 | #include <sysdev/cpm2_pic.h> | 
 |  | 
 | #include "pq2ads_pd.h" | 
 |  | 
 | static int __init get_freq(char *name, unsigned long *val) | 
 | { | 
 | 	struct device_node *cpu; | 
 | 	unsigned int *fp; | 
 | 	int found = 0; | 
 |  | 
 | 	/* The cpu node should have timebase and clock frequency properties */ | 
 | 	cpu = of_find_node_by_type(NULL, "cpu"); | 
 |  | 
 | 	if (cpu) { | 
 | 		fp = (unsigned int *)get_property(cpu, name, NULL); | 
 | 		if (fp) { | 
 | 			found = 1; | 
 | 			*val = *fp++; | 
 | 		} | 
 |  | 
 | 		of_node_put(cpu); | 
 | 	} | 
 |  | 
 | 	return found; | 
 | } | 
 |  | 
 | void __init m82xx_calibrate_decr(void) | 
 | { | 
 | 	ppc_tb_freq = 125000000; | 
 | 	if (!get_freq("bus-frequency", &ppc_tb_freq)) { | 
 | 		printk(KERN_ERR "WARNING: Estimating decrementer frequency " | 
 | 				"(not found)\n"); | 
 | 	} | 
 | 	ppc_tb_freq /= 4; | 
 | 	ppc_proc_freq = 1000000000; | 
 | 	if (!get_freq("clock-frequency", &ppc_proc_freq)) | 
 | 		printk(KERN_ERR "WARNING: Estimating processor frequency" | 
 | 				"(not found)\n"); | 
 | } | 
 |  | 
 | void mpc82xx_ads_show_cpuinfo(struct seq_file *m) | 
 | { | 
 | 	uint pvid, svid, phid1; | 
 | 	uint memsize = total_memory; | 
 |  | 
 | 	pvid = mfspr(SPRN_PVR); | 
 | 	svid = mfspr(SPRN_SVR); | 
 |  | 
 | 	seq_printf(m, "Vendor\t\t: Freescale Semiconductor\n"); | 
 | 	seq_printf(m, "Machine\t\t: %s\n", CPUINFO_MACHINE); | 
 | 	seq_printf(m, "PVR\t\t: 0x%x\n", pvid); | 
 | 	seq_printf(m, "SVR\t\t: 0x%x\n", svid); | 
 |  | 
 | 	/* Display cpu Pll setting */ | 
 | 	phid1 = mfspr(SPRN_HID1); | 
 | 	seq_printf(m, "PLL setting\t: 0x%x\n", ((phid1 >> 24) & 0x3f)); | 
 |  | 
 | 	/* Display the amount of memory */ | 
 | 	seq_printf(m, "Memory\t\t: %d MB\n", memsize / (1024 * 1024)); | 
 | } |