Subversion Repositories Kolibri OS

Rev

Rev 3764 | Rev 5139 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3764 Rev 5078
Line 107... Line 107...
107
int rs400_gart_enable(struct radeon_device *rdev)
107
int rs400_gart_enable(struct radeon_device *rdev)
108
{
108
{
109
	uint32_t size_reg;
109
	uint32_t size_reg;
110
	uint32_t tmp;
110
	uint32_t tmp;
Line 111... Line -...
111
 
-
 
112
	radeon_gart_restore(rdev);
111
 
113
	tmp = RREG32_MC(RS690_AIC_CTRL_SCRATCH);
112
	tmp = RREG32_MC(RS690_AIC_CTRL_SCRATCH);
114
	tmp |= RS690_DIS_OUT_OF_PCI_GART_ACCESS;
113
	tmp |= RS690_DIS_OUT_OF_PCI_GART_ACCESS;
115
	WREG32_MC(RS690_AIC_CTRL_SCRATCH, tmp);
114
	WREG32_MC(RS690_AIC_CTRL_SCRATCH, tmp);
116
	/* Check gart size */
115
	/* Check gart size */
Line 172... Line 171...
172
		  (1 << RS480_REQ_TYPE_SNOOP_SHIFT) | RS480_REQ_TYPE_SNOOP_DIS);
171
		  (1 << RS480_REQ_TYPE_SNOOP_SHIFT) | RS480_REQ_TYPE_SNOOP_DIS);
173
	/* Disable AGP mode */
172
	/* Disable AGP mode */
174
	/* FIXME: according to doc we should set HIDE_MMCFG_BAR=0,
173
	/* FIXME: according to doc we should set HIDE_MMCFG_BAR=0,
175
	 * AGPMODE30=0 & AGP30ENHANCED=0 in NB_CNTL */
174
	 * AGPMODE30=0 & AGP30ENHANCED=0 in NB_CNTL */
176
	if ((rdev->family == CHIP_RS690) || (rdev->family == CHIP_RS740)) {
175
	if ((rdev->family == CHIP_RS690) || (rdev->family == CHIP_RS740)) {
177
		WREG32_MC(RS480_MC_MISC_CNTL,
176
		tmp = RREG32_MC(RS480_MC_MISC_CNTL);
178
			  (RS480_GART_INDEX_REG_EN | RS690_BLOCK_GFX_D3_EN));
177
		tmp |= RS480_GART_INDEX_REG_EN | RS690_BLOCK_GFX_D3_EN;
-
 
178
		WREG32_MC(RS480_MC_MISC_CNTL, tmp);
179
	} else {
179
	} else {
-
 
180
		tmp = RREG32_MC(RS480_MC_MISC_CNTL);
-
 
181
		tmp |= RS480_GART_INDEX_REG_EN;
180
		WREG32_MC(RS480_MC_MISC_CNTL, RS480_GART_INDEX_REG_EN);
182
		WREG32_MC(RS480_MC_MISC_CNTL, tmp);
181
	}
183
	}
182
	/* Enable gart */
184
	/* Enable gart */
183
	WREG32_MC(RS480_AGP_ADDRESS_SPACE_SIZE, (RS480_GART_EN | size_reg));
185
	WREG32_MC(RS480_AGP_ADDRESS_SPACE_SIZE, (RS480_GART_EN | size_reg));
184
	rs400_gart_tlb_flush(rdev);
186
	rs400_gart_tlb_flush(rdev);
185
	DRM_INFO("PCIE GART of %uM enabled (table at 0x%016llX).\n",
187
	DRM_INFO("PCIE GART of %uM enabled (table at 0x%016llX).\n",
Line 204... Line 206...
204
	radeon_gart_fini(rdev);
206
	radeon_gart_fini(rdev);
205
	rs400_gart_disable(rdev);
207
	rs400_gart_disable(rdev);
206
	radeon_gart_table_ram_free(rdev);
208
	radeon_gart_table_ram_free(rdev);
207
}
209
}
Line -... Line 210...
-
 
210
 
208
 
211
#define RS400_PTE_UNSNOOPED (1 << 0)
209
#define RS400_PTE_WRITEABLE (1 << 2)
212
#define RS400_PTE_WRITEABLE (1 << 2)
Line 210... Line 213...
210
#define RS400_PTE_READABLE  (1 << 3)
213
#define RS400_PTE_READABLE  (1 << 3)
-
 
214
 
211
 
215
void rs400_gart_set_page(struct radeon_device *rdev, unsigned i,
212
int rs400_gart_set_page(struct radeon_device *rdev, int i, uint64_t addr)
216
			 uint64_t addr, uint32_t flags)
