| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- // SPDX-License-Identifier: GPL-2.0-or-later
- /*
- * I3C HCI Quirks
- *
- * Copyright 2024 Advanced Micro Devices, Inc.
- *
- * Authors: Shyam Sundar S K <Shyam-sundar.S-k@amd.com>
- * Guruvendra Punugupati <Guruvendra.Punugupati@amd.com>
- */
- #include <linux/i3c/master.h>
- #include "hci.h"
- /* Timing registers */
- #define HCI_SCL_I3C_OD_TIMING 0x214
- #define HCI_SCL_I3C_PP_TIMING 0x218
- #define HCI_SDA_HOLD_SWITCH_DLY_TIMING 0x230
- /* Timing values to configure 9MHz frequency */
- #define AMD_SCL_I3C_OD_TIMING 0x00cf00cf
- #define AMD_SCL_I3C_PP_TIMING 0x00160016
- #define QUEUE_THLD_CTRL 0xD0
- void amd_set_od_pp_timing(struct i3c_hci *hci)
- {
- u32 data;
- reg_write(HCI_SCL_I3C_OD_TIMING, AMD_SCL_I3C_OD_TIMING);
- reg_write(HCI_SCL_I3C_PP_TIMING, AMD_SCL_I3C_PP_TIMING);
- data = reg_read(HCI_SDA_HOLD_SWITCH_DLY_TIMING);
- /* Configure maximum TX hold time */
- data |= W0_MASK(18, 16);
- reg_write(HCI_SDA_HOLD_SWITCH_DLY_TIMING, data);
- }
- void amd_set_resp_buf_thld(struct i3c_hci *hci)
- {
- u32 data;
- data = reg_read(QUEUE_THLD_CTRL);
- data = data & ~W0_MASK(15, 8);
- reg_write(QUEUE_THLD_CTRL, data);
- }
|