overlay: Use correct downscale for rotator.

Downscale is calculated based on area of dst and src.
Apply sqrt of downscale to each dimension.

Change-Id: I9def4ea5073e0e49a05103505a6b6f5013f0d579
hwc: Configure pipe for FB even if we exceed max layers

Even if we exceed max supported layers, configure pipe for FB
Because FB contents are always displayed using hwc

Also some minor code fixes

Change-Id: I740ab7e908c916373b1d87facd831e09098ce753

Conflicts:
	libhwcomposer/hwc.cpp
hwc: Add DMA pipe support in MDP composition.

This change adds support to MDP composition to use DMA pipes when
layer scaling is not needed. Also makes sure not to invoke
MDP rotator when DMA pipes are configured since MDP rotator will
expect both the DMA pipes to available for performing rotation.
In such cases, we let the first frame of rotated video frame to
fall back to FB.

Change-Id: Icf9dbd55bcc516335a8c9ede5ed0498fdd08a929
hwc: NULL check on buffer handle

In some cases it is seen that we receive a NULL handle on
suspend/resume. One such test case is open browser, suspend
device, resume device, unlock screen. Since we rely on the handle
to get the format, make sure it is not null.

Change-Id: Ia476887a831df33a50b2939a46c143b9c207ea9b
hwc: Add debug logging for fps

This is indicative of how many frames are posted to the display
by SurfaceFlinger. Set debug.gr.calcfps to 1 and restart the
framework to enable.

Change-Id: Ic503c14380fd7d8a5b062aa5da0d61bfc3991cb2
CRs-Fixed: 462010
hwc: clean up overlay on external display blank

- On suspend, SurfaceFlinger calls hwc_blank on primary and
  external separately, inbetween these calls there might be a
  update, which leads to acquiring overlay pipes for external
  which will not be cleared and results in showing up stale
  frame on external display
- This change clears all the overlay pipes used on every blank

Change-Id: I44d62b7d0fcd992cf8a26bb0c21df77952bc1381
CRs-fixed: 464070

Conflicts:
	libhwcomposer/hwc.cpp
libcopybit: protect all c2d copybit API's

- Each client API exposed by the copybit C2D needs
  to be protected.
- Add protection for clear_copybit and blit_copybit
- This is needed as clear_copybit was overriding the
  mapped gpuaddr while copybitwaitthread was waiting
  for transaction to finish and unmap
- After waitforTimestamp, the new addresses were
  unmapped leading to GPU Page fault

Change-Id: Ieeac10e73b05d3b47e602b2de4b4e64892737c9c
CRs-fixed: 470430

Conflicts:
	libcopybit/copybit_c2d.cpp
liboverlay: round off rotator downscale factor to nearest integer.

This reduces the MDP clock and bandwidth requirements and
avoids falling back to GPU composition.

CRs-fixed: 457295

Change-Id: I4408ee0485248987342df63669f1a6894ea0dd73
hwc: Ensure borderfill pipe is setup only after unblank

MDP operations should not be done in blank mode. Ensure that the
borderfill pipe is configured in prepare which happens after
unblank.

Change-Id: I97e75ab732015e0f02d12a24af37e4ed86b6b090

Conflicts:
	libhwcomposer/hwc_mdpcomp.cpp
hwc: Reset Layer cache on idle timeout

In the case where MDP composition is possible but we fall back to
the idle timeout, there is a possibility that all of the layer
handles that were cached in the _earlier_ idle timeout are the
same in the _next_ idle timeout. This could cause us to display a
stale frame. Reset LayerCache in prepare if we are in the idle
frame.

Change-Id: I3ab1b0f28044975978a32e082976b038242697d0
hwc: Sync for rotator

Implement sync for rotator.
If a buffer is rotated, it can be used by producer soon after
rotation (and it wont have to wait until vsync).

Mdp waits for the rotator buffer's release fence to signal
to start display.

Hwc waits for previous access to rotator buffer by MDP to finish
before using it.

Change-Id: I5664806a17c44d58af62a2825ce454089fcd31cf

Conflicts:
	libhwcomposer/hwc_utils.cpp
copybit: Fix type conversion error for GCC 4.7

GCC 4.7 has stricter type conversion rules

Change-Id: I699cfe1ceafb5728fb8e6f34f7b1996d3c812e7e
overlay: Bring back debug.mdpcomp.maxlayer

 * We're having underrun issues with 4-layer composition. It generally
   works, but when the system CPU ramps down and the device is mostly
   idle, underrun is happening.
 * Limiting to 3 layers solves the problem temporarily on these devices.
 * Readd the option so that the issue can be debugged without afflicting
   our current users with massive amounts of flickering.

Change-Id: I7ab7d013f65eaf12a3d21a91229dcaad6a815069

Conflicts:
	liboverlay/overlay.cpp
display: Add support for MDP 4.1

 * MDP 4.1 does not support the borderfill pipe and the baselayer logic
   should not be used.
 * Only use 3 pipes for MDP 4.1.

Change-Id: Ide542079902f35818300619f8eefd3d188342b5d
copybit: Fallback to SF heap when IOMMU isn't available

Change-Id: I0baa43a84fa12f8dbde8e958f1bb37f7a46f388b

Conflicts:
	libhwcomposer/hwc_copybit.cpp
hwc: Fix the copybit threshold comparison

Change-Id: Ife9d54d4592e2427e8de6e67b4c8f62b676b2679
libcopybit: Fix potential memory and surface leaks in c2d

- Check MAX_SURFACES while mapping GPU addr
 --- While mapping gpu address, first check if the request
     is less than the MAX_SURFACES allowed.
 --- Without this check, when the request exceeded MAX_SURFACES,
     there was memory leak as that gpu addr was not unmapped
- Map the destination surface only once
 --- The destination surface for the c2d blit will be the
     FRAME_BUFFER_TARGET per transaction
 --- Map this only once from the copybit_clear which is the first
     call by hwc for a transaction
- Increase MAX_RGB_SURFACES to 12
 --- To handle use cases where there are more than 8 RGB layers

Change-Id: Iffacde30ee88b9c21d0895cb1922aa981bb079e9
CRs-fixed: 475327
libhwcomposer: align rotator source buffers for tile format.

for tile format make the rotator source buffers aligned to 64 X 32.
This avoids rotator hang during source fetch.

Change-Id: I9e42788cc6f538b155c073028ce41bf48e1d9349
CRs-fixed: 473297
hwc: Close Fds in case of errors in openFramebuffer

Close opened Fds in case of errors in openFramebuffer
function.

Change-Id: Ifd80adf1eff0d2efd698cd4abd3980d5c1f333ab
CRs-fixed: 473488

Conflicts:
	libhwcomposer/hwc_utils.cpp
hwc: Fallback to GPU if source image width or height is less than 2

There is h/w limitation when MDP_OP_SCALE_RGB_ENHANCED bit and
MDP4_OP_SCALEX_EN or MDP_OP_SCALEY_EN bit is set.
The minimum block size is 2x2. MDP will hang if the source RGB image
height or width is equal to 1. Hence fallback to GPU in such cases.

Change-Id: I7333b097fd26bfb888865de9c39d1664bc87acca
CRs-fixed: 477581