| HSI - High-speed Synchronous Serial Interface |
| |
| 1. Introduction |
| ~~~~~~~~~~~~~~~ |
| |
| High Speed Syncronous Interface (HSI) is a fullduplex, low latency protocol, |
| that is optimized for die-level interconnect between an Application Processor |
| and a Baseband chipset. It has been specified by the MIPI alliance in 2003 and |
| implemented by multiple vendors since then. |
| |
| The HSI interface supports full duplex communication over multiple channels |
| (typically 8) and is capable of reaching speeds up to 200 Mbit/s. |
| |
| The serial protocol uses two signals, DATA and FLAG as combined data and clock |
| signals and an additional READY signal for flow control. An additional WAKE |
| signal can be used to wakeup the chips from standby modes. The signals are |
| commonly prefixed by AC for signals going from the application die to the |
| cellular die and CA for signals going the other way around. |
| |
| +------------+ +---------------+ |
| | Cellular | | Application | |
| | Die | | Die | |
| | | - - - - - - CAWAKE - - - - - - >| | |
| | T|------------ CADATA ------------>|R | |
| | X|------------ CAFLAG ------------>|X | |
| | |<----------- ACREADY ------------| | |
| | | | | |
| | | | | |
| | |< - - - - - ACWAKE - - - - - - -| | |
| | R|<----------- ACDATA -------------|T | |
| | X|<----------- ACFLAG -------------|X | |
| | |------------ CAREADY ----------->| | |
| | | | | |
| | | | | |
| +------------+ +---------------+ |
| |
| 2. HSI Subsystem in Linux |
| ~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| In the Linux kernel the hsi subsystem is supposed to be used for HSI devices. |
| The hsi subsystem contains drivers for hsi controllers including support for |
| multi-port controllers and provides a generic API for using the HSI ports. |
| |
| It also contains HSI client drivers, which make use of the generic API to |
| implement a protocol used on the HSI interface. These client drivers can |
| use an arbitrary number of channels. |
| |
| 3. hsi-char Device |
| ~~~~~~~~~~~~~~~~~~ |
| |
| Each port automatically registers a generic client driver called hsi_char, |
| which provides a charecter device for userspace representing the HSI port. |
| It can be used to communicate via HSI from userspace. Userspace may |
| configure the hsi_char device using the following ioctl commands: |
| |
| * HSC_RESET: |
| - flush the HSI port |
| |
| * HSC_SET_PM |
| - enable or disable the client. |
| |
| * HSC_SEND_BREAK |
| - send break |
| |
| * HSC_SET_RX |
| - set RX configuration |
| |
| * HSC_GET_RX |
| - get RX configuration |
| |
| * HSC_SET_TX |
| - set TX configuration |
| |
| * HSC_GET_TX |
| - get TX configuration |