Merge branch 'master' of github.com:davem330/net
Conflicts: MAINTAINERS drivers/net/Kconfig drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c drivers/net/ethernet/broadcom/tg3.c drivers/net/wireless/iwlwifi/iwl-pci.c drivers/net/wireless/iwlwifi/iwl-trans-tx-pcie.c drivers/net/wireless/rt2x00/rt2800usb.c drivers/net/wireless/wl12xx/main.c
This commit is contained in:
@@ -50,20 +50,6 @@ static inline struct efx_mcdi_iface *efx_mcdi(struct efx_nic *efx)
|
||||
return &nic_data->mcdi;
|
||||
}
|
||||
|
||||
static inline void
|
||||
efx_mcdi_readd(struct efx_nic *efx, efx_dword_t *value, unsigned reg)
|
||||
{
|
||||
struct siena_nic_data *nic_data = efx->nic_data;
|
||||
value->u32[0] = (__force __le32)__raw_readl(nic_data->mcdi_smem + reg);
|
||||
}
|
||||
|
||||
static inline void
|
||||
efx_mcdi_writed(struct efx_nic *efx, const efx_dword_t *value, unsigned reg)
|
||||
{
|
||||
struct siena_nic_data *nic_data = efx->nic_data;
|
||||
__raw_writel((__force u32)value->u32[0], nic_data->mcdi_smem + reg);
|
||||
}
|
||||
|
||||
void efx_mcdi_init(struct efx_nic *efx)
|
||||
{
|
||||
struct efx_mcdi_iface *mcdi;
|
||||
@@ -84,8 +70,8 @@ static void efx_mcdi_copyin(struct efx_nic *efx, unsigned cmd,
|
||||
const u8 *inbuf, size_t inlen)
|
||||
{
|
||||
struct efx_mcdi_iface *mcdi = efx_mcdi(efx);
|
||||
unsigned pdu = MCDI_PDU(efx);
|
||||
unsigned doorbell = MCDI_DOORBELL(efx);
|
||||
unsigned pdu = FR_CZ_MC_TREG_SMEM + MCDI_PDU(efx);
|
||||
unsigned doorbell = FR_CZ_MC_TREG_SMEM + MCDI_DOORBELL(efx);
|
||||
unsigned int i;
|
||||
efx_dword_t hdr;
|
||||
u32 xflags, seqno;
|
||||
@@ -106,28 +92,29 @@ static void efx_mcdi_copyin(struct efx_nic *efx, unsigned cmd,
|
||||
MCDI_HEADER_SEQ, seqno,
|
||||
MCDI_HEADER_XFLAGS, xflags);
|
||||
|
||||
efx_mcdi_writed(efx, &hdr, pdu);
|
||||
efx_writed(efx, &hdr, pdu);
|
||||
|
||||
for (i = 0; i < inlen; i += 4)
|
||||
efx_mcdi_writed(efx, (const efx_dword_t *)(inbuf + i),
|
||||
pdu + 4 + i);
|
||||
_efx_writed(efx, *((__le32 *)(inbuf + i)), pdu + 4 + i);
|
||||
|
||||
/* Ensure the payload is written out before the header */
|
||||
wmb();
|
||||
|
||||
/* ring the doorbell with a distinctive value */
|
||||
EFX_POPULATE_DWORD_1(hdr, EFX_DWORD_0, 0x45789abc);
|
||||
efx_mcdi_writed(efx, &hdr, doorbell);
|
||||
_efx_writed(efx, (__force __le32) 0x45789abc, doorbell);
|
||||
}
|
||||
|
||||
static void efx_mcdi_copyout(struct efx_nic *efx, u8 *outbuf, size_t outlen)
|
||||
{
|
||||
struct efx_mcdi_iface *mcdi = efx_mcdi(efx);
|
||||
unsigned int pdu = MCDI_PDU(efx);
|
||||
unsigned int pdu = FR_CZ_MC_TREG_SMEM + MCDI_PDU(efx);
|
||||
int i;
|
||||
|
||||
BUG_ON(atomic_read(&mcdi->state) == MCDI_STATE_QUIESCENT);
|
||||
BUG_ON(outlen & 3 || outlen >= 0x100);
|
||||
|
||||
for (i = 0; i < outlen; i += 4)
|
||||
efx_mcdi_readd(efx, (efx_dword_t *)(outbuf + i), pdu + 4 + i);
|
||||
*((__le32 *)(outbuf + i)) = _efx_readd(efx, pdu + 4 + i);
|
||||
}
|
||||
|
||||
static int efx_mcdi_poll(struct efx_nic *efx)
|
||||
@@ -135,7 +122,7 @@ static int efx_mcdi_poll(struct efx_nic *efx)
|
||||
struct efx_mcdi_iface *mcdi = efx_mcdi(efx);
|
||||
unsigned int time, finish;
|
||||
unsigned int respseq, respcmd, error;
|
||||
unsigned int pdu = MCDI_PDU(efx);
|
||||
unsigned int pdu = FR_CZ_MC_TREG_SMEM + MCDI_PDU(efx);
|
||||
unsigned int rc, spins;
|
||||
efx_dword_t reg;
|
||||
|
||||
@@ -161,7 +148,8 @@ static int efx_mcdi_poll(struct efx_nic *efx)
|
||||
|
||||
time = get_seconds();
|
||||
|
||||
efx_mcdi_readd(efx, ®, pdu);
|
||||
rmb();
|
||||
efx_readd(efx, ®, pdu);
|
||||
|
||||
/* All 1's indicates that shared memory is in reset (and is
|
||||
* not a valid header). Wait for it to come out reset before
|
||||
@@ -188,7 +176,7 @@ static int efx_mcdi_poll(struct efx_nic *efx)
|
||||
respseq, mcdi->seqno);
|
||||
rc = EIO;
|
||||
} else if (error) {
|
||||
efx_mcdi_readd(efx, ®, pdu + 4);
|
||||
efx_readd(efx, ®, pdu + 4);
|
||||
switch (EFX_DWORD_FIELD(reg, EFX_DWORD_0)) {
|
||||
#define TRANSLATE_ERROR(name) \
|
||||
case MC_CMD_ERR_ ## name: \
|
||||
@@ -222,21 +210,21 @@ out:
|
||||
/* Test and clear MC-rebooted flag for this port/function */
|
||||
int efx_mcdi_poll_reboot(struct efx_nic *efx)
|
||||
{
|
||||
unsigned int addr = MCDI_REBOOT_FLAG(efx);
|
||||
unsigned int addr = FR_CZ_MC_TREG_SMEM + MCDI_REBOOT_FLAG(efx);
|
||||
efx_dword_t reg;
|
||||
uint32_t value;
|
||||
|
||||
if (efx_nic_rev(efx) < EFX_REV_SIENA_A0)
|
||||
return false;
|
||||
|
||||
efx_mcdi_readd(efx, ®, addr);
|
||||
efx_readd(efx, ®, addr);
|
||||
value = EFX_DWORD_FIELD(reg, EFX_DWORD_0);
|
||||
|
||||
if (value == 0)
|
||||
return 0;
|
||||
|
||||
EFX_ZERO_DWORD(reg);
|
||||
efx_mcdi_writed(efx, ®, addr);
|
||||
efx_writed(efx, ®, addr);
|
||||
|
||||
if (value == MC_STATUS_DWORD_ASSERT)
|
||||
return -EINTR;
|
||||
|
Reference in New Issue
Block a user