1dc6e2448SWyatt Wood /* 2dc6e2448SWyatt Wood * Copyright 2019 Advanced Micro Devices, Inc. 3dc6e2448SWyatt Wood * 4dc6e2448SWyatt Wood * Permission is hereby granted, free of charge, to any person obtaining a 5dc6e2448SWyatt Wood * copy of this software and associated documentation files (the "Software"), 6dc6e2448SWyatt Wood * to deal in the Software without restriction, including without limitation 7dc6e2448SWyatt Wood * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8dc6e2448SWyatt Wood * and/or sell copies of the Software, and to permit persons to whom the 9dc6e2448SWyatt Wood * Software is furnished to do so, subject to the following conditions: 10dc6e2448SWyatt Wood * 11dc6e2448SWyatt Wood * The above copyright notice and this permission notice shall be included in 12dc6e2448SWyatt Wood * all copies or substantial portions of the Software. 13dc6e2448SWyatt Wood * 14dc6e2448SWyatt Wood * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15dc6e2448SWyatt Wood * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16dc6e2448SWyatt Wood * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17dc6e2448SWyatt Wood * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 18dc6e2448SWyatt Wood * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 19dc6e2448SWyatt Wood * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 20dc6e2448SWyatt Wood * OTHER DEALINGS IN THE SOFTWARE. 21dc6e2448SWyatt Wood * 22dc6e2448SWyatt Wood * Authors: AMD 23dc6e2448SWyatt Wood * 24dc6e2448SWyatt Wood */ 25dc6e2448SWyatt Wood 26dc6e2448SWyatt Wood #include "dmub_hw_lock_mgr.h" 27dc6e2448SWyatt Wood #include "dc_dmub_srv.h" 28dc6e2448SWyatt Wood #include "dc_types.h" 29dc6e2448SWyatt Wood #include "core_types.h" 30dc6e2448SWyatt Wood 31dc6e2448SWyatt Wood void dmub_hw_lock_mgr_cmd(struct dc_dmub_srv *dmub_srv, 32dc6e2448SWyatt Wood bool lock, 33dc6e2448SWyatt Wood union dmub_hw_lock_flags *hw_locks, 34dc6e2448SWyatt Wood struct dmub_hw_lock_inst_flags *inst_flags) 35dc6e2448SWyatt Wood { 36148816f9SWyatt Wood union dmub_rb_cmd cmd; 37dc6e2448SWyatt Wood 38148816f9SWyatt Wood memset(&cmd, 0, sizeof(cmd)); 39dc6e2448SWyatt Wood cmd.lock_hw.header.type = DMUB_CMD__HW_LOCK; 40dc6e2448SWyatt Wood cmd.lock_hw.header.sub_type = 0; 41dc6e2448SWyatt Wood cmd.lock_hw.header.payload_bytes = sizeof(struct dmub_cmd_lock_hw_data); 42dc6e2448SWyatt Wood cmd.lock_hw.lock_hw_data.client = HW_LOCK_CLIENT_DRIVER; 43dc6e2448SWyatt Wood cmd.lock_hw.lock_hw_data.lock = lock; 44dc6e2448SWyatt Wood cmd.lock_hw.lock_hw_data.hw_locks.u8All = hw_locks->u8All; 45dc6e2448SWyatt Wood memcpy(&cmd.lock_hw.lock_hw_data.inst_flags, inst_flags, sizeof(struct dmub_hw_lock_inst_flags)); 46dc6e2448SWyatt Wood 47dc6e2448SWyatt Wood if (!lock) 48dc6e2448SWyatt Wood cmd.lock_hw.lock_hw_data.should_release = 1; 49dc6e2448SWyatt Wood 50dc6e2448SWyatt Wood dc_dmub_srv_cmd_queue(dmub_srv, &cmd); 51dc6e2448SWyatt Wood dc_dmub_srv_cmd_execute(dmub_srv); 52dc6e2448SWyatt Wood dc_dmub_srv_wait_idle(dmub_srv); 53dc6e2448SWyatt Wood } 54dc6e2448SWyatt Wood 55*f2973d2aSAlvin Lee void dmub_hw_lock_mgr_inbox0_cmd(struct dc_dmub_srv *dmub_srv, 56*f2973d2aSAlvin Lee union dmub_inbox0_cmd_lock_hw hw_lock_cmd) 57*f2973d2aSAlvin Lee { 58*f2973d2aSAlvin Lee union dmub_inbox0_data_register data = { 0 }; 59*f2973d2aSAlvin Lee data.inbox0_cmd_lock_hw = hw_lock_cmd; 60*f2973d2aSAlvin Lee dc_dmub_srv_send_inbox0_cmd(dmub_srv, data); 61*f2973d2aSAlvin Lee } 62*f2973d2aSAlvin Lee 63dc6e2448SWyatt Wood bool should_use_dmub_lock(struct dc_link *link) 64dc6e2448SWyatt Wood { 65dc6e2448SWyatt Wood return false; 66dc6e2448SWyatt Wood } 67