From 36cbfc3594048f2cd10b3cd231b2b6f000fbaf53 Mon Sep 17 00:00:00 2001 From: Andy Gross Date: Tue, 7 Jun 2011 16:54:39 -0500 Subject: TILER: Simplify alignment and offset usage in driver Slim down APIs by removing alignment and offset. Simplified calculations based off of align/offset. Change-Id: I7d7bdb89668a7f553bbbd836f5dc45f6beceab25 Signed-off-by: Andy Gross --- arch/arm/mach-omap2/include/mach/tiler.h | 31 +++++++------------------------ 1 file changed, 7 insertions(+), 24 deletions(-) (limited to 'arch/arm') diff --git a/arch/arm/mach-omap2/include/mach/tiler.h b/arch/arm/mach-omap2/include/mach/tiler.h index bbb4108..6e25dcc 100644 --- a/arch/arm/mach-omap2/include/mach/tiler.h +++ b/arch/arm/mach-omap2/include/mach/tiler.h @@ -139,13 +139,10 @@ u32 tiler_virt2phys(u32 usr); * must be 0) with the tiler block information. 'height' must be 1 * for 1D block. * @param fmt TILER block format - * @param align block alignment (default: normally PAGE_SIZE) - * @param offs block offset * * @return error status */ -s32 tiler_alloc(struct tiler_block_t *blk, enum tiler_fmt fmt, u32 align, - u32 offs); +s32 tiler_alloc(struct tiler_block_t *blk, enum tiler_fmt fmt); /** * Reserves a 1D or 2D TILER block area and memory for a set process and group @@ -155,15 +152,13 @@ s32 tiler_alloc(struct tiler_block_t *blk, enum tiler_fmt fmt, u32 align, * must be 0) with the tiler block information. 'height' must be 1 * for 1D block. * @param fmt TILER block format - * @param align block alignment (default: normally PAGE_SIZE) - * @param offs block offset * @param gid group ID * @param pid process ID * * @return error status */ -s32 tiler_allocx(struct tiler_block_t *blk, enum tiler_fmt fmt, u32 align, - u32 offs, u32 gid, pid_t pid); +s32 tiler_allocx(struct tiler_block_t *blk, enum tiler_fmt fmt, + u32 gid, pid_t pid); /** * Mmaps a portion of a tiler block to a virtual address. Use this method in @@ -259,11 +254,8 @@ void tiler_free(struct tiler_block_t *blk); * @param fmt TILER format * @param width block width * @param height block height (must be 1 for 1D) - * @param align block alignment (default: PAGE_SIZE) - * @param offs block offset */ -void tiler_reserve(u32 n, enum tiler_fmt fmt, u32 width, u32 height, u32 align, - u32 offs); +void tiler_reserve(u32 n, enum tiler_fmt fmt, u32 width, u32 height); /** * Reserves tiler area for n identical blocks. Use this method to get optimal @@ -274,13 +266,11 @@ void tiler_reserve(u32 n, enum tiler_fmt fmt, u32 width, u32 height, u32 align, * @param fmt TILER bit mode * @param width block width * @param height block height (must be 1 for 1D) - * @param align block alignment (default: PAGE_SIZE) - * @param offs block offset * @param gid group ID * @param pid process ID */ void tiler_reservex(u32 n, enum tiler_fmt fmt, u32 width, u32 height, - u32 align, u32 offs, u32 gid, pid_t pid); + u32 gid, pid_t pid); /** * Reserves tiler area for n identical NV12 blocks for the current process. Use @@ -290,10 +280,8 @@ void tiler_reservex(u32 n, enum tiler_fmt fmt, u32 width, u32 height, * @param n number of identical set of blocks * @param width block width (Y) * @param height block height (Y) - * @param align block alignment (default: PAGE_SIZE) - * @param offs block offset */ -void tiler_reserve_nv12(u32 n, u32 width, u32 height, u32 align, u32 offs); +void tiler_reserve_nv12(u32 n, u32 width, u32 height); /** * Reserves tiler area for n identical NV12 blocks. Use this method to get @@ -303,13 +291,10 @@ void tiler_reserve_nv12(u32 n, u32 width, u32 height, u32 align, u32 offs); * @param n number of identical set of blocks * @param width block width (Y) * @param height block height (Y) - * @param align block alignment (default: PAGE_SIZE) - * @param offs block offset * @param gid group ID * @param pid process ID */ -void tiler_reservex_nv12(u32 n, u32 width, u32 height, u32 align, u32 offs, - u32 gid, pid_t pid); +void tiler_reservex_nv12(u32 n, u32 width, u32 height, u32 gid, pid_t pid); /** * Create a view based on a tiler address and width and height @@ -431,8 +416,6 @@ struct tiler_block_info { u32 id; u32 key; u32 group_id; - u32 align; /* alignment requirements for ssptr */ - u32 offs; /* offset (ssptr & (align - 1) will equal offs) */ u32 ssptr; /* physical address, may not exposed by default */ }; -- cgit v1.1 From 2bf390d33eae05a6a8c44970852b15760d169103 Mon Sep 17 00:00:00 2001 From: Andy Gross Date: Fri, 10 Jun 2011 00:25:33 -0500 Subject: TILER: Add ION APIs and refactor existing functions to use helper functions Refactored alloc_block to use pin_memory(). Standardized ION API to the following functions: tiler_alloc_block_area tiler_free_block_area tiler_pin_block tiler_unpin_block Additional APIs: tiler_map_1d_block tiler_alloc_1d_block_area tiler_pin_memory Change-Id: I9132863d342e0a21ceac00adaba9386d174fc285 Signed-off-by: Andy Gross Signed-off-by: Suman Anna --- arch/arm/mach-omap2/include/mach/tiler.h | 87 +++++++++++++++++++++++++++++++- 1 file changed, 85 insertions(+), 2 deletions(-) (limited to 'arch/arm') diff --git a/arch/arm/mach-omap2/include/mach/tiler.h b/arch/arm/mach-omap2/include/mach/tiler.h index 6e25dcc..1bdc6bd 100644 --- a/arch/arm/mach-omap2/include/mach/tiler.h +++ b/arch/arm/mach-omap2/include/mach/tiler.h @@ -41,6 +41,7 @@ #define TILER_H #include +#include /* * ----------------------------- API Definitions ----------------------------- @@ -378,9 +379,91 @@ struct tiler_pa_info { typedef struct mem_info *tiler_blk_handle; -/* NOTE: this will take ownership pa->mem (will free it) */ +/** + * Allocate a 1D area of container space in the Tiler + * + * @param pa ptr to tiler_pa_info structure + * + * @return handle Handle to tiler block information. NULL on error. + * + * NOTE: this will take ownership pa->mem (will free it) + * + */ tiler_blk_handle tiler_map_1d_block(struct tiler_pa_info *pa); -void tiler_free_block(tiler_blk_handle block); + +/** + * Allocate an area of container space in the Tiler + * + * @param fmt Tiler bpp mode + * @param width Width in pixels + * @param height Height in pixels + * @param ssptr Value of tiler physical address of allocation + * + * @return handle Handle to tiler block information. NULL on error. + * + * NOTE: For 1D allocations, specify the full size in the width field, and + * specify a height of 1. + */ +tiler_blk_handle tiler_alloc_block_area(enum tiler_fmt fmt, u32 width, + u32 height, u32 *ssptr); + +/** + * Free a reserved area in the Tiler + * + * @param handle Handle to tiler block information + * + */ +void tiler_free_block_area(tiler_blk_handle block); + +/** + * Pins a set of physical pages into the Tiler using the area defined in a + * handle + * + * @param handle Handle to tiler block information + * @param sg Scatterlist of physical pages + * @param nents Number of entries in scatterlist + * + * @return error status. + */ +s32 tiler_pin_block(tiler_blk_handle handle, struct scatterlist *sg, u32 nents); + +/** + * Unpins a set of physical pages from the Tiler + * + * @param handle Handle to tiler block information + * + */ +void tiler_unpin_block(tiler_blk_handle handle); + + +/** + * Gives Tiler physical address for a given tiler_blk_handle + * + * @param handle Handle to tiler block information + * + * @return phsyical address. NULL on error. + */ +u32 tiler_handle_to_phys(tiler_blk_handle handle); + +/** + * Gives memory requirements for a given container allocation + * + * @param fmt Tiler bpp mode + * @param width Width in pixels + * @param height Height in pixels + * + * @return Number of pages required. On error, returns 0 + */ +u32 tiler_memsize(enum tiler_fmt fmt, u32 width, u32 height); + +/** + * Returns virtual stride of a tiler block + * + * @param handle Handle to tiler block allocation + * + * @return Size of virtual stride + */ +u32 tiler_block_vstride(tiler_blk_handle handle); /* * ---------------------------- IOCTL Definitions ---------------------------- -- cgit v1.1