18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Copyright (C) 2009 Lemote Inc. 48c2ecf20Sopenharmony_ci * Author: Wu Zhangjin, wuzhangjin@gmail.com 58c2ecf20Sopenharmony_ci */ 68c2ecf20Sopenharmony_ci 78c2ecf20Sopenharmony_ci#include <linux/memblock.h> 88c2ecf20Sopenharmony_ci#include <asm/bootinfo.h> 98c2ecf20Sopenharmony_ci#include <asm/traps.h> 108c2ecf20Sopenharmony_ci#include <asm/smp-ops.h> 118c2ecf20Sopenharmony_ci#include <asm/cacheflush.h> 128c2ecf20Sopenharmony_ci#include <asm/fw/fw.h> 138c2ecf20Sopenharmony_ci 148c2ecf20Sopenharmony_ci#include <loongson.h> 158c2ecf20Sopenharmony_ci 168c2ecf20Sopenharmony_ci/* Loongson CPU address windows config space base address */ 178c2ecf20Sopenharmony_ciunsigned long __maybe_unused _loongson_addrwincfg_base; 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_cistatic void __init mips_nmi_setup(void) 208c2ecf20Sopenharmony_ci{ 218c2ecf20Sopenharmony_ci void *base; 228c2ecf20Sopenharmony_ci extern char except_vec_nmi[]; 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_ci base = (void *)(CAC_BASE + 0x380); 258c2ecf20Sopenharmony_ci memcpy(base, except_vec_nmi, 0x80); 268c2ecf20Sopenharmony_ci flush_icache_range((unsigned long)base, (unsigned long)base + 0x80); 278c2ecf20Sopenharmony_ci} 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_civoid __init prom_init(void) 308c2ecf20Sopenharmony_ci{ 318c2ecf20Sopenharmony_ci#ifdef CONFIG_CPU_SUPPORTS_ADDRWINCFG 328c2ecf20Sopenharmony_ci _loongson_addrwincfg_base = (unsigned long) 338c2ecf20Sopenharmony_ci ioremap(LOONGSON_ADDRWINCFG_BASE, LOONGSON_ADDRWINCFG_SIZE); 348c2ecf20Sopenharmony_ci#endif 358c2ecf20Sopenharmony_ci 368c2ecf20Sopenharmony_ci fw_init_cmdline(); 378c2ecf20Sopenharmony_ci prom_init_machtype(); 388c2ecf20Sopenharmony_ci prom_init_env(); 398c2ecf20Sopenharmony_ci 408c2ecf20Sopenharmony_ci /* init base address of io space */ 418c2ecf20Sopenharmony_ci set_io_port_base((unsigned long) 428c2ecf20Sopenharmony_ci ioremap(LOONGSON_PCIIO_BASE, LOONGSON_PCIIO_SIZE)); 438c2ecf20Sopenharmony_ci prom_init_memory(); 448c2ecf20Sopenharmony_ci 458c2ecf20Sopenharmony_ci /*init the uart base address */ 468c2ecf20Sopenharmony_ci prom_init_uart_base(); 478c2ecf20Sopenharmony_ci board_nmi_handler_setup = mips_nmi_setup; 488c2ecf20Sopenharmony_ci} 498c2ecf20Sopenharmony_ci 508c2ecf20Sopenharmony_civoid __init prom_free_prom_memory(void) 518c2ecf20Sopenharmony_ci{ 528c2ecf20Sopenharmony_ci} 53