Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752346AbcDPWoD (ORCPT ); Sat, 16 Apr 2016 18:44:03 -0400 Received: from mail.savoirfairelinux.com ([208.88.110.44]:60689 "EHLO mail.savoirfairelinux.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752086AbcDPWmI (ORCPT ); Sat, 16 Apr 2016 18:42:08 -0400 From: Vivien Didelot To: netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org, kernel@savoirfairelinux.com, "David S. Miller" , Florian Fainelli , Andrew Lunn , Vivien Didelot Subject: [PATCH net-next v3 4/8] net: dsa: mv88e6xxx: add switch info Date: Sat, 16 Apr 2016 18:41:41 -0400 Message-Id: <1460846505-20305-5-git-send-email-vivien.didelot@savoirfairelinux.com> X-Mailer: git-send-email 2.8.0 In-Reply-To: <1460846505-20305-1-git-send-email-vivien.didelot@savoirfairelinux.com> References: <1460846505-20305-1-git-send-email-vivien.didelot@savoirfairelinux.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 8187 Lines: 258 Add a new switch info structure which is meant to store switch models static information, such as product number, name, number of ports, number of databases, etc. Signed-off-by: Vivien Didelot --- drivers/net/dsa/mv88e6123.c | 15 +++++++++++---- drivers/net/dsa/mv88e6131.c | 19 ++++++++++++++----- drivers/net/dsa/mv88e6171.c | 19 ++++++++++++++----- drivers/net/dsa/mv88e6352.c | 27 ++++++++++++++++++++------- drivers/net/dsa/mv88e6xxx.c | 21 ++++++++++++--------- drivers/net/dsa/mv88e6xxx.h | 28 +++++++++++++++++++++++----- 6 files changed, 94 insertions(+), 35 deletions(-) diff --git a/drivers/net/dsa/mv88e6123.c b/drivers/net/dsa/mv88e6123.c index 00c1121..9120fcf 100644 --- a/drivers/net/dsa/mv88e6123.c +++ b/drivers/net/dsa/mv88e6123.c @@ -17,10 +17,17 @@ #include #include "mv88e6xxx.h" -static const struct mv88e6xxx_switch_id mv88e6123_table[] = { - { PORT_SWITCH_ID_6123, "Marvell 88E6123" }, - { PORT_SWITCH_ID_6161, "Marvell 88E6161" }, - { PORT_SWITCH_ID_6165, "Marvell 88E6165" }, +static const struct mv88e6xxx_info mv88e6123_table[] = { + { + .prod_num = PORT_SWITCH_ID_PROD_NUM_6123, + .name = "Marvell 88E6123", + }, { + .prod_num = PORT_SWITCH_ID_PROD_NUM_6161, + .name = "Marvell 88E6161", + }, { + .prod_num = PORT_SWITCH_ID_PROD_NUM_6165, + .name = "Marvell 88E6165", + } }; static char *mv88e6123_drv_probe(struct device *dsa_dev, diff --git a/drivers/net/dsa/mv88e6131.c b/drivers/net/dsa/mv88e6131.c index df534da..82ff0c4 100644 --- a/drivers/net/dsa/mv88e6131.c +++ b/drivers/net/dsa/mv88e6131.c @@ -17,11 +17,20 @@ #include #include "mv88e6xxx.h" -static const struct mv88e6xxx_switch_id mv88e6131_table[] = { - { PORT_SWITCH_ID_6085, "Marvell 88E6085" }, - { PORT_SWITCH_ID_6095, "Marvell 88E6095/88E6095F" }, - { PORT_SWITCH_ID_6131, "Marvell 88E6131" }, - { PORT_SWITCH_ID_6185, "Marvell 88E6185" }, +static const struct mv88e6xxx_info mv88e6131_table[] = { + { + .prod_num = PORT_SWITCH_ID_PROD_NUM_6095, + .name = "Marvell 88E6095/88E6095F", + }, { + .prod_num = PORT_SWITCH_ID_PROD_NUM_6085, + .name = "Marvell 88E6085", + }, { + .prod_num = PORT_SWITCH_ID_PROD_NUM_6131, + .name = "Marvell 88E6131", + }, { + .prod_num = PORT_SWITCH_ID_PROD_NUM_6185, + .name = "Marvell 88E6185", + } }; static char *mv88e6131_drv_probe(struct device *dsa_dev, diff --git a/drivers/net/dsa/mv88e6171.c b/drivers/net/dsa/mv88e6171.c index 40222b0..5e9eb8c 100644 --- a/drivers/net/dsa/mv88e6171.c +++ b/drivers/net/dsa/mv88e6171.c @@ -17,11 +17,20 @@ #include #include "mv88e6xxx.h" -static const struct mv88e6xxx_switch_id mv88e6171_table[] = { - { PORT_SWITCH_ID_6171, "Marvell 88E6171" }, - { PORT_SWITCH_ID_6175, "Marvell 88E6175" }, - { PORT_SWITCH_ID_6350, "Marvell 88E6350" }, - { PORT_SWITCH_ID_6351, "Marvell 88E6351" }, +static const struct mv88e6xxx_info mv88e6171_table[] = { + { + .prod_num = PORT_SWITCH_ID_PROD_NUM_6171, + .name = "Marvell 88E6171", + }, { + .prod_num = PORT_SWITCH_ID_PROD_NUM_6175, + .name = "Marvell 88E6175", + }, { + .prod_num = PORT_SWITCH_ID_PROD_NUM_6350, + .name = "Marvell 88E6350", + }, { + .prod_num = PORT_SWITCH_ID_PROD_NUM_6351, + .name = "Marvell 88E6351", + } }; static char *mv88e6171_drv_probe(struct device *dsa_dev, diff --git a/drivers/net/dsa/mv88e6352.c b/drivers/net/dsa/mv88e6352.c index 30fc5f6..3a53cfb 100644 --- a/drivers/net/dsa/mv88e6352.c +++ b/drivers/net/dsa/mv88e6352.c @@ -22,13 +22,26 @@ #include #include "mv88e6xxx.h" -static const struct mv88e6xxx_switch_id mv88e6352_table[] = { - { PORT_SWITCH_ID_6172, "Marvell 88E6172" }, - { PORT_SWITCH_ID_6176, "Marvell 88E6176" }, - { PORT_SWITCH_ID_6240, "Marvell 88E6240" }, - { PORT_SWITCH_ID_6320, "Marvell 88E6320" }, - { PORT_SWITCH_ID_6321, "Marvell 88E6321" }, - { PORT_SWITCH_ID_6352, "Marvell 88E6352" }, +static const struct mv88e6xxx_info mv88e6352_table[] = { + { + .prod_num = PORT_SWITCH_ID_PROD_NUM_6320, + .name = "Marvell 88E6320", + }, { + .prod_num = PORT_SWITCH_ID_PROD_NUM_6321, + .name = "Marvell 88E6321", + }, { + .prod_num = PORT_SWITCH_ID_PROD_NUM_6172, + .name = "Marvell 88E6172", + }, { + .prod_num = PORT_SWITCH_ID_PROD_NUM_6176, + .name = "Marvell 88E6176", + }, { + .prod_num = PORT_SWITCH_ID_PROD_NUM_6240, + .name = "Marvell 88E6240", + }, { + .prod_num = PORT_SWITCH_ID_PROD_NUM_6352, + .name = "Marvell 88E6352", + } }; static char *mv88e6352_drv_probe(struct device *dsa_dev, diff --git a/drivers/net/dsa/mv88e6xxx.c b/drivers/net/dsa/mv88e6xxx.c index af5ae70..1f69b28 100644 --- a/drivers/net/dsa/mv88e6xxx.c +++ b/drivers/net/dsa/mv88e6xxx.c @@ -3066,24 +3066,24 @@ int mv88e6xxx_get_temp_alarm(struct dsa_switch *ds, bool *alarm) } #endif /* CONFIG_NET_DSA_HWMON */ -static char *mv88e6xxx_lookup_name(unsigned int id, - const struct mv88e6xxx_switch_id *table, - unsigned int num) +static const struct mv88e6xxx_info * +mv88e6xxx_lookup_info(unsigned int prod_num, const struct mv88e6xxx_info *table, + unsigned int num) { int i; for (i = 0; i < num; ++i) - if (table[i].id == (id & 0xfff0)) - return table[i].name; + if (table[i].prod_num == prod_num) + return &table[i]; return NULL; } char *mv88e6xxx_drv_probe(struct device *dsa_dev, struct device *host_dev, int sw_addr, void **priv, - const struct mv88e6xxx_switch_id *table, - unsigned int num) + const struct mv88e6xxx_info *table, unsigned int num) { + const struct mv88e6xxx_info *info; struct mv88e6xxx_priv_state *ps; struct mii_bus *bus; int id, prod_num, rev; @@ -3100,16 +3100,19 @@ char *mv88e6xxx_drv_probe(struct device *dsa_dev, struct device *host_dev, prod_num = (id & 0xfff0) >> 4; rev = id & 0x000f; - name = mv88e6xxx_lookup_name(id, table, num); - if (!name) + info = mv88e6xxx_lookup_info(prod_num, table, num); + if (!info) return NULL; + name = (char *) info->name; + ps = devm_kzalloc(dsa_dev, sizeof(*ps), GFP_KERNEL); if (!ps) return NULL; ps->bus = bus; ps->sw_addr = sw_addr; + ps->info = info; ps->id = id & 0xfff0; *priv = ps; diff --git a/drivers/net/dsa/mv88e6xxx.h b/drivers/net/dsa/mv88e6xxx.h index 9242aea..52c7e03 100644 --- a/drivers/net/dsa/mv88e6xxx.h +++ b/drivers/net/dsa/mv88e6xxx.h @@ -68,6 +68,23 @@ #define PORT_PCS_CTRL_UNFORCED 0x03 #define PORT_PAUSE_CTRL 0x02 #define PORT_SWITCH_ID 0x03 +#define PORT_SWITCH_ID_PROD_NUM_6085 0x04a +#define PORT_SWITCH_ID_PROD_NUM_6095 0x095 +#define PORT_SWITCH_ID_PROD_NUM_6131 0x106 +#define PORT_SWITCH_ID_PROD_NUM_6320 0x115 +#define PORT_SWITCH_ID_PROD_NUM_6123 0x121 +#define PORT_SWITCH_ID_PROD_NUM_6161 0x161 +#define PORT_SWITCH_ID_PROD_NUM_6165 0x165 +#define PORT_SWITCH_ID_PROD_NUM_6171 0x171 +#define PORT_SWITCH_ID_PROD_NUM_6172 0x172 +#define PORT_SWITCH_ID_PROD_NUM_6175 0x175 +#define PORT_SWITCH_ID_PROD_NUM_6176 0x176 +#define PORT_SWITCH_ID_PROD_NUM_6185 0x1a7 +#define PORT_SWITCH_ID_PROD_NUM_6240 0x240 +#define PORT_SWITCH_ID_PROD_NUM_6321 0x310 +#define PORT_SWITCH_ID_PROD_NUM_6352 0x352 +#define PORT_SWITCH_ID_PROD_NUM_6350 0x371 +#define PORT_SWITCH_ID_PROD_NUM_6351 0x375 #define PORT_SWITCH_ID_6031 0x0310 #define PORT_SWITCH_ID_6035 0x0350 #define PORT_SWITCH_ID_6046 0x0480 @@ -352,9 +369,9 @@ #define MV88E6XXX_N_FID 4096 -struct mv88e6xxx_switch_id { - u16 id; - char *name; +struct mv88e6xxx_info { + u16 prod_num; + const char *name; }; struct mv88e6xxx_atu_entry { @@ -382,6 +399,8 @@ struct mv88e6xxx_priv_port { }; struct mv88e6xxx_priv_state { + const struct mv88e6xxx_info *info; + /* The dsa_switch this private structure is related to */ struct dsa_switch *ds; @@ -449,8 +468,7 @@ struct mv88e6xxx_hw_stat { int mv88e6xxx_switch_reset(struct dsa_switch *ds, bool ppu_active); char *mv88e6xxx_drv_probe(struct device *dsa_dev, struct device *host_dev, int sw_addr, void **priv, - const struct mv88e6xxx_switch_id *table, - unsigned int num); + const struct mv88e6xxx_info *table, unsigned int num); int mv88e6xxx_setup_ports(struct dsa_switch *ds); int mv88e6xxx_setup_common(struct dsa_switch *ds); -- 2.8.0