diff options
Diffstat (limited to 'drivers/fpga/fpga-mgr.c')
| -rw-r--r-- | drivers/fpga/fpga-mgr.c | 28 | 
1 files changed, 28 insertions, 0 deletions
| diff --git a/drivers/fpga/fpga-mgr.c b/drivers/fpga/fpga-mgr.c index c1564cf827fe..a41b07e37884 100644 --- a/drivers/fpga/fpga-mgr.c +++ b/drivers/fpga/fpga-mgr.c @@ -406,12 +406,40 @@ static ssize_t state_show(struct device *dev,  	return sprintf(buf, "%s\n", state_str[mgr->state]);  } +static ssize_t status_show(struct device *dev, +			   struct device_attribute *attr, char *buf) +{ +	struct fpga_manager *mgr = to_fpga_manager(dev); +	u64 status; +	int len = 0; + +	if (!mgr->mops->status) +		return -ENOENT; + +	status = mgr->mops->status(mgr); + +	if (status & FPGA_MGR_STATUS_OPERATION_ERR) +		len += sprintf(buf + len, "reconfig operation error\n"); +	if (status & FPGA_MGR_STATUS_CRC_ERR) +		len += sprintf(buf + len, "reconfig CRC error\n"); +	if (status & FPGA_MGR_STATUS_INCOMPATIBLE_IMAGE_ERR) +		len += sprintf(buf + len, "reconfig incompatible image\n"); +	if (status & FPGA_MGR_STATUS_IP_PROTOCOL_ERR) +		len += sprintf(buf + len, "reconfig IP protocol error\n"); +	if (status & FPGA_MGR_STATUS_FIFO_OVERFLOW_ERR) +		len += sprintf(buf + len, "reconfig fifo overflow error\n"); + +	return len; +} +  static DEVICE_ATTR_RO(name);  static DEVICE_ATTR_RO(state); +static DEVICE_ATTR_RO(status);  static struct attribute *fpga_mgr_attrs[] = {  	&dev_attr_name.attr,  	&dev_attr_state.attr, +	&dev_attr_status.attr,  	NULL,  };  ATTRIBUTE_GROUPS(fpga_mgr); | 
