* [PATCH 2/2] net/ibm/emac: fix size of emac dump memory areas
@ 2015-05-12 13:12 Ivan Mikhaylov
2015-05-12 20:49 ` Benjamin Herrenschmidt
2015-05-14 12:04 ` Ivan Mikhaylov
0 siblings, 2 replies; 3+ messages in thread
From: Ivan Mikhaylov @ 2015-05-12 13:12 UTC (permalink / raw)
To: netdev, linux-kernel, David S. Miller, Benjamin Herrenschmidt
Fix in send of emac regs dump to ethtool which
causing wrong data interpretation on ethtool
layer for MII and EMAC.
Signed-off-by: Ivan Mikhaylov <ivan@ru.ibm.com>
---
drivers/net/ethernet/ibm/emac/core.c | 14 ++++----------
drivers/net/ethernet/ibm/emac/core.h | 4 ----
2 files changed, 4 insertions(+), 14 deletions(-)
diff --git a/drivers/net/ethernet/ibm/emac/core.c b/drivers/net/ethernet/ibm/emac/core.c
index de79193..3dc6534 100644
--- a/drivers/net/ethernet/ibm/emac/core.c
+++ b/drivers/net/ethernet/ibm/emac/core.c
@@ -2084,12 +2084,8 @@ static void emac_ethtool_get_pauseparam(struct net_device *ndev,
static int emac_get_regs_len(struct emac_instance *dev)
{
- if (emac_has_feature(dev, EMAC_FTR_EMAC4))
- return sizeof(struct emac_ethtool_regs_subhdr) +
- EMAC4_ETHTOOL_REGS_SIZE(dev);
- else
return sizeof(struct emac_ethtool_regs_subhdr) +
- EMAC_ETHTOOL_REGS_SIZE(dev);
+ sizeof(struct emac_regs);
}
static int emac_ethtool_get_regs_len(struct net_device *ndev)
@@ -2114,15 +2110,13 @@ static void *emac_dump_regs(struct emac_instance *dev, void *buf)
struct emac_ethtool_regs_subhdr *hdr = buf;
hdr->index = dev->cell_index;
- if (emac_has_feature(dev, EMAC_FTR_EMAC4)) {
+ if (emac_has_feature(dev, EMAC_FTR_EMAC4SYNC)) {
hdr->version = EMAC4_ETHTOOL_REGS_VER;
- memcpy_fromio(hdr + 1, dev->emacp, EMAC4_ETHTOOL_REGS_SIZE(dev));
- return (void *)(hdr + 1) + EMAC4_ETHTOOL_REGS_SIZE(dev);
} else {
hdr->version = EMAC_ETHTOOL_REGS_VER;
- memcpy_fromio(hdr + 1, dev->emacp, EMAC_ETHTOOL_REGS_SIZE(dev));
- return (void *)(hdr + 1) + EMAC_ETHTOOL_REGS_SIZE(dev);
}
+ memcpy_fromio(hdr + 1, dev->emacp, sizeof(struct emac_regs));
+ return (void *)(hdr + 1) + sizeof(struct emac_regs);
}
static void emac_ethtool_get_regs(struct net_device *ndev,
diff --git a/drivers/net/ethernet/ibm/emac/core.h b/drivers/net/ethernet/ibm/emac/core.h
index 67f342a..db90819 100644
--- a/drivers/net/ethernet/ibm/emac/core.h
+++ b/drivers/net/ethernet/ibm/emac/core.h
@@ -461,10 +461,6 @@ struct emac_ethtool_regs_subhdr {
};
#define EMAC_ETHTOOL_REGS_VER 0
-#define EMAC_ETHTOOL_REGS_SIZE(dev) ((dev)->rsrc_regs.end - \
- (dev)->rsrc_regs.start + 1)
#define EMAC4_ETHTOOL_REGS_VER 1
-#define EMAC4_ETHTOOL_REGS_SIZE(dev) ((dev)->rsrc_regs.end - \
- (dev)->rsrc_regs.start + 1)
#endif /* __IBM_NEWEMAC_CORE_H */
--
1.7.9.5
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH 2/2] net/ibm/emac: fix size of emac dump memory areas
2015-05-12 13:12 [PATCH 2/2] net/ibm/emac: fix size of emac dump memory areas Ivan Mikhaylov
@ 2015-05-12 20:49 ` Benjamin Herrenschmidt
2015-05-14 12:04 ` Ivan Mikhaylov
1 sibling, 0 replies; 3+ messages in thread
From: Benjamin Herrenschmidt @ 2015-05-12 20:49 UTC (permalink / raw)
To: Ivan Mikhaylov; +Cc: netdev, linux-kernel, David S. Miller
On Tue, 2015-05-12 at 17:12 +0400, Ivan Mikhaylov wrote:
> Fix in send of emac regs dump to ethtool which
> causing wrong data interpretation on ethtool
> layer for MII and EMAC.
Please provide a better explanation. You removed the difference
in register space size between EMAC and EMAC4, why ? You also changed a
test regarding which version of the structure to use from EMAC4 to
EMAC4SYNC, why ?
> Signed-off-by: Ivan Mikhaylov <ivan@ru.ibm.com>
> ---
> drivers/net/ethernet/ibm/emac/core.c | 14 ++++----------
> drivers/net/ethernet/ibm/emac/core.h | 4 ----
> 2 files changed, 4 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/net/ethernet/ibm/emac/core.c b/drivers/net/ethernet/ibm/emac/core.c
> index de79193..3dc6534 100644
> --- a/drivers/net/ethernet/ibm/emac/core.c
> +++ b/drivers/net/ethernet/ibm/emac/core.c
> @@ -2084,12 +2084,8 @@ static void emac_ethtool_get_pauseparam(struct net_device *ndev,
>
> static int emac_get_regs_len(struct emac_instance *dev)
> {
> - if (emac_has_feature(dev, EMAC_FTR_EMAC4))
> - return sizeof(struct emac_ethtool_regs_subhdr) +
> - EMAC4_ETHTOOL_REGS_SIZE(dev);
> - else
> return sizeof(struct emac_ethtool_regs_subhdr) +
> - EMAC_ETHTOOL_REGS_SIZE(dev);
> + sizeof(struct emac_regs);
> }
>
> static int emac_ethtool_get_regs_len(struct net_device *ndev)
> @@ -2114,15 +2110,13 @@ static void *emac_dump_regs(struct emac_instance *dev, void *buf)
> struct emac_ethtool_regs_subhdr *hdr = buf;
>
> hdr->index = dev->cell_index;
> - if (emac_has_feature(dev, EMAC_FTR_EMAC4)) {
> + if (emac_has_feature(dev, EMAC_FTR_EMAC4SYNC)) {
> hdr->version = EMAC4_ETHTOOL_REGS_VER;
> - memcpy_fromio(hdr + 1, dev->emacp, EMAC4_ETHTOOL_REGS_SIZE(dev));
> - return (void *)(hdr + 1) + EMAC4_ETHTOOL_REGS_SIZE(dev);
> } else {
> hdr->version = EMAC_ETHTOOL_REGS_VER;
> - memcpy_fromio(hdr + 1, dev->emacp, EMAC_ETHTOOL_REGS_SIZE(dev));
> - return (void *)(hdr + 1) + EMAC_ETHTOOL_REGS_SIZE(dev);
> }
> + memcpy_fromio(hdr + 1, dev->emacp, sizeof(struct emac_regs));
> + return (void *)(hdr + 1) + sizeof(struct emac_regs);
> }
>
> static void emac_ethtool_get_regs(struct net_device *ndev,
> diff --git a/drivers/net/ethernet/ibm/emac/core.h b/drivers/net/ethernet/ibm/emac/core.h
> index 67f342a..db90819 100644
> --- a/drivers/net/ethernet/ibm/emac/core.h
> +++ b/drivers/net/ethernet/ibm/emac/core.h
> @@ -461,10 +461,6 @@ struct emac_ethtool_regs_subhdr {
> };
>
> #define EMAC_ETHTOOL_REGS_VER 0
> -#define EMAC_ETHTOOL_REGS_SIZE(dev) ((dev)->rsrc_regs.end - \
> - (dev)->rsrc_regs.start + 1)
> #define EMAC4_ETHTOOL_REGS_VER 1
> -#define EMAC4_ETHTOOL_REGS_SIZE(dev) ((dev)->rsrc_regs.end - \
> - (dev)->rsrc_regs.start + 1)
>
> #endif /* __IBM_NEWEMAC_CORE_H */
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH 2/2] net/ibm/emac: fix size of emac dump memory areas
2015-05-12 13:12 [PATCH 2/2] net/ibm/emac: fix size of emac dump memory areas Ivan Mikhaylov
2015-05-12 20:49 ` Benjamin Herrenschmidt
@ 2015-05-14 12:04 ` Ivan Mikhaylov
1 sibling, 0 replies; 3+ messages in thread
From: Ivan Mikhaylov @ 2015-05-14 12:04 UTC (permalink / raw)
To: Benjamin Herrenschmidt; +Cc: netdev, linux-kernel, David S. Miller
On Tue, 12 May 2015 17:12:00 +0400
Ivan Mikhaylov <ivan@ru.ibm.com> wrote:
>>On Tue, 2015-05-12 at 17:12 +0400, Ivan Mikhaylov wrote:
>> Fix in send of emac regs dump to ethtool which
>> causing wrong data interpretation on ethtool
>> layer for MII and EMAC.
>
>Please provide a better explanation. You removed the difference
>in register space size between EMAC and EMAC4, why ? You also changed a
>test regarding which version of the structure to use from EMAC4 to
>EMAC4SYNC, why ?
So, as I understand right, we have EMAC, EMAC4, EMAC4SYNC chips right now?
But within driver structure there are only EMAC4/EMAC4SYNC that I'm seeing or
is it include and EMAC? I thought that only EMAC4/EMAC4SYNC we have.
Anyway we have bug in ethtool, there size of emac_regs is defined and if we
will provide wrong size of emac_regs structure that will cause problems in
showing of some emac_regs fields for emac4sync + MII layer. Plus size of
register space can be different on different platforms so because of this
I removed macroses which doing this right from it. So just for example
we have 0x100 for emac4sync in dts file, sizeof on ethtool is 152 always for
emac_regs and we're reading MII values from emac area where is no data for
MII.
I have to add emac4sync support to ethtool regdump as I see in plus to
EMAC/EMAC4. What your opinion on this?
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2015-05-14 13:02 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-05-12 13:12 [PATCH 2/2] net/ibm/emac: fix size of emac dump memory areas Ivan Mikhaylov
2015-05-12 20:49 ` Benjamin Herrenschmidt
2015-05-14 12:04 ` Ivan Mikhaylov
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.