diff options
| author | Dmitry Torokhov <[email protected]> | 2023-08-30 16:06:38 -0700 | 
|---|---|---|
| committer | Dmitry Torokhov <[email protected]> | 2023-08-30 16:06:38 -0700 | 
| commit | 1ac731c529cd4d6adbce134754b51ff7d822b145 (patch) | |
| tree | 143ab3f35ca5f3b69f583c84e6964b17139c2ec1 /drivers/net/ethernet/microchip/lan966x/lan966x_vcap_debugfs.c | |
| parent | 07b4c950f27bef0362dc6ad7ee713aab61d58149 (diff) | |
| parent | 54116d442e001e1b6bd482122043b1870998a1f3 (diff) | |
Merge branch 'next' into for-linus
Prepare input updates for 6.6 merge window.
Diffstat (limited to 'drivers/net/ethernet/microchip/lan966x/lan966x_vcap_debugfs.c')
| -rw-r--r-- | drivers/net/ethernet/microchip/lan966x/lan966x_vcap_debugfs.c | 133 | 
1 files changed, 129 insertions, 4 deletions
diff --git a/drivers/net/ethernet/microchip/lan966x/lan966x_vcap_debugfs.c b/drivers/net/ethernet/microchip/lan966x/lan966x_vcap_debugfs.c index 7a0db58f5513..d90c08cfcf14 100644 --- a/drivers/net/ethernet/microchip/lan966x/lan966x_vcap_debugfs.c +++ b/drivers/net/ethernet/microchip/lan966x/lan966x_vcap_debugfs.c @@ -5,9 +5,124 @@  #include "vcap_api.h"  #include "vcap_api_client.h" -static void lan966x_vcap_port_keys(struct lan966x_port *port, -				   struct vcap_admin *admin, -				   struct vcap_output_print *out) +static void lan966x_vcap_is1_port_keys(struct lan966x_port *port, +				       struct vcap_admin *admin, +				       struct vcap_output_print *out) +{ +	struct lan966x *lan966x = port->lan966x; +	u32 val; + +	out->prf(out->dst, "  port[%d] (%s): ", port->chip_port, +		 netdev_name(port->dev)); + +	val = lan_rd(lan966x, ANA_VCAP_CFG(port->chip_port)); +	out->prf(out->dst, "\n    state: "); +	if (ANA_VCAP_CFG_S1_ENA_GET(val)) +		out->prf(out->dst, "on"); +	else +		out->prf(out->dst, "off"); + +	for (int l = 0; l < admin->lookups; ++l) { +		out->prf(out->dst, "\n    Lookup %d: ", l); + +		out->prf(out->dst, "\n      other: "); +		switch (ANA_VCAP_S1_CFG_KEY_OTHER_CFG_GET(val)) { +		case VCAP_IS1_PS_OTHER_NORMAL: +			out->prf(out->dst, "normal"); +			break; +		case VCAP_IS1_PS_OTHER_7TUPLE: +			out->prf(out->dst, "7tuple"); +			break; +		case VCAP_IS1_PS_OTHER_DBL_VID: +			out->prf(out->dst, "dbl_vid"); +			break; +		case VCAP_IS1_PS_OTHER_DMAC_VID: +			out->prf(out->dst, "dmac_vid"); +			break; +		default: +			out->prf(out->dst, "-"); +			break; +		} + +		out->prf(out->dst, "\n      ipv4: "); +		switch (ANA_VCAP_S1_CFG_KEY_IP4_CFG_GET(val)) { +		case VCAP_IS1_PS_IPV4_NORMAL: +			out->prf(out->dst, "normal"); +			break; +		case VCAP_IS1_PS_IPV4_7TUPLE: +			out->prf(out->dst, "7tuple"); +			break; +		case VCAP_IS1_PS_IPV4_5TUPLE_IP4: +			out->prf(out->dst, "5tuple_ipv4"); +			break; +		case VCAP_IS1_PS_IPV4_DBL_VID: +			out->prf(out->dst, "dbl_vid"); +			break; +		case VCAP_IS1_PS_IPV4_DMAC_VID: +			out->prf(out->dst, "dmac_vid"); +			break; +		default: +			out->prf(out->dst, "-"); +			break; +		} + +		out->prf(out->dst, "\n      ipv6: "); +		switch (ANA_VCAP_S1_CFG_KEY_IP6_CFG_GET(val)) { +		case VCAP_IS1_PS_IPV6_NORMAL: +			out->prf(out->dst, "normal"); +			break; +		case VCAP_IS1_PS_IPV6_7TUPLE: +			out->prf(out->dst, "7tuple"); +			break; +		case VCAP_IS1_PS_IPV6_5TUPLE_IP4: +			out->prf(out->dst, "5tuple_ip4"); +			break; +		case VCAP_IS1_PS_IPV6_NORMAL_IP6: +			out->prf(out->dst, "normal_ip6"); +			break; +		case VCAP_IS1_PS_IPV6_5TUPLE_IP6: +			out->prf(out->dst, "5tuple_ip6"); +			break; +		case VCAP_IS1_PS_IPV6_DBL_VID: +			out->prf(out->dst, "dbl_vid"); +			break; +		case VCAP_IS1_PS_IPV6_DMAC_VID: +			out->prf(out->dst, "dmac_vid"); +			break; +		default: +			out->prf(out->dst, "-"); +			break; +		} + +		out->prf(out->dst, "\n      rt: "); +		switch (ANA_VCAP_S1_CFG_KEY_RT_CFG_GET(val)) { +		case VCAP_IS1_PS_RT_NORMAL: +			out->prf(out->dst, "normal"); +			break; +		case VCAP_IS1_PS_RT_7TUPLE: +			out->prf(out->dst, "7tuple"); +			break; +		case VCAP_IS1_PS_RT_DBL_VID: +			out->prf(out->dst, "dbl_vid"); +			break; +		case VCAP_IS1_PS_RT_DMAC_VID: +			out->prf(out->dst, "dmac_vid"); +			break; +		case VCAP_IS1_PS_RT_FOLLOW_OTHER: +			out->prf(out->dst, "follow_other"); +			break; +		default: +			out->prf(out->dst, "-"); +			break; +		} +	} + +	out->prf(out->dst, "\n"); +} + +static void lan966x_vcap_is2_port_keys(struct lan966x_port *port, +				       struct vcap_admin *admin, +				       struct vcap_output_print *out)  {  	struct lan966x *lan966x = port->lan966x;  	u32 val; @@ -88,7 +203,17 @@ int lan966x_vcap_port_info(struct net_device *dev,  	vcap = &vctrl->vcaps[admin->vtype];  	out->prf(out->dst, "%s:\n", vcap->name); -	lan966x_vcap_port_keys(port, admin, out); +	switch (admin->vtype) { +	case VCAP_TYPE_IS2: +		lan966x_vcap_is2_port_keys(port, admin, out); +		break; +	case VCAP_TYPE_IS1: +		lan966x_vcap_is1_port_keys(port, admin, out); +		break; +	default: +		out->prf(out->dst, "  no info\n"); +		break; +	}  	return 0;  }  |