From: kernel test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: [ambarus:spi-nor/next-otp-ammend-check-link-err 11/14] drivers/mtd/spi-nor/otp.c:171: undefined reference to `__moddi3'
Date: Thu, 01 Apr 2021 06:41:47 +0800 [thread overview]
Message-ID: <202104010641.kCffRXMV-lkp@intel.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 6298 bytes --]
tree: https://github.com/ambarus/linux-0day spi-nor/next-otp-ammend-check-link-err
head: bf51641a17e761b318f490fe04adc7f5359c0d37
commit: 6081b3c35765470cd8188c26cc2497c74bed9a87 [11/14] mtd: spi-nor: add OTP support
config: i386-randconfig-c021-20210330 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
reproduce (this is a W=1 build):
# https://github.com/ambarus/linux-0day/commit/6081b3c35765470cd8188c26cc2497c74bed9a87
git remote add ambarus https://github.com/ambarus/linux-0day
git fetch --no-tags ambarus spi-nor/next-otp-ammend-check-link-err
git checkout 6081b3c35765470cd8188c26cc2497c74bed9a87
# save the attached .config to linux build tree
make W=1 ARCH=i386
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
ld: drivers/mtd/spi-nor/otp.o: in function `spi_nor_mtd_otp_lock':
>> drivers/mtd/spi-nor/otp.c:171: undefined reference to `__moddi3'
ld: drivers/mtd/spi-nor/otp.o: in function `spi_nor_otp_offset_to_region':
>> drivers/mtd/spi-nor/otp.c:40: undefined reference to `__divdi3'
>> ld: drivers/mtd/spi-nor/otp.c:40: undefined reference to `__divdi3'
vim +171 drivers/mtd/spi-nor/otp.c
37
38 static unsigned int spi_nor_otp_offset_to_region(struct spi_nor *nor, loff_t ofs)
39 {
> 40 return ofs / spi_nor_otp_region_len(nor);
41 }
42
43 static int spi_nor_mtd_otp_info(struct mtd_info *mtd, size_t len,
44 size_t *retlen, struct otp_info *buf)
45 {
46 struct spi_nor *nor = mtd_to_spi_nor(mtd);
47 const struct spi_nor_otp_ops *ops = nor->params->otp.ops;
48 unsigned int n_regions = spi_nor_otp_n_regions(nor);
49 unsigned int i;
50 int ret, locked;
51
52 if (len < n_regions * sizeof(*buf))
53 return -ENOSPC;
54
55 ret = spi_nor_lock_and_prep(nor);
56 if (ret)
57 return ret;
58
59 for (i = 0; i < n_regions; i++) {
60 buf->start = spi_nor_otp_region_to_offset(nor, i);
61 buf->length = spi_nor_otp_region_len(nor);
62
63 locked = ops->is_locked(nor, i);
64 if (locked < 0) {
65 ret = locked;
66 goto out;
67 }
68
69 buf->locked = !!locked;
70 buf++;
71 }
72
73 *retlen = n_regions * sizeof(*buf);
74
75 out:
76 spi_nor_unlock_and_unprep(nor);
77
78 return ret;
79 }
80
81 static int spi_nor_mtd_otp_read_write(struct mtd_info *mtd, loff_t ofs,
82 size_t total_len, size_t *retlen,
83 u8 *buf, bool is_write)
84 {
85 struct spi_nor *nor = mtd_to_spi_nor(mtd);
86 const struct spi_nor_otp_ops *ops = nor->params->otp.ops;
87 const size_t rlen = spi_nor_otp_region_len(nor);
88 loff_t rstart, rofs;
89 unsigned int region;
90 size_t len;
91 int ret;
92
93 if (ofs < 0 || ofs >= spi_nor_otp_size(nor))
94 return 0;
95
96 ret = spi_nor_lock_and_prep(nor);
97 if (ret)
98 return ret;
99
100 /* don't access beyond the end */
101 total_len = min_t(size_t, total_len, spi_nor_otp_size(nor) - ofs);
102
103 *retlen = 0;
104 while (total_len) {
105 /*
106 * The OTP regions are mapped into a contiguous area starting
107 * at 0 as expected by the MTD layer. This will map the MTD
108 * file offsets to the address of an OTP region as used in the
109 * actual SPI commands.
110 */
111 region = spi_nor_otp_offset_to_region(nor, ofs);
112 rstart = spi_nor_otp_region_start(nor, region);
113
114 /*
115 * The size of a OTP region is expected to be a power of two,
116 * thus we can just mask the lower bits and get the offset into
117 * a region.
118 */
119 rofs = ofs & (rlen - 1);
120
121 /* don't access beyond one OTP region */
122 len = min_t(size_t, total_len, rlen - rofs);
123
124 if (is_write)
125 ret = ops->write(nor, rstart + rofs, len, buf);
126 else
127 ret = ops->read(nor, rstart + rofs, len, buf);
128 if (ret == 0)
129 ret = -EIO;
130 if (ret < 0)
131 goto out;
132
133 *retlen += ret;
134 ofs += ret;
135 buf += ret;
136 total_len -= ret;
137 }
138 ret = 0;
139
140 out:
141 spi_nor_unlock_and_unprep(nor);
142 return ret;
143 }
144
145 static int spi_nor_mtd_otp_read(struct mtd_info *mtd, loff_t from, size_t len,
146 size_t *retlen, u8 *buf)
147 {
148 return spi_nor_mtd_otp_read_write(mtd, from, len, retlen, buf, false);
149 }
150
151 static int spi_nor_mtd_otp_write(struct mtd_info *mtd, loff_t to, size_t len,
152 size_t *retlen, u8 *buf)
153 {
154 return spi_nor_mtd_otp_read_write(mtd, to, len, retlen, buf, true);
155 }
156
157 static int spi_nor_mtd_otp_lock(struct mtd_info *mtd, loff_t from, size_t len)
158 {
159 struct spi_nor *nor = mtd_to_spi_nor(mtd);
160 const struct spi_nor_otp_ops *ops = nor->params->otp.ops;
161 unsigned int region;
162 int ret;
163
164 if (from < 0 || (from + len) > spi_nor_otp_size(nor))
165 return -EINVAL;
166
167 /* the user has to explicitly ask for whole regions */
168 if (len % spi_nor_otp_region_len(nor))
169 return -EINVAL;
170
> 171 if (from % spi_nor_otp_region_len(nor))
172 return -EINVAL;
173
174 ret = spi_nor_lock_and_prep(nor);
175 if (ret)
176 return ret;
177
178 while (len) {
179 region = spi_nor_otp_offset_to_region(nor, from);
180 ret = ops->lock(nor, region);
181 if (ret)
182 goto out;
183
184 len -= spi_nor_otp_region_len(nor);
185 from += spi_nor_otp_region_len(nor);
186 }
187
188 out:
189 spi_nor_unlock_and_unprep(nor);
190
191 return ret;
192 }
193
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 29179 bytes --]
reply other threads:[~2021-03-31 22:41 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202104010641.kCffRXMV-lkp@intel.com \
--to=lkp@intel.com \
--cc=kbuild-all@lists.01.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.