cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

cio2-bridge.h (3080B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/* Author: Dan Scally <djrscally@gmail.com> */
      3#ifndef __CIO2_BRIDGE_H
      4#define __CIO2_BRIDGE_H
      5
      6#include <linux/property.h>
      7#include <linux/types.h>
      8
      9#include "ipu3-cio2.h"
     10
     11struct i2c_client;
     12
     13#define CIO2_HID				"INT343E"
     14#define CIO2_MAX_LANES				4
     15#define MAX_NUM_LINK_FREQS			3
     16
     17/* Values are educated guesses as we don't have a spec */
     18#define CIO2_SENSOR_ROTATION_NORMAL		0
     19#define CIO2_SENSOR_ROTATION_INVERTED		1
     20
     21#define CIO2_SENSOR_CONFIG(_HID, _NR, ...)	\
     22	(const struct cio2_sensor_config) {	\
     23		.hid = _HID,			\
     24		.nr_link_freqs = _NR,		\
     25		.link_freqs = { __VA_ARGS__ }	\
     26	}
     27
     28#define NODE_SENSOR(_HID, _PROPS)		\
     29	(const struct software_node) {		\
     30		.name = _HID,			\
     31		.properties = _PROPS,		\
     32	}
     33
     34#define NODE_PORT(_PORT, _SENSOR_NODE)		\
     35	(const struct software_node) {		\
     36		.name = _PORT,			\
     37		.parent = _SENSOR_NODE,		\
     38	}
     39
     40#define NODE_ENDPOINT(_EP, _PORT, _PROPS)	\
     41	(const struct software_node) {		\
     42		.name = _EP,			\
     43		.parent = _PORT,		\
     44		.properties = _PROPS,		\
     45	}
     46
     47#define NODE_VCM(_TYPE)				\
     48	(const struct software_node) {		\
     49		.name = _TYPE,			\
     50	}
     51
     52enum cio2_sensor_swnodes {
     53	SWNODE_SENSOR_HID,
     54	SWNODE_SENSOR_PORT,
     55	SWNODE_SENSOR_ENDPOINT,
     56	SWNODE_CIO2_PORT,
     57	SWNODE_CIO2_ENDPOINT,
     58	/* Must be last because it is optional / maybe empty */
     59	SWNODE_VCM,
     60	SWNODE_COUNT
     61};
     62
     63/* Data representation as it is in ACPI SSDB buffer */
     64struct cio2_sensor_ssdb {
     65	u8 version;
     66	u8 sku;
     67	u8 guid_csi2[16];
     68	u8 devfunction;
     69	u8 bus;
     70	u32 dphylinkenfuses;
     71	u32 clockdiv;
     72	u8 link;
     73	u8 lanes;
     74	u32 csiparams[10];
     75	u32 maxlanespeed;
     76	u8 sensorcalibfileidx;
     77	u8 sensorcalibfileidxInMBZ[3];
     78	u8 romtype;
     79	u8 vcmtype;
     80	u8 platforminfo;
     81	u8 platformsubinfo;
     82	u8 flash;
     83	u8 privacyled;
     84	u8 degree;
     85	u8 mipilinkdefined;
     86	u32 mclkspeed;
     87	u8 controllogicid;
     88	u8 reserved1[3];
     89	u8 mclkport;
     90	u8 reserved2[13];
     91} __packed;
     92
     93struct cio2_property_names {
     94	char clock_frequency[16];
     95	char rotation[9];
     96	char orientation[12];
     97	char bus_type[9];
     98	char data_lanes[11];
     99	char remote_endpoint[16];
    100	char link_frequencies[17];
    101};
    102
    103struct cio2_node_names {
    104	char port[7];
    105	char endpoint[11];
    106	char remote_port[7];
    107};
    108
    109struct cio2_sensor_config {
    110	const char *hid;
    111	const u8 nr_link_freqs;
    112	const u64 link_freqs[MAX_NUM_LINK_FREQS];
    113};
    114
    115struct cio2_sensor {
    116	char name[ACPI_ID_LEN];
    117	struct acpi_device *adev;
    118	struct i2c_client *vcm_i2c_client;
    119
    120	/* SWNODE_COUNT + 1 for terminating empty node */
    121	struct software_node swnodes[SWNODE_COUNT + 1];
    122	struct cio2_node_names node_names;
    123
    124	struct cio2_sensor_ssdb ssdb;
    125	struct acpi_pld_info *pld;
    126
    127	struct cio2_property_names prop_names;
    128	struct property_entry ep_properties[5];
    129	struct property_entry dev_properties[5];
    130	struct property_entry cio2_properties[3];
    131	struct software_node_ref_args local_ref[1];
    132	struct software_node_ref_args remote_ref[1];
    133	struct software_node_ref_args vcm_ref[1];
    134};
    135
    136struct cio2_bridge {
    137	char cio2_node_name[ACPI_ID_LEN];
    138	struct software_node cio2_hid_node;
    139	u32 data_lanes[4];
    140	unsigned int n_sensors;
    141	struct cio2_sensor sensors[CIO2_NUM_PORTS];
    142};
    143
    144#endif