Skip to content
  • Stephen Warren's avatar
    fdt: fix fdtdec_get_addr_size not to require any size cells · d93b9a07
    Stephen Warren authored
    fdtdec_get_addr_size() may be used in two cases:
    a) With sizep supplied, in which case both an address and a size are
    parsed from DT. In this case, the DT property must be large enough to
    contain both values.
    b) With sizep NULL, in which case only an address is parsed from DT.
    In this case, the DT property only need be large enough to contain this
    address value. Commit 02464e38 "fdt: add new fdt address parsing
    functions" broke this relaxed checking, and required the DT property to
    contain both an address and a size value in all cases.
    
    Fix fdtdec_get_addr_size() to vary ns based on whether the size value
    is being parsed from the DT or not. This is safe since the function only
    parses the first entry in the property, so the overall value of (na + ns)
    need not be accurate, since it is never used to step through the property
    data to find other entries. Besides, this fixed behaviour essentially
    matches the original behaviour before the patch this patch fixes. (The
    original code validated that the property was exactly the length of
    either na or (na + ns), whereas the current code only validates that the
    property is at least that long. For non-failure cases, the two behaviours
    are identical).
    
    Cc: Przemyslaw Marczak <p.marczak@samsung.com>
    Cc: Simon Glass <sjg@chromium.org>
    Cc: Thierry Reding <treding@nvidia.com>
    Cc: Bin Meng <bmeng.cn@gmail.com>
    Cc: Michal Suchanek <hramrach@gmail.com>
    Fixes: 02464e38
    
     ("fdt: add new fdt address parsing functions")
    Reported-by: default avatarPrzemyslaw Marczak <p.marczak@samsung.com>
    Signed-off-by: default avatarStephen Warren <swarren@nvidia.com>
    Tested-by: default avatarPrzemyslaw Marczak <p.marczak@samsung.com>
    Acked-by: default avatarSimon Glass <sjg@chromium.org>
    d93b9a07