I can confirm this is a hardware issue. Had same issue, sent my phone in for service. They replaced several components, (got a whole new mainboard) and when I got it back, I now have GSM data working.
If you want to confirm you have the same issue, look at your radio logcat. Search for "DataCallResponse: {version=6 status=". The number after status should be 0 for a working data connection. I was previously getting 14.