In addition to the portability reasons described above, the console output or sbi_set_time is present due to historical reasons.
sbi_set_time was present to program the mtiemcmp which was memory mapped register available in M-mode. That was the only
way to program a timer earlier. The sstc extension was ratified last year. Hence, the latest linux kernel or KVM guests will directly
program the timer using [v]stimecmp if the platform supports it.
The console output extension exists for easier debugging early in the product cycle where a proper uart may not be ready
or a hypervisor don't have a uart emulation available. That's why, its being replaced with DBCN console extension now.
You can find more details here