#include <crypto/internal/simd.h>
 #include <asm/cpu_device_id.h>
 #include <asm/simd.h>
+#include <asm/unaligned.h>
 
 #define GHASH_BLOCK_SIZE       16
 #define GHASH_DIGEST_SIZE      16
                        const u8 *key, unsigned int keylen)
 {
        struct ghash_ctx *ctx = crypto_shash_ctx(tfm);
-       be128 *x = (be128 *)key;
        u64 a, b;
 
        if (keylen != GHASH_BLOCK_SIZE)
                return -EINVAL;
 
        /* perform multiplication by 'x' in GF(2^128) */
-       a = be64_to_cpu(x->a);
-       b = be64_to_cpu(x->b);
+       a = get_unaligned_be64(key);
+       b = get_unaligned_be64(key + 8);
 
        ctx->shash.a = (b << 1) | (a >> 63);
        ctx->shash.b = (a << 1) | (b >> 63);