Thread (41 messages) 41 messages, 7 authors, 2016-06-01

Re: [PATCH] PCI: Wait for 50ms after bridge is powered up

From: Mika Westerberg <mika.westerberg@linux.intel.com>
Date: 2016-05-30 09:33:26
Also in: linux-pci

On Sat, May 28, 2016 at 02:29:06PM +0200, Rafael J. Wysocki wrote:
On Thursday, May 26, 2016 02:03:08 PM Mika Westerberg wrote:
quoted
On Thu, May 26, 2016 at 12:45:57PM +0200, Lukas Wunner wrote:
quoted
quoted
The PCI PM specification version 1.2 says this in chapter 4.2 (page 37):

  There is a minimum time requirement of 50 ms which must be provided by
  system software between when the bus is switched from B2 to B0 and
  when a function on the bus is accessed to allow time for the clock to
  start up and the bus to settle.
But why do we wait 50 ms when *suspending*, i.e. going from B0 to B2?
I guess because PCI requires delays of 10ms for both directions D0 <->
D3hot (see pci_raw_set_power_state()).
quoted
(Assuming B2 is the state when the bridge goes to D3hot, which I'm not
sure of. The spec says that the bus state may optionally be B3 if the
bridge is in D3hot.)
B3 is the state where the bus goes when it's power is removed so I would
expect that to require also the 50ms even though the spec does not
explicitly say so.
quoted
quoted
Not sure how much of that still applies to modern hardware.
Could you ask hardware engineers at Intel what the bus state is on
modern chipsets (say, ILK or newer) and Thunderbolt ports to clarify
this?
I can try but it is not always easy to find the right person in company
as big as Intel.
Well, even if you find someone to tell you that, what about non-Intel?
Indeed, I was hoping to find someone who knows more about PCIe in
general and it turns out I found one :-)
Are we going to ever know a value that's going to work for everybody unless
that value is clearly stated in the spec?
That is a good question and the person I managed to find tells me that
the values are already in the spec.

So there are really no B-states in PCIe. Closest thing is L-states which
are defined in the PCIe spec. The spec has two timing limitations:

 - After bringing the device to D0/L0 from D3hot/L1 there is a
   required 10ms delay after the write to PMCSR before any other config
   space access (5.3.1.4 in PCIe spec 3.1a).

 - After bringing the device out of reset, which is the path to D0/L0
   from D3cold, there is a required 100ms delay before accessing the
   device's config space (6.6.1 in PCIe spec 3.1a).

I also learned that both of these can be shortened with following
mechanisms:

 - PCIe readines notifications (6.23 in PCIe spec 3.1a)
 - ACPI _DSM method returning readines durations from  (4.6.9 in PCI
   firmware spec 3.2).

I think it is actually worth looking into the two mechanisms and try to
get Linux support them.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help