On Sun, Oct 08, 2023 at 07:42:54PM +0200, Mark Kettenis wrote:
> Hector Martin has added support for the BCM4388 that is found on the
> last generation of Apple Macs.  Based on his commits I've managed to
> get it working on my M2 Pro mini.  I still have to clean up some of
> that stuff, but here is a forst batch of two diffs.
> 
> The changes to dev/ic/bwfm.c correspond to:
> 
> https://github.com/AsahiLinux/linux/commit/81e3cc7bec8b9d9c436f63662d8fcfda4f637807
> 
> The changes to dev/pci/if_bwfm_pci.c corrspond to:
> 
> https://github.com/AsahiLinux/linux/commit/8190add8671fc49c12d04b5ac8fced70f835e69f
> 
> Both changes seem to be a good idea and potentially affect other chips
> as well.  So if you have a machine with bwfm(4), please test.
> 
> ok?

Hi,

I have an early 2015 MacBookPro that doesn't like this.  It fails to load
the firmware even after I deleted it with fw_update -d and readded it.

What results is probably an interrupt storm as the system becomes 
unresponsive.  Sorry I can't give very much more details.

dmesg follows:


OpenBSD 7.4 (GENERIC.MP) #1396: Sun Oct  8 09:20:40 MDT 2023
    dera...@amd64.openbsd.org:/usr/src/sys/arch/amd64/compile/GENERIC.MP
