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

Commit 149ed49f authored by Avinash Vaish's avatar Avinash Vaish Committed by Santosh Mardi
Browse files

msm: soc: enable SSR and selective registration of services



During subsystem restart, all the clients registered to the
processor must be serviced. Services are originally registered
on the basis of domain. Taking this into account for proper
cleanup.
Registration of services should also happen on the basis of
destination processor.

Signed-off-by: default avatarAvinash Vaish <avaish@codeaurora.org>
Change-Id: Idc98122f7cf2279d5733e58479699ee5fc55ab5b
parent 05104c94
Loading
Loading
Loading
Loading
+9 −4
Original line number Diff line number Diff line
@@ -327,9 +327,12 @@ struct apr_svc *apr_register(char *dest, char *svc_name, apr_fn svc_fn,

	if (!strcmp(dest, "ADSP"))
		domain_id = APR_DOMAIN_ADSP;
	else if (!strcmp(dest, "MODEM"))
	else if (!strcmp(dest, "MODEM")) {
		/* Register voice services if destination permits */
		if (!apr_register_voice_svc())
			goto done;
		domain_id = APR_DOMAIN_MODEM;
	else {
	} else {
		pr_err("APR: wrong destination\n");
		goto done;
	}
@@ -671,7 +674,7 @@ void apr_reset(void *handle)
}

/* Dispatch the Reset events to Modem and audio clients */
void dispatch_event(unsigned long code, unsigned short proc)
void dispatch_event(unsigned long code, uint16_t proc)
{
	struct apr_client *apr_client;
	struct apr_client_data data;
@@ -681,7 +684,9 @@ void dispatch_event(unsigned long code, unsigned short proc)

	data.opcode = RESET_EVENTS;
	data.reset_event = code;
	data.reset_proc = proc;

	/* Service domain can be different from the processor */
	data.reset_proc = apr_get_reset_domain(proc);

	clnt = APR_CLIENT_AUDIO;
	apr_client = &client[proc][clnt];
+11 −1
Original line number Diff line number Diff line
/*
 * Copyright (c) 2012, 2013 The Linux Foundation. All rights reserved.
 * Copyright (c) 2012-2014 The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
@@ -58,3 +58,13 @@ void subsys_notif_register(struct notifier_block *mod_notif,
	subsys_notif_register_notifier("modem", mod_notif);
	subsys_notif_register_notifier(apr_get_lpass_subsys_name(), lp_notif);
}

uint16_t apr_get_reset_domain(uint16_t proc)
{
	return proc;
}

bool apr_register_voice_svc()
{
	return true;
}
+9 −0
Original line number Diff line number Diff line
@@ -42,3 +42,12 @@ void subsys_notif_register(struct notifier_block *mod_notif,
	subsys_notif_register_notifier("modem", mod_notif);
}

uint16_t apr_get_reset_domain(uint16_t proc)
{
	return APR_DEST_QDSP6;
}

bool apr_register_voice_svc()
{
	return false;
}
+2 −0
Original line number Diff line number Diff line
@@ -174,4 +174,6 @@ enum apr_subsys_state apr_get_q6_state(void);
int apr_set_q6_state(enum apr_subsys_state state);
void apr_set_subsys_state(void);
const char *apr_get_lpass_subsys_name(void);
bool apr_register_voice_svc(void);
uint16_t apr_get_reset_domain(uint16_t proc);
#endif