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

Commit 8a2950cc authored by David S. Miller's avatar David S. Miller
Browse files

[SPARC64]: Handle LDC resets properly in domain-services driver.



Reset the handshake and per-capability state so that when the
link comes back up we'll renegotiate the DS version and then
reregister all of the services.

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 6160f635
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -1013,6 +1013,19 @@ static void ds_up(struct ds_info *dp)
		dp->hs_state = DS_HS_START;
}

static void ds_reset(struct ds_info *dp)
{
	int i;

	dp->hs_state = 0;

	for (i = 0; i < ARRAY_SIZE(ds_states); i++) {
		struct ds_cap_state *cp = &ds_states[i];

		cp->state = CAP_STATE_UNKNOWN;
	}
}

static void ds_event(void *arg, int event)
{
	struct ds_info *dp = arg;
@@ -1028,6 +1041,12 @@ static void ds_event(void *arg, int event)
		return;
	}

	if (event == LDC_EVENT_RESET) {
		ds_reset(dp);
		spin_unlock_irqrestore(&ds_lock, flags);
		return;
	}

	if (event != LDC_EVENT_DATA_READY) {
		printk(KERN_WARNING PFX "Unexpected LDC event %d\n", event);
		spin_unlock_irqrestore(&ds_lock, flags);