spin_lock_irqsave(&ss->slock, flags);
 
-       for (i = 0; i < op->keylen; i += 4)
-               writel(*(op->key + i / 4), ss->base + SS_KEY0 + i);
+       for (i = 0; i < op->keylen / 4; i++)
+               writesl(ss->base + SS_KEY0 + i * 4, &op->key[i], 1);
 
        if (areq->iv) {
                for (i = 0; i < 4 && i < ivsize / 4; i++) {
                        v = *(u32 *)(areq->iv + i * 4);
-                       writel(v, ss->base + SS_IV0 + i * 4);
+                       writesl(ss->base + SS_IV0 + i * 4, &v, 1);
                }
        }
        writel(mode, ss->base + SS_CTL);
 
        spin_lock_irqsave(&ss->slock, flags);
 
-       for (i = 0; i < op->keylen; i += 4)
-               writel(*(op->key + i / 4), ss->base + SS_KEY0 + i);
+       for (i = 0; i < op->keylen / 4; i++)
+               writesl(ss->base + SS_KEY0 + i * 4, &op->key[i], 1);
 
        if (areq->iv) {
                for (i = 0; i < 4 && i < ivsize / 4; i++) {
                        v = *(u32 *)(areq->iv + i * 4);
-                       writel(v, ss->base + SS_IV0 + i * 4);
+                       writesl(ss->base + SS_IV0 + i * 4, &v, 1);
                }
        }
        writel(mode, ss->base + SS_CTL);