if (port > 63 || page > 4095 || reg > 31)
return -ENOTSUPP;
+ // Take bug on RTL839x Rev <= C into account
+ if (port >= RTL839X_CPU_PORT)
+ return -EIO;
+
mutex_lock(&smi_lock);
sw_w32_mask(0xffff0000, port << 16, RTL839X_PHYREG_DATA_CTRL);
if (port > 63 || page > 4095 || reg > 31)
return -ENOTSUPP;
+ // Take bug on RTL839x Rev <= C into account
+ if (port >= RTL839X_CPU_PORT)
+ return -EIO;
+
mutex_lock(&smi_lock);
// Set PHY to access
int err = 0;
u32 v;
+ // Take bug on RTL839x Rev <= C into account
+ if (port >= RTL839X_CPU_PORT)
+ return -EIO;
+
mutex_lock(&smi_lock);
// Set PHY to access
int err = 0;
u32 v;
+ // Take bug on RTL839x Rev <= C into account
+ if (port >= RTL839X_CPU_PORT)
+ return -EIO;
+
mutex_lock(&smi_lock);
// Set PHY to access
void rtl8390_get_version(struct rtl838x_switch_priv *priv)
{
- u32 info;
+ u32 info, model;
sw_w32_mask(0xf << 28, 0xa << 28, RTL839X_CHIP_INFO);
info = sw_r32(RTL839X_CHIP_INFO);
- pr_debug("Chip-Info: %x\n", info);
- priv->version = RTL8390_VERSION_A;
+
+ model = sw_r32(RTL839X_MODEL_NAME_INFO);
+ priv->version = RTL8390_VERSION_A + ((model & 0x3f) >> 1);
+
+ pr_info("RTL839X Chip-Info: %x, version %c\n", info, priv->version);
}
void rtl839x_vlan_profile_dump(int profile)