[PATCH v2 2/2] cmd: brcm: netXtreme commands

Heinrich Schuchardt xypron.glpk at gmx.de
Sat Oct 23 10:02:24 CEST 2021



On 10/23/21 01:23, Roman Bacik wrote:
> From: Bharat Gooty <bharat.gooty at broadcom.com>
>
> Following netXtreme commands are supported:-
> Device probe, remove, supported speeds, get/set speeds and
> get/set MAC address.
>
> Signed-off-by: Bharat Gooty <bharat.gooty at broadcom.com>
>
> Signed-off-by: Roman Bacik <roman.bacik at broadcom.com>

Please, add a man-page for the new command in doc/usage/.
Here is an example: doc/usage/loady.rst
Add the new man-page to doc/usage/index.rst
Test building with 'make htmldocs'.

> ---
>
> (no changes since v1)
>
>   cmd/Kconfig           |   2 +
>   cmd/broadcom/Kconfig  |  10 ++
>   cmd/broadcom/Makefile |   3 +-
>   cmd/broadcom/bnxt.c   | 237 ++++++++++++++++++++++++++++++++++++++++++
>   4 files changed, 251 insertions(+), 1 deletion(-)
>   create mode 100644 cmd/broadcom/Kconfig
>   create mode 100644 cmd/broadcom/bnxt.c
>
> diff --git a/cmd/Kconfig b/cmd/Kconfig
> index 5b30b13e438f..e054292dbcd0 100644
> --- a/cmd/Kconfig
> +++ b/cmd/Kconfig
> @@ -1953,6 +1953,8 @@ endmenu
>
>   source "cmd/ti/Kconfig"
>
> +source "cmd/broadcom/Kconfig"
> +
>   config CMD_BOOTSTAGE
>   	bool "Enable the 'bootstage' command"
>   	depends on BOOTSTAGE
> diff --git a/cmd/broadcom/Kconfig b/cmd/broadcom/Kconfig
> new file mode 100644
> index 000000000000..6f16b09d1425
> --- /dev/null
> +++ b/cmd/broadcom/Kconfig
> @@ -0,0 +1,10 @@
> +menu "Broadcom specific command line interface"
> +
> +config BNXT_ETH_CMD
> +	bool "BNXT commands"
> +	depends on BNXT_ETH
> +	help
> +	  Broadcom NXS ethernet controller commands. Commands supported are:-
> +	  Driver probe, Driver remove, Supported speeds, get/set MAC address and get/set Link speeds.
> +
> +endmenu
> diff --git a/cmd/broadcom/Makefile b/cmd/broadcom/Makefile
> index 62268d98d0dd..0027c1c15e5a 100644
> --- a/cmd/broadcom/Makefile
> +++ b/cmd/broadcom/Makefile
> @@ -1,6 +1,7 @@
>   # SPDX-License-Identifier: GPL-2.0+
> -# Copyright 2020 Broadcom
> +# Copyright 2020-2021 Broadcom
>
>   obj-y += chimp_boot.o
>   obj-y += nitro_image_load.o
>   obj-y += chimp_handshake.o
> +obj-$(CONFIG_BNXT_ETH_CMD) += bnxt.o
> diff --git a/cmd/broadcom/bnxt.c b/cmd/broadcom/bnxt.c
> new file mode 100644
> index 000000000000..b9d1e59a74fb
> --- /dev/null
> +++ b/cmd/broadcom/bnxt.c
> @@ -0,0 +1,237 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +/*
> + * Copyright 2021 Broadcom
> + */
> +
> +#include <common.h>
> +#include <command.h>
> +
> +#include <asm/io.h>
> +#include <pci.h>
> +#include <broadcom/bnxt.h>
> +#include <broadcom/bnxt_ver.h>
> +#include <broadcom/bnxt_hsi.h>
> +#include <dm.h>
> +#include <env_flags.h>
> +#include <env_internal.h>
> +#include <errno.h>
> +#include <linux/if_ether.h>
> +#include <net.h>
> +#include <dm/device-internal.h>
> +#include <linux/ctype.h>
> +#include <linux/delay.h>
> +#include <linux/types.h>
> +
> +static int do_bnxt_set_link(struct bnxt *bp, char *link_str)
> +{
> +	bp->link_set = simple_strtoul(link_str, NULL, 16);
> +
> +	switch (bp->link_set) {
> +	case LINK_SPEED_DRV_AUTONEG:
> +		printf("- AutoNeg Not Supported\n");
> +		return 0;

Please, remove the leading '- '. It just increases code size.
In case of an error, please, return CMD_RET_FAILURE.
Please, remove captitalization of 'Not Supported'

> +	case LINK_SPEED_DRV_1G:
> +		if (!(bp->support_speeds & PORT_QCFG_SUPPORT_SPEEDS_1GB)) {
> +			printf("- 1 GBPS: Link Speed is not supported\n");

ditto

> +			return 0;
> +		}
> +
> +		break;
> +	case LINK_SPEED_DRV_10G:
> +		if (!(bp->support_speeds & PORT_QCFG_SUPPORT_SPEEDS_10GB)) {
> +			printf("- 10 GBPS: Link Speed is not supported\n");
> +			return 0;

ditto


> +		}
> +
> +		break;
> +	case LINK_SPEED_DRV_25G:
> +		if (!(bp->support_speeds & PORT_QCFG_SUPPORT_SPEEDS_25GB)) {
> +			printf("- 25 GBPS: Link Speed is not supported\n");
> +			return 0;

ditto

> +		}
> +
> +		break;
> +	case LINK_SPEED_DRV_40G:
> +		printf("- 40 GBPS Not Supported\n");
> +		return 0;

ditto

> +	case LINK_SPEED_DRV_50G:
> +		if (!(bp->support_speeds & PORT_QCFG_SUPPORT_SPEEDS_50GB)) {
> +			printf("- 50 GBPS: Link Speed is not supported\n");
> +			return 0;

ditto

> +		}
> +
> +		break;
> +	case LINK_SPEED_DRV_100G:
> +		if (!(bp->support_speeds & PORT_QCFG_SUPPORT_SPEEDS_100GB)) {
> +			printf("- 100 GBPS: Link Speed is not supported\n");
> +			return 0;

ditto

> +		}
> +
> +		break;
> +	case LINK_SPEED_DRV_200G:
> +		if (!(bp->support_speeds & PORT_QCFG_SUPPORT_SPEEDS_200GB)) {
> +			printf("- 200 GBPS: Link Speed is not supported\n");
> +			return 0;

ditto

> +		}
> +
> +		break;
> +	case LINK_SPEED_DRV_2_5G:
> +		if (!(bp->support_speeds & PORT_QCFG_SUPPORT_SPEEDS_2_5GB)) {
> +			printf("- 2.5 GBPS: Link Speed is not supported\n");

ditto

> +			return 0;
> +		}
> +
> +		break;
> +	case LINK_SPEED_DRV_100M:
> +		if (!(bp->support_speeds & PORT_QCFG_SUPPORT_SPEEDS_100MB)) {
> +			printf("- 100 MBPS: Link Speed is not supported\n");
> +			return 0;

ditto

> +		}
> +
> +		break;
> +	default:
> +		printf("- Invalid Link Speed specified\n");
> +		return CMD_RET_USAGE;
> +	}
> +
> +	prn_link_speed(bp->link_set, 1);
> +
> +	return bnxt_set_link_speed(bp);
> +}
> +
> +static int (struct bnxt *bp, char *mac_str)
> +{
> +	struct eth_pdata *plat = dev_get_plat(bp->pdev);
> +	u8 addr[ETH_ALEN];
> +	int ret = CMD_RET_USAGE;
> +
> +	if (eth_validate_ethaddr_str(mac_str)) {
> +		printf("Invalid MAC Address %s\n", mac_str);
> +		return 0;

return CMD_RET_FAILURE

%s/Invalid MAC Address/Invalid MAC address/


> +	}
> +
> +	string_to_enetaddr(mac_str, &addr[0]);
> +
> +	if (!is_valid_ethaddr(&addr[0])) {
> +		printf("- Warning: Invalid MAC address to set\n");

Please, be consistent.

%s/- Warning: //

> +		return 0;

return CMD_RET_FAILURE

> +	}
> +
> +	memcpy(bp->mac_set, addr, ETH_ALEN);
> +
> +	print_mac(&bp->mac_set[0], 1);
> +	ret = bnxt_set_mac(bp);
> +	if (ret)
> +		return ret;
> +
> +	bnxt_hwrm_nvm_flush(bp);
> +
> +	/* copy ROM MAC to environment. */
> +	memcpy(plat->enetaddr, bp->mac_set, ETH_ALEN);
> +	bnxt_env_set_ethaddr(bp->pdev);
> +
> +	return CMD_RET_SUCCESS;
> +}
> +
> +static int print_drv(u8 flag)
> +{
> +	printf("bnxt - Device ");
> +	if (flag)
> +		printf("already");
> +	else
> +		printf("not");
> +
> +	printf(" initialized\n");
> +
> +	return CMD_RET_SUCCESS;
> +}
> +
> +static int bnxt_parse_input(int argc, char *const argv[])
> +{
> +	if (!strcmp(argv[2], "probe")) {
> +		return CMD_PROBE;
> +	} else if (!strcmp(argv[2], "remove")) {
> +		return CMD_REMOVE;
> +	} else if (!strcmp(argv[2], "get")) {
> +		if (!strncmp(argv[3], "supported_speed", 16))
> +			return CMD_GET_SUPPORTED_SPEED;
> +		else if (!strncmp(argv[3], "link_speed", 11))
> +			return CMD_GET_LINK_SPEED;
> +		else if (!strncmp(argv[3], "mac", 4))
> +			return CMD_GET_MAC;
> +	}
> +
> +	return CMD_UNKNOWN;
> +}
> +
> +static int do_bnxt(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
> +{

Please, implement the subcommands as described in doc/develop/commands.rst.
https://u-boot.readthedocs.io/en/latest/develop/commands.html
This avoids reinventing the wheel and reduces code size.

> +	struct udevice *dev;
> +	struct bnxt *bp;
> +	char name[30];
> +	int ret = CMD_RET_USAGE;
> +	int cardnum;
> +	int op;
> +
> +	printf("\n");
> +	if (argc < 2)
> +		return ret;
> +
> +	cardnum = simple_strtoul(argv[1], NULL, 10);
> +	sprintf(name, "bnxt_eth%u", cardnum);
> +	ret = uclass_get_device_by_name(UCLASS_ETH, name, &dev);
> +	if (ret)
> +		return CMD_RET_USAGE;
> +
> +	bp = dev_get_priv(dev);
> +	op = bnxt_parse_input(argc, argv);
> +	ret = CMD_RET_USAGE;
> +	switch (op) {
> +	case CMD_PROBE:
> +		if (!bp->drv_load)
> +			ret = bnxt_drv_probe(dev);
> +		else
> +			ret = print_drv(1);
> +		break;
> +	case CMD_REMOVE:
> +		ret = bnxt_drv_remove(dev);
> +		break;
> +	case CMD_GET_SUPPORTED_SPEED:
> +		ret = bnxt_supported_speed(bp);
> +		break;
> +	case CMD_GET_MAC:
> +		ret = bnxt_get_mac(bp);
> +		break;
> +	case CMD_GET_LINK_SPEED:
> +		ret = bnxt_get_link_speed(bp);
> +		break;
> +	case CMD_SET_MAC:
> +		ret = do_bnxt_set_mac(bp, argv[4]);
> +		break;
> +	case CMD_SET_LINK_SPEED:
> +		ret = do_bnxt_set_link(bp, argv[4]);
> +		break;
> +	default:
> +		if (op && !bp->drv_load)
> +			ret = print_drv(0);
> +	}
> +
> +	printf("\n");
> +
> +	return ret;
> +}
> +
> +U_BOOT_CMD
> +	(bnxt, 5, 1, do_bnxt,
> +	"Broadcom NetXtreme-C/E Management",
> +	/* */"<bnxt_eth#> probe\n"
> +	"     - Load Driver Instance.\n"

Please, remove capitalization and period at end of enumberation lines.
Saves us a few bytes.

Best regards

Heinrich

> +	"bnxt <bnxt_eth#> remove\n"
> +	"     - Unload Driver Instance.\n"
> +	"bnxt <bnxt_eth#> get supported_speed\n"
> +	"     - Get Supported Link Speeds.\n"
> +	"bnxt <bnxt_eth#> get link_speed\n"
> +	"     - Get Current Link Speed.\n"
> +	"bnxt <bnxt_eth#> get mac\n"
> +	"     - Get MAC Address.\n"
> +);
>


More information about the U-Boot mailing list