mirror of
https://github.com/armbian/linux-cix.git
synced 2026-01-06 12:30:45 -08:00
net: mscc: ocelot: keep ocelot_stat_layout by reg address, not offset
With so many counter addresses recently discovered as being wrong, it is desirable to at least have a central database of information, rather than two: one through the SYS_COUNT_* registers (used for ndo_get_stats64), and the other through the offset field of struct ocelot_stat_layout elements (used for ethtool -S). The strategy will be to keep the SYS_COUNT_* definitions as the single source of truth, but for that we need to expand our current definitions to cover all registers. Then we need to convert the ocelot region creation logic, and stats worker, to the read semantics imposed by going through SYS_COUNT_* absolute register addresses, rather than offsets of 32-bit words relative to SYS_COUNT_RX_OCTETS (which should have been SYS_CNT, by the way). Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
9190460084
commit
d4c3676507
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1881,9 +1881,8 @@ static int ocelot_port_update_stats(struct ocelot *ocelot, int port)
|
||||
ocelot_write(ocelot, SYS_STAT_CFG_STAT_VIEW(port), SYS_STAT_CFG);
|
||||
|
||||
list_for_each_entry(region, &ocelot->stats_regions, node) {
|
||||
err = ocelot_bulk_read_rix(ocelot, SYS_COUNT_RX_OCTETS,
|
||||
region->offset, region->buf,
|
||||
region->count);
|
||||
err = ocelot_bulk_read(ocelot, region->base, region->buf,
|
||||
region->count);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
@@ -1978,7 +1977,7 @@ static int ocelot_prepare_stats_regions(struct ocelot *ocelot)
|
||||
if (ocelot->stats_layout[i].name[0] == '\0')
|
||||
continue;
|
||||
|
||||
if (region && ocelot->stats_layout[i].offset == last + 1) {
|
||||
if (region && ocelot->stats_layout[i].reg == last + 4) {
|
||||
region->count++;
|
||||
} else {
|
||||
region = devm_kzalloc(ocelot->dev, sizeof(*region),
|
||||
@@ -1986,12 +1985,12 @@ static int ocelot_prepare_stats_regions(struct ocelot *ocelot)
|
||||
if (!region)
|
||||
return -ENOMEM;
|
||||
|
||||
region->offset = ocelot->stats_layout[i].offset;
|
||||
region->base = ocelot->stats_layout[i].reg;
|
||||
region->count = 1;
|
||||
list_add_tail(®ion->node, &ocelot->stats_regions);
|
||||
}
|
||||
|
||||
last = ocelot->stats_layout[i].offset;
|
||||
last = ocelot->stats_layout[i].reg;
|
||||
}
|
||||
|
||||
list_for_each_entry(region, &ocelot->stats_regions, node) {
|
||||
|
||||
@@ -99,375 +99,375 @@ static const struct reg_field ocelot_regfields[REGFIELD_MAX] = {
|
||||
static const struct ocelot_stat_layout ocelot_stats_layout[OCELOT_NUM_STATS] = {
|
||||
[OCELOT_STAT_RX_OCTETS] = {
|
||||
.name = "rx_octets",
|
||||
.offset = 0x00,
|
||||
.reg = SYS_COUNT_RX_OCTETS,
|
||||
},
|
||||
[OCELOT_STAT_RX_UNICAST] = {
|
||||
.name = "rx_unicast",
|
||||
.offset = 0x01,
|
||||
.reg = SYS_COUNT_RX_UNICAST,
|
||||
},
|
||||
[OCELOT_STAT_RX_MULTICAST] = {
|
||||
.name = "rx_multicast",
|
||||
.offset = 0x02,
|
||||
.reg = SYS_COUNT_RX_MULTICAST,
|
||||
},
|
||||
[OCELOT_STAT_RX_BROADCAST] = {
|
||||
.name = "rx_broadcast",
|
||||
.offset = 0x03,
|
||||
.reg = SYS_COUNT_RX_BROADCAST,
|
||||
},
|
||||
[OCELOT_STAT_RX_SHORTS] = {
|
||||
.name = "rx_shorts",
|
||||
.offset = 0x04,
|
||||
.reg = SYS_COUNT_RX_SHORTS,
|
||||
},
|
||||
[OCELOT_STAT_RX_FRAGMENTS] = {
|
||||
.name = "rx_fragments",
|
||||
.offset = 0x05,
|
||||
.reg = SYS_COUNT_RX_FRAGMENTS,
|
||||
},
|
||||
[OCELOT_STAT_RX_JABBERS] = {
|
||||
.name = "rx_jabbers",
|
||||
.offset = 0x06,
|
||||
.reg = SYS_COUNT_RX_JABBERS,
|
||||
},
|
||||
[OCELOT_STAT_RX_CRC_ALIGN_ERRS] = {
|
||||
.name = "rx_crc_align_errs",
|
||||
.offset = 0x07,
|
||||
.reg = SYS_COUNT_RX_CRC_ALIGN_ERRS,
|
||||
},
|
||||
[OCELOT_STAT_RX_SYM_ERRS] = {
|
||||
.name = "rx_sym_errs",
|
||||
.offset = 0x08,
|
||||
.reg = SYS_COUNT_RX_SYM_ERRS,
|
||||
},
|
||||
[OCELOT_STAT_RX_64] = {
|
||||
.name = "rx_frames_below_65_octets",
|
||||
.offset = 0x09,
|
||||
.reg = SYS_COUNT_RX_64,
|
||||
},
|
||||
[OCELOT_STAT_RX_65_127] = {
|
||||
.name = "rx_frames_65_to_127_octets",
|
||||
.offset = 0x0A,
|
||||
.reg = SYS_COUNT_RX_65_127,
|
||||
},
|
||||
[OCELOT_STAT_RX_128_255] = {
|
||||
.name = "rx_frames_128_to_255_octets",
|
||||
.offset = 0x0B,
|
||||
.reg = SYS_COUNT_RX_128_255,
|
||||
},
|
||||
[OCELOT_STAT_RX_256_511] = {
|
||||
.name = "rx_frames_256_to_511_octets",
|
||||
.offset = 0x0C,
|
||||
.reg = SYS_COUNT_RX_256_511,
|
||||
},
|
||||
[OCELOT_STAT_RX_512_1023] = {
|
||||
.name = "rx_frames_512_to_1023_octets",
|
||||
.offset = 0x0D,
|
||||
.reg = SYS_COUNT_RX_512_1023,
|
||||
},
|
||||
[OCELOT_STAT_RX_1024_1526] = {
|
||||
.name = "rx_frames_1024_to_1526_octets",
|
||||
.offset = 0x0E,
|
||||
.reg = SYS_COUNT_RX_1024_1526,
|
||||
},
|
||||
[OCELOT_STAT_RX_1527_MAX] = {
|
||||
.name = "rx_frames_over_1526_octets",
|
||||
.offset = 0x0F,
|
||||
.reg = SYS_COUNT_RX_1527_MAX,
|
||||
},
|
||||
[OCELOT_STAT_RX_PAUSE] = {
|
||||
.name = "rx_pause",
|
||||
.offset = 0x10,
|
||||
.reg = SYS_COUNT_RX_PAUSE,
|
||||
},
|
||||
[OCELOT_STAT_RX_CONTROL] = {
|
||||
.name = "rx_control",
|
||||
.offset = 0x11,
|
||||
.reg = SYS_COUNT_RX_CONTROL,
|
||||
},
|
||||
[OCELOT_STAT_RX_LONGS] = {
|
||||
.name = "rx_longs",
|
||||
.offset = 0x12,
|
||||
.reg = SYS_COUNT_RX_LONGS,
|
||||
},
|
||||
[OCELOT_STAT_RX_CLASSIFIED_DROPS] = {
|
||||
.name = "rx_classified_drops",
|
||||
.offset = 0x13,
|
||||
.reg = SYS_COUNT_RX_CLASSIFIED_DROPS,
|
||||
},
|
||||
[OCELOT_STAT_RX_RED_PRIO_0] = {
|
||||
.name = "rx_red_prio_0",
|
||||
.offset = 0x14,
|
||||
.reg = SYS_COUNT_RX_RED_PRIO_0,
|
||||
},
|
||||
[OCELOT_STAT_RX_RED_PRIO_1] = {
|
||||
.name = "rx_red_prio_1",
|
||||
.offset = 0x15,
|
||||
.reg = SYS_COUNT_RX_RED_PRIO_1,
|
||||
},
|
||||
[OCELOT_STAT_RX_RED_PRIO_2] = {
|
||||
.name = "rx_red_prio_2",
|
||||
.offset = 0x16,
|
||||
.reg = SYS_COUNT_RX_RED_PRIO_2,
|
||||
},
|
||||
[OCELOT_STAT_RX_RED_PRIO_3] = {
|
||||
.name = "rx_red_prio_3",
|
||||
.offset = 0x17,
|
||||
.reg = SYS_COUNT_RX_RED_PRIO_3,
|
||||
},
|
||||
[OCELOT_STAT_RX_RED_PRIO_4] = {
|
||||
.name = "rx_red_prio_4",
|
||||
.offset = 0x18,
|
||||
.reg = SYS_COUNT_RX_RED_PRIO_4,
|
||||
},
|
||||
[OCELOT_STAT_RX_RED_PRIO_5] = {
|
||||
.name = "rx_red_prio_5",
|
||||
.offset = 0x19,
|
||||
.reg = SYS_COUNT_RX_RED_PRIO_5,
|
||||
},
|
||||
[OCELOT_STAT_RX_RED_PRIO_6] = {
|
||||
.name = "rx_red_prio_6",
|
||||
.offset = 0x1A,
|
||||
.reg = SYS_COUNT_RX_RED_PRIO_6,
|
||||
},
|
||||
[OCELOT_STAT_RX_RED_PRIO_7] = {
|
||||
.name = "rx_red_prio_7",
|
||||
.offset = 0x1B,
|
||||
.reg = SYS_COUNT_RX_RED_PRIO_7,
|
||||
},
|
||||
[OCELOT_STAT_RX_YELLOW_PRIO_0] = {
|
||||
.name = "rx_yellow_prio_0",
|
||||
.offset = 0x1C,
|
||||
.reg = SYS_COUNT_RX_YELLOW_PRIO_0,
|
||||
},
|
||||
[OCELOT_STAT_RX_YELLOW_PRIO_1] = {
|
||||
.name = "rx_yellow_prio_1",
|
||||
.offset = 0x1D,
|
||||
.reg = SYS_COUNT_RX_YELLOW_PRIO_1,
|
||||
},
|
||||
[OCELOT_STAT_RX_YELLOW_PRIO_2] = {
|
||||
.name = "rx_yellow_prio_2",
|
||||
.offset = 0x1E,
|
||||
.reg = SYS_COUNT_RX_YELLOW_PRIO_2,
|
||||
},
|
||||
[OCELOT_STAT_RX_YELLOW_PRIO_3] = {
|
||||
.name = "rx_yellow_prio_3",
|
||||
.offset = 0x1F,
|
||||
.reg = SYS_COUNT_RX_YELLOW_PRIO_3,
|
||||
},
|
||||
[OCELOT_STAT_RX_YELLOW_PRIO_4] = {
|
||||
.name = "rx_yellow_prio_4",
|
||||
.offset = 0x20,
|
||||
.reg = SYS_COUNT_RX_YELLOW_PRIO_4,
|
||||
},
|
||||
[OCELOT_STAT_RX_YELLOW_PRIO_5] = {
|
||||
.name = "rx_yellow_prio_5",
|
||||
.offset = 0x21,
|
||||
.reg = SYS_COUNT_RX_YELLOW_PRIO_5,
|
||||
},
|
||||
[OCELOT_STAT_RX_YELLOW_PRIO_6] = {
|
||||
.name = "rx_yellow_prio_6",
|
||||
.offset = 0x22,
|
||||
.reg = SYS_COUNT_RX_YELLOW_PRIO_6,
|
||||
},
|
||||
[OCELOT_STAT_RX_YELLOW_PRIO_7] = {
|
||||
.name = "rx_yellow_prio_7",
|
||||
.offset = 0x23,
|
||||
.reg = SYS_COUNT_RX_YELLOW_PRIO_7,
|
||||
},
|
||||
[OCELOT_STAT_RX_GREEN_PRIO_0] = {
|
||||
.name = "rx_green_prio_0",
|
||||
.offset = 0x24,
|
||||
.reg = SYS_COUNT_RX_GREEN_PRIO_0,
|
||||
},
|
||||
[OCELOT_STAT_RX_GREEN_PRIO_1] = {
|
||||
.name = "rx_green_prio_1",
|
||||
.offset = 0x25,
|
||||
.reg = SYS_COUNT_RX_GREEN_PRIO_1,
|
||||
},
|
||||
[OCELOT_STAT_RX_GREEN_PRIO_2] = {
|
||||
.name = "rx_green_prio_2",
|
||||
.offset = 0x26,
|
||||
.reg = SYS_COUNT_RX_GREEN_PRIO_2,
|
||||
},
|
||||
[OCELOT_STAT_RX_GREEN_PRIO_3] = {
|
||||
.name = "rx_green_prio_3",
|
||||
.offset = 0x27,
|
||||
.reg = SYS_COUNT_RX_GREEN_PRIO_3,
|
||||
},
|
||||
[OCELOT_STAT_RX_GREEN_PRIO_4] = {
|
||||
.name = "rx_green_prio_4",
|
||||
.offset = 0x28,
|
||||
.reg = SYS_COUNT_RX_GREEN_PRIO_4,
|
||||
},
|
||||
[OCELOT_STAT_RX_GREEN_PRIO_5] = {
|
||||
.name = "rx_green_prio_5",
|
||||
.offset = 0x29,
|
||||
.reg = SYS_COUNT_RX_GREEN_PRIO_5,
|
||||
},
|
||||
[OCELOT_STAT_RX_GREEN_PRIO_6] = {
|
||||
.name = "rx_green_prio_6",
|
||||
.offset = 0x2A,
|
||||
.reg = SYS_COUNT_RX_GREEN_PRIO_6,
|
||||
},
|
||||
[OCELOT_STAT_RX_GREEN_PRIO_7] = {
|
||||
.name = "rx_green_prio_7",
|
||||
.offset = 0x2B,
|
||||
.reg = SYS_COUNT_RX_GREEN_PRIO_7,
|
||||
},
|
||||
[OCELOT_STAT_TX_OCTETS] = {
|
||||
.name = "tx_octets",
|
||||
.offset = 0x40,
|
||||
.reg = SYS_COUNT_TX_OCTETS,
|
||||
},
|
||||
[OCELOT_STAT_TX_UNICAST] = {
|
||||
.name = "tx_unicast",
|
||||
.offset = 0x41,
|
||||
.reg = SYS_COUNT_TX_UNICAST,
|
||||
},
|
||||
[OCELOT_STAT_TX_MULTICAST] = {
|
||||
.name = "tx_multicast",
|
||||
.offset = 0x42,
|
||||
.reg = SYS_COUNT_TX_MULTICAST,
|
||||
},
|
||||
[OCELOT_STAT_TX_BROADCAST] = {
|
||||
.name = "tx_broadcast",
|
||||
.offset = 0x43,
|
||||
.reg = SYS_COUNT_TX_BROADCAST,
|
||||
},
|
||||
[OCELOT_STAT_TX_COLLISION] = {
|
||||
.name = "tx_collision",
|
||||
.offset = 0x44,
|
||||
.reg = SYS_COUNT_TX_COLLISION,
|
||||
},
|
||||
[OCELOT_STAT_TX_DROPS] = {
|
||||
.name = "tx_drops",
|
||||
.offset = 0x45,
|
||||
.reg = SYS_COUNT_TX_DROPS,
|
||||
},
|
||||
[OCELOT_STAT_TX_PAUSE] = {
|
||||
.name = "tx_pause",
|
||||
.offset = 0x46,
|
||||
.reg = SYS_COUNT_TX_PAUSE,
|
||||
},
|
||||
[OCELOT_STAT_TX_64] = {
|
||||
.name = "tx_frames_below_65_octets",
|
||||
.offset = 0x47,
|
||||
.reg = SYS_COUNT_TX_64,
|
||||
},
|
||||
[OCELOT_STAT_TX_65_127] = {
|
||||
.name = "tx_frames_65_to_127_octets",
|
||||
.offset = 0x48,
|
||||
.reg = SYS_COUNT_TX_65_127,
|
||||
},
|
||||
[OCELOT_STAT_TX_128_255] = {
|
||||
.name = "tx_frames_128_255_octets",
|
||||
.offset = 0x49,
|
||||
.reg = SYS_COUNT_TX_128_255,
|
||||
},
|
||||
[OCELOT_STAT_TX_256_511] = {
|
||||
.name = "tx_frames_256_511_octets",
|
||||
.offset = 0x4A,
|
||||
.reg = SYS_COUNT_TX_256_511,
|
||||
},
|
||||
[OCELOT_STAT_TX_512_1023] = {
|
||||
.name = "tx_frames_512_1023_octets",
|
||||
.offset = 0x4B,
|
||||
.reg = SYS_COUNT_TX_512_1023,
|
||||
},
|
||||
[OCELOT_STAT_TX_1024_1526] = {
|
||||
.name = "tx_frames_1024_1526_octets",
|
||||
.offset = 0x4C,
|
||||
.reg = SYS_COUNT_TX_1024_1526,
|
||||
},
|
||||
[OCELOT_STAT_TX_1527_MAX] = {
|
||||
.name = "tx_frames_over_1526_octets",
|
||||
.offset = 0x4D,
|
||||
.reg = SYS_COUNT_TX_1527_MAX,
|
||||
},
|
||||
[OCELOT_STAT_TX_YELLOW_PRIO_0] = {
|
||||
.name = "tx_yellow_prio_0",
|
||||
.offset = 0x4E,
|
||||
.reg = SYS_COUNT_TX_YELLOW_PRIO_0,
|
||||
},
|
||||
[OCELOT_STAT_TX_YELLOW_PRIO_1] = {
|
||||
.name = "tx_yellow_prio_1",
|
||||
.offset = 0x4F,
|
||||
.reg = SYS_COUNT_TX_YELLOW_PRIO_1,
|
||||
},
|
||||
[OCELOT_STAT_TX_YELLOW_PRIO_2] = {
|
||||
.name = "tx_yellow_prio_2",
|
||||
.offset = 0x50,
|
||||
.reg = SYS_COUNT_TX_YELLOW_PRIO_2,
|
||||
},
|
||||
[OCELOT_STAT_TX_YELLOW_PRIO_3] = {
|
||||
.name = "tx_yellow_prio_3",
|
||||
.offset = 0x51,
|
||||
.reg = SYS_COUNT_TX_YELLOW_PRIO_3,
|
||||
},
|
||||
[OCELOT_STAT_TX_YELLOW_PRIO_4] = {
|
||||
.name = "tx_yellow_prio_4",
|
||||
.offset = 0x52,
|
||||
.reg = SYS_COUNT_TX_YELLOW_PRIO_4,
|
||||
},
|
||||
[OCELOT_STAT_TX_YELLOW_PRIO_5] = {
|
||||
.name = "tx_yellow_prio_5",
|
||||
.offset = 0x53,
|
||||
.reg = SYS_COUNT_TX_YELLOW_PRIO_5,
|
||||
},
|
||||
[OCELOT_STAT_TX_YELLOW_PRIO_6] = {
|
||||
.name = "tx_yellow_prio_6",
|
||||
.offset = 0x54,
|
||||
.reg = SYS_COUNT_TX_YELLOW_PRIO_6,
|
||||
},
|
||||
[OCELOT_STAT_TX_YELLOW_PRIO_7] = {
|
||||
.name = "tx_yellow_prio_7",
|
||||
.offset = 0x55,
|
||||
.reg = SYS_COUNT_TX_YELLOW_PRIO_7,
|
||||
},
|
||||
[OCELOT_STAT_TX_GREEN_PRIO_0] = {
|
||||
.name = "tx_green_prio_0",
|
||||
.offset = 0x56,
|
||||
.reg = SYS_COUNT_TX_GREEN_PRIO_0,
|
||||
},
|
||||
[OCELOT_STAT_TX_GREEN_PRIO_1] = {
|
||||
.name = "tx_green_prio_1",
|
||||
.offset = 0x57,
|
||||
.reg = SYS_COUNT_TX_GREEN_PRIO_1,
|
||||
},
|
||||
[OCELOT_STAT_TX_GREEN_PRIO_2] = {
|
||||
.name = "tx_green_prio_2",
|
||||
.offset = 0x58,
|
||||
.reg = SYS_COUNT_TX_GREEN_PRIO_2,
|
||||
},
|
||||
[OCELOT_STAT_TX_GREEN_PRIO_3] = {
|
||||
.name = "tx_green_prio_3",
|
||||
.offset = 0x59,
|
||||
.reg = SYS_COUNT_TX_GREEN_PRIO_3,
|
||||
},
|
||||
[OCELOT_STAT_TX_GREEN_PRIO_4] = {
|
||||
.name = "tx_green_prio_4",
|
||||
.offset = 0x5A,
|
||||
.reg = SYS_COUNT_TX_GREEN_PRIO_4,
|
||||
},
|
||||
[OCELOT_STAT_TX_GREEN_PRIO_5] = {
|
||||
.name = "tx_green_prio_5",
|
||||
.offset = 0x5B,
|
||||
.reg = SYS_COUNT_TX_GREEN_PRIO_5,
|
||||
},
|
||||
[OCELOT_STAT_TX_GREEN_PRIO_6] = {
|
||||
.name = "tx_green_prio_6",
|
||||
.offset = 0x5C,
|
||||
.reg = SYS_COUNT_TX_GREEN_PRIO_6,
|
||||
},
|
||||
[OCELOT_STAT_TX_GREEN_PRIO_7] = {
|
||||
.name = "tx_green_prio_7",
|
||||
.offset = 0x5D,
|
||||
.reg = SYS_COUNT_TX_GREEN_PRIO_7,
|
||||
},
|
||||
[OCELOT_STAT_TX_AGED] = {
|
||||
.name = "tx_aged",
|
||||
.offset = 0x5E,
|
||||
.reg = SYS_COUNT_TX_AGING,
|
||||
},
|
||||
[OCELOT_STAT_DROP_LOCAL] = {
|
||||
.name = "drop_local",
|
||||
.offset = 0x80,
|
||||
.reg = SYS_COUNT_DROP_LOCAL,
|
||||
},
|
||||
[OCELOT_STAT_DROP_TAIL] = {
|
||||
.name = "drop_tail",
|
||||
.offset = 0x81,
|
||||
.reg = SYS_COUNT_DROP_TAIL,
|
||||
},
|
||||
[OCELOT_STAT_DROP_YELLOW_PRIO_0] = {
|
||||
.name = "drop_yellow_prio_0",
|
||||
.offset = 0x82,
|
||||
.reg = SYS_COUNT_DROP_YELLOW_PRIO_0,
|
||||
},
|
||||
[OCELOT_STAT_DROP_YELLOW_PRIO_1] = {
|
||||
.name = "drop_yellow_prio_1",
|
||||
.offset = 0x83,
|
||||
.reg = SYS_COUNT_DROP_YELLOW_PRIO_1,
|
||||
},
|
||||
[OCELOT_STAT_DROP_YELLOW_PRIO_2] = {
|
||||
.name = "drop_yellow_prio_2",
|
||||
.offset = 0x84,
|
||||
.reg = SYS_COUNT_DROP_YELLOW_PRIO_2,
|
||||
},
|
||||
[OCELOT_STAT_DROP_YELLOW_PRIO_3] = {
|
||||
.name = "drop_yellow_prio_3",
|
||||
.offset = 0x85,
|
||||
.reg = SYS_COUNT_DROP_YELLOW_PRIO_3,
|
||||
},
|
||||
[OCELOT_STAT_DROP_YELLOW_PRIO_4] = {
|
||||
.name = "drop_yellow_prio_4",
|
||||
.offset = 0x86,
|
||||
.reg = SYS_COUNT_DROP_YELLOW_PRIO_4,
|
||||
},
|
||||
[OCELOT_STAT_DROP_YELLOW_PRIO_5] = {
|
||||
.name = "drop_yellow_prio_5",
|
||||
.offset = 0x87,
|
||||
.reg = SYS_COUNT_DROP_YELLOW_PRIO_5,
|
||||
},
|
||||
[OCELOT_STAT_DROP_YELLOW_PRIO_6] = {
|
||||
.name = "drop_yellow_prio_6",
|
||||
.offset = 0x88,
|
||||
.reg = SYS_COUNT_DROP_YELLOW_PRIO_6,
|
||||
},
|
||||
[OCELOT_STAT_DROP_YELLOW_PRIO_7] = {
|
||||
.name = "drop_yellow_prio_7",
|
||||
.offset = 0x89,
|
||||
.reg = SYS_COUNT_DROP_YELLOW_PRIO_7,
|
||||
},
|
||||
[OCELOT_STAT_DROP_GREEN_PRIO_0] = {
|
||||
.name = "drop_green_prio_0",
|
||||
.offset = 0x8A,
|
||||
.reg = SYS_COUNT_DROP_GREEN_PRIO_0,
|
||||
},
|
||||
[OCELOT_STAT_DROP_GREEN_PRIO_1] = {
|
||||
.name = "drop_green_prio_1",
|
||||
.offset = 0x8B,
|
||||
.reg = SYS_COUNT_DROP_GREEN_PRIO_1,
|
||||
},
|
||||
[OCELOT_STAT_DROP_GREEN_PRIO_2] = {
|
||||
.name = "drop_green_prio_2",
|
||||
.offset = 0x8C,
|
||||
.reg = SYS_COUNT_DROP_GREEN_PRIO_2,
|
||||
},
|
||||
[OCELOT_STAT_DROP_GREEN_PRIO_3] = {
|
||||
.name = "drop_green_prio_3",
|
||||
.offset = 0x8D,
|
||||
.reg = SYS_COUNT_DROP_GREEN_PRIO_3,
|
||||
},
|
||||
[OCELOT_STAT_DROP_GREEN_PRIO_4] = {
|
||||
.name = "drop_green_prio_4",
|
||||
.offset = 0x8E,
|
||||
.reg = SYS_COUNT_DROP_GREEN_PRIO_4,
|
||||
},
|
||||
[OCELOT_STAT_DROP_GREEN_PRIO_5] = {
|
||||
.name = "drop_green_prio_5",
|
||||
.offset = 0x8F,
|
||||
.reg = SYS_COUNT_DROP_GREEN_PRIO_5,
|
||||
},
|
||||
[OCELOT_STAT_DROP_GREEN_PRIO_6] = {
|
||||
.name = "drop_green_prio_6",
|
||||
.offset = 0x90,
|
||||
.reg = SYS_COUNT_DROP_GREEN_PRIO_6,
|
||||
},
|
||||
[OCELOT_STAT_DROP_GREEN_PRIO_7] = {
|
||||
.name = "drop_green_prio_7",
|
||||
.offset = 0x91,
|
||||
.reg = SYS_COUNT_DROP_GREEN_PRIO_7,
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
@@ -188,6 +188,30 @@ const u32 vsc7514_sys_regmap[] = {
|
||||
REG(SYS_COUNT_RX_CONTROL, 0x000044),
|
||||
REG(SYS_COUNT_RX_LONGS, 0x000048),
|
||||
REG(SYS_COUNT_RX_CLASSIFIED_DROPS, 0x00004c),
|
||||
REG(SYS_COUNT_RX_RED_PRIO_0, 0x000050),
|
||||
REG(SYS_COUNT_RX_RED_PRIO_1, 0x000054),
|
||||
REG(SYS_COUNT_RX_RED_PRIO_2, 0x000058),
|
||||
REG(SYS_COUNT_RX_RED_PRIO_3, 0x00005c),
|
||||
REG(SYS_COUNT_RX_RED_PRIO_4, 0x000060),
|
||||
REG(SYS_COUNT_RX_RED_PRIO_5, 0x000064),
|
||||
REG(SYS_COUNT_RX_RED_PRIO_6, 0x000068),
|
||||
REG(SYS_COUNT_RX_RED_PRIO_7, 0x00006c),
|
||||
REG(SYS_COUNT_RX_YELLOW_PRIO_0, 0x000070),
|
||||
REG(SYS_COUNT_RX_YELLOW_PRIO_1, 0x000074),
|
||||
REG(SYS_COUNT_RX_YELLOW_PRIO_2, 0x000078),
|
||||
REG(SYS_COUNT_RX_YELLOW_PRIO_3, 0x00007c),
|
||||
REG(SYS_COUNT_RX_YELLOW_PRIO_4, 0x000080),
|
||||
REG(SYS_COUNT_RX_YELLOW_PRIO_5, 0x000084),
|
||||
REG(SYS_COUNT_RX_YELLOW_PRIO_6, 0x000088),
|
||||
REG(SYS_COUNT_RX_YELLOW_PRIO_7, 0x00008c),
|
||||
REG(SYS_COUNT_RX_GREEN_PRIO_0, 0x000090),
|
||||
REG(SYS_COUNT_RX_GREEN_PRIO_1, 0x000094),
|
||||
REG(SYS_COUNT_RX_GREEN_PRIO_2, 0x000098),
|
||||
REG(SYS_COUNT_RX_GREEN_PRIO_3, 0x00009c),
|
||||
REG(SYS_COUNT_RX_GREEN_PRIO_4, 0x0000a0),
|
||||
REG(SYS_COUNT_RX_GREEN_PRIO_5, 0x0000a4),
|
||||
REG(SYS_COUNT_RX_GREEN_PRIO_6, 0x0000a8),
|
||||
REG(SYS_COUNT_RX_GREEN_PRIO_7, 0x0000ac),
|
||||
REG(SYS_COUNT_TX_OCTETS, 0x000100),
|
||||
REG(SYS_COUNT_TX_UNICAST, 0x000104),
|
||||
REG(SYS_COUNT_TX_MULTICAST, 0x000108),
|
||||
@@ -202,7 +226,41 @@ const u32 vsc7514_sys_regmap[] = {
|
||||
REG(SYS_COUNT_TX_512_1023, 0x00012c),
|
||||
REG(SYS_COUNT_TX_1024_1526, 0x000130),
|
||||
REG(SYS_COUNT_TX_1527_MAX, 0x000134),
|
||||
REG(SYS_COUNT_TX_YELLOW_PRIO_0, 0x000138),
|
||||
REG(SYS_COUNT_TX_YELLOW_PRIO_1, 0x00013c),
|
||||
REG(SYS_COUNT_TX_YELLOW_PRIO_2, 0x000140),
|
||||
REG(SYS_COUNT_TX_YELLOW_PRIO_3, 0x000144),
|
||||
REG(SYS_COUNT_TX_YELLOW_PRIO_4, 0x000148),
|
||||
REG(SYS_COUNT_TX_YELLOW_PRIO_5, 0x00014c),
|
||||
REG(SYS_COUNT_TX_YELLOW_PRIO_6, 0x000150),
|
||||
REG(SYS_COUNT_TX_YELLOW_PRIO_7, 0x000154),
|
||||
REG(SYS_COUNT_TX_GREEN_PRIO_0, 0x000158),
|
||||
REG(SYS_COUNT_TX_GREEN_PRIO_1, 0x00015c),
|
||||
REG(SYS_COUNT_TX_GREEN_PRIO_2, 0x000160),
|
||||
REG(SYS_COUNT_TX_GREEN_PRIO_3, 0x000164),
|
||||
REG(SYS_COUNT_TX_GREEN_PRIO_4, 0x000168),
|
||||
REG(SYS_COUNT_TX_GREEN_PRIO_5, 0x00016c),
|
||||
REG(SYS_COUNT_TX_GREEN_PRIO_6, 0x000170),
|
||||
REG(SYS_COUNT_TX_GREEN_PRIO_7, 0x000174),
|
||||
REG(SYS_COUNT_TX_AGING, 0x000178),
|
||||
REG(SYS_COUNT_DROP_LOCAL, 0x000200),
|
||||
REG(SYS_COUNT_DROP_TAIL, 0x000204),
|
||||
REG(SYS_COUNT_DROP_YELLOW_PRIO_0, 0x000208),
|
||||
REG(SYS_COUNT_DROP_YELLOW_PRIO_1, 0x00020c),
|
||||
REG(SYS_COUNT_DROP_YELLOW_PRIO_2, 0x000210),
|
||||
REG(SYS_COUNT_DROP_YELLOW_PRIO_3, 0x000214),
|
||||
REG(SYS_COUNT_DROP_YELLOW_PRIO_4, 0x000218),
|
||||
REG(SYS_COUNT_DROP_YELLOW_PRIO_5, 0x00021c),
|
||||
REG(SYS_COUNT_DROP_YELLOW_PRIO_6, 0x000220),
|
||||
REG(SYS_COUNT_DROP_YELLOW_PRIO_7, 0x000214),
|
||||
REG(SYS_COUNT_DROP_GREEN_PRIO_0, 0x000218),
|
||||
REG(SYS_COUNT_DROP_GREEN_PRIO_1, 0x00021c),
|
||||
REG(SYS_COUNT_DROP_GREEN_PRIO_2, 0x000220),
|
||||
REG(SYS_COUNT_DROP_GREEN_PRIO_3, 0x000224),
|
||||
REG(SYS_COUNT_DROP_GREEN_PRIO_4, 0x000228),
|
||||
REG(SYS_COUNT_DROP_GREEN_PRIO_5, 0x00022c),
|
||||
REG(SYS_COUNT_DROP_GREEN_PRIO_6, 0x000230),
|
||||
REG(SYS_COUNT_DROP_GREEN_PRIO_7, 0x000234),
|
||||
REG(SYS_RESET_CFG, 0x000508),
|
||||
REG(SYS_CMID, 0x00050c),
|
||||
REG(SYS_VLAN_ETYPE_CFG, 0x000510),
|
||||
|
||||
@@ -338,6 +338,30 @@ enum ocelot_reg {
|
||||
SYS_COUNT_RX_CONTROL,
|
||||
SYS_COUNT_RX_LONGS,
|
||||
SYS_COUNT_RX_CLASSIFIED_DROPS,
|
||||
SYS_COUNT_RX_RED_PRIO_0,
|
||||
SYS_COUNT_RX_RED_PRIO_1,
|
||||
SYS_COUNT_RX_RED_PRIO_2,
|
||||
SYS_COUNT_RX_RED_PRIO_3,
|
||||
SYS_COUNT_RX_RED_PRIO_4,
|
||||
SYS_COUNT_RX_RED_PRIO_5,
|
||||
SYS_COUNT_RX_RED_PRIO_6,
|
||||
SYS_COUNT_RX_RED_PRIO_7,
|
||||
SYS_COUNT_RX_YELLOW_PRIO_0,
|
||||
SYS_COUNT_RX_YELLOW_PRIO_1,
|
||||
SYS_COUNT_RX_YELLOW_PRIO_2,
|
||||
SYS_COUNT_RX_YELLOW_PRIO_3,
|
||||
SYS_COUNT_RX_YELLOW_PRIO_4,
|
||||
SYS_COUNT_RX_YELLOW_PRIO_5,
|
||||
SYS_COUNT_RX_YELLOW_PRIO_6,
|
||||
SYS_COUNT_RX_YELLOW_PRIO_7,
|
||||
SYS_COUNT_RX_GREEN_PRIO_0,
|
||||
SYS_COUNT_RX_GREEN_PRIO_1,
|
||||
SYS_COUNT_RX_GREEN_PRIO_2,
|
||||
SYS_COUNT_RX_GREEN_PRIO_3,
|
||||
SYS_COUNT_RX_GREEN_PRIO_4,
|
||||
SYS_COUNT_RX_GREEN_PRIO_5,
|
||||
SYS_COUNT_RX_GREEN_PRIO_6,
|
||||
SYS_COUNT_RX_GREEN_PRIO_7,
|
||||
SYS_COUNT_TX_OCTETS,
|
||||
SYS_COUNT_TX_UNICAST,
|
||||
SYS_COUNT_TX_MULTICAST,
|
||||
@@ -352,7 +376,41 @@ enum ocelot_reg {
|
||||
SYS_COUNT_TX_512_1023,
|
||||
SYS_COUNT_TX_1024_1526,
|
||||
SYS_COUNT_TX_1527_MAX,
|
||||
SYS_COUNT_TX_YELLOW_PRIO_0,
|
||||
SYS_COUNT_TX_YELLOW_PRIO_1,
|
||||
SYS_COUNT_TX_YELLOW_PRIO_2,
|
||||
SYS_COUNT_TX_YELLOW_PRIO_3,
|
||||
SYS_COUNT_TX_YELLOW_PRIO_4,
|
||||
SYS_COUNT_TX_YELLOW_PRIO_5,
|
||||
SYS_COUNT_TX_YELLOW_PRIO_6,
|
||||
SYS_COUNT_TX_YELLOW_PRIO_7,
|
||||
SYS_COUNT_TX_GREEN_PRIO_0,
|
||||
SYS_COUNT_TX_GREEN_PRIO_1,
|
||||
SYS_COUNT_TX_GREEN_PRIO_2,
|
||||
SYS_COUNT_TX_GREEN_PRIO_3,
|
||||
SYS_COUNT_TX_GREEN_PRIO_4,
|
||||
SYS_COUNT_TX_GREEN_PRIO_5,
|
||||
SYS_COUNT_TX_GREEN_PRIO_6,
|
||||
SYS_COUNT_TX_GREEN_PRIO_7,
|
||||
SYS_COUNT_TX_AGING,
|
||||
SYS_COUNT_DROP_LOCAL,
|
||||
SYS_COUNT_DROP_TAIL,
|
||||
SYS_COUNT_DROP_YELLOW_PRIO_0,
|
||||
SYS_COUNT_DROP_YELLOW_PRIO_1,
|
||||
SYS_COUNT_DROP_YELLOW_PRIO_2,
|
||||
SYS_COUNT_DROP_YELLOW_PRIO_3,
|
||||
SYS_COUNT_DROP_YELLOW_PRIO_4,
|
||||
SYS_COUNT_DROP_YELLOW_PRIO_5,
|
||||
SYS_COUNT_DROP_YELLOW_PRIO_6,
|
||||
SYS_COUNT_DROP_YELLOW_PRIO_7,
|
||||
SYS_COUNT_DROP_GREEN_PRIO_0,
|
||||
SYS_COUNT_DROP_GREEN_PRIO_1,
|
||||
SYS_COUNT_DROP_GREEN_PRIO_2,
|
||||
SYS_COUNT_DROP_GREEN_PRIO_3,
|
||||
SYS_COUNT_DROP_GREEN_PRIO_4,
|
||||
SYS_COUNT_DROP_GREEN_PRIO_5,
|
||||
SYS_COUNT_DROP_GREEN_PRIO_6,
|
||||
SYS_COUNT_DROP_GREEN_PRIO_7,
|
||||
SYS_RESET_CFG,
|
||||
SYS_SR_ETYPE_CFG,
|
||||
SYS_VLAN_ETYPE_CFG,
|
||||
@@ -633,13 +691,13 @@ enum ocelot_stat {
|
||||
};
|
||||
|
||||
struct ocelot_stat_layout {
|
||||
u32 offset;
|
||||
u32 reg;
|
||||
char name[ETH_GSTRING_LEN];
|
||||
};
|
||||
|
||||
struct ocelot_stats_region {
|
||||
struct list_head node;
|
||||
u32 offset;
|
||||
u32 base;
|
||||
int count;
|
||||
u32 *buf;
|
||||
};
|
||||
@@ -877,8 +935,8 @@ struct ocelot_policer {
|
||||
u32 burst; /* bytes */
|
||||
};
|
||||
|
||||
#define ocelot_bulk_read_rix(ocelot, reg, ri, buf, count) \
|
||||
__ocelot_bulk_read_ix(ocelot, reg, reg##_RSZ * (ri), buf, count)
|
||||
#define ocelot_bulk_read(ocelot, reg, buf, count) \
|
||||
__ocelot_bulk_read_ix(ocelot, reg, 0, buf, count)
|
||||
|
||||
#define ocelot_read_ix(ocelot, reg, gi, ri) \
|
||||
__ocelot_read_ix(ocelot, reg, reg##_GSZ * (gi) + reg##_RSZ * (ri))
|
||||
|
||||
Reference in New Issue
Block a user