Commit Graph

2 Commits

Author SHA1 Message Date
Adrien Thierry 99f0cbce74 asm-generic/io: Add _RET_IP_ to MMIO trace for more accurate debug info
Bugzilla: https://bugzilla.redhat.com/2196244

commit 5e5ff73c2e5863f93fc5fd78d178cd8f2af12464
Author: Sai Prakash Ranjan <quic_saipraka@quicinc.com>
Date:   Mon Oct 17 20:04:50 2022 +0530

    asm-generic/io: Add _RET_IP_ to MMIO trace for more accurate debug info

    Due to compiler optimizations like inlining, there are cases where
    MMIO traces using _THIS_IP_ for caller information might not be
    sufficient to provide accurate debug traces.

    1) With optimizations (Seen with GCC):

    In this case, _THIS_IP_ works fine and prints the caller information
    since it will be inlined into the caller and we get the debug traces
    on who made the MMIO access, for ex:

    rwmmio_read: qcom_smmu_tlb_sync+0xe0/0x1b0 width=32 addr=0xffff8000087447f4
    rwmmio_post_read: qcom_smmu_tlb_sync+0xe0/0x1b0 width=32 val=0x0 addr=0xffff8000087447f4

    2) Without optimizations (Seen with Clang):

    _THIS_IP_ will not be sufficient in this case as it will print only
    the MMIO accessors itself which is of not much use since it is not
    inlined as below for example:

    rwmmio_read: readl+0x4/0x80 width=32 addr=0xffff8000087447f4
    rwmmio_post_read: readl+0x48/0x80 width=32 val=0x4 addr=0xffff8000087447f4

    So in order to handle this second case as well irrespective of the compiler
    optimizations, add _RET_IP_ to MMIO trace to make it provide more accurate
    debug information in all these scenarios.

    Before:

    rwmmio_read: readl+0x4/0x80 width=32 addr=0xffff8000087447f4
    rwmmio_post_read: readl+0x48/0x80 width=32 val=0x4 addr=0xffff8000087447f4

    After:

    rwmmio_read: qcom_smmu_tlb_sync+0xe0/0x1b0 -> readl+0x4/0x80 width=32 addr=0xffff8000087447f4
    rwmmio_post_read: qcom_smmu_tlb_sync+0xe0/0x1b0 -> readl+0x4/0x80 width=32 val=0x0 addr=0xffff8000087447f4

    Fixes: 210031971cdd ("asm-generic/io: Add logging support for MMIO accessors")
    Signed-off-by: Sai Prakash Ranjan <quic_saipraka@quicinc.com>
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>

Signed-off-by: Adrien Thierry <athierry@redhat.com>
2023-05-08 12:17:14 -04:00
Adrien Thierry 7d8a7a1563 lib: Add register read/write tracing support
Bugzilla: https://bugzilla.redhat.com/2196244

commit d593d64f043add170d8ea9cf698449637917dcf9
Author: Prasad Sodagudi <psodagud@codeaurora.org>
Date:   Wed May 18 22:14:14 2022 +0530

    lib: Add register read/write tracing support

    Generic MMIO read/write i.e., __raw_{read,write}{b,l,w,q} accessors
    are typically used to read/write from/to memory mapped registers
    and can cause hangs or some undefined behaviour in following few
    cases,

    * If the access to the register space is unclocked, for example: if
      there is an access to multimedia(MM) block registers without MM
      clocks.

    * If the register space is protected and not set to be accessible from
      non-secure world, for example: only EL3 (EL: Exception level) access
      is allowed and any EL2/EL1 access is forbidden.

    * If xPU(memory/register protection units) is controlling access to
      certain memory/register space for specific clients.

    and more...

    Such cases usually results in instant reboot/SErrors/NOC or interconnect
    hangs and tracing these register accesses can be very helpful to debug
    such issues during initial development stages and also in later stages.

    So use ftrace trace events to log such MMIO register accesses which
    provides rich feature set such as early enablement of trace events,
    filtering capability, dumping ftrace logs on console and many more.

    Sample output:

    rwmmio_write: __qcom_geni_serial_console_write+0x160/0x1e0 width=32 val=0xa0d5d addr=0xfffffbfffdbff700
    rwmmio_post_write: __qcom_geni_serial_console_write+0x160/0x1e0 width=32 val=0xa0d5d addr=0xfffffbfffdbff700
    rwmmio_read: qcom_geni_serial_poll_bit+0x94/0x138 width=32 addr=0xfffffbfffdbff610
    rwmmio_post_read: qcom_geni_serial_poll_bit+0x94/0x138 width=32 val=0x0 addr=0xfffffbfffdbff610

    Co-developed-by: Sai Prakash Ranjan <quic_saipraka@quicinc.com>
    Signed-off-by: Prasad Sodagudi <psodagud@codeaurora.org>
    Signed-off-by: Sai Prakash Ranjan <quic_saipraka@quicinc.com>
    Acked-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>

Signed-off-by: Adrien Thierry <athierry@redhat.com>
2023-05-08 12:17:14 -04:00