mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-25 14:10:43 +00:00
x86: pci: Add a function to clear and set PCI config regs
At present the x86 pre-DM equivalent of pci_bus_clrset_config32() does not exist. Add it to simplify PCI init code on x86. Also add the missing functions to this header. Signed-off-by: Simon Glass <sjg@chromium.org> Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
This commit is contained in:
parent
1eeb55755f
commit
e46d00c77c
2 changed files with 59 additions and 0 deletions
|
@ -16,6 +16,10 @@
|
|||
#include <asm/io.h>
|
||||
#include <asm/pci.h>
|
||||
|
||||
/*
|
||||
* TODO(sjg@chromium.org): Drop the first parameter from each of these
|
||||
* functions since it is not used.
|
||||
*/
|
||||
int pci_x86_read_config(struct udevice *bus, pci_dev_t bdf, uint offset,
|
||||
ulong *valuep, enum pci_size_t size)
|
||||
{
|
||||
|
@ -54,6 +58,21 @@ int pci_x86_write_config(struct udevice *bus, pci_dev_t bdf, uint offset,
|
|||
return 0;
|
||||
}
|
||||
|
||||
int pci_x86_clrset_config(struct udevice *bus, pci_dev_t bdf, uint offset,
|
||||
ulong clr, ulong set, enum pci_size_t size)
|
||||
{
|
||||
ulong value;
|
||||
int ret;
|
||||
|
||||
ret = pci_x86_read_config(bus, bdf, offset, &value, size);
|
||||
if (ret)
|
||||
return ret;
|
||||
value &= ~clr;
|
||||
value |= set;
|
||||
|
||||
return pci_x86_write_config(bus, bdf, offset, value, size);
|
||||
}
|
||||
|
||||
void pci_assign_irqs(int bus, int device, u8 irq[4])
|
||||
{
|
||||
pci_dev_t bdf;
|
||||
|
|
|
@ -17,12 +17,52 @@
|
|||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
/**
|
||||
* pci_x86_read_config() - Read a configuration value from a device
|
||||
*
|
||||
* This function can be called before PCI is set up in driver model.
|
||||
*
|
||||
* @bus: Bus to read from (ignored, can be NULL)
|
||||
* @bdf: PCI device address: bus, device and function -see PCI_BDF()
|
||||
* @offset: Register offset to read
|
||||
* @valuep: Place to put the returned value
|
||||
* @size: Access size
|
||||
* @return 0 if OK, -ve on error
|
||||
*/
|
||||
int pci_x86_read_config(struct udevice *bus, pci_dev_t bdf, uint offset,
|
||||
ulong *valuep, enum pci_size_t size);
|
||||
|
||||
/**
|
||||
* pci_bus_write_config() - Write a configuration value to a device
|
||||
*
|
||||
* This function can be called before PCI is set up in driver model.
|
||||
*
|
||||
* @bus: Bus to read from (ignored, can be NULL)
|
||||
* @bdf: PCI device address: bus, device and function -see PCI_BDF()
|
||||
* @offset: Register offset to write
|
||||
* @value: Value to write
|
||||
* @size: Access size
|
||||
* @return 0 if OK, -ve on error
|
||||
*/
|
||||
int pci_x86_write_config(struct udevice *bus, pci_dev_t bdf, uint offset,
|
||||
ulong value, enum pci_size_t size);
|
||||
|
||||
/**
|
||||
* pci_bus_clrset_config32() - Update a configuration value for a device
|
||||
*
|
||||
* The register at @offset is updated to (oldvalue & ~clr) | set. This function
|
||||
* can be called before PCI is set up in driver model.
|
||||
*
|
||||
* @bus: Bus to read from (ignored, can be NULL)
|
||||
* @bdf: PCI device address: bus, device and function -see PCI_BDF()
|
||||
* @offset: Register offset to update
|
||||
* @clr: Bits to clear
|
||||
* @set: Bits to set
|
||||
* @return 0 if OK, -ve on error
|
||||
*/
|
||||
int pci_x86_clrset_config(struct udevice *bus, pci_dev_t bdf, uint offset,
|
||||
ulong clr, ulong set, enum pci_size_t size);
|
||||
|
||||
/**
|
||||
* Assign IRQ number to a PCI device
|
||||
*
|
||||
|
|
Loading…
Reference in a new issue