root/drivers/usb/typec/ucsi/ucsi_ccg.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. ccg_read
  2. ccg_write
  3. ucsi_ccg_init
  4. ucsi_ccg_send_data
  5. ucsi_ccg_recv_data
  6. ucsi_ccg_ack_interrupt
  7. ucsi_ccg_sync
  8. ucsi_ccg_cmd
  9. ccg_irq_handler
  10. ccg_pm_workaround_work
  11. get_fw_info
  12. invalid_async_evt
  13. ccg_process_response
  14. ccg_read_response
  15. ccg_send_command
  16. ccg_cmd_enter_flashing
  17. ccg_cmd_reset
  18. ccg_cmd_port_control
  19. ccg_cmd_jump_boot_mode
  20. ccg_cmd_write_flash_row
  21. ccg_cmd_validate_fw
  22. ccg_check_vendor_version
  23. ccg_check_fw_version
  24. ccg_fw_update_needed
  25. do_flash
  26. ccg_fw_update
  27. ccg_restart
  28. ccg_update_firmware
  29. do_flash_store
  30. ucsi_ccg_probe
  31. ucsi_ccg_remove
  32. ucsi_ccg_resume
  33. ucsi_ccg_runtime_suspend
  34. ucsi_ccg_runtime_resume

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

/* [<][>][^][v][top][bottom][index][help] */