Commit 4e1d2fae authored by Alan Cox's avatar Alan Cox Committed by Greg Kroah-Hartman

gma500: 2D acceleration tidying

We have a FIXME to do the power management for which the framework now
exists, and we also need to deal with an erratum. Some operations exactly 8
pixels wide or high fail. The work around is to do two smaller ones (see
the Intel released X driver bits) but for console quite frankly if it's
8bits wide and/or high its not worth it so fall back.
Signed-off-by: default avatarAlan Cox <alan@linux.intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent de64ac92
...@@ -183,10 +183,14 @@ static void psbfb_fillrect_accel(struct fb_info *info, ...@@ -183,10 +183,14 @@ static void psbfb_fillrect_accel(struct fb_info *info,
cfb_fillrect(info, r); cfb_fillrect(info, r);
return; return;
} }
if (!gma_power_begin(dev, false)) {
cfb_fillrect(info, r);
return;
}
psb_accel_2d_fillrect(dev_priv, psb_accel_2d_fillrect(dev_priv,
offset, stride, format, offset, stride, format,
r->dx, r->dy, r->width, r->height, r->color); r->dx, r->dy, r->width, r->height, r->color);
gma_power_end(dev);
} }
void psbfb_fillrect(struct fb_info *info, void psbfb_fillrect(struct fb_info *info,
...@@ -198,9 +202,7 @@ void psbfb_fillrect(struct fb_info *info, ...@@ -198,9 +202,7 @@ void psbfb_fillrect(struct fb_info *info,
if (1 || (info->flags & FBINFO_HWACCEL_DISABLED)) if (1 || (info->flags & FBINFO_HWACCEL_DISABLED))
return cfb_fillrect(info, rect); return cfb_fillrect(info, rect);
/*psb_check_power_state(dev, PSB_DEVICE_SGX); */
psbfb_fillrect_accel(info, rect); psbfb_fillrect_accel(info, rect);
/* Drop power again here on MRST FIXMEAC */
} }
static u32 psb_accel_2d_copy_direction(int xdir, int ydir) static u32 psb_accel_2d_copy_direction(int xdir, int ydir)
...@@ -331,10 +333,15 @@ static void psbfb_copyarea_accel(struct fb_info *info, ...@@ -331,10 +333,15 @@ static void psbfb_copyarea_accel(struct fb_info *info,
return; return;
} }
if (!gma_power_begin(dev, false)) {
cfb_copyarea(info, a);
return;
}
psb_accel_2d_copy(dev_priv, psb_accel_2d_copy(dev_priv,
offset, stride, src_format, offset, stride, src_format,
offset, stride, dst_format, offset, stride, dst_format,
a->sx, a->sy, a->dx, a->dy, a->width, a->height); a->sx, a->sy, a->dx, a->dy, a->width, a->height);
gma_power_end(dev);
} }
void psbfb_copyarea(struct fb_info *info, void psbfb_copyarea(struct fb_info *info,
...@@ -343,12 +350,12 @@ void psbfb_copyarea(struct fb_info *info, ...@@ -343,12 +350,12 @@ void psbfb_copyarea(struct fb_info *info,
if (unlikely(info->state != FBINFO_STATE_RUNNING)) if (unlikely(info->state != FBINFO_STATE_RUNNING))
return; return;
if (info->flags & FBINFO_HWACCEL_DISABLED) /* Avoid the 8 pixel erratum */
if (region->width == 8 || region->height == 8 ||
(info->flags & FBINFO_HWACCEL_DISABLED))
return cfb_copyarea(info, region); return cfb_copyarea(info, region);
/* psb_check_power_state(dev, PSB_DEVICE_SGX); */
psbfb_copyarea_accel(info, region); psbfb_copyarea_accel(info, region);
/* Need to power back off here for MRST FIXMEAC */
} }
void psbfb_imageblit(struct fb_info *info, const struct fb_image *image) void psbfb_imageblit(struct fb_info *info, const struct fb_image *image)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment