Commit b172845a authored by David S. Miller's avatar David S. Miller

Merge branch 'qca_spi-fixes'

Stefan Wahren says:

====================
net: qca_spi: Fix receive and reset issues

This small patch series fixes two major issues in the SPI driver for the
QCA700x.

It has been tested on a Charge Control C 300 (NXP i.MX6ULL +
2x QCA7000).
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents aee024f6 bc19c329
...@@ -363,7 +363,7 @@ qcaspi_receive(struct qcaspi *qca) ...@@ -363,7 +363,7 @@ qcaspi_receive(struct qcaspi *qca)
netdev_dbg(net_dev, "qcaspi_receive: SPI_REG_RDBUF_BYTE_AVA: Value: %08x\n", netdev_dbg(net_dev, "qcaspi_receive: SPI_REG_RDBUF_BYTE_AVA: Value: %08x\n",
available); available);
if (available > QCASPI_HW_BUF_LEN) { if (available > QCASPI_HW_BUF_LEN + QCASPI_HW_PKT_LEN) {
/* This could only happen by interferences on the SPI line. /* This could only happen by interferences on the SPI line.
* So retry later ... * So retry later ...
*/ */
...@@ -496,7 +496,6 @@ qcaspi_qca7k_sync(struct qcaspi *qca, int event) ...@@ -496,7 +496,6 @@ qcaspi_qca7k_sync(struct qcaspi *qca, int event)
u16 signature = 0; u16 signature = 0;
u16 spi_config; u16 spi_config;
u16 wrbuf_space = 0; u16 wrbuf_space = 0;
static u16 reset_count;
if (event == QCASPI_EVENT_CPUON) { if (event == QCASPI_EVENT_CPUON) {
/* Read signature twice, if not valid /* Read signature twice, if not valid
...@@ -549,13 +548,13 @@ qcaspi_qca7k_sync(struct qcaspi *qca, int event) ...@@ -549,13 +548,13 @@ qcaspi_qca7k_sync(struct qcaspi *qca, int event)
qca->sync = QCASPI_SYNC_RESET; qca->sync = QCASPI_SYNC_RESET;
qca->stats.trig_reset++; qca->stats.trig_reset++;
reset_count = 0; qca->reset_count = 0;
break; break;
case QCASPI_SYNC_RESET: case QCASPI_SYNC_RESET:
reset_count++; qca->reset_count++;
netdev_dbg(qca->net_dev, "sync: waiting for CPU on, count %u.\n", netdev_dbg(qca->net_dev, "sync: waiting for CPU on, count %u.\n",
reset_count); qca->reset_count);
if (reset_count >= QCASPI_RESET_TIMEOUT) { if (qca->reset_count >= QCASPI_RESET_TIMEOUT) {
/* reset did not seem to take place, try again */ /* reset did not seem to take place, try again */
qca->sync = QCASPI_SYNC_UNKNOWN; qca->sync = QCASPI_SYNC_UNKNOWN;
qca->stats.reset_timeout++; qca->stats.reset_timeout++;
......
...@@ -94,6 +94,7 @@ struct qcaspi { ...@@ -94,6 +94,7 @@ struct qcaspi {
unsigned int intr_req; unsigned int intr_req;
unsigned int intr_svc; unsigned int intr_svc;
u16 reset_count;
#ifdef CONFIG_DEBUG_FS #ifdef CONFIG_DEBUG_FS
struct dentry *device_root; struct dentry *device_root;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment