[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH v14 0/3] of: parsing of multi #{iommu,msi}-cells in maps



So far our parsing of {iommu,msi}-map properties has always blindly
assumed that the output specifiers will always have exactly 1 cell.
This typically does happen to be the case, but is not actually enforced
(and the PCI msi-map binding even explicitly states support for 0 or 1
cells) - as a result we've now ended up with dodgy DTs out in the field
which depend on this behaviour to map a 1-cell specifier for a 2-cell
provider, despite that being bogus per the bindings themselves.

Since there is some potential use[1] in being able to map at least
single input IDs to multi-cell output specifiers (and properly support
0-cell outputs as well), add support for properly parsing and using the
target nodes' #cells values, albeit with the unfortunate complication of
still having to work around expectations of the old behaviour too.
                                                        -- Robin.

Unlike single #{}-cell, it is complex to establish a linear relation
between input 'id' and output specifier for multi-cell properties, thus
it is always expected that len never going to be > 1.

These changes have been tested on QEMU for the arm64 architecture.

Since, this would also need update in dt-schema, raised PR[2] for the
same.

[1] https://lore.kernel.org/all/20250627-video_cb-v3-0-51e18c0ffbce@xxxxxxxxxxx/
[2] PR for iommu-map dtschema: 
https://github.com/devicetree-org/dt-schema/pull/184

V14:
  - Updated Patch 2 ("of: Factor arguments passed to of_map_id() into a 
struct") to
    fix below two issues in of_msi_xlate() that were introduced by the API 
refactoring:

    1) The refactoring changed of_map_id()'s dual-purpose **target parameter to
    an explicit filter_np parameter. In of_msi_xlate(), this caused
    of_map_msi_id() to return 0 (pass-through) instead of -ENODEV when a node
    has no msi-map, terminating the device hierarchy walk prematurely before
    reaching the root complex node that has the msi-map. This broke MSI
    allocation for PCIe endpoint devices (e.g., wcn7850 Wi-Fi on ARM64).

    2) Additionally, fsl_mc_get_msi_id() passes msi_np == NULL to 
of_msi_xlate(),
    which would dereference NULL with the new API.

  Link to v13:
  
https://patch.msgid.link/20260408-parse_iommu_cells-v13-0-fa921e92661b@xxxxxxxxxxxxxxxx

V13:
  - Fix bad_map handling in of_map_id(): 'cells' is re-initialized to 0
    on each loop iteration, so the !bad_map guard was insufficient, cells
    stayed 0 for all entries after the first. Fix by explicitly setting
    cells=1 when bad_map is true on every iteration.
  - Collected Acked-by from Frank Li.

  Link to v12:
  
https://patch.msgid.link/20260331-parse_iommu_cells-v12-0-decfd305eea9@xxxxxxxxxxxxxxxx

V12:
  - Call of_node_put() unconditionally in imx_pcie_add_lut_by_rid()
    thereby addressing comments from Bjorn Helgaas.

  Link to v11:
  
https://lore.kernel.org/r/20260325-parse_iommu_cells-v11-0-1fefa5c0e82c@xxxxxxxxxxxxxxxx

V11:
  - Added explicit filter_np parameter to of_map_id() and of_map_msi_id()
    per Dmitry Baryshkov's review feedback, making the filter explicit
    instead of overloading arg->np as both input filter and output parameter.
  - Removed of_node_put() from inside of_map_id(), making the caller responsible
    for reference management. Updated of_msi_xlate() to properly handle 
reference counting.
  - Collected ACKed by tags, and fixed minor typos.
  Link to v10:
  
https://lore.kernel.org/r/20260309-parse_iommu_cells-v10-0-c62fcaa5a1d8@xxxxxxxxxxxxxxxx

V10:
  - Move of_map_iommu_id()/of_map_msi_id() from include/linux/of.h to
    drivers/of/base.c as out-of-line helpers per feedback from Marc Zyngier
    and Rob Herring.
  - Add kernel-doc to document both helpers for discoverability and
    usage clarity.
  - Fix of_map_msi_id() wrapper and all its callers (cdx_msi.c,
    irq-gic-its-msi-parent.c, drivers/of/irq.c) to correctly use the new
    struct of_phandle_args-based API with proper of_node_put() handling
    as per feeback from Dmitry.
  Link to v9:
  
https://lore.kernel.org/r/20260301-parse_iommu_cells-v9-0-4d1bceecc5e1@xxxxxxxxxxxxxxxx

V9:
  - Updated TO/CC list based on feedback to include all relevant
    maintainers.
  - No functional changes to the patches themselves.

  Link to V8:
  
https://lore.kernel.org/all/20260226074245.3098486-1-vijayanand.jitta@xxxxxxxxxxxxxxxx/

V8:
  - Removed mentions of of_map_args from commit message to match code.

  Link to V7:
  
https://lore.kernel.org/all/20260210101157.2145113-1-vijayanand.jitta@xxxxxxxxxxxxxxxx/

V7:
  - Removed of_map_id_args structure and replaced it with
    of_phandle_args as suggested by Dmitry.

  Link to V6:
  
