Linux MIPS Architecture development
 help / color / mirror / Atom feed
From: Hartvig Ekner <hartvig@ekner.info>
To: Eric DeVolder <eric.devolder@amd.com>
Cc: Linux MIPS mailing list <linux-mips@linux-mips.org>
Subject: Re: Au1500 hardware cache coherency
Date: Mon, 31 Mar 2003 21:24:50 +0200	[thread overview]
Message-ID: <3E889602.62B7AB6B@ekner.info> (raw)
In-Reply-To: 3E8883B8.1000000@amd.com

[-- Attachment #1: Type: text/plain, Size: 6681 bytes --]

Hi Eric,

I did a quick check of a complete kernel disassembly, and there are tons of direct or
indirect RMW's to config, which do not explicitly insure that Config[0D] is set.
Pete - are you aware of this? Thus, there seems to be a potential problem lurking
here for anybody who is using USB.

However, I am not using USB at all, and it is configured out of the kernel. So I assume
this is not errata #3 we're seeing here?

So, to summarize: The first set of problems in my email below seem to be fully explained
by errata #14. Note that any kernel compiled from the current CVS exhibits this problem:
Because although NONCOHEHENT_IO is set, the NC bit in PCI_CFG is not set. I have
verified that the problem occurs when NC is cleared, regardless of the .config option. So
some code needs to be changed in au1000/xxx/setup.c... (set NC if NONCOHERENT_IO
is enabled).

But - much wore worrisome: I did this modification, and with the NC bit set, and
NONCOHERENT_IO set, I get the second set of errors, although it takes much longer
time. The wback_inv calls are made through the generic code  in the subroutine
pci_alloc_consistent() (in arch/mips/kernel/pci-dma.c).

So something is wrong.... Anybody at AMD who would care to continue the debug?

/Hartvig


Eric DeVolder wrote:

> Yes, this is precisely the errata; my apologies for failing to list it explicitly earlier.
> The only other one to be aware of is that Config[OD] must be set, and the YAMON
> booter does this, but if you ever do a R-M-W of Config, then Config[OD] is reset to
> zero (this is errata #4).
>
> Also, keep in mind that you need CONFIG_NONCOHERENT_IO set so that
> the dma cache routines do a flush (and invalidate) to memory, and that these routines
> need to be called at the appropriate places in the driver.
>
> In your data dump where there are lines "missing", it sort of suggests to me that perhaps
> these memory addresses were already in the cache, and were written to memory, but
> because coherent transactions were disabled, the cache never saw them.
>
> So, in summary, for AB stepping, you need pci_config[NC]=1, Config[OD]=1, and
> CONFIG_NONCOHERENT_IO=y.
>
> Hartvig Ekner wrote:
>
>> Hi Eric,
>>
>> is that errata #12 you are referring to? (only present on silicon stepping AB?) Or are there
>> others also?
>>
>> While using HW coherency for copying large files on disk, I do get occasional data errors
>> which always look like this:
>>
>>   00061000  4c 69 6e 69 65 3a 20 20 20 20 32 34 38 33 32 0a  Linie:    24832.
>>   00061010  4c 69 6e 69 65 3a 20 20 20 20 32 34 38 33 33 0a  Linie:    24833.
>>   00061020  4c 69 6e 69 65 3a 20 20 20 20 32 34 38 33 34 0a  Linie:    24834.
>>   00061030  4c 69 6e 69 65 3a 20 20 20 20 32 34 38 33 35 0a  Linie:    24835.
>>   00061040  38 33 35 0a 4c 69 6e 69 65 3a 20 20 20 20 32 34  835.Linie:    24
>>   00061050  38 33 36 0a 4c 69 6e 69 65 3a 20 20 20 20 32 34  836.Linie:    24
>>   00061060  38 33 37 0a 38 33 37 0a 4c 69 6e 69 65 3a 20 20  837.837.Linie:
>>   00061070  4c 69 6e 69 65 3a 20 20 20 20 32 34 38 33 39 0a  Linie:    24839.
>>   00061080  38 33 39 0a 4c 69 6e 69 65 3a 20 20 20 20 32 34  839.Linie:    24
>>   00061090  38 34 30 0a 4c 69 6e 69 65 3a 20 20 20 20 32 34  840.Linie:    24
>>   000610a0  38 34 31 0a 38 34 31 0a 4c 69 6e 69 65 3a 20 20  841.841.Linie:
>>   000610b0  20 20 32 34 65 3a 20 20 20 20 32 34 38 34 33 0a    24e:    24843.
>>   000610c0  38 34 33 0a 4c 69 6e 69 65 3a 20 20 20 20 32 34  843.Linie:    24
>>   000610d0  38 34 34 0a 4c 69 6e 69 65 3a 20 20 20 20 32 34  844.Linie:    24
>>   000610e0  38 34 35 0a 38 34 35 0a 4c 69 6e 69 65 3a 20 20  845.845.Linie:
>>   000610f0  20 20 32 34 65 3a 20 20 20 20 32 34 38 34 37 0a    24e:    24847.
>>   00061100  38 34 37 0a 4c 69 6e 69 65 3a 20 20 20 20 32 34  847.Linie:    24
>>   00061110  38 34 38 0a 4c 69 6e 69 65 3a 20 20 20 20 32 34  848.Linie:    24
>>   00061120  38 34 39 0a 38 34 39 0a 4c 69 6e 69 65 3a 20 20  849.849.Linie:
>>   00061130  20 20 32 34 65 3a 20 20 20 20 32 34 38 35 31 0a    24e:    24851.
>>   00061140  4c 69 6e 69 65 3a 20 20 20 20 32 34 38 35 32 0a  Linie:    24852.
>>   00061150  4c 69 6e 69 65 3a 20 20 20 20 32 34 38 35 33 0a  Linie:    24853.
>>   00061160  4c 69 6e 69 65 3a 20 20 20 20 32 34 38 35 34 0a  Linie:    24854.
>>   00061170  4c 69 6e 69 65 3a 20 20 20 20 32 34 38 35 35 0a  Linie:    24855.
>>   00061180  4c 69 6e 69 65 3a 20 20 20 20 32 34 38 35 36 0a  Linie:    24856.
>>   00061190  4c 69 6e 69 65 3a 20 20 20 20 32 34 38 35 37 0a  Linie:    24857.
>>   000611a0  4c 69 6e 69 65 3a 20 20 20 20 32 34 38 35 38 0a  Linie:    24858.
>>   000611b0  4c 69 6e 69 65 3a 20 20 20 20 32 34 38 35 39 0a  Linie:    24859.
>>   000611c0  4c 69 6e 69 65 3a 20 20 20 20 32 34 38 36 30 0a  Linie:    24860.
>>
>> The file consists of 16-byte lines with increasing line numbers. Note that most of
>> the errors are cacheline oriented,  but there are also "skews" of 4 bytes going
>> into the next cacheline.
>>
>> However, interestingly enough, switching HW coherency off entirely
>> (in PCI_CFG) and using uncached PCI buffers, there are still failures:
>>
>>   001ec060  4c 69 6e 69 65 3a 20 20 20 31 32 35 39 35 38 0a  Linie:   125958.
>>   001ec070  4c 69 6e 69 65 3a 20 20 20 31 32 35 39 35 39 0a  Linie:   125959.
>>   001ec080  4c 69 6e 69 65 3a 20 20 20 31 32 35 39 36 30 0a  Linie:   125960.
>>   001ec090  4c 69 6e 69 65 3a 20 20 20 31 32 35 39 36 31 0a  Linie:   125961.
>>   001ec0a0  00 00 00 00 00 00 00 00 03 00 09 00 00 00 00 00  ................
>>   001ec0b0  00 00 00 00 00 00 00 00 03 00 0a 00 00 00 00 00  ................
>>   001ec0c0  4c 69 6e 69 65 3a 20 20 20 31 32 35 39 36 34 0a  Linie:   125964.
>>   001ec0d0  4c 69 6e 69 65 3a 20 20 20 31 32 35 39 36 35 0a  Linie:   125965.
>>   001ec0e0  4c 69 6e 69 65 3a 20 20 20 31 32 35 39 36 36 0a  Linie:   125966.
>>   001ec0f0  4c 69 6e 69 65 3a 20 20 20 31 32 35 39 36 37 0a  Linie:   125967.
>>   001ec100  00 00 00 00 00 00 00 00 10 00 00 00 c7 00 00 00  ................
>>   001ec110  00 00 00 00 00 00 00 00 10 00 00 00 dd 00 00 00  ................
>>   001ec120  4c 69 6e 69 65 3a 20 20 20 31 32 35 39 37 30 0a  Linie:   125970.
>>   001ec130  4c 69 6e 69 65 3a 20 20 20 31 32 35 39 37 31 0a  Linie:   125971.
>>   001ec140  4c 69 6e 69 65 3a 20 20 20 31 32 35 39 37 32 0a  Linie:   125972.
>>   001ec150  4c 69 6e 69 65 3a 20 20 20 31 32 35 39 37 33 0a  Linie:   125973.
>>   001ec160  4c 69 6e 69 65 3a 20 20 20 31 32 35 39 37 34 0a  Linie:   125974.
>>
>> Is there anything else than bit 16 in the PCI_CFG register which needs to be set
>> to force non-coherent PCI accesses and avoid the PCI errata?
>>
>> /Hartvig
>>
>>
>>
>>

[-- Attachment #2: Type: text/html, Size: 8369 bytes --]

  reply	other threads:[~2003-03-31 19:17 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-03-31 12:08 Au1500 hardware cache coherency Hartvig Ekner
2003-03-31 14:41 ` Eric DeVolder
2003-03-31 15:14   ` Hartvig Ekner
2003-03-31 18:06     ` Eric DeVolder
2003-03-31 19:24       ` Hartvig Ekner [this message]
2003-03-31 20:33         ` Pete Popov
2003-04-01  7:51           ` Hartvig Ekner
2003-04-01 18:22             ` Pete Popov
2003-04-01 18:23               ` Pete Popov
2003-04-02 12:17               ` Maciej W. Rozycki
2003-03-31 18:35 ` Pete Popov
2003-04-01 11:47   ` Ralf Baechle

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=3E889602.62B7AB6B@ekner.info \
    --to=hartvig@ekner.info \
    --cc=eric.devolder@amd.com \
    --cc=linux-mips@linux-mips.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox