From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mario Kicherer Subject: Re: wcnss_ctrl firmware loading Date: Thu, 4 Jan 2018 12:36:28 +0100 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Return-path: Received: from www.zeus06.de ([194.117.254.36]:58440 "EHLO mail.zeus06.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752783AbeADLnL (ORCPT ); Thu, 4 Jan 2018 06:43:11 -0500 In-Reply-To: Content-Language: de-DE Sender: linux-arm-msm-owner@vger.kernel.org List-Id: linux-arm-msm@vger.kernel.org To: Will Newton Cc: linux-arm-msm@vger.kernel.org Hi, at least the driver in this Android kernel also only increases by NV_FRAGMENT_SIZE: https://github.com/anyc/linux-zenwatch3/blob/master/drivers/net/wireless/wcnss/wcnss_wlan.c#L2413 Best regards, Mario On 04.01.2018 11:44, Will Newton wrote: > Hi, > > I'm running into some issues with getting this driver running on an > msm8909. The firmware loading code looks a little odd to me so I would > just like to check it is doing the right thing: > > > > data = fw->data; > left = fw->size; > > req->hdr.type = WCNSS_DOWNLOAD_NV_REQ; > req->hdr.len = sizeof(*req) + NV_FRAGMENT_SIZE; > > req->last = 0; > req->frag_size = NV_FRAGMENT_SIZE; > > req->seq = 0; > do { > if (left <= NV_FRAGMENT_SIZE) { > req->last = 1; > req->frag_size = left; > req->hdr.len = sizeof(*req) + left; > } > > memcpy(req->fragment, data, req->frag_size); > > ret = rpmsg_send(wcnss->channel, req, req->hdr.len); > if (ret < 0) { > dev_err(wcnss->dev, "failed to send smd packet\n"); > goto release_fw; > } > > /* Increment for next fragment */ > req->seq++; > > data += req->hdr.len; > left -= NV_FRAGMENT_SIZE; > } while (left > 0); > > data is incremented by req->hdr.len which includes sizeof(*req) which > seems wrong, e.g. it should perhaps increment by req->frag_size. Or am > I missing some subtlety here? > > Strangely it doesn't seem to matter if I change that code, either way > my firmware startup fails... >