-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
net: marvell: prestera: Add basic devlink support
Add very basic support for devlink interface: - driver name - fw version - devlink ports Signed-off-by: Vadym Kochan <vadym.kochan@plvision.eu> Signed-off-by: David S. Miller <davem@davemloft.net>
- Loading branch information
Vadym Kochan
authored and
David S. Miller
committed
Sep 17, 2020
1 parent
4c2703d
commit 34dd171
Showing
6 changed files
with
165 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,6 @@ | ||
# SPDX-License-Identifier: GPL-2.0 | ||
obj-$(CONFIG_PRESTERA) += prestera.o | ||
prestera-objs := prestera_main.o prestera_hw.o prestera_dsa.o \ | ||
prestera_rxtx.o | ||
prestera_rxtx.o prestera_devlink.o | ||
|
||
obj-$(CONFIG_PRESTERA_PCI) += prestera_pci.o |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
112 changes: 112 additions & 0 deletions
112
drivers/net/ethernet/marvell/prestera/prestera_devlink.c
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,112 @@ | ||
// SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 | ||
/* Copyright (c) 2019-2020 Marvell International Ltd. All rights reserved */ | ||
|
||
#include <net/devlink.h> | ||
|
||
#include "prestera_devlink.h" | ||
|
||
static int prestera_dl_info_get(struct devlink *dl, | ||
struct devlink_info_req *req, | ||
struct netlink_ext_ack *extack) | ||
{ | ||
struct prestera_switch *sw = devlink_priv(dl); | ||
char buf[16]; | ||
int err; | ||
|
||
err = devlink_info_driver_name_put(req, PRESTERA_DRV_NAME); | ||
if (err) | ||
return err; | ||
|
||
snprintf(buf, sizeof(buf), "%d.%d.%d", | ||
sw->dev->fw_rev.maj, | ||
sw->dev->fw_rev.min, | ||
sw->dev->fw_rev.sub); | ||
|
||
return devlink_info_version_running_put(req, | ||
DEVLINK_INFO_VERSION_GENERIC_FW, | ||
buf); | ||
} | ||
|
||
static const struct devlink_ops prestera_dl_ops = { | ||
.info_get = prestera_dl_info_get, | ||
}; | ||
|
||
struct prestera_switch *prestera_devlink_alloc(void) | ||
{ | ||
struct devlink *dl; | ||
|
||
dl = devlink_alloc(&prestera_dl_ops, sizeof(struct prestera_switch)); | ||
|
||
return devlink_priv(dl); | ||
} | ||
|
||
void prestera_devlink_free(struct prestera_switch *sw) | ||
{ | ||
struct devlink *dl = priv_to_devlink(sw); | ||
|
||
devlink_free(dl); | ||
} | ||
|
||
int prestera_devlink_register(struct prestera_switch *sw) | ||
{ | ||
struct devlink *dl = priv_to_devlink(sw); | ||
int err; | ||
|
||
err = devlink_register(dl, sw->dev->dev); | ||
if (err) | ||
dev_err(prestera_dev(sw), "devlink_register failed: %d\n", err); | ||
|
||
return err; | ||
} | ||
|
||
void prestera_devlink_unregister(struct prestera_switch *sw) | ||
{ | ||
struct devlink *dl = priv_to_devlink(sw); | ||
|
||
devlink_unregister(dl); | ||
} | ||
|
||
int prestera_devlink_port_register(struct prestera_port *port) | ||
{ | ||
struct prestera_switch *sw = port->sw; | ||
struct devlink *dl = priv_to_devlink(sw); | ||
struct devlink_port_attrs attrs = {}; | ||
int err; | ||
|
||
attrs.flavour = DEVLINK_PORT_FLAVOUR_PHYSICAL; | ||
attrs.phys.port_number = port->fp_id; | ||
attrs.switch_id.id_len = sizeof(sw->id); | ||
memcpy(attrs.switch_id.id, &sw->id, attrs.switch_id.id_len); | ||
|
||
devlink_port_attrs_set(&port->dl_port, &attrs); | ||
|
||
err = devlink_port_register(dl, &port->dl_port, port->fp_id); | ||
if (err) { | ||
dev_err(prestera_dev(sw), "devlink_port_register failed: %d\n", err); | ||
return err; | ||
} | ||
|
||
return 0; | ||
} | ||
|
||
void prestera_devlink_port_unregister(struct prestera_port *port) | ||
{ | ||
devlink_port_unregister(&port->dl_port); | ||
} | ||
|
||
void prestera_devlink_port_set(struct prestera_port *port) | ||
{ | ||
devlink_port_type_eth_set(&port->dl_port, port->dev); | ||
} | ||
|
||
void prestera_devlink_port_clear(struct prestera_port *port) | ||
{ | ||
devlink_port_type_clear(&port->dl_port); | ||
} | ||
|
||
struct devlink_port *prestera_devlink_get_port(struct net_device *dev) | ||
{ | ||
struct prestera_port *port = netdev_priv(dev); | ||
|
||
return &port->dl_port; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */ | ||
/* Copyright (c) 2019-2020 Marvell International Ltd. All rights reserved. */ | ||
|
||
#ifndef _PRESTERA_DEVLINK_H_ | ||
#define _PRESTERA_DEVLINK_H_ | ||
|
||
#include "prestera.h" | ||
|
||
struct prestera_switch *prestera_devlink_alloc(void); | ||
void prestera_devlink_free(struct prestera_switch *sw); | ||
|
||
int prestera_devlink_register(struct prestera_switch *sw); | ||
void prestera_devlink_unregister(struct prestera_switch *sw); | ||
|
||
int prestera_devlink_port_register(struct prestera_port *port); | ||
void prestera_devlink_port_unregister(struct prestera_port *port); | ||
|
||
void prestera_devlink_port_set(struct prestera_port *port); | ||
void prestera_devlink_port_clear(struct prestera_port *port); | ||
|
||
struct devlink_port *prestera_devlink_get_port(struct net_device *dev); | ||
|
||
#endif /* _PRESTERA_DEVLINK_H_ */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters