soc/amd/cezanne, vc/amd/fsp/*: Add support for CCP DMA SVC call

Add support to access the boot device from PSP through Crypto
Co-Processor (CCP) DMA. Implement a SVC call to use CCP DMA on SoCs
where it is supported and a stub on SoCs where it is not supported. This
provides an improved performance while accessing the boot device and
reduces the boot time by ~45 ms.

BUG=b:194990811
TEST=Build and boot to OS in guybrush. Perform cold and warm reboot
cycling for 250 iterations.

Change-Id: I02b94a842190ac4dcf45ff2d846b8665f06a9c75
Signed-off-by: Karthikeyan Ramasubramanian <kramasub@google.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/57562
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Raul Rangel <rrangel@chromium.org>
diff --git a/src/soc/amd/cezanne/psp_verstage/svc.c b/src/soc/amd/cezanne/psp_verstage/svc.c
index e0f1b52..e04c702 100644
--- a/src/soc/amd/cezanne/psp_verstage/svc.c
+++ b/src/soc/amd/cezanne/psp_verstage/svc.c
@@ -126,3 +126,10 @@
 	SVC_CALL1(SVC_MODEXP, mod_exp_param, retval);
 	return retval;
 }
+
+uint32_t svc_ccp_dma(uint32_t spi_rom_offset, void *dest, uint32_t size)
+{
+	uint32_t retval = 0;
+	SVC_CALL3(SVC_CCP_DMA, spi_rom_offset, dest, size, retval);
+	return retval;
+}
diff --git a/src/vendorcode/amd/fsp/cezanne/include/bl_uapp/bl_syscall_public.h b/src/vendorcode/amd/fsp/cezanne/include/bl_uapp/bl_syscall_public.h
index 61c9e5f..06e9def 100644
--- a/src/vendorcode/amd/fsp/cezanne/include/bl_uapp/bl_syscall_public.h
+++ b/src/vendorcode/amd/fsp/cezanne/include/bl_uapp/bl_syscall_public.h
@@ -49,6 +49,7 @@
 #define SVC_RESET_SYSTEM                    0x67
 #define SVC_READ_TIMER_VAL                  0x68
 #define SVC_SHA                             0x69
+#define SVC_CCP_DMA                         0x6A
 
 struct mod_exp_params {
 	char		*pExponent;	// Exponent address
@@ -300,6 +301,18 @@
  */
 uint32_t svc_modexp(struct mod_exp_params *mod_exp_param);
 
+/*
+ * Copies the data from source to destination using ccp
+ *
+ * Parameters:
+ *   Source Address - SPI ROM offset
+ *   Destination Address - Address in Verstage memory
+ *   Size    - Total size to copy
+ *
+ * Return value: BL_OK or error code
+ */
+uint32_t svc_ccp_dma(uint32_t spi_rom_offset, void *dest, uint32_t size);
+
 /* C entry point for the Bootloader Userspace Application */
 void Main(void);
 
diff --git a/src/vendorcode/amd/fsp/picasso/include/bl_uapp/bl_syscall_public.h b/src/vendorcode/amd/fsp/picasso/include/bl_uapp/bl_syscall_public.h
index c057295..0c168a9 100644
--- a/src/vendorcode/amd/fsp/picasso/include/bl_uapp/bl_syscall_public.h
+++ b/src/vendorcode/amd/fsp/picasso/include/bl_uapp/bl_syscall_public.h
@@ -30,6 +30,7 @@
 #ifndef _BL_SYSCALL_PUBLIC_H_
 #define _BL_SYSCALL_PUBLIC_H_
 
+#include <bl_uapp/bl_errorcodes_public.h>
 #include <stdint.h>
 
 #define SVC_EXIT			0x00
@@ -394,6 +395,21 @@
  */
 uint32_t svc_modexp(struct mod_exp_params *mod_exp_param);
 
+/*
+ * Copies the data from source to destination using ccp
+ *
+ * Parameters:
+ *   Source Address - SPI ROM offset
+ *   Destination Address - Address in Verstage memory
+ *   Size    - Total size to copy
+ *
+ * Return value: BL_OK or error code
+ */
+static inline uint32_t svc_ccp_dma(uint32_t spi_rom_offset, void *dest, uint32_t size)
+{
+	return BL_ERR_UNSUPPORTED_PLATFORM;
+}
+
 /* C entry point for the Bootloader Userspace Application */
 void Main(void);