user: 请将这段汇编代码片段转换成等效的C代码:

```asm
<set_usb_phy_config>:
  endbr64
  mov    $0xc1108400,%eax
  mov    (%rax),%edx
  and    $0x1f,%dl
  mov    %edx,(%rax)
  mov    (%rax),%edx
  and    $0x80ffffff,%edx
  cmp    $0x1,%edi
  mov    %edx,(%rax)
  sbb    %edx,%edx
  mov    (%rax),%ecx
  and    $0xffffffc0,%edx
  add    $0x60,%edx
  neg    %edi
  sbb    %esi,%esi
  and    $0x31000000,%esi
  or     %esi,%ecx
  mov    %ecx,(%rax)
  mov    (%rax),%ecx
  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    (%rax),%edx
  or     $0x20000,%edx
  mov    %edx,(%rax)
  mov    (%rax),%edx
  and    $0xfffdffff,%edx
  mov    %edx,(%rax)
  mov    (%rax),%edx
  or     $0x40000,%edx
  mov    %edx,(%rax)
  mov    (%rax),%edx
  and    $0xfffbffff,%edx
  mov    %edx,(%rax)
  mov    (%rax),%edx
  or     $0x80000,%edx
  mov    %edx,(%rax)
  mov    (%rax),%edx
  and    $0xfff7ffff,%edx
  mov    %edx,(%rax)
  mov    (%rax),%edx
  or     $0x1,%edx
  mov    %edx,(%rax)
  mov    (%rax),%edx
  and    $0xfffffffe,%edx
  mov    %edx,(%rax)
  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) {
  };
}
```