mirror of
git://nv-tegra.nvidia.com/kernel/nvethernetrm.git
synced 2025-12-22 09:12:10 +03:00
osi: core: combine set_mode
Bug 3701869 Change-Id: I01d8e45b5818277441775d17e332c246ffa13a0e Signed-off-by: Narayan Reddy <narayanr@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/c/kernel/nvethernetrm/+/2738021 Reviewed-by: svcacv <svcacv@nvidia.com> Reviewed-by: Bhadram Varka <vbhadram@nvidia.com> Reviewed-by: Nagarjuna Kristam <nkristam@nvidia.com> Reviewed-by: Krishna Thota <kthota@nvidia.com> GVS: Gerrit_Virtual_Submit
This commit is contained in:
committed by
mobile promotions
parent
e6698c799b
commit
9ada234fa2
@@ -103,6 +103,32 @@ void hw_stop_mac(struct osi_core_priv_data *const osi_core)
|
||||
osi_writela(osi_core, value, ((nveu8_t *)addr + mac_mcr_re_reg[osi_core->mac]));
|
||||
}
|
||||
|
||||
nve32_t hw_set_mode(struct osi_core_priv_data *const osi_core, const nve32_t mode)
|
||||
{
|
||||
void *base = osi_core->base;
|
||||
nveu32_t mcr_val;
|
||||
nve32_t ret = 0;
|
||||
const nveu32_t set_bit[2] = { EQOS_MCR_DO, EQOS_MCR_DM };
|
||||
const nveu32_t clear_bit[2] = { EQOS_MCR_DM, EQOS_MCR_DO };
|
||||
|
||||
/* don't allow only if loopback mode is other than 0 or 1 */
|
||||
if ((mode != OSI_FULL_DUPLEX) && (mode != OSI_HALF_DUPLEX)) {
|
||||
OSI_CORE_ERR(OSI_NULL, OSI_LOG_ARG_INVALID,
|
||||
"Invalid duplex mode\n", 0ULL);
|
||||
ret = -1;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (osi_core->mac == OSI_MAC_HW_EQOS) {
|
||||
mcr_val = osi_readla(osi_core, (nveu8_t *)base + EQOS_MAC_MCR);
|
||||
mcr_val |= set_bit[mode];
|
||||
mcr_val &= ~clear_bit[mode];
|
||||
osi_writela(osi_core, mcr_val, ((nveu8_t *)base + EQOS_MAC_MCR));
|
||||
}
|
||||
fail:
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief hw_est_read - indirect read the GCL to Software own list
|
||||
* (SWOL)
|
||||
|
||||
Reference in New Issue
Block a user