[IA64-SGI] - new macros for SGI SN simulator
This patch changes some macros that are used when running kernel on the SGI simulator. Signed-off-by: Jack Steiner <steiner@sgi.com> Signed-off-by: Tony Luck <tony.luck@intel.com>
This commit is contained in:
@@ -384,7 +384,7 @@ static int __init sn_pci_init(void)
|
|||||||
extern void register_sn_procfs(void);
|
extern void register_sn_procfs(void);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!ia64_platform_is("sn2") || IS_RUNNING_ON_SIMULATOR())
|
if (!ia64_platform_is("sn2") || IS_RUNNING_ON_FAKE_PROM())
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -96,6 +96,7 @@ u8 sn_coherency_id;
|
|||||||
EXPORT_SYMBOL(sn_coherency_id);
|
EXPORT_SYMBOL(sn_coherency_id);
|
||||||
u8 sn_region_size;
|
u8 sn_region_size;
|
||||||
EXPORT_SYMBOL(sn_region_size);
|
EXPORT_SYMBOL(sn_region_size);
|
||||||
|
int sn_prom_type; /* 0=hardware, 1=medusa/realprom, 2=medusa/fakeprom */
|
||||||
|
|
||||||
short physical_node_map[MAX_PHYSNODE_ID];
|
short physical_node_map[MAX_PHYSNODE_ID];
|
||||||
|
|
||||||
@@ -354,7 +355,7 @@ void __init sn_setup(char **cmdline_p)
|
|||||||
|
|
||||||
ia64_mark_idle = &snidle;
|
ia64_mark_idle = &snidle;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* For the bootcpu, we do this here. All other cpus will make the
|
* For the bootcpu, we do this here. All other cpus will make the
|
||||||
* call as part of cpu_init in slave cpu initialization.
|
* call as part of cpu_init in slave cpu initialization.
|
||||||
*/
|
*/
|
||||||
@@ -401,7 +402,7 @@ static void __init sn_init_pdas(char **cmdline_p)
|
|||||||
nodepdaindr[cnode] =
|
nodepdaindr[cnode] =
|
||||||
alloc_bootmem_node(NODE_DATA(cnode), sizeof(nodepda_t));
|
alloc_bootmem_node(NODE_DATA(cnode), sizeof(nodepda_t));
|
||||||
memset(nodepdaindr[cnode], 0, sizeof(nodepda_t));
|
memset(nodepdaindr[cnode], 0, sizeof(nodepda_t));
|
||||||
memset(nodepdaindr[cnode]->phys_cpuid, -1,
|
memset(nodepdaindr[cnode]->phys_cpuid, -1,
|
||||||
sizeof(nodepdaindr[cnode]->phys_cpuid));
|
sizeof(nodepdaindr[cnode]->phys_cpuid));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -431,7 +432,7 @@ static void __init sn_init_pdas(char **cmdline_p)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initialize the per node hubdev. This includes IO Nodes and
|
* Initialize the per node hubdev. This includes IO Nodes and
|
||||||
* headless/memless nodes.
|
* headless/memless nodes.
|
||||||
*/
|
*/
|
||||||
for (cnode = 0; cnode < numionodes; cnode++) {
|
for (cnode = 0; cnode < numionodes; cnode++) {
|
||||||
@@ -459,6 +460,14 @@ void __init sn_cpu_init(void)
|
|||||||
int i;
|
int i;
|
||||||
static int wars_have_been_checked;
|
static int wars_have_been_checked;
|
||||||
|
|
||||||
|
if (smp_processor_id() == 0 && IS_MEDUSA()) {
|
||||||
|
if (ia64_sn_is_fake_prom())
|
||||||
|
sn_prom_type = 2;
|
||||||
|
else
|
||||||
|
sn_prom_type = 1;
|
||||||
|
printk("Running on medusa with %s PROM\n", (sn_prom_type == 1) ? "real" : "fake");
|
||||||
|
}
|
||||||
|
|
||||||
memset(pda, 0, sizeof(pda));
|
memset(pda, 0, sizeof(pda));
|
||||||
if (ia64_sn_get_sn_info(0, &sn_hub_info->shub2, &sn_hub_info->nasid_bitmask, &sn_hub_info->nasid_shift,
|
if (ia64_sn_get_sn_info(0, &sn_hub_info->shub2, &sn_hub_info->nasid_bitmask, &sn_hub_info->nasid_shift,
|
||||||
&sn_system_size, &sn_sharing_domain_size, &sn_partition_id,
|
&sn_system_size, &sn_sharing_domain_size, &sn_partition_id,
|
||||||
@@ -524,7 +533,7 @@ void __init sn_cpu_init(void)
|
|||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
u64 pio1[] = {SH1_PIO_WRITE_STATUS_0, 0, SH1_PIO_WRITE_STATUS_1, 0};
|
u64 pio1[] = {SH1_PIO_WRITE_STATUS_0, 0, SH1_PIO_WRITE_STATUS_1, 0};
|
||||||
u64 pio2[] = {SH2_PIO_WRITE_STATUS_0, SH2_PIO_WRITE_STATUS_1,
|
u64 pio2[] = {SH2_PIO_WRITE_STATUS_0, SH2_PIO_WRITE_STATUS_1,
|
||||||
SH2_PIO_WRITE_STATUS_2, SH2_PIO_WRITE_STATUS_3};
|
SH2_PIO_WRITE_STATUS_2, SH2_PIO_WRITE_STATUS_3};
|
||||||
u64 *pio;
|
u64 *pio;
|
||||||
pio = is_shub1() ? pio1 : pio2;
|
pio = is_shub1() ? pio1 : pio2;
|
||||||
@@ -556,6 +565,10 @@ static void __init scan_for_ionodes(void)
|
|||||||
int nasid = 0;
|
int nasid = 0;
|
||||||
lboard_t *brd;
|
lboard_t *brd;
|
||||||
|
|
||||||
|
/* fakeprom does not support klgraph */
|
||||||
|
if (IS_RUNNING_ON_FAKE_PROM())
|
||||||
|
return;
|
||||||
|
|
||||||
/* Setup ionodes with memory */
|
/* Setup ionodes with memory */
|
||||||
for (nasid = 0; nasid < MAX_PHYSNODE_ID; nasid += 2) {
|
for (nasid = 0; nasid < MAX_PHYSNODE_ID; nasid += 2) {
|
||||||
char *klgraph_header;
|
char *klgraph_header;
|
||||||
@@ -567,8 +580,6 @@ static void __init scan_for_ionodes(void)
|
|||||||
cnodeid = -1;
|
cnodeid = -1;
|
||||||
klgraph_header = __va(ia64_sn_get_klconfig_addr(nasid));
|
klgraph_header = __va(ia64_sn_get_klconfig_addr(nasid));
|
||||||
if (!klgraph_header) {
|
if (!klgraph_header) {
|
||||||
if (IS_RUNNING_ON_SIMULATOR())
|
|
||||||
continue;
|
|
||||||
BUG(); /* All nodes must have klconfig tables! */
|
BUG(); /* All nodes must have klconfig tables! */
|
||||||
}
|
}
|
||||||
cnodeid = nasid_to_cnodeid(nasid);
|
cnodeid = nasid_to_cnodeid(nasid);
|
||||||
@@ -634,8 +645,8 @@ int
|
|||||||
nasid_slice_to_cpuid(int nasid, int slice)
|
nasid_slice_to_cpuid(int nasid, int slice)
|
||||||
{
|
{
|
||||||
long cpu;
|
long cpu;
|
||||||
|
|
||||||
for (cpu=0; cpu < NR_CPUS; cpu++)
|
for (cpu=0; cpu < NR_CPUS; cpu++)
|
||||||
if (cpuid_to_nasid(cpu) == nasid &&
|
if (cpuid_to_nasid(cpu) == nasid &&
|
||||||
cpuid_to_slice(cpu) == slice)
|
cpuid_to_slice(cpu) == slice)
|
||||||
return cpu;
|
return cpu;
|
||||||
|
@@ -10,16 +10,17 @@
|
|||||||
|
|
||||||
#include <linux/config.h>
|
#include <linux/config.h>
|
||||||
|
|
||||||
#ifdef CONFIG_IA64_SGI_SN_SIM
|
|
||||||
|
|
||||||
#define SNMAGIC 0xaeeeeeee8badbeefL
|
#define SNMAGIC 0xaeeeeeee8badbeefL
|
||||||
#define IS_RUNNING_ON_SIMULATOR() ({long sn; asm("mov %0=cpuid[%1]" : "=r"(sn) : "r"(2)); sn == SNMAGIC;})
|
#define IS_MEDUSA() ({long sn; asm("mov %0=cpuid[%1]" : "=r"(sn) : "r"(2)); sn == SNMAGIC;})
|
||||||
|
|
||||||
#define SIMULATOR_SLEEP() asm("nop.i 0x8beef")
|
|
||||||
|
|
||||||
|
#ifdef CONFIG_IA64_SGI_SN_SIM
|
||||||
|
#define SIMULATOR_SLEEP() asm("nop.i 0x8beef")
|
||||||
|
#define IS_RUNNING_ON_SIMULATOR() (sn_prom_type)
|
||||||
|
#define IS_RUNNING_ON_FAKE_PROM() (sn_prom_type == 2)
|
||||||
|
extern int sn_prom_type; /* 0=hardware, 1=medusa/realprom, 2=medusa/fakeprom */
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#define IS_RUNNING_ON_SIMULATOR() (0)
|
#define IS_RUNNING_ON_SIMULATOR() (0)
|
||||||
|
#define IS_RUNNING_ON_FAKE_PROM() (0)
|
||||||
#define SIMULATOR_SLEEP()
|
#define SIMULATOR_SLEEP()
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -132,6 +132,8 @@
|
|||||||
#define SALRET_INVALID_ARG (-2)
|
#define SALRET_INVALID_ARG (-2)
|
||||||
#define SALRET_ERROR (-3)
|
#define SALRET_ERROR (-3)
|
||||||
|
|
||||||
|
#define SN_SAL_FAKE_PROM 0x02009999
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* sn_sal_rev_major - get the major SGI SAL revision number
|
* sn_sal_rev_major - get the major SGI SAL revision number
|
||||||
@@ -1105,4 +1107,12 @@ ia64_sn_bte_recovery(nasid_t nasid)
|
|||||||
return (int) rv.status;
|
return (int) rv.status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline int
|
||||||
|
ia64_sn_is_fake_prom(void)
|
||||||
|
{
|
||||||
|
struct ia64_sal_retval rv;
|
||||||
|
SAL_CALL_NOLOCK(rv, SN_SAL_FAKE_PROM, 0, 0, 0, 0, 0, 0, 0);
|
||||||
|
return (rv.status == 0);
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* _ASM_IA64_SN_SN_SAL_H */
|
#endif /* _ASM_IA64_SN_SN_SAL_H */
|
||||||
|
Reference in New Issue
Block a user