How to modify your Civic's EPS firmware with a comma3x

✳️
Updated 06/18/2026 with a more concise LLM report at the end

How it started

After buying a comma3x and experiencing driving with it, I've been enamored. The hardware is great, the software is impressive, and the general documentation on installation is beginner friendly. I had no idea what the fuck I was doing and still managed to get my car configured and driving hands free for hours on end.

My car is from 2018. Some things that happened in 2018 for reference:

  • XXXTentacion got murdered
  • Mac Miller overdosed
  • iPhone XS was released
  • GPT1 was released
  • The Parkland High School murders
  • Saudi Arabia started issuing drivers licenses to women
  • Waymo launched in Phoenix, users could request a ride via app

Is my car old or has technology gotten better way faster each year lately? Imma go with both. The comma3x has added features newer cars don't even have. I can stay hands and feet off as long as the driver monitor detects me paying attention, which I do. Some stats from the connect dashboard:

yeah my bookmark for nixpkg search is misspelled and I only noticed now

How it went

I wanted a little more performance out of my car. After digging through Discord, Reddit, and assorted websites I found out that there is a torque limitation applied by EPS (electric power steering) firmware on my model of Honda Civic, the 2018 Hatchback. It turns out that EPS torque value can be gently dialed up to improve the car's ability to take curves with more independence. That value is between 2x and 2.5x. By digging deeper, it seems this was found out a few years ago. Anything "substantially" over 2x will be banned from comma servers.

⚠️
This extremely dangerous, I think. You probably shouldn't do it. I probably shouldn't have done it. Just like everything else in life, you are ultimately responsible for your actions. Consider the fact you will be barreling down the highway over 65+mph with electric power steering firmware not provided by Honda.

Here is how to perform the firmware modification in a generalized way.

  1. You need to find a branch of openpilot that contains an eps-update.py file. Don't be dumb and pick just anything with that. You're going to need to read through what it does and see if it's what you want. Sorry if that is too much work.
  2. You either need to dump and modify your firmware, download a dump and modify it, or you need to find pre-modified firmware files that match your make/model/year/firmware. You'll need to do the research for this. There is a google doc out there that has much of this info.
  3. Then it's like anything else... ssh in, kill the tmux session that's running openpilot, then run the command you see below.
If you don't kill the tmux session, the update will fail and your car will light up with every error light. I did this and honestly thought I had bricked my car. I had never felt so stupid and regretful then those few minutes when I couldn't make it work. I felt sick. I'm not car rich, I only got one and can't afford another one probably, they seem so expensive. And going to the dealership is a guaranteed bad time. Maybe the dealership can fix it but what would I even tell them? Things spiraled quickly...

My experience breaking things in production as a professional finally paid off and I stuffed my emotions deep down and refocused. Here's the terminal output from that successful eps update.

comma@comma-3c000000:/data/openpilot$ python eps-update.py --bus 1 --skip-checksum --danger mod.rwd
file format: b'Z'
file checksum: 0x28d5fc8
headers:
0 = ["b'\\x00'"]
1 = []
2 = ["b'0'"]
3 = ["b'39990-TGG-A110\\x00\\x00'", "b'39990-TGG-A120\\x00\\x00'", "b'39990-TGG,A120\\x00\\x00'"]
4 = ["b'\\x01\\x11\\x01\\x12\\x11 '", "b'\\x01\\x11\\x01\\x12\\x11 '", "b'\\x01\\x11\\x01\\x12\\x11 '"]
5 = ["b'\\x01\\x02\\x03'"]
keys:
k0 = 0x1
k1 = 0x2
k2 = 0x3
address blocks:
start = 0x4000 len = 0x4c000
Connecting to CAN address 0x18DA30F1
INFO: connecting to panda 0c0034000551333038363231
Using real client
tester present ...
Getting software version
Application Software ID = b'39990-TGG-A110\x00\x00'
Set diagnostic session type to 3 (extended diagnostic)
Security access request key for seed 1
key =  b'\xacM'
Security access send key for seed 1
Set diagnostic session type to programming
Erasing flash
Setting firmware decryption key
Requesting download
100%|████████████████████████████████████████████████████████████████████████████████████████████████| 311k/311k [00:33<00:00, 9.34kB/s]
Requesting transfer exit
Checking programming dependencies

How its going

It's going really, really well. It worked. My car now handles almost every situation on the highway without asking for assistance.

Recently openpilot pushed a update that disabled Honda vehicles like mine that had EPS mods. It was a silent change in a software upgrade. I was told I'd have to revert my EPS firmware back to original to get openpilot to work again with releases going forward. This was really poor communications from comma, which is how they roll. That's the trade off I've accepted to use their hardware and software.

