summaryrefslogtreecommitdiff
path: root/drivers/net/ethernet
diff options
context:
space:
mode:
authorIoana Radulescu <ruxandra.radulescu@freescale.com>2013-08-28 12:26:36 (GMT)
committerRivera Jose-B46482 <German.Rivera@freescale.com>2013-09-20 18:56:49 (GMT)
commit4d8c29cbaa63e58e9cf8448d5b7d89c426ff0dc0 (patch)
tree871148279e4d5d87893f3fcaaef1d566fd1a3bac /drivers/net/ethernet
parent7b7f65db63ecab22825ee1c744dd23b96cbff985 (diff)
downloadlinux-fsl-qoriq-4d8c29cbaa63e58e9cf8448d5b7d89c426ff0dc0.tar.xz
dpaa_eth: Add Kconfig debug option
Add a Kconfig option that enables debug support in the driver. For a start, move (most of) the BUG_ON()'s in the driver's fastpath under this debug option. New debug information (such as trace events, frame content dumps, etc) can be added later under the same umbrella. Signed-off-by: Ioana Radulescu <ruxandra.radulescu@freescale.com> Change-Id: I8023a75751cdad9e80d96957b9071f707a03e2b2 Reviewed-on: http://git.am.freescale.net:8181/4839 Tested-by: Review Code-CDREVIEW <CDREVIEW@freescale.com> Reviewed-by: Cristian-Constantin Sovaiala <Cristian.Sovaiala@freescale.com> Reviewed-by: Bucur Madalin-Cristian-B32716 <madalin.bucur@freescale.com> Reviewed-by: Rivera Jose-B46482 <German.Rivera@freescale.com>
Diffstat (limited to 'drivers/net/ethernet')
-rw-r--r--drivers/net/ethernet/freescale/dpa/Kconfig7
-rw-r--r--drivers/net/ethernet/freescale/dpa/dpaa_eth.h6
-rw-r--r--drivers/net/ethernet/freescale/dpa/dpaa_eth_sg.c33
3 files changed, 30 insertions, 16 deletions
diff --git a/drivers/net/ethernet/freescale/dpa/Kconfig b/drivers/net/ethernet/freescale/dpa/Kconfig
index c416d5d..92506ee 100644
--- a/drivers/net/ethernet/freescale/dpa/Kconfig
+++ b/drivers/net/ethernet/freescale/dpa/Kconfig
@@ -127,3 +127,10 @@ config FSL_DPAA_ETH_DEBUGFS
default y
---help---
This option compiles debugfs code for the DPAA Ethernet driver.
+
+config FSL_DPAA_ETH_DEBUG
+ bool "DPAA Ethernet Debug Support"
+ depends on FSL_DPAA_ETH
+ default n
+ ---help---
+ This option compiles debug code for the DPAA Ethernet driver.
diff --git a/drivers/net/ethernet/freescale/dpa/dpaa_eth.h b/drivers/net/ethernet/freescale/dpa/dpaa_eth.h
index f33ff0a..cda8f2c 100644
--- a/drivers/net/ethernet/freescale/dpa/dpaa_eth.h
+++ b/drivers/net/ethernet/freescale/dpa/dpaa_eth.h
@@ -83,6 +83,12 @@ struct dpa_buffer_layout_s {
uint16_t data_align;
};
+#ifdef CONFIG_FSL_DPAA_ETH_DEBUG
+#define DPA_BUG_ON(cond) BUG_ON(cond)
+#else
+#define DPA_BUG_ON(cond)
+#endif
+
#define DPA_TX_PRIV_DATA_SIZE 16
#define DPA_PARSE_RESULTS_SIZE sizeof(fm_prs_result_t)
#define DPA_TIME_STAMP_SIZE 8
diff --git a/drivers/net/ethernet/freescale/dpa/dpaa_eth_sg.c b/drivers/net/ethernet/freescale/dpa/dpaa_eth_sg.c
index 176a433..04a2de3 100644
--- a/drivers/net/ethernet/freescale/dpa/dpaa_eth_sg.c
+++ b/drivers/net/ethernet/freescale/dpa/dpaa_eth_sg.c
@@ -232,7 +232,7 @@ struct sk_buff *_dpa_cleanup_tx_fd(const struct dpa_priv_s *priv,
/* remaining pages were mapped with dma_map_page() */
for (i = 1; i < nr_frags; i++) {
- BUG_ON(sgt[i].extension);
+ DPA_BUG_ON(sgt[i].extension);
dma_unmap_page(dpa_bp->dev, sgt[i].addr,
sgt[i].length, dma_dir);
@@ -335,7 +335,7 @@ static struct sk_buff *__hot contig_fd_to_skb(const struct dpa_priv_s *priv,
struct sk_buff *skb = NULL;
vaddr = phys_to_virt(addr);
- BUG_ON(!IS_ALIGNED((unsigned long)vaddr, SMP_CACHE_BYTES));
+ DPA_BUG_ON(!IS_ALIGNED((unsigned long)vaddr, SMP_CACHE_BYTES));
/* do we need the timestamp for bad frames? */
#ifdef CONFIG_FSL_DPAA_1588
@@ -356,7 +356,7 @@ static struct sk_buff *__hot contig_fd_to_skb(const struct dpa_priv_s *priv,
if (unlikely(!skb))
return NULL;
- BUG_ON(fd_off != priv->rx_headroom);
+ DPA_BUG_ON(fd_off != priv->rx_headroom);
skb_reserve(skb, fd_off);
skb_put(skb, dpa_fd_length(fd));
@@ -397,7 +397,7 @@ static struct sk_buff *__hot sg_fd_to_skb(const struct dpa_priv_s *priv,
int *count_ptr;
vaddr = phys_to_virt(addr);
- BUG_ON(!IS_ALIGNED((unsigned long)vaddr, SMP_CACHE_BYTES));
+ DPA_BUG_ON(!IS_ALIGNED((unsigned long)vaddr, SMP_CACHE_BYTES));
#ifdef CONFIG_FSL_DPAA_1588
if (priv->tsu && priv->tsu->valid && priv->tsu->hwts_rx_en_ioctl)
dpa_ptp_store_rxstamp(priv, skb, vaddr);
@@ -412,15 +412,16 @@ static struct sk_buff *__hot sg_fd_to_skb(const struct dpa_priv_s *priv,
sgt = vaddr + fd_off;
for (i = 0; i < DPA_SGT_MAX_ENTRIES; i++) {
/* Extension bit is not supported */
- BUG_ON(sgt[i].extension);
+ DPA_BUG_ON(sgt[i].extension);
dpa_bp = dpa_bpid2pool(sgt[i].bpid);
- BUG_ON(!dpa_bp);
+ DPA_BUG_ON(!dpa_bp);
count_ptr = __this_cpu_ptr(dpa_bp->percpu_count);
sg_addr = qm_sg_addr(&sgt[i]);
sg_vaddr = phys_to_virt(sg_addr);
- BUG_ON(!IS_ALIGNED((unsigned long)sg_vaddr, SMP_CACHE_BYTES));
+ DPA_BUG_ON(!IS_ALIGNED((unsigned long)sg_vaddr,
+ SMP_CACHE_BYTES));
if (i == 0) {
/* Tentatively access the first buffer, but don't unmap
@@ -456,7 +457,7 @@ static struct sk_buff *__hot sg_fd_to_skb(const struct dpa_priv_s *priv,
/* Make sure forwarded skbs will have enough space
* on Tx, if extra headers are added.
*/
- BUG_ON(fd_off != priv->rx_headroom);
+ DPA_BUG_ON(fd_off != priv->rx_headroom);
skb_reserve(skb, fd_off);
skb_put(skb, sgt[i].length);
} else {
@@ -497,7 +498,7 @@ static struct sk_buff *__hot sg_fd_to_skb(const struct dpa_priv_s *priv,
/* recycle the SGT fragment */
dpa_bp = dpa_bpid2pool(fd->bpid);
- BUG_ON(!dpa_bp);
+ DPA_BUG_ON(!dpa_bp);
dpa_bp_recycle_frag(dpa_bp, (unsigned long)vaddr);
return skb;
}
@@ -527,7 +528,7 @@ void __hot _dpa_rx(struct net_device *net_dev,
}
dpa_bp = dpa_bpid2pool(fd->bpid);
- BUG_ON(!dpa_bp);
+ DPA_BUG_ON(!dpa_bp);
count_ptr = __this_cpu_ptr(dpa_bp->percpu_count);
/* Prepare to read from the buffer, but don't unmap it until
* we know the skb allocation succeeded. At this point we already
@@ -539,13 +540,12 @@ void __hot _dpa_rx(struct net_device *net_dev,
/* prefetch the first 64 bytes of the frame or the SGT start */
prefetch(phys_to_virt(addr) + dpa_fd_offset(fd));
+ /* The only FD types that we may receive are contig and S/G */
+ DPA_BUG_ON((fd->format != qm_fd_contig) && (fd->format != qm_fd_sg));
if (likely(fd->format == qm_fd_contig))
skb = contig_fd_to_skb(priv, fd, &use_gro);
- else if (fd->format == qm_fd_sg)
- skb = sg_fd_to_skb(priv, fd, &use_gro);
else
- /* The only FD types that we may receive are contig and S/G */
- BUG();
+ skb = sg_fd_to_skb(priv, fd, &use_gro);
if (unlikely(!skb))
/* We haven't yet touched the DMA mapping or the pool count;
* dpa_fd_release() will just put the buffer back in the pool
@@ -628,7 +628,7 @@ static int __hot skb_to_contig_fd(struct dpa_priv_s *priv,
*/
fd->cmd |= FM_FD_CMD_FCO;
fd->bpid = dpa_bp->bpid;
- BUG_ON(skb->data - buffer_start > DPA_MAX_FD_OFFSET);
+ DPA_BUG_ON(skb->data - buffer_start > DPA_MAX_FD_OFFSET);
fd->offset = (uint16_t)(skb->data - buffer_start);
dma_dir = DMA_BIDIRECTIONAL;
} else
@@ -737,12 +737,13 @@ static int __hot skb_to_sg_fd(struct dpa_priv_s *priv,
for (i = 1; i <= nr_frags; i++) {
frag = &skb_shinfo(skb)->frags[i - 1];
sgt[i].bpid = dpa_bp->bpid;
+
sgt[i].offset = 0;
sgt[i].length = frag->size;
sgt[i].extension = 0;
sgt[i].final = 0;
- BUG_ON(!skb_frag_page(frag));
+ DPA_BUG_ON(!skb_frag_page(frag));
addr = skb_frag_dma_map(dpa_bp->dev, frag, 0, sgt[i].length,
dma_dir);
if (unlikely(dma_mapping_error(dpa_bp->dev, addr))) {