Module Name:    src
Committed By:   cliff
Date:           Fri Jan 29 00:22:06 UTC 2010

Modified Files:
        src/sys/arch/mips/rmi [matt-nb5-mips64]: rmixlvar.h

Log Message:
- add enum and display name lookup for firmware type
- firmware type field added to rmixl_config
- rmixl_cache_err_dis, rmixl_cache_err_restore, rmixl_cache_err_check
  inlines moved here from pcie driver
- add rmixl_probe_4 nofault address probe inline


To generate a diff of this commit:
cvs rdiff -u -r1.1.2.12 -r1.1.2.13 src/sys/arch/mips/rmi/rmixlvar.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/mips/rmi/rmixlvar.h
diff -u src/sys/arch/mips/rmi/rmixlvar.h:1.1.2.12 src/sys/arch/mips/rmi/rmixlvar.h:1.1.2.13
--- src/sys/arch/mips/rmi/rmixlvar.h:1.1.2.12	Sun Jan 24 05:32:36 2010
+++ src/sys/arch/mips/rmi/rmixlvar.h	Fri Jan 29 00:22:06 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: rmixlvar.h,v 1.1.2.12 2010/01/24 05:32:36 cliff Exp $	*/
+/*	$NetBSD: rmixlvar.h,v 1.1.2.13 2010/01/29 00:22:06 cliff Exp $	*/
 
 /*
  * Copyright 2002 Wasabi Systems, Inc.
@@ -91,6 +91,27 @@
 	RMIXL_INTR_LOW,
 } rmixl_intr_polarity_t;
 
+typedef enum {
+	PSB_TYPE_UNKNOWN=0,
+	PSB_TYPE_RMI,
+	PSB_TYPE_DELL,
+} rmixlfw_psb_type_t;
+
+static inline const char *
+rmixlfw_psb_type_name(rmixlfw_psb_type_t type)
+{
+	switch(type) {
+	case PSB_TYPE_UNKNOWN:
+		return "unknown";
+	case PSB_TYPE_RMI:
+		return "RMI";
+	case PSB_TYPE_DELL:
+		return "DELL";
+	default:
+		return "undefined";
+	}
+}
+
 struct rmixl_config {
 	uint64_t		 rc_io_pbase;	
 	bus_addr_t		 rc_pcie_cfg_pbase;	
@@ -119,6 +140,7 @@
 	struct extent		*rc_pcie_io_ex;
 	int			 rc_mallocsafe;
 	rmixlfw_info_t 		 rc_psb_info;
+	rmixlfw_psb_type_t	 rc_psb_type;
 	volatile struct rmixlfw_cpu_wakeup_info
 				*rc_cpu_wakeup_info;
 	const void		*rc_cpu_wakeup_end;
@@ -145,4 +167,61 @@
 extern uint64_t rmixl_mfcr(u_int);
 extern void rmixl_mtcr(uint64_t, u_int);
 
+
+/*
+ * rmixl_cache_err_dis:
+ * - disable Cache, Data ECC, Snoop Tag Parity, Tag Parity errors
+ * - clear the cache error log
+ * - return previous value from RMIXL_PCR_L1D_CONFIG0
+ */
+static inline uint64_t
+rmixl_cache_err_dis(void)
+{
+	uint64_t r;
+
+	r = rmixl_mfcr(RMIXL_PCR_L1D_CONFIG0);
+	rmixl_mtcr(RMIXL_PCR_L1D_CONFIG0, r & ~0x2e);
+	rmixl_mtcr(RMIXL_PCR_L1D_CACHE_ERROR_LOG, 0);
+	return r;
+}
+
+/*
+ * rmixl_cache_err_restore:
+ * - clear the cache error log, cache error overflow log,
+ *   and cache interrupt registers
+ * - restore previous value to RMIXL_PCR_L1D_CONFIG0
+ */
+static inline void
+rmixl_cache_err_restore(uint64_t r)
+{
+	rmixl_mtcr(RMIXL_PCR_L1D_CACHE_ERROR_LOG, 0);
+	rmixl_mtcr(RMIXL_PCR_L1D_CACHE_ERROR_OVF_LO, 0);
+	rmixl_mtcr(RMIXL_PCR_L1D_CACHE_INTERRUPT, 0);
+	rmixl_mtcr(RMIXL_PCR_L1D_CONFIG0, r);
+}
+
+static inline uint64_t
+rmixl_cache_err_check(void)
+{
+	return rmixl_mfcr(RMIXL_PCR_L1D_CACHE_ERROR_LOG);
+}
+
+static inline int
+rmixl_probe_4(volatile uint32_t *va)
+{
+	uint32_t tmp;
+	uint32_t r;
+	int err;
+	int s;
+
+	s = splhigh();
+	r = rmixl_cache_err_dis();
+	tmp = *va;			/* probe */
+	err = rmixl_cache_err_check();
+	rmixl_cache_err_restore(r);
+	splx(s);
+
+	return (err == 0);
+}
+
 #endif	/* _MIPS_RMI_RMIXLVAR_H_ */

Reply via email to