| .. | .. |
|---|
| 109 | 109 | __LINE__, &phys, length); |
|---|
| 110 | 110 | } |
|---|
| 111 | 111 | |
|---|
| 112 | | - page_count = length >> PAGE_SHIFT; |
|---|
| 113 | | - pages = vmalloc(page_count * sizeof(struct page)); |
|---|
| 114 | | - if (!pages) { |
|---|
| 115 | | - LOG_ERROR("alloc pages failed\n"); |
|---|
| 116 | | - ret = -ENOMEM; |
|---|
| 117 | | - goto err_detach_dma_buf; |
|---|
| 118 | | - } |
|---|
| 112 | + if (args.flags & RKNPU_MEM_KERNEL_MAPPING) { |
|---|
| 113 | + page_count = length >> PAGE_SHIFT; |
|---|
| 114 | + pages = vmalloc(page_count * sizeof(struct page)); |
|---|
| 115 | + if (!pages) { |
|---|
| 116 | + LOG_ERROR("alloc pages failed\n"); |
|---|
| 117 | + ret = -ENOMEM; |
|---|
| 118 | + goto err_detach_dma_buf; |
|---|
| 119 | + } |
|---|
| 119 | 120 | |
|---|
| 120 | | - for (i = 0; i < page_count; i++) |
|---|
| 121 | | - pages[i] = &page[i]; |
|---|
| 121 | + for (i = 0; i < page_count; i++) |
|---|
| 122 | + pages[i] = &page[i]; |
|---|
| 122 | 123 | |
|---|
| 123 | | - rknpu_obj->kv_addr = vmap(pages, page_count, VM_MAP, PAGE_KERNEL); |
|---|
| 124 | | - if (!rknpu_obj->kv_addr) { |
|---|
| 125 | | - LOG_ERROR("vmap pages addr failed\n"); |
|---|
| 126 | | - ret = -ENOMEM; |
|---|
| 127 | | - goto err_free_pages; |
|---|
| 124 | + rknpu_obj->kv_addr = |
|---|
| 125 | + vmap(pages, page_count, VM_MAP, PAGE_KERNEL); |
|---|
| 126 | + if (!rknpu_obj->kv_addr) { |
|---|
| 127 | + LOG_ERROR("vmap pages addr failed\n"); |
|---|
| 128 | + ret = -ENOMEM; |
|---|
| 129 | + goto err_free_pages; |
|---|
| 130 | + } |
|---|
| 131 | + vfree(pages); |
|---|
| 132 | + pages = NULL; |
|---|
| 128 | 133 | } |
|---|
| 129 | 134 | |
|---|
| 130 | 135 | rknpu_obj->size = PAGE_ALIGN(args.size); |
|---|
| .. | .. |
|---|
| 148 | 153 | goto err_unmap_kv_addr; |
|---|
| 149 | 154 | } |
|---|
| 150 | 155 | |
|---|
| 151 | | - vfree(pages); |
|---|
| 152 | | - pages = NULL; |
|---|
| 153 | 156 | dma_buf_unmap_attachment(attachment, table, DMA_BIDIRECTIONAL); |
|---|
| 154 | 157 | dma_buf_detach(dmabuf, attachment); |
|---|
| 155 | 158 | |
|---|