mirror of
				https://source.denx.de/u-boot/u-boot.git
				synced 2025-10-26 14:01:50 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			114 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			114 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| /* C-interface for AMBA PnP scanning functions implemented in
 | |
|  * ambapp_low.S. At the point the memory and stack can be
 | |
|  * used.
 | |
|  *
 | |
|  * (C) Copyright 2010, 2015
 | |
|  * Daniel Hellstrom, Cobham Gaisler, daniel@gaisler.com.
 | |
|  *
 | |
|  * SPDX-License-Identifier:	GPL-2.0+
 | |
|  */
 | |
| 
 | |
| 
 | |
| 	.seg	"text"
 | |
| 	.extern	_nomem_ambapp_find_buses
 | |
| 	.extern	_nomem_find_apb
 | |
| 	.extern	_nomem_find_ahb
 | |
| 
 | |
| 	.globl	ambapp_find_buses
 | |
| 	.globl	ambapp_find_apb
 | |
| 	.globl	ambapp_find_ahb
 | |
| 
 | |
| 
 | |
| /* C-interface for _nomem_ambapp_find_buses used when memory is available.
 | |
|  */
 | |
| ambapp_find_buses:
 | |
| 	save	%sp, -104, %sp
 | |
| 	mov	%i1, %l7	/* Save second argument */
 | |
| 	call _nomem_ambapp_find_buses
 | |
| 	 mov	%i0, %o0
 | |
| 
 | |
| 	/* Store result */
 | |
| 	st	%g0, [%l7+0x00]
 | |
| 	st	%i0, [%l7+0x04]
 | |
| 	st	%i1, [%l7+0x08]
 | |
| 	st	%i2, [%l7+0x0c]
 | |
| 	st	%i3, [%l7+0x10]
 | |
| 	st	%i4, [%l7+0x14]
 | |
| 	st	%i5, [%l7+0x18]
 | |
| 
 | |
| 	ret
 | |
| 	 restore
 | |
| 
 | |
| /* C-interface for _nomem_find_apb used when memory is available.
 | |
|  *
 | |
|  * void ambapp_find_apb(
 | |
|  *	struct ambapp_bus *abus,
 | |
|  *	unsigned int dev_vend,
 | |
|  *	int index,
 | |
|  *	struct ambapp_find_apb_info *result
 | |
|  *	);
 | |
|  *
 | |
|  */
 | |
| ambapp_find_apb:
 | |
| 	save	%sp, -104, %sp
 | |
| 
 | |
| 	mov	%i3, %l7	/* Save second argument */
 | |
| 	mov	%i1, %o1
 | |
| 	mov	%i2, %o2
 | |
| 
 | |
| 	/* Initialize buses available in system */
 | |
| 	ld	[%i0+0x08], %i1
 | |
| 	ld	[%i0+0x0c], %i2
 | |
| 	ld	[%i0+0x10], %i3
 | |
| 	ld	[%i0+0x14], %i4
 | |
| 	ld	[%i0+0x18], %i5
 | |
| 
 | |
| 	call _nomem_find_apb
 | |
| 	 ld	[%i0+0x04], %i0
 | |
| 
 | |
| 	st	%o2, [%l7+0x08]	/* Decremented Index */
 | |
| 	st	%o3, [%l7]	/* PnP configuration address of APB Device */
 | |
| 	st	%o4, [%l7+0x04]	/* AHB Bus Index of AHB/APB bridge and APB Device */
 | |
| 	mov	%o0, %i0
 | |
| 	ret
 | |
| 	 restore
 | |
| 
 | |
| /* C-interface for _nomem_find_ahb used when memory is available.
 | |
|  *
 | |
|  * void ambapp_find_ahb(
 | |
|  *	struct ambapp_bus *abus,
 | |
|  *	unsigned int dev_vend,
 | |
|  *	int index,
 | |
|  *	int type,
 | |
|  *	struct ambapp_find_ahb_info *result
 | |
|  *	);
 | |
|  *
 | |
|  */
 | |
| ambapp_find_ahb:
 | |
| 	save	%sp, -104, %sp
 | |
| 
 | |
| 	mov	%i4, %l7	/* Save second argument */
 | |
| 	clr	%o0
 | |
| 	mov	%i1, %o1
 | |
| 	mov	%i2, %o2
 | |
| 	clr	%o3
 | |
| 	clr	%o4
 | |
| 	mov	%i3, %o5
 | |
| 
 | |
| 	/* Initialize buses available in system */
 | |
| 	ld	[%i0+0x08], %i1
 | |
| 	ld	[%i0+0x0c], %i2
 | |
| 	ld	[%i0+0x10], %i3
 | |
| 	ld	[%i0+0x14], %i4
 | |
| 	ld	[%i0+0x18], %i5
 | |
| 
 | |
| 	call _nomem_find_ahb
 | |
| 	 ld	[%i0+0x04], %i0
 | |
| 
 | |
| 	st	%o2, [%l7+0x08]	/* Decremented Index */
 | |
| 	st	%o3, [%l7]	/* PnP configuration address of AHB Device */
 | |
| 	st	%o4, [%l7+0x04]	/* AHB Bus Index of AHB Device */
 | |
| 	mov	%o0, %i0
 | |
| 	ret
 | |
| 	 restore
 |