Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -2711,6 +2711,7 @@ const struct qm_portal_config *qman_get_qm_portal_config(
{
	return portal->config;
}
EXPORT_SYMBOL(qman_get_qm_portal_config);

struct gen_pool *qm_fqalloc; /* FQID allocator */
struct gen_pool *qm_qpalloc; /* pool-channel allocator */
+1 −0
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@
#include "qman_priv.h"

struct qman_portal *qman_dma_portal;
EXPORT_SYMBOL(qman_dma_portal);

/* Enable portal interupts (as opposed to polling mode) */
#define CONFIG_FSL_DPA_PIRQ_SLOW  1
+20 −11
Original line number Diff line number Diff line
@@ -191,6 +191,9 @@ static void *__frame_ptr;
static u32 *frame_ptr;
static dma_addr_t frame_dma;

/* needed for dma_map*() */
static const struct qm_portal_config *pcfg;

/* the main function waits on this */
static DECLARE_WAIT_QUEUE_HEAD(queue);

@@ -210,16 +213,14 @@ static int allocate_frame_data(void)
{
	u32 lfsr = HP_FIRST_WORD;
	int loop;
	struct platform_device *pdev = platform_device_alloc("foobar", -1);

	if (!pdev) {
		pr_crit("platform_device_alloc() failed");
		return -EIO;
	}
	if (platform_device_add(pdev)) {
		pr_crit("platform_device_add() failed");
	if (!qman_dma_portal) {
		pr_crit("portal not available\n");
		return -EIO;
	}

	pcfg = qman_get_qm_portal_config(qman_dma_portal);

	__frame_ptr = kmalloc(4 * HP_NUM_WORDS, GFP_KERNEL);
	if (!__frame_ptr)
		return -ENOMEM;
@@ -229,15 +230,22 @@ static int allocate_frame_data(void)
		frame_ptr[loop] = 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);
	platform_device_del(pdev);
	platform_device_put(pdev);
	if (dma_mapping_error(pcfg->dev, frame_dma)) {
		pr_crit("dma mapping failure\n");
		kfree(__frame_ptr);
		return -EIO;
	}

	return 0;
}

static void deallocate_frame_data(void)
{
	dma_unmap_single(pcfg->dev, frame_dma, 4 * HP_NUM_WORDS,
			 DMA_BIDIRECTIONAL);
	kfree(__frame_ptr);
}

@@ -249,7 +257,8 @@ static inline int process_frame_data(struct hp_handler *handler,
	int loop;

	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;
	}
	for (loop = 0; loop < HP_NUM_WORDS; loop++, p++) {