Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d67eb16f authored by Tony Luck's avatar Tony Luck
Browse files

Pull sn-features into release branch

parents c85b2a5f a1cddb88
Loading
Loading
Loading
Loading
+19 −11
Original line number Original line Diff line number Diff line
@@ -49,6 +49,7 @@
#include <asm/sn/clksupport.h>
#include <asm/sn/clksupport.h>
#include <asm/sn/sn_sal.h>
#include <asm/sn/sn_sal.h>
#include <asm/sn/geo.h>
#include <asm/sn/geo.h>
#include <asm/sn/sn_feature_sets.h>
#include "xtalk/xwidgetdev.h"
#include "xtalk/xwidgetdev.h"
#include "xtalk/hubdev.h"
#include "xtalk/hubdev.h"
#include <asm/sn/klconfig.h>
#include <asm/sn/klconfig.h>
@@ -97,6 +98,7 @@ EXPORT_SYMBOL(sn_region_size);
int sn_prom_type;	/* 0=hardware, 1=medusa/realprom, 2=medusa/fakeprom */
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];
static unsigned long sn_prom_features[MAX_PROM_FEATURE_SETS];


EXPORT_SYMBOL(physical_node_map);
EXPORT_SYMBOL(physical_node_map);


@@ -271,7 +273,10 @@ void __init sn_setup(char **cmdline_p)
	u32 version = sn_sal_rev();
	u32 version = sn_sal_rev();
	extern void sn_cpu_init(void);
	extern void sn_cpu_init(void);


	ia64_sn_plat_set_error_handling_features();
	ia64_sn_plat_set_error_handling_features();	// obsolete
	ia64_sn_set_os_feature(OSF_MCA_SLV_TO_OS_INIT_SLV);
	ia64_sn_set_os_feature(OSF_FEAT_LOG_SBES);



#if defined(CONFIG_VT) && defined(CONFIG_VGA_CONSOLE)
#if defined(CONFIG_VT) && defined(CONFIG_VGA_CONSOLE)
	/*
	/*
@@ -314,16 +319,6 @@ void __init sn_setup(char **cmdline_p)


	printk("SGI SAL version %x.%02x\n", version >> 8, version & 0x00FF);
	printk("SGI SAL version %x.%02x\n", version >> 8, version & 0x00FF);


	/*
	 * Confirm the SAL we're running on is recent enough...
	 */
	if (version < SN_SAL_MIN_VERSION) {
		printk(KERN_ERR "This kernel needs SGI SAL version >= "
		       "%x.%02x\n", SN_SAL_MIN_VERSION >> 8,
		        SN_SAL_MIN_VERSION & 0x00FF);
		panic("PROM version too old\n");
	}

	master_nasid = boot_get_nasid();
	master_nasid = boot_get_nasid();


	status =
	status =
@@ -480,6 +475,10 @@ void __init sn_cpu_init(void)
	if (nodepdaindr[0] == NULL)
	if (nodepdaindr[0] == NULL)
		return;
		return;


	for (i = 0; i < MAX_PROM_FEATURE_SETS; i++)
		if (ia64_sn_get_prom_feature_set(i, &sn_prom_features[i]) != 0)
			break;

	cpuid = smp_processor_id();
	cpuid = smp_processor_id();
	cpuphyid = get_sapicid();
	cpuphyid = get_sapicid();


@@ -651,3 +650,12 @@ nasid_slice_to_cpuid(int nasid, int slice)


	return -1;
	return -1;
}
}

int sn_prom_feature_available(int id)
{
	if (id >= BITS_PER_LONG * MAX_PROM_FEATURE_SETS)
		return 0;
	return test_bit(id, sn_prom_features);
}
EXPORT_SYMBOL(sn_prom_feature_available);
+57 −0
Original line number Original line Diff line number Diff line
#ifndef _ASM_IA64_SN_FEATURE_SETS_H
#define _ASM_IA64_SN_FEATURE_SETS_H

/*
 * SN PROM Features
 *
 * This file is subject to the terms and conditions of the GNU General Public
 * License.  See the file "COPYING" in the main directory of this archive
 * for more details.
 *
 * Copyright (c) 2005 Silicon Graphics, Inc.  All rights reserved.
 */


#include <asm/types.h>
#include <asm/bitops.h>

/* --------------------- PROM Features -----------------------------*/
extern int sn_prom_feature_available(int id);

#define MAX_PROM_FEATURE_SETS			2

/*
 * The following defines features that may or may not be supported by the
 * current PROM. The OS uses sn_prom_feature_available(feature) to test for
 * the presence of a PROM feature. Down rev (old) PROMs will always test
 * "false" for new features.
 *
 * Use:
 * 		if (sn_prom_feature_available(PRF_FEATURE_XXX))
 * 			...
 */

/*
 * Example: feature XXX
 */
#define PRF_FEATURE_XXX		0



/* --------------------- OS Features -------------------------------*/

/*
 * The following defines OS features that are optionally present in
 * the operating system.
 * During boot, PROM is notified of these features via a series of calls:
 *
 * 		ia64_sn_set_os_feature(feature1);
 *
 * Once enabled, a feature cannot be disabled.
 *
 * By default, features are disabled unless explicitly enabled.
 */
#define  OSF_MCA_SLV_TO_OS_INIT_SLV		0
#define  OSF_FEAT_LOG_SBES			1

#endif /* _ASM_IA64_SN_FEATURE_SETS_H */
+27 −9
Original line number Original line Diff line number Diff line
@@ -80,6 +80,9 @@
#define SN_SAL_RESERVED_DO_NOT_USE		   0x02000062
#define SN_SAL_RESERVED_DO_NOT_USE		   0x02000062
#define SN_SAL_IOIF_GET_PCI_TOPOLOGY		   0x02000064
#define SN_SAL_IOIF_GET_PCI_TOPOLOGY		   0x02000064


#define  SN_SAL_GET_PROM_FEATURE_SET		   0x02000065
#define  SN_SAL_SET_OS_FEATURE_SET		   0x02000066

/*
/*
 * Service-specific constants
 * Service-specific constants
 */
 */
@@ -118,8 +121,8 @@
/*
/*
 * Error Handling Features
 * Error Handling Features
 */
 */
#define SAL_ERR_FEAT_MCA_SLV_TO_OS_INIT_SLV	0x1
#define SAL_ERR_FEAT_MCA_SLV_TO_OS_INIT_SLV	0x1	// obsolete
#define SAL_ERR_FEAT_LOG_SBES			0x2
#define SAL_ERR_FEAT_LOG_SBES			0x2	// obsolete
#define SAL_ERR_FEAT_MFR_OVERRIDE		0x4
#define SAL_ERR_FEAT_MFR_OVERRIDE		0x4
#define SAL_ERR_FEAT_SBE_THRESHOLD		0xffff0000
#define SAL_ERR_FEAT_SBE_THRESHOLD		0xffff0000


@@ -151,12 +154,6 @@ sn_sal_rev(void)
	return (u32)(systab->sal_b_rev_major << 8 | systab->sal_b_rev_minor);
	return (u32)(systab->sal_b_rev_major << 8 | systab->sal_b_rev_minor);
}
}


/*
 * Specify the minimum PROM revsion required for this kernel.
 * Note that they're stored in hex format...
 */
#define SN_SAL_MIN_VERSION	0x0404

/*
/*
 * Returns the master console nasid, if the call fails, return an illegal
 * Returns the master console nasid, if the call fails, return an illegal
 * value.
 * value.
@@ -336,7 +333,7 @@ ia64_sn_plat_cpei_handler(void)
}
}


/*
/*
 * Set Error Handling Features
 * Set Error Handling Features	(Obsolete)
 */
 */
static inline u64
static inline u64
ia64_sn_plat_set_error_handling_features(void)
ia64_sn_plat_set_error_handling_features(void)
@@ -1052,4 +1049,25 @@ ia64_sn_is_fake_prom(void)
	return (rv.status == 0);
	return (rv.status == 0);
}
}


static inline int
ia64_sn_get_prom_feature_set(int set, unsigned long *feature_set)
{
	struct ia64_sal_retval rv;

	SAL_CALL_NOLOCK(rv, SN_SAL_GET_PROM_FEATURE_SET, set, 0, 0, 0, 0, 0, 0);
	if (rv.status != 0)
		return rv.status;
	*feature_set = rv.v0;
	return 0;
}

static inline int
ia64_sn_set_os_feature(int feature)
{
	struct ia64_sal_retval rv;

	SAL_CALL_NOLOCK(rv, SN_SAL_SET_OS_FEATURE_SET, feature, 0, 0, 0, 0, 0, 0);
	return rv.status;
}

#endif /* _ASM_IA64_SN_SN_SAL_H */
#endif /* _ASM_IA64_SN_SN_SAL_H */