obj64-$(CONFIG_SMP)    += locks.o
 obj64-$(CONFIG_ALTIVEC)        += vmx-helper.o
 
-ifeq ($(CONFIG_GENERIC_CSUM),)
 obj-y                  += checksum_$(BITS).o checksum_wrappers.o
-endif
 
 obj-$(CONFIG_PPC_EMULATE_SSTEP)        += sstep.o ldstfp.o
 
 
         * work to calculate the correct checksum, we ignore that case
         * and take the potential slowdown of unaligned loads.
         */
-       rldicl. r6,r3,64-1,64-2         /* r6 = (r3 & 0x3) >> 1 */
+       rldicl. r6,r3,64-1,64-2         /* r6 = (r3 >> 1) & 0x3 */
        beq     .Lcsum_aligned
 
        li      r7,4
        beq     .Lcsum_finish
 
        lbz     r6,0(r3)
+#ifdef __BIG_ENDIAN__
        sldi    r9,r6,8                 /* Pad the byte out to 16 bits */
        adde    r0,r0,r9
+#else
+       adde    r0,r0,r6
+#endif
 
 .Lcsum_finish:
        addze   r0,r0                   /* add in final carry */
         * If the source and destination are relatively unaligned we only
         * align the source. This keeps things simple.
         */
-       rldicl. r6,r3,64-1,64-2         /* r6 = (r3 & 0x3) >> 1 */
+       rldicl. r6,r3,64-1,64-2         /* r6 = (r3 >> 1) & 0x3 */
        beq     .Lcopy_aligned
 
        li      r9,4
        beq     .Lcopy_finish
 
 srcnr; lbz     r6,0(r3)
+#ifdef __BIG_ENDIAN__
        sldi    r9,r6,8                 /* Pad the byte out to 16 bits */
        adde    r0,r0,r9
+#else
+       adde    r0,r0,r6
+#endif
 dstnr; stb     r6,0(r4)
 
 .Lcopy_finish: