[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date: Tue, 7 Jul 2020 19:44:05 +0800
From: kernel test robot <lkp@...el.com>
To: sundeep.lkml@...il.com, davem@...emloft.net, kuba@...nel.org,
richardcochran@...il.com, netdev@...r.kernel.org,
sgoutham@...vell.com
Cc: kbuild-all@...ts.01.org, Aleksey Makarov <amakarov@...vell.com>,
Subbaraya Sundeep <sbhatta@...vell.com>
Subject: Re: [PATCH net-next 3/3] octeontx2-pf: Add support for PTP clock
Hi,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on net-next/master]
url: https://github.com/0day-ci/linux/commits/sundeep-lkml-gmail-com/Add-PTP-support-for-Octeontx2/20200707-163310
base: https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git d47a72152097d7be7cfc453d205196c0aa976c33
config: powerpc-allyesconfig (attached as .config)
compiler: powerpc64-linux-gcc (GCC) 9.3.0
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
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=powerpc
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@...el.com>
All error/warnings (new ones prefixed by >>):
>> drivers/net/ethernet/marvell/octeontx2/nic/otx2_ptp.c:14:22: error: field 'cycle_counter' has incomplete type
14 | struct cyclecounter cycle_counter;
| ^~~~~~~~~~~~~
>> drivers/net/ethernet/marvell/octeontx2/nic/otx2_ptp.c:15:21: error: field 'time_counter' has incomplete type
15 | struct timecounter time_counter;
| ^~~~~~~~~~~~
In file included from include/linux/dev_printk.h:14,
from include/linux/device.h:15,
from include/linux/ptp_clock_kernel.h:11,
from drivers/net/ethernet/marvell/octeontx2/nic/otx2_ptp.c:4:
drivers/net/ethernet/marvell/octeontx2/nic/otx2_ptp.c: In function 'ptp_cc_read':
>> include/linux/kernel.h:1003:32: error: dereferencing pointer to incomplete type 'const struct cyclecounter'
1003 | BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
| ^~~~~~
include/linux/compiler.h:372:9: note: in definition of macro '__compiletime_assert'
372 | if (!(condition)) \
| ^~~~~~~~~
include/linux/compiler.h:392:2: note: in expansion of macro '_compiletime_assert'
392 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
| ^~~~~~~~~~~~~~~~~~~
include/linux/build_bug.h:39:37: note: in expansion of macro 'compiletime_assert'
39 | #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
| ^~~~~~~~~~~~~~~~~~
include/linux/kernel.h:1003:2: note: in expansion of macro 'BUILD_BUG_ON_MSG'
1003 | BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
| ^~~~~~~~~~~~~~~~
include/linux/kernel.h:1003:20: note: in expansion of macro '__same_type'
1003 | BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
| ^~~~~~~~~~~
>> drivers/net/ethernet/marvell/octeontx2/nic/otx2_ptp.c:44:25: note: in expansion of macro 'container_of'
44 | struct otx2_ptp *ptp = container_of(cc, struct otx2_ptp, cycle_counter);
| ^~~~~~~~~~~~
drivers/net/ethernet/marvell/octeontx2/nic/otx2_ptp.c: In function 'otx2_ptp_adjtime':
>> drivers/net/ethernet/marvell/octeontx2/nic/otx2_ptp.c:77:2: error: implicit declaration of function 'timecounter_adjtime' [-Werror=implicit-function-declaration]
77 | timecounter_adjtime(&ptp->time_counter, delta);
| ^~~~~~~~~~~~~~~~~~~
drivers/net/ethernet/marvell/octeontx2/nic/otx2_ptp.c: In function 'otx2_ptp_gettime':
>> drivers/net/ethernet/marvell/octeontx2/nic/otx2_ptp.c:92:9: error: implicit declaration of function 'timecounter_read'; did you mean 'refcount_read'? [-Werror=implicit-function-declaration]
92 | nsec = timecounter_read(&ptp->time_counter);
| ^~~~~~~~~~~~~~~~
| refcount_read
drivers/net/ethernet/marvell/octeontx2/nic/otx2_ptp.c: In function 'otx2_ptp_settime':
>> drivers/net/ethernet/marvell/octeontx2/nic/otx2_ptp.c:111:2: error: implicit declaration of function 'timecounter_init'; did you mean 'timerqueue_init'? [-Werror=implicit-function-declaration]
111 | timecounter_init(&ptp->time_counter, &ptp->cycle_counter, nsec);
| ^~~~~~~~~~~~~~~~
| timerqueue_init
drivers/net/ethernet/marvell/octeontx2/nic/otx2_ptp.c: In function 'otx2_ptp_init':
>> drivers/net/ethernet/marvell/octeontx2/nic/otx2_ptp.c:156:4: error: dereferencing pointer to incomplete type 'struct cyclecounter'
156 | cc->read = ptp_cc_read;
| ^~
>> drivers/net/ethernet/marvell/octeontx2/nic/otx2_ptp.c:157:13: error: implicit declaration of function 'CYCLECOUNTER_MASK' [-Werror=implicit-function-declaration]
157 | cc->mask = CYCLECOUNTER_MASK(64);
| ^~~~~~~~~~~~~~~~~
drivers/net/ethernet/marvell/octeontx2/nic/otx2_ptp.c: In function 'otx2_ptp_tstamp2time':
>> drivers/net/ethernet/marvell/octeontx2/nic/otx2_ptp.c:216:10: error: implicit declaration of function 'timecounter_cyc2time' [-Werror=implicit-function-declaration]
216 | *tsns = timecounter_cyc2time(&pfvf->ptp->time_counter, tstamp);
| ^~~~~~~~~~~~~~~~~~~~
cc1: some warnings being treated as errors
vim +/cycle_counter +14 drivers/net/ethernet/marvell/octeontx2/nic/otx2_ptp.c
8
9 struct otx2_ptp {
10 struct ptp_clock_info ptp_info;
11 struct ptp_clock *ptp_clock;
12 struct otx2_nic *nic;
13
> 14 struct cyclecounter cycle_counter;
> 15 struct timecounter time_counter;
16 };
17
18 static int otx2_ptp_adjfine(struct ptp_clock_info *ptp_info, long scaled_ppm)
19 {
20 struct otx2_ptp *ptp = container_of(ptp_info, struct otx2_ptp,
21 ptp_info);
22 struct ptp_req *req;
23 int err;
24
25 if (!ptp->nic)
26 return -ENODEV;
27
28 req = otx2_mbox_alloc_msg_ptp_op(&ptp->nic->mbox);
29 if (!req)
30 return -ENOMEM;
31
32 req->op = PTP_OP_ADJFINE;
33 req->scaled_ppm = scaled_ppm;
34
35 err = otx2_sync_mbox_msg(&ptp->nic->mbox);
36 if (err)
37 return err;
38
39 return 0;
40 }
41
42 static u64 ptp_cc_read(const struct cyclecounter *cc)
43 {
> 44 struct otx2_ptp *ptp = container_of(cc, struct otx2_ptp, cycle_counter);
45 struct ptp_req *req;
46 struct ptp_rsp *rsp;
47 int err;
48
49 if (!ptp->nic)
50 return 0;
51
52 req = otx2_mbox_alloc_msg_ptp_op(&ptp->nic->mbox);
53 if (!req)
54 return 0;
55
56 req->op = PTP_OP_GET_CLOCK;
57
58 err = otx2_sync_mbox_msg(&ptp->nic->mbox);
59 if (err)
60 return 0;
61
62 rsp = (struct ptp_rsp *)otx2_mbox_get_rsp(&ptp->nic->mbox.mbox, 0,
63 &req->hdr);
64 if (IS_ERR(rsp))
65 return 0;
66
67 return rsp->clk;
68 }
69
70 static int otx2_ptp_adjtime(struct ptp_clock_info *ptp_info, s64 delta)
71 {
72 struct otx2_ptp *ptp = container_of(ptp_info, struct otx2_ptp,
73 ptp_info);
74 struct otx2_nic *pfvf = ptp->nic;
75
76 mutex_lock(&pfvf->mbox.lock);
> 77 timecounter_adjtime(&ptp->time_counter, delta);
78 mutex_unlock(&pfvf->mbox.lock);
79
80 return 0;
81 }
82
83 static int otx2_ptp_gettime(struct ptp_clock_info *ptp_info,
84 struct timespec64 *ts)
85 {
86 struct otx2_ptp *ptp = container_of(ptp_info, struct otx2_ptp,
87 ptp_info);
88 struct otx2_nic *pfvf = ptp->nic;
89 u64 nsec;
90
91 mutex_lock(&pfvf->mbox.lock);
> 92 nsec = timecounter_read(&ptp->time_counter);
93 mutex_unlock(&pfvf->mbox.lock);
94
95 *ts = ns_to_timespec64(nsec);
96
97 return 0;
98 }
99
100 static int otx2_ptp_settime(struct ptp_clock_info *ptp_info,
101 const struct timespec64 *ts)
102 {
103 struct otx2_ptp *ptp = container_of(ptp_info, struct otx2_ptp,
104 ptp_info);
105 struct otx2_nic *pfvf = ptp->nic;
106 u64 nsec;
107
108 nsec = timespec64_to_ns(ts);
109
110 mutex_lock(&pfvf->mbox.lock);
> 111 timecounter_init(&ptp->time_counter, &ptp->cycle_counter, nsec);
112 mutex_unlock(&pfvf->mbox.lock);
113
114 return 0;
115 }
116
117 static int otx2_ptp_enable(struct ptp_clock_info *ptp_info,
118 struct ptp_clock_request *rq, int on)
119 {
120 return -EOPNOTSUPP;
121 }
122
123 int otx2_ptp_init(struct otx2_nic *pfvf)
124 {
125 struct otx2_ptp *ptp_ptr;
126 struct cyclecounter *cc;
127 struct ptp_req *req;
128 int err;
129
130 mutex_lock(&pfvf->mbox.lock);
131 /* check if PTP block is available */
132 req = otx2_mbox_alloc_msg_ptp_op(&pfvf->mbox);
133 if (!req) {
134 mutex_unlock(&pfvf->mbox.lock);
135 return -ENOMEM;
136 }
137
138 req->op = PTP_OP_GET_CLOCK;
139
140 err = otx2_sync_mbox_msg(&pfvf->mbox);
141 if (err) {
142 mutex_unlock(&pfvf->mbox.lock);
143 return err;
144 }
145 mutex_unlock(&pfvf->mbox.lock);
146
147 ptp_ptr = kzalloc(sizeof(*ptp_ptr), GFP_KERNEL);
148 if (!ptp_ptr) {
149 err = -ENOMEM;
150 goto error;
151 }
152
153 ptp_ptr->nic = pfvf;
154
155 cc = &ptp_ptr->cycle_counter;
> 156 cc->read = ptp_cc_read;
> 157 cc->mask = CYCLECOUNTER_MASK(64);
158 cc->mult = 1;
159 cc->shift = 0;
160
161 timecounter_init(&ptp_ptr->time_counter, &ptp_ptr->cycle_counter,
162 ktime_to_ns(ktime_get_real()));
163
164 ptp_ptr->ptp_info = (struct ptp_clock_info) {
165 .owner = THIS_MODULE,
166 .name = "OcteonTX2 PTP",
167 .max_adj = 1000000000ull,
168 .n_ext_ts = 0,
169 .n_pins = 0,
170 .pps = 0,
171 .adjfine = otx2_ptp_adjfine,
172 .adjtime = otx2_ptp_adjtime,
173 .gettime64 = otx2_ptp_gettime,
174 .settime64 = otx2_ptp_settime,
175 .enable = otx2_ptp_enable,
176 };
177
178 ptp_ptr->ptp_clock = ptp_clock_register(&ptp_ptr->ptp_info, pfvf->dev);
179 if (IS_ERR(ptp_ptr->ptp_clock)) {
180 err = PTR_ERR(ptp_ptr->ptp_clock);
181 kfree(ptp_ptr);
182 goto error;
183 }
184
185 pfvf->ptp = ptp_ptr;
186
187 error:
188 return err;
189 }
190
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
Download attachment ".config.gz" of type "application/gzip" (69752 bytes)
Powered by blists - more mailing lists