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