#### Plugin: Parade USB Hub

## Introduction

Parade USB hubs such as PS5512 have a built-in SPI-Master engine for programming external SPI ROM flash. The USB2.0 hub device can do control transfers to control an internal mailbox.

## Firmware Format

The daemon will decompress the cabinet archive and extract a firmware blob in a packed binary file format.

This plugin supports the following protocol ID:

- `com.paradetech.usbhub`

## GUID Generation

These devices use the standard USB DeviceInstanceId values, e.g.

- `USB\VID_273F&PID_1001`

## Update Behavior

- Load 384KB SPI ROM data buffer
- Specify target SPI ROM bank, ex: HUB_FW#1 or HUB_FW#2
- Set UFP Disconnect Flag register to notify firmware that we are doing firmware update
- Acquire SPI Master
- Unprotect SPI ROM bank
- Erase SPI ROM bank
- Update SPI ROM bank
- Protect SPI ROM bank
- Verify checksum for the just updated SPI ROM bank

It takes around 90 seconds to update the FW#1 64KB firmware. FW#2 is the factory default with a known good firmware. Please do a full power cycle to make new firmware take effect.

## Vendor ID Security

The vendor ID is set from the USB vendor, in this instance set to `USB:0x273F`

## Quirk Use

This plugin uses the following plugin-specific quirks:

### ParadeUsbhubChip

Set the chip used, e.g. `ps188` or `ps5512`, defaulting to the latter.

Since: 2.0.2

## External Interface Access

This plugin requires read/write access to `/dev/bus/usb`.

## Version Considerations

This plugin has been available since fwupd version `2.0.0`.

## Owners

Anyone can submit a pull request to modify this plugin, but the following people should be consulted before making major or functional changes:

- Hub Lin: `hublin2024`
- Jimmy Tu: `jimmytu5167`
- Andy Chu: `andychu5168`