dbdma: fix load_word/store_word value endianness
The values to read/write to/from physical memory are copied directly to the physical address with no endian swapping required. Also add some extra information to debugging output while we are here. Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
		
							parent
							
								
									3f0d4128dc
								
							
						
					
					
						commit
						e12f50b900
					
				| 
						 | 
				
			
			@ -350,9 +350,8 @@ static void load_word(DBDMA_channel *ch, int key, uint32_t addr,
 | 
			
		|||
                     uint16_t len)
 | 
			
		||||
{
 | 
			
		||||
    dbdma_cmd *current = &ch->current;
 | 
			
		||||
    uint32_t val;
 | 
			
		||||
 | 
			
		||||
    DBDMA_DPRINTFCH(ch, "load_word\n");
 | 
			
		||||
    DBDMA_DPRINTFCH(ch, "load_word %d bytes, addr=%08x\n", len, addr);
 | 
			
		||||
 | 
			
		||||
    /* only implements KEY_SYSTEM */
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -362,14 +361,7 @@ static void load_word(DBDMA_channel *ch, int key, uint32_t addr,
 | 
			
		|||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    dma_memory_read(&address_space_memory, addr, &val, len);
 | 
			
		||||
 | 
			
		||||
    if (len == 2)
 | 
			
		||||
        val = (val << 16) | (current->cmd_dep & 0x0000ffff);
 | 
			
		||||
    else if (len == 1)
 | 
			
		||||
        val = (val << 24) | (current->cmd_dep & 0x00ffffff);
 | 
			
		||||
 | 
			
		||||
    current->cmd_dep = val;
 | 
			
		||||
    dma_memory_read(&address_space_memory, addr, ¤t->cmd_dep, len);
 | 
			
		||||
 | 
			
		||||
    if (conditional_wait(ch))
 | 
			
		||||
        goto wait;
 | 
			
		||||
| 
						 | 
				
			
			@ -389,9 +381,9 @@ static void store_word(DBDMA_channel *ch, int key, uint32_t addr,
 | 
			
		|||
                      uint16_t len)
 | 
			
		||||
{
 | 
			
		||||
    dbdma_cmd *current = &ch->current;
 | 
			
		||||
    uint32_t val;
 | 
			
		||||
 | 
			
		||||
    DBDMA_DPRINTFCH(ch, "store_word\n");
 | 
			
		||||
    DBDMA_DPRINTFCH(ch, "store_word %d bytes, addr=%08x pa=%x\n",
 | 
			
		||||
                    len, addr, le32_to_cpu(current->cmd_dep));
 | 
			
		||||
 | 
			
		||||
    /* only implements KEY_SYSTEM */
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -401,13 +393,7 @@ static void store_word(DBDMA_channel *ch, int key, uint32_t addr,
 | 
			
		|||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    val = current->cmd_dep;
 | 
			
		||||
    if (len == 2)
 | 
			
		||||
        val >>= 16;
 | 
			
		||||
    else if (len == 1)
 | 
			
		||||
        val >>= 24;
 | 
			
		||||
 | 
			
		||||
    dma_memory_write(&address_space_memory, addr, &val, len);
 | 
			
		||||
    dma_memory_write(&address_space_memory, addr, ¤t->cmd_dep, len);
 | 
			
		||||
 | 
			
		||||
    if (conditional_wait(ch))
 | 
			
		||||
        goto wait;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue