> -----Original Message-----
> From: Dan Williams (nvidia) <[email protected]>
> Sent: 10 July 2026 06:31
> To: Manish Honap <[email protected]>; [email protected]; [email protected];
> [email protected]; [email protected]; [email protected]; Ankit Agrawal
> <[email protected]>; [email protected];
> [email protected]; [email protected]; [email protected];
> [email protected]; [email protected]
> Cc: Neo Jia <[email protected]>; Krishnakant Jaju <[email protected]>;
> Vikram Sethi <[email protected]>; Zhi Wang <[email protected]>; Manish
> Honap <[email protected]>; [email protected]; linux-
> [email protected]; [email protected]; linux-
> [email protected]; [email protected]
> Subject: Re: [PATCH v3 01/11] cxl: Add cxl_get_hdm_info() helper for HDM
> decoder metadata
> 
> External email: Use caution opening links or attachments
> 
> 
> mhonap@ wrote:
> > From: Manish Honap <[email protected]>
> >
> > cxl_probe_component_regs() finds the HDM decoder block during device
> > probe and caches its location, but does not record the decoder count
> > and does not expose the result outside drivers/cxl/.
> >
> > In-kernel cxl drivers (Type-2 accelerator drivers, vfio-cxl) need the
> > decoder count and the byte offset and size of the HDM block without
> > re-running the probe sequence.
> >
> > Record decoder_cnt in rmap->count when parsing the HDM capability in
> > cxl_probe_component_regs(), extend struct cxl_reg_map with a count
> > member, and add cxl_get_hdm_info() to return offset, size, and count
> > from the cached map.  Export under the CXL namespace.
> >
> > Signed-off-by: Manish Honap <[email protected]>
> > ---
> >  drivers/cxl/core/pci.c  | 33 +++++++++++++++++++++++++++++++++
> > drivers/cxl/core/regs.c |  1 +
> >  include/cxl/cxl.h       |  4 ++++
> >  3 files changed, 38 insertions(+)
> >
> > diff --git a/drivers/cxl/core/pci.c b/drivers/cxl/core/pci.c index
> > 2bcd683aa286..c917608c16f9 100644
> > --- a/drivers/cxl/core/pci.c
> > +++ b/drivers/cxl/core/pci.c
> > @@ -449,6 +449,39 @@ int cxl_hdm_decode_init(struct cxl_dev_state
> > *cxlds, struct cxl_hdm *cxlhdm,  }
> > EXPORT_SYMBOL_NS_GPL(cxl_hdm_decode_init, "CXL");
> >
> > +/**
> > + * cxl_get_hdm_info - Get HDM decoder register block location and
> > +count
> > + * @cxlds: CXL device state (must have component regs enumerated via
> > + *      cxl_probe_component_regs())
> > + * @count:  number of HDM decoders (from HDM Capability bits [3:0])
> > + * @offset: byte offset of HDM decoder block within the component
> register BAR
> > + * @size:   size in bytes of the HDM decoder block
> > + *
> > + * Exported for cxl drivers (in-kernel accelerator drivers, vfio-cxl)
> > +that
> > + * need HDM decoder metadata from the cached component-register map
> > +without
> > + * re-running the probe sequence.
> > + *
> > + * Return: 0 on success. -ENODEV if the HDM decoder block is not
> present.
> > + */
> > +int cxl_get_hdm_info(struct cxl_dev_state *cxlds, u8 *count,
> > +                  resource_size_t *offset, resource_size_t *size) {
> > +     struct cxl_reg_map *hdm =
> > +&cxlds->reg_map.component_map.hdm_decoder;
> > +
> > +     if (WARN_ON(!count || !offset || !size))
> > +             return -EINVAL;
> > +
> > +     if (!hdm->valid)
> > +             return -ENODEV;
> > +
> > +     *count  = hdm->count;
> > +     *offset = hdm->offset;
> > +     *size   = hdm->size;
> > +
> > +     return 0;
> > +}
> > +EXPORT_SYMBOL_NS_GPL(cxl_get_hdm_info, "CXL");
> 
> This is the same information that the CXL reset patches need to cache on
> the PCI device. Effectively this level of CXL information deserves to be
> as accessible as PCI BAR information, and should not need cxl_dev_state
> context to fetch it.
> 
> So it would be good to depend on that rather than invent a new export
> mechanism.

Agreed. I will make sure to base the patch-v04 on Srirangan Madhavan's CXL
reset v09 (base: 8cdeaa50eae8).
(HDM info is read directly from pdev->hdm at open_device(). No new
cxl_get_hdm_info() export is introduced.)

Reply via email to