📄 platform.s
字号:
nop b 8f li v1, 00: ori s5, HAL_GALILEO_SDRAM_BANK0_PARITY li v1, 18: # # Setup number of device banks # Only support 2 or 4 banks # li t0, 2 beq s2, t0, 8f nop li t0, 4 beq s2, t0, 0f nop b error nop0: ori s5, HAL_GALILEO_SDRAM_NUM_BANKS_48: # # Now actually store the bank config register # sw s5, HAL_GALILEO_SDRAM_BANK0_OFFSET(s7) sw s5, HAL_GALILEO_SDRAM_BANK2_OFFSET(s7) # # Setup the SDRAM configuration register # All other fields are zero, and the proper value is masked # in when they are known # li s5, HAL_GALILEO_SDRAM_DUPLICATE_BANK_ADDR | HAL_GALILEO_SDRAM_BANK_INTERLEAVE_DIS # # Setup the Refresh Rate # READ_SPD_VALUE HAL_SPD_GET_REFRESH_RATE, 0x7f, v0, NO_ERROR_CHECK li t0, HAL_SPD_REFRESH_RATE_125 beq t0, v0, 8f li t0, HAL_SPD_REFRESH_COUNTER_125 li t0, HAL_SPD_REFRESH_RATE_62_5 beq t0, v0, 8f li t0, HAL_SPD_REFRESH_COUNTER_62_5 li t0, HAL_SPD_REFRESH_RATE_31_3 beq t0, v0, 8f li t0, HAL_SPD_REFRESH_COUNTER_31_3 li t0, HAL_SPD_REFRESH_RATE_15_625 beq t0, v0, 8f li t0, HAL_SPD_REFRESH_COUNTER_15_625 li t0, HAL_SPD_REFRESH_RATE_7_8 beq t0, v0, 8f li t0, HAL_SPD_REFRESH_COUNTER_7_8 # Unknown: assume 3.9 microseconds li t0, HAL_SPD_REFRESH_COUNTER_3_98: or s5, t0 # # Setup RAM_WIDTH # beqz v1, 8f nop READ_SPD_VALUE HAL_SPD_GET_ERROR_CHECK_WIDTH, 0x7f, v0, NO_ERROR_CHECK beq v0, zero, 8f nop ori s5, HAL_GALILEO_SDRAM_CFG_RAM_WIDTH8: # # Store the SDRAM configuration register # sw s5, HAL_GALILEO_SDRAM_CONFIG_OFFSET(s7) # # Reset SAA9730 now that we are done with the I2C unit. # This allows the generic PCI library to start with a clean # slate of devices on the PCI bus. # li a0, CYGARC_UNCACHED_ADDRESS(HAL_GALILEO_PCI0_MEM0_BASE) li t0, HAL_SAA9730_SYSRESET_ALL sw t0, HAL_SAA9730_SYSRESET_OFFSET(a0) # # Change the Galileo Base address to HAL_ATLAS_CONTROLLER_BASE # li t0, HAL_ATLAS_CONTROLLER_BASE_ISD_CONFIG sw t0, HAL_GALILEO_INT_SPACE_DECODE_OFFSET(s7) li s7, CYGARC_UNCACHED_ADDRESS(HAL_ATLAS_CONTROLLER_BASE) # # Setup SDRAM Bank 0 Address Decoding # li a0, CYGARC_PHYSICAL_ADDRESS(HAL_ATLAS_RAM_BASE) # Physical bottom of Bank 0 add a1, s0, a0 subu a1, 1 # Physical top of Bank 0 srl t0, a0, HAL_GALILEO_CPU_DECODE_SHIFT # Setup SCS[1:0] srl t1, a1, HAL_GALILEO_CPU_DECODE_SHIFT # First level decoding sw t0, HAL_GALILEO_SCS10_LD_OFFSET(s7) # (ie Processor Decode Region) sw t1, HAL_GALILEO_SCS10_HD_OFFSET(s7) # srl t0, a0, HAL_GALILEO_DEV_DECODE_SHIFT # Setup SCS0 srl t1, a1, HAL_GALILEO_DEV_DECODE_SHIFT # Second level decoding sw t0, HAL_GALILEO_SCS0_LD_OFFSET(s7) # (ie Device Sub-decode Region) sw t1, HAL_GALILEO_SCS0_HD_OFFSET(s7) # # # Setup SDRAM Bank 1 Address Decoding # add a0, s0, CYGARC_PHYSICAL_ADDRESS(HAL_ATLAS_RAM_BASE) # Physical bottom of Bank 1 add a1, a0, s1 subu a1, 1 # Physical top of Bank 1 srl t0, a0, HAL_GALILEO_CPU_DECODE_SHIFT # Setup SCS[3:2] srl t1, a1, HAL_GALILEO_CPU_DECODE_SHIFT # First level decoding sw t0, HAL_GALILEO_SCS32_LD_OFFSET(s7) # (ie Processor Decode Region) sw t1, HAL_GALILEO_SCS32_HD_OFFSET(s7) # srl t0, a0, HAL_GALILEO_DEV_DECODE_SHIFT # Setup SCS2 srl t1, a1, HAL_GALILEO_DEV_DECODE_SHIFT # Second level decoding sw t0, HAL_GALILEO_SCS2_LD_OFFSET(s7) # (ie Device Sub-decode Region) sw t1, HAL_GALILEO_SCS2_HD_OFFSET(s7) # # # Setup PCI windows # li a0, CYGARC_PHYSICAL_ADDRESS(HAL_ATLAS_PCI_MEM0_BASE) add a1, a0, HAL_ATLAS_PCI_MEM0_SIZE subu a1, 1 # Physical top of Bank 1 srl t0, a0, HAL_GALILEO_CPU_DECODE_SHIFT srl t1, a1, HAL_GALILEO_CPU_DECODE_SHIFT sw t0, HAL_GALILEO_PCIMEM0_LD_OFFSET(s7) sw t1, HAL_GALILEO_PCIMEM0_HD_OFFSET(s7) li a0, CYGARC_PHYSICAL_ADDRESS(HAL_ATLAS_PCI_MEM1_BASE) add a1, a0, HAL_ATLAS_PCI_MEM1_SIZE subu a1, 1 # Physical top of Bank 1 srl t0, a0, HAL_GALILEO_CPU_DECODE_SHIFT srl t1, a1, HAL_GALILEO_CPU_DECODE_SHIFT sw t0, HAL_GALILEO_PCIMEM1_LD_OFFSET(s7) sw t1, HAL_GALILEO_PCIMEM1_HD_OFFSET(s7) li a0, CYGARC_PHYSICAL_ADDRESS(HAL_ATLAS_PCI_IO_BASE) add a1, a0, HAL_ATLAS_PCI_IO_SIZE subu a1, 1 # Physical top of Bank 1 srl t0, a0, HAL_GALILEO_CPU_DECODE_SHIFT srl t1, a1, HAL_GALILEO_CPU_DECODE_SHIFT sw t0, HAL_GALILEO_PCIIO_LD_OFFSET(s7) sw t1, HAL_GALILEO_PCIIO_HD_OFFSET(s7) # # Setup FLASH Address Decoding # li a0, CYGARC_PHYSICAL_ADDRESS(HAL_ATLAS_FLASH_BASE) # Physical bottom of Flash Bank add a1, a0, HAL_ATLAS_FLASH_SIZE subu a1, 1 # Physical top of Flash Bank srl t0, a0, HAL_GALILEO_CPU_DECODE_SHIFT # Setup CS[2:0] srl t1, a1, HAL_GALILEO_CPU_DECODE_SHIFT # First level decoding sw t0, HAL_GALILEO_CS20_LD_OFFSET(s7) # (ie Processor Decode Region) sw t1, HAL_GALILEO_CS20_HD_OFFSET(s7) # srl t0, a0, HAL_GALILEO_DEV_DECODE_SHIFT # Setup CS0 srl t1, a1, HAL_GALILEO_DEV_DECODE_SHIFT # Second level decoding sw t0, HAL_GALILEO_CS0_LD_OFFSET(s7) # (ie Device Sub-decode Region) sw t1, HAL_GALILEO_CS0_HD_OFFSET(s7) # # # Now disable all unused decodes # (SCS1, SCS3, PCI1xx, CS1, CS2) # li t0, 0xffff move t1, zero sw t0, HAL_GALILEO_SCS1_LD_OFFSET(s7) sw t1, HAL_GALILEO_SCS1_HD_OFFSET(s7) sw t0, HAL_GALILEO_SCS3_LD_OFFSET(s7) sw t1, HAL_GALILEO_SCS3_HD_OFFSET(s7) sw t0, HAL_GALILEO_PCI1IO_LD_OFFSET(s7) sw t1, HAL_GALILEO_PCI1IO_HD_OFFSET(s7) sw t0, HAL_GALILEO_PCI1MEM0_LD_OFFSET(s7) sw t1, HAL_GALILEO_PCI1MEM0_HD_OFFSET(s7) sw t0, HAL_GALILEO_PCI1MEM1_LD_OFFSET(s7) sw t1, HAL_GALILEO_PCI1MEM1_HD_OFFSET(s7) sw t0, HAL_GALILEO_CS1_LD_OFFSET(s7) sw t1, HAL_GALILEO_CS1_HD_OFFSET(s7) sw t0, HAL_GALILEO_CS2_LD_OFFSET(s7) sw t1, HAL_GALILEO_CS2_HD_OFFSET(s7)noerror: move v0, zero add v1, s0, s1 move ra, s8 jr ra noperror: li v0, HAL_ATLAS_MEMERROR move ra, s8 jr ra nopFUNC_END(hal_atlas_init_sdram)#### Read a value from the SDRAM SPD device.#### Parameters: a0 = subaddress## Returns: v0 = SPD value read##FUNC_START(read_spd_value) # # Setup a base address register # li a1, CYGARC_UNCACHED_ADDRESS(HAL_GALILEO_PCI0_MEM0_BASE) # # Write the I2C command # sll a0, 16 li t0, (HAL_SAA9730_I2CTFR_ATTR1_CONT | \ ((0xa0 << 24) | HAL_SAA9730_I2CTFR_ATTR2_START) | \ ((0xa1 << 8) | HAL_SAA9730_I2CTFR_ATTR0_START)) or a0, t0 sw a0, HAL_SAA9730_I2CTFR_OFFSET(a1)1: lw t0, HAL_SAA9730_I2CTFR_OFFSET(a1) and t0, 0x1 bnez t0, 1b nop # # Read the SPD value # li a0, HAL_SAA9730_I2CTFR_ATTR2_STOP sw a0, HAL_SAA9730_I2CTFR_OFFSET(a1)1: lw t0, HAL_SAA9730_I2CTFR_OFFSET(a1) and t0, 0x1 bnez t0, 1b nop # # Setup the return value. # lw v0, HAL_SAA9730_I2CTFR_OFFSET(a1) srl v0, 24 jr ra nopFUNC_END(read_spd_value)#endif /* defined(CYG_HAL_STARTUP_ROM) || defined(CYG_HAL_STARTUP_ROMRAM) */##-----------------------------------------------------------------------------# Interrupt vector tables.# These tables contain the isr, data and object pointers used to deliver# interrupts to user code. .extern hal_default_isr .data .globl hal_interrupt_handlershal_interrupt_handlers: .rept 25 .long hal_default_isr .endr .globl hal_interrupt_datahal_interrupt_data: .rept 25 .long 0 .endr .globl hal_interrupt_objectshal_interrupt_objects: .rept 25 .long 0 .endr ##-----------------------------------------------------------------------------## end of platform.S
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -