mirror of
git://git.openwrt.org/openwrt/openwrt.git
synced 2024-12-20 22:01:38 +00:00
233 lines
7.0 KiB
Diff
233 lines
7.0 KiB
Diff
|
From: Lorenzo Bianconi <lorenzo@kernel.org>
|
||
|
Date: Mon, 18 Sep 2023 12:29:05 +0200
|
||
|
Subject: [PATCH] net: ethernet: mtk_wed: introduce versioning utility routines
|
||
|
|
||
|
Similar to mtk_eth_soc, introduce the following wed versioning
|
||
|
utility routines:
|
||
|
- mtk_wed_is_v1
|
||
|
- mtk_wed_is_v2
|
||
|
|
||
|
This is a preliminary patch to introduce WED support for MT7988 SoC
|
||
|
|
||
|
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||
|
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||
|
---
|
||
|
|
||
|
--- a/drivers/net/ethernet/mediatek/mtk_wed.c
|
||
|
+++ b/drivers/net/ethernet/mediatek/mtk_wed.c
|
||
|
@@ -277,7 +277,7 @@ mtk_wed_assign(struct mtk_wed_device *de
|
||
|
if (!hw->wed_dev)
|
||
|
goto out;
|
||
|
|
||
|
- if (hw->version == 1)
|
||
|
+ if (mtk_wed_is_v1(hw))
|
||
|
return NULL;
|
||
|
|
||
|
/* MT7986 WED devices do not have any pcie slot restrictions */
|
||
|
@@ -358,7 +358,7 @@ mtk_wed_tx_buffer_alloc(struct mtk_wed_d
|
||
|
desc->buf0 = cpu_to_le32(buf_phys);
|
||
|
desc->buf1 = cpu_to_le32(buf_phys + txd_size);
|
||
|
|
||
|
- if (dev->hw->version == 1)
|
||
|
+ if (mtk_wed_is_v1(dev->hw))
|
||
|
ctrl = FIELD_PREP(MTK_WDMA_DESC_CTRL_LEN0, txd_size) |
|
||
|
FIELD_PREP(MTK_WDMA_DESC_CTRL_LEN1,
|
||
|
MTK_WED_BUF_SIZE - txd_size) |
|
||
|
@@ -497,7 +497,7 @@ mtk_wed_set_ext_int(struct mtk_wed_devic
|
||
|
{
|
||
|
u32 mask = MTK_WED_EXT_INT_STATUS_ERROR_MASK;
|
||
|
|
||
|
- if (dev->hw->version == 1)
|
||
|
+ if (mtk_wed_is_v1(dev->hw))
|
||
|
mask |= MTK_WED_EXT_INT_STATUS_TX_DRV_R_RESP_ERR;
|
||
|
else
|
||
|
mask |= MTK_WED_EXT_INT_STATUS_RX_FBUF_LO_TH |
|
||
|
@@ -576,7 +576,7 @@ mtk_wed_dma_disable(struct mtk_wed_devic
|
||
|
MTK_WDMA_GLO_CFG_RX_INFO1_PRERES |
|
||
|
MTK_WDMA_GLO_CFG_RX_INFO2_PRERES);
|
||
|
|
||
|
- if (dev->hw->version == 1) {
|
||
|
+ if (mtk_wed_is_v1(dev->hw)) {
|
||
|
regmap_write(dev->hw->mirror, dev->hw->index * 4, 0);
|
||
|
wdma_clr(dev, MTK_WDMA_GLO_CFG,
|
||
|
MTK_WDMA_GLO_CFG_RX_INFO3_PRERES);
|
||
|
@@ -605,7 +605,7 @@ mtk_wed_stop(struct mtk_wed_device *dev)
|
||
|
wdma_w32(dev, MTK_WDMA_INT_GRP2, 0);
|
||
|
wed_w32(dev, MTK_WED_WPDMA_INT_MASK, 0);
|
||
|
|
||
|
- if (dev->hw->version == 1)
|
||
|
+ if (mtk_wed_is_v1(dev->hw))
|
||
|
return;
|
||
|
|
||
|
wed_w32(dev, MTK_WED_EXT_INT_MASK1, 0);
|
||
|
@@ -624,7 +624,7 @@ mtk_wed_deinit(struct mtk_wed_device *de
|
||
|
MTK_WED_CTRL_WED_TX_BM_EN |
|
||
|
MTK_WED_CTRL_WED_TX_FREE_AGENT_EN);
|
||
|
|
||
|
- if (dev->hw->version == 1)
|
||
|
+ if (mtk_wed_is_v1(dev->hw))
|
||
|
return;
|
||
|
|
||
|
wed_clr(dev, MTK_WED_CTRL,
|
||
|
@@ -730,7 +730,7 @@ mtk_wed_bus_init(struct mtk_wed_device *
|
||
|
static void
|
||
|
mtk_wed_set_wpdma(struct mtk_wed_device *dev)
|
||
|
{
|
||
|
- if (dev->hw->version == 1) {
|
||
|
+ if (mtk_wed_is_v1(dev->hw)) {
|
||
|
wed_w32(dev, MTK_WED_WPDMA_CFG_BASE, dev->wlan.wpdma_phys);
|
||
|
} else {
|
||
|
mtk_wed_bus_init(dev);
|
||
|
@@ -761,7 +761,7 @@ mtk_wed_hw_init_early(struct mtk_wed_dev
|
||
|
MTK_WED_WDMA_GLO_CFG_IDLE_DMAD_SUPPLY;
|
||
|
wed_m32(dev, MTK_WED_WDMA_GLO_CFG, mask, set);
|
||
|
|
||
|
- if (dev->hw->version == 1) {
|
||
|
+ if (mtk_wed_is_v1(dev->hw)) {
|
||
|
u32 offset = dev->hw->index ? 0x04000400 : 0;
|
||
|
|
||
|
wdma_set(dev, MTK_WDMA_GLO_CFG,
|
||
|
@@ -934,7 +934,7 @@ mtk_wed_hw_init(struct mtk_wed_device *d
|
||
|
|
||
|
wed_w32(dev, MTK_WED_TX_BM_BUF_LEN, MTK_WED_PKT_SIZE);
|
||
|
|
||
|
- if (dev->hw->version == 1) {
|
||
|
+ if (mtk_wed_is_v1(dev->hw)) {
|
||
|
wed_w32(dev, MTK_WED_TX_BM_TKID,
|
||
|
FIELD_PREP(MTK_WED_TX_BM_TKID_START,
|
||
|
dev->wlan.token_start) |
|
||
|
@@ -967,7 +967,7 @@ mtk_wed_hw_init(struct mtk_wed_device *d
|
||
|
|
||
|
mtk_wed_reset(dev, MTK_WED_RESET_TX_BM);
|
||
|
|
||
|
- if (dev->hw->version == 1) {
|
||
|
+ if (mtk_wed_is_v1(dev->hw)) {
|
||
|
wed_set(dev, MTK_WED_CTRL,
|
||
|
MTK_WED_CTRL_WED_TX_BM_EN |
|
||
|
MTK_WED_CTRL_WED_TX_FREE_AGENT_EN);
|
||
|
@@ -1217,7 +1217,7 @@ mtk_wed_reset_dma(struct mtk_wed_device
|
||
|
}
|
||
|
|
||
|
dev->init_done = false;
|
||
|
- if (dev->hw->version == 1)
|
||
|
+ if (mtk_wed_is_v1(dev->hw))
|
||
|
return;
|
||
|
|
||
|
if (!busy) {
|
||
|
@@ -1343,7 +1343,7 @@ mtk_wed_configure_irq(struct mtk_wed_dev
|
||
|
MTK_WED_CTRL_WED_TX_BM_EN |
|
||
|
MTK_WED_CTRL_WED_TX_FREE_AGENT_EN);
|
||
|
|
||
|
- if (dev->hw->version == 1) {
|
||
|
+ if (mtk_wed_is_v1(dev->hw)) {
|
||
|
wed_w32(dev, MTK_WED_PCIE_INT_TRIGGER,
|
||
|
MTK_WED_PCIE_INT_TRIGGER_STATUS);
|
||
|
|
||
|
@@ -1416,7 +1416,7 @@ mtk_wed_dma_enable(struct mtk_wed_device
|
||
|
MTK_WDMA_GLO_CFG_RX_INFO1_PRERES |
|
||
|
MTK_WDMA_GLO_CFG_RX_INFO2_PRERES);
|
||
|
|
||
|
- if (dev->hw->version == 1) {
|
||
|
+ if (mtk_wed_is_v1(dev->hw)) {
|
||
|
wdma_set(dev, MTK_WDMA_GLO_CFG,
|
||
|
MTK_WDMA_GLO_CFG_RX_INFO3_PRERES);
|
||
|
} else {
|
||
|
@@ -1465,7 +1465,7 @@ mtk_wed_start(struct mtk_wed_device *dev
|
||
|
|
||
|
mtk_wed_set_ext_int(dev, true);
|
||
|
|
||
|
- if (dev->hw->version == 1) {
|
||
|
+ if (mtk_wed_is_v1(dev->hw)) {
|
||
|
u32 val = dev->wlan.wpdma_phys | MTK_PCIE_MIRROR_MAP_EN |
|
||
|
FIELD_PREP(MTK_PCIE_MIRROR_MAP_WED_ID,
|
||
|
dev->hw->index);
|
||
|
@@ -1550,7 +1550,7 @@ mtk_wed_attach(struct mtk_wed_device *de
|
||
|
}
|
||
|
|
||
|
mtk_wed_hw_init_early(dev);
|
||
|
- if (hw->version == 1) {
|
||
|
+ if (mtk_wed_is_v1(hw)) {
|
||
|
regmap_update_bits(hw->hifsys, HIFSYS_DMA_AG_MAP,
|
||
|
BIT(hw->index), 0);
|
||
|
} else {
|
||
|
@@ -1618,7 +1618,7 @@ static int
|
||
|
mtk_wed_txfree_ring_setup(struct mtk_wed_device *dev, void __iomem *regs)
|
||
|
{
|
||
|
struct mtk_wed_ring *ring = &dev->txfree_ring;
|
||
|
- int i, index = dev->hw->version == 1;
|
||
|
+ int i, index = mtk_wed_is_v1(dev->hw);
|
||
|
|
||
|
/*
|
||
|
* For txfree event handling, the same DMA ring is shared between WED
|
||
|
@@ -1676,7 +1676,7 @@ mtk_wed_irq_get(struct mtk_wed_device *d
|
||
|
{
|
||
|
u32 val, ext_mask = MTK_WED_EXT_INT_STATUS_ERROR_MASK;
|
||
|
|
||
|
- if (dev->hw->version == 1)
|
||
|
+ if (mtk_wed_is_v1(dev->hw))
|
||
|
ext_mask |= MTK_WED_EXT_INT_STATUS_TX_DRV_R_RESP_ERR;
|
||
|
else
|
||
|
ext_mask |= MTK_WED_EXT_INT_STATUS_RX_FBUF_LO_TH |
|
||
|
@@ -1843,7 +1843,7 @@ mtk_wed_setup_tc(struct mtk_wed_device *
|
||
|
{
|
||
|
struct mtk_wed_hw *hw = wed->hw;
|
||
|
|
||
|
- if (hw->version < 2)
|
||
|
+ if (mtk_wed_is_v1(hw))
|
||
|
return -EOPNOTSUPP;
|
||
|
|
||
|
switch (type) {
|
||
|
@@ -1917,9 +1917,9 @@ void mtk_wed_add_hw(struct device_node *
|
||
|
hw->wdma = wdma;
|
||
|
hw->index = index;
|
||
|
hw->irq = irq;
|
||
|
- hw->version = mtk_is_netsys_v1(eth) ? 1 : 2;
|
||
|
+ hw->version = eth->soc->version;
|
||
|
|
||
|
- if (hw->version == 1) {
|
||
|
+ if (mtk_wed_is_v1(hw)) {
|
||
|
hw->mirror = syscon_regmap_lookup_by_phandle(eth_np,
|
||
|
"mediatek,pcie-mirror");
|
||
|
hw->hifsys = syscon_regmap_lookup_by_phandle(eth_np,
|
||
|
--- a/drivers/net/ethernet/mediatek/mtk_wed.h
|
||
|
+++ b/drivers/net/ethernet/mediatek/mtk_wed.h
|
||
|
@@ -40,6 +40,16 @@ struct mtk_wdma_info {
|
||
|
};
|
||
|
|
||
|
#ifdef CONFIG_NET_MEDIATEK_SOC_WED
|
||
|
+static inline bool mtk_wed_is_v1(struct mtk_wed_hw *hw)
|
||
|
+{
|
||
|
+ return hw->version == 1;
|
||
|
+}
|
||
|
+
|
||
|
+static inline bool mtk_wed_is_v2(struct mtk_wed_hw *hw)
|
||
|
+{
|
||
|
+ return hw->version == 2;
|
||
|
+}
|
||
|
+
|
||
|
static inline void
|
||
|
wed_w32(struct mtk_wed_device *dev, u32 reg, u32 val)
|
||
|
{
|
||
|
--- a/drivers/net/ethernet/mediatek/mtk_wed_debugfs.c
|
||
|
+++ b/drivers/net/ethernet/mediatek/mtk_wed_debugfs.c
|
||
|
@@ -263,7 +263,7 @@ void mtk_wed_hw_add_debugfs(struct mtk_w
|
||
|
debugfs_create_u32("regidx", 0600, dir, &hw->debugfs_reg);
|
||
|
debugfs_create_file_unsafe("regval", 0600, dir, hw, &fops_regval);
|
||
|
debugfs_create_file_unsafe("txinfo", 0400, dir, hw, &wed_txinfo_fops);
|
||
|
- if (hw->version != 1)
|
||
|
+ if (!mtk_wed_is_v1(hw))
|
||
|
debugfs_create_file_unsafe("rxinfo", 0400, dir, hw,
|
||
|
&wed_rxinfo_fops);
|
||
|
}
|
||
|
--- a/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
|
||
|
+++ b/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
|
||
|
@@ -207,7 +207,7 @@ int mtk_wed_mcu_msg_update(struct mtk_we
|
||
|
{
|
||
|
struct mtk_wed_wo *wo = dev->hw->wed_wo;
|
||
|
|
||
|
- if (dev->hw->version == 1)
|
||
|
+ if (mtk_wed_is_v1(dev->hw))
|
||
|
return 0;
|
||
|
|
||
|
if (WARN_ON(!wo))
|