https://lore.kernel.org/all/20260121055400.937856-1-vijayanand.jitta@xxxxxxxxxxxxxxxx/

V6:
  - Fixed build error reported by kernel test bot.

  Link to V5:
  
https://lore.kernel.org/all/20260118181125.1436036-1-vijayanand.jitta@xxxxxxxxxxxxxxxx/

V5:
  - Fixed Build Warnings.
  - Raised PR for iommu-map dtschema: 
https://github.com/devicetree-org/dt-schema/pull/184

  Link to V4:
  
https://lore.kernel.org/all/20251231114257.2382820-1-vijayanand.jitta@xxxxxxxxxxxxxxxx/

V4:
  - Added Reviewed-by tag.
  - Resolved warnings reported by kernel test bot, minor code
    reorganization.

  Link to V3:
  
https://lore.kernel.org/all/20251221213602.2413124-1-vijayanand.jitta@xxxxxxxxxxxxxxxx/

V3:
  - Added Reviewed-by tag.
  - Updated of_map_id_args struct as a wrapper to of_phandle_args and
    added comment description as suggested by Rob Herring.

  Link to V2:
  
https://lore.kernel.org/all/20251204095530.8627-1-vijayanand.jitta@xxxxxxxxxxxxxxxx/

V2:
  - Incorporated the patches from Robin that does the clean implementation.
  - Dropped the patches the were adding multi-map support from this series
    as suggested.

V1:
 https://lore.kernel.org/all/cover.1762235099.git.charan.kalla@xxxxxxxxxxxxxxxx/

RFC:
 
https://lore.kernel.org/all/20250928171718.436440-1-charan.kalla@xxxxxxxxxxxxxxxx/#r

Signed-off-by: Vijayanand Jitta <vijayanand.jitta@xxxxxxxxxxxxxxxx>
---
To: Nipun Gupta <nipun.gupta@xxxxxxx>
To: Nikhil Agarwal <nikhil.agarwal@xxxxxxx>
To: Joerg Roedel <joro@xxxxxxxxxx>
To: Will Deacon <will@xxxxxxxxxx>
To: Robin Murphy <robin.murphy@xxxxxxx>
To: Lorenzo Pieralisi <lpieralisi@xxxxxxxxxx>
To: Marc Zyngier <maz@xxxxxxxxxx>
To: Thomas Gleixner <tglx@xxxxxxxxxx>
To: Rob Herring <robh@xxxxxxxxxx>
To: Saravana Kannan <saravanak@xxxxxxxxxx>
To: Richard Zhu <hongxing.zhu@xxxxxxx>
To: Lucas Stach <l.stach@xxxxxxxxxxxxxx>
To: Krzysztof Wilczyński <kwilczynski@xxxxxxxxxx>
To: Manivannan Sadhasivam <mani@xxxxxxxxxx>
To: Bjorn Helgaas <bhelgaas@xxxxxxxxxx>
To: Frank Li <Frank.Li@xxxxxxx>
To: Sascha Hauer <s.hauer@xxxxxxxxxxxxxx>
To: Pengutronix Kernel Team <kernel@xxxxxxxxxxxxxx>
To: Fabio Estevam <festevam@xxxxxxxxx>
To: Juergen Gross <jgross@xxxxxxxx>
To: Stefano Stabellini <sstabellini@xxxxxxxxxx>
To: Oleksandr Tyshchenko <oleksandr_tyshchenko@xxxxxxxx>
Cc: linux-arm-msm@xxxxxxxxxxxxxxx
Cc: linux-kernel@xxxxxxxxxxxxxxx
Cc: iommu@xxxxxxxxxxxxxxx
Cc: linux-arm-kernel@xxxxxxxxxxxxxxxxxxx
Cc: devicetree@xxxxxxxxxxxxxxx
Cc: linux-pci@xxxxxxxxxxxxxxx
Cc: imx@xxxxxxxxxxxxxxx
Cc: xen-devel@xxxxxxxxxxxxxxxxxxxx

---
Charan Teja Kalla (1):
      of: Factor arguments passed to of_map_id() into a struct

Robin Murphy (2):
      of: Add convenience wrappers for of_map_id()
      of: Respect #{iommu,msi}-cells in maps

 drivers/cdx/cdx_msi.c                    |   8 +-
 drivers/iommu/of_iommu.c                 |   6 +-
 drivers/irqchip/irq-gic-its-msi-parent.c |  11 +-
 drivers/of/base.c                        | 215 ++++++++++++++++++++++++-------
 drivers/of/irq.c                         |  31 ++++-
 drivers/pci/controller/dwc/pci-imx6.c    |  34 +++--
 drivers/pci/controller/pcie-apple.c      |   6 +-
 drivers/xen/grant-dma-ops.c              |   5 +-
 include/linux/of.h                       |  30 ++++-
 9 files changed, 257 insertions(+), 89 deletions(-)
---
base-commit: 3fa5e5702a82d259897bd7e209469bc06368bf31
change-id: 20260301-parse_iommu_cells-1c33768aebba

Best regards,
--  
Vijayanand Jitta <vijayanand.jitta@xxxxxxxxxxxxxxxx>




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.