int kgsl_ringbuffer_init(struct kgsl_device *device) { int status; struct kgsl_yamato_device *yamato_device = KGSL_YAMATO_DEVICE(device); struct kgsl_ringbuffer *rb = &yamato_device->ringbuffer; rb->device = device; rb->sizedwords = (2 << kgsl_cfg_rb_sizelog2quadwords); rb->blksizequadwords = kgsl_cfg_rb_blksizequadwords; /* allocate memory for ringbuffer */ status = kgsl_sharedmem_alloc_coherent(&rb->buffer_desc, (rb->sizedwords << 2)); if (status != 0) { kgsl_ringbuffer_close(rb); return status; } /* allocate memory for polling and timestamps */ /* This really can be at 4 byte alignment boundry but for using MMU * we need to make it at page boundary */ status = kgsl_sharedmem_alloc_coherent(&rb->memptrs_desc, sizeof(struct kgsl_rbmemptrs)); if (status != 0) { kgsl_ringbuffer_close(rb); return status; } /* overlay structure on memptrs memory */ rb->memptrs = (struct kgsl_rbmemptrs *) rb->memptrs_desc.hostptr; return 0; }
int kgsl_ringbuffer_init(struct kgsl_device *device) { int status; uint32_t flags; struct kgsl_ringbuffer *rb = &device->ringbuffer; KGSL_CMD_VDBG("enter (device=%p)\n", device); rb->device = device; rb->sizedwords = (2 << kgsl_cfg_rb_sizelog2quadwords); rb->blksizequadwords = kgsl_cfg_rb_blksizequadwords; /* allocate memory for ringbuffer, needs to be double octword aligned * align on page from contiguous physical memory */ flags = (KGSL_MEMFLAGS_ALIGNPAGE | KGSL_MEMFLAGS_CONPHYS | KGSL_MEMFLAGS_STRICTREQUEST); status = kgsl_sharedmem_alloc(flags, (rb->sizedwords << 2), &rb->buffer_desc); if (status != 0) { kgsl_ringbuffer_close(rb); KGSL_CMD_VDBG("return %d\n", status); return status; } /* allocate memory for polling and timestamps */ /* This really can be at 4 byte alignment boundry but for using MMU * we need to make it at page boundary */ flags = (KGSL_MEMFLAGS_ALIGNPAGE | KGSL_MEMFLAGS_CONPHYS); status = kgsl_sharedmem_alloc(flags, sizeof(struct kgsl_rbmemptrs), &rb->memptrs_desc); if (status != 0) { kgsl_ringbuffer_close(rb); KGSL_CMD_VDBG("return %d\n", status); return status; } /* last allocation of init process is made here so map all * allocations to MMU */ status = kgsl_yamato_setup_pt(device, device->mmu.defaultpagetable); if (status != 0) { kgsl_ringbuffer_close(rb); KGSL_CMD_VDBG("return %d\n", status); return status; } /* overlay structure on memptrs memory */ rb->memptrs = (struct kgsl_rbmemptrs *) rb->memptrs_desc.hostptr; rb->flags |= KGSL_FLAGS_INITIALIZED; KGSL_CMD_VDBG("return %d\n", 0); return 0; }
int kgsl_ringbuffer_init(struct kgsl_device *device) { int status; //uint32_t flags; struct kgsl_ringbuffer *rb = &device->ringbuffer; KGSL_CMD_VDBG("enter (device=%p)\n", device); rb->device = device; rb->sizedwords = (2 << kgsl_cfg_rb_sizelog2quadwords); rb->blksizequadwords = kgsl_cfg_rb_blksizequadwords; /* allocate memory for ringbuffer */ status = kgsl_sharedmem_alloc_coherent(&rb->buffer_desc, (rb->sizedwords << 2)); if (status != 0) { kgsl_ringbuffer_close(rb); KGSL_CMD_VDBG("return %d\n", status); return status; } /* allocate memory for polling and timestamps */ /* This really can be at 4 byte alignment boundry but for using MMU * we need to make it at page boundary */ status = kgsl_sharedmem_alloc_coherent(&rb->memptrs_desc, sizeof(struct kgsl_rbmemptrs)); if (status != 0) { kgsl_ringbuffer_close(rb); KGSL_CMD_VDBG("return %d\n", status); return status; } /* overlay structure on memptrs memory */ rb->memptrs = (struct kgsl_rbmemptrs *) rb->memptrs_desc.hostptr; rb->flags |= KGSL_FLAGS_INITIALIZED; KGSL_CMD_VDBG("return %d\n", 0); return 0; }
int kgsl_ringbuffer_init(struct kgsl_device *device) { int status; uint32_t flags; struct kgsl_ringbuffer *rb = &device->ringbuffer; KGSL_CMD_VDBG("enter (device=%p)\n", device); rb->device = device; rb->sizedwords = (2 << kgsl_cfg_rb_sizelog2quadwords); rb->blksizequadwords = kgsl_cfg_rb_blksizequadwords; flags = (KGSL_MEMFLAGS_ALIGNPAGE | KGSL_MEMFLAGS_CONPHYS | KGSL_MEMFLAGS_STRICTREQUEST); status = kgsl_sharedmem_alloc(flags, (rb->sizedwords << 2), &rb->buffer_desc); if (status != 0) { kgsl_ringbuffer_close(rb); KGSL_CMD_VDBG("return %d\n", status); return status; } flags = (KGSL_MEMFLAGS_ALIGNPAGE | KGSL_MEMFLAGS_CONPHYS); status = kgsl_sharedmem_alloc(flags, sizeof(struct kgsl_rbmemptrs), &rb->memptrs_desc); if (status != 0) { kgsl_ringbuffer_close(rb); KGSL_CMD_VDBG("return %d\n", status); return status; } status = kgsl_yamato_setup_pt(device, device->mmu.defaultpagetable); if (status != 0) { kgsl_ringbuffer_close(rb); KGSL_CMD_VDBG("return %d\n", status); return status; } rb->memptrs = (struct kgsl_rbmemptrs *) rb->memptrs_desc.hostptr; rb->flags |= KGSL_FLAGS_INITIALIZED; status = kgsl_ringbuffer_start(rb); if (status != 0) { kgsl_ringbuffer_close(rb); KGSL_CMD_VDBG("return %d\n", status); return status; } KGSL_CMD_VDBG("return %d\n", 0); return 0; }