162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Based on Ocelot Linux port, which is 462306a36Sopenharmony_ci * Copyright 2001 MontaVista Software Inc. 562306a36Sopenharmony_ci * Author: jsun@mvista.com or jsun@junsun.net 662306a36Sopenharmony_ci * 762306a36Sopenharmony_ci * Copyright 2003 ICT CAS 862306a36Sopenharmony_ci * Author: Michael Guo <guoyi@ict.ac.cn> 962306a36Sopenharmony_ci * 1062306a36Sopenharmony_ci * Copyright (C) 2007 Lemote Inc. & Institute of Computing Technology 1162306a36Sopenharmony_ci * Author: Fuxin Zhang, zhangfx@lemote.com 1262306a36Sopenharmony_ci * 1362306a36Sopenharmony_ci * Copyright (C) 2009 Lemote Inc. 1462306a36Sopenharmony_ci * Author: Wu Zhangjin, wuzhangjin@gmail.com 1562306a36Sopenharmony_ci */ 1662306a36Sopenharmony_ci#include <linux/export.h> 1762306a36Sopenharmony_ci#include <asm/bootinfo.h> 1862306a36Sopenharmony_ci#include <asm/fw/fw.h> 1962306a36Sopenharmony_ci#include <loongson.h> 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ciu32 cpu_clock_freq; 2262306a36Sopenharmony_ciEXPORT_SYMBOL(cpu_clock_freq); 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_civoid __init prom_init_env(void) 2562306a36Sopenharmony_ci{ 2662306a36Sopenharmony_ci /* pmon passes arguments in 32bit pointers */ 2762306a36Sopenharmony_ci unsigned int processor_id; 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci cpu_clock_freq = fw_getenvl("cpuclock"); 3062306a36Sopenharmony_ci memsize = fw_getenvl("memsize"); 3162306a36Sopenharmony_ci highmemsize = fw_getenvl("highmemsize"); 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_ci if (memsize == 0) 3462306a36Sopenharmony_ci memsize = 256; 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ci pr_info("memsize=%u, highmemsize=%u\n", memsize, highmemsize); 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ci if (cpu_clock_freq == 0) { 3962306a36Sopenharmony_ci processor_id = (¤t_cpu_data)->processor_id; 4062306a36Sopenharmony_ci switch (processor_id & PRID_REV_MASK) { 4162306a36Sopenharmony_ci case PRID_REV_LOONGSON2E: 4262306a36Sopenharmony_ci cpu_clock_freq = 533080000; 4362306a36Sopenharmony_ci break; 4462306a36Sopenharmony_ci case PRID_REV_LOONGSON2F: 4562306a36Sopenharmony_ci cpu_clock_freq = 797000000; 4662306a36Sopenharmony_ci break; 4762306a36Sopenharmony_ci default: 4862306a36Sopenharmony_ci cpu_clock_freq = 100000000; 4962306a36Sopenharmony_ci break; 5062306a36Sopenharmony_ci } 5162306a36Sopenharmony_ci } 5262306a36Sopenharmony_ci pr_info("CpuClock = %u\n", cpu_clock_freq); 5362306a36Sopenharmony_ci} 54