Skip to content
  • Stephen Warren's avatar
    fdt: add new fdt address parsing functions · 02464e38
    Stephen Warren authored
    
    
    fdtdec_get_addr_size() hard-codes the number of cells used to represent
    an address or size in DT. This is incorrect in many cases depending on
    the DT binding for a particular node or property (e.g. it is incorrect
    for the "reg" property). In most cases, DT parsing code must use the
    properties #address-cells and #size-cells to parse addres properties.
    
    This change splits up the implementation of fdtdec_get_addr_size() so
    that the core logic can be used for both hard-coded and non-hard-coded
    cases. Various wrapper functions are implemented that support cases
    where hard-coded cell counts should or should not be used, and where
    the client does and doesn't know the parent node ID that contains the
    properties #address-cells and #size-cells.
    
    dev_get_addr() is updated to use the new functions.
    
    Core functionality in fdtdec_get_addr_size_fixed() is widely tested via
    fdtdec_get_addr_size(). I tested fdtdec_get_addr_size_auto_noparent() and
    dev_get_addr() by manually modifying the Tegra I2C driver to invoke them.
    
    Much of the core implementation of fdtdec_get_addr_size_fixed(),
    fdtdec_get_addr_size_auto_parent(), and
    fdtdec_get_addr_size_auto_noparent() comes from Thierry Reding's
    previous commit "fdt: Fix fdtdec_get_addr_size() for 64-bit".
    
    Based-on-work-by: default avatarThierry Reding <treding@nvidia.com>
    Cc: Thierry Reding <treding@nvidia.com>
    Cc: Simon Glass <sjg@chromium.org>
    Cc: Michal Suchanek <hramrach@gmail.com>
    Signed-off-by: default avatarStephen Warren <swarren@nvidia.com>
    Acked-by: default avatarSimon Glass <sjg@chromium.org>
    Dropped #define DEBUG at the top of fdtdec.c:
    Signed-off-by: default avatarSimon Glass <sjg@chromium.org>
    02464e38