forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
1.7 KiB
74 lines
1.7 KiB
/* SPDX-License-Identifier: GPL-2.0 */ |
|
#ifndef _ASM_MACH_LOONGSON64_CPUCFG_EMUL_H_ |
|
#define _ASM_MACH_LOONGSON64_CPUCFG_EMUL_H_ |
|
|
|
#include <asm/cpu-info.h> |
|
|
|
#ifdef CONFIG_CPU_LOONGSON3_CPUCFG_EMULATION |
|
|
|
#include <loongson_regs.h> |
|
|
|
#define LOONGSON_FPREV_MASK 0x7 |
|
|
|
void loongson3_cpucfg_synthesize_data(struct cpuinfo_mips *c); |
|
|
|
static inline bool loongson3_cpucfg_emulation_enabled(struct cpuinfo_mips *c) |
|
{ |
|
/* All supported cores have non-zero LOONGSON_CFG1 data. */ |
|
return c->loongson3_cpucfg_data[0] != 0; |
|
} |
|
|
|
static inline u32 loongson3_cpucfg_read_synthesized(struct cpuinfo_mips *c, |
|
__u64 sel) |
|
{ |
|
switch (sel) { |
|
case LOONGSON_CFG0: |
|
return c->processor_id; |
|
case LOONGSON_CFG1: |
|
case LOONGSON_CFG2: |
|
case LOONGSON_CFG3: |
|
return c->loongson3_cpucfg_data[sel - 1]; |
|
case LOONGSON_CFG4: |
|
case LOONGSON_CFG5: |
|
/* CPUCFG selects 4 and 5 are related to the input clock |
|
* signal. |
|
* |
|
* Unimplemented for now. |
|
*/ |
|
return 0; |
|
case LOONGSON_CFG6: |
|
/* CPUCFG select 6 is for the undocumented Safe Extension. */ |
|
return 0; |
|
case LOONGSON_CFG7: |
|
/* CPUCFG select 7 is for the virtualization extension. |
|
* We don't know if the two currently known features are |
|
* supported on older cores according to the public |
|
* documentation, so leave this at zero. |
|
*/ |
|
return 0; |
|
} |
|
|
|
/* |
|
* Return 0 for unrecognized CPUCFG selects, which is real hardware |
|
* behavior observed on Loongson 3A R4. |
|
*/ |
|
return 0; |
|
} |
|
#else |
|
static inline void loongson3_cpucfg_synthesize_data(struct cpuinfo_mips *c) |
|
{ |
|
} |
|
|
|
static inline bool loongson3_cpucfg_emulation_enabled(struct cpuinfo_mips *c) |
|
{ |
|
return false; |
|
} |
|
|
|
static inline u32 loongson3_cpucfg_read_synthesized(struct cpuinfo_mips *c, |
|
__u64 sel) |
|
{ |
|
return 0; |
|
} |
|
#endif |
|
|
|
#endif /* _ASM_MACH_LOONGSON64_CPUCFG_EMUL_H_ */
|
|
|