On 4/5/2017 5:14 PM, Herbert Xu wrote: > On Mon, Apr 03, 2017 at 06:12:04PM +0300, Horia Geantă wrote: >> The way Job Ring platform devices are created and released does not >> allow for multiple create-release cycles. >> >> JR0 Platform device creation error >> JR0 Platform device creation error >> caam 2100000.caam: no queues configured, terminating >> caam: probe of 2100000.caam failed with error -12 >> >> The reason is that platform devices are created for each job ring: >> >> for_each_available_child_of_node(nprop, np) >> if (of_device_is_compatible(np, "fsl,sec-v4.0-job-ring") || >> of_device_is_compatible(np, "fsl,sec4.0-job-ring")) { >> ctrlpriv->jrpdev[ring] = >> of_platform_device_create(np, NULL, dev); >> >> which sets OF_POPULATED on the device node, but then it cleans these up: >> >> /* Remove platform devices for JobRs */ >> for (ring = 0; ring < ctrlpriv->total_jobrs; ring++) { >> if (ctrlpriv->jrpdev[ring]) >> of_device_unregister(ctrlpriv->jrpdev[ring]); >> } >> >> which leaves OF_POPULATED set. >> >> Use of_platform_populate / of_platform_depopulate instead. >> This allows for a bit of driver clean-up, jrpdev is no longer needed. >> >> Logic changes a bit too: >> -exit in case of_platform_populate fails, since currently even QI backend >> depends on JR; true, we no longer support the case when "some" of the JR >> DT nodes are incorrect >> -when cleaning up, caam_remove() would also depopulate RTIC in case >> it would have been populated somewhere else - not the case for now >> >> Fixes: 313ea293e9c4d ("crypto: caam - Add Platform driver for Job Ring") >> Reported-by: Russell King <rmk+kernel@xxxxxxxxxxxxxxx> >> Suggested-by: Rob Herring <robh+dt@xxxxxxxxxx> >> Signed-off-by: Horia Geantă <horia.geanta@xxxxxxx> >> --- >> Not sending this directly to -stable, since it does not apply cleanly. > > Patch applied. I forced it to apply on the crypto tree, then merged > it forward to cryptodev. Please check the end result and let me know > if it's wrong. > Looks fine. Thanks, Horia