Commit 021ba010 authored by Claudiu Manoil's avatar Claudiu Manoil Committed by Scott Wood

soc/qman: test: Don't use dummy platform device for dma mapping

Replace dummy platform device hack with a reference to a portal's
platform device, in order to dma map the test frame for this
small unit test.  The 2 qman symbols need to be exported because
this self test is a kernel module.
Signed-off-by: default avatarClaudiu Manoil <claudiu.manoil@nxp.com>
Signed-off-by: default avatarScott Wood <oss@buserror.net>
parent 0fbeac3b
...@@ -2711,6 +2711,7 @@ const struct qm_portal_config *qman_get_qm_portal_config( ...@@ -2711,6 +2711,7 @@ const struct qm_portal_config *qman_get_qm_portal_config(
{ {
return portal->config; return portal->config;
} }
EXPORT_SYMBOL(qman_get_qm_portal_config);
struct gen_pool *qm_fqalloc; /* FQID allocator */ struct gen_pool *qm_fqalloc; /* FQID allocator */
struct gen_pool *qm_qpalloc; /* pool-channel allocator */ struct gen_pool *qm_qpalloc; /* pool-channel allocator */
......
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
#include "qman_priv.h" #include "qman_priv.h"
struct qman_portal *qman_dma_portal; struct qman_portal *qman_dma_portal;
EXPORT_SYMBOL(qman_dma_portal);
/* Enable portal interupts (as opposed to polling mode) */ /* Enable portal interupts (as opposed to polling mode) */
#define CONFIG_FSL_DPA_PIRQ_SLOW 1 #define CONFIG_FSL_DPA_PIRQ_SLOW 1
......
...@@ -191,6 +191,9 @@ static void *__frame_ptr; ...@@ -191,6 +191,9 @@ static void *__frame_ptr;
static u32 *frame_ptr; static u32 *frame_ptr;
static dma_addr_t frame_dma; static dma_addr_t frame_dma;
/* needed for dma_map*() */
static const struct qm_portal_config *pcfg;
/* the main function waits on this */ /* the main function waits on this */
static DECLARE_WAIT_QUEUE_HEAD(queue); static DECLARE_WAIT_QUEUE_HEAD(queue);
...@@ -210,16 +213,14 @@ static int allocate_frame_data(void) ...@@ -210,16 +213,14 @@ static int allocate_frame_data(void)
{ {
u32 lfsr = HP_FIRST_WORD; u32 lfsr = HP_FIRST_WORD;
int loop; int loop;
struct platform_device *pdev = platform_device_alloc("foobar", -1);
if (!pdev) { if (!qman_dma_portal) {
pr_crit("platform_device_alloc() failed"); pr_crit("portal not available\n");
return -EIO;
}
if (platform_device_add(pdev)) {
pr_crit("platform_device_add() failed");
return -EIO; return -EIO;
} }
pcfg = qman_get_qm_portal_config(qman_dma_portal);
__frame_ptr = kmalloc(4 * HP_NUM_WORDS, GFP_KERNEL); __frame_ptr = kmalloc(4 * HP_NUM_WORDS, GFP_KERNEL);
if (!__frame_ptr) if (!__frame_ptr)
return -ENOMEM; return -ENOMEM;
...@@ -229,15 +230,22 @@ static int allocate_frame_data(void) ...@@ -229,15 +230,22 @@ static int allocate_frame_data(void)
frame_ptr[loop] = lfsr; frame_ptr[loop] = lfsr;
lfsr = do_lfsr(lfsr); lfsr = do_lfsr(lfsr);
} }
frame_dma = dma_map_single(&pdev->dev, frame_ptr, 4 * HP_NUM_WORDS,
frame_dma = dma_map_single(pcfg->dev, frame_ptr, 4 * HP_NUM_WORDS,
DMA_BIDIRECTIONAL); DMA_BIDIRECTIONAL);
platform_device_del(pdev); if (dma_mapping_error(pcfg->dev, frame_dma)) {
platform_device_put(pdev); pr_crit("dma mapping failure\n");
kfree(__frame_ptr);
return -EIO;
}
return 0; return 0;
} }
static void deallocate_frame_data(void) static void deallocate_frame_data(void)
{ {
dma_unmap_single(pcfg->dev, frame_dma, 4 * HP_NUM_WORDS,
DMA_BIDIRECTIONAL);
kfree(__frame_ptr); kfree(__frame_ptr);
} }
...@@ -249,7 +257,8 @@ static inline int process_frame_data(struct hp_handler *handler, ...@@ -249,7 +257,8 @@ static inline int process_frame_data(struct hp_handler *handler,
int loop; int loop;
if (qm_fd_addr_get64(fd) != handler->addr) { if (qm_fd_addr_get64(fd) != handler->addr) {
pr_crit("bad frame address"); pr_crit("bad frame address, [%llX != %llX]\n",
qm_fd_addr_get64(fd), handler->addr);
return -EIO; return -EIO;
} }
for (loop = 0; loop < HP_NUM_WORDS; loop++, p++) { for (loop = 0; loop < HP_NUM_WORDS; loop++, p++) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment