1037b3c26Smrg/* 2037b3c26Smrg * Copyright (C) 2016 Etnaviv Project 3037b3c26Smrg * 4037b3c26Smrg * Permission is hereby granted, free of charge, to any person obtaining a 5037b3c26Smrg * copy of this software and associated documentation files (the "Software"), 6037b3c26Smrg * to deal in the Software without restriction, including without limitation 7037b3c26Smrg * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8037b3c26Smrg * and/or sell copies of the Software, and to permit persons to whom the 9037b3c26Smrg * Software is furnished to do so, subject to the following conditions: 10037b3c26Smrg * 11037b3c26Smrg * The above copyright notice and this permission notice (including the next 12037b3c26Smrg * paragraph) shall be included in all copies or substantial portions of the 13037b3c26Smrg * Software. 14037b3c26Smrg * 15037b3c26Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16037b3c26Smrg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17037b3c26Smrg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18037b3c26Smrg * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19037b3c26Smrg * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20037b3c26Smrg * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21037b3c26Smrg * SOFTWARE. 22037b3c26Smrg * 23037b3c26Smrg * Authors: 24037b3c26Smrg * Christian Gmeiner <christian.gmeiner@gmail.com> 25037b3c26Smrg */ 26037b3c26Smrg 27037b3c26Smrg#undef NDEBUG 28037b3c26Smrg#include <assert.h> 29037b3c26Smrg 30037b3c26Smrg#include <fcntl.h> 31037b3c26Smrg#include <stdio.h> 32037b3c26Smrg#include <string.h> 33037b3c26Smrg#include <unistd.h> 34037b3c26Smrg 35037b3c26Smrg#include "xf86drm.h" 36037b3c26Smrg#include "etnaviv_drmif.h" 37037b3c26Smrg#include "etnaviv_drm.h" 38037b3c26Smrg 39037b3c26Smrgstatic void test_cache(struct etna_device *dev) 40037b3c26Smrg{ 41037b3c26Smrg struct etna_bo *bo, *tmp; 42037b3c26Smrg 43037b3c26Smrg /* allocate and free some bo's with same size - we must 44037b3c26Smrg * get the same bo over and over. */ 45037b3c26Smrg printf("testing bo cache ... "); 46037b3c26Smrg 47037b3c26Smrg bo = tmp = etna_bo_new(dev, 0x100, ETNA_BO_UNCACHED); 48037b3c26Smrg assert(bo); 49037b3c26Smrg etna_bo_del(bo); 50037b3c26Smrg 51037b3c26Smrg for (unsigned i = 0; i < 100; i++) { 52037b3c26Smrg tmp = etna_bo_new(dev, 0x100, ETNA_BO_UNCACHED); 53037b3c26Smrg etna_bo_del(tmp); 54037b3c26Smrg assert(tmp == bo); 55037b3c26Smrg } 56037b3c26Smrg 57037b3c26Smrg printf("ok\n"); 58037b3c26Smrg} 59037b3c26Smrg 60037b3c26Smrgstatic void test_size_rounding(struct etna_device *dev) 61037b3c26Smrg{ 62037b3c26Smrg struct etna_bo *bo; 63037b3c26Smrg 64037b3c26Smrg printf("testing size rounding ... "); 65037b3c26Smrg 66037b3c26Smrg bo = etna_bo_new(dev, 15, ETNA_BO_UNCACHED); 67037b3c26Smrg assert(etna_bo_size(bo) == 4096); 68037b3c26Smrg etna_bo_del(bo); 69037b3c26Smrg 70037b3c26Smrg bo = etna_bo_new(dev, 4096, ETNA_BO_UNCACHED); 71037b3c26Smrg assert(etna_bo_size(bo) == 4096); 72037b3c26Smrg etna_bo_del(bo); 73037b3c26Smrg 74037b3c26Smrg bo = etna_bo_new(dev, 4100, ETNA_BO_UNCACHED); 75037b3c26Smrg assert(etna_bo_size(bo) == 8192); 76037b3c26Smrg etna_bo_del(bo); 77037b3c26Smrg 78037b3c26Smrg printf("ok\n"); 79037b3c26Smrg} 80037b3c26Smrg 81037b3c26Smrgint main(int argc, char *argv[]) 82037b3c26Smrg{ 83037b3c26Smrg struct etna_device *dev; 84037b3c26Smrg 85037b3c26Smrg drmVersionPtr version; 86037b3c26Smrg int fd, ret = 0; 87037b3c26Smrg 88037b3c26Smrg fd = open(argv[1], O_RDWR); 89037b3c26Smrg if (fd < 0) 90037b3c26Smrg return 1; 91037b3c26Smrg 92037b3c26Smrg version = drmGetVersion(fd); 93037b3c26Smrg if (version) { 94037b3c26Smrg printf("Version: %d.%d.%d\n", version->version_major, 95037b3c26Smrg version->version_minor, version->version_patchlevel); 96037b3c26Smrg printf(" Name: %s\n", version->name); 97037b3c26Smrg printf(" Date: %s\n", version->date); 98037b3c26Smrg printf(" Description: %s\n", version->desc); 99037b3c26Smrg drmFreeVersion(version); 100037b3c26Smrg } 101037b3c26Smrg 102037b3c26Smrg dev = etna_device_new(fd); 103037b3c26Smrg if (!dev) { 104037b3c26Smrg ret = 2; 105037b3c26Smrg goto out; 106037b3c26Smrg } 107037b3c26Smrg 108037b3c26Smrg test_cache(dev); 109037b3c26Smrg test_size_rounding(dev); 110037b3c26Smrg 111037b3c26Smrg etna_device_del(dev); 112037b3c26Smrg 113037b3c26Smrgout: 114037b3c26Smrg close(fd); 115037b3c26Smrg 116037b3c26Smrg return ret; 117037b3c26Smrg} 118