Thread (1 message) 1 message, 1 author, 2017-07-25

Re: Duplicated memory node in the Device-Tree (WAS [XEN] Re: Duplicated memory nodes cause the BUG())

From: Mark Rutland <hidden>
Date: 2017-07-25 16:20:54

On Tue, Jul 25, 2017 at 06:27:31PM +0300, Andrii Anisov wrote:
On 25.07.17 17:23, Julien Grall wrote:
quoted
I think this is by chance rather than by design. The first
question to answer is why a Firmware would specify twice the same
memory banks? Is it valid from the specification?
Yep, that is the question.
I beleive that all memory regions described in any memory node's reg
entries should be disjoint (i.e. should not overlap). Per IEEE-1275, reg
entries (within a node) are supposed to be disjoint, and I would expect
this requirement to extend across nodes in the case of memory nodes.

Currently, the DT spec is somewhat sparse in wording, but this can be
corrected.
quoted
Regardless that, it looks like to me that the device-tree you give
to the board should not contain the memory nodes.
The device-tree is provided by vendor in that form, and u-boot is
theirs. It seems to me that they do not really care since the kernel
tolerates duplication.
quoted
quoted
ps. Linux kernel does tolerate duplicated memory nodes by
merging memory blocks. I.e. memblock_add_range() function is
commented as following:
/**
    * memblock_add_range - add new memblock region
    * @type: memblock type to add new region into
    * @base: base address of the new region
    * @size: size of the new region
    * @nid: nid of the new region
    * @flags: flags of the new region
    *
    * Add new memblock region [@base,@base+@size) into @type. The new
region
    * is allowed to overlap with existing ones - overlaps don't affect
already
    * existing regions.  @type is guaranteed to be minimal (all
neighbouring
    * compatible regions are merged) after the addition.
    *
    * RETURNS:
    * 0 on success, -errno on failure.
    */
IMO the function description is pretty straight-forward.
But let us wait for device tree guys feedback.
This might be the designed of *memblock*, but that does not mean that it
is a deliberate part of the DT handling. I beleive this is simply an
implementation detail that happens to mask a DT bug.

Thanks,
Mark.
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help