Loading drivers/net/dsa/mv88e6352.c +10 −8 Original line number Diff line number Diff line Loading @@ -123,8 +123,9 @@ static int mv88e6352_read_eeprom_word(struct dsa_switch *ds, int addr) mutex_lock(&ps->eeprom_mutex); ret = mv88e6xxx_reg_write(ds, REG_GLOBAL2, 0x14, 0xc000 | (addr & 0xff)); ret = mv88e6xxx_reg_write(ds, REG_GLOBAL2, GLOBAL2_EEPROM_OP, GLOBAL2_EEPROM_OP_READ | (addr & GLOBAL2_EEPROM_OP_ADDR_MASK)); if (ret < 0) goto error; Loading @@ -132,7 +133,7 @@ static int mv88e6352_read_eeprom_word(struct dsa_switch *ds, int addr) if (ret < 0) goto error; ret = mv88e6xxx_reg_read(ds, REG_GLOBAL2, 0x15); ret = mv88e6xxx_reg_read(ds, REG_GLOBAL2, GLOBAL2_EEPROM_DATA); error: mutex_unlock(&ps->eeprom_mutex); return ret; Loading Loading @@ -205,11 +206,11 @@ static int mv88e6352_eeprom_is_readonly(struct dsa_switch *ds) { int ret; ret = mv88e6xxx_reg_read(ds, REG_GLOBAL2, 0x14); ret = mv88e6xxx_reg_read(ds, REG_GLOBAL2, GLOBAL2_EEPROM_OP); if (ret < 0) return ret; if (!(ret & 0x0400)) if (!(ret & GLOBAL2_EEPROM_OP_WRITE_EN)) return -EROFS; return 0; Loading @@ -223,12 +224,13 @@ static int mv88e6352_write_eeprom_word(struct dsa_switch *ds, int addr, mutex_lock(&ps->eeprom_mutex); ret = mv88e6xxx_reg_write(ds, REG_GLOBAL2, 0x15, data); ret = mv88e6xxx_reg_write(ds, REG_GLOBAL2, GLOBAL2_EEPROM_DATA, data); if (ret < 0) goto error; ret = mv88e6xxx_reg_write(ds, REG_GLOBAL2, 0x14, 0xb000 | (addr & 0xff)); ret = mv88e6xxx_reg_write(ds, REG_GLOBAL2, GLOBAL2_EEPROM_OP, GLOBAL2_EEPROM_OP_WRITE | (addr & GLOBAL2_EEPROM_OP_ADDR_MASK)); if (ret < 0) goto error; Loading drivers/net/dsa/mv88e6xxx.h +6 −2 Original line number Diff line number Diff line Loading @@ -291,7 +291,11 @@ #define GLOBAL2_PRIO_OVERRIDE_ARP_SHIFT 0 #define GLOBAL2_EEPROM_OP 0x14 #define GLOBAL2_EEPROM_OP_BUSY BIT(15) #define GLOBAL2_EEPROM_OP_WRITE ((3 << 12) | GLOBAL2_EEPROM_OP_BUSY) #define GLOBAL2_EEPROM_OP_READ ((4 << 12) | GLOBAL2_EEPROM_OP_BUSY) #define GLOBAL2_EEPROM_OP_LOAD BIT(11) #define GLOBAL2_EEPROM_OP_WRITE_EN BIT(10) #define GLOBAL2_EEPROM_OP_ADDR_MASK 0xff #define GLOBAL2_EEPROM_DATA 0x15 #define GLOBAL2_PTP_AVB_OP 0x16 #define GLOBAL2_PTP_AVB_DATA 0x17 Loading Loading
drivers/net/dsa/mv88e6352.c +10 −8 Original line number Diff line number Diff line Loading @@ -123,8 +123,9 @@ static int mv88e6352_read_eeprom_word(struct dsa_switch *ds, int addr) mutex_lock(&ps->eeprom_mutex); ret = mv88e6xxx_reg_write(ds, REG_GLOBAL2, 0x14, 0xc000 | (addr & 0xff)); ret = mv88e6xxx_reg_write(ds, REG_GLOBAL2, GLOBAL2_EEPROM_OP, GLOBAL2_EEPROM_OP_READ | (addr & GLOBAL2_EEPROM_OP_ADDR_MASK)); if (ret < 0) goto error; Loading @@ -132,7 +133,7 @@ static int mv88e6352_read_eeprom_word(struct dsa_switch *ds, int addr) if (ret < 0) goto error; ret = mv88e6xxx_reg_read(ds, REG_GLOBAL2, 0x15); ret = mv88e6xxx_reg_read(ds, REG_GLOBAL2, GLOBAL2_EEPROM_DATA); error: mutex_unlock(&ps->eeprom_mutex); return ret; Loading Loading @@ -205,11 +206,11 @@ static int mv88e6352_eeprom_is_readonly(struct dsa_switch *ds) { int ret; ret = mv88e6xxx_reg_read(ds, REG_GLOBAL2, 0x14); ret = mv88e6xxx_reg_read(ds, REG_GLOBAL2, GLOBAL2_EEPROM_OP); if (ret < 0) return ret; if (!(ret & 0x0400)) if (!(ret & GLOBAL2_EEPROM_OP_WRITE_EN)) return -EROFS; return 0; Loading @@ -223,12 +224,13 @@ static int mv88e6352_write_eeprom_word(struct dsa_switch *ds, int addr, mutex_lock(&ps->eeprom_mutex); ret = mv88e6xxx_reg_write(ds, REG_GLOBAL2, 0x15, data); ret = mv88e6xxx_reg_write(ds, REG_GLOBAL2, GLOBAL2_EEPROM_DATA, data); if (ret < 0) goto error; ret = mv88e6xxx_reg_write(ds, REG_GLOBAL2, 0x14, 0xb000 | (addr & 0xff)); ret = mv88e6xxx_reg_write(ds, REG_GLOBAL2, GLOBAL2_EEPROM_OP, GLOBAL2_EEPROM_OP_WRITE | (addr & GLOBAL2_EEPROM_OP_ADDR_MASK)); if (ret < 0) goto error; Loading
drivers/net/dsa/mv88e6xxx.h +6 −2 Original line number Diff line number Diff line Loading @@ -291,7 +291,11 @@ #define GLOBAL2_PRIO_OVERRIDE_ARP_SHIFT 0 #define GLOBAL2_EEPROM_OP 0x14 #define GLOBAL2_EEPROM_OP_BUSY BIT(15) #define GLOBAL2_EEPROM_OP_WRITE ((3 << 12) | GLOBAL2_EEPROM_OP_BUSY) #define GLOBAL2_EEPROM_OP_READ ((4 << 12) | GLOBAL2_EEPROM_OP_BUSY) #define GLOBAL2_EEPROM_OP_LOAD BIT(11) #define GLOBAL2_EEPROM_OP_WRITE_EN BIT(10) #define GLOBAL2_EEPROM_OP_ADDR_MASK 0xff #define GLOBAL2_EEPROM_DATA 0x15 #define GLOBAL2_PTP_AVB_OP 0x16 #define GLOBAL2_PTP_AVB_DATA 0x17 Loading