powerpc: inline iomap accessors
authorChristophe Leroy <christophe.leroy@csgroup.eu>
Sat, 21 Nov 2020 17:59:19 +0000 (17:59 +0000)
committerMichael Ellerman <mpe@ellerman.id.au>
Thu, 3 Dec 2020 14:01:09 +0000 (01:01 +1100)
commit894fa235eb4ca0bfa692dbe4932c2f940cdc8c1e
treead55bcdbb4f61574f68690e59cc48101bb52b042
parentf75e7d73bdf73f07b0701a6d21c111ef5d9021dd
powerpc: inline iomap accessors

ioreadXX()/ioreadXXbe() accessors are equivalent to ppc
in_leXX()/in_be16() accessors but they are not inlined.

Since commit 0eb573682872 ("powerpc/kerenl: Enable EEH for IO
accessors"), the 'le' versions are equivalent to the ones
defined in asm-generic/io.h, allthough the ones there are inlined.

Include asm-generic/io.h to get them. Keep ppc versions of the
'be' ones as they are optimised, but make them inline in ppc io.h.

This reduces the size of ppc64e_defconfig build by 3 kbytes:

   text    data     bss     dec     hex filename
10160733 4343422  562972 15067127  e5e7f7 vmlinux.before
10159239 4341590  562972 15063801  e5daf9 vmlinux.after

A typical function using ioread and iowrite before the change:

c00000000066a3c4 <.ata_bmdma_stop>:
c00000000066a3c4: 7c 08 02 a6  mflr    r0
c00000000066a3c8: fb c1 ff f0  std     r30,-16(r1)
c00000000066a3cc: f8 01 00 10  std     r0,16(r1)
c00000000066a3d0: fb e1 ff f8  std     r31,-8(r1)
c00000000066a3d4: f8 21 ff 81  stdu    r1,-128(r1)
c00000000066a3d8: eb e3 00 00  ld      r31,0(r3)
c00000000066a3dc: eb df 00 98  ld      r30,152(r31)
c00000000066a3e0: 7f c3 f3 78  mr      r3,r30
c00000000066a3e4: 4b 9b 6f 7d  bl      c000000000021360 <.ioread8>
c00000000066a3e8: 60 00 00 00  nop
c00000000066a3ec: 7f c4 f3 78  mr      r4,r30
c00000000066a3f0: 54 63 06 3c  rlwinm  r3,r3,0,24,30
c00000000066a3f4: 4b 9b 70 4d  bl      c000000000021440 <.iowrite8>
c00000000066a3f8: 60 00 00 00  nop
c00000000066a3fc: 7f e3 fb 78  mr      r3,r31
c00000000066a400: 38 21 00 80  addi    r1,r1,128
c00000000066a404: e8 01 00 10  ld      r0,16(r1)
c00000000066a408: eb c1 ff f0  ld      r30,-16(r1)
c00000000066a40c: 7c 08 03 a6  mtlr    r0
c00000000066a410: eb e1 ff f8  ld      r31,-8(r1)
c00000000066a414: 4b ff ff 8c  b       c00000000066a3a0 <.ata_sff_dma_pause>

The same function with this patch:

c000000000669cb4 <.ata_bmdma_stop>:
c000000000669cb4: e8 63 00 00  ld      r3,0(r3)
c000000000669cb8: e9 43 00 98  ld      r10,152(r3)
c000000000669cbc: 7c 00 04 ac  hwsync
c000000000669cc0: 89 2a 00 00  lbz     r9,0(r10)
c000000000669cc4: 0c 09 00 00  twi     0,r9,0
c000000000669cc8: 4c 00 01 2c  isync
c000000000669ccc: 55 29 06 3c  rlwinm  r9,r9,0,24,30
c000000000669cd0: 7c 00 04 ac  hwsync
c000000000669cd4: 99 2a 00 00  stb     r9,0(r10)
c000000000669cd8: a1 4d 06 f0  lhz     r10,1776(r13)
c000000000669cdc: 2c 2a 00 00  cmpdi   r10,0
c000000000669ce0: 41 c2 00 08  beq-    c000000000669ce8 <.ata_bmdma_stop+0x34>
c000000000669ce4: b1 4d 06 f2  sth     r10,1778(r13)
c000000000669ce8: 4b ff ff a8  b       c000000000669c90 <.ata_sff_dma_pause>

Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/18b357d68c4cde149f75c7a1031c850925cd8128.1605981539.git.christophe.leroy@csgroup.eu
arch/powerpc/include/asm/io.h
arch/powerpc/kernel/iomap.c