UAPI: (Scripted) Convert #include "..." to #include <path/...> in drivers/gpu/
[linux-2.6-block.git] / drivers / gpu / drm / nouveau / nv10_fb.c
1 #include <drm/drmP.h>
2 #include "nouveau_drv.h"
3 #include <drm/nouveau_drm.h>
4
5 void
6 nv10_fb_init_tile_region(struct drm_device *dev, int i, uint32_t addr,
7                          uint32_t size, uint32_t pitch, uint32_t flags)
8 {
9         struct drm_nouveau_private *dev_priv = dev->dev_private;
10         struct nouveau_tile_reg *tile = &dev_priv->tile.reg[i];
11
12         tile->addr  = 0x80000000 | addr;
13         tile->limit = max(1u, addr + size) - 1;
14         tile->pitch = pitch;
15 }
16
17 void
18 nv10_fb_free_tile_region(struct drm_device *dev, int i)
19 {
20         struct drm_nouveau_private *dev_priv = dev->dev_private;
21         struct nouveau_tile_reg *tile = &dev_priv->tile.reg[i];
22
23         tile->addr = tile->limit = tile->pitch = tile->zcomp = 0;
24 }
25
26 void
27 nv10_fb_set_tile_region(struct drm_device *dev, int i)
28 {
29         struct drm_nouveau_private *dev_priv = dev->dev_private;
30         struct nouveau_tile_reg *tile = &dev_priv->tile.reg[i];
31
32         nv_wr32(dev, NV10_PFB_TLIMIT(i), tile->limit);
33         nv_wr32(dev, NV10_PFB_TSIZE(i), tile->pitch);
34         nv_wr32(dev, NV10_PFB_TILE(i), tile->addr);
35 }
36
37 int
38 nv1a_fb_vram_init(struct drm_device *dev)
39 {
40         struct drm_nouveau_private *dev_priv = dev->dev_private;
41         struct pci_dev *bridge;
42         uint32_t mem, mib;
43
44         bridge = pci_get_bus_and_slot(0, PCI_DEVFN(0, 1));
45         if (!bridge) {
46                 NV_ERROR(dev, "no bridge device\n");
47                 return 0;
48         }
49
50         if (dev_priv->chipset == 0x1a) {
51                 pci_read_config_dword(bridge, 0x7c, &mem);
52                 mib = ((mem >> 6) & 31) + 1;
53         } else {
54                 pci_read_config_dword(bridge, 0x84, &mem);
55                 mib = ((mem >> 4) & 127) + 1;
56         }
57
58         dev_priv->vram_size = mib * 1024 * 1024;
59         return 0;
60 }
61
62 int
63 nv10_fb_vram_init(struct drm_device *dev)
64 {
65         struct drm_nouveau_private *dev_priv = dev->dev_private;
66         u32 fifo_data = nv_rd32(dev, NV04_PFB_FIFO_DATA);
67         u32 cfg0 = nv_rd32(dev, 0x100200);
68
69         dev_priv->vram_size = fifo_data & NV10_PFB_FIFO_DATA_RAM_AMOUNT_MB_MASK;
70
71         if (cfg0 & 0x00000001)
72                 dev_priv->vram_type = NV_MEM_TYPE_DDR1;
73         else
74                 dev_priv->vram_type = NV_MEM_TYPE_SDRAM;
75
76         return 0;
77 }
78
79 int
80 nv10_fb_init(struct drm_device *dev)
81 {
82         struct drm_nouveau_private *dev_priv = dev->dev_private;
83         struct nouveau_fb_engine *pfb = &dev_priv->engine.fb;
84         int i;
85
86         /* Turn all the tiling regions off. */
87         pfb->num_tiles = NV10_PFB_TILE__SIZE;
88         for (i = 0; i < pfb->num_tiles; i++)
89                 pfb->set_tile_region(dev, i);
90
91         return 0;
92 }
93
94 void
95 nv10_fb_takedown(struct drm_device *dev)
96 {
97         struct drm_nouveau_private *dev_priv = dev->dev_private;
98         struct nouveau_fb_engine *pfb = &dev_priv->engine.fb;
99         int i;
100
101         for (i = 0; i < pfb->num_tiles; i++)
102                 pfb->free_tile_region(dev, i);
103 }