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

Commit 97d29226 authored by Vivek Golani's avatar Vivek Golani Committed by Manjunatha Madana
Browse files

diag: Enable diag over rpmsg communication for adsp



Enable apps to adsp diag communication over rpmsg. Changes were
made to copy the data from smd buffer into diag buffer in the
callback and queue a work to process the data in work queue and
release the diag buffer in work queue.

Change-Id: Ia7b9b063130249fad8c7a26ad9bfac543e7567b9
Signed-off-by: default avatarVivek Golani <vgolani@codeaurora.org>
parent 236a5483
Loading
Loading
Loading
Loading
+48 −11
Original line number Diff line number Diff line
@@ -56,7 +56,7 @@ struct diag_rpmsg_info rpmsg_data[NUM_PERIPHERALS] = {
		.peripheral = PERIPHERAL_LPASS,
		.type = TYPE_DATA,
		.edge = "lpass",
		.name = "DIAG_DATA",
		.name = "DIAG",
		.buf1 = NULL,
		.buf2 = NULL,
		.hdl = NULL
@@ -122,7 +122,7 @@ struct diag_rpmsg_info rpmsg_cntl[NUM_PERIPHERALS] = {
		.peripheral = PERIPHERAL_LPASS,
		.type = TYPE_CNTL,
		.edge = "lpass",
		.name = "DIAG_CTRL",
		.name = "DIAG_CNTL",
		.buf1 = NULL,
		.buf2 = NULL,
		.hdl = NULL
@@ -758,10 +758,18 @@ void rpmsg_mark_buffers_free(uint8_t peripheral, uint8_t type, int buf_num)
{
	struct diag_rpmsg_info *rpmsg_info;

	if ((peripheral != PERIPHERAL_WDSP) &&
		(peripheral != PERIPHERAL_WCNSS) &&
			(peripheral != PERIPHERAL_MODEM))
	switch (peripheral) {
	case PERIPHERAL_WDSP:
		break;
	case PERIPHERAL_WCNSS:
		break;
	case PERIPHERAL_MODEM:
		break;
	case PERIPHERAL_LPASS:
		break;
	default:
		return;
	}

	rpmsg_info =  get_info_ptr(type, peripheral);
	if (!rpmsg_info)
@@ -867,10 +875,19 @@ int diag_rpmsg_init(void)
	struct diag_rpmsg_info *rpmsg_info = NULL;

	for (peripheral = 0; peripheral < NUM_PERIPHERALS; peripheral++) {
		if ((peripheral != PERIPHERAL_WDSP) &&
			(peripheral != PERIPHERAL_WCNSS) &&
				(peripheral != PERIPHERAL_MODEM))
		switch (peripheral) {
		case PERIPHERAL_WDSP:
			break;
		case PERIPHERAL_WCNSS:
			break;
		case PERIPHERAL_MODEM:
			break;
		case PERIPHERAL_LPASS:
			break;
		default:
			continue;
		}

		rpmsg_info = &rpmsg_cntl[peripheral];
		__diag_rpmsg_init(rpmsg_info);
		diagfwd_cntl_register(TRANSPORT_RPMSG, rpmsg_info->peripheral,
@@ -925,10 +942,19 @@ void diag_rpmsg_early_exit(void)
	int peripheral = 0;

	for (peripheral = 0; peripheral < NUM_PERIPHERALS; peripheral++) {
		if ((peripheral != PERIPHERAL_WDSP) &&
			(peripheral != PERIPHERAL_WCNSS) &&
				(peripheral != PERIPHERAL_MODEM))
		switch (peripheral) {
		case PERIPHERAL_WDSP:
			break;
		case PERIPHERAL_WCNSS:
			break;
		case PERIPHERAL_MODEM:
			break;
		case PERIPHERAL_LPASS:
			break;
		default:
			continue;
		}

		mutex_lock(&driver->rpmsginfo_mutex[peripheral]);
		__diag_rpmsg_exit(&rpmsg_cntl[peripheral]);
		mutex_unlock(&driver->rpmsginfo_mutex[peripheral]);
@@ -986,6 +1012,13 @@ static struct diag_rpmsg_info *diag_get_rpmsg_ptr(char *name, int pid)
			return &rpmsg_dci[PERIPHERAL_MODEM];
		else
			return NULL;
	} else if (pid == PERIPHERAL_LPASS) {
		if (!strcmp(name, "DIAG"))
			return &rpmsg_data[PERIPHERAL_LPASS];
		else if (!strcmp(name, "DIAG_CNTL"))
			return &rpmsg_cntl[PERIPHERAL_LPASS];
		else
			return NULL;
	}
	return NULL;
}
@@ -1004,6 +1037,8 @@ static int diag_rpmsg_probe(struct rpmsg_device *rpdev)
		peripheral = PERIPHERAL_WCNSS;
	else if (!strcmp(rpdev->dev.parent->of_node->name, "modem"))
		peripheral = PERIPHERAL_MODEM;
	else if (!strcmp(rpdev->dev.parent->of_node->name, "adsp"))
		peripheral = PERIPHERAL_LPASS;

	rpmsg_info = diag_get_rpmsg_ptr(rpdev->id.name, peripheral);
	if (rpmsg_info) {
@@ -1032,6 +1067,8 @@ static void diag_rpmsg_remove(struct rpmsg_device *rpdev)
		peripheral = PERIPHERAL_WCNSS;
	else if (!strcmp(rpdev->dev.parent->of_node->name, "modem"))
		peripheral = PERIPHERAL_MODEM;
	else if (!strcmp(rpdev->dev.parent->of_node->name, "adsp"))
		peripheral = PERIPHERAL_LPASS;

	rpmsg_info = diag_get_rpmsg_ptr(rpdev->id.name, peripheral);
	if (rpmsg_info) {