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:
Alan Cox 2009-10-06 15:50:45 +01:00 committed by Greg Kroah-Hartman
parent eccdd88fa0
commit c9835d97e9
3 changed files with 67 additions and 116 deletions

View file

@ -1308,82 +1308,48 @@ typedef struct _RXMAC_t { /* Location: */
/* /*
* structure for configuration #1 reg in mac address map. * structure for configuration #1 reg in mac address map.
* located at address 0x5000 * 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; #define CFG1_LOOPBACK 0x00000100
struct { #define CFG1_RX_FLOW 0x00000020
#ifdef _BIT_FIELDS_HTOL #define CFG1_TX_FLOW 0x00000010
u32 soft_reset:1; /* bit 31 */ #define CFG1_RX_ENABLE 0x00000004
u32 sim_reset:1; /* bit 30 */ #define CFG1_TX_ENABLE 0x00000001
u32 reserved3:10; /* bits 20-29 */ #define CFG1_WAIT 0x0000000A /* RX & TX syncd */
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;
/* /*
* structure for configuration #2 reg in mac address map. * structure for configuration #2 reg in mac address map.
* located at address 0x5004 * 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. * 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 * MAC Module of JAGCore Address Mapping
*/ */
typedef struct _MAC_t { /* Location: */ typedef struct _MAC_t { /* Location: */
MAC_CFG1_t cfg1; /* 0x5000 */ u32 cfg1; /* 0x5000 */
MAC_CFG2_t cfg2; /* 0x5004 */ u32 cfg2; /* 0x5004 */
u32 ipg; /* 0x5008 */ u32 ipg; /* 0x5008 */
u32 hfdp; /* 0x500C */ u32 hfdp; /* 0x500C */
MAC_MAX_FM_LEN_t max_fm_len; /* 0x5010 */ MAC_MAX_FM_LEN_t max_fm_len; /* 0x5010 */

View file

@ -106,7 +106,7 @@ void ConfigMACRegs1(struct et131x_adapter *etdev)
/* First we need to reset everything. Write to MAC configuration /* First we need to reset everything. Write to MAC configuration
* register 1 to perform reset. * register 1 to perform reset.
*/ */
writel(0xC00F0000, &pMac->cfg1.value); writel(0xC00F0000, &pMac->cfg1);
/* Next lets configure the MAC Inter-packet gap register */ /* Next lets configure the MAC Inter-packet gap register */
ipg = 0x38005860; /* IPG1 0x38 IPG2 0x58 B2B 0x60 */ 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); writel(etdev->RegistryJumboPacket + 4, &pMac->max_fm_len.value);
/* clear out MAC config reset */ /* 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; int32_t delay = 0;
struct _MAC_t __iomem *pMac = &etdev->regs->mac; struct _MAC_t __iomem *pMac = &etdev->regs->mac;
MAC_CFG1_t cfg1; u32 cfg1;
MAC_CFG2_t cfg2; u32 cfg2;
MAC_IF_CTRL_t ifctrl; MAC_IF_CTRL_t ifctrl;
TXMAC_CTL_t ctl; TXMAC_CTL_t ctl;
ctl.value = readl(&etdev->regs->txmac.ctl.value); ctl.value = readl(&etdev->regs->txmac.ctl.value);
cfg1.value = readl(&pMac->cfg1.value); cfg1 = readl(&pMac->cfg1);
cfg2.value = readl(&pMac->cfg2.value); cfg2 = readl(&pMac->cfg2);
ifctrl.value = readl(&pMac->if_ctrl.value); ifctrl.value = readl(&pMac->if_ctrl.value);
/* Set up the if mode bits */
cfg2 &= ~0x300;
if (etdev->linkspeed == TRUEPHY_SPEED_1000MBPS) { if (etdev->linkspeed == TRUEPHY_SPEED_1000MBPS) {
cfg2.bits.if_mode = 0x2; cfg2 |= 0x200;
ifctrl.bits.phy_mode = 0x0; ifctrl.bits.phy_mode = 0x0;
} else { } else {
cfg2.bits.if_mode = 0x1; cfg2 |= 0x100;
ifctrl.bits.phy_mode = 0x1; ifctrl.bits.phy_mode = 0x1;
} }
/* We need to enable Rx/Tx */ /* We need to enable Rx/Tx */
cfg1.bits.rx_enable = 0x1; cfg1 |= CFG1_RX_ENABLE|CFG1_TX_ENABLE|CFG1_TX_FLOW;
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;
}
/* Initialize loop back to off */ /* Initialize loop back to off */
cfg1.bits.loop_back = 0; cfg1 &= ~(CFG1_LOOPBACK|CFG1_RX_FLOW);
if (etdev->FlowControl == RxOnly || etdev->FlowControl == Both)
writel(cfg1.value, &pMac->cfg1.value); cfg1 |= CFG1_RX_FLOW;
writel(cfg1, &pMac->cfg1);
/* Now we need to initialize the MAC Configuration 2 register */ /* Now we need to initialize the MAC Configuration 2 register */
cfg2.bits.preamble_len = 0x7; /* preamble 7, check length, huge frame off, pad crc, crc enable
cfg2.bits.huge_frame = 0x0; full duplex off */
/* LENGTH FIELD CHECKING bit4: Set this bit to cause the MAC to check cfg2 |= 0x7016;
* the frame's length field to ensure it matches the actual data cfg2 &= ~0x0021;
* field length. Clear this bit if no length field checking is
* desired. Its default is 0.
*/
cfg2.bits.len_check = 0x1;
cfg2.bits.pad_crc = 0x1; /* Turn on duplex if needed */
cfg2.bits.crc_enable = 0x1; 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; ifctrl.bits.ghd_mode = !etdev->duplex_mode;
writel(ifctrl.value, &pMac->if_ctrl.value); writel(ifctrl.value, &pMac->if_ctrl.value);
writel(cfg2.value, &pMac->cfg2.value); writel(cfg2, &pMac->cfg2);
do { do {
udelay(10); udelay(10);
delay++; delay++;
cfg1.value = readl(&pMac->cfg1.value); cfg1 = readl(&pMac->cfg1);
} while ((!cfg1.bits.syncd_rx_en || !cfg1.bits.syncd_tx_en) && } while ((cfg1 & CFG1_WAIT) != CFG1_WAIT && delay < 100);
delay < 100);
if (delay == 100) { if (delay == 100) {
dev_warn(&etdev->pdev->dev, dev_warn(&etdev->pdev->dev,
"Syncd bits did not respond correctly cfg1 word 0x%08x\n", "Syncd bits did not respond correctly cfg1 word 0x%08x\n",
cfg1.value); cfg1);
} }
/* Enable TXMAC */ /* Enable TXMAC */

View file

@ -432,12 +432,12 @@ int et131x_adapter_setup(struct et131x_adapter *etdev)
void et131x_soft_reset(struct et131x_adapter *adapter) void et131x_soft_reset(struct et131x_adapter *adapter)
{ {
/* Disable MAC Core */ /* Disable MAC Core */
writel(0xc00f0000, &adapter->regs->mac.cfg1.value); writel(0xc00f0000, &adapter->regs->mac.cfg1);
/* Set everything to a reset value */ /* Set everything to a reset value */
writel(0x7F, &adapter->regs->global.sw_reset); writel(0x7F, &adapter->regs->global.sw_reset);
writel(0x000f0000, &adapter->regs->mac.cfg1.value); writel(0x000f0000, &adapter->regs->mac.cfg1);
writel(0x00000000, &adapter->regs->mac.cfg1.value); writel(0x00000000, &adapter->regs->mac.cfg1);
} }
/** /**