| From 71274c32a85c39025c3348cdd7969790bd97bf60 Mon Sep 17 00:00:00 2001 |
| From: Charles Boyer <Charles.Boyer@fii-usa.com> |
| Date: Tue, 1 Oct 2024 14:28:55 +0800 |
| Subject: [PATCH 6/6] i2c: npcm: Enable slave in eob interrupt |
| |
| Nuvoton slave enable was in user space API call master_xfer, so it is |
| subject to delays from the OS scheduler. If the BMC is not enabled for |
| slave mode in time for master to send response, then it will NAK the |
| address match. Then the PLDM request timeout occurs. |
| |
| If the slave enable is moved to the EOB interrupt service routine, then |
| the BMC can be ready in slave mode by the time it needs to receive a |
| response. |
| |
| Upstream-Status: Pending [https://patchwork.ozlabs.org/project/linux-i2c/list/?series=426080] |
| Signed-off-by: Charles Boyer <Charles.Boyer@fii-usa.com> |
| Signed-off-by: Vivekanand Veeracholan <vveerach@google.com> |
| Signed-off-by: Tyrone Ting <kfting@nuvoton.com> |
| Reviewed-by: Tali Perry <tali.perry1@gmail.com> |
| --- |
| drivers/i2c/busses/i2c-npcm7xx.c | 6 ++++++ |
| 1 file changed, 6 insertions(+) |
| |
| diff --git a/drivers/i2c/busses/i2c-npcm7xx.c b/drivers/i2c/busses/i2c-npcm7xx.c |
| index 06023bcefb7a..cf1829fa262e 100644 |
| --- a/drivers/i2c/busses/i2c-npcm7xx.c |
| +++ b/drivers/i2c/busses/i2c-npcm7xx.c |
| @@ -1923,6 +1923,12 @@ static int npcm_i2c_int_master_handler(struct npcm_i2c *bus) |
| (FIELD_GET(NPCM_I2CCST3_EO_BUSY, |
| ioread8(bus->reg + NPCM_I2CCST3)))) { |
| npcm_i2c_irq_handle_eob(bus); |
| +#if IS_ENABLED(CONFIG_I2C_SLAVE) |
| + /* reenable slave if it was enabled */ |
| + if (bus->slave) |
| + iowrite8((bus->slave->addr & 0x7F) | NPCM_I2CADDR_SAEN, |
| + bus->reg + NPCM_I2CADDR1); |
| +#endif |
| return 0; |
| } |
| |
| -- |
| 2.46.1.824.gd892dcdcdd-goog |
| |