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 */ 32union 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 50union 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 63union 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 72struct 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 78enum sensor_idx { 79 accel_idx = 0, 80 gyro_idx = 1, 81 mag_idx = 2, 82 als_idx = 19 83}; 84 85enum mem_use_type { 86 USE_DRAM, 87 USE_C2P_REG, 88}; 89 90struct 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 102int amd_mp2_get_sensor_num(struct amd_mp2_dev *privdata, u8 *sensor_id); 103int amd_sfh_hid_client_init(struct amd_mp2_dev *privdata); 104int amd_sfh_hid_client_deinit(struct amd_mp2_dev *privdata); 105void amd_sfh_set_desc_ops(struct amd_mp2_ops *mp2_ops); 106 107#endif 108