realtek: Fix reset register access
authorBirger Koblitz <git@birger-koblitz.de>
Thu, 12 May 2022 18:40:45 +0000 (20:40 +0200)
committerSander Vanheule <sander@svanheule.net>
Wed, 28 Dec 2022 15:53:56 +0000 (16:53 +0100)
The reset register on RTL93xx not merely have bits to execute
a reset of a hardware component, but also configuration bits for
reset procedures. Keep them during executing a reset.

Signed-off-by: Birger Koblitz <git@birger-koblitz.de>
Signed-off-by: Olliver Schinagl <oliver@schinagl.nl>
[backport to 5.10 kernel]
Signed-off-by: Sander Vanheule <sander@svanheule.net>
target/linux/realtek/files-5.10/drivers/net/ethernet/rtl838x_eth.c
target/linux/realtek/files-5.15/drivers/net/ethernet/rtl838x_eth.c

index 32de5cc5549c9635d313cdbf2f365867e0d06228..16a846c8d7f3e72cf2f938f85e502e9098bc3563 100644 (file)
@@ -682,7 +682,7 @@ static void rtl838x_hw_reset(struct rtl838x_eth_priv *priv)
        else
                reset_mask = 0xc;
 
-       sw_w32(reset_mask, priv->r->rst_glb_ctrl);
+       sw_w32_mask(0, reset_mask, priv->r->rst_glb_ctrl);
 
        do { /* Wait for reset of NIC and Queues done */
                udelay(20);
index 1c473cc7f3f31d1e7831da04c30175ad6df9b3ef..857d389f12dbf2045d24b4d51a4d7ce08b683467 100644 (file)
@@ -675,7 +675,7 @@ static void rtl838x_hw_reset(struct rtl838x_eth_priv *priv)
        else
                reset_mask = 0xc;
 
-       sw_w32(reset_mask, priv->r->rst_glb_ctrl);
+       sw_w32_mask(0, reset_mask, priv->r->rst_glb_ctrl);
 
        do { /* Wait for reset of NIC and Queues done */
                udelay(20);