void nvhost_mutex_unlock(struct nvhost_cpuaccess *ctx, unsigned int idx) { struct nvhost_master *dev = cpuaccess_to_dev(ctx); void __iomem *sync_regs = dev->sync_aperture; writel(0, sync_regs + (HOST1X_SYNC_MLOCK_0 + idx * 4)); nvhost_module_idle(&dev->mod); }
static int t20_cpuaccess_mutex_try_lock(struct nvhost_cpuaccess *ctx, unsigned int idx) { struct nvhost_master *dev = cpuaccess_to_dev(ctx); void __iomem *sync_regs = dev->sync_aperture; /* mlock registers returns 0 when the lock is aquired. * writing 0 clears the lock. */ return !!readl(sync_regs + (HOST1X_SYNC_MLOCK_0 + idx * 4)); }
void nvhost_read_module_regs(struct nvhost_cpuaccess *ctx, u32 module, u32 offset, size_t size, void *values) { struct nvhost_master *dev = cpuaccess_to_dev(ctx); void __iomem *p = ctx->regs[module] + offset; u32* out = (u32*)values; BUG_ON(size & 3); size >>= 2; nvhost_module_busy(&dev->mod); while (size--) { *(out++) = readl(p); p += 4; } rmb(); nvhost_module_idle(&dev->mod); }
int nvhost_mutex_try_lock(struct nvhost_cpuaccess *ctx, unsigned int idx) { struct nvhost_master *dev = cpuaccess_to_dev(ctx); void __iomem *sync_regs = dev->sync_aperture; u32 reg; /* mlock registers returns 0 when the lock is aquired. * writing 0 clears the lock. */ nvhost_module_busy(&dev->mod); reg = readl(sync_regs + (HOST1X_SYNC_MLOCK_0 + idx * 4)); if (reg) { nvhost_module_idle(&dev->mod); return -EBUSY; } return 0; }
void nvhost_write_module_regs(struct nvhost_cpuaccess *ctx, u32 module, u32 offset, size_t size, const void *values) { struct nvhost_master *dev = cpuaccess_to_dev(ctx); void __iomem *p = ctx->regs[module] + offset; const u32* in = (const u32*)values; BUG_ON(size & 3); size >>= 2; nvhost_module_busy(&dev->mod); while (size--) { writel(*(in++), p); p += 4; } wmb(); nvhost_module_idle(&dev->mod); }