arm/crypto: Add optimized AES and SHA1 routines

Add assembler versions of AES and SHA1 for ARM platforms.  This has provided
up to a 50% improvement in IPsec/TCP throughout for tunnels using AES128/SHA1.

Platform   CPU SPeed    Endian   Before (bps)   After (bps)   Improvement

IXP425      533 MHz      big     11217042        15566294        ~38%
KS8695      166 MHz     little    3828549         5795373        ~51%

Signed-off-by: David McCullough <ucdevel@gmail.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>

ARM: 7626/1: arm/crypto: Make asm SHA-1 and AES code Thumb-2 compatible

This patch fixes aes-armv4.S and sha1-armv4-large.S to work
natively in Thumb.  This allows ARM/Thumb interworking workarounds
to be removed.

I also take the opportunity to convert some explicit assembler
directives for exported functions to the standard
ENTRY()/ENDPROC().

For the code itself:

  * In sha1_block_data_order, use of TEQ with sp is deprecated in
    ARMv7 and not supported in Thumb.  For the branches back to
    .L_00_15 and .L_40_59, the TEQ is converted to a CMP, under the
    assumption that clobbering the C flag here will not cause
    incorrect behaviour.

    For the first branch back to .L_20_39_or_60_79 the C flag is
    important, so sp is moved temporarily into another register so
    that TEQ can be used for the comparison.

  * In the AES code, most forms of register-indexed addressing with
    shifts and rotates are not permitted for loads and stores in
    Thumb, so the address calculation is done using a separate
    instruction for the Thumb case.

The resulting code is unlikely to be optimally scheduled, but it
should not have a large impact given the overall size of the code.
I haven't run any benchmarks.

Signed-off-by: Dave Martin <dave.martin@linaro.org>
Tested-by: David McCullough <ucdevel@gmail.com> (ARM only)
Acked-by: David McCullough <ucdevel@gmail.com>
Acked-by: Nicolas Pitre <nico@linaro.org>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>

ARM: 7723/1: crypto: sha1-armv4-large.S: fix SP handling

Make the SHA1 asm code ABI conformant by making sure all stack
accesses occur above the stack pointer.

Origin:
http://git.openssl.org/gitweb/?p=openssl.git;a=commit;h=1a9d60d2

Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Acked-by: Nicolas Pitre <nico@linaro.org>
Cc: stable@vger.kernel.org
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>

ARM: 7837/3: fix Thumb-2 bug in AES assembler code

commit 40190c85f427dcfdbab5dbef4ffd2510d649da1f upstream.

Patch 638591c enabled building the AES assembler code in Thumb2 mode.
However, this code used arithmetic involving PC rather than adr{l}
instructions to generate PC-relative references to the lookup tables,
and this needs to take into account the different PC offset when
running in Thumb mode.

Change-Id: I0d036eaa94dabefa0a025d522f415c663d00ae9f
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Acked-by: Nicolas Pitre <nico@linaro.org>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
sony: msm8974: enable optimized arm aes routine

Change-Id: I6d2dd43d569d1d465ea54c3cdc6f8a67840ac428
sony: msm8974: lp defconfigs updates

Change-Id: Ib320e75a840d3a621ba1a7e5d62e63b6ce2f7b45
ASoC: msm: Add bounds checking to ADM get params

Add additional bounds checking to ADM get params.
Validate that all buffer sizes are valid before
dereferencing.

Change-Id: If7c7a5ae6a56812e9c4a11a38c9bdc78f42d09f3
Signed-off-by: Ben Romberger <bromberg@codeaurora.org>

Conflicts:
	sound/soc/msm/qdsp6v2/q6adm.c
diag: Mode reset command has to be handled on APPS proc

Mode reset command is handled by APPS proc. If the apps process
has not registered with diag for handling the mode reset command,
diag has to send error response code back. This patch fixes
that issue.

Change-Id: Id4d99f0e909fa3a78e8682825984a99042021bad
Signed-off-by: Katish Paran <kparan@codeaurora.org>
crypto: msm: re-work qcrypto driver clk and bus management

This patch re-works bus scaling and clk management to respond to
the actual crypto engine usage. The driver suspend/resume are
integrated with overall driver clk and bus management.

Furthermore, two functions are added to the low level crypto driver. Low
level crypto driver is informed to save and restored hardware context if
necessary across PM suspend/resume.

Change-Id: Ic906e0c7e96dee847253d6ef57341d1a38e294cf
Acked-by: Chemin Hsieh <cheminh@qti.qualcomm.com>
Signed-off-by: Rohit Vaswani <rvaswani@codeaurora.org>
Signed-off-by: Zhen Kong <zkong@codeaurora.org>

Conflicts:
	drivers/crypto/msm/qcrypto.c
crypto: msm: Add support for FIPS complience

FIPS140-2 certification asks to do a Power on Known Answer tests on each
algorithm which is getting certified. This patch implements the self tests
and hardcoded test vectors.  Also, we need to verify the integrity of
kernel as soon as it boots up. This patch also adds an ioctl for
integrity test along with ioctl to query FIPS status (pass / fail) from
user land.
also, The piece of code is added for FIPS compliance DRBG under
drivers/char/hw_random
This change is already merged to KK mainline.

Change-Id: I7f3355602d5c2dfaefce0c0e4f9225fde0c5f485
Signed-off-by: Dinesh K Garg <dineshg@codeaurora.org>
hw_random: msm_rng: fix a null pointer dereference

