From: "René Herman" <rene.herman@gmail.com>
To: Takashi Iwai <tiwai@suse.de>
Cc: alsa-devel@alsa-project.org, Torsten Schenk <torsten.schenk@zoho.com>
Subject: [PATCH v2 1/2] Move DMA-buffer off the stack
Date: Tue, 21 Jul 2020 11:57:47 +0200 [thread overview]
Message-ID: <20200721095748.16224-2-rene.herman@gmail.com> (raw)
In-Reply-To: <20200721095748.16224-1-rene.herman@gmail.com>
snd-usb-fire currently fails its firmware load with "transfer buffer not dma
capable". Move said buffer off of the stack.
Signed-off-by: René Herman <rene.herman@gmail.com>
---
sound/usb/6fire/firmware.c | 95 ++++++++++++++++++--------------------
1 file changed, 46 insertions(+), 49 deletions(-)
diff --git a/sound/usb/6fire/firmware.c b/sound/usb/6fire/firmware.c
index 69137c14d0dc..502653a89f01 100644
--- a/sound/usb/6fire/firmware.c
+++ b/sound/usb/6fire/firmware.c
@@ -355,63 +355,60 @@ static int usb6fire_fw_check(struct usb_interface *intf, const u8 *version)
int usb6fire_fw_init(struct usb_interface *intf)
{
- int i;
- int ret;
struct usb_device *device = interface_to_usbdev(intf);
+ int ret, i;
+
/* buffer: 8 receiving bytes from device and
* sizeof(EP_W_MAX_PACKET_SIZE) bytes for non-const copy */
- u8 buffer[12];
+ u8 *buffer = kmalloc(12, GFP_KERNEL);
+
+ if (!buffer)
+ return -ENOMEM;
ret = usb6fire_fw_ezusb_read(device, 1, 0, buffer, 8);
if (ret < 0) {
dev_err(&intf->dev,
"unable to receive device firmware state.\n");
- return ret;
- }
- if (buffer[0] != 0xeb || buffer[1] != 0xaa || buffer[2] != 0x55) {
- dev_err(&intf->dev,
- "unknown device firmware state received from device:");
- for (i = 0; i < 8; i++)
- printk(KERN_CONT "%02x ", buffer[i]);
- printk(KERN_CONT "\n");
- return -EIO;
- }
- /* do we need fpga loader ezusb firmware? */
- if (buffer[3] == 0x01) {
- ret = usb6fire_fw_ezusb_upload(intf,
- "6fire/dmx6firel2.ihx", 0, NULL, 0);
- if (ret < 0)
- return ret;
- return FW_NOT_READY;
+ goto out;
}
- /* do we need fpga firmware and application ezusb firmware? */
- else if (buffer[3] == 0x02) {
- ret = usb6fire_fw_check(intf, buffer + 4);
- if (ret < 0)
- return ret;
- ret = usb6fire_fw_fpga_upload(intf, "6fire/dmx6firecf.bin");
- if (ret < 0)
- return ret;
- memcpy(buffer, ep_w_max_packet_size,
- sizeof(ep_w_max_packet_size));
- ret = usb6fire_fw_ezusb_upload(intf, "6fire/dmx6fireap.ihx",
- 0x0003, buffer, sizeof(ep_w_max_packet_size));
- if (ret < 0)
- return ret;
- return FW_NOT_READY;
- }
- /* all fw loaded? */
- else if (buffer[3] == 0x03)
- return usb6fire_fw_check(intf, buffer + 4);
- /* unknown data? */
- else {
- dev_err(&intf->dev,
- "unknown device firmware state received from device: ");
- for (i = 0; i < 8; i++)
- printk(KERN_CONT "%02x ", buffer[i]);
- printk(KERN_CONT "\n");
- return -EIO;
+ if (buffer[0] == 0xeb && buffer[1] == 0xaa && buffer[2] == 0x55) {
+ /* do we need fpga loader ezusb firmware? */
+ if (buffer[3] == 1) {
+ ret = usb6fire_fw_ezusb_upload(intf,
+ "6fire/dmx6firel2.ihx", 0, NULL, 0);
+ if (ret >= 0)
+ ret = FW_NOT_READY;
+ goto out;
+ }
+ /* do we need fpga firmware and application ezusb firmware? */
+ if (buffer[3] == 2) {
+ ret = usb6fire_fw_check(intf, buffer + 4);
+ if (ret < 0)
+ goto out;
+ ret = usb6fire_fw_fpga_upload(intf, "6fire/dmx6firecf.bin");
+ if (ret < 0)
+ goto out;
+ memcpy(buffer, ep_w_max_packet_size,
+ sizeof(ep_w_max_packet_size));
+ ret = usb6fire_fw_ezusb_upload(intf, "6fire/dmx6fireap.ihx",
+ 0x0003, buffer, sizeof(ep_w_max_packet_size));
+ if (ret >= 0)
+ ret = FW_NOT_READY;
+ goto out;
+ }
+ /* all fw loaded? */
+ if (buffer[3] == 3) {
+ ret = usb6fire_fw_check(intf, buffer + 4);
+ goto out;
+ }
}
- return 0;
+ dev_err(&intf->dev,
+ "unknown device firmware state received from device: ");
+ for (i = 0; i < 8; i++)
+ printk(KERN_CONT "%02x ", buffer[i]);
+ printk(KERN_CONT "\n");
+ ret = -EIO;
+
+out: kfree(buffer);
+ return ret;
}
-
--
2.17.1
next prev parent reply other threads:[~2020-07-21 10:00 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-07-21 9:57 [PATCH v2 0/2] snd-usb-6fire: firmware load and pulseaudio assumption René Herman
2020-07-21 9:57 ` René Herman [this message]
2020-07-21 10:03 ` [PATCH v2 1/2] Move DMA-buffer off the stack Takashi Iwai
2020-07-21 10:09 ` René Herman
2020-07-21 9:57 ` [PATCH v2 2/2] Pulseaudio needs snd_pcm_hardware.channels_min > 1 René Herman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200721095748.16224-2-rene.herman@gmail.com \
--to=rene.herman@gmail.com \
--cc=alsa-devel@alsa-project.org \
--cc=tiwai@suse.de \
--cc=torsten.schenk@zoho.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox