mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-23 19:13:15 +07:00
net: stmmac: Move PTP and MMC base address calculation to hwif.c
PTP and MMC modules base address can depend on the GMAC version. As this is HW specific lets move this base address calculation to hwif.c. Also, add an entry in the HW table so that we can specify the module offset. This can later be extended to more modules, if deemed necessary. Signed-off-by: Jose Abreu <joabreu@synopsys.com> Cc: David S. Miller <davem@davemloft.net> Cc: Joao Pinto <jpinto@synopsys.com> Cc: Vitor Soares <soares@synopsys.com> Cc: Giuseppe Cavallaro <peppe.cavallaro@st.com> Cc: Alexandre Torgue <alexandre.torgue@st.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
63a550fc15
commit
758d5c73e2
@ -6,6 +6,7 @@
|
||||
|
||||
#include "common.h"
|
||||
#include "stmmac.h"
|
||||
#include "stmmac_ptp.h"
|
||||
|
||||
static u32 stmmac_get_id(struct stmmac_priv *priv, u32 id_reg)
|
||||
{
|
||||
@ -72,6 +73,7 @@ static const struct stmmac_hwif_entry {
|
||||
bool gmac;
|
||||
bool gmac4;
|
||||
u32 min_id;
|
||||
const struct stmmac_regs_off regs;
|
||||
const void *desc;
|
||||
const void *dma;
|
||||
const void *mac;
|
||||
@ -86,6 +88,10 @@ static const struct stmmac_hwif_entry {
|
||||
.gmac = false,
|
||||
.gmac4 = false,
|
||||
.min_id = 0,
|
||||
.regs = {
|
||||
.ptp_off = PTP_GMAC3_X_OFFSET,
|
||||
.mmc_off = MMC_GMAC3_X_OFFSET,
|
||||
},
|
||||
.desc = NULL,
|
||||
.dma = &dwmac100_dma_ops,
|
||||
.mac = &dwmac100_ops,
|
||||
@ -98,6 +104,10 @@ static const struct stmmac_hwif_entry {
|
||||
.gmac = true,
|
||||
.gmac4 = false,
|
||||
.min_id = 0,
|
||||
.regs = {
|
||||
.ptp_off = PTP_GMAC3_X_OFFSET,
|
||||
.mmc_off = MMC_GMAC3_X_OFFSET,
|
||||
},
|
||||
.desc = NULL,
|
||||
.dma = &dwmac1000_dma_ops,
|
||||
.mac = &dwmac1000_ops,
|
||||
@ -110,6 +120,10 @@ static const struct stmmac_hwif_entry {
|
||||
.gmac = false,
|
||||
.gmac4 = true,
|
||||
.min_id = 0,
|
||||
.regs = {
|
||||
.ptp_off = PTP_GMAC4_OFFSET,
|
||||
.mmc_off = MMC_GMAC4_OFFSET,
|
||||
},
|
||||
.desc = &dwmac4_desc_ops,
|
||||
.dma = &dwmac4_dma_ops,
|
||||
.mac = &dwmac4_ops,
|
||||
@ -122,6 +136,10 @@ static const struct stmmac_hwif_entry {
|
||||
.gmac = false,
|
||||
.gmac4 = true,
|
||||
.min_id = DWMAC_CORE_4_00,
|
||||
.regs = {
|
||||
.ptp_off = PTP_GMAC4_OFFSET,
|
||||
.mmc_off = MMC_GMAC4_OFFSET,
|
||||
},
|
||||
.desc = &dwmac4_desc_ops,
|
||||
.dma = &dwmac4_dma_ops,
|
||||
.mac = &dwmac410_ops,
|
||||
@ -134,6 +152,10 @@ static const struct stmmac_hwif_entry {
|
||||
.gmac = false,
|
||||
.gmac4 = true,
|
||||
.min_id = DWMAC_CORE_4_10,
|
||||
.regs = {
|
||||
.ptp_off = PTP_GMAC4_OFFSET,
|
||||
.mmc_off = MMC_GMAC4_OFFSET,
|
||||
},
|
||||
.desc = &dwmac4_desc_ops,
|
||||
.dma = &dwmac410_dma_ops,
|
||||
.mac = &dwmac410_ops,
|
||||
@ -146,6 +168,10 @@ static const struct stmmac_hwif_entry {
|
||||
.gmac = false,
|
||||
.gmac4 = true,
|
||||
.min_id = DWMAC_CORE_5_10,
|
||||
.regs = {
|
||||
.ptp_off = PTP_GMAC4_OFFSET,
|
||||
.mmc_off = MMC_GMAC4_OFFSET,
|
||||
},
|
||||
.desc = &dwmac4_desc_ops,
|
||||
.dma = &dwmac410_dma_ops,
|
||||
.mac = &dwmac510_ops,
|
||||
@ -175,6 +201,12 @@ int stmmac_hwif_init(struct stmmac_priv *priv)
|
||||
/* Save ID for later use */
|
||||
priv->synopsys_id = id;
|
||||
|
||||
/* Lets assume some safe values first */
|
||||
priv->ptpaddr = priv->ioaddr +
|
||||
(needs_gmac4 ? PTP_GMAC4_OFFSET : PTP_GMAC3_X_OFFSET);
|
||||
priv->mmcaddr = priv->ioaddr +
|
||||
(needs_gmac4 ? MMC_GMAC4_OFFSET : MMC_GMAC3_X_OFFSET);
|
||||
|
||||
/* Check for HW specific setup first */
|
||||
if (priv->plat->setup) {
|
||||
priv->hw = priv->plat->setup(priv);
|
||||
@ -206,6 +238,8 @@ int stmmac_hwif_init(struct stmmac_priv *priv)
|
||||
mac->tc = entry->tc;
|
||||
|
||||
priv->hw = mac;
|
||||
priv->ptpaddr = priv->ioaddr + entry->regs.ptp_off;
|
||||
priv->mmcaddr = priv->ioaddr + entry->regs.mmc_off;
|
||||
|
||||
/* Entry found */
|
||||
ret = entry->setup(priv);
|
||||
|
@ -442,6 +442,11 @@ struct stmmac_tc_ops {
|
||||
#define stmmac_tc_setup_cls_u32(__priv, __args...) \
|
||||
stmmac_do_callback(__priv, tc, setup_cls_u32, __args)
|
||||
|
||||
struct stmmac_regs_off {
|
||||
u32 ptp_off;
|
||||
u32 mmc_off;
|
||||
};
|
||||
|
||||
extern const struct stmmac_ops dwmac100_ops;
|
||||
extern const struct stmmac_dma_ops dwmac100_dma_ops;
|
||||
extern const struct stmmac_ops dwmac1000_ops;
|
||||
|
@ -2085,14 +2085,6 @@ static void stmmac_mmc_setup(struct stmmac_priv *priv)
|
||||
unsigned int mode = MMC_CNTRL_RESET_ON_READ | MMC_CNTRL_COUNTER_RESET |
|
||||
MMC_CNTRL_PRESET | MMC_CNTRL_FULL_HALF_PRESET;
|
||||
|
||||
if (priv->synopsys_id >= DWMAC_CORE_4_00) {
|
||||
priv->ptpaddr = priv->ioaddr + PTP_GMAC4_OFFSET;
|
||||
priv->mmcaddr = priv->ioaddr + MMC_GMAC4_OFFSET;
|
||||
} else {
|
||||
priv->ptpaddr = priv->ioaddr + PTP_GMAC3_X_OFFSET;
|
||||
priv->mmcaddr = priv->ioaddr + MMC_GMAC3_X_OFFSET;
|
||||
}
|
||||
|
||||
dwmac_mmc_intr_all_mask(priv->mmcaddr);
|
||||
|
||||
if (priv->dma_cap.rmon) {
|
||||
|
Loading…
Reference in New Issue
Block a user