cdx: Replace custom mcdi logging with print_hex_dump_debug()
authorAbhijit Gangurde <abhijit.gangurde@amd.com>
Tue, 13 Jun 2023 08:43:18 +0000 (14:13 +0530)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 15 Jun 2023 11:42:16 +0000 (13:42 +0200)
Replace custom mcdi logging for send and receive requests
with dynamic debug method print_hex_dump_debug().

Signed-off-by: Abhijit Gangurde <abhijit.gangurde@amd.com>
Message-ID: <20230613084318.27996-1-abhijit.gangurde@amd.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/cdx/controller/Kconfig
drivers/cdx/controller/mcdi.c
drivers/cdx/controller/mcdi.h

index c3e3b9f..61bf17f 100644 (file)
@@ -18,14 +18,4 @@ config CDX_CONTROLLER
 
          If unsure, say N.
 
-config MCDI_LOGGING
-       bool "MCDI Logging for the CDX controller"
-       depends on CDX_CONTROLLER
-       help
-         Enable MCDI Logging for
-         the CDX Controller for debug
-         purpose.
-
-         If unsure, say N.
-
 endif
index a211a2c..1eedc5e 100644 (file)
@@ -31,10 +31,6 @@ struct cdx_mcdi_copy_buffer {
        struct cdx_dword buffer[DIV_ROUND_UP(MCDI_CTL_SDU_LEN_MAX, 4)];
 };
 
