diff options
author | Daniel Vetter <daniel.vetter@ffwll.ch> | 2012-12-02 08:02:51 -0500 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2012-12-14 10:45:22 -0500 |
commit | 2ef9bdfe64079c9d0b98dc89af3af52918b818a0 (patch) | |
tree | d755083f2702b1ac6f2f8ed449d2e65d9e7e4582 | |
parent | 9add1ac3dd256ad12e266f8403daf928be19953f (diff) |
drm/radeon: add W|RREG32_IDX for MM_INDEX|DATA based mmio accesss
Just refactoring to make the next patche simpler. Now all indirect register
access in the new modesetting driver should go through the r100_mm_(w|r)reg
fucntions.
RADEON_READ_MM from the old driver seems to be totally unused, so just kill
it.
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r-- | drivers/gpu/drm/radeon/r100.c | 10 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon.h | 16 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_combios.c | 6 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_cp.c | 14 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_cursor.c | 17 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_drv.h | 1 |
6 files changed, 27 insertions, 37 deletions
diff --git a/drivers/gpu/drm/radeon/r100.c b/drivers/gpu/drm/radeon/r100.c index 376884f1bcd2..ae4c857fb173 100644 --- a/drivers/gpu/drm/radeon/r100.c +++ b/drivers/gpu/drm/radeon/r100.c | |||
@@ -4135,9 +4135,10 @@ int r100_init(struct radeon_device *rdev) | |||
4135 | return 0; | 4135 | return 0; |
4136 | } | 4136 | } |
4137 | 4137 | ||
4138 | uint32_t r100_mm_rreg(struct radeon_device *rdev, uint32_t reg) | 4138 | uint32_t r100_mm_rreg(struct radeon_device *rdev, uint32_t reg, |
4139 | bool always_indirect) | ||
4139 | { | 4140 | { |
4140 | if (reg < rdev->rmmio_size) | 4141 | if (reg < rdev->rmmio_size && !always_indirect) |
4141 | return readl(((void __iomem *)rdev->rmmio) + reg); | 4142 | return readl(((void __iomem *)rdev->rmmio) + reg); |
4142 | else { | 4143 | else { |
4143 | writel(reg, ((void __iomem *)rdev->rmmio) + RADEON_MM_INDEX); | 4144 | writel(reg, ((void __iomem *)rdev->rmmio) + RADEON_MM_INDEX); |
@@ -4145,9 +4146,10 @@ uint32_t r100_mm_rreg(struct radeon_device *rdev, uint32_t reg) | |||
4145 | } | 4146 | } |
4146 | } | 4147 | } |
4147 | 4148 | ||
4148 | void r100_mm_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v) | 4149 | void r100_mm_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v, |
4150 | bool always_indirect) | ||
4149 | { | 4151 | { |
4150 | if (reg < rdev->rmmio_size) | 4152 | if (reg < rdev->rmmio_size && !always_indirect) |
4151 | writel(v, ((void __iomem *)rdev->rmmio) + reg); | 4153 | writel(v, ((void __iomem *)rdev->rmmio) + reg); |
4152 | else { | 4154 | else { |
4153 | writel(reg, ((void __iomem *)rdev->rmmio) + RADEON_MM_INDEX); | 4155 | writel(reg, ((void __iomem *)rdev->rmmio) + RADEON_MM_INDEX); |
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h index 1b9120a875ef..609bb18d09f1 100644 --- a/drivers/gpu/drm/radeon/radeon.h +++ b/drivers/gpu/drm/radeon/radeon.h | |||
@@ -1631,8 +1631,10 @@ int radeon_device_init(struct radeon_device *rdev, | |||
1631 | void radeon_device_fini(struct radeon_device *rdev); | 1631 | void radeon_device_fini(struct radeon_device *rdev); |
1632 | int radeon_gpu_wait_for_idle(struct radeon_device *rdev); | 1632 | int radeon_gpu_wait_for_idle(struct radeon_device *rdev); |
1633 | 1633 | ||
1634 | uint32_t r100_mm_rreg(struct radeon_device *rdev, uint32_t reg); | 1634 | uint32_t r100_mm_rreg(struct radeon_device *rdev, uint32_t reg, |
1635 | void r100_mm_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v); | 1635 | bool always_indirect); |
1636 | void r100_mm_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v, | ||
1637 | bool always_indirect); | ||
1636 | u32 r100_io_rreg(struct radeon_device *rdev, u32 reg); | 1638 | u32 r100_io_rreg(struct radeon_device *rdev, u32 reg); |
1637 | void r100_io_wreg(struct radeon_device *rdev, u32 reg, u32 v); | 1639 | void r100_io_wreg(struct radeon_device *rdev, u32 reg, u32 v); |
1638 | 1640 | ||
@@ -1648,9 +1650,11 @@ void r100_io_wreg(struct radeon_device *rdev, u32 reg, u32 v); | |||
1648 | #define WREG8(reg, v) writeb(v, (rdev->rmmio) + (reg)) | 1650 | #define WREG8(reg, v) writeb(v, (rdev->rmmio) + (reg)) |
1649 | #define RREG16(reg) readw((rdev->rmmio) + (reg)) | 1651 | #define RREG16(reg) readw((rdev->rmmio) + (reg)) |
1650 | #define WREG16(reg, v) writew(v, (rdev->rmmio) + (reg)) | 1652 | #define WREG16(reg, v) writew(v, (rdev->rmmio) + (reg)) |
1651 | #define RREG32(reg) r100_mm_rreg(rdev, (reg)) | 1653 | #define RREG32(reg) r100_mm_rreg(rdev, (reg), false) |
1652 | #define DREG32(reg) printk(KERN_INFO "REGISTER: " #reg " : 0x%08X\n", r100_mm_rreg(rdev, (reg))) | 1654 | #define RREG32_IDX(reg) r100_mm_rreg(rdev, (reg), true) |
1653 | #define WREG32(reg, v) r100_mm_wreg(rdev, (reg), (v)) | 1655 | #define DREG32(reg) printk(KERN_INFO "REGISTER: " #reg " : 0x%08X\n", r100_mm_rreg(rdev, (reg), false)) |
1656 | #define WREG32(reg, v) r100_mm_wreg(rdev, (reg), (v), false) | ||
1657 | #define WREG32_IDX(reg, v) r100_mm_wreg(rdev, (reg), (v), true) | ||
1654 | #define REG_SET(FIELD, v) (((v) << FIELD##_SHIFT) & FIELD##_MASK) | 1658 | #define REG_SET(FIELD, v) (((v) << FIELD##_SHIFT) & FIELD##_MASK) |
1655 | #define REG_GET(FIELD, v) (((v) << FIELD##_SHIFT) & FIELD##_MASK) | 1659 | #define REG_GET(FIELD, v) (((v) << FIELD##_SHIFT) & FIELD##_MASK) |
1656 | #define RREG32_PLL(reg) rdev->pll_rreg(rdev, (reg)) | 1660 | #define RREG32_PLL(reg) rdev->pll_rreg(rdev, (reg)) |
@@ -1675,7 +1679,7 @@ void r100_io_wreg(struct radeon_device *rdev, u32 reg, u32 v); | |||
1675 | tmp_ |= ((val) & ~(mask)); \ | 1679 | tmp_ |= ((val) & ~(mask)); \ |
1676 | WREG32_PLL(reg, tmp_); \ | 1680 | WREG32_PLL(reg, tmp_); \ |
1677 | } while (0) | 1681 | } while (0) |
1678 | #define DREG32_SYS(sqf, rdev, reg) seq_printf((sqf), #reg " : 0x%08X\n", r100_mm_rreg((rdev), (reg))) | 1682 | #define DREG32_SYS(sqf, rdev, reg) seq_printf((sqf), #reg " : 0x%08X\n", r100_mm_rreg((rdev), (reg), false)) |
1679 | #define RREG32_IO(reg) r100_io_rreg(rdev, (reg)) | 1683 | #define RREG32_IO(reg) r100_io_rreg(rdev, (reg)) |
1680 | #define WREG32_IO(reg, v) r100_io_wreg(rdev, (reg), (v)) | 1684 | #define WREG32_IO(reg, v) r100_io_wreg(rdev, (reg), (v)) |
1681 | 1685 | ||
diff --git a/drivers/gpu/drm/radeon/radeon_combios.c b/drivers/gpu/drm/radeon/radeon_combios.c index 45b660b27cfc..4af89126e223 100644 --- a/drivers/gpu/drm/radeon/radeon_combios.c +++ b/drivers/gpu/drm/radeon/radeon_combios.c | |||
@@ -3246,11 +3246,9 @@ static uint32_t combios_detect_ram(struct drm_device *dev, int ram, | |||
3246 | while (ram--) { | 3246 | while (ram--) { |
3247 | addr = ram * 1024 * 1024; | 3247 | addr = ram * 1024 * 1024; |
3248 | /* write to each page */ | 3248 | /* write to each page */ |
3249 | WREG32(RADEON_MM_INDEX, (addr) | RADEON_MM_APER); | 3249 | WREG32_IDX((addr) | RADEON_MM_APER, 0xdeadbeef); |
3250 | WREG32(RADEON_MM_DATA, 0xdeadbeef); | ||
3251 | /* read back and verify */ | 3250 | /* read back and verify */ |
3252 | WREG32(RADEON_MM_INDEX, (addr) | RADEON_MM_APER); | 3251 | if (RREG32_IDX((addr) | RADEON_MM_APER) != 0xdeadbeef) |
3253 | if (RREG32(RADEON_MM_DATA) != 0xdeadbeef) | ||
3254 | return 0; | 3252 | return 0; |
3255 | } | 3253 | } |
3256 | 3254 | ||
diff --git a/drivers/gpu/drm/radeon/radeon_cp.c b/drivers/gpu/drm/radeon/radeon_cp.c index 8b2797dc7b64..9143fc45e35b 100644 --- a/drivers/gpu/drm/radeon/radeon_cp.c +++ b/drivers/gpu/drm/radeon/radeon_cp.c | |||
@@ -116,20 +116,6 @@ u32 radeon_get_scratch(drm_radeon_private_t *dev_priv, int index) | |||
116 | } | 116 | } |
117 | } | 117 | } |
118 | 118 | ||
119 | u32 RADEON_READ_MM(drm_radeon_private_t *dev_priv, int addr) | ||
120 | { | ||
121 | u32 ret; | ||
122 | |||
123 | if (addr < 0x10000) | ||
124 | ret = DRM_READ32(dev_priv->mmio, addr); | ||
125 | else { | ||
126 | DRM_WRITE32(dev_priv->mmio, RADEON_MM_INDEX, addr); | ||
127 | ret = DRM_READ32(dev_priv->mmio, RADEON_MM_DATA); | ||
128 | } | ||
129 | |||
130 | return ret; | ||
131 | } | ||
132 | |||
133 | static u32 R500_READ_MCIND(drm_radeon_private_t *dev_priv, int addr) | 119 | static u32 R500_READ_MCIND(drm_radeon_private_t *dev_priv, int addr) |
134 | { | 120 | { |
135 | u32 ret; | 121 | u32 ret; |
diff --git a/drivers/gpu/drm/radeon/radeon_cursor.c b/drivers/gpu/drm/radeon/radeon_cursor.c index 0fe56c9f64bd..ad6df625e8b8 100644 --- a/drivers/gpu/drm/radeon/radeon_cursor.c +++ b/drivers/gpu/drm/radeon/radeon_cursor.c | |||
@@ -66,24 +66,25 @@ static void radeon_hide_cursor(struct drm_crtc *crtc) | |||
66 | struct radeon_device *rdev = crtc->dev->dev_private; | 66 | struct radeon_device *rdev = crtc->dev->dev_private; |
67 | 67 | ||
68 | if (ASIC_IS_DCE4(rdev)) { | 68 | if (ASIC_IS_DCE4(rdev)) { |
69 | WREG32(RADEON_MM_INDEX, EVERGREEN_CUR_CONTROL + radeon_crtc->crtc_offset); | 69 | WREG32_IDX(EVERGREEN_CUR_CONTROL + radeon_crtc->crtc_offset, |
70 | WREG32(RADEON_MM_DATA, EVERGREEN_CURSOR_MODE(EVERGREEN_CURSOR_24_8_PRE_MULT) | | 70 | EVERGREEN_CURSOR_MODE(EVERGREEN_CURSOR_24_8_PRE_MULT) | |
71 | EVERGREEN_CURSOR_URGENT_CONTROL(EVERGREEN_CURSOR_URGENT_1_2)); | 71 | EVERGREEN_CURSOR_URGENT_CONTROL(EVERGREEN_CURSOR_URGENT_1_2)); |
72 | } else if (ASIC_IS_AVIVO(rdev)) { | 72 | } else if (ASIC_IS_AVIVO(rdev)) { |
73 | WREG32(RADEON_MM_INDEX, AVIVO_D1CUR_CONTROL + radeon_crtc->crtc_offset); | 73 | WREG32_IDX(AVIVO_D1CUR_CONTROL + radeon_crtc->crtc_offset, |
74 | WREG32(RADEON_MM_DATA, (AVIVO_D1CURSOR_MODE_24BPP << AVIVO_D1CURSOR_MODE_SHIFT)); | 74 | (AVIVO_D1CURSOR_MODE_24BPP << AVIVO_D1CURSOR_MODE_SHIFT)); |
75 | } else { | 75 | } else { |
76 | u32 reg; | ||
76 | switch (radeon_crtc->crtc_id) { | 77 | switch (radeon_crtc->crtc_id) { |
77 | case 0: | 78 | case 0: |
78 | WREG32(RADEON_MM_INDEX, RADEON_CRTC_GEN_CNTL); | 79 | reg = RADEON_CRTC_GEN_CNTL; |
79 | break; | 80 | break; |
80 | case 1: | 81 | case 1: |
81 | WREG32(RADEON_MM_INDEX, RADEON_CRTC2_GEN_CNTL); | 82 | reg = RADEON_CRTC2_GEN_CNTL; |
82 | break; | 83 | break; |
83 | default: | 84 | default: |
84 | return; | 85 | return; |
85 | } | 86 | } |
86 | WREG32_P(RADEON_MM_DATA, 0, ~RADEON_CRTC_CUR_EN); | 87 | WREG32_IDX(reg, RREG32_IDX(reg) & ~RADEON_CRTC_CUR_EN); |
87 | } | 88 | } |
88 | } | 89 | } |
89 | 90 | ||
diff --git a/drivers/gpu/drm/radeon/radeon_drv.h b/drivers/gpu/drm/radeon/radeon_drv.h index a1b59ca96d01..e7fdf163a8ca 100644 --- a/drivers/gpu/drm/radeon/radeon_drv.h +++ b/drivers/gpu/drm/radeon/radeon_drv.h | |||
@@ -366,7 +366,6 @@ extern int radeon_cp_buffers(struct drm_device *dev, void *data, struct drm_file | |||
366 | extern u32 radeon_read_fb_location(drm_radeon_private_t *dev_priv); | 366 | extern u32 radeon_read_fb_location(drm_radeon_private_t *dev_priv); |
367 | extern void radeon_write_agp_location(drm_radeon_private_t *dev_priv, u32 agp_loc); | 367 | extern void radeon_write_agp_location(drm_radeon_private_t *dev_priv, u32 agp_loc); |
368 | extern void radeon_write_agp_base(drm_radeon_private_t *dev_priv, u64 agp_base); | 368 | extern void radeon_write_agp_base(drm_radeon_private_t *dev_priv, u64 agp_base); |
369 | extern u32 RADEON_READ_MM(drm_radeon_private_t *dev_priv, int addr); | ||
370 | 369 | ||
371 | extern void radeon_freelist_reset(struct drm_device * dev); | 370 | extern void radeon_freelist_reset(struct drm_device * dev); |
372 | extern struct drm_buf *radeon_freelist_get(struct drm_device * dev); | 371 | extern struct drm_buf *radeon_freelist_get(struct drm_device * dev); |