search for: nv50_dma_push_max_length

Displaying 5 results from an estimated 5 matches for "nv50_dma_push_max_length".

2023 Dec 03
1
PR: nv50 IB-mode DMA crash fixes
...ity of creating a PR on the public gitlab mirror in order to have a URL to point to: https://gitlab.com/freedesktop-mirror/drm/-/merge_requests/1 copypasting the commit message: nv50 IB-mode DMA crash fixes Address the following nv50 IB-mode dma code errors: 1) nouveau_drm.h labels NV50_DMA_PUSH_MAX_LENGTH "Maximum push buffer size". Perhaps originally true(?), but nothing suggests, guards, or enforces the assumption, and it's not true in practice. 0x7fffff is not the maximum possible push buffer size submitted for IB-mode DMA transfers, nor is it the maximum legal DMA...
2023 Aug 23
1
[PATCH drm-misc-next v2] drm/nouveau: uapi: don't pass NO_PREFETCH flag implicitly
...chan, u64 offset, u32 length, + bool no_prefetch) { struct nvif_user *user = &chan->drm->client.device.user; struct nouveau_bo *pb = chan->push.buffer; int ip = (chan->dma.ib_put * 2) + chan->dma.ib_base; BUG_ON(chan->dma.ib_free < 1); + WARN_ON(length > NV50_DMA_PUSH_MAX_LENGTH); nouveau_bo_wr32(pb, ip++, lower_32_bits(offset)); - nouveau_bo_wr32(pb, ip++, upper_32_bits(offset) | length << 8); + nouveau_bo_wr32(pb, ip++, upper_32_bits(offset) | length << 8 | + (no_prefetch ? (1 << 31) : 0)); chan->dma.ib_put = (chan->dma.ib_put + 1) &...
2023 Aug 23
1
[PATCH drm-misc-next] drm/nouveau: uapi: don't pass NO_PREFETCH flag implicitly
...> struct nvif_user *user = &chan->drm->client.device.user; > struct nouveau_bo *pb = chan->push.buffer; > int ip = (chan->dma.ib_put * 2) + chan->dma.ib_base; > > BUG_ON(chan->dma.ib_free < 1); > + WARN_ON(length > NV50_DMA_PUSH_MAX_LENGTH); > > nouveau_bo_wr32(pb, ip++, lower_32_bits(offset)); > - nouveau_bo_wr32(pb, ip++, upper_32_bits(offset) | length << 8); > + nouveau_bo_wr32(pb, ip++, upper_32_bits(offset) | length << 8 | > + (prefetch ? 0 : (1 << 31)));...
2023 Aug 22
2
[PATCH drm-misc-next] drm/nouveau: uapi: don't pass NO_PREFETCH flag implicitly
...l *chan, u64 offset, u32 length, + bool prefetch) { struct nvif_user *user = &chan->drm->client.device.user; struct nouveau_bo *pb = chan->push.buffer; int ip = (chan->dma.ib_put * 2) + chan->dma.ib_base; BUG_ON(chan->dma.ib_free < 1); + WARN_ON(length > NV50_DMA_PUSH_MAX_LENGTH); nouveau_bo_wr32(pb, ip++, lower_32_bits(offset)); - nouveau_bo_wr32(pb, ip++, upper_32_bits(offset) | length << 8); + nouveau_bo_wr32(pb, ip++, upper_32_bits(offset) | length << 8 | + (prefetch ? 0 : (1 << 31))); chan->dma.ib_put = (chan->dma.ib_put + 1) & ch...
2023 Dec 04
1
PR: nv50 IB-mode DMA crash fixes
On Sun, Dec 3, 2023 at 11:37?AM Monty Montgomery <xiphmont at gmail.com> wrote: > 1) The nv50 DMA code clearly believed push buffers could not (or > should not) exceed NV50_DMA_PUSH_MAX_LENGTH, when my analysis logging > shows that they regularly exceed this maximum by an order of magnitude > or more. Was the assumption originally true? If so, when/why did it > change? Is the more correct fix to enforce individual pushbuf size > limits? The BO itself can be artibrarily si...