123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235 |
- /*------------------------------------------------------------------------------+ */
- /* */
- /* This source code has been made available to you by IBM on an AS-IS */
- /* basis. Anyone receiving this source is licensed under IBM */
- /* copyrights to use it in any way he or she deems fit, including */
- /* copying it, modifying it, compiling it, and redistributing it either */
- /* with or without modifications. No license under IBM patents or */
- /* patent applications is to be implied by the copyright license. */
- /* */
- /* Any user of this software should understand that IBM cannot provide */
- /* technical support for this software and will not be responsible for */
- /* any consequences resulting from the use of this software. */
- /* */
- /* Any person who transfers this source code or any derivative work */
- /* must include the IBM copyright notice, this paragraph, and the */
- /* preceding two paragraphs in the transferred software. */
- /* */
- /* COPYRIGHT I B M CORPORATION 1995 */
- /* LICENSED MATERIAL - PROGRAM PROPERTY OF I B M */
- /*------------------------------------------------------------------------------- */
- /*----------------------------------------------------------------------------- */
- /* 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 <ppc4xx.h>
- #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
- * ptr = 0xc0000000 -> 0x01000000 (PCI)
- * *ptr = 0x01234567;
- */
- addi r31,0,0
- lis r31,0xc000
- start1:
- lis r0,0x0123
- ori r0,r0,0x4567
- stw r0,0(r31)
- /*
- * Read one value back
- * ptr = (volatile unsigned long *)addr;
- * val = *ptr;
- */
- lwz r0,0(r31)
- /*
- * One pci config write
- * ibmPciConfigWrite(0x2e, 2, 0x1234);
- */
- /* subsystem id */
- li r4,0x002C
- oris r4,r4,0x8000
- lis r3,0xEEC0
- stwbrx r4,0,r3
- li r5,0x1234
- ori r3,r3,0x4
- stwbrx r5,0,r3
- b start1
- blr /* never reached !!!! */
- .globl write_with_sync
- write_with_sync:
- /*
- * Write one values to host via pci busmastering
- * ptr = 0xc0000000 -> 0x01000000 (PCI)
- * *ptr = 0x01234567;
- */
- addi r31,0,0
- lis r31,0xc000
- start2:
- lis r0,0x0123
- ori r0,r0,0x4567
- stw r0,0(r31)
- /*
- * Read one value back
- * ptr = (volatile unsigned long *)addr;
- * val = *ptr;
- */
- lwz r0,0(r31)
- /*
- * One pci config write
- * ibmPciConfigWrite(0x2e, 2, 0x1234);
- */
- /* subsystem id */
- li r4,0x002C
- oris r4,r4,0x8000
- lis r3,0xEEC0
- stwbrx r4,0,r3
- sync
- li r5,0x1234
- ori r3,r3,0x4
- stwbrx r5,0,r3
- sync
- b start2
- blr /* never reached !!!! */
- .globl write_with_less_sync
- write_with_less_sync:
- /*
- * Write one values to host via pci busmastering
- * ptr = 0xc0000000 -> 0x01000000 (PCI)
- * *ptr = 0x01234567;
- */
- addi r31,0,0
- lis r31,0xc000
- start2b:
- lis r0,0x0123
- ori r0,r0,0x4567
- stw r0,0(r31)
- /*
- * Read one value back
- * ptr = (volatile unsigned long *)addr;
- * val = *ptr;
- */
- lwz r0,0(r31)
- /*
- * One pci config write
- * ibmPciConfigWrite(0x2e, 2, 0x1234);
- */
- /* subsystem id */
- li r4,0x002C
- oris r4,r4,0x8000
- lis r3,0xEEC0
- stwbrx r4,0,r3
- sync
- li r5,0x1234
- ori r3,r3,0x4
- stwbrx r5,0,r3
- /* sync */
- b start2b
- blr /* never reached !!!! */
- .globl write_with_more_sync
- write_with_more_sync:
- /*
- * Write one values to host via pci busmastering
- * ptr = 0xc0000000 -> 0x01000000 (PCI)
- * *ptr = 0x01234567;
- */
- addi r31,0,0
- lis r31,0xc000
- start3:
- lis r0,0x0123
- ori r0,r0,0x4567
- stw r0,0(r31)
- sync
- /*
- * Read one value back
- * ptr = (volatile unsigned long *)addr;
- * val = *ptr;
- */
- lwz r0,0(r31)
- sync
- /*
- * One pci config write
- * ibmPciConfigWrite(0x2e, 2, 0x1234);
- */
- /* subsystem id (PCIC0_SBSYSVID)*/
- li r4,0x002C
- oris r4,r4,0x8000
- lis r3,0xEEC0
- stwbrx r4,0,r3
- sync
- li r5,0x1234
- ori r3,r3,0x4
- stwbrx r5,0,r3
- sync
- b start3
- blr /* never reached !!!! */
|