Well, as it is written in the documentation, the function FindMaximum "searches for a local maximum" and it is not a surprise that it actually finds only a local maximum when called.
I suggest using the Maximize function:
Maximize[{fx , - Pi / 2 <= phi <= Pi / 2}, phi]
At least in my experiments it evaluated to the global maximum.