In macb_reset_hw, use read-modify-write to disable RX and TX.
This way exiting settings and reserved bits wont be disturbed.
Use the same method for clearing statistics as well.
Signed-off-by: Harini Katakam <redacted>
---
drivers/net/ethernet/cadence/macb.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
@@ -1743,15 +1743,18 @@ static void macb_init_rings(struct macb *bp)staticvoidmacb_reset_hw(structmacb*bp){structmacb_queue*queue;-unsignedintq;+unsignedintq,ctrl;/* Disable RX and TX (XXX: Should we halt the transmission*moregracefully?)*/-macb_writel(bp,NCR,0);+ctrl=macb_readl(bp,NCR);+ctrl&=~(MACB_BIT(RE)|MACB_BIT(TE));+macb_writel(bp,NCR,ctrl);/* Clear the stats registers (XXX: Update stats first?) */-macb_writel(bp,NCR,MACB_BIT(CLRSTAT));+ctrl|=MACB_BIT(CLRSTAT);+macb_writel(bp,NCR,ctrl);/* Clear all status flags */macb_writel(bp,TSR,-1);
From: Nicolas Ferre <hidden> Date: 2016-11-28 09:32:01
Le 28/11/2016 à 10:23, Harini Katakam a écrit :
In macb_reset_hw, use read-modify-write to disable RX and TX.
This way exiting settings and reserved bits wont be disturbed.
Yes, indeed... but I would have liked a line about how you discovered it
was an issue for you ; what did it break, etc...
quoted hunk
Use the same method for clearing statistics as well.
Signed-off-by: Harini Katakam <redacted>
---
drivers/net/ethernet/cadence/macb.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
Hi Nicolas,
On Mon, Nov 28, 2016 at 3:01 PM, Nicolas Ferre [off-list ref] wrote:
Le 28/11/2016 à 10:23, Harini Katakam a écrit :
quoted
In macb_reset_hw, use read-modify-write to disable RX and TX.
This way exiting settings and reserved bits wont be disturbed.
Yes, indeed... but I would have liked a line about how you discovered it
was an issue for you ; what did it break, etc...
Thanks for the review.
It did not necessarily break anything but we noticed
during some experiments that management port was being
enabled and disabled.
In addition, I thought it would be good to do
just because there were reserved read only bits in
the register.
quoted
Use the same method for clearing statistics as well.
Signed-off-by: Harini Katakam <redacted>
---
drivers/net/ethernet/cadence/macb.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
In macb_reset_hw, use read-modify-write to disable RX and TX.
This way exiting settings and reserved bits wont be disturbed.
Use the same method for clearing statistics as well.
Signed-off-by: Harini Katakam <redacted>
This doesn't make much sense to me.
Consider the two callers of this function.
macb_init_hw() is going to do a non-masking write to the NCR
register:
/* Enable TX and RX */
macb_writel(bp, NCR, MACB_BIT(RE) | MACB_BIT(TE) | MACB_BIT(MPE));
So obviously no other writable fields matter at all for programming
the chip properly, otherwise macb_init_hw() would "or" in the bits
after a read of NCR. But that's not what this code does, it
writes "RE | TE | MPE" directly.
And the other caller is macb_close() which is shutting down the
chip so can zero out all the other bits and it can't possibly
matter, also due to the assertion above about macb_init_hw()
showing that only the RE, TE, and MPE bits matter for proper
functioning of the chip.
You haven't shown a issue caused by the way the code works now, so
this patch isn't fixing a bug. In fact, the "bit preserving" would
even be misleading to someone reading the code. They will ask
themselves what bits need to be preserved, and as shown above none of
them need to be.
I'm not applying this, sorry.
In macb_reset_hw, use read-modify-write to disable RX and TX.
This way exiting settings and reserved bits wont be disturbed.
Use the same method for clearing statistics as well.
Signed-off-by: Harini Katakam <redacted>
This doesn't make much sense to me.
Consider the two callers of this function.
macb_init_hw() is going to do a non-masking write to the NCR
register:
/* Enable TX and RX */
macb_writel(bp, NCR, MACB_BIT(RE) | MACB_BIT(TE) | MACB_BIT(MPE));
So obviously no other writable fields matter at all for programming
the chip properly, otherwise macb_init_hw() would "or" in the bits
after a read of NCR. But that's not what this code does, it
writes "RE | TE | MPE" directly.
And the other caller is macb_close() which is shutting down the
chip so can zero out all the other bits and it can't possibly
matter, also due to the assertion above about macb_init_hw()
showing that only the RE, TE, and MPE bits matter for proper
functioning of the chip.
You haven't shown a issue caused by the way the code works now, so
this patch isn't fixing a bug. In fact, the "bit preserving" would
even be misleading to someone reading the code. They will ask
themselves what bits need to be preserved, and as shown above none of
them need to be.
I'm not applying this, sorry.
Thanks for the detailed analysis.
I noticed an issue with respect to management port enable bit
when working on the patch series for macb mdio driver for
multi MAC - multi PHY access via same mdio bus.
MPE bit of the MAC (whose phy management register
is used) was being reset. But that is a separate
series still in review.
You are right, there is no existing bug that this
patch addresses. I will come back to this later if
required.
Regards,
Harini