[devices]: fixed sfputil error on ag9032 (#3579)
Signed-off-by: johnson <JOHNSON.LU@deltaww.com>
This commit is contained in:
parent
576f0982d2
commit
41e855c211
@ -1,34 +1,34 @@
|
|||||||
# name lanes alias index speed
|
# name lanes alias index speed
|
||||||
Ethernet0 1,2,3,4 hundredGigE1/1 1 100000
|
Ethernet0 1,2,3,4 hundredGigE1/1 0 100000
|
||||||
Ethernet4 5,6,7,8 hundredGigE1/2 2 100000
|
Ethernet4 5,6,7,8 hundredGigE1/2 1 100000
|
||||||
Ethernet8 9,10,11,12 hundredGigE1/3 3 100000
|
Ethernet8 9,10,11,12 hundredGigE1/3 2 100000
|
||||||
Ethernet12 13,14,15,16 hundredGigE1/4 4 100000
|
Ethernet12 13,14,15,16 hundredGigE1/4 3 100000
|
||||||
Ethernet16 17,18,19,20 hundredGigE1/5 5 100000
|
Ethernet16 17,18,19,20 hundredGigE1/5 4 100000
|
||||||
Ethernet20 21,22,23,24 hundredGigE1/6 6 100000
|
Ethernet20 21,22,23,24 hundredGigE1/6 5 100000
|
||||||
Ethernet24 25,26,27,28 hundredGigE1/7 7 100000
|
Ethernet24 25,26,27,28 hundredGigE1/7 6 100000
|
||||||
Ethernet28 29,30,31,32 hundredGigE1/8 8 100000
|
Ethernet28 29,30,31,32 hundredGigE1/8 7 100000
|
||||||
Ethernet32 33,34,35,36 hundredGigE1/9 9 100000
|
Ethernet32 33,34,35,36 hundredGigE1/9 8 100000
|
||||||
Ethernet36 37,38,39,40 hundredGigE1/10 10 100000
|
Ethernet36 37,38,39,40 hundredGigE1/10 9 100000
|
||||||
Ethernet40 41,42,43,44 hundredGigE1/11 11 100000
|
Ethernet40 41,42,43,44 hundredGigE1/11 10 100000
|
||||||
Ethernet44 45,46,47,48 hundredGigE1/12 12 100000
|
Ethernet44 45,46,47,48 hundredGigE1/12 11 100000
|
||||||
Ethernet48 49,50,51,52 hundredGigE1/13 13 100000
|
Ethernet48 49,50,51,52 hundredGigE1/13 12 100000
|
||||||
Ethernet52 53,54,55,56 hundredGigE1/14 14 100000
|
Ethernet52 53,54,55,56 hundredGigE1/14 13 100000
|
||||||
Ethernet56 57,58,59,60 hundredGigE1/15 15 100000
|
Ethernet56 57,58,59,60 hundredGigE1/15 14 100000
|
||||||
Ethernet60 61,62,63,64 hundredGigE1/16 16 100000
|
Ethernet60 61,62,63,64 hundredGigE1/16 15 100000
|
||||||
Ethernet64 65,66,67,68 hundredGigE1/17 17 100000
|
Ethernet64 65,66,67,68 hundredGigE1/17 16 100000
|
||||||
Ethernet68 69,70,71,72 hundredGigE1/18 18 100000
|
Ethernet68 69,70,71,72 hundredGigE1/18 17 100000
|
||||||
Ethernet72 73,74,75,76 hundredGigE1/19 19 100000
|
Ethernet72 73,74,75,76 hundredGigE1/19 18 100000
|
||||||
Ethernet76 77,78,79,80 hundredGigE1/20 20 100000
|
Ethernet76 77,78,79,80 hundredGigE1/20 19 100000
|
||||||
Ethernet80 81,82,83,84 hundredGigE1/21 21 100000
|
Ethernet80 81,82,83,84 hundredGigE1/21 20 100000
|
||||||
Ethernet84 85,86,87,88 hundredGigE1/22 22 100000
|
Ethernet84 85,86,87,88 hundredGigE1/22 21 100000
|
||||||
Ethernet88 89,90,91,92 hundredGigE1/23 23 100000
|
Ethernet88 89,90,91,92 hundredGigE1/23 22 100000
|
||||||
Ethernet92 93,94,95,96 hundredGigE1/24 24 100000
|
Ethernet92 93,94,95,96 hundredGigE1/24 23 100000
|
||||||
Ethernet96 97,98,99,100 hundredGigE1/25 25 100000
|
Ethernet96 97,98,99,100 hundredGigE1/25 24 100000
|
||||||
Ethernet100 101,102,103,104 hundredGigE1/26 26 100000
|
Ethernet100 101,102,103,104 hundredGigE1/26 25 100000
|
||||||
Ethernet104 105,106,107,108 hundredGigE1/27 27 100000
|
Ethernet104 105,106,107,108 hundredGigE1/27 26 100000
|
||||||
Ethernet108 109,110,111,112 hundredGigE1/28 28 100000
|
Ethernet108 109,110,111,112 hundredGigE1/28 27 100000
|
||||||
Ethernet112 113,114,115,116 hundredGigE1/29 29 100000
|
Ethernet112 113,114,115,116 hundredGigE1/29 28 100000
|
||||||
Ethernet116 117,118,119,120 hundredGigE1/30 30 100000
|
Ethernet116 117,118,119,120 hundredGigE1/30 29 100000
|
||||||
Ethernet120 121,122,123,124 hundredGigE1/31 31 100000
|
Ethernet120 121,122,123,124 hundredGigE1/31 30 100000
|
||||||
Ethernet124 125,126,127,128 hundredGigE1/32 32 100000
|
Ethernet124 125,126,127,128 hundredGigE1/32 31 100000
|
||||||
Ethernet128 129 tenGigE1/33 33 10000
|
Ethernet128 129 tenGigE1/33 32 10000
|
||||||
|
@ -62,7 +62,7 @@ class SfpUtil(SfpUtilBase):
|
|||||||
reg_value = int(content, 16)
|
reg_value = int(content, 16)
|
||||||
|
|
||||||
# Mask off the bit corresponding to our port
|
# Mask off the bit corresponding to our port
|
||||||
mask = (1 << port_num)
|
mask = (1 << (self.port_end - port_num + 7))
|
||||||
|
|
||||||
# ModPrsL is active low
|
# ModPrsL is active low
|
||||||
if reg_value & mask == 0:
|
if reg_value & mask == 0:
|
||||||
@ -86,7 +86,7 @@ class SfpUtil(SfpUtilBase):
|
|||||||
reg_value = int(content, 16)
|
reg_value = int(content, 16)
|
||||||
|
|
||||||
# Mask off the bit corresponding to our port
|
# Mask off the bit corresponding to our port
|
||||||
mask = (1 << port_num)
|
mask = (1 << (self.port_end - port_num) - 1)
|
||||||
|
|
||||||
# LPMode is active high
|
# LPMode is active high
|
||||||
if reg_value & mask == 0:
|
if reg_value & mask == 0:
|
||||||
@ -111,7 +111,7 @@ class SfpUtil(SfpUtilBase):
|
|||||||
reg_value = int(content, 16)
|
reg_value = int(content, 16)
|
||||||
|
|
||||||
# Mask off the bit corresponding to our port
|
# Mask off the bit corresponding to our port
|
||||||
mask = (1 << port_num)
|
mask = (1 << (self.port_end - port_num) - 1)
|
||||||
|
|
||||||
# LPMode is active high; set or clear the bit accordingly
|
# LPMode is active high; set or clear the bit accordingly
|
||||||
if lpmode is True:
|
if lpmode is True:
|
||||||
@ -147,7 +147,7 @@ class SfpUtil(SfpUtilBase):
|
|||||||
reg_value = int(content, 16)
|
reg_value = int(content, 16)
|
||||||
|
|
||||||
# Mask off the bit corresponding to our port
|
# Mask off the bit corresponding to our port
|
||||||
mask = (1 << port_num)
|
mask = (1 << (self.port_end - port_num) - 1)
|
||||||
|
|
||||||
# ResetL is active low
|
# ResetL is active low
|
||||||
reg_value = reg_value & ~mask
|
reg_value = reg_value & ~mask
|
||||||
|
@ -566,53 +566,53 @@ static ssize_t for_status(struct device *dev, struct device_attribute *dev_attr,
|
|||||||
mutex_lock(&dni_lock);
|
mutex_lock(&dni_lock);
|
||||||
switch (attr->index) {
|
switch (attr->index) {
|
||||||
case SFP_IS_PRESENT:
|
case SFP_IS_PRESENT:
|
||||||
/*QSFP1~8*/
|
|
||||||
ret = i2c_smbus_read_byte_data(pdata1[swpld1].client, QSFP_PRESENCE_1);
|
|
||||||
data = (u32)(reverse_8bits(ret) & 0xff);
|
|
||||||
/*QSFP9~16*/
|
|
||||||
ret = i2c_smbus_read_byte_data(pdata1[swpld1].client, QSFP_PRESENCE_2);
|
|
||||||
data |= (u32)(reverse_8bits(ret) & 0xff) << 8;
|
|
||||||
/*QSFP17~24*/
|
|
||||||
ret = i2c_smbus_read_byte_data(pdata1[swpld1].client, QSFP_PRESENCE_3);
|
|
||||||
data |= (u32)(reverse_8bits(ret) & 0xff) << 16;
|
|
||||||
/*QSFP25~32*/
|
/*QSFP25~32*/
|
||||||
ret = i2c_smbus_read_byte_data(pdata1[swpld1].client, QSFP_PRESENCE_4);
|
ret = i2c_smbus_read_byte_data(pdata1[swpld1].client, QSFP_PRESENCE_4);
|
||||||
data |= (u32)(reverse_8bits(ret) & 0xff) << 24;
|
data = (u32)ret & 0xff;
|
||||||
|
/*QSFP17~24*/
|
||||||
|
ret = i2c_smbus_read_byte_data(pdata1[swpld1].client, QSFP_PRESENCE_3);
|
||||||
|
data |= ((u32)ret & 0xff) << 8;
|
||||||
|
/*QSFP9~16*/
|
||||||
|
ret = i2c_smbus_read_byte_data(pdata1[swpld1].client, QSFP_PRESENCE_2);
|
||||||
|
data |= (u32)(ret & 0xff) << 16;
|
||||||
|
/*QSFP1~8*/
|
||||||
|
ret = i2c_smbus_read_byte_data(pdata1[swpld1].client, QSFP_PRESENCE_1);
|
||||||
|
data |= (u32)(ret & 0xff) << 24;
|
||||||
|
|
||||||
ret = i2c_smbus_read_byte_data(pdata2[swpld2].client, SFP_PRESENCE_5);
|
ret = i2c_smbus_read_byte_data(pdata2[swpld2].client, SFP_PRESENCE_5);
|
||||||
ret_sfp = (ret & (0x80)) >> 7;
|
ret_sfp = (ret & (0x80));
|
||||||
mutex_unlock(&dni_lock);
|
mutex_unlock(&dni_lock);
|
||||||
return sprintf(buf, "0x%x%x\n", ret_sfp, data);
|
return sprintf(buf, "0x%x%02x\n", data, ret_sfp);
|
||||||
|
|
||||||
case QSFP_LPMODE:
|
case QSFP_LPMODE:
|
||||||
/*QSFP1~8*/
|
|
||||||
ret = i2c_smbus_read_byte_data(pdata1[swpld1].client, QSFP_LPMODE_1);
|
|
||||||
data = (u32)(reverse_8bits(ret) & 0xff);
|
|
||||||
/*QSFP9~16*/
|
|
||||||
ret = i2c_smbus_read_byte_data(pdata1[swpld1].client, QSFP_LPMODE_2);
|
|
||||||
data |= (u32)(reverse_8bits(ret) & 0xff) << 8;
|
|
||||||
/*QSFP17~24*/
|
|
||||||
ret = i2c_smbus_read_byte_data(pdata1[swpld1].client, QSFP_LPMODE_3);
|
|
||||||
data |= (u32)(reverse_8bits(ret) & 0xff) << 16;
|
|
||||||
/*QSFP25~32*/
|
/*QSFP25~32*/
|
||||||
ret = i2c_smbus_read_byte_data(pdata1[swpld1].client, QSFP_LPMODE_4);
|
ret = i2c_smbus_read_byte_data(pdata1[swpld1].client, QSFP_LPMODE_4);
|
||||||
data |= (u32)(reverse_8bits(ret) & 0xff) << 24;
|
data = (u32)(ret & 0xff);
|
||||||
|
/*QSFP17~24*/
|
||||||
|
ret = i2c_smbus_read_byte_data(pdata1[swpld1].client, QSFP_LPMODE_3);
|
||||||
|
data |= (u32)(ret & 0xff) << 8;
|
||||||
|
/*QSFP9~16*/
|
||||||
|
ret = i2c_smbus_read_byte_data(pdata1[swpld1].client, QSFP_LPMODE_2);
|
||||||
|
data |= (u32)(ret & 0xff) << 16;
|
||||||
|
/*QSFP1~8*/
|
||||||
|
ret = i2c_smbus_read_byte_data(pdata1[swpld1].client, QSFP_LPMODE_1);
|
||||||
|
data |= (u32)(ret & 0xff) << 24;
|
||||||
mutex_unlock(&dni_lock);
|
mutex_unlock(&dni_lock);
|
||||||
return sprintf(buf, "0x%x\n", data);
|
return sprintf(buf, "0x%x\n", data);
|
||||||
|
|
||||||
case QSFP_RESET:
|
case QSFP_RESET:
|
||||||
/*QSFP1~8*/
|
|
||||||
ret = i2c_smbus_read_byte_data(pdata1[swpld1].client, QSFP_RESET_1);
|
|
||||||
data = (u32)(reverse_8bits(ret) & 0xff);
|
|
||||||
/*QSFP9~16*/
|
|
||||||
ret = i2c_smbus_read_byte_data(pdata1[swpld1].client, QSFP_RESET_2);
|
|
||||||
data |= (u32)(reverse_8bits(ret) & 0xff) << 8;
|
|
||||||
/*QSFP17~24*/
|
|
||||||
ret = i2c_smbus_read_byte_data(pdata1[swpld1].client, QSFP_RESET_3);
|
|
||||||
data |= (u32)(reverse_8bits(ret) & 0xff) << 16;
|
|
||||||
/*QSFP25~32*/
|
/*QSFP25~32*/
|
||||||
ret = i2c_smbus_read_byte_data(pdata1[swpld1].client, QSFP_RESET_4);
|
ret = i2c_smbus_read_byte_data(pdata1[swpld1].client, QSFP_RESET_4);
|
||||||
data |= (u32)(reverse_8bits(ret) & 0xff) << 24;
|
data = (u32)(ret & 0xff);
|
||||||
|
/*QSFP17~24*/
|
||||||
|
ret = i2c_smbus_read_byte_data(pdata1[swpld1].client, QSFP_RESET_3);
|
||||||
|
data |= (u32)(ret & 0xff) << 8;
|
||||||
|
/*QSFP9~16*/
|
||||||
|
ret = i2c_smbus_read_byte_data(pdata1[swpld1].client, QSFP_RESET_2);
|
||||||
|
data |= (u32)(ret & 0xff) << 16;
|
||||||
|
/*QSFP1~8*/
|
||||||
|
ret = i2c_smbus_read_byte_data(pdata1[swpld1].client, QSFP_RESET_1);
|
||||||
|
data |= (u32)(ret & 0xff) << 24;
|
||||||
mutex_unlock(&dni_lock);
|
mutex_unlock(&dni_lock);
|
||||||
return sprintf(buf, "0x%x\n", data);
|
return sprintf(buf, "0x%x\n", data);
|
||||||
|
|
||||||
@ -628,6 +628,7 @@ static ssize_t set_lpmode_data(struct device *dev, struct device_attribute *dev_
|
|||||||
struct cpld_platform_data *pdata = i2cdev->platform_data;
|
struct cpld_platform_data *pdata = i2cdev->platform_data;
|
||||||
unsigned long long set_data;
|
unsigned long long set_data;
|
||||||
int err;
|
int err;
|
||||||
|
int status = 0;
|
||||||
unsigned char set_bytes;
|
unsigned char set_bytes;
|
||||||
|
|
||||||
|
|
||||||
@ -636,24 +637,45 @@ static ssize_t set_lpmode_data(struct device *dev, struct device_attribute *dev_
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
mutex_lock(&dni_lock);
|
mutex_lock(&dni_lock);
|
||||||
/*QSFP1~8*/
|
/*QSFP25~32*/
|
||||||
set_bytes = reverse_8bits(set_data & 0xff);
|
set_bytes = set_data & 0xff;
|
||||||
i2c_smbus_write_byte_data(pdata[swpld1].client, QSFP_LPMODE_1, set_bytes);
|
status = i2c_smbus_write_byte_data(pdata[swpld1].client, QSFP_LPMODE_4, set_bytes);
|
||||||
|
if(status < 0)
|
||||||
/*QSFP9~16*/
|
{
|
||||||
set_bytes = reverse_8bits((set_data >> 8 ) & 0xff);
|
goto ERROR;
|
||||||
i2c_smbus_write_byte_data(pdata[swpld1].client, QSFP_LPMODE_2, set_bytes);
|
}
|
||||||
|
|
||||||
/*QSFP17~24*/
|
/*QSFP17~24*/
|
||||||
set_bytes = reverse_8bits((set_data >> 16 ) & 0xff);
|
set_bytes = (set_data >> 8 ) & 0xff;
|
||||||
i2c_smbus_write_byte_data(pdata[swpld1].client, QSFP_LPMODE_3, set_bytes);
|
status = i2c_smbus_write_byte_data(pdata[swpld1].client, QSFP_LPMODE_3, set_bytes);
|
||||||
|
if(status < 0)
|
||||||
|
{
|
||||||
|
goto ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*QSFP9~16*/
|
||||||
|
set_bytes = (set_data >> 16 ) & 0xff;
|
||||||
|
status = i2c_smbus_write_byte_data(pdata[swpld1].client, QSFP_LPMODE_2, set_bytes);
|
||||||
|
if(status < 0)
|
||||||
|
{
|
||||||
|
goto ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*QSFP1~8*/
|
||||||
|
set_bytes = (set_data >> 24 ) & 0xff;
|
||||||
|
status = i2c_smbus_write_byte_data(pdata[swpld1].client, QSFP_LPMODE_1, set_bytes);
|
||||||
|
if(status < 0)
|
||||||
|
{
|
||||||
|
goto ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
/*QSFP25~32*/
|
|
||||||
set_bytes = reverse_8bits((set_data >> 24 ) & 0xff);
|
|
||||||
i2c_smbus_write_byte_data(pdata[swpld1].client, QSFP_LPMODE_4, set_bytes);
|
|
||||||
mutex_unlock(&dni_lock);
|
mutex_unlock(&dni_lock);
|
||||||
return count;
|
return count;
|
||||||
|
|
||||||
|
ERROR:
|
||||||
|
mutex_unlock(&dni_lock);
|
||||||
|
return status;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t set_reset_data(struct device *dev, struct device_attribute *dev_attr, const char *buf, size_t count)
|
static ssize_t set_reset_data(struct device *dev, struct device_attribute *dev_attr, const char *buf, size_t count)
|
||||||
@ -662,6 +684,7 @@ static ssize_t set_reset_data(struct device *dev, struct device_attribute *dev_a
|
|||||||
struct cpld_platform_data *pdata = i2cdev->platform_data;
|
struct cpld_platform_data *pdata = i2cdev->platform_data;
|
||||||
unsigned long long set_data;
|
unsigned long long set_data;
|
||||||
int err;
|
int err;
|
||||||
|
int status = 0;
|
||||||
unsigned char set_bytes;
|
unsigned char set_bytes;
|
||||||
|
|
||||||
err = kstrtoull(buf, 16, &set_data);
|
err = kstrtoull(buf, 16, &set_data);
|
||||||
@ -670,23 +693,43 @@ static ssize_t set_reset_data(struct device *dev, struct device_attribute *dev_a
|
|||||||
}
|
}
|
||||||
|
|
||||||
mutex_lock(&dni_lock);
|
mutex_lock(&dni_lock);
|
||||||
/*QSFP1~8*/
|
/*QSFP25~32*/
|
||||||
set_bytes = reverse_8bits(set_data & 0xff);
|
set_bytes = set_data & 0xff;
|
||||||
i2c_smbus_write_byte_data(pdata[swpld1].client, QSFP_RESET_1, set_bytes);
|
status = i2c_smbus_write_byte_data(pdata[swpld1].client, QSFP_RESET_4, set_bytes);
|
||||||
|
if(status < 0)
|
||||||
/*QSFP9~16*/
|
{
|
||||||
set_bytes = reverse_8bits((set_data >> 8 ) & 0xff);
|
goto ERROR;
|
||||||
i2c_smbus_write_byte_data(pdata[swpld1].client, QSFP_RESET_2, set_bytes);
|
}
|
||||||
|
|
||||||
/*QSFP17~24*/
|
/*QSFP17~24*/
|
||||||
set_bytes = reverse_8bits((set_data >> 16 ) & 0xff);
|
set_bytes = (set_data >> 8 ) & 0xff;
|
||||||
i2c_smbus_write_byte_data(pdata[swpld1].client, QSFP_RESET_3, set_bytes);
|
status = i2c_smbus_write_byte_data(pdata[swpld1].client, QSFP_RESET_3, set_bytes);
|
||||||
|
if(status < 0)
|
||||||
|
{
|
||||||
|
goto ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*QSFP9~16*/
|
||||||
|
set_bytes = (set_data >> 16 ) & 0xff;
|
||||||
|
status = i2c_smbus_write_byte_data(pdata[swpld1].client, QSFP_RESET_2, set_bytes);
|
||||||
|
if(status < 0)
|
||||||
|
{
|
||||||
|
goto ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*QSFP1~8*/
|
||||||
|
set_bytes = (set_data >> 24 ) & 0xff;
|
||||||
|
status = i2c_smbus_write_byte_data(pdata[swpld1].client, QSFP_RESET_1, set_bytes);
|
||||||
|
if(status < 0)
|
||||||
|
{
|
||||||
|
goto ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
/*QSFP25~32*/
|
|
||||||
set_bytes = reverse_8bits((set_data >> 24 ) & 0xff);
|
|
||||||
i2c_smbus_write_byte_data(pdata[swpld1].client, QSFP_RESET_4, set_bytes);
|
|
||||||
mutex_unlock(&dni_lock);
|
mutex_unlock(&dni_lock);
|
||||||
return count;
|
return count;
|
||||||
|
ERROR:
|
||||||
|
mutex_unlock(&dni_lock);
|
||||||
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user