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