CC: [email protected]
BCC: [email protected]
In-Reply-To: <[email protected]>
References: <[email protected]>
TO: "Maciej W. Rozycki" <[email protected]>
TO: "Greg Kroah-Hartman" <[email protected]>
TO: Jiri Slaby <[email protected]>
CC: Andy Shevchenko <[email protected]>
CC: [email protected]
CC: [email protected]

Hi "Maciej,

I love your patch! Perhaps something to improve:

[auto build test WARNING on tty/tty-testing]
[also build test WARNING on usb/usb-testing helgaas-pci/next v5.17 
next-20220331]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    
https://github.com/intel-lab-lkp/linux/commits/Maciej-W-Rozycki/serial-8250-Fixes-for-Oxford-Semiconductor-950-UARTs/20220331-151612
base:   https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty.git 
tty-testing
:::::: branch date: 7 hours ago
:::::: commit date: 7 hours ago
config: x86_64-randconfig-m001 
(https://download.01.org/0day-ci/archive/20220331/[email protected]/config)
compiler: gcc-11 (Debian 11.2.0-19) 11.2.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>
Reported-by: Dan Carpenter <[email protected]>

New smatch warnings:
drivers/tty/serial/8250/8250_pci.c:1171 pci_oxsemi_tornado_get_divisor() error: 
uninitialized symbol 'tcr'.
drivers/tty/serial/8250/8250_pci.c:1172 pci_oxsemi_tornado_get_divisor() error: 
uninitialized symbol 'quot'.
drivers/tty/serial/8250/8250_pci.c:1180 pci_oxsemi_tornado_get_divisor() error: 
uninitialized symbol 'cpr'.

Old smatch warnings:
drivers/tty/serial/8250/8250_pci.c:1176 pci_oxsemi_tornado_get_divisor() error: 
uninitialized symbol 'quot'.
drivers/tty/serial/8250/8250_pci.c:1190 pci_oxsemi_tornado_get_divisor() error: 
uninitialized symbol 'cpr'.

vim +/tcr +1171 drivers/tty/serial/8250/8250_pci.c

b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1049  
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1050  /*
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1051   * Determine the 
oversampling rate, the clock prescaler, and the clock
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1052   * divisor for the requested 
baud rate.  The clock rate is 62.5 MHz,
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1053   * which is four times the 
baud base, and the prescaler increments in
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1054   * steps of 1/8.  Therefore 
to make calculations on integers we need
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1055   * to use a scaled clock 
rate, which is the baud base multiplied by 32
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1056   * (or our assumed UART 
clock rate multiplied by 2).
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1057   *
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1058   * The allowed oversampling 
rates are from 4 up to 16 inclusive (values
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1059   * from 0 to 3 inclusive map 
to 16).  Likewise the clock prescaler allows
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1060   * values between 1.000 and 
63.875 inclusive (operation for values from
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1061   * 0.000 to 0.875 has not 
been specified).  The clock divisor is the usual
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1062   * unsigned 16-bit integer.
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1063   *
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1064   * For the most accurate 
baud rate we use a table of predetermined
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1065   * oversampling rates and 
clock prescalers that records all possible
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1066   * products of the two 
parameters in the range from 4 up to 255 inclusive,
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1067   * and additionally 335 for 
the 1500000bps rate, with the prescaler scaled
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1068   * by 8.  The table is 
sorted by the decreasing value of the oversampling
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1069   * rate and ties are 
resolved by sorting by the decreasing value of the
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1070   * product.  This way 
preference is given to higher oversampling rates.
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1071   *
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1072   * We iterate over the table 
and choose the product of an oversampling
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1073   * rate and a clock 
prescaler that gives the lowest integer division
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1074   * result deviation, or if 
an exact integer divider is found we stop
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1075   * looking for it right 
away.  We do some fixup if the resulting clock
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1076   * divisor required would be 
out of its unsigned 16-bit integer range.
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1077   *
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1078   * Finally we abuse the 
supposed fractional part returned to encode the
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1079   * 4-bit value of the 
oversampling rate and the 9-bit value of the clock
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1080   * prescaler which will end 
up in the TCR and CPR/CPR2 registers.
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1081   */
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1082  static unsigned int 
pci_oxsemi_tornado_get_divisor(struct uart_port *port,
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1083                               
                   unsigned int baud,
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1084                               
                   unsigned int *frac)
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1085  {
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1086       static u8 p[][2] = {
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1087               { 16, 14, }, { 
16, 13, }, { 16, 12, }, { 16, 11, },
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1088               { 16, 10, }, { 
16,  9, }, { 16,  8, }, { 15, 17, },
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1089               { 15, 16, }, { 
15, 15, }, { 15, 14, }, { 15, 13, },
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1090               { 15, 12, }, { 
15, 11, }, { 15, 10, }, { 15,  9, },
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1091               { 15,  8, }, { 
14, 18, }, { 14, 17, }, { 14, 14, },
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1092               { 14, 13, }, { 
14, 12, }, { 14, 11, }, { 14, 10, },
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1093               { 14,  9, }, { 
14,  8, }, { 13, 19, }, { 13, 18, },
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1094               { 13, 17, }, { 
13, 13, }, { 13, 12, }, { 13, 11, },
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1095               { 13, 10, }, { 
13,  9, }, { 13,  8, }, { 12, 19, },
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1096               { 12, 18, }, { 
12, 17, }, { 12, 11, }, { 12,  9, },
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1097               { 12,  8, }, { 
11, 23, }, { 11, 22, }, { 11, 21, },
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1098               { 11, 20, }, { 
11, 19, }, { 11, 18, }, { 11, 17, },
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1099               { 11, 11, }, { 
11, 10, }, { 11,  9, }, { 11,  8, },
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1100               { 10, 25, }, { 
10, 23, }, { 10, 20, }, { 10, 19, },
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1101               { 10, 17, }, { 
10, 10, }, { 10,  9, }, { 10,  8, },
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1102               {  9, 27, }, {  
9, 23, }, {  9, 21, }, {  9, 19, },
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1103               {  9, 18, }, {  
9, 17, }, {  9,  9, }, {  9,  8, },
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1104               {  8, 31, }, {  
8, 29, }, {  8, 23, }, {  8, 19, },
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1105               {  8, 17, }, {  
8,  8, }, {  7, 35, }, {  7, 31, },
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1106               {  7, 29, }, {  
7, 25, }, {  7, 23, }, {  7, 21, },
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1107               {  7, 19, }, {  
7, 17, }, {  7, 15, }, {  7, 14, },
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1108               {  7, 13, }, {  
7, 12, }, {  7, 11, }, {  7, 10, },
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1109               {  7,  9, }, {  
7,  8, }, {  6, 41, }, {  6, 37, },
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1110               {  6, 31, }, {  
6, 29, }, {  6, 23, }, {  6, 19, },
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1111               {  6, 17, }, {  
6, 13, }, {  6, 11, }, {  6, 10, },
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1112               {  6,  9, }, {  
6,  8, }, {  5, 67, }, {  5, 47, },
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1113               {  5, 43, }, {  
5, 41, }, {  5, 37, }, {  5, 31, },
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1114               {  5, 29, }, {  
5, 25, }, {  5, 23, }, {  5, 19, },
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1115               {  5, 17, }, {  
5, 15, }, {  5, 13, }, {  5, 11, },
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1116               {  5, 10, }, {  
5,  9, }, {  5,  8, }, {  4, 61, },
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1117               {  4, 59, }, {  
4, 53, }, {  4, 47, }, {  4, 43, },
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1118               {  4, 41, }, {  
4, 37, }, {  4, 31, }, {  4, 29, },
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1119               {  4, 23, }, {  
4, 19, }, {  4, 17, }, {  4, 13, },
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1120               {  4,  9, }, {  
4,  8, },
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1121       };
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1122       /* Scale the quotient 
for comparison to get the fractional part.  */
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1123       const unsigned int 
quot_scale = 65536;
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1124       unsigned int sclk = 
port->uartclk * 2;
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1125       unsigned int sdiv = 
(sclk + (baud / 2)) / baud;
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1126       unsigned int best_squot;
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1127       unsigned int squot;
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1128       unsigned int quot;
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1129       u16 cpr;
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1130       u8 tcr;
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1131       int i;
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1132  
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1133       /* Old custom speed 
handling.  */
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1134       if (baud == 38400 && 
(port->flags & UPF_SPD_MASK) == UPF_SPD_CUST) {
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1135               unsigned int 
cust_div = port->custom_divisor;
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1136  
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1137               quot = cust_div 
& UART_DIV_MAX;
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1138               tcr = (cust_div 
>> 16) & OXSEMI_TORNADO_TCR_MASK;
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1139               cpr = (cust_div 
>> 20) & OXSEMI_TORNADO_CPR_MASK;
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1140               if (cpr < 
OXSEMI_TORNADO_CPR_MIN)
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1141                       cpr = 
OXSEMI_TORNADO_CPR_DEF;
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1142       } else {
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1143               best_squot = 
quot_scale;
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1144               for (i = 0; i < 
ARRAY_SIZE(p); i++) {
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1145                       
unsigned int spre;
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1146                       
unsigned int srem;
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1147                       u8 cp;
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1148                       u8 tc;
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1149  
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1150                       tc = 
p[i][0];
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1151                       cp = 
p[i][1];
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1152                       spre = 
tc * cp;
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1153  
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1154                       srem = 
sdiv % spre;
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1155                       if 
(srem > spre / 2)
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1156                               
srem = spre - srem;
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1157                       squot = 
(srem * quot_scale + spre / 2) / spre;
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1158  
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1159                       if 
(srem == 0) {
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1160                               
tcr = tc;
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1161                               
cpr = cp;
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1162                               
quot = sdiv / spre;
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1163                               
break;
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1164                       } else 
if (squot < best_squot) {
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1165                               
best_squot = squot;
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1166                               
tcr = tc;
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1167                               
cpr = cp;
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1168                               
quot = (sdiv + spre / 2) / spre;
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1169                       }
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1170               }
b3a554d50d82ad Maciej W. Rozycki 2022-03-31 @1171               while (tcr <= 
(OXSEMI_TORNADO_TCR_MASK + 1) >> 1 &&
b3a554d50d82ad Maciej W. Rozycki 2022-03-31 @1172                      quot % 2 
== 0) {
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1173                       quot 
>>= 1;
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1174                       tcr <<= 
1;
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1175               }
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1176               while (quot > 
UART_DIV_MAX) {
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1177                       if (tcr 
<= (OXSEMI_TORNADO_TCR_MASK + 1) >> 1) {
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1178                               
quot >>= 1;
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1179                               
tcr <<= 1;
b3a554d50d82ad Maciej W. Rozycki 2022-03-31 @1180                       } else 
if (cpr <= OXSEMI_TORNADO_CPR_MASK >> 1) {
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1181                               
quot >>= 1;
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1182                               
cpr <<= 1;
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1183                       } else {
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1184                               
quot = quot * cpr / OXSEMI_TORNADO_CPR_MASK;
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1185                               
cpr = OXSEMI_TORNADO_CPR_MASK;
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1186                       }
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1187               }
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1188       }
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1189  
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1190       *frac = (cpr << 8) | 
(tcr & OXSEMI_TORNADO_TCR_MASK);
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1191       return quot;
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1192  }
b3a554d50d82ad Maciej W. Rozycki 2022-03-31  1193  

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp
_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to