mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-10-31 16:54:21 +00:00 
			
		
		
		
	parisc: Flush gatt writes and adjust gatt mask in parisc_agp_mask_memory()
Flush caches after changing gatt entries and calculate entry according to SBA requirements. Signed-off-by: Helge Deller <deller@gmx.de>
This commit is contained in:
		
							parent
							
								
									59fa12646d
								
							
						
					
					
						commit
						d703797380
					
				
					 1 changed files with 14 additions and 1 deletions
				
			
		|  | @ -90,6 +90,9 @@ parisc_agp_tlbflush(struct agp_memory *mem) | |||
| { | ||||
| 	struct _parisc_agp_info *info = &parisc_agp_info; | ||||
| 
 | ||||
| 	/* force fdc ops to be visible to IOMMU */ | ||||
| 	asm_io_sync(); | ||||
| 
 | ||||
| 	writeq(info->gart_base | ilog2(info->gart_size), info->ioc_regs+IOC_PCOM); | ||||
| 	readq(info->ioc_regs+IOC_PCOM);	/* flush */ | ||||
| } | ||||
|  | @ -158,6 +161,7 @@ parisc_agp_insert_memory(struct agp_memory *mem, off_t pg_start, int type) | |||
| 			info->gatt[j] = | ||||
| 				parisc_agp_mask_memory(agp_bridge, | ||||
| 					paddr, type); | ||||
| 			asm_io_fdc(&info->gatt[j]); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
|  | @ -191,7 +195,16 @@ static unsigned long | |||
| parisc_agp_mask_memory(struct agp_bridge_data *bridge, dma_addr_t addr, | ||||
| 		       int type) | ||||
| { | ||||
| 	return SBA_PDIR_VALID_BIT | addr; | ||||
| 	unsigned ci;			/* coherent index */ | ||||
| 	dma_addr_t pa; | ||||
| 
 | ||||
| 	pa = addr & IOVP_MASK; | ||||
| 	asm("lci 0(%1), %0" : "=r" (ci) : "r" (phys_to_virt(pa))); | ||||
| 
 | ||||
| 	pa |= (ci >> PAGE_SHIFT) & 0xff;/* move CI (8 bits) into lowest byte */ | ||||
| 	pa |= SBA_PDIR_VALID_BIT;	/* set "valid" bit */ | ||||
| 
 | ||||
| 	return cpu_to_le64(pa); | ||||
| } | ||||
| 
 | ||||
| static void | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Helge Deller
						Helge Deller