The hardware stepgens are already in velocity command mode, That is why they need the PID loops for position control. You should not need to have closed loop for the spindle command so comment out all the pid stuff for the spindle stepgen, then directly connect the spindle velocity command output to the stepgen's velocity input.
comment out these lines and add this one in your hal file, and I think it may work.
Code:
#addf pid.s.do-pid-calcs servo-thread
#setp pid.s.Pgain [SPINDLE_0]P
#setp pid.s.Igain [SPINDLE_0]I
#setp pid.s.Dgain [SPINDLE_0]D
#setp pid.s.bias [SPINDLE_0]BIAS
#setp pid.s.FF0 [SPINDLE_0]FF0
#setp pid.s.FF1 [SPINDLE_0]FF1
#setp pid.s.FF2 [SPINDLE_0]FF2
#setp pid.s.deadband [SPINDLE_0]DEADBAND
#setp pid.s.maxoutput [SPINDLE_0]MAX_OUTPUT
#setp pid.s.error-previous-target true
#setp pid.s.maxerror [SPINDLE_0]FERROR
#net s-index-enable <=> pid.s.index-enable
#net s-enable => pid.s.enable
#net s-pos-cmd => pid.s.command
#net s-pos-fb => pid.s.feedback
#net s-output <= pid.s.output
net s-output <= spindle.0.speed−out