mirror of
https://github.com/adulau/aha.git
synced 2024-12-29 04:06:22 +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.
|
* 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 */
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in a new issue