From: Jean Delvare <jdelvare@suse.de>
To: lingyxu <lingyan.xu@nokia-sbell.com>
Cc: Krzysztof Adamski <krzysztof.adamski@nokia.com>,
WladislavWiebe <wladislav.wiebe@nokia.com>,
linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] i801_smbus: clear SMBALERT status bit and disable SMBALERT interrupt
Date: Wed, 28 Aug 2019 15:58:22 +0200 [thread overview]
Message-ID: <20190828155822.7cb13a7b@endymion> (raw)
In-Reply-To: <1565577634-18264-1-git-send-email-lingyan.xu@nokia-sbell.com>
Hi Lingyan,
On Mon, 12 Aug 2019 10:40:34 +0800, lingyxu wrote:
> From: Lingyan Xu <lingyan.xu@nokia-sbell.com>
>
> In current i801 driver, SMBALERT interrupt is allowed
> (Slave Command Register bit2 is 0).
> But these is no handler for SMBALERT interrupt in i801_isr,
> if there is SMBALERT interrupt asserted and deasserted,
> i801 will have an irq flood for the related status bit is setted.
>
> So SMBALERT interrupt handler is needed, and also, SMBALERT interrupt
> will be generated from time to time if slave chip have some fault.
> So disable SMBALERT interrupt is also needed.
>
> About the solution,
> please see http://www.farnell.com/datasheets/1581967.pdf
> Page632 P640 for more.
>
> Signed-off-by: Lingyan Xu <lingyan.xu@nokia-sbell.com>
> ---
> drivers/i2c/busses/i2c-i801.c | 7 ++++++-
> 1 files changed, 6 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/i2c/busses/i2c-i801.c b/drivers/i2c/busses/i2c-i801.c
> index f295693..033bafe 100644
> --- a/drivers/i2c/busses/i2c-i801.c
> +++ b/drivers/i2c/busses/i2c-i801.c
> @@ -661,9 +661,11 @@ static irqreturn_t i801_isr(int irq, void *dev_id)
> * Clear irq sources and report transaction result.
> * ->status must be cleared before the next transaction is started.
> */
> +
> + outb_p(status, SMBHSTSTS(priv));
> +
> status &= SMBHSTSTS_INTR | STATUS_ERROR_FLAGS;
> if (status) {
> - outb_p(status, SMBHSTSTS(priv));
> priv->status = status;
> wake_up(&priv->waitq);
> }
Looks scary. Writing the whole value of SMBHSTSTS back to itself
without selecting which bits you write is dangerous. Specifically,
writing back SMBHSTSTS_BYTE_DONE, SMBHSTSTS_INUSE_STS and
SMBHSTSTS_HOST_BUSY could have unexpected consequences. I would feel
much better if you would just explicitly add SMBHSTSTS_SMBALERT_STS to
the list.
> @@ -1810,6 +1812,9 @@ static int i801_probe(struct pci_dev *dev, const struct pci_device_id *id)
> /* Default timeout in interrupt mode: 200 ms */
> priv->adapter.timeout = HZ / 5;
>
> + /* Disable SMBALERT interrupt */
> + outb_p(inb_p(SMBSLVCMD(priv)) | BIT(2), SMBSLVCMD(priv));
Please give SMBSLVCMD's BIT(2) a name and define it after
SMBSLVCMD_HST_NTFY_INTREN.
Also it is mandatory to restore the value of SMBSLVCMD before returning
the control back to the BIOS. Currently this is only being done when
the FEATURE_HOST_NOTIFY bit is set because that's the only case where
we change the value of that register, but if we change it
unconditionally then it must be saved and restored unconditionally too.
> +
> if (dev->irq == IRQ_NOTCONNECTED)
> priv->features &= ~FEATURE_IRQ;
>
That being said, if you see this interrupt flood, it means that at
least one device on your SMBus would benefit from SMBus Alert being
supported. The infrastructure is already there as we added support in a
few I2C bus drivers already. So maybe instead of silencing the
interrupts, we could add proper SMBus Alert support to the i2c-i801
driver?
Did you figure out which device is raising the SMBus Alert and why?
--
Jean Delvare
SUSE L3 Support
next prev parent reply other threads:[~2019-08-28 13:58 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-08-12 2:40 [PATCH] i801_smbus: clear SMBALERT status bit and disable SMBALERT interrupt lingyxu
2019-08-14 16:15 ` Wolfram Sang
2019-08-28 13:58 ` Jean Delvare [this message]
2019-09-03 2:15 ` Xu, Lingyan (NSB - CN/Hangzhou)
2019-09-05 9:15 ` Xu, Lingyan (NSB - CN/Hangzhou)
2019-09-05 12:57 ` Jean Delvare
2019-09-16 8:52 ` Sverdlin, Alexander (Nokia - DE/Ulm)
2019-09-16 9:29 ` Sverdlin, Alexander (Nokia - DE/Ulm)
2019-09-17 11:37 ` Sverdlin, Alexander (Nokia - DE/Ulm)
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=20190828155822.7cb13a7b@endymion \
--to=jdelvare@suse.de \
--cc=krzysztof.adamski@nokia.com \
--cc=lingyan.xu@nokia-sbell.com \
--cc=linux-i2c@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=wladislav.wiebe@nokia.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;
as well as URLs for NNTP newsgroup(s).