Lines Matching +full:check +full:- +full:patch
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /* -------------------------------------------------------------------------
3 * Copyright (C) 2014-2016, Intel Corporation
5 * -------------------------------------------------------------------------
92 r = nci_core_conn_create(info->ndev, FDP_PATCH_CONN_DEST, 1, in fdp_nci_create_conn()
127 delta = 24 * fc - nd * clock_freq; in fdp_nci_set_clock()
148 info->setup_patch_sent = 1; in fdp_nci_send_patch_cb()
149 wake_up(&info->setup_wq); in fdp_nci_send_patch_cb()
157 * send the patch end message.
163 struct device *dev = &info->phy->i2c_dev->dev; in fdp_nci_set_data_pkt_counter()
166 atomic_set(&info->data_pkt_counter, count); in fdp_nci_set_data_pkt_counter()
167 info->data_pkt_counter_cb = cb; in fdp_nci_set_data_pkt_counter()
190 if ((type == NCI_PATCH_TYPE_OTP && !info->otp_patch) || in fdp_nci_send_patch()
191 (type == NCI_PATCH_TYPE_RAM && !info->ram_patch)) in fdp_nci_send_patch()
192 return -EINVAL; in fdp_nci_send_patch()
195 fw = info->otp_patch; in fdp_nci_send_patch()
197 fw = info->ram_patch; in fdp_nci_send_patch()
201 return -EINVAL; in fdp_nci_send_patch()
203 len = fw->size; in fdp_nci_send_patch()
206 DIV_ROUND_UP(fw->size, max_size)); in fdp_nci_send_patch()
216 return -ENOMEM; in fdp_nci_send_patch()
222 skb_put_data(skb, fw->data + (fw->size - len), payload_size); in fdp_nci_send_patch()
231 len -= payload_size; in fdp_nci_send_patch()
241 return info->phy_ops->enable(info->phy); in fdp_nci_open()
254 if (atomic_dec_and_test(&info->data_pkt_counter)) in fdp_nci_send()
255 info->data_pkt_counter_cb(ndev); in fdp_nci_send()
257 ret = info->phy_ops->write(info->phy, skb); in fdp_nci_send()
270 struct device *dev = &info->phy->i2c_dev->dev; in fdp_nci_request_firmware()
274 r = request_firmware(&info->ram_patch, FDP_RAM_PATCH_NAME, dev); in fdp_nci_request_firmware()
276 nfc_err(dev, "RAM patch request error\n"); in fdp_nci_request_firmware()
280 data = info->ram_patch->data; in fdp_nci_request_firmware()
281 info->ram_patch_version = in fdp_nci_request_firmware()
287 dev_dbg(dev, "RAM patch version: %d, size: %zu\n", in fdp_nci_request_firmware()
288 info->ram_patch_version, info->ram_patch->size); in fdp_nci_request_firmware()
291 r = request_firmware(&info->otp_patch, FDP_OTP_PATCH_NAME, dev); in fdp_nci_request_firmware()
293 nfc_err(dev, "OTP patch request error\n"); in fdp_nci_request_firmware()
297 data = (u8 *) info->otp_patch->data; in fdp_nci_request_firmware()
298 info->otp_patch_version = in fdp_nci_request_firmware()
304 dev_dbg(dev, "OTP patch version: %d, size: %zu\n", in fdp_nci_request_firmware()
305 info->otp_patch_version, info->otp_patch->size); in fdp_nci_request_firmware()
313 if (info->otp_patch) { in fdp_nci_release_firmware()
314 release_firmware(info->otp_patch); in fdp_nci_release_firmware()
315 info->otp_patch = NULL; in fdp_nci_release_firmware()
318 if (info->ram_patch) { in fdp_nci_release_firmware()
319 release_firmware(info->ram_patch); in fdp_nci_release_firmware()
320 info->ram_patch = NULL; in fdp_nci_release_firmware()
327 struct device *dev = &info->phy->i2c_dev->dev; in fdp_nci_patch_otp()
331 if (info->otp_version >= info->otp_patch_version) in fdp_nci_patch_otp()
334 info->setup_patch_sent = 0; in fdp_nci_patch_otp()
335 info->setup_reset_ntf = 0; in fdp_nci_patch_otp()
336 info->setup_patch_ntf = 0; in fdp_nci_patch_otp()
338 /* Patch init request */ in fdp_nci_patch_otp()
343 /* Patch data connection creation */ in fdp_nci_patch_otp()
348 /* Send the patch over the data connection */ in fdp_nci_patch_otp()
354 wait_event_interruptible(info->setup_wq, in fdp_nci_patch_otp()
355 info->setup_patch_sent == 1); in fdp_nci_patch_otp()
361 r = nci_core_conn_close(info->ndev, conn_id); in fdp_nci_patch_otp()
365 /* Patch finish message */ in fdp_nci_patch_otp()
367 nfc_err(dev, "OTP patch error 0x%x\n", r); in fdp_nci_patch_otp()
368 return -EINVAL; in fdp_nci_patch_otp()
371 /* If the patch notification didn't arrive yet, wait for it */ in fdp_nci_patch_otp()
372 wait_event_interruptible(info->setup_wq, info->setup_patch_ntf); in fdp_nci_patch_otp()
374 /* Check if the patching was successful */ in fdp_nci_patch_otp()
375 r = info->setup_patch_status; in fdp_nci_patch_otp()
377 nfc_err(dev, "OTP patch error 0x%x\n", r); in fdp_nci_patch_otp()
378 return -EINVAL; in fdp_nci_patch_otp()
385 wait_event_interruptible(info->setup_wq, info->setup_reset_ntf); in fdp_nci_patch_otp()
393 struct device *dev = &info->phy->i2c_dev->dev; in fdp_nci_patch_ram()
397 if (info->ram_version >= info->ram_patch_version) in fdp_nci_patch_ram()
400 info->setup_patch_sent = 0; in fdp_nci_patch_ram()
401 info->setup_reset_ntf = 0; in fdp_nci_patch_ram()
402 info->setup_patch_ntf = 0; in fdp_nci_patch_ram()
404 /* Patch init request */ in fdp_nci_patch_ram()
409 /* Patch data connection creation */ in fdp_nci_patch_ram()
414 /* Send the patch over the data connection */ in fdp_nci_patch_ram()
420 wait_event_interruptible(info->setup_wq, in fdp_nci_patch_ram()
421 info->setup_patch_sent == 1); in fdp_nci_patch_ram()
427 r = nci_core_conn_close(info->ndev, conn_id); in fdp_nci_patch_ram()
431 /* Patch finish message */ in fdp_nci_patch_ram()
433 nfc_err(dev, "RAM patch error 0x%x\n", r); in fdp_nci_patch_ram()
434 return -EINVAL; in fdp_nci_patch_ram()
437 /* If the patch notification didn't arrive yet, wait for it */ in fdp_nci_patch_ram()
438 wait_event_interruptible(info->setup_wq, info->setup_patch_ntf); in fdp_nci_patch_ram()
440 /* Check if the patching was successful */ in fdp_nci_patch_ram()
441 r = info->setup_patch_status; in fdp_nci_patch_ram()
443 nfc_err(dev, "RAM patch error 0x%x\n", r); in fdp_nci_patch_ram()
444 return -EINVAL; in fdp_nci_patch_ram()
451 wait_event_interruptible(info->setup_wq, info->setup_reset_ntf); in fdp_nci_patch_ram()
460 struct device *dev = &info->phy->i2c_dev->dev; in fdp_nci_setup()
479 if (info->otp_version < info->otp_patch_version) { in fdp_nci_setup()
487 if (info->ram_version < info->ram_patch_version) { in fdp_nci_setup()
497 /* If a patch was applied the new version is checked */ in fdp_nci_setup()
507 if (info->otp_version != info->otp_patch_version || in fdp_nci_setup()
508 info->ram_version != info->ram_patch_version) { in fdp_nci_setup()
510 r = -EINVAL; in fdp_nci_setup()
530 struct device *dev = &info->phy->i2c_dev->dev; in fdp_nci_post_setup()
533 /* Check if the device has VSC */ in fdp_nci_post_setup()
534 if (info->fw_vsc_cfg && info->fw_vsc_cfg[0]) { in fdp_nci_post_setup()
537 r = fdp_nci_set_production_data(ndev, info->fw_vsc_cfg[3], in fdp_nci_post_setup()
538 &info->fw_vsc_cfg[4]); in fdp_nci_post_setup()
547 r = fdp_nci_set_clock(ndev, info->clock_type, info->clock_freq); in fdp_nci_post_setup()
572 info->setup_reset_ntf = 1; in fdp_nci_core_reset_ntf_packet()
573 wake_up(&info->setup_wq); in fdp_nci_core_reset_ntf_packet()
583 info->setup_patch_ntf = 1; in fdp_nci_prop_patch_ntf_packet()
584 info->setup_patch_status = skb->data[0]; in fdp_nci_prop_patch_ntf_packet()
585 wake_up(&info->setup_wq); in fdp_nci_prop_patch_ntf_packet()
594 struct device *dev = &info->phy->i2c_dev->dev; in fdp_nci_prop_patch_rsp_packet()
595 u8 status = skb->data[0]; in fdp_nci_prop_patch_rsp_packet()
607 struct device *dev = &info->phy->i2c_dev->dev; in fdp_nci_prop_set_production_data_rsp_packet()
608 u8 status = skb->data[0]; in fdp_nci_prop_set_production_data_rsp_packet()
620 struct device *dev = &info->phy->i2c_dev->dev; in fdp_nci_core_get_config_rsp_packet()
621 const struct nci_core_get_config_rsp *rsp = (void *) skb->data; in fdp_nci_core_get_config_rsp_packet()
625 if (rsp->status == NCI_STATUS_OK) { in fdp_nci_core_get_config_rsp_packet()
627 p = rsp->data; in fdp_nci_core_get_config_rsp_packet()
633 info->ram_version = le32_to_cpup((__le32 *) p); in fdp_nci_core_get_config_rsp_packet()
638 info->otp_version = le32_to_cpup((__le32 *) p); in fdp_nci_core_get_config_rsp_packet()
643 info->otp_version = le32_to_cpup((__le32 *) p); in fdp_nci_core_get_config_rsp_packet()
648 info->key_index = *p++; in fdp_nci_core_get_config_rsp_packet()
653 dev_dbg(dev, "OTP version %d\n", info->otp_version); in fdp_nci_core_get_config_rsp_packet()
654 dev_dbg(dev, "RAM version %d\n", info->ram_version); in fdp_nci_core_get_config_rsp_packet()
655 dev_dbg(dev, "key index %d\n", info->key_index); in fdp_nci_core_get_config_rsp_packet()
656 dev_dbg(dev, "%s: status 0x%x\n", __func__, rsp->status); in fdp_nci_core_get_config_rsp_packet()
658 nci_req_complete(ndev, rsp->status); in fdp_nci_core_get_config_rsp_packet()
704 struct device *dev = &phy->i2c_dev->dev; in fdp_nci_probe()
712 return -ENOMEM; in fdp_nci_probe()
714 info->phy = phy; in fdp_nci_probe()
715 info->phy_ops = phy_ops; in fdp_nci_probe()
716 info->clock_type = clock_type; in fdp_nci_probe()
717 info->clock_freq = clock_freq; in fdp_nci_probe()
718 info->fw_vsc_cfg = fw_vsc_cfg; in fdp_nci_probe()
720 init_waitqueue_head(&info->setup_wq); in fdp_nci_probe()
735 return -ENOMEM; in fdp_nci_probe()
743 info->ndev = ndev; in fdp_nci_probe()