tree:   https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git 
master
head:   12ba7e1045521ec9f251c93ae0a6735cc3f42337
commit: 7e8d5755be0e6c92d3b86a85e54c6a550b1910c5 [13/221] net: nixge: Add 
support for 64-bit platforms
config: i386-randconfig-x075-09240403 (attached as .config)
compiler: gcc-7 (Debian 7.3.0-1) 7.3.0
reproduce:
        git checkout 7e8d5755be0e6c92d3b86a85e54c6a550b1910c5
        # save the attached .config to linux build tree
        make ARCH=i386 

All warnings (new ones prefixed by >>):

   drivers/net//ethernet/ni/nixge.c: In function 'nixge_hw_dma_bd_release':
   drivers/net//ethernet/ni/nixge.c:254:9: warning: cast to pointer from 
integer of different size [-Wint-to-pointer-cast]
      skb = (struct sk_buff *)
            ^
   In file included from include/linux/skbuff.h:17:0,
                    from include/linux/if_ether.h:23,
                    from include/linux/etherdevice.h:25,
                    from drivers/net//ethernet/ni/nixge.c:7:
   drivers/net//ethernet/ni/nixge.c: In function 'nixge_hw_dma_bd_init':
   drivers/net//ethernet/ni/nixge.c:130:37: warning: cast from pointer to 
integer of different size [-Wpointer-to-int-cast]
      (bd)->field##_lo = lower_32_bits(((u64)addr)); \
                                        ^
   include/linux/kernel.h:234:33: note: in definition of macro 'lower_32_bits'
    #define lower_32_bits(n) ((u32)(n))
                                    ^
>> drivers/net//ethernet/ni/nixge.c:145:2: note: in expansion of macro 
>> 'nixge_hw_dma_bd_set_addr'
     nixge_hw_dma_bd_set_addr((bd), sw_id_offset, (addr))
     ^~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net//ethernet/ni/nixge.c:326:3: note: in expansion of macro 
>> 'nixge_hw_dma_bd_set_offset'
      nixge_hw_dma_bd_set_offset(&priv->rx_bd_v[i], skb);
      ^~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net//ethernet/ni/nixge.c:131:37: warning: cast from pointer to 
integer of different size [-Wpointer-to-int-cast]
      (bd)->field##_hi = upper_32_bits(((u64)addr)); \
                                        ^
   include/linux/kernel.h:228:35: note: in definition of macro 'upper_32_bits'
    #define upper_32_bits(n) ((u32)(((n) >> 16) >> 16))
                                      ^
>> drivers/net//ethernet/ni/nixge.c:145:2: note: in expansion of macro 
>> 'nixge_hw_dma_bd_set_addr'
     nixge_hw_dma_bd_set_addr((bd), sw_id_offset, (addr))
     ^~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net//ethernet/ni/nixge.c:326:3: note: in expansion of macro 
>> 'nixge_hw_dma_bd_set_offset'
      nixge_hw_dma_bd_set_offset(&priv->rx_bd_v[i], skb);
      ^~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net//ethernet/ni/nixge.c: In function 'nixge_recv':
   drivers/net//ethernet/ni/nixge.c:604:9: warning: cast to pointer from 
