brintos

brintos / linux-shallow public Read only

0
0
Text · 3.6 KiB · 87a32b3 Raw
134 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 * Copyright (C) 2011 Texas Instruments Incorporated - https://www.ti.com/4 * Author: Rob Clark <rob@ti.com>5 *         Andy Gross <andy.gross@ti.com>6 */7#ifndef OMAP_DMM_TILER_H8#define OMAP_DMM_TILER_H9 10#include "omap_drv.h"11#include "tcm.h"12 13enum tiler_fmt {14	TILFMT_8BIT = 0,15	TILFMT_16BIT,16	TILFMT_32BIT,17	TILFMT_PAGE,18	TILFMT_NFORMATS19};20 21struct pat_area {22	u32 x0:8;23	u32 y0:8;24	u32 x1:8;25	u32 y1:8;26};27 28struct tiler_block {29	struct list_head alloc_node;	/* node for global block list */30	struct tcm_area area;		/* area */31	enum tiler_fmt fmt;		/* format */32};33 34/* bits representing the same slot in DMM-TILER hw-block */35#define SLOT_WIDTH_BITS         636#define SLOT_HEIGHT_BITS        637 38/* bits reserved to describe coordinates in DMM-TILER hw-block */39#define CONT_WIDTH_BITS         1440#define CONT_HEIGHT_BITS        1341 42/* calculated constants */43#define TILER_PAGE              (1 << (SLOT_WIDTH_BITS + SLOT_HEIGHT_BITS))44#define TILER_WIDTH             (1 << (CONT_WIDTH_BITS - SLOT_WIDTH_BITS))45#define TILER_HEIGHT            (1 << (CONT_HEIGHT_BITS - SLOT_HEIGHT_BITS))46 47/*48Table 15-11. Coding and Description of TILER Orientations49S Y X	Description				Alternate description500 0 0	0-degree view				Natural view510 0 1	0-degree view with vertical mirror 	180-degree view with horizontal mirror520 1 0	0-degree view with horizontal mirror 	180-degree view with vertical mirror530 1 1	180-degree view541 0 0	90-degree view with vertical mirror	270-degree view with horizontal mirror551 0 1	270-degree view561 1 0	90-degree view571 1 1	90-degree view with horizontal mirror	270-degree view with vertical mirror58 */59#define MASK_XY_FLIP		(1 << 31)60#define MASK_Y_INVERT		(1 << 30)61#define MASK_X_INVERT		(1 << 29)62#define SHIFT_ACC_MODE		2763#define MASK_ACC_MODE		364 65#define MASK(bits) ((1 << (bits)) - 1)66 67#define TILVIEW_8BIT    0x60000000u68#define TILVIEW_16BIT   (TILVIEW_8BIT  + VIEW_SIZE)69#define TILVIEW_32BIT   (TILVIEW_16BIT + VIEW_SIZE)70#define TILVIEW_PAGE    (TILVIEW_32BIT + VIEW_SIZE)71#define TILVIEW_END     (TILVIEW_PAGE  + VIEW_SIZE)72 73/* create tsptr by adding view orientation and access mode */74#define TIL_ADDR(x, orient, a)\75	((u32) (x) | (orient) | ((a) << SHIFT_ACC_MODE))76 77#ifdef CONFIG_DEBUG_FS78int tiler_map_show(struct seq_file *s, void *arg);79#endif80 81/* pin/unpin */82int tiler_pin(struct tiler_block *block, struct page **pages,83		u32 npages, u32 roll, bool wait);84int tiler_unpin(struct tiler_block *block);85 86/* reserve/release */87struct tiler_block *tiler_reserve_2d(enum tiler_fmt fmt, u16 w, u16 h,88				u16 align);89struct tiler_block *tiler_reserve_1d(size_t size);90int tiler_release(struct tiler_block *block);91 92/* utilities */93dma_addr_t tiler_ssptr(struct tiler_block *block);94dma_addr_t tiler_tsptr(struct tiler_block *block, u32 orient,95		u32 x, u32 y);96u32 tiler_stride(enum tiler_fmt fmt, u32 orient);97size_t tiler_size(enum tiler_fmt fmt, u16 w, u16 h);98size_t tiler_vsize(enum tiler_fmt fmt, u16 w, u16 h);99void tiler_align(enum tiler_fmt fmt, u16 *w, u16 *h);100u32 tiler_get_cpu_cache_flags(void);101bool dmm_is_available(void);102 103extern struct platform_driver omap_dmm_driver;104 105/* GEM bo flags -> tiler fmt */106static inline enum tiler_fmt gem2fmt(u32 flags)107{108	switch (flags & OMAP_BO_TILED_MASK) {109	case OMAP_BO_TILED_8:110		return TILFMT_8BIT;111	case OMAP_BO_TILED_16:112		return TILFMT_16BIT;113	case OMAP_BO_TILED_32:114		return TILFMT_32BIT;115	default:116		return TILFMT_PAGE;117	}118}119 120static inline bool validfmt(enum tiler_fmt fmt)121{122	switch (fmt) {123	case TILFMT_8BIT:124	case TILFMT_16BIT:125	case TILFMT_32BIT:126	case TILFMT_PAGE:127		return true;128	default:129		return false;130	}131}132 133#endif134