To get my comma3x working again, I installed Sunnypilot (a community fork of openpilot) and things were back to normal. Sunnypilot is feature packed, contains more advanced options for the user to toggle, and allows swapping driving models.


Extras

There was such a lack of information out there on this modification. Much of the information is trapped on Discord, between multiple years of public messages and private messages between those who pioneered the mod. I wanted all the information I could get, so I dumped the entire fw-mods channel, used stock and modded firmware files and massaged the data together with my own personal questions into an LLM assisted report. I did my best to include citations so the message could found on Discord and viewed in that context if desired. The report is posted below.



Honda/Acura EPS Firmware Modification Analysis

Honda/Acura EPS Firmware Modification Analysis

⚠️ Safety Warning

Electronic Power Steering is a safety-critical system, and changing its firmware can affect how a car handles, stays stable, and stays safe. Everything below is informational only. Treat any modification to a vehicle control system as something to approach with extreme caution.

The official Comma.ai Discord channel puts it bluntly:

"Firmware mods can be extremely dangerous! No walkthroughs, no copyrighted links, just discussion about how to be safe. The existence of this channel is not an endorsement of modifying your firmware. Substantially over 2x torque mods will get you banned from our servers starting 3/22"
— Comma.ai Discord, fw-mods channel description

Executive Summary

This is a look at the Honda/Acura EPS firmware change usually called the "2.5x torque mod." Comparing the stock and modified binaries shows real changes to the steering-assist parameters — but the numbers don't match the marketing. The mod is sold as 2.5x more assist, yet some raw parameters jump by as much as 10.25x and 12.20x.

That gap isn't a contradiction. The EPS controller is non-linear, it clamps its own inputs, and the people who built the mod deliberately shaped the parameter curve so the effective increase lands near 2.5x. The rest of this document works through how that happens, drawing on both the binary comparison and the community discussions that produced the mod.

Files Analyzed

  • stock-39990-TGG-A120.rwd — original Honda/Acura EPS firmware
  • mod-39990-TGG,A120.rwd — modified firmware (the comma in the filename matters; see Firmware Identification)
  • stock.hex and mod.hex — hex representations
  • hatch.bin and hatch.hex — additional firmware files
  • fw_chat.json — community discussion data

Key Parameter Changes

Original (Hex) Original (Dec) Modified (Hex) Modified (Dec) Ratio Likely Function
0x14 20 0xF4 244 12.20× Maximum steering assist gain
0xF3 243 0xAC 172 0.70× Counter-torque / resistance
0xA1 161 0xA7 167 1.03× Assist activation threshold
0x10 16 0xA4 164 10.25× Torque assist gain

Even the largest of these stays well under the system's ceiling. The highest modified value, 0xF4 (244), is only 14.67% of the firmware's clamping limit of 0x067F (1663) — leaving roughly 85% headroom. The big multipliers look alarming in isolation, but they're operating on small base numbers far below where the system actually caps things.

Why 2.5x and 10.25x Are Both "Correct"

The short answer: parameters don't map linearly to output torque, so a 10x change to one value doesn't produce 10x the steering force.

The control path is non-linear. FleetDog explains where the command actually goes:

"Doesn't physically correspond to anything, the eps receives the command on 0xe4, does a bunch of math which is documented in my rwd xray repo thanks to Alex, and then puts it into that torque table as a value from 0 to 6ee (clamped at 67f prior to table) to obtain the output torque which then goes through a bunch more math and controls the eps motor itself."
— FleetDog, March 4, 2020

There's also a second clamp that capped real output below 2x even when the table suggested more:

"Just pushed an update to eps tool. Max torque was less than 2x before due to another clamp in the firmware... Input torque (after math) is clamped at 0x067F, but the index table goes to 0x6EE. So the value corresponding to 0x06EE is never reached. Before it was something like 1.5-1.7 depending on the car. I fixed all of them. CR-V was unaffected."
— FleetDog, February 29, 2020

The values were tuned as a curve, not multiplied. Simply scaling the whole table broke things, so the developers raised the top value and rebuilt a deliberate slope underneath it:

"I found that simply multiplying that table results in unstable behavior, instead i multiplied the max value and then created a linear slope curve using the other 7 values."
— FleetDog, January 8, 2020

The resulting shape was intentional — roughly "2.5x max torque up top" (FleetDog, January 9, 2020), sitting "about halfway ish between the stock curve and linear slope" (FleetDog, January 8, 2020), described by Kiril as "modifying the torque curve to be a bit more gradual on the way to 2.5x stock value" (February 28, 2020).

