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

Commit d5560238 authored by Ido Yariv's avatar Ido Yariv Committed by Luciano Coelho
Browse files

wlcore: Allow memory access when the FW crashes



When the no_recovery flag is used, the recovery work will not restart
the FW and the state will not be set to 'on'. To enable post-mortem
analysis, allow memory access in the 'restarting' state.

Also, since the FW might not be operational, don't fail the read/write
operations if elp_wakeup fails.

Reported-by: default avatarArkady Miasnikov <a-miasnikov@ti.com>
Signed-off-by: default avatarIdo Yariv <ido@wizery.com>
Signed-off-by: default avatarLuciano Coelho <luca@coelho.fi>
parent 001e39a8
Loading
Loading
Loading
Loading
+12 −8
Original line number Diff line number Diff line
@@ -1064,14 +1064,16 @@ static ssize_t dev_mem_read(struct file *file,

	mutex_lock(&wl->mutex);

	if (unlikely(wl->state != WLCORE_STATE_ON)) {
	if (unlikely(wl->state == WLCORE_STATE_OFF)) {
		ret = -EFAULT;
		goto skip_read;
	}

	ret = wl1271_ps_elp_wakeup(wl);
	if (ret < 0)
		goto skip_read;
	/*
	 * Don't fail if elp_wakeup returns an error, so the device's memory
	 * could be read even if the FW crashed
	 */
	wl1271_ps_elp_wakeup(wl);

	/* store current partition and switch partition */
	memcpy(&old_part, &wl->curr_part, sizeof(old_part));
@@ -1149,14 +1151,16 @@ static ssize_t dev_mem_write(struct file *file, const char __user *user_buf,

	mutex_lock(&wl->mutex);

	if (unlikely(wl->state != WLCORE_STATE_ON)) {
	if (unlikely(wl->state == WLCORE_STATE_OFF)) {
		ret = -EFAULT;
		goto skip_write;
	}

	ret = wl1271_ps_elp_wakeup(wl);
	if (ret < 0)
		goto skip_write;
	/*
	 * Don't fail if elp_wakeup returns an error, so the device's memory
	 * could be read even if the FW crashed
	 */
	wl1271_ps_elp_wakeup(wl);

	/* store current partition and switch partition */
	memcpy(&old_part, &wl->curr_part, sizeof(old_part));