mirror of
https://github.com/linux-sunxi/u-boot-sunxi.git
synced 2024-02-12 11:16:03 +08:00
dm: sandbox: pci: Add PCI support for sandbox
Add the required header information, device tree nodes and I/O accessor functions to support PCI on sandbox. All devices are emulated by drivers which can be added as required for testing or development. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
@ -22,10 +22,7 @@ void *map_physmem(phys_addr_t paddr, unsigned long len, unsigned long flags);
|
||||
/*
|
||||
* Take down a mapping set up by map_physmem().
|
||||
*/
|
||||
static inline void unmap_physmem(void *vaddr, unsigned long flags)
|
||||
{
|
||||
|
||||
}
|
||||
void unmap_physmem(const void *vaddr, unsigned long flags);
|
||||
|
||||
/* For sandbox, we want addresses to point into our RAM buffer */
|
||||
static inline void *map_sysmem(phys_addr_t paddr, unsigned long len)
|
||||
@ -33,8 +30,10 @@ static inline void *map_sysmem(phys_addr_t paddr, unsigned long len)
|
||||
return map_physmem(paddr, len, MAP_WRBACK);
|
||||
}
|
||||
|
||||
/* Remove a previous mapping */
|
||||
static inline void unmap_sysmem(const void *vaddr)
|
||||
{
|
||||
unmap_physmem(vaddr, MAP_WRBACK);
|
||||
}
|
||||
|
||||
/* Map from a pointer to our RAM buffer */
|
||||
@ -48,6 +47,15 @@ phys_addr_t map_to_sysmem(const void *ptr);
|
||||
#define writew(v, addr)
|
||||
#define writel(v, addr)
|
||||
|
||||
/* I/O access functions */
|
||||
int inl(unsigned int addr);
|
||||
int inw(unsigned int addr);
|
||||
int inb(unsigned int addr);
|
||||
|
||||
void outl(unsigned int value, unsigned int addr);
|
||||
void outw(unsigned int value, unsigned int addr);
|
||||
void outb(unsigned int value, unsigned int addr);
|
||||
|
||||
#include <iotrace.h>
|
||||
|
||||
#endif
|
||||
|
12
arch/sandbox/include/asm/processor.h
Normal file
12
arch/sandbox/include/asm/processor.h
Normal file
@ -0,0 +1,12 @@
|
||||
/*
|
||||
* Copyright (c) 2014 Google, Inc
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#ifndef _ASM_PROCESSOR_H
|
||||
#define _ASM_PROCESSOR_H
|
||||
|
||||
/* This file is required for PCI */
|
||||
|
||||
#endif
|
@ -10,7 +10,12 @@
|
||||
#define __ASM_TEST_H
|
||||
|
||||
/* The sandbox driver always permits an I2C device with this address */
|
||||
#define SANDBOX_I2C_TEST_ADDR 0x59
|
||||
#define SANDBOX_I2C_TEST_ADDR 0x59
|
||||
|
||||
#define SANDBOX_PCI_VENDOR_ID 0x1234
|
||||
#define SANDBOX_PCI_DEVICE_ID 0x5678
|
||||
#define SANDBOX_PCI_CLASS_CODE PCI_CLASS_CODE_COMM
|
||||
#define SANDBOX_PCI_CLASS_SUB_CODE PCI_CLASS_SUB_CODE_COMM_SERIAL
|
||||
|
||||
enum sandbox_i2c_eeprom_test_mode {
|
||||
SIE_TEST_MODE_NONE,
|
||||
|
@ -27,4 +27,52 @@ int cleanup_before_linux(void);
|
||||
/* drivers/video/sandbox_sdl.c */
|
||||
int sandbox_lcd_sdl_early_init(void);
|
||||
|
||||
/**
|
||||
* pci_map_physmem() - map a PCI device into memory
|
||||
*
|
||||
* This is used on sandbox to map a device into memory so that it can be
|
||||
* used with normal memory access. After this call, some part of the device's
|
||||
* internal structure becomes visible.
|
||||
*
|
||||
* This function is normally called from sandbox's map_sysmem() automatically.
|
||||
*
|
||||
* @paddr: Physical memory address, normally corresponding to a PCI BAR
|
||||
* @lenp: On entry, the size of the area to map, On exit it is updated
|
||||
* to the size actually mapped, which may be less if the device
|
||||
* has less space
|
||||
* @devp: Returns the device which mapped into this space
|
||||
* @ptrp: Returns a pointer to the mapped address. The device's space
|
||||
* can be accessed as @lenp bytes starting here
|
||||
* @return 0 if OK, -ve on error
|
||||
*/
|
||||
int pci_map_physmem(phys_addr_t paddr, unsigned long *lenp,
|
||||
struct udevice **devp, void **ptrp);
|
||||
|
||||
/**
|
||||
* pci_unmap_physmem() - undo a memory mapping
|
||||
*
|
||||
* This must be called after pci_map_physmem() to undo the mapping.
|
||||
*
|
||||
* @paddr: Physical memory address, as passed to pci_map_physmem()
|
||||
* @len: Size of area mapped, as returned by pci_map_physmem()
|
||||
* @dev: Device to unmap, as returned by pci_map_physmem()
|
||||
* @return 0 if OK, -ve on error
|
||||
*/
|
||||
int pci_unmap_physmem(const void *addr, unsigned long len,
|
||||
struct udevice *dev);
|
||||
|
||||
/**
|
||||
* sandbox_set_enable_pci_map() - Enable / disable PCI address mapping
|
||||
*
|
||||
* Since address mapping involves calling every driver, provide a way to
|
||||
* enable and disable this. It can be handled automatically by the emulator
|
||||
* uclass, which knows if any emulators are currently active.
|
||||
*
|
||||
* If this is disabled, pci_map_physmem() will not be called from
|
||||
* map_sysmem().
|
||||
*
|
||||
* @enable: 0 to disable, 1 to enable
|
||||
*/
|
||||
void sandbox_set_enable_pci_map(int enable);
|
||||
|
||||
#endif /* _U_BOOT_SANDBOX_H_ */
|
||||
|
Reference in New Issue
Block a user