mirror of
https://github.com/rd-stuffs/msm-4.14.git
synced 2025-02-20 11:45:48 +08:00
* refs/heads/tmp-84afceb: Linux 4.14.158 net: fec: fix clock count mis-match platform/x86: hp-wmi: Fix ACPI errors caused by passing 0 as input size platform/x86: hp-wmi: Fix ACPI errors caused by too small buffer ASoC: stm32: i2s: fix IRQ clearing ASoC: stm32: i2s: fix 16 bit format support ASoC: stm32: i2s: fix dma configuration pinctrl: stm32: fix memory leak issue mailbox: mailbox-test: fix null pointer if no mmio hwrng: stm32 - fix unbalanced pm_runtime_enable media: stm32-dcmi: fix DMA corruption when stopping streaming crypto: stm32/hash - Fix hmac issue more than 256 bytes HID: core: check whether Usage Page item is after Usage ID items futex: Prevent exit livelock futex: Provide distinct return value when owner is exiting futex: Add mutex around futex exit futex: Provide state handling for exec() as well futex: Sanitize exit state handling futex: Mark the begin of futex exit explicitly futex: Set task::futex_state to DEAD right after handling futex exit futex: Split futex_mm_release() for exit/exec exit/exec: Seperate mm_release() futex: Replace PF_EXITPIDONE with a state futex: Move futex exit handling into futex code futex: Prevent robust futex exit race y2038: futex: Move compat implementation into futex.c mtd: spi-nor: cast to u64 to avoid uint overflows mtd: rawnand: atmel: fix possible object reference leak mtd: rawnand: atmel: Fix spelling mistake in error message net: macb driver, check for SKBTX_HW_TSTAMP net: macb: Fix SUBNS increment and increase resolution watchdog: sama5d4: fix WDD value to be always set to max ext4: add more paranoia checking in ext4_expand_extra_isize handling net: sched: fix `tc -s class show` no bstats on class with nolock subqueues sctp: cache netns in sctp_ep_common tipc: fix link name length check openvswitch: remove another BUG_ON() openvswitch: drop unneeded BUG_ON() in ovs_flow_cmd_build_info() slip: Fix use-after-free Read in slip_open openvswitch: fix flow command message size net: psample: fix skb_over_panic macvlan: schedule bc_work even if error media: atmel: atmel-isc: fix INIT_WORK misplacement media: atmel: atmel-isc: fix asd memory allocation pwm: Clear chip_data in pwm_put() net: macb: fix error format in dev_err() media: v4l2-ctrl: fix flags for DO_WHITE_BALANCE xfrm: Fix memleak on xfrm state destroy mei: bus: prefix device names on bus with the bus name USB: serial: ftdi_sio: add device IDs for U-Blox C099-F9P staging: rtl8723bs: Add 024c:0525 to the list of SDIO device-ids staging: rtl8723bs: Drop ACPI device ids staging: rtl8192e: fix potential use after free clk: at91: generated: set audio_pll_allowed in at91_clk_register_generated() clk: at91: fix update bit maps on CFG_MOR write mm, gup: add missing refcount overflow checks on s390 mtd: Remove a debug trace in mtdpart.c powerpc/pseries/dlpar: Fix a missing check in dlpar_parse_cc_property() scsi: libsas: Check SMP PHY control function result ACPI / APEI: Switch estatus pool to use vmalloc memory ACPI / APEI: Don't wait to serialise with oops messages when panic()ing scsi: libsas: Support SATA PHY connection rate unmatch fixing during discovery apparmor: delete the dentry in aafs_remove() to avoid a leak iommu/amd: Fix NULL dereference bug in match_hid_uid net: hns3: Change fw error code NOT_EXEC to NOT_SUPPORTED bpf: drop refcount if bpf_map_new_fd() fails in map_create() kvm: properly check debugfs dentry before using it net: dev: Use unsigned integer as an argument to left-shift bpf: decrease usercnt if bpf_map_new_fd() fails in bpf_map_get_fd_by_id() sctp: don't compare hb_timer expire date before starting it net: fix possible overflow in __sk_mem_raise_allocated() sfc: initialise found bitmap in efx_ef10_mtd_probe tipc: fix skb may be leaky in tipc_link_input blktrace: Show requests without sector net/smc: prevent races between smc_lgr_terminate() and smc_conn_free() decnet: fix DN_IFREQ_SIZE ip_tunnel: Make none-tunnel-dst tunnel port work with lwtunnel sfc: suppress duplicate nvmem partition types in efx_ef10_mtd_probe gpu: ipu-v3: pre: don't trigger update if buffer address doesn't change serial: 8250: Fix serial8250 initialization crash net/core/neighbour: fix kmemleak minimal reference count for hash tables PCI/MSI: Return -ENOSPC from pci_alloc_irq_vectors_affinity() net/core/neighbour: tell kmemleak about hash tables tipc: fix memory leak in tipc_nl_compat_publ_dump mtd: Check add_mtd_device() ret code lib/genalloc.c: include vmalloc.h drivers/base/platform.c: kmemleak ignore a known leak fork: fix some -Wmissing-prototypes warnings lib/genalloc.c: use vzalloc_node() to allocate the bitmap lib/genalloc.c: fix allocation of aligned buffer from non-aligned chunk vmscan: return NODE_RECLAIM_NOSCAN in node_reclaim() when CONFIG_NUMA is n ocfs2: clear journal dirty flag after shutdown journal net/wan/fsl_ucc_hdlc: Avoid double free in ucc_hdlc_probe() tipc: fix a missing check of genlmsg_put atl1e: checking the status of atl1e_write_phy_reg net: dsa: bcm_sf2: Propagate error value from mdio_write net: stmicro: fix a missing check of clk_prepare net: (cpts) fix a missing check of clk_prepare um: Make GCOV depend on !KCOV f2fs: fix to dirty inode synchronously net/net_namespace: Check the return value of register_pernet_subsys() net/netlink_compat: Fix a missing check of nla_parse_nested pwm: clps711x: Fix period calculation crypto: mxc-scc - fix build warnings on ARM64 powerpc/pseries: Fix node leak in update_lmb_associativity_index() powerpc/83xx: handle machine check caused by watchdog timer regulator: tps65910: fix a missing check of return value IB/rxe: Make counters thread safe drbd: fix print_st_err()'s prototype to match the definition drbd: do not block when adjusting "disk-options" while IO is frozen drbd: reject attach of unsuitable uuids even if connected drbd: ignore "all zero" peer volume sizes in handshake powerpc/powernv/eeh/npu: Fix uninitialized variables in opal_pci_eeh_freeze_status vfio/spapr_tce: Get rid of possible infinite loop powerpc/44x/bamboo: Fix PCI range powerpc/mm: Make NULL pointer deferences explicit on bad page faults. powerpc/prom: fix early DEBUG messages powerpc/perf: Fix unit_sel/cache_sel checks ath6kl: Fix off by one error in scan completion ath6kl: Only use match sets when firmware supports it scsi: csiostor: fix incorrect dma device in case of vport scsi: qla2xxx: deadlock by configfs_depend_item RDMA/srp: Propagate ib_post_send() failures to the SCSI mid-layer openrisc: Fix broken paths to arch/or32 serial: max310x: Fix tx_empty() callback Bluetooth: hci_bcm: Handle specific unknown packets after firmware loading drivers/regulator: fix a missing check of return value powerpc/xmon: fix dump_segments() powerpc/book3s/32: fix number of bats in p/v_block_mapped() vxlan: Fix error path in __vxlan_dev_create() clocksource/drivers/fttmr010: Fix invalid interrupt register access IB/qib: Fix an error code in qib_sdma_verbs_send() xfs: Fix bulkstat compat ioctls on x32 userspace. xfs: Align compat attrlist_by_handle with native implementation. gfs2: take jdata unstuff into account in do_grow dm flakey: Properly corrupt multi-page bios. HID: doc: fix wrong data structure reference for UHID_OUTPUT pinctrl: sh-pfc: sh7734: Fix shifted values in IPSR10 pinctrl: sh-pfc: sh7264: Fix PFCR3 and PFCR0 register configuration KVM: s390: unregister debug feature on failing arch init bnxt_en: query force speeds before disabling autoneg mode. bnxt_en: Return linux standard errors in bnxt_ethtool.c exofs_mount(): fix leaks on failure exits net/mlx5: Continue driver initialization despite debugfs failure pinctrl: xway: fix gpio-hog related boot issues vfio-mdev/samples: Use u8 instead of char for handle functions xen/pciback: Check dev_data before using it kprobes/x86/xen: blacklist non-attachable xen interrupt functions serial: 8250: Rate limit serial port rx interrupts during input overruns HID: intel-ish-hid: fixes incorrect error handling btrfs: only track ref_heads in delayed_ref_updates mtd: rawnand: sunxi: Write pageprog related opcodes to WCMD_SET mmc: meson-gx: make sure the descriptor is stopped on errors VSOCK: bind to random port for VMADDR_PORT_ANY kvm: vmx: Set IA32_TSC_AUX for legacy mode guests gpiolib: Fix return value of gpio_to_desc() stub if !GPIOLIB iwlwifi: move iwl_nvm_check_version() into dvm microblaze: move "... is ready" messages to arch/microblaze/Makefile microblaze: adjust the help to the real behavior ubi: Do not drop UBI device reference before using ubi: Put MTD device after it is not used xfs: require both realtime inodes to mount rtl818x: fix potential use after free mwifiex: debugfs: correct histogram spacing, formatting mwifiex: fix potential NULL dereference and use after free crypto: user - support incremental algorithm dumps scsi: lpfc: Enable Management features for IF_TYPE=6 ACPI / LPSS: Ignore acpi_device_fix_up_power() return value ARM: ks8695: fix section mismatch warning PM / AVS: SmartReflex: NULL check before some freeing functions is not needed RDMA/vmw_pvrdma: Use atomic memory allocation in create AH ARM: OMAP1: fix USB configuration for device-only setups arm64: smp: Handle errors reported by the firmware arm64: mm: Prevent mismatched 52-bit VA support parisc: Fix HP SDC hpa address output parisc: Fix serio address output ARM: dts: imx53-voipac-dmm-668: Fix memory node duplication ARM: debug-imx: only define DEBUG_IMX_UART_PORT if needed ARM: dts: Fix up SQ201 flash access scsi: lpfc: Fix dif and first burst use in write commands scsi: lpfc: Fix kernel Oops due to null pring pointers pwm: bcm-iproc: Prevent unloading the driver module while in use block: drbd: remove a stray unlock in __drbd_send_protocol() mac80211: fix station inactive_time shortly after boot ceph: return -EINVAL if given fsc mount option on kernel w/o support net: bcmgenet: reapply manual settings to the PHY scripts/gdb: fix debugging modules compiled with hot/cold partitioning watchdog: meson: Fix the wrong value of left time can: rx-offload: can_rx_offload_irq_offload_fifo(): continue on error can: rx-offload: can_rx_offload_irq_offload_timestamp(): continue on error can: rx-offload: can_rx_offload_offload_one(): use ERR_PTR() to propagate error value in case of errors can: rx-offload: can_rx_offload_offload_one(): increment rx_fifo_errors on queue overflow or OOM can: rx-offload: can_rx_offload_offload_one(): do not increase the skb_queue beyond skb_queue_len_max can: rx-offload: can_rx_offload_queue_tail(): fix error handling, avoid skb mem leak can: c_can: D_CAN: c_can_chip_config(): perform a sofware reset on open can: peak_usb: report bus recovery as well bridge: ebtables: don't crash when using dnat target in output chains net: fec: add missed clk_disable_unprepare in remove clk: ti: dra7-atl-clock: Remove ti_clk_add_alias call x86/resctrl: Prevent NULL pointer dereference when reading mondata idr: Fix idr_alloc_u32 on 32-bit systems clk: sunxi-ng: a80: fix the zero'ing of bits 16 and 18 clk: at91: avoid sleeping early reset: fix reset_control_ops kerneldoc comment clk: samsung: exynos5420: Preserve PLL configuration during suspend/resume ASoC: kirkwood: fix external clock probe defer reset: Fix memory leak in reset_control_array_put() ASoC: compress: fix unsigned integer overflow check ASoC: msm8916-wcd-analog: Fix RX1 selection in RDAC2 MUX clk: meson: gxbb: let sar_adc_clk_div set the parent clock rate Revert "KVM: nVMX: reset cache/shadows when switching loaded VMCS" UPSTREAM: dt-bindings: arm: coresight: Add support for coresight-loses-context-with-cpu BACKPORT: coresight: etm4x: Save/restore state across CPU low power states BACKPORT: ARM: 8900/1: UNWINDER_FRAME_POINTER implementation for Clang Conflicts: Documentation/devicetree/bindings/arm/coresight.txt arch/arm/Makefile drivers/hid/hid-core.c kernel/exit.c Reverted the downstream patch "HID: core: add usage_page_preceding flag for hid_concatenate_usage_page()" as original issue got fixed with upstream changes. Change-Id: I3b833825b3d1104fa07378caef144639074d0a0d Signed-off-by: Srinivasarao P <spathi@codeaurora.org>
389 lines
13 KiB
C
389 lines
13 KiB
C
/* Copyright (c) 2012, 2017-2019, The Linux Foundation. All rights reserved.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 and
|
|
* only 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.
|
|
*/
|
|
|
|
#ifndef _LINUX_CORESIGHT_H
|
|
#define _LINUX_CORESIGHT_H
|
|
|
|
#include <linux/device.h>
|
|
#include <linux/perf_event.h>
|
|
#include <linux/sched.h>
|
|
|
|
/* Peripheral id registers (0xFD0-0xFEC) */
|
|
#define CORESIGHT_PERIPHIDR4 0xfd0
|
|
#define CORESIGHT_PERIPHIDR5 0xfd4
|
|
#define CORESIGHT_PERIPHIDR6 0xfd8
|
|
#define CORESIGHT_PERIPHIDR7 0xfdC
|
|
#define CORESIGHT_PERIPHIDR0 0xfe0
|
|
#define CORESIGHT_PERIPHIDR1 0xfe4
|
|
#define CORESIGHT_PERIPHIDR2 0xfe8
|
|
#define CORESIGHT_PERIPHIDR3 0xfeC
|
|
/* Component id registers (0xFF0-0xFFC) */
|
|
#define CORESIGHT_COMPIDR0 0xff0
|
|
#define CORESIGHT_COMPIDR1 0xff4
|
|
#define CORESIGHT_COMPIDR2 0xff8
|
|
#define CORESIGHT_COMPIDR3 0xffC
|
|
|
|
#define ETM_ARCH_V3_3 0x23
|
|
#define ETM_ARCH_V3_5 0x25
|
|
#define PFT_ARCH_V1_0 0x30
|
|
#define PFT_ARCH_V1_1 0x31
|
|
|
|
#define CORESIGHT_UNLOCK 0xc5acce55
|
|
|
|
extern struct bus_type coresight_bustype;
|
|
|
|
enum coresight_dev_type {
|
|
CORESIGHT_DEV_TYPE_NONE,
|
|
CORESIGHT_DEV_TYPE_SINK,
|
|
CORESIGHT_DEV_TYPE_LINK,
|
|
CORESIGHT_DEV_TYPE_LINKSINK,
|
|
CORESIGHT_DEV_TYPE_SOURCE,
|
|
CORESIGHT_DEV_TYPE_HELPER,
|
|
};
|
|
|
|
enum coresight_dev_subtype_sink {
|
|
CORESIGHT_DEV_SUBTYPE_SINK_NONE,
|
|
CORESIGHT_DEV_SUBTYPE_SINK_PORT,
|
|
CORESIGHT_DEV_SUBTYPE_SINK_BUFFER,
|
|
};
|
|
|
|
enum coresight_dev_subtype_link {
|
|
CORESIGHT_DEV_SUBTYPE_LINK_NONE,
|
|
CORESIGHT_DEV_SUBTYPE_LINK_MERG,
|
|
CORESIGHT_DEV_SUBTYPE_LINK_SPLIT,
|
|
CORESIGHT_DEV_SUBTYPE_LINK_FIFO,
|
|
};
|
|
|
|
enum coresight_dev_subtype_source {
|
|
CORESIGHT_DEV_SUBTYPE_SOURCE_NONE,
|
|
CORESIGHT_DEV_SUBTYPE_SOURCE_PROC,
|
|
CORESIGHT_DEV_SUBTYPE_SOURCE_BUS,
|
|
CORESIGHT_DEV_SUBTYPE_SOURCE_SOFTWARE,
|
|
};
|
|
|
|
enum coresight_dev_subtype_helper {
|
|
CORESIGHT_DEV_SUBTYPE_HELPER_NONE,
|
|
CORESIGHT_DEV_SUBTYPE_HELPER_CATU,
|
|
};
|
|
|
|
/**
|
|
* union coresight_dev_subtype - further characterisation of a type
|
|
* @sink_subtype: type of sink this component is, as defined
|
|
* by @coresight_dev_subtype_sink.
|
|
* @link_subtype: type of link this component is, as defined
|
|
* by @coresight_dev_subtype_link.
|
|
* @source_subtype: type of source this component is, as defined
|
|
* by @coresight_dev_subtype_source.
|
|
* @helper_subtype: type of helper this component is, as defined
|
|
* by @coresight_dev_subtype_helper.
|
|
*/
|
|
union coresight_dev_subtype {
|
|
/* We have some devices which acts as LINK and SINK */
|
|
struct {
|
|
enum coresight_dev_subtype_sink sink_subtype;
|
|
enum coresight_dev_subtype_link link_subtype;
|
|
};
|
|
enum coresight_dev_subtype_source source_subtype;
|
|
enum coresight_dev_subtype_helper helper_subtype;
|
|
};
|
|
|
|
/**
|
|
* struct coresight_reg_clk - regulators and clocks need by coresight
|
|
* @nr_reg: number of regulators
|
|
* @nr_clk: number of clocks
|
|
* @reg: regulator list
|
|
* @clk: clock list
|
|
*/
|
|
struct coresight_reg_clk {
|
|
int nr_reg;
|
|
int nr_clk;
|
|
struct regulator **reg;
|
|
struct clk **clk;
|
|
};
|
|
|
|
/**
|
|
* struct coresight_platform_data - data harvested from the DT specification
|
|
* @cpu: the CPU a source belongs to. Only applicable for ETM/PTMs.
|
|
* @name: name of the component as shown under sysfs.
|
|
* @nr_inport: number of input ports for this component.
|
|
* @outports: list of remote endpoint port number.
|
|
* @source_names:name of all source components connected to this device.
|
|
* @child_names:name of all child components connected to this device.
|
|
* @child_ports:child component port number the current component is
|
|
connected to.
|
|
* @nr_outport: number of output ports for this component.
|
|
* @clk: The clock this component is associated to.
|
|
* @reg_clk: as defined by @coresight_reg_clk.
|
|
*/
|
|
struct coresight_platform_data {
|
|
int cpu;
|
|
const char *name;
|
|
int nr_inport;
|
|
int *outports;
|
|
const char **source_names;
|
|
const char **child_names;
|
|
int *child_ports;
|
|
int nr_outport;
|
|
struct clk *clk;
|
|
struct coresight_reg_clk *reg_clk;
|
|
};
|
|
|
|
/**
|
|
* struct coresight_desc - description of a component required from drivers
|
|
* @type: as defined by @coresight_dev_type.
|
|
* @subtype: as defined by @coresight_dev_subtype.
|
|
* @ops: generic operations for this component, as defined
|
|
by @coresight_ops.
|
|
* @pdata: platform data collected from DT.
|
|
* @dev: The device entity associated to this component.
|
|
* @groups: operations specific to this component. These will end up
|
|
in the component's sysfs sub-directory.
|
|
*/
|
|
struct coresight_desc {
|
|
enum coresight_dev_type type;
|
|
union coresight_dev_subtype subtype;
|
|
const struct coresight_ops *ops;
|
|
struct coresight_platform_data *pdata;
|
|
struct device *dev;
|
|
const struct attribute_group **groups;
|
|
};
|
|
|
|
/**
|
|
* struct coresight_connection - representation of a single connection
|
|
* @outport: a connection's output port number.
|
|
* @source_name:source component's name.
|
|
* @chid_name: remote component's name.
|
|
* @child_port: remote component's port number @output is connected to.
|
|
* @child_dev: a @coresight_device representation of the component
|
|
connected to @outport.
|
|
*/
|
|
struct coresight_connection {
|
|
int outport;
|
|
const char *source_name;
|
|
const char *child_name;
|
|
int child_port;
|
|
struct coresight_device *child_dev;
|
|
};
|
|
|
|
/**
|
|
* struct coresight_device - representation of a device as used by the framework
|
|
* @conns: array of coresight_connections associated to this component.
|
|
* @nr_inport: number of input port associated to this component.
|
|
* @nr_outport: number of output port associated to this component.
|
|
* @type: as defined by @coresight_dev_type.
|
|
* @subtype: as defined by @coresight_dev_subtype.
|
|
* @ops: generic operations for this component, as defined
|
|
by @coresight_ops.
|
|
* @dev: The device entity associated to this component.
|
|
* @refcnt: keep track of what is in use.
|
|
* @orphan: true if the component has connections that haven't been linked.
|
|
* @enable: 'true' if component is currently part of an active path.
|
|
* @activated: 'true' only if a _sink_ has been activated. A sink can be
|
|
* activated but not yet enabled. Enabling for a _sink_
|
|
* happens when a source has been selected for that it.
|
|
* @reg_clk: as defined by @coresight_reg_clk.
|
|
* @ea: Device attribute for sink representation under PMU directory.
|
|
*/
|
|
struct coresight_device {
|
|
struct coresight_connection *conns;
|
|
int nr_inport;
|
|
int nr_outport;
|
|
enum coresight_dev_type type;
|
|
union coresight_dev_subtype subtype;
|
|
const struct coresight_ops *ops;
|
|
struct device dev;
|
|
atomic_t *refcnt;
|
|
struct coresight_path *node;
|
|
bool orphan;
|
|
bool enable; /* true only if configured as part of a path */
|
|
/* sink specific fields */
|
|
bool activated; /* true only if a sink is part of a path */
|
|
struct coresight_reg_clk *reg_clk;
|
|
struct dev_ext_attribute *ea;
|
|
};
|
|
|
|
#define to_coresight_device(d) container_of(d, struct coresight_device, dev)
|
|
|
|
#define source_ops(csdev) csdev->ops->source_ops
|
|
#define sink_ops(csdev) csdev->ops->sink_ops
|
|
#define link_ops(csdev) csdev->ops->link_ops
|
|
#define helper_ops(csdev) csdev->ops->helper_ops
|
|
|
|
/**
|
|
* struct coresight_ops_sink - basic operations for a sink
|
|
* Operations available for sinks
|
|
* @enable: enables the sink.
|
|
* @disable: disables the sink.
|
|
* @alloc_buffer: initialises perf's ring buffer for trace collection.
|
|
* @free_buffer: release memory allocated in @get_config.
|
|
* @update_buffer: update buffer pointers after a trace session.
|
|
*/
|
|
struct coresight_ops_sink {
|
|
int (*enable)(struct coresight_device *csdev, u32 mode, void *data);
|
|
int (*disable)(struct coresight_device *csdev);
|
|
void *(*alloc_buffer)(struct coresight_device *csdev,
|
|
struct perf_event *event, void **pages,
|
|
int nr_pages, bool overwrite);
|
|
void (*free_buffer)(void *config);
|
|
unsigned long (*update_buffer)(struct coresight_device *csdev,
|
|
struct perf_output_handle *handle,
|
|
void *sink_config);
|
|
void (*abort)(struct coresight_device *csdev);
|
|
};
|
|
|
|
/**
|
|
* struct coresight_ops_link - basic operations for a link
|
|
* Operations available for links.
|
|
* @enable: enables flow between iport and oport.
|
|
* @disable: disables flow between iport and oport.
|
|
*/
|
|
struct coresight_ops_link {
|
|
int (*enable)(struct coresight_device *csdev, int iport, int oport);
|
|
void (*disable)(struct coresight_device *csdev, int iport, int oport);
|
|
};
|
|
|
|
/**
|
|
* struct coresight_ops_source - basic operations for a source
|
|
* Operations available for sources.
|
|
* @cpu_id: returns the value of the CPU number this component
|
|
* is associated to.
|
|
* @trace_id: returns the value of the component's trace ID as known
|
|
* to the HW.
|
|
* @enable: enables tracing for a source.
|
|
* @disable: disables tracing for a source.
|
|
*/
|
|
struct coresight_ops_source {
|
|
int (*cpu_id)(struct coresight_device *csdev);
|
|
int (*trace_id)(struct coresight_device *csdev);
|
|
int (*enable)(struct coresight_device *csdev,
|
|
struct perf_event *event, u32 mode);
|
|
void (*disable)(struct coresight_device *csdev,
|
|
struct perf_event *event);
|
|
};
|
|
|
|
/**
|
|
* struct coresight_ops_helper - Operations for a helper device.
|
|
*
|
|
* All operations could pass in a device specific data, which could
|
|
* help the helper device to determine what to do.
|
|
*
|
|
* @enable : Enable the device
|
|
* @disable : Disable the device
|
|
*/
|
|
struct coresight_ops_helper {
|
|
int (*enable)(struct coresight_device *csdev, void *data);
|
|
int (*disable)(struct coresight_device *csdev, void *data);
|
|
};
|
|
|
|
struct coresight_ops {
|
|
const struct coresight_ops_sink *sink_ops;
|
|
const struct coresight_ops_link *link_ops;
|
|
const struct coresight_ops_source *source_ops;
|
|
const struct coresight_ops_helper *helper_ops;
|
|
};
|
|
|
|
#ifdef CONFIG_CORESIGHT
|
|
extern struct coresight_device *
|
|
coresight_register(struct coresight_desc *desc);
|
|
extern void coresight_unregister(struct coresight_device *csdev);
|
|
extern int coresight_enable(struct coresight_device *csdev);
|
|
extern void coresight_disable(struct coresight_device *csdev);
|
|
extern int coresight_timeout(void __iomem *addr, u32 offset,
|
|
int position, int value);
|
|
extern void coresight_abort(void);
|
|
extern void coresight_disable_reg_clk(struct coresight_device *csdev);
|
|
extern int coresight_enable_reg_clk(struct coresight_device *csdev);
|
|
|
|
extern int coresight_claim_device(void __iomem *base);
|
|
extern int coresight_claim_device_unlocked(void __iomem *base);
|
|
|
|
extern void coresight_disclaim_device(void __iomem *base);
|
|
extern void coresight_disclaim_device_unlocked(void __iomem *base);
|
|
|
|
extern bool coresight_loses_context_with_cpu(struct device *dev);
|
|
#else
|
|
static inline struct coresight_device *
|
|
coresight_register(struct coresight_desc *desc) { return NULL; }
|
|
static inline void coresight_unregister(struct coresight_device *csdev) {}
|
|
static inline int
|
|
coresight_enable(struct coresight_device *csdev) { return -ENOSYS; }
|
|
static inline void coresight_disable(struct coresight_device *csdev) {}
|
|
static inline int coresight_timeout(void __iomem *addr, u32 offset,
|
|
int position, int value) { return 1; }
|
|
static inline void coresight_abort(void) {}
|
|
static inline void coresight_disable_reg_clk(struct coresight_device *csdev) {}
|
|
static inline int coresight_enable_reg_clk(struct coresight_device *csdev)
|
|
{
|
|
return -EINVAL;
|
|
}
|
|
static inline int coresight_claim_device_unlocked(void __iomem *base)
|
|
{
|
|
return -EINVAL;
|
|
}
|
|
|
|
static inline int coresight_claim_device(void __iomem *base)
|
|
{
|
|
return -EINVAL;
|
|
}
|
|
|
|
static inline void coresight_disclaim_device(void __iomem *base) {}
|
|
static inline void coresight_disclaim_device_unlocked(void __iomem *base) {}
|
|
|
|
static inline bool coresight_loses_context_with_cpu(struct device *dev)
|
|
{
|
|
return false;
|
|
}
|
|
#endif
|
|
|
|
#if defined(CONFIG_OF) && defined(CONFIG_CORESIGHT)
|
|
extern int of_coresight_get_cpu(const struct device_node *node);
|
|
extern struct coresight_platform_data *
|
|
of_get_coresight_platform_data(struct device *dev,
|
|
const struct device_node *node);
|
|
extern struct coresight_cti_data *of_get_coresight_cti_data(
|
|
struct device *dev, struct device_node *node);
|
|
extern int of_get_coresight_csr_name(struct device_node *node,
|
|
const char **csr_name);
|
|
|
|
#else
|
|
static inline int of_coresight_get_cpu(const struct device_node *node)
|
|
{ return 0; }
|
|
static inline struct coresight_platform_data *of_get_coresight_platform_data(
|
|
struct device *dev, const struct device_node *node) { return NULL; }
|
|
static inline struct coresight_cti_data *of_get_coresight_cti_data(
|
|
struct device *dev, struct device_node *node) { return NULL; }
|
|
static inline int of_get_coresight_csr_name(struct device_node *node,
|
|
const char **csr_name){ return -EINVAL; }
|
|
#endif
|
|
|
|
#ifdef CONFIG_PID_NS
|
|
static inline unsigned long
|
|
coresight_vpid_to_pid(unsigned long vpid)
|
|
{
|
|
struct task_struct *task = NULL;
|
|
unsigned long pid = 0;
|
|
|
|
rcu_read_lock();
|
|
task = find_task_by_vpid(vpid);
|
|
if (task)
|
|
pid = task_pid_nr(task);
|
|
rcu_read_unlock();
|
|
|
|
return pid;
|
|
}
|
|
#else
|
|
static inline unsigned long
|
|
coresight_vpid_to_pid(unsigned long vpid) { return vpid; }
|
|
#endif
|
|
|
|
#endif
|