I'm not a big fan of this function translating the address differently based on the mode that we are in.  I say just let it do phys and convert a vaddr to phys before calling, if needed.