All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jerry Van Baren <gerald.vanbaren@ge.com>
To: u-boot@lists.denx.de
Subject: [U-Boot-Users] PPC sync/eieio (was cfi_flash.c and lost volatile qualifier)
Date: Wed, 30 Apr 2008 11:35:41 -0400	[thread overview]
Message-ID: <481891CD.7010907@ge.com> (raw)
In-Reply-To: <1209568270.16926.32.camel@gentoo-jocke.transmode.se>

Joakim Tjernlund wrote:
>> [1] Sync is a big hammer, eieio is a medium size hammer.  Don't use 
>> both, PPC people will know you don't know what you are doing.  ;-)
> 
> Yet the in_bex()/out_bex() functions in PowerPC linux uses sync and all
> SOC drivers are encouraged to use them. What a waste :(
> 
>  Jocke

Well, I was a little terse because I was cross-applying PPC instructions 
in a ARM discussion.  Personally, I prefer to use sync vs. eieio.  The 
size of the hammer isn't that different, I don't believe.  The advantage 
of sync is that it flushes the read/write operation out on the bus 
*now*.  When I'm writing to hardware to control the hardware, *now* is 
what I want.

The eieio merely guarantees the preceding operations will go out on the 
bus before following bus operations.  The preceding operations could be 
hung up in the bus interface unit *indefinitely* if no "following" bus 
operations occur.  This is an unlikely occurrence, but could be the 
result of running out of cache in a tight loop.

For instance, if you do a write to a hardware register, a eieio, and 
then wait in a tight loop until time goes by (reading the decrementer 
register) followed by another write, the write1/delay/write2 sequence 
could actually be delay/write1/write2.  Note that the order of the 
writes on the bus is correct per the eieio, but it isn't what the 
hardware *needed*.

Illustration - what you did in code and intended to occur:
   write1 (eieio)
   delay
   write2 (eieio)

What actually may happen on the bus:
   delay
   write1 (eieio)
   write2 (eieio)

By using a sync, you guarantee the write isn't delayed:
   write1 (sync)
   delay
   write2 (sync)

Disclaimer: the above explanation is from my fertile imagination.  It 
may or may not happen and *will* happen differently on different PPC 
processors.  For instance, the eieio instruction is actually a NOP in 
the 603e core because it doesn't reorder bus operations, but it *does* 
have a BIU that can buffer and delay the bus operations, causing the 
above timing problem.

I contend using the "sync" instruction will always work correctly and 
the "eieio" instruction is at best a false economy and at worst a lot of 
very difficult, mysterious bugs to find, so I'm in agreement with the 
linux in_bex/out_bex recommendation.

Side note: I don't know if I communicated it properly, but when you see 
"eieio ; sync" or "sync ; eieio", you know the author of that code 
doesn't understand sync and eieio.  "isync ; sync" is occasionally a 
valid combination, but I don't believe it is necessary other than when 
called for by the Users Manual in conjunction with writing to special 
purpose registers.

Best regards,
gvb

  parent reply	other threads:[~2008-04-30 15:35 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-04-08 14:32 [U-Boot-Users] drivers MMCplus for at91sam9x Pierre Savary
2008-04-09 17:49 ` Jean-Christophe PLAGNIOL-VILLARD
2008-04-10 10:32   ` Pierre Savary
2008-04-10 22:31 ` Ken.Fuchs at bench.com
2008-04-11  8:26   ` Pierre Savary
2008-04-11 15:48   ` Pierre Ossman
2008-04-11 18:54     ` Ken.Fuchs at bench.com
2008-04-12  9:28       ` Pierre Ossman
2008-04-15 10:18         ` Pierre Savary
2008-04-15 16:51           ` Ken.Fuchs at bench.com
     [not found]         ` <-6021840981243159212@unknownmsgid>
2008-04-15 19:25           ` Andy Fleming
2008-04-16  8:55             ` Pierre Savary
2008-04-16 23:30             ` Ken.Fuchs at bench.com
2008-04-22 11:55             ` Pierre Savary
2008-04-22 15:07               ` [U-Boot-Users] [PATCH] Add eSDHC driver Andy Fleming
2008-04-22 16:53                 ` Anton Vorontsov
2008-04-23 19:23                 ` Ken.Fuchs at bench.com
2008-04-24  6:24                   ` Pierre Savary
2008-04-29 19:45                     ` [U-Boot-Users] drivers MMCplus for at91sam9x Ken.Fuchs at bench.com
2008-04-29 20:20                       ` [U-Boot-Users] cfi_flash.c and lost volatile qualifier Adrian Filipi
2008-04-29 20:43                         ` Wolfgang Denk
2008-04-29 21:10                           ` Adrian Filipi
2008-04-29 21:16                             ` Jerry Van Baren
     [not found]                               ` <alpine.DEB.1.10.0804300949360.13610@pmy.adscville>
2008-04-30 14:43                                 ` Jerry Van Baren
2008-04-30 15:11                                   ` Joakim Tjernlund
2008-04-30 15:21                                     ` Scott Wood
2008-04-30 15:34                                       ` Joakim Tjernlund
2008-04-30 15:41                                         ` Wolfgang Denk
2008-04-30 16:02                                         ` Scott Wood
2008-04-30 16:11                                           ` Joakim Tjernlund
2008-04-30 15:35                                     ` Jerry Van Baren [this message]
2008-04-30 15:38                                   ` Wolfgang Denk
2008-04-30 15:51                                     ` Jerry Van Baren
2008-05-08 11:17                         ` Haavard Skinnemoen
2008-05-08 14:05                           ` Adrian Filipi
2008-05-08 16:27                             ` Haavard Skinnemoen
2008-04-30 14:20                       ` [U-Boot-Users] drivers MMCplus for at91sam9x Pierre Savary
2008-04-30 16:25                         ` Ken.Fuchs at bench.com
2008-04-30 20:31                         ` Ken.Fuchs at bench.com

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=481891CD.7010907@ge.com \
    --to=gerald.vanbaren@ge.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.