
From: Bob Breuer <breuerr@mc.net>

I found a solution for the HyperSPARC DMA problems in 2.6.  This allows my
SS20 with HyperSPARCs to boot to single user.  It's not efficient, but I
hope it points out whats needed for a proper fix.  Seems that the iotlb
entries need to flushed to ram or uncached since the iommu changes between
2.5.60 and 2.5.70.

The second part seems to be needed to allow consistent sbus dma mappings to
be cached on HyperSPARC.  I have also tested this change on 2.4.27 with no
noticeable difference.

Acked-by: William Irwin <wli@holomorphy.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 25-akpm/arch/sparc/mm/iommu.c |    1 +
 25-akpm/arch/sparc/mm/srmmu.c |    1 +
 2 files changed, 2 insertions(+)

diff -puN arch/sparc/mm/iommu.c~sparc32-fix-for-hypersparc-dma-errors arch/sparc/mm/iommu.c
--- 25/arch/sparc/mm/iommu.c~sparc32-fix-for-hypersparc-dma-errors	2004-11-09 22:06:04.432029912 -0800
+++ 25-akpm/arch/sparc/mm/iommu.c	2004-11-09 22:06:04.437029152 -0800
@@ -173,6 +173,7 @@ static u32 iommu_get_one(struct page *pa
 	}
 
 	iommu_viking_flush_iotlb(iopte0, npages);
+	flush_cache_all(); // hack to fix dma errors with hypersparc
 
 	return busa0;
 }
diff -puN arch/sparc/mm/srmmu.c~sparc32-fix-for-hypersparc-dma-errors arch/sparc/mm/srmmu.c
--- 25/arch/sparc/mm/srmmu.c~sparc32-fix-for-hypersparc-dma-errors	2004-11-09 22:06:04.434029608 -0800
+++ 25-akpm/arch/sparc/mm/srmmu.c	2004-11-09 22:06:04.439028848 -0800
@@ -1464,6 +1464,7 @@ static void __init poke_hypersparc(void)
 static void __init init_hypersparc(void)
 {
 	srmmu_name = "ROSS HyperSparc";
+	srmmu_modtype = HyperSparc;
 
 	init_vac_layout();
 
_
