1bd92aa013e8fcd17328ec8e060477761cf3380d9Wu Zhangjin/* 2a3ed495190ebe918f4584291ed8c76f1c97a84fdWu Zhangjin * Copyright (C) 2009 Lemote Inc. 3f7a904dffe30a02636053d8022498ced7e44d31cWu Zhangjin * Author: Wu Zhangjin, wuzhangjin@gmail.com 4bd92aa013e8fcd17328ec8e060477761cf3380d9Wu Zhangjin * 57034228792cc561e79ff8600f02884bd4c80e287Ralf Baechle * This program is free software; you can redistribute it and/or modify it 67034228792cc561e79ff8600f02884bd4c80e287Ralf Baechle * under the terms of the GNU General Public License as published by the 7bd92aa013e8fcd17328ec8e060477761cf3380d9Wu Zhangjin * Free Software Foundation; either version 2 of the License, or (at your 8bd92aa013e8fcd17328ec8e060477761cf3380d9Wu Zhangjin * option) any later version. 9bd92aa013e8fcd17328ec8e060477761cf3380d9Wu Zhangjin */ 10bd92aa013e8fcd17328ec8e060477761cf3380d9Wu Zhangjin 11bd92aa013e8fcd17328ec8e060477761cf3380d9Wu Zhangjin#include <linux/bootmem.h> 12300459d558725cdada5ddebbe52c24ef6e1853d3Huacai Chen#include <asm/smp-ops.h> 13bd92aa013e8fcd17328ec8e060477761cf3380d9Wu Zhangjin 145e983ff654ca3df3007b5b558b5271bb4622afa4Wu Zhangjin#include <loongson.h> 15bd92aa013e8fcd17328ec8e060477761cf3380d9Wu Zhangjin 166f7a251a259e5bf58a9ff334bdcfa3e42b6cb7a3Wu Zhangjin/* Loongson CPU address windows config space base address */ 176f7a251a259e5bf58a9ff334bdcfa3e42b6cb7a3Wu Zhangjinunsigned long __maybe_unused _loongson_addrwincfg_base; 186f7a251a259e5bf58a9ff334bdcfa3e42b6cb7a3Wu Zhangjin 19bd92aa013e8fcd17328ec8e060477761cf3380d9Wu Zhangjinvoid __init prom_init(void) 20bd92aa013e8fcd17328ec8e060477761cf3380d9Wu Zhangjin{ 2155045ff5557bc804752e84dca5d1b1f1d4bb4e31Wu Zhangjin#ifdef CONFIG_CPU_SUPPORTS_ADDRWINCFG 226f7a251a259e5bf58a9ff334bdcfa3e42b6cb7a3Wu Zhangjin _loongson_addrwincfg_base = (unsigned long) 236f7a251a259e5bf58a9ff334bdcfa3e42b6cb7a3Wu Zhangjin ioremap(LOONGSON_ADDRWINCFG_BASE, LOONGSON_ADDRWINCFG_SIZE); 246f7a251a259e5bf58a9ff334bdcfa3e42b6cb7a3Wu Zhangjin#endif 256f7a251a259e5bf58a9ff334bdcfa3e42b6cb7a3Wu Zhangjin 26bd92aa013e8fcd17328ec8e060477761cf3380d9Wu Zhangjin prom_init_cmdline(); 27bd92aa013e8fcd17328ec8e060477761cf3380d9Wu Zhangjin prom_init_env(); 281a08f1524d2ee4d4239e56ee1b3f6da0df929563Huacai Chen 291a08f1524d2ee4d4239e56ee1b3f6da0df929563Huacai Chen /* init base address of io space */ 301a08f1524d2ee4d4239e56ee1b3f6da0df929563Huacai Chen set_io_port_base((unsigned long) 311a08f1524d2ee4d4239e56ee1b3f6da0df929563Huacai Chen ioremap(LOONGSON_PCIIO_BASE, LOONGSON_PCIIO_SIZE)); 321a08f1524d2ee4d4239e56ee1b3f6da0df929563Huacai Chen 33c46173183657bbdbe0d54a981c28807581648422Huacai Chen#ifdef CONFIG_NUMA 34c46173183657bbdbe0d54a981c28807581648422Huacai Chen prom_init_numa_memory(); 35c46173183657bbdbe0d54a981c28807581648422Huacai Chen#else 36bd92aa013e8fcd17328ec8e060477761cf3380d9Wu Zhangjin prom_init_memory(); 37c46173183657bbdbe0d54a981c28807581648422Huacai Chen#endif 38a3ed495190ebe918f4584291ed8c76f1c97a84fdWu Zhangjin 39a3ed495190ebe918f4584291ed8c76f1c97a84fdWu Zhangjin /*init the uart base address */ 40a3ed495190ebe918f4584291ed8c76f1c97a84fdWu Zhangjin prom_init_uart_base(); 41300459d558725cdada5ddebbe52c24ef6e1853d3Huacai Chen register_smp_ops(&loongson3_smp_ops); 42bd92aa013e8fcd17328ec8e060477761cf3380d9Wu Zhangjin} 43bd92aa013e8fcd17328ec8e060477761cf3380d9Wu Zhangjin 44bd92aa013e8fcd17328ec8e060477761cf3380d9Wu Zhangjinvoid __init prom_free_prom_memory(void) 45bd92aa013e8fcd17328ec8e060477761cf3380d9Wu Zhangjin{ 46bd92aa013e8fcd17328ec8e060477761cf3380d9Wu Zhangjin} 47