diff options
author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2011-07-13 02:28:15 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2011-07-25 07:27:05 -0400 |
commit | f1bece7fde9820a99c14d4db46ef071000e4ba47 (patch) | |
tree | 31a7e243cd9bf1f3c4a81e49b40682e5bef2151c /drivers | |
parent | edc02bffbdcd92086f5cc9d715143e51acfa90ee (diff) |
drm/radeon: ATOM Endian fix for atombios_crtc_program_pll()
v6 of the structure was programmed incorrectly:
args.v6.ulCrtcPclkFreq.ulPixelClock = cpu_to_le32(clock / 10);
ulPixelClock is a 24-bit bitfield. This statement would thus
do a 32-bit swap of (clock / 10) and drop the top 8 bits which
are ... the LSB. Not what we want. Instead use masks & shifts.
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/gpu/drm/radeon/atombios_crtc.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c index 9541995e4b21..c742944d3805 100644 --- a/drivers/gpu/drm/radeon/atombios_crtc.c +++ b/drivers/gpu/drm/radeon/atombios_crtc.c | |||
@@ -764,7 +764,7 @@ static void atombios_crtc_set_dcpll(struct drm_crtc *crtc, | |||
764 | } | 764 | } |
765 | 765 | ||
766 | static void atombios_crtc_program_pll(struct drm_crtc *crtc, | 766 | static void atombios_crtc_program_pll(struct drm_crtc *crtc, |
767 | int crtc_id, | 767 | u32 crtc_id, |
768 | int pll_id, | 768 | int pll_id, |
769 | u32 encoder_mode, | 769 | u32 encoder_mode, |
770 | u32 encoder_id, | 770 | u32 encoder_id, |
@@ -851,8 +851,7 @@ static void atombios_crtc_program_pll(struct drm_crtc *crtc, | |||
851 | args.v5.ucPpll = pll_id; | 851 | args.v5.ucPpll = pll_id; |
852 | break; | 852 | break; |
853 | case 6: | 853 | case 6: |
854 | args.v6.ulCrtcPclkFreq.ucCRTC = crtc_id; | 854 | args.v6.ulDispEngClkFreq = cpu_to_le32(crtc_id << 24 | clock / 10); |
855 | args.v6.ulCrtcPclkFreq.ulPixelClock = cpu_to_le32(clock / 10); | ||
856 | args.v6.ucRefDiv = ref_div; | 855 | args.v6.ucRefDiv = ref_div; |
857 | args.v6.usFbDiv = cpu_to_le16(fb_div); | 856 | args.v6.usFbDiv = cpu_to_le16(fb_div); |
858 | args.v6.ulFbDivDecFrac = cpu_to_le32(frac_fb_div * 100000); | 857 | args.v6.ulFbDivDecFrac = cpu_to_le32(frac_fb_div * 100000); |