On Tue, Jan 20, 2026 at 11:43 PM Cédric Le Goater <[email protected]> wrote: > > On 1/20/26 22:11, Nabih Estefan wrote: > > If aspeed_i2c_dma_read fails in aspeed_i2c_bus_send currently, we get > > stuck in an infinite retry loop. Add a check for the return value of > > aspeed_i2c_dma_read that will break us out of said loop. > > > Have you ever encountered this kind of problem ?
I did when testing the AST1700. In one of the patchsets we had the DRAM memory initialized but not the address space (v5 has this fixed) but it took me a while to figure out what was happening because instead of failing a `i2cdump` or `i2cget` command, it would just hang. Presumably it can only happen on misconfigured or failing devices that have some address space issue, but since aspeed_i2c_dma returns an error if its fails I figured checking it had no real downside. - Nabih > > > Signed-off-by: Nabih Estefan <[email protected]> > > --- > > hw/i2c/aspeed_i2c.c | 6 +++++- > > 1 file changed, 5 insertions(+), 1 deletion(-) > > > > diff --git a/hw/i2c/aspeed_i2c.c b/hw/i2c/aspeed_i2c.c > > index 1b8ac561c3..3de72db652 100644 > > --- a/hw/i2c/aspeed_i2c.c > > +++ b/hw/i2c/aspeed_i2c.c > > @@ -272,7 +272,11 @@ static int aspeed_i2c_bus_send(AspeedI2CBus *bus) > > } > > while (bus->regs[reg_dma_len]) { > > uint8_t data; > > - aspeed_i2c_dma_read(bus, &data); > > + ret = aspeed_i2c_dma_read(bus, &data); > > + /* Check that we were able to read the DMA */ > > + if (ret) { > > + break; > > + } > > trace_aspeed_i2c_bus_send("DMA", bus->regs[reg_dma_len], > > bus->regs[reg_dma_len], data); > > ret = i2c_send(bus->bus, data); > > > Reviewed-by: Cédric Le Goater <[email protected]> > > > Thanks, > > C.
