Commit 2c674bec authored by Jakub Kicinski's avatar Jakub Kicinski

Merge branch 'net-atlantic-driver-updates'

Mark Starovoytov says:

====================
net: atlantic: driver updates

This patch series contains several minor cleanups for the previously
submitted series.

We also add Marvell copyrights on newly touched files.

v2:
 * accommodated review comments related to the last patch in series
   (MAC generation)

v1: https://patchwork.ozlabs.org/cover/1285011/
====================
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents 5eb2bcf2 b4de6c49
/* SPDX-License-Identifier: GPL-2.0-only */ /* SPDX-License-Identifier: GPL-2.0-only */
/* /* Atlantic Network Driver
* aQuantia Corporation Network Driver *
* Copyright (C) 2014-2017 aQuantia Corporation. All rights reserved * Copyright (C) 2014-2019 aQuantia Corporation
* Copyright (C) 2019-2020 Marvell International Ltd.
*/ */
/* File aq_common.h: Basic includes for all files in project. */ /* File aq_common.h: Basic includes for all files in project. */
...@@ -53,14 +54,14 @@ ...@@ -53,14 +54,14 @@
#define AQ_NIC_RATE_10G BIT(0) #define AQ_NIC_RATE_10G BIT(0)
#define AQ_NIC_RATE_5G BIT(1) #define AQ_NIC_RATE_5G BIT(1)
#define AQ_NIC_RATE_5GSR BIT(2) #define AQ_NIC_RATE_5GSR BIT(2)
#define AQ_NIC_RATE_2GS BIT(3) #define AQ_NIC_RATE_2G5 BIT(3)
#define AQ_NIC_RATE_1G BIT(4) #define AQ_NIC_RATE_1G BIT(4)
#define AQ_NIC_RATE_100M BIT(5) #define AQ_NIC_RATE_100M BIT(5)
#define AQ_NIC_RATE_10M BIT(6) #define AQ_NIC_RATE_10M BIT(6)
#define AQ_NIC_RATE_EEE_10G BIT(7) #define AQ_NIC_RATE_EEE_10G BIT(7)
#define AQ_NIC_RATE_EEE_5G BIT(8) #define AQ_NIC_RATE_EEE_5G BIT(8)
#define AQ_NIC_RATE_EEE_2GS BIT(9) #define AQ_NIC_RATE_EEE_2G5 BIT(9)
#define AQ_NIC_RATE_EEE_1G BIT(10) #define AQ_NIC_RATE_EEE_1G BIT(10)
#define AQ_NIC_RATE_EEE_100M BIT(11) #define AQ_NIC_RATE_EEE_100M BIT(11)
......
...@@ -605,7 +605,7 @@ static enum hw_atl_fw2x_rate eee_mask_to_ethtool_mask(u32 speed) ...@@ -605,7 +605,7 @@ static enum hw_atl_fw2x_rate eee_mask_to_ethtool_mask(u32 speed)
if (speed & AQ_NIC_RATE_EEE_10G) if (speed & AQ_NIC_RATE_EEE_10G)
rate |= SUPPORTED_10000baseT_Full; rate |= SUPPORTED_10000baseT_Full;
if (speed & AQ_NIC_RATE_EEE_2GS) if (speed & AQ_NIC_RATE_EEE_2G5)
rate |= SUPPORTED_2500baseX_Full; rate |= SUPPORTED_2500baseX_Full;
if (speed & AQ_NIC_RATE_EEE_1G) if (speed & AQ_NIC_RATE_EEE_1G)
......
// SPDX-License-Identifier: GPL-2.0-only // SPDX-License-Identifier: GPL-2.0-only
/* /* Atlantic Network Driver
* aQuantia Corporation Network Driver *
* Copyright (C) 2014-2019 aQuantia Corporation. All rights reserved * Copyright (C) 2014-2019 aQuantia Corporation
* Copyright (C) 2019-2020 Marvell International Ltd.
*/ */
/* File aq_nic.c: Definition of common code for NIC. */ /* File aq_nic.c: Definition of common code for NIC. */
...@@ -271,6 +272,14 @@ static int aq_nic_hw_prepare(struct aq_nic_s *self) ...@@ -271,6 +272,14 @@ static int aq_nic_hw_prepare(struct aq_nic_s *self)
return err; return err;
} }
static bool aq_nic_is_valid_ether_addr(const u8 *addr)
{
/* Some engineering samples of Aquantia NICs are provisioned with a
* partially populated MAC, which is still invalid.
*/
return !(addr[0] == 0 && addr[1] == 0 && addr[2] == 0);
}
int aq_nic_ndev_register(struct aq_nic_s *self) int aq_nic_ndev_register(struct aq_nic_s *self)
{ {
int err = 0; int err = 0;
...@@ -295,6 +304,12 @@ int aq_nic_ndev_register(struct aq_nic_s *self) ...@@ -295,6 +304,12 @@ int aq_nic_ndev_register(struct aq_nic_s *self)
if (err) if (err)
goto err_exit; goto err_exit;
if (!is_valid_ether_addr(self->ndev->dev_addr) ||
!aq_nic_is_valid_ether_addr(self->ndev->dev_addr)) {
netdev_warn(self->ndev, "MAC is invalid, will use random.");
eth_hw_addr_random(self->ndev);
}
#if defined(AQ_CFG_MAC_ADDR_PERMANENT) #if defined(AQ_CFG_MAC_ADDR_PERMANENT)
{ {
static u8 mac_addr_permanent[] = AQ_CFG_MAC_ADDR_PERMANENT; static u8 mac_addr_permanent[] = AQ_CFG_MAC_ADDR_PERMANENT;
...@@ -894,7 +909,7 @@ void aq_nic_get_link_ksettings(struct aq_nic_s *self, ...@@ -894,7 +909,7 @@ void aq_nic_get_link_ksettings(struct aq_nic_s *self,
ethtool_link_ksettings_add_link_mode(cmd, supported, ethtool_link_ksettings_add_link_mode(cmd, supported,
5000baseT_Full); 5000baseT_Full);
if (self->aq_nic_cfg.aq_hw_caps->link_speed_msk & AQ_NIC_RATE_2GS) if (self->aq_nic_cfg.aq_hw_caps->link_speed_msk & AQ_NIC_RATE_2G5)
ethtool_link_ksettings_add_link_mode(cmd, supported, ethtool_link_ksettings_add_link_mode(cmd, supported,
2500baseT_Full); 2500baseT_Full);
...@@ -937,7 +952,7 @@ void aq_nic_get_link_ksettings(struct aq_nic_s *self, ...@@ -937,7 +952,7 @@ void aq_nic_get_link_ksettings(struct aq_nic_s *self,
ethtool_link_ksettings_add_link_mode(cmd, advertising, ethtool_link_ksettings_add_link_mode(cmd, advertising,
5000baseT_Full); 5000baseT_Full);
if (self->aq_nic_cfg.link_speed_msk & AQ_NIC_RATE_2GS) if (self->aq_nic_cfg.link_speed_msk & AQ_NIC_RATE_2G5)
ethtool_link_ksettings_add_link_mode(cmd, advertising, ethtool_link_ksettings_add_link_mode(cmd, advertising,
2500baseT_Full); 2500baseT_Full);
...@@ -996,7 +1011,7 @@ int aq_nic_set_link_ksettings(struct aq_nic_s *self, ...@@ -996,7 +1011,7 @@ int aq_nic_set_link_ksettings(struct aq_nic_s *self,
break; break;
case SPEED_2500: case SPEED_2500:
rate = AQ_NIC_RATE_2GS; rate = AQ_NIC_RATE_2G5;
break; break;
case SPEED_5000: case SPEED_5000:
......
// SPDX-License-Identifier: GPL-2.0-only // SPDX-License-Identifier: GPL-2.0-only
/* /* Atlantic Network Driver
* aQuantia Corporation Network Driver *
* Copyright (C) 2014-2017 aQuantia Corporation. All rights reserved * Copyright (C) 2014-2019 aQuantia Corporation
* Copyright (C) 2019-2020 Marvell International Ltd.
*/ */
/* File hw_atl_a0.c: Definition of Atlantic hardware specific functions. */ /* File hw_atl_a0.c: Definition of Atlantic hardware specific functions. */
...@@ -47,7 +48,7 @@ const struct aq_hw_caps_s hw_atl_a0_caps_aqc100 = { ...@@ -47,7 +48,7 @@ const struct aq_hw_caps_s hw_atl_a0_caps_aqc100 = {
DEFAULT_A0_BOARD_BASIC_CAPABILITIES, DEFAULT_A0_BOARD_BASIC_CAPABILITIES,
.media_type = AQ_HW_MEDIA_TYPE_FIBRE, .media_type = AQ_HW_MEDIA_TYPE_FIBRE,
.link_speed_msk = AQ_NIC_RATE_5G | .link_speed_msk = AQ_NIC_RATE_5G |
AQ_NIC_RATE_2GS | AQ_NIC_RATE_2G5 |
AQ_NIC_RATE_1G | AQ_NIC_RATE_1G |
AQ_NIC_RATE_100M, AQ_NIC_RATE_100M,
}; };
...@@ -57,7 +58,7 @@ const struct aq_hw_caps_s hw_atl_a0_caps_aqc107 = { ...@@ -57,7 +58,7 @@ const struct aq_hw_caps_s hw_atl_a0_caps_aqc107 = {
.media_type = AQ_HW_MEDIA_TYPE_TP, .media_type = AQ_HW_MEDIA_TYPE_TP,
.link_speed_msk = AQ_NIC_RATE_10G | .link_speed_msk = AQ_NIC_RATE_10G |
AQ_NIC_RATE_5G | AQ_NIC_RATE_5G |
AQ_NIC_RATE_2GS | AQ_NIC_RATE_2G5 |
AQ_NIC_RATE_1G | AQ_NIC_RATE_1G |
AQ_NIC_RATE_100M, AQ_NIC_RATE_100M,
}; };
...@@ -66,7 +67,7 @@ const struct aq_hw_caps_s hw_atl_a0_caps_aqc108 = { ...@@ -66,7 +67,7 @@ const struct aq_hw_caps_s hw_atl_a0_caps_aqc108 = {
DEFAULT_A0_BOARD_BASIC_CAPABILITIES, DEFAULT_A0_BOARD_BASIC_CAPABILITIES,
.media_type = AQ_HW_MEDIA_TYPE_TP, .media_type = AQ_HW_MEDIA_TYPE_TP,
.link_speed_msk = AQ_NIC_RATE_5G | .link_speed_msk = AQ_NIC_RATE_5G |
AQ_NIC_RATE_2GS | AQ_NIC_RATE_2G5 |
AQ_NIC_RATE_1G | AQ_NIC_RATE_1G |
AQ_NIC_RATE_100M, AQ_NIC_RATE_100M,
}; };
...@@ -74,7 +75,7 @@ const struct aq_hw_caps_s hw_atl_a0_caps_aqc108 = { ...@@ -74,7 +75,7 @@ const struct aq_hw_caps_s hw_atl_a0_caps_aqc108 = {
const struct aq_hw_caps_s hw_atl_a0_caps_aqc109 = { const struct aq_hw_caps_s hw_atl_a0_caps_aqc109 = {
DEFAULT_A0_BOARD_BASIC_CAPABILITIES, DEFAULT_A0_BOARD_BASIC_CAPABILITIES,
.media_type = AQ_HW_MEDIA_TYPE_TP, .media_type = AQ_HW_MEDIA_TYPE_TP,
.link_speed_msk = AQ_NIC_RATE_2GS | .link_speed_msk = AQ_NIC_RATE_2G5 |
AQ_NIC_RATE_1G | AQ_NIC_RATE_1G |
AQ_NIC_RATE_100M, AQ_NIC_RATE_100M,
}; };
...@@ -267,8 +268,7 @@ static int hw_atl_a0_hw_init_tx_path(struct aq_hw_s *self) ...@@ -267,8 +268,7 @@ static int hw_atl_a0_hw_init_tx_path(struct aq_hw_s *self)
hw_atl_tdm_tx_desc_wr_wb_irq_en_set(self, 1U); hw_atl_tdm_tx_desc_wr_wb_irq_en_set(self, 1U);
/* misc */ /* misc */
aq_hw_write_reg(self, 0x00007040U, ATL_HW_IS_CHIP_FEATURE(self, TPO2) ? aq_hw_write_reg(self, 0x00007040U, 0x00000000U);
0x00010000U : 0x00000000U);
hw_atl_tdm_tx_dca_en_set(self, 0U); hw_atl_tdm_tx_dca_en_set(self, 0U);
hw_atl_tdm_tx_dca_mode_set(self, 0U); hw_atl_tdm_tx_dca_mode_set(self, 0U);
......
// SPDX-License-Identifier: GPL-2.0-only // SPDX-License-Identifier: GPL-2.0-only
/* /* Atlantic Network Driver
* aQuantia Corporation Network Driver *
* Copyright (C) 2014-2019 aQuantia Corporation. All rights reserved * Copyright (C) 2014-2019 aQuantia Corporation
* Copyright (C) 2019-2020 Marvell International Ltd.
*/ */
/* File hw_atl_b0.c: Definition of Atlantic hardware specific functions. */ /* File hw_atl_b0.c: Definition of Atlantic hardware specific functions. */
...@@ -59,7 +60,7 @@ const struct aq_hw_caps_s hw_atl_b0_caps_aqc100 = { ...@@ -59,7 +60,7 @@ const struct aq_hw_caps_s hw_atl_b0_caps_aqc100 = {
.media_type = AQ_HW_MEDIA_TYPE_FIBRE, .media_type = AQ_HW_MEDIA_TYPE_FIBRE,
.link_speed_msk = AQ_NIC_RATE_10G | .link_speed_msk = AQ_NIC_RATE_10G |
AQ_NIC_RATE_5G | AQ_NIC_RATE_5G |
AQ_NIC_RATE_2GS | AQ_NIC_RATE_2G5 |
AQ_NIC_RATE_1G | AQ_NIC_RATE_1G |
AQ_NIC_RATE_100M, AQ_NIC_RATE_100M,
}; };
...@@ -69,7 +70,7 @@ const struct aq_hw_caps_s hw_atl_b0_caps_aqc107 = { ...@@ -69,7 +70,7 @@ const struct aq_hw_caps_s hw_atl_b0_caps_aqc107 = {
.media_type = AQ_HW_MEDIA_TYPE_TP, .media_type = AQ_HW_MEDIA_TYPE_TP,
.link_speed_msk = AQ_NIC_RATE_10G | .link_speed_msk = AQ_NIC_RATE_10G |
AQ_NIC_RATE_5G | AQ_NIC_RATE_5G |
AQ_NIC_RATE_2GS | AQ_NIC_RATE_2G5 |
AQ_NIC_RATE_1G | AQ_NIC_RATE_1G |
AQ_NIC_RATE_100M, AQ_NIC_RATE_100M,
}; };
...@@ -78,7 +79,7 @@ const struct aq_hw_caps_s hw_atl_b0_caps_aqc108 = { ...@@ -78,7 +79,7 @@ const struct aq_hw_caps_s hw_atl_b0_caps_aqc108 = {
DEFAULT_B0_BOARD_BASIC_CAPABILITIES, DEFAULT_B0_BOARD_BASIC_CAPABILITIES,
.media_type = AQ_HW_MEDIA_TYPE_TP, .media_type = AQ_HW_MEDIA_TYPE_TP,
.link_speed_msk = AQ_NIC_RATE_5G | .link_speed_msk = AQ_NIC_RATE_5G |
AQ_NIC_RATE_2GS | AQ_NIC_RATE_2G5 |
AQ_NIC_RATE_1G | AQ_NIC_RATE_1G |
AQ_NIC_RATE_100M, AQ_NIC_RATE_100M,
}; };
...@@ -86,7 +87,7 @@ const struct aq_hw_caps_s hw_atl_b0_caps_aqc108 = { ...@@ -86,7 +87,7 @@ const struct aq_hw_caps_s hw_atl_b0_caps_aqc108 = {
const struct aq_hw_caps_s hw_atl_b0_caps_aqc109 = { const struct aq_hw_caps_s hw_atl_b0_caps_aqc109 = {
DEFAULT_B0_BOARD_BASIC_CAPABILITIES, DEFAULT_B0_BOARD_BASIC_CAPABILITIES,
.media_type = AQ_HW_MEDIA_TYPE_TP, .media_type = AQ_HW_MEDIA_TYPE_TP,
.link_speed_msk = AQ_NIC_RATE_2GS | .link_speed_msk = AQ_NIC_RATE_2G5 |
AQ_NIC_RATE_1G | AQ_NIC_RATE_1G |
AQ_NIC_RATE_100M, AQ_NIC_RATE_100M,
}; };
...@@ -215,8 +216,8 @@ int hw_atl_b0_hw_rss_hash_set(struct aq_hw_s *self, ...@@ -215,8 +216,8 @@ int hw_atl_b0_hw_rss_hash_set(struct aq_hw_s *self,
return err; return err;
} }
int hw_atl_b0_hw_rss_set(struct aq_hw_s *self, static int hw_atl_b0_hw_rss_set(struct aq_hw_s *self,
struct aq_rss_parameters *rss_params) struct aq_rss_parameters *rss_params)
{ {
u32 num_rss_queues = max(1U, self->aq_nic_cfg->num_rss_queues); u32 num_rss_queues = max(1U, self->aq_nic_cfg->num_rss_queues);
u8 *indirection_table = rss_params->indirection_table; u8 *indirection_table = rss_params->indirection_table;
......
/* SPDX-License-Identifier: GPL-2.0-only */ /* SPDX-License-Identifier: GPL-2.0-only */
/* /* Atlantic Network Driver
* aQuantia Corporation Network Driver *
* Copyright (C) 2014-2017 aQuantia Corporation. All rights reserved * Copyright (C) 2014-2019 aQuantia Corporation
* Copyright (C) 2019-2020 Marvell International Ltd.
*/ */
/* File hw_atl_b0.h: Declaration of abstract interface for Atlantic hardware /* File hw_atl_b0.h: Declaration of abstract interface for Atlantic hardware
...@@ -35,8 +36,6 @@ extern const struct aq_hw_ops hw_atl_ops_b0; ...@@ -35,8 +36,6 @@ extern const struct aq_hw_ops hw_atl_ops_b0;
int hw_atl_b0_hw_rss_hash_set(struct aq_hw_s *self, int hw_atl_b0_hw_rss_hash_set(struct aq_hw_s *self,
struct aq_rss_parameters *rss_params); struct aq_rss_parameters *rss_params);
int hw_atl_b0_hw_rss_set(struct aq_hw_s *self,
struct aq_rss_parameters *rss_params);
int hw_atl_b0_hw_offload_set(struct aq_hw_s *self, int hw_atl_b0_hw_offload_set(struct aq_hw_s *self,
struct aq_nic_cfg_s *aq_nic_cfg); struct aq_nic_cfg_s *aq_nic_cfg);
......
// SPDX-License-Identifier: GPL-2.0-only // SPDX-License-Identifier: GPL-2.0-only
/* /* Atlantic Network Driver
* aQuantia Corporation Network Driver *
* Copyright (C) 2014-2019 aQuantia Corporation. All rights reserved * Copyright (C) 2014-2019 aQuantia Corporation
* Copyright (C) 2019-2020 Marvell International Ltd.
*/ */
/* File hw_atl_utils.c: Definition of common functions for Atlantic hardware /* File hw_atl_utils.c: Definition of common functions for Atlantic hardware
...@@ -687,7 +688,7 @@ int hw_atl_utils_mpi_get_link_status(struct aq_hw_s *self) ...@@ -687,7 +688,7 @@ int hw_atl_utils_mpi_get_link_status(struct aq_hw_s *self)
link_status->mbps = 5000U; link_status->mbps = 5000U;
break; break;
case HAL_ATLANTIC_RATE_2GS: case HAL_ATLANTIC_RATE_2G5:
link_status->mbps = 2500U; link_status->mbps = 2500U;
break; break;
......
/* SPDX-License-Identifier: GPL-2.0-only */ /* SPDX-License-Identifier: GPL-2.0-only */
/* /* Atlantic Network Driver
* aQuantia Corporation Network Driver *
* Copyright (C) 2014-2019 aQuantia Corporation. All rights reserved * Copyright (C) 2014-2019 aQuantia Corporation
* Copyright (C) 2019-2020 Marvell International Ltd.
*/ */
/* File hw_atl_utils.h: Declaration of common functions for Atlantic hardware /* File hw_atl_utils.h: Declaration of common functions for Atlantic hardware
...@@ -418,7 +419,7 @@ enum hal_atl_utils_fw_state_e { ...@@ -418,7 +419,7 @@ enum hal_atl_utils_fw_state_e {
#define HAL_ATLANTIC_RATE_10G BIT(0) #define HAL_ATLANTIC_RATE_10G BIT(0)
#define HAL_ATLANTIC_RATE_5G BIT(1) #define HAL_ATLANTIC_RATE_5G BIT(1)
#define HAL_ATLANTIC_RATE_5GSR BIT(2) #define HAL_ATLANTIC_RATE_5GSR BIT(2)
#define HAL_ATLANTIC_RATE_2GS BIT(3) #define HAL_ATLANTIC_RATE_2G5 BIT(3)
#define HAL_ATLANTIC_RATE_1G BIT(4) #define HAL_ATLANTIC_RATE_1G BIT(4)
#define HAL_ATLANTIC_RATE_100M BIT(5) #define HAL_ATLANTIC_RATE_100M BIT(5)
#define HAL_ATLANTIC_RATE_INVALID BIT(6) #define HAL_ATLANTIC_RATE_INVALID BIT(6)
......
// SPDX-License-Identifier: GPL-2.0-only // SPDX-License-Identifier: GPL-2.0-only
/* /* Atlantic Network Driver
* aQuantia Corporation Network Driver *
* Copyright (C) 2014-2019 aQuantia Corporation. All rights reserved * Copyright (C) 2014-2019 aQuantia Corporation
* Copyright (C) 2019-2020 Marvell International Ltd.
*/ */
/* File hw_atl_utils_fw2x.c: Definition of firmware 2.x functions for /* File hw_atl_utils_fw2x.c: Definition of firmware 2.x functions for
...@@ -134,7 +135,7 @@ static enum hw_atl_fw2x_rate link_speed_mask_2fw2x_ratemask(u32 speed) ...@@ -134,7 +135,7 @@ static enum hw_atl_fw2x_rate link_speed_mask_2fw2x_ratemask(u32 speed)
if (speed & AQ_NIC_RATE_5GSR) if (speed & AQ_NIC_RATE_5GSR)
rate |= FW2X_RATE_5G; rate |= FW2X_RATE_5G;
if (speed & AQ_NIC_RATE_2GS) if (speed & AQ_NIC_RATE_2G5)
rate |= FW2X_RATE_2G5; rate |= FW2X_RATE_2G5;
if (speed & AQ_NIC_RATE_1G) if (speed & AQ_NIC_RATE_1G)
...@@ -155,7 +156,7 @@ static u32 fw2x_to_eee_mask(u32 speed) ...@@ -155,7 +156,7 @@ static u32 fw2x_to_eee_mask(u32 speed)
if (speed & HW_ATL_FW2X_CAP_EEE_5G_MASK) if (speed & HW_ATL_FW2X_CAP_EEE_5G_MASK)
rate |= AQ_NIC_RATE_EEE_5G; rate |= AQ_NIC_RATE_EEE_5G;
if (speed & HW_ATL_FW2X_CAP_EEE_2G5_MASK) if (speed & HW_ATL_FW2X_CAP_EEE_2G5_MASK)
rate |= AQ_NIC_RATE_EEE_2GS; rate |= AQ_NIC_RATE_EEE_2G5;
if (speed & HW_ATL_FW2X_CAP_EEE_1G_MASK) if (speed & HW_ATL_FW2X_CAP_EEE_1G_MASK)
rate |= AQ_NIC_RATE_EEE_1G; rate |= AQ_NIC_RATE_EEE_1G;
...@@ -170,7 +171,7 @@ static u32 eee_mask_to_fw2x(u32 speed) ...@@ -170,7 +171,7 @@ static u32 eee_mask_to_fw2x(u32 speed)
rate |= HW_ATL_FW2X_CAP_EEE_10G_MASK; rate |= HW_ATL_FW2X_CAP_EEE_10G_MASK;
if (speed & AQ_NIC_RATE_EEE_5G) if (speed & AQ_NIC_RATE_EEE_5G)
rate |= HW_ATL_FW2X_CAP_EEE_5G_MASK; rate |= HW_ATL_FW2X_CAP_EEE_5G_MASK;
if (speed & AQ_NIC_RATE_EEE_2GS) if (speed & AQ_NIC_RATE_EEE_2G5)
rate |= HW_ATL_FW2X_CAP_EEE_2G5_MASK; rate |= HW_ATL_FW2X_CAP_EEE_2G5_MASK;
if (speed & AQ_NIC_RATE_EEE_1G) if (speed & AQ_NIC_RATE_EEE_1G)
rate |= HW_ATL_FW2X_CAP_EEE_1G_MASK; rate |= HW_ATL_FW2X_CAP_EEE_1G_MASK;
...@@ -282,8 +283,6 @@ static int aq_fw2x_get_mac_permanent(struct aq_hw_s *self, u8 *mac) ...@@ -282,8 +283,6 @@ static int aq_fw2x_get_mac_permanent(struct aq_hw_s *self, u8 *mac)
u32 efuse_addr = aq_hw_read_reg(self, HW_ATL_FW2X_MPI_EFUSE_ADDR); u32 efuse_addr = aq_hw_read_reg(self, HW_ATL_FW2X_MPI_EFUSE_ADDR);
u32 mac_addr[2] = { 0 }; u32 mac_addr[2] = { 0 };
int err = 0; int err = 0;
u32 h = 0U;
u32 l = 0U;
if (efuse_addr != 0) { if (efuse_addr != 0) {
err = hw_atl_utils_fw_downld_dwords(self, err = hw_atl_utils_fw_downld_dwords(self,
...@@ -298,26 +297,6 @@ static int aq_fw2x_get_mac_permanent(struct aq_hw_s *self, u8 *mac) ...@@ -298,26 +297,6 @@ static int aq_fw2x_get_mac_permanent(struct aq_hw_s *self, u8 *mac)
ether_addr_copy(mac, (u8 *)mac_addr); ether_addr_copy(mac, (u8 *)mac_addr);
if ((mac[0] & 0x01U) || ((mac[0] | mac[1] | mac[2]) == 0x00U)) {
unsigned int rnd = 0;
get_random_bytes(&rnd, sizeof(unsigned int));
l = 0xE3000000U | (0xFFFFU & rnd) | (0x00 << 16);
h = 0x8001300EU;
mac[5] = (u8)(0xFFU & l);
l >>= 8;
mac[4] = (u8)(0xFFU & l);
l >>= 8;
mac[3] = (u8)(0xFFU & l);
l >>= 8;
mac[2] = (u8)(0xFFU & l);
mac[1] = (u8)(0xFFU & h);
h >>= 8;
mac[0] = (u8)(0xFFU & h);
}
return err; return err;
} }
......
...@@ -60,7 +60,7 @@ const struct aq_hw_caps_s hw_atl2_caps_aqc113 = { ...@@ -60,7 +60,7 @@ const struct aq_hw_caps_s hw_atl2_caps_aqc113 = {
.media_type = AQ_HW_MEDIA_TYPE_TP, .media_type = AQ_HW_MEDIA_TYPE_TP,
.link_speed_msk = AQ_NIC_RATE_10G | .link_speed_msk = AQ_NIC_RATE_10G |
AQ_NIC_RATE_5G | AQ_NIC_RATE_5G |
AQ_NIC_RATE_2GS | AQ_NIC_RATE_2G5 |
AQ_NIC_RATE_1G | AQ_NIC_RATE_1G |
AQ_NIC_RATE_100M | AQ_NIC_RATE_100M |
AQ_NIC_RATE_10M, AQ_NIC_RATE_10M,
...@@ -172,7 +172,7 @@ static int hw_atl2_hw_rss_set(struct aq_hw_s *self, ...@@ -172,7 +172,7 @@ static int hw_atl2_hw_rss_set(struct aq_hw_s *self,
for (i = HW_ATL2_RSS_REDIRECTION_MAX; i--;) for (i = HW_ATL2_RSS_REDIRECTION_MAX; i--;)
hw_atl2_new_rpf_rss_redir_set(self, 0, i, indirection_table[i]); hw_atl2_new_rpf_rss_redir_set(self, 0, i, indirection_table[i]);
return hw_atl_b0_hw_rss_set(self, rss_params); return aq_hw_err_from_flags(self);
} }
static int hw_atl2_hw_init_tx_path(struct aq_hw_s *self) static int hw_atl2_hw_init_tx_path(struct aq_hw_s *self)
......
...@@ -75,14 +75,6 @@ int hw_atl2_utils_soft_reset(struct aq_hw_s *self) ...@@ -75,14 +75,6 @@ int hw_atl2_utils_soft_reset(struct aq_hw_s *self)
u32 rbl_request; u32 rbl_request;
int err; int err;
err = readx_poll_timeout_atomic(hw_atl2_mif_mcp_boot_reg_get, self,
rbl_status,
((rbl_status & AQ_A2_BOOT_STARTED) &&
(rbl_status != 0xFFFFFFFFu)),
10, 500000);
if (err)
aq_pr_trace("Boot code probably hanged, reboot anyway");
hw_atl2_mif_host_req_int_clr(self, 0x01); hw_atl2_mif_host_req_int_clr(self, 0x01);
rbl_request = AQ_A2_FW_BOOT_REQ_REBOOT; rbl_request = AQ_A2_FW_BOOT_REQ_REBOOT;
#ifdef AQ_CFG_FAST_START #ifdef AQ_CFG_FAST_START
......
...@@ -103,7 +103,7 @@ struct sleep_proxy_s { ...@@ -103,7 +103,7 @@ struct sleep_proxy_s {
u32 crc32; u32 crc32;
} wake_up_pattern[8]; } wake_up_pattern[8];
struct __attribute__ ((__packed__)) { struct __packed {
u8 arp_responder:1; u8 arp_responder:1;
u8 echo_responder:1; u8 echo_responder:1;
u8 igmp_client:1; u8 igmp_client:1;
...@@ -119,7 +119,7 @@ struct sleep_proxy_s { ...@@ -119,7 +119,7 @@ struct sleep_proxy_s {
u32 ipv4_offload_addr[8]; u32 ipv4_offload_addr[8];
u32 reserved[8]; u32 reserved[8];
struct __attribute__ ((__packed__)) { struct __packed {
u8 ns_responder:1; u8 ns_responder:1;
u8 echo_responder:1; u8 echo_responder:1;
u8 mld_client:1; u8 mld_client:1;
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
#include <linux/iopoll.h> #include <linux/iopoll.h>
#include "aq_hw.h" #include "aq_hw.h"
#include "aq_hw_utils.h"
#include "hw_atl/hw_atl_llh.h" #include "hw_atl/hw_atl_llh.h"
#include "hw_atl2_utils.h" #include "hw_atl2_utils.h"
#include "hw_atl2_llh.h" #include "hw_atl2_llh.h"
...@@ -129,7 +130,7 @@ static void a2_link_speed_mask2fw(u32 speed, ...@@ -129,7 +130,7 @@ static void a2_link_speed_mask2fw(u32 speed,
link_options->rate_10G = !!(speed & AQ_NIC_RATE_10G); link_options->rate_10G = !!(speed & AQ_NIC_RATE_10G);
link_options->rate_5G = !!(speed & AQ_NIC_RATE_5G); link_options->rate_5G = !!(speed & AQ_NIC_RATE_5G);
link_options->rate_N5G = !!(speed & AQ_NIC_RATE_5GSR); link_options->rate_N5G = !!(speed & AQ_NIC_RATE_5GSR);
link_options->rate_2P5G = !!(speed & AQ_NIC_RATE_2GS); link_options->rate_2P5G = !!(speed & AQ_NIC_RATE_2G5);
link_options->rate_N2P5G = link_options->rate_2P5G; link_options->rate_N2P5G = link_options->rate_2P5G;
link_options->rate_1G = !!(speed & AQ_NIC_RATE_1G); link_options->rate_1G = !!(speed & AQ_NIC_RATE_1G);
link_options->rate_100M = !!(speed & AQ_NIC_RATE_100M); link_options->rate_100M = !!(speed & AQ_NIC_RATE_100M);
...@@ -212,28 +213,6 @@ static int aq_a2_fw_get_mac_permanent(struct aq_hw_s *self, u8 *mac) ...@@ -212,28 +213,6 @@ static int aq_a2_fw_get_mac_permanent(struct aq_hw_s *self, u8 *mac)
hw_atl2_shared_buffer_get(self, mac_address, mac_address); hw_atl2_shared_buffer_get(self, mac_address, mac_address);
ether_addr_copy(mac, (u8 *)mac_address.aligned.mac_address); ether_addr_copy(mac, (u8 *)mac_address.aligned.mac_address);
if ((mac[0] & 0x01U) || ((mac[0] | mac[1] | mac[2]) == 0x00U)) {
unsigned int rnd = 0;
u32 h;
u32 l;
get_random_bytes(&rnd, sizeof(unsigned int));
l = 0xE3000000U | (0xFFFFU & rnd) | (0x00 << 16);
h = 0x8001300EU;
mac[5] = (u8)(0xFFU & l);
l >>= 8;
mac[4] = (u8)(0xFFU & l);
l >>= 8;
mac[3] = (u8)(0xFFU & l);
l >>= 8;
mac[2] = (u8)(0xFFU & l);
mac[1] = (u8)(0xFFU & h);
h >>= 8;
mac[0] = (u8)(0xFFU & h);
}
return 0; return 0;
} }
......
...@@ -846,8 +846,7 @@ static int get_ingress_sakey_record(struct aq_hw_s *hw, ...@@ -846,8 +846,7 @@ static int get_ingress_sakey_record(struct aq_hw_s *hw,
rec->key[7] = packed_record[14]; rec->key[7] = packed_record[14];
rec->key[7] |= packed_record[15] << 16; rec->key[7] |= packed_record[15] << 16;
rec->key_len = (rec->key_len & 0xFFFFFFFC) | rec->key_len = packed_record[16] & 0x3;
(packed_record[16] & 0x3);
return 0; return 0;
} }
...@@ -1158,6 +1157,7 @@ static int set_egress_ctlf_record(struct aq_hw_s *hw, ...@@ -1158,6 +1157,7 @@ static int set_egress_ctlf_record(struct aq_hw_s *hw,
packed_record[0] = rec->sa_da[0] & 0xFFFF; packed_record[0] = rec->sa_da[0] & 0xFFFF;
packed_record[1] = (rec->sa_da[0] >> 16) & 0xFFFF; packed_record[1] = (rec->sa_da[0] >> 16) & 0xFFFF;
packed_record[2] = rec->sa_da[1] & 0xFFFF; packed_record[2] = rec->sa_da[1] & 0xFFFF;
packed_record[3] = rec->eth_type & 0xFFFF; packed_record[3] = rec->eth_type & 0xFFFF;
...@@ -1552,7 +1552,7 @@ static int set_egress_sc_record(struct aq_hw_s *hw, ...@@ -1552,7 +1552,7 @@ static int set_egress_sc_record(struct aq_hw_s *hw,
packed_record[5] |= (rec->sak_len & 0x3) << 4; packed_record[5] |= (rec->sak_len & 0x3) << 4;
packed_record[7] |= (rec->valid & 0x1) << 15; packed_record[7] = (rec->valid & 0x1) << 15;
return set_raw_egress_record(hw, packed_record, 8, 2, return set_raw_egress_record(hw, packed_record, 8, 2,
ROWOFFSET_EGRESSSCRECORD + table_index); ROWOFFSET_EGRESSSCRECORD + table_index);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment