Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ARM: SAMSUNG: Add script to change old clksrc_clk to new register defs

This script is used to change the old style clksrc_clk as originally
found in plat-s3c64xx to the new style. It is here for reference if needed
for future code merges.

Signed-off-by: Ben Dooks <ben-linux@fluff.org>

Ben Dooks 37872bb9 c837e88c

+167
+167
Documentation/arm/Samsung/clksrc-change-registers.awk
··· 1 + #!/usr/bin/awk -f 2 + # 3 + # Copyright 2010 Ben Dooks <ben-linux@fluff.org> 4 + # 5 + # Released under GPLv2 6 + 7 + # example usage 8 + # ./clksrc-change-registers.awk arch/arm/plat-s5pc1xx/include/plat/regs-clock.h < src > dst 9 + 10 + function extract_value(s) 11 + { 12 + eqat = index(s, "=") 13 + comat = index(s, ",") 14 + return substr(s, eqat+2, (comat-eqat)-2) 15 + } 16 + 17 + function remove_brackets(b) 18 + { 19 + return substr(b, 2, length(b)-2) 20 + } 21 + 22 + function splitdefine(l, p) 23 + { 24 + r = split(l, tp) 25 + 26 + p[0] = tp[2] 27 + p[1] = remove_brackets(tp[3]) 28 + } 29 + 30 + function find_length(f) 31 + { 32 + if (0) 33 + printf "find_length " f "\n" > "/dev/stderr" 34 + 35 + if (f ~ /0x1/) 36 + return 1 37 + else if (f ~ /0x3/) 38 + return 2 39 + else if (f ~ /0x7/) 40 + return 3 41 + else if (f ~ /0xf/) 42 + return 4 43 + 44 + printf "unknown legnth " f "\n" > "/dev/stderr" 45 + exit 46 + } 47 + 48 + function find_shift(s) 49 + { 50 + id = index(s, "<") 51 + if (id <= 0) { 52 + printf "cannot find shift " s "\n" > "/dev/stderr" 53 + exit 54 + } 55 + 56 + return substr(s, id+2) 57 + } 58 + 59 + 60 + BEGIN { 61 + if (ARGC < 2) { 62 + print "too few arguments" > "/dev/stderr" 63 + exit 64 + } 65 + 66 + # read the header file and find the mask values that we will need 67 + # to replace and create an associative array of values 68 + 69 + while (getline line < ARGV[1] > 0) { 70 + if (line ~ /\#define.*_MASK/ && 71 + !(line ~ /S5PC100_EPLL_MASK/) && 72 + !(line ~ /USB_SIG_MASK/)) { 73 + splitdefine(line, fields) 74 + name = fields[0] 75 + if (0) 76 + printf "MASK " line "\n" > "/dev/stderr" 77 + dmask[name,0] = find_length(fields[1]) 78 + dmask[name,1] = find_shift(fields[1]) 79 + if (0) 80 + printf "=> '" name "' LENGTH=" dmask[name,0] " SHIFT=" dmask[name,1] "\n" > "/dev/stderr" 81 + } else { 82 + } 83 + } 84 + 85 + delete ARGV[1] 86 + } 87 + 88 + /clksrc_clk.*=.*{/ { 89 + shift="" 90 + mask="" 91 + divshift="" 92 + reg_div="" 93 + reg_src="" 94 + indent=1 95 + 96 + print $0 97 + 98 + for(; indent >= 1;) { 99 + if ((getline line) <= 0) { 100 + printf "unexpected end of file" > "/dev/stderr" 101 + exit 1; 102 + } 103 + 104 + if (line ~ /\.shift/) { 105 + shift = extract_value(line) 106 + } else if (line ~ /\.mask/) { 107 + mask = extract_value(line) 108 + } else if (line ~ /\.reg_divider/) { 109 + reg_div = extract_value(line) 110 + } else if (line ~ /\.reg_source/) { 111 + reg_src = extract_value(line) 112 + } else if (line ~ /\.divider_shift/) { 113 + divshift = extract_value(line) 114 + } else if (line ~ /{/) { 115 + indent++ 116 + print line 117 + } else if (line ~ /}/) { 118 + indent-- 119 + 120 + if (indent == 0) { 121 + if (0) { 122 + printf "shift '" shift "' ='" dmask[shift,0] "'\n" > "/dev/stderr" 123 + printf "mask '" mask "'\n" > "/dev/stderr" 124 + printf "dshft '" divshift "'\n" > "/dev/stderr" 125 + printf "rdiv '" reg_div "'\n" > "/dev/stderr" 126 + printf "rsrc '" reg_src "'\n" > "/dev/stderr" 127 + } 128 + 129 + generated = mask 130 + sub(reg_src, reg_div, generated) 131 + 132 + if (0) { 133 + printf "/* rsrc " reg_src " */\n" 134 + printf "/* rdiv " reg_div " */\n" 135 + printf "/* shift " shift " */\n" 136 + printf "/* mask " mask " */\n" 137 + printf "/* generated " generated " */\n" 138 + } 139 + 140 + if (reg_div != "") { 141 + printf "\t.reg_div = { " 142 + printf ".reg = " reg_div ", " 143 + printf ".shift = " dmask[generated,1] ", " 144 + printf ".size = " dmask[generated,0] ", " 145 + printf "},\n" 146 + } 147 + 148 + printf "\t.reg_src = { " 149 + printf ".reg = " reg_src ", " 150 + printf ".shift = " dmask[mask,1] ", " 151 + printf ".size = " dmask[mask,0] ", " 152 + 153 + printf "},\n" 154 + 155 + } 156 + 157 + print line 158 + } else { 159 + print line 160 + } 161 + 162 + if (0) 163 + printf indent ":" line "\n" > "/dev/stderr" 164 + } 165 + } 166 + 167 + // && ! /clksrc_clk.*=.*{/ { print $0 }