Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f6271e67 authored by Vivien Didelot's avatar Vivien Didelot Committed by David S. Miller
Browse files

net: dsa: mv88e6xxx: add switch info



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: default avatarVivien Didelot <vivien.didelot@savoirfairelinux.com>
Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent a439c061
Loading
Loading
Loading
Loading
+11 −4
Original line number Diff line number Diff line
@@ -17,10 +17,17 @@
#include <net/dsa.h>
#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 const char *mv88e6123_drv_probe(struct device *dsa_dev,
+14 −5
Original line number Diff line number Diff line
@@ -17,11 +17,20 @@
#include <net/dsa.h>
#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 const char *mv88e6131_drv_probe(struct device *dsa_dev,
+14 −5
Original line number Diff line number Diff line
@@ -17,11 +17,20 @@
#include <net/dsa.h>
#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 const char *mv88e6171_drv_probe(struct device *dsa_dev,
+20 −7
Original line number Diff line number Diff line
@@ -22,13 +22,26 @@
#include <net/dsa.h>
#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 const char *mv88e6352_drv_probe(struct device *dsa_dev,
+11 −7
Original line number Diff line number Diff line
@@ -3169,24 +3169,25 @@ int mv88e6xxx_get_temp_alarm(struct dsa_switch *ds, bool *alarm)
}
#endif /* CONFIG_NET_DSA_HWMON */

static const char *
mv88e6xxx_lookup_name(unsigned int id, const struct mv88e6xxx_switch_id *table,
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;
}

const char *mv88e6xxx_drv_probe(struct device *dsa_dev, struct device *host_dev,
				int sw_addr, void **priv,
				const struct mv88e6xxx_switch_id *table,
				const struct mv88e6xxx_info *table,
				unsigned int num)
{
	const struct mv88e6xxx_info *info;
	struct mv88e6xxx_priv_state *ps;
	struct mii_bus *bus;
	const char *name;
@@ -3203,16 +3204,19 @@ const 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 = 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;
Loading