forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/video/fbdev/gbefb.c
....@@ -39,9 +39,7 @@
3939 int valid;
4040 };
4141
42
-#ifdef CONFIG_SGI_IP32
4342 #define GBE_BASE 0x16000000 /* SGI O2 */
44
-#endif
4543
4644 /* macro for fastest write-though access to the framebuffer */
4745 #ifdef CONFIG_MIPS
....@@ -50,10 +48,6 @@
5048 #else
5149 #define pgprot_fb(_prot) (((_prot) & (~_CACHE_MASK)) | _CACHE_CACHABLE_NO_WA)
5250 #endif
53
-#endif
54
-#ifdef CONFIG_X86
55
-#define pgprot_fb(_prot) (((_prot) & ~_PAGE_CACHE_MASK) | \
56
- cachemode2protval(_PAGE_CACHE_MODE_UC_MINUS))
5751 #endif
5852
5953 /*
....@@ -279,7 +273,7 @@
279273 val = 0;
280274 SET_GBE_FIELD(VT_XY, FREEZE, val, 1);
281275 gbe->vt_xy = val;
282
- udelay(10000);
276
+ mdelay(10);
283277 for (i = 0; i < 10000; i++) {
284278 val = gbe->vt_xy;
285279 if (GET_GBE_FIELD(VT_XY, FREEZE, val) != 1)
....@@ -294,7 +288,7 @@
294288 val = gbe->dotclock;
295289 SET_GBE_FIELD(DOTCLK, RUN, val, 0);
296290 gbe->dotclock = val;
297
- udelay(10000);
291
+ mdelay(10);
298292 for (i = 0; i < 10000; i++) {
299293 val = gbe->dotclock;
300294 if (GET_GBE_FIELD(DOTCLK, RUN, val))
....@@ -331,7 +325,7 @@
331325 val = gbe->dotclock;
332326 SET_GBE_FIELD(DOTCLK, RUN, val, 1);
333327 gbe->dotclock = val;
334
- udelay(10000);
328
+ mdelay(10);
335329 for (i = 0; i < 10000; i++) {
336330 val = gbe->dotclock;
337331 if (GET_GBE_FIELD(DOTCLK, RUN, val) != 1)
....@@ -346,7 +340,7 @@
346340 val = 0;
347341 SET_GBE_FIELD(VT_XY, FREEZE, val, 0);
348342 gbe->vt_xy = val;
349
- udelay(10000);
343
+ mdelay(10);
350344 for (i = 0; i < 10000; i++) {
351345 val = gbe->vt_xy;
352346 if (GET_GBE_FIELD(VT_XY, FREEZE, val))
....@@ -547,7 +541,7 @@
547541 SET_GBE_FIELD(DOTCLK, P, val, timing->pll_p);
548542 SET_GBE_FIELD(DOTCLK, RUN, val, 0); /* do not start yet */
549543 gbe->dotclock = val;
550
- udelay(10000);
544
+ mdelay(10);
551545
552546 /* setup pixel counter */
553547 val = 0;
....@@ -1018,9 +1012,10 @@
10181012
10191013 /* remap using the fastest write-through mode on architecture */
10201014 /* try not polluting the cache when possible */
1015
+#ifdef CONFIG_MIPS
10211016 pgprot_val(vma->vm_page_prot) =
10221017 pgprot_fb(pgprot_val(vma->vm_page_prot));
1023
-
1018
+#endif
10241019 /* VM_IO | VM_DONTEXPAND | VM_DONTDUMP are set by remap_pfn_range() */
10251020
10261021 /* look for the starting tile */
....@@ -1049,7 +1044,7 @@
10491044 return 0;
10501045 }
10511046
1052
-static struct fb_ops gbefb_ops = {
1047
+static const struct fb_ops gbefb_ops = {
10531048 .owner = THIS_MODULE,
10541049 .fb_check_var = gbefb_check_var,
10551050 .fb_set_par = gbefb_set_par,
....@@ -1162,9 +1157,9 @@
11621157 }
11631158 gbe_revision = gbe->ctrlstat & 15;
11641159
1165
- gbe_tiles.cpu =
1166
- dma_alloc_coherent(NULL, GBE_TLB_SIZE * sizeof(uint16_t),
1167
- &gbe_tiles.dma, GFP_KERNEL);
1160
+ gbe_tiles.cpu = dmam_alloc_coherent(&p_dev->dev,
1161
+ GBE_TLB_SIZE * sizeof(uint16_t),
1162
+ &gbe_tiles.dma, GFP_KERNEL);
11681163 if (!gbe_tiles.cpu) {
11691164 printk(KERN_ERR "gbefb: couldn't allocate tiles table\n");
11701165 ret = -ENOMEM;
....@@ -1178,19 +1173,20 @@
11781173 if (!gbe_mem) {
11791174 printk(KERN_ERR "gbefb: couldn't map framebuffer\n");
11801175 ret = -ENOMEM;
1181
- goto out_tiles_free;
1176
+ goto out_release_mem_region;
11821177 }
11831178
11841179 gbe_dma_addr = 0;
11851180 } else {
11861181 /* try to allocate memory with the classical allocator
11871182 * this has high chance to fail on low memory machines */
1188
- gbe_mem = dma_alloc_wc(NULL, gbe_mem_size, &gbe_dma_addr,
1189
- GFP_KERNEL);
1183
+ gbe_mem = dmam_alloc_attrs(&p_dev->dev, gbe_mem_size,
1184
+ &gbe_dma_addr, GFP_KERNEL,
1185
+ DMA_ATTR_WRITE_COMBINE);
11901186 if (!gbe_mem) {
11911187 printk(KERN_ERR "gbefb: couldn't allocate framebuffer memory\n");
11921188 ret = -ENOMEM;
1193
- goto out_tiles_free;
1189
+ goto out_release_mem_region;
11941190 }
11951191
11961192 gbe_mem_phys = (unsigned long) gbe_dma_addr;
....@@ -1237,11 +1233,6 @@
12371233
12381234 out_gbe_unmap:
12391235 arch_phys_wc_del(par->wc_cookie);
1240
- if (gbe_dma_addr)
1241
- dma_free_wc(NULL, gbe_mem_size, gbe_mem, gbe_mem_phys);
1242
-out_tiles_free:
1243
- dma_free_coherent(NULL, GBE_TLB_SIZE * sizeof(uint16_t),
1244
- (void *)gbe_tiles.cpu, gbe_tiles.dma);
12451236 out_release_mem_region:
12461237 release_mem_region(GBE_BASE, sizeof(struct sgi_gbe));
12471238 out_release_framebuffer:
....@@ -1258,10 +1249,6 @@
12581249 unregister_framebuffer(info);
12591250 gbe_turn_off();
12601251 arch_phys_wc_del(par->wc_cookie);
1261
- if (gbe_dma_addr)
1262
- dma_free_wc(NULL, gbe_mem_size, gbe_mem, gbe_mem_phys);
1263
- dma_free_coherent(NULL, GBE_TLB_SIZE * sizeof(uint16_t),
1264
- (void *)gbe_tiles.cpu, gbe_tiles.dma);
12651252 release_mem_region(GBE_BASE, sizeof(struct sgi_gbe));
12661253 gbefb_remove_sysfs(&p_dev->dev);
12671254 framebuffer_release(info);
....@@ -1282,7 +1269,7 @@
12821269 static int __init gbefb_init(void)
12831270 {
12841271 int ret = platform_driver_register(&gbefb_driver);
1285
- if (!ret) {
1272
+ if (IS_ENABLED(CONFIG_SGI_IP32) && !ret) {
12861273 gbefb_device = platform_device_alloc("gbefb", 0);
12871274 if (gbefb_device) {
12881275 ret = platform_device_add(gbefb_device);