-/* $OpenBSD: bus_dma.c,v 1.31 2016/08/14 10:32:17 kettenis Exp $ */
+/* $OpenBSD: bus_dma.c,v 1.32 2016/08/22 01:41:59 jsg Exp $ */
/* $NetBSD: bus_dma.c,v 1.38 2003/10/30 08:44:13 scw Exp $ */
/*-
if (map->_dm_flags & ARM32_DMAMAP_COHERENT) {
/* Drain the write buffer. */
cpu_drain_writebuf();
+ cpu_sdcache_drain_writebuf();
return;
}
-/* $OpenBSD: cpufunc.c,v 1.46 2016/08/14 11:30:54 jsg Exp $ */
+/* $OpenBSD: cpufunc.c,v 1.47 2016/08/22 01:41:59 jsg Exp $ */
/* $NetBSD: cpufunc.c,v 1.65 2003/11/05 12:53:15 scw Exp $ */
/*
(void *)cpufunc_nullop, /* sdcache_wbinv_range */
(void *)cpufunc_nullop, /* sdcache_inv_range */
(void *)cpufunc_nullop, /* sdcache_wb_range */
+ (void *)cpufunc_nullop, /* sdcache_drain_writebuf */
/* Other functions */
(void *)cpufunc_nullop, /* sdcache_wbinv_range */
(void *)cpufunc_nullop, /* sdcache_inv_range */
(void *)cpufunc_nullop, /* sdcache_wb_range */
+ (void *)cpufunc_nullop, /* sdcache_drain_writebuf */
/* Other functions */
-/* $OpenBSD: arml2cc.c,v 1.4 2015/05/20 00:39:16 jsg Exp $ */
+/* $OpenBSD: arml2cc.c,v 1.5 2016/08/22 01:42:00 jsg Exp $ */
/*
* Copyright (c) 2013 Patrick Wildt <patrick@blueri.se>
*
void arml2cc_cache_way_op(struct arml2cc_softc *, bus_size_t, uint32_t);
void arml2cc_cache_op(struct arml2cc_softc *, bus_size_t, uint32_t);
void arml2cc_cache_sync(struct arml2cc_softc *);
+void arml2cc_sdcache_drain_writebuf(void);
struct cfattach armliicc_ca = {
sizeof (struct arml2cc_softc), arml2cc_match, arml2cc_attach
cpufuncs.cf_sdcache_wbinv_range = arml2cc_sdcache_wbinv_range;
cpufuncs.cf_sdcache_inv_range = arml2cc_sdcache_inv_range;
cpufuncs.cf_sdcache_wb_range = arml2cc_sdcache_wb_range;
+ cpufuncs.cf_sdcache_drain_writebuf = arml2cc_sdcache_drain_writebuf;
}
void
bus_space_write_4(sc->sc_iot, sc->sc_ioh, 0x740, 0xffffffff);
}
+void
+arml2cc_sdcache_drain_writebuf(void)
+{
+ struct arml2cc_softc * const sc = arml2cc_sc;
+ if (sc == NULL || !sc->sc_enabled)
+ return;
+
+ arml2cc_cache_sync(sc);
+}
+
void
arml2cc_cache_range_op(paddr_t pa, psize_t len, bus_size_t cache_op)
{
-/* $OpenBSD: cpufunc.h,v 1.26 2016/08/14 11:30:54 jsg Exp $ */
+/* $OpenBSD: cpufunc.h,v 1.27 2016/08/22 01:42:00 jsg Exp $ */
/* $NetBSD: cpufunc.h,v 1.29 2003/09/06 09:08:35 rearnsha Exp $ */
/*
void (*cf_sdcache_wbinv_range) (vaddr_t, paddr_t, vsize_t);
void (*cf_sdcache_inv_range) (vaddr_t, paddr_t, vsize_t);
void (*cf_sdcache_wb_range) (vaddr_t, paddr_t, vsize_t);
+ void (*cf_sdcache_drain_writebuf) (void);
/* Other functions */
#define cpu_sdcache_wbinv_range(va, pa, s) cpufuncs.cf_sdcache_wbinv_range((va), (pa), (s))
#define cpu_sdcache_inv_range(va, pa, s) cpufuncs.cf_sdcache_inv_range((va), (pa), (s))
#define cpu_sdcache_wb_range(va, pa, s) cpufuncs.cf_sdcache_wb_range((va), (pa), (s))
+#define cpu_sdcache_drain_writebuf() cpufuncs.cf_sdcache_drain_writebuf()
#define cpu_flush_prefetchbuf() cpufuncs.cf_flush_prefetchbuf()
#define cpu_drain_writebuf() cpufuncs.cf_drain_writebuf()