mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2025-01-19 20:34:20 +08:00
drm/nv04: Fix scanout over the 16MB mark.
Signed-off-by: Francisco Jerez <currojerez@riseup.net> Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
parent
3c29f9e745
commit
5794b5fdb5
@ -415,6 +415,25 @@ nv_fix_nv40_hw_cursor(struct drm_device *dev, int head)
|
|||||||
NVWriteRAMDAC(dev, head, NV_PRAMDAC_CU_START_POS, curpos);
|
NVWriteRAMDAC(dev, head, NV_PRAMDAC_CU_START_POS, curpos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
nv_set_crtc_base(struct drm_device *dev, int head, uint32_t offset)
|
||||||
|
{
|
||||||
|
struct drm_nouveau_private *dev_priv = dev->dev_private;
|
||||||
|
|
||||||
|
NVWriteCRTC(dev, head, NV_PCRTC_START, offset);
|
||||||
|
|
||||||
|
if (dev_priv->card_type == NV_04) {
|
||||||
|
/*
|
||||||
|
* Hilarious, the 24th bit doesn't want to stick to
|
||||||
|
* PCRTC_START...
|
||||||
|
*/
|
||||||
|
int cre_heb = NVReadVgaCrtc(dev, head, NV_CIO_CRE_HEB__INDEX);
|
||||||
|
|
||||||
|
NVWriteVgaCrtc(dev, head, NV_CIO_CRE_HEB__INDEX,
|
||||||
|
(cre_heb & ~0x40) | ((offset >> 18) & 0x40));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
nv_show_cursor(struct drm_device *dev, int head, bool show)
|
nv_show_cursor(struct drm_device *dev, int head, bool show)
|
||||||
{
|
{
|
||||||
|
@ -831,7 +831,7 @@ nv04_crtc_do_mode_set_base(struct drm_crtc *crtc,
|
|||||||
/* Update the framebuffer location. */
|
/* Update the framebuffer location. */
|
||||||
regp->fb_start = nv_crtc->fb.offset & ~3;
|
regp->fb_start = nv_crtc->fb.offset & ~3;
|
||||||
regp->fb_start += (y * drm_fb->pitch) + (x * drm_fb->bits_per_pixel / 8);
|
regp->fb_start += (y * drm_fb->pitch) + (x * drm_fb->bits_per_pixel / 8);
|
||||||
NVWriteCRTC(dev, nv_crtc->index, NV_PCRTC_START, regp->fb_start);
|
nv_set_crtc_base(dev, nv_crtc->index, regp->fb_start);
|
||||||
|
|
||||||
/* Update the arbitration parameters. */
|
/* Update the arbitration parameters. */
|
||||||
nouveau_calc_arb(dev, crtc->mode.clock, drm_fb->bits_per_pixel,
|
nouveau_calc_arb(dev, crtc->mode.clock, drm_fb->bits_per_pixel,
|
||||||
|
Loading…
Reference in New Issue
Block a user