From: Bartosz Szczepanek <bsz@semihalf.com>
To: "Ni, Ruiyu" <ruiyu.ni@intel.com>
Cc: "edk2-devel@lists.01.org" <edk2-devel@lists.01.org>
Subject: Re: CPU/PCI addressing in PciIoGetAttributes
Date: Tue, 5 Sep 2017 09:44:30 +0200 [thread overview]
Message-ID: <CABLO=+kYRtXPZO_t-cG+T-w99f0=sSt8YDzb_XqfNOeTukcV3w@mail.gmail.com> (raw)
In-Reply-To: <734D49CCEBEEF84792F5B80ED585239D5BA23CEF@SHSMSX104.ccr.corp.intel.com>
Ray, thanks for your answer. This makes sense to me, but I still see some
inconsistency in regard to specification.
UEFI spec says:
> Address Range Minimum. Starting address of a BAR.
and then
> Address Translation Offset. Offset to apply to the Starting address of a
> BAR to convert it to a PCI address.
If it's needed to apply AddrTranslationOffset to AddrRangeMin to convert it
*to a PCI address*, how can it be a PCI (device) address already?
To me it seems like a discrepancy between UEFI specification and what
industry does. Please let me know what is your understanding of the
snippets above, if this is a mistake in spec it would be great to agree on
that and request appropriate correction.
Best regards,
Bartosz
PS – I wrote PciIoGetAttributes in last mail instead of
PciIoGetBarAttributes, sorry for the mistake.
2017-09-05 9:07 GMT+02:00 Ni, Ruiyu <ruiyu.ni@intel.com>:
> Bartosz,
>
>
>
> Based on your findings, the AddrRangeMin has to be a device addressJ
>
>
>
> As far as I can remember, this history is:
>
> In the very beginning, Spec owner assumes the device address equals to CPU
> address.
>
> The implementation of GetBarAttributes() directly returns the address read
> from the BAR.
>
> But later we found device address doesn’t equal to CPU address, especially
> in ARM platform.
>
> So in order to expose the offset of the two addresses, the
> AddressTranslationOffset field was used.
>
> To avoid breaking the existing consumers, GetBarAttributes() remains to
> return the BAR address.
>
>
>
> Anyone please correct me if I am wrong.
>
>
>
> Thanks,
>
> Ray
>
>
>
> *From:* Bartosz Szczepanek [mailto:bsz@semihalf.com]
> *Sent:* Monday, September 4, 2017 7:43 PM
> *To:* edk2-devel@lists.01.org
> *Cc:* Ni, Ruiyu <ruiyu.ni@intel.com>
> *Subject:* [edk2] CPU/PCI addressing in PciIoGetAttributes
>
>
>
> Hi guys,
>
>
>
> I have some doubt about PciIoGetAttributes behaviour on aarch64 platform
> with non-uniform CPU:PCI address space mapping. I'll be grateful if you
> verify my understanding.
>
>
>
> According to UEFI specification, AddrRangeMin in QWORD Address Space
> Descriptor returned by PciIoGetAttributes() should be a CPU address, at
> least that's what I conclude from:
>
> > Address Translation Offset. Offset to apply to the Starting address of a
>
> > BAR *to convert it to a PCI address*. This value is zero unless the
>
> > HostAddress and DeviceAddress for the BAR are different.
>
> This mentions "Starting address", which I suppose refers to AddrRangeMin.
> It needs to be converted to PCI address, so as-is it should be in CPU
> address space.
>
>
>
> On the other hand, the AddrRangeMin is assigned BaseAddress value obtained
> directly from PciBar:
>
> > Descriptor->AddrRangeMin = PciIoDevice->PciBar[BarIndex].BaseAddress;
>
>
>
> PciBar is filled in PciParseBar() using original BAR content (thus
> BaseAddress is not translated, PCI address). This way value that refers to
> PCI space is returned from PciIoGetBarAttributes as CPU address.
>
>
>
> Shouldn't there be translation of it somewhere on the way? Or is my
> understanding flawed? Either way, please let me know.
>
>
>
> Best regards,
>
> Bartosz
>
next prev parent reply other threads:[~2017-09-05 7:41 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-04 11:43 CPU/PCI addressing in PciIoGetAttributes Bartosz Szczepanek
2017-09-05 7:07 ` Ni, Ruiyu
2017-09-05 7:44 ` Bartosz Szczepanek [this message]
2017-09-05 13:40 ` Ard Biesheuvel
2017-09-06 9:34 ` Bartosz Szczepanek
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-list 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='CABLO=+kYRtXPZO_t-cG+T-w99f0=sSt8YDzb_XqfNOeTukcV3w@mail.gmail.com' \
--to=devel@edk2.groups.io \
/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