From: Bitan Biswas <bbiswas@nvidia.com> To: Laxman Dewangan <ldewangan@nvidia.com>, Thierry Reding <treding@nvidia.com>, Jonathan Hunter <jonathanh@nvidia.com>, linux-i2c@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, Peter Rosin <peda@axentia.se>, Wolfram Sang <wsa@the-dreams.de>, Dmitry Osipenko <digetx@gmail.com> Cc: Shardar Mohammed <smohammed@nvidia.com>, Sowjanya Komatineni <skomatineni@nvidia.com>, Mantravadi Karthik <mkarthik@nvidia.com>, Bitan Biswas <bbiswas@nvidia.com> Subject: [PATCH V5 7/7] i2c: tegra: remove BUG, BUG_ON Date: Tue, 11 Jun 2019 03:51:14 -0700 [thread overview] Message-ID: <1560250274-18499-7-git-send-email-bbiswas@nvidia.com> (raw) In-Reply-To: <1560250274-18499-1-git-send-email-bbiswas@nvidia.com> Remove redundant BUG_ON calls or replace with WARN_ON_ONCE as needed. Remove BUG() and make Rx and Tx case handling similar. Add WARN_ON_ONCE check for non-zero rx_fifo_avail in tegra_i2c_empty_rx_fifo() and return new error I2C_ERR_UNEXPECTED_STATUS. Signed-off-by: Bitan Biswas <bbiswas@nvidia.com> --- drivers/i2c/busses/i2c-tegra.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/drivers/i2c/busses/i2c-tegra.c b/drivers/i2c/busses/i2c-tegra.c index 0596c12..2c8f051 100644 --- a/drivers/i2c/busses/i2c-tegra.c +++ b/drivers/i2c/busses/i2c-tegra.c @@ -73,6 +73,7 @@ #define I2C_ERR_NO_ACK BIT(0) #define I2C_ERR_ARBITRATION_LOST BIT(1) #define I2C_ERR_UNKNOWN_INTERRUPT BIT(2) +#define I2C_ERR_UNEXPECTED_STATUS BIT(3) #define PACKET_HEADER0_HEADER_SIZE_SHIFT 28 #define PACKET_HEADER0_PACKET_ID_SHIFT 16 @@ -516,15 +517,15 @@ static int tegra_i2c_empty_rx_fifo(struct tegra_i2c_dev *i2c_dev) */ if (rx_fifo_avail > 0 && (buf_remaining > 0 && buf_remaining < BYTES_PER_FIFO_WORD)) { - BUG_ON(buf_remaining > 3); val = i2c_readl(i2c_dev, I2C_RX_FIFO); val = cpu_to_le32(val); memcpy(buf, &val, buf_remaining); buf_remaining = 0; rx_fifo_avail--; } + if (WARN_ON_ONCE(rx_fifo_avail)) + return -EINVAL; - BUG_ON(rx_fifo_avail > 0 && buf_remaining > 0); i2c_dev->msg_buf_remaining = buf_remaining; i2c_dev->msg_buf = buf; @@ -582,7 +583,6 @@ static int tegra_i2c_fill_tx_fifo(struct tegra_i2c_dev *i2c_dev) */ if (tx_fifo_avail > 0 && (buf_remaining > 0 && buf_remaining < BYTES_PER_FIFO_WORD)) { - BUG_ON(buf_remaining > 3); memcpy(&val, buf, buf_remaining); val = le32_to_cpu(val); @@ -848,10 +848,16 @@ static irqreturn_t tegra_i2c_isr(int irq, void *dev_id) if (!i2c_dev->is_curr_dma_xfer) { if (i2c_dev->msg_read && (status & I2C_INT_RX_FIFO_DATA_REQ)) { - if (i2c_dev->msg_buf_remaining) - tegra_i2c_empty_rx_fifo(i2c_dev); - else - BUG(); + if (i2c_dev->msg_buf_remaining) { + if (tegra_i2c_empty_rx_fifo(i2c_dev)) { + i2c_dev->msg_err |= + I2C_ERR_UNEXPECTED_STATUS; + goto err; + } + } else { + tegra_i2c_mask_irq(i2c_dev, + I2C_INT_RX_FIFO_DATA_REQ); + } } if (!i2c_dev->msg_read && (status & I2C_INT_TX_FIFO_DATA_REQ)) { @@ -877,7 +883,10 @@ static irqreturn_t tegra_i2c_isr(int irq, void *dev_id) if (status & I2C_INT_PACKET_XFER_COMPLETE) { if (i2c_dev->is_curr_dma_xfer) i2c_dev->msg_buf_remaining = 0; - BUG_ON(i2c_dev->msg_buf_remaining); + if (WARN_ON_ONCE(i2c_dev->msg_buf_remaining)) { + i2c_dev->msg_err |= I2C_ERR_UNKNOWN_INTERRUPT; + goto err; + } complete(&i2c_dev->msg_complete); } goto done; -- 2.7.4
WARNING: multiple messages have this Message-ID (diff)
From: Bitan Biswas <bbiswas@nvidia.com> To: Laxman Dewangan <ldewangan@nvidia.com>, Thierry Reding <treding@nvidia.com>, Jonathan Hunter <jonathanh@nvidia.com>, <linux-i2c@vger.kernel.org>, <linux-tegra@vger.kernel.org>, <linux-kernel@vger.kernel.org>, Peter Rosin <peda@axentia.se>, Wolfram Sang <wsa@the-dreams.de>, Dmitry Osipenko <digetx@gmail.com> Cc: Shardar Mohammed <smohammed@nvidia.com>, Sowjanya Komatineni <skomatineni@nvidia.com>, Mantravadi Karthik <mkarthik@nvidia.com>, Bitan Biswas <bbiswas@nvidia.com> Subject: [PATCH V5 7/7] i2c: tegra: remove BUG, BUG_ON Date: Tue, 11 Jun 2019 03:51:14 -0700 [thread overview] Message-ID: <1560250274-18499-7-git-send-email-bbiswas@nvidia.com> (raw) In-Reply-To: <1560250274-18499-1-git-send-email-bbiswas@nvidia.com> Remove redundant BUG_ON calls or replace with WARN_ON_ONCE as needed. Remove BUG() and make Rx and Tx case handling similar. Add WARN_ON_ONCE check for non-zero rx_fifo_avail in tegra_i2c_empty_rx_fifo() and return new error I2C_ERR_UNEXPECTED_STATUS. Signed-off-by: Bitan Biswas <bbiswas@nvidia.com> --- drivers/i2c/busses/i2c-tegra.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/drivers/i2c/busses/i2c-tegra.c b/drivers/i2c/busses/i2c-tegra.c index 0596c12..2c8f051 100644 --- a/drivers/i2c/busses/i2c-tegra.c +++ b/drivers/i2c/busses/i2c-tegra.c @@ -73,6 +73,7 @@ #define I2C_ERR_NO_ACK BIT(0) #define I2C_ERR_ARBITRATION_LOST BIT(1) #define I2C_ERR_UNKNOWN_INTERRUPT BIT(2) +#define I2C_ERR_UNEXPECTED_STATUS BIT(3) #define PACKET_HEADER0_HEADER_SIZE_SHIFT 28 #define PACKET_HEADER0_PACKET_ID_SHIFT 16 @@ -516,15 +517,15 @@ static int tegra_i2c_empty_rx_fifo(struct tegra_i2c_dev *i2c_dev) */ if (rx_fifo_avail > 0 && (buf_remaining > 0 && buf_remaining < BYTES_PER_FIFO_WORD)) { - BUG_ON(buf_remaining > 3); val = i2c_readl(i2c_dev, I2C_RX_FIFO); val = cpu_to_le32(val); memcpy(buf, &val, buf_remaining); buf_remaining = 0; rx_fifo_avail--; } + if (WARN_ON_ONCE(rx_fifo_avail)) + return -EINVAL; - BUG_ON(rx_fifo_avail > 0 && buf_remaining > 0); i2c_dev->msg_buf_remaining = buf_remaining; i2c_dev->msg_buf = buf; @@ -582,7 +583,6 @@ static int tegra_i2c_fill_tx_fifo(struct tegra_i2c_dev *i2c_dev) */ if (tx_fifo_avail > 0 && (buf_remaining > 0 && buf_remaining < BYTES_PER_FIFO_WORD)) { - BUG_ON(buf_remaining > 3); memcpy(&val, buf, buf_remaining); val = le32_to_cpu(val); @@ -848,10 +848,16 @@ static irqreturn_t tegra_i2c_isr(int irq, void *dev_id) if (!i2c_dev->is_curr_dma_xfer) { if (i2c_dev->msg_read && (status & I2C_INT_RX_FIFO_DATA_REQ)) { - if (i2c_dev->msg_buf_remaining) - tegra_i2c_empty_rx_fifo(i2c_dev); - else - BUG(); + if (i2c_dev->msg_buf_remaining) { + if (tegra_i2c_empty_rx_fifo(i2c_dev)) { + i2c_dev->msg_err |= + I2C_ERR_UNEXPECTED_STATUS; + goto err; + } + } else { + tegra_i2c_mask_irq(i2c_dev, + I2C_INT_RX_FIFO_DATA_REQ); + } } if (!i2c_dev->msg_read && (status & I2C_INT_TX_FIFO_DATA_REQ)) { @@ -877,7 +883,10 @@ static irqreturn_t tegra_i2c_isr(int irq, void *dev_id) if (status & I2C_INT_PACKET_XFER_COMPLETE) { if (i2c_dev->is_curr_dma_xfer) i2c_dev->msg_buf_remaining = 0; - BUG_ON(i2c_dev->msg_buf_remaining); + if (WARN_ON_ONCE(i2c_dev->msg_buf_remaining)) { + i2c_dev->msg_err |= I2C_ERR_UNKNOWN_INTERRUPT; + goto err; + } complete(&i2c_dev->msg_complete); } goto done; -- 2.7.4
next prev parent reply other threads:[~2019-06-11 10:51 UTC|newest] Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-06-11 10:51 [PATCH V5 1/7] i2c: tegra: clean up macros Bitan Biswas 2019-06-11 10:51 ` Bitan Biswas 2019-06-11 10:51 ` [PATCH V5 2/7] i2c: tegra: remove unnecessary variable init Bitan Biswas 2019-06-11 10:51 ` Bitan Biswas 2019-06-12 10:21 ` Wolfram Sang 2019-06-11 10:51 ` [PATCH V5 3/7] i2c: tegra: fix alignment and spacing violations Bitan Biswas 2019-06-11 10:51 ` Bitan Biswas 2019-06-12 10:21 ` Wolfram Sang 2019-06-11 10:51 ` [PATCH V5 4/7] i2c: tegra: add spinlock definition comment Bitan Biswas 2019-06-11 10:51 ` Bitan Biswas 2019-06-12 10:21 ` Wolfram Sang 2019-06-11 10:51 ` [PATCH V5 5/7] i2c: tegra: fix msleep warning Bitan Biswas 2019-06-11 10:51 ` Bitan Biswas 2019-06-12 10:21 ` Wolfram Sang 2019-06-11 10:51 ` [PATCH V5 6/7] i2c: tegra: fix PIO rx/tx residual transfer check Bitan Biswas 2019-06-11 10:51 ` Bitan Biswas 2019-06-12 10:24 ` Wolfram Sang 2019-06-13 11:43 ` Bitan Biswas 2019-06-13 11:43 ` Bitan Biswas 2019-06-13 11:52 ` Laxman Dewangan 2019-06-13 11:52 ` Laxman Dewangan 2019-06-13 13:13 ` Wolfram Sang 2019-06-12 13:55 ` Dmitry Osipenko 2019-06-13 9:59 ` Bitan Biswas 2019-06-13 9:59 ` Bitan Biswas 2019-06-12 14:30 ` Dmitry Osipenko 2019-06-13 11:30 ` Bitan Biswas 2019-06-13 11:30 ` Bitan Biswas 2019-06-13 12:28 ` Dmitry Osipenko 2019-06-14 9:50 ` Bitan Biswas 2019-06-14 9:50 ` Bitan Biswas 2019-06-14 13:02 ` Dmitry Osipenko 2019-06-18 5:21 ` Bitan Biswas 2019-06-18 5:21 ` Bitan Biswas 2019-06-11 10:51 ` Bitan Biswas [this message] 2019-06-11 10:51 ` [PATCH V5 7/7] i2c: tegra: remove BUG, BUG_ON Bitan Biswas 2019-06-11 11:38 ` Dmitry Osipenko 2019-06-12 10:21 ` [PATCH V5 1/7] i2c: tegra: clean up macros Wolfram Sang
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=1560250274-18499-7-git-send-email-bbiswas@nvidia.com \ --to=bbiswas@nvidia.com \ --cc=digetx@gmail.com \ --cc=jonathanh@nvidia.com \ --cc=ldewangan@nvidia.com \ --cc=linux-i2c@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-tegra@vger.kernel.org \ --cc=mkarthik@nvidia.com \ --cc=peda@axentia.se \ --cc=skomatineni@nvidia.com \ --cc=smohammed@nvidia.com \ --cc=treding@nvidia.com \ --cc=wsa@the-dreams.de \ /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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.