Rev 1404 | Rev 5078 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1404 | Rev 2997 | ||
---|---|---|---|
Line 31... | Line 31... | ||
31 | */ |
31 | */ |
32 | #include |
32 | #include |
33 | #include |
33 | #include |
34 | #include |
34 | #include |
35 | #include |
35 | #include |
- | 36 | #include |
|
36 | #include |
37 | #include |
37 | #include |
38 | #include |
38 | #include |
39 | #include |
- | 40 | #include |
|
39 | #include "radeon_reg.h" |
41 | #include "radeon_reg.h" |
40 | #include "radeon.h" |
42 | #include "radeon.h" |
Line 41... | Line 43... | ||
41 | 43 | ||
Line 55... | Line 57... | ||
55 | 57 | ||
56 | 58 | ||
57 | /* |
59 | /* |
58 | * Global memory. |
60 | * Global memory. |
59 | */ |
61 | */ |
60 | static int radeon_ttm_mem_global_init(struct ttm_global_reference *ref) |
62 | static int radeon_ttm_mem_global_init(struct drm_global_reference *ref) |
61 | { |
63 | { |
Line 62... | Line 64... | ||
62 | return ttm_mem_global_init(ref->object); |
64 | return ttm_mem_global_init(ref->object); |
63 | } |
65 | } |
64 | 66 | ||
65 | static void radeon_ttm_mem_global_release(struct ttm_global_reference *ref) |
67 | static void radeon_ttm_mem_global_release(struct drm_global_reference *ref) |
Line 66... | Line 68... | ||
66 | { |
68 | { |
67 | ttm_mem_global_release(ref->object); |
69 | ttm_mem_global_release(ref->object); |
68 | } |
70 | } |
69 | 71 | ||
Line 70... | Line 72... | ||
70 | static int radeon_ttm_global_init(struct radeon_device *rdev) |
72 | static int radeon_ttm_global_init(struct radeon_device *rdev) |
71 | { |
73 | { |
72 | struct ttm_global_reference *global_ref; |
74 | struct drm_global_reference *global_ref; |
73 | int r; |
75 | int r; |
74 | 76 | ||
75 | rdev->mman.mem_global_referenced = false; |
77 | rdev->mman.mem_global_referenced = false; |
76 | global_ref = &rdev->mman.mem_global_ref; |
78 | global_ref = &rdev->mman.mem_global_ref; |
77 | global_ref->global_type = TTM_GLOBAL_TTM_MEM; |
79 | global_ref->global_type = DRM_GLOBAL_TTM_MEM; |
78 | global_ref->size = sizeof(struct ttm_mem_global); |
80 | global_ref->size = sizeof(struct ttm_mem_global); |
79 | global_ref->init = &radeon_ttm_mem_global_init; |
81 | global_ref->init = &radeon_ttm_mem_global_init; |
80 | global_ref->release = &radeon_ttm_mem_global_release; |
82 | global_ref->release = &radeon_ttm_mem_global_release; |
81 | r = ttm_global_item_ref(global_ref); |
83 | r = drm_global_item_ref(global_ref); |
Line 82... | Line 84... | ||
82 | if (r != 0) { |
84 | if (r != 0) { |
83 | DRM_ERROR("Failed setting up TTM memory accounting " |
85 | DRM_ERROR("Failed setting up TTM memory accounting " |
84 | "subsystem.\n"); |
86 | "subsystem.\n"); |
85 | return r; |
87 | return r; |
86 | } |
88 | } |
87 | 89 | ||
88 | rdev->mman.bo_global_ref.mem_glob = |
90 | rdev->mman.bo_global_ref.mem_glob = |
89 | rdev->mman.mem_global_ref.object; |
91 | rdev->mman.mem_global_ref.object; |
90 | global_ref = &rdev->mman.bo_global_ref.ref; |
92 | global_ref = &rdev->mman.bo_global_ref.ref; |
91 | global_ref->global_type = TTM_GLOBAL_TTM_BO; |
93 | global_ref->global_type = DRM_GLOBAL_TTM_BO; |
92 | global_ref->size = sizeof(struct ttm_bo_global); |
94 | global_ref->size = sizeof(struct ttm_bo_global); |
93 | global_ref->init = &ttm_bo_global_init; |
95 | global_ref->init = &ttm_bo_global_init; |
94 | global_ref->release = &ttm_bo_global_release; |
96 | global_ref->release = &ttm_bo_global_release; |
Line 95... | Line 97... | ||
95 | r = ttm_global_item_ref(global_ref); |
97 | r = drm_global_item_ref(global_ref); |
96 | if (r != 0) { |
98 | if (r != 0) { |
97 | DRM_ERROR("Failed setting up TTM BO subsystem.\n"); |
99 | DRM_ERROR("Failed setting up TTM BO subsystem.\n"); |
Line 98... | Line 100... | ||
98 | ttm_global_item_unref(&rdev->mman.mem_global_ref); |
100 | drm_global_item_unref(&rdev->mman.mem_global_ref); |
99 | return r; |
101 | return r; |
- | 102 | } |
|
- | 103 | ||
Line 100... | Line 104... | ||
100 | } |
104 | rdev->mman.mem_global_referenced = true; |
101 | 105 | return 0; |
|
102 | rdev->mman.mem_global_referenced = true; |
106 | } |
103 | return 0; |
107 | |
Line 120... | Line 124... | ||
120 | man->flags = TTM_MEMTYPE_FLAG_MAPPABLE; |
124 | man->flags = TTM_MEMTYPE_FLAG_MAPPABLE; |
121 | man->available_caching = TTM_PL_MASK_CACHING; |
125 | man->available_caching = TTM_PL_MASK_CACHING; |
122 | man->default_caching = TTM_PL_FLAG_CACHED; |
126 | man->default_caching = TTM_PL_FLAG_CACHED; |
123 | break; |
127 | break; |
124 | case TTM_PL_TT: |
128 | case TTM_PL_TT: |
- | 129 | man->func = &ttm_bo_manager_func; |
|
125 | man->gpu_offset = rdev->mc.gtt_location; |
130 | man->gpu_offset = rdev->mc.gtt_start; |
126 | man->available_caching = TTM_PL_MASK_CACHING; |
131 | man->available_caching = TTM_PL_MASK_CACHING; |
127 | man->default_caching = TTM_PL_FLAG_CACHED; |
132 | man->default_caching = TTM_PL_FLAG_CACHED; |
128 | man->flags = TTM_MEMTYPE_FLAG_MAPPABLE | TTM_MEMTYPE_FLAG_CMA; |
133 | man->flags = TTM_MEMTYPE_FLAG_MAPPABLE | TTM_MEMTYPE_FLAG_CMA; |
129 | #if __OS_HAS_AGP |
134 | #if __OS_HAS_AGP |
130 | if (rdev->flags & RADEON_IS_AGP) { |
135 | if (rdev->flags & RADEON_IS_AGP) { |
131 | if (!(drm_core_has_AGP(rdev->ddev) && rdev->ddev->agp)) { |
136 | if (!(drm_core_has_AGP(rdev->ddev) && rdev->ddev->agp)) { |
132 | DRM_ERROR("AGP is not enabled for memory type %u\n", |
137 | DRM_ERROR("AGP is not enabled for memory type %u\n", |
133 | (unsigned)type); |
138 | (unsigned)type); |
134 | return -EINVAL; |
139 | return -EINVAL; |
135 | } |
140 | } |
136 | man->io_offset = rdev->mc.agp_base; |
- | |
137 | man->io_size = rdev->mc.gtt_size; |
- | |
138 | man->io_addr = NULL; |
- | |
139 | if (!rdev->ddev->agp->cant_use_aperture) |
141 | if (!rdev->ddev->agp->cant_use_aperture) |
140 | man->flags = TTM_MEMTYPE_FLAG_NEEDS_IOREMAP | |
- | |
141 | TTM_MEMTYPE_FLAG_MAPPABLE; |
142 | man->flags = TTM_MEMTYPE_FLAG_MAPPABLE; |
142 | man->available_caching = TTM_PL_FLAG_UNCACHED | |
143 | man->available_caching = TTM_PL_FLAG_UNCACHED | |
143 | TTM_PL_FLAG_WC; |
144 | TTM_PL_FLAG_WC; |
144 | man->default_caching = TTM_PL_FLAG_WC; |
145 | man->default_caching = TTM_PL_FLAG_WC; |
145 | } else |
- | |
146 | #endif |
- | |
147 | { |
- | |
148 | man->io_offset = 0; |
- | |
149 | man->io_size = 0; |
- | |
150 | man->io_addr = NULL; |
- | |
151 | } |
146 | } |
- | 147 | #endif |
|
152 | break; |
148 | break; |
153 | case TTM_PL_VRAM: |
149 | case TTM_PL_VRAM: |
154 | /* "On-card" video ram */ |
150 | /* "On-card" video ram */ |
- | 151 | man->func = &ttm_bo_manager_func; |
|
155 | man->gpu_offset = rdev->mc.vram_location; |
152 | man->gpu_offset = rdev->mc.vram_start; |
156 | man->flags = TTM_MEMTYPE_FLAG_FIXED | |
153 | man->flags = TTM_MEMTYPE_FLAG_FIXED | |
157 | TTM_MEMTYPE_FLAG_NEEDS_IOREMAP | |
- | |
158 | TTM_MEMTYPE_FLAG_MAPPABLE; |
154 | TTM_MEMTYPE_FLAG_MAPPABLE; |
159 | man->available_caching = TTM_PL_FLAG_UNCACHED | TTM_PL_FLAG_WC; |
155 | man->available_caching = TTM_PL_FLAG_UNCACHED | TTM_PL_FLAG_WC; |
160 | man->default_caching = TTM_PL_FLAG_WC; |
156 | man->default_caching = TTM_PL_FLAG_WC; |
161 | man->io_addr = NULL; |
- | |
162 | man->io_offset = rdev->mc.aper_base; |
- | |
163 | man->io_size = rdev->mc.aper_size; |
- | |
164 | break; |
157 | break; |
165 | default: |
158 | default: |
166 | DRM_ERROR("Unsupported memory type %u\n", (unsigned)type); |
159 | DRM_ERROR("Unsupported memory type %u\n", (unsigned)type); |
167 | return -EINVAL; |
160 | return -EINVAL; |
168 | } |
161 | } |