Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

bcma: add driver for PCIe Gen 2 core

New Broadcom PCIe devices (802.11ac ones?) use Gen2 and have to be
initialized differently.

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>

authored by

Rafał Miłecki and committed by
John W. Linville
f473832f fe5e499f

+344
+1
drivers/bcma/Makefile
··· 3 3 bcma-$(CONFIG_BCMA_SFLASH) += driver_chipcommon_sflash.o 4 4 bcma-$(CONFIG_BCMA_NFLASH) += driver_chipcommon_nflash.o 5 5 bcma-y += driver_pci.o 6 + bcma-y += driver_pcie2.o 6 7 bcma-$(CONFIG_BCMA_DRIVER_PCI_HOSTMODE) += driver_pci_host.o 7 8 bcma-$(CONFIG_BCMA_DRIVER_MIPS) += driver_mips.o 8 9 bcma-$(CONFIG_BCMA_DRIVER_GMAC_CMN) += driver_gmac_cmn.o
+175
drivers/bcma/driver_pcie2.c
··· 1 + /* 2 + * Broadcom specific AMBA 3 + * PCIe Gen 2 Core 4 + * 5 + * Copyright 2014, Broadcom Corporation 6 + * Copyright 2014, Rafał Miłecki <zajec5@gmail.com> 7 + * 8 + * Licensed under the GNU/GPL. See COPYING for details. 9 + */ 10 + 11 + #include "bcma_private.h" 12 + #include <linux/bcma/bcma.h> 13 + 14 + /************************************************** 15 + * R/W ops. 16 + **************************************************/ 17 + 18 + #if 0 19 + static u32 bcma_core_pcie2_cfg_read(struct bcma_drv_pcie2 *pcie2, u32 addr) 20 + { 21 + pcie2_write32(pcie2, BCMA_CORE_PCIE2_CONFIGINDADDR, addr); 22 + pcie2_read32(pcie2, BCMA_CORE_PCIE2_CONFIGINDADDR); 23 + return pcie2_read32(pcie2, BCMA_CORE_PCIE2_CONFIGINDDATA); 24 + } 25 + #endif 26 + 27 + static void bcma_core_pcie2_cfg_write(struct bcma_drv_pcie2 *pcie2, u32 addr, 28 + u32 val) 29 + { 30 + pcie2_write32(pcie2, BCMA_CORE_PCIE2_CONFIGINDADDR, addr); 31 + pcie2_write32(pcie2, BCMA_CORE_PCIE2_CONFIGINDDATA, val); 32 + } 33 + 34 + /************************************************** 35 + * Init. 36 + **************************************************/ 37 + 38 + static u32 bcma_core_pcie2_war_delay_perst_enab(struct bcma_drv_pcie2 *pcie2, 39 + bool enable) 40 + { 41 + u32 val; 42 + 43 + /* restore back to default */ 44 + val = pcie2_read32(pcie2, BCMA_CORE_PCIE2_CLK_CONTROL); 45 + val |= PCIE2_CLKC_DLYPERST; 46 + val &= ~PCIE2_CLKC_DISSPROMLD; 47 + if (enable) { 48 + val &= ~PCIE2_CLKC_DLYPERST; 49 + val |= PCIE2_CLKC_DISSPROMLD; 50 + } 51 + pcie2_write32(pcie2, (BCMA_CORE_PCIE2_CLK_CONTROL), val); 52 + /* flush */ 53 + return pcie2_read32(pcie2, BCMA_CORE_PCIE2_CLK_CONTROL); 54 + } 55 + 56 + static void bcma_core_pcie2_set_ltr_vals(struct bcma_drv_pcie2 *pcie2) 57 + { 58 + /* LTR0 */ 59 + pcie2_write32(pcie2, BCMA_CORE_PCIE2_CONFIGINDADDR, 0x844); 60 + pcie2_write32(pcie2, BCMA_CORE_PCIE2_CONFIGINDDATA, 0x883c883c); 61 + /* LTR1 */ 62 + pcie2_write32(pcie2, BCMA_CORE_PCIE2_CONFIGINDADDR, 0x848); 63 + pcie2_write32(pcie2, BCMA_CORE_PCIE2_CONFIGINDDATA, 0x88648864); 64 + /* LTR2 */ 65 + pcie2_write32(pcie2, BCMA_CORE_PCIE2_CONFIGINDADDR, 0x84C); 66 + pcie2_write32(pcie2, BCMA_CORE_PCIE2_CONFIGINDDATA, 0x90039003); 67 + } 68 + 69 + static void bcma_core_pcie2_hw_ltr_war(struct bcma_drv_pcie2 *pcie2) 70 + { 71 + u8 core_rev = pcie2->core->id.rev; 72 + u32 devstsctr2; 73 + 74 + if (core_rev < 2 || core_rev == 10 || core_rev > 13) 75 + return; 76 + 77 + pcie2_write32(pcie2, BCMA_CORE_PCIE2_CONFIGINDADDR, 78 + PCIE2_CAP_DEVSTSCTRL2_OFFSET); 79 + devstsctr2 = pcie2_read32(pcie2, BCMA_CORE_PCIE2_CONFIGINDDATA); 80 + if (devstsctr2 & PCIE2_CAP_DEVSTSCTRL2_LTRENAB) { 81 + /* force the right LTR values */ 82 + bcma_core_pcie2_set_ltr_vals(pcie2); 83 + 84 + /* TODO: 85 + si_core_wrapperreg(pcie2, 3, 0x60, 0x8080, 0); */ 86 + 87 + /* enable the LTR */ 88 + devstsctr2 |= PCIE2_CAP_DEVSTSCTRL2_LTRENAB; 89 + pcie2_write32(pcie2, BCMA_CORE_PCIE2_CONFIGINDADDR, 90 + PCIE2_CAP_DEVSTSCTRL2_OFFSET); 91 + pcie2_write32(pcie2, BCMA_CORE_PCIE2_CONFIGINDDATA, devstsctr2); 92 + 93 + /* set the LTR state to be active */ 94 + pcie2_write32(pcie2, BCMA_CORE_PCIE2_LTR_STATE, 95 + PCIE2_LTR_ACTIVE); 96 + usleep_range(1000, 2000); 97 + 98 + /* set the LTR state to be sleep */ 99 + pcie2_write32(pcie2, BCMA_CORE_PCIE2_LTR_STATE, 100 + PCIE2_LTR_SLEEP); 101 + usleep_range(1000, 2000); 102 + } 103 + } 104 + 105 + static void pciedev_crwlpciegen2(struct bcma_drv_pcie2 *pcie2) 106 + { 107 + u8 core_rev = pcie2->core->id.rev; 108 + bool pciewar160, pciewar162; 109 + 110 + pciewar160 = core_rev == 7 || core_rev == 9 || core_rev == 11; 111 + pciewar162 = core_rev == 5 || core_rev == 7 || core_rev == 8 || 112 + core_rev == 9 || core_rev == 11; 113 + 114 + if (!pciewar160 && !pciewar162) 115 + return; 116 + 117 + /* TODO */ 118 + #if 0 119 + pcie2_set32(pcie2, BCMA_CORE_PCIE2_CLK_CONTROL, 120 + PCIE_DISABLE_L1CLK_GATING); 121 + #if 0 122 + pcie2_write32(pcie2, BCMA_CORE_PCIE2_CONFIGINDADDR, 123 + PCIEGEN2_COE_PVT_TL_CTRL_0); 124 + pcie2_mask32(pcie2, BCMA_CORE_PCIE2_CONFIGINDDATA, 125 + ~(1 << COE_PVT_TL_CTRL_0_PM_DIS_L1_REENTRY_BIT)); 126 + #endif 127 + #endif 128 + } 129 + 130 + static void pciedev_crwlpciegen2_180(struct bcma_drv_pcie2 *pcie2) 131 + { 132 + pcie2_write32(pcie2, BCMA_CORE_PCIE2_CONFIGINDADDR, PCIE2_PMCR_REFUP); 133 + pcie2_set32(pcie2, BCMA_CORE_PCIE2_CONFIGINDDATA, 0x1f); 134 + } 135 + 136 + static void pciedev_crwlpciegen2_182(struct bcma_drv_pcie2 *pcie2) 137 + { 138 + pcie2_write32(pcie2, BCMA_CORE_PCIE2_CONFIGINDADDR, PCIE2_SBMBX); 139 + pcie2_write32(pcie2, BCMA_CORE_PCIE2_CONFIGINDDATA, 1 << 0); 140 + } 141 + 142 + static void pciedev_reg_pm_clk_period(struct bcma_drv_pcie2 *pcie2) 143 + { 144 + struct bcma_drv_cc *drv_cc = &pcie2->core->bus->drv_cc; 145 + u8 core_rev = pcie2->core->id.rev; 146 + u32 alp_khz, pm_value; 147 + 148 + if (core_rev <= 13) { 149 + alp_khz = bcma_pmu_get_alp_clock(drv_cc) / 1000; 150 + pm_value = (1000000 * 2) / alp_khz; 151 + pcie2_write32(pcie2, BCMA_CORE_PCIE2_CONFIGINDADDR, 152 + PCIE2_PVT_REG_PM_CLK_PERIOD); 153 + pcie2_write32(pcie2, BCMA_CORE_PCIE2_CONFIGINDDATA, pm_value); 154 + } 155 + } 156 + 157 + void bcma_core_pcie2_init(struct bcma_drv_pcie2 *pcie2) 158 + { 159 + struct bcma_chipinfo *ci = &pcie2->core->bus->chipinfo; 160 + u32 tmp; 161 + 162 + tmp = pcie2_read32(pcie2, BCMA_CORE_PCIE2_SPROM(54)); 163 + if ((tmp & 0xe) >> 1 == 2) 164 + bcma_core_pcie2_cfg_write(pcie2, 0x4e0, 0x17); 165 + 166 + /* TODO: Do we need pcie_reqsize? */ 167 + 168 + if (ci->id == BCMA_CHIP_ID_BCM4360 && ci->rev > 3) 169 + bcma_core_pcie2_war_delay_perst_enab(pcie2, true); 170 + bcma_core_pcie2_hw_ltr_war(pcie2); 171 + pciedev_crwlpciegen2(pcie2); 172 + pciedev_reg_pm_clk_period(pcie2); 173 + pciedev_crwlpciegen2_180(pcie2); 174 + pciedev_crwlpciegen2_182(pcie2); 175 + }
+8
drivers/bcma/main.c
··· 132 132 case BCMA_CORE_CHIPCOMMON: 133 133 case BCMA_CORE_PCI: 134 134 case BCMA_CORE_PCIE: 135 + case BCMA_CORE_PCIE2: 135 136 case BCMA_CORE_MIPS_74K: 136 137 case BCMA_CORE_4706_MAC_GBIT_COMMON: 137 138 continue; ··· 280 279 if (core) { 281 280 bus->drv_pci[1].core = core; 282 281 bcma_core_pci_init(&bus->drv_pci[1]); 282 + } 283 + 284 + /* Init PCIe Gen 2 core */ 285 + core = bcma_find_core_unit(bus, BCMA_CORE_PCIE2, 0); 286 + if (core) { 287 + bus->drv_pcie2.core = core; 288 + bcma_core_pcie2_init(&bus->drv_pcie2); 283 289 } 284 290 285 291 /* Init GBIT MAC COMMON core */
+2
include/linux/bcma/bcma.h
··· 6 6 7 7 #include <linux/bcma/bcma_driver_chipcommon.h> 8 8 #include <linux/bcma/bcma_driver_pci.h> 9 + #include <linux/bcma/bcma_driver_pcie2.h> 9 10 #include <linux/bcma/bcma_driver_mips.h> 10 11 #include <linux/bcma/bcma_driver_gmac_cmn.h> 11 12 #include <linux/ssb/ssb.h> /* SPROM sharing */ ··· 334 333 335 334 struct bcma_drv_cc drv_cc; 336 335 struct bcma_drv_pci drv_pci[2]; 336 + struct bcma_drv_pcie2 drv_pcie2; 337 337 struct bcma_drv_mips drv_mips; 338 338 struct bcma_drv_gmac_cmn drv_gmac_cmn; 339 339
+158
include/linux/bcma/bcma_driver_pcie2.h
··· 1 + #ifndef LINUX_BCMA_DRIVER_PCIE2_H_ 2 + #define LINUX_BCMA_DRIVER_PCIE2_H_ 3 + 4 + #define BCMA_CORE_PCIE2_CLK_CONTROL 0x0000 5 + #define PCIE2_CLKC_RST_OE 0x0001 /* When set, drives PCI_RESET out to pin */ 6 + #define PCIE2_CLKC_RST 0x0002 /* Value driven out to pin */ 7 + #define PCIE2_CLKC_SPERST 0x0004 /* SurvivePeRst */ 8 + #define PCIE2_CLKC_DISABLE_L1CLK_GATING 0x0010 9 + #define PCIE2_CLKC_DLYPERST 0x0100 /* Delay PeRst to CoE Core */ 10 + #define PCIE2_CLKC_DISSPROMLD 0x0200 /* DisableSpromLoadOnPerst */ 11 + #define PCIE2_CLKC_WAKE_MODE_L2 0x1000 /* Wake on L2 */ 12 + #define BCMA_CORE_PCIE2_RC_PM_CONTROL 0x0004 13 + #define BCMA_CORE_PCIE2_RC_PM_STATUS 0x0008 14 + #define BCMA_CORE_PCIE2_EP_PM_CONTROL 0x000C 15 + #define BCMA_CORE_PCIE2_EP_PM_STATUS 0x0010 16 + #define BCMA_CORE_PCIE2_EP_LTR_CONTROL 0x0014 17 + #define BCMA_CORE_PCIE2_EP_LTR_STATUS 0x0018 18 + #define BCMA_CORE_PCIE2_EP_OBFF_STATUS 0x001C 19 + #define BCMA_CORE_PCIE2_PCIE_ERR_STATUS 0x0020 20 + #define BCMA_CORE_PCIE2_RC_AXI_CONFIG 0x0100 21 + #define BCMA_CORE_PCIE2_EP_AXI_CONFIG 0x0104 22 + #define BCMA_CORE_PCIE2_RXDEBUG_STATUS0 0x0108 23 + #define BCMA_CORE_PCIE2_RXDEBUG_CONTROL0 0x010C 24 + #define BCMA_CORE_PCIE2_CONFIGINDADDR 0x0120 25 + #define BCMA_CORE_PCIE2_CONFIGINDDATA 0x0124 26 + #define BCMA_CORE_PCIE2_MDIOCONTROL 0x0128 27 + #define BCMA_CORE_PCIE2_MDIOWRDATA 0x012C 28 + #define BCMA_CORE_PCIE2_MDIORDDATA 0x0130 29 + #define BCMA_CORE_PCIE2_DATAINTF 0x0180 30 + #define BCMA_CORE_PCIE2_D2H_INTRLAZY_0 0x0188 31 + #define BCMA_CORE_PCIE2_H2D_INTRLAZY_0 0x018c 32 + #define BCMA_CORE_PCIE2_H2D_INTSTAT_0 0x0190 33 + #define BCMA_CORE_PCIE2_H2D_INTMASK_0 0x0194 34 + #define BCMA_CORE_PCIE2_D2H_INTSTAT_0 0x0198 35 + #define BCMA_CORE_PCIE2_D2H_INTMASK_0 0x019c 36 + #define BCMA_CORE_PCIE2_LTR_STATE 0x01A0 /* Latency Tolerance Reporting */ 37 + #define PCIE2_LTR_ACTIVE 2 38 + #define PCIE2_LTR_ACTIVE_IDLE 1 39 + #define PCIE2_LTR_SLEEP 0 40 + #define PCIE2_LTR_FINAL_MASK 0x300 41 + #define PCIE2_LTR_FINAL_SHIFT 8 42 + #define BCMA_CORE_PCIE2_PWR_INT_STATUS 0x01A4 43 + #define BCMA_CORE_PCIE2_PWR_INT_MASK 0x01A8 44 + #define BCMA_CORE_PCIE2_CFG_ADDR 0x01F8 45 + #define BCMA_CORE_PCIE2_CFG_DATA 0x01FC 46 + #define BCMA_CORE_PCIE2_SYS_EQ_PAGE 0x0200 47 + #define BCMA_CORE_PCIE2_SYS_MSI_PAGE 0x0204 48 + #define BCMA_CORE_PCIE2_SYS_MSI_INTREN 0x0208 49 + #define BCMA_CORE_PCIE2_SYS_MSI_CTRL0 0x0210 50 + #define BCMA_CORE_PCIE2_SYS_MSI_CTRL1 0x0214 51 + #define BCMA_CORE_PCIE2_SYS_MSI_CTRL2 0x0218 52 + #define BCMA_CORE_PCIE2_SYS_MSI_CTRL3 0x021C 53 + #define BCMA_CORE_PCIE2_SYS_MSI_CTRL4 0x0220 54 + #define BCMA_CORE_PCIE2_SYS_MSI_CTRL5 0x0224 55 + #define BCMA_CORE_PCIE2_SYS_EQ_HEAD0 0x0250 56 + #define BCMA_CORE_PCIE2_SYS_EQ_TAIL0 0x0254 57 + #define BCMA_CORE_PCIE2_SYS_EQ_HEAD1 0x0258 58 + #define BCMA_CORE_PCIE2_SYS_EQ_TAIL1 0x025C 59 + #define BCMA_CORE_PCIE2_SYS_EQ_HEAD2 0x0260 60 + #define BCMA_CORE_PCIE2_SYS_EQ_TAIL2 0x0264 61 + #define BCMA_CORE_PCIE2_SYS_EQ_HEAD3 0x0268 62 + #define BCMA_CORE_PCIE2_SYS_EQ_TAIL3 0x026C 63 + #define BCMA_CORE_PCIE2_SYS_EQ_HEAD4 0x0270 64 + #define BCMA_CORE_PCIE2_SYS_EQ_TAIL4 0x0274 65 + #define BCMA_CORE_PCIE2_SYS_EQ_HEAD5 0x0278 66 + #define BCMA_CORE_PCIE2_SYS_EQ_TAIL5 0x027C 67 + #define BCMA_CORE_PCIE2_SYS_RC_INTX_EN 0x0330 68 + #define BCMA_CORE_PCIE2_SYS_RC_INTX_CSR 0x0334 69 + #define BCMA_CORE_PCIE2_SYS_MSI_REQ 0x0340 70 + #define BCMA_CORE_PCIE2_SYS_HOST_INTR_EN 0x0344 71 + #define BCMA_CORE_PCIE2_SYS_HOST_INTR_CSR 0x0348 72 + #define BCMA_CORE_PCIE2_SYS_HOST_INTR0 0x0350 73 + #define BCMA_CORE_PCIE2_SYS_HOST_INTR1 0x0354 74 + #define BCMA_CORE_PCIE2_SYS_HOST_INTR2 0x0358 75 + #define BCMA_CORE_PCIE2_SYS_HOST_INTR3 0x035C 76 + #define BCMA_CORE_PCIE2_SYS_EP_INT_EN0 0x0360 77 + #define BCMA_CORE_PCIE2_SYS_EP_INT_EN1 0x0364 78 + #define BCMA_CORE_PCIE2_SYS_EP_INT_CSR0 0x0370 79 + #define BCMA_CORE_PCIE2_SYS_EP_INT_CSR1 0x0374 80 + #define BCMA_CORE_PCIE2_SPROM(wordoffset) (0x0800 + ((wordoffset) * 2)) 81 + #define BCMA_CORE_PCIE2_FUNC0_IMAP0_0 0x0C00 82 + #define BCMA_CORE_PCIE2_FUNC0_IMAP0_1 0x0C04 83 + #define BCMA_CORE_PCIE2_FUNC0_IMAP0_2 0x0C08 84 + #define BCMA_CORE_PCIE2_FUNC0_IMAP0_3 0x0C0C 85 + #define BCMA_CORE_PCIE2_FUNC0_IMAP0_4 0x0C10 86 + #define BCMA_CORE_PCIE2_FUNC0_IMAP0_5 0x0C14 87 + #define BCMA_CORE_PCIE2_FUNC0_IMAP0_6 0x0C18 88 + #define BCMA_CORE_PCIE2_FUNC0_IMAP0_7 0x0C1C 89 + #define BCMA_CORE_PCIE2_FUNC1_IMAP0_0 0x0C20 90 + #define BCMA_CORE_PCIE2_FUNC1_IMAP0_1 0x0C24 91 + #define BCMA_CORE_PCIE2_FUNC1_IMAP0_2 0x0C28 92 + #define BCMA_CORE_PCIE2_FUNC1_IMAP0_3 0x0C2C 93 + #define BCMA_CORE_PCIE2_FUNC1_IMAP0_4 0x0C30 94 + #define BCMA_CORE_PCIE2_FUNC1_IMAP0_5 0x0C34 95 + #define BCMA_CORE_PCIE2_FUNC1_IMAP0_6 0x0C38 96 + #define BCMA_CORE_PCIE2_FUNC1_IMAP0_7 0x0C3C 97 + #define BCMA_CORE_PCIE2_FUNC0_IMAP1 0x0C80 98 + #define BCMA_CORE_PCIE2_FUNC1_IMAP1 0x0C88 99 + #define BCMA_CORE_PCIE2_FUNC0_IMAP2 0x0CC0 100 + #define BCMA_CORE_PCIE2_FUNC1_IMAP2 0x0CC8 101 + #define BCMA_CORE_PCIE2_IARR0_LOWER 0x0D00 102 + #define BCMA_CORE_PCIE2_IARR0_UPPER 0x0D04 103 + #define BCMA_CORE_PCIE2_IARR1_LOWER 0x0D08 104 + #define BCMA_CORE_PCIE2_IARR1_UPPER 0x0D0C 105 + #define BCMA_CORE_PCIE2_IARR2_LOWER 0x0D10 106 + #define BCMA_CORE_PCIE2_IARR2_UPPER 0x0D14 107 + #define BCMA_CORE_PCIE2_OARR0 0x0D20 108 + #define BCMA_CORE_PCIE2_OARR1 0x0D28 109 + #define BCMA_CORE_PCIE2_OARR2 0x0D30 110 + #define BCMA_CORE_PCIE2_OMAP0_LOWER 0x0D40 111 + #define BCMA_CORE_PCIE2_OMAP0_UPPER 0x0D44 112 + #define BCMA_CORE_PCIE2_OMAP1_LOWER 0x0D48 113 + #define BCMA_CORE_PCIE2_OMAP1_UPPER 0x0D4C 114 + #define BCMA_CORE_PCIE2_OMAP2_LOWER 0x0D50 115 + #define BCMA_CORE_PCIE2_OMAP2_UPPER 0x0D54 116 + #define BCMA_CORE_PCIE2_FUNC1_IARR1_SIZE 0x0D58 117 + #define BCMA_CORE_PCIE2_FUNC1_IARR2_SIZE 0x0D5C 118 + #define BCMA_CORE_PCIE2_MEM_CONTROL 0x0F00 119 + #define BCMA_CORE_PCIE2_MEM_ECC_ERRLOG0 0x0F04 120 + #define BCMA_CORE_PCIE2_MEM_ECC_ERRLOG1 0x0F08 121 + #define BCMA_CORE_PCIE2_LINK_STATUS 0x0F0C 122 + #define BCMA_CORE_PCIE2_STRAP_STATUS 0x0F10 123 + #define BCMA_CORE_PCIE2_RESET_STATUS 0x0F14 124 + #define BCMA_CORE_PCIE2_RESETEN_IN_LINKDOWN 0x0F18 125 + #define BCMA_CORE_PCIE2_MISC_INTR_EN 0x0F1C 126 + #define BCMA_CORE_PCIE2_TX_DEBUG_CFG 0x0F20 127 + #define BCMA_CORE_PCIE2_MISC_CONFIG 0x0F24 128 + #define BCMA_CORE_PCIE2_MISC_STATUS 0x0F28 129 + #define BCMA_CORE_PCIE2_INTR_EN 0x0F30 130 + #define BCMA_CORE_PCIE2_INTR_CLEAR 0x0F34 131 + #define BCMA_CORE_PCIE2_INTR_STATUS 0x0F38 132 + 133 + /* PCIE gen2 config regs */ 134 + #define PCIE2_INTSTATUS 0x090 135 + #define PCIE2_INTMASK 0x094 136 + #define PCIE2_SBMBX 0x098 137 + 138 + #define PCIE2_PMCR_REFUP 0x1814 /* Trefup time */ 139 + 140 + #define PCIE2_CAP_DEVSTSCTRL2_OFFSET 0xD4 141 + #define PCIE2_CAP_DEVSTSCTRL2_LTRENAB 0x400 142 + #define PCIE2_PVT_REG_PM_CLK_PERIOD 0x184c 143 + 144 + struct bcma_drv_pcie2 { 145 + struct bcma_device *core; 146 + }; 147 + 148 + #define pcie2_read16(pcie2, offset) bcma_read16((pcie2)->core, offset) 149 + #define pcie2_read32(pcie2, offset) bcma_read32((pcie2)->core, offset) 150 + #define pcie2_write16(pcie2, offset, val) bcma_write16((pcie2)->core, offset, val) 151 + #define pcie2_write32(pcie2, offset, val) bcma_write32((pcie2)->core, offset, val) 152 + 153 + #define pcie2_set32(pcie2, offset, set) bcma_set32((pcie2)->core, offset, set) 154 + #define pcie2_mask32(pcie2, offset, mask) bcma_mask32((pcie2)->core, offset, mask) 155 + 156 + void bcma_core_pcie2_init(struct bcma_drv_pcie2 *pcie2); 157 + 158 + #endif /* LINUX_BCMA_DRIVER_PCIE2_H_ */