Honda's own limiters do the rest. The stock profile is preserved up to a point because that's what tested best:

"We tried profiling the torque request to the same curve as stock, to cancel out the curve and create linear output. @gregjhogan found that going straight from 0-a00 resulted in much less error than this method. So preserving the stock profile before a00 is good."
— FleetDog, February 28, 2020

How the Mod and openpilot Fit Together

Firmware Identification

Comma flags modified firmware by looking for a comma in the EPS version string:

self.eps_modified = False
for fw in CP.carFw:
    if fw.ecu == "eps" and b"," in fw.fwVersion:
        print("EPS FW MODIFIED!")
        self.eps_modified = True
"I successfully changed the version number for modified fw to 39990-TLA,A040 for detection in interface and application of fw mod specific tuning."
— Martin, February 4, 2020

That's exactly why the modified file is named mod-39990-TGG,A120.rwd — the comma is the marker that lets openpilot recognize the mod and apply matching tuning.

Adaptive Torque Limiting in openpilot

When the mod is detected, openpilot stretches its own command above the 0xA00 (2560) threshold so it stays consistent with the firmware's reshaped top end:

if CS.CP.carFingerprint in (CAR.CIVIC) and self.eps_modified:
    if apply_steer > 0xA00:
        apply_steer = (apply_steer - 0xA00) / 2 + 0xA00
    elif apply_steer < -0xA00:
        apply_steer = (apply_steer + 0xA00) / 2 - 0xA00
"torqueV is the command sent via 0xe4. Before it was just a linear command to steer max 0xf00. Now since we have stretched the output response in the top end from a00, we also stretch openpilot so it knows that it's not linear."
— FleetDog, March 4, 2020

So there are two non-linear curves doing complementary jobs: one in the firmware table, one in the openpilot command path. The key values to keep in mind are the table index range (0 to 0x6EE), the firmware clamp (0x067F), and the 0xA00 threshold where openpilot starts halving its extra command.

Why a Lookup Table Instead of a Single Knob

The mod edits a torque table, which is what gives it precision instead of brute force:

"This is no promise of anything at all, but I would feel safe personally driving a mod with just that one table 2xed."
— George Hotz (geohot), January 8, 2020

The table also matters because stock Honda response falls off fast away from center — the motivation gernby raised early on:

"Has anyone tried a non-linear adjustment to the torque tables to achieve a more linear response from the Honda EPS? My 2018 Accord has really great response near center, but the response drops VERY quickly as it departs from center. Basically, the top half of the torque table is virtually useless."
— gernby, January 9, 2020

How the Mod Came Together

The 2.5x figure came out of road testing, not theory:

"After many roadside flashes and tests on a curvy stretch of road, I decided george is right about 2x. Higher levels feel safe and smooth, but 2x can still clear every one of the curves on that road, and sharper curves are a bit unsettling to come up to without taking control anyway."
— FleetDog, January 8, 2020

Tuning was iterative, and the team found the curve mattered more at the high end than the low end:

"We tried profiling the torque request to the same curve as stock... I don't think we did much testing on the higher end. So I am curious if you play with the profile of the top range if you can get better accuracy at high torque."
— FleetDog, February 28, 2020
"I found that at higher multiples it's much easier to tune with a linear slope so more testing is needed to see if there is any value to keeping the curve."
— FleetDog, January 9, 2020

Safety Concerns and Enforcement

This was treated as genuinely dangerous from the start. Geohot noted an automaker had reached out directly:

"We have been contacted by a manufacturer with respect to the danger of firmware mods."
— George Hotz (geohot), January 8, 2020

And community members echoed it:

"George even mentioned he has been contacted by an OEM about the dangers of flashing EPS firmware. Super dangerous stuff to play with. They aren't joking about limits."
— Community member, January 9, 2020

Push It Too Far and the Control Loop Breaks Down

Beyond roughly 6x, direction can reverse, and naively scaling the whole table makes the wheel dangerously twitchy:

"Multiplying the whole table makes the wheel rate increased to unsafe levels — makes the wheel able to jerk real fast if something went wrong."
— Unknown user
"It made controls pretty unstable and wheel shake was insane, can break ur arm lol. not safe at all."
— Unknown user

Specific cars showed the same problem when mis-tuned — e.g. a 2016 Civic with .4, .12 producing "crazy wobble," and CR-V owners advised to swap parameters when their wheel wobbled.

