You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
139 lines
5.1 KiB
139 lines
5.1 KiB
From 48661c3c86ef32cdfda6f4dcc878b340afb4fa69 Mon Sep 17 00:00:00 2001
|
|
From: Igor Russkikh <irusskik@redhat.com>
|
|
Date: Fri, 6 Nov 2020 18:37:30 -0500
|
|
Subject: [PATCH 073/139] [netdrv] net: atlantic: add hw_soft_reset, hw_prepare
|
|
to hw_ops
|
|
|
|
Message-id: <1604687916-15087-74-git-send-email-irusskik@redhat.com>
|
|
Patchwork-id: 338498
|
|
Patchwork-instance: patchwork
|
|
O-Subject: [RHEL8.4 BZ 1857861 073/139] net: atlantic: add hw_soft_reset, hw_prepare to hw_ops
|
|
Bugzilla: 1857861
|
|
RH-Acked-by: David Arcari <darcari@redhat.com>
|
|
RH-Acked-by: John Linville <linville@redhat.com>
|
|
RH-Acked-by: Tony Camuso <tcamuso@redhat.com>
|
|
|
|
Bugzilla: http://bugzilla.redhat.com/1857861
|
|
|
|
commit 099d074e3f0cd3f48e57e3349b9f8a25b0e3feb8
|
|
Author: Mark Starovoytov <mstarovoitov@marvell.com>
|
|
Date: Thu Apr 30 11:04:32 2020 +0300
|
|
|
|
net: atlantic: add hw_soft_reset, hw_prepare to hw_ops
|
|
|
|
A2 will have a different implementation of these 2 APIs, so
|
|
this patch moves them to hw_ops in preparation for A2.
|
|
|
|
Signed-off-by: Mark Starovoytov <mstarovoitov@marvell.com>
|
|
Co-developed-by: Dmitry Bezrukov <dbezrukov@marvell.com>
|
|
Signed-off-by: Dmitry Bezrukov <dbezrukov@marvell.com>
|
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
|
|
|
Signed-off-by: Igor Russkikh <irusskik@redhat.com>
|
|
|
|
Cc: David Arcari <darcari@redhat.com>
|
|
Cc: Igor Russkikh <irusskik@redhat.com>
|
|
Signed-off-by: Jan Stancek <jstancek@redhat.com>
|
|
---
|
|
drivers/net/ethernet/aquantia/atlantic/aq_hw.h | 5 +++++
|
|
drivers/net/ethernet/aquantia/atlantic/aq_nic.c | 16 +++++++++++++++-
|
|
.../net/ethernet/aquantia/atlantic/hw_atl/hw_atl_a0.c | 2 ++
|
|
.../net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c | 2 ++
|
|
.../net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.c | 4 ----
|
|
5 files changed, 24 insertions(+), 5 deletions(-)
|
|
|
|
diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_hw.h b/drivers/net/ethernet/aquantia/atlantic/aq_hw.h
|
|
index c8d1bb38f746..fda665280937 100644
|
|
--- a/drivers/net/ethernet/aquantia/atlantic/aq_hw.h
|
|
+++ b/drivers/net/ethernet/aquantia/atlantic/aq_hw.h
|
|
@@ -182,6 +182,11 @@ struct aq_hw_ops {
|
|
|
|
int (*hw_set_mac_address)(struct aq_hw_s *self, u8 *mac_addr);
|
|
|
|
+ int (*hw_soft_reset)(struct aq_hw_s *self);
|
|
+
|
|
+ int (*hw_prepare)(struct aq_hw_s *self,
|
|
+ const struct aq_fw_ops **fw_ops);
|
|
+
|
|
int (*hw_reset)(struct aq_hw_s *self);
|
|
|
|
int (*hw_init)(struct aq_hw_s *self, u8 *mac_addr);
|
|
diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_nic.c b/drivers/net/ethernet/aquantia/atlantic/aq_nic.c
|
|
index 4b8ee15c76f1..69016ae108b2 100644
|
|
--- a/drivers/net/ethernet/aquantia/atlantic/aq_nic.c
|
|
+++ b/drivers/net/ethernet/aquantia/atlantic/aq_nic.c
|
|
@@ -249,6 +249,20 @@ static void aq_nic_polling_timer_cb(struct timer_list *t)
|
|
AQ_CFG_POLLING_TIMER_INTERVAL);
|
|
}
|
|
|
|
+static int aq_nic_hw_prepare(struct aq_nic_s *self)
|
|
+{
|
|
+ int err = 0;
|
|
+
|
|
+ err = self->aq_hw_ops->hw_soft_reset(self->aq_hw);
|
|
+ if (err)
|
|
+ goto exit;
|
|
+
|
|
+ err = self->aq_hw_ops->hw_prepare(self->aq_hw, &self->aq_fw_ops);
|
|
+
|
|
+exit:
|
|
+ return err;
|
|
+}
|
|
+
|
|
int aq_nic_ndev_register(struct aq_nic_s *self)
|
|
{
|
|
int err = 0;
|
|
@@ -258,7 +272,7 @@ int aq_nic_ndev_register(struct aq_nic_s *self)
|
|
goto err_exit;
|
|
}
|
|
|
|
- err = hw_atl_utils_initfw(self->aq_hw, &self->aq_fw_ops);
|
|
+ err = aq_nic_hw_prepare(self);
|
|
if (err)
|
|
goto err_exit;
|
|
|
|
diff --git a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_a0.c b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_a0.c
|
|
index 9b1062b8af64..2dba8c277ecb 100644
|
|
--- a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_a0.c
|
|
+++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_a0.c
|
|
@@ -886,6 +886,8 @@ static int hw_atl_a0_hw_ring_rx_stop(struct aq_hw_s *self,
|
|
}
|
|
|
|
const struct aq_hw_ops hw_atl_ops_a0 = {
|
|
+ .hw_soft_reset = hw_atl_utils_soft_reset,
|
|
+ .hw_prepare = hw_atl_utils_initfw,
|
|
.hw_set_mac_address = hw_atl_a0_hw_mac_addr_set,
|
|
.hw_init = hw_atl_a0_hw_init,
|
|
.hw_reset = hw_atl_a0_hw_reset,
|
|
diff --git a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c
|
|
index d20d91cdece8..4e2e4eef028d 100644
|
|
--- a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c
|
|
+++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c
|
|
@@ -1478,6 +1478,8 @@ static int hw_atl_b0_set_loopback(struct aq_hw_s *self, u32 mode, bool enable)
|
|
}
|
|
|
|
const struct aq_hw_ops hw_atl_ops_b0 = {
|
|
+ .hw_soft_reset = hw_atl_utils_soft_reset,
|
|
+ .hw_prepare = hw_atl_utils_initfw,
|
|
.hw_set_mac_address = hw_atl_b0_hw_mac_addr_set,
|
|
.hw_init = hw_atl_b0_hw_init,
|
|
.hw_reset = hw_atl_b0_hw_reset,
|
|
diff --git a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.c b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.c
|
|
index 354705f9bc49..7259bcb81e9b 100644
|
|
--- a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.c
|
|
+++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.c
|
|
@@ -67,10 +67,6 @@ int hw_atl_utils_initfw(struct aq_hw_s *self, const struct aq_fw_ops **fw_ops)
|
|
{
|
|
int err = 0;
|
|
|
|
- err = hw_atl_utils_soft_reset(self);
|
|
- if (err)
|
|
- return err;
|
|
-
|
|
hw_atl_utils_hw_chip_features_init(self,
|
|
&self->chip_features);
|
|
|
|
--
|
|
2.13.6
|
|
|