usb: typec: ucsi: ccg: fix memory leak in do_flash
[linux-2.6-microblaze.git] / drivers / usb / typec / ucsi / ucsi_ccg.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * UCSI driver for Cypress CCGx Type-C controller
4  *
5  * Copyright (C) 2017-2018 NVIDIA Corporation. All rights reserved.
6  * Author: Ajay Gupta <ajayg@nvidia.com>
7  *
8  * Some code borrowed from drivers/usb/typec/ucsi/ucsi_acpi.c
9  */
10 #include <linux/acpi.h>
11 #include <linux/delay.h>
12 #include <linux/firmware.h>
13 #include <linux/i2c.h>
14 #include <linux/module.h>
15 #include <linux/pci.h>
16 #include <linux/platform_device.h>
17
18 #include <asm/unaligned.h>
19 #include "ucsi.h"
20
21 enum enum_fw_mode {
22         BOOT,   /* bootloader */
23         FW1,    /* FW partition-1 (contains secondary fw) */
24         FW2,    /* FW partition-2 (contains primary fw) */
25         FW_INVALID,
26 };
27
28 #define CCGX_RAB_DEVICE_MODE                    0x0000
29 #define CCGX_RAB_INTR_REG                       0x0006
30 #define  DEV_INT                                BIT(0)
31 #define  PORT0_INT                              BIT(1)
32 #define  PORT1_INT                              BIT(2)
33 #define  UCSI_READ_INT                          BIT(7)
34 #define CCGX_RAB_JUMP_TO_BOOT                   0x0007
35 #define  TO_BOOT                                'J'
36 #define  TO_ALT_FW                              'A'
37 #define CCGX_RAB_RESET_REQ                      0x0008
38 #define  RESET_SIG                              'R'
39 #define  CMD_RESET_I2C                          0x0
40 #define  CMD_RESET_DEV                          0x1
41 #define CCGX_RAB_ENTER_FLASHING                 0x000A
42 #define  FLASH_ENTER_SIG                        'P'
43 #define CCGX_RAB_VALIDATE_FW                    0x000B
44 #define CCGX_RAB_FLASH_ROW_RW                   0x000C
45 #define  FLASH_SIG                              'F'
46 #define  FLASH_RD_CMD                           0x0
47 #define  FLASH_WR_CMD                           0x1
48 #define  FLASH_FWCT1_WR_CMD                     0x2
49 #define  FLASH_FWCT2_WR_CMD                     0x3
50 #define  FLASH_FWCT_SIG_WR_CMD                  0x4
51 #define CCGX_RAB_READ_ALL_VER                   0x0010
52 #define CCGX_RAB_READ_FW2_VER                   0x0020
53 #define CCGX_RAB_UCSI_CONTROL                   0x0039
54 #define CCGX_RAB_UCSI_CONTROL_START             BIT(0)
55 #define CCGX_RAB_UCSI_CONTROL_STOP              BIT(1)
56 #define CCGX_RAB_UCSI_DATA_BLOCK(offset)        (0xf000 | ((offset) & 0xff))
57 #define REG_FLASH_RW_MEM        0x0200
58 #define DEV_REG_IDX                             CCGX_RAB_DEVICE_MODE
59 #define CCGX_RAB_PDPORT_ENABLE                  0x002C
60 #define  PDPORT_1               BIT(0)
61 #define  PDPORT_2               BIT(1)
62 #define CCGX_RAB_RESPONSE                       0x007E
63 #define  ASYNC_EVENT                            BIT(7)
64
65 /* CCGx events & async msg codes */
66 #define RESET_COMPLETE          0x80
67 #define EVENT_INDEX             RESET_COMPLETE
68 #define PORT_CONNECT_DET        0x84
69 #define PORT_DISCONNECT_DET     0x85
70 #define ROLE_SWAP_COMPELETE     0x87
71
72 /* ccg firmware */
73 #define CYACD_LINE_SIZE         527
74 #define CCG4_ROW_SIZE           256
75 #define FW1_METADATA_ROW        0x1FF
76 #define FW2_METADATA_ROW        0x1FE
77 #define FW_CFG_TABLE_SIG_SIZE   256
78
79 static int secondary_fw_min_ver = 41;
80
81 enum enum_flash_mode {
82         SECONDARY_BL,   /* update secondary using bootloader */
83         PRIMARY,        /* update primary using secondary */
84         SECONDARY,      /* update secondary using primary */
85         FLASH_NOT_NEEDED,       /* update not required */
86         FLASH_INVALID,
87 };
88
89 static const char * const ccg_fw_names[] = {
90         "ccg_boot.cyacd",
91         "ccg_primary.cyacd",
92         "ccg_secondary.cyacd"
93 };
94
95 struct ccg_dev_info {
96 #define CCG_DEVINFO_FWMODE_SHIFT (0)
97 #define CCG_DEVINFO_FWMODE_MASK (0x3 << CCG_DEVINFO_FWMODE_SHIFT)
98 #define CCG_DEVINFO_PDPORTS_SHIFT (2)
99 #define CCG_DEVINFO_PDPORTS_MASK (0x3 << CCG_DEVINFO_PDPORTS_SHIFT)
100         u8 mode;
101         u8 bl_mode;
102         __le16 silicon_id;
103         __le16 bl_last_row;
104 } __packed;
105
106 struct version_format {
107         __le16 build;
108         u8 patch;
109         u8 ver;
110 #define CCG_VERSION_MIN_SHIFT (0)
111 #define CCG_VERSION_MIN_MASK (0xf << CCG_VERSION_MIN_SHIFT)
112 #define CCG_VERSION_MAJ_SHIFT (4)
113 #define CCG_VERSION_MAJ_MASK (0xf << CCG_VERSION_MAJ_SHIFT)
114 } __packed;
115
116 struct version_info {
117         struct version_format base;
118         struct version_format app;
119 };
120
121 struct fw_config_table {
122         u32 identity;
123         u16 table_size;
124         u8 fwct_version;
125         u8 is_key_change;
126         u8 guid[16];
127         struct version_format base;
128         struct version_format app;
129         u8 primary_fw_digest[32];
130         u32 key_exp_length;
131         u8 key_modulus[256];
132         u8 key_exp[4];
133 };
134
135 /* CCGx response codes */
136 enum ccg_resp_code {
137         CMD_NO_RESP             = 0x00,
138         CMD_SUCCESS             = 0x02,
139         FLASH_DATA_AVAILABLE    = 0x03,
140         CMD_INVALID             = 0x05,
141         FLASH_UPDATE_FAIL       = 0x07,
142         INVALID_FW              = 0x08,
143         INVALID_ARG             = 0x09,
144         CMD_NOT_SUPPORT         = 0x0A,
145         TRANSACTION_FAIL        = 0x0C,
146         PD_CMD_FAIL             = 0x0D,
147         UNDEF_ERROR             = 0x0F,
148         INVALID_RESP            = 0x10,
149 };
150
151 #define CCG_EVENT_MAX   (EVENT_INDEX + 43)
152
153 struct ccg_cmd {
154         u16 reg;
155         u32 data;
156         int len;
157         u32 delay; /* ms delay for cmd timeout  */
158 };
159
160 struct ccg_resp {
161         u8 code;
162         u8 length;
163 };
164
165 struct ucsi_ccg {
166         struct device *dev;
167         struct ucsi *ucsi;
168         struct ucsi_ppm ppm;
169         struct i2c_client *client;
170         struct ccg_dev_info info;
171         /* version info for boot, primary and secondary */
172         struct version_info version[FW2 + 1];
173         /* CCG HPI communication flags */
174         unsigned long flags;
175 #define RESET_PENDING   0
176 #define DEV_CMD_PENDING 1
177         struct ccg_resp dev_resp;
178         u8 cmd_resp;
179         int port_num;
180         int irq;
181         struct work_struct work;
182         struct mutex lock; /* to sync between user and driver thread */
183
184         /* fw build with vendor information */
185         u16 fw_build;
186 };
187
188 static int ccg_read(struct ucsi_ccg *uc, u16 rab, u8 *data, u32 len)
189 {
190         struct i2c_client *client = uc->client;
191         const struct i2c_adapter_quirks *quirks = client->adapter->quirks;
192         unsigned char buf[2];
193         struct i2c_msg msgs[] = {
194                 {
195                         .addr   = client->addr,
196                         .flags  = 0x0,
197                         .len    = sizeof(buf),
198                         .buf    = buf,
199                 },
200                 {
201                         .addr   = client->addr,
202                         .flags  = I2C_M_RD,
203                         .buf    = data,
204                 },
205         };
206         u32 rlen, rem_len = len, max_read_len = len;
207         int status;
208
209         /* check any max_read_len limitation on i2c adapter */
210         if (quirks && quirks->max_read_len)
211                 max_read_len = quirks->max_read_len;
212
213         while (rem_len > 0) {
214                 msgs[1].buf = &data[len - rem_len];
215                 rlen = min_t(u16, rem_len, max_read_len);
216                 msgs[1].len = rlen;
217                 put_unaligned_le16(rab, buf);
218                 status = i2c_transfer(client->adapter, msgs, ARRAY_SIZE(msgs));
219                 if (status < 0) {
220                         dev_err(uc->dev, "i2c_transfer failed %d\n", status);
221                         return status;
222                 }
223                 rab += rlen;
224                 rem_len -= rlen;
225         }
226
227         return 0;
228 }
229
230 static int ccg_write(struct ucsi_ccg *uc, u16 rab, u8 *data, u32 len)
231 {
232         struct i2c_client *client = uc->client;
233         unsigned char *buf;
234         struct i2c_msg msgs[] = {
235                 {
236                         .addr   = client->addr,
237                         .flags  = 0x0,
238                 }
239         };
240         int status;
241
242         buf = kzalloc(len + sizeof(rab), GFP_KERNEL);
243         if (!buf)
244                 return -ENOMEM;
245
246         put_unaligned_le16(rab, buf);
247         memcpy(buf + sizeof(rab), data, len);
248
249         msgs[0].len = len + sizeof(rab);
250         msgs[0].buf = buf;
251
252         status = i2c_transfer(client->adapter, msgs, ARRAY_SIZE(msgs));
253         if (status < 0) {
254                 dev_err(uc->dev, "i2c_transfer failed %d\n", status);
255                 kfree(buf);
256                 return status;
257         }
258
259         kfree(buf);
260         return 0;
261 }
262
263 static int ucsi_ccg_init(struct ucsi_ccg *uc)
264 {
265         unsigned int count = 10;
266         u8 data;
267         int status;
268
269         data = CCGX_RAB_UCSI_CONTROL_STOP;
270         status = ccg_write(uc, CCGX_RAB_UCSI_CONTROL, &data, sizeof(data));
271         if (status < 0)
272                 return status;
273
274         data = CCGX_RAB_UCSI_CONTROL_START;
275         status = ccg_write(uc, CCGX_RAB_UCSI_CONTROL, &data, sizeof(data));
276         if (status < 0)
277                 return status;
278
279         /*
280          * Flush CCGx RESPONSE queue by acking interrupts. Above ucsi control
281          * register write will push response which must be cleared.
282          */
283         do {
284                 status = ccg_read(uc, CCGX_RAB_INTR_REG, &data, sizeof(data));
285                 if (status < 0)
286                         return status;
287
288                 if (!data)
289                         return 0;
290
291                 status = ccg_write(uc, CCGX_RAB_INTR_REG, &data, sizeof(data));
292                 if (status < 0)
293                         return status;
294
295                 usleep_range(10000, 11000);
296         } while (--count);
297
298         return -ETIMEDOUT;
299 }
300
301 static int ucsi_ccg_send_data(struct ucsi_ccg *uc)
302 {
303         u8 *ppm = (u8 *)uc->ppm.data;
304         int status;
305         u16 rab;
306
307         rab = CCGX_RAB_UCSI_DATA_BLOCK(offsetof(struct ucsi_data, message_out));
308         status = ccg_write(uc, rab, ppm +
309                            offsetof(struct ucsi_data, message_out),
310                            sizeof(uc->ppm.data->message_out));
311         if (status < 0)
312                 return status;
313
314         rab = CCGX_RAB_UCSI_DATA_BLOCK(offsetof(struct ucsi_data, ctrl));
315         return ccg_write(uc, rab, ppm + offsetof(struct ucsi_data, ctrl),
316                          sizeof(uc->ppm.data->ctrl));
317 }
318
319 static int ucsi_ccg_recv_data(struct ucsi_ccg *uc)
320 {
321         u8 *ppm = (u8 *)uc->ppm.data;
322         int status;
323         u16 rab;
324
325         rab = CCGX_RAB_UCSI_DATA_BLOCK(offsetof(struct ucsi_data, cci));
326         status = ccg_read(uc, rab, ppm + offsetof(struct ucsi_data, cci),
327                           sizeof(uc->ppm.data->cci));
328         if (status < 0)
329                 return status;
330
331         rab = CCGX_RAB_UCSI_DATA_BLOCK(offsetof(struct ucsi_data, message_in));
332         return ccg_read(uc, rab, ppm + offsetof(struct ucsi_data, message_in),
333                         sizeof(uc->ppm.data->message_in));
334 }
335
336 static int ucsi_ccg_ack_interrupt(struct ucsi_ccg *uc)
337 {
338         int status;
339         unsigned char data;
340
341         status = ccg_read(uc, CCGX_RAB_INTR_REG, &data, sizeof(data));
342         if (status < 0)
343                 return status;
344
345         return ccg_write(uc, CCGX_RAB_INTR_REG, &data, sizeof(data));
346 }
347
348 static int ucsi_ccg_sync(struct ucsi_ppm *ppm)
349 {
350         struct ucsi_ccg *uc = container_of(ppm, struct ucsi_ccg, ppm);
351         int status;
352
353         status = ucsi_ccg_recv_data(uc);
354         if (status < 0)
355                 return status;
356
357         /* ack interrupt to allow next command to run */
358         return ucsi_ccg_ack_interrupt(uc);
359 }
360
361 static int ucsi_ccg_cmd(struct ucsi_ppm *ppm, struct ucsi_control *ctrl)
362 {
363         struct ucsi_ccg *uc = container_of(ppm, struct ucsi_ccg, ppm);
364
365         ppm->data->ctrl.raw_cmd = ctrl->raw_cmd;
366         return ucsi_ccg_send_data(uc);
367 }
368
369 static irqreturn_t ccg_irq_handler(int irq, void *data)
370 {
371         struct ucsi_ccg *uc = data;
372
373         ucsi_notify(uc->ucsi);
374
375         return IRQ_HANDLED;
376 }
377
378 static int get_fw_info(struct ucsi_ccg *uc)
379 {
380         int err;
381
382         err = ccg_read(uc, CCGX_RAB_READ_ALL_VER, (u8 *)(&uc->version),
383                        sizeof(uc->version));
384         if (err < 0)
385                 return err;
386
387         err = ccg_read(uc, CCGX_RAB_DEVICE_MODE, (u8 *)(&uc->info),
388                        sizeof(uc->info));
389         if (err < 0)
390                 return err;
391
392         return 0;
393 }
394
395 static inline bool invalid_async_evt(int code)
396 {
397         return (code >= CCG_EVENT_MAX) || (code < EVENT_INDEX);
398 }
399
400 static void ccg_process_response(struct ucsi_ccg *uc)
401 {
402         struct device *dev = uc->dev;
403
404         if (uc->dev_resp.code & ASYNC_EVENT) {
405                 if (uc->dev_resp.code == RESET_COMPLETE) {
406                         if (test_bit(RESET_PENDING, &uc->flags))
407                                 uc->cmd_resp = uc->dev_resp.code;
408                         get_fw_info(uc);
409                 }
410                 if (invalid_async_evt(uc->dev_resp.code))
411                         dev_err(dev, "invalid async evt %d\n",
412                                 uc->dev_resp.code);
413         } else {
414                 if (test_bit(DEV_CMD_PENDING, &uc->flags)) {
415                         uc->cmd_resp = uc->dev_resp.code;
416                         clear_bit(DEV_CMD_PENDING, &uc->flags);
417                 } else {
418                         dev_err(dev, "dev resp 0x%04x but no cmd pending\n",
419                                 uc->dev_resp.code);
420                 }
421         }
422 }
423
424 static int ccg_read_response(struct ucsi_ccg *uc)
425 {
426         unsigned long target = jiffies + msecs_to_jiffies(1000);
427         struct device *dev = uc->dev;
428         u8 intval;
429         int status;
430
431         /* wait for interrupt status to get updated */
432         do {
433                 status = ccg_read(uc, CCGX_RAB_INTR_REG, &intval,
434                                   sizeof(intval));
435                 if (status < 0)
436                         return status;
437
438                 if (intval & DEV_INT)
439                         break;
440                 usleep_range(500, 600);
441         } while (time_is_after_jiffies(target));
442
443         if (time_is_before_jiffies(target)) {
444                 dev_err(dev, "response timeout error\n");
445                 return -ETIME;
446         }
447
448         status = ccg_read(uc, CCGX_RAB_RESPONSE, (u8 *)&uc->dev_resp,
449                           sizeof(uc->dev_resp));
450         if (status < 0)
451                 return status;
452
453         status = ccg_write(uc, CCGX_RAB_INTR_REG, &intval, sizeof(intval));
454         if (status < 0)
455                 return status;
456
457         return 0;
458 }
459
460 /* Caller must hold uc->lock */
461 static int ccg_send_command(struct ucsi_ccg *uc, struct ccg_cmd *cmd)
462 {
463         struct device *dev = uc->dev;
464         int ret;
465
466         switch (cmd->reg & 0xF000) {
467         case DEV_REG_IDX:
468                 set_bit(DEV_CMD_PENDING, &uc->flags);
469                 break;
470         default:
471                 dev_err(dev, "invalid cmd register\n");
472                 break;
473         }
474
475         ret = ccg_write(uc, cmd->reg, (u8 *)&cmd->data, cmd->len);
476         if (ret < 0)
477                 return ret;
478
479         msleep(cmd->delay);
480
481         ret = ccg_read_response(uc);
482         if (ret < 0) {
483                 dev_err(dev, "response read error\n");
484                 switch (cmd->reg & 0xF000) {
485                 case DEV_REG_IDX:
486                         clear_bit(DEV_CMD_PENDING, &uc->flags);
487                         break;
488                 default:
489                         dev_err(dev, "invalid cmd register\n");
490                         break;
491                 }
492                 return -EIO;
493         }
494         ccg_process_response(uc);
495
496         return uc->cmd_resp;
497 }
498
499 static int ccg_cmd_enter_flashing(struct ucsi_ccg *uc)
500 {
501         struct ccg_cmd cmd;
502         int ret;
503
504         cmd.reg = CCGX_RAB_ENTER_FLASHING;
505         cmd.data = FLASH_ENTER_SIG;
506         cmd.len = 1;
507         cmd.delay = 50;
508
509         mutex_lock(&uc->lock);
510
511         ret = ccg_send_command(uc, &cmd);
512
513         mutex_unlock(&uc->lock);
514
515         if (ret != CMD_SUCCESS) {
516                 dev_err(uc->dev, "enter flashing failed ret=%d\n", ret);
517                 return ret;
518         }
519
520         return 0;
521 }
522
523 static int ccg_cmd_reset(struct ucsi_ccg *uc)
524 {
525         struct ccg_cmd cmd;
526         u8 *p;
527         int ret;
528
529         p = (u8 *)&cmd.data;
530         cmd.reg = CCGX_RAB_RESET_REQ;
531         p[0] = RESET_SIG;
532         p[1] = CMD_RESET_DEV;
533         cmd.len = 2;
534         cmd.delay = 5000;
535
536         mutex_lock(&uc->lock);
537
538         set_bit(RESET_PENDING, &uc->flags);
539
540         ret = ccg_send_command(uc, &cmd);
541         if (ret != RESET_COMPLETE)
542                 goto err_clear_flag;
543
544         ret = 0;
545
546 err_clear_flag:
547         clear_bit(RESET_PENDING, &uc->flags);
548
549         mutex_unlock(&uc->lock);
550
551         return ret;
552 }
553
554 static int ccg_cmd_port_control(struct ucsi_ccg *uc, bool enable)
555 {
556         struct ccg_cmd cmd;
557         int ret;
558
559         cmd.reg = CCGX_RAB_PDPORT_ENABLE;
560         if (enable)
561                 cmd.data = (uc->port_num == 1) ?
562                             PDPORT_1 : (PDPORT_1 | PDPORT_2);
563         else
564                 cmd.data = 0x0;
565         cmd.len = 1;
566         cmd.delay = 10;
567
568         mutex_lock(&uc->lock);
569
570         ret = ccg_send_command(uc, &cmd);
571
572         mutex_unlock(&uc->lock);
573
574         if (ret != CMD_SUCCESS) {
575                 dev_err(uc->dev, "port control failed ret=%d\n", ret);
576                 return ret;
577         }
578         return 0;
579 }
580
581 static int ccg_cmd_jump_boot_mode(struct ucsi_ccg *uc, int bl_mode)
582 {
583         struct ccg_cmd cmd;
584         int ret;
585
586         cmd.reg = CCGX_RAB_JUMP_TO_BOOT;
587
588         if (bl_mode)
589                 cmd.data = TO_BOOT;
590         else
591                 cmd.data = TO_ALT_FW;
592
593         cmd.len = 1;
594         cmd.delay = 100;
595
596         mutex_lock(&uc->lock);
597
598         set_bit(RESET_PENDING, &uc->flags);
599
600         ret = ccg_send_command(uc, &cmd);
601         if (ret != RESET_COMPLETE)
602                 goto err_clear_flag;
603
604         ret = 0;
605
606 err_clear_flag:
607         clear_bit(RESET_PENDING, &uc->flags);
608
609         mutex_unlock(&uc->lock);
610
611         return ret;
612 }
613
614 static int
615 ccg_cmd_write_flash_row(struct ucsi_ccg *uc, u16 row,
616                         const void *data, u8 fcmd)
617 {
618         struct i2c_client *client = uc->client;
619         struct ccg_cmd cmd;
620         u8 buf[CCG4_ROW_SIZE + 2];
621         u8 *p;
622         int ret;
623
624         /* Copy the data into the flash read/write memory. */
625         put_unaligned_le16(REG_FLASH_RW_MEM, buf);
626
627         memcpy(buf + 2, data, CCG4_ROW_SIZE);
628
629         mutex_lock(&uc->lock);
630
631         ret = i2c_master_send(client, buf, CCG4_ROW_SIZE + 2);
632         if (ret != CCG4_ROW_SIZE + 2) {
633                 dev_err(uc->dev, "REG_FLASH_RW_MEM write fail %d\n", ret);
634                 mutex_unlock(&uc->lock);
635                 return ret < 0 ? ret : -EIO;
636         }
637
638         /* Use the FLASH_ROW_READ_WRITE register to trigger */
639         /* writing of data to the desired flash row */
640         p = (u8 *)&cmd.data;
641         cmd.reg = CCGX_RAB_FLASH_ROW_RW;
642         p[0] = FLASH_SIG;
643         p[1] = fcmd;
644         put_unaligned_le16(row, &p[2]);
645         cmd.len = 4;
646         cmd.delay = 50;
647         if (fcmd == FLASH_FWCT_SIG_WR_CMD)
648                 cmd.delay += 400;
649         if (row == 510)
650                 cmd.delay += 220;
651         ret = ccg_send_command(uc, &cmd);
652
653         mutex_unlock(&uc->lock);
654
655         if (ret != CMD_SUCCESS) {
656                 dev_err(uc->dev, "write flash row failed ret=%d\n", ret);
657                 return ret;
658         }
659
660         return 0;
661 }
662
663 static int ccg_cmd_validate_fw(struct ucsi_ccg *uc, unsigned int fwid)
664 {
665         struct ccg_cmd cmd;
666         int ret;
667
668         cmd.reg = CCGX_RAB_VALIDATE_FW;
669         cmd.data = fwid;
670         cmd.len = 1;
671         cmd.delay = 500;
672
673         mutex_lock(&uc->lock);
674
675         ret = ccg_send_command(uc, &cmd);
676
677         mutex_unlock(&uc->lock);
678
679         if (ret != CMD_SUCCESS)
680                 return ret;
681
682         return 0;
683 }
684
685 static bool ccg_check_vendor_version(struct ucsi_ccg *uc,
686                                      struct version_format *app,
687                                      struct fw_config_table *fw_cfg)
688 {
689         struct device *dev = uc->dev;
690
691         /* Check if the fw build is for supported vendors */
692         if (le16_to_cpu(app->build) != uc->fw_build) {
693                 dev_info(dev, "current fw is not from supported vendor\n");
694                 return false;
695         }
696
697         /* Check if the new fw build is for supported vendors */
698         if (le16_to_cpu(fw_cfg->app.build) != uc->fw_build) {
699                 dev_info(dev, "new fw is not from supported vendor\n");
700                 return false;
701         }
702         return true;
703 }
704
705 static bool ccg_check_fw_version(struct ucsi_ccg *uc, const char *fw_name,
706                                  struct version_format *app)
707 {
708         const struct firmware *fw = NULL;
709         struct device *dev = uc->dev;
710         struct fw_config_table fw_cfg;
711         u32 cur_version, new_version;
712         bool is_later = false;
713
714         if (request_firmware(&fw, fw_name, dev) != 0) {
715                 dev_err(dev, "error: Failed to open cyacd file %s\n", fw_name);
716                 return false;
717         }
718
719         /*
720          * check if signed fw
721          * last part of fw image is fw cfg table and signature
722          */
723         if (fw->size < sizeof(fw_cfg) + FW_CFG_TABLE_SIG_SIZE)
724                 goto out_release_firmware;
725
726         memcpy((uint8_t *)&fw_cfg, fw->data + fw->size -
727                sizeof(fw_cfg) - FW_CFG_TABLE_SIG_SIZE, sizeof(fw_cfg));
728
729         if (fw_cfg.identity != ('F' | 'W' << 8 | 'C' << 16 | 'T' << 24)) {
730                 dev_info(dev, "not a signed image\n");
731                 goto out_release_firmware;
732         }
733
734         /* compare input version with FWCT version */
735         cur_version = le16_to_cpu(app->build) | app->patch << 16 |
736                         app->ver << 24;
737
738         new_version = le16_to_cpu(fw_cfg.app.build) | fw_cfg.app.patch << 16 |
739                         fw_cfg.app.ver << 24;
740
741         if (!ccg_check_vendor_version(uc, app, &fw_cfg))
742                 goto out_release_firmware;
743
744         if (new_version > cur_version)
745                 is_later = true;
746
747 out_release_firmware:
748         release_firmware(fw);
749         return is_later;
750 }
751
752 static int ccg_fw_update_needed(struct ucsi_ccg *uc,
753                                 enum enum_flash_mode *mode)
754 {
755         struct device *dev = uc->dev;
756         int err;
757         struct version_info version[3];
758
759         err = ccg_read(uc, CCGX_RAB_DEVICE_MODE, (u8 *)(&uc->info),
760                        sizeof(uc->info));
761         if (err) {
762                 dev_err(dev, "read device mode failed\n");
763                 return err;
764         }
765
766         err = ccg_read(uc, CCGX_RAB_READ_ALL_VER, (u8 *)version,
767                        sizeof(version));
768         if (err) {
769                 dev_err(dev, "read device mode failed\n");
770                 return err;
771         }
772
773         if (memcmp(&version[FW1], "\0\0\0\0\0\0\0\0",
774                    sizeof(struct version_info)) == 0) {
775                 dev_info(dev, "secondary fw is not flashed\n");
776                 *mode = SECONDARY_BL;
777         } else if (le16_to_cpu(version[FW1].base.build) <
778                 secondary_fw_min_ver) {
779                 dev_info(dev, "secondary fw version is too low (< %d)\n",
780                          secondary_fw_min_ver);
781                 *mode = SECONDARY;
782         } else if (memcmp(&version[FW2], "\0\0\0\0\0\0\0\0",
783                    sizeof(struct version_info)) == 0) {
784                 dev_info(dev, "primary fw is not flashed\n");
785                 *mode = PRIMARY;
786         } else if (ccg_check_fw_version(uc, ccg_fw_names[PRIMARY],
787                    &version[FW2].app)) {
788                 dev_info(dev, "found primary fw with later version\n");
789                 *mode = PRIMARY;
790         } else {
791                 dev_info(dev, "secondary and primary fw are the latest\n");
792                 *mode = FLASH_NOT_NEEDED;
793         }
794         return 0;
795 }
796
797 static int do_flash(struct ucsi_ccg *uc, enum enum_flash_mode mode)
798 {
799         struct device *dev = uc->dev;
800         const struct firmware *fw = NULL;
801         const char *p, *s;
802         const char *eof;
803         int err, row, len, line_sz, line_cnt = 0;
804         unsigned long start_time = jiffies;
805         struct fw_config_table  fw_cfg;
806         u8 fw_cfg_sig[FW_CFG_TABLE_SIG_SIZE];
807         u8 *wr_buf;
808
809         err = request_firmware(&fw, ccg_fw_names[mode], dev);
810         if (err) {
811                 dev_err(dev, "request %s failed err=%d\n",
812                         ccg_fw_names[mode], err);
813                 return err;
814         }
815
816         if (((uc->info.mode & CCG_DEVINFO_FWMODE_MASK) >>
817                         CCG_DEVINFO_FWMODE_SHIFT) == FW2) {
818                 err = ccg_cmd_port_control(uc, false);
819                 if (err < 0)
820                         goto release_fw;
821                 err = ccg_cmd_jump_boot_mode(uc, 0);
822                 if (err < 0)
823                         goto release_fw;
824         }
825
826         eof = fw->data + fw->size;
827
828         /*
829          * check if signed fw
830          * last part of fw image is fw cfg table and signature
831          */
832         if (fw->size < sizeof(fw_cfg) + sizeof(fw_cfg_sig))
833                 goto not_signed_fw;
834
835         memcpy((uint8_t *)&fw_cfg, fw->data + fw->size -
836                sizeof(fw_cfg) - sizeof(fw_cfg_sig), sizeof(fw_cfg));
837
838         if (fw_cfg.identity != ('F' | ('W' << 8) | ('C' << 16) | ('T' << 24))) {
839                 dev_info(dev, "not a signed image\n");
840                 goto not_signed_fw;
841         }
842         eof = fw->data + fw->size - sizeof(fw_cfg) - sizeof(fw_cfg_sig);
843
844         memcpy((uint8_t *)&fw_cfg_sig,
845                fw->data + fw->size - sizeof(fw_cfg_sig), sizeof(fw_cfg_sig));
846
847         /* flash fw config table and signature first */
848         err = ccg_cmd_write_flash_row(uc, 0, (u8 *)&fw_cfg,
849                                       FLASH_FWCT1_WR_CMD);
850         if (err)
851                 goto release_fw;
852
853         err = ccg_cmd_write_flash_row(uc, 0, (u8 *)&fw_cfg + CCG4_ROW_SIZE,
854                                       FLASH_FWCT2_WR_CMD);
855         if (err)
856                 goto release_fw;
857
858         err = ccg_cmd_write_flash_row(uc, 0, &fw_cfg_sig,
859                                       FLASH_FWCT_SIG_WR_CMD);
860         if (err)
861                 goto release_fw;
862
863 not_signed_fw:
864         wr_buf = kzalloc(CCG4_ROW_SIZE + 4, GFP_KERNEL);
865         if (!wr_buf) {
866                 err = -ENOMEM;
867                 goto release_fw;
868         }
869
870         err = ccg_cmd_enter_flashing(uc);
871         if (err)
872                 goto release_mem;
873
874         /*****************************************************************
875          * CCG firmware image (.cyacd) file line format
876          *
877          * :00rrrrllll[dd....]cc/r/n
878          *
879          * :00   header
880          * rrrr is row number to flash                          (4 char)
881          * llll is data len to flash                            (4 char)
882          * dd   is a data field represents one byte of data     (512 char)
883          * cc   is checksum                                     (2 char)
884          * \r\n newline
885          *
886          * Total length: 3 + 4 + 4 + 512 + 2 + 2 = 527
887          *
888          *****************************************************************/
889
890         p = strnchr(fw->data, fw->size, ':');
891         while (p < eof) {
892                 s = strnchr(p + 1, eof - p - 1, ':');
893
894                 if (!s)
895                         s = eof;
896
897                 line_sz = s - p;
898
899                 if (line_sz != CYACD_LINE_SIZE) {
900                         dev_err(dev, "Bad FW format line_sz=%d\n", line_sz);
901                         err =  -EINVAL;
902                         goto release_mem;
903                 }
904
905                 if (hex2bin(wr_buf, p + 3, CCG4_ROW_SIZE + 4)) {
906                         err =  -EINVAL;
907                         goto release_mem;
908                 }
909
910                 row = get_unaligned_be16(wr_buf);
911                 len = get_unaligned_be16(&wr_buf[2]);
912
913                 if (len != CCG4_ROW_SIZE) {
914                         err =  -EINVAL;
915                         goto release_mem;
916                 }
917
918                 err = ccg_cmd_write_flash_row(uc, row, wr_buf + 4,
919                                               FLASH_WR_CMD);
920                 if (err)
921                         goto release_mem;
922
923                 line_cnt++;
924                 p = s;
925         }
926
927         dev_info(dev, "total %d row flashed. time: %dms\n",
928                  line_cnt, jiffies_to_msecs(jiffies - start_time));
929
930         err = ccg_cmd_validate_fw(uc, (mode == PRIMARY) ? FW2 :  FW1);
931         if (err)
932                 dev_err(dev, "%s validation failed err=%d\n",
933                         (mode == PRIMARY) ? "FW2" :  "FW1", err);
934         else
935                 dev_info(dev, "%s validated\n",
936                          (mode == PRIMARY) ? "FW2" :  "FW1");
937
938         err = ccg_cmd_port_control(uc, false);
939         if (err < 0)
940                 goto release_mem;
941
942         err = ccg_cmd_reset(uc);
943         if (err < 0)
944                 goto release_mem;
945
946         err = ccg_cmd_port_control(uc, true);
947         if (err < 0)
948                 goto release_mem;
949
950 release_mem:
951         kfree(wr_buf);
952
953 release_fw:
954         release_firmware(fw);
955         return err;
956 }
957
958 /*******************************************************************************
959  * CCG4 has two copies of the firmware in addition to the bootloader.
960  * If the device is running FW1, FW2 can be updated with the new version.
961  * Dual firmware mode allows the CCG device to stay in a PD contract and support
962  * USB PD and Type-C functionality while a firmware update is in progress.
963  ******************************************************************************/
964 static int ccg_fw_update(struct ucsi_ccg *uc, enum enum_flash_mode flash_mode)
965 {
966         int err;
967
968         while (flash_mode != FLASH_NOT_NEEDED) {
969                 err = do_flash(uc, flash_mode);
970                 if (err < 0)
971                         return err;
972                 err = ccg_fw_update_needed(uc, &flash_mode);
973                 if (err < 0)
974                         return err;
975         }
976         dev_info(uc->dev, "CCG FW update successful\n");
977
978         return err;
979 }
980
981 static int ccg_restart(struct ucsi_ccg *uc)
982 {
983         struct device *dev = uc->dev;
984         int status;
985
986         status = ucsi_ccg_init(uc);
987         if (status < 0) {
988                 dev_err(dev, "ucsi_ccg_start fail, err=%d\n", status);
989                 return status;
990         }
991
992         status = request_threaded_irq(uc->irq, NULL, ccg_irq_handler,
993                                       IRQF_ONESHOT | IRQF_TRIGGER_HIGH,
994                                       dev_name(dev), uc);
995         if (status < 0) {
996                 dev_err(dev, "request_threaded_irq failed - %d\n", status);
997                 return status;
998         }
999
1000         uc->ucsi = ucsi_register_ppm(dev, &uc->ppm);
1001         if (IS_ERR(uc->ucsi)) {
1002                 dev_err(uc->dev, "ucsi_register_ppm failed\n");
1003                 return PTR_ERR(uc->ucsi);
1004         }
1005
1006         return 0;
1007 }
1008
1009 static void ccg_update_firmware(struct work_struct *work)
1010 {
1011         struct ucsi_ccg *uc = container_of(work, struct ucsi_ccg, work);
1012         enum enum_flash_mode flash_mode;
1013         int status;
1014
1015         status = ccg_fw_update_needed(uc, &flash_mode);
1016         if (status < 0)
1017                 return;
1018
1019         if (flash_mode != FLASH_NOT_NEEDED) {
1020                 ucsi_unregister_ppm(uc->ucsi);
1021                 free_irq(uc->irq, uc);
1022
1023                 ccg_fw_update(uc, flash_mode);
1024                 ccg_restart(uc);
1025         }
1026 }
1027
1028 static ssize_t do_flash_store(struct device *dev,
1029                               struct device_attribute *attr,
1030                               const char *buf, size_t n)
1031 {
1032         struct ucsi_ccg *uc = i2c_get_clientdata(to_i2c_client(dev));
1033         bool flash;
1034
1035         if (kstrtobool(buf, &flash))
1036                 return -EINVAL;
1037
1038         if (!flash)
1039                 return n;
1040
1041         if (uc->fw_build == 0x0) {
1042                 dev_err(dev, "fail to flash FW due to missing FW build info\n");
1043                 return -EINVAL;
1044         }
1045
1046         schedule_work(&uc->work);
1047         return n;
1048 }
1049
1050 static DEVICE_ATTR_WO(do_flash);
1051
1052 static struct attribute *ucsi_ccg_sysfs_attrs[] = {
1053         &dev_attr_do_flash.attr,
1054         NULL,
1055 };
1056
1057 static struct attribute_group ucsi_ccg_attr_group = {
1058         .attrs = ucsi_ccg_sysfs_attrs,
1059 };
1060
1061 static int ucsi_ccg_probe(struct i2c_client *client,
1062                           const struct i2c_device_id *id)
1063 {
1064         struct device *dev = &client->dev;
1065         struct ucsi_ccg *uc;
1066         int status;
1067         u16 rab;
1068
1069         uc = devm_kzalloc(dev, sizeof(*uc), GFP_KERNEL);
1070         if (!uc)
1071                 return -ENOMEM;
1072
1073         uc->ppm.data = devm_kzalloc(dev, sizeof(struct ucsi_data), GFP_KERNEL);
1074         if (!uc->ppm.data)
1075                 return -ENOMEM;
1076
1077         uc->ppm.cmd = ucsi_ccg_cmd;
1078         uc->ppm.sync = ucsi_ccg_sync;
1079         uc->dev = dev;
1080         uc->client = client;
1081         mutex_init(&uc->lock);
1082         INIT_WORK(&uc->work, ccg_update_firmware);
1083
1084         /* Only fail FW flashing when FW build information is not provided */
1085         status = device_property_read_u16(dev, "ccgx,firmware-build",
1086                                           &uc->fw_build);
1087         if (status)
1088                 dev_err(uc->dev, "failed to get FW build information\n");
1089
1090         /* reset ccg device and initialize ucsi */
1091         status = ucsi_ccg_init(uc);
1092         if (status < 0) {
1093                 dev_err(uc->dev, "ucsi_ccg_init failed - %d\n", status);
1094                 return status;
1095         }
1096
1097         status = get_fw_info(uc);
1098         if (status < 0) {
1099                 dev_err(uc->dev, "get_fw_info failed - %d\n", status);
1100                 return status;
1101         }
1102
1103         uc->port_num = 1;
1104
1105         if (uc->info.mode & CCG_DEVINFO_PDPORTS_MASK)
1106                 uc->port_num++;
1107
1108         status = request_threaded_irq(client->irq, NULL, ccg_irq_handler,
1109                                       IRQF_ONESHOT | IRQF_TRIGGER_HIGH,
1110                                       dev_name(dev), uc);
1111         if (status < 0) {
1112                 dev_err(uc->dev, "request_threaded_irq failed - %d\n", status);
1113                 return status;
1114         }
1115
1116         uc->irq = client->irq;
1117
1118         uc->ucsi = ucsi_register_ppm(dev, &uc->ppm);
1119         if (IS_ERR(uc->ucsi)) {
1120                 dev_err(uc->dev, "ucsi_register_ppm failed\n");
1121                 return PTR_ERR(uc->ucsi);
1122         }
1123
1124         rab = CCGX_RAB_UCSI_DATA_BLOCK(offsetof(struct ucsi_data, version));
1125         status = ccg_read(uc, rab, (u8 *)(uc->ppm.data) +
1126                           offsetof(struct ucsi_data, version),
1127                           sizeof(uc->ppm.data->version));
1128         if (status < 0) {
1129                 ucsi_unregister_ppm(uc->ucsi);
1130                 return status;
1131         }
1132
1133         i2c_set_clientdata(client, uc);
1134
1135         status = sysfs_create_group(&uc->dev->kobj, &ucsi_ccg_attr_group);
1136         if (status)
1137                 dev_err(uc->dev, "cannot create sysfs group: %d\n", status);
1138
1139         return 0;
1140 }
1141
1142 static int ucsi_ccg_remove(struct i2c_client *client)
1143 {
1144         struct ucsi_ccg *uc = i2c_get_clientdata(client);
1145
1146         cancel_work_sync(&uc->work);
1147         ucsi_unregister_ppm(uc->ucsi);
1148         free_irq(uc->irq, uc);
1149         sysfs_remove_group(&uc->dev->kobj, &ucsi_ccg_attr_group);
1150
1151         return 0;
1152 }
1153
1154 static const struct i2c_device_id ucsi_ccg_device_id[] = {
1155         {"ccgx-ucsi", 0},
1156         {}
1157 };
1158 MODULE_DEVICE_TABLE(i2c, ucsi_ccg_device_id);
1159
1160 static struct i2c_driver ucsi_ccg_driver = {
1161         .driver = {
1162                 .name = "ucsi_ccg",
1163         },
1164         .probe = ucsi_ccg_probe,
1165         .remove = ucsi_ccg_remove,
1166         .id_table = ucsi_ccg_device_id,
1167 };
1168
1169 module_i2c_driver(ucsi_ccg_driver);
1170
1171 MODULE_AUTHOR("Ajay Gupta <ajayg@nvidia.com>");
1172 MODULE_DESCRIPTION("UCSI driver for Cypress CCGx Type-C controller");
1173 MODULE_LICENSE("GPL v2");