forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/bus/fsl-mc/mc-io.c
....@@ -82,7 +82,7 @@
8282 mc_io->portal_phys_addr = mc_portal_phys_addr;
8383 mc_io->portal_size = mc_portal_size;
8484 if (flags & FSL_MC_IO_ATOMIC_CONTEXT_PORTAL)
85
- spin_lock_init(&mc_io->spinlock);
85
+ raw_spin_lock_init(&mc_io->spinlock);
8686 else
8787 mutex_init(&mc_io->mutex);
8888
....@@ -97,12 +97,12 @@
9797 return -EBUSY;
9898 }
9999
100
- mc_portal_virt_addr = devm_ioremap_nocache(dev,
100
+ mc_portal_virt_addr = devm_ioremap(dev,
101101 mc_portal_phys_addr,
102102 mc_portal_size);
103103 if (!mc_portal_virt_addr) {
104104 dev_err(dev,
105
- "devm_ioremap_nocache failed for MC portal %pa\n",
105
+ "devm_ioremap failed for MC portal %pa\n",
106106 &mc_portal_phys_addr);
107107 return -ENXIO;
108108 }
....@@ -214,9 +214,19 @@
214214 if (error < 0)
215215 goto error_cleanup_resource;
216216
217
+ dpmcp_dev->consumer_link = device_link_add(&mc_dev->dev,
218
+ &dpmcp_dev->dev,
219
+ DL_FLAG_AUTOREMOVE_CONSUMER);
220
+ if (!dpmcp_dev->consumer_link) {
221
+ error = -EINVAL;
222
+ goto error_cleanup_mc_io;
223
+ }
224
+
217225 *new_mc_io = mc_io;
218226 return 0;
219227
228
+error_cleanup_mc_io:
229
+ fsl_destroy_mc_io(mc_io);
220230 error_cleanup_resource:
221231 fsl_mc_resource_free(resource);
222232 return error;
....@@ -249,6 +259,8 @@
249259
250260 fsl_destroy_mc_io(mc_io);
251261 fsl_mc_resource_free(resource);
262
+
263
+ dpmcp_dev->consumer_link = NULL;
252264 }
253265 EXPORT_SYMBOL_GPL(fsl_mc_portal_free);
254266