* [PATCH] - new macros for SGI SN simulator
@ 2005-05-10 15:00 Jack Steiner
2005-05-10 15:19 ` Robin Holt
0 siblings, 1 reply; 2+ messages in thread
From: Jack Steiner @ 2005-05-10 15:00 UTC (permalink / raw)
To: linux-ia64
Tony - please apply
This patch changes some macros that are used when running kernel on the
SGI simulator. All changes are contained in the SGI SN portion of the
tree.
Signed-off-by: Jack Steiner <steiner@sgi.com>
arch/ia64/sn/kernel/io_init.c | 2 +-
arch/ia64/sn/kernel/setup.c | 25 ++++++++++++++++++-------
include/asm-ia64/sn/simulator.h | 13 +++++++------
include/asm-ia64/sn/sn_sal.h | 10 ++++++++++
4 files changed, 36 insertions(+), 14 deletions(-)
Index: linux/include/asm-ia64/sn/sn_sal.h
=================================--- linux.orig/include/asm-ia64/sn/sn_sal.h 2005-05-07 06:44:16.208518885 -0500
+++ linux/include/asm-ia64/sn/sn_sal.h 2005-05-10 09:44:27.353279267 -0500
@@ -115,6 +115,8 @@
#define SAL_IROUTER_INTR_XMIT SAL_CONSOLE_INTR_XMIT
#define SAL_IROUTER_INTR_RECV SAL_CONSOLE_INTR_RECV
+#define SN_SAL_FAKE_PROM 0x02009999
+
/*
* SAL Error Codes
@@ -1052,4 +1054,12 @@ ia64_sn_bte_recovery(nasid_t nasid)
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 */
Index: linux/arch/ia64/sn/kernel/io_init.c
=================================--- linux.orig/arch/ia64/sn/kernel/io_init.c 2005-05-07 06:44:08.153921123 -0500
+++ linux/arch/ia64/sn/kernel/io_init.c 2005-05-10 09:44:27.355232368 -0500
@@ -382,7 +382,7 @@ static int __init sn_pci_init(void)
extern void register_sn_procfs(void);
#endif
- if (!ia64_platform_is("sn2") || IS_RUNNING_ON_SIMULATOR())
+ if (!ia64_platform_is("sn2") || IS_RUNNING_ON_FAKE_PROM())
return 0;
/*
Index: linux/arch/ia64/sn/kernel/setup.c
=================================--- linux.orig/arch/ia64/sn/kernel/setup.c 2005-05-10 09:43:17.579741351 -0500
+++ linux/arch/ia64/sn/kernel/setup.c 2005-05-10 09:50:14.892888127 -0500
@@ -89,6 +89,7 @@ u8 sn_coherency_id;
EXPORT_SYMBOL(sn_coherency_id);
u8 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];
@@ -342,7 +343,7 @@ void __init sn_setup(char **cmdline_p)
ia64_mark_idle = &snidle;
- /*
+ /*
* For the bootcpu, we do this here. All other cpus will make the
* call as part of cpu_init in slave cpu initialization.
*/
@@ -389,7 +390,7 @@ static void __init sn_init_pdas(char **c
nodepdaindr[cnode] alloc_bootmem_node(NODE_DATA(cnode), 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));
}
@@ -419,7 +420,7 @@ static void __init sn_init_pdas(char **c
}
/*
- * Initialize the per node hubdev. This includes IO Nodes and
+ * Initialize the per node hubdev. This includes IO Nodes and
* headless/memless nodes.
*/
for (cnode = 0; cnode < numionodes; cnode++) {
@@ -447,6 +448,14 @@ void __init sn_cpu_init(void)
int i;
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));
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,
@@ -508,7 +517,7 @@ void __init sn_cpu_init(void)
*/
{
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};
u64 *pio;
pio = is_shub1() ? pio1 : pio2;
@@ -540,6 +549,10 @@ static void __init scan_for_ionodes(void
int nasid = 0;
lboard_t *brd;
+ /* fakeprom does not support klgraph */
+ if (IS_RUNNING_ON_FAKE_PROM())
+ return;
+
/* Setup ionodes with memory */
for (nasid = 0; nasid < MAX_PHYSNODE_ID; nasid += 2) {
char *klgraph_header;
@@ -551,8 +564,6 @@ static void __init scan_for_ionodes(void
cnodeid = -1;
klgraph_header = __va(ia64_sn_get_klconfig_addr(nasid));
if (!klgraph_header) {
- if (IS_RUNNING_ON_SIMULATOR())
- continue;
BUG(); /* All nodes must have klconfig tables! */
}
cnodeid = nasid_to_cnodeid(nasid);
@@ -622,7 +633,7 @@ nasid_slice_to_cpuid(int nasid, int slic
{
long cpu;
- for (cpu=0; cpu < NR_CPUS; cpu++)
+ for (cpu=0; cpu < NR_CPUS; cpu++)
if (nodepda->phys_cpuid[cpu].nasid = nasid && nodepda->phys_cpuid[cpu].slice = slice)
return cpu;
Index: linux/include/asm-ia64/sn/simulator.h
=================================--- linux.orig/include/asm-ia64/sn/simulator.h 2005-05-07 06:44:16.202659576 -0500
+++ linux/include/asm-ia64/sn/simulator.h 2005-05-10 09:44:27.362068219 -0500
@@ -10,16 +10,17 @@
#include <linux/config.h>
-#ifdef CONFIG_IA64_SGI_SN_SIM
-
#define SNMAGIC 0xaeeeeeee8badbeefL
-#define IS_RUNNING_ON_SIMULATOR() ({long sn; asm("mov %0=cpuid[%1]" : "=r"(sn) : "r"(2)); sn = SNMAGIC;})
-
-#define SIMULATOR_SLEEP() asm("nop.i 0x8beef")
+#define IS_MEDUSA() ({long sn; asm("mov %0=cpuid[%1]" : "=r"(sn) : "r"(2)); sn = SNMAGIC;})
+#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
-
#define IS_RUNNING_ON_SIMULATOR() (0)
+#define IS_RUNNING_ON_FAKE_PROM() (0)
#define SIMULATOR_SLEEP()
#endif
--
Thanks
Jack Steiner (steiner@sgi.com) 651-683-5302
Principal Engineer SGI - Silicon Graphics, Inc.
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH] - new macros for SGI SN simulator
2005-05-10 15:00 [PATCH] - new macros for SGI SN simulator Jack Steiner
@ 2005-05-10 15:19 ` Robin Holt
0 siblings, 0 replies; 2+ messages in thread
From: Robin Holt @ 2005-05-10 15:19 UTC (permalink / raw)
To: linux-ia64
Jack,
How about cleaning up all the whitespace problems in the nasid_slice_to_cpuid()
function. There is a trailing tab following the long cpu; declaration.
Sorry for nit-picking,
Robin
> @@ -622,7 +633,7 @@ nasid_slice_to_cpuid(int nasid, int slic
> {
> long cpu;
>
^^^^^^ Right there.
> - for (cpu=0; cpu < NR_CPUS; cpu++)
> + for (cpu=0; cpu < NR_CPUS; cpu++)
> if (nodepda->phys_cpuid[cpu].nasid = nasid && nodepda->phys_cpuid[cpu].slice = slice)
> return cpu;
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2005-05-10 15:19 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-05-10 15:00 [PATCH] - new macros for SGI SN simulator Jack Steiner
2005-05-10 15:19 ` Robin Holt
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.