File Index
Files and directories
Sign in
FILE

ivpu_hw.h

File preview with syntax highlighting.

linux-6.19.14/drivers/accel/ivpu/ivpu_hw.h C
  1/* SPDX-License-Identifier: GPL-2.0-only */
  2/*
  3 * Copyright (C) 2020-2025 Intel Corporation
  4 */
  5
  6#ifndef __IVPU_HW_H__
  7#define __IVPU_HW_H__
  8
  9#include "ivpu_drv.h"
 10#include "ivpu_hw_btrs.h"
 11#include "ivpu_hw_ip.h"
 12
 13struct ivpu_addr_range {
 14	resource_size_t start;
 15	resource_size_t end;
 16};
 17
 18struct ivpu_hw_info {
 19	struct {
 20		bool (*btrs_irq_handler)(struct ivpu_device *vdev, int irq);
 21		bool (*ip_irq_handler)(struct ivpu_device *vdev, int irq);
 22	} irq;
 23	struct {
 24		struct ivpu_addr_range runtime;
 25		struct ivpu_addr_range global;
 26		struct ivpu_addr_range user;
 27		struct ivpu_addr_range shave;
 28		struct ivpu_addr_range dma;
 29	} ranges;
 30	struct {
 31		u8 min_ratio;
 32		u8 max_ratio;
 33		/*
 34		 * Pll ratio for the efficiency frequency. The VPU has optimum
 35		 * performance to power ratio at this frequency.
 36		 */
 37		u8 pn_ratio;
 38		u32 profiling_freq;
 39	} pll;
 40	struct {
 41		u32 grace_period[VPU_HWS_NUM_PRIORITY_BANDS];
 42		u32 process_quantum[VPU_HWS_NUM_PRIORITY_BANDS];
 43		u32 process_grace_period[VPU_HWS_NUM_PRIORITY_BANDS];
 44	} hws;
 45	u32 tile_fuse;
 46	u32 sku;
 47	u16 config;
 48	int dma_bits;
 49	ktime_t d0i3_entry_host_ts;
 50	u64 d0i3_entry_vpu_ts;
 51	atomic_t firewall_irq_counter;
 52};
 53
 54int ivpu_hw_init(struct ivpu_device *vdev);
 55int ivpu_hw_range_init(struct ivpu_device *vdev, struct ivpu_addr_range *range, u64 start,
 56		       u64 size);
 57int ivpu_hw_power_up(struct ivpu_device *vdev);
 58int ivpu_hw_power_down(struct ivpu_device *vdev);
 59int ivpu_hw_reset(struct ivpu_device *vdev);
 60int ivpu_hw_boot_fw(struct ivpu_device *vdev);
 61void ivpu_hw_profiling_freq_drive(struct ivpu_device *vdev, bool enable);
 62void ivpu_irq_handlers_init(struct ivpu_device *vdev);
 63void ivpu_hw_irq_enable(struct ivpu_device *vdev);
 64void ivpu_hw_irq_disable(struct ivpu_device *vdev);
 65irqreturn_t ivpu_hw_irq_handler(int irq, void *ptr);
 66bool ivpu_hw_uses_ecc_mca_signal(struct ivpu_device *vdev);
 67
 68static inline u32 ivpu_hw_btrs_irq_handler(struct ivpu_device *vdev, int irq)
 69{
 70	return vdev->hw->irq.btrs_irq_handler(vdev, irq);
 71}
 72
 73static inline u32 ivpu_hw_ip_irq_handler(struct ivpu_device *vdev, int irq)
 74{
 75	return vdev->hw->irq.ip_irq_handler(vdev, irq);
 76}
 77
 78static inline u64 ivpu_hw_range_size(const struct ivpu_addr_range *range)
 79{
 80	return range->end - range->start;
 81}
 82
 83static inline u32 ivpu_hw_dpu_max_freq_get(struct ivpu_device *vdev)
 84{
 85	return ivpu_hw_btrs_dpu_max_freq_get(vdev);
 86}
 87
 88static inline u32 ivpu_hw_dpu_freq_get(struct ivpu_device *vdev)
 89{
 90	return ivpu_hw_btrs_dpu_freq_get(vdev);
 91}
 92
 93static inline void ivpu_hw_irq_clear(struct ivpu_device *vdev)
 94{
 95	ivpu_hw_ip_irq_clear(vdev);
 96}
 97
 98static inline u32 ivpu_hw_profiling_freq_get(struct ivpu_device *vdev)
 99{
100	return vdev->hw->pll.profiling_freq;
101}
102
103static inline void ivpu_hw_diagnose_failure(struct ivpu_device *vdev)
104{
105	ivpu_hw_ip_diagnose_failure(vdev);
106	ivpu_hw_btrs_diagnose_failure(vdev);
107}
108
109static inline u32 ivpu_hw_telemetry_offset_get(struct ivpu_device *vdev)
110{
111	return ivpu_hw_btrs_telemetry_offset_get(vdev);
112}
113
114static inline u32 ivpu_hw_telemetry_size_get(struct ivpu_device *vdev)
115{
116	return ivpu_hw_btrs_telemetry_size_get(vdev);
117}
118
119static inline u32 ivpu_hw_telemetry_enable_get(struct ivpu_device *vdev)
120{
121	return ivpu_hw_btrs_telemetry_enable_get(vdev);
122}
123
124static inline bool ivpu_hw_is_idle(struct ivpu_device *vdev)
125{
126	return ivpu_hw_btrs_is_idle(vdev);
127}
128
129static inline int ivpu_hw_wait_for_idle(struct ivpu_device *vdev)
130{
131	return ivpu_hw_btrs_wait_for_idle(vdev);
132}
133
134static inline void ivpu_hw_ipc_tx_set(struct ivpu_device *vdev, u32 vpu_addr)
135{
136	ivpu_hw_ip_ipc_tx_set(vdev, vpu_addr);
137}
138
139static inline void ivpu_hw_db_set(struct ivpu_device *vdev, u32 db_id)
140{
141	ivpu_hw_ip_db_set(vdev, db_id);
142}
143
144static inline u32 ivpu_hw_ipc_rx_addr_get(struct ivpu_device *vdev)
145{
146	return ivpu_hw_ip_ipc_rx_addr_get(vdev);
147}
148
149static inline u32 ivpu_hw_ipc_rx_count_get(struct ivpu_device *vdev)
150{
151	return ivpu_hw_ip_ipc_rx_count_get(vdev);
152}
153
154#endif /* __IVPU_HW_H__ */
~/ Read-only file preview.