All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
To: Jianjun Wang <jianjun.wang@mediatek.com>
Cc: Bjorn Helgaas <helgaas@kernel.org>,
	ryder.lee@mediatek.com, robh+dt@kernel.org,
	matthias.bgg@gmail.com, linux-pci@vger.kernel.org,
	mark.rutland@arm.com, devicetree@vger.kernel.org,
	youlin.pei@mediatek.com, linux-kernel@vger.kernel.org,
	linux-mediatek@lists.infradead.org, honghui.zhang@mediatek.com,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH 2/2] PCI: mediatek: Add controller support for MT7629
Date: Wed, 23 Jan 2019 15:40:24 +0000	[thread overview]
Message-ID: <20190123154023.GA1157@e107981-ln.cambridge.arm.com> (raw)
In-Reply-To: <1545651628.5634.57.camel@mhfsdcap03>

On Mon, Dec 24, 2018 at 07:40:28PM +0800, Jianjun Wang wrote:
> On Thu, 2018-12-20 at 12:20 -0600, Bjorn Helgaas wrote:
> > On Tue, Dec 18, 2018 at 05:19:24PM +0800, Jianjun Wang wrote:
> > > On Mon, 2018-12-17 at 15:46 +0000, Lorenzo Pieralisi wrote:
> > > > On Mon, Dec 17, 2018 at 08:32:47AM -0600, Bjorn Helgaas wrote:
> > > > > On Mon, Dec 17, 2018 at 04:19:39PM +0800, Jianjun Wang wrote:
> > > > > > On Thu, 2018-12-13 at 08:55 -0600, Bjorn Helgaas wrote:
> > > > > > > On Thu, Dec 06, 2018 at 09:09:13AM +0800, Jianjun Wang wrote:
> > > > > > > > The read value of BAR0 is 0xffff_ffff, it's size will be
> > > > > > > > calculated as 4GB in arm64 but bogus alignment values at
> > > > > > > > arm32, the pcie device and devices behind this bridge will
> > > > > > > > not be enabled. Fix it's BAR0 resource size to guarantee
> > > > > > > > the pcie devices will be enabled correctly.
> > > > > > > 
> > > > > > > So this is a hardware erratum?  Per spec, a memory BAR has
> > > > > > > bit 0 hardwired to 0, and an IO BAR has bit 1 hardwired to
> > > > > > > 0.
> > > > > > 
> > > > > > Yes, it only works properly on 64bit platform.
> > > > > 
> > > > > I don't understand.  BARs are supposed to work the same
> > > > > regardless of whether it's a 32- or 64-bit platform.  If this is
> > > > > a workaround for a hardware defect, please just say that
> > > > > explicitly.
> > > > 
> > > > I do not understand this either. First thing to do is to describe
> > > > the problem properly so that we can actually find a solution to
> > > > it.
> > > 
> > > This BAR0 is a 64-bit memory BAR, the HW default values for this BAR
> > > is 0xffff_ffff_0000_0000 and it could not be changed except by
> > > config write operation.
> > 
> > If you literally get 0xffff_ffff_0000_0000 when reading the BAR, that
> > is out of spec because the low-order 4 bits of a 64-bit memory BAR
> > cannot all be zero.
> > 
> > A 64-bit BAR consumes two DWORDS in config space.  For a 64-bit BAR0,
> > the DWORD at 0x10 contains the low-order bits, and the DWORD at 0x14
> > contains the upper 32 bits.  Bits 0-3 of the low-order DWORD (the
> > one at 0x10) are read-only, and in this case should contain the value
> > 0b1100 (0xc).  That means the range is prefetchable (bit 3 == 1) and
> > the BAR is 64 bits (bits 2:1 == 10).
> 
> Sorry, I have confused the HW default value and the read value of BAR
> size. The hardware default value is 0xffff_ffff_0000_000c, it's a 64-bit
> BAR with prefetchable range.
> 
> When we start to decoding the BAR, the read value of BAR0 at 0x10 is
> 0x0c, and the value at 0x14 is 0xffff_ffff, so the read value of BAR
> size is 0xffff_ffff_0000_0000, which will be decoded to 0xffff_ffff, and
> it will be set to the end value of BAR0 resource in the pci_dev.
> > 
> > > The calculated BAR size will be 0 in 32-bit platform since the
> > > phys_addr_t is a 32bit value in 32-bit platform.
> > 
> > Either (1) this is a hardware defect that feeds incorrect data to the
> > BAR size calculation, or (2) there's a problem in the BAR size
> > calculation code.  We need to figure out which one and work around or
> > fix it correctly.
> 
> The BAR size is calculated by the code (res->end - res->start + 1) is
> fine, I think it's a hardware defect because that we can not change the
> hardware default value or just disable it since we don't using it.

Apologies for the delay in getting back to this.

This looks like a kernel defect, not a HW defect.

I need some time to make up my mind on what the right fix for this
but it is most certainly not this patch.

Lorenzo

