patch-1.3.81 linux/arch/alpha/kernel/apecs.c

Next file: linux/arch/alpha/kernel/bios32.c
Previous file: linux/arch/alpha/config.in
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v1.3.80/linux/arch/alpha/kernel/apecs.c linux/arch/alpha/kernel/apecs.c
@@ -393,10 +393,34 @@
 
 unsigned long apecs_init(unsigned long mem_start, unsigned long mem_end)
 {
+
+#ifdef CONFIG_ALPHA_XL
+	/*
+	 * Set up the PCI->physical memory translation windows.
+	 * For the XL we *must* use both windows, in order to
+	 * maximize the amount of physical memory that can be used
+	 * to DMA from the ISA bus, and still allow PCI bus devices
+	 * access to all of host memory.
+	 *
+	 * see <asm/apecs.h> for window bases and sizes.
+	 *
+	 * this restriction due to the true XL motherboards' 82379AB SIO
+	 * PCI<->ISA bridge chip which passes only 27 bits of address...
+	 */
+
+	*(vuip)APECS_IOC_PB1R = 1U<<19 | (APECS_XL_DMA_WIN1_BASE & 0xfff00000U);
+	*(vuip)APECS_IOC_PM1R = (APECS_XL_DMA_WIN1_SIZE - 1) & 0xfff00000U;
+	*(vuip)APECS_IOC_TB1R = 0;
+
+	*(vuip)APECS_IOC_PB2R = 1U<<19 | (APECS_XL_DMA_WIN2_BASE & 0xfff00000U);
+	*(vuip)APECS_IOC_PM2R = (APECS_XL_DMA_WIN2_SIZE - 1) & 0xfff00000U;
+	*(vuip)APECS_IOC_TB2R = 0;
+
+#else  /* CONFIG_ALPHA_XL */
 	/*
 	 * Set up the PCI->physical memory translation windows.
-	 * For now, window 1 is disabled.  In the future, we may
-	 * want to use it to do scatter/gather DMA.  Window 0
+	 * For now, window 2 is disabled.  In the future, we may
+	 * want to use it to do scatter/gather DMA.  Window 1
 	 * goes at 1 GB and is 1 GB large.
 	 */
 	*(vuip)APECS_IOC_PB2R  = 0U; /* disable window 2 */
@@ -404,6 +428,7 @@
 	*(vuip)APECS_IOC_PB1R  = 1U<<19 | (APECS_DMA_WIN_BASE & 0xfff00000U);
 	*(vuip)APECS_IOC_PM1R  = (APECS_DMA_WIN_SIZE - 1) & 0xfff00000U;
 	*(vuip)APECS_IOC_TB1R  = 0;
+#endif /* CONFIG_ALPHA_XL */
 
 #ifdef CONFIG_ALPHA_CABRIOLET
 	/*

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov with Sam's (original) version
of this