Rev 6283 | Rev 6320 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 6283 | Rev 6296 | ||
---|---|---|---|
Line 86... | Line 86... | ||
86 | stride = ALIGN(stride, 64); |
86 | stride = ALIGN(stride, 64); |
87 | size = stride * ALIGN(mode->vdisplay, 2); |
87 | size = stride * ALIGN(mode->vdisplay, 2); |
88 | } |
88 | } |
89 | 89 | ||
Line 90... | Line 90... | ||
90 | dbgprintf("size %x stride %x\n", size, stride); |
90 | DRM_DEBUG_KMS("size %x stride %x\n", size, stride); |
Line 91... | Line 91... | ||
91 | 91 | ||
92 | if(intel_fb == NULL || size > intel_fb->obj->base.size) |
92 | if(intel_fb == NULL || size > intel_fb->obj->base.size) |
93 | { |
93 | { |
94 | struct drm_mode_fb_cmd2 mode_cmd = {}; |
94 | struct drm_mode_fb_cmd2 mode_cmd = {}; |
Line 146... | Line 146... | ||
146 | obj->fence_dirty = true; |
146 | obj->fence_dirty = true; |
147 | obj->stride = stride; |
147 | obj->stride = stride; |
148 | }; |
148 | }; |
149 | 149 | ||
Line -... | Line 150... | ||
- | 150 | if (obj->base.name == 0) |
|
- | 151 | { |
|
- | 152 | int ret; |
|
- | 153 | ||
- | 154 | mutex_lock(&dev->object_name_lock); |
|
- | 155 | idr_preload(GFP_KERNEL); |
|
- | 156 | ret = idr_alloc(&dev->object_name_idr, &obj->base, 1, 0, GFP_NOWAIT); |
|
- | 157 | idr_preload_end(); |
|
- | 158 | mutex_unlock(&dev->object_name_lock); |
|
- | 159 | obj->base.name = ret; |
|
- | 160 | obj->base.handle_count++; |
|
- | 161 | DRM_DEBUG_KMS("%s allocate fb name %d\n", __FUNCTION__, obj->base.name ); |
|
- | 162 | } |
|
- | 163 | ||
150 | fb->width = mode->hdisplay; |
164 | fb->width = mode->hdisplay; |
151 | fb->height = mode->vdisplay; |
165 | fb->height = mode->vdisplay; |
Line 152... | Line 166... | ||
152 | 166 | ||
153 | fb->pitches[0] = |
167 | fb->pitches[0] = |
Line 171... | Line 185... | ||
171 | 185 | ||
Line 172... | Line 186... | ||
172 | static int set_mode(struct drm_device *dev, struct drm_connector *connector, |
186 | static int set_mode(struct drm_device *dev, struct drm_connector *connector, |
173 | struct drm_crtc *crtc, videomode_t *reqmode, bool strict) |
187 | struct drm_crtc *crtc, videomode_t *reqmode, bool strict) |
174 | { |
188 | { |
175 | struct drm_i915_private *dev_priv = dev->dev_private; |
189 | struct drm_i915_private *dev_priv = dev->dev_private; |
176 | struct drm_mode_config *config = &dev->mode_config; |
190 | struct drm_mode_config *config = &dev->mode_config; |
177 | struct drm_display_mode *mode = NULL, *tmpmode; |
191 | struct drm_display_mode *mode = NULL, *tmpmode; |
178 | struct drm_connector *tmpc; |
192 | struct drm_connector *tmpc; |
179 | struct drm_framebuffer *fb = NULL; |
193 | struct drm_framebuffer *fb = NULL; |
180 | struct drm_mode_set set; |
194 | struct drm_mode_set set; |
181 | char con_edid[128]; |
195 | char con_edid[128]; |
182 | int ret; |
196 | int ret; |
Line 183... | Line 197... | ||
183 | 197 | ||
Line 239... | Line 253... | ||
239 | DRM_DEBUG_KMS("set mode %dx%d: crtc %d connector %s\n" |
253 | DRM_DEBUG_KMS("set mode %dx%d: crtc %d connector %s\n" |
240 | "monitor: %s model %x serial number %u\n", |
254 | "monitor: %s model %x serial number %u\n", |
241 | mode->hdisplay, mode->vdisplay, |
255 | mode->hdisplay, mode->vdisplay, |
242 | crtc->base.id, connector->name, |
256 | crtc->base.id, connector->name, |
243 | manufacturer_name(con_edid + 0x08), |
257 | manufacturer_name(con_edid + 0x08), |
244 | (unsigned short)(con_edid[0x0A] + (con_edid[0x0B] << 8)), |
258 | (unsigned short)(con_edid[0x0A] + (con_edid[0x0B] << 8)), |
245 | (unsigned int)(con_edid[0x0C] + (con_edid[0x0D] << 8) |
259 | (unsigned int)(con_edid[0x0C] + (con_edid[0x0D] << 8) |
246 | + (con_edid[0x0E] << 16) + (con_edid[0x0F] << 24))); |
260 | + (con_edid[0x0E] << 16) + (con_edid[0x0F] << 24))); |
Line 247... | Line 261... | ||
247 | 261 | ||
Line 248... | Line 262... | ||
248 | drm_mode_set_crtcinfo(mode, CRTC_INTERLACE_HALVE_V); |
262 | drm_mode_set_crtcinfo(mode, CRTC_INTERLACE_HALVE_V); |
249 | 263 | ||
Line 542... | Line 556... | ||
542 | struct drm_connector *connector = NULL; |
556 | struct drm_connector *connector = NULL; |
543 | struct drm_crtc *crtc = NULL; |
557 | struct drm_crtc *crtc = NULL; |
544 | struct drm_plane *plane; |
558 | struct drm_plane *plane; |
545 | 559 | ||
Line 546... | Line 560... | ||
546 | int ret; |
560 | int ret; |
547 | ENTER(); |
561 | ENTER(); |
Line 548... | Line 562... | ||
548 | 562 | ||
549 | drm_for_each_plane(plane, dev) |
563 | drm_for_each_plane(plane, dev) |
550 | { |
564 | { |
Line 559... | Line 573... | ||
559 | DRM_DEBUG_KMS("No active connectors!\n"); |
573 | DRM_DEBUG_KMS("No active connectors!\n"); |
560 | return -1; |
574 | return -1; |
561 | }; |
575 | }; |
562 | 576 | ||
Line 563... | Line -... | ||
563 | /* |
- | |
564 | mutex_lock(&dev->object_name_lock); |
- | |
565 | idr_preload(GFP_KERNEL); |
- | |
566 | if (!main_fb_obj->base.name) { |
- | |
567 | ret = idr_alloc(&dev->object_name_idr, &main_fb_obj->base, 1, 0, GFP_NOWAIT); |
- | |
568 | - | ||
569 | main_fb_obj->base.name = ret; |
- | |
570 | main_fb_obj->base.handle_count++; |
- | |
571 | DRM_DEBUG_KMS("%s allocate fb name %d\n", __FUNCTION__, main_fb_obj->base.name ); |
- | |
572 | } |
- | |
573 | idr_preload_end(); |
- | |
574 | mutex_unlock(&dev->object_name_lock); |
- | |
575 | */ |
- | |
576 | dummy_fb_page = AllocPage(); |
577 | dummy_fb_page = AllocPage(); |
Line 577... | Line 578... | ||
577 | 578 | ||
578 | os_display = GetDisplay(); |
579 | os_display = GetDisplay(); |
579 | os_display->ddev = dev; |
580 | os_display->ddev = dev; |
Line 818... | Line 819... | ||
818 | fb->crtc = crtc->base.base.id; |
819 | fb->crtc = crtc->base.base.id; |
819 | fb->pipe = crtc->pipe; |
820 | fb->pipe = crtc->pipe; |
820 | } |
821 | } |
821 | safe_sti(ifl); |
822 | safe_sti(ifl); |
822 | return 0; |
823 | |
- | 824 | return 0; |
|
823 | } |
825 | } |
824 | 826 | ||
Line 825... | Line -... | ||
825 | - | ||
826 | int kolibri_framebuffer_init(struct intel_framebuffer *intel_fb) |
827 | int kolibri_framebuffer_init(struct intel_framebuffer *intel_fb) |
827 | { |
828 | { |
828 | struct kos_framebuffer *kfb; |
829 | struct kos_framebuffer *kfb; |
829 | addr_t dummy_table; |
830 | addr_t dummy_table; |
830 | addr_t *pt_addr = NULL; |
831 | addr_t *pt_addr = NULL; |
831 | int pde; |
832 | int pde; |
832 | ENTER(); |
833 | |
833 | kfb = kzalloc(sizeof(struct kos_framebuffer),0); |
834 | kfb = kzalloc(sizeof(struct kos_framebuffer),0); |
834 | kfb->private = intel_fb; |
835 | kfb->private = intel_fb; |
Line 835... | Line 836... | ||
835 | 836 | ||
836 | for(pde = 0; pde < 8; pde++) |
837 | for(pde = 0; pde < 8; pde++) |
Line 843... | Line 844... | ||
843 | kunmap((struct page*)dummy_table); |
844 | kunmap((struct page*)dummy_table); |
844 | }; |
845 | }; |
845 | 846 | ||
Line 846... | Line 847... | ||
846 | intel_fb->private = kfb; |
847 | intel_fb->private = kfb; |
847 | LEAVE(); |
848 | |
848 | return 0; |
849 | return 0; |
849 | #if 0 |
850 | #if 0 |
850 | struct sg_page_iter sg_iter; |
851 | struct sg_page_iter sg_iter; |
851 | num_pages = obj->base.size/4096; |
852 | num_pages = obj->base.size/4096; |
852 | printf("num_pages %d\n",num_pages); |
853 | printf("num_pages %d\n",num_pages); |
Line 858... | Line 859... | ||
858 | __sg_page_iter_start(&sg_iter, obj->pages->sgl, sg_nents(obj->pages->sgl), 0); |
859 | __sg_page_iter_start(&sg_iter, obj->pages->sgl, sg_nents(obj->pages->sgl), 0); |
859 | while (__sg_page_iter_next(&sg_iter)) |
860 | while (__sg_page_iter_next(&sg_iter)) |
860 | { |
861 | { |
861 | if (pt_addr == NULL) |
862 | if (pt_addr == NULL) |
862 | { |
863 | { |
863 | addr_t pt = AllocPage(); |
864 | addr_t pt = AllocPage(); |
864 | kfb->pde[pde] = pt|PG_UW; |
865 | kfb->pde[pde] = pt|PG_UW; |
865 | pde++; |
866 | pde++; |
866 | pt_addr = kmap_atomic((struct page*)pt); |
867 | pt_addr = kmap_atomic((struct page*)pt); |
867 | } |
868 | } |
868 | pt_addr[pte] = sg_page_iter_dma_address(&sg_iter)|PG_UW|PG_WRITEC; |
869 | pt_addr[pte] = sg_page_iter_dma_address(&sg_iter)|PG_UW|PG_WRITEC; |
869 | if( (pte & 15) == 0) |
870 | if( (pte & 15) == 0) |
870 | DRM_DEBUG_KMS("pte %x\n",pt_addr[pte]); |
871 | DRM_DEBUG_KMS("pte %x\n",pt_addr[pte]); |
871 | if (++pte == 1024) |
872 | if (++pte == 1024) |
872 | { |
873 | { |
873 | kunmap_atomic(pt_addr); |
874 | kunmap_atomic(pt_addr); |
874 | pt_addr = NULL; |
875 | pt_addr = NULL; |
875 | if (pde == 8) |
876 | if (pde == 8) |
876 | break; |
877 | break; |
877 | pte = 0; |
878 | pte = 0; |
878 | } |
879 | } |
879 | } |
880 | } |
Line 880... | Line 881... | ||
880 | 881 | ||
881 | if(pt_addr) |
882 | if(pt_addr) |
882 | { |
883 | { |
883 | for(;pte < 1024; pte++) |
884 | for(;pte < 1024; pte++) |
884 | pt_addr[pte] = dummy_page|PG_UW; |
885 | pt_addr[pte] = dummy_page|PG_UW; |
885 | kunmap_atomic(pt_addr); |
886 | kunmap_atomic(pt_addr); |
886 | } |
887 | } |
887 | #endif |
888 | #endif |
Line 888... | Line 889... | ||
888 | }; |
889 | }; |
889 | 890 | ||
Line 899... | Line 900... | ||
899 | num_pages = intel_fb->obj->base.size/4096; |
900 | num_pages = intel_fb->obj->base.size/4096; |
900 | pfn = dev_priv->gtt.mappable_base + i915_gem_obj_ggtt_offset(intel_fb->obj); |
901 | pfn = dev_priv->gtt.mappable_base + i915_gem_obj_ggtt_offset(intel_fb->obj); |
901 | 902 | ||
Line 902... | Line 903... | ||
902 | while(num_pages) |
903 | while(num_pages) |
903 | { |
904 | { |
904 | if (pt_addr == NULL) |
905 | if (pt_addr == NULL) |
905 | { |
906 | { |
906 | addr_t pt = kfb->pde[pde] & 0xFFFFF000; |
907 | addr_t pt = kfb->pde[pde] & 0xFFFFF000; |
907 | pde++; |
908 | pde++; |
908 | pt_addr = kmap_atomic((struct page*)pt); |
909 | pt_addr = kmap_atomic((struct page*)pt); |