cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

fbmem.h (2901B)


      1/*
      2 * Copyright (C) 2010 Francisco Jerez.
      3 * All Rights Reserved.
      4 *
      5 * Permission is hereby granted, free of charge, to any person obtaining
      6 * a copy of this software and associated documentation files (the
      7 * "Software"), to deal in the Software without restriction, including
      8 * without limitation the rights to use, copy, modify, merge, publish,
      9 * distribute, sublicense, and/or sell copies of the Software, and to
     10 * permit persons to whom the Software is furnished to do so, subject to
     11 * the following conditions:
     12 *
     13 * The above copyright notice and this permission notice (including the
     14 * next paragraph) shall be included in all copies or substantial
     15 * portions of the Software.
     16 *
     17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
     18 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
     19 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
     20 * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
     21 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
     22 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
     23 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
     24 *
     25 */
     26#include <subdev/fb/regsnv04.h>
     27
     28#define NV04_PFB_DEBUG_0					0x00100080
     29#	define NV04_PFB_DEBUG_0_PAGE_MODE			0x00000001
     30#	define NV04_PFB_DEBUG_0_REFRESH_OFF			0x00000010
     31#	define NV04_PFB_DEBUG_0_REFRESH_COUNTX64		0x00003f00
     32#	define NV04_PFB_DEBUG_0_REFRESH_SLOW_CLK		0x00004000
     33#	define NV04_PFB_DEBUG_0_SAFE_MODE			0x00008000
     34#	define NV04_PFB_DEBUG_0_ALOM_ENABLE			0x00010000
     35#	define NV04_PFB_DEBUG_0_CASOE				0x00100000
     36#	define NV04_PFB_DEBUG_0_CKE_INVERT			0x10000000
     37#	define NV04_PFB_DEBUG_0_REFINC				0x20000000
     38#	define NV04_PFB_DEBUG_0_SAVE_POWER_OFF			0x40000000
     39#define NV04_PFB_CFG0						0x00100200
     40#	define NV04_PFB_CFG0_SCRAMBLE				0x20000000
     41#define NV04_PFB_CFG1						0x00100204
     42#define NV04_PFB_SCRAMBLE(i)                         (0x00100400 + 4 * (i))
     43
     44#define NV10_PFB_REFCTRL					0x00100210
     45#	define NV10_PFB_REFCTRL_VALID_1				(1 << 31)
     46
     47static inline struct io_mapping *
     48fbmem_init(struct nvkm_device *dev)
     49{
     50	return io_mapping_create_wc(dev->func->resource_addr(dev, 1),
     51				    dev->func->resource_size(dev, 1));
     52}
     53
     54static inline void
     55fbmem_fini(struct io_mapping *fb)
     56{
     57	io_mapping_free(fb);
     58}
     59
     60static inline u32
     61fbmem_peek(struct io_mapping *fb, u32 off)
     62{
     63	u8 __iomem *p = io_mapping_map_atomic_wc(fb, off & PAGE_MASK);
     64	u32 val = ioread32(p + (off & ~PAGE_MASK));
     65	io_mapping_unmap_atomic(p);
     66	return val;
     67}
     68
     69static inline void
     70fbmem_poke(struct io_mapping *fb, u32 off, u32 val)
     71{
     72	u8 __iomem *p = io_mapping_map_atomic_wc(fb, off & PAGE_MASK);
     73	iowrite32(val, p + (off & ~PAGE_MASK));
     74	wmb();
     75	io_mapping_unmap_atomic(p);
     76}
     77
     78static inline bool
     79fbmem_readback(struct io_mapping *fb, u32 off, u32 val)
     80{
     81	fbmem_poke(fb, off, val);
     82	return val == fbmem_peek(fb, off);
     83}