usb: typec: ucsi: ccg: add firmware flashing support
authorAjay Gupta <ajayg@nvidia.com>
Tue, 23 Apr 2019 14:21:47 +0000 (17:21 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 25 Apr 2019 09:03:53 +0000 (11:03 +0200)
commit5c9ae5a87573d38cfc4c740aafda2fa6ce06e401
treedb7bf78a3b1d296ed8e346c95e5d559bcb6b57e0
parent5fd958a4f67d49089126d3b8b2d9cc993d8853ef
usb: typec: ucsi: ccg: add firmware flashing support

CCGx has two copies of the firmware in addition to the bootloader.
If the device is running FW1, FW2 can be updated with the new version.
Dual firmware mode allows the CCG device to stay in a PD contract and
support USB PD and Type-C functionality while a firmware update is in
progress.

First we read the currently flashed firmware version of both
primary and secondary firmware and then compare it with
version of firmware file to determine if flashing is required.

Command framework is added to support sending commands to CCGx
controller. We wait for response after sending the command and then
read the response from RAB_RESPONSE register.

Below commands are supported,
- ENTER_FLASHING
- RESET
- PDPORT_ENABLE
- JUMP_TO_BOOT
- FLASH_ROW_RW
- VALIDATE_FW

Command specific mutex lock is also added to sync between driver
and user threads.

PD port number information is added which is required while sending
PD_PORT_ENABLE command

Signed-off-by: Ajay Gupta <ajayg@nvidia.com>
[ heikki: Added ABI documentation. ]
Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Documentation/ABI/testing/sysfs-driver-ucsi-ccg [new file with mode: 0644]
drivers/usb/typec/ucsi/ucsi_ccg.c