What is the recommended way of updating drivers of L4T?

I’m working on device with a Xavier NX on a custom board. The board has an EWM-W306 WiFi/BT chip (SoC 88W8997) configured to use the WiFi over the PCIe interface.

I’m getting errors using the default WiFi drivers (L4T 32.7.1: Linux_for_Tegra/sources/kernel/kernel-4.9/drivers/net/wireless/marvell/mwifiex) and different versions of WiFi firmware:

[    4.098841] using random host ethernet address
[    4.199826] mwifiex_pcie: try set_consistent_dma_mask(32)
[    4.200160] mwifiex_pcie: PCI memory map Virt0: ffffff8012200000 PCI memory map Virt2: f                                                                                              fffff8012400000
[    4.203279] mwifiex: rx work enabled, cpus 6
[    4.349799] using random self ethernet address
[    4.349924] using random host ethernet address
[    6.035082] random: crng init done
[    6.035194] random: 7 urandom warning(s) missed due to ratelimiting
[    6.184893] irq 88: nobody cared (try booting with the "irqpoll" option)
[    6.185293] handlers:
[    6.185353] [<ffffff8008c5b250>] tegra_mcerr_hard_irq threaded [<ffffff8008c5b400>] tegr                                                                                              a_mcerr_thread
[    6.185552] Disabling IRQ #88
[    6.185640] t19x-arm-smmu 12000000.iommu: Unhandled context fault: smmu1, iova=0xfffa898                                                                                              0, fsynr=0x10013, cb=0, sid=90(0x5a - PCIE4), pgd=27125c003, pud=27125c003, pmd=27125d003,                                                                                               pte=0
[    6.186344] mc-err: vpr base=0:c6000000, size=20, ctrl=3, override:(a01a8340, fcee10c1,                                                                                               1, 0)
[    6.186537] mc-err: (255) csw_pcie4w: MC request violates VPR requirements
[    6.186688] mc-err:   status = 0x0ff740e1; addr = 0xffffffff00; hi_adr_reg=008
[    6.186825] mc-err:   secure: yes, access-type: write
[    9.789065] t19x-arm-smmu 12000000.iommu: Unhandled context fault: smmu1, iova=0xfffb298                                                                                              0, fsynr=0x10013, cb=0, sid=90(0x5a - PCIE4), pgd=27125c003, pud=27125c003, pmd=27125d003,                                                                                               pte=0

Ubuntu 18.04.6 LTS FOCUS-XXXXXX ttyTCU0

FOCUS-XXXXXX login: [   36.773035] t19x-arm-smmu 12000000.iommu: Unhandled context fault: s                                                                                              mmu1, iova=0xfffa2980, fsynr=0x10013, cb=0, sid=90(0x5a - PCIE4), pgd=27125c003, pud=27125c                                                                                              003, pmd=27125d003, pte=0
[   69.779205] t19x-arm-smmu 12000000.iommu: Unhandled context fault: smmu1, iova=0xfffa098                                                                                              0, fsynr=0x10013, cb=0, sid=90(0x5a - PCIE4), pgd=27125c003, pud=27125c003, pmd=27125d003,                                                                                               pte=0
[  112.784135] t19x-arm-smmu 12000000.iommu: Unhandled context fault: smmu1, iova=0xfffa098                                                                                              0, fsynr=0x10013, cb=0, sid=90(0x5a - PCIE4), pgd=27125c003, pud=27125c003, pmd=27125d003,                                                                                               pte=0
[  165.813728] t19x-arm-smmu 12000000.iommu: Unhandled context fault: smmu1, iova=0xfffb298                                                                                              0, fsynr=0x10013, cb=0, sid=90(0x5a - PCIE4), pgd=27125c003, pud=27125c003, pmd=27125d003,                                                                                               pte=0
[  228.824723] t19x-arm-smmu 12000000.iommu: Unhandled context fault: smmu1, iova=0xfffa298                                                                                              0, fsynr=0x10013, cb=0, sid=90(0x5a - PCIE4), pgd=27125c003, pud=27125c003, pmd=27125d003,                                                                                               pte=0
[  417.787403] t19x-arm-smmu 12000000.iommu: Unhandled context fault: smmu1, iova=0xfffb698                                                                                              0, fsynr=0x10013, cb=0, sid=90(0x5a - PCIE4), pgd=27125c003, pud=27125c003, pmd=27125d003,                                                                                               pte=0
[  556.871657] t19x-arm-smmu 12000000.iommu: Unhandled context fault: smmu1, iova=0xfff9c98                                                                                              0, fsynr=0x10013, cb=0, sid=90(0x5a - PCIE4), pgd=27125c003, pud=27125c003, pmd=27125d003,                                                                                               pte=0
[  578.937986] t19x-arm-smmu 12000000.iommu: Unhandled context fault: smmu1, iova=0xfff8e98                                                                                              0, fsynr=0x10013, cb=0, sid=90(0x5a - PCIE4), pgd=27125c003, pud=27125c003, pmd=27125d003,                                                                                               pte=0
[  580.047981] Internal error: Oops - SP/PC alignment exception: 8a000000 [#1] PREEMPT SMP
[  580.047993] Unable to handle kernel read from unreadable memory at virtual address fffff                                                                                              fc1f6b72a00
[  580.048003] Mem abort info:
[  580.048006]   ESR = 0x8600000d
[  580.048009]   Exception class = IABT (current EL), IL = 32 bits
[  580.048012]   SET = 0, FnV = 0
[  580.048014]   EA = 0, S1PTW = 0
[  580.048021] swapper pgtable: 4k pages, 39-bit VAs, pgd = ffffff800a210000
[  580.048028] [ffffffc1f6b72a00] *pgd=00e8000240000711, *pud=00e8000240000711

I ported some of the latest commits from the WiFi directory (marvell) and I don’t see the above errors anymore, but the WiFi is unstable when configured in Access Point mode (it is crashing when I’m bringing the interface up and down fast).

I tried to port commits from the Linux_for_Tegra/sources/kernel/kernel-4.9/drivers/net/wireless/marvell/mwifiex, one by one but some of them require changes in the kernel core, which require changes on other modules also => hard or impossible to port.

My question is: How should I port commits of a driver on top of the latest L4T sources?

Thanks!