Skip to contentSkip to conversation

- SN support for older versions of PROM

PATCH In review Jack Steiner 2 participants 3 messages Nov 18, 2005

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 - SN support for older versions of PROM

Add support for old versions of SN PROMs. Eventually this support will be deleted but it is useful right now to continue supporting older PROMs.

(The support for older PROMs use to be in the tree. It was deleted by accident).

Index: linux/include/asm/sn/sn_sal.h
=================================--- linux.orig/include/asm/sn/sn_sal.h 2005-11-17 22:38:30.741828181 -0600
+++ linux/include/asm/sn/sn_sal.h 2005-11-18 09:06:12.328192683 -0600
@@ -1018,6 +1018,24 @@ ia64_sn_get_sn_info(int fc, u8 *shubtype
ret_stuff.v2 = 0;
SAL_CALL_NOLOCK(ret_stuff, SN_SAL_GET_SN_INFO, fc, 0, 0, 0, 0, 0, 0);

+/***** BEGIN HACK - temp til old proms no longer supported ********/
+ if (ret_stuff.status = SALRET_NOT_IMPLEMENTED) {
+ int nasid = get_sapicid() & 0xfff;;
+#define SH_SHUB_ID_NODES_PER_BIT_MASK 0x001f000000000000UL +#define SH_SHUB_ID_NODES_PER_BIT_SHFT 48
+ if (shubtype) *shubtype = 0;
+ if (nasid_bitmask) *nasid_bitmask = 0x7ff;
+ if (nasid_shift) *nasid_shift = 38;
+ if (systemsize) *systemsize = 10;
+ if (sharing_domain_size) *sharing_domain_size = 8;
+ if (partid) *partid = sn_partition_serial_number;
+ if (coher) *coher = nasid >> 9;
+ if (reg) *reg = (HUB_L((u64 *) LOCAL_MMR_ADDR(SH1_SHUB_ID)) &
+ SH_SHUB_ID_NODES_PER_BIT_MASK) >> SH_SHUB_ID_NODES_PER_BIT_SHFT;
+ return 0;
+ }
+/***** END HACK *******/
+
if (ret_stuff.status < 0)
return ret_stuff.status;

#1 lore raw

Jack,

Is that really necessary? The newer PROMs have other important fixes. They are available from supportfolio for free download (Given with an annoying registration). Why not just have people upgrade.

I realize I am being a little unreasonable, but...

Quoted 15 lines · Jack Steiner

Add support for old versions of SN PROMs. Eventually this support will be deleted but it is useful right now to continue supporting older PROMs.

(The support for older PROMs use to be in the tree. It was deleted by accident).

Index: linux/include/asm/sn/sn_sal.h
=================================> --- linux.orig/include/asm/sn/sn_sal.h 2005-11-17 22:38:30.741828181 -0600
+++ linux/include/asm/sn/sn_sal.h 2005-11-18 09:06:12.328192683 -0600

Review ia64_sn_get_sn_info(int fc, u8 *shubtype · line 1024

Quoted 7 lines
(quoted diff) +4 -0
@@ -1018,6 +1018,24 @@ ia64_sn_get_sn_info(int fc, u8 *shubtype
 	ret_stuff.v2 = 0;
 	SAL_CALL_NOLOCK(ret_stuff, SN_SAL_GET_SN_INFO, fc, 0, 0, 0, 0, 0, 0);
 
+/***** BEGIN HACK - temp til old proms no longer supported ********/
+	if (ret_stuff.status = SALRET_NOT_IMPLEMENTED) {
+		int nasid = get_sapicid() & 0xfff;;
+#define SH_SHUB_ID_NODES_PER_BIT_MASK 0x001f000000000000UL                                               

Trailing whitespace!

Review ia64_sn_get_sn_info(int fc, u8 *shubtype · line 1025

Quoted 1 line
(quoted diff) +1 -0
+#define SH_SHUB_ID_NODES_PER_BIT_SHFT 48                                                               

Trailing whitespace!

Review ia64_sn_get_sn_info(int fc, u8 *shubtype · line 1033

Quoted 8 lines
(quoted diff) +8 -0
+		if (shubtype) *shubtype = 0;
+		if (nasid_bitmask) *nasid_bitmask = 0x7ff;
+		if (nasid_shift) *nasid_shift = 38;
+		if (systemsize) *systemsize = 10;
+		if (sharing_domain_size) *sharing_domain_size = 8;
+		if (partid) *partid = sn_partition_serial_number;
+		if (coher) *coher = nasid >> 9;
+		if (reg) *reg = (HUB_L((u64 *) LOCAL_MMR_ADDR(SH1_SHUB_ID)) & 

Trailing whitespace!

Review ia64_sn_get_sn_info(int fc, u8 *shubtype · line 1041

Quoted 8 lines
(quoted diff) +5 -0
+				 SH_SHUB_ID_NODES_PER_BIT_MASK) >> SH_SHUB_ID_NODES_PER_BIT_SHFT;
+		return 0;
+	}
+/***** END HACK *******/
+
 	if (ret_stuff.status < 0)
 		return ret_stuff.status;
 

Thanks,
Robin

#2 lore raw

PATCH 1/1 - SN support for older versions of PROM - second try

In reply to Jack Steiner

Second try. I missed some code for supporting partitioned systems in the first patch.

Add support for old versions of the SN PROMs. Eventually this support will be deleted but it is useful right now to continue supporting older PROMs.

Index: linux/include/asm-ia64/sn/sn_sal.h
=================================--- linux.orig/include/asm-ia64/sn/sn_sal.h 2005-11-18 08:21:42.608445510 -0600
+++ linux/include/asm-ia64/sn/sn_sal.h 2005-11-18 10:27:29.460540516 -0600
@@ -56,6 +56,7 @@

 #define  SN_SAL_BUS_CONFIG		   	   0x02000037
 #define  SN_SAL_SYS_SERIAL_GET			   0x02000038
 #define  SN_SAL_PARTITION_SERIAL_GET		   0x02000039
+#define  SN_SAL_SYSCTL_PARTITION_GET               0x0200003a
 #define  SN_SAL_SYSTEM_POWER_DOWN		   0x0200003b
 #define  SN_SAL_GET_MASTER_BASEIO_NASID		   0x0200003c
 #define  SN_SAL_COHERENCE                          0x0200003d

@@ -581,6 +582,21 @@ sn_partition_serial_number_val(void) {
}

/*
+ * Returns the partition id of the nasid passed in as an argument,
+ * or INVALID_PARTID if the partition id cannot be retrieved.
+ */
+static inline partid_t
+ia64_sn_sysctl_partition_get(nasid_t nasid)
+{
+ struct ia64_sal_retval ret_stuff;
+ SAL_CALL(ret_stuff, SN_SAL_SYSCTL_PARTITION_GET, nasid,
+ 0, 0, 0, 0, 0, 0);
+ if (ret_stuff.status != 0)
+ return -1;
+ return ((partid_t)ret_stuff.v0);
+}
+
+/*
* Returns the physical address of the partition's reserved page through
* an iterative number of calls.
*
@@ -1018,6 +1034,24 @@ ia64_sn_get_sn_info(int fc, u8 *shubtype
ret_stuff.v2 = 0;
SAL_CALL_NOLOCK(ret_stuff, SN_SAL_GET_SN_INFO, fc, 0, 0, 0, 0, 0, 0);

+/***** BEGIN HACK - temp til old proms no longer supported ********/
+ if (ret_stuff.status = SALRET_NOT_IMPLEMENTED) {
+ int nasid = get_sapicid() & 0xfff;;
+#define SH_SHUB_ID_NODES_PER_BIT_MASK 0x001f000000000000UL +#define SH_SHUB_ID_NODES_PER_BIT_SHFT 48
+ if (shubtype) *shubtype = 0;
+ if (nasid_bitmask) *nasid_bitmask = 0x7ff;
+ if (nasid_shift) *nasid_shift = 38;
+ if (systemsize) *systemsize = 10;
+ if (sharing_domain_size) *sharing_domain_size = 8;
+ if (partid) *partid = ia64_sn_sysctl_partition_get(nasid);
+ if (coher) *coher = nasid >> 9;
+ if (reg) *reg = (HUB_L((u64 *) LOCAL_MMR_ADDR(SH1_SHUB_ID)) & SH_SHUB_ID_NODES_PER_BIT_MASK) >>
+ SH_SHUB_ID_NODES_PER_BIT_SHFT;
+ return 0;
+ }
+/***** END HACK *******/
+
if (ret_stuff.status < 0)
return ret_stuff.status;