When using ethtool to set the speed for the device, verify that the
specified speed is valid within the active speedset.

Signed-off-by: Tom Lendacky <thomas.lenda...@amd.com>
---
 drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c |   16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c 
b/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c
index 6040293..11d9f0c 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c
+++ b/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c
@@ -6,7 +6,7 @@
  *
  * License 1: GPLv2
  *
- * Copyright (c) 2014 Advanced Micro Devices, Inc.
+ * Copyright (c) 2014-2016 Advanced Micro Devices, Inc.
  *
  * This file is free software; you may copy, redistribute and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -56,7 +56,7 @@
  *
  * License 2: Modified BSD
  *
- * Copyright (c) 2014 Advanced Micro Devices, Inc.
+ * Copyright (c) 2014-2016 Advanced Micro Devices, Inc.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -318,8 +318,20 @@ static int xgbe_set_settings(struct net_device *netdev,
        if (cmd->autoneg == AUTONEG_DISABLE) {
                switch (speed) {
                case SPEED_10000:
+                       break;
                case SPEED_2500:
+                       if (pdata->speed_set != XGBE_SPEEDSET_2500_10000) {
+                               netdev_err(netdev, "unsupported speed %u\n",
+                                          speed);
+                               return -EINVAL;
+                       }
+                       break;
                case SPEED_1000:
+                       if (pdata->speed_set != XGBE_SPEEDSET_1000_10000) {
+                               netdev_err(netdev, "unsupported speed %u\n",
+                                          speed);
+                               return -EINVAL;
+                       }
                        break;
                default:
                        netdev_err(netdev, "unsupported speed %u\n", speed);

Reply via email to