/*++
linux/arch/arm/mach-wmt/board.c
Copyright (c) 2012 WonderMedia Technologies, 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.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
this program. If not, see .
WonderMedia Technologies, Inc.
10F, 529, Chung-Cheng Road, Hsin-Tien, Taipei 231, R.O.C.
--*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "generic.h"
static void __init
wmt_fixup(struct tag *tags,
char **cmdline, struct meminfo *mi)
{
#ifdef CONFIG_WMT_FIXUP_ATAG
struct tag *t = tags;
/*FIXME, remove following while ATAG passing from bootloader is ok.*/
t->hdr.tag = ATAG_CORE;
t->hdr.size = tag_size(tag_core);
t->u.core.flags = 0;
t->u.core.pagesize = PAGE_SIZE;
t->u.core.rootdev = (RAMDISK_MAJOR << 8) | 0;
t = tag_next(t);
t->hdr.tag = ATAG_MEM;
t->hdr.size = tag_size(tag_mem32);
t->u.mem.start = 0x00000000;
t->u.mem.size = 64 * 1024 * 1024;
t = tag_next(t);
/**/
/* ramdisk.size = decompressed ramdisk size in _kilo_ bytes.*/
/**/
t->hdr.tag = ATAG_RAMDISK;
t->hdr.size = tag_size(tag_ramdisk);
t->u.ramdisk.flags = 1;
t->u.ramdisk.size = 8 * 1024;
t->u.ramdisk.start = 0;
t = tag_next(t);
/**/
/* initrd.size = size of compressed ramdisk image in bytes.*/
/**/
t->hdr.tag = ATAG_INITRD2;
t->hdr.size = tag_size(tag_initrd);
t->u.initrd.start = 0x01000000; /* physical*/
/*t->u.initrd.size = 3 * 1024 * 1024;*/
t->u.initrd.size = 8 * 1024 * 1024; /* depend on the size of ramdisk.gz*/
t = tag_next(t);
t->hdr.tag = ATAG_NONE;
t->hdr.size = 0;
#endif
}
/* map wmt physical io address to virtual address */
static struct map_desc wmt_io_desc[] __initdata = {
{
.virtual = 0xFE000000,
.length = SZ_16M,
.pfn = __phys_to_pfn(0xD8000000),
.type = MT_DEVICE
}
};
static void __init wmt_map_io(void)
{
iotable_init(wmt_io_desc, ARRAY_SIZE(wmt_io_desc));
wmt_register_uart(0, 0); /* mount ttyS0 (or ttyVT0) to UART0*/
wmt_register_uart(1, 1); /* mount ttyS1 to UART1*/
#ifdef CONFIG_UART_2_3_ENABLE
wmt_register_uart(2, 2); /* mount ttyS2 to UART2*/
wmt_register_uart(3, 3); /* mount ttyS3 to UART3*/
#endif
}
extern struct sys_timer wmt_timer;
MACHINE_START(WMT, "WMT")
#ifdef CONFIG_WMT_USE_BOOTLOADER_ATAG
.boot_params = 0x00000100,
#endif
.fixup = &wmt_fixup,
.map_io = &wmt_map_io,
.init_irq = wmt_init_irq,
.handle_irq = gic_handle_irq,
.timer = &wmt_timer,
MACHINE_END