Comma's Enforcement Targets Behavior, Not Just Files

The policy is detection by symptom, with bans for the worst cases:

"We will detect banable mods by looking for the dangerous behavior itself, which is high torques at high speeds. We've been doing this already as part of a safety effort, and we've found a few cars well beyond any reasonable limit. Unless these are fixed by monday, they will be banned."
— George Hotz (geohot), March 22, 2020
"We believe there are safe ways to do torque mods, but there's also unsafe ways... the most egregious offenders will be banned first. We aren't saying 2x is even safe — 2x may be dangerous in practice as well. Comma doesn't endorse any torque mods, and everyone doing these mods should be doing their own injection testing."
— George Hotz (geohot), March 22, 2020
"If we find you doing things we consider unsafe, we can't stop you, we just want nothing to do with you."
— George Hotz (geohot), March 22, 2020

The reasoning ties back to Comma's published safety model — specifically the rule that "the vehicle must not alter its trajectory too quickly for the driver to safely react... the actuators are constrained to operate within reasonable limits" (geohot, March 22, 2020, citing openpilot's SAFETY.md).

What It Actually Feels Like to Drive

At low speed the effect is obvious: much lighter steering, faster initial response, and less of the gradual resistance build-up you get stock — which can make the wheel feel more sensitive. At high speed it's muted, because the system reduces assist with speed; you mostly notice altered stability and a less natural progression of effort through lane changes.

Opinions on whether that's safer are mixed:

"I feel the stock honda is underpowered to the point that it itself is perhaps more dangerous than a small mod."
— Unknown user, March 22, 2020
"At all speeds it feels safe. However, with SunnyPilot's 'always on' lane alignment, if I'm deviating hard enough from the aligned path and have to fight the wheel, LKAS cuts out entirely requiring a restart."
— Mal, April 29, 2025

How the mod interacts with stock LKAS depends on the implementation:

"Depends what car and how you did the torque mod. The company torque modded civic only has more torque when using openpilot, and is stock when using Honda LKAS."
— VirtuallyChris, February 24, 2021

A Bit More on the EPS Itself

Honda/Acura EPS isn't one knob — it's a stack of interacting systems: torque lookup tables, multiple operating modes, adaptive road-condition compensation, damping to prevent oscillation, and return-to-center force. The mod touches the base assist maps; everything else (return-to-center, speed-dependent damping, friction compensation, on-center feel, dynamic response) keeps shaping the result.

That interdependence is why the developers couldn't just flatten the curve:

"We tried adding breakpoints for each value in the torque table but that resulted in sloppier steering. So it seems that the curve in the fw is designed to provide better precision, and flattening that out has negative impacts."
— FleetDog, March 4, 2020

openpilot also remaps its command onto the firmware curve "so that things are more linear" (FleetDog, February 13, 2020) — the same stretch-to-match idea described earlier.

A Real Failure Mode Worth Knowing

If a car loses its eps_modified status mid-use — say, a check-engine light disables the mod — the PID tuning no longer matches the hardware, and the wheel can wobble badly:

"I think it's important to surface the eps_modified value to the user before and/or during the drive. If somebody has 2x torque and then doesn't the next time and doesn't realize it, they may end up in a ditch. I encountered this (minus the ditch part) — a check engine light lingered for a day, and whenever it was on, I only had 1x torque."
— clarity.bru, February 28, 2020
"If you suddenly lost eps_modified status your wheel would wobble like crazy cuz the PIDs would be off. But in the end this is still L2 — the driver should be paying attention regardless, especially knowing they've modded firmware to work outside intended OEM operation."
— Vaggysag, February 29, 2020

Conclusion

The "2.5x torque mod" is a real departure from OEM-validated steering. The raw parameter changes look extreme — up to 10.25x and 12.20x — but firmware clamps, non-linear scaling, and deliberate curve shaping bring the effective increase down to roughly 2.5x. The mismatch between the numbers and the feel is the whole story: in a system this interconnected, a small parameter change ripples through math you can't read off the value alone.

The community didn't ignore the risks. They capped mods around 2–2.5x, built non-linear curves instead of multiplying tables, kept additional limits in the openpilot code, watched for dangerous high-torque-at-speed behavior, and enforced standards with bans.

Final Assessment

Taken together, the mod reads as carefully developed and hedged with safety considerations. But it's still an unvalidated change to a safety-critical system, and the risk is real regardless of how thoughtfully it was built. Anyone considering it should weigh that seriously.

This analysis is based on a binary comparison of the firmware files and on community discussion data. It's a technical interpretation, not manufacturer-verified information.