mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-31 05:54:26 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			59 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| This patch allows passing in the gpio output mask used for GPIO0-7 on the
 | |
| PLX PCIe bridge. These GPIO's are used for PERST# on the downstream ports.
 | |
| 
 | |
| Allowing the kernel to override the default configuration allows for keeping
 | |
| specific devices held in reset. One important use of this is to allow
 | |
| temporarily disabling devices that may request too many resources such as
 | |
| an unprogrammed i210 device.
 | |
| 
 | |
| --- a/arch/arm/mach-imx/mach-imx6q.c
 | |
| +++ b/arch/arm/mach-imx/mach-imx6q.c
 | |
| @@ -84,6 +84,7 @@ static int ksz9031rn_phy_fixup(struct ph
 | |
|   * fixup for PLX PEX8909 bridge to configure GPIO1-7 as output High
 | |
|   * as they are used for slots1-7 PERST#
 | |
|   */
 | |
| +unsigned int ventana_plx_gpio = 0xfe;
 | |
|  static void ventana_pciesw_early_fixup(struct pci_dev *dev)
 | |
|  {
 | |
|  	u32 dw;
 | |
| @@ -95,19 +96,25 @@ static void ventana_pciesw_early_fixup(s
 | |
|  		return;
 | |
|  
 | |
|  	pci_read_config_dword(dev, 0x62c, &dw);
 | |
| +	dev_info(&dev->dev, "de-asserting downstream PERST# 0x%04x\n",
 | |
| +		 ventana_plx_gpio);
 | |
|  	dw |= 0xaaa8; // GPIO1-7 outputs
 | |
|  	pci_write_config_dword(dev, 0x62c, dw);
 | |
| -
 | |
| -	pci_read_config_dword(dev, 0x644, &dw);
 | |
| -	dw |= 0xfe;   // GPIO1-7 output high
 | |
| -	pci_write_config_dword(dev, 0x644, dw);
 | |
| -
 | |
| +	pci_write_config_dword(dev, 0x644, ventana_plx_gpio);
 | |
|  	msleep(100);
 | |
|  }
 | |
|  DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_PLX, 0x8609, ventana_pciesw_early_fixup);
 | |
|  DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_PLX, 0x8606, ventana_pciesw_early_fixup);
 | |
|  DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_PLX, 0x8604, ventana_pciesw_early_fixup);
 | |
|  
 | |
| +static int __init setup_ventana_plx_gpio(char *str)
 | |
| +{
 | |
| +	get_option(&str, &ventana_plx_gpio);
 | |
| +
 | |
| +	return 0;
 | |
| +}
 | |
| +early_param("plx_gpio", setup_ventana_plx_gpio);
 | |
| +
 | |
|  static int ar8031_phy_fixup(struct phy_device *dev)
 | |
|  {
 | |
|  	u16 val;
 | |
| @@ -328,7 +335,7 @@ static void __init imx6q_init_irq(void)
 | |
|  	irqchip_init();
 | |
|  }
 | |
|  
 | |
| -static const char *imx6q_dt_compat[] __initconst = {
 | |
| +static const char *imx6q_dt_compat[] __initdata = {
 | |
|  	"fsl,imx6dl",
 | |
|  	"fsl,imx6q",
 | |
|  	NULL,
 |