Skip to content

Commit 15479af

Browse files
committed
[questone2bd/switchboard] Add sysfs for XCVR interrupt event status
1 parent 61dce56 commit 15479af

File tree

1 file changed

+91
-2
lines changed

1 file changed

+91
-2
lines changed

platform/broadcom/sonic-platform-modules-cel/questone2bd/modules/switchboard_fpga.c

+91-2
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
*/
2626

2727
#ifndef TEST_MODE
28-
#define MOD_VERSION "0.5.4"
28+
#define MOD_VERSION "0.5.5"
2929
#else
3030
#define MOD_VERSION "TEST"
3131
#endif
@@ -867,6 +867,20 @@ static ssize_t qsfp_modprs_show(struct device *dev, struct device_attribute *att
867867
}
868868
DEVICE_ATTR_RO(qsfp_modprs);
869869

870+
static ssize_t qsfp_isr_flags_show(struct device *dev, struct device_attribute *attr, char *buf)
871+
{
872+
u8 data;
873+
int err;
874+
struct sff_device_data *dev_data = dev_get_drvdata(dev);
875+
unsigned int portid = dev_data->portid;
876+
err = i2c_xcvr_access(I2C_XCVR_INRT,portid,&data,I2C_SMBUS_READ);
877+
if(err < 0){
878+
return err;
879+
}
880+
return sprintf(buf, "0x%2.2x\n", data);
881+
}
882+
DEVICE_ATTR_RO(qsfp_isr_flags);
883+
870884
static ssize_t sfp_txfault_show(struct device *dev, struct device_attribute *attr, char *buf)
871885
{
872886
u8 data;
@@ -909,6 +923,20 @@ static ssize_t sfp_modabs_show(struct device *dev, struct device_attribute *attr
909923
}
910924
DEVICE_ATTR_RO(sfp_modabs);
911925

926+
static ssize_t sfp_isr_flags_show(struct device *dev, struct device_attribute *attr, char *buf)
927+
{
928+
u8 data;
929+
int err;
930+
struct sff_device_data *dev_data = dev_get_drvdata(dev);
931+
unsigned int portid = dev_data->portid;
932+
err = i2c_xcvr_access(I2C_XCVR_INRT,portid,&data,I2C_SMBUS_READ);
933+
if(err < 0){
934+
return err;
935+
}
936+
return sprintf(buf, "0x%2.2x\n", data);
937+
}
938+
DEVICE_ATTR_RO(sfp_isr_flags);
939+
912940
static ssize_t qsfp_modsel_show(struct device *dev, struct device_attribute *attr, char *buf)
913941
{
914942
u8 data;
@@ -980,6 +1008,35 @@ static ssize_t qsfp_reset_store(struct device *dev, struct device_attribute *att
9801008
}
9811009
DEVICE_ATTR_RW(qsfp_reset);
9821010

1011+
static ssize_t qsfp_isr_mask_show(struct device *dev, struct device_attribute *attr, char *buf)
1012+
{
1013+
u8 data;
1014+
int err;
1015+
struct sff_device_data *dev_data = dev_get_drvdata(dev);
1016+
unsigned int portid = dev_data->portid;
1017+
err = i2c_xcvr_access(I2C_XCVR_MASK,portid,&data,I2C_SMBUS_READ);
1018+
if(err < 0){
1019+
return err;
1020+
}
1021+
return sprintf(buf, "0x%2.2x\n", data);
1022+
}
1023+
1024+
static ssize_t qsfp_isr_mask_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t size)
1025+
{
1026+
ssize_t status;
1027+
u8 data;
1028+
struct sff_device_data *dev_data = dev_get_drvdata(dev);
1029+
unsigned int portid = dev_data->portid;
1030+
1031+
status = kstrtou8(buf, 0, &data);
1032+
if (status == 0) {
1033+
i2c_xcvr_access(I2C_XCVR_MASK,portid,&data,I2C_SMBUS_WRITE);
1034+
status = size;
1035+
}
1036+
return status;
1037+
}
1038+
DEVICE_ATTR_RW(qsfp_isr_mask);
1039+
9831040
static ssize_t sfp_txdisable_show(struct device *dev, struct device_attribute *attr, char *buf)
9841041
{
9851042
u8 data;
@@ -1017,15 +1074,48 @@ static ssize_t sfp_txdisable_store(struct device *dev, struct device_attribute *
10171074
}
10181075
DEVICE_ATTR_RW(sfp_txdisable);
10191076

1077+
static ssize_t sfp_isr_mask_show(struct device *dev, struct device_attribute *attr, char *buf)
1078+
{
1079+
u8 data;
1080+
int err;
1081+
struct sff_device_data *dev_data = dev_get_drvdata(dev);
1082+
unsigned int portid = dev_data->portid;
1083+
err = i2c_xcvr_access(I2C_XCVR_MASK,portid,&data,I2C_SMBUS_READ);
1084+
if(err < 0){
1085+
return err;
1086+
}
1087+
return sprintf(buf, "0x%2.2x\n", data);
1088+
}
1089+
1090+
static ssize_t sfp_isr_mask_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t size)
1091+
{
1092+
ssize_t status;
1093+
u8 data;
1094+
struct sff_device_data *dev_data = dev_get_drvdata(dev);
1095+
unsigned int portid = dev_data->portid;
1096+
1097+
status = kstrtou8(buf, 0, &data);
1098+
if (status == 0) {
1099+
i2c_xcvr_access(I2C_XCVR_MASK,portid,&data,I2C_SMBUS_WRITE);
1100+
status = size;
1101+
}
1102+
return status;
1103+
}
1104+
DEVICE_ATTR_RW(sfp_isr_mask);
1105+
10201106
static struct attribute *sff_attrs[] = {
10211107
&dev_attr_qsfp_modirq.attr,
10221108
&dev_attr_qsfp_modprs.attr,
10231109
&dev_attr_qsfp_modsel.attr,
10241110
&dev_attr_qsfp_reset.attr,
1111+
&dev_attr_qsfp_isr_flags.attr,
1112+
&dev_attr_qsfp_isr_mask.attr,
10251113
&dev_attr_sfp_txfault.attr,
10261114
&dev_attr_sfp_rxlos.attr,
10271115
&dev_attr_sfp_modabs.attr,
10281116
&dev_attr_sfp_txdisable.attr,
1117+
&dev_attr_sfp_isr_flags.attr,
1118+
&dev_attr_sfp_isr_mask.attr,
10291119
NULL,
10301120
};
10311121

@@ -2413,7 +2503,6 @@ static long fpgafw_unlocked_ioctl(struct file *file, unsigned int cmd, unsigned
24132503
switch (status_reg) {
24142504
case 0x0000 : status_reg = 0x8000;
24152505
break;
2416-
24172506
case 0x8080 : status_reg = 0x80C0;
24182507
break;
24192508
case 0x80C0 : status_reg = 0x80F0;

0 commit comments

Comments
 (0)