[PATCH] myri10ge - Write the firmware in 256-bytes chunks

When writing the firmware to the NIC, the FIFO is 256-bytes long,
so we use 256-bytes chunks and a read to wait until the previous
write is done.

Signed-off-by: Brice Goglin <brice@myri.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>

authored by Brice Goglin and committed by Jeff Garzik e454358a 817acf5e

+7 -12
+7 -12
drivers/net/myri10ge/myri10ge.c
··· 448 448 struct mcp_gen_header *hdr; 449 449 size_t hdr_offset; 450 450 int status; 451 + unsigned i; 451 452 452 453 if ((status = request_firmware(&fw, mgp->fw_name, dev)) < 0) { 453 454 dev_err(dev, "Unable to load %s firmware image via hotplug\n", ··· 480 479 goto abort_with_fw; 481 480 482 481 crc = crc32(~0, fw->data, fw->size); 483 - if (mgp->tx.boundary == 2048) { 484 - /* Avoid PCI burst on chipset with unaligned completions. */ 485 - int i; 486 - __iomem u32 *ptr = (__iomem u32 *) (mgp->sram + 487 - MYRI10GE_FW_OFFSET); 488 - for (i = 0; i < fw->size / 4; i++) { 489 - __raw_writel(((u32 *) fw->data)[i], ptr + i); 490 - wmb(); 491 - } 492 - } else { 493 - myri10ge_pio_copy(mgp->sram + MYRI10GE_FW_OFFSET, fw->data, 494 - fw->size); 482 + for (i = 0; i < fw->size; i += 256) { 483 + myri10ge_pio_copy(mgp->sram + MYRI10GE_FW_OFFSET + i, 484 + fw->data + i, 485 + min(256U, (unsigned)(fw->size - i))); 486 + mb(); 487 + readb(mgp->sram); 495 488 } 496 489 /* corruption checking is good for parity recovery and buggy chipset */ 497 490 memcpy_fromio(fw->data, mgp->sram + MYRI10GE_FW_OFFSET, fw->size);