Phases in UVM

The recommendation is that drivers and monitors should only implement the run_phase. The only thing you should be using main_phase etc. for (and we don’t recommend it) is in the test to control which sequence gets run.
It sounds like you’re in a situation where the test in run_phase is waiting for some handshaking that is prevented by your driver executing something in reset_phase before it gets to main_phase. When you have your test execute main_phase, then whatever it’s doing doesn’t start until after reset_phase has completed.
You driver should just execute run_phase since all it will do is receive transactions from a sequence and put them on the bus. In your test, if you want to do a reset, that should be a specific transaction that the driver recognizes and “does the reset” - whatever that means.