Commit 22ed1113 authored by Chris Wilson's avatar Chris Wilson

drm/i915: Death to the unnecessary 64bit divide

Use the hardware DDA to calculate the ratio with as much accuracy as is
possible.
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Cc: stable@kernel.org
parent 47f1c6c9
...@@ -2714,27 +2714,19 @@ fdi_reduce_ratio(u32 *num, u32 *den) ...@@ -2714,27 +2714,19 @@ fdi_reduce_ratio(u32 *num, u32 *den)
} }
} }
#define DATA_N 0x800000
#define LINK_N 0x80000
static void static void
ironlake_compute_m_n(int bits_per_pixel, int nlanes, int pixel_clock, ironlake_compute_m_n(int bits_per_pixel, int nlanes, int pixel_clock,
int link_clock, struct fdi_m_n *m_n) int link_clock, struct fdi_m_n *m_n)
{ {
u64 temp;
m_n->tu = 64; /* default size */ m_n->tu = 64; /* default size */
temp = (u64) DATA_N * pixel_clock; /* BUG_ON(pixel_clock > INT_MAX / 36); */
temp = div_u64(temp, link_clock); m_n->gmch_m = bits_per_pixel * pixel_clock;
m_n->gmch_m = div_u64(temp * bits_per_pixel, nlanes); m_n->gmch_n = link_clock * nlanes * 8;
m_n->gmch_m >>= 3; /* convert to bytes_per_pixel */
m_n->gmch_n = DATA_N;
fdi_reduce_ratio(&m_n->gmch_m, &m_n->gmch_n); fdi_reduce_ratio(&m_n->gmch_m, &m_n->gmch_n);
temp = (u64) LINK_N * pixel_clock; m_n->link_m = pixel_clock;
m_n->link_m = div_u64(temp, link_clock); m_n->link_n = link_clock;
m_n->link_n = LINK_N;
fdi_reduce_ratio(&m_n->link_m, &m_n->link_n); fdi_reduce_ratio(&m_n->link_m, &m_n->link_n);
} }
......
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