@@ -416,10 +416,12 @@ static void svc_thread_recv_status_ok(struct stratix10_svc_data *p_data,
416416 case COMMAND_FIRMWARE_VERSION :
417417 case COMMAND_HWMON_READTEMP :
418418 case COMMAND_HWMON_READVOLT :
419+ case COMMAND_READ_SECURE_REG :
419420 cb_data -> status = BIT (SVC_STATUS_OK );
420421 cb_data -> kaddr1 = & res .a1 ;
421422 break ;
422423 case COMMAND_SMC_SVC_VERSION :
424+ case COMMAND_WRITE_TO_SECURE_REG :
423425 cb_data -> status = BIT (SVC_STATUS_OK );
424426 cb_data -> kaddr1 = & res .a1 ;
425427 cb_data -> kaddr2 = & res .a2 ;
@@ -450,16 +452,26 @@ static void svc_thread_recv_status_ok(struct stratix10_svc_data *p_data,
450452 case COMMAND_FCS_CRYPTO_GET_KEY_INFO :
451453 case COMMAND_FCS_CRYPTO_AES_CRYPT_UPDATE :
452454 case COMMAND_FCS_CRYPTO_AES_CRYPT_FINALIZE :
455+ case COMMAND_FCS_CRYPTO_AES_CRYPT_UPDATE_SMMU :
456+ case COMMAND_FCS_CRYPTO_AES_CRYPT_FINALIZE_SMMU :
453457 case COMMAND_FCS_CRYPTO_GET_DIGEST_UPDATE :
454458 case COMMAND_FCS_CRYPTO_GET_DIGEST_FINALIZE :
459+ case COMMAND_FCS_CRYPTO_GET_DIGEST_UPDATE_SMMU :
460+ case COMMAND_FCS_CRYPTO_GET_DIGEST_FINALIZE_SMMU :
455461 case COMMAND_FCS_CRYPTO_MAC_VERIFY_UPDATE :
456462 case COMMAND_FCS_CRYPTO_MAC_VERIFY_FINALIZE :
463+ case COMMAND_FCS_CRYPTO_MAC_VERIFY_UPDATE_SMMU :
464+ case COMMAND_FCS_CRYPTO_MAC_VERIFY_FINALIZE_SMMU :
457465 case COMMAND_FCS_CRYPTO_ECDSA_HASH_SIGNING_FINALIZE :
458466 case COMMAND_FCS_CRYPTO_ECDSA_SHA2_DATA_SIGNING_UPDATE :
459467 case COMMAND_FCS_CRYPTO_ECDSA_SHA2_DATA_SIGNING_FINALIZE :
468+ case COMMAND_FCS_CRYPTO_ECDSA_SHA2_DATA_SIGNING_UPDATE_SMMU :
469+ case COMMAND_FCS_CRYPTO_ECDSA_SHA2_DATA_SIGNING_FINALIZE_SMMU :
460470 case COMMAND_FCS_CRYPTO_ECDSA_HASH_VERIFY_FINALIZE :
461471 case COMMAND_FCS_CRYPTO_ECDSA_SHA2_VERIFY_UPDATE :
462472 case COMMAND_FCS_CRYPTO_ECDSA_SHA2_VERIFY_FINALIZE :
473+ case COMMAND_FCS_CRYPTO_ECDSA_SHA2_VERIFY_UPDATE_SMMU :
474+ case COMMAND_FCS_CRYPTO_ECDSA_SHA2_VERIFY_FINALIZE_SMMU :
463475 case COMMAND_FCS_CRYPTO_ECDSA_GET_PUBLIC_KEY_FINALIZE :
464476 case COMMAND_FCS_CRYPTO_ECDH_REQUEST_FINALIZE :
465477 case COMMAND_FCS_RANDOM_NUMBER_GEN_EXT :
@@ -763,6 +775,24 @@ static int svc_normal_to_secure_thread(void *data)
763775 a5 = (unsigned long )pdata -> paddr_output ;
764776 a6 = (unsigned long )pdata -> size_output ;
765777 break ;
778+ case COMMAND_FCS_CRYPTO_AES_CRYPT_UPDATE_SMMU :
779+ a0 = INTEL_SIP_SMC_FCS_AES_CRYPTO_UPDATE ;
780+ a1 = pdata -> arg [0 ];
781+ a2 = pdata -> arg [1 ];
782+ a3 = (unsigned long )pdata -> paddr ;
783+ a4 = (unsigned long )pdata -> size ;
784+ a5 = (unsigned long )pdata -> paddr_output ;
785+ a6 = (unsigned long )pdata -> size_output ;
786+ break ;
787+ case COMMAND_FCS_CRYPTO_AES_CRYPT_FINALIZE_SMMU :
788+ a0 = INTEL_SIP_SMC_FCS_AES_CRYPTO_FINALIZE ;
789+ a1 = pdata -> arg [0 ];
790+ a2 = pdata -> arg [1 ];
791+ a3 = (unsigned long )pdata -> paddr ;
792+ a4 = (unsigned long )pdata -> size ;
793+ a5 = (unsigned long )pdata -> paddr_output ;
794+ a6 = (unsigned long )pdata -> size_output ;
795+ break ;
766796 case COMMAND_FCS_CRYPTO_GET_DIGEST_INIT :
767797 a0 = INTEL_SIP_SMC_FCS_GET_DIGEST_INIT ;
768798 a1 = pdata -> arg [0 ];
@@ -789,6 +819,24 @@ static int svc_normal_to_secure_thread(void *data)
789819 a5 = (unsigned long )pdata -> paddr_output ;
790820 a6 = (unsigned long )pdata -> size_output ;
791821 break ;
822+ case COMMAND_FCS_CRYPTO_GET_DIGEST_UPDATE_SMMU :
823+ a0 = INTEL_SIP_SMC_FCS_GET_DIGEST_SMMU_UPDATE ;
824+ a1 = pdata -> arg [0 ];
825+ a2 = pdata -> arg [1 ];
826+ a3 = (unsigned long )pdata -> paddr ;
827+ a4 = (unsigned long )pdata -> size ;
828+ a5 = (unsigned long )pdata -> paddr_output ;
829+ a6 = (unsigned long )pdata -> size_output ;
830+ break ;
831+ case COMMAND_FCS_CRYPTO_GET_DIGEST_FINALIZE_SMMU :
832+ a0 = INTEL_SIP_SMC_FCS_GET_DIGEST_SMMU_FINALIZE ;
833+ a1 = pdata -> arg [0 ];
834+ a2 = pdata -> arg [1 ];
835+ a3 = (unsigned long )pdata -> paddr ;
836+ a4 = (unsigned long )pdata -> size ;
837+ a5 = (unsigned long )pdata -> paddr_output ;
838+ a6 = (unsigned long )pdata -> size_output ;
839+ break ;
792840 case COMMAND_FCS_CRYPTO_MAC_VERIFY_INIT :
793841 a0 = INTEL_SIP_SMC_FCS_MAC_VERIFY_INIT ;
794842 a1 = pdata -> arg [0 ];
@@ -817,6 +865,26 @@ static int svc_normal_to_secure_thread(void *data)
817865 a6 = (unsigned long )pdata -> size_output ;
818866 a7 = pdata -> arg [2 ];
819867 break ;
868+ case COMMAND_FCS_CRYPTO_MAC_VERIFY_UPDATE_SMMU :
869+ a0 = INTEL_SIP_SMC_FCS_MAC_VERIFY_SMMU_UPDATE ;
870+ a1 = pdata -> arg [0 ];
871+ a2 = pdata -> arg [1 ];
872+ a3 = (unsigned long )pdata -> paddr ;
873+ a4 = (unsigned long )pdata -> size ;
874+ a5 = (unsigned long )pdata -> paddr_output ;
875+ a6 = (unsigned long )pdata -> size_output ;
876+ a7 = pdata -> arg [2 ];
877+ break ;
878+ case COMMAND_FCS_CRYPTO_MAC_VERIFY_FINALIZE_SMMU :
879+ a0 = INTEL_SIP_SMC_FCS_MAC_VERIFY_SMMU_FINALIZE ;
880+ a1 = pdata -> arg [0 ];
881+ a2 = pdata -> arg [1 ];
882+ a3 = (unsigned long )pdata -> paddr ;
883+ a4 = (unsigned long )pdata -> size ;
884+ a5 = (unsigned long )pdata -> paddr_output ;
885+ a6 = (unsigned long )pdata -> size_output ;
886+ a7 = pdata -> arg [2 ];
887+ break ;
820888 case COMMAND_FCS_CRYPTO_ECDSA_HASH_SIGNING_INIT :
821889 a0 = INTEL_SIP_SMC_FCS_ECDSA_HASH_SIGNING_INIT ;
822890 a1 = pdata -> arg [0 ];
@@ -860,6 +928,24 @@ static int svc_normal_to_secure_thread(void *data)
860928 a5 = (unsigned long )pdata -> paddr_output ;
861929 a6 = (unsigned long )pdata -> size_output ;
862930 break ;
931+ case COMMAND_FCS_CRYPTO_ECDSA_SHA2_DATA_SIGNING_UPDATE_SMMU :
932+ a0 = INTEL_SIP_SMC_FCS_ECDSA_SHA2_DATA_SIGNING_SMMU_UPDATE ;
933+ a1 = pdata -> arg [0 ];
934+ a2 = pdata -> arg [1 ];
935+ a3 = (unsigned long )pdata -> paddr ;
936+ a4 = (unsigned long )pdata -> size ;
937+ a5 = (unsigned long )pdata -> paddr_output ;
938+ a6 = (unsigned long )pdata -> size_output ;
939+ break ;
940+ case COMMAND_FCS_CRYPTO_ECDSA_SHA2_DATA_SIGNING_FINALIZE_SMMU :
941+ a0 = INTEL_SIP_SMC_FCS_ECDSA_SHA2_DATA_SIGNING_SMMU_FINALIZE ;
942+ a1 = pdata -> arg [0 ];
943+ a2 = pdata -> arg [1 ];
944+ a3 = (unsigned long )pdata -> paddr ;
945+ a4 = (unsigned long )pdata -> size ;
946+ a5 = (unsigned long )pdata -> paddr_output ;
947+ a6 = (unsigned long )pdata -> size_output ;
948+ break ;
863949 case COMMAND_FCS_CRYPTO_ECDSA_HASH_VERIFY_INIT :
864950 a0 = INTEL_SIP_SMC_FCS_ECDSA_HASH_SIGNATURE_VERIFY_INIT ;
865951 a1 = pdata -> arg [0 ];
@@ -905,6 +991,26 @@ static int svc_normal_to_secure_thread(void *data)
905991 a6 = (unsigned long )pdata -> size_output ;
906992 a7 = pdata -> arg [2 ];
907993 break ;
994+ case COMMAND_FCS_CRYPTO_ECDSA_SHA2_VERIFY_UPDATE_SMMU :
995+ a0 = INTEL_SIP_SMC_FCS_ECDSA_SHA2_DATA_SIGNATURE_VERIFY_SMMU_UPDATE ;
996+ a1 = pdata -> arg [0 ];
997+ a2 = pdata -> arg [1 ];
998+ a3 = (unsigned long )pdata -> paddr ;
999+ a4 = (unsigned long )pdata -> size ;
1000+ a5 = (unsigned long )pdata -> paddr_output ;
1001+ a6 = (unsigned long )pdata -> size_output ;
1002+ a7 = pdata -> arg [2 ];
1003+ break ;
1004+ case COMMAND_FCS_CRYPTO_ECDSA_SHA2_VERIFY_FINALIZE_SMMU :
1005+ a0 = INTEL_SIP_SMC_FCS_ECDSA_SHA2_DATA_SIGNATURE_VERIFY_SMMU_FINALIZE ;
1006+ a1 = pdata -> arg [0 ];
1007+ a2 = pdata -> arg [1 ];
1008+ a3 = (unsigned long )pdata -> paddr ;
1009+ a4 = (unsigned long )pdata -> size ;
1010+ a5 = (unsigned long )pdata -> paddr_output ;
1011+ a6 = (unsigned long )pdata -> size_output ;
1012+ a7 = pdata -> arg [2 ];
1013+ break ;
9081014 case COMMAND_FCS_CRYPTO_ECDSA_GET_PUBLIC_KEY_INIT :
9091015 a0 = INTEL_SIP_SMC_FCS_ECDSA_GET_PUBLIC_KEY_INIT ;
9101016 a1 = pdata -> arg [0 ];
@@ -985,6 +1091,15 @@ static int svc_normal_to_secure_thread(void *data)
9851091 a5 = (unsigned long )pdata -> paddr_output ;
9861092 a6 = (unsigned long )pdata -> size_output / BYTE_TO_WORD_SIZE ;
9871093 break ;
1094+ case COMMAND_WRITE_TO_SECURE_REG :
1095+ a0 = INTEL_SIP_SMC_REG_WRITE ;
1096+ a1 = pdata -> arg [0 ];
1097+ a2 = pdata -> arg [1 ];
1098+ break ;
1099+ case COMMAND_READ_SECURE_REG :
1100+ a0 = INTEL_SIP_SMC_REG_READ ;
1101+ a1 = pdata -> arg [0 ];
1102+ break ;
9881103 default :
9891104 pr_warn ("it shouldn't happen\n" );
9901105 break ;
@@ -1075,22 +1190,32 @@ static int svc_normal_to_secure_thread(void *data)
10751190 case COMMAND_FCS_CRYPTO_AES_CRYPT_INIT :
10761191 case COMMAND_FCS_CRYPTO_AES_CRYPT_UPDATE :
10771192 case COMMAND_FCS_CRYPTO_AES_CRYPT_FINALIZE :
1193+ case COMMAND_FCS_CRYPTO_AES_CRYPT_UPDATE_SMMU :
1194+ case COMMAND_FCS_CRYPTO_AES_CRYPT_FINALIZE_SMMU :
10781195 case COMMAND_FCS_CRYPTO_GET_DIGEST_INIT :
10791196 case COMMAND_FCS_CRYPTO_GET_DIGEST_UPDATE :
10801197 case COMMAND_FCS_CRYPTO_GET_DIGEST_FINALIZE :
1198+ case COMMAND_FCS_CRYPTO_GET_DIGEST_UPDATE_SMMU :
1199+ case COMMAND_FCS_CRYPTO_GET_DIGEST_FINALIZE_SMMU :
10811200 case COMMAND_FCS_CRYPTO_MAC_VERIFY_INIT :
10821201 case COMMAND_FCS_CRYPTO_MAC_VERIFY_UPDATE :
10831202 case COMMAND_FCS_CRYPTO_MAC_VERIFY_FINALIZE :
1203+ case COMMAND_FCS_CRYPTO_MAC_VERIFY_UPDATE_SMMU :
1204+ case COMMAND_FCS_CRYPTO_MAC_VERIFY_FINALIZE_SMMU :
10841205 case COMMAND_FCS_CRYPTO_ECDSA_HASH_SIGNING_INIT :
10851206 case COMMAND_FCS_CRYPTO_ECDSA_HASH_SIGNING_FINALIZE :
10861207 case COMMAND_FCS_CRYPTO_ECDSA_SHA2_DATA_SIGNING_INIT :
10871208 case COMMAND_FCS_CRYPTO_ECDSA_SHA2_DATA_SIGNING_UPDATE :
10881209 case COMMAND_FCS_CRYPTO_ECDSA_SHA2_DATA_SIGNING_FINALIZE :
1210+ case COMMAND_FCS_CRYPTO_ECDSA_SHA2_DATA_SIGNING_UPDATE_SMMU :
1211+ case COMMAND_FCS_CRYPTO_ECDSA_SHA2_DATA_SIGNING_FINALIZE_SMMU :
10891212 case COMMAND_FCS_CRYPTO_ECDSA_HASH_VERIFY_INIT :
10901213 case COMMAND_FCS_CRYPTO_ECDSA_HASH_VERIFY_FINALIZE :
10911214 case COMMAND_FCS_CRYPTO_ECDSA_SHA2_VERIFY_INIT :
10921215 case COMMAND_FCS_CRYPTO_ECDSA_SHA2_VERIFY_UPDATE :
10931216 case COMMAND_FCS_CRYPTO_ECDSA_SHA2_VERIFY_FINALIZE :
1217+ case COMMAND_FCS_CRYPTO_ECDSA_SHA2_VERIFY_UPDATE_SMMU :
1218+ case COMMAND_FCS_CRYPTO_ECDSA_SHA2_VERIFY_FINALIZE_SMMU :
10941219 case COMMAND_FCS_CRYPTO_ECDSA_GET_PUBLIC_KEY_INIT :
10951220 case COMMAND_FCS_CRYPTO_ECDSA_GET_PUBLIC_KEY_FINALIZE :
10961221 case COMMAND_FCS_CRYPTO_ECDH_REQUEST_INIT :
@@ -1450,6 +1575,8 @@ int stratix10_svc_send(struct stratix10_svc_chan *chan, void *msg)
14501575 struct stratix10_svc_data * p_data ;
14511576 int ret = 0 ;
14521577 unsigned int cpu = 0 ;
1578+ phys_addr_t * src_addr ;
1579+ phys_addr_t * dst_addr ;
14531580
14541581 p_data = kzalloc (sizeof (* p_data ), GFP_KERNEL );
14551582 if (!p_data )
@@ -1484,21 +1611,57 @@ int stratix10_svc_send(struct stratix10_svc_chan *chan, void *msg)
14841611 p_data -> flag = ct -> flags ;
14851612 }
14861613 } else {
1487- list_for_each_entry (p_mem , & svc_data_mem , node )
1488- if (p_mem -> vaddr == p_msg -> payload ) {
1489- p_data -> paddr = p_mem -> paddr ;
1490- p_data -> size = p_msg -> payload_length ;
1491- break ;
1492- }
1493- if (p_msg -> payload_output ) {
1614+ if (p_msg -> command == COMMAND_FCS_CRYPTO_AES_CRYPT_UPDATE_SMMU ||
1615+ p_msg -> command == COMMAND_FCS_CRYPTO_AES_CRYPT_FINALIZE_SMMU ){
1616+ src_addr = (phys_addr_t * )p_msg -> payload ;
1617+ p_data -> paddr = * src_addr ;
1618+ p_data -> size = p_msg -> payload_length ;
1619+ dst_addr = (phys_addr_t * )p_msg -> payload_output ;
1620+ p_data -> paddr_output = * dst_addr ;
1621+ p_data -> size_output = p_msg -> payload_length_output ;
1622+ } else if (
1623+ p_msg -> command ==
1624+ COMMAND_FCS_CRYPTO_ECDSA_SHA2_DATA_SIGNING_UPDATE_SMMU ||
1625+ p_msg -> command ==
1626+ COMMAND_FCS_CRYPTO_ECDSA_SHA2_DATA_SIGNING_FINALIZE_SMMU ||
1627+ p_msg -> command ==
1628+ COMMAND_FCS_CRYPTO_GET_DIGEST_UPDATE_SMMU ||
1629+ p_msg -> command ==
1630+ COMMAND_FCS_CRYPTO_GET_DIGEST_FINALIZE_SMMU ||
1631+ p_msg -> command ==
1632+ COMMAND_FCS_CRYPTO_ECDSA_SHA2_VERIFY_UPDATE_SMMU ||
1633+ p_msg -> command ==
1634+ COMMAND_FCS_CRYPTO_ECDSA_SHA2_VERIFY_FINALIZE_SMMU ||
1635+ p_msg -> command ==
1636+ COMMAND_FCS_CRYPTO_MAC_VERIFY_UPDATE_SMMU ||
1637+ p_msg -> command ==
1638+ COMMAND_FCS_CRYPTO_MAC_VERIFY_FINALIZE_SMMU ) {
1639+ src_addr = (phys_addr_t * )p_msg -> payload ;
1640+ p_data -> paddr = * src_addr ;
1641+ p_data -> size = p_msg -> payload_length ;
14941642 list_for_each_entry (p_mem , & svc_data_mem , node )
14951643 if (p_mem -> vaddr == p_msg -> payload_output ) {
1496- p_data -> paddr_output =
1497- p_mem -> paddr ;
1498- p_data -> size_output =
1499- p_msg -> payload_length_output ;
1644+ p_data -> paddr_output = p_mem -> paddr ;
1645+ p_data -> size_output = p_msg -> payload_length_output ;
15001646 break ;
15011647 }
1648+ } else {
1649+ list_for_each_entry (p_mem , & svc_data_mem , node )
1650+ if (p_mem -> vaddr == p_msg -> payload ) {
1651+ p_data -> paddr = p_mem -> paddr ;
1652+ p_data -> size = p_msg -> payload_length ;
1653+ break ;
1654+ }
1655+ if (p_msg -> payload_output ) {
1656+ list_for_each_entry (p_mem , & svc_data_mem , node )
1657+ if (p_mem -> vaddr == p_msg -> payload_output ) {
1658+ p_data -> paddr_output =
1659+ p_mem -> paddr ;
1660+ p_data -> size_output =
1661+ p_msg -> payload_length_output ;
1662+ break ;
1663+ }
1664+ }
15021665 }
15031666 }
15041667
0 commit comments