Something went wrong. Try again.
(I'm so sorry!) Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Something went wrong. Try again.
C
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178/* SPDX-License-Identifier: GPL-2.0-only *//* * PRU-ICSS sub-system specific definitions * * Copyright (C) 2014-2020 Texas Instruments Incorporated - http://www.ti.com/ * Suman Anna <s-anna@ti.com> */
#ifndef _PRUSS_DRIVER_H_#define _PRUSS_DRIVER_H_
#include <linux/mutex.h>#include <linux/remoteproc/pruss.h>#include <linux/types.h>#include <linux/err.h>
/* * enum pruss_gp_mux_sel - PRUSS GPI/O Mux modes for the * PRUSS_GPCFG0/1 registers * * NOTE: The below defines are the most common values, but there * are some exceptions like on 66AK2G, where the RESERVED and MII2 * values are interchanged. Also, this bit-field does not exist on * AM335x SoCs */enum pruss_gp_mux_sel { PRUSS_GP_MUX_SEL_GP, PRUSS_GP_MUX_SEL_ENDAT, PRUSS_GP_MUX_SEL_RESERVED, PRUSS_GP_MUX_SEL_SD, PRUSS_GP_MUX_SEL_MII2, PRUSS_GP_MUX_SEL_MAX,};
/* * enum pruss_gpi_mode - PRUSS GPI configuration modes, used * to program the PRUSS_GPCFG0/1 registers */enum pruss_gpi_mode { PRUSS_GPI_MODE_DIRECT, PRUSS_GPI_MODE_PARALLEL, PRUSS_GPI_MODE_28BIT_SHIFT, PRUSS_GPI_MODE_MII, PRUSS_GPI_MODE_MAX,};
/** * enum pru_type - PRU core type identifier * * @PRU_TYPE_PRU: Programmable Real-time Unit * @PRU_TYPE_RTU: Auxiliary Programmable Real-Time Unit * @PRU_TYPE_TX_PRU: Transmit Programmable Real-Time Unit * @PRU_TYPE_MAX: just keep this one at the end */enum pru_type { PRU_TYPE_PRU, PRU_TYPE_RTU, PRU_TYPE_TX_PRU, PRU_TYPE_MAX,};
/* * enum pruss_mem - PRUSS memory range identifiers */enum pruss_mem { PRUSS_MEM_DRAM0 = 0, PRUSS_MEM_DRAM1, PRUSS_MEM_SHRD_RAM2, PRUSS_MEM_MAX,};
/** * struct pruss_mem_region - PRUSS memory region structure * @va: kernel virtual address of the PRUSS memory region * @pa: physical (bus) address of the PRUSS memory region * @size: size of the PRUSS memory region */struct pruss_mem_region { void __iomem *va; phys_addr_t pa; size_t size;};
/** * struct pruss - PRUSS parent structure * @dev: pruss device pointer * @cfg_base: base iomap for CFG region * @cfg_regmap: regmap for config region * @mem_regions: data for each of the PRUSS memory regions * @mem_in_use: to indicate if memory resource is in use * @lock: mutex to serialize access to resources * @core_clk_mux: clk handle for PRUSS CORE_CLK_MUX * @iep_clk_mux: clk handle for PRUSS IEP_CLK_MUX */struct pruss { struct device *dev; void __iomem *cfg_base; struct regmap *cfg_regmap; struct pruss_mem_region mem_regions[PRUSS_MEM_MAX]; struct pruss_mem_region *mem_in_use[PRUSS_MEM_MAX]; struct mutex lock; /* PRU resource lock */ struct clk *core_clk_mux; struct clk *iep_clk_mux;};
#if IS_ENABLED(CONFIG_TI_PRUSS)
struct pruss *pruss_get(struct rproc *rproc);void pruss_put(struct pruss *pruss);int pruss_request_mem_region(struct pruss *pruss, enum pruss_mem mem_id, struct pruss_mem_region *region);int pruss_release_mem_region(struct pruss *pruss, struct pruss_mem_region *region);int pruss_cfg_get_gpmux(struct pruss *pruss, enum pruss_pru_id pru_id, u8 *mux);int pruss_cfg_set_gpmux(struct pruss *pruss, enum pruss_pru_id pru_id, u8 mux);int pruss_cfg_gpimode(struct pruss *pruss, enum pruss_pru_id pru_id, enum pruss_gpi_mode mode);int pruss_cfg_miirt_enable(struct pruss *pruss, bool enable);int pruss_cfg_xfr_enable(struct pruss *pruss, enum pru_type pru_type, bool enable);
#else
static inline struct pruss *pruss_get(struct rproc *rproc){ return ERR_PTR(-EOPNOTSUPP);}
static inline void pruss_put(struct pruss *pruss) { }
static inline int pruss_request_mem_region(struct pruss *pruss, enum pruss_mem mem_id, struct pruss_mem_region *region){ return -EOPNOTSUPP;}
static inline int pruss_release_mem_region(struct pruss *pruss, struct pruss_mem_region *region){ return -EOPNOTSUPP;}
static inline int pruss_cfg_get_gpmux(struct pruss *pruss, enum pruss_pru_id pru_id, u8 *mux){ return -EOPNOTSUPP;}
static inline int pruss_cfg_set_gpmux(struct pruss *pruss, enum pruss_pru_id pru_id, u8 mux){ return -EOPNOTSUPP;}
static inline int pruss_cfg_gpimode(struct pruss *pruss, enum pruss_pru_id pru_id, enum pruss_gpi_mode mode){ return -EOPNOTSUPP;}
static inline int pruss_cfg_miirt_enable(struct pruss *pruss, bool enable){ return -EOPNOTSUPP;}
static inline int pruss_cfg_xfr_enable(struct pruss *pruss, enum pru_type pru_type, bool enable){ return -EOPNOTSUPP;}
#endif /* CONFIG_TI_PRUSS */
#endif /* _PRUSS_DRIVER_H_ */