Big endian support for Gallileo, by Aurelien Jarno.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2330 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
		
							parent
							
								
									605686cd7a
								
							
						
					
					
						commit
						0da75eb135
					
				
							
								
								
									
										72
									
								
								hw/gt64xxx.c
									
									
									
									
									
								
							
							
						
						
									
										72
									
								
								hw/gt64xxx.c
									
									
									
									
									
								
							@ -240,14 +240,19 @@ static void gt64120_writel (void *opaque, target_phys_addr_t addr,
 | 
				
			|||||||
    GT64120State *s = opaque;
 | 
					    GT64120State *s = opaque;
 | 
				
			||||||
    uint32_t saddr;
 | 
					    uint32_t saddr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef TARGET_WORDS_BIGENDIAN
 | 
				
			||||||
 | 
					    val = bswap32(val);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    saddr = (addr & 0xfff) >> 2;
 | 
					    saddr = (addr & 0xfff) >> 2;
 | 
				
			||||||
    switch (saddr) {
 | 
					    switch (saddr) {
 | 
				
			||||||
    /* CPU Configuration Register */
 | 
					
 | 
				
			||||||
 | 
					    /* CPU Configuration */
 | 
				
			||||||
    case GT_CPU:
 | 
					    case GT_CPU:
 | 
				
			||||||
        s->regs[GT_CPU] = val;
 | 
					        s->regs[GT_CPU] = val;
 | 
				
			||||||
        gt64120_pci_mapping(s);
 | 
					 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
    case GT_MULTI:
 | 
					    case GT_MULTI:
 | 
				
			||||||
 | 
						/* Read-only register as only one GT64xxx is present on the CPU bus */
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* CPU Address Decode */
 | 
					    /* CPU Address Decode */
 | 
				
			||||||
@ -306,6 +311,13 @@ static void gt64120_writel (void *opaque, target_phys_addr_t addr,
 | 
				
			|||||||
    case GT_CPUERR_DATALO:
 | 
					    case GT_CPUERR_DATALO:
 | 
				
			||||||
    case GT_CPUERR_DATAHI:
 | 
					    case GT_CPUERR_DATAHI:
 | 
				
			||||||
    case GT_CPUERR_PARITY:
 | 
					    case GT_CPUERR_PARITY:
 | 
				
			||||||
 | 
						/* Read-only registers, do nothing */
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* CPU Sync Barrier */
 | 
				
			||||||
 | 
					    case GT_PCI0SYNC:
 | 
				
			||||||
 | 
					    case GT_PCI1SYNC:
 | 
				
			||||||
 | 
						/* Read-only registers, do nothing */
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* ECC */
 | 
					    /* ECC */
 | 
				
			||||||
@ -314,6 +326,7 @@ static void gt64120_writel (void *opaque, target_phys_addr_t addr,
 | 
				
			|||||||
    case GT_ECC_MEM:
 | 
					    case GT_ECC_MEM:
 | 
				
			||||||
    case GT_ECC_CALC:
 | 
					    case GT_ECC_CALC:
 | 
				
			||||||
    case GT_ECC_ERRADDR:
 | 
					    case GT_ECC_ERRADDR:
 | 
				
			||||||
 | 
					        /* Read-only registers, do nothing */
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* PCI Internal */
 | 
					    /* PCI Internal */
 | 
				
			||||||
@ -328,6 +341,16 @@ static void gt64120_writel (void *opaque, target_phys_addr_t addr,
 | 
				
			|||||||
        pci_host_data_writel(s->pci, 0, val);
 | 
					        pci_host_data_writel(s->pci, 0, val);
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* SDRAM Parameters */
 | 
				
			||||||
 | 
					    case GT_SDRAM_B0:
 | 
				
			||||||
 | 
					    case GT_SDRAM_B1:
 | 
				
			||||||
 | 
					    case GT_SDRAM_B2:
 | 
				
			||||||
 | 
					    case GT_SDRAM_B3:
 | 
				
			||||||
 | 
					        /* We don't simulate electrical parameters of the SDRAM.
 | 
				
			||||||
 | 
					           Accept, but ignore the values. */
 | 
				
			||||||
 | 
					        s->regs[saddr] = val;
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    default:
 | 
					    default:
 | 
				
			||||||
#if 0
 | 
					#if 0
 | 
				
			||||||
        printf ("gt64120_writel: Bad register offset 0x%x\n", (int)addr);
 | 
					        printf ("gt64120_writel: Bad register offset 0x%x\n", (int)addr);
 | 
				
			||||||
@ -348,13 +371,31 @@ static uint32_t gt64120_readl (void *opaque,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    switch (saddr) {
 | 
					    switch (saddr) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* CPU Configuration */
 | 
				
			||||||
 | 
					    case GT_MULTI:
 | 
				
			||||||
 | 
					        /* Only one GT64xxx is present on the CPU bus, return
 | 
				
			||||||
 | 
					           the initial value */
 | 
				
			||||||
 | 
					        val = s->regs[saddr];
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* CPU Error Report */
 | 
					    /* CPU Error Report */
 | 
				
			||||||
    case GT_CPUERR_ADDRLO:
 | 
					    case GT_CPUERR_ADDRLO:
 | 
				
			||||||
    case GT_CPUERR_ADDRHI:
 | 
					    case GT_CPUERR_ADDRHI:
 | 
				
			||||||
    case GT_CPUERR_DATALO:
 | 
					    case GT_CPUERR_DATALO:
 | 
				
			||||||
    case GT_CPUERR_DATAHI:
 | 
					    case GT_CPUERR_DATAHI:
 | 
				
			||||||
    case GT_CPUERR_PARITY:
 | 
					    case GT_CPUERR_PARITY:
 | 
				
			||||||
        return 0;
 | 
					        /* Emulated memory has no error, always return the initial
 | 
				
			||||||
 | 
					           values */ 
 | 
				
			||||||
 | 
					        val = s->regs[saddr];
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* CPU Sync Barrier */
 | 
				
			||||||
 | 
					    case GT_PCI0SYNC:
 | 
				
			||||||
 | 
					    case GT_PCI1SYNC:
 | 
				
			||||||
 | 
					        /* Reading those register should empty all FIFO on the PCI
 | 
				
			||||||
 | 
					           bus, which are not emulated. The return value should be
 | 
				
			||||||
 | 
					           a random value that should be ignored. */
 | 
				
			||||||
 | 
					        val = 0xc000ffee; 
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* ECC */
 | 
					    /* ECC */
 | 
				
			||||||
@ -363,11 +404,12 @@ static uint32_t gt64120_readl (void *opaque,
 | 
				
			|||||||
    case GT_ECC_MEM:
 | 
					    case GT_ECC_MEM:
 | 
				
			||||||
    case GT_ECC_CALC:
 | 
					    case GT_ECC_CALC:
 | 
				
			||||||
    case GT_ECC_ERRADDR:
 | 
					    case GT_ECC_ERRADDR:
 | 
				
			||||||
        return 0;
 | 
					        /* Emulated memory has no error, always return the initial
 | 
				
			||||||
 | 
					           values */ 
 | 
				
			||||||
 | 
					        val = s->regs[saddr];
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    case GT_CPU:
 | 
					    case GT_CPU:
 | 
				
			||||||
    case GT_MULTI:
 | 
					 | 
				
			||||||
    case GT_PCI0IOLD:
 | 
					    case GT_PCI0IOLD:
 | 
				
			||||||
    case GT_PCI0M0LD:
 | 
					    case GT_PCI0M0LD:
 | 
				
			||||||
    case GT_PCI0M1LD:
 | 
					    case GT_PCI0M1LD:
 | 
				
			||||||
@ -394,6 +436,16 @@ static uint32_t gt64120_readl (void *opaque,
 | 
				
			|||||||
 	val = pic_intack_read(isa_pic);
 | 
					 	val = pic_intack_read(isa_pic);
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* SDRAM Parameters */
 | 
				
			||||||
 | 
					    case GT_SDRAM_B0:
 | 
				
			||||||
 | 
					    case GT_SDRAM_B1:
 | 
				
			||||||
 | 
					    case GT_SDRAM_B2:
 | 
				
			||||||
 | 
					    case GT_SDRAM_B3:
 | 
				
			||||||
 | 
					        /* We don't simulate electrical parameters of the SDRAM.
 | 
				
			||||||
 | 
					           Just return the last written value. */
 | 
				
			||||||
 | 
					        val = s->regs[saddr];
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* PCI Internal */
 | 
					    /* PCI Internal */
 | 
				
			||||||
    case GT_PCI0_CFGADDR:
 | 
					    case GT_PCI0_CFGADDR:
 | 
				
			||||||
        val = s->pci->config_reg;
 | 
					        val = s->pci->config_reg;
 | 
				
			||||||
@ -410,7 +462,11 @@ static uint32_t gt64120_readl (void *opaque,
 | 
				
			|||||||
        break;
 | 
					        break;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef TARGET_WORDS_BIGENDIAN
 | 
				
			||||||
 | 
					    return bswap32(val);
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
    return val;
 | 
					    return val;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static CPUWriteMemoryFunc *gt64120_write[] = {
 | 
					static CPUWriteMemoryFunc *gt64120_write[] = {
 | 
				
			||||||
@ -521,6 +577,12 @@ void gt64120_reset(void *opaque)
 | 
				
			|||||||
    s->regs[GT_ECC_CALC]      = 0x00000000;
 | 
					    s->regs[GT_ECC_CALC]      = 0x00000000;
 | 
				
			||||||
    s->regs[GT_ECC_ERRADDR]   = 0x00000000;
 | 
					    s->regs[GT_ECC_ERRADDR]   = 0x00000000;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* SDRAM Parameters */
 | 
				
			||||||
 | 
					    s->regs[GT_SDRAM_B0]      = 0x00000005;    
 | 
				
			||||||
 | 
					    s->regs[GT_SDRAM_B1]      = 0x00000005;    
 | 
				
			||||||
 | 
					    s->regs[GT_SDRAM_B2]      = 0x00000005;    
 | 
				
			||||||
 | 
					    s->regs[GT_SDRAM_B3]      = 0x00000005;    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* PCI Internal FIXME: not complete*/
 | 
					    /* PCI Internal FIXME: not complete*/
 | 
				
			||||||
#ifdef TARGET_WORDS_BIGENDIAN
 | 
					#ifdef TARGET_WORDS_BIGENDIAN
 | 
				
			||||||
    s->regs[GT_PCI0_CMD]      = 0x00000000;
 | 
					    s->regs[GT_PCI0_CMD]      = 0x00000000;
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user