MCPcopy Create free account
hub / github.com/F-Stack/f-stack / n3000_write_done

Function n3000_write_done

dpdk/drivers/raw/ifpga/base/ifpga_sec_mgr.c:284–349  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

282}
283
284static int n3000_write_done(struct ifpga_sec_mgr *smgr)
285{
286 struct intel_max10_device *dev = NULL;
287 uint32_t doorbell = 0;
288 uint32_t prog = 0;
289 uint32_t status = 0;
290 int ret = 0;
291
292 if (!smgr || !smgr->max10_dev)
293 return -ENODEV;
294 dev = (struct intel_max10_device *)smgr->max10_dev;
295
296 ret = max10_sys_read(dev, MAX10_DOORBELL, &doorbell);
297 if (ret < 0) {
298 dev_err(dev,
299 "Failed to read max10 doorbell register [e:%d]\n",
300 ret);
301 return ret;
302 }
303
304 prog = SEC_PROGRESS_G(doorbell);
305 if (prog != SEC_PROGRESS_READY)
306 return -EBUSY;
307
308 ret = max10_sys_update_bits(dev, MAX10_DOORBELL, HOST_STATUS,
309 HOST_STATUS_S(HOST_STATUS_WRITE_DONE));
310 if (ret < 0) {
311 dev_err(dev,
312 "Failed to update max10 doorbell register [e:%d]\n",
313 ret);
314 return ret;
315 }
316
317 ret = poll_timeout(dev, MAX10_DOORBELL, secure_prog_ready,
318 IFPGA_NIOS_HANDSHAKE_INTERVAL_MS,
319 IFPGA_NIOS_HANDSHAKE_TIMEOUT_MS);
320 if (ret < 0) {
321 dev_err(dev,
322 "Failed to poll max10 doorbell register [e:%d]\n",
323 ret);
324 return ret;
325 }
326
327 ret = max10_sys_read(dev, MAX10_DOORBELL, &doorbell);
328 if (ret < 0) {
329 dev_err(dev,
330 "Failed to read max10 doorbell register [e:%d]\n",
331 ret);
332 return ret;
333 }
334
335 status = SEC_STATUS_G(doorbell);
336 switch (status) {
337 case SEC_STATUS_NORMAL:
338 case SEC_STATUS_NIOS_OK:
339 case SEC_STATUS_USER_OK:
340 case SEC_STATUS_FACTORY_OK:
341 ret = 0;

Callers

nothing calls this directly

Calls 3

max10_sys_readFunction · 0.85
max10_sys_update_bitsFunction · 0.85
poll_timeoutFunction · 0.85

Tested by

no test coverage detected