--- Quote Start ---
you don't really need the "up" term in the sensitivity list
--- Quote End ---
The up = '0' condition is
outside the clock sensitive block, thus you get a compiler warning, when you omit up from the sensitivity list, although the synthesized code is correct anyway. But it can cause different behaviour in simulation.
Bracketing isn't required in VHDL except for controlling operator precedence. In the present code, you don't need it.
--- Quote Start ---
ELSE IF should be ELSIF
--- Quote End ---
Yes, that's the error cause in the code, as far as I see.