This change prevents a possible null pointer
dereference in msm_rng.c by moving the function
call under if block.

Change-Id: I481b39c91e495692e575a90b392095e95eb1f367
Acked-by: Saurabh Sabnis <ssabnis@qti.qualcomm.com>
Signed-off-by: Dinesh K Garg <dineshg@codeaurora.org>
crypto: msm: Remove bw_reaper_timer while in suspend mode

Remove bw_reaper_timer timer while in suspend mode. Otherwise, it
may cause power regression than normal.

Change-Id: I5cab2b75baf96e08c7f7a179fdd15509bd919a69
Acked-by: Chemin Hsieh <cheminh@qti.qualcomm.com>
Signed-off-by: William Clark <wclark@codeaurora.org>
crypto: msm: change timer operation to fix timer list corruption

remove the dulplicate init_timer operation in _qcrypto_resume and
replace add_timer with mod_timer to resolve timer list corruption.

Change-Id: I206016686be568ce2eefc41ea74d34639a8b04e5
Signed-off-by: Zhen Kong <zkong@codeaurora.org>
crypto: msm: Don't enable crypto clock in PM resume

If a PM suspend happens right after resume, crypto driver returns
-EBUSY, since reaper worker thread has not kicked in. The suspend
can only succeed after timer kicks in to disable crypto clock and
free bus.
The solution is as the following. Don't enable crypto
clock and allocate bus bandwidth when entering resume if
there is no outstanding crypto requests. The next crypto
operation will enable crypto clock then. Further more, this patch
shortens the reaper timer from 1 second to 200 ms.

Change-Id: I116cf1454b020ee2886c8bf6696b6411a5df83b6
Signed-off-by: Zhen Kong <zkong@codeaurora.org>
crypto: msm: Make changes to the reaper timer

Change the periodical reaper timer to on-demand basis. The reaper timer
is only set to disable clock after the clock is enabled, and it is
removed when there is no crypto operations. So that we can prevent the
timers from unnecessarily waking up the CPU from power collapse. The
timer interval is changed to 1 second.

CRs-Fixed: 719848
Change-Id: I88901653b779315de558a33ec6d92979c0176e28
Signed-off-by: Zhen Kong <zkong@codeaurora.org>
crypto: msm: check potential integer overflow

According to the specification of AEAD, AEAD request crypt length is
not a fixed maximum and associated length is also same. This could
lead to potential integer overflow, thus allocating less memory. So
we need to check potential integer overflow on AEAD request length.

CRs-Fixed: 726872
Change-Id: Ie7708000bfd8c57e2fba8e02230a7ce9cdc9634c
Signed-off-by: William Clark <wclark@codeaurora.org>
msm: smd_pkt: Remove hexdump of  userspace read/write buffers

Dumping userspace read/write buffers without first copying the data may
lead to a kernel panic if the buffer is unmapped after the buffer has
been validated but before the VFS call returns.

Remove the debug code to print the data using userspace buffers.

CRs-Fixed: 730626
Change-Id: I95c0d751121812fd5d5f30e2b4ee221b1fc36083
Signed-off-by: Arun Kumar Neelakantam <aneela@codeaurora.org>
Signed-off-by: Eric Holmberg <eholmber@codeaurora.org>
msm: mdss: fix the RGB666 PACK_ALIGN setting for dsi

For RGB 666 panel format on DSI, a change has been made earlier to set the
alignment to MSB. This was causing color corruption on EDP panel as it
requires LSB alignment. This fix is to set the MSB alignment for RGB666
format only on DSI panels, so that it doesn't affect EDP.

Change-Id: If07b915bb30b00ff1824c7c662bbf4db8a217a6b
Signed-off-by: Vineet Bajaj <vbajaj@codeaurora.org>

Conflicts:
	drivers/video/msm/mdss/mdss_mdp_hwio.h
msm: ipa: support ioctl about upstream wan iface

CnE in user-space will ioctl ipa-driver to
inform which interface is the updtream WAN
iface and IPACM will set default route
based on this info.

Change-Id: I973d424c62c399c644ba368a48f6941f31ae1293
Signed-off-by: Skylar Chang <chiaweic@codeaurora.org>
msm: mdss: Remove check for play count on VIG pipe for CSC

The play count will not be reset to 0 in static screen case.
However, we still need to reset the CSC setup because the
registers would be reset.

Change-Id: Id2f6d9317b4da561ec31b6454166704493880b81
CRs-Fixed: 716190
Signed-off-by: Benet Clark <benetc@codeaurora.org>
msm: ipc_logging: remove internal details from header

Some internal details no longer need to be shared between modules, so
they can be moved to the main implementation file to avoid unnecessary
coupling in the future.

Change-Id: Ie8774f0c95f5ec6a56a95c57fea79032194eb05e
Signed-off-by: Eric Holmberg <eholmber@codeaurora.org>
msm: ipc_logging: add client version support

If clients use custom serialization functions, then they may need to
define a version for deserialization support for log extraction.

Add client version support.

Change-Id: Id135f06d4142de39275b5d0caab88708d5496b5e
Signed-off-by: Eric Holmberg <eholmber@codeaurora.org>
msm: ipc_logging: add locking hierarchy

Add locking hierarchy to allow identification of deadlocks by code
inspection.

Change-Id: I41cd479d72be7b2c729fbf09b5b89180c0a11191
Signed-off-by: Eric Holmberg <eholmber@codeaurora.org>