forked from ~ljy/RK356X_SDK_RELEASE

hc
2023-12-08 01573e231f18eb2d99162747186f59511f56b64d
kernel/drivers/gpu/drm/qxl/qxl_image.c
....@@ -124,25 +124,26 @@
124124 wrong (check the bitmaps are sent correctly
125125 first) */
126126
127
- ptr = qxl_bo_kmap_atomic_page(qdev, chunk_bo, 0);
127
+ ptr = qxl_bo_kmap_local_page(qdev, chunk_bo, 0);
128128 chunk = ptr;
129129 chunk->data_size = height * chunk_stride;
130130 chunk->prev_chunk = 0;
131131 chunk->next_chunk = 0;
132
- qxl_bo_kunmap_atomic_page(qdev, chunk_bo, ptr);
132
+ qxl_bo_kunmap_local_page(qdev, chunk_bo, ptr);
133133
134134 {
135135 void *k_data, *i_data;
136136 int remain;
137137 int page;
138138 int size;
139
+
139140 if (stride == linesize && chunk_stride == stride) {
140141 remain = linesize * height;
141142 page = 0;
142143 i_data = (void *)data;
143144
144145 while (remain > 0) {
145
- ptr = qxl_bo_kmap_atomic_page(qdev, chunk_bo, page << PAGE_SHIFT);
146
+ ptr = qxl_bo_kmap_local_page(qdev, chunk_bo, page << PAGE_SHIFT);
146147
147148 if (page == 0) {
148149 chunk = ptr;
....@@ -156,13 +157,14 @@
156157
157158 memcpy(k_data, i_data, size);
158159
159
- qxl_bo_kunmap_atomic_page(qdev, chunk_bo, ptr);
160
+ qxl_bo_kunmap_local_page(qdev, chunk_bo, ptr);
160161 i_data += size;
161162 remain -= size;
162163 page++;
163164 }
164165 } else {
165
- unsigned page_base, page_offset, out_offset;
166
+ unsigned int page_base, page_offset, out_offset;
167
+
166168 for (i = 0 ; i < height ; ++i) {
167169 i_data = (void *)data + i * stride;
168170 remain = linesize;
....@@ -173,10 +175,10 @@
173175 page_offset = offset_in_page(out_offset);
174176 size = min((int)(PAGE_SIZE - page_offset), remain);
175177
176
- ptr = qxl_bo_kmap_atomic_page(qdev, chunk_bo, page_base);
178
+ ptr = qxl_bo_kmap_local_page(qdev, chunk_bo, page_base);
177179 k_data = ptr + page_offset;
178180 memcpy(k_data, i_data, size);
179
- qxl_bo_kunmap_atomic_page(qdev, chunk_bo, ptr);
181
+ qxl_bo_kunmap_local_page(qdev, chunk_bo, ptr);
180182 remain -= size;
181183 i_data += size;
182184 out_offset += size;
....@@ -187,7 +189,7 @@
187189 qxl_bo_kunmap(chunk_bo);
188190
189191 image_bo = dimage->bo;
190
- ptr = qxl_bo_kmap_atomic_page(qdev, image_bo, 0);
192
+ ptr = qxl_bo_kmap_local_page(qdev, image_bo, 0);
191193 image = ptr;
192194
193195 image->descriptor.id = 0;
....@@ -210,7 +212,7 @@
210212 break;
211213 default:
212214 DRM_ERROR("unsupported image bit depth\n");
213
- qxl_bo_kunmap_atomic_page(qdev, image_bo, ptr);
215
+ qxl_bo_kunmap_local_page(qdev, image_bo, ptr);
214216 return -EINVAL;
215217 }
216218 image->u.bitmap.flags = QXL_BITMAP_TOP_DOWN;
....@@ -220,7 +222,7 @@
220222 image->u.bitmap.palette = 0;
221223 image->u.bitmap.data = qxl_bo_physical_address(qdev, chunk_bo, 0);
222224
223
- qxl_bo_kunmap_atomic_page(qdev, image_bo, ptr);
225
+ qxl_bo_kunmap_local_page(qdev, image_bo, ptr);
224226
225227 return 0;
226228 }