public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Robin Murphy <robin.murphy@arm.com>
To: Mark Kettenis <mark.kettenis@xs4all.nl>,
	Peter Geis <pgwipeout@gmail.com>
Cc: megi@xff.cz, heiko@sntech.de, linux-rockchip@lists.infradead.org,
	robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org,
	michael.riesch@wolfvision.net, frattaroli.nicolas@gmail.com,
	s.hauer@pengutronix.de, frank-w@public-files.de,
	ezequiel@vanguardiasur.com.ar, yifeng.zhao@rock-chips.com,
	jbx6244@gmail.com, devicetree@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2] arm64: dts: rockchip: rk356x: Fix PCIe register map and ranges
Date: Mon, 24 Oct 2022 12:05:38 +0100	[thread overview]
Message-ID: <5a8f9934-1959-7962-d575-e3c2f5bc6ade@arm.com> (raw)
In-Reply-To: <875ygbsrf3.fsf@bloch.sibelius.xs4all.nl>

On 2022-10-22 18:24, Mark Kettenis wrote:
>> From: Peter Geis <pgwipeout@gmail.com>
>> Date: Sat, 22 Oct 2022 08:19:57 -0400
> 
> Hello Peter,
> 
>> On Fri, Oct 21, 2022 at 4:52 PM Mark Kettenis <mark.kettenis@xs4all.nl> wrote:
>>>
>>>> Date: Fri, 21 Oct 2022 21:32:48 +0200
>>>> From: Ondřej Jirman <megi@xff.cz>
>>>>
>>>> On Fri, Oct 21, 2022 at 12:48:15PM -0400, Peter Geis wrote:
>>>>> On Fri, Oct 21, 2022 at 11:39 AM Ondřej Jirman <megi@xff.cz> wrote:
>>>>>>
>>>>>> On Fri, Oct 21, 2022 at 09:07:50AM -0400, Peter Geis wrote:
>>>>>>> Good Morning Heiko,
>>>>>>>
>>>>>>> Apologies for just getting to this, I'm still in the middle of moving
>>>>>>> and just got my lab set back up.
>>>>>>>
>>>>>>> I've tested this patch series and it leads to the same regression with
>>>>>>> NVMe drives. A loop of md5sum on two identical 4GB random files
>>>>>>> produces the following results:
>>>>>>> d11cf0caa541b72551ca22dc5bef2de0  test-rand.img
>>>>>>> fad97e91da8d4fd554c895cafa89809b  test-rand2.img
>>>>>>> 2d56a7baa05c38535f4c19a2b371f90a  test-rand.img
>>>>>>> 74e8e6f93d7c3dc3ad250e91176f5901  test-rand2.img
>>>>>>> 25cfcfecf4dd529e4e9fbbe2be482053  test-rand.img
>>>>>>> 74e8e6f93d7c3dc3ad250e91176f5901  test-rand2.img
>>>>>>> b9637505bf88ed725f6d03deb7065dab  test-rand.img
>>>>>>> f7437e88d524ea92e097db51dce1c60d  test-rand2.img
>>>>>>>
>>>>>>> Before this patch series:
>>>>>>> d11cf0caa541b72551ca22dc5bef2de0  test-rand.img
>>>>>>> d11cf0caa541b72551ca22dc5bef2de0  test-rand2.img
>>>>>>> d11cf0caa541b72551ca22dc5bef2de0  test-rand.img
>>>>>>> d11cf0caa541b72551ca22dc5bef2de0  test-rand2.img
>>>>>>> d11cf0caa541b72551ca22dc5bef2de0  test-rand.img
>>>>>>> d11cf0caa541b72551ca22dc5bef2de0  test-rand2.img
>>>>>>> d11cf0caa541b72551ca22dc5bef2de0  test-rand.img
>>>>>>> d11cf0caa541b72551ca22dc5bef2de0  test-rand2.img
>>>>>>>
>>>>>>> Though I do love where this patch is going and would like to see if it
>>>>>>> can be made to work, in its current form it does not.
>>>>>>
>>>>>> Thanks for the test. Can you please also test v1? Also please share lspci -vvv
>>>>>> of your nvme drive, so that we can see allocated address ranges, etc.
>>>>>
>>>>> Good catch, with your patch as is, the following issue crops up:
>>>>> Region 0: Memory at 300000000 (64-bit, non-prefetchable) [size=16K]
>>>>> Region 2: I/O ports at 1000 [disabled] [size=256]
>>>>>
>>>>> However, with a simple fix, we can get this:
>>>>> Region 0: Memory at 300000000 (64-bit, non-prefetchable) [virtual] [size=16K]
>>>>> Region 2: I/O ports at 1000 [virtual] [size=256]
>>>>>
>>>>> and with it a working NVMe drive.
>>>>>
>>>>> Change the following range:
>>>>> 0x02000000 0x0 0x40000000 0x3 0x00000000 0x0 0x40000000>;
>>>>> to
>>>>> 0x02000000 0x0 0x00000000 0x3 0x00000000 0x0 0x40000000>;
>>>>
>>>> I've already tried this, but this unfrotunately breaks the wifi cards.
>>>> (those only use the I/O space) Maybe because I/O and memory address spaces
>>>> now overlap, I don't know. That's why I used the 1GiB offset for memory
>>>> space.
>>>
>>> Meanwhile, I have an NVMe drive that only works if mmio is completely
>>> untranslated.  This is an ADATA SX8000NP drive, which uses a Silicon
>>> Motion SM2260 controller.
>>>
>>> So for me, a working configuration has the following "ranges":
>>>
>>> ranges = <0x01000000 0x0 0x00000000 0x3 0x3fff0000 0x0 0x00010000>,
>>>           <0x02000000 0x0 0xf4000000 0x0 0xf4000000 0x0 0x02000000>,
>>>           <0x03000000 0x3 0x10000000 0x3 0x10000000 0x0 0x2fff0000>;
>>>
>>> This also needs changes to the "reg" propery:
>>>
>>> reg = <0x3 0xc0000000 0x0 0x00400000>,
>>>        <0x0 0xfe260000 0x0 0x00010000>,
>>>        <0x3 0x00000000 0x0 0x10000000>;
>>
>> Now this is interesting. I've been reading up on PCIe ranges and what
>> is necessary for things to work properly, and I found this interesting
>> article from ARM:
>> https://developer.arm.com/documentation/102337/0000/Programmers-model/Memory-maps/AP-system-memory-map/PCIe-MMIO-and-ECAM-memory-regions
>>
>> TLDR: We need a low region (below 4g) and a high region.
> 
> Well, that description applies to a specific ARM reference design.
> And it appears that the PCIe-RC used in that reference design does not
> support address translation.

