Hi Nicolas, On Mon, 2021-08-23 at 16:35 +0200, Nicolas Frattaroli wrote: [...] > > I'm not too fond of reimplementing half a reset controller in here. > > The reset framework does not support synchronized (de)assertion of > > multiple reset controls, I wonder if this would be useful to add. > > Without having thought about this too hard, I could imagine this as an > > extension to the bulk API, or possibly a call to join multiple reset > > controls into a reset control array. > > I agree, the code required for synchronised reset seems to be a good > candidate for a generalised solution elsewhere. > However, I'm not sure if I'm the right candidate to design this API > as my first kernel contribution when the board I'm currently testing > this with doesn't even utilise the synchronized reset. > > If I come across an opportunity to test synchronised resets, I'll > definitely look into refactoring this. I'd also be happy to hear of > any other driver which is currently implementing its own synchronised > reset. [...] > > What is the reason for the different delays in > > rockchip_snd_xfer_sync_reset() and rockchip_snd_reset()? > > > > Simply put: I have no idea. This is what downstream does, and it > appears to work for me. The git history of the downstream kernel > also doesn't tell me anything about why the sync reset is 150 > and this one is 1. > > I've got no device to test the sync reset with at the moment so > I'm wary of playing with the delay value. Fair points. You could remove the untested synchronized reset support for now; that would allow to get rid of the rockchip,cru device tree property, which is only required to let this driver access the CRU registers behind the clock/reset controller driver's back. [...] > > > + if (i2s_tdm->clk_trcm != TRCM_TXRX) { > > > + cru_node = of_parse_phandle(node, "rockchip,cru", 0); > > > + i2s_tdm->cru_base = of_iomap(cru_node, 0); > > > > This is a bit ugly if there is another driver sitting on the > > rockchip,cru compatible node. Which reset controller driver is backing > > the reset controls below? > > I'm not sure if I understand the question (I only just today learned that > reset controls have drivers) but I think the reset it is using in the > Quartz64 dts is backed by rk3568-cru. Let me know if I misunderstood you. That's the one, thanks. The devm_reset_control_get() calls below follow the "reset-names" and "resets" device tree properties. Those point (&cru) to a clock-controller node with compatible = "rockchip,rk3568-cru". The corresponding driver is drivers/clk/rockchip/clk-rk3568.c, so the reset controller is provided by the reset_controller_register() call in drivers/clk/rockchip/softrst.c. regards Philipp