Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

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