1*9ad9a52cSNicolas Pitre /* SPDX-License-Identifier: BSD-3-Clause */ 2*9ad9a52cSNicolas Pitre /* 3*9ad9a52cSNicolas Pitre * Copyright (c) 2020, MIPI Alliance, Inc. 4*9ad9a52cSNicolas Pitre * 5*9ad9a52cSNicolas Pitre * Author: Nicolas Pitre <npitre@baylibre.com> 6*9ad9a52cSNicolas Pitre * 7*9ad9a52cSNicolas Pitre * Transfer Mode/Rate Table definitions as found in extended capability 8*9ad9a52cSNicolas Pitre * sections 0x04 and 0x08. 9*9ad9a52cSNicolas Pitre * This applies starting from I3C HCI v2.0. 10*9ad9a52cSNicolas Pitre */ 11*9ad9a52cSNicolas Pitre 12*9ad9a52cSNicolas Pitre #ifndef XFER_MODE_RATE_H 13*9ad9a52cSNicolas Pitre #define XFER_MODE_RATE_H 14*9ad9a52cSNicolas Pitre 15*9ad9a52cSNicolas Pitre /* 16*9ad9a52cSNicolas Pitre * Master Transfer Mode Table Fixed Indexes. 17*9ad9a52cSNicolas Pitre * 18*9ad9a52cSNicolas Pitre * Indexes 0x0 and 0x8 are mandatory. Availability for the rest must be 19*9ad9a52cSNicolas Pitre * obtained from the mode table in the extended capability area. 20*9ad9a52cSNicolas Pitre * Presence and definitions for indexes beyond these ones may vary. 21*9ad9a52cSNicolas Pitre */ 22*9ad9a52cSNicolas Pitre #define XFERMODE_IDX_I3C_SDR 0x00 /* I3C SDR Mode */ 23*9ad9a52cSNicolas Pitre #define XFERMODE_IDX_I3C_HDR_DDR 0x01 /* I3C HDR-DDR Mode */ 24*9ad9a52cSNicolas Pitre #define XFERMODE_IDX_I3C_HDR_T 0x02 /* I3C HDR-Ternary Mode */ 25*9ad9a52cSNicolas Pitre #define XFERMODE_IDX_I3C_HDR_BT 0x03 /* I3C HDR-BT Mode */ 26*9ad9a52cSNicolas Pitre #define XFERMODE_IDX_I2C 0x08 /* Legacy I2C Mode */ 27*9ad9a52cSNicolas Pitre 28*9ad9a52cSNicolas Pitre /* 29*9ad9a52cSNicolas Pitre * Transfer Mode Table Entry Bits Definitions 30*9ad9a52cSNicolas Pitre */ 31*9ad9a52cSNicolas Pitre #define XFERMODE_VALID_XFER_ADD_FUNC GENMASK(21, 16) 32*9ad9a52cSNicolas Pitre #define XFERMODE_ML_DATA_XFER_CODING GENMASK(15, 11) 33*9ad9a52cSNicolas Pitre #define XFERMODE_ML_ADDL_LANES GENMASK(10, 8) 34*9ad9a52cSNicolas Pitre #define XFERMODE_SUPPORTED BIT(7) 35*9ad9a52cSNicolas Pitre #define XFERMODE_MODE GENMASK(3, 0) 36*9ad9a52cSNicolas Pitre 37*9ad9a52cSNicolas Pitre /* 38*9ad9a52cSNicolas Pitre * Master Data Transfer Rate Selector Values. 39*9ad9a52cSNicolas Pitre * 40*9ad9a52cSNicolas Pitre * These are the values to be used in the command descriptor XFER_RATE field 41*9ad9a52cSNicolas Pitre * and found in the RATE_ID field below. 42*9ad9a52cSNicolas Pitre * The I3C_SDR0, I3C_SDR1, I3C_SDR2, I3C_SDR3, I3C_SDR4 and I2C_FM rates 43*9ad9a52cSNicolas Pitre * are required, everything else is optional and discoverable in the 44*9ad9a52cSNicolas Pitre * Data Transfer Rate Table. Indicated are typical rates. The actual 45*9ad9a52cSNicolas Pitre * rates may vary slightly and are also specified in the Data Transfer 46*9ad9a52cSNicolas Pitre * Rate Table. 47*9ad9a52cSNicolas Pitre */ 48*9ad9a52cSNicolas Pitre #define XFERRATE_I3C_SDR0 0x00 /* 12.5 MHz */ 49*9ad9a52cSNicolas Pitre #define XFERRATE_I3C_SDR1 0x01 /* 8 MHz */ 50*9ad9a52cSNicolas Pitre #define XFERRATE_I3C_SDR2 0x02 /* 6 MHz */ 51*9ad9a52cSNicolas Pitre #define XFERRATE_I3C_SDR3 0x03 /* 4 MHz */ 52*9ad9a52cSNicolas Pitre #define XFERRATE_I3C_SDR4 0x04 /* 2 MHz */ 53*9ad9a52cSNicolas Pitre #define XFERRATE_I3C_SDR_FM_FMP 0x05 /* 400 KHz / 1 MHz */ 54*9ad9a52cSNicolas Pitre #define XFERRATE_I3C_SDR_USER6 0x06 /* User Defined */ 55*9ad9a52cSNicolas Pitre #define XFERRATE_I3C_SDR_USER7 0x07 /* User Defined */ 56*9ad9a52cSNicolas Pitre 57*9ad9a52cSNicolas Pitre #define XFERRATE_I2C_FM 0x00 /* 400 KHz */ 58*9ad9a52cSNicolas Pitre #define XFERRATE_I2C_FMP 0x01 /* 1 MHz */ 59*9ad9a52cSNicolas Pitre #define XFERRATE_I2C_USER2 0x02 /* User Defined */ 60*9ad9a52cSNicolas Pitre #define XFERRATE_I2C_USER3 0x03 /* User Defined */ 61*9ad9a52cSNicolas Pitre #define XFERRATE_I2C_USER4 0x04 /* User Defined */ 62*9ad9a52cSNicolas Pitre #define XFERRATE_I2C_USER5 0x05 /* User Defined */ 63*9ad9a52cSNicolas Pitre #define XFERRATE_I2C_USER6 0x06 /* User Defined */ 64*9ad9a52cSNicolas Pitre #define XFERRATE_I2C_USER7 0x07 /* User Defined */ 65*9ad9a52cSNicolas Pitre 66*9ad9a52cSNicolas Pitre /* 67*9ad9a52cSNicolas Pitre * Master Data Transfer Rate Table Mode ID values. 68*9ad9a52cSNicolas Pitre */ 69*9ad9a52cSNicolas Pitre #define XFERRATE_MODE_I3C 0x00 70*9ad9a52cSNicolas Pitre #define XFERRATE_MODE_I2C 0x08 71*9ad9a52cSNicolas Pitre 72*9ad9a52cSNicolas Pitre /* 73*9ad9a52cSNicolas Pitre * Master Data Transfer Rate Table Entry Bits Definitions 74*9ad9a52cSNicolas Pitre */ 75*9ad9a52cSNicolas Pitre #define XFERRATE_MODE_ID GENMASK(31, 28) 76*9ad9a52cSNicolas Pitre #define XFERRATE_RATE_ID GENMASK(22, 20) 77*9ad9a52cSNicolas Pitre #define XFERRATE_ACTUAL_RATE_KHZ GENMASK(19, 0) 78*9ad9a52cSNicolas Pitre 79*9ad9a52cSNicolas Pitre #endif 80