RFC: figuring out bus behaviour on these mips32r2 chips

Andrew Duane aduane at juniper.net
Thu Jan 8 22:59:25 UTC 2015


Warner is right: from a memory operation ordering perspective, SYNC should do it. That said, I have in my day encountered hardware registers (or hardware itself) that requires the extra memory accesses to insure its own internal operation ordering. Many of these have been on MIPS-architecture SoC systems.

....................................
Andrew L. Duane
AT&T Technical Lead
m   +1 603.770.7088
o    +1 408.933.6944 (2-6944)
skype: andrewlduane
aduane at juniper.net


-----Original Message-----
From: owner-freebsd-mips at freebsd.org [mailto:owner-freebsd-mips at freebsd.org] On Behalf Of Warner Losh
Sent: Thursday, January 08, 2015 5:55 PM
To: Adrian Chadd
Cc: freebsd-mips at freebsd.org
Subject: Re: RFC: figuring out bus behaviour on these mips32r2 chips


> On Jan 7, 2015, at 6:03 PM, Adrian Chadd <adrian at FreeBSD.org> wrote:
> 
> Hi,
> 
> I found that the new QCA955x chip (and some of the QCA934x things in 
> shipping products versus what I have on my desk at home) behave poorly 
> unless I do ye olde "write to register; read from register to flush"
> paradigm.
> 
> In this specific instance, it's the MDIO controller on each MAC - if I 
> do a read-after-write to those registers, everything is peachy.
> Without it - and even with a call to wmb() - it still barfs.
> 
> Now, I went digging through the mips code, and wmb() -> mips_sync() -> 
> just a sync operation. It doesn't do any other kind of barrier.
> 
> So - what's the mips32r2 spec require us to do for ensuring device IO 
> has made it out to devices and we enforce ordering? Are we missing 
> something in our mips_sync() implementation?

SYNC is supposed to be SYNC. An absolute barrier, but that may have weakened to being merely a strong ordering instruction such that all writes before it happen before all writes after it.

Warner



More information about the freebsd-mips mailing list