162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * AMD MP2 PCIe communication driver 462306a36Sopenharmony_ci * Copyright 2020-2021 Advanced Micro Devices, Inc. 562306a36Sopenharmony_ci * Authors: Shyam Sundar S K <Shyam-sundar.S-k@amd.com> 662306a36Sopenharmony_ci * Sandeep Singh <Sandeep.singh@amd.com> 762306a36Sopenharmony_ci * Basavaraj Natikar <Basavaraj.Natikar@amd.com> 862306a36Sopenharmony_ci */ 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#ifndef PCIE_MP2_AMD_H 1162306a36Sopenharmony_ci#define PCIE_MP2_AMD_H 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci#include "amd_sfh_common.h" 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci/* MP2 C2P Message Registers */ 1662306a36Sopenharmony_ci#define AMD_C2P_MSG0 0x10500 1762306a36Sopenharmony_ci#define AMD_C2P_MSG1 0x10504 1862306a36Sopenharmony_ci#define AMD_C2P_MSG2 0x10508 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci/* MP2 P2C Message Registers */ 2162306a36Sopenharmony_ci#define AMD_P2C_MSG3 0x1068C /* Supported Sensors info */ 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ci#define V2_STATUS 0x2 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci#define HPD_IDX 16 2662306a36Sopenharmony_ci#define ACS_IDX 22 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_ci#define SENSOR_DISCOVERY_STATUS_MASK GENMASK(5, 3) 2962306a36Sopenharmony_ci#define SENSOR_DISCOVERY_STATUS_SHIFT 3 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ci/* SFH Command register */ 3262306a36Sopenharmony_ciunion sfh_cmd_base { 3362306a36Sopenharmony_ci u32 ul; 3462306a36Sopenharmony_ci struct { 3562306a36Sopenharmony_ci u32 cmd_id : 8; 3662306a36Sopenharmony_ci u32 sensor_id : 8; 3762306a36Sopenharmony_ci u32 period : 16; 3862306a36Sopenharmony_ci } s; 3962306a36Sopenharmony_ci struct { 4062306a36Sopenharmony_ci u32 cmd_id : 4; 4162306a36Sopenharmony_ci u32 intr_disable : 1; 4262306a36Sopenharmony_ci u32 rsvd1 : 3; 4362306a36Sopenharmony_ci u32 length : 7; 4462306a36Sopenharmony_ci u32 mem_type : 1; 4562306a36Sopenharmony_ci u32 sensor_id : 8; 4662306a36Sopenharmony_ci u32 period : 8; 4762306a36Sopenharmony_ci } cmd_v2; 4862306a36Sopenharmony_ci}; 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ciunion cmd_response { 5162306a36Sopenharmony_ci u32 resp; 5262306a36Sopenharmony_ci struct { 5362306a36Sopenharmony_ci u32 status : 2; 5462306a36Sopenharmony_ci u32 out_in_c2p : 1; 5562306a36Sopenharmony_ci u32 rsvd1 : 1; 5662306a36Sopenharmony_ci u32 response : 4; 5762306a36Sopenharmony_ci u32 sub_cmd : 8; 5862306a36Sopenharmony_ci u32 sensor_id : 6; 5962306a36Sopenharmony_ci u32 rsvd2 : 10; 6062306a36Sopenharmony_ci } response_v2; 6162306a36Sopenharmony_ci}; 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_ciunion sfh_cmd_param { 6462306a36Sopenharmony_ci u32 ul; 6562306a36Sopenharmony_ci struct { 6662306a36Sopenharmony_ci u32 buf_layout : 2; 6762306a36Sopenharmony_ci u32 buf_length : 6; 6862306a36Sopenharmony_ci u32 rsvd : 24; 6962306a36Sopenharmony_ci } s; 7062306a36Sopenharmony_ci}; 7162306a36Sopenharmony_ci 7262306a36Sopenharmony_cistruct sfh_cmd_reg { 7362306a36Sopenharmony_ci union sfh_cmd_base cmd_base; 7462306a36Sopenharmony_ci union sfh_cmd_param cmd_param; 7562306a36Sopenharmony_ci phys_addr_t phys_addr; 7662306a36Sopenharmony_ci}; 7762306a36Sopenharmony_ci 7862306a36Sopenharmony_cienum sensor_idx { 7962306a36Sopenharmony_ci accel_idx = 0, 8062306a36Sopenharmony_ci gyro_idx = 1, 8162306a36Sopenharmony_ci mag_idx = 2, 8262306a36Sopenharmony_ci als_idx = 19 8362306a36Sopenharmony_ci}; 8462306a36Sopenharmony_ci 8562306a36Sopenharmony_cienum mem_use_type { 8662306a36Sopenharmony_ci USE_DRAM, 8762306a36Sopenharmony_ci USE_C2P_REG, 8862306a36Sopenharmony_ci}; 8962306a36Sopenharmony_ci 9062306a36Sopenharmony_cistruct hpd_status { 9162306a36Sopenharmony_ci union { 9262306a36Sopenharmony_ci struct { 9362306a36Sopenharmony_ci u32 object_distance : 16; 9462306a36Sopenharmony_ci u32 probablity : 8; 9562306a36Sopenharmony_ci u32 human_presence_actual : 4; 9662306a36Sopenharmony_ci u32 human_presence_report : 4; 9762306a36Sopenharmony_ci } shpd; 9862306a36Sopenharmony_ci u32 val; 9962306a36Sopenharmony_ci }; 10062306a36Sopenharmony_ci}; 10162306a36Sopenharmony_ci 10262306a36Sopenharmony_ciint amd_mp2_get_sensor_num(struct amd_mp2_dev *privdata, u8 *sensor_id); 10362306a36Sopenharmony_ciint amd_sfh_hid_client_init(struct amd_mp2_dev *privdata); 10462306a36Sopenharmony_ciint amd_sfh_hid_client_deinit(struct amd_mp2_dev *privdata); 10562306a36Sopenharmony_civoid amd_sfh_set_desc_ops(struct amd_mp2_ops *mp2_ops); 10662306a36Sopenharmony_ci 10762306a36Sopenharmony_ci#endif 108