dm: pci: Enable VGA address forwarding on bridges
To support graphics card behind a PCI bridge, the bridge control register (offset 0x3e) in the configuration space must turn on VGA address forwarding. Signed-off-by: Bin Meng <bmeng.cn@gmail.com> Acked-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
		
							parent
							
								
									069155cbb4
								
							
						
					
					
						commit
						bbbcb52628
					
				|  | @ -364,9 +364,23 @@ int dm_pci_read_config32(struct udevice *dev, int offset, u32 *valuep) | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static void set_vga_bridge_bits(struct udevice *dev) | ||||||
|  | { | ||||||
|  | 	struct udevice *parent = dev->parent; | ||||||
|  | 	u16 bc; | ||||||
|  | 
 | ||||||
|  | 	while (parent->seq != 0) { | ||||||
|  | 		dm_pci_read_config16(parent, PCI_BRIDGE_CONTROL, &bc); | ||||||
|  | 		bc |= PCI_BRIDGE_CTL_VGA; | ||||||
|  | 		dm_pci_write_config16(parent, PCI_BRIDGE_CONTROL, bc); | ||||||
|  | 		parent = parent->parent; | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
| int pci_auto_config_devices(struct udevice *bus) | int pci_auto_config_devices(struct udevice *bus) | ||||||
| { | { | ||||||
| 	struct pci_controller *hose = bus->uclass_priv; | 	struct pci_controller *hose = bus->uclass_priv; | ||||||
|  | 	struct pci_child_platdata *pplat; | ||||||
| 	unsigned int sub_bus; | 	unsigned int sub_bus; | ||||||
| 	struct udevice *dev; | 	struct udevice *dev; | ||||||
| 	int ret; | 	int ret; | ||||||
|  | @ -386,6 +400,10 @@ int pci_auto_config_devices(struct udevice *bus) | ||||||
| 			return ret; | 			return ret; | ||||||
| 		max_bus = ret; | 		max_bus = ret; | ||||||
| 		sub_bus = max(sub_bus, max_bus); | 		sub_bus = max(sub_bus, max_bus); | ||||||
|  | 
 | ||||||
|  | 		pplat = dev_get_parent_platdata(dev); | ||||||
|  | 		if (pplat->class == (PCI_CLASS_DISPLAY_VGA << 8)) | ||||||
|  | 			set_vga_bridge_bits(dev); | ||||||
| 	} | 	} | ||||||
| 	debug("%s: done\n", __func__); | 	debug("%s: done\n", __func__); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue