aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/drivers/net/intel.c6
-rw-r--r--src/drivers/net/intel.h4
2 files changed, 10 insertions, 0 deletions
diff --git a/src/drivers/net/intel.c b/src/drivers/net/intel.c
index 8153e095..1fdce1cb 100644
--- a/src/drivers/net/intel.c
+++ b/src/drivers/net/intel.c
@@ -363,6 +363,7 @@ static void intel_check_link ( struct net_device *netdev ) {
static int intel_create_ring ( struct intel_nic *intel,
struct intel_ring *ring ) {
physaddr_t address;
+ uint32_t dctl;
/* Allocate descriptor ring. Align ring on its own size to
* prevent any possible page-crossing errors due to hardware
@@ -393,6 +394,11 @@ static int intel_create_ring ( struct intel_nic *intel,
writel ( 0, ( intel->regs + ring->reg + INTEL_xDH ) );
writel ( 0, ( intel->regs + ring->reg + INTEL_xDT ) );
+ /* Enable ring */
+ dctl = readl ( intel->regs + ring->reg + INTEL_xDCTL );
+ dctl |= INTEL_xDCTL_ENABLE;
+ writel ( dctl, intel->regs + ring->reg + INTEL_xDCTL );
+
DBGC ( intel, "INTEL %p ring %05x is at [%08llx,%08llx)\n",
intel, ring->reg, ( ( unsigned long long ) address ),
( ( unsigned long long ) address + ring->len ) );
diff --git a/src/drivers/net/intel.h b/src/drivers/net/intel.h
index 6f941d17..b38a7139 100644
--- a/src/drivers/net/intel.h
+++ b/src/drivers/net/intel.h
@@ -170,6 +170,10 @@ enum intel_descriptor_status {
/** Receive/Transmit Descriptor Tail (offset) */
#define INTEL_xDT 0x18
+/** Receive/Transmit Descriptor Control (offset) */
+#define INTEL_xDCTL 0x28
+#define INTEL_xDCTL_ENABLE 0x02000000UL /**< Queue enable */
+
/** Receive Descriptor Head */
#define INTEL_RDH ( INTEL_RD + INTEL_xDH )