* Romain Naour <romain.naour@xxxxxxxx> [220216 09:04]: > Hello, > > Le 14/02/2022 à 14:08, Tony Lindgren a écrit : > > * Tony Lindgren <tony@xxxxxxxxxxx> [220214 07:43]: > >> Looks like the following script to just toggle the module state locks > >> up things for me on beagle-x15 very fast. So yeah now I'm able to > >> reproduce the issue. Seems like the module is not ready right after > >> enabling it live we've seen for dra7 iva for example. > > > > Looks like the following patch is also needed for uarts to avoid unbind > > clock_unprepare warnings. But even with this patch dra7 uarts won't behave. > > On unbind, there will be a clock "l4per-clkctrl:0128:0: failed to disable" > > warning. Looks like after that any following clock enable does not seem to > > work and that will cause the register access errors. > > > > Looks like this is a dra7 specific issue as a similar test script on omap4 > > duovero keeps on going instead. > > Thanks for the help and the patch! > > I removed my patch removing the quirk and applied you patch but I can still > reproduce the issue. Yeah issues still exists for sure, looks like also omap4 fails but it just takes a while to produce the clkctrl disable error. And remove for 8250_omap is incomplete.. Below is a patch that makes the rebind of kernel serial console behave for me together with the ti-sysc patch. Additionally I also need to disable dma for now with: &uart3 { /delete-property/ dma-names; }; > Do you need some info about the kernel configuration? Not really but if you can please test again with the ti-sysc patch, 8250_omap patch and with your serdev uart dma disabled with delete-property? Regards, Tony 8< ----------------- diff --git a/drivers/tty/serial/8250/8250_omap.c b/drivers/tty/serial/8250/8250_omap.c --- a/drivers/tty/serial/8250/8250_omap.c +++ b/drivers/tty/serial/8250/8250_omap.c @@ -1475,10 +1475,15 @@ static int omap8250_probe(struct platform_device *pdev) static int omap8250_remove(struct platform_device *pdev) { struct omap8250_priv *priv = platform_get_drvdata(pdev); + struct uart_8250_port *up = serial8250_get_port(priv->line); + pm_runtime_resume_and_get(&pdev->dev); pm_runtime_dont_use_autosuspend(&pdev->dev); pm_runtime_put_sync(&pdev->dev); pm_runtime_disable(&pdev->dev); + dev_pm_clear_wake_irq(&pdev->dev); + cancel_work_sync(&priv->qos_work); + cancel_delayed_work(&up->overrun_backoff); serial8250_unregister_port(priv->line); cpu_latency_qos_remove_request(&priv->pm_qos_request); device_init_wakeup(&pdev->dev, false);