From owner-freebsd-wireless@FreeBSD.ORG Wed May 23 18:59:13 2012 Return-Path: Delivered-To: freebsd-wireless@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id AD513106566B; Wed, 23 May 2012 18:59:13 +0000 (UTC) (envelope-from adrian.chadd@gmail.com) Received: from mail-pb0-f54.google.com (mail-pb0-f54.google.com [209.85.160.54]) by mx1.freebsd.org (Postfix) with ESMTP id 660028FC08; Wed, 23 May 2012 18:59:13 +0000 (UTC) Received: by pbbro2 with SMTP id ro2so11130023pbb.13 for ; Wed, 23 May 2012 11:59:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:cc:content-type :content-transfer-encoding; bh=vVYjv0QzAdm5M3QDNHH/v/SeoXoxBw2Hj6KMa23pfzo=; b=NsgayaLIhqrrWiAz6mFDnI73GTWvvxEHg8FB/FFwEYg/zhvOteeOdRWUeLnWS2pFwR 5bBaMWCrEC0xc7iZFCEsluzDPm3MUL1DcASWZDva+XoeocFQof0AouDRVWXnjYSWI06y H6jHrvS6XzG393JC4DjDJSeamDWrWJpjZeZNqs1eC0tEcRh2i1qOoBY9vc/AH247zBWL Ag3qsG68LKXmXmXtDXT1pAeUpxqwepfPxuj5LvebO/rh4U2G18KXNADMWQo2E9Ok2o2i EL++G9D99z62fSCh11aPA7J3jc5jElySkK8E36ee10w4KTER2ZD63QU9gEv0lGWu5lKM W+hQ== MIME-Version: 1.0 Received: by 10.68.204.165 with SMTP id kz5mr5599241pbc.80.1337799553064; Wed, 23 May 2012 11:59:13 -0700 (PDT) Sender: adrian.chadd@gmail.com Received: by 10.142.203.2 with HTTP; Wed, 23 May 2012 11:59:12 -0700 (PDT) In-Reply-To: <201204221854.q3MIsqPg052441@svn.freebsd.org> References: <201204221854.q3MIsqPg052441@svn.freebsd.org> Date: Wed, 23 May 2012 11:59:12 -0700 X-Google-Sender-Auth: 2VzkJDhMYmc7fH8iUCSd2ytghNU Message-ID: From: Adrian Chadd To: Nathan Whitehorn Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Cc: freebsd-wireless@freebsd.org Subject: Re: svn commit: r234579 - in head/sys/powerpc: include mpc85xx powerpc X-BeenThere: freebsd-wireless@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Discussions of 802.11 stack, tools device driver development." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 23 May 2012 18:59:13 -0000 Hi Nathan, Would you please nag me to make sure I add explicit write barrier handling to ath / ath_hal? It's needed for USB support for some chips that use the HAL (performance reasons) and I can basically re-use exactly the same thing. We could then "extend" the bus API to allow a driver to say they implement correct bus coherence hooks, so don't just call sync on every write. Thanks, Adrian On 22 April 2012 11:54, Nathan Whitehorn wrote: > Author: nwhitehorn > Date: Sun Apr 22 18:54:51 2012 > New Revision: 234579 > URL: http://svn.freebsd.org/changeset/base/234579 > > Log: > =A0Replace eieio; sync for creating bus-space memory barriers with sync. > =A0sync performs a strict superset of the functions of eieio, so using bo= th > =A0is redundant. While here, expand bus barriers to all bus_space operati= ons, > =A0since many drivers do not correctly use bus_space_barrier(). > > =A0In principle, we can also replace sync just with eieio, for a signific= ant > =A0performance increase, but it remains to be seen whether any poorly-wri= tten > =A0drivers currently depend on the side effects of sync to properly funct= ion. > > =A0MFC after: =A0 =A01 week > > Modified: > =A0head/sys/powerpc/include/pio.h > =A0head/sys/powerpc/mpc85xx/mpc85xx.c > =A0head/sys/powerpc/powerpc/bus_machdep.c > > Modified: head/sys/powerpc/include/pio.h > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D > --- head/sys/powerpc/include/pio.h =A0 =A0 =A0Sun Apr 22 18:51:38 2012 = =A0 =A0 =A0 =A0(r234578) > +++ head/sys/powerpc/include/pio.h =A0 =A0 =A0Sun Apr 22 18:54:51 2012 = =A0 =A0 =A0 =A0(r234579) > @@ -39,46 +39,52 @@ > =A0* I/O macros. > =A0*/ > > +/* > + * Note: this should be eieio, but many drivers expect ordering with > + * main storage too. > + */ > +#define powerpc_iomb() __asm __volatile("sync" : : : "memory") > + > =A0static __inline void > =A0__outb(volatile u_int8_t *a, u_int8_t v) > =A0{ > =A0 =A0 =A0 =A0*a =3D v; > - =A0 =A0 =A0 __asm__ volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0static __inline void > =A0__outw(volatile u_int16_t *a, u_int16_t v) > =A0{ > =A0 =A0 =A0 =A0*a =3D v; > - =A0 =A0 =A0 __asm__ volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0static __inline void > =A0__outl(volatile u_int32_t *a, u_int32_t v) > =A0{ > =A0 =A0 =A0 =A0*a =3D v; > - =A0 =A0 =A0 __asm__ volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0static __inline void > =A0__outll(volatile u_int64_t *a, u_int64_t v) > =A0{ > =A0 =A0 =A0 =A0*a =3D v; > - =A0 =A0 =A0 __asm__ volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0static __inline void > =A0__outwrb(volatile u_int16_t *a, u_int16_t v) > =A0{ > =A0 =A0 =A0 =A0__asm__ volatile("sthbrx %0, 0, %1" :: "r"(v), "r"(a)); > - =A0 =A0 =A0 __asm__ volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0static __inline void > =A0__outlrb(volatile u_int32_t *a, u_int32_t v) > =A0{ > =A0 =A0 =A0 =A0__asm__ volatile("stwbrx %0, 0, %1" :: "r"(v), "r"(a)); > - =A0 =A0 =A0 __asm__ volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0static __inline u_int8_t > @@ -87,7 +93,7 @@ __inb(volatile u_int8_t *a) > =A0 =A0 =A0 =A0u_int8_t _v_; > > =A0 =A0 =A0 =A0_v_ =3D *a; > - =A0 =A0 =A0 __asm__ volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0 =A0 =A0 =A0return _v_; > =A0} > > @@ -97,7 +103,7 @@ __inw(volatile u_int16_t *a) > =A0 =A0 =A0 =A0u_int16_t _v_; > > =A0 =A0 =A0 =A0_v_ =3D *a; > - =A0 =A0 =A0 __asm__ volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0 =A0 =A0 =A0return _v_; > =A0} > > @@ -107,7 +113,7 @@ __inl(volatile u_int32_t *a) > =A0 =A0 =A0 =A0u_int32_t _v_; > > =A0 =A0 =A0 =A0_v_ =3D *a; > - =A0 =A0 =A0 __asm__ volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0 =A0 =A0 =A0return _v_; > =A0} > > @@ -117,7 +123,7 @@ __inll(volatile u_int64_t *a) > =A0 =A0 =A0 =A0u_int64_t _v_; > > =A0 =A0 =A0 =A0_v_ =3D *a; > - =A0 =A0 =A0 __asm__ volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0 =A0 =A0 =A0return _v_; > =A0} > > @@ -127,7 +133,7 @@ __inwrb(volatile u_int16_t *a) > =A0 =A0 =A0 =A0u_int16_t _v_; > > =A0 =A0 =A0 =A0__asm__ volatile("lhbrx %0, 0, %1" : "=3Dr"(_v_) : "r"(a))= ; > - =A0 =A0 =A0 __asm__ volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0 =A0 =A0 =A0return _v_; > =A0} > > @@ -137,7 +143,7 @@ __inlrb(volatile u_int32_t *a) > =A0 =A0 =A0 =A0u_int32_t _v_; > > =A0 =A0 =A0 =A0__asm__ volatile("lwbrx %0, 0, %1" : "=3Dr"(_v_) : "r"(a))= ; > - =A0 =A0 =A0 __asm__ volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0 =A0 =A0 =A0return _v_; > =A0} > > @@ -175,7 +181,7 @@ __outsb(volatile u_int8_t *a, const u_in > =A0{ > =A0 =A0 =A0 =A0while (c--) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0*a =3D *s++; > - =A0 =A0 =A0 __asm__ volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0static __inline void > @@ -183,7 +189,7 @@ __outsw(volatile u_int16_t *a, const u_i > =A0{ > =A0 =A0 =A0 =A0while (c--) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0*a =3D *s++; > - =A0 =A0 =A0 __asm__ volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0static __inline void > @@ -191,7 +197,7 @@ __outsl(volatile u_int32_t *a, const u_i > =A0{ > =A0 =A0 =A0 =A0while (c--) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0*a =3D *s++; > - =A0 =A0 =A0 __asm__ volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0static __inline void > @@ -199,7 +205,7 @@ __outsll(volatile u_int64_t *a, const u_ > =A0{ > =A0 =A0 =A0 =A0while (c--) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0*a =3D *s++; > - =A0 =A0 =A0 __asm__ volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0static __inline void > @@ -207,7 +213,7 @@ __outswrb(volatile u_int16_t *a, const u > =A0{ > =A0 =A0 =A0 =A0while (c--) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0__asm__ volatile("sthbrx %0, 0, %1" :: "r"= (*s++), "r"(a)); > - =A0 =A0 =A0 __asm__ volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0static __inline void > @@ -215,7 +221,7 @@ __outslrb(volatile u_int32_t *a, const u > =A0{ > =A0 =A0 =A0 =A0while (c--) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0__asm__ volatile("stwbrx %0, 0, %1" :: "r"= (*s++), "r"(a)); > - =A0 =A0 =A0 __asm__ volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0static __inline void > @@ -223,7 +229,7 @@ __insb(volatile u_int8_t *a, u_int8_t *d > =A0{ > =A0 =A0 =A0 =A0while (c--) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0*d++ =3D *a; > - =A0 =A0 =A0 __asm__ volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0static __inline void > @@ -231,7 +237,7 @@ __insw(volatile u_int16_t *a, u_int16_t > =A0{ > =A0 =A0 =A0 =A0while (c--) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0*d++ =3D *a; > - =A0 =A0 =A0 __asm__ volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0static __inline void > @@ -239,7 +245,7 @@ __insl(volatile u_int32_t *a, u_int32_t > =A0{ > =A0 =A0 =A0 =A0while (c--) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0*d++ =3D *a; > - =A0 =A0 =A0 __asm__ volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0static __inline void > @@ -247,7 +253,7 @@ __insll(volatile u_int64_t *a, u_int64_t > =A0{ > =A0 =A0 =A0 =A0while (c--) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0*d++ =3D *a; > - =A0 =A0 =A0 __asm__ volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0static __inline void > @@ -255,7 +261,7 @@ __inswrb(volatile u_int16_t *a, u_int16_ > =A0{ > =A0 =A0 =A0 =A0while (c--) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0__asm__ volatile("lhbrx %0, 0, %1" : "=3Dr= "(*d++) : "r"(a)); > - =A0 =A0 =A0 __asm__ volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0static __inline void > @@ -263,7 +269,7 @@ __inslrb(volatile u_int32_t *a, u_int32_ > =A0{ > =A0 =A0 =A0 =A0while (c--) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0__asm__ volatile("lwbrx %0, 0, %1" : "=3Dr= "(*d++) : "r"(a)); > - =A0 =A0 =A0 __asm__ volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0#define =A0 =A0 =A0 =A0outsb(a,s,c) =A0 =A0(__outsb((volatile u_int8_t= *)(a), s, c)) > > Modified: head/sys/powerpc/mpc85xx/mpc85xx.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D > --- head/sys/powerpc/mpc85xx/mpc85xx.c =A0Sun Apr 22 18:51:38 2012 =A0 = =A0 =A0 =A0(r234578) > +++ head/sys/powerpc/mpc85xx/mpc85xx.c =A0Sun Apr 22 18:54:51 2012 =A0 = =A0 =A0 =A0(r234579) > @@ -60,7 +60,7 @@ ccsr_write4(uintptr_t addr, uint32_t val > =A0 =A0 =A0 =A0volatile uint32_t *ptr =3D (void *)addr; > > =A0 =A0 =A0 =A0*ptr =3D val; > - =A0 =A0 =A0 __asm __volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0int > > Modified: head/sys/powerpc/powerpc/bus_machdep.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D > --- head/sys/powerpc/powerpc/bus_machdep.c =A0 =A0 =A0Sun Apr 22 18:51:38= 2012 =A0 =A0 =A0 =A0(r234578) > +++ head/sys/powerpc/powerpc/bus_machdep.c =A0 =A0 =A0Sun Apr 22 18:54:51= 2012 =A0 =A0 =A0 =A0(r234579) > @@ -169,7 +169,8 @@ static void > =A0bs_gen_barrier(bus_space_handle_t bsh __unused, bus_size_t ofs __unuse= d, > =A0 =A0 bus_size_t size __unused, int flags __unused) > =A0{ > - =A0 =A0 =A0 __asm __volatile("eieio; sync" : : : "memory"); > + > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0/* > @@ -183,6 +184,7 @@ bs_be_rs_1(bus_space_handle_t bsh, bus_s > > =A0 =A0 =A0 =A0addr =3D __ppc_ba(bsh, ofs); > =A0 =A0 =A0 =A0res =3D *addr; > + =A0 =A0 =A0 powerpc_iomb(); > =A0 =A0 =A0 =A0CTR4(KTR_BE_IO, "%s(bsh=3D%#x, ofs=3D%#x) =3D %#x", __func= __, bsh, ofs, res); > =A0 =A0 =A0 =A0return (res); > =A0} > @@ -195,6 +197,7 @@ bs_be_rs_2(bus_space_handle_t bsh, bus_s > > =A0 =A0 =A0 =A0addr =3D __ppc_ba(bsh, ofs); > =A0 =A0 =A0 =A0res =3D *addr; > + =A0 =A0 =A0 powerpc_iomb(); > =A0 =A0 =A0 =A0CTR4(KTR_BE_IO, "%s(bsh=3D%#x, ofs=3D%#x) =3D %#x", __func= __, bsh, ofs, res); > =A0 =A0 =A0 =A0return (res); > =A0} > @@ -207,6 +210,7 @@ bs_be_rs_4(bus_space_handle_t bsh, bus_s > > =A0 =A0 =A0 =A0addr =3D __ppc_ba(bsh, ofs); > =A0 =A0 =A0 =A0res =3D *addr; > + =A0 =A0 =A0 powerpc_iomb(); > =A0 =A0 =A0 =A0CTR4(KTR_BE_IO, "%s(bsh=3D%#x, ofs=3D%#x) =3D %#x", __func= __, bsh, ofs, res); > =A0 =A0 =A0 =A0return (res); > =A0} > @@ -219,6 +223,7 @@ bs_be_rs_8(bus_space_handle_t bsh, bus_s > > =A0 =A0 =A0 =A0addr =3D __ppc_ba(bsh, ofs); > =A0 =A0 =A0 =A0res =3D *addr; > + =A0 =A0 =A0 powerpc_iomb(); > =A0 =A0 =A0 =A0return (res); > =A0} > > @@ -253,7 +258,7 @@ bs_be_rr_1(bus_space_handle_t bsh, bus_s > > =A0 =A0 =A0 =A0while (cnt--) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0*addr++ =3D *s++; > - =A0 =A0 =A0 __asm __volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0static void > @@ -263,7 +268,7 @@ bs_be_rr_2(bus_space_handle_t bsh, bus_s > > =A0 =A0 =A0 =A0while (cnt--) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0*addr++ =3D *s++; > - =A0 =A0 =A0 __asm __volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0static void > @@ -273,7 +278,7 @@ bs_be_rr_4(bus_space_handle_t bsh, bus_s > > =A0 =A0 =A0 =A0while (cnt--) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0*addr++ =3D *s++; > - =A0 =A0 =A0 __asm __volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0static void > @@ -283,7 +288,7 @@ bs_be_rr_8(bus_space_handle_t bsh, bus_s > > =A0 =A0 =A0 =A0while (cnt--) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0*addr++ =3D *s++; > - =A0 =A0 =A0 __asm __volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0static void > @@ -293,7 +298,7 @@ bs_be_ws_1(bus_space_handle_t bsh, bus_s > > =A0 =A0 =A0 =A0addr =3D __ppc_ba(bsh, ofs); > =A0 =A0 =A0 =A0*addr =3D val; > - =A0 =A0 =A0 __asm __volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0 =A0 =A0 =A0CTR4(KTR_BE_IO, "%s(bsh=3D%#x, ofs=3D%#x, val=3D%#x)", __f= unc__, bsh, ofs, val); > =A0} > > @@ -304,7 +309,7 @@ bs_be_ws_2(bus_space_handle_t bsh, bus_s > > =A0 =A0 =A0 =A0addr =3D __ppc_ba(bsh, ofs); > =A0 =A0 =A0 =A0*addr =3D val; > - =A0 =A0 =A0 __asm __volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0 =A0 =A0 =A0CTR4(KTR_BE_IO, "%s(bsh=3D%#x, ofs=3D%#x, val=3D%#x)", __f= unc__, bsh, ofs, val); > =A0} > > @@ -315,7 +320,7 @@ bs_be_ws_4(bus_space_handle_t bsh, bus_s > > =A0 =A0 =A0 =A0addr =3D __ppc_ba(bsh, ofs); > =A0 =A0 =A0 =A0*addr =3D val; > - =A0 =A0 =A0 __asm __volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0 =A0 =A0 =A0CTR4(KTR_BE_IO, "%s(bsh=3D%#x, ofs=3D%#x, val=3D%#x)", __f= unc__, bsh, ofs, val); > =A0} > > @@ -326,7 +331,7 @@ bs_be_ws_8(bus_space_handle_t bsh, bus_s > > =A0 =A0 =A0 =A0addr =3D __ppc_ba(bsh, ofs); > =A0 =A0 =A0 =A0*addr =3D val; > - =A0 =A0 =A0 __asm __volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0static void > @@ -365,7 +370,7 @@ bs_be_wr_1(bus_space_handle_t bsh, bus_s > > =A0 =A0 =A0 =A0while (cnt--) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0*d++ =3D *addr++; > - =A0 =A0 =A0 __asm __volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0static void > @@ -376,7 +381,7 @@ bs_be_wr_2(bus_space_handle_t bsh, bus_s > > =A0 =A0 =A0 =A0while (cnt--) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0*d++ =3D *addr++; > - =A0 =A0 =A0 __asm __volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0static void > @@ -387,7 +392,7 @@ bs_be_wr_4(bus_space_handle_t bsh, bus_s > > =A0 =A0 =A0 =A0while (cnt--) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0*d++ =3D *addr++; > - =A0 =A0 =A0 __asm __volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0static void > @@ -398,7 +403,7 @@ bs_be_wr_8(bus_space_handle_t bsh, bus_s > > =A0 =A0 =A0 =A0while (cnt--) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0*d++ =3D *addr++; > - =A0 =A0 =A0 __asm __volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0static void > @@ -408,7 +413,7 @@ bs_be_sm_1(bus_space_handle_t bsh, bus_s > > =A0 =A0 =A0 =A0while (cnt--) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0*d =3D val; > - =A0 =A0 =A0 __asm __volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0static void > @@ -418,7 +423,7 @@ bs_be_sm_2(bus_space_handle_t bsh, bus_s > > =A0 =A0 =A0 =A0while (cnt--) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0*d =3D val; > - =A0 =A0 =A0 __asm __volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0static void > @@ -428,7 +433,7 @@ bs_be_sm_4(bus_space_handle_t bsh, bus_s > > =A0 =A0 =A0 =A0while (cnt--) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0*d =3D val; > - =A0 =A0 =A0 __asm __volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0static void > @@ -438,7 +443,7 @@ bs_be_sm_8(bus_space_handle_t bsh, bus_s > > =A0 =A0 =A0 =A0while (cnt--) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0*d =3D val; > - =A0 =A0 =A0 __asm __volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0static void > @@ -448,7 +453,7 @@ bs_be_sr_1(bus_space_handle_t bsh, bus_s > > =A0 =A0 =A0 =A0while (cnt--) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0*d++ =3D val; > - =A0 =A0 =A0 __asm __volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0static void > @@ -458,7 +463,7 @@ bs_be_sr_2(bus_space_handle_t bsh, bus_s > > =A0 =A0 =A0 =A0while (cnt--) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0*d++ =3D val; > - =A0 =A0 =A0 __asm __volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0static void > @@ -468,7 +473,7 @@ bs_be_sr_4(bus_space_handle_t bsh, bus_s > > =A0 =A0 =A0 =A0while (cnt--) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0*d++ =3D val; > - =A0 =A0 =A0 __asm __volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0static void > @@ -478,7 +483,7 @@ bs_be_sr_8(bus_space_handle_t bsh, bus_s > > =A0 =A0 =A0 =A0while (cnt--) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0*d++ =3D val; > - =A0 =A0 =A0 __asm __volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0/* > @@ -492,7 +497,7 @@ bs_le_rs_1(bus_space_handle_t bsh, bus_s > > =A0 =A0 =A0 =A0addr =3D __ppc_ba(bsh, ofs); > =A0 =A0 =A0 =A0res =3D *addr; > - =A0 =A0 =A0 __asm __volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0 =A0 =A0 =A0CTR4(KTR_LE_IO, "%s(bsh=3D%#x, ofs=3D%#x) =3D %#x", __func= __, bsh, ofs, res); > =A0 =A0 =A0 =A0return (res); > =A0} > @@ -505,7 +510,7 @@ bs_le_rs_2(bus_space_handle_t bsh, bus_s > > =A0 =A0 =A0 =A0addr =3D __ppc_ba(bsh, ofs); > =A0 =A0 =A0 =A0__asm __volatile("lhbrx %0, 0, %1" : "=3Dr"(res) : "r"(add= r)); > - =A0 =A0 =A0 __asm __volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0 =A0 =A0 =A0CTR4(KTR_LE_IO, "%s(bsh=3D%#x, ofs=3D%#x) =3D %#x", __func= __, bsh, ofs, res); > =A0 =A0 =A0 =A0return (res); > =A0} > @@ -518,7 +523,7 @@ bs_le_rs_4(bus_space_handle_t bsh, bus_s > > =A0 =A0 =A0 =A0addr =3D __ppc_ba(bsh, ofs); > =A0 =A0 =A0 =A0__asm __volatile("lwbrx %0, 0, %1" : "=3Dr"(res) : "r"(add= r)); > - =A0 =A0 =A0 __asm __volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0 =A0 =A0 =A0CTR4(KTR_LE_IO, "%s(bsh=3D%#x, ofs=3D%#x) =3D %#x", __func= __, bsh, ofs, res); > =A0 =A0 =A0 =A0return (res); > =A0} > @@ -560,7 +565,7 @@ bs_le_rr_1(bus_space_handle_t bsh, bus_s > > =A0 =A0 =A0 =A0while (cnt--) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0*addr++ =3D *s++; > - =A0 =A0 =A0 __asm __volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0static void > @@ -570,7 +575,7 @@ bs_le_rr_2(bus_space_handle_t bsh, bus_s > > =A0 =A0 =A0 =A0while (cnt--) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0*addr++ =3D in16rb(s++); > - =A0 =A0 =A0 __asm __volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0static void > @@ -580,7 +585,7 @@ bs_le_rr_4(bus_space_handle_t bsh, bus_s > > =A0 =A0 =A0 =A0while (cnt--) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0*addr++ =3D in32rb(s++); > - =A0 =A0 =A0 __asm __volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0static void > @@ -596,6 +601,7 @@ bs_le_ws_1(bus_space_handle_t bsh, bus_s > > =A0 =A0 =A0 =A0addr =3D __ppc_ba(bsh, ofs); > =A0 =A0 =A0 =A0*addr =3D val; > + =A0 =A0 =A0 powerpc_iomb(); > =A0 =A0 =A0 =A0CTR4(KTR_LE_IO, "%s(bsh=3D%#x, ofs=3D%#x, val=3D%#x)", __f= unc__, bsh, ofs, val); > =A0} > > @@ -606,6 +612,7 @@ bs_le_ws_2(bus_space_handle_t bsh, bus_s > > =A0 =A0 =A0 =A0addr =3D __ppc_ba(bsh, ofs); > =A0 =A0 =A0 =A0__asm __volatile("sthbrx %0, 0, %1" :: "r"(val), "r"(addr)= ); > + =A0 =A0 =A0 powerpc_iomb(); > =A0 =A0 =A0 =A0CTR4(KTR_LE_IO, "%s(bsh=3D%#x, ofs=3D%#x, val=3D%#x)", __f= unc__, bsh, ofs, val); > =A0} > > @@ -616,6 +623,7 @@ bs_le_ws_4(bus_space_handle_t bsh, bus_s > > =A0 =A0 =A0 =A0addr =3D __ppc_ba(bsh, ofs); > =A0 =A0 =A0 =A0__asm __volatile("stwbrx %0, 0, %1" :: "r"(val), "r"(addr)= ); > + =A0 =A0 =A0 powerpc_iomb(); > =A0 =A0 =A0 =A0CTR4(KTR_LE_IO, "%s(bsh=3D%#x, ofs=3D%#x, val=3D%#x)", __f= unc__, bsh, ofs, val); > =A0} > > @@ -661,7 +669,7 @@ bs_le_wr_1(bus_space_handle_t bsh, bus_s > > =A0 =A0 =A0 =A0while (cnt--) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0*d++ =3D *addr++; > - =A0 =A0 =A0 __asm __volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0static void > @@ -672,7 +680,7 @@ bs_le_wr_2(bus_space_handle_t bsh, bus_s > > =A0 =A0 =A0 =A0while (cnt--) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0out16rb(d++, *addr++); > - =A0 =A0 =A0 __asm __volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0static void > @@ -683,7 +691,7 @@ bs_le_wr_4(bus_space_handle_t bsh, bus_s > > =A0 =A0 =A0 =A0while (cnt--) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0out32rb(d++, *addr++); > - =A0 =A0 =A0 __asm __volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0static void > @@ -700,7 +708,7 @@ bs_le_sm_1(bus_space_handle_t bsh, bus_s > > =A0 =A0 =A0 =A0while (cnt--) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0*d =3D val; > - =A0 =A0 =A0 __asm __volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0static void > @@ -710,7 +718,7 @@ bs_le_sm_2(bus_space_handle_t bsh, bus_s > > =A0 =A0 =A0 =A0while (cnt--) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0out16rb(d, val); > - =A0 =A0 =A0 __asm __volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0static void > @@ -720,7 +728,7 @@ bs_le_sm_4(bus_space_handle_t bsh, bus_s > > =A0 =A0 =A0 =A0while (cnt--) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0out32rb(d, val); > - =A0 =A0 =A0 __asm __volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0static void > @@ -736,7 +744,7 @@ bs_le_sr_1(bus_space_handle_t bsh, bus_s > > =A0 =A0 =A0 =A0while (cnt--) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0*d++ =3D val; > - =A0 =A0 =A0 __asm __volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0static void > @@ -746,7 +754,7 @@ bs_le_sr_2(bus_space_handle_t bsh, bus_s > > =A0 =A0 =A0 =A0while (cnt--) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0out16rb(d++, val); > - =A0 =A0 =A0 __asm __volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0static void > @@ -756,7 +764,7 @@ bs_le_sr_4(bus_space_handle_t bsh, bus_s > > =A0 =A0 =A0 =A0while (cnt--) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0out32rb(d++, val); > - =A0 =A0 =A0 __asm __volatile("eieio; sync"); > + =A0 =A0 =A0 powerpc_iomb(); > =A0} > > =A0static void