Subject: SA-1110 Intel Errata

From: David J Croyle <[email-masked]>
Date: Mon, 28 Feb 2000 15:17:21 -0500

Intel's latest errata sheet for the SA-1110 mentions the 
following problem:

Incorrect Sign-Extended Value in Register After a Read buffer Allocate

After a read buffer allocate, a Load Register Signed  Halfword (LDRSH)
or
a Load Register Signed Byte (LDRSB) will not return the correct value in
the register,
due to long propagation delays in the sign extend logic.

Workaround:  Execute the command twice and the data is guaranteed to be
correctly sign extended for 
             the second read.

    Status:  No Fix

----------------------------------------------------------------------------------------

Question: Does anybody know if this is a problem with the arm-linux
kernel(s)? 

Does anybody have any ideas on how these particular instructions could
be detected and
replaced with two reads in sequence to get around this problem?

Perhaps the makefiles for the kernel can be modified to produce assembly
language listings.
These listings could then be grepped for the above two instructions and
some type of
macro or fix implemented?

Best Regards,

David J. Croyle

Foerster Instruments, Inc.

unsubscribe: body of `unsubscribe linux-arm' to [email-masked]
++        Please use [email-masked] for           ++
++                        kernel-related discussions.                      ++

---

From: "Craig Newell (W2/VK4YEQ)" <[email-masked]>
Date: Mon, 28 Feb 2000 23:47:31 -0500 (EST)

Hi There,

On Mon, 28 Feb 2000, David J Croyle wrote:

> Intel's latest errata sheet for the SA-1110 mentions the following
> problem:

> be detected and replaced with two reads in sequence to get around this
> problem?

  A simple 2 line patch to gcc/config/arm/arm.md would be the best way
... that is if I can ever find a definitative guide to the format of gcc
".md" files so that I would feel confident enough to touch it ... maybe
someone would knows 100% what is going on in there should make an offical
patch to be submitted to the GCC cvs tree ...

	Thanks,

		CraigN
--
      Craig Newell                email: [email-masked]
      Free Spirit                 icbm:  somewhere in NJ, USA

---

From: Takafumi Kawana <[email-masked]>
Date: Tue, 29 Feb 2000 14:31:56 +0900

hi all.

I'm just porting arm-linux to our SA-1110 testing board.
(Now, NFS and telnetd are working well :)

> Question: Does anybody know if this is a problem with the arm-linux

No. There is no code to use "Read Buffer" in the kernel.
If you wish to use Read Buffer to some device driver, it will be a problem.

--
Takafumi Kawana

VASARA Research, Inc.

---

From: Philip Blundell <[email-masked]>
Date: Tue, 29 Feb 2000 08:17:13 +0000

>[...]

Linux doesn't use the read buffer, so this doesn't apply.

>be detected and replaced with two reads in sequence to get around this 

You could hack the compiler to do so.  Unless you have a burning need I 
wouldn't really recommend that though.

p.

---

From: Philip Blundell <[email-masked]>
Date: Tue, 29 Feb 2000 08:18:04 +0000

>".md" files so that I would feel confident enough to touch it ...

The GCC manual? :-)

p.

---

From: Paul Koning <[email-masked]>
Date: Tue, 29 Feb 2000 10:28:42 -0500

>>>>> "David" == David J Croyle <[email-masked]> writes:

 David> Intel's latest errata sheet for the SA-1110 mentions the
 David> following problem:

 David> Incorrect Sign-Extended Value in Register After a Read buffer
 David> Allocate

 David> After a read buffer allocate, a Load Register Signed Halfword
 David> (LDRSH) or a Load Register Signed Byte (LDRSB) will not return
 David> the correct value in the register, due to long propagation
 David> delays in the sign extend logic.

 David> Workaround: Execute the command twice and the data is
 David> guaranteed to be correctly sign extended for the second read.

 David> Status: No Fix

Good grief, what an ugly bug.  The workaround seems to assume there
aren't any interrupts between the two instructions!

Given that you can't count on this (in general), it sounds to me the
only real workaround is not to use those instructions at all (or maybe 
only with a register source, i.e., one where a read allocate can't
ever happen).

	paul

---

From: Kamesh_Peri <[email-masked]>
Date: Tue, 29 Feb 2000 12:16:56 -0500

>  David> Incorrect Sign-Extended Value in Register After a Read buffer
Hi,

I am a newbie. This question mayhave been asked before. Please bear with me.
Iam compiling gcc for arm on a pentium running linux.
I compiled the binutils successfully. Now i am trying 
to cross compile gcc. I applied the -Dinhibit_libc hack, but to no avail.
I am using gcc-2.95.2.

Thanks in advance.

Kamesh

---

From: Erik Mouw <[email-masked]>
Date: Tue, 29 Feb 2000 19:56:48 +0100 (MET)

> to cross compile gcc. I applied the -Dinhibit_libc hack, but to no avail.

Hmm, this is off-topic in this thread about SA1110 Errata. Anyway, if you
can't get your cross compiler compiled, there are at least four URLs where
you can get precompiled i386-->armv4l cross compilers:

1. My own tarball. gcc-2.95.2 C and C++ compiler.
   http://www-ict.its.tudelft.nl/~erik/open-source/arm-linux-cross/
2. The Compaq Cambridge Research Lab tarball. gcc-2.95.2 C, C++, Objective
   C, Fortran77, Java and Chill (a.k.a. the complete gcc)
   http://crl.research.compaq.com/projects/personalserver/sw_download.html
3. Rod Stewart's RPMs. gcc-2.95.2 C and C++ compiler.
   ftp://ftp.nw.carleton.ca/cross/
   ftp://ftp.netwinder.org/users/s/stewart/cross/

(1) and (2) are build from (almost) the same sources, (3) uses slightly
different gcc patches (Scott Bambrough's instead of Phil Blundell's).

Erik

-- 
"people are still using Win98? Wow... VMS i could understand, but WinXX -
that's just so passe..." -- Paul Jakma on linux-kernel