213
{
217
{
Line 214... Line -...
214
	uint32_t entry;
-
 
215
	u32 *gtt = rdev->gart.ptr;
-
 
216
 
-
 
217
	if (i < 0 || i > rdev->gart.num_gpu_pages) {
-
 
218
		return -EINVAL;
218
	uint32_t entry;
219
	}
219
	u32 *gtt = rdev->gart.ptr;
-
 
220
 
220
 
221
	entry = (lower_32_bits(addr) & PAGE_MASK) |
-
 
222
		((upper_32_bits(addr) & 0xff) << 4);
-
 
223
	if (flags & RADEON_GART_PAGE_READ)
-
 
224
		addr |= RS400_PTE_READABLE;
-
 
225
	if (flags & RADEON_GART_PAGE_WRITE)
221
	entry = (lower_32_bits(addr) & PAGE_MASK) |
226
		addr |= RS400_PTE_WRITEABLE;
222
		((upper_32_bits(addr) & 0xff) << 4) |
227
	if (!(flags & RADEON_GART_PAGE_SNOOP))
223
		RS400_PTE_WRITEABLE | RS400_PTE_READABLE;
-
 
224
	entry = cpu_to_le32(entry);
228
		entry |= RS400_PTE_UNSNOOPED;
Line 225... Line 229...
225
	gtt[i] = entry;
229
	entry = cpu_to_le32(entry);
226
	return 0;
230
	gtt[i] = entry;
227
}
231
}
Line 269... Line 273...
269
	radeon_update_bandwidth_info(rdev);
273
	radeon_update_bandwidth_info(rdev);
270
}
274
}
Line 271... Line 275...
271
 
275
 
272
uint32_t rs400_mc_rreg(struct radeon_device *rdev, uint32_t reg)
276
uint32_t rs400_mc_rreg(struct radeon_device *rdev, uint32_t reg)
-
 
277
{
273
{
278
	unsigned long flags;
Line -... Line 279...
-
 
279
	uint32_t r;
274
	uint32_t r;
280
 
275
 
281
	spin_lock_irqsave(&rdev->mc_idx_lock, flags);
276
	WREG32(RS480_NB_MC_INDEX, reg & 0xff);
282
	WREG32(RS480_NB_MC_INDEX, reg & 0xff);
-
 
283
	r = RREG32(RS480_NB_MC_DATA);
277
	r = RREG32(RS480_NB_MC_DATA);
284
	WREG32(RS480_NB_MC_INDEX, 0xff);
278
	WREG32(RS480_NB_MC_INDEX, 0xff);
285
	spin_unlock_irqrestore(&rdev->mc_idx_lock, flags);
Line 279... Line 286...
279
	return r;
286
	return r;
280
}
287
}
-
 
288
 
-
 
289
void rs400_mc_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v)
-
 
290
{
281
 
291
	unsigned long flags;
282
void rs400_mc_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v)
292
 
283
{
293
	spin_lock_irqsave(&rdev->mc_idx_lock, flags);
-
 
294
	WREG32(RS480_NB_MC_INDEX, ((reg) & 0xff) | RS480_NB_MC_IND_WR_EN);
284
	WREG32(RS480_NB_MC_INDEX, ((reg) & 0xff) | RS480_NB_MC_IND_WR_EN);
295
	WREG32(RS480_NB_MC_DATA, (v));
Line 285... Line 296...
285
	WREG32(RS480_NB_MC_DATA, (v));
296
	WREG32(RS480_NB_MC_INDEX, 0xff);
286
	WREG32(RS480_NB_MC_INDEX, 0xff);
297
	spin_unlock_irqrestore(&rdev->mc_idx_lock, flags);
287
}
298
}
Line 496... Line 507...
496
	r = rs400_gart_init(rdev);
507
	r = rs400_gart_init(rdev);
497
	if (r)
508
	if (r)
498
		return r;
509
		return r;
499
	r300_set_reg_safe(rdev);
510
	r300_set_reg_safe(rdev);
Line -... Line 511...
-
 
511
 
-
 
512
	/* Initialize power management */
-
 
513
	radeon_pm_init(rdev);
500
 
514
 
501
	rdev->accel_working = true;
515
	rdev->accel_working = true;
502
	r = rs400_startup(rdev);
516
	r = rs400_startup(rdev);
503
	if (r) {
517
	if (r) {
504
		/* Somethings want wront with the accel init stop accel */
518
		/* Somethings want wront with the accel init stop accel */