Commit e6ae7c50 authored by Xiaoliang Yang's avatar Xiaoliang Yang Committed by David S. Miller

net: mscc: ocelot: calculate vcap offsets correctly for full and quarter entries

When calculating the offsets for the current entry within the row and
placing them inside struct vcap_data, the function assumes half key
entry (2 keys per row).

This patch modifies the vcap_data_offset_get() function to calculate a
correct data offset when the setting VCAP Type-Group of a key to
VCAP_TG_FULL or VCAP_TG_QUARTER.

This is needed because, for example, VCAP ES0 only supports full keys.

Also rename the 'count' variable to 'num_entries_per_row' to make the
function just one tiny bit easier to follow.
Signed-off-by: default avatarXiaoliang Yang <xiaoliang.yang_1@nxp.com>
Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 7a155fa3
...@@ -177,8 +177,21 @@ static void vcap_data_offset_get(const struct vcap_props *vcap, ...@@ -177,8 +177,21 @@ static void vcap_data_offset_get(const struct vcap_props *vcap,
int i, col, offset, count, cnt, base; int i, col, offset, count, cnt, base;
u32 width = vcap->tg_width; u32 width = vcap->tg_width;
count = (data->tg_sw == VCAP_TG_HALF ? 2 : 4); switch (data->tg_sw) {
col = (ix % 2); case VCAP_TG_FULL:
count = 1;
break;
case VCAP_TG_HALF:
count = 2;
break;
case VCAP_TG_QUARTER:
count = 4;
break;
default:
return;
}
col = (ix % count);
cnt = (vcap->sw_count / count); cnt = (vcap->sw_count / count);
base = (vcap->sw_count - col * cnt - cnt); base = (vcap->sw_count - col * cnt - cnt);
data->tg_value = 0; data->tg_value = 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment