/* * 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,
};
/** * 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);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.