From: "Maciej W. Rozycki" <macro@linux-mips.org>
To: Mikulas Patocka <mpatocka@redhat.com>
Cc: Arnd Bergmann <arnd@arndb.de>,
Richard Henderson <rth@twiddle.net>,
Ivan Kokshaysky <ink@jurassic.park.msu.ru>,
Matt Turner <mattst88@gmail.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
alpha <linux-alpha@vger.kernel.org>,
linux-serial@vger.kernel.org, linux-rtc@vger.kernel.org
Subject: Re: [PATCH 1/2 v3] alpha: add a delay to inb_p, inb_w and inb_l
Date: Mon, 11 May 2020 15:58:24 +0100 (BST) [thread overview]
Message-ID: <alpine.LFD.2.21.2005111320220.677301@eddie.linux-mips.org> (raw)
In-Reply-To: <alpine.LRH.2.02.2005101443290.15420@file01.intranet.prod.int.rdu2.redhat.com>
On Sun, 10 May 2020, Mikulas Patocka wrote:
> > > That's what we do on some other architectures to emulate the non-posted
> > > behavior of out[bwl], as required by PCI. I can't think of any reasons to
> > > have a barrier before in[bwl], or after write[bwl], but we generally want
> > > one after out[bwl]
> >
> > Alpha is weakly ordered, also WRT MMIO. The details are a bit obscure
> > (and were discussed before in a previous iteration of these patches), but
> > my understanding is multiple writes can be merged and writes can be
> > reordered WRT reads, even on UP. It's generally better for performance to
>
> We discussed it some times ago, and the conclusion was that reads and
> writes to the same device are not reordered on Alpha. Reads and writes to
> different devices or to memory may be reordered.
Except that "device" in this context is a particular MMIO location; most
peripherals span multiple locations, including the RTC and the UART in the
Avanti line in particular.
> In these problematic cases, we only access serial port or real time clock
> using a few ports (and these devices don't have DMA, so there's not any
> interaction with memory) - so I conclude that it is timing problem and not
> I/O reordering problem.
Individual PCI port locations correspond to different MMIO locations, so
yes, accesses to these can be reordered (merging won't happen due to the
use of the sparse address space).
As I noted using a small program to verify actual behaviour ought to
reveal what the problem really is. And /dev/mem can be mmapped for PCI
port I/O access on Alpha (some X-servers do this), so it can be done even
in the userland with a running system.
And if timing is indeed the culprit, then I think it will be best fixed
in the 82378IB southbridge, i.e.[1]:
"The I/O recovery mechanism in the SIO is used to add additional recovery
delay between PCI originated 8-bit and 16-bit I/O cycles to the ISA Bus.
The SIO automatically forces a minimum delay of four SYSCLKs between
back-to-back 8 and 16 bit I/O cycles to the ISA Bus. The delay is
measured from the rising edge of the I/O command (IOR# or IOW#) to the
falling edge of the next BALE. If a delay of greater than four SYSCLKs is
required, the ISA I/O Recovery Time Register can be programmed to increase
the delay in increments of SYSCLKs. Note that no additional delay is
inserted for back-to-back I/O "sub cycles" generated as a result of byte
assembly or disassembly. This register defaults to 8 and 16-bit recovery
enabled with two clocks added to the standard I/O recovery."
where it won't be causing unnecessary overhead for native PCI devices or
indeed excessive one for ISA devices. It might be interesting to note
that later SIO versions like the 82378ZB increased the minimum to five
SYSCLKs, so maybe a missing SYSCLK (that can still be inserted by suitably
programming the ICRT) is the source of the problem?
References:
[1] "82378IB System I/O (SIO)", April 1993, Intel Corporation, Order
Number: 290473-002, Section 4.1.17 "ICRT -- ISA Controller Recovery
Timer Register"
Maciej
next prev parent reply other threads:[~2020-05-13 22:47 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-06 11:21 [PATCH 1/2] alpha: add a delay between RTC port write and read Mikulas Patocka
2020-05-06 14:20 ` Arnd Bergmann
2020-05-06 17:12 ` [PATCH 1/2 v2] alpha: add a delay to inb_p, inb_w and inb_l Mikulas Patocka
2020-05-07 8:06 ` [PATCH 1/2 v3] " Mikulas Patocka
2020-05-07 8:20 ` Greg Kroah-Hartman
2020-05-07 10:53 ` Mikulas Patocka
2020-05-07 13:30 ` Arnd Bergmann
2020-05-07 14:09 ` Mikulas Patocka
2020-05-07 15:08 ` Arnd Bergmann
2020-05-07 15:45 ` Mikulas Patocka
2020-05-07 15:46 ` [PATCH v4] alpha: add a barrier after outb, outw and outl Mikulas Patocka
2020-05-07 19:12 ` Arnd Bergmann
2020-05-10 1:27 ` Maciej W. Rozycki
2020-05-10 1:25 ` [PATCH 1/2 v3] alpha: add a delay to inb_p, inb_w and inb_l Maciej W. Rozycki
2020-05-10 18:50 ` Mikulas Patocka
2020-05-11 14:58 ` Maciej W. Rozycki [this message]
2020-05-12 19:35 ` Mikulas Patocka
2020-05-13 14:41 ` Ivan Kokshaysky
2020-05-13 16:13 ` Greg Kroah-Hartman
2020-05-13 17:17 ` Maciej W. Rozycki
2020-05-22 13:03 ` Mikulas Patocka
2020-05-22 13:37 ` Maciej W. Rozycki
2020-05-22 13:26 ` Mikulas Patocka
2020-05-22 20:00 ` Mikulas Patocka
2020-05-23 10:26 ` [PATCH v4] alpha: fix memory barriers so that they conform to the specification Mikulas Patocka
2020-05-23 15:10 ` Ivan Kokshaysky
2020-05-23 15:34 ` Mikulas Patocka
2020-05-23 15:37 ` [PATCH v5] " Mikulas Patocka
2020-05-24 14:54 ` Maciej W. Rozycki
2020-05-25 13:56 ` Mikulas Patocka
2020-05-25 14:07 ` Arnd Bergmann
2020-05-25 14:45 ` Maciej W. Rozycki
2020-05-25 15:53 ` [PATCH v6] " Mikulas Patocka
2020-05-26 14:47 ` [PATCH v7] " Mikulas Patocka
2020-05-27 0:18 ` Maciej W. Rozycki
2020-06-08 6:58 ` Mikulas Patocka
2020-06-08 23:49 ` Matt Turner
2020-05-25 15:54 ` [PATCH v5] " Mikulas Patocka
2020-05-25 16:39 ` Maciej W. Rozycki
2020-05-26 14:48 ` Mikulas Patocka
2020-05-27 0:23 ` Maciej W. Rozycki
2020-05-23 16:44 ` [PATCH v4] " Maciej W. Rozycki
2020-05-23 17:09 ` Mikulas Patocka
2020-05-23 19:27 ` Maciej W. Rozycki
2020-05-23 20:11 ` Mikulas Patocka
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=alpine.LFD.2.21.2005111320220.677301@eddie.linux-mips.org \
--to=macro@linux-mips.org \
--cc=arnd@arndb.de \
--cc=gregkh@linuxfoundation.org \
--cc=ink@jurassic.park.msu.ru \
--cc=linux-alpha@vger.kernel.org \
--cc=linux-rtc@vger.kernel.org \
--cc=linux-serial@vger.kernel.org \
--cc=mattst88@gmail.com \
--cc=mpatocka@redhat.com \
--cc=rth@twiddle.net \
/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;
as well as URLs for NNTP newsgroup(s).