WARNING: multiple messages have this Message-ID (diff)
From: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
To: Jianjun Wang <jianjun.wang@mediatek.com>
Cc: mark.rutland@arm.com, devicetree@vger.kernel.org,
	ryder.lee@mediatek.com, linux-pci@vger.kernel.org,
	youlin.pei@mediatek.com, linux-kernel@vger.kernel.org,
	robh+dt@kernel.org, Bjorn Helgaas <helgaas@kernel.org>,
	honghui.zhang@mediatek.com, matthias.bgg@gmail.com,
	linux-mediatek@lists.infradead.org,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH 2/2] PCI: mediatek: Add controller support for MT7629
Date: Wed, 23 Jan 2019 15:40:24 +0000	[thread overview]
Message-ID: <20190123154023.GA1157@e107981-ln.cambridge.arm.com> (raw)
In-Reply-To: <1545651628.5634.57.camel@mhfsdcap03>

On Mon, Dec 24, 2018 at 07:40:28PM +0800, Jianjun Wang wrote:
> On Thu, 2018-12-20 at 12:20 -0600, Bjorn Helgaas wrote:
> > On Tue, Dec 18, 2018 at 05:19:24PM +0800, Jianjun Wang wrote:
> > > On Mon, 2018-12-17 at 15:46 +0000, Lorenzo Pieralisi wrote:
> > > > On Mon, Dec 17, 2018 at 08:32:47AM -0600, Bjorn Helgaas wrote:
> > > > > On Mon, Dec 17, 2018 at 04:19:39PM +0800, Jianjun Wang wrote:
> > > > > > On Thu, 2018-12-13 at 08:55 -0600, Bjorn Helgaas wrote:
> > > > > > > On Thu, Dec 06, 2018 at 09:09:13AM +0800, Jianjun Wang wrote:
> > > > > > > > The read value of BAR0 is 0xffff_ffff, it's size will be
> > > > > > > > calculated as 4GB in arm64 but bogus alignment values at
> > > > > > > > arm32, the pcie device and devices behind this bridge will
> > > > > > > > not be enabled. Fix it's BAR0 resource size to guarantee
> > > > > > > > the pcie devices will be enabled correctly.
> > > > > > > 
> > > > > > > So this is a hardware erratum?  Per spec, a memory BAR has
> > > > > > > bit 0 hardwired to 0, and an IO BAR has bit 1 hardwired to
> > > > > > > 0.
> > > > > > 
> > > > > > Yes, it only works properly on 64bit platform.
> > > > > 
> > > > > I don't understand.  BARs are supposed to work the same
> > > > > regardless of whether it's a 32- or 64-bit platform.  If this is
> > > > > a workaround for a hardware defect, please just say that
> > > > > explicitly.
> > > > 
> > > > I do not understand this either. First thing to do is to describe
> > > > the problem properly so that we can actually find a solution to
> > > > it.
> > > 
> > > This BAR0 is a 64-bit memory BAR, the HW default values for this BAR
> > > is 0xffff_ffff_0000_0000 and it could not be changed except by
> > > config write operation.
> > 
> > If you literally get 0xffff_ffff_0000_0000 when reading the BAR, that
> > is out of spec because the low-order 4 bits of a 64-bit memory BAR
> > cannot all be zero.
> > 
> > A 64-bit BAR consumes two DWORDS in config space.  For a 64-bit BAR0,
> > the DWORD at 0x10 contains the low-order bits, and the DWORD at 0x14
> > contains the upper 32 bits.  Bits 0-3 of the low-order DWORD (the
> > one at 0x10) are read-only, and in this case should contain the value
> > 0b1100 (0xc).  That means the range is prefetchable (bit 3 == 1) and
> > the BAR is 64 bits (bits 2:1 == 10).
> 
> Sorry, I have confused the HW default value and the read value of BAR
> size. The hardware default value is 0xffff_ffff_0000_000c, it's a 64-bit
> BAR with prefetchable range.
> 
> When we start to decoding the BAR, the read value of BAR0 at 0x10 is
> 0x0c, and the value at 0x14 is 0xffff_ffff, so the read value of BAR
> size is 0xffff_ffff_0000_0000, which will be decoded to 0xffff_ffff, and
> it will be set to the end value of BAR0 resource in the pci_dev.
> > 
> > > The calculated BAR size will be 0 in 32-bit platform since the
> > > phys_addr_t is a 32bit value in 32-bit platform.
> > 
> > Either (1) this is a hardware defect that feeds incorrect data to the
> > BAR size calculation, or (2) there's a problem in the BAR size
> > calculation code.  We need to figure out which one and work around or
> > fix it correctly.
> 
> The BAR size is calculated by the code (res->end - res->start + 1) is
> fine, I think it's a hardware defect because that we can not change the
> hardware default value or just disable it since we don't using it.

Apologies for the delay in getting back to this.

This looks like a kernel defect, not a HW defect.

