From: "Marek Behún" <marek.behun@nic.cz>
To: netdev@vger.kernel.org
Cc: "Andrew Lunn" <andrew@lunn.ch>,
"Vivien Didelot" <vivien.didelot@gmail.com>,
"Florian Fainelli" <f.fainelli@gmail.com>,
"Vladimir Oltean" <olteanv@gmail.com>,
"Marek Behún" <marek.behun@nic.cz>
Subject: [PATCH net-next 09/10] net: dsa: mv88e6xxx: support Block Address setting in hidden registers
Date: Thu, 22 Aug 2019 01:27:23 +0200 [thread overview]
Message-ID: <20190821232724.1544-10-marek.behun@nic.cz> (raw)
In-Reply-To: <20190821232724.1544-1-marek.behun@nic.cz>
Add support for setting the Block Address parameter when reading/writing
hidden registers. Marvell's mdio examples for SERDES settings on Topaz
use Block Address 0x7 when reading/writing hidden registers, although
the specification says that block must be set to 0xf.
Signed-off-by: Marek Behún <marek.behun@nic.cz>
---
drivers/net/dsa/mv88e6xxx/chip.c | 4 ++--
drivers/net/dsa/mv88e6xxx/hidden.c | 8 ++++----
drivers/net/dsa/mv88e6xxx/hidden.h | 8 +++++---
3 files changed, 11 insertions(+), 9 deletions(-)
diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
index 96f7ac56dd02..9af6f3aeb83b 100644
--- a/drivers/net/dsa/mv88e6xxx/chip.c
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
@@ -2326,7 +2326,7 @@ static bool mv88e6390_setup_errata_applied(struct mv88e6xxx_chip *chip)
u16 val;
for (port = 0; port < mv88e6xxx_num_ports(chip); port++) {
- err = mv88e6390_hidden_read(chip, port, 0, &val);
+ err = mv88e6390_hidden_read(chip, 0xf, port, 0, &val);
if (err) {
dev_err(chip->dev,
"Error reading hidden register: %d\n", err);
@@ -2359,7 +2359,7 @@ static int mv88e6390_setup_errata(struct mv88e6xxx_chip *chip)
}
for (port = 0; port < mv88e6xxx_num_ports(chip); port++) {
- err = mv88e6390_hidden_write(chip, port, 0, 0x01c0);
+ err = mv88e6390_hidden_write(chip, 0xf, port, 0, 0x01c0);
if (err)
return err;
}
diff --git a/drivers/net/dsa/mv88e6xxx/hidden.c b/drivers/net/dsa/mv88e6xxx/hidden.c
index efa93c776a30..d071c8810057 100644
--- a/drivers/net/dsa/mv88e6xxx/hidden.c
+++ b/drivers/net/dsa/mv88e6xxx/hidden.c
@@ -16,7 +16,7 @@
/* The mv88e6390 and mv88e6341 have some hidden registers used for debug and
* development. The errata also makes use of them.
*/
-int mv88e6390_hidden_write(struct mv88e6xxx_chip *chip, int port,
+int mv88e6390_hidden_write(struct mv88e6xxx_chip *chip, int block, int port,
int reg, u16 val)
{
u16 ctrl;
@@ -29,7 +29,7 @@ int mv88e6390_hidden_write(struct mv88e6xxx_chip *chip, int port,
ctrl = MV88E6XXX_PORT_RESERVED_1A_BUSY |
MV88E6XXX_PORT_RESERVED_1A_WRITE |
- MV88E6XXX_PORT_RESERVED_1A_BLOCK |
+ (block << MV88E6XXX_PORT_RESERVED_1A_BLOCK_SHIFT) |
port << MV88E6XXX_PORT_RESERVED_1A_PORT_SHIFT | reg;
return mv88e6xxx_port_write(chip, MV88E6XXX_PORT_RESERVED_1A_CTRL_PORT,
@@ -44,7 +44,7 @@ int mv88e6390_hidden_wait(struct mv88e6xxx_chip *chip)
MV88E6XXX_PORT_RESERVED_1A, bit, 0);
}
-int mv88e6390_hidden_read(struct mv88e6xxx_chip *chip, int port,
+int mv88e6390_hidden_read(struct mv88e6xxx_chip *chip, int block, int port,
int reg, u16 *val)
{
u16 ctrl;
@@ -52,7 +52,7 @@ int mv88e6390_hidden_read(struct mv88e6xxx_chip *chip, int port,
ctrl = MV88E6XXX_PORT_RESERVED_1A_BUSY |
MV88E6XXX_PORT_RESERVED_1A_READ |
- MV88E6XXX_PORT_RESERVED_1A_BLOCK |
+ (block << MV88E6XXX_PORT_RESERVED_1A_BLOCK_SHIFT) |
port << MV88E6XXX_PORT_RESERVED_1A_PORT_SHIFT | reg;
err = mv88e6xxx_port_write(chip, MV88E6XXX_PORT_RESERVED_1A_CTRL_PORT,
diff --git a/drivers/net/dsa/mv88e6xxx/hidden.h b/drivers/net/dsa/mv88e6xxx/hidden.h
index 632abbe4e139..71cc2f78fa30 100644
--- a/drivers/net/dsa/mv88e6xxx/hidden.h
+++ b/drivers/net/dsa/mv88e6xxx/hidden.h
@@ -18,14 +18,16 @@
#define MV88E6XXX_PORT_RESERVED_1A_WRITE BIT(14)
#define MV88E6XXX_PORT_RESERVED_1A_READ 0
#define MV88E6XXX_PORT_RESERVED_1A_PORT_SHIFT 5
-#define MV88E6XXX_PORT_RESERVED_1A_BLOCK (0xf << 10)
+#define MV88E6XXX_PORT_RESERVED_1A_BLOCK_SHIFT 10
#define MV88E6XXX_PORT_RESERVED_1A_CTRL_PORT 4
#define MV88E6XXX_PORT_RESERVED_1A_DATA_PORT 5
+#define MV88E6341_PORT_RESERVED_1A_FORCE_CMODE BIT(15)
+#define MV88E6341_PORT_RESERVED_1A_SGMII_AN BIT(13)
-int mv88e6390_hidden_write(struct mv88e6xxx_chip *chip, int port,
+int mv88e6390_hidden_write(struct mv88e6xxx_chip *chip, int block, int port,
int reg, u16 val);
int mv88e6390_hidden_wait(struct mv88e6xxx_chip *chip);
-int mv88e6390_hidden_read(struct mv88e6xxx_chip *chip, int port,
+int mv88e6390_hidden_read(struct mv88e6xxx_chip *chip, int block, int port,
int reg, u16 *val);
#endif /* _MV88E6XXX_HIDDEN_H */
--
2.21.0
next prev parent reply other threads:[~2019-08-21 23:27 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-08-21 23:27 [PATCH net-next 00/10] net: dsa: mv88e6xxx: Peridot/Topaz SERDES changes Marek Behún
2019-08-21 23:27 ` [PATCH net-next 01/10] net: dsa: mv88e6xxx: support 2500base-x in SGMII IRQ handler Marek Behún
2019-08-22 3:25 ` David Miller
2019-08-22 3:33 ` Marek Behún
2019-08-21 23:27 ` [PATCH net-next 02/10] net: dsa: mv88e6xxx: remove extra newline Marek Behún
2019-08-22 12:55 ` Andrew Lunn
2019-08-21 23:27 ` [PATCH net-next 03/10] net: dsa: mv88e6xxx: move hidden registers operations in own file Marek Behún
2019-08-22 13:04 ` Andrew Lunn
2019-08-22 13:10 ` Andrew Lunn
2019-08-22 17:21 ` Vivien Didelot
2019-08-21 23:27 ` [PATCH net-next 04/10] net: dsa: mv88e6xxx: prefix hidden register macro names with MV88E6XXX_ Marek Behún
2019-08-22 13:12 ` Andrew Lunn
2019-08-21 23:27 ` [PATCH net-next 05/10] net: dsa: mv88e6xxx: create chip->info->ops->serdes_get_lane method Marek Behún
2019-08-23 1:39 ` Andrew Lunn
2019-08-21 23:27 ` [PATCH net-next 06/10] net: dsa: mv88e6xxx: add serdes_get_lane method for Topaz family Marek Behún
2019-08-23 1:40 ` Andrew Lunn
2019-08-21 23:27 ` [PATCH net-next 07/10] net: dsa: mv88e6xxx: rename port cmode macro Marek Behún
2019-08-23 1:41 ` Andrew Lunn
2019-08-21 23:27 ` [PATCH net-next 08/10] net: dsa: mv88e6xxx: simplify SERDES code for Topaz and Peridot Marek Behún
2019-08-22 3:26 ` David Miller
2019-08-21 23:27 ` Marek Behún [this message]
2019-08-21 23:27 ` [PATCH net-next 10/10] net: dsa: mv88e6xxx: fully support SERDES on Topaz family Marek Behún
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190821232724.1544-10-marek.behun@nic.cz \
--to=marek.behun@nic.cz \
--cc=andrew@lunn.ch \
--cc=f.fainelli@gmail.com \
--cc=netdev@vger.kernel.org \
--cc=olteanv@gmail.com \
--cc=vivien.didelot@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).