]> git.baikalelectronics.ru Git - arm-tf.git/commitdiff
intel: mailbox: Use retry count in mailbox poll
authorAbdul Halim, Muhammad Hadi Asyrafi <muhammad.hadi.asyrafi.abdul.halim@intel.com>
Mon, 1 Jun 2020 17:05:24 +0000 (01:05 +0800)
committerAbdul Halim, Muhammad Hadi Asyrafi <muhammad.hadi.asyrafi.abdul.halim@intel.com>
Tue, 27 Oct 2020 03:17:41 +0000 (11:17 +0800)
Change the main loop inside mailbox poll function from while(1) to a
retry counter named sdm_loop. This is to limit the maximum possible
looping of the function and prevent unexpected behaviour.

Signed-off-by: Abdul Halim, Muhammad Hadi Asyrafi <muhammad.hadi.asyrafi.abdul.halim@intel.com>
Change-Id: I63afad958fe5f656f6333b60d5a8b4c0ada3b23d

plat/intel/soc/common/soc/socfpga_mailbox.c

index 984aa9c6e3373288f4a5e40f46803bfded4b1f9e..ddfe34cd05c397748ae9796c0a4f13031294af6b 100644 (file)
@@ -90,12 +90,13 @@ int mailbox_poll_response(uint32_t job_id, int urgent, uint32_t *response,
                                int resp_len)
 {
        uint32_t timeout = 40U;
+       uint32_t sdm_loop = 255U;
        int rin = 0;
        int rout = 0;
        int resp_data = 0;
        int ret_resp_len;
 
-       while (1) {
+       while (sdm_loop != 0U) {
 
                do {
                        if (mmio_read_32(MBOX_OFFSET + MBOX_DOORBELL_FROM_SDM)
@@ -106,8 +107,7 @@ int mailbox_poll_response(uint32_t job_id, int urgent, uint32_t *response,
                } while (--timeout != 0U);
 
                if (timeout == 0U) {
-                       INFO("Timed out waiting for SDM\n");
-                       return MBOX_TIMEOUT;
+                       break;
                }
 
                mmio_write_32(MBOX_OFFSET + MBOX_DOORBELL_FROM_SDM, 0);
@@ -155,7 +155,12 @@ int mailbox_poll_response(uint32_t job_id, int urgent, uint32_t *response,
 
                        return ret_resp_len;
                }
+
+       sdm_loop--;
        }
+
+       INFO("Timed out waiting for SDM\n");
+       return MBOX_TIMEOUT;
 }
 
 int iterate_resp(int mbox_resp_len, uint32_t *resp_buf, int resp_len)