I need some time to make up my mind on what the right fix for this
but it is most certainly not this patch.

Lorenzo

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2019-01-23 15:40 UTC|newest]

Thread overview: 64+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-12-06  1:09 [PATCH 0/2] PCI: mediatek: Add support for MT7629 Jianjun Wang
2018-12-06  1:09 ` Jianjun Wang
2018-12-06  1:09 ` Jianjun Wang
2018-12-06  1:09 ` [PATCH 1/2] dt-bindings: PCI: " Jianjun Wang
2018-12-06  1:09   ` Jianjun Wang
2018-12-06  1:09   ` Jianjun Wang
2018-12-19 20:38   ` Rob Herring
2018-12-19 20:38     ` Rob Herring
2018-12-19 20:38     ` Rob Herring
2018-12-06  1:09 ` [PATCH 2/2] PCI: mediatek: Add controller " Jianjun Wang
2018-12-06  1:09   ` Jianjun Wang
2018-12-06  1:09   ` Jianjun Wang
2018-12-06  5:53   ` Honghui Zhang
2018-12-06  5:53     ` Honghui Zhang
2018-12-06  5:53     ` Honghui Zhang
2018-12-07 12:56     ` Jianjun Wang
2018-12-07 12:56       ` Jianjun Wang
2018-12-07 12:56       ` Jianjun Wang
2018-12-12  5:43       ` Honghui Zhang
2018-12-12  5:43         ` Honghui Zhang
2018-12-12  5:43         ` Honghui Zhang
2018-12-13  3:39   ` Ryder Lee
2018-12-13  3:39     ` Ryder Lee
2018-12-13  3:39     ` Ryder Lee
2018-12-17  7:51     ` Jianjun Wang
2018-12-17  7:51       ` Jianjun Wang
2018-12-17  7:51       ` Jianjun Wang
2018-12-13 14:55   ` Bjorn Helgaas
2018-12-13 14:55     ` Bjorn Helgaas
2018-12-17  8:19     ` Jianjun Wang
2018-12-17  8:19       ` Jianjun Wang
2018-12-17  8:19       ` Jianjun Wang
2018-12-17 14:32       ` Bjorn Helgaas
2018-12-17 14:32         ` Bjorn Helgaas
2018-12-17 15:46         ` Lorenzo Pieralisi
2018-12-17 15:46           ` Lorenzo Pieralisi
2018-12-18  9:19           ` Jianjun Wang
2018-12-18  9:19             ` Jianjun Wang
2018-12-18  9:19             ` Jianjun Wang
2018-12-18 15:32             ` Lorenzo Pieralisi
2018-12-18 15:32               ` Lorenzo Pieralisi
2018-12-21 13:13               ` Jianjun Wang
2018-12-21 13:13                 ` Jianjun Wang
2018-12-21 13:13                 ` Jianjun Wang
2018-12-20 18:20             ` Bjorn Helgaas
2018-12-20 18:20               ` Bjorn Helgaas
2018-12-24 11:40               ` Jianjun Wang
2018-12-24 11:40                 ` Jianjun Wang
2018-12-24 11:40                 ` Jianjun Wang
2019-01-23 15:40                 ` Lorenzo Pieralisi [this message]
2019-01-23 15:40                   ` Lorenzo Pieralisi
2019-02-19  7:01                   ` Jianjun Wang
2019-02-19  7:01                     ` Jianjun Wang
2019-02-19  7:01                     ` Jianjun Wang
2019-02-19 15:03                     ` Lorenzo Pieralisi
2019-02-19 15:03                       ` Lorenzo Pieralisi
2019-06-28  6:38                       ` Jianjun Wang
2019-06-28  6:38                         ` Jianjun Wang
2019-06-28  6:38                         ` Jianjun Wang
2018-12-06  1:40 ` [PATCH 0/2] PCI: mediatek: Add " Ryder Lee
2018-12-06  1:40   ` Ryder Lee
2018-12-06  1:40   ` Ryder Lee
  -- strict thread matches above, loose matches on Subject: below --
2018-12-05  7:57 Jianjun Wang
2018-12-05  7:57 ` [PATCH 2/2] PCI: mediatek: Add controller " Jianjun Wang
2018-12-05  7:30 [PATCH 0/2] PCI: mediatek: Add " Jianjun Wang
2018-12-05  7:30 ` [PATCH 2/2] PCI: mediatek: Add controller " Jianjun Wang

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=20190123154023.GA1157@e107981-ln.cambridge.arm.com \
    --to=lorenzo.pieralisi@arm.com \
    --cc=devicetree@vger.kernel.org \
    --cc=helgaas@kernel.org \
    --cc=honghui.zhang@mediatek.com \
    --cc=jianjun.wang@mediatek.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mediatek@lists.infradead.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=matthias.bgg@gmail.com \
    --cc=robh+dt@kernel.org \
    --cc=ryder.lee@mediatek.com \
    --cc=youlin.pei@mediatek.com \
    /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.