mvsw61xx: rework chip recognition
Recognizes 88E6171/6172/6176 at the moment. Signed-off-by: Claudio Leite <leitec@staticky.com> SVN-Revision: 43936
This commit is contained in:
parent
a1872182bb
commit
1e39f3aef8
2 changed files with 31 additions and 10 deletions
|
@ -740,8 +740,8 @@ static int mvsw61xx_probe(struct platform_device *pdev)
|
||||||
struct mvsw61xx_state *state;
|
struct mvsw61xx_state *state;
|
||||||
struct device_node *np = pdev->dev.of_node;
|
struct device_node *np = pdev->dev.of_node;
|
||||||
struct device_node *mdio;
|
struct device_node *mdio;
|
||||||
|
char *model_str;
|
||||||
u32 val;
|
u32 val;
|
||||||
u16 reg;
|
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
state = kzalloc(sizeof(*state), GFP_KERNEL);
|
state = kzalloc(sizeof(*state), GFP_KERNEL);
|
||||||
|
@ -776,17 +776,28 @@ static int mvsw61xx_probe(struct platform_device *pdev)
|
||||||
state->base_addr = MV_BASE;
|
state->base_addr = MV_BASE;
|
||||||
}
|
}
|
||||||
|
|
||||||
reg = r16(state->bus, state->is_indirect, state->base_addr,
|
state->model = r16(state->bus, state->is_indirect, state->base_addr,
|
||||||
MV_PORTREG(IDENT, 0)) & MV_IDENT_MASK;
|
MV_PORTREG(IDENT, 0)) & MV_IDENT_MASK;
|
||||||
if (reg != MV_IDENT_VALUE) {
|
|
||||||
dev_err(&pdev->dev, "No switch found at 0x%02x\n",
|
switch(state->model) {
|
||||||
|
case MV_IDENT_VALUE_6171:
|
||||||
|
model_str = MV_IDENT_STR_6171;
|
||||||
|
break;
|
||||||
|
case MV_IDENT_VALUE_6172:
|
||||||
|
model_str = MV_IDENT_STR_6172;
|
||||||
|
break;
|
||||||
|
case MV_IDENT_VALUE_6176:
|
||||||
|
model_str = MV_IDENT_STR_6176;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
dev_err(&pdev->dev, "No compatible switch found at 0x%02x\n",
|
||||||
state->base_addr);
|
state->base_addr);
|
||||||
err = -ENODEV;
|
err = -ENODEV;
|
||||||
goto out_err;
|
goto out_err;
|
||||||
}
|
}
|
||||||
|
|
||||||
platform_set_drvdata(pdev, state);
|
platform_set_drvdata(pdev, state);
|
||||||
dev_info(&pdev->dev, "Found %s at %s:%02x\n", MV_IDENT_STR,
|
dev_info(&pdev->dev, "Found %s at %s:%02x\n", model_str,
|
||||||
state->bus->id, state->base_addr);
|
state->bus->id, state->base_addr);
|
||||||
|
|
||||||
dev_info(&pdev->dev, "Using %sdirect addressing\n",
|
dev_info(&pdev->dev, "Using %sdirect addressing\n",
|
||||||
|
@ -808,7 +819,7 @@ static int mvsw61xx_probe(struct platform_device *pdev)
|
||||||
state->dev.vlans = MV_VLANS;
|
state->dev.vlans = MV_VLANS;
|
||||||
state->dev.cpu_port = state->cpu_port0;
|
state->dev.cpu_port = state->cpu_port0;
|
||||||
state->dev.ports = MV_PORTS;
|
state->dev.ports = MV_PORTS;
|
||||||
state->dev.name = MV_IDENT_STR;
|
state->dev.name = model_str;
|
||||||
state->dev.ops = &mvsw61xx_ops;
|
state->dev.ops = &mvsw61xx_ops;
|
||||||
state->dev.alias = dev_name(&pdev->dev);
|
state->dev.alias = dev_name(&pdev->dev);
|
||||||
|
|
||||||
|
@ -839,6 +850,8 @@ mvsw61xx_remove(struct platform_device *pdev)
|
||||||
|
|
||||||
static const struct of_device_id mvsw61xx_match[] = {
|
static const struct of_device_id mvsw61xx_match[] = {
|
||||||
{ .compatible = "marvell,88e6171" },
|
{ .compatible = "marvell,88e6171" },
|
||||||
|
{ .compatible = "marvell,88e6172" },
|
||||||
|
{ .compatible = "marvell,88e6176" },
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
MODULE_DEVICE_TABLE(of, mvsw61xx_match);
|
MODULE_DEVICE_TABLE(of, mvsw61xx_match);
|
||||||
|
|
|
@ -190,9 +190,16 @@ enum {
|
||||||
};
|
};
|
||||||
#define MV_INDIRECT_ADDR_S 5
|
#define MV_INDIRECT_ADDR_S 5
|
||||||
|
|
||||||
#define MV_IDENT_MASK 0xffc0
|
#define MV_IDENT_MASK 0xfff0
|
||||||
#define MV_IDENT_VALUE 0x1700
|
|
||||||
#define MV_IDENT_STR "MV88E617x"
|
#define MV_IDENT_VALUE_6171 0x1710
|
||||||
|
#define MV_IDENT_STR_6171 "MV88E6171"
|
||||||
|
|
||||||
|
#define MV_IDENT_VALUE_6172 0x1720
|
||||||
|
#define MV_IDENT_STR_6172 "MV88E6172"
|
||||||
|
|
||||||
|
#define MV_IDENT_VALUE_6176 0x1760
|
||||||
|
#define MV_IDENT_STR_6176 "MV88E6176"
|
||||||
|
|
||||||
#define MV_PVID_MASK 0x0fff
|
#define MV_PVID_MASK 0x0fff
|
||||||
|
|
||||||
|
@ -200,6 +207,7 @@ struct mvsw61xx_state {
|
||||||
struct switch_dev dev;
|
struct switch_dev dev;
|
||||||
struct mii_bus *bus;
|
struct mii_bus *bus;
|
||||||
int base_addr;
|
int base_addr;
|
||||||
|
u16 model;
|
||||||
|
|
||||||
bool registered;
|
bool registered;
|
||||||
bool is_indirect;
|
bool is_indirect;
|
||||||
|
|
Loading…
Reference in a new issue