linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Bjorn Helgaas <helgaas@kernel.org>
To: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Cc: Honghui Zhang <honghui.zhang@mediatek.com>,
	youlin.pei@mediatek.com, devicetree@vger.kernel.org,
	ulf.hansson@linaro.org, ryder.lee@mediatek.com,
	marc.zyngier@arm.com, linux-pci@vger.kernel.org,
	sean.wang@mediatek.com, linux-kernel@vger.kernel.org,
	yt.shen@mediatek.com, matthias.bgg@gmail.com,
	linux-mediatek@lists.infradead.org, bhelgaas@google.com,
	yingjoe.chen@mediatek.com, eddie.huang@mediatek.com,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v6 2/9] PCI: mediatek: Fixup class ID for MT7622 as PCI_CLASS_BRIDGE_PCI
Date: Fri, 12 Oct 2018 09:12:02 -0500	[thread overview]
Message-ID: <20181012141202.GV5906@bhelgaas-glaptop.roam.corp.google.com> (raw)
In-Reply-To: <20181012102230.GA23257@e107981-ln.cambridge.arm.com>

On Fri, Oct 12, 2018 at 11:22:30AM +0100, Lorenzo Pieralisi wrote:
> On Fri, Oct 12, 2018 at 04:01:29PM +0800, Honghui Zhang wrote:
>> On Thu, 2018-10-11 at 12:38 +0100, Lorenzo Pieralisi wrote:
>>> On Tue, Oct 09, 2018 at 11:08:15AM +0800, Honghui Zhang wrote:
>>>> On Mon, 2018-10-08 at 18:23 +0100, Lorenzo Pieralisi wrote:
>>>>> On Mon, Oct 08, 2018 at 11:24:41AM +0800, honghui.zhang@mediatek.com wrote:
>>>>>> From: Honghui Zhang <honghui.zhang@mediatek.com>
>>>>>> 
>>>>>> The PCIe controller of MT7622 has TYPE 1 configuration
>>>>>> space type, but the HW default class type values is
>>>>>> invalid.
>>>>>> 
>>>>>> The commit 101c92dc80c8 ("PCI: mediatek: Set up vendor ID
>>>>>> and class type for MT7622") have set the class ID for
>>>>>> MT7622 as PCI_CLASS_BRIDGE_HOSTe, but it's not workable
>>>>>> for MT7622:
>>>>>> 
>>>>>> In __pci_bus_assign_resources, the framework only setup
>>>>>> bridge's resource window only if class type is
>>>>>> PCI_CLASS_BRIDGE_PCI. Or it will leave the subordinary PCIe
>>>>>> device's MMIO window un-touched.

I think __pci_bus_assign_resources() should be testing dev->hdr_type
instead of dev->class.  The connection between "Header Type" and the
layout of the rest of the header is very explicit (PCI r3.0 sec 6.1,
PCIe r4.0 sec 7.5.1.1.9), and the reason for the switch statement in
__pci_bus_assign_resources() is precisely to determine which layout to
use.

There are several other uses of dev->class in setup-bus.c that I think
should also be changed to use dev->hdr_type.

If we make these changes in setup-bus.c, I suspect the class code you
assign won't matter too much.  There are a few other tests of the
class code to figure out whether to leave certain things untouched.
These seem a little hacky to me, but we're probably stuck with them
for now, so you should look and see whether they apply to your
situation.

>>>> And for MT7622, it integrated with block of internal control
>>>> registers, type 1 configuration space, and is considered as a
>>>> root complex.
>>> 
>>> I assume you mean a type 1 config header here. I do not think it
>>> is mandatory for a host bridge to have a type 1 config header (and
>>> related bridge windows + primary/secondary/subordinate bus
>>> numbers) but I do not know how the IP you are programming is
>>> designed.

It is definitely not mandatory for a host bridge to have a type 1
header.  I'm not even sure that would make sense: the "Primary Bus
Number" would not apply to a host bridge (since a host bridge's
primary bus is some sort of CPU bus, not a PCI bus), and a type 1
device cannot perform address translation between its primary and
secondary buses, while a host bridge can.

A Root Port is a type 1 device where the primary bus is logically
internal to the Root Complex.  A host bridge bridges from the CPU bus
to that internal bus and might perform address translation.  The Root
Port must be a PCI device.  A host bridge, being a bridge *to* the PCI
domain, is not itself generally programmed via PCI config space and
might not even be visible as a device in PCI config space.

Bjorn

  reply	other threads:[~2018-10-12 14:12 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-08  3:24 [PATCH v6 0/9] PCI: mediatek: fixup find_port, enable_msi and add pm, module support honghui.zhang
2018-10-08  3:24 ` [PATCH v6 1/9] PCI: mediatek: Using slot's devfn for compare to fix mtk_pcie_find_port logic honghui.zhang
2018-10-08  3:24 ` [PATCH v6 2/9] PCI: mediatek: Fixup class ID for MT7622 as PCI_CLASS_BRIDGE_PCI honghui.zhang
2018-10-08 17:23   ` Lorenzo Pieralisi
2018-10-09  3:08     ` Honghui Zhang
2018-10-11 11:38       ` Lorenzo Pieralisi
2018-10-12  8:01         ` Honghui Zhang
2018-10-12 10:22           ` Lorenzo Pieralisi
2018-10-12 14:12             ` Bjorn Helgaas [this message]
2018-10-15  2:42               ` Honghui Zhang
2018-10-15 18:34                 ` Bjorn Helgaas
2018-10-15  2:04             ` Honghui Zhang
2018-10-08  3:24 ` [PATCH v6 3/9] PCI: mediatek: Remove the redundant dev->pm_domain check honghui.zhang
2018-10-08  3:24 ` [PATCH v6 4/9] PCI: mediatek: Convert to use pci_host_probe() honghui.zhang
2018-10-08  3:24 ` [PATCH v6 5/9] PCI: mediatek: Move the mtk_pcie_startup_port_v2 function's define after mtk_pcie_setup_irq honghui.zhang
2018-10-08  3:24 ` [PATCH v6 6/9] PCI: mediatek: Fixup enable msi logic by enable msi after clock enabled honghui.zhang
2018-10-08  3:24 ` [PATCH v6 7/9] PCI: mediatek: Add system pm support for MT2712 and MT7622 honghui.zhang
2018-10-08  3:24 ` [PATCH v6 8/9] PCI: mediatek: Save the GIC IRQ in mtk_pcie_port honghui.zhang
2018-10-08  3:24 ` [PATCH v6 9/9] PCI: mediatek: Add loadable kernel module support honghui.zhang
2018-10-08 17:31 ` [PATCH v6 0/9] PCI: mediatek: fixup find_port, enable_msi and add pm, " Bjorn Helgaas
2018-10-09  1:44   ` Honghui Zhang

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=20181012141202.GV5906@bhelgaas-glaptop.roam.corp.google.com \
    --to=helgaas@kernel.org \
    --cc=bhelgaas@google.com \
    --cc=devicetree@vger.kernel.org \
    --cc=eddie.huang@mediatek.com \
    --cc=honghui.zhang@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=lorenzo.pieralisi@arm.com \
    --cc=marc.zyngier@arm.com \
    --cc=matthias.bgg@gmail.com \
    --cc=ryder.lee@mediatek.com \
    --cc=sean.wang@mediatek.com \
    --cc=ulf.hansson@linaro.org \
    --cc=yingjoe.chen@mediatek.com \
    --cc=youlin.pei@mediatek.com \
    --cc=yt.shen@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 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).