aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/dsa
diff options
context:
space:
mode:
authorVivien Didelot <vivien.didelot@savoirfairelinux.com>2016-06-20 13:14:10 -0400
committerDavid S. Miller <davem@davemloft.net>2016-06-21 03:58:30 -0400
commit9dddd478d4883deb1f5b6d3fcea681c9c9e90708 (patch)
tree1a9af6d9f5796e3169d5941a08f7db16f6eb8e63 /drivers/net/dsa
parentcaac8545c861f2e78ae2565de31b573739b4034b (diff)
net: dsa: mv88e6xxx: add port base address to info
The switch ID is located at address 0x3 of every Port Registers bank. But not all Marvell switches have their Port Registers SMI Addresses starting at 0x10. 88E6060 starts at 0x8 and 88E6390 starts at 0x0. Add this data in the info structure and use it in the detection code. Signed-off-by: Vivien Didelot <vivien.didelot@savoirfairelinux.com> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/dsa')
-rw-r--r--drivers/net/dsa/mv88e6xxx.c19
-rw-r--r--drivers/net/dsa/mv88e6xxx.h1
2 files changed, 19 insertions, 1 deletions
diff --git a/drivers/net/dsa/mv88e6xxx.c b/drivers/net/dsa/mv88e6xxx.c
index cadd1e388836..789f938a7f36 100644
--- a/drivers/net/dsa/mv88e6xxx.c
+++ b/drivers/net/dsa/mv88e6xxx.c
@@ -3443,6 +3443,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
3443 .name = "Marvell 88E6085", 3443 .name = "Marvell 88E6085",
3444 .num_databases = 4096, 3444 .num_databases = 4096,
3445 .num_ports = 10, 3445 .num_ports = 10,
3446 .port_base_addr = 0x10,
3446 .flags = MV88E6XXX_FLAGS_FAMILY_6097, 3447 .flags = MV88E6XXX_FLAGS_FAMILY_6097,
3447 }, 3448 },
3448 3449
@@ -3452,6 +3453,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
3452 .name = "Marvell 88E6095/88E6095F", 3453 .name = "Marvell 88E6095/88E6095F",
3453 .num_databases = 256, 3454 .num_databases = 256,
3454 .num_ports = 11, 3455 .num_ports = 11,
3456 .port_base_addr = 0x10,
3455 .flags = MV88E6XXX_FLAGS_FAMILY_6095, 3457 .flags = MV88E6XXX_FLAGS_FAMILY_6095,
3456 }, 3458 },
3457 3459
@@ -3461,6 +3463,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
3461 .name = "Marvell 88E6123", 3463 .name = "Marvell 88E6123",
3462 .num_databases = 4096, 3464 .num_databases = 4096,
3463 .num_ports = 3, 3465 .num_ports = 3,
3466 .port_base_addr = 0x10,
3464 .flags = MV88E6XXX_FLAGS_FAMILY_6165, 3467 .flags = MV88E6XXX_FLAGS_FAMILY_6165,
3465 }, 3468 },
3466 3469
@@ -3470,6 +3473,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
3470 .name = "Marvell 88E6131", 3473 .name = "Marvell 88E6131",
3471 .num_databases = 256, 3474 .num_databases = 256,
3472 .num_ports = 8, 3475 .num_ports = 8,
3476 .port_base_addr = 0x10,
3473 .flags = MV88E6XXX_FLAGS_FAMILY_6185, 3477 .flags = MV88E6XXX_FLAGS_FAMILY_6185,
3474 }, 3478 },
3475 3479
@@ -3479,6 +3483,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
3479 .name = "Marvell 88E6161", 3483 .name = "Marvell 88E6161",
3480 .num_databases = 4096, 3484 .num_databases = 4096,
3481 .num_ports = 6, 3485 .num_ports = 6,
3486 .port_base_addr = 0x10,
3482 .flags = MV88E6XXX_FLAGS_FAMILY_6165, 3487 .flags = MV88E6XXX_FLAGS_FAMILY_6165,
3483 }, 3488 },
3484 3489
@@ -3488,6 +3493,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
3488 .name = "Marvell 88E6165", 3493 .name = "Marvell 88E6165",
3489 .num_databases = 4096, 3494 .num_databases = 4096,
3490 .num_ports = 6, 3495 .num_ports = 6,
3496 .port_base_addr = 0x10,
3491 .flags = MV88E6XXX_FLAGS_FAMILY_6165, 3497 .flags = MV88E6XXX_FLAGS_FAMILY_6165,
3492 }, 3498 },
3493 3499
@@ -3497,6 +3503,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
3497 .name = "Marvell 88E6171", 3503 .name = "Marvell 88E6171",
3498 .num_databases = 4096, 3504 .num_databases = 4096,
3499 .num_ports = 7, 3505 .num_ports = 7,
3506 .port_base_addr = 0x10,
3500 .flags = MV88E6XXX_FLAGS_FAMILY_6351, 3507 .flags = MV88E6XXX_FLAGS_FAMILY_6351,
3501 }, 3508 },
3502 3509
@@ -3506,6 +3513,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
3506 .name = "Marvell 88E6172", 3513 .name = "Marvell 88E6172",
3507 .num_databases = 4096, 3514 .num_databases = 4096,
3508 .num_ports = 7, 3515 .num_ports = 7,
3516 .port_base_addr = 0x10,
3509 .flags = MV88E6XXX_FLAGS_FAMILY_6352, 3517 .flags = MV88E6XXX_FLAGS_FAMILY_6352,
3510 }, 3518 },
3511 3519
@@ -3515,6 +3523,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
3515 .name = "Marvell 88E6175", 3523 .name = "Marvell 88E6175",
3516 .num_databases = 4096, 3524 .num_databases = 4096,
3517 .num_ports = 7, 3525 .num_ports = 7,
3526 .port_base_addr = 0x10,
3518 .flags = MV88E6XXX_FLAGS_FAMILY_6351, 3527 .flags = MV88E6XXX_FLAGS_FAMILY_6351,
3519 }, 3528 },
3520 3529
@@ -3524,6 +3533,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
3524 .name = "Marvell 88E6176", 3533 .name = "Marvell 88E6176",
3525 .num_databases = 4096, 3534 .num_databases = 4096,
3526 .num_ports = 7, 3535 .num_ports = 7,
3536 .port_base_addr = 0x10,
3527 .flags = MV88E6XXX_FLAGS_FAMILY_6352, 3537 .flags = MV88E6XXX_FLAGS_FAMILY_6352,
3528 }, 3538 },
3529 3539
@@ -3533,6 +3543,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
3533 .name = "Marvell 88E6185", 3543 .name = "Marvell 88E6185",
3534 .num_databases = 256, 3544 .num_databases = 256,
3535 .num_ports = 10, 3545 .num_ports = 10,
3546 .port_base_addr = 0x10,
3536 .flags = MV88E6XXX_FLAGS_FAMILY_6185, 3547 .flags = MV88E6XXX_FLAGS_FAMILY_6185,
3537 }, 3548 },
3538 3549
@@ -3542,6 +3553,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
3542 .name = "Marvell 88E6240", 3553 .name = "Marvell 88E6240",
3543 .num_databases = 4096, 3554 .num_databases = 4096,
3544 .num_ports = 7, 3555 .num_ports = 7,
3556 .port_base_addr = 0x10,
3545 .flags = MV88E6XXX_FLAGS_FAMILY_6352, 3557 .flags = MV88E6XXX_FLAGS_FAMILY_6352,
3546 }, 3558 },
3547 3559
@@ -3551,6 +3563,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
3551 .name = "Marvell 88E6320", 3563 .name = "Marvell 88E6320",
3552 .num_databases = 4096, 3564 .num_databases = 4096,
3553 .num_ports = 7, 3565 .num_ports = 7,
3566 .port_base_addr = 0x10,
3554 .flags = MV88E6XXX_FLAGS_FAMILY_6320, 3567 .flags = MV88E6XXX_FLAGS_FAMILY_6320,
3555 }, 3568 },
3556 3569
@@ -3560,6 +3573,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
3560 .name = "Marvell 88E6321", 3573 .name = "Marvell 88E6321",
3561 .num_databases = 4096, 3574 .num_databases = 4096,
3562 .num_ports = 7, 3575 .num_ports = 7,
3576 .port_base_addr = 0x10,
3563 .flags = MV88E6XXX_FLAGS_FAMILY_6320, 3577 .flags = MV88E6XXX_FLAGS_FAMILY_6320,
3564 }, 3578 },
3565 3579
@@ -3569,6 +3583,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
3569 .name = "Marvell 88E6350", 3583 .name = "Marvell 88E6350",
3570 .num_databases = 4096, 3584 .num_databases = 4096,
3571 .num_ports = 7, 3585 .num_ports = 7,
3586 .port_base_addr = 0x10,
3572 .flags = MV88E6XXX_FLAGS_FAMILY_6351, 3587 .flags = MV88E6XXX_FLAGS_FAMILY_6351,
3573 }, 3588 },
3574 3589
@@ -3578,6 +3593,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
3578 .name = "Marvell 88E6351", 3593 .name = "Marvell 88E6351",
3579 .num_databases = 4096, 3594 .num_databases = 4096,
3580 .num_ports = 7, 3595 .num_ports = 7,
3596 .port_base_addr = 0x10,
3581 .flags = MV88E6XXX_FLAGS_FAMILY_6351, 3597 .flags = MV88E6XXX_FLAGS_FAMILY_6351,
3582 }, 3598 },
3583 3599
@@ -3587,6 +3603,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
3587 .name = "Marvell 88E6352", 3603 .name = "Marvell 88E6352",
3588 .num_databases = 4096, 3604 .num_databases = 4096,
3589 .num_ports = 7, 3605 .num_ports = 7,
3606 .port_base_addr = 0x10,
3590 .flags = MV88E6XXX_FLAGS_FAMILY_6352, 3607 .flags = MV88E6XXX_FLAGS_FAMILY_6352,
3591 }, 3608 },
3592}; 3609};
@@ -3607,7 +3624,7 @@ static int mv88e6xxx_detect(struct mv88e6xxx_priv_state *ps)
3607 const struct mv88e6xxx_info *info; 3624 const struct mv88e6xxx_info *info;
3608 int id, prod_num, rev; 3625 int id, prod_num, rev;
3609 3626
3610 id = mv88e6xxx_reg_read(ps, REG_PORT(0), PORT_SWITCH_ID); 3627 id = mv88e6xxx_reg_read(ps, ps->info->port_base_addr, PORT_SWITCH_ID);
3611 if (id < 0) 3628 if (id < 0)
3612 return id; 3629 return id;
3613 3630
diff --git a/drivers/net/dsa/mv88e6xxx.h b/drivers/net/dsa/mv88e6xxx.h
index b279f8c3a803..8e6fe6b7fce3 100644
--- a/drivers/net/dsa/mv88e6xxx.h
+++ b/drivers/net/dsa/mv88e6xxx.h
@@ -519,6 +519,7 @@ struct mv88e6xxx_info {
519 const char *name; 519 const char *name;
520 unsigned int num_databases; 520 unsigned int num_databases;
521 unsigned int num_ports; 521 unsigned int num_ports;
522 unsigned int port_base_addr;
522 unsigned long flags; 523 unsigned long flags;
523}; 524};
524 525