• Marc Zyngier's avatar
    of: property: Fix fw_devlink handling of interrupt-map · e7985f43
    Marc Zyngier authored
    Commit d976c6f4 ("of: property: Add fw_devlink support for
    interrupt-map property") tried to do what it says on the tin,
    but failed on a couple of points:
    
    - it confuses bytes and cells. Not a huge deal, except when it
      comes to pointer arithmetic
    
    - it doesn't really handle anything but interrupt-maps that have
      their parent #address-cells set to 0
    
    The combinations of the two leads to some serious fun on my M1
    box, with plenty of WARN-ON() firing all over the shop, and
    amusing values being generated for interrupt specifiers.
    
    Having 2 versions of parsing code for "interrupt-map" was a bad
    idea. Now that the common parsing parts have been refactored
    into of_irq_parse_imap_parent(), rework the code here to use it
    instead and fix the pointer arithmetic.
    
    Note that the dependency will be a bit different than the original code
    when the interrupt-map points to another interrupt-map. In this case,
    the original code would resolve to the final interrupt controller. Now
    the dependency is the parent interrupt-map (which itself should have a
    dependency to the parent). It is possible that a node with an
    interrupt-map has no driver.
    
    Fixes: d976c6f4 ("of: property: Add fw_devlink support for interrupt-map property")
    Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
    Co-developed-by: default avatarRob Herring (Arm) <robh@kernel.org>
    Cc: Saravana Kannan <saravanak@google.com>
    Tested-by: default avatarMarc Zyngier <maz@kernel.org>
    Tested-by: default avatarAnup Patel <apatel@ventanamicro.com>
    Link: https://lore.kernel.org/r/20240529-dt-interrupt-map-fix-v2-2-ef86dc5bcd2a@kernel.orgSigned-off-by: default avatarRob Herring (Arm) <robh@kernel.org>
    e7985f43
property.c 43.5 KB