1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /* -------------------------------------------------------------------------
3 * Copyright (C) 2014-2016, Intel Corporation
5 * -------------------------------------------------------------------------
8 #include <linux/module.h>
10 #include <linux/i2c.h>
11 #include <linux/delay.h>
12 #include <linux/firmware.h>
13 #include <net/nfc/nci_core.h>
17 #define FDP_OTP_PATCH_NAME "otp.bin"
18 #define FDP_RAM_PATCH_NAME "ram.bin"
19 #define FDP_FW_HEADER_SIZE 576
20 #define FDP_FW_UPDATE_SLEEP 1000
22 #define NCI_GET_VERSION_TIMEOUT 8000
23 #define NCI_PATCH_REQUEST_TIMEOUT 8000
24 #define FDP_PATCH_CONN_DEST 0xC2
25 #define FDP_PATCH_CONN_PARAM_TYPE 0xA0
27 #define NCI_PATCH_TYPE_RAM 0x00
28 #define NCI_PATCH_TYPE_OTP 0x01
29 #define NCI_PATCH_TYPE_EOT 0xFF
31 #define NCI_PARAM_ID_FW_RAM_VERSION 0xA0
32 #define NCI_PARAM_ID_FW_OTP_VERSION 0xA1
33 #define NCI_PARAM_ID_OTP_LIMITED_VERSION 0xC5
34 #define NCI_PARAM_ID_KEY_INDEX_ID 0xC6
36 #define NCI_GID_PROP 0x0F
37 #define NCI_OP_PROP_PATCH_OID 0x08
38 #define NCI_OP_PROP_SET_PDATA_OID 0x23
41 struct nfc_phy_ops
*phy_ops
;
42 struct fdp_i2c_phy
*phy
;
45 const struct firmware
*otp_patch
;
46 const struct firmware
*ram_patch
;
47 u32 otp_patch_version
;
48 u32 ram_patch_version
;
52 u32 limited_otp_version
;
59 atomic_t data_pkt_counter
;
60 void (*data_pkt_counter_cb
)(struct nci_dev
*ndev
);
63 u8 setup_patch_status
;
65 wait_queue_head_t setup_wq
;
68 static u8 nci_core_get_config_otp_ram_version
[5] = {
70 NCI_PARAM_ID_FW_RAM_VERSION
,
71 NCI_PARAM_ID_FW_OTP_VERSION
,
72 NCI_PARAM_ID_OTP_LIMITED_VERSION
,
73 NCI_PARAM_ID_KEY_INDEX_ID
76 struct nci_core_get_config_rsp
{
82 static int fdp_nci_create_conn(struct nci_dev
*ndev
)
84 struct fdp_nci_info
*info
= nci_get_drvdata(ndev
);
85 struct core_conn_create_dest_spec_params param
;
88 /* proprietary destination specific paramerer without value */
89 param
.type
= FDP_PATCH_CONN_PARAM_TYPE
;
92 r
= nci_core_conn_create(info
->ndev
, FDP_PATCH_CONN_DEST
, 1,
93 sizeof(param
), ¶m
);
97 return nci_get_conn_info_by_dest_type_params(ndev
,
98 FDP_PATCH_CONN_DEST
, NULL
);
101 static inline int fdp_nci_get_versions(struct nci_dev
*ndev
)
103 return nci_core_cmd(ndev
, NCI_OP_CORE_GET_CONFIG_CMD
,
104 sizeof(nci_core_get_config_otp_ram_version
),
105 (__u8
*) &nci_core_get_config_otp_ram_version
);
108 static inline int fdp_nci_patch_cmd(struct nci_dev
*ndev
, u8 type
)
110 return nci_prop_cmd(ndev
, NCI_OP_PROP_PATCH_OID
, sizeof(type
), &type
);
113 static inline int fdp_nci_set_production_data(struct nci_dev
*ndev
, u8 len
,
116 return nci_prop_cmd(ndev
, NCI_OP_PROP_SET_PDATA_OID
, len
, data
);
119 static int fdp_nci_set_clock(struct nci_dev
*ndev
, u8 clock_type
,
126 nd
= (24 * fc
) / clock_freq
;
127 delta
= 24 * fc
- nd
* clock_freq
;
128 num
= (32768 * delta
) / clock_freq
;
136 data
[5] = num
& 0xFF;
137 data
[6] = (num
>> 8) & 0xff;
139 data
[8] = clock_type
;
141 return fdp_nci_set_production_data(ndev
, 9, data
);
144 static void fdp_nci_send_patch_cb(struct nci_dev
*ndev
)
146 struct fdp_nci_info
*info
= nci_get_drvdata(ndev
);
148 info
->setup_patch_sent
= 1;
149 wake_up(&info
->setup_wq
);
153 * Register a packet sent counter and a callback
155 * We have no other way of knowing when all firmware packets were sent out
156 * on the i2c bus. We need to know that in order to close the connection and
157 * send the patch end message.
159 static void fdp_nci_set_data_pkt_counter(struct nci_dev
*ndev
,
160 void (*cb
)(struct nci_dev
*ndev
), int count
)
162 struct fdp_nci_info
*info
= nci_get_drvdata(ndev
);
163 struct device
*dev
= &info
->phy
->i2c_dev
->dev
;
165 dev_dbg(dev
, "NCI data pkt counter %d\n", count
);
166 atomic_set(&info
->data_pkt_counter
, count
);
167 info
->data_pkt_counter_cb
= cb
;
171 * The device is expecting a stream of packets. All packets need to
172 * have the PBF flag set to 0x0 (last packet) even if the firmware
173 * file is segmented and there are multiple packets. If we give the
174 * whole firmware to nci_send_data it will segment it and it will set
175 * the PBF flag to 0x01 so we need to do the segmentation here.
177 * The firmware will be analyzed and applied when we send NCI_OP_PROP_PATCH_CMD
178 * command with NCI_PATCH_TYPE_EOT parameter. The device will send a
179 * NFCC_PATCH_NTF packaet and a NCI_OP_CORE_RESET_NTF packet.
181 static int fdp_nci_send_patch(struct nci_dev
*ndev
, u8 conn_id
, u8 type
)
183 struct fdp_nci_info
*info
= nci_get_drvdata(ndev
);
184 const struct firmware
*fw
;
187 int max_size
, payload_size
;
190 if ((type
== NCI_PATCH_TYPE_OTP
&& !info
->otp_patch
) ||
191 (type
== NCI_PATCH_TYPE_RAM
&& !info
->ram_patch
))
194 if (type
== NCI_PATCH_TYPE_OTP
)
195 fw
= info
->otp_patch
;
197 fw
= info
->ram_patch
;
199 max_size
= nci_conn_max_data_pkt_payload_size(ndev
, conn_id
);
205 fdp_nci_set_data_pkt_counter(ndev
, fdp_nci_send_patch_cb
,
206 DIV_ROUND_UP(fw
->size
, max_size
));
210 payload_size
= min_t(unsigned long, max_size
, len
);
212 skb
= nci_skb_alloc(ndev
, (NCI_CTRL_HDR_SIZE
+ payload_size
),
215 fdp_nci_set_data_pkt_counter(ndev
, NULL
, 0);
220 skb_reserve(skb
, NCI_CTRL_HDR_SIZE
);
222 skb_put_data(skb
, fw
->data
+ (fw
->size
- len
), payload_size
);
224 rc
= nci_send_data(ndev
, conn_id
, skb
);
227 fdp_nci_set_data_pkt_counter(ndev
, NULL
, 0);
237 static int fdp_nci_open(struct nci_dev
*ndev
)
240 struct fdp_nci_info
*info
= nci_get_drvdata(ndev
);
241 struct device
*dev
= &info
->phy
->i2c_dev
->dev
;
243 dev_dbg(dev
, "%s\n", __func__
);
245 r
= info
->phy_ops
->enable(info
->phy
);
250 static int fdp_nci_close(struct nci_dev
*ndev
)
252 struct fdp_nci_info
*info
= nci_get_drvdata(ndev
);
253 struct device
*dev
= &info
->phy
->i2c_dev
->dev
;
255 dev_dbg(dev
, "%s\n", __func__
);
259 static int fdp_nci_send(struct nci_dev
*ndev
, struct sk_buff
*skb
)
261 struct fdp_nci_info
*info
= nci_get_drvdata(ndev
);
262 struct device
*dev
= &info
->phy
->i2c_dev
->dev
;
264 dev_dbg(dev
, "%s\n", __func__
);
266 if (atomic_dec_and_test(&info
->data_pkt_counter
))
267 info
->data_pkt_counter_cb(ndev
);
269 return info
->phy_ops
->write(info
->phy
, skb
);
272 int fdp_nci_recv_frame(struct nci_dev
*ndev
, struct sk_buff
*skb
)
274 struct fdp_nci_info
*info
= nci_get_drvdata(ndev
);
275 struct device
*dev
= &info
->phy
->i2c_dev
->dev
;
277 dev_dbg(dev
, "%s\n", __func__
);
278 return nci_recv_frame(ndev
, skb
);
280 EXPORT_SYMBOL(fdp_nci_recv_frame
);
282 static int fdp_nci_request_firmware(struct nci_dev
*ndev
)
284 struct fdp_nci_info
*info
= nci_get_drvdata(ndev
);
285 struct device
*dev
= &info
->phy
->i2c_dev
->dev
;
289 r
= request_firmware(&info
->ram_patch
, FDP_RAM_PATCH_NAME
, dev
);
291 nfc_err(dev
, "RAM patch request error\n");
295 data
= (u8
*) info
->ram_patch
->data
;
296 info
->ram_patch_version
=
297 data
[FDP_FW_HEADER_SIZE
] |
298 (data
[FDP_FW_HEADER_SIZE
+ 1] << 8) |
299 (data
[FDP_FW_HEADER_SIZE
+ 2] << 16) |
300 (data
[FDP_FW_HEADER_SIZE
+ 3] << 24);
302 dev_dbg(dev
, "RAM patch version: %d, size: %d\n",
303 info
->ram_patch_version
, (int) info
->ram_patch
->size
);
306 r
= request_firmware(&info
->otp_patch
, FDP_OTP_PATCH_NAME
, dev
);
308 nfc_err(dev
, "OTP patch request error\n");
312 data
= (u8
*) info
->otp_patch
->data
;
313 info
->otp_patch_version
=
314 data
[FDP_FW_HEADER_SIZE
] |
315 (data
[FDP_FW_HEADER_SIZE
+ 1] << 8) |
316 (data
[FDP_FW_HEADER_SIZE
+2] << 16) |
317 (data
[FDP_FW_HEADER_SIZE
+3] << 24);
319 dev_dbg(dev
, "OTP patch version: %d, size: %d\n",
320 info
->otp_patch_version
, (int) info
->otp_patch
->size
);
327 static void fdp_nci_release_firmware(struct nci_dev
*ndev
)
329 struct fdp_nci_info
*info
= nci_get_drvdata(ndev
);
331 if (info
->otp_patch
) {
332 release_firmware(info
->otp_patch
);
333 info
->otp_patch
= NULL
;
336 if (info
->ram_patch
) {
337 release_firmware(info
->ram_patch
);
338 info
->ram_patch
= NULL
;
342 static int fdp_nci_patch_otp(struct nci_dev
*ndev
)
344 struct fdp_nci_info
*info
= nci_get_drvdata(ndev
);
345 struct device
*dev
= &info
->phy
->i2c_dev
->dev
;
349 if (info
->otp_version
>= info
->otp_patch_version
)
352 info
->setup_patch_sent
= 0;
353 info
->setup_reset_ntf
= 0;
354 info
->setup_patch_ntf
= 0;
356 /* Patch init request */
357 r
= fdp_nci_patch_cmd(ndev
, NCI_PATCH_TYPE_OTP
);
361 /* Patch data connection creation */
362 conn_id
= fdp_nci_create_conn(ndev
);
368 /* Send the patch over the data connection */
369 r
= fdp_nci_send_patch(ndev
, conn_id
, NCI_PATCH_TYPE_OTP
);
373 /* Wait for all the packets to be send over i2c */
374 wait_event_interruptible(info
->setup_wq
,
375 info
->setup_patch_sent
== 1);
377 /* make sure that the NFCC processed the last data packet */
378 msleep(FDP_FW_UPDATE_SLEEP
);
380 /* Close the data connection */
381 r
= nci_core_conn_close(info
->ndev
, conn_id
);
385 /* Patch finish message */
386 if (fdp_nci_patch_cmd(ndev
, NCI_PATCH_TYPE_EOT
)) {
387 nfc_err(dev
, "OTP patch error 0x%x\n", r
);
392 /* If the patch notification didn't arrive yet, wait for it */
393 wait_event_interruptible(info
->setup_wq
, info
->setup_patch_ntf
);
395 /* Check if the patching was successful */
396 r
= info
->setup_patch_status
;
398 nfc_err(dev
, "OTP patch error 0x%x\n", r
);
404 * We need to wait for the reset notification before we
407 wait_event_interruptible(info
->setup_wq
, info
->setup_reset_ntf
);
413 static int fdp_nci_patch_ram(struct nci_dev
*ndev
)
415 struct fdp_nci_info
*info
= nci_get_drvdata(ndev
);
416 struct device
*dev
= &info
->phy
->i2c_dev
->dev
;
420 if (info
->ram_version
>= info
->ram_patch_version
)
423 info
->setup_patch_sent
= 0;
424 info
->setup_reset_ntf
= 0;
425 info
->setup_patch_ntf
= 0;
427 /* Patch init request */
428 r
= fdp_nci_patch_cmd(ndev
, NCI_PATCH_TYPE_RAM
);
432 /* Patch data connection creation */
433 conn_id
= fdp_nci_create_conn(ndev
);
439 /* Send the patch over the data connection */
440 r
= fdp_nci_send_patch(ndev
, conn_id
, NCI_PATCH_TYPE_RAM
);
444 /* Wait for all the packets to be send over i2c */
445 wait_event_interruptible(info
->setup_wq
,
446 info
->setup_patch_sent
== 1);
448 /* make sure that the NFCC processed the last data packet */
449 msleep(FDP_FW_UPDATE_SLEEP
);
451 /* Close the data connection */
452 r
= nci_core_conn_close(info
->ndev
, conn_id
);
456 /* Patch finish message */
457 if (fdp_nci_patch_cmd(ndev
, NCI_PATCH_TYPE_EOT
)) {
458 nfc_err(dev
, "RAM patch error 0x%x\n", r
);
463 /* If the patch notification didn't arrive yet, wait for it */
464 wait_event_interruptible(info
->setup_wq
, info
->setup_patch_ntf
);
466 /* Check if the patching was successful */
467 r
= info
->setup_patch_status
;
469 nfc_err(dev
, "RAM patch error 0x%x\n", r
);
475 * We need to wait for the reset notification before we
478 wait_event_interruptible(info
->setup_wq
, info
->setup_reset_ntf
);
484 static int fdp_nci_setup(struct nci_dev
*ndev
)
486 /* Format: total length followed by an NCI packet */
487 struct fdp_nci_info
*info
= nci_get_drvdata(ndev
);
488 struct device
*dev
= &info
->phy
->i2c_dev
->dev
;
492 dev_dbg(dev
, "%s\n", __func__
);
494 r
= nci_core_init(ndev
);
498 /* Get RAM and OTP version */
499 r
= fdp_nci_get_versions(ndev
);
503 /* Load firmware from disk */
504 r
= fdp_nci_request_firmware(ndev
);
509 if (info
->otp_version
< info
->otp_patch_version
) {
510 r
= fdp_nci_patch_otp(ndev
);
517 if (info
->ram_version
< info
->ram_patch_version
) {
518 r
= fdp_nci_patch_ram(ndev
);
524 /* Release the firmware buffers */
525 fdp_nci_release_firmware(ndev
);
527 /* If a patch was applied the new version is checked */
529 r
= nci_core_init(ndev
);
533 r
= fdp_nci_get_versions(ndev
);
537 if (info
->otp_version
!= info
->otp_patch_version
||
538 info
->ram_version
!= info
->ram_patch_version
) {
539 nfc_err(dev
, "Firmware update failed");
546 * We initialized the devices but the NFC subsystem expects
547 * it to not be initialized.
549 return nci_core_reset(ndev
);
552 fdp_nci_release_firmware(ndev
);
553 nfc_err(dev
, "Setup error %d\n", r
);
557 static int fdp_nci_post_setup(struct nci_dev
*ndev
)
559 struct fdp_nci_info
*info
= nci_get_drvdata(ndev
);
560 struct device
*dev
= &info
->phy
->i2c_dev
->dev
;
563 /* Check if the device has VSC */
564 if (info
->fw_vsc_cfg
&& info
->fw_vsc_cfg
[0]) {
566 /* Set the vendor specific configuration */
567 r
= fdp_nci_set_production_data(ndev
, info
->fw_vsc_cfg
[3],
568 &info
->fw_vsc_cfg
[4]);
570 nfc_err(dev
, "Vendor specific config set error %d\n",
576 /* Set clock type and frequency */
577 r
= fdp_nci_set_clock(ndev
, info
->clock_type
, info
->clock_freq
);
579 nfc_err(dev
, "Clock set error %d\n", r
);
584 * In order to apply the VSC FDP needs a reset
586 r
= nci_core_reset(ndev
);
591 * The nci core was initialized when post setup was called
592 * so we leave it like that
594 return nci_core_init(ndev
);
597 static int fdp_nci_core_reset_ntf_packet(struct nci_dev
*ndev
,
600 struct fdp_nci_info
*info
= nci_get_drvdata(ndev
);
601 struct device
*dev
= &info
->phy
->i2c_dev
->dev
;
603 dev_dbg(dev
, "%s\n", __func__
);
604 info
->setup_reset_ntf
= 1;
605 wake_up(&info
->setup_wq
);
610 static int fdp_nci_prop_patch_ntf_packet(struct nci_dev
*ndev
,
613 struct fdp_nci_info
*info
= nci_get_drvdata(ndev
);
614 struct device
*dev
= &info
->phy
->i2c_dev
->dev
;
616 dev_dbg(dev
, "%s\n", __func__
);
617 info
->setup_patch_ntf
= 1;
618 info
->setup_patch_status
= skb
->data
[0];
619 wake_up(&info
->setup_wq
);
624 static int fdp_nci_prop_patch_rsp_packet(struct nci_dev
*ndev
,
627 struct fdp_nci_info
*info
= nci_get_drvdata(ndev
);
628 struct device
*dev
= &info
->phy
->i2c_dev
->dev
;
629 u8 status
= skb
->data
[0];
631 dev_dbg(dev
, "%s: status 0x%x\n", __func__
, status
);
632 nci_req_complete(ndev
, status
);
637 static int fdp_nci_prop_set_production_data_rsp_packet(struct nci_dev
*ndev
,
640 struct fdp_nci_info
*info
= nci_get_drvdata(ndev
);
641 struct device
*dev
= &info
->phy
->i2c_dev
->dev
;
642 u8 status
= skb
->data
[0];
644 dev_dbg(dev
, "%s: status 0x%x\n", __func__
, status
);
645 nci_req_complete(ndev
, status
);
650 static int fdp_nci_core_get_config_rsp_packet(struct nci_dev
*ndev
,
653 struct fdp_nci_info
*info
= nci_get_drvdata(ndev
);
654 struct device
*dev
= &info
->phy
->i2c_dev
->dev
;
655 struct nci_core_get_config_rsp
*rsp
= (void *) skb
->data
;
658 if (rsp
->status
== NCI_STATUS_OK
) {
661 for (i
= 0; i
< 4; i
++) {
664 case NCI_PARAM_ID_FW_RAM_VERSION
:
666 info
->ram_version
= le32_to_cpup((__le32
*) p
);
669 case NCI_PARAM_ID_FW_OTP_VERSION
:
671 info
->otp_version
= le32_to_cpup((__le32
*) p
);
674 case NCI_PARAM_ID_OTP_LIMITED_VERSION
:
676 info
->otp_version
= le32_to_cpup((__le32
*) p
);
679 case NCI_PARAM_ID_KEY_INDEX_ID
:
681 info
->key_index
= *p
++;
686 dev_dbg(dev
, "OTP version %d\n", info
->otp_version
);
687 dev_dbg(dev
, "RAM version %d\n", info
->ram_version
);
688 dev_dbg(dev
, "key index %d\n", info
->key_index
);
689 dev_dbg(dev
, "%s: status 0x%x\n", __func__
, rsp
->status
);
691 nci_req_complete(ndev
, rsp
->status
);
696 static struct nci_driver_ops fdp_core_ops
[] = {
698 .opcode
= NCI_OP_CORE_GET_CONFIG_RSP
,
699 .rsp
= fdp_nci_core_get_config_rsp_packet
,
702 .opcode
= NCI_OP_CORE_RESET_NTF
,
703 .ntf
= fdp_nci_core_reset_ntf_packet
,
707 static struct nci_driver_ops fdp_prop_ops
[] = {
709 .opcode
= nci_opcode_pack(NCI_GID_PROP
, NCI_OP_PROP_PATCH_OID
),
710 .rsp
= fdp_nci_prop_patch_rsp_packet
,
711 .ntf
= fdp_nci_prop_patch_ntf_packet
,
714 .opcode
= nci_opcode_pack(NCI_GID_PROP
,
715 NCI_OP_PROP_SET_PDATA_OID
),
716 .rsp
= fdp_nci_prop_set_production_data_rsp_packet
,
720 static struct nci_ops nci_ops
= {
721 .open
= fdp_nci_open
,
722 .close
= fdp_nci_close
,
723 .send
= fdp_nci_send
,
724 .setup
= fdp_nci_setup
,
725 .post_setup
= fdp_nci_post_setup
,
726 .prop_ops
= fdp_prop_ops
,
727 .n_prop_ops
= ARRAY_SIZE(fdp_prop_ops
),
728 .core_ops
= fdp_core_ops
,
729 .n_core_ops
= ARRAY_SIZE(fdp_core_ops
),
732 int fdp_nci_probe(struct fdp_i2c_phy
*phy
, struct nfc_phy_ops
*phy_ops
,
733 struct nci_dev
**ndevp
, int tx_headroom
,
734 int tx_tailroom
, u8 clock_type
, u32 clock_freq
,
737 struct device
*dev
= &phy
->i2c_dev
->dev
;
738 struct fdp_nci_info
*info
;
739 struct nci_dev
*ndev
;
743 info
= devm_kzalloc(dev
, sizeof(struct fdp_nci_info
), GFP_KERNEL
);
748 info
->phy_ops
= phy_ops
;
749 info
->clock_type
= clock_type
;
750 info
->clock_freq
= clock_freq
;
751 info
->fw_vsc_cfg
= fw_vsc_cfg
;
753 init_waitqueue_head(&info
->setup_wq
);
755 protocols
= NFC_PROTO_JEWEL_MASK
|
756 NFC_PROTO_MIFARE_MASK
|
757 NFC_PROTO_FELICA_MASK
|
758 NFC_PROTO_ISO14443_MASK
|
759 NFC_PROTO_ISO14443_B_MASK
|
760 NFC_PROTO_NFC_DEP_MASK
|
761 NFC_PROTO_ISO15693_MASK
;
763 ndev
= nci_allocate_device(&nci_ops
, protocols
, tx_headroom
,
766 nfc_err(dev
, "Cannot allocate nfc ndev\n");
770 r
= nci_register_device(ndev
);
777 nci_set_drvdata(ndev
, info
);
782 nci_free_device(ndev
);
785 EXPORT_SYMBOL(fdp_nci_probe
);
787 void fdp_nci_remove(struct nci_dev
*ndev
)
789 struct fdp_nci_info
*info
= nci_get_drvdata(ndev
);
790 struct device
*dev
= &info
->phy
->i2c_dev
->dev
;
792 dev_dbg(dev
, "%s\n", __func__
);
794 nci_unregister_device(ndev
);
795 nci_free_device(ndev
);
797 EXPORT_SYMBOL(fdp_nci_remove
);
799 MODULE_LICENSE("GPL");
800 MODULE_DESCRIPTION("NFC NCI driver for Intel Fields Peak NFC controller");
801 MODULE_AUTHOR("Robert Dolca <robert.dolca@intel.com>");