real mem = 17059287040 (16269MB)
avail mem = 16522534912 (15757MB)
random: good seed from bootblocks
mpath0 at root
scsibus0 at mpath0: 256 targets
mainbus0 at root
bios0 at mainbus0: SMBIOS rev. 2.7 @ 0x8afac000 (32 entries)
bios0: vendor Apple Inc. version "186.0.0.0.0" date 06/14/2019
bios0: Apple Inc. MacBookPro12,1
efi0 at bios0: UEFI 1.1
acpi0 at bios0: ACPI 5.0
acpi0: sleep states S0 S3 S4 S5
acpi0: tables DSDT FACP HPET APIC SBST ECDT SSDT SSDT SSDT SSDT SSDT SSDT SSDT 
SSDT DMAR MCFG
acpi0: wakeup devices PEG0(S3) EC__(S3) HDEF(S3) RP01(S3) RP02(S3) RP03(S4) 
ARPT(S4) RP05(S3) RP06(S3) SPIT(S3) XHC1(S3) ADP1(S3) LID0(S3)
acpitimer0 at acpi0: 3579545 Hz, 24 bits
acpihpet0 at acpi0: 14318179 Hz
acpimadt0 at acpi0 addr 0xfee00000: PC-AT compat
cpu0 at mainbus0: apid 0 (boot processor)
cpu0: Intel(R) Core(TM) i5-5287U CPU @ 2.90GHz, 2800.02 MHz, 06-3d-04, patch 
0000002f
cpu0: 
FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE,SSE3,PCLMUL,DTES64,MWAIT,DS-CPL,VMX,EST,TM2,SSSE3,SDBG,FMA3,CX16,xTPR,PDCM,PCID,SSE4.1,SSE4.2,x2APIC,MOVBE,POPCNT,DEADLINE,AES,XSAVE,AVX,F16C,RDRAND,NXE,PAGE1GB,RDTSCP,LONG,LAHF,ABM,3DNOWP,PERF,ITSC,FSGSBASE,TSC_ADJUST,BMI1,AVX2,SMEP,BMI2,ERMS,INVPCID,RDSEED,ADX,SMAP,PT,SRBDS_CTRL,MD_CLEAR,IBRS,IBPB,STIBP,L1DF,SSBD,SENSOR,ARAT,XSAVEOPT,MELTDOWN
cpu0: 32KB 64b/line 8-way D-cache, 32KB 64b/line 8-way I-cache, 256KB 64b/line 
8-way L2 cache, 3MB 64b/line 12-way L3 cache
cpu0: smt 0, core 0, package 0
mtrr: Pentium Pro MTRR support, 10 var ranges, 88 fixed ranges
cpu0: apic clock running at 100MHz
cpu0: mwait min=64, max=64, C-substates=0.2.1.2.4.1.1.1, IBE
cpu1 at mainbus0: apid 2 (application processor)
cpu1: Intel(R) Core(TM) i5-5287U CPU @ 2.90GHz, 2800.05 MHz, 06-3d-04, patch 
0000002f
cpu1: 
FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE,SSE3,PCLMUL,DTES64,MWAIT,DS-CPL,VMX,EST,TM2,SSSE3,SDBG,FMA3,CX16,xTPR,PDCM,PCID,SSE4.1,SSE4.2,x2APIC,MOVBE,POPCNT,DEADLINE,AES,XSAVE,AVX,F16C,RDRAND,NXE,PAGE1GB,RDTSCP,LONG,LAHF,ABM,3DNOWP,PERF,ITSC,FSGSBASE,TSC_ADJUST,BMI1,AVX2,SMEP,BMI2,ERMS,INVPCID,RDSEED,ADX,SMAP,PT,SRBDS_CTRL,MD_CLEAR,IBRS,IBPB,STIBP,L1DF,SSBD,SENSOR,ARAT,XSAVEOPT,MELTDOWN
cpu1: 32KB 64b/line 8-way D-cache, 32KB 64b/line 8-way I-cache, 256KB 64b/line 
8-way L2 cache, 3MB 64b/line 12-way L3 cache
cpu1: smt 0, core 1, package 0
cpu2 at mainbus0: apid 1 (application processor)
cpu2: Intel(R) Core(TM) i5-5287U CPU @ 2.90GHz, 2800.07 MHz, 06-3d-04, patch 
0000002f
cpu2: 
FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE,SSE3,PCLMUL,DTES64,MWAIT,DS-CPL,VMX,EST,TM2,SSSE3,SDBG,FMA3,CX16,xTPR,PDCM,PCID,SSE4.1,SSE4.2,x2APIC,MOVBE,POPCNT,DEADLINE,AES,XSAVE,AVX,F16C,RDRAND,NXE,PAGE1GB,RDTSCP,LONG,LAHF,ABM,3DNOWP,PERF,ITSC,FSGSBASE,TSC_ADJUST,BMI1,AVX2,SMEP,BMI2,ERMS,INVPCID,RDSEED,ADX,SMAP,PT,SRBDS_CTRL,MD_CLEAR,IBRS,IBPB,STIBP,L1DF,SSBD,SENSOR,ARAT,XSAVEOPT,MELTDOWN
cpu2: 32KB 64b/line 8-way D-cache, 32KB 64b/line 8-way I-cache, 256KB 64b/line 
8-way L2 cache, 3MB 64b/line 12-way L3 cache
cpu2: smt 1, core 0, package 0
cpu3 at mainbus0: apid 3 (application processor)
cpu3: Intel(R) Core(TM) i5-5287U CPU @ 2.90GHz, 2800.07 MHz, 06-3d-04, patch 
0000002f
cpu3: 
FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE,SSE3,PCLMUL,DTES64,MWAIT,DS-CPL,VMX,EST,TM2,SSSE3,SDBG,FMA3,CX16,xTPR,PDCM,PCID,SSE4.1,SSE4.2,x2APIC,MOVBE,POPCNT,DEADLINE,AES,XSAVE,AVX,F16C,RDRAND,NXE,PAGE1GB,RDTSCP,LONG,LAHF,ABM,3DNOWP,PERF,ITSC,FSGSBASE,TSC_ADJUST,BMI1,AVX2,SMEP,BMI2,ERMS,INVPCID,RDSEED,ADX,SMAP,PT,SRBDS_CTRL,MD_CLEAR,IBRS,IBPB,STIBP,L1DF,SSBD,SENSOR,ARAT,XSAVEOPT,MELTDOWN
cpu3: 32KB 64b/line 8-way D-cache, 32KB 64b/line 8-way I-cache, 256KB 64b/line 
8-way L2 cache, 3MB 64b/line 12-way L3 cache
cpu3: smt 1, core 1, package 0
ioapic0 at mainbus0: apid 2 pa 0xfec00000, version 20, 40 pins
acpiec0 at acpi0
acpimcfg0 at acpi0
acpimcfg0: addr 0xe0000000, bus 0-155
acpiprt0 at acpi0: bus 0 (PCI0)
acpiprt1 at acpi0: bus -1 (PEG0)
acpiprt2 at acpi0: bus 1 (RP01)
acpiprt3 at acpi0: bus 2 (RP02)
acpiprt4 at acpi0: bus 3 (RP03)
acpiprt5 at acpi0: bus 5 (RP05)
acpiprt6 at acpi0: bus 4 (RP06)
acpisbs0 at acpi0: SBS0 model "bq20z451" serial 24593 type LION oem "DP"
acpipci0 at acpi0 PCI0: 0x00000004 0x00000011 0x00000001
acpicmos0 at acpi0
asmc0 at acpi0: SMC_ (smc-huronriver) addr 0x300/0x20: rev 2.28f628, 670 keys
"ACPI0008" at acpi0 not configured
"ACPI0001" at acpi0 not configured
"APP000D" at acpi0 not configured
acpiac0 at acpi0: AC unit offline
acpibtn0 at acpi0: LID0(wakeup)
acpibtn1 at acpi0: PWRB
abl0 at acpi0: PNLF (backlight)
acpibtn2 at acpi0: SLPB
acpicpu0 at acpi0: C3(200@530 mwait.1@0x60), C2(200@148 mwait.1@0x33), 
C1(1000@1 mwait.1), PSS
acpicpu1 at acpi0: C3(200@530 mwait.1@0x60), C2(200@148 mwait.1@0x33), 
C1(1000@1 mwait.1), PSS
acpicpu2 at acpi0: C3(200@530 mwait.1@0x60), C2(200@148 mwait.1@0x33), 
C1(1000@1 mwait.1), PSS
acpicpu3 at acpi0: C3(200@530 mwait.1@0x60), C2(200@148 mwait.1@0x33), 
C1(1000@1 mwait.1), PSS
acpivideo0 at acpi0: IGPU
acpivout0 at acpivideo0: DD01
cpu0: using VERW MDS workaround (except on vmm entry)
cpu0: Enhanced SpeedStep 2800 MHz: speeds: 2901, 2900, 2800, 2500, 2200, 2000, 
1800, 1600, 1400, 1200, 900, 700, 500 MHz
pci0 at mainbus0 bus 0
pchb0 at pci0 dev 0 function 0 "Intel Core 5G Host" rev 0x09
inteldrm0 at pci0 dev 2 function 0 "Intel Iris 6100" rev 0x09
drm0 at inteldrm0
inteldrm0: msi, BROADWELL, gen 8
azalia0 at pci0 dev 3 function 0 "Intel Core 5G HD Audio" rev 0x09: msi
azalia0: No codecs found
xhci0 at pci0 dev 20 function 0 "Intel 9 Series xHCI" rev 0x03: msi, xHCI 1.0
usb0 at xhci0: USB revision 3.0
uhub0 at usb0 configuration 1 interface 0 "Intel xHCI root hub" rev 3.00/1.00 
addr 1
"Intel 9 Series DMA" rev 0x03 at pci0 dev 21 function 0 not configured
"Intel 9 Series SPI" rev 0x03 at pci0 dev 21 function 4 not configured
"Intel 9 Series MEI" rev 0x03 at pci0 dev 22 function 0 not configured
azalia1 at pci0 dev 27 function 0 "Intel 9 Series HD Audio" rev 0x03: msi
azalia1: codecs: Cirrus Logic CS4208
audio0 at azalia1
ppb0 at pci0 dev 28 function 0 "Intel 9 Series PCIE" rev 0xe3
pci1 at ppb0 bus 1
ppb1 at pci0 dev 28 function 1 "Intel 9 Series PCIE" rev 0xe3: msi
pci2 at ppb1 bus 2
"Broadcom BCM15700A2" rev 0x00 at pci2 dev 0 function 0 not configured
ppb2 at pci0 dev 28 function 2 "Intel 9 Series PCIE" rev 0xe3: msi
pci3 at ppb2 bus 3
bwfm0 at pci3 dev 0 function 0 "Broadcom BCM43602" rev 0x01: msi
ppb3 at pci0 dev 28 function 4 "Intel 9 Series PCIE" rev 0xe3: msi
pci4 at ppb3 bus 5
ppb4 at pci4 dev 0 function 0 "Intel DSL5520 Thunderbolt" rev 0x00
pci5 at ppb4 bus 6
ppb5 at pci5 dev 0 function 0 "Intel DSL5520 Thunderbolt" rev 0x00: msi
pci6 at ppb5 bus 7
"Intel DSL5520 Thunderbolt" rev 0x00 at pci6 dev 0 function 0 not configured
ppb6 at pci5 dev 3 function 0 "Intel DSL5520 Thunderbolt" rev 0x00: msi
pci7 at ppb6 bus 8
ppb7 at pci5 dev 4 function 0 "Intel DSL5520 Thunderbolt" rev 0x00: msi
pci8 at ppb7 bus 57
ppb8 at pci5 dev 5 function 0 "Intel DSL5520 Thunderbolt" rev 0x00: msi
pci9 at ppb8 bus 58
ppb9 at pci5 dev 6 function 0 "Intel DSL5520 Thunderbolt" rev 0x00: msi
pci10 at ppb9 bus 107
ppb10 at pci0 dev 28 function 5 "Intel 9 Series PCIE" rev 0xe3: msi
pci11 at ppb10 bus 4
ahci0 at pci11 dev 0 function 0 "Samsung SM951 AHCI" rev 0x01: apic 2 int 16, 
AHCI 1.3
ahci0: port 0: 6.0Gb/s
scsibus1 at ahci0: 32 targets
sd0 at scsibus1 targ 0 lun 0: <ATA, APPLE SSD SM0512, BXW1> naa.5002538900000000
sd0: 477102MB, 512 bytes/sector, 977105060 sectors, thin
pcib0 at pci0 dev 31 function 0 "Intel 9 Series LPC" rev 0x03
ichiic0 at pci0 dev 31 function 3 "Intel 9 Series SMBus" rev 0x03: apic 2 int 18
iic0 at ichiic0
iic0: addr 0x26 00=01 12=80 16=75 26=0f 29=01 2c=ff 2d=90 2e=f0 2f=9f 31=01 
3e=09 3f=1f 42=84 50=03 51=d1 52=26 54=05 58=08 60=88 63=88 f0=03 f1=0a f2=01 
f3=84 words 00=0100 01=0000 02=0000 03=0000 04=0000 05=0000 06=0000 07=0000
pchtemp0 at pci0 dev 31 function 6 "Intel 9 Series Thermal" rev 0x03
isa0 at pcib0
isadma0 at isa0
pcppi0 at isa0 port 0x61
spkr0 at pcppi0
vmm0 at mainbus0: VMX/EPT
efifb at mainbus0 not configured
uhidev0 at uhub0 port 3 configuration 1 interface 0 "Broadcom Corp. Bluetooth 
USB Host Controller" rev 2.01/1.68 addr 2
uhidev0: iclass 3/1, 1 report id
ukbd0 at uhidev0 reportid 1: 8 variable keys, 6 key codes
wskbd0 at ukbd0: console keyboard
uhidev1 at uhub0 port 3 configuration 1 interface 1 "Broadcom Corp. Bluetooth 
USB Host Controller" rev 2.01/1.68 addr 2
uhidev1: iclass 3/1, 2 report ids
ums0 at uhidev1 reportid 2: 3 buttons
wsmouse0 at ums0 mux 0
ugen0 at uhub0 port 3 configuration 1 "Broadcom Corp. Bluetooth USB Host 
Controller" rev 2.01/1.68 addr 2
uhidev2 at uhub0 port 5 configuration 1 interface 0 "Apple Inc. Apple Internal 
Keyboard / Trackpad" rev 2.00/6.22 addr 3
uhidev2: iclass 3/0, 224 report ids
uhid0 at uhidev2 reportid 224: input=4, output=0, feature=0
uhidev3 at uhub0 port 5 configuration 1 interface 1 "Apple Inc. Apple Internal 
Keyboard / Trackpad" rev 2.00/6.22 addr 3
uhidev3: iclass 3/1, 82 report ids
ukbd1 at uhidev3 reportid 1: 8 variable keys, 6 key codes, country code 13
wskbd1 at ukbd1 mux 1
uhid1 at uhidev3 reportid 9: input=0, output=0, feature=3
uhid2 at uhidev3 reportid 63: input=64, output=0, feature=0
ucc0 at uhidev3 reportid 82: 5 usages, 3 keys, enum
wskbd2 at ucc0 mux 1
ubcmtp0 at uhub0 port 5 configuration 1 interface 2 "Apple Inc. Apple Internal 
Keyboard / Trackpad" rev 2.00/6.22 addr 3
wsmouse1 at ubcmtp0 mux 0
uhidev4 at uhub0 port 5 configuration 1 interface 3 "Apple Inc. Apple Internal 
Keyboard / Trackpad" rev 2.00/6.22 addr 3
uhidev4: iclass 3/0, 83 report ids
uhid3 at uhidev4 reportid 63: input=15, output=0, feature=0
uhid4 at uhidev4 reportid 83: input=0, output=63, feature=0
uhidev5 at uhub0 port 5 configuration 1 interface 4 "Apple Inc. Apple Internal 
Keyboard / Trackpad" rev 2.00/6.22 addr 3
uhidev5: iclass 3/0, 192 report ids
uhid5 at uhidev5 reportid 192: input=107, output=0, feature=0
axen0 at uhub0 port 13 configuration 1 interface 0 "D-Link Elec. Corp. D-Link 
DUB-1312" rev 3.00/1.00 addr 4
axen0: AX88179, address f4:8c:eb:4b:5d:70
rgephy0 at axen0 phy 3: RTL8169S/8110S/8211 PHY, rev. 5
umass0 at uhub0 port 14 configuration 1 interface 0 "Apple Card Reader" rev 
3.00/8.20 addr 5
umass0: using SCSI over Bulk-Only
scsibus2 at umass0: 2 targets, initiator 0
sd1 at scsibus2 targ 1 lun 0: <APPLE, SD Card Reader, 3.00> removable 
serial.05ac8406000000000820
vscsi0 at root
scsibus3 at vscsi0: 256 targets
softraid0 at root
scsibus4 at softraid0: 256 targets
root on sd0a (eedf440b3bc0434b.a) swap on sd0b dump on sd0b
WARNING: / was not properly unmounted
inteldrm0: 2560x1600, 32bpp
wsdisplay0 at inteldrm0 mux 1: console (std, vt100 emulation), using wskbd0
wskbd1: connecting to wsdisplay0
wskbd2: connecting to wsdisplay0
wsdisplay0: screen 1-5 added (std, vt100 emulation)
bwfm0: address a0:99:9b:02:c4:e5


