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