Commit 486f9ca7 authored by Arun Ramadoss's avatar Arun Ramadoss Committed by David S. Miller

net: dsa: microchip: move ksz8->regs to ksz_common

This patch moves the ksz8->regs from ksz8795.c to the ksz_common.c. And
the regs is dereferrenced using dev->info->regs.
Signed-off-by: default avatarArun Ramadoss <arun.ramadoss@microchip.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 21651635
...@@ -12,23 +12,6 @@ ...@@ -12,23 +12,6 @@
#include <net/dsa.h> #include <net/dsa.h>
#include "ksz_common.h" #include "ksz_common.h"
enum ksz_regs {
REG_IND_CTRL_0,
REG_IND_DATA_8,
REG_IND_DATA_CHECK,
REG_IND_DATA_HI,
REG_IND_DATA_LO,
REG_IND_MIB_CHECK,
REG_IND_BYTE,
P_FORCE_CTRL,
P_LINK_STATUS,
P_LOCAL_CTRL,
P_NEG_RESTART_CTRL,
P_REMOTE_STATUS,
P_SPEED_STATUS,
S_TAIL_TAG_CTRL,
};
enum ksz_masks { enum ksz_masks {
PORT_802_1P_REMAPPING, PORT_802_1P_REMAPPING,
SW_TAIL_TAG_ENABLE, SW_TAIL_TAG_ENABLE,
...@@ -64,7 +47,6 @@ enum ksz_shifts { ...@@ -64,7 +47,6 @@ enum ksz_shifts {
}; };
struct ksz8 { struct ksz8 {
const u8 *regs;
const u32 *masks; const u32 *masks;
const u8 *shifts; const u8 *shifts;
void *priv; void *priv;
......
...@@ -26,23 +26,6 @@ ...@@ -26,23 +26,6 @@
#include "ksz8795_reg.h" #include "ksz8795_reg.h"
#include "ksz8.h" #include "ksz8.h"
static const u8 ksz8795_regs[] = {
[REG_IND_CTRL_0] = 0x6E,
[REG_IND_DATA_8] = 0x70,
[REG_IND_DATA_CHECK] = 0x72,
[REG_IND_DATA_HI] = 0x71,
[REG_IND_DATA_LO] = 0x75,
[REG_IND_MIB_CHECK] = 0x74,
[REG_IND_BYTE] = 0xA0,
[P_FORCE_CTRL] = 0x0C,
[P_LINK_STATUS] = 0x0E,
[P_LOCAL_CTRL] = 0x07,
[P_NEG_RESTART_CTRL] = 0x0D,
[P_REMOTE_STATUS] = 0x08,
[P_SPEED_STATUS] = 0x09,
[S_TAIL_TAG_CTRL] = 0x0C,
};
static const u32 ksz8795_masks[] = { static const u32 ksz8795_masks[] = {
[PORT_802_1P_REMAPPING] = BIT(7), [PORT_802_1P_REMAPPING] = BIT(7),
[SW_TAIL_TAG_ENABLE] = BIT(1), [SW_TAIL_TAG_ENABLE] = BIT(1),
...@@ -77,22 +60,6 @@ static const u8 ksz8795_shifts[] = { ...@@ -77,22 +60,6 @@ static const u8 ksz8795_shifts[] = {
[DYNAMIC_MAC_SRC_PORT] = 24, [DYNAMIC_MAC_SRC_PORT] = 24,
}; };
static const u8 ksz8863_regs[] = {
[REG_IND_CTRL_0] = 0x79,
[REG_IND_DATA_8] = 0x7B,
[REG_IND_DATA_CHECK] = 0x7B,
[REG_IND_DATA_HI] = 0x7C,
[REG_IND_DATA_LO] = 0x80,
[REG_IND_MIB_CHECK] = 0x80,
[P_FORCE_CTRL] = 0x0C,
[P_LINK_STATUS] = 0x0E,
[P_LOCAL_CTRL] = 0x0C,
[P_NEG_RESTART_CTRL] = 0x0D,
[P_REMOTE_STATUS] = 0x0E,
[P_SPEED_STATUS] = 0x0F,
[S_TAIL_TAG_CTRL] = 0x03,
};
static const u32 ksz8863_masks[] = { static const u32 ksz8863_masks[] = {
[PORT_802_1P_REMAPPING] = BIT(3), [PORT_802_1P_REMAPPING] = BIT(3),
[SW_TAIL_TAG_ENABLE] = BIT(6), [SW_TAIL_TAG_ENABLE] = BIT(6),
...@@ -145,11 +112,12 @@ static void ksz_port_cfg(struct ksz_device *dev, int port, int offset, u8 bits, ...@@ -145,11 +112,12 @@ static void ksz_port_cfg(struct ksz_device *dev, int port, int offset, u8 bits,
static int ksz8_ind_write8(struct ksz_device *dev, u8 table, u16 addr, u8 data) static int ksz8_ind_write8(struct ksz_device *dev, u8 table, u16 addr, u8 data)
{ {
struct ksz8 *ksz8 = dev->priv; const u8 *regs;
const u8 *regs = ksz8->regs;
u16 ctrl_addr; u16 ctrl_addr;
int ret = 0; int ret = 0;
regs = dev->info->regs;
mutex_lock(&dev->alu_mutex); mutex_lock(&dev->alu_mutex);
ctrl_addr = IND_ACC_TABLE(table) | addr; ctrl_addr = IND_ACC_TABLE(table) | addr;
...@@ -224,7 +192,7 @@ void ksz8_r_mib_cnt(struct ksz_device *dev, int port, u16 addr, u64 *cnt) ...@@ -224,7 +192,7 @@ void ksz8_r_mib_cnt(struct ksz_device *dev, int port, u16 addr, u64 *cnt)
int loop; int loop;
masks = ksz8->masks; masks = ksz8->masks;
regs = ksz8->regs; regs = dev->info->regs;
ctrl_addr = addr + dev->info->reg_mib_cnt * port; ctrl_addr = addr + dev->info->reg_mib_cnt * port;
ctrl_addr |= IND_ACC_TABLE(TABLE_MIB | TABLE_READ); ctrl_addr |= IND_ACC_TABLE(TABLE_MIB | TABLE_READ);
...@@ -261,7 +229,7 @@ static void ksz8795_r_mib_pkt(struct ksz_device *dev, int port, u16 addr, ...@@ -261,7 +229,7 @@ static void ksz8795_r_mib_pkt(struct ksz_device *dev, int port, u16 addr,
int loop; int loop;
masks = ksz8->masks; masks = ksz8->masks;
regs = ksz8->regs; regs = dev->info->regs;
addr -= dev->info->reg_mib_cnt; addr -= dev->info->reg_mib_cnt;
ctrl_addr = (KSZ8795_MIB_TOTAL_RX_1 - KSZ8795_MIB_TOTAL_RX_0) * port; ctrl_addr = (KSZ8795_MIB_TOTAL_RX_1 - KSZ8795_MIB_TOTAL_RX_0) * port;
...@@ -305,13 +273,14 @@ static void ksz8795_r_mib_pkt(struct ksz_device *dev, int port, u16 addr, ...@@ -305,13 +273,14 @@ static void ksz8795_r_mib_pkt(struct ksz_device *dev, int port, u16 addr,
static void ksz8863_r_mib_pkt(struct ksz_device *dev, int port, u16 addr, static void ksz8863_r_mib_pkt(struct ksz_device *dev, int port, u16 addr,
u64 *dropped, u64 *cnt) u64 *dropped, u64 *cnt)
{ {
struct ksz8 *ksz8 = dev->priv;
const u8 *regs = ksz8->regs;
u32 *last = (u32 *)dropped; u32 *last = (u32 *)dropped;
const u8 *regs;
u16 ctrl_addr; u16 ctrl_addr;
u32 data; u32 data;
u32 cur; u32 cur;
regs = dev->info->regs;
addr -= dev->info->reg_mib_cnt; addr -= dev->info->reg_mib_cnt;
ctrl_addr = addr ? KSZ8863_MIB_PACKET_DROPPED_TX_0 : ctrl_addr = addr ? KSZ8863_MIB_PACKET_DROPPED_TX_0 :
KSZ8863_MIB_PACKET_DROPPED_RX_0; KSZ8863_MIB_PACKET_DROPPED_RX_0;
...@@ -392,10 +361,11 @@ void ksz8_port_init_cnt(struct ksz_device *dev, int port) ...@@ -392,10 +361,11 @@ void ksz8_port_init_cnt(struct ksz_device *dev, int port)
static void ksz8_r_table(struct ksz_device *dev, int table, u16 addr, u64 *data) static void ksz8_r_table(struct ksz_device *dev, int table, u16 addr, u64 *data)
{ {
struct ksz8 *ksz8 = dev->priv; const u8 *regs;
const u8 *regs = ksz8->regs;
u16 ctrl_addr; u16 ctrl_addr;
regs = dev->info->regs;
ctrl_addr = IND_ACC_TABLE(table | TABLE_READ) | addr; ctrl_addr = IND_ACC_TABLE(table | TABLE_READ) | addr;
mutex_lock(&dev->alu_mutex); mutex_lock(&dev->alu_mutex);
...@@ -406,10 +376,11 @@ static void ksz8_r_table(struct ksz_device *dev, int table, u16 addr, u64 *data) ...@@ -406,10 +376,11 @@ static void ksz8_r_table(struct ksz_device *dev, int table, u16 addr, u64 *data)
static void ksz8_w_table(struct ksz_device *dev, int table, u16 addr, u64 data) static void ksz8_w_table(struct ksz_device *dev, int table, u16 addr, u64 data)
{ {
struct ksz8 *ksz8 = dev->priv; const u8 *regs;
const u8 *regs = ksz8->regs;
u16 ctrl_addr; u16 ctrl_addr;
regs = dev->info->regs;
ctrl_addr = IND_ACC_TABLE(table) | addr; ctrl_addr = IND_ACC_TABLE(table) | addr;
mutex_lock(&dev->alu_mutex); mutex_lock(&dev->alu_mutex);
...@@ -426,7 +397,7 @@ static int ksz8_valid_dyn_entry(struct ksz_device *dev, u8 *data) ...@@ -426,7 +397,7 @@ static int ksz8_valid_dyn_entry(struct ksz_device *dev, u8 *data)
const u8 *regs; const u8 *regs;
masks = ksz8->masks; masks = ksz8->masks;
regs = ksz8->regs; regs = dev->info->regs;
do { do {
ksz_read8(dev, regs[REG_IND_DATA_CHECK], data); ksz_read8(dev, regs[REG_IND_DATA_CHECK], data);
...@@ -461,7 +432,7 @@ int ksz8_r_dyn_mac_table(struct ksz_device *dev, u16 addr, u8 *mac_addr, ...@@ -461,7 +432,7 @@ int ksz8_r_dyn_mac_table(struct ksz_device *dev, u16 addr, u8 *mac_addr,
shifts = ksz8->shifts; shifts = ksz8->shifts;
masks = ksz8->masks; masks = ksz8->masks;
regs = ksz8->regs; regs = dev->info->regs;
ctrl_addr = IND_ACC_TABLE(TABLE_DYNAMIC_MAC | TABLE_READ) | addr; ctrl_addr = IND_ACC_TABLE(TABLE_DYNAMIC_MAC | TABLE_READ) | addr;
...@@ -664,14 +635,15 @@ static void ksz8_w_vlan_table(struct ksz_device *dev, u16 vid, u16 vlan) ...@@ -664,14 +635,15 @@ static void ksz8_w_vlan_table(struct ksz_device *dev, u16 vid, u16 vlan)
void ksz8_r_phy(struct ksz_device *dev, u16 phy, u16 reg, u16 *val) void ksz8_r_phy(struct ksz_device *dev, u16 phy, u16 reg, u16 *val)
{ {
struct ksz8 *ksz8 = dev->priv;
u8 restart, speed, ctrl, link; u8 restart, speed, ctrl, link;
const u8 *regs = ksz8->regs;
int processed = true; int processed = true;
const u8 *regs;
u8 val1, val2; u8 val1, val2;
u16 data = 0; u16 data = 0;
u8 p = phy; u8 p = phy;
regs = dev->info->regs;
switch (reg) { switch (reg) {
case MII_BMCR: case MII_BMCR:
ksz_pread8(dev, p, regs[P_NEG_RESTART_CTRL], &restart); ksz_pread8(dev, p, regs[P_NEG_RESTART_CTRL], &restart);
...@@ -787,11 +759,12 @@ void ksz8_r_phy(struct ksz_device *dev, u16 phy, u16 reg, u16 *val) ...@@ -787,11 +759,12 @@ void ksz8_r_phy(struct ksz_device *dev, u16 phy, u16 reg, u16 *val)
void ksz8_w_phy(struct ksz_device *dev, u16 phy, u16 reg, u16 val) void ksz8_w_phy(struct ksz_device *dev, u16 phy, u16 reg, u16 val)
{ {
struct ksz8 *ksz8 = dev->priv;
u8 restart, speed, ctrl, data; u8 restart, speed, ctrl, data;
const u8 *regs = ksz8->regs; const u8 *regs;
u8 p = phy; u8 p = phy;
regs = dev->info->regs;
switch (reg) { switch (reg) {
case MII_BMCR: case MII_BMCR:
...@@ -1302,13 +1275,14 @@ void ksz8_config_cpu_port(struct dsa_switch *ds) ...@@ -1302,13 +1275,14 @@ void ksz8_config_cpu_port(struct dsa_switch *ds)
{ {
struct ksz_device *dev = ds->priv; struct ksz_device *dev = ds->priv;
struct ksz8 *ksz8 = dev->priv; struct ksz8 *ksz8 = dev->priv;
const u8 *regs = ksz8->regs;
struct ksz_port *p; struct ksz_port *p;
const u32 *masks; const u32 *masks;
const u8 *regs;
u8 remote; u8 remote;
int i; int i;
masks = ksz8->masks; masks = ksz8->masks;
regs = dev->info->regs;
/* Switch marks the maximum frame with extra byte as oversize. */ /* Switch marks the maximum frame with extra byte as oversize. */
ksz_cfg(dev, REG_SW_CTRL_2, SW_LEGAL_PACKET_DISABLE, true); ksz_cfg(dev, REG_SW_CTRL_2, SW_LEGAL_PACKET_DISABLE, true);
...@@ -1448,11 +1422,9 @@ int ksz8_switch_init(struct ksz_device *dev) ...@@ -1448,11 +1422,9 @@ int ksz8_switch_init(struct ksz_device *dev)
dev->port_mask = (BIT(dev->phy_port_cnt) - 1) | dev->info->cpu_ports; dev->port_mask = (BIT(dev->phy_port_cnt) - 1) | dev->info->cpu_ports;
if (ksz_is_ksz88x3(dev)) { if (ksz_is_ksz88x3(dev)) {
ksz8->regs = ksz8863_regs;
ksz8->masks = ksz8863_masks; ksz8->masks = ksz8863_masks;
ksz8->shifts = ksz8863_shifts; ksz8->shifts = ksz8863_shifts;
} else { } else {
ksz8->regs = ksz8795_regs;
ksz8->masks = ksz8795_masks; ksz8->masks = ksz8795_masks;
ksz8->shifts = ksz8795_shifts; ksz8->shifts = ksz8795_shifts;
} }
......
...@@ -1624,9 +1624,6 @@ ...@@ -1624,9 +1624,6 @@
#define P_MIRROR_CTRL REG_PORT_MRI_MIRROR_CTRL #define P_MIRROR_CTRL REG_PORT_MRI_MIRROR_CTRL
#define P_STP_CTRL REG_PORT_LUE_MSTP_STATE #define P_STP_CTRL REG_PORT_LUE_MSTP_STATE
#define P_PHY_CTRL REG_PORT_PHY_CTRL #define P_PHY_CTRL REG_PORT_PHY_CTRL
#define P_NEG_RESTART_CTRL REG_PORT_PHY_CTRL
#define P_LINK_STATUS REG_PORT_PHY_STATUS
#define P_SPEED_STATUS REG_PORT_PHY_PHY_CTRL
#define P_RATE_LIMIT_CTRL REG_PORT_MAC_IN_RATE_LIMIT #define P_RATE_LIMIT_CTRL REG_PORT_MAC_IN_RATE_LIMIT
#define S_LINK_AGING_CTRL REG_SW_LUE_CTRL_1 #define S_LINK_AGING_CTRL REG_SW_LUE_CTRL_1
......
...@@ -201,6 +201,39 @@ static const struct ksz_dev_ops ksz9477_dev_ops = { ...@@ -201,6 +201,39 @@ static const struct ksz_dev_ops ksz9477_dev_ops = {
.exit = ksz9477_switch_exit, .exit = ksz9477_switch_exit,
}; };
static const u8 ksz8795_regs[] = {
[REG_IND_CTRL_0] = 0x6E,
[REG_IND_DATA_8] = 0x70,
[REG_IND_DATA_CHECK] = 0x72,
[REG_IND_DATA_HI] = 0x71,
[REG_IND_DATA_LO] = 0x75,
[REG_IND_MIB_CHECK] = 0x74,
[REG_IND_BYTE] = 0xA0,
[P_FORCE_CTRL] = 0x0C,
[P_LINK_STATUS] = 0x0E,
[P_LOCAL_CTRL] = 0x07,
[P_NEG_RESTART_CTRL] = 0x0D,
[P_REMOTE_STATUS] = 0x08,
[P_SPEED_STATUS] = 0x09,
[S_TAIL_TAG_CTRL] = 0x0C,
};
static const u8 ksz8863_regs[] = {
[REG_IND_CTRL_0] = 0x79,
[REG_IND_DATA_8] = 0x7B,
[REG_IND_DATA_CHECK] = 0x7B,
[REG_IND_DATA_HI] = 0x7C,
[REG_IND_DATA_LO] = 0x80,
[REG_IND_MIB_CHECK] = 0x80,
[P_FORCE_CTRL] = 0x0C,
[P_LINK_STATUS] = 0x0E,
[P_LOCAL_CTRL] = 0x0C,
[P_NEG_RESTART_CTRL] = 0x0D,
[P_REMOTE_STATUS] = 0x0E,
[P_SPEED_STATUS] = 0x0F,
[S_TAIL_TAG_CTRL] = 0x03,
};
const struct ksz_chip_data ksz_switch_chips[] = { const struct ksz_chip_data ksz_switch_chips[] = {
[KSZ8795] = { [KSZ8795] = {
.chip_id = KSZ8795_CHIP_ID, .chip_id = KSZ8795_CHIP_ID,
...@@ -215,6 +248,7 @@ const struct ksz_chip_data ksz_switch_chips[] = { ...@@ -215,6 +248,7 @@ const struct ksz_chip_data ksz_switch_chips[] = {
.mib_names = ksz9477_mib_names, .mib_names = ksz9477_mib_names,
.mib_cnt = ARRAY_SIZE(ksz9477_mib_names), .mib_cnt = ARRAY_SIZE(ksz9477_mib_names),
.reg_mib_cnt = MIB_COUNTER_NUM, .reg_mib_cnt = MIB_COUNTER_NUM,
.regs = ksz8795_regs,
.stp_ctrl_reg = 0x02, .stp_ctrl_reg = 0x02,
.broadcast_ctrl_reg = 0x06, .broadcast_ctrl_reg = 0x06,
.multicast_ctrl_reg = 0x04, .multicast_ctrl_reg = 0x04,
...@@ -252,6 +286,7 @@ const struct ksz_chip_data ksz_switch_chips[] = { ...@@ -252,6 +286,7 @@ const struct ksz_chip_data ksz_switch_chips[] = {
.mib_names = ksz9477_mib_names, .mib_names = ksz9477_mib_names,
.mib_cnt = ARRAY_SIZE(ksz9477_mib_names), .mib_cnt = ARRAY_SIZE(ksz9477_mib_names),
.reg_mib_cnt = MIB_COUNTER_NUM, .reg_mib_cnt = MIB_COUNTER_NUM,
.regs = ksz8795_regs,
.stp_ctrl_reg = 0x02, .stp_ctrl_reg = 0x02,
.broadcast_ctrl_reg = 0x06, .broadcast_ctrl_reg = 0x06,
.multicast_ctrl_reg = 0x04, .multicast_ctrl_reg = 0x04,
...@@ -275,6 +310,7 @@ const struct ksz_chip_data ksz_switch_chips[] = { ...@@ -275,6 +310,7 @@ const struct ksz_chip_data ksz_switch_chips[] = {
.mib_names = ksz9477_mib_names, .mib_names = ksz9477_mib_names,
.mib_cnt = ARRAY_SIZE(ksz9477_mib_names), .mib_cnt = ARRAY_SIZE(ksz9477_mib_names),
.reg_mib_cnt = MIB_COUNTER_NUM, .reg_mib_cnt = MIB_COUNTER_NUM,
.regs = ksz8795_regs,
.stp_ctrl_reg = 0x02, .stp_ctrl_reg = 0x02,
.broadcast_ctrl_reg = 0x06, .broadcast_ctrl_reg = 0x06,
.multicast_ctrl_reg = 0x04, .multicast_ctrl_reg = 0x04,
...@@ -297,6 +333,7 @@ const struct ksz_chip_data ksz_switch_chips[] = { ...@@ -297,6 +333,7 @@ const struct ksz_chip_data ksz_switch_chips[] = {
.mib_names = ksz88xx_mib_names, .mib_names = ksz88xx_mib_names,
.mib_cnt = ARRAY_SIZE(ksz88xx_mib_names), .mib_cnt = ARRAY_SIZE(ksz88xx_mib_names),
.reg_mib_cnt = MIB_COUNTER_NUM, .reg_mib_cnt = MIB_COUNTER_NUM,
.regs = ksz8863_regs,
.stp_ctrl_reg = 0x02, .stp_ctrl_reg = 0x02,
.broadcast_ctrl_reg = 0x06, .broadcast_ctrl_reg = 0x06,
.multicast_ctrl_reg = 0x04, .multicast_ctrl_reg = 0x04,
......
...@@ -47,6 +47,7 @@ struct ksz_chip_data { ...@@ -47,6 +47,7 @@ struct ksz_chip_data {
const struct ksz_mib_names *mib_names; const struct ksz_mib_names *mib_names;
int mib_cnt; int mib_cnt;
u8 reg_mib_cnt; u8 reg_mib_cnt;
const u8 *regs;
int stp_ctrl_reg; int stp_ctrl_reg;
int broadcast_ctrl_reg; int broadcast_ctrl_reg;
int multicast_ctrl_reg; int multicast_ctrl_reg;
...@@ -146,6 +147,23 @@ enum ksz_chip_id { ...@@ -146,6 +147,23 @@ enum ksz_chip_id {
LAN9374_CHIP_ID = 0x00937400, LAN9374_CHIP_ID = 0x00937400,
}; };
enum ksz_regs {
REG_IND_CTRL_0,
REG_IND_DATA_8,
REG_IND_DATA_CHECK,
REG_IND_DATA_HI,
REG_IND_DATA_LO,
REG_IND_MIB_CHECK,
REG_IND_BYTE,
P_FORCE_CTRL,
P_LINK_STATUS,
P_LOCAL_CTRL,
P_NEG_RESTART_CTRL,
P_REMOTE_STATUS,
P_SPEED_STATUS,
S_TAIL_TAG_CTRL,
};
struct alu_struct { struct alu_struct {
/* entry 1 */ /* entry 1 */
u8 is_static:1; u8 is_static:1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment