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:
@@ -16,6 +16,10 @@
|
|||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <asm/pci.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,
|
int pci_x86_read_config(struct udevice *bus, pci_dev_t bdf, uint offset,
|
||||||
ulong *valuep, enum pci_size_t size)
|
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;
|
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])
|
void pci_assign_irqs(int bus, int device, u8 irq[4])
|
||||||
{
|
{
|
||||||
pci_dev_t bdf;
|
pci_dev_t bdf;
|
||||||
|
@@ -17,12 +17,52 @@
|
|||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
#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,
|
int pci_x86_read_config(struct udevice *bus, pci_dev_t bdf, uint offset,
|
||||||
ulong *valuep, enum pci_size_t size);
|
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,
|
int pci_x86_write_config(struct udevice *bus, pci_dev_t bdf, uint offset,
|
||||||
ulong value, enum pci_size_t size);
|
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
|
* Assign IRQ number to a PCI device
|
||||||
*
|
*
|
||||||
|
Reference in New Issue
Block a user