[Differential] [Updated, 34 lines] D2701: Add options to dmb() and dsb() macros
zbb (Zbigniew Bodek)
phabric-noreply at FreeBSD.org
Sat Jun 6 22:52:57 UTC 2015
zbb updated the summary for this revision.
zbb removed rS FreeBSD src repository as the repository for this revision.
zbb updated this revision to Diff 5973.
CHANGES SINCE LAST UPDATE
https://reviews.freebsd.org/D2701?vs=5849&id=5973
REVISION DETAIL
https://reviews.freebsd.org/D2701
AFFECTED FILES
sys/arm64/arm64/db_interface.c
sys/arm64/arm64/vfp.c
sys/arm64/include/atomic.h
CHANGE DETAILS
diff --git a/sys/arm64/include/atomic.h b/sys/arm64/include/atomic.h
--- a/sys/arm64/include/atomic.h
+++ b/sys/arm64/include/atomic.h
@@ -29,13 +29,29 @@
#ifndef _MACHINE_ATOMIC_H_
#define _MACHINE_ATOMIC_H_
-#define isb() __asm __volatile("isb" : : : "memory")
-#define dsb() __asm __volatile("dsb sy" : : : "memory")
-#define dmb() __asm __volatile("dmb sy" : : : "memory")
+#define isb() __asm __volatile("isb" : : : "memory")
-#define mb() dmb()
-#define wmb() dmb()
-#define rmb() dmb()
+/*
+ * Options for DMB and DSB:
+ * oshld Outer Shareable, load
+ * oshst Outer Shareable, store
+ * osh Outer Shareable, all
+ * nshld Non-shareable, load
+ * nshst Non-shareable, store
+ * nsh Non-shareable, all
+ * ishld Inner Shareable, load
+ * ishst Inner Shareable, store
+ * ish Inner Shareable, all
+ * ld Full system, load
+ * st Full system, store
+ * sy Full system, all
+ */
+#define dsb(opt) __asm __volatile("dsb " __STRING(opt) : : : "memory")
+#define dmb(opt) __asm __volatile("dmb " __STRING(opt) : : : "memory")
+
+#define mb() dmb(sy) /* Full system memory barrier all */
+#define wmb() dmb(st) /* Full system memory barrier store */
+#define rmb() dmb(ld) /* Full system memory barrier load */
static __inline void
atomic_add_32(volatile uint32_t *p, uint32_t val)
diff --git a/sys/arm64/arm64/vfp.c b/sys/arm64/arm64/vfp.c
--- a/sys/arm64/arm64/vfp.c
+++ b/sys/arm64/arm64/vfp.c
@@ -120,7 +120,7 @@
td->td_pcb->pcb_fpcr = fpcr;
td->td_pcb->pcb_fpsr = fpsr;
- dsb();
+ dsb(ish);
vfp_disable();
}
critical_exit();
diff --git a/sys/arm64/arm64/db_interface.c b/sys/arm64/arm64/db_interface.c
--- a/sys/arm64/arm64/db_interface.c
+++ b/sys/arm64/arm64/db_interface.c
@@ -156,13 +156,11 @@
}
*dst++ = *data++;
}
+ dsb(ish);
- dsb();
/* Clean D-cache and invalidate I-cache */
cpu_dcache_wb_range(addr, (vm_size_t)size);
cpu_icache_sync_range(addr, (vm_size_t)size);
- dsb();
- isb();
return (0);
}
EMAIL PREFERENCES
https://reviews.freebsd.org/settings/panel/emailpreferences/
To: zbb, emaste, imp, ian, andrew
Cc: emaste, andrew, freebsd-arm-list, imp
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D2701.5973.patch
Type: text/x-patch
Size: 1967 bytes
Desc: not available
URL: <http://lists.freebsd.org/pipermail/freebsd-arm/attachments/20150606/0ba02540/attachment.bin>
More information about the freebsd-arm
mailing list