user: 请从给定的汇编指令推导出C源代码:

```asm
<set_usb_phy_config>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %edi,-0x14(%rbp)
  movl   $0x0,-0x10(%rbp)
  movl   $0x0,-0xc(%rbp)
  movl   $0x1f4,-0x4(%rbp)
  mov    $0xc1108400,%eax
  mov    (%rax),%edx
  mov    $0xc1108400,%eax
  and    $0x1f,%dl
  mov    %edx,(%rax)
  mov    $0xc1108400,%eax
  mov    (%rax),%edx
  mov    $0xc1108400,%eax
  and    $0x80ffffff,%edx
  mov    %edx,(%rax)
  cmpl   $0x0,-0x14(%rbp)
  jne    L89
  movl   $0x1,-0xc(%rbp)
  movl   $0x0,-0x10(%rbp)
  jmp    L94
L89:
  movl   $0x3,-0xc(%rbp)
  movl   $0x31,-0x10(%rbp)
L94:
  mov    $0xc1108400,%eax
  mov    (%rax),%edx
  mov    -0x10(%rbp),%eax
  shl    $0x18,%eax
  mov    %eax,%ecx
  mov    $0xc1108400,%eax
  or     %ecx,%edx
  mov    %edx,(%rax)
  mov    $0xc1108400,%eax
  mov    (%rax),%edx
  mov    -0xc(%rbp),%eax
  shl    $0x5,%eax
  mov    %eax,%ecx
  mov    $0xc1108400,%eax
  or     %ecx,%edx
  mov    %edx,(%rax)
  mov    $0xc1108410,%eax
  mov    (%rax),%edx
  mov    $0xc1108410,%eax
  or     $0x800000,%edx
  mov    %edx,(%rax)
  mov    $0xc1108410,%eax
  mov    (%rax),%edx
  mov    $0xc1108410,%eax
  or     $0x1000000,%edx
  mov    %edx,(%rax)
  mov    $0xc1108400,%eax
  mov    (%rax),%edx
  mov    $0xc1108400,%eax
  or     $0x1,%dh
  mov    %edx,(%rax)
  movl   $0x0,-0x8(%rbp)
  nop
L85:
  mov    -0x8(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x8(%rbp)
  cmp    %eax,-0x4(%rbp)
  jg     L85
  mov    $0xc1108400,%eax
  mov    (%rax),%edx
  mov    $0xc1108400,%eax
  or     $0x20000,%edx
  mov    %edx,(%rax)
  movl   $0x0,-0x8(%rbp)
  nop
L41:
  mov    -0x8(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x8(%rbp)
  cmp    %eax,-0x4(%rbp)
  jg     L41
  mov    $0xc1108400,%eax
  mov    (%rax),%edx
  mov    $0xc1108400,%eax
  and    $0xfffdffff,%edx
  mov    %edx,(%rax)
  movl   $0x0,-0x8(%rbp)
  nop
L103:
  mov    -0x8(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x8(%rbp)
  cmp    %eax,-0x4(%rbp)
  jg     L103
  mov    $0xc1108400,%eax
  mov    (%rax),%edx
  mov    $0xc1108400,%eax
  or     $0x40000,%edx
  mov    %edx,(%rax)
  movl   $0x0,-0x8(%rbp)
  nop
L30:
  mov    -0x8(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x8(%rbp)
  cmp    %eax,-0x4(%rbp)
  jg     L30
  mov    $0xc1108400,%eax
  mov    (%rax),%edx
  mov    $0xc1108400,%eax
  and    $0xfffbffff,%edx
  mov    %edx,(%rax)
  movl   $0x0,-0x8(%rbp)
  nop
L6:
  mov    -0x8(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x8(%rbp)
  cmp    %eax,-0x4(%rbp)
  jg     L6
  mov    $0xc1108400,%eax
  mov    (%rax),%edx
  mov    $0xc1108400,%eax
  or     $0x80000,%edx
  mov    %edx,(%rax)
  movl   $0x0,-0x8(%rbp)
  nop
L19:
  mov    -0x8(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x8(%rbp)
  cmp    %eax,-0x4(%rbp)
  jg     L19
  mov    $0xc1108400,%eax
  mov    (%rax),%edx
  mov    $0xc1108400,%eax
  and    $0xfff7ffff,%edx
  mov    %edx,(%rax)
  movl   $0x0,-0x8(%rbp)
  nop
L50:
  mov    -0x8(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x8(%rbp)
  cmp    %eax,-0x4(%rbp)
  jg     L50
  mov    $0xc1108400,%eax
  mov    (%rax),%edx
  mov    $0xc1108400,%eax
  or     $0x1,%edx
  mov    %edx,(%rax)
  movl   $0x0,-0x8(%rbp)
  nop
L48:
  mov    -0x8(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x8(%rbp)
  cmp    %eax,-0x4(%rbp)
  jg     L48
  mov    $0xc1108400,%eax
  mov    (%rax),%edx
  mov    $0xc1108400,%eax
  and    $0xfffffffe,%edx
  mov    %edx,(%rax)
  movl   $0x0,-0x8(%rbp)
  nop
L82:
  mov    -0x8(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x8(%rbp)
  cmp    %eax,-0x4(%rbp)
  jg     L82
  nop
  nop
  pop    %rbp
  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) {
  };
}
```