18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * Copyright (C) 2011 Tobias Klauser <tklauser@distanz.ch>
48c2ecf20Sopenharmony_ci */
58c2ecf20Sopenharmony_ci
68c2ecf20Sopenharmony_ci#ifndef _ASM_NIOS2_CPUINFO_H
78c2ecf20Sopenharmony_ci#define _ASM_NIOS2_CPUINFO_H
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_ci#include <linux/types.h>
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_cistruct cpuinfo {
128c2ecf20Sopenharmony_ci	/* Core CPU configuration */
138c2ecf20Sopenharmony_ci	char cpu_impl[12];
148c2ecf20Sopenharmony_ci	u32 cpu_clock_freq;
158c2ecf20Sopenharmony_ci	bool mmu;
168c2ecf20Sopenharmony_ci	bool has_div;
178c2ecf20Sopenharmony_ci	bool has_mul;
188c2ecf20Sopenharmony_ci	bool has_mulx;
198c2ecf20Sopenharmony_ci	bool has_bmx;
208c2ecf20Sopenharmony_ci	bool has_cdx;
218c2ecf20Sopenharmony_ci
228c2ecf20Sopenharmony_ci	/* CPU caches */
238c2ecf20Sopenharmony_ci	u32 icache_line_size;
248c2ecf20Sopenharmony_ci	u32 icache_size;
258c2ecf20Sopenharmony_ci	u32 dcache_line_size;
268c2ecf20Sopenharmony_ci	u32 dcache_size;
278c2ecf20Sopenharmony_ci
288c2ecf20Sopenharmony_ci	/* TLB */
298c2ecf20Sopenharmony_ci	u32 tlb_pid_num_bits;	/* number of bits used for the PID in TLBMISC */
308c2ecf20Sopenharmony_ci	u32 tlb_num_ways;
318c2ecf20Sopenharmony_ci	u32 tlb_num_ways_log2;
328c2ecf20Sopenharmony_ci	u32 tlb_num_entries;
338c2ecf20Sopenharmony_ci	u32 tlb_num_lines;
348c2ecf20Sopenharmony_ci	u32 tlb_ptr_sz;
358c2ecf20Sopenharmony_ci
368c2ecf20Sopenharmony_ci	/* Addresses */
378c2ecf20Sopenharmony_ci	u32 reset_addr;
388c2ecf20Sopenharmony_ci	u32 exception_addr;
398c2ecf20Sopenharmony_ci	u32 fast_tlb_miss_exc_addr;
408c2ecf20Sopenharmony_ci};
418c2ecf20Sopenharmony_ci
428c2ecf20Sopenharmony_ciextern struct cpuinfo cpuinfo;
438c2ecf20Sopenharmony_ci
448c2ecf20Sopenharmony_ciextern void setup_cpuinfo(void);
458c2ecf20Sopenharmony_ci
468c2ecf20Sopenharmony_ci#endif /* _ASM_NIOS2_CPUINFO_H */
47