What does OS do with the 'ranges' property in PCI RC node in the device tree?

Saad Masood saadahmed42 at gmail.com
Mon Nov 21 11:51:53 EST 2022


Hi Chan,
    The O/S builds out multiple memory nodes using the addresses in the
'ranges' property.  'Each node is divided up into a number of blocks called
*zones* which represent ranges within memory...' from (
https://www.kernel.org/doc/gorman/html/understand/understand005.html)

    Also, please read this:


https://devicetree-specification.readthedocs.io/en/latest/chapter3-devicenodes.html

"A memory device node is required for all device trees and describes the
physical memory layout for the system. If a system has multiple ranges of
memory, multiple memory nodes can be created, or the ranges can be
specified in the *reg* property of a single memory node."

Thanks & regards,



Saad


On Mon, Nov 21, 2022 at 8:16 AM Chan Kim <ckim at etri.re.kr> wrote:

> Hello linux experts,
>
> I read https://elinux.org/Device_Tree_Usage, and it says about the
> "ranges"
> property in the PCIe Root Complex node,
> "The above ranges define how the CPU see the PCI memory, and helps the CPU
> to set up the right memory windows and write the right parameters into
> various PCI device registers. This is sometimes referred to as outbound
> memory."
> I know the 'ranges' property shows how the PCI devices's addresses are
> mapped to host CPU's addresses. The PCI devices are identified by the
> bus/device/function pair and the address is indicated the
> config/IO/memory32/memory64 types and start and length in the PCI bus.
> I understand that the BIOS or bootloader initializes PCI RC and does the
> enumeration and assigns the BAR registers so that the device's resources
> are
> mapped in host CPU's address space.
> And I guess the bootloader fixes the device tree (or ACPI table) by filling
> in the 'ranges' property. Is it correct?
> My another question is, what does the OS do with this 'ranges' information
> in the device tree? Of course the PCI device's driver uses BAR to get the
> physical address (seen from the host CPU) and by ioremap, it can access the
> devices memory and registers using virtual address. In the above link it
> says "The above ranges define how the CPU see the PCI memory, and helps the
> CPU to set up the right memory windows and write the right parameters into
> various PCI device registers. This is sometimes referred to as outbound
> memory." What does it mean? Does the OS do something with this 'ranges'
> value?
> I'll appreciated if someone could explain it to me.
> Thank you!
>
> Chan Kim
>
>
>
>
> _______________________________________________
> Kernelnewbies mailing list
> Kernelnewbies at kernelnewbies.org
> https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20221121/2313a779/attachment.html>


More information about the Kernelnewbies mailing list