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

Commit e3771b62 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "ASoC: msm: qdsp6v2: Add support to improve debug logging"

parents 872e2fb4 f774ee40
Loading
Loading
Loading
Loading
+90 −48
Original line number Diff line number Diff line
@@ -82,6 +82,8 @@ static int q6lsm_callback(struct apr_client_data *data, void *priv)
	uint32_t *payload;

	if (!client || !data) {
		pr_err("%s: client %p data %p\n",
			__func__, client, data);
		WARN_ON(1);
		return -EINVAL;
	}
@@ -95,7 +97,7 @@ static int q6lsm_callback(struct apr_client_data *data, void *priv)

	payload = data->payload;
	pr_debug("%s: Session %d opcode 0x%x token 0x%x payload size %d\n"
			 "payload [0] = %x\n", __func__, client->session,
			 "payload [0] = 0x%x\n", __func__, client->session,
		data->opcode, data->token, data->payload_size, payload[0]);

	if (data->opcode == APR_BASIC_RSP_RESULT) {
@@ -172,7 +174,7 @@ static void *q6lsm_mmap_apr_reg(void)
		    apr_register("ADSP", "LSM", q6lsm_mmapcallback,
				 0x0FFFFFFFF, &lsm_common);
		if (!lsm_common.apr) {
			pr_debug("%s Unable to register APR LSM common port\n",
			pr_debug("%s: Unable to register APR LSM common port\n",
				 __func__);
			atomic_dec(&lsm_common.apr_users);
		}
@@ -198,7 +200,6 @@ struct lsm_client *q6lsm_client_alloc(lsm_app_cb cb, void *priv)
	struct lsm_client *client;
	int n;

	pr_debug("%s: enter\n", __func__);
	client = kzalloc(sizeof(struct lsm_client), GFP_KERNEL);
	if (!client)
		return NULL;
@@ -210,8 +211,9 @@ struct lsm_client *q6lsm_client_alloc(lsm_app_cb cb, void *priv)
	client->session = n;
	client->cb = cb;
	client->priv = priv;
	pr_debug("%s:Client session %d\n", __func__, client->session);
	if (CHECK_SESSION(client->session)) {
		pr_err("%s: Client session %d\n",
			__func__, client->session);
		kfree(client);
		return NULL;
	}
@@ -225,7 +227,7 @@ struct lsm_client *q6lsm_client_alloc(lsm_app_cb cb, void *priv)
		goto fail;
	}

	pr_debug("%s Registering the common port with APR\n", __func__);
	pr_debug("%s: Registering the common port with APR\n", __func__);
	client->mmap_apr = q6lsm_mmap_apr_reg();
	if (!client->mmap_apr) {
		pr_err("%s: APR registration failed\n", __func__);
@@ -247,7 +249,7 @@ void q6lsm_client_free(struct lsm_client *client)
	if (!client)
		return;
	if (CHECK_SESSION(client->session)) {
		pr_err("%s: Invalid Session %d", __func__, client->session);
		pr_err("%s: Invalid Session %d\n", __func__, client->session);
		return;
	}
	apr_deregister(client->apr);
@@ -336,6 +338,7 @@ int q6lsm_open(struct lsm_client *client, uint16_t app_id)
		open.app_id = client->app_id;
		break;
	default:
		pr_err("%s:  default err 0x%x\n", __func__, client->app_id);
		rc = -EINVAL;
		break;
	}
@@ -366,15 +369,17 @@ static int q6lsm_set_operation_mode(
	op_mode->minor_version = QLSM_PARAM_ID_MINOR_VERSION;
	op_mode->mode = mode;
	op_mode->reserved = 0;
	pr_debug("%s: mode = %x", __func__, mode);
	pr_debug("%s: mode = 0x%x", __func__, mode);
	return 0;
}
static int q6lsm_set_port_connected(
			struct lsm_param_connect_to_port *connect_to_port,
			uint16_t connected_port)
{
	if (connect_to_port == NULL)
	if (connect_to_port == NULL) {
		pr_err("%s: err with connect_to_port\n", __func__);
		return -EINVAL;
	}
	connect_to_port->common.module_id = LSM_MODULE_ID_VOICE_WAKEUP;
	connect_to_port->common.param_id = LSM_PARAM_ID_CONNECT_TO_PORT;
	connect_to_port->common.param_size =
@@ -392,8 +397,10 @@ static int q6lsm_set_kw_sensitivity(
			struct lsm_param_kw_detect_sensitivity *kwds,
			uint16_t kw_sensitivity)
{
	if (kwds == NULL)
	if (kwds == NULL) {
		pr_err("%s: err with kwds\n", __func__);
		return -EINVAL;
	}
	kwds->common.module_id = LSM_MODULE_ID_VOICE_WAKEUP;
	kwds->common.param_id = LSM_PARAM_ID_KEYWORD_DETECT_SENSITIVITY;
	kwds->common.param_size =
@@ -402,7 +409,7 @@ static int q6lsm_set_kw_sensitivity(
	kwds->common.reserved = 0;
	kwds->minor_version = QLSM_PARAM_ID_MINOR_VERSION;
	kwds->keyword_sensitivity = kw_sensitivity;
	pr_debug("%s: KW = %d", __func__, kw_sensitivity);
	pr_debug("%s: KW = %d\n", __func__, kw_sensitivity);
	kwds->reserved = 0;
	return 0;
}
@@ -411,8 +418,10 @@ static int q6lsm_set_user_sensitivity(
			struct lsm_param_user_detect_sensitivity *uds,
			uint16_t user_sensitivity)
{
	if (uds == NULL)
	if (uds == NULL) {
		pr_err("%s: err with uds\n", __func__);
		return -EINVAL;
	}
	uds->common.module_id = LSM_MODULE_ID_VOICE_WAKEUP;
	uds->common.param_id = LSM_PARAM_ID_USER_DETECT_SENSITIVITY;
	uds->common.param_size =
@@ -435,22 +444,24 @@ static int q6lsm_set_confidence_level(
	uint8_t i = 0;
	uint8_t padd_size = 0;

	if (cfl == NULL)
	if (cfl == NULL) {
		pr_err("%s: err with cfl\n", __func__);
		return -EINVAL;
	}
	padd_size = (4 - (num_confidence_level % 4)) - 1;
	cfl->common.module_id = LSM_MODULE_ID_VOICE_WAKEUP;
	cfl->common.param_id = LSM_PARAM_ID_MIN_CONFIDENCE_LEVELS;
	cfl->common.param_size = ((sizeof(uint8_t) + num_confidence_level
				  + padd_size)) * sizeof(uint8_t);
	cfl->num_confidence_levels = num_confidence_level;
	pr_debug("%s: CMD PARAM SIZE = %d", __func__, cfl->common.param_size);
	pr_debug("%s: CMD PARAM SIZE = %d\n", __func__, cfl->common.param_size);
	memset(&cfl->confidence_level[0], 0,
	       sizeof(uint8_t) * MAX_NUM_CONFIDENCE);
	memcpy(&cfl->confidence_level[0], confidence_level,
	       num_confidence_level);
	pr_debug("%s: Num conf_level = %d", __func__, num_confidence_level);
	pr_debug("%s: Num conf_level = %d\n", __func__, num_confidence_level);
	for (i = 0; i < num_confidence_level; i++)
		pr_debug("%s: Confi value = %d", __func__,
		pr_debug("%s: Confi value = %d\n", __func__,
			 cfl->confidence_level[i]);
	return 0;
}
@@ -507,23 +518,31 @@ static int q6lsm_set_params(struct lsm_client *client)
	}

	rc = q6lsm_set_operation_mode(op_mode, client->mode);
	if (rc)
	if (rc) {
		pr_err("%s: err operation rc %d\n", __func__, rc);
		goto exit;
	}
	rc = q6lsm_set_port_connected(connect_to_port,
				      client->connect_to_port);
	if (rc)
	if (rc) {
		pr_err("%s: err port rc %d\n", __func__, rc);
		goto exit;
	}

	if (client->snd_model_ver_inuse == SND_MODEL_IN_USE_V1) {
		rc = q6lsm_set_kw_sensitivity(kwds,
					      client->kw_sensitivity);
		if (rc)
		if (rc) {
			pr_err("%s: err set_kw rc %d\n", __func__, rc);
			goto exit;
		}
		rc = q6lsm_set_user_sensitivity(uds,
						client->user_sensitivity);
		if (rc)
		if (rc) {
			pr_err("%s: err set user rc %d\n", __func__, rc);
			goto exit;
		}
	}

	rc = q6lsm_apr_send_pkt(client, client->apr, param_data, true, NULL);
	if (rc)
@@ -546,17 +565,20 @@ static int q6lsm_set_params(struct lsm_client *client)
		rc = q6lsm_set_confidence_level(cfl,
					client->num_confidence_levels,
					client->confidence_levels);
		if (rc)
		if (rc) {
			pr_err("%s: err confidence rc %d\n", __func__, rc);
			goto exit;
		}
		rc = q6lsm_apr_send_pkt(client, client->apr,
					param_data, true, NULL);
		if (rc)
		if (rc) {
			pr_err("%s: err packet rc %d\n", __func__, rc);
			goto exit;
		}
	}

	pr_debug("%s: leave %d\n", __func__, rc);
exit:
	pr_debug("%s: rc =%x", __func__, rc);
	return rc;
}

@@ -607,12 +629,14 @@ int q6lsm_register_sound_model(struct lsm_client *client,

	rc = q6lsm_set_params(client);
	if (rc < 0) {
		pr_err("%s: Failed to set lsm config params\n", __func__);
		pr_err("%s: Failed to set lsm config params %d\n",
			__func__, rc);
		return rc;
	}
	rc = q6lsm_send_cal(client);
	if (rc < 0) {
		pr_err("%s: Failed to send calibration data\n", __func__);
		pr_err("%s: Failed to send calibration data %d\n",
			__func__, rc);
		return rc;
	}

@@ -625,7 +649,7 @@ int q6lsm_register_sound_model(struct lsm_client *client,
	rmb();
	cmd.mem_map_handle = client->sound_model.mem_map_handle;

	pr_debug("%s: addr %pa, size %d, handle %x\n", __func__,
	pr_debug("%s: addr %pa, size %d, handle 0x%x\n", __func__,
		&client->sound_model.phys, cmd.model_size, cmd.mem_map_handle);
	rc = q6lsm_apr_send_pkt(client, client->apr, &cmd, true, NULL);
	if (rc)
@@ -642,13 +666,19 @@ int q6lsm_deregister_sound_model(struct lsm_client *client)
	int rc;
	struct lsm_cmd_reg_snd_model cmd;

	if (!client || !client->apr) {
	if (!client) {
		pr_err("APR handle NULL\n");
		return -EINVAL;
	}
	pr_debug("%s: session[%d]", __func__, client->session);
	if (CHECK_SESSION(client->session))
	if (!client->apr) {
		pr_err("APR client handle NULL\n");
		return -EINVAL;
	}

	if (CHECK_SESSION(client->session)) {
		pr_err("%s: session[%d]", __func__, client->session);
		return -EINVAL;
	}

	memset(&cmd, 0, sizeof(cmd));
	q6lsm_add_hdr(client, &cmd.hdr, sizeof(cmd.hdr), false);
@@ -696,14 +726,18 @@ static int q6lsm_memory_map_regions(struct lsm_client *client,
	pr_debug("%s: dma_addr_p 0x%pa, dma_buf_sz %d, mmap_p 0x%p, session %d\n",
		__func__, &dma_addr_p, dma_buf_sz, mmap_p,
		client->session);
	if (CHECK_SESSION(client->session))
	if (CHECK_SESSION(client->session)) {
		pr_err("%s: session[%d]", __func__, client->session);
		return -EINVAL;
	}
	cmd_size = sizeof(struct avs_cmd_shared_mem_map_regions) +
		   sizeof(struct avs_shared_map_region_payload);

	mmap_region_cmd = kzalloc(cmd_size, GFP_KERNEL);
	if (!mmap_region_cmd)
	if (!mmap_region_cmd) {
		pr_err("%s: memory allocation failed\n", __func__);
		return -ENOMEM;
	}

	mmap_regions = (struct avs_cmd_shared_mem_map_regions *)mmap_region_cmd;
	q6lsm_add_mmaphdr(client, &mmap_regions->hdr, cmd_size, true,
@@ -738,8 +772,10 @@ static int q6lsm_memory_unmap_regions(struct lsm_client *client,
	struct avs_cmd_shared_mem_unmap_regions unmap;
	int rc = 0;
	int cmd_size = 0;
	if (CHECK_SESSION(client->session))
	if (CHECK_SESSION(client->session)) {
		pr_err("%s: session[%d]", __func__, client->session);
		return -EINVAL;
	}
	cmd_size = sizeof(struct avs_cmd_shared_mem_unmap_regions);
	q6lsm_add_mmaphdr(client, &unmap.hdr, cmd_size,
			  true, (client->session << 8));
@@ -763,8 +799,10 @@ static int q6lsm_send_cal(struct lsm_client *client)
	struct cal_block_data		*cal_block = NULL;

	pr_debug("%s: Session id %d\n", __func__, client->session);
	if (CHECK_SESSION(client->session))
	if (CHECK_SESSION(client->session)) {
		pr_err("%s: session[%d]", __func__, client->session);
		return -EINVAL;
	}

	if (lsm_common.cal_data == NULL)
		goto done;
@@ -812,14 +850,17 @@ int q6lsm_snd_model_buf_free(struct lsm_client *client)
	int rc;

	pr_debug("%s: Session id %d\n", __func__, client->session);
	if (CHECK_SESSION(client->session))
	if (CHECK_SESSION(client->session)) {
		pr_err("%s: session[%d]", __func__, client->session);
		return -EINVAL;
	}

	mutex_lock(&client->cmd_lock);
	rc = q6lsm_memory_unmap_regions(client,
					client->sound_model.mem_map_handle);
	if (rc < 0)
		pr_err("%s CMD Memory_unmap_regions failed\n", __func__);
		pr_err("%s: CMD Memory_unmap_regions failed %d\n",
			__func__, rc);

	if (client->sound_model.data) {
		msm_audio_ion_free(client->sound_model.client,
@@ -927,8 +968,8 @@ static int q6lsm_mmapcallback(struct apr_client_data *data, void *priv)
				command);
		}
	default:
		pr_debug("%s: command 0x%x return code 0x%x\n",
			 __func__, command, retcode);
		pr_debug("%s: command 0x%x return code 0x%x opcode 0x%x\n",
			 __func__, command, retcode, data->opcode);
		break;
	}
	if (client->cb)
@@ -996,6 +1037,7 @@ int q6lsm_snd_model_buf_alloc(struct lsm_client *client, size_t len)
			 (pad_zero + client->sound_model.data +
			 client->sound_model.size));
	} else {
		pr_err("%s: sound model busy\n", __func__);
		rc = -EBUSY;
		goto fail;
	}
@@ -1005,7 +1047,7 @@ int q6lsm_snd_model_buf_alloc(struct lsm_client *client, size_t len)
				      len,
				      &client->sound_model.mem_map_handle);
	if (rc < 0) {
		pr_err("%s:CMD Memory_map_regions failed\n", __func__);
		pr_err("%s: CMD Memory_map_regions failed %d\n", __func__, rc);
		goto exit;
	}

@@ -1032,7 +1074,7 @@ static int q6lsm_cmd(struct lsm_client *client, int opcode, bool wait)
		hdr.opcode = opcode;
		break;
	default:
		pr_err("%s: Invalid opcode %d\n", __func__, opcode);
		pr_err("%s: Invalid opcode 0x%x\n", __func__, opcode);
		return -EINVAL;
	}
	rc = q6lsm_apr_send_pkt(client, client->apr, &hdr, wait, NULL);
@@ -1062,7 +1104,7 @@ static int q6lsm_alloc_cal(int32_t cal_type,
				size_t data_size, void *data)
{
	int				ret = 0;
	pr_debug("%s\n", __func__);
	pr_debug("%s:\n", __func__);

	ret = cal_utils_alloc_cal(data_size, data,
		lsm_common.cal_data, 0, NULL);
@@ -1080,7 +1122,7 @@ static int q6lsm_dealloc_cal(int32_t cal_type,
				size_t data_size, void *data)
{
	int				ret = 0;
	pr_debug("%s\n", __func__);
	pr_debug("%s:\n", __func__);

	ret = cal_utils_dealloc_cal(data_size, data,
		lsm_common.cal_data);
@@ -1098,7 +1140,7 @@ static int q6lsm_set_cal(int32_t cal_type,
			size_t data_size, void *data)
{
	int				ret = 0;
	pr_debug("%s\n", __func__);
	pr_debug("%s:\n", __func__);

	ret = cal_utils_set_cal(data_size, data,
		lsm_common.cal_data, 0, NULL);
@@ -1114,7 +1156,7 @@ done:

static void lsm_delete_cal_data(void)
{
	pr_debug("%s\n", __func__);
	pr_debug("%s:\n", __func__);

	cal_utils_destroy_cal_types(1, &lsm_common.cal_data);
	return;
@@ -1129,7 +1171,7 @@ static int q6lsm_init_cal_data(void)
		q6lsm_set_cal, NULL, NULL} },
		{NULL, NULL, cal_utils_match_ion_map}
	};
	pr_debug("%s\n", __func__);
	pr_debug("%s:\n", __func__);

	ret = cal_utils_create_cal_types(1, &lsm_common.cal_data,
		&cal_type_info);
@@ -1149,7 +1191,7 @@ err:
static int __init q6lsm_init(void)
{
	int i = 0;
	pr_debug("%s\n", __func__);
	pr_debug("%s:\n", __func__);
	spin_lock_init(&lsm_session_lock);
	spin_lock_init(&mmap_lock);
	mutex_init(&lsm_common.apr_lock);