u-boot/board/esd/pci405/writeibm.S

206 lines
3.8 KiB
ArmAsm
Raw Normal View History

/*
* SPDX-License-Identifier: GPL-2.0 IBM-pibs
*/
2004-12-16 19:10:22 +00:00
/*----------------------------------------------------------------------------- */
/* Function: ext_bus_cntlr_init */
/* Description: Initializes the External Bus Controller for the external */
/* peripherals. IMPORTANT: For pass1 this code must run from */
/* cache since you can not reliably change a peripheral banks */
/* timing register (pbxap) while running code from that bank. */
/* For ex., since we are running from ROM on bank 0, we can NOT */
/* execute the code that modifies bank 0 timings from ROM, so */
/* we run it from cache. */
/* Bank 0 - Flash and SRAM */
/* Bank 1 - NVRAM/RTC */
/* Bank 2 - Keyboard/Mouse controller */
/* Bank 3 - IR controller */
/* Bank 4 - not used */
/* Bank 5 - not used */
/* Bank 6 - not used */
/* Bank 7 - FPGA registers */
/*----------------------------------------------------------------------------- */
#include <asm/ppc4xx.h>
2004-12-16 19:10:22 +00:00
#include <ppc_asm.tmpl>
#include <ppc_defs.h>
#include <asm/cache.h>
#include <asm/mmu.h>
.globl write_without_sync
write_without_sync:
/*
* Write one values to host via pci busmastering
2004-12-16 21:44:03 +00:00
* ptr = 0xc0000000 -> 0x01000000 (PCI)
* *ptr = 0x01234567;
2004-12-16 19:10:22 +00:00
*/
2004-12-16 21:44:03 +00:00
addi r31,0,0
lis r31,0xc000
2004-12-16 19:10:22 +00:00
start1:
2004-12-16 21:44:03 +00:00
lis r0,0x0123
ori r0,r0,0x4567
stw r0,0(r31)
2004-12-16 19:10:22 +00:00
/*
* Read one value back
2004-12-16 21:44:03 +00:00
* ptr = (volatile unsigned long *)addr;
* val = *ptr;
2004-12-16 19:10:22 +00:00
*/
2004-12-16 21:44:03 +00:00
lwz r0,0(r31)
2004-12-16 19:10:22 +00:00
/*
* One pci config write
2004-12-16 21:44:03 +00:00
* ibmPciConfigWrite(0x2e, 2, 0x1234);
2004-12-16 19:10:22 +00:00
*/
/* subsystem id */
2004-12-16 21:44:03 +00:00
li r4,0x002C
oris r4,r4,0x8000
lis r3,0xEEC0
stwbrx r4,0,r3
2004-12-16 19:10:22 +00:00
2004-12-16 21:44:03 +00:00
li r5,0x1234
ori r3,r3,0x4
stwbrx r5,0,r3
2004-12-16 19:10:22 +00:00
2004-12-16 21:44:03 +00:00
b start1
2004-12-16 19:10:22 +00:00
blr /* never reached !!!! */
.globl write_with_sync
write_with_sync:
/*
* Write one values to host via pci busmastering
2004-12-16 21:44:03 +00:00
* ptr = 0xc0000000 -> 0x01000000 (PCI)
* *ptr = 0x01234567;
2004-12-16 19:10:22 +00:00
*/
2004-12-16 21:44:03 +00:00
addi r31,0,0
lis r31,0xc000
2004-12-16 19:10:22 +00:00
start2:
2004-12-16 21:44:03 +00:00
lis r0,0x0123
ori r0,r0,0x4567
stw r0,0(r31)
2004-12-16 19:10:22 +00:00
/*
* Read one value back
2004-12-16 21:44:03 +00:00
* ptr = (volatile unsigned long *)addr;
* val = *ptr;
2004-12-16 19:10:22 +00:00
*/
2004-12-16 21:44:03 +00:00
lwz r0,0(r31)
2004-12-16 19:10:22 +00:00
/*
* One pci config write
2004-12-16 21:44:03 +00:00
* ibmPciConfigWrite(0x2e, 2, 0x1234);
2004-12-16 19:10:22 +00:00
*/
/* subsystem id */
2004-12-16 21:44:03 +00:00
li r4,0x002C
oris r4,r4,0x8000
lis r3,0xEEC0
stwbrx r4,0,r3
sync
2004-12-16 19:10:22 +00:00
2004-12-16 21:44:03 +00:00
li r5,0x1234
ori r3,r3,0x4
stwbrx r5,0,r3
sync
2004-12-16 19:10:22 +00:00
2004-12-16 21:44:03 +00:00
b start2
2004-12-16 19:10:22 +00:00
blr /* never reached !!!! */
.globl write_with_less_sync
write_with_less_sync:
/*
* Write one values to host via pci busmastering
2004-12-16 21:44:03 +00:00
* ptr = 0xc0000000 -> 0x01000000 (PCI)
* *ptr = 0x01234567;
2004-12-16 19:10:22 +00:00
*/
2004-12-16 21:44:03 +00:00
addi r31,0,0
lis r31,0xc000
2004-12-16 19:10:22 +00:00
start2b:
2004-12-16 21:44:03 +00:00
lis r0,0x0123
ori r0,r0,0x4567
stw r0,0(r31)
2004-12-16 19:10:22 +00:00
/*
* Read one value back
2004-12-16 21:44:03 +00:00
* ptr = (volatile unsigned long *)addr;
* val = *ptr;
2004-12-16 19:10:22 +00:00
*/
2004-12-16 21:44:03 +00:00
lwz r0,0(r31)
2004-12-16 19:10:22 +00:00
/*
* One pci config write
2004-12-16 21:44:03 +00:00
* ibmPciConfigWrite(0x2e, 2, 0x1234);
2004-12-16 19:10:22 +00:00
*/
/* subsystem id */
2004-12-16 21:44:03 +00:00
li r4,0x002C
oris r4,r4,0x8000
lis r3,0xEEC0
stwbrx r4,0,r3
sync
2004-12-16 19:10:22 +00:00
2004-12-16 21:44:03 +00:00
li r5,0x1234
ori r3,r3,0x4
stwbrx r5,0,r3
2004-12-16 19:10:22 +00:00
/* sync */
2004-12-16 21:44:03 +00:00
b start2b
2004-12-16 19:10:22 +00:00
blr /* never reached !!!! */
.globl write_with_more_sync
write_with_more_sync:
/*
* Write one values to host via pci busmastering
2004-12-16 21:44:03 +00:00
* ptr = 0xc0000000 -> 0x01000000 (PCI)
* *ptr = 0x01234567;
2004-12-16 19:10:22 +00:00
*/
2004-12-16 21:44:03 +00:00
addi r31,0,0
lis r31,0xc000
2004-12-16 19:10:22 +00:00
start3:
2004-12-16 21:44:03 +00:00
lis r0,0x0123
ori r0,r0,0x4567
stw r0,0(r31)
sync
2004-12-16 19:10:22 +00:00
/*
* Read one value back
2004-12-16 21:44:03 +00:00
* ptr = (volatile unsigned long *)addr;
* val = *ptr;
2004-12-16 19:10:22 +00:00
*/
2004-12-16 21:44:03 +00:00
lwz r0,0(r31)
sync
2004-12-16 19:10:22 +00:00
/*
* One pci config write
2004-12-16 21:44:03 +00:00
* ibmPciConfigWrite(0x2e, 2, 0x1234);
2004-12-16 19:10:22 +00:00
*/
/* subsystem id (PCIC0_SBSYSVID)*/
2004-12-16 21:44:03 +00:00
li r4,0x002C
oris r4,r4,0x8000
lis r3,0xEEC0
stwbrx r4,0,r3
sync
2004-12-16 19:10:22 +00:00
2004-12-16 21:44:03 +00:00
li r5,0x1234
ori r3,r3,0x4
stwbrx r5,0,r3
sync
2004-12-16 19:10:22 +00:00
2004-12-16 21:44:03 +00:00
b start3
2004-12-16 19:10:22 +00:00
blr /* never reached !!!! */