psb: further clean up and some more fixes
cover psb: further clean up and some more fixes
More nuking
---
Alan Cox (9):
gma500: psb_reset actually holds lid functions
gma500: Set the TWOD base
gma500: cleanup the SDVO messages
gma500: begin tidying up the power management
gma500: prune more unused fields
gma500: Add a test ioctl for issuing 2D accel ops via user space
gma500: Fix some set up bugs found by comparing driver versions
gma500: kill some more #if 0 bits
gma500: Another file we don't need
drivers/staging/gma500/Makefile | 2 drivers/staging/gma500/mrst_crtc.c | 15 drivers/staging/gma500/mrst_lvds.c | 10 drivers/staging/gma500/psb_2d.c | 2 drivers/staging/gma500/psb_bl.c | 9 drivers/staging/gma500/psb_drv.c | 85 +-- drivers/staging/gma500/psb_drv.h | 149 ----- drivers/staging/gma500/psb_fb.c | 26 + drivers/staging/gma500/psb_gtt.c | 6 drivers/staging/gma500/psb_intel_display.c | 35 - drivers/staging/gma500/psb_intel_lvds.c | 20 - drivers/staging/gma500/psb_intel_sdvo.c | 4 drivers/staging/gma500/psb_irq.c | 178 ++--- drivers/staging/gma500/psb_lid.c | 90 +++ drivers/staging/gma500/psb_mmu.c | 61 -- drivers/staging/gma500/psb_powermgmt.c | 750 +++++++---------------- drivers/staging/gma500/psb_powermgmt.h | 55 -- drivers/staging/gma500/psb_reset.c | 90 --- drivers/staging/gma500/psb_ttm_placement_user.h | 252 -------- 19 files changed, 497 insertions(+), 1342 deletions(-) create mode 100644 drivers/staging/gma500/psb_lid.c delete mode 100644 drivers/staging/gma500/psb_reset.c delete mode 100644 drivers/staging/gma500/psb_ttm_placement_user.h
PATCH 1/9 gma500: Another file we don't need
Zap... bang
And take out a few more variables that are now dead
---
drivers/staging/gma500/psb_drv.c | 10 - drivers/staging/gma500/psb_drv.h | 1 drivers/staging/gma500/psb_irq.c | 2 drivers/staging/gma500/psb_ttm_placement_user.h | 252 ----------------------- 4 files changed, 1 insertions(+), 264 deletions(-) delete mode 100644 drivers/staging/gma500/psb_ttm_placement_user.h
drivers/staging/gma500/psb_drv.c +1 -9
@@ -38,25 +38,16 @@int drm_psb_debug;static int drm_psb_trap_pagefaults; -int drm_psb_disable_vsync =1 ;int drm_psb_no_fb; -int gfxrtdelay =2 *1000 ;static int psb_probe (struct pci_dev *pdev,const struct pci_device_id *ent);MODULE_PARM_DESC (debug,"Enable debug output" );MODULE_PARM_DESC (no_fb,"Disable FBdev" );MODULE_PARM_DESC (trap_pagefaults,"Error and reset on MMU pagefaults" ); -MODULE_PARM_DESC (disable_vsync,"Disable vsync interrupts" ); -MODULE_PARM_DESC (force_pipeb,"Forces PIPEB to become primary fb" ); -MODULE_PARM_DESC (ta_mem_size,"TA memory size in kiB" ); -MODULE_PARM_DESC (ospm,"switch for ospm support" ); -MODULE_PARM_DESC (rtpm,"Specifies Runtime PM delay for GFX" ); -MODULE_PARM_DESC (hdmi_edid,"EDID info for HDMI monitor" );module_param_named (debug, drm_psb_debug, int,0600 );module_param_named (no_fb, drm_psb_no_fb, int,0600 );module_param_named (trap_pagefaults, drm_psb_trap_pagefaults, int,0600 ); -module_param_named (rtpm, gfxrtdelay, int,0600 );static struct pci_device_id pciidlist[] = {
@@ -498,6 +489,7 @@ static int psb_do_init(struct drm_device *dev) pg->gatt_pages : PSB_TT_PRIV0_PLIMIT; tt_start = dev_priv->gatt_free_offset - pg->mmu_gatt_start; tt_pages -= tt_start >>PAGE_SHIFT ; +/* FIXME: can we kill ta_mem_size ? */ dev_priv->sizes.ta_mem_size =0 ;PSB_WSGX32 (0x00000000 ,PSB_CR_BIF_BANK0 );
drivers/staging/gma500/psb_drv.h +0 -1
@@ -769,7 +769,6 @@ extern const struct drm_connector_funcs psb_intel_lvds_connector_funcs;extern int drm_psb_debug;extern int drm_psb_no_fb; -extern int drm_psb_disable_vsync;extern int drm_idle_check_interval; #define PSB_DEBUG_GENERAL(_fmt, _arg...) \
drivers/staging/gma500/psb_irq.c +0 -2
@@ -545,7 +545,6 @@ int psb_enable_vblank(struct drm_device *dev, int pipe)spin_lock_irqsave (&dev_priv->irqmask_lock, irqflags); - drm_psb_disable_vsync =0 ;mid_enable_pipe_event (dev_priv, pipe);psb_enable_pipestat (dev_priv, pipe,PIPE_VBLANK_INTERRUPT_ENABLE );
@@ -567,7 +566,6 @@ void psb_disable_vblank(struct drm_device *dev, int pipe)spin_lock_irqsave (&dev_priv->irqmask_lock, irqflags); - drm_psb_disable_vsync =1 ;mid_disable_pipe_event (dev_priv, pipe);psb_disable_pipestat (dev_priv, pipe,PIPE_VBLANK_INTERRUPT_ENABLE );
drivers/staging/gma500/psb_ttm_placement_user.h deleted +0 -252
252 lines not on this page · raw message
PATCH 2/9 gma500: kill some more #if 0 bits
In reply to Alan Cox---
drivers/staging/gma500/psb_mmu.c | 61 -------------------------------------- 1 files changed, 0 insertions(+), 61 deletions(-)
drivers/staging/gma500/psb_mmu.c +0 -61
@@ -444,67 +444,6 @@ static inline void psb_mmu_invalidate_pte(struct psb_mmu_pt *pt, pt->v[psb_mmu_pt_index (addr)] = pt->pd->invalid_pte; } -#if 0 -static uint32_t psb_mmu_check_pte_locked (struct psb_mmu_pd *pd, -uint32_t mmu_offset) -{ -uint32_t *v; -uint32_t pfn; - - v =kmap_atomic (pd->p,KM_USER0 ); -if (!v) { -printk (KERN_INFO "Could not kmap pde page.\n" ); -return 0 ; - } - pfn = v[psb_mmu_pd_index (mmu_offset)]; -/* printk(KERN_INFO "pde is 0x%08x\n",pfn); */ -kunmap_atomic (v,KM_USER0 ); -if (((pfn &0x0F ) !=PSB_PTE_VALID )) { -printk (KERN_INFO "Strange pde at 0x%08x: 0x%08x.\n" , - mmu_offset, pfn); - } - v =ioremap (pfn &0xFFFFF000 ,4096 ); -if (!v) { -printk (KERN_INFO "Could not kmap pte page.\n" ); -return 0 ; - } - pfn = v[psb_mmu_pt_index (mmu_offset)]; -/* printk(KERN_INFO "pte is 0x%08x\n",pfn); */ -iounmap (v); -if (((pfn &0x0F ) !=PSB_PTE_VALID )) { -printk (KERN_INFO "Strange pte at 0x%08x: 0x%08x.\n" , - mmu_offset, pfn); - } -return pfn >>PAGE_SHIFT ; -} - -static void psb_mmu_check_mirrored_gtt (struct psb_mmu_pd *pd, -uint32_t mmu_offset, -uint32_t gtt_pages) -{ -uint32_t start; -uint32_t next; - -printk (KERN_INFO "Checking mirrored gtt 0x%08x %d\n" , - mmu_offset, gtt_pages); -down_read (&pd->driver->sem); - start =psb_mmu_check_pte_locked (pd, mmu_offset); - mmu_offset +=PAGE_SIZE ; - gtt_pages -=1 ; -while (gtt_pages--) { - next =psb_mmu_check_pte_locked (pd, mmu_offset); -if (next != start +1 ) { -printk (KERN_INFO -"Ptes out of order: 0x%08x, 0x%08x.\n" , - start, next); - } - start = next; - mmu_offset +=PAGE_SIZE ; - } -up_read (&pd->driver->sem); -} - -#endif void psb_mmu_mirror_gtt(struct psb_mmu_pd *pd, uint32_t mmu_offset, uint32_t gtt_start,
PATCH 3/9 gma500: Fix some set up bugs found by comparing driver versions
In reply to Alan Cox---
drivers/staging/gma500/psb_drv.c | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-)
drivers/staging/gma500/psb_drv.c +3 -0
@@ -670,6 +670,9 @@ static int psb_driver_load(struct drm_device *dev, unsigned long chipset)if (ret)return ret; +PSB_WSGX32 (0x20000000 ,PSB_CR_PDS_EXEC_BASE ); +PSB_WSGX32 (0x30000000 ,PSB_CR_BIF_3D_REQ_BASE ); +/* igd_opregion_init(&dev_priv->opregion_dev); */ acpi_video_register ();if (dev_priv->lid_state)
PATCH 4/9 gma500: Add a test ioctl for issuing 2D accel ops via user space
In reply to Alan Cox---
drivers/staging/gma500/psb_2d.c | 2 +- drivers/staging/gma500/psb_drv.h | 3 +++ drivers/staging/gma500/psb_fb.c | 26 ++++++++++++++++++++++++++ 3 files changed, 30 insertions(+), 1 deletions(-)
drivers/staging/gma500/psb_2d.c +1 -1
@@ -84,7 +84,7 @@ static int psb_2d_wait_available(struct drm_psb_private *dev_priv,/* FIXME: Remember if we expose the 2D engine to the DRM we need to serialize it with console use */ -static int psbfb_2d_submit (struct drm_psb_private *dev_priv,uint32_t *cmdbuf, +int psbfb_2d_submit (struct drm_psb_private *dev_priv,uint32_t *cmdbuf,unsigned size) {int ret =0 ;
drivers/staging/gma500/psb_drv.h +3 -0
@@ -709,6 +709,9 @@ extern int psbfb_sync(struct fb_info *info);extern void psb_spank (struct drm_psb_private *dev_priv); +extern int psbfb_2d_submit (struct drm_psb_private *dev_priv,uint32_t *cmdbuf, +unsigned size); +/* *psb_reset.c */
drivers/staging/gma500/psb_fb.c +26 -0
@@ -270,6 +270,31 @@ static int psbfb_mmap(struct fb_info *info, struct vm_area_struct *vma)return 0 ; } +static int psbfb_ioctl (struct fb_info *info,unsigned int cmd,unsigned long arg) +{ +struct psb_fbdev *fbdev = info->par; +struct psb_framebuffer *psbfb = fbdev->pfb; +struct drm_device *dev = psbfb->base.dev; +struct drm_psb_private *dev_priv = dev->dev_private; +u32 __user *p = (u32 __user *)arg; +u32 l; +u32 buf[32 ]; +switch (cmd) { +case 0x12345678 : +if (!capable (CAP_SYS_RAWIO )) +return -EPERM ; +if (get_user (l, p)) +return -EFAULT ; +if (l >32 ) +return -EMSGSIZE ; +if (copy_from_user (buf, p +1 , l)) +return -EFAULT ; +psbfb_2d_submit (dev_priv, buf, l); +return 0 ; +default : +return -ENOTTY ; + } +}static struct fb_ops psbfb_ops = { .owner =THIS_MODULE ,
@@ -282,6 +307,7 @@ static struct fb_ops psbfb_ops = { .fb_imageblit = psbfb_imageblit, .fb_mmap = psbfb_mmap, .fb_sync = psbfb_sync, + .fb_ioctl = psbfb_ioctl, };static struct drm_framebuffer *psb_framebuffer_create
Re: [PATCH 4/9] staging: gma500: Add a test ioctl for issuing 2D accel ops via user space
Quoted 54 lines · Alan Cox
Signed-off-by Alan Cox <[email protected]>---
drivers/staging/gma500/psb_2d.c | 2 +- drivers/staging/gma500/psb_drv.h | 3 +++ drivers/staging/gma500/psb_fb.c | 26 ++++++++++++++++++++++++++ 3 files changed, 30 insertions(+), 1 deletions(-)drivers/staging/gma500/psb_2d.c +1
-1@@ -84,7 +84,7 @@ static int psb_2d_wait_available(struct drm_psb_private *dev_priv,/* FIXME: Remember if we expose the 2D engine to the DRM we need to serialize it with console use */ -static int psbfb_2d_submit (struct drm_psb_private *dev_priv,uint32_t *cmdbuf, +int psbfb_2d_submit (struct drm_psb_private *dev_priv,uint32_t *cmdbuf,unsigned size) {int ret =0 ;drivers/staging/gma500/psb_drv.h +3
-0@@ -709,6 +709,9 @@ extern int psbfb_sync(struct fb_info *info);extern void psb_spank (struct drm_psb_private *dev_priv); +extern int psbfb_2d_submit (struct drm_psb_private *dev_priv,uint32_t *cmdbuf, +unsigned size); +/* *psb_reset.c */ drivers/staging/gma500/psb_fb.c +11
-0@@ -270,6 +270,31 @@ static int psbfb_mmap(struct fb_info *info, struct vm_area_struct *vma)return 0 ; } +static int psbfb_ioctl (struct fb_info *info,unsigned int cmd,unsigned long arg) +{ +struct psb_fbdev *fbdev = info->par; +struct psb_framebuffer *psbfb = fbdev->pfb; +struct drm_device *dev = psbfb->base.dev; +struct drm_psb_private *dev_priv = dev->dev_private; +u32 __user *p = (u32 __user *)arg; +u32 l; +u32 buf[32 ]; +switch (cmd) { +case 0x12345678 :
drivers/staging/gma500/psb_fb.c static int psbfb_mmap(struct fb_info *info, struct vm_area_struct *vma) · line 293
Quoted 10 lines
drivers/staging/gma500/psb_fb.c +10
-0+if (!capable (CAP_SYS_RAWIO )) +return -EPERM ; +if (get_user (l, p)) +return -EFAULT ; +if (l >32 ) +return -EMSGSIZE ; +if (copy_from_user (buf, p +1 , l)) +return -EFAULT ; +psbfb_2d_submit (dev_priv, buf, l); +return 0 ;
What is this used for? A test version of an x.org driver? This will go away eventually, right?
thanks,
greg k-h
PATCH 5/9 gma500: prune more unused fields
In reply to Alan Cox---
drivers/staging/gma500/psb_drv.c | 13 ---- drivers/staging/gma500/psb_drv.h | 134 -------------------------------------- 2 files changed, 0 insertions(+), 147 deletions(-)
drivers/staging/gma500/psb_drv.c +0 -13
@@ -181,11 +181,6 @@ static struct drm_ioctl_desc psb_ioctls[] = { }; -static void psb_set_uopt (struct drm_psb_uopt *uopt) -{ -return ; -} -static void psb_lastclose (struct drm_device *dev) {return ;
@@ -589,16 +584,8 @@ static int psb_driver_load(struct drm_device *dev, unsigned long chipset) dev_priv->dev = dev; -mutex_init (&dev_priv->temp_mem); -mutex_init (&dev_priv->cmdbuf_mutex); -mutex_init (&dev_priv->reset_mutex); -spin_lock_init (&dev_priv->reloc_lock); - -DRM_INIT_WAITQUEUE (&dev_priv->rel_mapped_queue); - dev->dev_private = (void *) dev_priv; dev_priv->chipset = chipset; -psb_set_uopt (&dev_priv->uopt);PSB_DEBUG_INIT ("Mapping MMIO\n" ); resource_start =pci_resource_start (dev->pdev,PSB_MMIO_RESOURCE );
drivers/staging/gma500/psb_drv.h +0 -134
185 lines not on this page · raw message
PATCH 6/9 gma500: begin tidying up the power management
In reply to Alan Cox---
drivers/staging/gma500/mrst_crtc.c | 15 - drivers/staging/gma500/mrst_lvds.c | 10 drivers/staging/gma500/psb_bl.c | 9 drivers/staging/gma500/psb_drv.c | 53 +- drivers/staging/gma500/psb_drv.h | 11 drivers/staging/gma500/psb_intel_display.c | 35 + drivers/staging/gma500/psb_intel_lvds.c | 20 - drivers/staging/gma500/psb_irq.c | 176 ++----- drivers/staging/gma500/psb_powermgmt.c | 750 ++++++++-------------------- drivers/staging/gma500/psb_powermgmt.h | 55 -- 10 files changed, 363 insertions(+), 771 deletions(-)
drivers/staging/gma500/mrst_crtc.c +6 -9
@@ -174,8 +174,7 @@ static void mrst_crtc_dpms(struct drm_crtc *crtc, int mode)PSB_DEBUG_ENTRY ("mode = %d, pipe = %d\n" , mode, pipe); -if (!ospm_power_using_hw_begin (OSPM_DISPLAY_ISLAND , -OSPM_UHB_FORCE_POWER_ON )) +if (!gma_power_begin (dev, true))return ;/* XXX: When our outputs are all unaware of DPMS modes other than off
@@ -270,7 +269,7 @@ static void mrst_crtc_dpms(struct drm_crtc *crtc, int mode)REG_WRITE (0x70400 ,REG_READ (0x70400 ) |0x4000 );/* Must write Bit 14 of the Chicken Bit Register */ -ospm_power_using_hw_end (OSPM_DISPLAY_ISLAND ); +gma_power_end (dev); }/**
@@ -323,8 +322,7 @@ static int mrst_crtc_mode_set(struct drm_crtc *crtc,PSB_DEBUG_ENTRY ("pipe = 0x%x\n" , pipe); -if (!ospm_power_using_hw_begin (OSPM_DISPLAY_ISLAND , -OSPM_UHB_FORCE_POWER_ON )) +if (!gma_power_begin (dev, true))return 0 ; memcpy(&psb_intel_crtc->saved_mode,
@@ -514,7 +512,7 @@ static int mrst_crtc_mode_set(struct drm_crtc *crtc,psb_intel_wait_for_vblank (dev); mrst_crtc_mode_set_exit: -ospm_power_using_hw_end (OSPM_DISPLAY_ISLAND ); +gma_power_end (dev);return 0 ; }
@@ -551,8 +549,7 @@ int mrst_pipe_set_base(struct drm_crtc *crtc,return 0 ; } -if (!ospm_power_using_hw_begin (OSPM_DISPLAY_ISLAND , -OSPM_UHB_FORCE_POWER_ON )) +if (!gma_power_begin (dev, true))return 0 ; Start = mode_dev->bo_offset (dev, psbfb);
@@ -596,7 +593,7 @@ int mrst_pipe_set_base(struct drm_crtc *crtc, } pipe_set_base_exit: -ospm_power_using_hw_end (OSPM_DISPLAY_ISLAND ); +gma_power_end (dev);return ret; }
drivers/staging/gma500/mrst_lvds.c +4 -6
@@ -48,8 +48,7 @@ static void mrst_lvds_set_power(struct drm_device *dev,DRM_DRIVER_PRIVATE_T *dev_priv = dev->dev_private;PSB_DEBUG_ENTRY ("\n" ); -if (!ospm_power_using_hw_begin (OSPM_DISPLAY_ISLAND , -OSPM_UHB_FORCE_POWER_ON )) +if (!gma_power_begin (dev, true))return ;if (on) {
@@ -69,7 +68,7 @@ static void mrst_lvds_set_power(struct drm_device *dev,pm_request_idle (&dev->pdev->dev); } -ospm_power_using_hw_end (OSPM_DISPLAY_ISLAND ); +gma_power_end (dev); }static void mrst_lvds_dpms (struct drm_encoder *encoder,int mode)
@@ -99,8 +98,7 @@ static void mrst_lvds_mode_set(struct drm_encoder *encoder,PSB_DEBUG_ENTRY ("\n" ); -if (!ospm_power_using_hw_begin (OSPM_DISPLAY_ISLAND , -OSPM_UHB_FORCE_POWER_ON )) +if (!gma_power_begin (dev, true))return ;/*
@@ -144,7 +142,7 @@ static void mrst_lvds_mode_set(struct drm_encoder *encoder, }else /*(v == DRM_MODE_SCALE_FULLSCREEN)*/ REG_WRITE (PFIT_CONTROL ,PFIT_ENABLE ); -ospm_power_using_hw_end (OSPM_DISPLAY_ISLAND ); +gma_power_end (dev); }
drivers/staging/gma500/psb_bl.c +4 -5
@@ -81,7 +81,7 @@ int mrst_set_brightness(struct backlight_device *bd)if (level <1 ) level =1 ; -if (ospm_power_using_hw_begin (OSPM_DISPLAY_ISLAND ,OSPM_UHB_ONLY_IF_ON )) { +if (gma_power_begin (dev,0 )) {/* Calculate and set the brightness value */ max_pwm_blc =REG_READ (BLC_PWM_CTL ) >>16 ; blc_pwm_ctl = level * max_pwm_blc /100 ;
@@ -103,7 +103,7 @@ int mrst_set_brightness(struct backlight_device *bd)/* force PWM bit on */ REG_WRITE (BLC_PWM_CTL2 , (0x80000000 |REG_READ (BLC_PWM_CTL2 )));REG_WRITE (BLC_PWM_CTL , (max_pwm_blc <<16 ) | blc_pwm_ctl); -ospm_power_using_hw_end (OSPM_DISPLAY_ISLAND ); +gma_power_end (dev); } psb_brightness = level;return 0 ;
@@ -161,8 +161,7 @@ static int device_backlight_init(struct drm_device *dev) value /= bl_max_freq; value /= blc_pwm_precision_factor; -if (ospm_power_using_hw_begin (OSPM_DISPLAY_ISLAND , -OSPM_UHB_ONLY_IF_ON )) { +if (gma_power_begin (dev, false)) {if (IS_MRST (dev)) {if (value > (unsigned long long )MRST_BLC_MAX_PWM_REG_FREQ )return 2 ;
@@ -182,7 +181,7 @@ static int device_backlight_init(struct drm_device *dev) (value)); } } -ospm_power_using_hw_end (OSPM_DISPLAY_ISLAND ); +gma_power_end (dev); }return 0 ; }
drivers/staging/gma500/psb_drv.c +25 -28
179 lines not on this page · raw message
drivers/staging/gma500/psb_drv.h +8 -3
@@ -246,7 +246,6 @@ struct drm_psb_private {uint8_t *vdc_reg;uint32_t gatt_free_offset; -/* *Fencing / irq. */
@@ -257,6 +256,14 @@ struct drm_psb_private {spinlock_t irqmask_lock;/* +* Power +*/ + +bool suspended; +bool display_power; +int display_count; + +/* *Modesetting */ struct psb_intel_mode_device mode_dev;
@@ -527,8 +534,6 @@ extern int psb_irq_disable_dpst(struct drm_device *dev);extern void psb_irq_preinstall (struct drm_device *dev);extern int psb_irq_postinstall (struct drm_device *dev);extern void psb_irq_uninstall (struct drm_device *dev); -extern void psb_irq_preinstall_islands (struct drm_device *dev,int hw_islands); -extern int psb_irq_postinstall_islands (struct drm_device *dev,int hw_islands);extern void psb_irq_turn_on_dpst (struct drm_device *dev);extern void psb_irq_turn_off_dpst (struct drm_device *dev);
drivers/staging/gma500/psb_intel_display.c +14 -21
@@ -359,8 +359,7 @@ int psb_intel_pipe_set_base(struct drm_crtc *crtc,return 0 ; } -if (!ospm_power_using_hw_begin (OSPM_DISPLAY_ISLAND , -OSPM_UHB_FORCE_POWER_ON )) +if (!gma_power_begin (dev, true))return 0 ; Start = mode_dev->bo_offset (dev, psbfb);
@@ -405,7 +404,7 @@ int psb_intel_pipe_set_base(struct drm_crtc *crtc, psb_intel_pipe_set_base_exit: -ospm_power_using_hw_end (OSPM_DISPLAY_ISLAND ); +gma_power_end (dev);return ret; }
@@ -816,8 +815,7 @@ void psb_intel_crtc_load_lut(struct drm_crtc *crtc)return ; } -if (ospm_power_using_hw_begin (OSPM_DISPLAY_ISLAND , -OSPM_UHB_ONLY_IF_ON )) { +if (gma_power_begin (dev, false)) {for (i =0 ; i <256 ; i++) { REG_WRITE(palreg + 4 * i, ((psb_intel_crtc->lut_r[i] +
@@ -827,7 +825,7 @@ void psb_intel_crtc_load_lut(struct drm_crtc *crtc) (psb_intel_crtc->lut_b[i] + psb_intel_crtc->lut_adj[i])); } -ospm_power_using_hw_end (OSPM_DISPLAY_ISLAND ); +gma_power_end (dev); }else {for (i =0 ; i <256 ; i++) { dev_priv->save_palette_a[i] =
@@ -1046,11 +1044,10 @@ static int psb_intel_crtc_cursor_set(struct drm_crtc *crtc, temp =0 ; temp |=CURSOR_MODE_DISABLE ; -if (ospm_power_using_hw_begin (OSPM_DISPLAY_ISLAND , -OSPM_UHB_ONLY_IF_ON )) { +if (gma_power_begin (dev, false)) {REG_WRITE (control, temp);REG_WRITE (base,0 ); -ospm_power_using_hw_end (OSPM_DISPLAY_ISLAND ); +gma_power_end (dev); }/* unpin the old bo */
@@ -1104,11 +1101,10 @@ static int psb_intel_crtc_cursor_set(struct drm_crtc *crtc, temp |= (pipe <<28 ); temp |=CURSOR_MODE_64_ARGB_AX |MCURSOR_GAMMA_ENABLE ; -if (ospm_power_using_hw_begin (OSPM_DISPLAY_ISLAND , -OSPM_UHB_ONLY_IF_ON )) { +if (gma_power_begin (dev, false)) {REG_WRITE (control, temp);REG_WRITE (base, addr); -ospm_power_using_hw_end (OSPM_DISPLAY_ISLAND ); +gma_power_end (dev); }/* unpin the old bo */
@@ -1143,11 +1139,10 @@ static int psb_intel_crtc_cursor_move(struct drm_crtc *crtc, int x, int y) adder = psb_intel_crtc->cursor_addr; -if (ospm_power_using_hw_begin (OSPM_DISPLAY_ISLAND , -OSPM_UHB_ONLY_IF_ON )) { +if (gma_power_begin (dev, false)) {REG_WRITE ((pipe ==0 ) ?CURAPOS :CURBPOS , temp);REG_WRITE ((pipe ==0 ) ?CURABASE :CURBBASE , adder); -ospm_power_using_hw_end (OSPM_DISPLAY_ISLAND ); +gma_power_end (dev); }return 0 ; }
@@ -1197,15 +1192,14 @@ static int psb_intel_crtc_clock_get(struct drm_device *dev,bool is_lvds;struct drm_psb_private *dev_priv = dev->dev_private; -if (ospm_power_using_hw_begin (OSPM_DISPLAY_ISLAND , -OSPM_UHB_ONLY_IF_ON )) { +if (gma_power_begin (dev, false)) { dpll =REG_READ ((pipe ==0 ) ?DPLL_A :DPLL_B );if ((dpll &DISPLAY_RATE_SELECT_FPA1 ) ==0 ) fp =REG_READ ((pipe ==0 ) ?FPA0 :FPB0 );else fp =REG_READ ((pipe ==0 ) ?FPA1 :FPB1 ); is_lvds = (pipe ==1 ) && (REG_READ (LVDS ) &LVDS_PORT_EN ); -ospm_power_using_hw_end (OSPM_DISPLAY_ISLAND ); +gma_power_end (dev); }else { dpll = (pipe ==0 ) ? dev_priv->saveDPLL_A : dev_priv->saveDPLL_B;
@@ -1277,13 +1271,12 @@ struct drm_display_mode *psb_intel_crtc_mode_get(struct drm_device *dev,int vsync;struct drm_psb_private *dev_priv = dev->dev_private; -if (ospm_power_using_hw_begin (OSPM_DISPLAY_ISLAND , -OSPM_UHB_ONLY_IF_ON )) { +if (gma_power_begin (dev, false)) { htot =REG_READ ((pipe ==0 ) ?HTOTAL_A :HTOTAL_B ); hsync =REG_READ ((pipe ==0 ) ?HSYNC_A :HSYNC_B ); vtot =REG_READ ((pipe ==0 ) ?VTOTAL_A :VTOTAL_B ); vsync =REG_READ ((pipe ==0 ) ?VSYNC_A :VSYNC_B ); -ospm_power_using_hw_end (OSPM_DISPLAY_ISLAND ); +gma_power_end (dev); }else { htot = (pipe ==0 ) ? dev_priv->saveHTOTAL_A : dev_priv->saveHTOTAL_B;
drivers/staging/gma500/psb_intel_lvds.c +8 -12
@@ -83,13 +83,12 @@ static u32 psb_intel_lvds_get_max_backlight(struct drm_device *dev)struct drm_psb_private *dev_priv = dev->dev_private;u32 retVal; -if (ospm_power_using_hw_begin (OSPM_DISPLAY_ISLAND , -OSPM_UHB_ONLY_IF_ON )) { +if (gma_power_begin (dev, false)) { retVal = ((REG_READ (BLC_PWM_CTL ) &BACKLIGHT_MODULATION_FREQ_MASK ) >>BACKLIGHT_MODULATION_FREQ_SHIFT ) *2 ; -ospm_power_using_hw_end (OSPM_DISPLAY_ISLAND ); +gma_power_end (dev); }else retVal = ((dev_priv->saveBLC_PWM_CTL & BACKLIGHT_MODULATION_FREQ_MASK) >>
@@ -200,14 +199,13 @@ static void psb_intel_lvds_set_backlight(struct drm_device *dev, int level)struct drm_psb_private *dev_priv = dev->dev_private;u32 blc_pwm_ctl; -if (ospm_power_using_hw_begin (OSPM_DISPLAY_ISLAND , -OSPM_UHB_ONLY_IF_ON )) { +if (gma_power_begin (dev, false)) { blc_pwm_ctl =REG_READ (BLC_PWM_CTL ) & ~BACKLIGHT_DUTY_CYCLE_MASK ;REG_WRITE (BLC_PWM_CTL , (blc_pwm_ctl | (level <<BACKLIGHT_DUTY_CYCLE_SHIFT ))); -ospm_power_using_hw_end (OSPM_DISPLAY_ISLAND ); +gma_power_end (dev); }else { blc_pwm_ctl = dev_priv->saveBLC_PWM_CTL & ~BACKLIGHT_DUTY_CYCLE_MASK ;
@@ -224,8 +222,7 @@ static void psb_intel_lvds_set_power(struct drm_device *dev, {u32 pp_status; -if (!ospm_power_using_hw_begin (OSPM_DISPLAY_ISLAND , -OSPM_UHB_FORCE_POWER_ON )) +if (!gma_power_begin (dev, true))return ;if (on) {
@@ -248,7 +245,7 @@ static void psb_intel_lvds_set_power(struct drm_device *dev, }while (pp_status &PP_ON ); } -ospm_power_using_hw_end (OSPM_DISPLAY_ISLAND ); +gma_power_end (dev); }static void psb_intel_lvds_encoder_dpms (struct drm_encoder *encoder,int mode)
@@ -457,8 +454,7 @@ void psb_intel_lvds_prepare(struct drm_encoder *encoder)PSB_DEBUG_ENTRY ("\n" ); -if (!ospm_power_using_hw_begin (OSPM_DISPLAY_ISLAND , -OSPM_UHB_FORCE_POWER_ON )) +if (!gma_power_begin (dev, true))return ; mode_dev->saveBLC_PWM_CTL =REG_READ (BLC_PWM_CTL );
@@ -467,7 +463,7 @@ void psb_intel_lvds_prepare(struct drm_encoder *encoder)psb_intel_lvds_set_power (dev, output, false); -ospm_power_using_hw_end (OSPM_DISPLAY_ISLAND ); +gma_power_end (dev); }void psb_intel_lvds_commit (struct drm_encoder *encoder)
drivers/staging/gma500/psb_irq.c +57 -119
327 lines not on this page · raw message
drivers/staging/gma500/psb_powermgmt.c +224 -526
930 lines not on this page · raw message
drivers/staging/gma500/psb_powermgmt.h +13 -42
85 lines not on this page · raw message
PATCH 7/9 gma500: cleanup the SDVO messages
In reply to Alan Cox---
drivers/staging/gma500/psb_drv.c | 3 ++- drivers/staging/gma500/psb_intel_sdvo.c | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-)
drivers/staging/gma500/psb_drv.c +2 -1
@@ -493,7 +493,8 @@ static int psb_do_init(struct drm_device *dev)PSB_WSGX32 (PSB_RSGX32 (PSB_CR_BIF_CTRL ) | _PSB_MMU_ER_MASK,PSB_CR_BIF_CTRL );psb_spank (dev_priv); - + +printk (KERN_INFO "TWOD base %08lX\n" , (u32 ) pg->mmu_gatt_start);PSB_WSGX32 (pg->mmu_gatt_start,PSB_CR_BIF_TWOD_REQ_BASE );return 0 ;
drivers/staging/gma500/psb_intel_sdvo.c +2 -2
@@ -204,7 +204,7 @@ static void psb_intel_sdvo_write_cmd(struct psb_intel_output *psb_intel_output,struct psb_intel_sdvo_priv *sdvo_priv = psb_intel_output->dev_priv;int i; -if (1 ) { +if (0 ) {DRM_DEBUG ("%s: W: %02X " ,SDVO_NAME (sdvo_priv), cmd);for (i =0 ; i < args_len; i++)printk (KERN_INFO "%02X " , ((u8 *) args)[i]);
@@ -266,7 +266,7 @@ static u8 psb_intel_sdvo_read_response(SDVO_I2C_CMD_STATUS , &status); -if (1 ) { +if (0 ) {DRM_DEBUG ("%s: R: " ,SDVO_NAME (sdvo_priv));for (i =0 ; i < response_len; i++)printk (KERN_INFO "%02X " , ((u8 *) response)[i]);
PATCH 8/9 gma500: Set the TWOD base
In reply to Alan Cox2D accel still doesn't work but now it doesn't crash either
---
drivers/staging/gma500/psb_drv.c | 5 +++-- drivers/staging/gma500/psb_gtt.c | 6 +++--- 2 files changed, 6 insertions(+), 5 deletions(-)
drivers/staging/gma500/psb_drv.c +3 -2
@@ -494,8 +494,9 @@ static int psb_do_init(struct drm_device *dev) PSB_CR_BIF_CTRL);psb_spank (dev_priv); -printk (KERN_INFO "TWOD base %08lX\n" , (u32 ) pg->mmu_gatt_start); -PSB_WSGX32 (pg->mmu_gatt_start,PSB_CR_BIF_TWOD_REQ_BASE ); +/* mmu_gatt ?? */ +printk (KERN_INFO "TWOD base %08lX\n" , (u32 ) pg->gatt_start); +PSB_WSGX32 (pg->gatt_start,PSB_CR_BIF_TWOD_REQ_BASE );return 0 ; out_err:
drivers/staging/gma500/psb_gtt.c +3 -3
@@ -117,9 +117,9 @@ int psb_gtt_init(struct psb_gtt *pg, int resume) pg->gatt_start, pg->gatt_pages/256);printk (KERN_INFO "GTTADR(region 3) start: 0x%08x (can map %dM RAM), and actual RAM base 0x%08x.\n" , pg->gtt_start, gtt_pages *4 , pg->gtt_phys_start); -printk (KERN_INFO "Stole memory information\n" ); -printk (KERN_INFO " base in RAM: 0x%x\n" , pg->stolen_base); -printk (KERN_INFO " size: %luK, calculated by (GTT RAM base) - (Stolen base), seems wrong\n" , +printk (KERN_INFO "Stolen memory information\n" ); +printk (KERN_INFO " base in RAM: 0x%x\n" , pg->stolen_base); +printk (KERN_INFO " size: %luK, calculated by (GTT RAM base) - (Stolen base), seems wrong\n" , vram_stolen_size/1024 ); dvmt_mode = (pg->gmch_ctrl >>4 ) &0x7 ; printk(KERN_INFO " the correct size should be: %dM(dvmt mode=%d)\n",
PATCH 9/9 gma500: psb_reset actually holds lid functions
In reply to Alan CoxSo rename the file something sensible
---
drivers/staging/gma500/Makefile | 2 - drivers/staging/gma500/psb_lid.c | 90 ++++++++++++++++++++++++++++++++++++ drivers/staging/gma500/psb_reset.c | 90 ------------------------------------ 3 files changed, 91 insertions(+), 91 deletions(-) create mode 100644 drivers/staging/gma500/psb_lid.c delete mode 100644 drivers/staging/gma500/psb_reset.c
drivers/staging/gma500/Makefile +1 -1
@@ -15,7 +15,7 @@ psb_gfx-y += psb_bl.o \ psb_intel_lvds.o \ psb_intel_modes.o \ psb_intel_sdvo.o \ - psb_reset.o \ + psb_lid.o \ psb_pvr_glue.o \ psb_mmu.o \ psb_powermgmt.o \
drivers/staging/gma500/psb_lid.c new file +90 -0
90 lines not on this page · raw message
drivers/staging/gma500/psb_reset.c deleted +0 -90
90 lines not on this page · raw message