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