patch-2.2.11 linux/arch/alpha/kernel/core_pyxis.c
Next file: linux/arch/alpha/kernel/core_tsunami.c
Previous file: linux/arch/alpha/kernel/core_mcpcia.c
Back to the patch index
Back to the overall index
- Lines: 150
- Date:
Mon Aug 9 12:05:05 1999
- Orig file:
v2.2.10/linux/arch/alpha/kernel/core_pyxis.c
- Orig date:
Mon Oct 12 11:40:12 1998
diff -u --recursive --new-file v2.2.10/linux/arch/alpha/kernel/core_pyxis.c linux/arch/alpha/kernel/core_pyxis.c
@@ -31,8 +31,9 @@
* BIOS32-style PCI interface:
*/
+#define DEBUG_MCHECK 0 /* 0 = minimum, 1 = debug, 2 = dump */
+
#define DEBUG_CONFIG 0
-#define DEBUG_MCHECK 0
#if DEBUG_CONFIG
# define DBG_CNF(args) printk args
@@ -40,14 +41,6 @@
# define DBG_CNF(args)
#endif
-#if DEBUG_MCHECK
-# define DBG_MCK(args) printk args
-# define DEBUG_MCHECK_DUMP
-#else
-# define DBG_MCK(args)
-#endif
-
-
static volatile unsigned int PYXIS_mcheck_expected = 0;
static volatile unsigned int PYXIS_mcheck_taken = 0;
static unsigned int PYXIS_jd;
@@ -425,17 +418,21 @@
{
/*
* Set up the PCI->physical memory translation windows.
- * For now, windows 1,2 and 3 are disabled. In the future, we may
+ * For now, windows 2 and 3 are disabled. In the future, we may
* want to use them to do scatter/gather DMA.
*
* Window 0 goes at 1 GB and is 1 GB large.
+ * Window 1 goes at 2 GB and is 1 GB large.
*/
- *(vuip)PYXIS_W0_BASE = 1U | (PYXIS_DMA_WIN_BASE_DEFAULT & 0xfff00000U);
- *(vuip)PYXIS_W0_MASK = (PYXIS_DMA_WIN_SIZE_DEFAULT - 1) & 0xfff00000U;
- *(vuip)PYXIS_T0_BASE = 0;
+ *(vuip)PYXIS_W0_BASE = PYXIS_DMA_WIN0_BASE_DEFAULT | 1U;
+ *(vuip)PYXIS_W0_MASK = (PYXIS_DMA_WIN0_SIZE_DEFAULT - 1) & 0xfff00000U;
+ *(vuip)PYXIS_T0_BASE = PYXIS_DMA_WIN0_TRAN_DEFAULT >> 2;
+
+ *(vuip)PYXIS_W1_BASE = PYXIS_DMA_WIN1_BASE_DEFAULT | 1U;
+ *(vuip)PYXIS_W1_MASK = (PYXIS_DMA_WIN1_SIZE_DEFAULT - 1) & 0xfff00000U;
+ *(vuip)PYXIS_T1_BASE = PYXIS_DMA_WIN1_TRAN_DEFAULT >> 2;
- *(vuip)PYXIS_W1_BASE = 0x0 ;
*(vuip)PYXIS_W2_BASE = 0x0 ;
*(vuip)PYXIS_W3_BASE = 0x0 ;
mb();
@@ -525,16 +522,6 @@
pyxis_finish_init_arch();
}
-static int
-pyxis_pci_clr_err(void)
-{
- PYXIS_jd = *(vuip)PYXIS_ERR;
- DBG_MCK(("PYXIS_pci_clr_err: PYXIS ERR after read 0x%x\n", PYXIS_jd));
- *(vuip)PYXIS_ERR = 0x0180; mb();
- PYXIS_jd = *(vuip)PYXIS_ERR; /* re-read to force write */
- return 0;
-}
-
void
pyxis_machine_check(unsigned long vector, unsigned long la_ptr,
struct pt_regs * regs)
@@ -547,61 +534,26 @@
mchk_sysdata = (struct el_PYXIS_sysdata_mcheck *)
(la_ptr + mchk_header->sys_offset);
-#if 0
- DBG_MCK(("pyxis_machine_check: vector=0x%lx la_ptr=0x%lx\n",
- vector, la_ptr));
- DBG_MCK(("\t\t pc=0x%lx size=0x%x procoffset=0x%x sysoffset 0x%x\n",
- regs->pc, mchk_header->size, mchk_header->proc_offset,
- mchk_header->sys_offset));
- DBG_MCK(("pyxis_machine_check: expected %d DCSR 0x%lx PEAR 0x%lx\n",
- PYXIS_mcheck_expected, mchk_sysdata->epic_dcsr,
- mchk_sysdata->epic_pear));
-#endif
+ /* Clear the error before reporting anything. */
+ mb();
+ mb(); /* magic */
+ draina();
+
+ PYXIS_jd = *(vuip)PYXIS_ERR;
+ *(vuip)PYXIS_ERR = PYXIS_jd;
+ mb();
+ PYXIS_jd = *(vuip)PYXIS_ERR; /* re-read to force write */
+
+ wrmces(0x7);
+ mb();
/*
- * Check if machine check is due to a badaddr() and if so,
- * ignore the machine check.
+ * See if the machine check is due to a badaddr() and if so,
+ * ignore it.
*/
- mb();
- mb(); /* magic */
- if (PYXIS_mcheck_expected) {
- DBG_MCK(("PYXIS machine check expected\n"));
- PYXIS_mcheck_expected = 0;
- PYXIS_mcheck_taken = 1;
- mb();
- mb(); /* magic */
- draina();
- pyxis_pci_clr_err();
- wrmces(0x7);
- mb();
- }
- else {
- printk("PYXIS machine check NOT expected\n") ;
- DBG_MCK(("pyxis_machine_check: vector=0x%lx la_ptr=0x%lx\n",
- vector, la_ptr));
- DBG_MCK(("\t\t pc=0x%lx size=0x%x procoffset=0x%x"
- " sysoffset 0x%x\n",
- regs->pc, mchk_header->size, mchk_header->proc_offset,
- mchk_header->sys_offset));
- PYXIS_mcheck_expected = 0;
- PYXIS_mcheck_taken = 1;
- mb();
- mb(); /* magic */
- draina();
- pyxis_pci_clr_err();
- wrmces(0x7);
- mb();
+ process_mcheck_info(vector, la_ptr, regs, "PYXIS",
+ DEBUG_MCHECK, PYXIS_mcheck_expected);
-#ifdef DEBUG_MCHECK_DUMP
- {
- unsigned long *ptr = (unsigned long *)la_ptr;;
- long n = mchk_header->size / (2*sizeof(long));
-
- do
- printk(" +%lx %lx %lx\n", i*sizeof(long),
- ptr[i], ptr[i+1]);
- while (--i);
- }
-#endif
- }
+ PYXIS_mcheck_expected = 0;
+ PYXIS_mcheck_taken = 1;
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)