CC: [email protected] CC: [email protected] CC: [email protected] TO: "Marc Kleine-Budde" <[email protected]> CC: Vincent Mailhol <[email protected]>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master head: 79a72162048e42a677bc7336a9f5d86fc3ff9558 commit: 5a9d5ecd69ed65fc2d49cdecfc1c1ab1e4d7af34 can: dev: move bittiming related code into seperate file date: 11 months ago :::::: branch date: 15 hours ago :::::: commit date: 11 months ago config: mips-randconfig-c004-20211203 (https://download.01.org/0day-ci/archive/20211206/[email protected]/config) compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 1e328b06c15273edf4a40a27ca24931b5efb3a87) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # install mips cross compiling tool for clang build # apt-get install binutils-mips-linux-gnu # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=5a9d5ecd69ed65fc2d49cdecfc1c1ab1e4d7af34 git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git git fetch --no-tags linus master git checkout 5a9d5ecd69ed65fc2d49cdecfc1c1ab1e4d7af34 # save the config file to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=mips clang-analyzer If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <[email protected]> clang-analyzer warnings: (new ones prefixed by >>) drivers/md/dm-raid1.c:730:3: note: Calling 'bio_list_add' bio_list_add(this_list, bio); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/bio.h:602:6: note: Access to field 'tail' results in a dereference of a null pointer (loaded from variable 'bl') if (bl->tail) ^~ Suppressed 4 warnings (4 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 6 warnings generated. crypto/asymmetric_keys/public_key.c:89:3: warning: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 [clang-analyzer-security.insecureAPI.strcpy] strcpy(alg_name, pkey->pkey_algo); ^~~~~~ crypto/asymmetric_keys/public_key.c:89:3: note: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 strcpy(alg_name, pkey->pkey_algo); ^~~~~~ Suppressed 5 warnings (5 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 4 warnings generated. Suppressed 4 warnings (4 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 5 warnings generated. lib/zstd/fse_compress.c:114:2: warning: Value stored to 'workspace' is never read [clang-analyzer-deadcode.DeadStores] workspace = (U32 *)workspace + spaceUsed32; ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ lib/zstd/fse_compress.c:114:2: note: Value stored to 'workspace' is never read workspace = (U32 *)workspace + spaceUsed32; ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ lib/zstd/fse_compress.c:115:2: warning: Value stored to 'workspaceSize' is never read [clang-analyzer-deadcode.DeadStores] workspaceSize -= (spaceUsed32 << 2); ^ ~~~~~~~~~~~~~~~~~~ lib/zstd/fse_compress.c:115:2: note: Value stored to 'workspaceSize' is never read workspaceSize -= (spaceUsed32 << 2); ^ ~~~~~~~~~~~~~~~~~~ lib/zstd/fse_compress.c:755:2: warning: Value stored to 'srcSize' is never read [clang-analyzer-deadcode.DeadStores] srcSize -= 2; ^ ~ lib/zstd/fse_compress.c:755:2: note: Value stored to 'srcSize' is never read srcSize -= 2; ^ ~ Suppressed 2 warnings (1 in non-user code, 1 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 2 warnings generated. Suppressed 2 warnings (1 in non-user code, 1 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 7 warnings generated. Suppressed 7 warnings (4 in non-user code, 3 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 1 warning generated. Suppressed 1 warnings (1 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 1 warning generated. Suppressed 1 warnings (1 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 1 warning generated. Suppressed 1 warnings (1 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 1 warning generated. Suppressed 1 warnings (1 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 4 warnings generated. Suppressed 4 warnings (4 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 4 warnings generated. Suppressed 4 warnings (4 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 12 warnings generated. Suppressed 12 warnings (12 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 4 warnings generated. Suppressed 4 warnings (4 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 4 warnings generated. Suppressed 4 warnings (4 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 7 warnings generated. drivers/clocksource/timer-of.c:191:3: warning: Value stored to 'flags' is never read [clang-analyzer-deadcode.DeadStores] flags |= TIMER_OF_IRQ; ^ drivers/clocksource/timer-of.c:191:3: note: Value stored to 'flags' is never read Suppressed 6 warnings (6 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 4 warnings generated. Suppressed 4 warnings (4 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 5 warnings generated. Suppressed 5 warnings (5 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 4 warnings generated. Suppressed 4 warnings (4 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 4 warnings generated. Suppressed 4 warnings (4 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 4 warnings generated. Suppressed 4 warnings (4 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 4 warnings generated. Suppressed 4 warnings (4 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 13 warnings generated. >> drivers/net/can/dev/bittiming.c:172:33: warning: Division by zero >> [clang-analyzer-core.DivideZero] bt->bitrate = priv->clock.freq / ~~~~~~~~~~~~~~~~~^ drivers/net/can/dev/bittiming.c:76:2: note: 'best_brp' initialized to 0 unsigned int best_brp = 0; /* current best value for brp */ ^~~~~~~~~~~~~~~~~~~~~ drivers/net/can/dev/bittiming.c:81:6: note: Assuming field 'sample_point' is not equal to 0 if (bt->sample_point) { ^~~~~~~~~~~~~~~~ drivers/net/can/dev/bittiming.c:81:2: note: Taking true branch if (bt->sample_point) { ^ drivers/net/can/dev/bittiming.c:94:7: note: Assuming the condition is true tseg >= (btc->tseg1_min + btc->tseg2_min) * 2; tseg--) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/net/can/dev/bittiming.c:93:2: note: Loop condition is true. Entering loop body for (tseg = (btc->tseg1_max + btc->tseg2_max) * 2 + 1; ^ drivers/net/can/dev/bittiming.c:102:7: note: Assuming 'brp' is < field 'brp_min' if (brp < btc->brp_min || brp > btc->brp_max) ^~~~~~~~~~~~~~~~~~ drivers/net/can/dev/bittiming.c:102:26: note: Left side of '||' is true if (brp < btc->brp_min || brp > btc->brp_max) ^ drivers/net/can/dev/bittiming.c:103:4: note: Execution continues on line 94 continue; ^ drivers/net/can/dev/bittiming.c:94:7: note: Assuming the condition is false tseg >= (btc->tseg1_min + btc->tseg2_min) * 2; tseg--) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/net/can/dev/bittiming.c:93:2: note: Loop condition is false. Execution continues on line 130 for (tseg = (btc->tseg1_max + btc->tseg2_max) * 2 + 1; ^ drivers/net/can/dev/bittiming.c:130:6: note: 'best_bitrate_error' is 4294967295 if (best_bitrate_error) { ^~~~~~~~~~~~~~~~~~ drivers/net/can/dev/bittiming.c:130:2: note: Taking true branch if (best_bitrate_error) { ^ drivers/net/can/dev/bittiming.c:133:3: note: Left side of '&&' is false do_div(v64, bt->bitrate); ^ include/asm-generic/div64.h:227:35: note: expanded from macro 'do_div' if (__builtin_constant_p(__base) && \ ^ drivers/net/can/dev/bittiming.c:133:3: note: 4 is >= 4 do_div(v64, bt->bitrate); ^ include/asm-generic/div64.h:231:13: note: expanded from macro 'do_div' } else if (__div64_const32_is_OK && \ ^~~~~~~~~~~~~~~~~~~~~ include/asm-generic/div64.h:66:32: note: expanded from macro '__div64_const32_is_OK' #define __div64_const32_is_OK (__GNUC__ >= 4) ^~~~~~~~ note: expanded from here drivers/net/can/dev/bittiming.c:133:3: note: Left side of '&&' is true do_div(v64, bt->bitrate); ^ include/asm-generic/div64.h:231:13: note: expanded from macro 'do_div' } else if (__div64_const32_is_OK && \ ^ include/asm-generic/div64.h:66:31: note: expanded from macro '__div64_const32_is_OK' #define __div64_const32_is_OK (__GNUC__ >= 4) ^ drivers/net/can/dev/bittiming.c:133:3: note: Left side of '&&' is false do_div(v64, bt->bitrate); ^ include/asm-generic/div64.h:232:35: note: expanded from macro 'do_div' __builtin_constant_p(__base) && \ ^ drivers/net/can/dev/bittiming.c:133:3: note: Taking false branch do_div(v64, bt->bitrate); ^ include/asm-generic/div64.h:239:9: note: expanded from macro 'do_div' } else if (likely(((n) >> 32) == 0)) { \ ^ drivers/net/can/dev/bittiming.c:135:7: note: Assuming 'bitrate_error' is <= CAN_CALC_MAX_ERROR if (bitrate_error > CAN_CALC_MAX_ERROR) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/net/can/dev/bittiming.c:135:3: note: Taking false branch if (bitrate_error > CAN_CALC_MAX_ERROR) { ^ drivers/net/can/dev/bittiming.c:151:2: note: Left side of '&&' is false do_div(v64, priv->clock.freq); ^ include/asm-generic/div64.h:227:35: note: expanded from macro 'do_div' if (__builtin_constant_p(__base) && \ ^ drivers/net/can/dev/bittiming.c:151:2: note: 4 is >= 4 do_div(v64, priv->clock.freq); ^ include/asm-generic/div64.h:231:13: note: expanded from macro 'do_div' } else if (__div64_const32_is_OK && \ ^~~~~~~~~~~~~~~~~~~~~ include/asm-generic/div64.h:66:32: note: expanded from macro '__div64_const32_is_OK' #define __div64_const32_is_OK (__GNUC__ >= 4) ^~~~~~~~ note: expanded from here drivers/net/can/dev/bittiming.c:151:2: note: Left side of '&&' is true do_div(v64, priv->clock.freq); ^ vim +172 drivers/net/can/dev/bittiming.c 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 64 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 65 int can_calc_bittiming(struct net_device *dev, struct can_bittiming *bt, 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 66 const struct can_bittiming_const *btc) 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 67 { 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 68 struct can_priv *priv = netdev_priv(dev); 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 69 unsigned int bitrate; /* current bitrate */ 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 70 unsigned int bitrate_error; /* difference between current and nominal value */ 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 71 unsigned int best_bitrate_error = UINT_MAX; 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 72 unsigned int sample_point_error; /* difference between current and nominal value */ 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 73 unsigned int best_sample_point_error = UINT_MAX; 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 74 unsigned int sample_point_nominal; /* nominal sample point */ 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 75 unsigned int best_tseg = 0; /* current best value for tseg */ 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 76 unsigned int best_brp = 0; /* current best value for brp */ 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 77 unsigned int brp, tsegall, tseg, tseg1 = 0, tseg2 = 0; 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 78 u64 v64; 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 79 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 80 /* Use CiA recommended sample points */ 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 81 if (bt->sample_point) { 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 82 sample_point_nominal = bt->sample_point; 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 83 } else { 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 84 if (bt->bitrate > 800000) 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 85 sample_point_nominal = 750; 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 86 else if (bt->bitrate > 500000) 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 87 sample_point_nominal = 800; 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 88 else 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 89 sample_point_nominal = 875; 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 90 } 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 91 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 92 /* tseg even = round down, odd = round up */ 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 93 for (tseg = (btc->tseg1_max + btc->tseg2_max) * 2 + 1; 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 94 tseg >= (btc->tseg1_min + btc->tseg2_min) * 2; tseg--) { 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 95 tsegall = CAN_SYNC_SEG + tseg / 2; 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 96 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 97 /* Compute all possible tseg choices (tseg=tseg1+tseg2) */ 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 98 brp = priv->clock.freq / (tsegall * bt->bitrate) + tseg % 2; 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 99 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 100 /* choose brp step which is possible in system */ 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 101 brp = (brp / btc->brp_inc) * btc->brp_inc; 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 102 if (brp < btc->brp_min || brp > btc->brp_max) 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 103 continue; 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 104 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 105 bitrate = priv->clock.freq / (brp * tsegall); 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 106 bitrate_error = abs(bt->bitrate - bitrate); 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 107 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 108 /* tseg brp biterror */ 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 109 if (bitrate_error > best_bitrate_error) 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 110 continue; 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 111 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 112 /* reset sample point error if we have a better bitrate */ 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 113 if (bitrate_error < best_bitrate_error) 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 114 best_sample_point_error = UINT_MAX; 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 115 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 116 can_update_sample_point(btc, sample_point_nominal, tseg / 2, 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 117 &tseg1, &tseg2, &sample_point_error); 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 118 if (sample_point_error > best_sample_point_error) 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 119 continue; 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 120 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 121 best_sample_point_error = sample_point_error; 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 122 best_bitrate_error = bitrate_error; 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 123 best_tseg = tseg / 2; 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 124 best_brp = brp; 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 125 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 126 if (bitrate_error == 0 && sample_point_error == 0) 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 127 break; 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 128 } 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 129 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 130 if (best_bitrate_error) { 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 131 /* Error in one-tenth of a percent */ 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 132 v64 = (u64)best_bitrate_error * 1000; 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 133 do_div(v64, bt->bitrate); 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 134 bitrate_error = (u32)v64; 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 135 if (bitrate_error > CAN_CALC_MAX_ERROR) { 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 136 netdev_err(dev, 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 137 "bitrate error %d.%d%% too high\n", 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 138 bitrate_error / 10, bitrate_error % 10); 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 139 return -EDOM; 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 140 } 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 141 netdev_warn(dev, "bitrate error %d.%d%%\n", 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 142 bitrate_error / 10, bitrate_error % 10); 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 143 } 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 144 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 145 /* real sample point */ 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 146 bt->sample_point = can_update_sample_point(btc, sample_point_nominal, 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 147 best_tseg, &tseg1, &tseg2, 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 148 NULL); 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 149 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 150 v64 = (u64)best_brp * 1000 * 1000 * 1000; 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 151 do_div(v64, priv->clock.freq); 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 152 bt->tq = (u32)v64; 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 153 bt->prop_seg = tseg1 / 2; 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 154 bt->phase_seg1 = tseg1 - bt->prop_seg; 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 155 bt->phase_seg2 = tseg2; 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 156 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 157 /* check for sjw user settings */ 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 158 if (!bt->sjw || !btc->sjw_max) { 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 159 bt->sjw = 1; 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 160 } else { 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 161 /* bt->sjw is at least 1 -> sanitize upper bound to sjw_max */ 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 162 if (bt->sjw > btc->sjw_max) 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 163 bt->sjw = btc->sjw_max; 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 164 /* bt->sjw must not be higher than tseg2 */ 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 165 if (tseg2 < bt->sjw) 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 166 bt->sjw = tseg2; 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 167 } 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 168 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 169 bt->brp = best_brp; 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 170 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 171 /* real bitrate */ 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 @172 bt->bitrate = priv->clock.freq / 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 173 (bt->brp * (CAN_SYNC_SEG + tseg1 + tseg2)); 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 174 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 175 return 0; 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 176 } 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 177 #endif /* CONFIG_CAN_CALC_BITTIMING */ 5a9d5ecd69ed65 Marc Kleine-Budde 2021-01-11 178 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/[email protected] _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
