| /* |
| * stm.h |
| * |
| * Copyright (C) Intel 2011 |
| * |
| * This program is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License version 2 as |
| * published by the Free Software Foundation. |
| * |
| * This program is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| * GNU General Public License for more details. |
| * |
| * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| * |
| * The STM (Sytem Trace Macro) Unit driver configure trace output |
| * to the Intel Tangier PTI port and DWC3 USB xHCI controller |
| * out of the mobile device for analysis with a debugging tool |
| * (Lauterbach, Fido). This is part of a solution for the MIPI P1149.7, |
| * compact JTAG, standard and USB Debug-Class |
| * |
| * This header file will allow other parts of the OS to use the |
| * interface to write out it's contents for debugging a mobile system. |
| */ |
| |
| #ifndef _STM_H |
| #define _STM_H |
| |
| #include <linux/pci.h> |
| |
| /* STM_CTRL register bitmap */ |
| /** |
| * struct stm_ctrl - STM control block |
| * @usb_debug_en : STM needs to redirece the trace packet to the USB3 |
| * @pti_io_idle_threshold : threshold for disabling the IO clock. |
| * @pkt_transfer_size : asserts the *buff_avail signal after it has |
| * 1 or 2 KB of data in buffer |
| * @dis_dcu7_use : disables the useage of DCU7 instead of PTI_Disable |
| * @en_sw_ms : enables software master usage |
| * @mst_id_en : enables the PTI unit to suppress sending the Master Command |
| * @d64_cmd_en : PTI unit to use the D64 commands |
| * @pti_out_mode_sel |
| * 0 = PTI 4-bits legacy end user |
| * 1 = PTI 4-bits NiDnT |
| * 2 = PTI 16-bits |
| * 3 = PTI 12-bits |
| * 4 = PTI 8-bits |
| * @pti_out_en : PTI output enable muxselects that propagate |
| * to the FLIS to be enabled |
| * @lossy_mode_enable : Output Agent will continue to accept writes, |
| * even if the queuese are full. The data will be dropped and the |
| * dropped packet indicator will be incremented |
| * @time_stamp_enable : Enable time stamping the final packet in trace record. |
| */ |
| struct stm_ctrl { |
| union { |
| struct { |
| u32 time_stamp_enable:1; |
| u32 lossy_mode_enable:1; |
| u32 pti_out_en:1; |
| u32 reserved:1; |
| u32 pti_out_mode_sel:4; |
| u32 d64_cmd_en:1; |
| u32 mst_id_en:1; |
| u32 en_sw_ms:1; |
| u32 dis_dcu7_use:1; |
| u32 pkt_transfer_size:1; |
| u32 pti_io_idle_threshold:5; |
| u32 usb_debug_en:1; |
| u32 reserved31_19:13; |
| }; |
| u32 reg_word; |
| }; |
| } __packed; |
| |
| /** |
| * struct stm_usb3_ctrl - STM buffer USB3 hardware EBC |
| * @region_closure_threshold : This is the threshold for closing |
| * the 1KB region in the debug trace buffer. STM will wait for the |
| * configured time as specified in this field and then closes the region. |
| * The unit of this field is in 64 us. Eg when this field value is set |
| * to 0xffff, then it indicates 2 ms |
| * @empty_packets_threshold : When STM does not have data to send, |
| * it can send empty packets to keep the USB3 alive. This is useful |
| * in case of ISOC traffic, because in this mode the wake up latency |
| * is high. STM will send the configured number of empty packets as |
| * specified in this field. |
| */ |
| struct stm_usb3_ctrl { |
| union { |
| struct { |
| u32 region_closure_threshold:15; |
| u32 empty_packets_threshold:6; |
| u32 reserved31_21:11; |
| }; |
| u32 reg_word; |
| }; |
| } __packed; |
| |
| struct stm_dev { |
| unsigned long stm_addr; |
| unsigned long stm_reg_base; |
| unsigned long stm_trb_base; |
| void __iomem *stm_ioaddr; |
| void __iomem *trb_ioaddr; |
| struct stm_ctrl stm_ctrl_hwreg; |
| struct stm_usb3_ctrl stm_usb3_hwreg; |
| }; |
| |
| int stm_dev_init(struct pci_dev *pdev, struct stm_dev *dev_stm); |
| void stm_dev_clean(struct pci_dev *pdev, struct stm_dev *dev_stm); |
| |
| #endif /* _STM_H */ |