NetBSD-Bugs archive

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

Re: port-hp700/35531: iee0 does not work on 735/99



I wrote:

> I wrote:
> > nick.hudson%gmx.co.uk@localhost wrote:
> > > I've tested this on my 715/50 against netbsd-5 as I've got too many 
> > > changes in 
> > > my -current source trees :)
> > 
> > The same patch can be applied to -current too ;-)
> 
> Umm, on -current iee(4) even without my patch gets
> timeouts and errors on heavy load:

Okay, this is DMA-cache coherency problem. bus_dma(9) on hp700
doesn't support BUS_DMA_COHERENT even on any CPU, so we have to
always set proper cache line size to sc_cl_align for MI iee(4).
(probably it might be worth to have <machine/cache.h> like mips)

---
Index: if_iee_gsc.c
===================================================================
RCS file: /cvsroot/src/sys/arch/hp700/gsc/if_iee_gsc.c,v
retrieving revision 1.8
diff -u -r1.8 if_iee_gsc.c
--- if_iee_gsc.c        30 Apr 2009 07:01:26 -0000      1.8
+++ if_iee_gsc.c        5 May 2009 18:10:11 -0000
@@ -206,9 +206,9 @@
        struct iee_gsc_softc *sc_gsc = device_private(self);
        struct iee_softc *sc = &sc_gsc->iee_sc;
        struct gsc_attach_args *ga = aux;
-       enum hppa_cpu_type cpu_type;
        int media[2];
        int rsegs;
+       extern int dcache_stride;       /* XXX: in hp700/machdep.c */
 
        sc->sc_dev = self;
 
@@ -221,12 +221,11 @@
         * Pre PA7100LC CPUs don't support uncacheable mappings. So make 
         * descriptors align to cache lines. Needed to avoid race conditions 
         * caused by flushing cache lines that overlap multiple descriptors. 
+        *
+        * XXX: MD bus_dma(9) on hp700 doesn't support BUS_DMA_COHERENT at all,
+        *      so use dcache_stride on all CPUs for now.
         */
-        cpu_type = hppa_cpu_info->hci_type;
-       if (cpu_type == hpcx || cpu_type == hpcxs || cpu_type == hpcxt)
-               sc->sc_cl_align = 32;
-       else
-               sc->sc_cl_align = 1;
+       sc->sc_cl_align = dcache_stride;
 
        sc_gsc->sc_iot = ga->ga_iot;
        if (bus_space_map(sc_gsc->sc_iot, ga->ga_hpa, IEE_GSC_IO_SZ, 0, 

---
Izumi Tsutsui


Home | Main Index | Thread Index | Old Index