mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 10:41:38 -04:00
[SPARC64]: Use machine description and OBP properly for cpu probing.
Signed-off-by: David S. Miller <[email protected]>
This commit is contained in:
parent
e01c0d6d8c
commit
5cbc307373
21 changed files with 992 additions and 394 deletions
|
|
@ -17,11 +17,11 @@
|
|||
typedef struct {
|
||||
/* Dcache line 1 */
|
||||
unsigned int __softirq_pending; /* must be 1st, see rtrap.S */
|
||||
unsigned int __pad0_1;
|
||||
unsigned int __pad0_2;
|
||||
unsigned int __pad1;
|
||||
unsigned int __pad0;
|
||||
unsigned long clock_tick; /* %tick's per second */
|
||||
unsigned long udelay_val;
|
||||
unsigned int __pad1;
|
||||
unsigned int __pad2;
|
||||
|
||||
/* Dcache line 2, rarely used */
|
||||
unsigned int dcache_size;
|
||||
|
|
@ -30,8 +30,8 @@ typedef struct {
|
|||
unsigned int icache_line_size;
|
||||
unsigned int ecache_size;
|
||||
unsigned int ecache_line_size;
|
||||
int core_id;
|
||||
unsigned int __pad3;
|
||||
unsigned int __pad4;
|
||||
} cpuinfo_sparc;
|
||||
|
||||
DECLARE_PER_CPU(cpuinfo_sparc, __cpu_data);
|
||||
|
|
@ -76,12 +76,18 @@ struct trap_per_cpu {
|
|||
|
||||
/* Dcache line 8: IRQ work list, and keep trap_block a power-of-2 in size. */
|
||||
unsigned int irq_worklist;
|
||||
unsigned int __pad1;
|
||||
unsigned long __pad2[3];
|
||||
unsigned int cpu_mondo_qmask;
|
||||
unsigned int dev_mondo_qmask;
|
||||
unsigned int resum_qmask;
|
||||
unsigned int nonresum_qmask;
|
||||
unsigned int __pad2[3];
|
||||
} __attribute__((aligned(64)));
|
||||
extern struct trap_per_cpu trap_block[NR_CPUS];
|
||||
extern void init_cur_cpu_trap(struct thread_info *);
|
||||
extern void setup_tba(void);
|
||||
extern int ncpus_probed;
|
||||
|
||||
extern unsigned long real_hard_smp_processor_id(void);
|
||||
|
||||
struct cpuid_patch_entry {
|
||||
unsigned int addr;
|
||||
|
|
@ -122,6 +128,10 @@ extern struct sun4v_2insn_patch_entry __sun4v_2insn_patch,
|
|||
#define TRAP_PER_CPU_TSB_HUGE 0xd0
|
||||
#define TRAP_PER_CPU_TSB_HUGE_TEMP 0xd8
|
||||
#define TRAP_PER_CPU_IRQ_WORKLIST 0xe0
|
||||
#define TRAP_PER_CPU_CPU_MONDO_QMASK 0xe4
|
||||
#define TRAP_PER_CPU_DEV_MONDO_QMASK 0xe8
|
||||
#define TRAP_PER_CPU_RESUM_QMASK 0xec
|
||||
#define TRAP_PER_CPU_NONRESUM_QMASK 0xf0
|
||||
|
||||
#define TRAP_BLOCK_SZ_SHIFT 8
|
||||
|
||||
|
|
|
|||
|
|
@ -120,6 +120,11 @@
|
|||
*/
|
||||
#define HV_FAST_MACH_DESC 0x01
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
extern unsigned long sun4v_mach_desc(unsigned long buffer_pa, unsigned long buf_len,
|
||||
unsigned long *real_buf_len);
|
||||
#endif
|
||||
|
||||
/* mach_exit()
|
||||
* TRAP: HV_FAST_TRAP
|
||||
* FUNCTION: HV_FAST_MACH_SIR
|
||||
|
|
|
|||
39
include/asm-sparc64/mdesc.h
Normal file
39
include/asm-sparc64/mdesc.h
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
#ifndef _SPARC64_MDESC_H
|
||||
#define _SPARC64_MDESC_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <asm/prom.h>
|
||||
|
||||
struct mdesc_node;
|
||||
struct mdesc_arc {
|
||||
const char *name;
|
||||
struct mdesc_node *arc;
|
||||
};
|
||||
|
||||
struct mdesc_node {
|
||||
const char *name;
|
||||
u64 node;
|
||||
unsigned int unique_id;
|
||||
unsigned int num_arcs;
|
||||
struct property *properties;
|
||||
struct mdesc_node *hash_next;
|
||||
struct mdesc_node *allnodes_next;
|
||||
struct mdesc_arc arcs[0];
|
||||
};
|
||||
|
||||
extern struct mdesc_node *md_find_node_by_name(struct mdesc_node *from,
|
||||
const char *name);
|
||||
#define md_for_each_node_by_name(__mn, __name) \
|
||||
for (__mn = md_find_node_by_name(NULL, __name); __mn; \
|
||||
__mn = md_find_node_by_name(__mn, __name))
|
||||
|
||||
extern struct property *md_find_property(const struct mdesc_node *mp,
|
||||
const char *name,
|
||||
int *lenp);
|
||||
extern const void *md_get_property(const struct mdesc_node *mp,
|
||||
const char *name,
|
||||
int *lenp);
|
||||
|
||||
extern void sun4v_mdesc_init(void);
|
||||
|
||||
#endif
|
||||
|
|
@ -319,11 +319,6 @@ extern int prom_inst2pkg(int);
|
|||
extern int prom_service_exists(const char *service_name);
|
||||
extern void prom_sun4v_guest_soft_state(void);
|
||||
|
||||
/* CPU probing helpers. */
|
||||
struct device_node;
|
||||
int cpu_find_by_instance(int instance, struct device_node **dev_node, int *mid);
|
||||
int cpu_find_by_mid(int mid, struct device_node **prom_node);
|
||||
|
||||
/* Client interface level routines. */
|
||||
extern void prom_set_trap_table(unsigned long tba);
|
||||
extern void prom_set_trap_table_sun4v(unsigned long tba, unsigned long mmfsa);
|
||||
|
|
|
|||
|
|
@ -5,7 +5,8 @@
|
|||
|
||||
#ifdef CONFIG_SMP
|
||||
|
||||
extern void setup_per_cpu_areas(void);
|
||||
#define setup_per_cpu_areas() do { } while (0)
|
||||
extern void real_setup_per_cpu_areas(void);
|
||||
|
||||
extern unsigned long __per_cpu_base;
|
||||
extern unsigned long __per_cpu_shift;
|
||||
|
|
@ -34,6 +35,7 @@ do { \
|
|||
} while (0)
|
||||
#else /* ! SMP */
|
||||
|
||||
#define real_setup_per_cpu_areas() do { } while (0)
|
||||
#define DEFINE_PER_CPU(type, name) \
|
||||
__typeof__(type) per_cpu__##name
|
||||
|
||||
|
|
|
|||
|
|
@ -90,6 +90,7 @@ extern struct device_node *of_find_compatible_node(struct device_node *from,
|
|||
const char *type, const char *compat);
|
||||
extern struct device_node *of_find_node_by_path(const char *path);
|
||||
extern struct device_node *of_find_node_by_phandle(phandle handle);
|
||||
extern struct device_node *of_find_node_by_cpuid(int cpuid);
|
||||
extern struct device_node *of_get_parent(const struct device_node *node);
|
||||
extern struct device_node *of_get_next_child(const struct device_node *node,
|
||||
struct device_node *prev);
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ extern cpumask_t cpu_sibling_map[NR_CPUS];
|
|||
extern int hard_smp_processor_id(void);
|
||||
#define raw_smp_processor_id() (current_thread_info()->cpu)
|
||||
|
||||
extern void smp_setup_cpu_possible_map(void);
|
||||
extern void smp_fill_in_sib_core_maps(void);
|
||||
extern unsigned char boot_cpu_id;
|
||||
|
||||
#endif /* !(__ASSEMBLY__) */
|
||||
|
|
@ -49,7 +49,7 @@ extern unsigned char boot_cpu_id;
|
|||
#else
|
||||
|
||||
#define hard_smp_processor_id() 0
|
||||
#define smp_setup_cpu_possible_map() do { } while (0)
|
||||
#define smp_fill_in_sib_core_maps() do { } while (0)
|
||||
#define boot_cpu_id (0)
|
||||
|
||||
#endif /* !(CONFIG_SMP) */
|
||||
|
|
|
|||
|
|
@ -6,4 +6,7 @@
|
|||
|
||||
#include <asm-generic/topology.h>
|
||||
|
||||
#define topology_core_id(cpu) (cpu_data(cpu).core_id)
|
||||
#define topology_thread_siblings(cpu) (cpu_sibling_map[cpu])
|
||||
|
||||
#endif /* _ASM_SPARC64_TOPOLOGY_H */
|
||||
|
|
|
|||
Loading…
Reference in a new issue