xref: /openbmc/linux/drivers/i3c/master/mipi-i3c-hci/xfer_mode_rate.h (revision cdd38c5f1ce4398ec58fec95904b75824daab7b5)
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