summaryrefslogtreecommitdiff
path: root/drivers/net/ethernet/freescale/fman/Peripherals/FM/MAC/fman_memac.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/ethernet/freescale/fman/Peripherals/FM/MAC/fman_memac.c')
-rw-r--r--drivers/net/ethernet/freescale/fman/Peripherals/FM/MAC/fman_memac.c632
1 files changed, 330 insertions, 302 deletions
diff --git a/drivers/net/ethernet/freescale/fman/Peripherals/FM/MAC/fman_memac.c b/drivers/net/ethernet/freescale/fman/Peripherals/FM/MAC/fman_memac.c
index a63d06a..ad0955d 100644
--- a/drivers/net/ethernet/freescale/fman/Peripherals/FM/MAC/fman_memac.c
+++ b/drivers/net/ethernet/freescale/fman/Peripherals/FM/MAC/fman_memac.c
@@ -34,394 +34,422 @@
#include "fsl_fman_memac.h"
-uint32_t memac_get_event(struct memac_regs *regs, uint32_t ev_mask)
+uint32_t fman_memac_get_event(struct memac_regs *regs, uint32_t ev_mask)
{
- return ioread32be(&regs->ievent) & ev_mask;
+ return ioread32be(&regs->ievent) & ev_mask;
}
-uint32_t memac_get_interrupt_mask(struct memac_regs *regs)
+uint32_t fman_memac_get_interrupt_mask(struct memac_regs *regs)
{
- return ioread32be(&regs->imask);
+ return ioread32be(&regs->imask);
}
-void memac_ack_event(struct memac_regs *regs, uint32_t ev_mask)
+void fman_memac_ack_event(struct memac_regs *regs, uint32_t ev_mask)
{
- iowrite32be(ev_mask, &regs->ievent);
+ iowrite32be(ev_mask, &regs->ievent);
}
-void memac_set_promiscuous(struct memac_regs *regs, bool val)
+void fman_memac_set_promiscuous(struct memac_regs *regs, bool val)
{
- uint32_t tmp;
+ uint32_t tmp;
- tmp = ioread32be(&regs->command_config);
+ tmp = ioread32be(&regs->command_config);
- if (val)
- tmp |= CMD_CFG_PROMIS_EN;
- else
- tmp &= ~CMD_CFG_PROMIS_EN;
+ if (val)
+ tmp |= CMD_CFG_PROMIS_EN;
+ else
+ tmp &= ~CMD_CFG_PROMIS_EN;
- iowrite32be(tmp, &regs->command_config);
+ iowrite32be(tmp, &regs->command_config);
}
-void memac_hardware_clear_addr_in_paddr(struct memac_regs *regs,
- uint8_t paddr_num)
+void fman_memac_clear_addr_in_paddr(struct memac_regs *regs,
+ uint8_t paddr_num)
{
- if (paddr_num == 0) {
- iowrite32be(0, &regs->mac_addr0.mac_addr_l);
- iowrite32be(0, &regs->mac_addr0.mac_addr_u);
- } else {
- iowrite32be(0x0, &regs->mac_addr[paddr_num - 1].mac_addr_l);
- iowrite32be(0x0, &regs->mac_addr[paddr_num - 1].mac_addr_u);
- }
+ if (paddr_num == 0) {
+ iowrite32be(0, &regs->mac_addr0.mac_addr_l);
+ iowrite32be(0, &regs->mac_addr0.mac_addr_u);
+ } else {
+ iowrite32be(0x0, &regs->mac_addr[paddr_num - 1].mac_addr_l);
+ iowrite32be(0x0, &regs->mac_addr[paddr_num - 1].mac_addr_u);
+ }
}
-void memac_hardware_add_addr_in_paddr(struct memac_regs *regs,
- uint8_t *adr,
- uint8_t paddr_num)
+void fman_memac_add_addr_in_paddr(struct memac_regs *regs,
+ uint8_t *adr,
+ uint8_t paddr_num)
{
- uint32_t tmp0, tmp1;
-
- tmp0 = (uint32_t)(adr[0] |
- adr[1] << 8 |
- adr[2] << 16 |
- adr[3] << 24);
- tmp1 = (uint32_t)(adr[4] | adr[5] << 8);
-
- if (paddr_num == 0) {
- iowrite32be(tmp0, &regs->mac_addr0.mac_addr_l);
- iowrite32be(tmp1, &regs->mac_addr0.mac_addr_u);
- } else {
- iowrite32be(tmp0, &regs->mac_addr[paddr_num-1].mac_addr_l);
- iowrite32be(tmp1, &regs->mac_addr[paddr_num-1].mac_addr_u);
- }
+ uint32_t tmp0, tmp1;
+
+ tmp0 = (uint32_t)(adr[0] |
+ adr[1] << 8 |
+ adr[2] << 16 |
+ adr[3] << 24);
+ tmp1 = (uint32_t)(adr[4] | adr[5] << 8);
+
+ if (paddr_num == 0) {
+ iowrite32be(tmp0, &regs->mac_addr0.mac_addr_l);
+ iowrite32be(tmp1, &regs->mac_addr0.mac_addr_u);
+ } else {
+ iowrite32be(tmp0, &regs->mac_addr[paddr_num-1].mac_addr_l);
+ iowrite32be(tmp1, &regs->mac_addr[paddr_num-1].mac_addr_u);
+ }
}
-void memac_enable(struct memac_regs *regs, bool apply_rx, bool apply_tx)
+void fman_memac_enable(struct memac_regs *regs, bool apply_rx, bool apply_tx)
{
- uint32_t tmp;
+ uint32_t tmp;
- tmp = ioread32be(&regs->command_config);
+ tmp = ioread32be(&regs->command_config);
- if (apply_rx)
- tmp |= CMD_CFG_RX_EN;
+ if (apply_rx)
+ tmp |= CMD_CFG_RX_EN;
- if (apply_tx)
- tmp |= CMD_CFG_TX_EN;
+ if (apply_tx)
+ tmp |= CMD_CFG_TX_EN;
- iowrite32be(tmp, &regs->command_config);
+ iowrite32be(tmp, &regs->command_config);
}
-void memac_disable(struct memac_regs *regs, bool apply_rx, bool apply_tx)
+void fman_memac_disable(struct memac_regs *regs, bool apply_rx, bool apply_tx)
{
- uint32_t tmp;
+ uint32_t tmp;
- tmp = ioread32be(&regs->command_config);
+ tmp = ioread32be(&regs->command_config);
- if (apply_rx)
- tmp &= ~CMD_CFG_RX_EN;
+ if (apply_rx)
+ tmp &= ~CMD_CFG_RX_EN;
- if (apply_tx)
- tmp &= ~CMD_CFG_TX_EN;
+ if (apply_tx)
+ tmp &= ~CMD_CFG_TX_EN;
- iowrite32be(tmp, &regs->command_config);
+ iowrite32be(tmp, &regs->command_config);
}
-void memac_reset_counter(struct memac_regs *regs)
+void fman_memac_reset_stat(struct memac_regs *regs)
{
- uint32_t tmp;
+ uint32_t tmp;
- tmp = ioread32be(&regs->statn_config);
+ tmp = ioread32be(&regs->statn_config);
- tmp |= STATS_CFG_CLR;
+ tmp |= STATS_CFG_CLR;
- iowrite32be(tmp, &regs->statn_config);
+ iowrite32be(tmp, &regs->statn_config);
- while (ioread32be(&regs->statn_config) & STATS_CFG_CLR);
+ while (ioread32be(&regs->statn_config) & STATS_CFG_CLR);
}
-void memac_reset(struct memac_regs *regs)
+void fman_memac_reset(struct memac_regs *regs)
{
- uint32_t tmp;
+ uint32_t tmp;
- tmp = ioread32be(&regs->command_config);
+ tmp = ioread32be(&regs->command_config);
- tmp |= CMD_CFG_SW_RESET;
+ tmp |= CMD_CFG_SW_RESET;
- iowrite32be(tmp, &regs->command_config);
+ iowrite32be(tmp, &regs->command_config);
- while (ioread32be(&regs->command_config) & CMD_CFG_SW_RESET);
+ while (ioread32be(&regs->command_config) & CMD_CFG_SW_RESET);
}
-void memac_init(struct memac_regs *regs,
- struct memac_cfg *cfg,
- enum enet_interface enet_interface,
- enum enet_speed enet_speed,
- uint32_t exceptions)
+int fman_memac_init(struct memac_regs *regs,
+ struct memac_cfg *cfg,
+ enum enet_interface enet_interface,
+ enum enet_speed enet_speed,
+ uint32_t exceptions)
{
- uint32_t tmp;
-
- /* Config */
- tmp = 0;
- if (cfg->wan_mode_enable)
- tmp |= CMD_CFG_WAN_MODE;
- if (cfg->promiscuous_mode_enable)
- tmp |= CMD_CFG_PROMIS_EN;
- if (cfg->pause_forward_enable)
- tmp |= CMD_CFG_PAUSE_FWD;
- if (cfg->pause_ignore)
- tmp |= CMD_CFG_PAUSE_IGNORE;
- if (cfg->tx_addr_ins_enable)
- tmp |= CMD_CFG_TX_ADDR_INS;
- if (cfg->loopback_enable)
- tmp |= CMD_CFG_LOOPBACK_EN;
- if (cfg->cmd_frame_enable)
- tmp |= CMD_CFG_CNT_FRM_EN;
- if (cfg->send_idle_enable)
- tmp |= CMD_CFG_SEND_IDLE;
- if (cfg->no_length_check_enable)
- tmp |= CMD_CFG_NO_LEN_CHK;
- if (cfg->rx_sfd_any)
- tmp |= CMD_CFG_SFD_ANY;
- if (cfg->pad_enable)
- tmp |= CMD_CFG_TX_PAD_EN;
-
- tmp |= CMD_CFG_CRC_FWD;
-
- iowrite32be(tmp, &regs->command_config);
-
- /* Max Frame Length */
- iowrite32be((uint32_t)cfg->max_frame_length, &regs->maxfrm);
-
- /* Pause Time */
- iowrite32be(cfg->pause_quanta, &regs->pause_quanta[0]);
- iowrite32be(0, &regs->pause_thresh[0]);
-
- /* interrupts */
- iowrite32be(MEMAC_EVENTS_MASK, &regs->ievent);
- iowrite32be(exceptions, &regs->imask);
-
- /* IF_MODE */
- tmp = 0;
- switch (enet_interface) {
- case E_ENET_IF_XGMII:
- case E_ENET_IF_XFI:
- tmp |= IF_MODE_XGMII;
- break;
- default:
- tmp |= IF_MODE_GMII;
- if (enet_interface == E_ENET_IF_RGMII)
- tmp |= IF_MODE_RGMII | IF_MODE_RGMII_AUTO;
- }
- iowrite32be(tmp, &regs->if_mode);
+ uint32_t tmp;
+
+ /* Config */
+ tmp = 0;
+ if (cfg->wan_mode_enable)
+ tmp |= CMD_CFG_WAN_MODE;
+ if (cfg->promiscuous_mode_enable)
+ tmp |= CMD_CFG_PROMIS_EN;
+ if (cfg->pause_forward_enable)
+ tmp |= CMD_CFG_PAUSE_FWD;
+ if (cfg->pause_ignore)
+ tmp |= CMD_CFG_PAUSE_IGNORE;
+ if (cfg->tx_addr_ins_enable)
+ tmp |= CMD_CFG_TX_ADDR_INS;
+ if (cfg->loopback_enable)
+ tmp |= CMD_CFG_LOOPBACK_EN;
+ if (cfg->cmd_frame_enable)
+ tmp |= CMD_CFG_CNT_FRM_EN;
+ if (cfg->send_idle_enable)
+ tmp |= CMD_CFG_SEND_IDLE;
+ if (cfg->no_length_check_enable)
+ tmp |= CMD_CFG_NO_LEN_CHK;
+ if (cfg->rx_sfd_any)
+ tmp |= CMD_CFG_SFD_ANY;
+ if (cfg->pad_enable)
+ tmp |= CMD_CFG_TX_PAD_EN;
+
+ tmp |= CMD_CFG_CRC_FWD;
+
+ iowrite32be(tmp, &regs->command_config);
+
+ /* Max Frame Length */
+ iowrite32be((uint32_t)cfg->max_frame_length, &regs->maxfrm);
+
+ /* Pause Time */
+ iowrite32be((uint32_t)cfg->pause_quanta, &regs->pause_quanta[0]);
+ iowrite32be((uint32_t)0, &regs->pause_thresh[0]);
+
+ /* IF_MODE */
+ tmp = 0;
+ switch (enet_interface) {
+ case E_ENET_IF_XGMII:
+ case E_ENET_IF_XFI:
+ tmp |= IF_MODE_XGMII;
+ break;
+ default:
+ tmp |= IF_MODE_GMII;
+ if (enet_interface == E_ENET_IF_RGMII && !cfg->loopback_enable)
+ tmp |= IF_MODE_RGMII | IF_MODE_RGMII_AUTO;
+ }
+ iowrite32be(tmp, &regs->if_mode);
+
+ /* clear all pending events and set-up interrupts */
+ fman_memac_ack_event(regs, 0xffffffff);
+ fman_memac_set_exception(regs, exceptions, TRUE);
+
+ return 0;
}
-void memac_set_exception(struct memac_regs *regs, uint32_t val, bool enable)
+void fman_memac_set_exception(struct memac_regs *regs, uint32_t val, bool enable)
{
- uint32_t tmp;
+ uint32_t tmp;
- tmp = ioread32be(&regs->imask);
- if (enable)
- tmp |= val;
- else
- tmp &= ~val;
+ tmp = ioread32be(&regs->imask);
+ if (enable)
+ tmp |= val;
+ else
+ tmp &= ~val;
- iowrite32be(tmp, &regs->imask);
+ iowrite32be(tmp, &regs->imask);
}
-void memac_set_hash_table(struct memac_regs *regs, uint32_t val)
+void fman_memac_set_hash_table(struct memac_regs *regs, uint32_t val)
{
- iowrite32be(val, &regs->hashtable_ctrl);
+ iowrite32be(val, &regs->hashtable_ctrl);
}
-uint16_t memac_get_max_frame_length(struct memac_regs *regs)
+uint16_t fman_memac_get_max_frame_len(struct memac_regs *regs)
{
- uint32_t tmp;
+ uint32_t tmp;
- tmp = ioread32be(&regs->maxfrm);
+ tmp = ioread32be(&regs->maxfrm);
- return(uint16_t)tmp;
+ return(uint16_t)tmp;
}
-void memac_set_tx_pause_frames(struct memac_regs *regs,
- uint8_t priority,
- uint16_t pause_time,
- uint16_t thresh_time)
+void fman_memac_set_tx_pause_frames(struct memac_regs *regs,
+ uint8_t priority,
+ uint16_t pause_time,
+ uint16_t thresh_time)
{
- uint32_t tmp;
-
- tmp = ioread32be(&regs->command_config);
- if (priority == 0xff) {
- tmp &= ~CMD_CFG_PFC_MODE;
- priority = 0;
- }
- else
- tmp |= CMD_CFG_PFC_MODE;
-
- iowrite32be(tmp, &regs->command_config);
-
- tmp = ioread32be(&regs->pause_quanta[priority / 2]);
- if (priority % 2)
- tmp &= 0x0000FFFF;
- else
- tmp &= 0xFFFF0000;
- tmp |= ((uint32_t)pause_time << (16 * (priority % 2)));
- iowrite32be(tmp, &regs->pause_quanta[priority / 2]);
-
- tmp = ioread32be(&regs->pause_thresh[priority / 2]);
- if (priority % 2)
- tmp &= 0x0000FFFF;
- else
- tmp &= 0xFFFF0000;
- tmp |= ((uint32_t)thresh_time<<(16 * (priority % 2)));
- iowrite32be(tmp, &regs->pause_thresh[priority / 2]);
-}
+ uint32_t tmp;
-void memac_set_rx_ignore_pause_frames(struct memac_regs *regs,bool enable)
-{
- uint32_t tmp;
+ tmp = ioread32be(&regs->command_config);
+ if (priority == 0xff) {
+ tmp &= ~CMD_CFG_PFC_MODE;
+ priority = 0;
+ }
+ else
+ tmp |= CMD_CFG_PFC_MODE;
- tmp = ioread32be(&regs->command_config);
- if (enable)
- tmp |= CMD_CFG_PAUSE_IGNORE;
- else
- tmp &= ~CMD_CFG_PAUSE_IGNORE;
+ iowrite32be(tmp, &regs->command_config);
+
+ tmp = ioread32be(&regs->pause_quanta[priority / 2]);
+ if (priority % 2)
+ tmp &= 0x0000FFFF;
+ else
+ tmp &= 0xFFFF0000;
+ tmp |= ((uint32_t)pause_time << (16 * (priority % 2)));
+ iowrite32be(tmp, &regs->pause_quanta[priority / 2]);
- iowrite32be(tmp, &regs->command_config);
+ tmp = ioread32be(&regs->pause_thresh[priority / 2]);
+ if (priority % 2)
+ tmp &= 0x0000FFFF;
+ else
+ tmp &= 0xFFFF0000;
+ tmp |= ((uint32_t)thresh_time<<(16 * (priority % 2)));
+ iowrite32be(tmp, &regs->pause_thresh[priority / 2]);
}
-void memac_set_loopback(struct memac_regs *regs, bool enable)
+void fman_memac_set_rx_ignore_pause_frames(struct memac_regs *regs,bool enable)
{
uint32_t tmp;
tmp = ioread32be(&regs->command_config);
-
if (enable)
- tmp |= CMD_CFG_LOOPBACK_EN;
+ tmp |= CMD_CFG_PAUSE_IGNORE;
else
- tmp &= ~CMD_CFG_LOOPBACK_EN;
+ tmp &= ~CMD_CFG_PAUSE_IGNORE;
iowrite32be(tmp, &regs->command_config);
}
-
#define GET_MEMAC_CNTR_64(bn) \
- (ioread32be(&regs->bn ## _l) | \
- ((uint64_t)ioread32be(&regs->bn ## _u) << 32))
+ (ioread32be(&regs->bn ## _l) | \
+ ((uint64_t)ioread32be(&regs->bn ## _u) << 32))
+
+uint64_t fman_memac_get_counter(struct memac_regs *regs,
+ enum memac_counters reg_name)
+{
+ uint64_t ret_val;
+
+ switch (reg_name) {
+ case E_MEMAC_COUNTER_R64:
+ ret_val = GET_MEMAC_CNTR_64(r64);
+ break;
+ case E_MEMAC_COUNTER_R127:
+ ret_val = GET_MEMAC_CNTR_64(r127);
+ break;
+ case E_MEMAC_COUNTER_R255:
+ ret_val = GET_MEMAC_CNTR_64(r255);
+ break;
+ case E_MEMAC_COUNTER_R511:
+ ret_val = GET_MEMAC_CNTR_64(r511);
+ break;
+ case E_MEMAC_COUNTER_R1023:
+ ret_val = GET_MEMAC_CNTR_64(r1023);
+ break;
+ case E_MEMAC_COUNTER_R1518:
+ ret_val = GET_MEMAC_CNTR_64(r1518);
+ break;
+ case E_MEMAC_COUNTER_R1519X:
+ ret_val = GET_MEMAC_CNTR_64(r1519x);
+ break;
+ case E_MEMAC_COUNTER_RFRG:
+ ret_val = GET_MEMAC_CNTR_64(rfrg);
+ break;
+ case E_MEMAC_COUNTER_RJBR:
+ ret_val = GET_MEMAC_CNTR_64(rjbr);
+ break;
+ case E_MEMAC_COUNTER_RDRP:
+ ret_val = GET_MEMAC_CNTR_64(rdrp);
+ break;
+ case E_MEMAC_COUNTER_RALN:
+ ret_val = GET_MEMAC_CNTR_64(raln);
+ break;
+ case E_MEMAC_COUNTER_TUND:
+ ret_val = GET_MEMAC_CNTR_64(tund);
+ break;
+ case E_MEMAC_COUNTER_ROVR:
+ ret_val = GET_MEMAC_CNTR_64(rovr);
+ break;
+ case E_MEMAC_COUNTER_RXPF:
+ ret_val = GET_MEMAC_CNTR_64(rxpf);
+ break;
+ case E_MEMAC_COUNTER_TXPF:
+ ret_val = GET_MEMAC_CNTR_64(txpf);
+ break;
+ case E_MEMAC_COUNTER_ROCT:
+ ret_val = GET_MEMAC_CNTR_64(roct);
+ break;
+ case E_MEMAC_COUNTER_RMCA:
+ ret_val = GET_MEMAC_CNTR_64(rmca);
+ break;
+ case E_MEMAC_COUNTER_RBCA:
+ ret_val = GET_MEMAC_CNTR_64(rbca);
+ break;
+ case E_MEMAC_COUNTER_RPKT:
+ ret_val = GET_MEMAC_CNTR_64(rpkt);
+ break;
+ case E_MEMAC_COUNTER_RUCA:
+ ret_val = GET_MEMAC_CNTR_64(ruca);
+ break;
+ case E_MEMAC_COUNTER_RERR:
+ ret_val = GET_MEMAC_CNTR_64(rerr);
+ break;
+ case E_MEMAC_COUNTER_TOCT:
+ ret_val = GET_MEMAC_CNTR_64(toct);
+ break;
+ case E_MEMAC_COUNTER_TMCA:
+ ret_val = GET_MEMAC_CNTR_64(tmca);
+ break;
+ case E_MEMAC_COUNTER_TBCA:
+ ret_val = GET_MEMAC_CNTR_64(tbca);
+ break;
+ case E_MEMAC_COUNTER_TUCA:
+ ret_val = GET_MEMAC_CNTR_64(tuca);
+ break;
+ case E_MEMAC_COUNTER_TERR:
+ ret_val = GET_MEMAC_CNTR_64(terr);
+ break;
+ default:
+ ret_val = 0;
+ }
+
+ return ret_val;
+}
-uint64_t memac_get_counter(struct memac_regs *regs,
- enum memac_counters reg_name)
+void fman_memac_adjust_link(struct memac_regs *regs,
+ enum enet_interface iface_mode,
+ enum enet_speed speed, bool full_dx)
{
- uint64_t ret_val;
-
- switch (reg_name) {
- case E_MEMAC_COUNTER_R64:
- ret_val = GET_MEMAC_CNTR_64(r64);
- break;
- case E_MEMAC_COUNTER_R127:
- ret_val = GET_MEMAC_CNTR_64(r127);
- break;
- case E_MEMAC_COUNTER_R255:
- ret_val = GET_MEMAC_CNTR_64(r255);
- break;
- case E_MEMAC_COUNTER_R511:
- ret_val = GET_MEMAC_CNTR_64(r511);
- break;
- case E_MEMAC_COUNTER_R1023:
- ret_val = GET_MEMAC_CNTR_64(r1023);
- break;
- case E_MEMAC_COUNTER_R1518:
- ret_val = GET_MEMAC_CNTR_64(r1518);
- break;
- case E_MEMAC_COUNTER_R1519X:
- ret_val = GET_MEMAC_CNTR_64(r1519x);
- break;
- case E_MEMAC_COUNTER_RFRG:
- ret_val = GET_MEMAC_CNTR_64(rfrg);
- break;
- case E_MEMAC_COUNTER_RJBR:
- ret_val = GET_MEMAC_CNTR_64(rjbr);
- break;
- case E_MEMAC_COUNTER_RDRP:
- ret_val = GET_MEMAC_CNTR_64(rdrp);
- break;
- case E_MEMAC_COUNTER_RALN:
- ret_val = GET_MEMAC_CNTR_64(raln);
- break;
- case E_MEMAC_COUNTER_TUND:
- ret_val = GET_MEMAC_CNTR_64(tund);
- break;
- case E_MEMAC_COUNTER_ROVR:
- ret_val = GET_MEMAC_CNTR_64(rovr);
- break;
- case E_MEMAC_COUNTER_RXPF:
- ret_val = GET_MEMAC_CNTR_64(rxpf);
- break;
- case E_MEMAC_COUNTER_TXPF:
- ret_val = GET_MEMAC_CNTR_64(txpf);
- break;
- case E_MEMAC_COUNTER_ROCT:
- ret_val = GET_MEMAC_CNTR_64(roct);
- break;
- case E_MEMAC_COUNTER_RMCA:
- ret_val = GET_MEMAC_CNTR_64(rmca);
- break;
- case E_MEMAC_COUNTER_RBCA:
- ret_val = GET_MEMAC_CNTR_64(rbca);
- break;
- case E_MEMAC_COUNTER_RPKT:
- ret_val = GET_MEMAC_CNTR_64(rpkt);
- break;
- case E_MEMAC_COUNTER_RUCA:
- ret_val = GET_MEMAC_CNTR_64(ruca);
- break;
- case E_MEMAC_COUNTER_RERR:
- ret_val = GET_MEMAC_CNTR_64(rerr);
- break;
- case E_MEMAC_COUNTER_TOCT:
- ret_val = GET_MEMAC_CNTR_64(toct);
- break;
- case E_MEMAC_COUNTER_TMCA:
- ret_val = GET_MEMAC_CNTR_64(tmca);
- break;
- case E_MEMAC_COUNTER_TBCA:
- ret_val = GET_MEMAC_CNTR_64(tbca);
- break;
- case E_MEMAC_COUNTER_TUCA:
- ret_val = GET_MEMAC_CNTR_64(tuca);
- break;
- case E_MEMAC_COUNTER_TERR:
- ret_val = GET_MEMAC_CNTR_64(terr);
- break;
- default:
- ret_val = 0;
- }
-
- return ret_val;
+ uint32_t tmp;
+
+ tmp = ioread32be(&regs->if_mode);
+
+ if (full_dx)
+ tmp &= ~IF_MODE_HD;
+ else
+ tmp |= IF_MODE_HD;
+
+ if (iface_mode == E_ENET_IF_RGMII) {
+ /* Configure RGMII in manual mode */
+ tmp &= ~IF_MODE_RGMII_AUTO;
+ tmp &= ~IF_MODE_RGMII_SP_MASK;
+
+ if (full_dx)
+ tmp |= IF_MODE_RGMII_FD;
+ else
+ tmp &= ~IF_MODE_RGMII_FD;
+
+ switch (speed) {
+ case E_ENET_SPEED_1000:
+ tmp |= IF_MODE_RGMII_1000;
+ break;
+ case E_ENET_SPEED_100:
+ tmp |= IF_MODE_RGMII_100;
+ break;
+ case E_ENET_SPEED_10:
+ tmp |= IF_MODE_RGMII_10;
+ break;
+ default:
+ break;
+ }
+ }
+
+ iowrite32be(tmp, &regs->if_mode);
}
-void memac_defconfig(struct memac_cfg *cfg)
+void fman_memac_defconfig(struct memac_cfg *cfg)
{
- cfg->reset_on_init = FALSE;
- cfg->wan_mode_enable = FALSE;
- cfg->promiscuous_mode_enable = FALSE;
- cfg->pause_forward_enable = FALSE;
- cfg->pause_ignore = FALSE;
- cfg->tx_addr_ins_enable = FALSE;
- cfg->loopback_enable = FALSE;
- cfg->cmd_frame_enable = FALSE;
- cfg->rx_error_discard = FALSE;
- cfg->send_idle_enable = FALSE;
- cfg->no_length_check_enable = TRUE;
- cfg->lgth_check_nostdr = FALSE;
- cfg->time_stamp_enable = FALSE;
- cfg->tx_ipg_length = DEFAULT_TX_IPG_LENGTH;
- cfg->max_frame_length = DEFAULT_FRAME_LENGTH;
- cfg->pause_quanta = DEFAULT_PAUSE_QUANTA;
- cfg->pad_enable = TRUE;
- cfg->phy_tx_ena_on = FALSE;
- cfg->rx_sfd_any = FALSE;
- cfg->rx_pbl_fwd = FALSE;
- cfg->tx_pbl_fwd = FALSE;
- cfg->debug_mode = FALSE;
+ cfg->reset_on_init = FALSE;
+ cfg->wan_mode_enable = FALSE;
+ cfg->promiscuous_mode_enable = FALSE;
+ cfg->pause_forward_enable = FALSE;
+ cfg->pause_ignore = FALSE;
+ cfg->tx_addr_ins_enable = FALSE;
+ cfg->loopback_enable = FALSE;
+ cfg->cmd_frame_enable = FALSE;
+ cfg->rx_error_discard = FALSE;
+ cfg->send_idle_enable = FALSE;
+ cfg->no_length_check_enable = TRUE;
+ cfg->lgth_check_nostdr = FALSE;
+ cfg->time_stamp_enable = FALSE;
+ cfg->tx_ipg_length = DEFAULT_TX_IPG_LENGTH;
+ cfg->max_frame_length = DEFAULT_FRAME_LENGTH;
+ cfg->pause_quanta = DEFAULT_PAUSE_QUANTA;
+ cfg->pad_enable = TRUE;
+ cfg->phy_tx_ena_on = FALSE;
+ cfg->rx_sfd_any = FALSE;
+ cfg->rx_pbl_fwd = FALSE;
+ cfg->tx_pbl_fwd = FALSE;
+ cfg->debug_mode = FALSE;
}