.. | .. |
---|
82 | 82 | mc_io->portal_phys_addr = mc_portal_phys_addr; |
---|
83 | 83 | mc_io->portal_size = mc_portal_size; |
---|
84 | 84 | if (flags & FSL_MC_IO_ATOMIC_CONTEXT_PORTAL) |
---|
85 | | - spin_lock_init(&mc_io->spinlock); |
---|
| 85 | + raw_spin_lock_init(&mc_io->spinlock); |
---|
86 | 86 | else |
---|
87 | 87 | mutex_init(&mc_io->mutex); |
---|
88 | 88 | |
---|
.. | .. |
---|
97 | 97 | return -EBUSY; |
---|
98 | 98 | } |
---|
99 | 99 | |
---|
100 | | - mc_portal_virt_addr = devm_ioremap_nocache(dev, |
---|
| 100 | + mc_portal_virt_addr = devm_ioremap(dev, |
---|
101 | 101 | mc_portal_phys_addr, |
---|
102 | 102 | mc_portal_size); |
---|
103 | 103 | if (!mc_portal_virt_addr) { |
---|
104 | 104 | dev_err(dev, |
---|
105 | | - "devm_ioremap_nocache failed for MC portal %pa\n", |
---|
| 105 | + "devm_ioremap failed for MC portal %pa\n", |
---|
106 | 106 | &mc_portal_phys_addr); |
---|
107 | 107 | return -ENXIO; |
---|
108 | 108 | } |
---|
.. | .. |
---|
214 | 214 | if (error < 0) |
---|
215 | 215 | goto error_cleanup_resource; |
---|
216 | 216 | |
---|
| 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 | + |
---|
217 | 225 | *new_mc_io = mc_io; |
---|
218 | 226 | return 0; |
---|
219 | 227 | |
---|
| 228 | +error_cleanup_mc_io: |
---|
| 229 | + fsl_destroy_mc_io(mc_io); |
---|
220 | 230 | error_cleanup_resource: |
---|
221 | 231 | fsl_mc_resource_free(resource); |
---|
222 | 232 | return error; |
---|
.. | .. |
---|
249 | 259 | |
---|
250 | 260 | fsl_destroy_mc_io(mc_io); |
---|
251 | 261 | fsl_mc_resource_free(resource); |
---|
| 262 | + |
---|
| 263 | + dpmcp_dev->consumer_link = NULL; |
---|
252 | 264 | } |
---|
253 | 265 | EXPORT_SYMBOL_GPL(fsl_mc_portal_free); |
---|
254 | 266 | |
---|