Advertisement
Guest User

Untitled

a guest
Aug 18th, 2020
431
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.43 KB | None | 0 0
  1. #! /bin/bash
  2.  
  3. SID_PRCTL=0x03006040
  4. SID_PRKEY=0x03006050
  5. SID_RDKEY=0x03006060
  6.  
  7. BIT() {
  8.         echo $(( 1 << $1 ))
  9. }
  10.  
  11. SID_OP_LOCK=$((0xAC))
  12.  
  13. SID_READ=$(BIT 1)
  14. SID_WRITE=$(BIT 2)
  15.  
  16. INDEX_OFFSET=16
  17. INDEX_MASK=$(( 0x1ff << $INDEX_OFFSET ))
  18. OP_OFFSET=8
  19. OP_MASK=$(( 0xff << $OP_OFFSET ))
  20. RW_MASK=$(( $SID_READ | $SID_WRITE ))
  21.  
  22. readl() {
  23.         while ! ./sunxi-fel readl $1; do
  24.         true
  25.     done
  26. }
  27.  
  28. writel() {
  29.     while ! ./sunxi-fel writel $2 $1; do
  30.         true
  31.     done
  32. }
  33.  
  34. dec2hex() {
  35.         printf 0x%x $1
  36. }
  37.  
  38. hex2dec() {
  39.         echo $(($1))
  40. }
  41.  
  42. sid_read_key() {
  43.         local reg_val
  44.  
  45.         reg_val=$(readl $SID_PRCTL)
  46.         reg_val=$(( $reg_val & (~$INDEX_MASK) ))
  47.         reg_val=$(( $reg_val & (~$RW_MASK) ))
  48.         reg_val=$(( $reg_val | ($1 << $INDEX_OFFSET) ))
  49.         writel $reg_val $SID_PRCTL
  50.  
  51.         reg_val=$(( $reg_val & (~$OP_MASK) ))
  52.         reg_val=$(( $reg_val & (~$RW_MASK) ))
  53.         reg_val=$(( $reg_val | ($SID_OP_LOCK << $OP_OFFSET) ))
  54.         reg_val=$(( $reg_val | $SID_READ ))
  55.         writel $reg_val $SID_PRCTL
  56.  
  57.         while (( $(readl $SID_PRCTL) & $SID_READ ))
  58.         do
  59.                 true
  60.         done
  61.  
  62.         reg_val=$(( $reg_val & (~$INDEX_MASK) ))
  63.         reg_val=$(( $reg_val & (~$OP_MASK) ))
  64.         reg_val=$(( $reg_val & (~$RW_MASK) ))
  65.         writel $reg_val $SID_PRCTL
  66.  
  67.         readl $SID_RDKEY
  68. }
  69.  
  70. sid_write_key() {
  71.         local reg_val
  72.        
  73.         writel $2 $SID_PRKEY
  74.  
  75.         reg_val=$(readl $SID_PRCTL)
  76.         reg_val=$(( $reg_val & (~((0x1ff<<16)|0x3)) ))
  77.         reg_val=$(( $reg_val | ($1 << $INDEX_OFFSET) ))
  78.         writel $reg_val $SID_PRCTL
  79.        
  80.         reg_val=$(( $reg_val & (~((0xff<<8)|0x3)) ))
  81.         reg_val=$(( $reg_val | ((SID_OP_LOCK<<8) | 0x1) ))
  82.         writel $reg_val $SID_PRCTL
  83.        
  84.         while (( $(readl $SID_PRCTL) & $SID_READ ))
  85.         do
  86.                 true
  87.         done
  88.        
  89.         reg_val=$(( $reg_val & (~((0x1ff<<16)|(0xff<<8)|0x3)) ))
  90.         writel $reg_val $SID_PRCTL
  91. }
  92.  
  93. # Enable secure boot in eFuse by writing value of LCJS at offset 0x48
  94. echo $(sid_write_key 0x48 0x00008800)
  95.  
  96. # Write SHA256 of public key in eFuse
  97. echo $(sid_write_key 0x70 0xe9e6181a) $(sid_write_key 0x74 0x5fb19a8f) $(sid_write_key 0x78 0xf91d6e62) $(sid_write_key 0x7c 0x652b9fd8)
  98. echo $(sid_write_key 0x80 0x3573e89e) $(sid_write_key 0x84 0x6f9c3d21) $(sid_write_key 0x88 0xa8f92947) $(sid_write_key 0x8c 0xf5326ac5)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement