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.
230 lines
8.3 KiB
230 lines
8.3 KiB
From 21348f1be3a58a274e864b0b5030474d38b83b2f Mon Sep 17 00:00:00 2001
|
|
From: Igor Russkikh <irusskik@redhat.com>
|
|
Date: Fri, 6 Nov 2020 18:37:35 -0500
|
|
Subject: [PATCH 078/139] [netdrv] net: atlantic: minimal A2 HW bindings
|
|
required for fw_ops
|
|
|
|
Message-id: <1604687916-15087-79-git-send-email-irusskik@redhat.com>
|
|
Patchwork-id: 338506
|
|
Patchwork-instance: patchwork
|
|
O-Subject: [RHEL8.4 BZ 1857861 078/139] net: atlantic: minimal A2 HW bindings required for fw_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 258ff0cf61d607e17f2e273aae3e50c1dd251dec
|
|
Author: Dmitry Bogdanov <dbogdanov@marvell.com>
|
|
Date: Thu Apr 30 11:04:37 2020 +0300
|
|
|
|
net: atlantic: minimal A2 HW bindings required for fw_ops
|
|
|
|
This patch adds the bare minimum of A2 HW bindings required to
|
|
get fw_ops working.
|
|
|
|
Signed-off-by: Dmitry Bogdanov <dbogdanov@marvell.com>
|
|
Signed-off-by: Mark Starovoytov <mstarovoitov@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/Makefile | 5 +-
|
|
drivers/net/ethernet/aquantia/atlantic/aq_hw.h | 1 +
|
|
.../aquantia/atlantic/hw_atl2/hw_atl2_llh.c | 56 ++++++++++++++++++++++
|
|
.../aquantia/atlantic/hw_atl2/hw_atl2_llh.h | 31 ++++++++++++
|
|
.../atlantic/hw_atl2/hw_atl2_llh_internal.h | 48 +++++++++++++++++++
|
|
5 files changed, 139 insertions(+), 2 deletions(-)
|
|
create mode 100644 drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2_llh.c
|
|
create mode 100644 drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2_llh.h
|
|
create mode 100644 drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2_llh_internal.h
|
|
|
|
diff --git a/drivers/net/ethernet/aquantia/atlantic/Makefile b/drivers/net/ethernet/aquantia/atlantic/Makefile
|
|
index 6e0a6e234483..7b553460a627 100644
|
|
--- a/drivers/net/ethernet/aquantia/atlantic/Makefile
|
|
+++ b/drivers/net/ethernet/aquantia/atlantic/Makefile
|
|
@@ -22,6 +22,7 @@ atlantic-objs := aq_main.o \
|
|
hw_atl/hw_atl_b0.o \
|
|
hw_atl/hw_atl_utils.o \
|
|
hw_atl/hw_atl_utils_fw2x.o \
|
|
- hw_atl/hw_atl_llh.o
|
|
+ hw_atl/hw_atl_llh.o \
|
|
+ hw_atl2/hw_atl2_llh.o
|
|
|
|
-atlantic-$(CONFIG_PTP_1588_CLOCK) += aq_ptp.o
|
|
\ No newline at end of file
|
|
+atlantic-$(CONFIG_PTP_1588_CLOCK) += aq_ptp.o
|
|
diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_hw.h b/drivers/net/ethernet/aquantia/atlantic/aq_hw.h
|
|
index 01208e2d2ae4..3bce9f8e24d8 100644
|
|
--- a/drivers/net/ethernet/aquantia/atlantic/aq_hw.h
|
|
+++ b/drivers/net/ethernet/aquantia/atlantic/aq_hw.h
|
|
@@ -172,6 +172,7 @@ struct aq_hw_s {
|
|
struct hw_atl_utils_fw_rpc rpc;
|
|
s64 ptp_clk_offset;
|
|
u16 phy_id;
|
|
+ void *priv;
|
|
};
|
|
|
|
struct aq_ring_s;
|
|
diff --git a/drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2_llh.c b/drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2_llh.c
|
|
new file mode 100644
|
|
index 000000000000..b6164bc5fffd
|
|
--- /dev/null
|
|
+++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2_llh.c
|
|
@@ -0,0 +1,56 @@
|
|
+// SPDX-License-Identifier: GPL-2.0-only
|
|
+/* Atlantic Network Driver
|
|
+ * Copyright (C) 2020 Marvell International Ltd.
|
|
+ */
|
|
+
|
|
+#include "hw_atl2_llh.h"
|
|
+#include "hw_atl2_llh_internal.h"
|
|
+#include "aq_hw_utils.h"
|
|
+
|
|
+void hw_atl2_mif_shared_buf_get(struct aq_hw_s *aq_hw, int offset, u32 *data,
|
|
+ int len)
|
|
+{
|
|
+ int j = 0;
|
|
+ int i;
|
|
+
|
|
+ for (i = offset; i < offset + len; i++, j++)
|
|
+ data[j] = aq_hw_read_reg(aq_hw,
|
|
+ HW_ATL2_MIF_SHARED_BUFFER_IN_ADR(i));
|
|
+}
|
|
+
|
|
+void hw_atl2_mif_shared_buf_write(struct aq_hw_s *aq_hw, int offset, u32 *data,
|
|
+ int len)
|
|
+{
|
|
+ int j = 0;
|
|
+ int i;
|
|
+
|
|
+ for (i = offset; i < offset + len; i++, j++)
|
|
+ aq_hw_write_reg(aq_hw, HW_ATL2_MIF_SHARED_BUFFER_IN_ADR(i),
|
|
+ data[j]);
|
|
+}
|
|
+
|
|
+void hw_atl2_mif_shared_buf_read(struct aq_hw_s *aq_hw, int offset, u32 *data,
|
|
+ int len)
|
|
+{
|
|
+ int j = 0;
|
|
+ int i;
|
|
+
|
|
+ for (i = offset; i < offset + len; i++, j++)
|
|
+ data[j] = aq_hw_read_reg(aq_hw,
|
|
+ HW_ATL2_MIF_SHARED_BUFFER_OUT_ADR(i));
|
|
+}
|
|
+
|
|
+void hw_atl2_mif_host_finished_write_set(struct aq_hw_s *aq_hw, u32 finish)
|
|
+{
|
|
+ aq_hw_write_reg_bit(aq_hw, HW_ATL2_MIF_HOST_FINISHED_WRITE_ADR,
|
|
+ HW_ATL2_MIF_HOST_FINISHED_WRITE_MSK,
|
|
+ HW_ATL2_MIF_HOST_FINISHED_WRITE_SHIFT,
|
|
+ finish);
|
|
+}
|
|
+
|
|
+u32 hw_atl2_mif_mcp_finished_read_get(struct aq_hw_s *aq_hw)
|
|
+{
|
|
+ return aq_hw_read_reg_bit(aq_hw, HW_ATL2_MIF_MCP_FINISHED_READ_ADR,
|
|
+ HW_ATL2_MIF_MCP_FINISHED_READ_MSK,
|
|
+ HW_ATL2_MIF_MCP_FINISHED_READ_SHIFT);
|
|
+}
|
|
diff --git a/drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2_llh.h b/drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2_llh.h
|
|
new file mode 100644
|
|
index 000000000000..8ef8bd6b2534
|
|
--- /dev/null
|
|
+++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2_llh.h
|
|
@@ -0,0 +1,31 @@
|
|
+/* SPDX-License-Identifier: GPL-2.0-only */
|
|
+/* Atlantic Network Driver
|
|
+ * Copyright (C) 2020 Marvell International Ltd.
|
|
+ */
|
|
+
|
|
+#ifndef HW_ATL2_LLH_H
|
|
+#define HW_ATL2_LLH_H
|
|
+
|
|
+#include <linux/types.h>
|
|
+
|
|
+struct aq_hw_s;
|
|
+
|
|
+/* get data from firmware shared input buffer */
|
|
+void hw_atl2_mif_shared_buf_get(struct aq_hw_s *aq_hw, int offset, u32 *data,
|
|
+ int len);
|
|
+
|
|
+/* set data into firmware shared input buffer */
|
|
+void hw_atl2_mif_shared_buf_write(struct aq_hw_s *aq_hw, int offset, u32 *data,
|
|
+ int len);
|
|
+
|
|
+/* get data from firmware shared output buffer */
|
|
+void hw_atl2_mif_shared_buf_read(struct aq_hw_s *aq_hw, int offset, u32 *data,
|
|
+ int len);
|
|
+
|
|
+/* set host finished write shared buffer indication */
|
|
+void hw_atl2_mif_host_finished_write_set(struct aq_hw_s *aq_hw, u32 finish);
|
|
+
|
|
+/* get mcp finished read shared buffer indication */
|
|
+u32 hw_atl2_mif_mcp_finished_read_get(struct aq_hw_s *aq_hw);
|
|
+
|
|
+#endif /* HW_ATL2_LLH_H */
|
|
diff --git a/drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2_llh_internal.h b/drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2_llh_internal.h
|
|
new file mode 100644
|
|
index 000000000000..835deb2d1950
|
|
--- /dev/null
|
|
+++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2_llh_internal.h
|
|
@@ -0,0 +1,48 @@
|
|
+/* SPDX-License-Identifier: GPL-2.0-only */
|
|
+/* Atlantic Network Driver
|
|
+ * Copyright (C) 2020 Marvell International Ltd.
|
|
+ */
|
|
+
|
|
+#ifndef HW_ATL2_LLH_INTERNAL_H
|
|
+#define HW_ATL2_LLH_INTERNAL_H
|
|
+
|
|
+/* Register address for firmware shared input buffer */
|
|
+#define HW_ATL2_MIF_SHARED_BUFFER_IN_ADR(dword) (0x00012000U + (dword) * 0x4U)
|
|
+/* Register address for firmware shared output buffer */
|
|
+#define HW_ATL2_MIF_SHARED_BUFFER_OUT_ADR(dword) (0x00013000U + (dword) * 0x4U)
|
|
+
|
|
+/* pif_host_finished_buf_wr_i Bitfield Definitions
|
|
+ * Preprocessor definitions for the bitfield "pif_host_finished_buf_wr_i".
|
|
+ * PORT="pif_host_finished_buf_wr_i"
|
|
+ */
|
|
+/* Register address for bitfield rpif_host_finished_buf_wr_i */
|
|
+#define HW_ATL2_MIF_HOST_FINISHED_WRITE_ADR 0x00000e00u
|
|
+/* Bitmask for bitfield pif_host_finished_buf_wr_i */
|
|
+#define HW_ATL2_MIF_HOST_FINISHED_WRITE_MSK 0x00000001u
|
|
+/* Inverted bitmask for bitfield pif_host_finished_buf_wr_i */
|
|
+#define HW_ATL2_MIF_HOST_FINISHED_WRITE_MSKN 0xFFFFFFFEu
|
|
+/* Lower bit position of bitfield pif_host_finished_buf_wr_i */
|
|
+#define HW_ATL2_MIF_HOST_FINISHED_WRITE_SHIFT 0
|
|
+/* Width of bitfield pif_host_finished_buf_wr_i */
|
|
+#define HW_ATL2_MIF_HOST_FINISHED_WRITE_WIDTH 1
|
|
+/* Default value of bitfield pif_host_finished_buf_wr_i */
|
|
+#define HW_ATL2_MIF_HOST_FINISHED_WRITE_DEFAULT 0x0
|
|
+
|
|
+/* pif_mcp_finished_buf_rd_i Bitfield Definitions
|
|
+ * Preprocessor definitions for the bitfield "pif_mcp_finished_buf_rd_i".
|
|
+ * PORT="pif_mcp_finished_buf_rd_i"
|
|
+ */
|
|
+/* Register address for bitfield pif_mcp_finished_buf_rd_i */
|
|
+#define HW_ATL2_MIF_MCP_FINISHED_READ_ADR 0x00000e04u
|
|
+/* Bitmask for bitfield pif_mcp_finished_buf_rd_i */
|
|
+#define HW_ATL2_MIF_MCP_FINISHED_READ_MSK 0x00000001u
|
|
+/* Inverted bitmask for bitfield pif_mcp_finished_buf_rd_i */
|
|
+#define HW_ATL2_MIF_MCP_FINISHED_READ_MSKN 0xFFFFFFFEu
|
|
+/* Lower bit position of bitfield pif_mcp_finished_buf_rd_i */
|
|
+#define HW_ATL2_MIF_MCP_FINISHED_READ_SHIFT 0
|
|
+/* Width of bitfield pif_mcp_finished_buf_rd_i */
|
|
+#define HW_ATL2_MIF_MCP_FINISHED_READ_WIDTH 1
|
|
+/* Default value of bitfield pif_mcp_finished_buf_rd_i */
|
|
+#define HW_ATL2_MIF_MCP_FINISHED_READ_DEFAULT 0x0
|
|
+
|
|
+#endif /* HW_ATL2_LLH_INTERNAL_H */
|
|
--
|
|
2.13.6
|
|
|