162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Generic support for queying CPU info 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (C) 2007-2009 Michal Simek <monstr@monstr.eu> 662306a36Sopenharmony_ci * Copyright (C) 2007-2009 PetaLogix 762306a36Sopenharmony_ci * Copyright (C) 2007 John Williams <jwilliams@itee.uq.edu.au> 862306a36Sopenharmony_ci */ 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#ifndef _ASM_MICROBLAZE_CPUINFO_H 1162306a36Sopenharmony_ci#define _ASM_MICROBLAZE_CPUINFO_H 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci#include <linux/of.h> 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci/* CPU Version and FPGA Family code conversion table type */ 1662306a36Sopenharmony_cistruct cpu_ver_key { 1762306a36Sopenharmony_ci const char *s; 1862306a36Sopenharmony_ci const unsigned k; 1962306a36Sopenharmony_ci}; 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ciextern const struct cpu_ver_key cpu_ver_lookup[]; 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_cistruct family_string_key { 2462306a36Sopenharmony_ci const char *s; 2562306a36Sopenharmony_ci const unsigned k; 2662306a36Sopenharmony_ci}; 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_ciextern const struct family_string_key family_string_lookup[]; 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_cistruct cpuinfo { 3162306a36Sopenharmony_ci /* Core CPU configuration */ 3262306a36Sopenharmony_ci u32 use_instr; 3362306a36Sopenharmony_ci u32 use_mult; 3462306a36Sopenharmony_ci u32 use_fpu; 3562306a36Sopenharmony_ci u32 use_exc; 3662306a36Sopenharmony_ci u32 ver_code; 3762306a36Sopenharmony_ci u32 mmu; 3862306a36Sopenharmony_ci u32 mmu_privins; 3962306a36Sopenharmony_ci u32 endian; 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ci /* CPU caches */ 4262306a36Sopenharmony_ci u32 use_icache; 4362306a36Sopenharmony_ci u32 icache_tagbits; 4462306a36Sopenharmony_ci u32 icache_write; 4562306a36Sopenharmony_ci u32 icache_line_length; 4662306a36Sopenharmony_ci u32 icache_size; 4762306a36Sopenharmony_ci unsigned long icache_base; 4862306a36Sopenharmony_ci unsigned long icache_high; 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ci u32 use_dcache; 5162306a36Sopenharmony_ci u32 dcache_tagbits; 5262306a36Sopenharmony_ci u32 dcache_write; 5362306a36Sopenharmony_ci u32 dcache_line_length; 5462306a36Sopenharmony_ci u32 dcache_size; 5562306a36Sopenharmony_ci u32 dcache_wb; 5662306a36Sopenharmony_ci unsigned long dcache_base; 5762306a36Sopenharmony_ci unsigned long dcache_high; 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_ci /* Bus connections */ 6062306a36Sopenharmony_ci u32 use_dopb; 6162306a36Sopenharmony_ci u32 use_iopb; 6262306a36Sopenharmony_ci u32 use_dlmb; 6362306a36Sopenharmony_ci u32 use_ilmb; 6462306a36Sopenharmony_ci u32 num_fsl; 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_ci /* CPU interrupt line info */ 6762306a36Sopenharmony_ci u32 irq_edge; 6862306a36Sopenharmony_ci u32 irq_positive; 6962306a36Sopenharmony_ci 7062306a36Sopenharmony_ci u32 area_optimised; 7162306a36Sopenharmony_ci 7262306a36Sopenharmony_ci /* HW debug support */ 7362306a36Sopenharmony_ci u32 hw_debug; 7462306a36Sopenharmony_ci u32 num_pc_brk; 7562306a36Sopenharmony_ci u32 num_rd_brk; 7662306a36Sopenharmony_ci u32 num_wr_brk; 7762306a36Sopenharmony_ci u32 cpu_clock_freq; /* store real freq of cpu */ 7862306a36Sopenharmony_ci 7962306a36Sopenharmony_ci /* FPGA family */ 8062306a36Sopenharmony_ci u32 fpga_family_code; 8162306a36Sopenharmony_ci 8262306a36Sopenharmony_ci /* User define */ 8362306a36Sopenharmony_ci u32 pvr_user1; 8462306a36Sopenharmony_ci u32 pvr_user2; 8562306a36Sopenharmony_ci}; 8662306a36Sopenharmony_ci 8762306a36Sopenharmony_ciextern struct cpuinfo cpuinfo; 8862306a36Sopenharmony_ci 8962306a36Sopenharmony_ci/* fwd declarations of the various CPUinfo populators */ 9062306a36Sopenharmony_civoid setup_cpuinfo(void); 9162306a36Sopenharmony_civoid setup_cpuinfo_clk(void); 9262306a36Sopenharmony_ci 9362306a36Sopenharmony_civoid set_cpuinfo_static(struct cpuinfo *ci, struct device_node *cpu); 9462306a36Sopenharmony_civoid set_cpuinfo_pvr_full(struct cpuinfo *ci, struct device_node *cpu); 9562306a36Sopenharmony_ci 9662306a36Sopenharmony_cistatic inline unsigned int fcpu(struct device_node *cpu, char *n) 9762306a36Sopenharmony_ci{ 9862306a36Sopenharmony_ci u32 val = 0; 9962306a36Sopenharmony_ci 10062306a36Sopenharmony_ci of_property_read_u32(cpu, n, &val); 10162306a36Sopenharmony_ci 10262306a36Sopenharmony_ci return val; 10362306a36Sopenharmony_ci} 10462306a36Sopenharmony_ci 10562306a36Sopenharmony_ci#endif /* _ASM_MICROBLAZE_CPUINFO_H */ 106