aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/coldfire/files-2.6.31/arch/m68k/coldfire/m547x/config.c
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/coldfire/files-2.6.31/arch/m68k/coldfire/m547x/config.c')
-rw-r--r--target/linux/coldfire/files-2.6.31/arch/m68k/coldfire/m547x/config.c435
1 files changed, 0 insertions, 435 deletions
diff --git a/target/linux/coldfire/files-2.6.31/arch/m68k/coldfire/m547x/config.c b/target/linux/coldfire/files-2.6.31/arch/m68k/coldfire/m547x/config.c
deleted file mode 100644
index 9c325fc996..0000000000
--- a/target/linux/coldfire/files-2.6.31/arch/m68k/coldfire/m547x/config.c
+++ /dev/null
@@ -1,435 +0,0 @@
-/*
- * linux/arch/m68k/coldfire/config.c
- *
- * Copyright 2007-2009 Freescale Semiconductor, Inc. All Rights Reserved.
- * Kurt Mahan kmahan@freescale.com
- * Matt Waddel Matt.Waddel@freescale.com
- * Shrek Wu b16972@freescale.com
- *
- * 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/module.h>
-#include <linux/init.h>
-#include <linux/string.h>
-#include <linux/kernel.h>
-#include <linux/console.h>
-#include <linux/bootmem.h>
-#include <linux/mm.h>
-#include <linux/clockchips.h>
-#include <asm/bootinfo.h>
-#include <asm/machdep.h>
-#include <asm/coldfire.h>
-#include <asm/cfcache.h>
-#include <asm/cacheflush.h>
-#include <linux/io.h>
-#include <asm/cfmmu.h>
-#include <asm/setup.h>
-#include <asm/irq.h>
-#include <asm/traps.h>
-#include <asm/movs.h>
-#include <asm/movs.h>
-#include <asm/page.h>
-#include <asm/pgalloc.h>
-
-#include <asm/mcfsim.h>
-
-#define UBOOT_PCI
-#include <asm/bootinfo.h>
-#include <asm/m5485gpt.h>
-
-extern int get_irq_list(struct seq_file *p, void *v);
-extern char _text, _end;
-extern char _etext, _edata, __init_begin, __init_end;
-extern struct console mcfrs_console;
-extern char m68k_command_line[CL_SIZE];
-extern unsigned long availmem;
-
-static int irq_enable[NR_IRQS];
-unsigned long num_pages;
-
-/* cf dma physical addresses */
-unsigned long cf_dma_base;
-unsigned long cf_dma_end;
-unsigned long cf_dma_size;
-EXPORT_SYMBOL(cf_dma_base);
-EXPORT_SYMBOL(cf_dma_end);
-EXPORT_SYMBOL(cf_dma_size);
-
-/* ethernet mac addresses from uboot */
-unsigned char uboot_enet0[6];
-unsigned char uboot_enet1[6];
-
-void coldfire_sort_memrec(void)
-{
- int i, j;
-
- /* Sort the m68k_memory records by address */
- for (i = 0; i < m68k_num_memory; ++i) {
- for (j = i + 1; j < m68k_num_memory; ++j) {
- if (m68k_memory[i].addr > m68k_memory[j].addr) {
- struct mem_info tmp;
- tmp = m68k_memory[i];
- m68k_memory[i] = m68k_memory[j];
- m68k_memory[j] = tmp;
- }
- }
- }
- /* Trim off discontiguous bits */
- for (i = 1; i < m68k_num_memory; ++i) {
- if ((m68k_memory[i-1].addr + m68k_memory[i-1].size) !=
- m68k_memory[i].addr) {
- printk(KERN_DEBUG "m68k_parse_bootinfo: "
- "addr gap between 0x%lx & 0x%lx\n",
- m68k_memory[i-1].addr+m68k_memory[i-1].size,
- m68k_memory[i].addr);
- m68k_num_memory = i;
- break;
- }
- }
-}
-
-/*
- * UBoot Handler
- */
-int __init uboot_commandline(char *bootargs)
-{
- int len = 0, cmd_line_len;
- static struct uboot_record uboot_info;
- u32 offset = PAGE_OFFSET_RAW - PHYS_OFFSET;
-
- extern unsigned long uboot_info_stk;
-
- /* validate address */
- if ((uboot_info_stk < PAGE_OFFSET_RAW) ||
- (uboot_info_stk >= (PAGE_OFFSET_RAW + CONFIG_SDRAM_SIZE)))
- return 0;
-
- /* Add offset to get post-remapped kernel memory location */
- uboot_info.bdi = (struct bd_info *)((*(u32 *)(uboot_info_stk))
- + offset);
- uboot_info.initrd_start = (*(u32 *)(uboot_info_stk+4)) + offset;
- uboot_info.initrd_end = (*(u32 *)(uboot_info_stk+8)) + offset;
- uboot_info.cmd_line_start = (*(u32 *)(uboot_info_stk+12)) + offset;
- uboot_info.cmd_line_stop = (*(u32 *)(uboot_info_stk+16)) + offset;
-
- /* copy over mac addresses */
- memcpy(uboot_enet0, uboot_info.bdi->bi_enet0addr, 6);
- memcpy(uboot_enet1, uboot_info.bdi->bi_enet1addr, 6);
-
- /* copy command line */
- cmd_line_len = uboot_info.cmd_line_stop - uboot_info.cmd_line_start;
- if ((cmd_line_len > 0) && (cmd_line_len < CL_SIZE-1))
- len = (int)strncpy(bootargs, (char *)uboot_info.cmd_line_start,\
- cmd_line_len);
-
- return len;
-}
-
-/*
- * This routine does things not done in the bootloader.
- */
-#define DEFAULT_COMMAND_LINE \
- "debug root=/dev/nfs rw \
- nfsroot=172.27.155.1:/tftpboot/rigo/rootfs/ \
- ip=172.27.155.75:172.27.155.1"
-
-asmlinkage void __init cf_early_init(void)
-{
- struct bi_record *record = (struct bi_record *) &_end;
-
- extern char _end;
-
- SET_VBR((void *)MCF_RAMBAR0);
-
- /* Mask all interrupts */
- MCF_IMRL = 0xFFFFFFFF;
- MCF_IMRH = 0xFFFFFFFF;
-
- m68k_machtype = MACH_CFMMU;
- m68k_fputype = FPU_CFV4E;
- m68k_mmutype = MMU_CFV4E;
- m68k_cputype = CPU_CFV4E;
-
- m68k_num_memory = 0;
- m68k_memory[m68k_num_memory].addr = CONFIG_SDRAM_BASE;
- m68k_memory[m68k_num_memory++].size = CONFIG_SDRAM_SIZE;
-
- if (!uboot_commandline(m68k_command_line)) {
-#if defined(CONFIG_BOOTPARAM)
- strncpy(m68k_command_line, CONFIG_BOOTPARAM_STRING, CL_SIZE-1);
-#else
- strcpy(m68k_command_line, DEFAULT_COMMAND_LINE);
-#endif
- }
-
-#if defined(CONFIG_BLK_DEV_INITRD)
- /* add initrd image */
- record = (struct bi_record *) ((void *)record + record->size);
- record->tag = BI_RAMDISK;
- record->size = sizeof(record->tag) + sizeof(record->size)
- + sizeof(record->data[0]) + sizeof(record->data[1]);
-#endif
-
- /* Mark end of tags. */
- record = (struct bi_record *) ((void *) record + record->size);
- record->tag = 0;
- record->data[0] = 0;
- record->data[1] = 0;
- record->size = sizeof(record->tag) + sizeof(record->size)
- + sizeof(record->data[0]) + sizeof(record->data[1]);
-
- /* Invalidate caches via CACR */
- flush_bcache();
- cacr_set(CACHE_DISABLE_MODE);
-
- /* Turn on caches via CACR, enable EUSP */
- cacr_set(CACHE_INITIAL_MODE);
-
-}
-
-/* Assembler routines */
-asmlinkage void buserr(void);
-asmlinkage void trap(void);
-asmlinkage void system_call(void);
-asmlinkage void inthandler(void);
-
-void __init coldfire_trap_init(void)
-{
- int i = 0;
- e_vector *vectors;
-
- vectors = (e_vector *)MCF_RAMBAR0;
- /*
- * There is a common trap handler and common interrupt
- * handler that handle almost every vector. We treat
- * the system call and bus error special, they get their
- * own first level handlers.
- */
- for (i = 3; (i <= 23); i++)
- vectors[i] = trap;
- for (i = 33; (i <= 63); i++)
- vectors[i] = trap;
- for (i = 24; (i <= 31); i++)
- vectors[i] = inthandler;
- for (i = 64; (i < 255); i++)
- vectors[i] = inthandler;
-
- vectors[255] = 0;
- vectors[2] = buserr;
- vectors[32] = system_call;
-}
-
-#ifndef CONFIG_GENERIC_CLOCKEVENTS
-void coldfire_tick(void)
-{
- /* Reset the ColdFire timer */
- MCF_SSR(0) = MCF_SSR_ST;
-}
-
-void __init coldfire_sched_init(irq_handler_t handler)
-{
- int irq = ISC_SLTn(0);
-
- MCF_SCR(0) = 0;
- MCF_ICR(irq) = ILP_SLT0;
- request_irq(64 + irq, handler, IRQF_DISABLED, "ColdFire Timer 0", NULL);
- MCF_SLTCNT(0) = MCF_BUSCLK / HZ;
- MCF_SCR(0) |= MCF_SCR_TEN | MCF_SCR_IEN | MCF_SCR_RUN;
-}
-
-unsigned long coldfire_gettimeoffset(void)
-{
- volatile unsigned long trr, tcn, offset;
- trr = MCF_SLTCNT(0);
- tcn = MCF_SCNT(0);
-
- offset = (trr - tcn) * ((1000000 >> 3) / HZ) / (trr >> 3);
- if (MCF_SSR(0) & MCF_SSR_ST)
- offset += 1000000 / HZ;
-
- return offset;
-}
-#else
-static unsigned long long sched_dtim_clk_val;
-
-unsigned long long sched_clock(void)
-{
- unsigned long flags;
- unsigned long long cycles;
- volatile unsigned long trr, tcn, offset;
-
- local_irq_save(flags);
- trr = MCF_SLTCNT(0);
- tcn = MCF_SCNT(0);
- offset = (trr - tcn);
- cycles = sched_dtim_clk_val;
- local_irq_restore(flags);
-
- return cycles + offset;
-}
-
-unsigned long long sys_dtim2_read(void)
-{
- unsigned long flags;
- unsigned long long cycles;
- volatile unsigned long trr, tcn, offset;
-
- local_irq_save(flags);
- trr = MCF_SLTCNT(0);
- tcn = MCF_SCNT(0);
- offset = (trr - tcn);
- cycles = sched_dtim_clk_val;
- local_irq_restore(flags);
-
- return cycles + offset;
-}
-
-static irqreturn_t coldfire_dtim_clk_irq(int irq, void *dev)
-{
- struct clock_event_device *evt =
- (struct clock_event_device *)dev;
-
- MCF_SSR(0) = MCF_SSR_ST;
- sched_dtim_clk_val += (MCF_BUSCLK) / HZ;;
- evt->event_handler(evt);
- return IRQ_HANDLED;
-}
-
-void sys_dtim2_init(struct clock_event_device *evt)
-{
- int irq = ISC_SLTn(0);
-
- sched_dtim_clk_val = 0;
- MCF_SCR(0) = 0;
- MCF_ICR(irq) = ILP_SLT0;
- request_irq(64 + irq, coldfire_dtim_clk_irq, IRQF_DISABLED,
- "ColdFire Timer 0", (void *)evt);
- MCF_SLTCNT(0) = MCF_BUSCLK / HZ;
- MCF_SCR(0) |= MCF_SCR_TEN | MCF_SCR_IEN | MCF_SCR_RUN;
-}
-#endif
-
-void coldfire_reboot(void)
-{
- /* disable interrupts and enable the watchdog */
- printk(KERN_INFO "Rebooting\n");
- asm("movew #0x2700, %sr\n");
- MCF_GPT_GMS0 = MCF_GPT_GMS_WDEN | MCF_GPT_GMS_CE | MCF_GPT_GMS_TMS(4);
-}
-
-static void coldfire_get_model(char *model)
-{
- sprintf(model, "Version 4 ColdFire");
-}
-
-static void __init
-coldfire_bootmem_alloc(unsigned long memory_start, unsigned long memory_end)
-{
- unsigned long base_pfn;
-
- /* compute total pages in system */
- num_pages = PAGE_ALIGN(memory_end - PAGE_OFFSET) >> PAGE_SHIFT;
-
- /* align start/end to page boundries */
- memory_start = PAGE_ALIGN(memory_start);
- memory_end = memory_end & PAGE_MASK;
-
- /* page numbers */
- base_pfn = __pa(PAGE_OFFSET) >> PAGE_SHIFT;
- min_low_pfn = __pa(memory_start) >> PAGE_SHIFT;
- max_low_pfn = __pa(memory_end) >> PAGE_SHIFT;
-
- high_memory = (void *)memory_end;
- availmem = memory_start;
-
- /* setup bootmem data */
- m68k_setup_node(0);
- availmem += init_bootmem_node(NODE_DATA(0), min_low_pfn,
- base_pfn, max_low_pfn);
- availmem = PAGE_ALIGN(availmem);
-
- printk(KERN_INFO "** availmem=0x%lx pa(am)=0x%lx\n",
- availmem, __pa(availmem));
- printk(KERN_INFO "** mstart=0x%lx mend=0x%lx\n",
- memory_start, memory_end);
- printk(KERN_INFO "bpfn=0x%lx minpfn=0x%lx maxpfn=0x%lx\n",
- base_pfn, min_low_pfn, max_low_pfn);
-
- /* turn over physram */
- free_bootmem(__pa(availmem), memory_end - (availmem));
-
- /* configure physical dma area */
- cf_dma_base = __pa(PAGE_ALIGN(memory_start));
- cf_dma_size = CONFIG_DMA_SIZE;
- cf_dma_end = CONFIG_SDRAM_BASE + cf_dma_size - 1;
-
- printk(KERN_INFO "dma: phys base=0x%lx phys end=0x%lx virt base=0x%x\n",
- cf_dma_base, cf_dma_end, CONFIG_DMA_BASE);
-
- printk(KERN_INFO "mdma=0x%x pa(mdma)=0x%lx\n",
- MAX_DMA_ADDRESS, __pa(MAX_DMA_ADDRESS));
-}
-
-void __init config_coldfire(void)
-{
- unsigned long endmem, startmem;
- int i;
-
- /*
- * Calculate endmem from m68k_memory, assume all are contiguous
- */
- startmem = ((((int) &_end) + (PAGE_SIZE - 1)) & PAGE_MASK);
- endmem = PAGE_OFFSET;
- for (i = 0; i < m68k_num_memory; ++i)
- endmem += m68k_memory[i].size;
-
- printk(KERN_INFO "starting up linux startmem 0x%lx, endmem 0x%lx, \
- size %luMB\n", startmem, endmem, (endmem - startmem) >> 20);
-
- memset(irq_enable, 0, sizeof(irq_enable));
-
- /*
- * Setup coldfire mach-specific handlers
- */
- mach_max_dma_address = 0xffffffff;
-#ifndef CONFIG_GENERIC_CLOCKEVENTS
- mach_sched_init = coldfire_sched_init;
- mach_tick = coldfire_tick;
- mach_gettimeoffset = coldfire_gettimeoffset;
-#endif
- mach_reset = coldfire_reboot;
-/* mach_hwclk = coldfire_hwclk; to be done */
- mach_get_model = coldfire_get_model;
-
- coldfire_bootmem_alloc(startmem, endmem-1);
-
- /*
- * initrd setup
- */
-/* #ifdef CONFIG_BLK_DEV_INITRD
- if (m68k_ramdisk.size) {
- reserve_bootmem (__pa(m68k_ramdisk.addr), m68k_ramdisk.size);
- initrd_start = (unsigned long) m68k_ramdisk.addr;
- initrd_end = initrd_start + m68k_ramdisk.size;
- printk (KERN_DEBUG "initrd: %08lx - %08lx\n", initrd_start,
- initrd_end);
- }
-#endif */
-
-#if defined(CONFIG_DUMMY_CONSOLE) || defined(CONFIG_FRAMEBUFFER_CONSOLE)
- conswitchp = &dummy_con;
-#endif
-
-#if defined(CONFIG_SERIAL_COLDFIRE)
- /*
- * This causes trouble when it is re-registered later.
- * Currently this is fixed by conditionally commenting
- * out the register_console in mcf_serial.c
- */
- register_console(&mcfrs_console);
-#endif
-}