• Russell King's avatar
    thermal: armada: fix legacy resource fixup · dc6946cb
    Russell King authored
    When the armada thermal module is inserted, removed and then reinserted,
    the system panics as per the messages below.  The reason is that "edit"
    a live resource in the resource tree twice, and end up with it pointing
    to some other hardware.
    
    Editing live resources (resources that are part of the registered
    resource tree) is not permissible - the resource tree is an ordered
    set of resources, sorted by start address, and when a new resource is
    inserted, it is validated that it (a) fits within its parent resource
    and (b) does not overlap a neighbouring resource.
    
    Get rid of this resource editing.  We can instead adjust the return
    value from ioremap() as ioremap() deals with the creation of page-
    based mappings - provided the adjustment does not cross a page
    boundary.
    
    SError Interrupt on CPU1, code 0xbf000000 -- SError
    CPU: 1 PID: 2749 Comm: modprobe Not tainted 4.19.0+ #175
    Hardware name: Marvell 8040 MACCHIATOBin Double shot (DT)
    pstate: 20400085 (nzCv daIf +PAN -UAO)
    pc : regmap_mmio_read+0x3c/0x60
    lr : regmap_mmio_read+0x3c/0x60
    sp : ffffff800d453900
    x29: ffffff800d453900 x28: ffffff800096a1d0
    x27: 0000000000000100 x26: ffffff80009696d8
    x25: ffffff8000969000 x24: ffffffc13a588918
    x23: ffffffc13a9a28a8 x22: ffffff800d4539dc
    x21: 0000000000000084 x20: ffffff800d4539dc
    x19: ffffffc13a5d5480 x18: 0000000000000000
    x17: 0000000000000000 x16: 0000000000000000
    x15: 0000000000000000 x14: 0000000000000000
    x13: 0000000000000000 x12: 0000000000000030
    x11: 0101010101010101 x10: 7f7f7f7f7f7f7f7f
    x9 : 0000000000000000 x8 : ffffffc13a5d5a80
    x7 : 0000000000000000 x6 : 000000000000003f
    x5 : 0000000000000000 x4 : 0000000000000000
    x3 : ffffff800851be70 x2 : ffffff800851bd60
    x1 : ffffff800d492ff8 x0 : 0000000000000000
    Kernel panic - not syncing: Asynchronous SError Interrupt
    CPU: 1 PID: 2749 Comm: modprobe Not tainted 4.19.0+ #175
    Hardware name: Marvell 8040 MACCHIATOBin Double shot (DT)
    Call trace:
     dump_backtrace+0x0/0x158
     show_stack+0x14/0x1c
     dump_stack+0x90/0xb0
     panic+0x128/0x298
     print_tainted+0x0/0xa8
     arm64_serror_panic+0x74/0x80
     do_serror+0x5c/0xb8
     el1_error+0xb4/0x144
     regmap_mmio_read+0x3c/0x60
     _regmap_bus_reg_read+0x18/0x20
     _regmap_read+0x64/0x180
     regmap_read+0x44/0x6c
     armada_ap806_init+0x24/0x5c [armada_thermal]
     armada_thermal_probe+0x2c8/0x37c [armada_thermal]
     platform_drv_probe+0x4c/0xb0
     really_probe+0x21c/0x2b4
     driver_probe_device+0x58/0xfc
     __driver_attach+0xd4/0xd8
     bus_for_each_dev+0x50/0xa0
     driver_attach+0x20/0x28
     bus_add_driver+0x1c4/0x228
     driver_register+0x6c/0x124
     __platform_driver_register+0x4c/0x54
     armada_thermal_driver_init+0x20/0x1000 [armada_thermal]
     do_one_initcall+0x30/0x204
     do_init_module+0x5c/0x1d4
     load_module+0x1a88/0x212c
     __se_sys_finit_module+0xa0/0xac
     __arm64_sys_finit_module+0x1c/0x24
     el0_svc_common+0x94/0xf0
     el0_svc_handler+0x24/0x80
     el0_svc+0x8/0x3c0
    SMP: stopping secondary CPUs
    Kernel Offset: disabled
    CPU features: 0x0,21806000
    Memory Limit: none
    Signed-off-by: default avatarRussell King <rmk+kernel@armlinux.org.uk>
    Tested-by: default avatarMiquel Raynal <miquel.raynal@bootlin.com>
    Signed-off-by: default avatarEduardo Valentin <edubezval@gmail.com>
    dc6946cb
armada_thermal.c 18.7 KB