net: stmmac: Only enable enhanced addressing mode when needed
Enhanced addressing mode is only required when more than 32 bits need to be addressed. Add a DMA configuration parameter to enable this mode only when needed. Signed-off-by: Thierry Reding <treding@nvidia.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
151ea09437
commit
968a2978cb
|
@ -27,7 +27,10 @@ static void dwxgmac2_dma_init(void __iomem *ioaddr,
|
|||
if (dma_cfg->aal)
|
||||
value |= XGMAC_AAL;
|
||||
|
||||
writel(value | XGMAC_EAME, ioaddr + XGMAC_DMA_SYSBUS_MODE);
|
||||
if (dma_cfg->eame)
|
||||
value |= XGMAC_EAME;
|
||||
|
||||
writel(value, ioaddr + XGMAC_DMA_SYSBUS_MODE);
|
||||
}
|
||||
|
||||
static void dwxgmac2_dma_init_chan(void __iomem *ioaddr,
|
||||
|
|
|
@ -4514,6 +4514,13 @@ int stmmac_dvr_probe(struct device *device,
|
|||
if (!ret) {
|
||||
dev_info(priv->device, "Using %d bits DMA width\n",
|
||||
priv->dma_cap.addr64);
|
||||
|
||||
/*
|
||||
* If more than 32 bits can be addressed, make sure to
|
||||
* enable enhanced addressing mode.
|
||||
*/
|
||||
if (IS_ENABLED(CONFIG_ARCH_DMA_ADDR_T_64BIT))
|
||||
priv->plat->dma_cfg->eame = true;
|
||||
} else {
|
||||
ret = dma_set_mask_and_coherent(device, DMA_BIT_MASK(32));
|
||||
if (ret) {
|
||||
|
|
|
@ -92,6 +92,7 @@ struct stmmac_dma_cfg {
|
|||
int fixed_burst;
|
||||
int mixed_burst;
|
||||
bool aal;
|
||||
bool eame;
|
||||
};
|
||||
|
||||
#define AXI_BLEN 7
|
||||
|
|
Loading…
Reference in New Issue