30 Dec, 2020

1 commit

  • [ Upstream commit 9905f728b0bda737fe2c2afd7c24f3365a45cc7b ]

    The mhu_db_channel info is allocated per channel using devm_kzalloc from
    mhu_db_mbox_xlate which gets called from mbox_request_channel. However
    we are releasing the allocated mhu_db_channel info using plain kfree from
    mhu_db_shutdown which is called from mbox_free_channel.

    This leads to random crashes when the channel is freed like below one:

    Unable to handle kernel paging request at virtual address 0080000400000008
    [0080000400000008] address between user and kernel address ranges
    Internal error: Oops: 96000044 [#1] PREEMPT SMP
    Modules linked in: scmi_module(-)
    CPU: 1 PID: 2212 Comm: rmmod Not tainted 5.10.0-rc5 #31
    Hardware name: ARM LTD ARM Juno Development Platform/ARM Juno
    Development Platform, BIOS EDK II Nov 19 2020
    pstate: 20000085 (nzCv daIf -PAN -UAO -TCO BTYPE=--)
    pc : release_nodes+0x74/0x230
    lr : devres_release_all+0x40/0x68
    Call trace:
    release_nodes+0x74/0x230
    devres_release_all+0x40/0x68
    device_release_driver_internal+0x12c/0x1f8
    driver_detach+0x58/0xe8
    bus_remove_driver+0x64/0xe0
    driver_unregister+0x38/0x68
    platform_driver_unregister+0x1c/0x28
    scmi_driver_exit+0x38/0x44 [scmi_module]
    __arm64_sys_delete_module+0x188/0x260
    el0_svc_common.constprop.0+0x80/0x1a8
    do_el0_svc+0x2c/0x98
    el0_sync_handler+0x160/0x168
    el0_sync+0x174/0x180
    Code: 1400000d eb07009f 54000460 f9400486 (f90004a6)
    ---[ end trace c55ffd306c140233 ]---

    Fix it by replacing kfree with devm_kfree as required.

    Fixes: 7002ca237b21 ("mailbox: arm_mhu: Add ARM MHU doorbell driver")
    Reported-by: Cristian Marussi
    Signed-off-by: Sudeep Holla
    Tested-by: Cristian Marussi
    Reviewed-by: Cristian Marussi
    Signed-off-by: Jassi Brar
    Signed-off-by: Sasha Levin

    Sudeep Holla
     

13 Oct, 2020

1 commit

  • The MHU drives the signal using a 32-bit register, with all 32 bits
    logically ORed together. The MHU provides a set of registers to enable
    software to set, clear, and check the status of each of the bits of this
    register independently. The use of 32 bits for each interrupt line
    enables software to provide more information about the source of the
    interrupt. For example, each bit of the register can be associated with
    a type of event that can contribute to raising the interrupt.

    This patch adds a separate the MHU controller driver for doorbel mode
    of operation using the extended DT binding to add support the same.

    Signed-off-by: Sudeep Holla
    Signed-off-by: Jassi Brar

    Sudeep Holla