Best Regards,
-peter


> Index: dev/ic/bwfm.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/ic/bwfm.c,v
> retrieving revision 1.109
> diff -u -p -r1.109 bwfm.c
> --- dev/ic/bwfm.c     28 Mar 2023 14:01:42 -0000      1.109
> +++ dev/ic/bwfm.c     8 Oct 2023 17:29:35 -0000
> @@ -1089,15 +1089,9 @@ void
>  bwfm_chip_ai_reset(struct bwfm_softc *sc, struct bwfm_core *core,
>      uint32_t prereset, uint32_t reset, uint32_t postreset)
>  {
> -     struct bwfm_core *core2 = NULL;
>       int i;
>  
> -     if (core->co_id == BWFM_AGENT_CORE_80211)
> -             core2 = bwfm_chip_get_core_idx(sc, BWFM_AGENT_CORE_80211, 1);
> -
>       bwfm_chip_ai_disable(sc, core, prereset, reset);
> -     if (core2)
> -             bwfm_chip_ai_disable(sc, core2, prereset, reset);
>  
>       for (i = 50; i > 0; i--) {
>               if ((sc->sc_buscore_ops->bc_read(sc,
> @@ -1110,32 +1104,12 @@ bwfm_chip_ai_reset(struct bwfm_softc *sc
>       }
>       if (i == 0)
>               printf("%s: timeout on core reset\n", DEVNAME(sc));
> -     if (core2) {
> -             for (i = 50; i > 0; i--) {
> -                     if ((sc->sc_buscore_ops->bc_read(sc,
> -                         core2->co_wrapbase + BWFM_AGENT_RESET_CTL) &
> -                         BWFM_AGENT_RESET_CTL_RESET) == 0)
> -                             break;
> -                     sc->sc_buscore_ops->bc_write(sc,
> -                         core2->co_wrapbase + BWFM_AGENT_RESET_CTL, 0);
> -                     delay(60);
> -             }
> -             if (i == 0)
> -                     printf("%s: timeout on core reset\n", DEVNAME(sc));
> -     }
>  
>       sc->sc_buscore_ops->bc_write(sc,
>           core->co_wrapbase + BWFM_AGENT_IOCTL,
>           postreset | BWFM_AGENT_IOCTL_CLK);
>       sc->sc_buscore_ops->bc_read(sc,
>           core->co_wrapbase + BWFM_AGENT_IOCTL);
> -     if (core2) {
> -             sc->sc_buscore_ops->bc_write(sc,
> -                 core2->co_wrapbase + BWFM_AGENT_IOCTL,
> -                 postreset | BWFM_AGENT_IOCTL_CLK);
> -             sc->sc_buscore_ops->bc_read(sc,
> -                 core2->co_wrapbase + BWFM_AGENT_IOCTL);
> -     }
>  }
>  
>  void
> @@ -1338,6 +1312,7 @@ bwfm_chip_ca7_set_passive(struct bwfm_so
>  {
>       struct bwfm_core *core;
>       uint32_t val;
> +     int i = 0;
>  
>       core = bwfm_chip_get_core(sc, BWFM_AGENT_CORE_ARM_CA7);
>       val = sc->sc_buscore_ops->bc_read(sc,
> @@ -1347,10 +1322,11 @@ bwfm_chip_ca7_set_passive(struct bwfm_so
>           BWFM_AGENT_IOCTL_ARMCR4_CPUHALT,
>           BWFM_AGENT_IOCTL_ARMCR4_CPUHALT);
>  
> -     core = bwfm_chip_get_core(sc, BWFM_AGENT_CORE_80211);
> -     sc->sc_chip.ch_core_reset(sc, core, BWFM_AGENT_D11_IOCTL_PHYRESET |
> -         BWFM_AGENT_D11_IOCTL_PHYCLOCKEN, BWFM_AGENT_D11_IOCTL_PHYCLOCKEN,
> -         BWFM_AGENT_D11_IOCTL_PHYCLOCKEN);
> +     while ((core = bwfm_chip_get_core_idx(sc, BWFM_AGENT_CORE_80211, i++)))
> +             sc->sc_chip.ch_core_disable(sc, core,
> +                 BWFM_AGENT_D11_IOCTL_PHYRESET |
> +                 BWFM_AGENT_D11_IOCTL_PHYCLOCKEN,
> +                 BWFM_AGENT_D11_IOCTL_PHYCLOCKEN);
>  }
>  
>  int
> Index: dev/pci/if_bwfm_pci.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/pci/if_bwfm_pci.c,v
> retrieving revision 1.75
> diff -u -p -r1.75 if_bwfm_pci.c
> --- dev/pci/if_bwfm_pci.c     30 Dec 2022 14:10:17 -0000      1.75
> +++ dev/pci/if_bwfm_pci.c     8 Oct 2023 17:29:35 -0000
> @@ -134,6 +134,10 @@ struct bwfm_pci_softc {
>       bus_space_handle_t       sc_reg_ioh;
>       bus_size_t               sc_reg_ios;
>  
> +     bus_space_tag_t          sc_pcie_iot;
> +     bus_space_handle_t       sc_pcie_ioh;
> +     bus_size_t               sc_pcie_ios;
> +
>       bus_space_tag_t          sc_tcm_iot;
>       bus_space_handle_t       sc_tcm_ioh;
>       bus_size_t               sc_tcm_ios;
> @@ -379,6 +383,10 @@ bwfm_pci_attach(struct device *parent, s
>               goto bar1;
>       }
>  
> +     sc->sc_pcie_iot = sc->sc_reg_iot;
> +     bus_space_subregion(sc->sc_reg_iot, sc->sc_reg_ioh, 0x2000,
> +         sc->sc_reg_ios - 0x2000, &sc->sc_pcie_ioh);
> +
>       sc->sc_pc = pa->pa_pc;
>       sc->sc_tag = pa->pa_tag;
>       sc->sc_id = pa->pa_id;
> @@ -458,11 +466,11 @@ bwfm_pci_preinit(struct bwfm_softc *bwfm
>  #endif
>  
>       bwfm_pci_select_core(sc, BWFM_AGENT_CORE_PCIE2);
> -     bus_space_write_4(sc->sc_reg_iot, sc->sc_reg_ioh,
> +     bus_space_write_4(sc->sc_pcie_iot, sc->sc_pcie_ioh,
>           BWFM_PCI_PCIE2REG_CONFIGADDR, 0x4e0);
> -     reg = bus_space_read_4(sc->sc_reg_iot, sc->sc_reg_ioh,
> +     reg = bus_space_read_4(sc->sc_pcie_iot, sc->sc_pcie_ioh,
>           BWFM_PCI_PCIE2REG_CONFIGDATA);
> -     bus_space_write_4(sc->sc_reg_iot, sc->sc_reg_ioh,
> +     bus_space_write_4(sc->sc_pcie_iot, sc->sc_pcie_ioh,
>           BWFM_PCI_PCIE2REG_CONFIGDATA, reg);
>  
>       switch (bwfm->sc_chip.ch_chip) {
> @@ -1438,10 +1446,10 @@ bwfm_pci_ring_bell(struct bwfm_pci_softc
>      struct bwfm_pci_msgring *ring)
>  {
>       if (sc->sc_shared_flags & BWFM_SHARED_INFO_SHARED_DAR)
> -             bus_space_write_4(sc->sc_reg_iot, sc->sc_reg_ioh,
> +             bus_space_write_4(sc->sc_pcie_iot, sc->sc_pcie_ioh,
>                   BWFM_PCI_64_PCIE2REG_H2D_MAILBOX_0, 1);
>       else
> -             bus_space_write_4(sc->sc_reg_iot, sc->sc_reg_ioh,
> +             bus_space_write_4(sc->sc_pcie_iot, sc->sc_pcie_ioh,
>                   BWFM_PCI_PCIE2REG_H2D_MAILBOX_0, 1);
>  }
>  
> @@ -1889,13 +1897,13 @@ bwfm_pci_buscore_reset(struct bwfm_softc
>               };
>  
>               for (i = 0; i < nitems(cfg_offset); i++) {
> -                     bus_space_write_4(sc->sc_reg_iot, sc->sc_reg_ioh,
> +                     bus_space_write_4(sc->sc_pcie_iot, sc->sc_pcie_ioh,
>                           BWFM_PCI_PCIE2REG_CONFIGADDR, cfg_offset[i]);
> -                     reg = bus_space_read_4(sc->sc_reg_iot, sc->sc_reg_ioh,
> +                     reg = bus_space_read_4(sc->sc_pcie_iot, sc->sc_pcie_ioh,
>                           BWFM_PCI_PCIE2REG_CONFIGDATA);
>                       DPRINTFN(3, ("%s: config offset 0x%04x, value 0x%04x\n",
>                           DEVNAME(sc), cfg_offset[i], reg));
> -                     bus_space_write_4(sc->sc_reg_iot, sc->sc_reg_ioh,
> +                     bus_space_write_4(sc->sc_pcie_iot, sc->sc_pcie_ioh,
>                           BWFM_PCI_PCIE2REG_CONFIGDATA, reg);
>               }
>       }
> @@ -2389,11 +2397,11 @@ void
>  bwfm_pci_intr_enable(struct bwfm_pci_softc *sc)
>  {
>       if (sc->sc_pcireg64)
> -             bus_space_write_4(sc->sc_reg_iot, sc->sc_reg_ioh,
> +             bus_space_write_4(sc->sc_pcie_iot, sc->sc_pcie_ioh,
>                   BWFM_PCI_64_PCIE2REG_MAILBOXMASK,
>                   BWFM_PCI_64_PCIE2REG_MAILBOXMASK_INT_D2H_DB);
>       else
> -             bus_space_write_4(sc->sc_reg_iot, sc->sc_reg_ioh,
> +             bus_space_write_4(sc->sc_pcie_iot, sc->sc_pcie_ioh,
>                   BWFM_PCI_PCIE2REG_MAILBOXMASK,
>                   BWFM_PCI_PCIE2REG_MAILBOXMASK_INT_FN0_0 |
>                   BWFM_PCI_PCIE2REG_MAILBOXMASK_INT_FN0_1 |
> @@ -2404,10 +2412,10 @@ void
>  bwfm_pci_intr_disable(struct bwfm_pci_softc *sc)
>  {
>       if (sc->sc_pcireg64)
> -             bus_space_write_4(sc->sc_reg_iot, sc->sc_reg_ioh,
> +             bus_space_write_4(sc->sc_pcie_iot, sc->sc_pcie_ioh,
>                   BWFM_PCI_64_PCIE2REG_MAILBOXMASK, 0);
>       else
> -             bus_space_write_4(sc->sc_reg_iot, sc->sc_reg_ioh,
> +             bus_space_write_4(sc->sc_pcie_iot, sc->sc_pcie_ioh,
>                   BWFM_PCI_PCIE2REG_MAILBOXMASK, 0);
>  }
>  
> @@ -2415,10 +2423,10 @@ uint32_t
>  bwfm_pci_intr_status(struct bwfm_pci_softc *sc)
>  {
>       if (sc->sc_pcireg64)
> -             return bus_space_read_4(sc->sc_reg_iot, sc->sc_reg_ioh,
> +             return bus_space_read_4(sc->sc_pcie_iot, sc->sc_pcie_ioh,
>                   BWFM_PCI_64_PCIE2REG_MAILBOXINT);
>       else
> -             return bus_space_read_4(sc->sc_reg_iot, sc->sc_reg_ioh,
> +             return bus_space_read_4(sc->sc_pcie_iot, sc->sc_pcie_ioh,
>                   BWFM_PCI_PCIE2REG_MAILBOXINT);
>  }
>  
> @@ -2426,10 +2434,10 @@ void
>  bwfm_pci_intr_ack(struct bwfm_pci_softc *sc, uint32_t status)
>  {
>       if (sc->sc_pcireg64)
> -             bus_space_write_4(sc->sc_reg_iot, sc->sc_reg_ioh,
> +             bus_space_write_4(sc->sc_pcie_iot, sc->sc_pcie_ioh,
>                   BWFM_PCI_64_PCIE2REG_MAILBOXINT, status);
>       else
> -             bus_space_write_4(sc->sc_reg_iot, sc->sc_reg_ioh,
> +             bus_space_write_4(sc->sc_pcie_iot, sc->sc_pcie_ioh,
>                   BWFM_PCI_PCIE2REG_MAILBOXINT, status);
>  }
>  
> @@ -2437,10 +2445,10 @@ uint32_t
>  bwfm_pci_intmask(struct bwfm_pci_softc *sc)
>  {
>       if (sc->sc_pcireg64)
> -             return bus_space_read_4(sc->sc_reg_iot, sc->sc_reg_ioh,
> +             return bus_space_read_4(sc->sc_pcie_iot, sc->sc_pcie_ioh,
>                   BWFM_PCI_64_PCIE2REG_INTMASK);
>       else
> -             return bus_space_read_4(sc->sc_reg_iot, sc->sc_reg_ioh,
> +             return bus_space_read_4(sc->sc_pcie_iot, sc->sc_pcie_ioh,
>                   BWFM_PCI_PCIE2REG_INTMASK);
>  }
>  
> @@ -2451,10 +2459,10 @@ bwfm_pci_hostready(struct bwfm_pci_softc
>               return;
>  
>       if (sc->sc_shared_flags & BWFM_SHARED_INFO_SHARED_DAR)
> -             bus_space_write_4(sc->sc_reg_iot, sc->sc_reg_ioh,
> +             bus_space_write_4(sc->sc_pcie_iot, sc->sc_pcie_ioh,
>                   BWFM_PCI_64_PCIE2REG_H2D_MAILBOX_1, 1);
>       else
> -             bus_space_write_4(sc->sc_reg_iot, sc->sc_reg_ioh,
> +             bus_space_write_4(sc->sc_pcie_iot, sc->sc_pcie_ioh,
>                   BWFM_PCI_PCIE2REG_H2D_MAILBOX_1, 1);
>  }
>  
> 

-- 
Over thirty years experience on Unix-like Operating Systems starting with QNX.

Reply via email to