• Christophe Leroy's avatar
    powerpc: inline iomap accessors · 894fa235
    Christophe Leroy authored
    ioreadXX()/ioreadXXbe() accessors are equivalent to ppc
    in_leXX()/in_be16() accessors but they are not inlined.
    
    Since commit 0eb57368 ("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: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/18b357d68c4cde149f75c7a1031c850925cd8128.1605981539.git.christophe.leroy@csgroup.eu
    894fa235
io.h 30 KB