On Mon, Apr 3, 2017 at 10:12 AM, Horia Geantă <horia.geanta@xxxxxxx> 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> Acked-by: Rob Herring <robh@xxxxxxxxxx>