mirror of
https://github.com/adulau/aha.git
synced 2024-12-27 19:26:25 +00:00
Staging: et131x: Clean up MAC_CFG types
Signed-off-by: Alan Cox <alan@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
eccdd88fa0
commit
c9835d97e9
3 changed files with 67 additions and 116 deletions
|
@ -1308,82 +1308,48 @@ typedef struct _RXMAC_t { /* Location: */
|
|||
/*
|
||||
* structure for configuration #1 reg in mac address map.
|
||||
* located at address 0x5000
|
||||
*
|
||||
* 31: soft reset
|
||||
* 30: sim reset
|
||||
* 29-20: reserved
|
||||
* 19: reset rx mc
|
||||
* 18: reset tx mc
|
||||
* 17: reset rx func
|
||||
* 16: reset tx fnc
|
||||
* 15-9: reserved
|
||||
* 8: loopback
|
||||
* 7-6: reserved
|
||||
* 5: rx flow
|
||||
* 4: tx flow
|
||||
* 3: syncd rx en
|
||||
* 2: rx enable
|
||||
* 1: syncd tx en
|
||||
* 0: tx enable
|
||||
*/
|
||||
typedef union _MAC_CFG1_t {
|
||||
u32 value;
|
||||
struct {
|
||||
#ifdef _BIT_FIELDS_HTOL
|
||||
u32 soft_reset:1; /* bit 31 */
|
||||
u32 sim_reset:1; /* bit 30 */
|
||||
u32 reserved3:10; /* bits 20-29 */
|
||||
u32 reset_rx_mc:1; /* bit 19 */
|
||||
u32 reset_tx_mc:1; /* bit 18 */
|
||||
u32 reset_rx_fun:1; /* bit 17 */
|
||||
u32 reset_tx_fun:1; /* bit 16 */
|
||||
u32 reserved2:7; /* bits 9-15 */
|
||||
u32 loop_back:1; /* bit 8 */
|
||||
u32 reserved1:2; /* bits 6-7 */
|
||||
u32 rx_flow:1; /* bit 5 */
|
||||
u32 tx_flow:1; /* bit 4 */
|
||||
u32 syncd_rx_en:1; /* bit 3 */
|
||||
u32 rx_enable:1; /* bit 2 */
|
||||
u32 syncd_tx_en:1; /* bit 1 */
|
||||
u32 tx_enable:1; /* bit 0 */
|
||||
#else
|
||||
u32 tx_enable:1; /* bit 0 */
|
||||
u32 syncd_tx_en:1; /* bit 1 */
|
||||
u32 rx_enable:1; /* bit 2 */
|
||||
u32 syncd_rx_en:1; /* bit 3 */
|
||||
u32 tx_flow:1; /* bit 4 */
|
||||
u32 rx_flow:1; /* bit 5 */
|
||||
u32 reserved1:2; /* bits 6-7 */
|
||||
u32 loop_back:1; /* bit 8 */
|
||||
u32 reserved2:7; /* bits 9-15 */
|
||||
u32 reset_tx_fun:1; /* bit 16 */
|
||||
u32 reset_rx_fun:1; /* bit 17 */
|
||||
u32 reset_tx_mc:1; /* bit 18 */
|
||||
u32 reset_rx_mc:1; /* bit 19 */
|
||||
u32 reserved3:10; /* bits 20-29 */
|
||||
u32 sim_reset:1; /* bit 30 */
|
||||
u32 soft_reset:1; /* bit 31 */
|
||||
#endif
|
||||
} bits;
|
||||
} MAC_CFG1_t, *PMAC_CFG1_t;
|
||||
|
||||
#define CFG1_LOOPBACK 0x00000100
|
||||
#define CFG1_RX_FLOW 0x00000020
|
||||
#define CFG1_TX_FLOW 0x00000010
|
||||
#define CFG1_RX_ENABLE 0x00000004
|
||||
#define CFG1_TX_ENABLE 0x00000001
|
||||
#define CFG1_WAIT 0x0000000A /* RX & TX syncd */
|
||||
|
||||
/*
|
||||
* structure for configuration #2 reg in mac address map.
|
||||
* located at address 0x5004
|
||||
* 31-16: reserved
|
||||
* 15-12: preamble
|
||||
* 11-10: reserved
|
||||
* 9-8: if mode
|
||||
* 7-6: reserved
|
||||
* 5: huge frame
|
||||
* 4: length check
|
||||
* 3: undefined
|
||||
* 2: pad crc
|
||||
* 1: crc enable
|
||||
* 0: full duplex
|
||||
*/
|
||||
typedef union _MAC_CFG2_t {
|
||||
u32 value;
|
||||
struct {
|
||||
#ifdef _BIT_FIELDS_HTOL
|
||||
u32 reserved3:16; /* bits 16-31 */
|
||||
u32 preamble_len:4; /* bits 12-15 */
|
||||
u32 reserved2:2; /* bits 10-11 */
|
||||
u32 if_mode:2; /* bits 8-9 */
|
||||
u32 reserved1:2; /* bits 6-7 */
|
||||
u32 huge_frame:1; /* bit 5 */
|
||||
u32 len_check:1; /* bit 4 */
|
||||
u32 undefined:1; /* bit 3 */
|
||||
u32 pad_crc:1; /* bit 2 */
|
||||
u32 crc_enable:1; /* bit 1 */
|
||||
u32 full_duplex:1; /* bit 0 */
|
||||
#else
|
||||
u32 full_duplex:1; /* bit 0 */
|
||||
u32 crc_enable:1; /* bit 1 */
|
||||
u32 pad_crc:1; /* bit 2 */
|
||||
u32 undefined:1; /* bit 3 */
|
||||
u32 len_check:1; /* bit 4 */
|
||||
u32 huge_frame:1; /* bit 5 */
|
||||
u32 reserved1:2; /* bits 6-7 */
|
||||
u32 if_mode:2; /* bits 8-9 */
|
||||
u32 reserved2:2; /* bits 10-11 */
|
||||
u32 preamble_len:4; /* bits 12-15 */
|
||||
u32 reserved3:16; /* bits 16-31 */
|
||||
#endif
|
||||
} bits;
|
||||
} MAC_CFG2_t, *PMAC_CFG2_t;
|
||||
|
||||
|
||||
/*
|
||||
* structure for Interpacket gap reg in mac address map.
|
||||
|
@ -1682,8 +1648,8 @@ typedef union _MAC_STATION_ADDR2_t {
|
|||
* MAC Module of JAGCore Address Mapping
|
||||
*/
|
||||
typedef struct _MAC_t { /* Location: */
|
||||
MAC_CFG1_t cfg1; /* 0x5000 */
|
||||
MAC_CFG2_t cfg2; /* 0x5004 */
|
||||
u32 cfg1; /* 0x5000 */
|
||||
u32 cfg2; /* 0x5004 */
|
||||
u32 ipg; /* 0x5008 */
|
||||
u32 hfdp; /* 0x500C */
|
||||
MAC_MAX_FM_LEN_t max_fm_len; /* 0x5010 */
|
||||
|
|
|
@ -106,7 +106,7 @@ void ConfigMACRegs1(struct et131x_adapter *etdev)
|
|||
/* First we need to reset everything. Write to MAC configuration
|
||||
* register 1 to perform reset.
|
||||
*/
|
||||
writel(0xC00F0000, &pMac->cfg1.value);
|
||||
writel(0xC00F0000, &pMac->cfg1);
|
||||
|
||||
/* Next lets configure the MAC Inter-packet gap register */
|
||||
ipg = 0x38005860; /* IPG1 0x38 IPG2 0x58 B2B 0x60 */
|
||||
|
@ -149,7 +149,7 @@ void ConfigMACRegs1(struct et131x_adapter *etdev)
|
|||
writel(etdev->RegistryJumboPacket + 4, &pMac->max_fm_len.value);
|
||||
|
||||
/* clear out MAC config reset */
|
||||
writel(0, &pMac->cfg1.value);
|
||||
writel(0, &pMac->cfg1);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -160,74 +160,59 @@ void ConfigMACRegs2(struct et131x_adapter *etdev)
|
|||
{
|
||||
int32_t delay = 0;
|
||||
struct _MAC_t __iomem *pMac = &etdev->regs->mac;
|
||||
MAC_CFG1_t cfg1;
|
||||
MAC_CFG2_t cfg2;
|
||||
u32 cfg1;
|
||||
u32 cfg2;
|
||||
MAC_IF_CTRL_t ifctrl;
|
||||
TXMAC_CTL_t ctl;
|
||||
|
||||
ctl.value = readl(&etdev->regs->txmac.ctl.value);
|
||||
cfg1.value = readl(&pMac->cfg1.value);
|
||||
cfg2.value = readl(&pMac->cfg2.value);
|
||||
cfg1 = readl(&pMac->cfg1);
|
||||
cfg2 = readl(&pMac->cfg2);
|
||||
ifctrl.value = readl(&pMac->if_ctrl.value);
|
||||
|
||||
/* Set up the if mode bits */
|
||||
cfg2 &= ~0x300;
|
||||
if (etdev->linkspeed == TRUEPHY_SPEED_1000MBPS) {
|
||||
cfg2.bits.if_mode = 0x2;
|
||||
cfg2 |= 0x200;
|
||||
ifctrl.bits.phy_mode = 0x0;
|
||||
} else {
|
||||
cfg2.bits.if_mode = 0x1;
|
||||
cfg2 |= 0x100;
|
||||
ifctrl.bits.phy_mode = 0x1;
|
||||
}
|
||||
|
||||
/* We need to enable Rx/Tx */
|
||||
cfg1.bits.rx_enable = 0x1;
|
||||
cfg1.bits.tx_enable = 0x1;
|
||||
|
||||
/* Set up flow control */
|
||||
cfg1.bits.tx_flow = 0x1;
|
||||
|
||||
if ((etdev->FlowControl == RxOnly) ||
|
||||
(etdev->FlowControl == Both)) {
|
||||
cfg1.bits.rx_flow = 0x1;
|
||||
} else {
|
||||
cfg1.bits.rx_flow = 0x0;
|
||||
}
|
||||
|
||||
cfg1 |= CFG1_RX_ENABLE|CFG1_TX_ENABLE|CFG1_TX_FLOW;
|
||||
/* Initialize loop back to off */
|
||||
cfg1.bits.loop_back = 0;
|
||||
|
||||
writel(cfg1.value, &pMac->cfg1.value);
|
||||
cfg1 &= ~(CFG1_LOOPBACK|CFG1_RX_FLOW);
|
||||
if (etdev->FlowControl == RxOnly || etdev->FlowControl == Both)
|
||||
cfg1 |= CFG1_RX_FLOW;
|
||||
writel(cfg1, &pMac->cfg1);
|
||||
|
||||
/* Now we need to initialize the MAC Configuration 2 register */
|
||||
cfg2.bits.preamble_len = 0x7;
|
||||
cfg2.bits.huge_frame = 0x0;
|
||||
/* LENGTH FIELD CHECKING bit4: Set this bit to cause the MAC to check
|
||||
* the frame's length field to ensure it matches the actual data
|
||||
* field length. Clear this bit if no length field checking is
|
||||
* desired. Its default is 0.
|
||||
*/
|
||||
cfg2.bits.len_check = 0x1;
|
||||
/* preamble 7, check length, huge frame off, pad crc, crc enable
|
||||
full duplex off */
|
||||
cfg2 |= 0x7016;
|
||||
cfg2 &= ~0x0021;
|
||||
|
||||
cfg2.bits.pad_crc = 0x1;
|
||||
cfg2.bits.crc_enable = 0x1;
|
||||
/* Turn on duplex if needed */
|
||||
if (etdev->duplex_mode)
|
||||
cfg2 |= 0x01;
|
||||
|
||||
/* 1 - full duplex, 0 - half-duplex */
|
||||
cfg2.bits.full_duplex = etdev->duplex_mode;
|
||||
ifctrl.bits.ghd_mode = !etdev->duplex_mode;
|
||||
|
||||
writel(ifctrl.value, &pMac->if_ctrl.value);
|
||||
writel(cfg2.value, &pMac->cfg2.value);
|
||||
writel(cfg2, &pMac->cfg2);
|
||||
|
||||
do {
|
||||
udelay(10);
|
||||
delay++;
|
||||
cfg1.value = readl(&pMac->cfg1.value);
|
||||
} while ((!cfg1.bits.syncd_rx_en || !cfg1.bits.syncd_tx_en) &&
|
||||
delay < 100);
|
||||
cfg1 = readl(&pMac->cfg1);
|
||||
} while ((cfg1 & CFG1_WAIT) != CFG1_WAIT && delay < 100);
|
||||
|
||||
if (delay == 100) {
|
||||
dev_warn(&etdev->pdev->dev,
|
||||
"Syncd bits did not respond correctly cfg1 word 0x%08x\n",
|
||||
cfg1.value);
|
||||
cfg1);
|
||||
}
|
||||
|
||||
/* Enable TXMAC */
|
||||
|
|
|
@ -432,12 +432,12 @@ int et131x_adapter_setup(struct et131x_adapter *etdev)
|
|||
void et131x_soft_reset(struct et131x_adapter *adapter)
|
||||
{
|
||||
/* Disable MAC Core */
|
||||
writel(0xc00f0000, &adapter->regs->mac.cfg1.value);
|
||||
writel(0xc00f0000, &adapter->regs->mac.cfg1);
|
||||
|
||||
/* Set everything to a reset value */
|
||||
writel(0x7F, &adapter->regs->global.sw_reset);
|
||||
writel(0x000f0000, &adapter->regs->mac.cfg1.value);
|
||||
writel(0x00000000, &adapter->regs->mac.cfg1.value);
|
||||
writel(0x000f0000, &adapter->regs->mac.cfg1);
|
||||
writel(0x00000000, &adapter->regs->mac.cfg1);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in a new issue