git: 4b7975ecdc36 - main - dwc: Remove if_dwc_mac_type
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 05 Oct 2023 15:35:15 UTC
The branch main has been updated by manu: URL: https://cgit.FreeBSD.org/src/commit/?id=4b7975ecdc3631beac717d4addc71006cdc665c5 commit 4b7975ecdc3631beac717d4addc71006cdc665c5 Author: Emmanuel Vadot <manu@FreeBSD.org> AuthorDate: 2023-10-04 19:10:47 +0000 Commit: Emmanuel Vadot <manu@FreeBSD.org> CommitDate: 2023-10-05 15:34:40 +0000 dwc: Remove if_dwc_mac_type This doesn't represent the mac_type but if the DMA engine support extended descriptors. Read the HW_FEATURE register to learn if the DMA engine supports it. No functional changes intended. --- sys/dev/dwc/dwc1000_core.c | 14 +++++++++++--- sys/dev/dwc/dwc1000_dma.c | 12 ++++++++---- sys/dev/dwc/dwc1000_reg.h | 2 ++ sys/dev/dwc/if_dwc.c | 1 - sys/dev/dwc/if_dwc_aw.c | 8 -------- sys/dev/dwc/if_dwc_if.m | 13 ------------- sys/dev/dwc/if_dwc_rk.c | 8 -------- sys/dev/dwc/if_dwc_socfpga.c | 8 -------- sys/dev/dwc/if_dwcvar.h | 2 +- 9 files changed, 22 insertions(+), 46 deletions(-) diff --git a/sys/dev/dwc/dwc1000_core.c b/sys/dev/dwc/dwc1000_core.c index 6cf836f87be2..872d1a488454 100644 --- a/sys/dev/dwc/dwc1000_core.c +++ b/sys/dev/dwc/dwc1000_core.c @@ -281,7 +281,11 @@ dwc_hash_maddr(void *arg, struct sockaddr_dl *sdl, u_int cnt) crc = ether_crc32_le(LLADDR(sdl), ETHER_ADDR_LEN); /* Take lower 8 bits and reverse it */ val = bitreverse(~crc & 0xff); - if (ctx->sc->mactype != DWC_GMAC_EXT_DESC) + /* + * TODO: There is probably a HW_FEATURES bit which isn't + * related to the extended descriptors that describe this + */ + if (!ctx->sc->dma_ext_desc) val >>= 2; /* Only need lower 6 bits */ hashreg = (val >> 5); hashbit = (val & 31); @@ -302,7 +306,11 @@ dwc1000_setup_rxfilter(struct dwc_softc *sc) DWC_ASSERT_LOCKED(sc); ifp = sc->ifp; - nhash = sc->mactype != DWC_GMAC_EXT_DESC ? 2 : 8; + /* + * TODO: There is probably a HW_FEATURES bit which isn't + * related to the extended descriptors that describe this + */ + nhash = sc->dma_ext_desc == false ? 2 : 8; /* * Set the multicast (group) filter hash. @@ -335,7 +343,7 @@ dwc1000_setup_rxfilter(struct dwc_softc *sc) WRITE4(sc, MAC_ADDRESS_LOW(0), lo); WRITE4(sc, MAC_ADDRESS_HIGH(0), hi); WRITE4(sc, MAC_FRAME_FILTER, ffval); - if (sc->mactype != DWC_GMAC_EXT_DESC) { + if (!sc->dma_ext_desc) { WRITE4(sc, GMAC_MAC_HTLOW, ctx.hash[0]); WRITE4(sc, GMAC_MAC_HTHIGH, ctx.hash[1]); } else { diff --git a/sys/dev/dwc/dwc1000_dma.c b/sys/dev/dwc/dwc1000_dma.c index 16b2b2a3241d..7c5924296894 100644 --- a/sys/dev/dwc/dwc1000_dma.c +++ b/sys/dev/dwc/dwc1000_dma.c @@ -201,7 +201,7 @@ dwc_setup_txdesc(struct dwc_softc *sc, int idx, bus_addr_t paddr, desc1 = 0; --sc->tx_desccount; } else { - if (sc->mactype != DWC_GMAC_EXT_DESC) { + if (!sc->dma_ext_desc) { desc0 = 0; desc1 = NTDESC1_TCH | len | flags; if (first) @@ -233,7 +233,7 @@ dwc_setup_rxdesc(struct dwc_softc *sc, int idx, bus_addr_t paddr) nidx = next_rxidx(sc, idx); sc->rxdesc_ring[idx].addr2 = sc->rxdesc_ring_paddr + (nidx * sizeof(struct dwc_hwdesc)); - if (sc->mactype != DWC_GMAC_EXT_DESC) + if (!sc->dma_ext_desc) sc->rxdesc_ring[idx].desc1 = NRDESC1_RCH | MIN(MCLBYTES, NRDESC1_RBS1_MASK); else @@ -282,12 +282,12 @@ dma1000_setup_txbuf(struct dwc_softc *sc, int idx, struct mbuf **mp) if ((m->m_pkthdr.csum_flags & CSUM_IP) != 0) { if ((m->m_pkthdr.csum_flags & (CSUM_TCP|CSUM_UDP)) != 0) { - if (sc->mactype != DWC_GMAC_EXT_DESC) + if (!sc->dma_ext_desc) flags = NTDESC1_CIC_FULL; else flags = ETDESC0_CIC_FULL; } else { - if (sc->mactype != DWC_GMAC_EXT_DESC) + if (!sc->dma_ext_desc) flags = NTDESC1_CIC_HDR; else flags = ETDESC0_CIC_HDR; @@ -646,6 +646,10 @@ dma1000_init(struct dwc_softc *sc) WRITE4(sc, BUS_MODE, reg); + reg = READ4(sc, HW_FEATURE); + if (reg & HW_FEATURE_EXT_DESCRIPTOR) + sc->dma_ext_desc = true; + /* * DMA must be stop while changing descriptor list addresses. */ diff --git a/sys/dev/dwc/dwc1000_reg.h b/sys/dev/dwc/dwc1000_reg.h index 768da530bf7c..f581bf135cd8 100644 --- a/sys/dev/dwc/dwc1000_reg.h +++ b/sys/dev/dwc/dwc1000_reg.h @@ -275,7 +275,9 @@ #define CURRENT_HOST_RECEIVE_DESCR 0x104C #define CURRENT_HOST_TRANSMIT_BUF_ADDR 0x1050 #define CURRENT_HOST_RECEIVE_BUF_ADDR 0x1054 + #define HW_FEATURE 0x1058 +#define HW_FEATURE_EXT_DESCRIPTOR (1 << 24) #define DWC_GMAC_NORMAL_DESC 0x1 #define DWC_GMAC_EXT_DESC 0x2 diff --git a/sys/dev/dwc/if_dwc.c b/sys/dev/dwc/if_dwc.c index 9e17d67d434d..ffcf3e8d6afd 100644 --- a/sys/dev/dwc/if_dwc.c +++ b/sys/dev/dwc/if_dwc.c @@ -505,7 +505,6 @@ dwc_attach(device_t dev) sc->tx_desccount = TX_DESC_COUNT; sc->tx_mapcount = 0; sc->mii_clk = IF_DWC_MII_CLK(dev); - sc->mactype = IF_DWC_MAC_TYPE(dev); sc->node = ofw_bus_get_node(dev); sc->phy_mode = mii_fdt_get_contype(sc->node); diff --git a/sys/dev/dwc/if_dwc_aw.c b/sys/dev/dwc/if_dwc_aw.c index 5ad1d14b385b..6419c9dedca8 100644 --- a/sys/dev/dwc/if_dwc_aw.c +++ b/sys/dev/dwc/if_dwc_aw.c @@ -122,13 +122,6 @@ a20_if_dwc_init(device_t dev) return (0); } -static int -a20_if_dwc_mac_type(device_t dev) -{ - - return (DWC_GMAC_NORMAL_DESC); -} - static int a20_if_dwc_mii_clk(device_t dev) { @@ -140,7 +133,6 @@ static device_method_t a20_dwc_methods[] = { DEVMETHOD(device_probe, a20_if_dwc_probe), DEVMETHOD(if_dwc_init, a20_if_dwc_init), - DEVMETHOD(if_dwc_mac_type, a20_if_dwc_mac_type), DEVMETHOD(if_dwc_mii_clk, a20_if_dwc_mii_clk), DEVMETHOD_END diff --git a/sys/dev/dwc/if_dwc_if.m b/sys/dev/dwc/if_dwc_if.m index 0d0d9ee114f7..aea61579946e 100644 --- a/sys/dev/dwc/if_dwc_if.m +++ b/sys/dev/dwc/if_dwc_if.m @@ -36,12 +36,6 @@ CODE { return (0); } - static int - if_dwc_default_mac_type(device_t dev) - { - return (DWC_GMAC_EXT_DESC); - } - static int if_dwc_default_mii_clk(device_t dev) { @@ -65,13 +59,6 @@ METHOD int init { device_t dev; } DEFAULT if_dwc_default_init; -# -# Return the DWC MAC type (descriptor type). -# -METHOD int mac_type { - device_t dev; -} DEFAULT if_dwc_default_mac_type; - # # Return the DWC MII clock for a specific hardware. # diff --git a/sys/dev/dwc/if_dwc_rk.c b/sys/dev/dwc/if_dwc_rk.c index 51edd2450b42..43d4e4847c62 100644 --- a/sys/dev/dwc/if_dwc_rk.c +++ b/sys/dev/dwc/if_dwc_rk.c @@ -578,13 +578,6 @@ if_dwc_rk_init(device_t dev) return (0); } -static int -if_dwc_rk_mac_type(device_t dev) -{ - - return (DWC_GMAC_NORMAL_DESC); -} - static int if_dwc_rk_mii_clk(device_t dev) { @@ -610,7 +603,6 @@ static device_method_t if_dwc_rk_methods[] = { DEVMETHOD(device_probe, if_dwc_rk_probe), DEVMETHOD(if_dwc_init, if_dwc_rk_init), - DEVMETHOD(if_dwc_mac_type, if_dwc_rk_mac_type), DEVMETHOD(if_dwc_mii_clk, if_dwc_rk_mii_clk), DEVMETHOD(if_dwc_set_speed, if_dwc_rk_set_speed), diff --git a/sys/dev/dwc/if_dwc_socfpga.c b/sys/dev/dwc/if_dwc_socfpga.c index 7b4ead1a940c..867c09109d2a 100644 --- a/sys/dev/dwc/if_dwc_socfpga.c +++ b/sys/dev/dwc/if_dwc_socfpga.c @@ -75,13 +75,6 @@ if_dwc_socfpga_init(device_t dev) return (0); } -static int -if_dwc_socfpga_mac_type(device_t dev) -{ - - return (DWC_GMAC_EXT_DESC); -} - static int if_dwc_socfpga_mii_clk(device_t dev) { @@ -100,7 +93,6 @@ static device_method_t dwc_socfpga_methods[] = { DEVMETHOD(device_probe, if_dwc_socfpga_probe), DEVMETHOD(if_dwc_init, if_dwc_socfpga_init), - DEVMETHOD(if_dwc_mac_type, if_dwc_socfpga_mac_type), DEVMETHOD(if_dwc_mii_clk, if_dwc_socfpga_mii_clk), DEVMETHOD_END diff --git a/sys/dev/dwc/if_dwcvar.h b/sys/dev/dwc/if_dwcvar.h index ca0a91d6bf12..e21e256852fa 100644 --- a/sys/dev/dwc/if_dwcvar.h +++ b/sys/dev/dwc/if_dwcvar.h @@ -61,7 +61,6 @@ struct dwc_softc { struct resource *res[2]; device_t dev; phandle_t node; - int mactype; int mii_clk; device_t miibus; struct mii_data * mii_softc; @@ -90,6 +89,7 @@ struct dwc_softc { bool fixed_burst; bool mixed_burst; bool aal; + bool dma_ext_desc; /* RX */ bus_dma_tag_t rxdesc_tag;