}
 #endif
 
+static inline struct ap_queue_status __ap_4096_commands_available(ap_qid_t qid,
+                                                                 int *support)
+{
+       register unsigned long reg0 asm ("0") = 0UL | qid | (1UL << 23);
+       register struct ap_queue_status reg1 asm ("1");
+       register unsigned long reg2 asm ("2") = 0UL;
+
+       asm volatile(
+               ".long 0xb2af0000\n"
+               "0: la    %1,0\n"
+               "1:\n"
+               EX_TABLE(0b, 1b)
+               : "+d" (reg0), "=d" (reg1), "=d" (reg2)
+               :
+               : "cc");
+
+       if (reg2 & 0x6000000000000000ULL)
+               *support = 1;
+       else
+               *support = 0;
+
+       return reg1;
+}
+
+/**
+ * ap_4096_commands_availablen(): Check for availability of 4096 bit RSA
+ * support.
+ * @qid: The AP queue number
+ *
+ * Returns 1 if 4096 bit RSA keys are support fo the AP, returns 0 if not.
+ */
+int ap_4096_commands_available(ap_qid_t qid)
+{
+       struct ap_queue_status status;
+       int i, support = 0;
+       status = __ap_4096_commands_available(qid, &support);
+
+       for (i = 0; i < AP_MAX_RESET; i++) {
+               switch (status.response_code) {
+               case AP_RESPONSE_NORMAL:
+                       return support;
+               case AP_RESPONSE_RESET_IN_PROGRESS:
+               case AP_RESPONSE_BUSY:
+                       break;
+               case AP_RESPONSE_Q_NOT_AVAIL:
+               case AP_RESPONSE_DECONFIGURED:
+               case AP_RESPONSE_CHECKSTOPPED:
+               case AP_RESPONSE_INVALID_ADDRESS:
+                       return 0;
+               case AP_RESPONSE_OTHERWISE_CHANGED:
+                       break;
+               default:
+                       break;
+               }
+               if (i < AP_MAX_RESET - 1) {
+                       udelay(5);
+                       status = __ap_4096_commands_available(qid, &support);
+               }
+       }
+       return support;
+}
+EXPORT_SYMBOL(ap_4096_commands_available);
+
 /**
  * ap_queue_enable_interruption(): Enable interruption on an AP.
  * @qid: The AP queue number