The DCIMVAC represents a cache invalidate work. But one specific remark is that it will clean the data if the data is dirty before invalidation. Refer to followings
/******************************************************/
6.2.4 Data cache maintenance considerations
DCIMVAC operations in AArch32 and DC IVAC instructions in AArch64 perform an invalidate of the target address. If the data is dirty within the cluster then a clean is performed before the invalidate.
And DCCIMVAC also cleans the data and invalidate the data. Of course, clean works is only effected in case of data dirty.
Then, DCIMVAC and DCCIMVAC operation seems same regardless data is dirty or not.
Is there any big difference or a specific usage case for DCIMVAC or DCCIMVAC?
I referred the ARM Cortex-A53 MPCore Processor Technical Reference Manual.
The architecture defines those differently. But the implementation may choose to handle those the same way.
See also: Table 4-124 CPUACTLR_EL1 bit assignments