\r
enum vcodec_device_id dev_id;\r
\r
+ u32 reserved_mode;\r
+\r
struct delayed_work simulate_work;\r
} vpu_service_info;\r
\r
#define VPU_TIMEOUT_DELAY 2*HZ /* 2s */\r
#define VPU_SIMULATE_DELAY msecs_to_jiffies(15)\r
\r
-static void vcodec_enter_mode(enum vcodec_device_id id)\r
+static void vcodec_enter_mode_nolock(enum vcodec_device_id id, u32 *reserved_mode)\r
{\r
if (soc_is_rk3036()) {\r
- mutex_lock(&g_mode_mutex);\r
+ if (reserved_mode)\r
+ *reserved_mode = readl_relaxed(RK_GRF_VIRT + RK3036_GRF_SOC_CON1);\r
#define BIT_VCODEC_SEL (1<<3)\r
if (id == VCODEC_DEVICE_ID_HEVC) {\r
writel_relaxed(readl_relaxed(RK_GRF_VIRT + RK3036_GRF_SOC_CON1) | (BIT_VCODEC_SEL) | (BIT_VCODEC_SEL << 16), RK_GRF_VIRT + RK3036_GRF_SOC_CON1);\r
}\r
}\r
\r
+static void vcodec_exit_mode_nolock(enum vcodec_device_id id, u32 reserved_mode)\r
+{\r
+ writel_relaxed(reserved_mode | (BIT_VCODEC_SEL << 16), RK_GRF_VIRT + RK3036_GRF_SOC_CON1);\r
+}\r
+\r
+static void vcodec_enter_mode(enum vcodec_device_id id)\r
+{\r
+ if (soc_is_rk3036())\r
+ mutex_lock(&g_mode_mutex);\r
+ vcodec_enter_mode_nolock(id, NULL);\r
+}\r
+\r
static void vcodec_exit_mode(void)\r
{\r
if (soc_is_rk3036())\r
u32 raw_status;\r
u32 irq_status;\r
\r
- vcodec_enter_mode(pservice->dev_id);\r
+ vcodec_enter_mode_nolock(pservice->dev_id, &pservice->reserved_mode);\r
\r
irq_status = raw_status = readl(dev->hwregs + DEC_INTERRUPT_REGISTER);\r
\r
}\r
\r
pservice->irq_status = raw_status;\r
- vcodec_exit_mode();\r
+\r
+ vcodec_exit_mode_nolock(pservice->dev_id, pservice->reserved_mode);\r
\r
return IRQ_WAKE_THREAD;\r
}\r
vpu_device *dev = &pservice->enc_dev;\r
u32 irq_status;\r
\r
- vcodec_enter_mode(pservice->dev_id);\r
+ vcodec_enter_mode_nolock(pservice->dev_id, &pservice->reserved_mode);\r
irq_status= readl(dev->hwregs + ENC_INTERRUPT_REGISTER);\r
\r
pr_debug("vepu_irq irq status %x\n", irq_status);\r
}\r
\r
pservice->irq_status = irq_status;\r
- vcodec_exit_mode();\r
+\r
+ vcodec_exit_mode_nolock(pservice->dev_id, pservice->reserved_mode);\r
\r
return IRQ_WAKE_THREAD;\r
}\r