Commit f9951c13 authored by Hante Meuleman's avatar Hante Meuleman Committed by John W. Linville
Browse files

brcmfmac: simplify sdio code download routine.



brcmf_sdio_download_code_file is using a loop to send small blobs
of data. This is unnecessarily complex and was simplified with this
patch.

Reviewed-by: default avatarArend Van Spriel <arend@broadcom.com>
Reviewed-by: default avatarFranky (Zhenhui) Lin <frankyl@broadcom.com>
Reviewed-by: default avatarPieter-Paul Giesberts <pieterpg@broadcom.com>
Reviewed-by: default avatarDaniel (Deognyoun) Kim <dekim@broadcom.com>
Signed-off-by: default avatarHante Meuleman <meuleman@broadcom.com>
Signed-off-by: default avatarArend van Spriel <arend@broadcom.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 79c868e5
Loading
Loading
Loading
Loading
+8 −23
Original line number Diff line number Diff line
@@ -3291,30 +3291,15 @@ static int brcmf_sdio_download_code_file(struct brcmf_sdio *bus,
					 const struct firmware *fw)
{
	int err;
	int offset;
	int address;
	int len;

	brcmf_dbg(TRACE, "Enter\n");

	err = 0;
	offset = 0;
	address = bus->ci->rambase;
	while (offset < fw->size) {
		len = ((offset + MEMBLOCK) < fw->size) ? MEMBLOCK :
		      fw->size - offset;
		err = brcmf_sdiod_ramrw(bus->sdiodev, true, address,
					(u8 *)&fw->data[offset], len);
		if (err) {
	err = brcmf_sdiod_ramrw(bus->sdiodev, true, bus->ci->rambase,
				(u8 *)fw->data, fw->size);
	if (err)
		brcmf_err("error %d on writing %d membytes at 0x%08x\n",
				  err, len, address);
			return err;
		}
		offset += len;
		address += len;
	}
	if (!err)
		if (!brcmf_sdio_verifymemory(bus->sdiodev, bus->ci->rambase,
			  err, (int)fw->size, bus->ci->rambase);
	else if (!brcmf_sdio_verifymemory(bus->sdiodev, bus->ci->rambase,
					  (u8 *)fw->data, fw->size))
		err = -EIO;