On 05/14/2015 03:03 PM, Arnd Bergmann wrote:
writel(cpu_to_le32(wor), &data->control->wor);
Why the double endianess swap? Are the registers defined to be CPU-endian?
You probably mean le32_to_cpu() here, not the other way round, although the effect is the same.
Maybe I'd doing the whole __le32 thing wrong, but I think cpu_to_le32(wor) is correct. 'wor' is a normal integer, so it's in "cpu" format. I want to convert it to le32 format so that I write an le32 value to memory. Therefore, cpu_to_le32(). Most calls to writel() use cpu_to_le32():
$ git grep -l "writel(cpu_to_le32" arch/m68k/coldfire/pci.c arch/mips/pci/ops-bcm63xx.c arch/mips/pci/ops-bonito64.c arch/mips/pci/ops-loongson2.c arch/parisc/include/asm/io.h drivers/atm/fore200e.c drivers/block/umem.c drivers/isdn/hardware/mISDN/hfcmulti.c drivers/mtd/nand/r852.c drivers/net/ethernet/brocade/bna/bfa_ioc.c drivers/parisc/eisa.c drivers/scsi/bfa/bfa_ioc.c drivers/scsi/bnx2fc/bnx2fc_hwi.c drivers/scsi/bnx2i/bnx2i_hwi.c drivers/scsi/hptiop.c drivers/scsi/mpt2sas/mpt2sas_base.c drivers/scsi/mpt3sas/mpt3sas_base.c drivers/scsi/nsp32_io.h drivers/staging/i2o/i2o.h drivers/usb/isp1760/isp1760-hcd.c sound/pci/mixart/mixart_hwdep.h
$ git grep -l "writel(le32_to_cpu" drivers/scsi/hpsa.c drivers/scsi/megaraid/megaraid_sas_fusion.c drivers/virtio/virtio_mmio.c