162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0+
262306a36Sopenharmony_ci
362306a36Sopenharmony_ci#include "lan966x_main.h"
462306a36Sopenharmony_ci
562306a36Sopenharmony_cienum lan966x_dcb_apptrust_values {
662306a36Sopenharmony_ci	LAN966X_DCB_APPTRUST_EMPTY,
762306a36Sopenharmony_ci	LAN966X_DCB_APPTRUST_DSCP,
862306a36Sopenharmony_ci	LAN966X_DCB_APPTRUST_PCP,
962306a36Sopenharmony_ci	LAN966X_DCB_APPTRUST_DSCP_PCP,
1062306a36Sopenharmony_ci	__LAN966X_DCB_APPTRUST_MAX
1162306a36Sopenharmony_ci};
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_cistatic const struct lan966x_dcb_apptrust {
1462306a36Sopenharmony_ci	u8 selectors[IEEE_8021QAZ_APP_SEL_MAX + 1];
1562306a36Sopenharmony_ci	int nselectors;
1662306a36Sopenharmony_ci} *lan966x_port_apptrust[NUM_PHYS_PORTS];
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_cistatic const char *lan966x_dcb_apptrust_names[__LAN966X_DCB_APPTRUST_MAX] = {
1962306a36Sopenharmony_ci	[LAN966X_DCB_APPTRUST_EMPTY]    = "empty",
2062306a36Sopenharmony_ci	[LAN966X_DCB_APPTRUST_DSCP]     = "dscp",
2162306a36Sopenharmony_ci	[LAN966X_DCB_APPTRUST_PCP]      = "pcp",
2262306a36Sopenharmony_ci	[LAN966X_DCB_APPTRUST_DSCP_PCP] = "dscp pcp"
2362306a36Sopenharmony_ci};
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_ci/* Lan966x supported apptrust policies */
2662306a36Sopenharmony_cistatic const struct lan966x_dcb_apptrust
2762306a36Sopenharmony_ci	lan966x_dcb_apptrust_policies[__LAN966X_DCB_APPTRUST_MAX] = {
2862306a36Sopenharmony_ci	/* Empty *must* be first */
2962306a36Sopenharmony_ci	[LAN966X_DCB_APPTRUST_EMPTY]    = { { 0 }, 0 },
3062306a36Sopenharmony_ci	[LAN966X_DCB_APPTRUST_DSCP]     = { { IEEE_8021QAZ_APP_SEL_DSCP }, 1 },
3162306a36Sopenharmony_ci	[LAN966X_DCB_APPTRUST_PCP]      = { { DCB_APP_SEL_PCP }, 1 },
3262306a36Sopenharmony_ci	[LAN966X_DCB_APPTRUST_DSCP_PCP] = { { IEEE_8021QAZ_APP_SEL_DSCP,
3362306a36Sopenharmony_ci					      DCB_APP_SEL_PCP }, 2 },
3462306a36Sopenharmony_ci};
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_cistatic bool lan966x_dcb_apptrust_contains(int portno, u8 selector)
3762306a36Sopenharmony_ci{
3862306a36Sopenharmony_ci	const struct lan966x_dcb_apptrust *conf = lan966x_port_apptrust[portno];
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ci	for (int i = 0; i < conf->nselectors; i++)
4162306a36Sopenharmony_ci		if (conf->selectors[i] == selector)
4262306a36Sopenharmony_ci			return true;
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ci	return false;
4562306a36Sopenharmony_ci}
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_cistatic void lan966x_dcb_app_update(struct net_device *dev)
4862306a36Sopenharmony_ci{
4962306a36Sopenharmony_ci	struct dcb_ieee_app_prio_map dscp_rewr_map = {0};
5062306a36Sopenharmony_ci	struct dcb_rewr_prio_pcp_map pcp_rewr_map = {0};
5162306a36Sopenharmony_ci	struct lan966x_port *port = netdev_priv(dev);
5262306a36Sopenharmony_ci	struct lan966x_port_qos qos = {0};
5362306a36Sopenharmony_ci	struct dcb_app app_itr;
5462306a36Sopenharmony_ci	bool dscp_rewr = false;
5562306a36Sopenharmony_ci	bool pcp_rewr = false;
5662306a36Sopenharmony_ci
5762306a36Sopenharmony_ci	/* Get pcp ingress mapping */
5862306a36Sopenharmony_ci	for (int i = 0; i < ARRAY_SIZE(qos.pcp.map); i++) {
5962306a36Sopenharmony_ci		app_itr.selector = DCB_APP_SEL_PCP;
6062306a36Sopenharmony_ci		app_itr.protocol = i;
6162306a36Sopenharmony_ci		qos.pcp.map[i] = dcb_getapp(dev, &app_itr);
6262306a36Sopenharmony_ci	}
6362306a36Sopenharmony_ci
6462306a36Sopenharmony_ci	/* Get dscp ingress mapping */
6562306a36Sopenharmony_ci	for (int i = 0; i < ARRAY_SIZE(qos.dscp.map); i++) {
6662306a36Sopenharmony_ci		app_itr.selector = IEEE_8021QAZ_APP_SEL_DSCP;
6762306a36Sopenharmony_ci		app_itr.protocol = i;
6862306a36Sopenharmony_ci		qos.dscp.map[i] = dcb_getapp(dev, &app_itr);
6962306a36Sopenharmony_ci	}
7062306a36Sopenharmony_ci
7162306a36Sopenharmony_ci	/* Get default prio */
7262306a36Sopenharmony_ci	qos.default_prio = dcb_ieee_getapp_default_prio_mask(dev);
7362306a36Sopenharmony_ci	if (qos.default_prio)
7462306a36Sopenharmony_ci		qos.default_prio = fls(qos.default_prio) - 1;
7562306a36Sopenharmony_ci
7662306a36Sopenharmony_ci	/* Get pcp rewrite mapping */
7762306a36Sopenharmony_ci	dcb_getrewr_prio_pcp_mask_map(dev, &pcp_rewr_map);
7862306a36Sopenharmony_ci	for (int i = 0; i < ARRAY_SIZE(pcp_rewr_map.map); i++) {
7962306a36Sopenharmony_ci		if (!pcp_rewr_map.map[i])
8062306a36Sopenharmony_ci			continue;
8162306a36Sopenharmony_ci
8262306a36Sopenharmony_ci		pcp_rewr = true;
8362306a36Sopenharmony_ci		qos.pcp_rewr.map[i] = fls(pcp_rewr_map.map[i]) - 1;
8462306a36Sopenharmony_ci	}
8562306a36Sopenharmony_ci
8662306a36Sopenharmony_ci	/* Get dscp rewrite mapping */
8762306a36Sopenharmony_ci	dcb_getrewr_prio_dscp_mask_map(dev, &dscp_rewr_map);
8862306a36Sopenharmony_ci	for (int i = 0; i < ARRAY_SIZE(dscp_rewr_map.map); i++) {
8962306a36Sopenharmony_ci		if (!dscp_rewr_map.map[i])
9062306a36Sopenharmony_ci			continue;
9162306a36Sopenharmony_ci
9262306a36Sopenharmony_ci		dscp_rewr = true;
9362306a36Sopenharmony_ci		qos.dscp_rewr.map[i] = fls64(dscp_rewr_map.map[i]) - 1;
9462306a36Sopenharmony_ci	}
9562306a36Sopenharmony_ci
9662306a36Sopenharmony_ci	/* Enable use of pcp for queue classification */
9762306a36Sopenharmony_ci	if (lan966x_dcb_apptrust_contains(port->chip_port, DCB_APP_SEL_PCP)) {
9862306a36Sopenharmony_ci		qos.pcp.enable = true;
9962306a36Sopenharmony_ci
10062306a36Sopenharmony_ci		if (pcp_rewr)
10162306a36Sopenharmony_ci			qos.pcp_rewr.enable = true;
10262306a36Sopenharmony_ci	}
10362306a36Sopenharmony_ci
10462306a36Sopenharmony_ci	/* Enable use of dscp for queue classification */
10562306a36Sopenharmony_ci	if (lan966x_dcb_apptrust_contains(port->chip_port, IEEE_8021QAZ_APP_SEL_DSCP)) {
10662306a36Sopenharmony_ci		qos.dscp.enable = true;
10762306a36Sopenharmony_ci
10862306a36Sopenharmony_ci		if (dscp_rewr)
10962306a36Sopenharmony_ci			qos.dscp_rewr.enable = true;
11062306a36Sopenharmony_ci	}
11162306a36Sopenharmony_ci
11262306a36Sopenharmony_ci	lan966x_port_qos_set(port, &qos);
11362306a36Sopenharmony_ci}
11462306a36Sopenharmony_ci
11562306a36Sopenharmony_ci/* DSCP mapping is global for all ports, so set and delete app entries are
11662306a36Sopenharmony_ci * replicated for each port.
11762306a36Sopenharmony_ci */
11862306a36Sopenharmony_cistatic int lan966x_dcb_ieee_dscp_setdel(struct net_device *dev,
11962306a36Sopenharmony_ci					struct dcb_app *app,
12062306a36Sopenharmony_ci					int (*setdel)(struct net_device *,
12162306a36Sopenharmony_ci						      struct dcb_app *))
12262306a36Sopenharmony_ci{
12362306a36Sopenharmony_ci	struct lan966x_port *port = netdev_priv(dev);
12462306a36Sopenharmony_ci	struct lan966x *lan966x = port->lan966x;
12562306a36Sopenharmony_ci	int err;
12662306a36Sopenharmony_ci
12762306a36Sopenharmony_ci	for (int i = 0; i < NUM_PHYS_PORTS; i++) {
12862306a36Sopenharmony_ci		port = lan966x->ports[i];
12962306a36Sopenharmony_ci		if (!port)
13062306a36Sopenharmony_ci			continue;
13162306a36Sopenharmony_ci
13262306a36Sopenharmony_ci		err = setdel(port->dev, app);
13362306a36Sopenharmony_ci		if (err)
13462306a36Sopenharmony_ci			return err;
13562306a36Sopenharmony_ci	}
13662306a36Sopenharmony_ci
13762306a36Sopenharmony_ci	return 0;
13862306a36Sopenharmony_ci}
13962306a36Sopenharmony_ci
14062306a36Sopenharmony_cistatic int lan966x_dcb_app_validate(struct net_device *dev,
14162306a36Sopenharmony_ci				    const struct dcb_app *app)
14262306a36Sopenharmony_ci{
14362306a36Sopenharmony_ci	int err = 0;
14462306a36Sopenharmony_ci
14562306a36Sopenharmony_ci	switch (app->selector) {
14662306a36Sopenharmony_ci	/* Default priority checks */
14762306a36Sopenharmony_ci	case IEEE_8021QAZ_APP_SEL_ETHERTYPE:
14862306a36Sopenharmony_ci		if (app->protocol)
14962306a36Sopenharmony_ci			err = -EINVAL;
15062306a36Sopenharmony_ci		else if (app->priority >= NUM_PRIO_QUEUES)
15162306a36Sopenharmony_ci			err = -ERANGE;
15262306a36Sopenharmony_ci		break;
15362306a36Sopenharmony_ci	/* Dscp checks */
15462306a36Sopenharmony_ci	case IEEE_8021QAZ_APP_SEL_DSCP:
15562306a36Sopenharmony_ci		if (app->protocol >= LAN966X_PORT_QOS_DSCP_COUNT)
15662306a36Sopenharmony_ci			err = -EINVAL;
15762306a36Sopenharmony_ci		else if (app->priority >= NUM_PRIO_QUEUES)
15862306a36Sopenharmony_ci			err = -ERANGE;
15962306a36Sopenharmony_ci		break;
16062306a36Sopenharmony_ci	/* Pcp checks */
16162306a36Sopenharmony_ci	case DCB_APP_SEL_PCP:
16262306a36Sopenharmony_ci		if (app->protocol >= LAN966X_PORT_QOS_PCP_DEI_COUNT)
16362306a36Sopenharmony_ci			err = -EINVAL;
16462306a36Sopenharmony_ci		else if (app->priority >= NUM_PRIO_QUEUES)
16562306a36Sopenharmony_ci			err = -ERANGE;
16662306a36Sopenharmony_ci		break;
16762306a36Sopenharmony_ci	default:
16862306a36Sopenharmony_ci		err = -EINVAL;
16962306a36Sopenharmony_ci		break;
17062306a36Sopenharmony_ci	}
17162306a36Sopenharmony_ci
17262306a36Sopenharmony_ci	if (err)
17362306a36Sopenharmony_ci		netdev_err(dev, "Invalid entry: %d:%d\n", app->protocol,
17462306a36Sopenharmony_ci			   app->priority);
17562306a36Sopenharmony_ci
17662306a36Sopenharmony_ci	return err;
17762306a36Sopenharmony_ci}
17862306a36Sopenharmony_ci
17962306a36Sopenharmony_cistatic int lan966x_dcb_ieee_delapp(struct net_device *dev, struct dcb_app *app)
18062306a36Sopenharmony_ci{
18162306a36Sopenharmony_ci	int err;
18262306a36Sopenharmony_ci
18362306a36Sopenharmony_ci	if (app->selector == IEEE_8021QAZ_APP_SEL_DSCP)
18462306a36Sopenharmony_ci		err = lan966x_dcb_ieee_dscp_setdel(dev, app, dcb_ieee_delapp);
18562306a36Sopenharmony_ci	else
18662306a36Sopenharmony_ci		err = dcb_ieee_delapp(dev, app);
18762306a36Sopenharmony_ci
18862306a36Sopenharmony_ci	if (err)
18962306a36Sopenharmony_ci		return err;
19062306a36Sopenharmony_ci
19162306a36Sopenharmony_ci	lan966x_dcb_app_update(dev);
19262306a36Sopenharmony_ci
19362306a36Sopenharmony_ci	return 0;
19462306a36Sopenharmony_ci}
19562306a36Sopenharmony_ci
19662306a36Sopenharmony_cistatic int lan966x_dcb_ieee_setapp(struct net_device *dev, struct dcb_app *app)
19762306a36Sopenharmony_ci{
19862306a36Sopenharmony_ci	struct dcb_app app_itr;
19962306a36Sopenharmony_ci	int err;
20062306a36Sopenharmony_ci	u8 prio;
20162306a36Sopenharmony_ci
20262306a36Sopenharmony_ci	err = lan966x_dcb_app_validate(dev, app);
20362306a36Sopenharmony_ci	if (err)
20462306a36Sopenharmony_ci		return err;
20562306a36Sopenharmony_ci
20662306a36Sopenharmony_ci	/* Delete current mapping, if it exists */
20762306a36Sopenharmony_ci	prio = dcb_getapp(dev, app);
20862306a36Sopenharmony_ci	if (prio) {
20962306a36Sopenharmony_ci		app_itr = *app;
21062306a36Sopenharmony_ci		app_itr.priority = prio;
21162306a36Sopenharmony_ci		lan966x_dcb_ieee_delapp(dev, &app_itr);
21262306a36Sopenharmony_ci	}
21362306a36Sopenharmony_ci
21462306a36Sopenharmony_ci	if (app->selector == IEEE_8021QAZ_APP_SEL_DSCP)
21562306a36Sopenharmony_ci		err = lan966x_dcb_ieee_dscp_setdel(dev, app, dcb_ieee_setapp);
21662306a36Sopenharmony_ci	else
21762306a36Sopenharmony_ci		err = dcb_ieee_setapp(dev, app);
21862306a36Sopenharmony_ci
21962306a36Sopenharmony_ci	if (err)
22062306a36Sopenharmony_ci		return err;
22162306a36Sopenharmony_ci
22262306a36Sopenharmony_ci	lan966x_dcb_app_update(dev);
22362306a36Sopenharmony_ci
22462306a36Sopenharmony_ci	return 0;
22562306a36Sopenharmony_ci}
22662306a36Sopenharmony_ci
22762306a36Sopenharmony_cistatic int lan966x_dcb_apptrust_validate(struct net_device *dev,
22862306a36Sopenharmony_ci					 u8 *selectors,
22962306a36Sopenharmony_ci					 int nselectors)
23062306a36Sopenharmony_ci{
23162306a36Sopenharmony_ci	for (int i = 0; i < ARRAY_SIZE(lan966x_dcb_apptrust_policies); i++) {
23262306a36Sopenharmony_ci		bool match;
23362306a36Sopenharmony_ci
23462306a36Sopenharmony_ci		if (lan966x_dcb_apptrust_policies[i].nselectors != nselectors)
23562306a36Sopenharmony_ci			continue;
23662306a36Sopenharmony_ci
23762306a36Sopenharmony_ci		match = true;
23862306a36Sopenharmony_ci		for (int j = 0; j < nselectors; j++) {
23962306a36Sopenharmony_ci			if (lan966x_dcb_apptrust_policies[i].selectors[j] !=
24062306a36Sopenharmony_ci			    *(selectors + j)) {
24162306a36Sopenharmony_ci				match = false;
24262306a36Sopenharmony_ci				break;
24362306a36Sopenharmony_ci			}
24462306a36Sopenharmony_ci		}
24562306a36Sopenharmony_ci		if (match)
24662306a36Sopenharmony_ci			return i;
24762306a36Sopenharmony_ci	}
24862306a36Sopenharmony_ci
24962306a36Sopenharmony_ci	netdev_err(dev, "Valid apptrust configurations are:\n");
25062306a36Sopenharmony_ci	for (int i = 0; i < ARRAY_SIZE(lan966x_dcb_apptrust_names); i++)
25162306a36Sopenharmony_ci		pr_info("order: %s\n", lan966x_dcb_apptrust_names[i]);
25262306a36Sopenharmony_ci
25362306a36Sopenharmony_ci	return -EOPNOTSUPP;
25462306a36Sopenharmony_ci}
25562306a36Sopenharmony_ci
25662306a36Sopenharmony_cistatic int lan966x_dcb_setapptrust(struct net_device *dev,
25762306a36Sopenharmony_ci				   u8 *selectors,
25862306a36Sopenharmony_ci				   int nselectors)
25962306a36Sopenharmony_ci{
26062306a36Sopenharmony_ci	struct lan966x_port *port = netdev_priv(dev);
26162306a36Sopenharmony_ci	int idx;
26262306a36Sopenharmony_ci
26362306a36Sopenharmony_ci	idx = lan966x_dcb_apptrust_validate(dev, selectors, nselectors);
26462306a36Sopenharmony_ci	if (idx < 0)
26562306a36Sopenharmony_ci		return idx;
26662306a36Sopenharmony_ci
26762306a36Sopenharmony_ci	lan966x_port_apptrust[port->chip_port] = &lan966x_dcb_apptrust_policies[idx];
26862306a36Sopenharmony_ci	lan966x_dcb_app_update(dev);
26962306a36Sopenharmony_ci
27062306a36Sopenharmony_ci	return 0;
27162306a36Sopenharmony_ci}
27262306a36Sopenharmony_ci
27362306a36Sopenharmony_cistatic int lan966x_dcb_getapptrust(struct net_device *dev, u8 *selectors,
27462306a36Sopenharmony_ci				   int *nselectors)
27562306a36Sopenharmony_ci{
27662306a36Sopenharmony_ci	struct lan966x_port *port = netdev_priv(dev);
27762306a36Sopenharmony_ci	const struct lan966x_dcb_apptrust *trust;
27862306a36Sopenharmony_ci
27962306a36Sopenharmony_ci	trust = lan966x_port_apptrust[port->chip_port];
28062306a36Sopenharmony_ci
28162306a36Sopenharmony_ci	memcpy(selectors, trust->selectors, trust->nselectors);
28262306a36Sopenharmony_ci	*nselectors = trust->nselectors;
28362306a36Sopenharmony_ci
28462306a36Sopenharmony_ci	return 0;
28562306a36Sopenharmony_ci}
28662306a36Sopenharmony_ci
28762306a36Sopenharmony_cistatic int lan966x_dcb_delrewr(struct net_device *dev, struct dcb_app *app)
28862306a36Sopenharmony_ci{
28962306a36Sopenharmony_ci	int err;
29062306a36Sopenharmony_ci
29162306a36Sopenharmony_ci	if (app->selector == IEEE_8021QAZ_APP_SEL_DSCP)
29262306a36Sopenharmony_ci		err = lan966x_dcb_ieee_dscp_setdel(dev, app, dcb_delrewr);
29362306a36Sopenharmony_ci	else
29462306a36Sopenharmony_ci		err = dcb_delrewr(dev, app);
29562306a36Sopenharmony_ci
29662306a36Sopenharmony_ci	if (err < 0)
29762306a36Sopenharmony_ci		return err;
29862306a36Sopenharmony_ci
29962306a36Sopenharmony_ci	lan966x_dcb_app_update(dev);
30062306a36Sopenharmony_ci
30162306a36Sopenharmony_ci	return 0;
30262306a36Sopenharmony_ci}
30362306a36Sopenharmony_ci
30462306a36Sopenharmony_cistatic int lan966x_dcb_setrewr(struct net_device *dev, struct dcb_app *app)
30562306a36Sopenharmony_ci{
30662306a36Sopenharmony_ci	struct dcb_app app_itr;
30762306a36Sopenharmony_ci	u16 proto;
30862306a36Sopenharmony_ci	int err;
30962306a36Sopenharmony_ci
31062306a36Sopenharmony_ci	err = lan966x_dcb_app_validate(dev, app);
31162306a36Sopenharmony_ci	if (err)
31262306a36Sopenharmony_ci		goto out;
31362306a36Sopenharmony_ci
31462306a36Sopenharmony_ci	/* Delete current mapping, if it exists. */
31562306a36Sopenharmony_ci	proto = dcb_getrewr(dev, app);
31662306a36Sopenharmony_ci	if (proto) {
31762306a36Sopenharmony_ci		app_itr = *app;
31862306a36Sopenharmony_ci		app_itr.protocol = proto;
31962306a36Sopenharmony_ci		lan966x_dcb_delrewr(dev, &app_itr);
32062306a36Sopenharmony_ci	}
32162306a36Sopenharmony_ci
32262306a36Sopenharmony_ci	if (app->selector == IEEE_8021QAZ_APP_SEL_DSCP)
32362306a36Sopenharmony_ci		err = lan966x_dcb_ieee_dscp_setdel(dev, app, dcb_setrewr);
32462306a36Sopenharmony_ci	else
32562306a36Sopenharmony_ci		err = dcb_setrewr(dev, app);
32662306a36Sopenharmony_ci
32762306a36Sopenharmony_ci	if (err)
32862306a36Sopenharmony_ci		goto out;
32962306a36Sopenharmony_ci
33062306a36Sopenharmony_ci	lan966x_dcb_app_update(dev);
33162306a36Sopenharmony_ci
33262306a36Sopenharmony_ciout:
33362306a36Sopenharmony_ci	return err;
33462306a36Sopenharmony_ci}
33562306a36Sopenharmony_ci
33662306a36Sopenharmony_cistatic const struct dcbnl_rtnl_ops lan966x_dcbnl_ops = {
33762306a36Sopenharmony_ci	.ieee_setapp = lan966x_dcb_ieee_setapp,
33862306a36Sopenharmony_ci	.ieee_delapp = lan966x_dcb_ieee_delapp,
33962306a36Sopenharmony_ci	.dcbnl_setapptrust = lan966x_dcb_setapptrust,
34062306a36Sopenharmony_ci	.dcbnl_getapptrust = lan966x_dcb_getapptrust,
34162306a36Sopenharmony_ci	.dcbnl_setrewr = lan966x_dcb_setrewr,
34262306a36Sopenharmony_ci	.dcbnl_delrewr = lan966x_dcb_delrewr,
34362306a36Sopenharmony_ci};
34462306a36Sopenharmony_ci
34562306a36Sopenharmony_civoid lan966x_dcb_init(struct lan966x *lan966x)
34662306a36Sopenharmony_ci{
34762306a36Sopenharmony_ci	for (int p = 0; p < lan966x->num_phys_ports; ++p) {
34862306a36Sopenharmony_ci		struct lan966x_port *port;
34962306a36Sopenharmony_ci
35062306a36Sopenharmony_ci		port = lan966x->ports[p];
35162306a36Sopenharmony_ci		if (!port)
35262306a36Sopenharmony_ci			continue;
35362306a36Sopenharmony_ci
35462306a36Sopenharmony_ci		port->dev->dcbnl_ops = &lan966x_dcbnl_ops;
35562306a36Sopenharmony_ci
35662306a36Sopenharmony_ci		lan966x_port_apptrust[port->chip_port] =
35762306a36Sopenharmony_ci			&lan966x_dcb_apptrust_policies[LAN966X_DCB_APPTRUST_DSCP_PCP];
35862306a36Sopenharmony_ci
35962306a36Sopenharmony_ci		/* Enable DSCP classification based on classified QoS class and
36062306a36Sopenharmony_ci		 * DP, for all DSCP values, for all ports.
36162306a36Sopenharmony_ci		 */
36262306a36Sopenharmony_ci		lan966x_port_qos_dscp_rewr_mode_set(port,
36362306a36Sopenharmony_ci						    LAN966X_PORT_QOS_REWR_DSCP_ALL);
36462306a36Sopenharmony_ci	}
36562306a36Sopenharmony_ci}
366