#define WFPM_CTRL_REG                  0xA03030
 enum {
        ENABLE_WFPM = BIT(31),
+       WFPM_AUX_CTL_AUX_IF_MAC_OWNER_MSK       = 0x80000000,
 };
 
 #define AUX_MISC_REG                   0xA200B0
        HW_STEP_LOCATION_BITS = 24,
 };
 
+#define AUX_MISC_MASTER1_EN            0xA20818
+enum aux_misc_master1_en {
+       AUX_MISC_MASTER1_EN_SBE_MSK     = 0x1,
+};
+
+#define AUX_MISC_MASTER1_SMPHR_STATUS  0xA20800
+#define RSA_ENABLE                     0xA24B08
+#define PREG_AUX_BUS_WPROT_0           0xA04CC0
+
 /* FW chicken bits */
 #define LMPM_CHICK                     0xA01FF8
 enum {
 
        return ret;
 }
 
+/*
+ * Driver Takes the ownership on secure machine before FW load
+ * and prevent race with the BT load.
+ * W/A for ROM bug. (should be remove in the next Si step)
+ */
+static int iwl_pcie_rsa_race_bug_wa(struct iwl_trans *trans)
+{
+       u32 val, loop = 1000;
+
+       /* Check the RSA semaphore is accessible - if not, we are in trouble */
+       val = iwl_read_prph(trans, PREG_AUX_BUS_WPROT_0);
+       if (val & (BIT(1) | BIT(17))) {
+               IWL_ERR(trans,
+                       "can't access the RSA semaphore it is write protected\n");
+               return 0;
+       }
+
+       /* take ownership on the AUX IF */
+       iwl_write_prph(trans, WFPM_CTRL_REG, WFPM_AUX_CTL_AUX_IF_MAC_OWNER_MSK);
+       iwl_write_prph(trans, AUX_MISC_MASTER1_EN, AUX_MISC_MASTER1_EN_SBE_MSK);
+
+       do {
+               iwl_write_prph(trans, AUX_MISC_MASTER1_SMPHR_STATUS, 0x1);
+               val = iwl_read_prph(trans, AUX_MISC_MASTER1_SMPHR_STATUS);
+               if (val == 0x1) {
+                       iwl_write_prph(trans, RSA_ENABLE, 0);
+                       return 0;
+               }
+
+               udelay(10);
+               loop--;
+       } while (loop > 0);
+
+       IWL_ERR(trans, "Failed to take ownership on secure machine\n");
+       return -EIO;
+}
+
 static int iwl_pcie_load_cpu_sections_8000b(struct iwl_trans *trans,
                                            const struct fw_img *image,
                                            int cpu,
        if (trans->dbg_dest_tlv)
                iwl_pcie_apply_destination(trans);
 
+       /* TODO: remove in the next Si step */
+       ret = iwl_pcie_rsa_race_bug_wa(trans);
+       if (ret)
+               return ret;
+
        /* configure the ucode to be ready to get the secured image */
        /* release CPU reset */
        iwl_write_prph(trans, RELEASE_CPU_RESET, RELEASE_CPU_RESET_BIT);