No subject


Thu Jun 25 05:52:11 EDT 2020


at the very least it has the counters mapped to different addresses,
so it would break.

Anyway, I will submit a new patch later.


On 22 May 2015 at 15:02, John Crispin <blogic at openwrt.org> wrote:
> Hi,
>
> instead of adding an extra parameter to mt7530_probe() use this macro
> instead -> IS_ENABLED(CONFIG_SOC_MT7621)
>
>         John
>
> On 14/05/2015 17:14, Cristian Morales Vega wrote:
>> Signed-off-by: Cristian Morales Vega <cristian at samknows.com>
>> ---
>>  .../drivers/net/ethernet/ralink/gsw_mt7620a.c      |   8 +-
>>  .../files/drivers/net/ethernet/ralink/mt7530.c     | 197 ++++++++++++++++++++-
>>  .../files/drivers/net/ethernet/ralink/mt7530.h     |   3 +-
>>  3 files changed, 199 insertions(+), 9 deletions(-)
>>
>> diff --git a/target/linux/ramips/files/drivers/net/ethernet/ralink/gsw_mt7620a.c b/target/linux/ramips/files/drivers/net/ethernet/ralink/gsw_mt7620a.c
>> index 8039704..257a9c5 100644
>> --- a/target/linux/ramips/files/drivers/net/ethernet/ralink/gsw_mt7620a.c
>> +++ b/target/linux/ramips/files/drivers/net/ethernet/ralink/gsw_mt7620a.c
>> @@ -728,10 +728,10 @@ int mt7620_gsw_config(struct fe_priv *priv)
>>
>>       /* is the mt7530 internal or external */
>>       if (priv->mii_bus && priv->mii_bus->phy_map[0x1f]) {
>> -             mt7530_probe(priv->device, gsw->base, NULL, 0);
>> -             mt7530_probe(priv->device, NULL, priv->mii_bus, 1);
>> +             mt7530_probe(priv->device, gsw->base, NULL, 0, 0);
>> +             mt7530_probe(priv->device, NULL, priv->mii_bus, 1, 0);
>>       } else {
>> -             mt7530_probe(priv->device, gsw->base, NULL, 1);
>> +             mt7530_probe(priv->device, gsw->base, NULL, 1, 0);
>>       }
>>
>>       return 0;
>> @@ -740,7 +740,7 @@ int mt7620_gsw_config(struct fe_priv *priv)
>>  int mt7621_gsw_config(struct fe_priv *priv)
>>  {
>>       if (priv->mii_bus && priv->mii_bus->phy_map[0x1f])
>> -             mt7530_probe(priv->device, NULL, priv->mii_bus, 1);
>> +             mt7530_probe(priv->device, NULL, priv->mii_bus, 1, 1);
>>
>>       return 0;
>>  }
>> diff --git a/target/linux/ramips/files/drivers/net/ethernet/ralink/mt7530.c b/target/linux/ramips/files/drivers/net/ethernet/ralink/mt7530.c
>> index 1352b25..cacf19e 100644
>> --- a/target/linux/ramips/files/drivers/net/ethernet/ralink/mt7530.c
>> +++ b/target/linux/ramips/files/drivers/net/ethernet/ralink/mt7530.c
>> @@ -63,6 +63,107 @@ enum {
>>
>>  #define REG_HWTRAP           0x7804
>>
>> +#define MIB_DESC(_s , _o, _n)   \
>> +     {                       \
>> +             .size = (_s),   \
>> +             .offset = (_o), \
>> +             .name = (_n),   \
>> +     }
>> +
>> +struct mt7xxx_mib_desc {
>> +     unsigned int size;
>> +     unsigned int offset;
>> +     const char *name;
>> +};
>> +
>> +#define MT7621_MIB_COUNTER_BASE      0x4000
>> +#define MT7621_MIB_COUNTER_PORT_OFFSET       0x100
>> +#define MT7621_STATS_TDPC    0x00
>> +#define MT7621_STATS_TCRC    0x04
>> +#define MT7621_STATS_TUPC    0x08
>> +#define MT7621_STATS_TMPC    0x0C
>> +#define MT7621_STATS_TBPC    0x10
>> +#define MT7621_STATS_TCEC    0x14
>> +#define MT7621_STATS_TSCEC   0x18
>> +#define MT7621_STATS_TMCEC   0x1C
>> +#define MT7621_STATS_TDEC    0x20
>> +#define MT7621_STATS_TLCEC   0x24
>> +#define MT7621_STATS_TXCEC   0x28
>> +#define MT7621_STATS_TPPC    0x2C
>> +#define MT7621_STATS_TL64PC  0x30
>> +#define MT7621_STATS_TL65PC  0x34
>> +#define MT7621_STATS_TL128PC 0x38
>> +#define MT7621_STATS_TL256PC 0x3C
>> +#define MT7621_STATS_TL512PC 0x40
>> +#define MT7621_STATS_TL1024PC        0x44
>> +#define MT7621_STATS_TOC     0x48
>> +#define MT7621_STATS_RDPC    0x60
>> +#define MT7621_STATS_RFPC    0x64
>> +#define MT7621_STATS_RUPC    0x68
>> +#define MT7621_STATS_RMPC    0x6C
>> +#define MT7621_STATS_RBPC    0x70
>> +#define MT7621_STATS_RAEPC   0x74
>> +#define MT7621_STATS_RCEPC   0x78
>> +#define MT7621_STATS_RUSPC   0x7C
>> +#define MT7621_STATS_RFEPC   0x80
>> +#define MT7621_STATS_ROSPC   0x84
>> +#define MT7621_STATS_RJEPC   0x88
>> +#define MT7621_STATS_RPPC    0x8C
>> +#define MT7621_STATS_RL64PC  0x90
>> +#define MT7621_STATS_RL65PC  0x94
>> +#define MT7621_STATS_RL128PC 0x98
>> +#define MT7621_STATS_RL256PC 0x9C
>> +#define MT7621_STATS_RL512PC 0xA0
>> +#define MT7621_STATS_RL1024PC        0xA4
>> +#define MT7621_STATS_ROC     0xA8
>> +#define MT7621_STATS_RDPC_CTRL       0xB0
>> +#define MT7621_STATS_RDPC_ING        0xB4
>> +#define MT7621_STATS_RDPC_ARL        0xB8
>> +
>> +static const struct mt7xxx_mib_desc mt7621_mibs[] = {
>> +     MIB_DESC(1, MT7621_STATS_TDPC, "TxDrop"),
>> +     MIB_DESC(1, MT7621_STATS_TCRC, "TxCRC"),
>> +     MIB_DESC(1, MT7621_STATS_TUPC, "TxUni"),
>> +     MIB_DESC(1, MT7621_STATS_TMPC, "TxMulti"),
>> +     MIB_DESC(1, MT7621_STATS_TBPC, "TxBroad"),
>> +     MIB_DESC(1, MT7621_STATS_TCEC, "TxCollision"),
>> +     MIB_DESC(1, MT7621_STATS_TSCEC, "TxSingleCol"),
>> +     MIB_DESC(1, MT7621_STATS_TMCEC, "TxMultiCol"),
>> +     MIB_DESC(1, MT7621_STATS_TDEC, "TxDefer"),
>> +     MIB_DESC(1, MT7621_STATS_TLCEC, "TxLateCol"),
>> +     MIB_DESC(1, MT7621_STATS_TXCEC, "TxExcCol"),
>> +     MIB_DESC(1, MT7621_STATS_TPPC, "TxPause"),
>> +     MIB_DESC(1, MT7621_STATS_TL64PC, "Tx64Byte"),
>> +     MIB_DESC(1, MT7621_STATS_TL65PC, "Tx65Byte"),
>> +     MIB_DESC(1, MT7621_STATS_TL128PC, "Tx128Byte"),
>> +     MIB_DESC(1, MT7621_STATS_TL256PC, "Tx256Byte"),
>> +     MIB_DESC(1, MT7621_STATS_TL512PC, "Tx512Byte"),
>> +     MIB_DESC(1, MT7621_STATS_TL1024PC, "Tx1024Byte"),
>> +     MIB_DESC(2, MT7621_STATS_TOC, "TxByte"),
>> +     MIB_DESC(1, MT7621_STATS_RDPC, "RxDrop"),
>> +     MIB_DESC(1, MT7621_STATS_RFPC, "RxFiltered"),
>> +     MIB_DESC(1, MT7621_STATS_RUPC, "RxUni"),
>> +     MIB_DESC(1, MT7621_STATS_RMPC, "RxMulti"),
>> +     MIB_DESC(1, MT7621_STATS_RBPC, "RxBroad"),
>> +     MIB_DESC(1, MT7621_STATS_RAEPC, "RxAlignErr"),
>> +     MIB_DESC(1, MT7621_STATS_RCEPC, "RxCRC"),
>> +     MIB_DESC(1, MT7621_STATS_RUSPC, "RxUnderSize"),
>> +     MIB_DESC(1, MT7621_STATS_RFEPC, "RxFragment"),
>> +     MIB_DESC(1, MT7621_STATS_ROSPC, "RxOverSize"),
>> +     MIB_DESC(1, MT7621_STATS_RJEPC, "RxJabber"),
>> +     MIB_DESC(1, MT7621_STATS_RPPC, "RxPause"),
>> +     MIB_DESC(1, MT7621_STATS_RL64PC, "Rx64Byte"),
>> +     MIB_DESC(1, MT7621_STATS_RL65PC, "Rx65Byte"),
>> +     MIB_DESC(1, MT7621_STATS_RL128PC, "Rx128Byte"),
>> +     MIB_DESC(1, MT7621_STATS_RL256PC, "Rx256Byte"),
>> +     MIB_DESC(1, MT7621_STATS_RL512PC, "Rx512Byte"),
>> +     MIB_DESC(1, MT7621_STATS_RL1024PC, "Rx1024Byte"),
>> +     MIB_DESC(2, MT7621_STATS_ROC, "RxByte"),
>> +     MIB_DESC(1, MT7621_STATS_RDPC_CTRL, "RxCtrlDrop"),
>> +     MIB_DESC(1, MT7621_STATS_RDPC_ING, "RxIngDrop"),
>> +     MIB_DESC(1, MT7621_STATS_RDPC_ARL, "RxARLDrop")
>> +};
>> +
>>  enum {
>>       /* Global attributes. */
>>       MT7530_ATTR_ENABLE_VLAN,
>> @@ -500,6 +601,63 @@ static const struct switch_attr mt7530_global[] = {
>>       },
>>  };
>>
>> +static u64 get_mib_counter(struct mt7530_priv *priv, int i, int port)
>> +{
>> +     unsigned int port_base;
>> +     u64 t;
>> +
>> +     port_base = MT7621_MIB_COUNTER_BASE +
>> +                 MT7621_MIB_COUNTER_PORT_OFFSET * port;
>> +
>> +     t = mt7530_r32(priv, port_base + mt7621_mibs[i].offset);
>> +     if (mt7621_mibs[i].size == 2) {
>> +             u64 hi;
>> +
>> +             hi = mt7530_r32(priv, port_base + mt7621_mibs[i].offset + 4);
>> +             t |= hi << 32;
>> +     }
>> +
>> +     return t;
>> +}
>> +
>> +static int mt7621_sw_get_port_mib(struct switch_dev *dev,
>> +                               const struct switch_attr *attr,
>> +                               struct switch_val *val)
>> +{
>> +     static char buf[4096];
>> +     struct mt7530_priv *priv = container_of(dev, struct mt7530_priv, swdev);
>> +     int i, len = 0;
>> +
>> +     if (val->port_vlan >= MT7530_NUM_PORTS)
>> +             return -EINVAL;
>> +
>> +     len += snprintf(buf + len, sizeof(buf) - len,
>> +                     "Port %d MIB counters\n", val->port_vlan);
>> +
>> +     for (i = 0; i < sizeof(mt7621_mibs) / sizeof(*mt7621_mibs); ++i) {
>> +             u64 counter;
>> +             len += snprintf(buf + len, sizeof(buf) - len,
>> +                             "%-11s: ", mt7621_mibs[i].name);
>> +             counter = get_mib_counter(priv, i, val->port_vlan);
>> +             len += snprintf(buf + len, sizeof(buf) - len, "%llu\n",
>> +                             counter);
>> +     }
>> +
>> +     val->value.s = buf;
>> +     val->len = len;
>> +     return 0;
>> +}
>> +
>> +static const struct switch_attr mt7621_port[] = {
>> +     {
>> +             .type = SWITCH_TYPE_STRING,
>> +             .name = "mib",
>> +             .description = "Get MIB counters for port",
>> +             .get = mt7621_sw_get_port_mib,
>> +             .set = NULL,
>> +     },
>> +};
>> +
>>  static const struct switch_attr mt7530_port[] = {
>>  };
>>
>> @@ -514,6 +672,28 @@ static const struct switch_attr mt7530_vlan[] = {
>>       },
>>  };
>>
>> +static const struct switch_dev_ops mt7621_ops = {
>> +     .attr_global = {
>> +             .attr = mt7530_global,
>> +             .n_attr = ARRAY_SIZE(mt7530_global),
>> +     },
>> +     .attr_port = {
>> +             .attr = mt7621_port,
>> +             .n_attr = ARRAY_SIZE(mt7621_port),
>> +     },
>> +     .attr_vlan = {
>> +             .attr = mt7530_vlan,
>> +             .n_attr = ARRAY_SIZE(mt7530_vlan),
>> +     },
>> +     .get_vlan_ports = mt7530_get_vlan_ports,
>> +     .set_vlan_ports = mt7530_set_vlan_ports,
>> +     .get_port_pvid = mt7530_get_port_pvid,
>> +     .set_port_pvid = mt7530_set_port_pvid,
>> +     .get_port_link = mt7530_get_port_link,
>> +     .apply_config = mt7530_apply_config,
>> +     .reset_switch = mt7530_reset_switch,
>> +};
>> +
>>  static const struct switch_dev_ops mt7530_ops = {
>>       .attr_global = {
>>               .attr = mt7530_global,
>> @@ -537,7 +717,8 @@ static const struct switch_dev_ops mt7530_ops = {
>>  };
>>
>>  int
>> -mt7530_probe(struct device *dev, void __iomem *base, struct mii_bus *bus, int vlan)
>> +mt7530_probe(struct device *dev, void __iomem *base, struct mii_bus *bus,
>> +          int vlan, bool is_mt7621)
>>  {
>>       struct switch_dev *swdev;
>>       struct mt7530_priv *mt7530;
>> @@ -557,13 +738,21 @@ mt7530_probe(struct device *dev, void __iomem *base, struct mii_bus *bus, int vl
>>               swdev->alias = "mt7530";
>>               swdev->name = "mt7530";
>>       } else {
>> -             swdev->alias = "mt7620";
>> -             swdev->name = "mt7620";
>> +             if (is_mt7621) {
>> +                     swdev->alias = "mt7621";
>> +                     swdev->name = "mt7621";
>> +             } else {
>> +                     swdev->alias = "mt7620";
>> +                     swdev->name = "mt7620";
>> +             }
>>       }
>>       swdev->cpu_port = MT7530_CPU_PORT;
>>       swdev->ports = MT7530_NUM_PORTS;
>>       swdev->vlans = MT7530_NUM_VLANS;
>> -     swdev->ops = &mt7530_ops;
>> +     if (is_mt7621)
>> +             swdev->ops = &mt7621_ops;
>> +     else
>> +             swdev->ops = &mt7530_ops;
>>
>>       ret = register_switch(swdev, NULL);
>>       if (ret) {
>> diff --git a/target/linux/ramips/files/drivers/net/ethernet/ralink/mt7530.h b/target/linux/ramips/files/drivers/net/ethernet/ralink/mt7530.h
>> index 1fc8c62..d62b300 100644
>> --- a/target/linux/ramips/files/drivers/net/ethernet/ralink/mt7530.h
>> +++ b/target/linux/ramips/files/drivers/net/ethernet/ralink/mt7530.h
>> @@ -15,6 +15,7 @@
>>  #ifndef _MT7530_H__
>>  #define _MT7530_H__
>>
>> -int mt7530_probe(struct device *dev, void __iomem *base, struct mii_bus *bus, int vlan);
>> +int mt7530_probe(struct device *dev, void __iomem *base, struct mii_bus *bus,
>> +              int vlan, bool is_mt7621);
>>
>>  #endif
>>
> _______________________________________________
> openwrt-devel mailing list
> openwrt-devel at lists.openwrt.org
> https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel



-- 
Cristian Morales Vega

Email cristian at samknows.com
Office +44 (0) 20 3111 4330
Web:  www.samknows.com


This email is sent for and on behalf of SamKnows Limited.

This email and any attachments are confidential, legally privileged
and protected by copyright. If you are not the intended recipient
dissemination or copying of this email is prohibited. If you have
received this in error, please notify the sender by replying by email
and then delete the email completely from your system.

SamKnows Limited, Registered Number: 06510477, Registered Office: Hill
House, 1 Little New Street, London, EC4A 3TR. Registered in England
and Wales. Trade Mark 2507103
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel



More information about the openwrt-devel mailing list