• Niklas Söderlund's avatar
    pinctrl: sh-pfc: r8a7795: Use lookup function for bias data · d3b861bc
    Niklas Söderlund authored
    There is a bug in the r8a7795 bias code where a WARN() is trigged
    anytime a pin from PUEN0/PUD0 is accessed.
    
     # cat /sys/kernel/debug/pinctrl/e6060000.pfc/pinconf-pins
    
     WARNING: CPU: 2 PID: 2391 at drivers/pinctrl/sh-pfc/pfc-r8a7795.c:5364 r8a7795_pinmux_get_bias+0xbc/0xc8
     [..]
     Call trace:
     [<ffff0000083c442c>] r8a7795_pinmux_get_bias+0xbc/0xc8
     [<ffff0000083c37f4>] sh_pfc_pinconf_get+0x194/0x270
     [<ffff0000083b0768>] pin_config_get_for_pin+0x20/0x30
     [<ffff0000083b11e8>] pinconf_generic_dump_one+0x168/0x188
     [<ffff0000083b144c>] pinconf_generic_dump_pins+0x5c/0x98
     [<ffff0000083b0628>] pinconf_pins_show+0xc8/0x128
     [<ffff0000081fe3bc>] seq_read+0x16c/0x420
     [<ffff00000831a110>] full_proxy_read+0x58/0x88
     [<ffff0000081d7ad4>] __vfs_read+0x1c/0xf8
     [<ffff0000081d8874>] vfs_read+0x84/0x148
     [<ffff0000081d9d64>] SyS_read+0x44/0xa0
     [<ffff000008082f4c>] __sys_trace_return+0x0/0x4
    
    This is due to the WARN() check if the reg field of the pullups struct
    is zero, and this should be 0 for pins controlled by the PUEN0/PUD0
    registers since PU0 is defined as 0. Change the data structure and use
    the generic sh_pfc_pin_to_bias_info() function to get the register
    offset and bit information.
    
    Fixes: 56065524 ("pinctrl: sh-pfc: r8a7795: Add bias pinconf support")
    Signed-off-by: default avatarNiklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
    Reviewed-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
    Signed-off-by: default avatarGeert Uytterhoeven <geert+renesas@glider.be>
    d3b861bc
pfc-r8a7795.c 175 KB