media: s5p-mfc: Load firmware for each run in MFCv12.
authorAakarsh Jain <aakarsh.jain@samsung.com>
Wed, 13 Dec 2023 08:11:04 +0000 (13:41 +0530)
committerHans Verkuil <hverkuil-cisco@xs4all.nl>
Wed, 13 Dec 2023 13:33:49 +0000 (14:33 +0100)
In MFCv12, some section of firmware gets updated at each MFC run.
Hence we need to reload original firmware for each run at the start.

Cc: linux-fsd@tesla.com
Signed-off-by: Smitha T Murthy <smithatmurthy@gmail.com>
Signed-off-by: Aakarsh Jain <aakarsh.jain@samsung.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
drivers/media/platform/samsung/s5p-mfc/s5p_mfc_ctrl.c

index b49159142c5356c4b7c053f90636187d39ffb801..503487f34a800fc0ea6e535be3f99aeb493926f5 100644 (file)
@@ -51,8 +51,14 @@ int s5p_mfc_load_firmware(struct s5p_mfc_dev *dev)
         * into kernel. */
        mfc_debug_enter();
 
-       if (dev->fw_get_done)
-               return 0;
+       /* In case of MFC v12, RET_SYS_INIT response from hardware fails due to
+        * incorrect firmware transfer and therefore it is not able to initialize
+        * the hardware. This causes failed response for SYS_INIT command when
+        * MFC runs for second time. So, load the MFC v12 firmware for each run.
+        */
+       if (!IS_MFCV12(dev))
+               if (dev->fw_get_done)
+                       return 0;
 
        for (i = MFC_FW_MAX_VERSIONS - 1; i >= 0; i--) {
                if (!dev->variant->fw_name[i])