|
@@ -80,7 +80,7 @@
|
|
|
*/
|
|
|
#define FEC_RESET_DELAY 50
|
|
|
|
|
|
-static int whack_reset(fec_t __iomem *fecp)
|
|
|
+static int whack_reset(struct fec __iomem *fecp)
|
|
|
{
|
|
|
int i;
|
|
|
|
|
@@ -168,7 +168,7 @@ static void cleanup_data(struct net_device *dev)
|
|
|
static void set_promiscuous_mode(struct net_device *dev)
|
|
|
{
|
|
|
struct fs_enet_private *fep = netdev_priv(dev);
|
|
|
- fec_t __iomem *fecp = fep->fec.fecp;
|
|
|
+ struct fec __iomem *fecp = fep->fec.fecp;
|
|
|
|
|
|
FS(fecp, r_cntrl, FEC_RCNTRL_PROM);
|
|
|
}
|
|
@@ -216,7 +216,7 @@ static void set_multicast_one(struct net_device *dev, const u8 *mac)
|
|
|
static void set_multicast_finish(struct net_device *dev)
|
|
|
{
|
|
|
struct fs_enet_private *fep = netdev_priv(dev);
|
|
|
- fec_t __iomem *fecp = fep->fec.fecp;
|
|
|
+ struct fec __iomem *fecp = fep->fec.fecp;
|
|
|
|
|
|
/* if all multi or too many multicasts; just enable all */
|
|
|
if ((dev->flags & IFF_ALLMULTI) != 0 ||
|
|
@@ -246,7 +246,7 @@ static void set_multicast_list(struct net_device *dev)
|
|
|
static void restart(struct net_device *dev)
|
|
|
{
|
|
|
struct fs_enet_private *fep = netdev_priv(dev);
|
|
|
- fec_t __iomem *fecp = fep->fec.fecp;
|
|
|
+ struct fec __iomem *fecp = fep->fec.fecp;
|
|
|
const struct fs_platform_info *fpi = fep->fpi;
|
|
|
dma_addr_t rx_bd_base_phys, tx_bd_base_phys;
|
|
|
int r;
|
|
@@ -280,7 +280,11 @@ static void restart(struct net_device *dev)
|
|
|
* Set maximum receive buffer size.
|
|
|
*/
|
|
|
FW(fecp, r_buff_size, PKT_MAXBLR_SIZE);
|
|
|
+#ifdef CONFIG_FS_ENET_MPC5121_FEC
|
|
|
+ FW(fecp, r_cntrl, PKT_MAXBUF_SIZE << 16);
|
|
|
+#else
|
|
|
FW(fecp, r_hash, PKT_MAXBUF_SIZE);
|
|
|
+#endif
|
|
|
|
|
|
/* get physical address */
|
|
|
rx_bd_base_phys = fep->ring_mem_addr;
|
|
@@ -297,7 +301,11 @@ static void restart(struct net_device *dev)
|
|
|
/*
|
|
|
* Enable big endian and don't care about SDMA FC.
|
|
|
*/
|
|
|
+#ifdef CONFIG_FS_ENET_MPC5121_FEC
|
|
|
+ FS(fecp, dma_control, 0xC0000000);
|
|
|
+#else
|
|
|
FW(fecp, fun_code, 0x78000000);
|
|
|
+#endif
|
|
|
|
|
|
/*
|
|
|
* Set MII speed.
|
|
@@ -308,9 +316,17 @@ static void restart(struct net_device *dev)
|
|
|
* Clear any outstanding interrupt.
|
|
|
*/
|
|
|
FW(fecp, ievent, 0xffc0);
|
|
|
+#ifndef CONFIG_FS_ENET_MPC5121_FEC
|
|
|
FW(fecp, ivec, (virq_to_hw(fep->interrupt) / 2) << 29);
|
|
|
|
|
|
FW(fecp, r_cntrl, FEC_RCNTRL_MII_MODE); /* MII enable */
|
|
|
+#else
|
|
|
+ /*
|
|
|
+ * Only set MII mode - do not touch maximum frame length
|
|
|
+ * configured before.
|
|
|
+ */
|
|
|
+ FS(fecp, r_cntrl, FEC_RCNTRL_MII_MODE);
|
|
|
+#endif
|
|
|
/*
|
|
|
* adjust to duplex mode
|
|
|
*/
|
|
@@ -339,7 +355,7 @@ static void stop(struct net_device *dev)
|
|
|
{
|
|
|
struct fs_enet_private *fep = netdev_priv(dev);
|
|
|
const struct fs_platform_info *fpi = fep->fpi;
|
|
|
- fec_t __iomem *fecp = fep->fec.fecp;
|
|
|
+ struct fec __iomem *fecp = fep->fec.fecp;
|
|
|
|
|
|
struct fec_info* feci= fep->phydev->bus->priv;
|
|
|
|
|
@@ -375,7 +391,7 @@ static void stop(struct net_device *dev)
|
|
|
static void napi_clear_rx_event(struct net_device *dev)
|
|
|
{
|
|
|
struct fs_enet_private *fep = netdev_priv(dev);
|
|
|
- fec_t __iomem *fecp = fep->fec.fecp;
|
|
|
+ struct fec __iomem *fecp = fep->fec.fecp;
|
|
|
|
|
|
FW(fecp, ievent, FEC_NAPI_RX_EVENT_MSK);
|
|
|
}
|
|
@@ -383,7 +399,7 @@ static void napi_clear_rx_event(struct net_device *dev)
|
|
|
static void napi_enable_rx(struct net_device *dev)
|
|
|
{
|
|
|
struct fs_enet_private *fep = netdev_priv(dev);
|
|
|
- fec_t __iomem *fecp = fep->fec.fecp;
|
|
|
+ struct fec __iomem *fecp = fep->fec.fecp;
|
|
|
|
|
|
FS(fecp, imask, FEC_NAPI_RX_EVENT_MSK);
|
|
|
}
|
|
@@ -391,7 +407,7 @@ static void napi_enable_rx(struct net_device *dev)
|
|
|
static void napi_disable_rx(struct net_device *dev)
|
|
|
{
|
|
|
struct fs_enet_private *fep = netdev_priv(dev);
|
|
|
- fec_t __iomem *fecp = fep->fec.fecp;
|
|
|
+ struct fec __iomem *fecp = fep->fec.fecp;
|
|
|
|
|
|
FC(fecp, imask, FEC_NAPI_RX_EVENT_MSK);
|
|
|
}
|
|
@@ -399,7 +415,7 @@ static void napi_disable_rx(struct net_device *dev)
|
|
|
static void rx_bd_done(struct net_device *dev)
|
|
|
{
|
|
|
struct fs_enet_private *fep = netdev_priv(dev);
|
|
|
- fec_t __iomem *fecp = fep->fec.fecp;
|
|
|
+ struct fec __iomem *fecp = fep->fec.fecp;
|
|
|
|
|
|
FW(fecp, r_des_active, 0x01000000);
|
|
|
}
|
|
@@ -407,7 +423,7 @@ static void rx_bd_done(struct net_device *dev)
|
|
|
static void tx_kickstart(struct net_device *dev)
|
|
|
{
|
|
|
struct fs_enet_private *fep = netdev_priv(dev);
|
|
|
- fec_t __iomem *fecp = fep->fec.fecp;
|
|
|
+ struct fec __iomem *fecp = fep->fec.fecp;
|
|
|
|
|
|
FW(fecp, x_des_active, 0x01000000);
|
|
|
}
|
|
@@ -415,7 +431,7 @@ static void tx_kickstart(struct net_device *dev)
|
|
|
static u32 get_int_events(struct net_device *dev)
|
|
|
{
|
|
|
struct fs_enet_private *fep = netdev_priv(dev);
|
|
|
- fec_t __iomem *fecp = fep->fec.fecp;
|
|
|
+ struct fec __iomem *fecp = fep->fec.fecp;
|
|
|
|
|
|
return FR(fecp, ievent) & FR(fecp, imask);
|
|
|
}
|
|
@@ -423,7 +439,7 @@ static u32 get_int_events(struct net_device *dev)
|
|
|
static void clear_int_events(struct net_device *dev, u32 int_events)
|
|
|
{
|
|
|
struct fs_enet_private *fep = netdev_priv(dev);
|
|
|
- fec_t __iomem *fecp = fep->fec.fecp;
|
|
|
+ struct fec __iomem *fecp = fep->fec.fecp;
|
|
|
|
|
|
FW(fecp, ievent, int_events);
|
|
|
}
|
|
@@ -439,17 +455,17 @@ static int get_regs(struct net_device *dev, void *p, int *sizep)
|
|
|
{
|
|
|
struct fs_enet_private *fep = netdev_priv(dev);
|
|
|
|
|
|
- if (*sizep < sizeof(fec_t))
|
|
|
+ if (*sizep < sizeof(struct fec))
|
|
|
return -EINVAL;
|
|
|
|
|
|
- memcpy_fromio(p, fep->fec.fecp, sizeof(fec_t));
|
|
|
+ memcpy_fromio(p, fep->fec.fecp, sizeof(struct fec));
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
static int get_regs_len(struct net_device *dev)
|
|
|
{
|
|
|
- return sizeof(fec_t);
|
|
|
+ return sizeof(struct fec);
|
|
|
}
|
|
|
|
|
|
static void tx_restart(struct net_device *dev)
|