1/* 2 * MPC82xx setup and early boot code plus other random bits. 3 * 4 * Author: Vitaly Bordug <vbordug@ru.mvista.com> 5 * 6 * Copyright (c) 2006 MontaVista Software, Inc. 7 * 8 * This program is free software; you can redistribute it and/or modify it 9 * under the terms of the GNU General Public License as published by the 10 * Free Software Foundation; either version 2 of the License, or (at your 11 * option) any later version. 12 */ 13 14#include <linux/stddef.h> 15#include <linux/kernel.h> 16#include <linux/init.h> 17#include <linux/errno.h> 18#include <linux/reboot.h> 19#include <linux/pci.h> 20#include <linux/interrupt.h> 21#include <linux/kdev_t.h> 22#include <linux/major.h> 23#include <linux/console.h> 24#include <linux/delay.h> 25#include <linux/seq_file.h> 26#include <linux/root_dev.h> 27#include <linux/initrd.h> 28#include <linux/module.h> 29#include <linux/fsl_devices.h> 30#include <linux/fs_uart_pd.h> 31 32#include <asm/system.h> 33#include <asm/pgtable.h> 34#include <asm/page.h> 35#include <asm/atomic.h> 36#include <asm/time.h> 37#include <asm/io.h> 38#include <asm/machdep.h> 39#include <asm/bootinfo.h> 40#include <asm/pci-bridge.h> 41#include <asm/mpc8260.h> 42#include <asm/irq.h> 43#include <mm/mmu_decl.h> 44#include <asm/prom.h> 45#include <asm/cpm2.h> 46#include <asm/udbg.h> 47#include <asm/i8259.h> 48#include <linux/fs_enet_pd.h> 49 50#include <sysdev/fsl_soc.h> 51#include <sysdev/cpm2_pic.h> 52 53#include "pq2ads.h" 54 55static int __init get_freq(char *name, unsigned long *val) 56{ 57 struct device_node *cpu; 58 const unsigned int *fp; 59 int found = 0; 60 61 /* The cpu node should have timebase and clock frequency properties */ 62 cpu = of_find_node_by_type(NULL, "cpu"); 63 64 if (cpu) { 65 fp = of_get_property(cpu, name, NULL); 66 if (fp) { 67 found = 1; 68 *val = *fp; 69 } 70 71 of_node_put(cpu); 72 } 73 74 return found; 75} 76 77void __init m82xx_calibrate_decr(void) 78{ 79 ppc_tb_freq = 125000000; 80 if (!get_freq("bus-frequency", &ppc_tb_freq)) { 81 printk(KERN_ERR "WARNING: Estimating decrementer frequency " 82 "(not found)\n"); 83 } 84 ppc_tb_freq /= 4; 85 ppc_proc_freq = 1000000000; 86 if (!get_freq("clock-frequency", &ppc_proc_freq)) 87 printk(KERN_ERR "WARNING: Estimating processor frequency" 88 "(not found)\n"); 89} 90 91void mpc82xx_ads_show_cpuinfo(struct seq_file *m) 92{ 93 uint pvid, svid, phid1; 94 uint memsize = total_memory; 95 96 pvid = mfspr(SPRN_PVR); 97 svid = mfspr(SPRN_SVR); 98 99 seq_printf(m, "Vendor\t\t: Freescale Semiconductor\n"); 100 seq_printf(m, "Machine\t\t: %s\n", CPUINFO_MACHINE); 101 seq_printf(m, "PVR\t\t: 0x%x\n", pvid); 102 seq_printf(m, "SVR\t\t: 0x%x\n", svid); 103 104 /* Display cpu Pll setting */ 105 phid1 = mfspr(SPRN_HID1); 106 seq_printf(m, "PLL setting\t: 0x%x\n", ((phid1 >> 24) & 0x3f)); 107 108 /* Display the amount of memory */ 109 seq_printf(m, "Memory\t\t: %d MB\n", memsize / (1024 * 1024)); 110} 111