A solution, but a bit scary:
1. If "splash" then tell fbcon it's not allowed to take over the framebuffer:
fbcon=map:1
2. After plymouth is finished (or even when it's just started and taken over the framebuffer), tell fbcon it is allowed to use the framebuffer:
$ con2fbmap 1 0
This could also be done as a simple ioctl from plymouth itself.
Virtual terminals won't work until you do step 2.
A solution, but a bit scary:
1. If "splash" then tell fbcon it's not allowed to take over the framebuffer:
fbcon=map:1
2. After plymouth is finished (or even when it's just started and taken over the framebuffer), tell fbcon it is allowed to use the framebuffer:
$ con2fbmap 1 0
This could also be done as a simple ioctl from plymouth itself.
Virtual terminals won't work until you do step 2.