cdx: add sysfs for subsystem, class and revision
CDX controller provides subsystem vendor, subsystem device, class and revision info of the device along with vendor and device ID in native endian format. CDX Bus system uses this information to bind the cdx device to the cdx device driver. Co-developed-by: Puneet Gupta <puneet.gupta@amd.com> Signed-off-by: Puneet Gupta <puneet.gupta@amd.com> Co-developed-by: Nipun Gupta <nipun.gupta@amd.com> Signed-off-by: Nipun Gupta <nipun.gupta@amd.com> Signed-off-by: Abhijit Gangurde <abhijit.gangurde@amd.com> Reviewed-by: Pieter Jansen van Vuuren <pieter.jansen-van-vuuren@amd.com> Tested-by: Nikhil Agarwal <nikhil.agarwal@amd.com> Link: https://lore.kernel.org/r/20231017160505.10640-8-abhijit.gangurde@amd.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
0174f58104
commit
fa10f41309
@ -179,7 +179,10 @@ cdx_match_one_device(const struct cdx_device_id *id,
|
||||
{
|
||||
/* Use vendor ID and device ID for matching */
|
||||
if ((id->vendor == CDX_ANY_ID || id->vendor == dev->vendor) &&
|
||||
(id->device == CDX_ANY_ID || id->device == dev->device))
|
||||
(id->device == CDX_ANY_ID || id->device == dev->device) &&
|
||||
(id->subvendor == CDX_ANY_ID || id->subvendor == dev->subsystem_vendor) &&
|
||||
(id->subdevice == CDX_ANY_ID || id->subdevice == dev->subsystem_device) &&
|
||||
!((id->class ^ dev->class) & id->class_mask))
|
||||
return id;
|
||||
return NULL;
|
||||
}
|
||||
@ -329,6 +332,10 @@ static DEVICE_ATTR_RO(field)
|
||||
|
||||
cdx_config_attr(vendor, "0x%04x\n");
|
||||
cdx_config_attr(device, "0x%04x\n");
|
||||
cdx_config_attr(subsystem_vendor, "0x%04x\n");
|
||||
cdx_config_attr(subsystem_device, "0x%04x\n");
|
||||
cdx_config_attr(revision, "0x%02x\n");
|
||||
cdx_config_attr(class, "0x%06x\n");
|
||||
|
||||
static ssize_t remove_store(struct device *dev,
|
||||
struct device_attribute *attr,
|
||||
@ -377,6 +384,17 @@ static ssize_t reset_store(struct device *dev, struct device_attribute *attr,
|
||||
}
|
||||
static DEVICE_ATTR_WO(reset);
|
||||
|
||||
static ssize_t modalias_show(struct device *dev, struct device_attribute *attr,
|
||||
char *buf)
|
||||
{
|
||||
struct cdx_device *cdx_dev = to_cdx_device(dev);
|
||||
|
||||
return sprintf(buf, "cdx:v%04Xd%04Xsv%04Xsd%04Xc%06X\n", cdx_dev->vendor,
|
||||
cdx_dev->device, cdx_dev->subsystem_vendor, cdx_dev->subsystem_device,
|
||||
cdx_dev->class);
|
||||
}
|
||||
static DEVICE_ATTR_RO(modalias);
|
||||
|
||||
static ssize_t driver_override_store(struct device *dev,
|
||||
struct device_attribute *attr,
|
||||
const char *buf, size_t count)
|
||||
@ -467,6 +485,11 @@ static struct attribute *cdx_dev_attrs[] = {
|
||||
&dev_attr_reset.attr,
|
||||
&dev_attr_vendor.attr,
|
||||
&dev_attr_device.attr,
|
||||
&dev_attr_subsystem_vendor.attr,
|
||||
&dev_attr_subsystem_device.attr,
|
||||
&dev_attr_class.attr,
|
||||
&dev_attr_revision.attr,
|
||||
&dev_attr_modalias.attr,
|
||||
&dev_attr_driver_override.attr,
|
||||
NULL,
|
||||
};
|
||||
@ -604,6 +627,10 @@ int cdx_device_add(struct cdx_dev_params *dev_params)
|
||||
cdx_dev->req_id = dev_params->req_id;
|
||||
cdx_dev->vendor = dev_params->vendor;
|
||||
cdx_dev->device = dev_params->device;
|
||||
cdx_dev->subsystem_vendor = dev_params->subsys_vendor;
|
||||
cdx_dev->subsystem_device = dev_params->subsys_device;
|
||||
cdx_dev->class = dev_params->class;
|
||||
cdx_dev->revision = dev_params->revision;
|
||||
cdx_dev->bus_num = dev_params->bus_num;
|
||||
cdx_dev->dev_num = dev_params->dev_num;
|
||||
cdx_dev->cdx = dev_params->cdx;
|
||||
|
Reference in New Issue
Block a user