| Message ID | 20261001092227.3004747-4-smadhavan@nvidia.com |
|---|---|
| State | New |
| Headers | show |
| Series | PCI/CXL: Add CXL reset support for Type 2 devices | expand |
> Move the common decoder declarations to include/cxl/cxl.h for use by > shared decoder settings. Preserve their layout and documentation. > > Signed-off-by: Srirangan Madhavan <smadhavan@nvidia.com> Sashiko has reviewed this patch and found no issues. It looks great!
On Thu, Oct 01, 2026 at 09:22:14AM +0800, Srirangan Madhavan wrote: > Move the common decoder declarations to include/cxl/cxl.h for use by > shared decoder settings. Preserve their layout and documentation. > > Signed-off-by: Srirangan Madhavan <smadhavan@nvidia.com> > Reviewed-by: Jonathan Cameron <jonathan.cameron@oss.qualcomm.com> > Reviewed-by: Dave Jiang <dave.jiang@intel.com> Reviewed-by: Richard Cheng <icheng@nvidia.com> > --- > drivers/cxl/cxl.h | 37 ------------------------------------- > include/cxl/cxl.h | 41 ++++++++++++++++++++++++++++++++++++++++- > 2 files changed, 40 insertions(+), 38 deletions(-) > > diff --git a/drivers/cxl/cxl.h b/drivers/cxl/cxl.h > index 9e0500d56866..44ff3334648c 100644 > --- a/drivers/cxl/cxl.h > +++ b/drivers/cxl/cxl.h > @@ -264,45 +264,8 @@ int cxl_dport_map_rcd_linkcap(struct pci_dev *pdev, struct cxl_dport *dport); > #define CXL_DECODER_F_NORMALIZED_ADDRESSING BIT(6) > #define CXL_DECODER_F_RESET_MASK (CXL_DECODER_F_ENABLE | CXL_DECODER_F_LOCK) > > -enum cxl_decoder_type { > - CXL_DECODER_DEVMEM = 2, > - CXL_DECODER_HOSTONLYMEM = 3, > -}; > - > -#define CXL_DECODER_MAX_INTERLEAVE 16 > - > #define CXL_QOS_CLASS_INVALID -1 > > -/** > - * struct cxl_decoder - Common CXL HDM Decoder Attributes > - * @dev: this decoder's device > - * @id: kernel device name id > - * @hpa_range: Host physical address range mapped by this decoder > - * @interleave_ways: number of cxl_dports in this decode > - * @interleave_granularity: data stride per dport > - * @target_type: accelerator vs expander (type2 vs type3) selector > - * @region: currently assigned region for this decoder > - * @flags: memory type capabilities and locking > - * @target_map: cached copy of hardware port-id list, available at init > - * before all @dport objects have been instantiated. While > - * dport id is 8bit, CFMWS interleave targets are 32bits. > - * @commit: device/decoder-type specific callback to commit settings to hw > - * @reset: device/decoder-type specific callback to reset hw settings > -*/ > -struct cxl_decoder { > - struct device dev; > - int id; > - struct range hpa_range; > - int interleave_ways; > - int interleave_granularity; > - enum cxl_decoder_type target_type; > - struct cxl_region *region; > - unsigned long flags; > - u32 target_map[CXL_DECODER_MAX_INTERLEAVE]; > - int (*commit)(struct cxl_decoder *cxld); > - void (*reset)(struct cxl_decoder *cxld); > -}; > - > /* > * Track whether this decoder is free for userspace provisioning, reserved for > * region autodiscovery, whether it is started connecting (awaiting other > diff --git a/include/cxl/cxl.h b/include/cxl/cxl.h > index 802b143de83d..69941f7fdb76 100644 > --- a/include/cxl/cxl.h > +++ b/include/cxl/cxl.h > @@ -5,8 +5,10 @@ > #ifndef __CXL_CXL_H__ > #define __CXL_CXL_H__ > > +#include <linux/device.h> > #include <linux/node.h> > #include <linux/ioport.h> > +#include <linux/range.h> > #include <cxl/mailbox.h> > > /** > @@ -23,7 +25,44 @@ enum cxl_devtype { > CXL_DEVTYPE_CLASSMEM, > }; > > -struct device; > +struct cxl_region; > + > +enum cxl_decoder_type { > + CXL_DECODER_DEVMEM = 2, > + CXL_DECODER_HOSTONLYMEM = 3, > +}; > + > +#define CXL_DECODER_MAX_INTERLEAVE 16 > + > +/** > + * struct cxl_decoder - Common CXL HDM Decoder Attributes > + * @dev: this decoder's device > + * @id: kernel device name id > + * @hpa_range: Host physical address range mapped by this decoder > + * @interleave_ways: number of cxl_dports in this decode > + * @interleave_granularity: data stride per dport > + * @target_type: accelerator vs expander (type2 vs type3) selector > + * @region: currently assigned region for this decoder > + * @flags: memory type capabilities and locking > + * @target_map: cached copy of hardware port-id list, available at init > + * before all @dport objects have been instantiated. While > + * dport id is 8bit, CFMWS interleave targets are 32bits. > + * @commit: device/decoder-type specific callback to commit settings to hw > + * @reset: device/decoder-type specific callback to reset hw settings > +*/ > +struct cxl_decoder { > + struct device dev; > + int id; > + struct range hpa_range; > + int interleave_ways; > + int interleave_granularity; > + enum cxl_decoder_type target_type; > + struct cxl_region *region; > + unsigned long flags; > + u32 target_map[CXL_DECODER_MAX_INTERLEAVE]; > + int (*commit)(struct cxl_decoder *cxld); > + void (*reset)(struct cxl_decoder *cxld); > +}; > > /* > * Using struct_group() allows for per register-block-type helper routines, > -- > 2.43.0 >
在 2026/10/1 17:22, Srirangan Madhavan 写道: > Move the common decoder declarations to include/cxl/cxl.h for use by > shared decoder settings. Preserve their layout and documentation. > > Signed-off-by: Srirangan Madhavan <smadhavan@nvidia.com> > Reviewed-by: Jonathan Cameron <jonathan.cameron@oss.qualcomm.com> > Reviewed-by: Dave Jiang <dave.jiang@intel.com> Reviewed-by: Li Ming <ming.li@zohomail.com> > --- > drivers/cxl/cxl.h | 37 ------------------------------------- > include/cxl/cxl.h | 41 ++++++++++++++++++++++++++++++++++++++++- > 2 files changed, 40 insertions(+), 38 deletions(-) > > diff --git a/drivers/cxl/cxl.h b/drivers/cxl/cxl.h > index 9e0500d56866..44ff3334648c 100644 > --- a/drivers/cxl/cxl.h > +++ b/drivers/cxl/cxl.h > @@ -264,45 +264,8 @@ int cxl_dport_map_rcd_linkcap(struct pci_dev *pdev, struct cxl_dport *dport); > #define CXL_DECODER_F_NORMALIZED_ADDRESSING BIT(6) > #define CXL_DECODER_F_RESET_MASK (CXL_DECODER_F_ENABLE | CXL_DECODER_F_LOCK) > > -enum cxl_decoder_type { > - CXL_DECODER_DEVMEM = 2, > - CXL_DECODER_HOSTONLYMEM = 3, > -}; > - > -#define CXL_DECODER_MAX_INTERLEAVE 16 > - > #define CXL_QOS_CLASS_INVALID -1 > > -/** > - * struct cxl_decoder - Common CXL HDM Decoder Attributes > - * @dev: this decoder's device > - * @id: kernel device name id > - * @hpa_range: Host physical address range mapped by this decoder > - * @interleave_ways: number of cxl_dports in this decode > - * @interleave_granularity: data stride per dport > - * @target_type: accelerator vs expander (type2 vs type3) selector > - * @region: currently assigned region for this decoder > - * @flags: memory type capabilities and locking > - * @target_map: cached copy of hardware port-id list, available at init > - * before all @dport objects have been instantiated. While > - * dport id is 8bit, CFMWS interleave targets are 32bits. > - * @commit: device/decoder-type specific callback to commit settings to hw > - * @reset: device/decoder-type specific callback to reset hw settings > -*/ > -struct cxl_decoder { > - struct device dev; > - int id; > - struct range hpa_range; > - int interleave_ways; > - int interleave_granularity; > - enum cxl_decoder_type target_type; > - struct cxl_region *region; > - unsigned long flags; > - u32 target_map[CXL_DECODER_MAX_INTERLEAVE]; > - int (*commit)(struct cxl_decoder *cxld); > - void (*reset)(struct cxl_decoder *cxld); > -}; > - > /* > * Track whether this decoder is free for userspace provisioning, reserved for > * region autodiscovery, whether it is started connecting (awaiting other > diff --git a/include/cxl/cxl.h b/include/cxl/cxl.h > index 802b143de83d..69941f7fdb76 100644 > --- a/include/cxl/cxl.h > +++ b/include/cxl/cxl.h > @@ -5,8 +5,10 @@ > #ifndef __CXL_CXL_H__ > #define __CXL_CXL_H__ > > +#include <linux/device.h> > #include <linux/node.h> > #include <linux/ioport.h> > +#include <linux/range.h> > #include <cxl/mailbox.h> > > /** > @@ -23,7 +25,44 @@ enum cxl_devtype { > CXL_DEVTYPE_CLASSMEM, > }; > > -struct device; > +struct cxl_region; > + > +enum cxl_decoder_type { > + CXL_DECODER_DEVMEM = 2, > + CXL_DECODER_HOSTONLYMEM = 3, > +}; > + > +#define CXL_DECODER_MAX_INTERLEAVE 16 > + > +/** > + * struct cxl_decoder - Common CXL HDM Decoder Attributes > + * @dev: this decoder's device > + * @id: kernel device name id > + * @hpa_range: Host physical address range mapped by this decoder > + * @interleave_ways: number of cxl_dports in this decode > + * @interleave_granularity: data stride per dport > + * @target_type: accelerator vs expander (type2 vs type3) selector > + * @region: currently assigned region for this decoder > + * @flags: memory type capabilities and locking > + * @target_map: cached copy of hardware port-id list, available at init > + * before all @dport objects have been instantiated. While > + * dport id is 8bit, CFMWS interleave targets are 32bits. > + * @commit: device/decoder-type specific callback to commit settings to hw > + * @reset: device/decoder-type specific callback to reset hw settings > +*/ > +struct cxl_decoder { > + struct device dev; > + int id; > + struct range hpa_range; > + int interleave_ways; > + int interleave_granularity; > + enum cxl_decoder_type target_type; > + struct cxl_region *region; > + unsigned long flags; > + u32 target_map[CXL_DECODER_MAX_INTERLEAVE]; > + int (*commit)(struct cxl_decoder *cxld); > + void (*reset)(struct cxl_decoder *cxld); > +}; > > /* > * Using struct_group() allows for per register-block-type helper routines,
diff --git a/drivers/cxl/cxl.h b/drivers/cxl/cxl.h index 9e0500d56866..44ff3334648c 100644 --- a/drivers/cxl/cxl.h +++ b/drivers/cxl/cxl.h @@ -264,45 +264,8 @@ int cxl_dport_map_rcd_linkcap(struct pci_dev *pdev, struct cxl_dport *dport); #define CXL_DECODER_F_NORMALIZED_ADDRESSING BIT(6) #define CXL_DECODER_F_RESET_MASK (CXL_DECODER_F_ENABLE | CXL_DECODER_F_LOCK) -enum cxl_decoder_type { - CXL_DECODER_DEVMEM = 2, - CXL_DECODER_HOSTONLYMEM = 3, -}; - -#define CXL_DECODER_MAX_INTERLEAVE 16 - #define CXL_QOS_CLASS_INVALID -1 -/** - * struct cxl_decoder - Common CXL HDM Decoder Attributes - * @dev: this decoder's device - * @id: kernel device name id - * @hpa_range: Host physical address range mapped by this decoder - * @interleave_ways: number of cxl_dports in this decode - * @interleave_granularity: data stride per dport - * @target_type: accelerator vs expander (type2 vs type3) selector - * @region: currently assigned region for this decoder - * @flags: memory type capabilities and locking - * @target_map: cached copy of hardware port-id list, available at init - * before all @dport objects have been instantiated. While - * dport id is 8bit, CFMWS interleave targets are 32bits. - * @commit: device/decoder-type specific callback to commit settings to hw - * @reset: device/decoder-type specific callback to reset hw settings -*/ -struct cxl_decoder { - struct device dev; - int id; - struct range hpa_range; - int interleave_ways; - int interleave_granularity; - enum cxl_decoder_type target_type; - struct cxl_region *region; - unsigned long flags; - u32 target_map[CXL_DECODER_MAX_INTERLEAVE]; - int (*commit)(struct cxl_decoder *cxld); - void (*reset)(struct cxl_decoder *cxld); -}; - /* * Track whether this decoder is free for userspace provisioning, reserved for * region autodiscovery, whether it is started connecting (awaiting other diff --git a/include/cxl/cxl.h b/include/cxl/cxl.h index 802b143de83d..69941f7fdb76 100644 --- a/include/cxl/cxl.h +++ b/include/cxl/cxl.h @@ -5,8 +5,10 @@ #ifndef __CXL_CXL_H__ #define __CXL_CXL_H__ +#include <linux/device.h> #include <linux/node.h> #include <linux/ioport.h> +#include <linux/range.h> #include <cxl/mailbox.h> /** @@ -23,7 +25,44 @@ enum cxl_devtype { CXL_DEVTYPE_CLASSMEM, }; -struct device; +struct cxl_region; + +enum cxl_decoder_type { + CXL_DECODER_DEVMEM = 2, + CXL_DECODER_HOSTONLYMEM = 3, +}; + +#define CXL_DECODER_MAX_INTERLEAVE 16 + +/** + * struct cxl_decoder - Common CXL HDM Decoder Attributes + * @dev: this decoder's device + * @id: kernel device name id + * @hpa_range: Host physical address range mapped by this decoder + * @interleave_ways: number of cxl_dports in this decode + * @interleave_granularity: data stride per dport + * @target_type: accelerator vs expander (type2 vs type3) selector + * @region: currently assigned region for this decoder + * @flags: memory type capabilities and locking + * @target_map: cached copy of hardware port-id list, available at init + * before all @dport objects have been instantiated. While + * dport id is 8bit, CFMWS interleave targets are 32bits. + * @commit: device/decoder-type specific callback to commit settings to hw + * @reset: device/decoder-type specific callback to reset hw settings +*/ +struct cxl_decoder { + struct device dev; + int id; + struct range hpa_range; + int interleave_ways; + int interleave_granularity; + enum cxl_decoder_type target_type; + struct cxl_region *region; + unsigned long flags; + u32 target_map[CXL_DECODER_MAX_INTERLEAVE]; + int (*commit)(struct cxl_decoder *cxld); + void (*reset)(struct cxl_decoder *cxld); +}; /* * Using struct_group() allows for per register-block-type helper routines,