[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