forked from Minki/linux
ec360607a2
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
Cc: <stable@vger.kernel.org>
Fixes:
|
||
---|---|---|
.. | ||
caamalg_desc.c | ||
caamalg_desc.h | ||
caamalg.c | ||
caamhash.c | ||
caampkc.c | ||
caampkc.h | ||
caamrng.c | ||
compat.h | ||
ctrl.c | ||
ctrl.h | ||
desc_constr.h | ||
desc.h | ||
error.c | ||
error.h | ||
intern.h | ||
jr.c | ||
jr.h | ||
Kconfig | ||
key_gen.c | ||
key_gen.h | ||
Makefile | ||
pdb.h | ||
pkc_desc.c | ||
regs.h | ||
sg_sw_sec4.h |