Lines Matching +full:i3c +full:- +full:master
1 // SPDX-License-Identifier: BSD-3-Clause
11 #include <linux/i3c/master.h>
26 hci->vendor_mipi_id = readl(base + 0x04); in hci_extcap_hardware_id()
27 hci->vendor_version_id = readl(base + 0x08); in hci_extcap_hardware_id()
28 hci->vendor_product_id = readl(base + 0x0c); in hci_extcap_hardware_id()
30 dev_info(&hci->master.dev, "vendor MIPI ID: %#x\n", hci->vendor_mipi_id); in hci_extcap_hardware_id()
31 dev_info(&hci->master.dev, "vendor version ID: %#x\n", hci->vendor_version_id); in hci_extcap_hardware_id()
32 dev_info(&hci->master.dev, "vendor product ID: %#x\n", hci->vendor_product_id); in hci_extcap_hardware_id()
35 switch (hci->vendor_mipi_id) { in hci_extcap_hardware_id()
37 hci->quirks |= HCI_QUIRK_RAW_CCC; in hci_extcap_hardware_id()
50 "(unknown)", "master only", "target only", in hci_extcap_master_config()
51 "primary/secondary master" }; in hci_extcap_master_config()
52 dev_info(&hci->master.dev, "operation mode: %s\n", functionality[operation_mode]); in hci_extcap_master_config()
55 dev_err(&hci->master.dev, "only master mode is currently supported\n"); in hci_extcap_master_config()
56 return -EOPNOTSUPP; in hci_extcap_master_config()
64 dev_info(&hci->master.dev, "%d bus instances\n", count); in hci_extcap_multi_bus()
71 u32 entries = FIELD_GET(CAP_HEADER_LENGTH, header) - 1; in hci_extcap_xfer_modes()
74 dev_info(&hci->master.dev, "transfer mode table has %d entries\n", in hci_extcap_xfer_modes()
81 /* TODO: will be needed when I3C core does more than SDR */ in hci_extcap_xfer_modes()
91 u32 entries = FIELD_GET(CAP_HEADER_LENGTH, header) - 1; in hci_extcap_xfer_rates()
97 dev_info(&hci->master.dev, "available data rates:\n"); in hci_extcap_xfer_rates()
104 dev_info(&hci->master.dev, "rate %d for %s = %d kHz\n", in hci_extcap_xfer_rates()
106 mode_id == XFERRATE_MODE_I3C ? "I3C" : in hci_extcap_xfer_rates()
123 dev_info(&hci->master.dev, "%d/%d active auto-command entries\n", in hci_extcap_auto_command()
125 /* remember auto-command register location for later use */ in hci_extcap_auto_command()
126 hci->AUTOCMD_regs = base; in hci_extcap_auto_command()
132 dev_info(&hci->master.dev, "debug registers present\n"); in hci_extcap_debug()
133 hci->DEBUG_regs = base; in hci_extcap_debug()
139 dev_info(&hci->master.dev, "scheduled commands available\n"); in hci_extcap_scheduled_cmd()
140 /* hci->schedcmd_regs = base; */ in hci_extcap_scheduled_cmd()
146 dev_info(&hci->master.dev, "Non-Current Master support available\n"); in hci_extcap_non_curr_master()
147 /* hci->NCM_regs = base; */ in hci_extcap_non_curr_master()
153 dev_info(&hci->master.dev, "CCC Response Configuration available\n"); in hci_extcap_ccc_resp_conf()
159 dev_info(&hci->master.dev, "Global DAT available\n"); in hci_extcap_global_DAT()
165 dev_info(&hci->master.dev, "Master Multi-Lane support available\n"); in hci_extcap_multilane()
171 dev_info(&hci->master.dev, "NCM Multi-Lane support available\n"); in hci_extcap_ncm_multilane()
203 hci->vendor_data = (__force void *)base; in hci_extcap_vendor_NXP()
204 dev_info(&hci->master.dev, "Build Date Info = %#x\n", readl(base + 1*4)); in hci_extcap_vendor_NXP()
234 if (vendor_ext_caps[i].vendor == hci->vendor_mipi_id && in hci_extcap_vendor_specific()
242 dev_notice(&hci->master.dev, in hci_extcap_vendor_specific()
244 cap_id, hci->vendor_mipi_id); in hci_extcap_vendor_specific()
247 if (cap_length < vendor_cap_entry->min_length) { in hci_extcap_vendor_specific()
248 dev_err(&hci->master.dev, in hci_extcap_vendor_specific()
250 cap_id, cap_length, vendor_cap_entry->min_length); in hci_extcap_vendor_specific()
251 return -EINVAL; in hci_extcap_vendor_specific()
253 return vendor_cap_entry->parser(hci, base); in hci_extcap_vendor_specific()
258 void __iomem *curr_cap = hci->EXTCAPS_regs; in i3c_hci_parse_ext_caps()
275 dev_err(&hci->master.dev, in i3c_hci_parse_ext_caps()
278 err = -EINVAL; in i3c_hci_parse_ext_caps()
296 dev_notice(&hci->master.dev, in i3c_hci_parse_ext_caps()
298 } else if (cap_length < cap_entry->min_length) { in i3c_hci_parse_ext_caps()
299 dev_err(&hci->master.dev, in i3c_hci_parse_ext_caps()
301 cap_id, cap_length, cap_entry->min_length); in i3c_hci_parse_ext_caps()
302 err = -EINVAL; in i3c_hci_parse_ext_caps()
304 err = cap_entry->parser(hci, curr_cap); in i3c_hci_parse_ext_caps()