mirror of
https://github.com/brain-hackers/u-boot-brain
synced 2024-09-08 05:43:21 +09: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
|