diff mbox series

payloads/test: Add support for SBI v0.2 ecalls

Message ID 20210814135210.17729-1-samuel@sholland.org
State Accepted
Headers show
Series payloads/test: Add support for SBI v0.2 ecalls | expand

Commit Message

Samuel Holland Aug. 14, 2021, 1:52 p.m. UTC
It can be useful to make SBI v0.2 or newer ecalls from this payload
for testing purposes. To support this, convert the macros to use the
extension/function parameter convention.

Signed-off-by: Samuel Holland <samuel@sholland.org>
---
 firmware/payloads/test_main.c | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

Comments

Atish Patra Aug. 17, 2021, 12:10 a.m. UTC | #1
On Sat, Aug 14, 2021 at 6:52 AM Samuel Holland <samuel@sholland.org> wrote:
>
> It can be useful to make SBI v0.2 or newer ecalls from this payload
> for testing purposes. To support this, convert the macros to use the
> extension/function parameter convention.
>
> Signed-off-by: Samuel Holland <samuel@sholland.org>
> ---
>  firmware/payloads/test_main.c | 15 ++++++++-------
>  1 file changed, 8 insertions(+), 7 deletions(-)
>
> diff --git a/firmware/payloads/test_main.c b/firmware/payloads/test_main.c
> index 0d65930..ae2ed4f 100644
> --- a/firmware/payloads/test_main.c
> +++ b/firmware/payloads/test_main.c
> @@ -9,24 +9,25 @@
>
>  #include <sbi/sbi_ecall_interface.h>
>
> -#define SBI_ECALL(__num, __a0, __a1, __a2)                                    \
> +#define SBI_ECALL(__eid, __fid, __a0, __a1, __a2)                             \
>         ({                                                                    \
>                 register unsigned long a0 asm("a0") = (unsigned long)(__a0);  \
>                 register unsigned long a1 asm("a1") = (unsigned long)(__a1);  \
>                 register unsigned long a2 asm("a2") = (unsigned long)(__a2);  \
> -               register unsigned long a7 asm("a7") = (unsigned long)(__num); \
> +               register unsigned long a6 asm("a6") = (unsigned long)(__fid); \
> +               register unsigned long a7 asm("a7") = (unsigned long)(__eid); \
>                 asm volatile("ecall"                                          \
>                              : "+r"(a0)                                       \
> -                            : "r"(a1), "r"(a2), "r"(a7)                      \
> +                            : "r"(a1), "r"(a2), "r"(a6), "r"(a7)             \
>                              : "memory");                                     \
>                 a0;                                                           \
>         })
>
> -#define SBI_ECALL_0(__num) SBI_ECALL(__num, 0, 0, 0)
> -#define SBI_ECALL_1(__num, __a0) SBI_ECALL(__num, __a0, 0, 0)
> -#define SBI_ECALL_2(__num, __a0, __a1) SBI_ECALL(__num, __a0, __a1, 0)
> +#define SBI_ECALL_0(__eid, __fid) SBI_ECALL(__eid, __fid, 0, 0, 0)
> +#define SBI_ECALL_1(__eid, __fid, __a0) SBI_ECALL(__eid, __fid, __a0, 0, 0)
> +#define SBI_ECALL_2(__eid, __fid, __a0, __a1) SBI_ECALL(__eid, __fid, __a0, __a1, 0)
>
> -#define sbi_ecall_console_putc(c) SBI_ECALL_1(SBI_EXT_0_1_CONSOLE_PUTCHAR, (c))
> +#define sbi_ecall_console_putc(c) SBI_ECALL_1(SBI_EXT_0_1_CONSOLE_PUTCHAR, 0, (c))
>
>  static inline void sbi_ecall_console_puts(const char *str)
>  {
> --
> 2.31.1
>
>
> --
> opensbi mailing list
> opensbi@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/opensbi


Reviewed-by: Atish Patra <atish.patra@wdc.com>
Anup Patel Aug. 20, 2021, 4:54 a.m. UTC | #2
On Tue, Aug 17, 2021 at 5:41 AM Atish Patra <atishp@atishpatra.org> wrote:
>
> On Sat, Aug 14, 2021 at 6:52 AM Samuel Holland <samuel@sholland.org> wrote:
> >
> > It can be useful to make SBI v0.2 or newer ecalls from this payload
> > for testing purposes. To support this, convert the macros to use the
> > extension/function parameter convention.
> >
> > Signed-off-by: Samuel Holland <samuel@sholland.org>
> > ---
> >  firmware/payloads/test_main.c | 15 ++++++++-------
> >  1 file changed, 8 insertions(+), 7 deletions(-)
> >
> > diff --git a/firmware/payloads/test_main.c b/firmware/payloads/test_main.c
> > index 0d65930..ae2ed4f 100644
> > --- a/firmware/payloads/test_main.c
> > +++ b/firmware/payloads/test_main.c
> > @@ -9,24 +9,25 @@
> >
> >  #include <sbi/sbi_ecall_interface.h>
> >
> > -#define SBI_ECALL(__num, __a0, __a1, __a2)                                    \
> > +#define SBI_ECALL(__eid, __fid, __a0, __a1, __a2)                             \
> >         ({                                                                    \
> >                 register unsigned long a0 asm("a0") = (unsigned long)(__a0);  \
> >                 register unsigned long a1 asm("a1") = (unsigned long)(__a1);  \
> >                 register unsigned long a2 asm("a2") = (unsigned long)(__a2);  \
> > -               register unsigned long a7 asm("a7") = (unsigned long)(__num); \
> > +               register unsigned long a6 asm("a6") = (unsigned long)(__fid); \
> > +               register unsigned long a7 asm("a7") = (unsigned long)(__eid); \
> >                 asm volatile("ecall"                                          \
> >                              : "+r"(a0)                                       \
> > -                            : "r"(a1), "r"(a2), "r"(a7)                      \
> > +                            : "r"(a1), "r"(a2), "r"(a6), "r"(a7)             \
> >                              : "memory");                                     \
> >                 a0;                                                           \
> >         })
> >
> > -#define SBI_ECALL_0(__num) SBI_ECALL(__num, 0, 0, 0)
> > -#define SBI_ECALL_1(__num, __a0) SBI_ECALL(__num, __a0, 0, 0)
> > -#define SBI_ECALL_2(__num, __a0, __a1) SBI_ECALL(__num, __a0, __a1, 0)
> > +#define SBI_ECALL_0(__eid, __fid) SBI_ECALL(__eid, __fid, 0, 0, 0)
> > +#define SBI_ECALL_1(__eid, __fid, __a0) SBI_ECALL(__eid, __fid, __a0, 0, 0)
> > +#define SBI_ECALL_2(__eid, __fid, __a0, __a1) SBI_ECALL(__eid, __fid, __a0, __a1, 0)
> >
> > -#define sbi_ecall_console_putc(c) SBI_ECALL_1(SBI_EXT_0_1_CONSOLE_PUTCHAR, (c))
> > +#define sbi_ecall_console_putc(c) SBI_ECALL_1(SBI_EXT_0_1_CONSOLE_PUTCHAR, 0, (c))
> >
> >  static inline void sbi_ecall_console_puts(const char *str)
> >  {
> > --
> > 2.31.1
> >
> >
> > --
> > opensbi mailing list
> > opensbi@lists.infradead.org
> > http://lists.infradead.org/mailman/listinfo/opensbi
>
>
> Reviewed-by: Atish Patra <atish.patra@wdc.com>

Applied this patch to the riscv/opensbi repo.

Thanks,
Anup

>
> --
> Regards,
> Atish
>
> --
> opensbi mailing list
> opensbi@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/opensbi
diff mbox series

Patch

diff --git a/firmware/payloads/test_main.c b/firmware/payloads/test_main.c
index 0d65930..ae2ed4f 100644
--- a/firmware/payloads/test_main.c
+++ b/firmware/payloads/test_main.c
@@ -9,24 +9,25 @@ 
 
 #include <sbi/sbi_ecall_interface.h>
 
-#define SBI_ECALL(__num, __a0, __a1, __a2)                                    \
+#define SBI_ECALL(__eid, __fid, __a0, __a1, __a2)                             \
 	({                                                                    \
 		register unsigned long a0 asm("a0") = (unsigned long)(__a0);  \
 		register unsigned long a1 asm("a1") = (unsigned long)(__a1);  \
 		register unsigned long a2 asm("a2") = (unsigned long)(__a2);  \
-		register unsigned long a7 asm("a7") = (unsigned long)(__num); \
+		register unsigned long a6 asm("a6") = (unsigned long)(__fid); \
+		register unsigned long a7 asm("a7") = (unsigned long)(__eid); \
 		asm volatile("ecall"                                          \
 			     : "+r"(a0)                                       \
-			     : "r"(a1), "r"(a2), "r"(a7)                      \
+			     : "r"(a1), "r"(a2), "r"(a6), "r"(a7)             \
 			     : "memory");                                     \
 		a0;                                                           \
 	})
 
-#define SBI_ECALL_0(__num) SBI_ECALL(__num, 0, 0, 0)
-#define SBI_ECALL_1(__num, __a0) SBI_ECALL(__num, __a0, 0, 0)
-#define SBI_ECALL_2(__num, __a0, __a1) SBI_ECALL(__num, __a0, __a1, 0)
+#define SBI_ECALL_0(__eid, __fid) SBI_ECALL(__eid, __fid, 0, 0, 0)
+#define SBI_ECALL_1(__eid, __fid, __a0) SBI_ECALL(__eid, __fid, __a0, 0, 0)
+#define SBI_ECALL_2(__eid, __fid, __a0, __a1) SBI_ECALL(__eid, __fid, __a0, __a1, 0)
 
-#define sbi_ecall_console_putc(c) SBI_ECALL_1(SBI_EXT_0_1_CONSOLE_PUTCHAR, (c))
+#define sbi_ecall_console_putc(c) SBI_ECALL_1(SBI_EXT_0_1_CONSOLE_PUTCHAR, 0, (c))
 
 static inline void sbi_ecall_console_puts(const char *str)
 {