mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-10-31 08:44:41 +00:00 
			
		
		
		
	bcma: support bringing up bus hosted on PCIe Gen 2
Signed-off-by: Rafał Miłecki <zajec5@gmail.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
		
							parent
							
								
									5b6ff664c8
								
							
						
					
					
						commit
						804e27dee4
					
				
					 4 changed files with 32 additions and 3 deletions
				
			
		|  | @ -104,6 +104,9 @@ u32 bcma_pcie_read(struct bcma_drv_pci *pc, u32 address); | |||
| void bcma_core_pci_up(struct bcma_drv_pci *pc); | ||||
| void bcma_core_pci_down(struct bcma_drv_pci *pc); | ||||
| 
 | ||||
| /* driver_pcie2.c */ | ||||
| void bcma_core_pcie2_up(struct bcma_drv_pcie2 *pcie2); | ||||
| 
 | ||||
| extern int bcma_chipco_watchdog_register(struct bcma_drv_cc *cc); | ||||
| 
 | ||||
| #ifdef CONFIG_BCMA_DRIVER_PCI_HOSTMODE | ||||
|  |  | |||
|  | @ -156,14 +156,23 @@ static void pciedev_reg_pm_clk_period(struct bcma_drv_pcie2 *pcie2) | |||
| 
 | ||||
| void bcma_core_pcie2_init(struct bcma_drv_pcie2 *pcie2) | ||||
| { | ||||
| 	struct bcma_chipinfo *ci = &pcie2->core->bus->chipinfo; | ||||
| 	struct bcma_bus *bus = pcie2->core->bus; | ||||
| 	struct bcma_chipinfo *ci = &bus->chipinfo; | ||||
| 	u32 tmp; | ||||
| 
 | ||||
| 	tmp = pcie2_read32(pcie2, BCMA_CORE_PCIE2_SPROM(54)); | ||||
| 	if ((tmp & 0xe) >> 1 == 2) | ||||
| 		bcma_core_pcie2_cfg_write(pcie2, 0x4e0, 0x17); | ||||
| 
 | ||||
| 	/* TODO: Do we need pcie_reqsize? */ | ||||
| 	switch (bus->chipinfo.id) { | ||||
| 	case BCMA_CHIP_ID_BCM4360: | ||||
| 	case BCMA_CHIP_ID_BCM4352: | ||||
| 		pcie2->reqsize = 1024; | ||||
| 		break; | ||||
| 	default: | ||||
| 		pcie2->reqsize = 128; | ||||
| 		break; | ||||
| 	} | ||||
| 
 | ||||
| 	if (ci->id == BCMA_CHIP_ID_BCM4360 && ci->rev > 3) | ||||
| 		bcma_core_pcie2_war_delay_perst_enab(pcie2, true); | ||||
|  | @ -173,3 +182,18 @@ void bcma_core_pcie2_init(struct bcma_drv_pcie2 *pcie2) | |||
| 	pciedev_crwlpciegen2_180(pcie2); | ||||
| 	pciedev_crwlpciegen2_182(pcie2); | ||||
| } | ||||
| 
 | ||||
| /**************************************************
 | ||||
|  * Runtime ops. | ||||
|  **************************************************/ | ||||
| 
 | ||||
| void bcma_core_pcie2_up(struct bcma_drv_pcie2 *pcie2) | ||||
| { | ||||
| 	struct bcma_bus *bus = pcie2->core->bus; | ||||
| 	struct pci_dev *dev = bus->host_pci; | ||||
| 	int err; | ||||
| 
 | ||||
| 	err = pcie_set_readrq(dev, pcie2->reqsize); | ||||
| 	if (err) | ||||
| 		bcma_err(bus, "Error setting PCI_EXP_DEVCTL_READRQ: %d\n", err); | ||||
| } | ||||
|  |  | |||
|  | @ -322,7 +322,7 @@ void bcma_host_pci_up(struct bcma_bus *bus) | |||
| 		return; | ||||
| 
 | ||||
| 	if (bus->host_is_pcie2) | ||||
| 		pr_warn("Bringing up bus with PCIe Gen 2 host is unsupported yet\n"); | ||||
| 		bcma_core_pcie2_up(&bus->drv_pcie2); | ||||
| 	else | ||||
| 		bcma_core_pci_up(&bus->drv_pci[0]); | ||||
| } | ||||
|  |  | |||
|  | @ -143,6 +143,8 @@ | |||
| 
 | ||||
| struct bcma_drv_pcie2 { | ||||
| 	struct bcma_device *core; | ||||
| 
 | ||||
| 	u16 reqsize; | ||||
| }; | ||||
| 
 | ||||
| #define pcie2_read16(pcie2, offset)		bcma_read16((pcie2)->core, offset) | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Rafał Miłecki
						Rafał Miłecki