P0128 means the engine control module measured engine coolant temperature (ECT) below the thermostat's regulating temperature for longer than the calibration allows after a cold start, or saw the temperature fall below it while driving. The monitor exists because a thermostat stuck open keeps the engine cold, and a cold engine runs rich, wears faster and emits more. The module cannot see the thermostat; it infers its state from how fast the coolant warms and where it settles.
Severity: low. Can you keep driving? Yes. The engine runs. The symptoms are a temperature gauge that sits low or takes forever to rise, weak cabin heat in winter, and worse fuel economy. The code matters more for what it disables: on many vehicles the catalyst monitor and other emissions monitors will not run while P0128 is set, so a vehicle with this code may fail an inspection for incomplete readiness even after the code is cleared. Fix it before an inspection.
How the monitor decides
At a cold start the module records the starting coolant temperature and the intake air temperature, and it models how fast the coolant should warm given engine load, vehicle speed, ambient temperature and time. The model predicts when the coolant should reach a target a little below the thermostat's rated opening point (typically 75 to 85 °C for a 90 °C thermostat, but each calibration sets its own). If the measured temperature has not reached that target by the time the model says it should, or if it reaches it and then drops well below on a long, cold, light-load drive, P0128 sets.
Three things follow:
- The test runs in cold weather and on long, light drives. A stuck-open thermostat that passes in summer fails in the first cold week of winter, which is why this code clusters in November and December.
- The test depends on two sensors and a model. A coolant sensor reading low, an intake air sensor reading wrong, or a model that expects faster warm-up than the engine delivers can each set the code with a good thermostat.
- The test is a calibration, and several manufacturers have re-issued it.
What the manufacturers documented
GM Silverado 1500 and Sierra 1500, 2019 to 2020 with the 4.3 L V6 (bulletin 20-NA-167, September 2020, replacing PIP5685): P0128 caused by the diagnostic running at the incorrect time, producing a false failure. The correction is an ECM calibration that updates the coolant temperature diagnostic, and the bulletin says plainly: do not replace the thermostat or any other components for this condition unless diagnostics lead to a component or circuit fault.
GM Enclave 2018 to 2023, XT5 2017 to 2023, XT6 2020 to 2023, Blazer 2019 to 2023, Traverse 2018 to 2023, Acadia 2017 to 2023 (preliminary information PIT5967, January 2023): a Service Steering message with no steering codes, and P0128 set. If the module may be reading coolant temperature incorrectly, the vehicle turns on the steering message to protect the steering gear from an undetected overheat. The instruction: diagnose and repair the P0128 first, then see whether the steering message returns. A steering warning caused by a thermostat code is the kind of link no one guesses without the bulletin.
Hyundai Elantra 2017 with the 2.0 L MPI (service campaign TLL, TSB 18-01-012, April 2018): the thermostat may not function properly and may set P0128; replacement is required even without the code, with a revised coolant filling and bleeding procedure. Here the part really was the thermostat, and Hyundai replaced it proactively.
Hyundai Tucson 2018 with the 2.0 L GDI (TSB 19-FL-004H, July 2019) and Hyundai Ioniq Hybrid and Plug-in 2017 to 2019 (TSB 20-FL-012H, December 2020): P0128 addressed by an ECM software logic update, with Hyundai noting there is no drivability issue with the code. On the hybrid the engine runs intermittently and cools between runs, which a conventional warm-up model reads as a thermostat failure.
Toyota Camry 2010 to 2011 with the 2AR-FE and automatic transmission (T-SB-0045-13, March 2013): P0128 addressed by modified ECM logic to reduce the possibility of the condition, with new calibration IDs listed for each emissions specification.
Jaguar Land Rover 2018 to 2023 Range Rover, Range Rover Sport, Velar, Evoque, Defender, Discovery, Discovery Sport, E-Pace, F-Pace, XE and XF with the Ingenium 2.0 L petrol (technical topic, P4): the check engine light with P0128-00 and poor cabin heating, corrected by replacing the thermostat housing per the workshop manual, with a coolant sample taken for engineering. On these engines the thermostat is integral to its housing, and the housing is the part.
Subaru Legacy and Outback H-6 2011 to 2012 and Tribeca H-6 (bulletin 11-111-12R, revised December 2012): P0128 that may be caused by a very slight variation in coolant temperature between the left and right cylinder banks on the flat-six, addressed through Subaru's procedure rather than a thermostat.
The pattern across seven bulletins: three calibrations, two thermostats (one integral to a housing), one bank-difference quirk, and one steering warning caused by the code. The thermostat is the usual answer, and it is not the only one.
Causes, in the order they are found
A thermostat stuck open or opening early. Wax-pellet thermostats fail open more often than closed as they age, and a thermostat that opens at 80 °C instead of 90 °C never lets the engine reach its target. On engines with an electrically heated map-controlled thermostat, a failed heater circuit or a leaking element does the same. The engine warms slowly, the heater blows lukewarm, and the gauge sits below its usual mark.
Low coolant. An engine with air in the system, or a level low enough that the sensor sits in air part of the time, reads cold and erratic. Check the level before anything else.
A coolant temperature sensor reading low, or its connector corroded, so the module sees a cold engine that is actually warm. The gauge may agree with the sensor and mislead too, on vehicles where the gauge is driven from the same sensor.
A cooling fan running constantly, from a stuck relay, a fan module fault or an A/C request that never clears, which over-cools the engine on the highway.
A calibration that expects faster warm-up than the engine delivers, as on the GM 4.3 L, the Hyundai Tucson and Ioniq, and the Toyota Camry.
A missing or wrong thermostat after an earlier repair: a lower-temperature thermostat fitted for "cooler running," or one left out after an overheat.
Extreme cold with short trips and an engine that idles a lot, on a vehicle whose calibration does not account well for it. Common on diesels and small turbocharged engines that produce little waste heat at idle; some manufacturers fit a grille shutter or an auxiliary heater for exactly this reason.
A thermostat housing that has warped or whose seal has failed so coolant bypasses the thermostat, as on the JLR Ingenium engines.
The module, last.
A diagnostic order
- Record the freeze frame. Ambient temperature, starting coolant temperature, engine speed and vehicle speed at the fault, and how long the engine had run. A fault set on a highway cruise in freezing weather after a normal warm-up is a thermostat opening early or a fan running; a fault set at idle after a long warm-up is a thermostat stuck open or a model problem.
- Check for a bulletin on the exact vehicle. On the GM, Hyundai, Toyota and JLR vehicles above the procedure is decided, and GM's says specifically not to replace the thermostat.
- Check the coolant level and look for air, then for leaks that would keep the level dropping.
- Compare coolant temperature with intake air temperature after a cold soak. Both should read ambient. A coolant reading well below ambient, or a value stuck at a floor, is the sensor or its wiring.
- Watch coolant temperature warm up on the scan tool from a cold start with the heater off. A healthy engine climbs steadily to the thermostat's rating and holds; a stuck-open thermostat climbs slowly and plateaus low, often 65 to 80 °C, and falls further at highway speed. Compare with an infrared thermometer on the thermostat housing and the upper radiator hose: a hose that warms as soon as the engine starts, before the thermostat should have opened, is the diagnosis.
- Check the cooling fan is not running with a cold engine and the A/C off.
- Replace the thermostat (or the housing where it is integral), with the correct temperature rating, and bleed the system by the manufacturer's procedure; a system with air after the repair sets the code again.
- Clear the code and verify through a cold start and a highway drive in the same weather, then let the readiness monitors complete before an inspection, since P0128 may have blocked the catalyst and other monitors from running.
Why this code deserves attention even though it is "only" a thermostat
A cold engine runs rich, fuel washes past the rings and dilutes the oil, and the catalytic converter never reaches its working temperature. Fuel economy falls by a noticeable fraction in winter. On direct-injection engines, fuel dilution of the oil from a cold-running engine is a documented cause of accelerated wear. And on many calibrations, an active P0128 suppresses the catalyst monitor, so a vehicle can fail an inspection for incomplete readiness without any other fault. The part is inexpensive; the consequences of leaving it are not.
What P0128 does not tell you
It does not tell you the thermostat is stuck; it tells you the coolant did not warm the way the model expected. A low coolant level, a sensor reading low, a fan running, a calibration set too tight, a bank difference on a flat engine, or a leaking thermostat housing each produce the same result, and the manufacturers' bulletins show each of them in the field. The warm-up curve on a scan tool and a thermometer on the upper hose are what separate them; the general principle is covered in what a trouble code does not tell you.
Frequently asked questions
Can I drive with a P0128 code?
Yes. The engine runs, with slow warm-up, weak cabin heat and worse economy. Fix it before an emissions inspection, because the code may keep other monitors from completing, and fix it sooner in winter, because a cold-running engine dilutes its oil with fuel.
Is P0128 always the thermostat?
Usually, but not always. GM's bulletin for the 2019 to 2020 Silverado and Sierra 4.3 L says not to replace the thermostat, because the diagnostic was running at the wrong time; Hyundai and Toyota issued software for it on specific models; Jaguar Land Rover replaces the thermostat housing on its 2.0 L engines; Subaru traced it to a slight difference between the banks of its flat-six. Check the freeze frame and the bulletins before ordering the part.
Why does P0128 set only in winter?
Because the warm-up test is hardest to pass when the air is cold and the engine is lightly loaded. A thermostat that opens a little early, or a calibration that expects faster warm-up than the engine delivers, passes in summer and fails in the first cold week.
Why does my GM crossover show a Service Steering message with P0128?
Because on 2017 to 2023 Enclave, XT5, XT6, Blazer, Traverse and Acadia the vehicle turns on the steering message to protect the steering gear when it suspects the coolant temperature reading is wrong. GM's bulletin PIT5967 says to fix the P0128 first and then see whether the steering message returns.
How much does it cost to fix P0128?
A thermostat is an inexpensive part with an hour or two of labor and a coolant refill; on engines where it is integral to a housing, the housing is a moderate part. A coolant sensor is inexpensive. A software update is an hour at a dealer and may be covered on the vehicles with bulletins.
Related codes
- P0125: insufficient coolant temperature for closed-loop fuel control, the older version of the same complaint.
- P0115 to P0119: engine coolant temperature sensor circuit, the sensor the monitor depends on.
- P0480 to P0483 / P0691 to P0694: cooling fan control circuits, when a fan running constantly over-cools the engine.
- P0420: catalyst efficiency, which a cold-running engine can fail and which P0128 may block from testing; see P0420.
- P2181: cooling system performance, the general code some manufacturers use alongside.
The code number itself tells you the family and the domain; how to read an OBD2 code number explains what each character means.