staging: slicoss: fix occasionally writing out only half of a dma address
authorDavid Matlack <dmatlack@google.com>
Tue, 12 May 2015 03:40:36 +0000 (20:40 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 13 May 2015 23:13:24 +0000 (16:13 -0700)
commit36bf51acc89d113f101e40f40af4ab53fbf5b60a
tree42ad9e9ddb8fc97eef573884f636468340ad46ca
parenteafe600205cb9299bf32a3117e03046f09a71190
staging: slicoss: fix occasionally writing out only half of a dma address

curaddrupper caches the last written upper 32-bits of a dma address
(the device has one register for the upper 32-bits of all dma
address registers). The problem is, not every dma address write
checks and sets curaddrupper. This causes the driver to occasionally
not write the upper 32-bits of a dma address to the device when it
really should.

I've seen this manifest particularly when the driver is trying to
read config data from the device (RCONFIG) in order to checksum the
device's eeprom. Since the device writes its config data to the
wrong DMA address the driver reads 0 as the eeprom size and the
eeprom checksum fails.

This patch fixes the issue by removing curaddrupper and always
writing the upper 32-bits of dma addresses.

Signed-off-by: David Matlack <dmatlack@google.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/slicoss/slic.h
drivers/staging/slicoss/slicoss.c