I'm fairly certain it's a TPS issue. Mine did the same thing it wouldn't rev past 3.5.. I could hold the gas to the floor and it would bounce between 3.4-3.5K. Changed the TPS and that solved the problem. Also the CEL did have a TPS code as well as a MAP, IAC, Vacuum leak code and when I changed the TPS they all went away. When the PCM determines it's not getting the correct Throttle % it will go into a "safe mode" to avoid damaging the motor. This also goes with other important engine parameters.