Lines Matching +full:min +full:- +full:len

32 	case IMEM: return falcon->func->imem_dma;  in nvkm_falcon_dma()
33 case DMEM: return falcon->func->dmem_dma; in nvkm_falcon_dma()
41 enum nvkm_falcon_mem mem_type, u32 mem_base, int len, bool sec) in nvkm_falcon_dma_wr() argument
50 if (WARN_ON(!dma->xfer)) in nvkm_falcon_dma_wr()
51 return -EINVAL; in nvkm_falcon_dma_wr()
58 FLCN_DBG(falcon, "%s %08x <- %08x bytes at %08x (%010llx %08x)", in nvkm_falcon_dma_wr()
59 type, mem_base, len, dma_base, dma_addr - dma_base, dma_start); in nvkm_falcon_dma_wr()
60 if (WARN_ON(!len || (len & (dmalen - 1)))) in nvkm_falcon_dma_wr()
61 return -EINVAL; in nvkm_falcon_dma_wr()
63 ret = dma->init(falcon, dma_addr, dmalen, mem_type, sec, &cmd); in nvkm_falcon_dma_wr()
69 if (len) { in nvkm_falcon_dma_wr()
70 while (len >= dmalen) { in nvkm_falcon_dma_wr()
71 dma->xfer(falcon, dst, src - dma_start, cmd); in nvkm_falcon_dma_wr()
73 if (img && nvkm_printk_ok(falcon->owner, falcon->user, NV_DBG_TRACE)) { in nvkm_falcon_dma_wr()
78 printk(KERN_INFO "%s %08x <-", type, mem_base); in nvkm_falcon_dma_wr()
80 if (x == (w - 1) || ((i + 4) == dmalen)) in nvkm_falcon_dma_wr()
81 printk(KERN_CONT " <- %08x+%08x", dma_base, in nvkm_falcon_dma_wr()
82 src + i - dma_base - (x * 4)); in nvkm_falcon_dma_wr()
88 if (nvkm_msec(falcon->owner->device, 2000, in nvkm_falcon_dma_wr()
89 if (dma->done(falcon)) in nvkm_falcon_dma_wr()
92 return -ETIMEDOUT; in nvkm_falcon_dma_wr()
96 len -= dmalen; in nvkm_falcon_dma_wr()
98 WARN_ON(len); in nvkm_falcon_dma_wr()
109 return falcon->func->imem_pio; in nvkm_falcon_pio()
111 if (!falcon->func->emem_addr || *mem_base < falcon->func->emem_addr) in nvkm_falcon_pio()
112 return falcon->func->dmem_pio; in nvkm_falcon_pio()
114 *mem_base -= falcon->func->emem_addr; in nvkm_falcon_pio()
117 return falcon->func->emem_pio; in nvkm_falcon_pio()
125 const u8 *img, u32 img_base, int len) in nvkm_falcon_pio_rd() argument
131 if (WARN_ON(!pio || !pio->rd)) in nvkm_falcon_pio_rd()
132 return -EINVAL; in nvkm_falcon_pio_rd()
134 FLCN_DBG(falcon, "%s %08x -> %08x bytes at %08x", type, mem_base, len, img_base); in nvkm_falcon_pio_rd()
135 if (WARN_ON(!len || (len & (pio->min - 1)))) in nvkm_falcon_pio_rd()
136 return -EINVAL; in nvkm_falcon_pio_rd()
138 pio->rd_init(falcon, port, mem_base); in nvkm_falcon_pio_rd()
140 xfer_len = min(len, pio->max); in nvkm_falcon_pio_rd()
141 pio->rd(falcon, port, img, xfer_len); in nvkm_falcon_pio_rd()
143 if (nvkm_printk_ok(falcon->owner, falcon->user, NV_DBG_TRACE)) { in nvkm_falcon_pio_rd()
146 printk(KERN_INFO "%s %08x ->", type, mem_base); in nvkm_falcon_pio_rd()
152 len -= xfer_len; in nvkm_falcon_pio_rd()
153 } while (len); in nvkm_falcon_pio_rd()
160 enum nvkm_falcon_mem mem_type, u32 mem_base, int len, u16 tag, bool sec) in nvkm_falcon_pio_wr() argument
166 if (WARN_ON(!pio || !pio->wr)) in nvkm_falcon_pio_wr()
167 return -EINVAL; in nvkm_falcon_pio_wr()
169 FLCN_DBG(falcon, "%s %08x <- %08x bytes at %08x", type, mem_base, len, img_base); in nvkm_falcon_pio_wr()
170 if (WARN_ON(!len || (len & (pio->min - 1)))) in nvkm_falcon_pio_wr()
171 return -EINVAL; in nvkm_falcon_pio_wr()
173 pio->wr_init(falcon, port, sec, mem_base); in nvkm_falcon_pio_wr()
175 xfer_len = min(len, pio->max); in nvkm_falcon_pio_wr()
176 pio->wr(falcon, port, img, xfer_len, tag++); in nvkm_falcon_pio_wr()
178 if (nvkm_printk_ok(falcon->owner, falcon->user, NV_DBG_TRACE)) { in nvkm_falcon_pio_wr()
181 printk(KERN_INFO "%s %08x <-", type, mem_base); in nvkm_falcon_pio_wr()
184 printk(KERN_CONT " %04x", tag - 1); in nvkm_falcon_pio_wr()
189 len -= xfer_len; in nvkm_falcon_pio_wr()
190 } while (len); in nvkm_falcon_pio_wr()
199 if (secure && !falcon->secret) { in nvkm_falcon_load_imem()
200 nvkm_warn(falcon->user, in nvkm_falcon_load_imem()
201 "writing with secure tag on a non-secure falcon!\n"); in nvkm_falcon_load_imem()
205 falcon->func->load_imem(falcon, data, start, size, tag, port, in nvkm_falcon_load_imem()
213 mutex_lock(&falcon->dmem_mutex); in nvkm_falcon_load_dmem()
215 falcon->func->load_dmem(falcon, data, start, size, port); in nvkm_falcon_load_dmem()
217 mutex_unlock(&falcon->dmem_mutex); in nvkm_falcon_load_dmem()
223 falcon->func->start(falcon); in nvkm_falcon_start()
231 ret = falcon->func->disable(falcon); in nvkm_falcon_reset()
241 const struct nvkm_falcon_func *func = falcon->func; in nvkm_falcon_oneinit()
242 const struct nvkm_subdev *subdev = falcon->owner; in nvkm_falcon_oneinit()
245 if (!falcon->addr) { in nvkm_falcon_oneinit()
246 falcon->addr = nvkm_top_addr(subdev->device, subdev->type, subdev->inst); in nvkm_falcon_oneinit()
247 if (WARN_ON(!falcon->addr)) in nvkm_falcon_oneinit()
248 return -ENODEV; in nvkm_falcon_oneinit()
252 falcon->version = reg & 0xf; in nvkm_falcon_oneinit()
253 falcon->secret = (reg >> 4) & 0x3; in nvkm_falcon_oneinit()
254 falcon->code.ports = (reg >> 8) & 0xf; in nvkm_falcon_oneinit()
255 falcon->data.ports = (reg >> 12) & 0xf; in nvkm_falcon_oneinit()
258 falcon->code.limit = (reg & 0x1ff) << 8; in nvkm_falcon_oneinit()
259 falcon->data.limit = (reg & 0x3fe00) >> 1; in nvkm_falcon_oneinit()
261 if (func->debug) { in nvkm_falcon_oneinit()
262 u32 val = nvkm_falcon_rd32(falcon, func->debug); in nvkm_falcon_oneinit()
263 falcon->debug = (val >> 20) & 0x1; in nvkm_falcon_oneinit()
275 mutex_lock(&falcon->mutex); in nvkm_falcon_put()
276 if (falcon->user == user) { in nvkm_falcon_put()
277 nvkm_debug(falcon->user, "released %s falcon\n", falcon->name); in nvkm_falcon_put()
278 falcon->user = NULL; in nvkm_falcon_put()
280 mutex_unlock(&falcon->mutex); in nvkm_falcon_put()
288 mutex_lock(&falcon->mutex); in nvkm_falcon_get()
289 if (falcon->user) { in nvkm_falcon_get()
291 falcon->name, falcon->user->name); in nvkm_falcon_get()
292 mutex_unlock(&falcon->mutex); in nvkm_falcon_get()
293 return -EBUSY; in nvkm_falcon_get()
296 nvkm_debug(user, "acquired %s falcon\n", falcon->name); in nvkm_falcon_get()
297 if (!falcon->oneinit) in nvkm_falcon_get()
299 falcon->user = user; in nvkm_falcon_get()
300 mutex_unlock(&falcon->mutex); in nvkm_falcon_get()
314 falcon->func = func; in nvkm_falcon_ctor()
315 falcon->owner = subdev; in nvkm_falcon_ctor()
316 falcon->name = name; in nvkm_falcon_ctor()
317 falcon->addr = addr; in nvkm_falcon_ctor()
318 falcon->addr2 = func->addr2; in nvkm_falcon_ctor()
319 mutex_init(&falcon->mutex); in nvkm_falcon_ctor()
320 mutex_init(&falcon->dmem_mutex); in nvkm_falcon_ctor()