10dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood/* 20dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood * Embedded Planet EP8248E with PlanetCore firmware 30dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood * 40dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood * Author: Scott Wood <scottwood@freescale.com> 50dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood * 60dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood * Copyright (c) 2007 Freescale Semiconductor, Inc. 70dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood * 80dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood * This program is free software; you can redistribute it and/or modify it 90dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood * under the terms of the GNU General Public License version 2 as published 100dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood * by the Free Software Foundation. 110dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood */ 120dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood 130dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood#include "ops.h" 140dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood#include "stdio.h" 150dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood#include "planetcore.h" 160dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood#include "pq2.h" 170dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood 180dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Woodstatic char *table; 190dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Woodstatic u64 mem_size; 200dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood 210dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood#include <io.h> 220dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood 230dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Woodstatic void platform_fixups(void) 240dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood{ 250dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood u64 val; 260dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood 270dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood dt_fixup_memory(0, mem_size); 280dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood planetcore_set_mac_addrs(table); 290dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood 300dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood if (!planetcore_get_decimal(table, PLANETCORE_KEY_CRYSTAL_HZ, &val)) { 310dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood printf("No PlanetCore crystal frequency key.\r\n"); 320dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood return; 330dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood } 340dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood 350dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood pq2_fixup_clocks(val); 360dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood} 370dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood 380dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Woodvoid platform_init(unsigned long r3, unsigned long r4, unsigned long r5, 390dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood unsigned long r6, unsigned long r7) 400dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood{ 410dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood table = (char *)r3; 420dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood planetcore_prepare_table(table); 430dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood 440dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood if (!planetcore_get_decimal(table, PLANETCORE_KEY_MB_RAM, &mem_size)) 450dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood return; 460dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood 470dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood mem_size *= 1024 * 1024; 480dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood simple_alloc_init(_end, mem_size - (unsigned long)_end, 32, 64); 490dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood 500dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood fdt_init(_dtb_start); 510dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood 520dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood planetcore_set_stdout_path(table); 530dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood serial_console_init(); 540dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood platform_ops.fixups = platform_fixups; 550dde1a1df9ab0615ed08558fb7144e7739e9f565Scott Wood} 56