user: Converte this assembly snippet into its equivalent C code:

```asm
<set_usb_phy_config>:
  endbr64
  mov    $0xc1108400,%eax
  mov    (%rax),%edx
  and    $0x1f,%dl
  mov    %edx,(%rax)
  mov    (%rax),%edx
  and    $0x80ffffff,%edx
  mov    %edx,(%rax)
  mov    $0x1,%edx
  test   %edi,%edi
  je     L91
  mov    $0x3,%edx
  mov    $0x31,%edi
L91:
  mov    $0xc1108400,%eax
  mov    (%rax),%ecx
  shl    $0x18,%edi
  or     %ecx,%edi
  mov    %edi,(%rax)
  mov    (%rax),%ecx
  shl    $0x5,%edx
  or     %ecx,%edx
  mov    %edx,(%rax)
  mov    $0xc1108410,%edx
  mov    (%rdx),%ecx
  or     $0x800000,%ecx
  mov    %ecx,(%rdx)
  mov    (%rdx),%ecx
  or     $0x1000000,%ecx
  mov    %ecx,(%rdx)
  mov    (%rax),%edx
  or     $0x1,%dh
  mov    %edx,(%rax)
  mov    $0x1f5,%eax
L46:
  sub    $0x1,%eax
  jne    L46
  mov    $0xc1108400,%edx
  mov    (%rdx),%eax
  or     $0x20000,%eax
  mov    %eax,(%rdx)
  mov    $0x1f5,%eax
L48:
  sub    $0x1,%eax
  jne    L48
  mov    $0xc1108400,%edx
  mov    (%rdx),%eax
  and    $0xfffdffff,%eax
  mov    %eax,(%rdx)
  mov    $0x1f5,%eax
L68:
  sub    $0x1,%eax
  jne    L68
  mov    $0xc1108400,%edx
  mov    (%rdx),%eax
  or     $0x40000,%eax
  mov    %eax,(%rdx)
  mov    $0x1f5,%eax
L86:
  sub    $0x1,%eax
  jne    L86
  mov    $0xc1108400,%edx
  mov    (%rdx),%eax
  and    $0xfffbffff,%eax
  mov    %eax,(%rdx)
  mov    $0x1f5,%eax
L28:
  sub    $0x1,%eax
  jne    L28
  mov    $0xc1108400,%edx
  mov    (%rdx),%eax
  or     $0x80000,%eax
  mov    %eax,(%rdx)
  mov    $0x1f5,%eax
L41:
  sub    $0x1,%eax
  jne    L41
  mov    $0xc1108400,%edx
  mov    (%rdx),%eax
  and    $0xfff7ffff,%eax
  mov    %eax,(%rdx)
  mov    $0x1f5,%eax
L2:
  sub    $0x1,%eax
  jne    L2
  mov    $0xc1108400,%edx
  mov    (%rdx),%eax
  or     $0x1,%eax
  mov    %eax,(%rdx)
  mov    $0x1f5,%eax
L99:
  sub    $0x1,%eax
  jne    L99
  mov    $0xc1108400,%edx
  mov    (%rdx),%eax
  and    $0xfffffffe,%eax
  mov    %eax,(%rdx)
  mov    $0x1f5,%eax
L11:
  sub    $0x1,%eax
  jne    L11
  ret
```

assistant: ```c
void set_usb_phy_config(int cfg) {
  int divider = 0;
  int clk_sel = 0;
  int i;
  int time_dly = 500;
  *(volatile unsigned *)(0xc1100000 + ((0x2100) << 2)) = (((*(volatile unsigned *)(0xc1100000 + ((0x2100) << 2))) & (~((7 << 5)))));
  *(volatile unsigned *)(0xc1100000 + ((0x2100) << 2)) = (((*(volatile unsigned *)(0xc1100000 + ((0x2100) << 2))) & (~((0x7f << 24)))));
  if (cfg == 0) {
    clk_sel = 1;
    divider = 0;
  } else {
    clk_sel = 3;
    divider = 49;
  }
  *(volatile unsigned *)(0xc1100000 + ((0x2100) << 2)) = (((*(volatile unsigned *)(0xc1100000 + ((0x2100) << 2))) | ((divider << 24))));
  *(volatile unsigned *)(0xc1100000 + ((0x2100) << 2)) = (((*(volatile unsigned *)(0xc1100000 + ((0x2100) << 2))) | ((clk_sel << 5))));
  *(volatile unsigned *)(0xc1100000 + ((0x2104) << 2)) = (((*(volatile unsigned *)(0xc1100000 + ((0x2104) << 2))) | ((1 << 23))));
  *(volatile unsigned *)(0xc1100000 + ((0x2104) << 2)) = (((*(volatile unsigned *)(0xc1100000 + ((0x2104) << 2))) | ((1 << 24))));
  *(volatile unsigned *)(0xc1100000 + ((0x2100) << 2)) = (((*(volatile unsigned *)(0xc1100000 + ((0x2100) << 2))) | ((1 << 8))));
  i = 0;
  while (i++ < time_dly) {
  };
  *(volatile unsigned *)(0xc1100000 + ((0x2100) << 2)) = (((*(volatile unsigned *)(0xc1100000 + ((0x2100) << 2))) | ((1 << 17))));
  i = 0;
  while (i++ < time_dly) {
  };
  *(volatile unsigned *)(0xc1100000 + ((0x2100) << 2)) = (((*(volatile unsigned *)(0xc1100000 + ((0x2100) << 2))) & (~((1 << 17)))));
  i = 0;
  while (i++ < time_dly) {
  };
  *(volatile unsigned *)(0xc1100000 + ((0x2100) << 2)) = (((*(volatile unsigned *)(0xc1100000 + ((0x2100) << 2))) | ((1 << 18))));
  i = 0;
  while (i++ < time_dly) {
  };
  *(volatile unsigned *)(0xc1100000 + ((0x2100) << 2)) = (((*(volatile unsigned *)(0xc1100000 + ((0x2100) << 2))) & (~((1 << 18)))));
  i = 0;
  while (i++ < time_dly) {
  };
  *(volatile unsigned *)(0xc1100000 + ((0x2100) << 2)) = (((*(volatile unsigned *)(0xc1100000 + ((0x2100) << 2))) | ((1 << 19))));
  i = 0;
  while (i++ < time_dly) {
  };
  *(volatile unsigned *)(0xc1100000 + ((0x2100) << 2)) = (((*(volatile unsigned *)(0xc1100000 + ((0x2100) << 2))) & (~((1 << 19)))));
  i = 0;
  while (i++ < time_dly) {
  };
  *(volatile unsigned *)(0xc1100000 + ((0x2100) << 2)) = (((*(volatile unsigned *)(0xc1100000 + ((0x2100) << 2))) | ((1 << 0))));
  i = 0;
  while (i++ < time_dly) {
  };
  *(volatile unsigned *)(0xc1100000 + ((0x2100) << 2)) = (((*(volatile unsigned *)(0xc1100000 + ((0x2100) << 2))) & (~((1 << 0)))));
  i = 0;
  while (i++ < time_dly) {
  };
}
```