-#ifdef CONFIG_MCDI_LOGGING
-#define LOG_LINE_MAX           (1024 - 32)
-#endif
-
 static void cdx_mcdi_cancel_cmd(struct cdx_mcdi *cdx, struct cdx_mcdi_cmd *cmd);
 static void cdx_mcdi_wait_for_cleanup(struct cdx_mcdi *cdx);
 static int cdx_mcdi_rpc_async_internal(struct cdx_mcdi *cdx,
@@ -119,14 +115,9 @@ int cdx_mcdi_init(struct cdx_mcdi *cdx)
        mcdi = cdx_mcdi_if(cdx);
        mcdi->cdx = cdx;
 
-#ifdef CONFIG_MCDI_LOGGING
-       mcdi->logging_buffer = kmalloc(LOG_LINE_MAX, GFP_KERNEL);
-       if (!mcdi->logging_buffer)
-               goto fail2;
-#endif
        mcdi->workqueue = alloc_ordered_workqueue("mcdi_wq", 0);
        if (!mcdi->workqueue)
-               goto fail3;
+               goto fail2;
        mutex_init(&mcdi->iface_lock);
        mcdi->mode = MCDI_MODE_EVENTS;
        INIT_LIST_HEAD(&mcdi->cmd_list);
@@ -135,11 +126,7 @@ int cdx_mcdi_init(struct cdx_mcdi *cdx)
        mcdi->new_epoch = true;
 
        return 0;
-fail3:
-#ifdef CONFIG_MCDI_LOGGING
-       kfree(mcdi->logging_buffer);
 fail2:
-#endif
        kfree(cdx->mcdi);
        cdx->mcdi = NULL;
 fail:
@@ -156,10 +143,6 @@ void cdx_mcdi_finish(struct cdx_mcdi *cdx)
 
        cdx_mcdi_wait_for_cleanup(cdx);
 
-#ifdef CONFIG_MCDI_LOGGING
-       kfree(mcdi->logging_buffer);
-#endif
-
        destroy_workqueue(mcdi->workqueue);
        kfree(cdx->mcdi);
        cdx->mcdi = NULL;
@@ -246,15 +229,9 @@ static void cdx_mcdi_send_request(struct cdx_mcdi *cdx,
        size_t hdr_len;
        bool not_epoch;
        u32 xflags;
-#ifdef CONFIG_MCDI_LOGGING
-       char *buf;
-#endif
 
        if (!mcdi)
                return;
-#ifdef CONFIG_MCDI_LOGGING
-       buf = mcdi->logging_buffer; /* page-sized */
-#endif
 
        mcdi->prev_seq = cmd->seq;
        mcdi->seq_held_by[cmd->seq] = cmd;
@@ -281,39 +258,12 @@ static void cdx_mcdi_send_request(struct cdx_mcdi *cdx,
                             MC_CMD_V2_EXTN_IN_MCDI_MESSAGE_TYPE_PLATFORM);
        hdr_len = 8;
 
-#ifdef CONFIG_MCDI_LOGGING
-       if (!WARN_ON_ONCE(!buf)) {
-               const struct cdx_dword *frags[] = { hdr, inbuf };
-               const size_t frag_len[] = { hdr_len, round_up(inlen, 4) };
-               int bytes = 0;
-               int i, j;
-
-               for (j = 0; j < ARRAY_SIZE(frags); j++) {
-                       const struct cdx_dword *frag;
-
-                       frag = frags[j];
-                       for (i = 0;
-                            i < frag_len[j] / 4;
-                            i++) {
-                               /*
-                                * Do not exceed the internal printk limit.
-                                * The string before that is just over 70 bytes.
-                                */
-                               if ((bytes + 75) > LOG_LINE_MAX) {
-                                       pr_info("MCDI RPC REQ:%s \\\n", buf);
-                                       bytes = 0;
-                               }
-                               bytes += snprintf(buf + bytes,
-                                                 LOG_LINE_MAX - bytes, " %08x",
-                                                 le32_to_cpu(frag[i].cdx_u32));
-                       }
-               }
-
-               pr_info("MCDI RPC REQ:%s\n", buf);
-       }
-#endif
        hdr[0].cdx_u32 |= (__force __le32)(cdx_mcdi_payload_csum(hdr, hdr_len, inbuf, inlen) <<
                         MCDI_HEADER_XFLAGS_LBN);
+
+       print_hex_dump_debug("MCDI REQ HEADER: ", DUMP_PREFIX_NONE, 32, 4, hdr, hdr_len, false);
+       print_hex_dump_debug("MCDI REQ PAYLOAD: ", DUMP_PREFIX_NONE, 32, 4, inbuf, inlen, false);
+
        cdx->mcdi_ops->mcdi_request(cdx, hdr, hdr_len, inbuf, inlen);
 
        mcdi->new_epoch = false;
@@ -700,28 +650,10 @@ static bool cdx_mcdi_complete_cmd(struct cdx_mcdi_iface *mcdi,
                resp_data_len = 0;
        }
 
-#ifdef CONFIG_MCDI_LOGGING
-       if (!WARN_ON_ONCE(!mcdi->logging_buffer)) {
-               char *log = mcdi->logging_buffer;
-               int i, bytes = 0;
-               size_t rlen;
-
-               WARN_ON_ONCE(resp_hdr_len % 4);
-
-               rlen = resp_hdr_len / 4 + DIV_ROUND_UP(resp_data_len, 4);
-
-               for (i = 0; i < rlen; i++) {
-                       if ((bytes + 75) > LOG_LINE_MAX) {
-                               pr_info("MCDI RPC RESP:%s \\\n", log);
-                               bytes = 0;
-                       }
-                       bytes += snprintf(log + bytes, LOG_LINE_MAX - bytes,
-                                         " %08x", le32_to_cpu(outbuf[i].cdx_u32));
-               }
-
-               pr_info("MCDI RPC RESP:%s\n", log);
-       }
-#endif
+       print_hex_dump_debug("MCDI RESP HEADER: ", DUMP_PREFIX_NONE, 32, 4,
+                            outbuf, resp_hdr_len, false);
+       print_hex_dump_debug("MCDI RESP PAYLOAD: ", DUMP_PREFIX_NONE, 32, 4,
+                            outbuf + (resp_hdr_len / 4), resp_data_len, false);
 
        if (error && resp_data_len == 0) {
                /* MC rebooted during command */
index 0bfbeab..54a65e9 100644 (file)
@@ -153,8 +153,6 @@ struct cdx_mcdi_cmd {
  * @mode: Poll for mcdi completion, or wait for an mcdi_event
  * @prev_seq: The last used sequence number
  * @new_epoch: Indicates start of day or start of MC reboot recovery
- * @logging_buffer: Buffer that may be used to build MCDI tracing messages
- * @logging_enabled: Whether to trace MCDI
  */
 struct cdx_mcdi_iface {
        struct cdx_mcdi *cdx;
@@ -170,10 +168,6 @@ struct cdx_mcdi_iface {
        enum cdx_mcdi_mode mode;
        u8 prev_seq;
        bool new_epoch;
-#ifdef CONFIG_MCDI_LOGGING
-       bool logging_enabled;
-       char *logging_buffer;
-#endif
 };
 
 /**