integer of different size [-Wint-to-pointer-cast]
      skb = (struct sk_buff *)nixge_hw_dma_bd_get_addr(cur_p,
            ^
   In file included from include/linux/skbuff.h:17:0,
                    from include/linux/if_ether.h:23,
                    from include/linux/etherdevice.h:25,
                    from drivers/net//ethernet/ni/nixge.c:7:
   drivers/net//ethernet/ni/nixge.c:130:37: warning: cast from pointer to 
integer of different size [-Wpointer-to-int-cast]
      (bd)->field##_lo = lower_32_bits(((u64)addr)); \
                                        ^
   include/linux/kernel.h:234:33: note: in definition of macro 'lower_32_bits'
    #define lower_32_bits(n) ((u32)(n))
                                    ^
>> drivers/net//ethernet/ni/nixge.c:145:2: note: in expansion of macro 
>> 'nixge_hw_dma_bd_set_addr'
     nixge_hw_dma_bd_set_addr((bd), sw_id_offset, (addr))
     ^~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net//ethernet/ni/nixge.c:646:3: note: in expansion of macro 
'nixge_hw_dma_bd_set_offset'
      nixge_hw_dma_bd_set_offset(cur_p, new_skb);
      ^~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net//ethernet/ni/nixge.c:131:37: warning: cast from pointer to 
integer of different size [-Wpointer-to-int-cast]
      (bd)->field##_hi = upper_32_bits(((u64)addr)); \
                                        ^
   include/linux/kernel.h:228:35: note: in definition of macro 'upper_32_bits'
    #define upper_32_bits(n) ((u32)(((n) >> 16) >> 16))
                                      ^
>> drivers/net//ethernet/ni/nixge.c:145:2: note: in expansion of macro 
>> 'nixge_hw_dma_bd_set_addr'
     nixge_hw_dma_bd_set_addr((bd), sw_id_offset, (addr))
     ^~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net//ethernet/ni/nixge.c:646:3: note: in expansion of macro 
'nixge_hw_dma_bd_set_offset'
      nixge_hw_dma_bd_set_offset(cur_p, new_skb);
      ^~~~~~~~~~~~~~~~~~~~~~~~~~

vim +/nixge_hw_dma_bd_set_addr +145 drivers/net//ethernet/ni/nixge.c

   > 7  #include <linux/etherdevice.h>
     8  #include <linux/module.h>
     9  #include <linux/netdevice.h>
    10  #include <linux/of_address.h>
    11  #include <linux/of_mdio.h>
    12  #include <linux/of_net.h>
    13  #include <linux/of_platform.h>
    14  #include <linux/of_irq.h>
    15  #include <linux/skbuff.h>
    16  #include <linux/phy.h>
    17  #include <linux/mii.h>
    18  #include <linux/nvmem-consumer.h>
    19  #include <linux/ethtool.h>
    20  #include <linux/iopoll.h>
    21  
    22  #define TX_BD_NUM               64
    23  #define RX_BD_NUM               128
    24  
    25  /* Axi DMA Register definitions */
    26  #define XAXIDMA_TX_CR_OFFSET    0x00 /* Channel control */
    27  #define XAXIDMA_TX_SR_OFFSET    0x04 /* Status */
    28  #define XAXIDMA_TX_CDESC_OFFSET 0x08 /* Current descriptor pointer */
    29  #define XAXIDMA_TX_TDESC_OFFSET 0x10 /* Tail descriptor pointer */
    30  
    31  #define XAXIDMA_RX_CR_OFFSET    0x30 /* Channel control */
    32  #define XAXIDMA_RX_SR_OFFSET    0x34 /* Status */
    33  #define XAXIDMA_RX_CDESC_OFFSET 0x38 /* Current descriptor pointer */
    34  #define XAXIDMA_RX_TDESC_OFFSET 0x40 /* Tail descriptor pointer */
    35  
    36  #define XAXIDMA_CR_RUNSTOP_MASK 0x1 /* Start/stop DMA channel */
    37  #define XAXIDMA_CR_RESET_MASK   0x4 /* Reset DMA engine */
    38  
    39  #define XAXIDMA_BD_CTRL_LENGTH_MASK     0x007FFFFF /* Requested len */
    40  #define XAXIDMA_BD_CTRL_TXSOF_MASK      0x08000000 /* First tx packet */
    41  #define XAXIDMA_BD_CTRL_TXEOF_MASK      0x04000000 /* Last tx packet */
    42  #define XAXIDMA_BD_CTRL_ALL_MASK        0x0C000000 /* All control bits 
*/
    43  
    44  #define XAXIDMA_DELAY_MASK              0xFF000000 /* Delay timeout 
counter */
    45  #define XAXIDMA_COALESCE_MASK           0x00FF0000 /* Coalesce counter 
*/
    46  
    47  #define XAXIDMA_DELAY_SHIFT             24
    48  #define XAXIDMA_COALESCE_SHIFT          16
    49  
    50  #define XAXIDMA_IRQ_IOC_MASK            0x00001000 /* Completion intr */
    51  #define XAXIDMA_IRQ_DELAY_MASK          0x00002000 /* Delay interrupt */
    52  #define XAXIDMA_IRQ_ERROR_MASK          0x00004000 /* Error interrupt */
    53  #define XAXIDMA_IRQ_ALL_MASK            0x00007000 /* All interrupts */
    54  
    55  /* Default TX/RX Threshold and waitbound values for SGDMA mode */
    56  #define XAXIDMA_DFT_TX_THRESHOLD        24
    57  #define XAXIDMA_DFT_TX_WAITBOUND        254
    58  #define XAXIDMA_DFT_RX_THRESHOLD        24
    59  #define XAXIDMA_DFT_RX_WAITBOUND        254
    60  
    61  #define XAXIDMA_BD_STS_ACTUAL_LEN_MASK  0x007FFFFF /* Actual len */
    62  #define XAXIDMA_BD_STS_COMPLETE_MASK    0x80000000 /* Completed */
    63  #define XAXIDMA_BD_STS_DEC_ERR_MASK     0x40000000 /* Decode error */
    64  #define XAXIDMA_BD_STS_SLV_ERR_MASK     0x20000000 /* Slave error */
    65  #define XAXIDMA_BD_STS_INT_ERR_MASK     0x10000000 /* Internal err */
    66  #define XAXIDMA_BD_STS_ALL_ERR_MASK     0x70000000 /* All errors */
    67  #define XAXIDMA_BD_STS_RXSOF_MASK       0x08000000 /* First rx pkt */
    68  #define XAXIDMA_BD_STS_RXEOF_MASK       0x04000000 /* Last rx pkt */
    69  #define XAXIDMA_BD_STS_ALL_MASK         0xFC000000 /* All status bits */
    70  
    71  #define NIXGE_REG_CTRL_OFFSET   0x4000
    72  #define NIXGE_REG_INFO          0x00
    73  #define NIXGE_REG_MAC_CTL       0x04
    74  #define NIXGE_REG_PHY_CTL       0x08
    75  #define NIXGE_REG_LED_CTL       0x0c
    76  #define NIXGE_REG_MDIO_DATA     0x10
    77  #define NIXGE_REG_MDIO_ADDR     0x14
    78  #define NIXGE_REG_MDIO_OP       0x18
    79  #define NIXGE_REG_MDIO_CTRL     0x1c
    80  
    81  #define NIXGE_ID_LED_CTL_EN     BIT(0)
    82  #define NIXGE_ID_LED_CTL_VAL    BIT(1)
    83  
    84  #define NIXGE_MDIO_CLAUSE45     BIT(12)
    85  #define NIXGE_MDIO_CLAUSE22     0
    86  #define NIXGE_MDIO_OP(n)     (((n) & 0x3) << 10)
    87  #define NIXGE_MDIO_OP_ADDRESS   0
    88  #define NIXGE_MDIO_C45_WRITE    BIT(0)
    89  #define NIXGE_MDIO_C45_READ     (BIT(1) | BIT(0))
    90  #define NIXGE_MDIO_C22_WRITE    BIT(0)
    91  #define NIXGE_MDIO_C22_READ     BIT(1)
    92  #define NIXGE_MDIO_ADDR(n)   (((n) & 0x1f) << 5)
    93  #define NIXGE_MDIO_MMD(n)    (((n) & 0x1f) << 0)
    94  
    95  #define NIXGE_REG_MAC_LSB       0x1000
    96  #define NIXGE_REG_MAC_MSB       0x1004
    97  
    98  /* Packet size info */
    99  #define NIXGE_HDR_SIZE          14 /* Size of Ethernet header */
   100  #define NIXGE_TRL_SIZE          4 /* Size of Ethernet trailer (FCS) */
   101  #define NIXGE_MTU               1500 /* Max MTU of an Ethernet frame */
   102  #define NIXGE_JUMBO_MTU         9000 /* Max MTU of a jumbo Eth. frame */
   103  
   104  #define NIXGE_MAX_FRAME_SIZE     (NIXGE_MTU + NIXGE_HDR_SIZE + 
NIXGE_TRL_SIZE)
   105  #define NIXGE_MAX_JUMBO_FRAME_SIZE \
   106          (NIXGE_JUMBO_MTU + NIXGE_HDR_SIZE + NIXGE_TRL_SIZE)
   107  
   108  struct nixge_hw_dma_bd {
   109          u32 next_lo;
   110          u32 next_hi;
   111          u32 phys_lo;
   112          u32 phys_hi;
   113          u32 reserved3;
   114          u32 reserved4;
   115          u32 cntrl;
   116          u32 status;
   117          u32 app0;
   118          u32 app1;
   119          u32 app2;
   120          u32 app3;
   121          u32 app4;
   122          u32 sw_id_offset_lo;
   123          u32 sw_id_offset_hi;
   124          u32 reserved6;
   125  };
   126  
   127  #ifdef CONFIG_PHYS_ADDR_T_64BIT
   128  #define nixge_hw_dma_bd_set_addr(bd, field, addr) \
   129          do { \
 > 130                  (bd)->field##_lo = lower_32_bits(((u64)addr)); \
   131                  (bd)->field##_hi = upper_32_bits(((u64)addr)); \
   132          } while (0)
   133  #else
   134  #define nixge_hw_dma_bd_set_addr(bd, field, addr) \
   135          ((bd)->field##_lo = lower_32_bits((addr)))
   136  #endif
   137  
   138  #define nixge_hw_dma_bd_set_phys(bd, addr) \
   139          nixge_hw_dma_bd_set_addr((bd), phys, (addr))
   140  
   141  #define nixge_hw_dma_bd_set_next(bd, addr) \
   142          nixge_hw_dma_bd_set_addr((bd), next, (addr))
   143  
   144  #define nixge_hw_dma_bd_set_offset(bd, addr) \
 > 145          nixge_hw_dma_bd_set_addr((bd), sw_id_offset, (addr))
   146  
   147  #ifdef CONFIG_PHYS_ADDR_T_64BIT
   148  #define nixge_hw_dma_bd_get_addr(bd, field) \
   149          (dma_addr_t)((((u64)(bd)->field##_hi) << 32) | 
((bd)->field##_lo))
   150  #else
   151  #define nixge_hw_dma_bd_get_addr(bd, field) \
   152          (dma_addr_t)((bd)->field##_lo)
   153  #endif
   154  
   155  struct nixge_tx_skb {
   156          struct sk_buff *skb;
   157          dma_addr_t mapping;
   158          size_t size;
   159          bool mapped_as_page;
   160  };
   161  
   162  struct nixge_priv {
   163          struct net_device *ndev;
   164          struct napi_struct napi;
   165          struct device *dev;
   166  
   167          /* Connection to PHY device */
   168          struct device_node *phy_node;
   169          phy_interface_t         phy_mode;
   170  
   171          int link;
   172          unsigned int speed;
   173          unsigned int duplex;
   174  
   175          /* MDIO bus data */
   176          struct mii_bus *mii_bus;        /* MII bus reference */
   177  
   178          /* IO registers, dma functions and IRQs */
   179          void __iomem *ctrl_regs;
   180          void __iomem *dma_regs;
   181  
   182          struct tasklet_struct dma_err_tasklet;
   183  
   184          int tx_irq;
   185          int rx_irq;
   186  
   187          /* Buffer descriptors */
   188          struct nixge_hw_dma_bd *tx_bd_v;
   189          struct nixge_tx_skb *tx_skb;
   190          dma_addr_t tx_bd_p;
   191  
   192          struct nixge_hw_dma_bd *rx_bd_v;
   193          dma_addr_t rx_bd_p;
   194          u32 tx_bd_ci;
   195          u32 tx_bd_tail;
   196          u32 rx_bd_ci;
   197  
   198          u32 coalesce_count_rx;
   199          u32 coalesce_count_tx;
   200  };
   201  
   202  static void nixge_dma_write_reg(struct nixge_priv *priv, off_t offset, 
u32 val)
   203  {
   204          writel(val, priv->dma_regs + offset);
   205  }
   206  
   207  static void nixge_dma_write_desc_reg(struct nixge_priv *priv, off_t 
offset,
   208                                       dma_addr_t addr)
   209  {
   210          writel(lower_32_bits(addr), priv->dma_regs + offset);
   211  #ifdef CONFIG_PHYS_ADDR_T_64BIT
   212          writel(upper_32_bits(addr), priv->dma_regs + offset + 4);
   213  #endif
   214  }
   215  
   216  static u32 nixge_dma_read_reg(const struct nixge_priv *priv, off_t 
offset)
   217  {
   218          return readl(priv->dma_regs + offset);
   219  }
   220  
   221  static void nixge_ctrl_write_reg(struct nixge_priv *priv, off_t offset, 
u32 val)
   222  {
   223          writel(val, priv->ctrl_regs + offset);
   224  }
   225  
   226  static u32 nixge_ctrl_read_reg(struct nixge_priv *priv, off_t offset)
   227  {
   228          return readl(priv->ctrl_regs + offset);
   229  }
   230  
   231  #define nixge_ctrl_poll_timeout(priv, addr, val, cond, sleep_us, 
timeout_us) \
   232          readl_poll_timeout((priv)->ctrl_regs + (addr), (val), (cond), \
   233                             (sleep_us), (timeout_us))
   234  
   235  #define nixge_dma_poll_timeout(priv, addr, val, cond, sleep_us, 
timeout_us) \
   236          readl_poll_timeout((priv)->dma_regs + (addr), (val), (cond), \
   237                             (sleep_us), (timeout_us))
   238  
   239  static void nixge_hw_dma_bd_release(struct net_device *ndev)
   240  {
   241          struct nixge_priv *priv = netdev_priv(ndev);
   242          dma_addr_t phys_addr;
   243          struct sk_buff *skb;
   244          int i;
   245  
   246          for (i = 0; i < RX_BD_NUM; i++) {
   247                  phys_addr = nixge_hw_dma_bd_get_addr(&priv->rx_bd_v[i],
   248                                                       phys);
   249  
   250                  dma_unmap_single(ndev->dev.parent, phys_addr,
   251                                   NIXGE_MAX_JUMBO_FRAME_SIZE,
   252                                   DMA_FROM_DEVICE);
   253  
   254                  skb = (struct sk_buff *)
   255                          nixge_hw_dma_bd_get_addr(&priv->rx_bd_v[i],
   256                                                   sw_id_offset);
   257                  dev_kfree_skb(skb);
   258          }
   259  
   260          if (priv->rx_bd_v)
   261                  dma_free_coherent(ndev->dev.parent,
   262                                    sizeof(*priv->rx_bd_v) * RX_BD_NUM,
   263                                    priv->rx_bd_v,
   264                                    priv->rx_bd_p);
   265  
   266          if (priv->tx_skb)
   267                  devm_kfree(ndev->dev.parent, priv->tx_skb);
   268  
   269          if (priv->tx_bd_v)
   270                  dma_free_coherent(ndev->dev.parent,
   271                                    sizeof(*priv->tx_bd_v) * TX_BD_NUM,
   272                                    priv->tx_bd_v,
   273                                    priv->tx_bd_p);
   274  }
   275  
   276  static int nixge_hw_dma_bd_init(struct net_device *ndev)
   277  {
   278          struct nixge_priv *priv = netdev_priv(ndev);
   279          struct sk_buff *skb;
   280          dma_addr_t phys;
   281          u32 cr;
   282          int i;
   283  
   284          /* Reset the indexes which are used for accessing the BDs */
   285          priv->tx_bd_ci = 0;
   286          priv->tx_bd_tail = 0;
   287          priv->rx_bd_ci = 0;
   288  
   289          /* Allocate the Tx and Rx buffer descriptors. */
   290          priv->tx_bd_v = dma_zalloc_coherent(ndev->dev.parent,
   291                                              sizeof(*priv->tx_bd_v) * 
TX_BD_NUM,
   292                                              &priv->tx_bd_p, GFP_KERNEL);
   293          if (!priv->tx_bd_v)
   294                  goto out;
   295  
   296          priv->tx_skb = devm_kcalloc(ndev->dev.parent,
   297                                      TX_BD_NUM, sizeof(*priv->tx_skb),
   298                                      GFP_KERNEL);
   299          if (!priv->tx_skb)
   300                  goto out;
   301  
   302          priv->rx_bd_v = dma_zalloc_coherent(ndev->dev.parent,
   303                                              sizeof(*priv->rx_bd_v) * 
RX_BD_NUM,
   304                                              &priv->rx_bd_p, GFP_KERNEL);
   305          if (!priv->rx_bd_v)
   306                  goto out;
   307  
   308          for (i = 0; i < TX_BD_NUM; i++) {
   309                  nixge_hw_dma_bd_set_next(&priv->tx_bd_v[i],
   310                                           priv->tx_bd_p +
   311                                           sizeof(*priv->tx_bd_v) *
   312                                           ((i + 1) % TX_BD_NUM));
   313          }
   314  
   315          for (i = 0; i < RX_BD_NUM; i++) {
   316                  nixge_hw_dma_bd_set_next(&priv->rx_bd_v[i],
   317                                           priv->rx_bd_p
   318                                           + sizeof(*priv->rx_bd_v) *
   319                                           ((i + 1) % RX_BD_NUM));
   320  
   321                  skb = netdev_alloc_skb_ip_align(ndev,
   322                                                  
NIXGE_MAX_JUMBO_FRAME_SIZE);
   323                  if (!skb)
   324                          goto out;
   325  
 > 326                  nixge_hw_dma_bd_set_offset(&priv->rx_bd_v[i], skb);
   327                  phys = dma_map_single(ndev->dev.parent, skb->data,
   328                                        NIXGE_MAX_JUMBO_FRAME_SIZE,
   329                                        DMA_FROM_DEVICE);
   330  
   331                  nixge_hw_dma_bd_set_phys(&priv->rx_bd_v[i], phys);
   332  
   333                  priv->rx_bd_v[i].cntrl = NIXGE_MAX_JUMBO_FRAME_SIZE;
   334          }
   335  
   336          /* Start updating the Rx channel control register */
   337          cr = nixge_dma_read_reg(priv, XAXIDMA_RX_CR_OFFSET);
   338          /* Update the interrupt coalesce count */
   339          cr = ((cr & ~XAXIDMA_COALESCE_MASK) |
   340                ((priv->coalesce_count_rx) << XAXIDMA_COALESCE_SHIFT));
   341          /* Update the delay timer count */
   342          cr = ((cr & ~XAXIDMA_DELAY_MASK) |
   343                (XAXIDMA_DFT_RX_WAITBOUND << XAXIDMA_DELAY_SHIFT));
   344          /* Enable coalesce, delay timer and error interrupts */
   345          cr |= XAXIDMA_IRQ_ALL_MASK;
   346          /* Write to the Rx channel control register */
   347          nixge_dma_write_reg(priv, XAXIDMA_RX_CR_OFFSET, cr);
   348  
   349          /* Start updating the Tx channel control register */
   350          cr = nixge_dma_read_reg(priv, XAXIDMA_TX_CR_OFFSET);
   351          /* Update the interrupt coalesce count */
   352          cr = (((cr & ~XAXIDMA_COALESCE_MASK)) |
   353                ((priv->coalesce_count_tx) << XAXIDMA_COALESCE_SHIFT));
   354          /* Update the delay timer count */
   355          cr = (((cr & ~XAXIDMA_DELAY_MASK)) |
   356                (XAXIDMA_DFT_TX_WAITBOUND << XAXIDMA_DELAY_SHIFT));
   357          /* Enable coalesce, delay timer and error interrupts */
   358          cr |= XAXIDMA_IRQ_ALL_MASK;
   359          /* Write to the Tx channel control register */
   360          nixge_dma_write_reg(priv, XAXIDMA_TX_CR_OFFSET, cr);
   361  
   362          /* Populate the tail pointer and bring the Rx Axi DMA engine 
out of
   363           * halted state. This will make the Rx side ready for reception.
   364           */
   365          nixge_dma_write_desc_reg(priv, XAXIDMA_RX_CDESC_OFFSET, 
priv->rx_bd_p);
   366          cr = nixge_dma_read_reg(priv, XAXIDMA_RX_CR_OFFSET);
   367          nixge_dma_write_reg(priv, XAXIDMA_RX_CR_OFFSET,
   368                              cr | XAXIDMA_CR_RUNSTOP_MASK);
   369          nixge_dma_write_desc_reg(priv, XAXIDMA_RX_TDESC_OFFSET, 
priv->rx_bd_p +
   370                              (sizeof(*priv->rx_bd_v) * (RX_BD_NUM - 1)));
   371  
   372          /* Write to the RS (Run-stop) bit in the Tx channel control 
register.
   373           * Tx channel is now ready to run. But only after we write to 
the
   374           * tail pointer register that the Tx channel will start 
transmitting.
   375           */
   376          nixge_dma_write_desc_reg(priv, XAXIDMA_TX_CDESC_OFFSET, 
priv->tx_bd_p);
   377          cr = nixge_dma_read_reg(priv, XAXIDMA_TX_CR_OFFSET);
   378          nixge_dma_write_reg(priv, XAXIDMA_TX_CR_OFFSET,
   379                              cr | XAXIDMA_CR_RUNSTOP_MASK);
   380  
   381          return 0;
   382  out:
   383          nixge_hw_dma_bd_release(ndev);
   384          return -ENOMEM;
   385  }
   386  

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Attachment: .config.gz
Description: application/gzip

Reply via email to