1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ |
2 | /* |
3 | * AMD MP2 PCIe communication driver |
4 | * Copyright 2020-2021 Advanced Micro Devices, Inc. |
5 | * Authors: Shyam Sundar S K <Shyam-sundar.S-k@amd.com> |
6 | * Sandeep Singh <Sandeep.singh@amd.com> |
7 | * Basavaraj Natikar <Basavaraj.Natikar@amd.com> |
8 | */ |
9 | |
10 | #ifndef PCIE_MP2_AMD_H |
11 | #define PCIE_MP2_AMD_H |
12 | |
13 | #include "amd_sfh_common.h" |
14 | |
15 | /* MP2 C2P Message Registers */ |
16 | #define AMD_C2P_MSG0 0x10500 |
17 | #define AMD_C2P_MSG1 0x10504 |
18 | #define AMD_C2P_MSG2 0x10508 |
19 | |
20 | /* MP2 P2C Message Registers */ |
21 | #define AMD_P2C_MSG3 0x1068C /* Supported Sensors info */ |
22 | |
23 | #define V2_STATUS 0x2 |
24 | |
25 | #define HPD_IDX 16 |
26 | #define ACS_IDX 22 |
27 | |
28 | #define SENSOR_DISCOVERY_STATUS_MASK GENMASK(5, 3) |
29 | #define SENSOR_DISCOVERY_STATUS_SHIFT 3 |
30 | |
31 | /* SFH Command register */ |
32 | union sfh_cmd_base { |
33 | u32 ul; |
34 | struct { |
35 | u32 cmd_id : 8; |
36 | u32 sensor_id : 8; |
37 | u32 period : 16; |
38 | } s; |
39 | struct { |
40 | u32 cmd_id : 4; |
41 | u32 intr_disable : 1; |
42 | u32 rsvd1 : 3; |
43 | u32 length : 7; |
44 | u32 mem_type : 1; |
45 | u32 sensor_id : 8; |
46 | u32 period : 8; |
47 | } cmd_v2; |
48 | }; |
49 | |
50 | union cmd_response { |
51 | u32 resp; |
52 | struct { |
53 | u32 status : 2; |
54 | u32 out_in_c2p : 1; |
55 | u32 rsvd1 : 1; |
56 | u32 response : 4; |
57 | u32 sub_cmd : 8; |
58 | u32 sensor_id : 6; |
59 | u32 rsvd2 : 10; |
60 | } response_v2; |
61 | }; |
62 | |
63 | union sfh_cmd_param { |
64 | u32 ul; |
65 | struct { |
66 | u32 buf_layout : 2; |
67 | u32 buf_length : 6; |
68 | u32 rsvd : 24; |
69 | } s; |
70 | }; |
71 | |
72 | struct sfh_cmd_reg { |
73 | union sfh_cmd_base cmd_base; |
74 | union sfh_cmd_param cmd_param; |
75 | phys_addr_t phys_addr; |
76 | }; |
77 | |
78 | enum sensor_idx { |
79 | accel_idx = 0, |
80 | gyro_idx = 1, |
81 | mag_idx = 2, |
82 | als_idx = 19 |
83 | }; |
84 | |
85 | enum mem_use_type { |
86 | USE_DRAM, |
87 | USE_C2P_REG, |
88 | }; |
89 | |
90 | struct hpd_status { |
91 | union { |
92 | struct { |
93 | u32 object_distance : 16; |
94 | u32 probablity : 8; |
95 | u32 human_presence_actual : 4; |
96 | u32 human_presence_report : 4; |
97 | } shpd; |
98 | u32 val; |
99 | }; |
100 | }; |
101 | |
102 | int amd_mp2_get_sensor_num(struct amd_mp2_dev *privdata, u8 *sensor_id); |
103 | int amd_sfh_hid_client_init(struct amd_mp2_dev *privdata); |
104 | int amd_sfh_hid_client_deinit(struct amd_mp2_dev *privdata); |
105 | void amd_sfh_set_desc_ops(struct amd_mp2_ops *mp2_ops); |
106 | |
107 | #endif |
108 | |