[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: fxp at pci on arm32 and bus_dmamap_sync()



> > ftp://download.intel.com/design/network/datashts/644346.htm
> おぉ、まさにそうでした。これから読みます。

こちらは神戸さんと先日 fxp 購入済の曽田さんにおまかせして、 ;-p

> また改めて pci まわりのコード眺めてみます。

こちらを先に調べてみました。

i386 だと bus_space_map() は i386/include/bus.h で
i386_memio_map() に define されてます。そこで
i386/i386/bus_machdep.c の i386_memio_map() を調べると
if_fxp_pci.c でいじっている flags の BUS_SPACE_MAP_PREFETCHABLE
は全然参照されてません。これではダメですね。

BUS_SPACE_MAP_CACHEABLE のほうはちゃんと non-cacheable で
mapping するのに使われているので、 if_fxp_pci.c の呼び出し側で

--- if_fxp_pci.c.orig	Wed Jul 12 13:01:31 2000
+++ if_fxp_pci.c	Wed Jul 12 13:01:31 2000
@@ -284,7 +284,8 @@
 	    pci_mapreg_info(pa->pa_pc, pa->pa_tag, FXP_PCI_MMBA,
 	    PCI_MAPREG_TYPE_MEM|PCI_MAPREG_MEM_TYPE_32BIT,
 	    &addr, &size, &flags) == 0) {
-		flags &= ~BUS_SPACE_MAP_PREFETCHABLE;
+		flags &= ~(BUS_SPACE_MAP_PREFETCHABLE |
+		    BUS_SPACE_MAP_CACHEABLE);
 		if (bus_space_map(memt, addr, size, flags, &memh) == 0)
 			memh_valid = 1;
 	}

とかして CACHEABLE のほうもクリアしておけば(少なくとも i386 では)
まともに動くようになる?  CACHEABLE と PREFETCHABLE の定義の違いと
その対応については(例によって)よくわかってませんが。

ちなみに arm32 の arm32/footbridge/footbridge_io.c の
footbridge_mem_bs_map() では flags はまったく使われてません……
---
Izumi Tsutsui
tsutsui@ceres.dti.ne.jp