Indeed, that's not an "interesting article", it's just documentation for 
some other system that isn't this one. In fact it's a system that 
strictly doesn't even *have* PCIe; the reference designs are not 
complete SoCs, and all that is being described there is the interconnect 
address map for the parts which are in place ready for a customer to 
stitch their choice of PCIe implementation to.

The equivalent for RK3568 is that you *do* have "low" and "high" PCIe 
windows at 0xfx000000 and 0x3xxx00000 respectively in the system 
interconnect address map. How the PCIe controllers choose to relate 
those system MMIO addresses to those to PCI Memory, I/O and Config space 
addresses is another matter entirely.

Robin.

  reply	other threads:[~2022-10-24 11:07 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-10-05  8:54 [PATCH v2] arm64: dts: rockchip: rk356x: Fix PCIe register map and ranges Ondrej Jirman
2022-10-05 11:42 ` Peter Geis
2022-10-05 12:49   ` Ondřej Jirman
2022-10-05 22:08   ` Ondřej Jirman
2022-10-17 11:56     ` Heiko Stuebner
2022-10-21 13:07       ` Peter Geis
2022-10-21 15:39         ` Ondřej Jirman
2022-10-21 16:48           ` Peter Geis
2022-10-21 19:32             ` Ondřej Jirman
2022-10-21 20:52               ` Mark Kettenis
2022-10-22 12:19                 ` Peter Geis
2022-10-22 14:36                   ` Ondřej Jirman
2022-10-22 16:41                   ` Ondřej Jirman
2022-10-22 17:24                   ` Mark Kettenis
2022-10-24 11:05                     ` Robin Murphy [this message]
2022-10-24 20:16                       ` Peter Geis
2022-10-25 10:29                         ` Robin Murphy
2023-03-12 20:13                           ` Mark Kettenis
2023-03-12 20:46                             ` Ondřej Jirman

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=5a8f9934-1959-7962-d575-e3c2f5bc6ade@arm.com \
    --to=robin.murphy@arm.com \
    --cc=devicetree@vger.kernel.org \
    --cc=ezequiel@vanguardiasur.com.ar \
    --cc=frank-w@public-files.de \
    --cc=frattaroli.nicolas@gmail.com \
    --cc=heiko@sntech.de \
    --cc=jbx6244@gmail.com \
    --cc=krzysztof.kozlowski+dt@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-rockchip@lists.infradead.org \
    --cc=mark.kettenis@xs4all.nl \
    --cc=megi@xff.cz \
    --cc=michael.riesch@wolfvision.net \
    --cc=pgwipeout@gmail.com \
    --cc=robh+dt@kernel.org \
    --cc=s.hauer@pengutronix.de \
    --cc=yifeng.zhao@rock-chips.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