15e995786SJonathan CorbetHigh Speed Synchronous Serial Interface (HSI) 25e995786SJonathan Corbet============================================= 35e995786SJonathan Corbet 45e995786SJonathan CorbetIntroduction 55e995786SJonathan Corbet--------------- 65e995786SJonathan Corbet 7*7852fe3aSRandy DunlapHigh Speed Synchronous Interface (HSI) is a full duplex, low latency protocol, 85e995786SJonathan Corbetthat is optimized for die-level interconnect between an Application Processor 95e995786SJonathan Corbetand a Baseband chipset. It has been specified by the MIPI alliance in 2003 and 105e995786SJonathan Corbetimplemented by multiple vendors since then. 115e995786SJonathan Corbet 125e995786SJonathan CorbetThe HSI interface supports full duplex communication over multiple channels 135e995786SJonathan Corbet(typically 8) and is capable of reaching speeds up to 200 Mbit/s. 145e995786SJonathan Corbet 155e995786SJonathan CorbetThe serial protocol uses two signals, DATA and FLAG as combined data and clock 165e995786SJonathan Corbetsignals and an additional READY signal for flow control. An additional WAKE 175e995786SJonathan Corbetsignal can be used to wakeup the chips from standby modes. The signals are 185e995786SJonathan Corbetcommonly prefixed by AC for signals going from the application die to the 195e995786SJonathan Corbetcellular die and CA for signals going the other way around. 205e995786SJonathan Corbet 215e995786SJonathan Corbet:: 225e995786SJonathan Corbet 235e995786SJonathan Corbet +------------+ +---------------+ 245e995786SJonathan Corbet | Cellular | | Application | 255e995786SJonathan Corbet | Die | | Die | 265e995786SJonathan Corbet | | - - - - - - CAWAKE - - - - - - >| | 275e995786SJonathan Corbet | T|------------ CADATA ------------>|R | 285e995786SJonathan Corbet | X|------------ CAFLAG ------------>|X | 295e995786SJonathan Corbet | |<----------- ACREADY ------------| | 305e995786SJonathan Corbet | | | | 315e995786SJonathan Corbet | | | | 325e995786SJonathan Corbet | |< - - - - - ACWAKE - - - - - - -| | 335e995786SJonathan Corbet | R|<----------- ACDATA -------------|T | 345e995786SJonathan Corbet | X|<----------- ACFLAG -------------|X | 355e995786SJonathan Corbet | |------------ CAREADY ----------->| | 365e995786SJonathan Corbet | | | | 375e995786SJonathan Corbet | | | | 385e995786SJonathan Corbet +------------+ +---------------+ 395e995786SJonathan Corbet 405e995786SJonathan CorbetHSI Subsystem in Linux 415e995786SJonathan Corbet------------------------- 425e995786SJonathan Corbet 435e995786SJonathan CorbetIn the Linux kernel the hsi subsystem is supposed to be used for HSI devices. 445e995786SJonathan CorbetThe hsi subsystem contains drivers for hsi controllers including support for 455e995786SJonathan Corbetmulti-port controllers and provides a generic API for using the HSI ports. 465e995786SJonathan Corbet 475e995786SJonathan CorbetIt also contains HSI client drivers, which make use of the generic API to 485e995786SJonathan Corbetimplement a protocol used on the HSI interface. These client drivers can 495e995786SJonathan Corbetuse an arbitrary number of channels. 505e995786SJonathan Corbet 515e995786SJonathan Corbethsi-char Device 525e995786SJonathan Corbet------------------ 535e995786SJonathan Corbet 545e995786SJonathan CorbetEach port automatically registers a generic client driver called hsi_char, 55*7852fe3aSRandy Dunlapwhich provides a character device for userspace representing the HSI port. 565e995786SJonathan CorbetIt can be used to communicate via HSI from userspace. Userspace may 575e995786SJonathan Corbetconfigure the hsi_char device using the following ioctl commands: 585e995786SJonathan Corbet 595e995786SJonathan CorbetHSC_RESET 605e995786SJonathan Corbet flush the HSI port 615e995786SJonathan Corbet 625e995786SJonathan CorbetHSC_SET_PM 635e995786SJonathan Corbet enable or disable the client. 645e995786SJonathan Corbet 655e995786SJonathan CorbetHSC_SEND_BREAK 665e995786SJonathan Corbet send break 675e995786SJonathan Corbet 685e995786SJonathan CorbetHSC_SET_RX 695e995786SJonathan Corbet set RX configuration 705e995786SJonathan Corbet 715e995786SJonathan CorbetHSC_GET_RX 725e995786SJonathan Corbet get RX configuration 735e995786SJonathan Corbet 745e995786SJonathan CorbetHSC_SET_TX 755e995786SJonathan Corbet set TX configuration 765e995786SJonathan Corbet 775e995786SJonathan CorbetHSC_GET_TX 785e995786SJonathan Corbet get TX configuration 795e995786SJonathan Corbet 805e995786SJonathan CorbetThe kernel HSI API 815e995786SJonathan Corbet------------------ 825e995786SJonathan Corbet 835e995786SJonathan Corbet.. kernel-doc:: include/linux/hsi/hsi.h 845e995786SJonathan Corbet :internal: 855e995786SJonathan Corbet 865e995786SJonathan Corbet.. kernel-doc:: drivers/hsi/hsi_core.c 875e995786SJonathan Corbet :export: 885e995786SJonathan Corbet 89