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