diff mbox series

[v6,06/11] RISC-V: Add Linux load logic

Message ID 20190212103108.56963-7-agraf@suse.de
State Accepted
Commit 222a34304cf409ebcc2dab8ce022d50eb6f9c2fa
Headers show
Series Add RISC-V support | expand

Commit Message

Alexander Graf Feb. 12, 2019, 10:31 a.m. UTC
We currently only support to run grub on RISC-V as UEFI payload. Ideally,
we also only want to support running Linux underneath as UEFI payload.

Prepare that with some Linux boot stub code. Once the arm64 target is
generalized, we can hook into that one and gain boot functionality.

Signed-off-by: Alexander Graf <agraf@suse.de>


---

v1 -> v2:

  - adapt to new grub_open_file() API
  - adapt to new grub_create_loader_cmdline() API

v3 -> v4:

  - Change copyright from 2013 to 2018
  - Coding style fixes

v4 -> v5:

  - Use GRUB_EFI_LINUX_FDT_EXTRA_SPACE
  - Fix whitespace
  - s/failure/fail

v5 -> v6:

  - remove most linux logic
---
 grub-core/loader/riscv/linux.c | 59 ++++++++++++++++++++++++++++++++++++++++++
 include/grub/riscv32/linux.h   | 41 +++++++++++++++++++++++++++++
 include/grub/riscv64/linux.h   | 43 ++++++++++++++++++++++++++++++
 3 files changed, 143 insertions(+)
 create mode 100644 grub-core/loader/riscv/linux.c
 create mode 100644 include/grub/riscv32/linux.h
 create mode 100644 include/grub/riscv64/linux.h

-- 
2.12.3


_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel

Comments

Alistair Francis Feb. 13, 2019, 12:37 a.m. UTC | #1
On Tue, 2019-02-12 at 11:31 +0100, Alexander Graf wrote:
> We currently only support to run grub on RISC-V as UEFI payload.

> Ideally,

> we also only want to support running Linux underneath as UEFI

> payload.

> 

> Prepare that with some Linux boot stub code. Once the arm64 target is

> generalized, we can hook into that one and gain boot functionality.

> 

> Signed-off-by: Alexander Graf <agraf@suse.de>


Reviewed-by: Alistair Francis <alistair.francis@wdc.com>


Alistair

> 


> ---

> 

> v1 -> v2:

> 

>   - adapt to new grub_open_file() API

>   - adapt to new grub_create_loader_cmdline() API

> 

> v3 -> v4:

> 

>   - Change copyright from 2013 to 2018

>   - Coding style fixes

> 

> v4 -> v5:

> 

>   - Use GRUB_EFI_LINUX_FDT_EXTRA_SPACE

>   - Fix whitespace

>   - s/failure/fail

> 

> v5 -> v6:

> 

>   - remove most linux logic

> ---

>  grub-core/loader/riscv/linux.c | 59

> ++++++++++++++++++++++++++++++++++++++++++

>  include/grub/riscv32/linux.h   | 41 +++++++++++++++++++++++++++++

>  include/grub/riscv64/linux.h   | 43 ++++++++++++++++++++++++++++++

>  3 files changed, 143 insertions(+)

>  create mode 100644 grub-core/loader/riscv/linux.c

>  create mode 100644 include/grub/riscv32/linux.h

>  create mode 100644 include/grub/riscv64/linux.h

> 

> diff --git a/grub-core/loader/riscv/linux.c b/grub-

> core/loader/riscv/linux.c

> new file mode 100644

> index 000000000..d17c488e1

> --- /dev/null

> +++ b/grub-core/loader/riscv/linux.c

> @@ -0,0 +1,59 @@

> +/*

> + *  GRUB  --  GRand Unified Bootloader

> + *  Copyright (C) 2018  Free Software Foundation, Inc.

> + *

> + *  GRUB is free software: you can redistribute it and/or modify

> + *  it under the terms of the GNU General Public License as

> published by

> + *  the Free Software Foundation, either version 3 of the License,

> or

> + *  (at your option) any later version.

> + *

> + *  GRUB is distributed in the hope that it will be useful,

> + *  but WITHOUT ANY WARRANTY; without even the implied warranty of

> + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

> + *  GNU General Public License for more details.

> + *

> + *  You should have received a copy of the GNU General Public

> License

> + *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>;.

> + */

> +

> +#include <grub/command.h>

> +#include <grub/dl.h>

> +#include <grub/lib/cmdline.h>

> +

> +GRUB_MOD_LICENSE ("GPLv3+");

> +

> +static grub_err_t

> +grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)),

> +		 int argc __attribute__ ((unused)),

> +		 char *argv[] __attribute__ ((unused)))

> +{

> +  grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, N_("Linux not supported

> yet"));

> +

> +  return grub_errno;

> +}

> +

> +static grub_err_t

> +grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)),

> +		int argc __attribute__ ((unused)),

> +		char *argv[] __attribute__ ((unused)))

> +{

> +  grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, N_("Linux not supported

> yet"));

> +

> +  return grub_errno;

> +}

> +

> +static grub_command_t cmd_linux, cmd_initrd;

> +

> +GRUB_MOD_INIT (linux)

> +{

> +  cmd_linux = grub_register_command ("linux", grub_cmd_linux, 0,

> +				     N_("Load Linux."));

> +  cmd_initrd = grub_register_command ("initrd", grub_cmd_initrd, 0,

> +				      N_("Load initrd."));

> +}

> +

> +GRUB_MOD_FINI (linux)

> +{

> +  grub_unregister_command (cmd_linux);

> +  grub_unregister_command (cmd_initrd);

> +}

> diff --git a/include/grub/riscv32/linux.h

> b/include/grub/riscv32/linux.h

> new file mode 100644

> index 000000000..b8ed39407

> --- /dev/null

> +++ b/include/grub/riscv32/linux.h

> @@ -0,0 +1,41 @@

> +/*

> + *  GRUB  --  GRand Unified Bootloader

> + *  Copyright (C) 2018  Free Software Foundation, Inc.

> + *

> + *  GRUB is free software: you can redistribute it and/or modify

> + *  it under the terms of the GNU General Public License as

> published by

> + *  the Free Software Foundation, either version 3 of the License,

> or

> + *  (at your option) any later version.

> + *

> + *  GRUB is distributed in the hope that it will be useful,

> + *  but WITHOUT ANY WARRANTY; without even the implied warranty of

> + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

> + *  GNU General Public License for more details.

> + *

> + *  You should have received a copy of the GNU General Public

> License

> + *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>;.

> + */

> +

> +#ifndef GRUB_RISCV32_LINUX_HEADER

> +#define GRUB_RISCV32_LINUX_HEADER 1

> +

> +#define GRUB_LINUX_RISCV_MAGIC_SIGNATURE 0x52534356 /* 'RSCV' */

> +

> +/* From linux/Documentation/riscv/booting.txt */

> +struct linux_riscv_kernel_header

> +{

> +  grub_uint32_t code0;		/* Executable code */

> +  grub_uint32_t code1;		/* Executable code */

> +  grub_uint64_t text_offset;	/* Image load offset */

> +  grub_uint64_t res0;		/* reserved */

> +  grub_uint64_t res1;		/* reserved */

> +  grub_uint64_t res2;		/* reserved */

> +  grub_uint64_t res3;		/* reserved */

> +  grub_uint64_t res4;		/* reserved */

> +  grub_uint32_t magic;		/* Magic number, little endian,

> "RSCV" */

> +  grub_uint32_t hdr_offset;	/* Offset of PE/COFF header */

> +};

> +

> +# define linux_arch_kernel_header linux_riscv_kernel_header

> +

> +#endif /* ! GRUB_RISCV32_LINUX_HEADER */

> diff --git a/include/grub/riscv64/linux.h

> b/include/grub/riscv64/linux.h

> new file mode 100644

> index 000000000..29140e45e

> --- /dev/null

> +++ b/include/grub/riscv64/linux.h

> @@ -0,0 +1,43 @@

> +/*

> + *  GRUB  --  GRand Unified Bootloader

> + *  Copyright (C) 2018  Free Software Foundation, Inc.

> + *

> + *  GRUB is free software: you can redistribute it and/or modify

> + *  it under the terms of the GNU General Public License as

> published by

> + *  the Free Software Foundation, either version 3 of the License,

> or

> + *  (at your option) any later version.

> + *

> + *  GRUB is distributed in the hope that it will be useful,

> + *  but WITHOUT ANY WARRANTY; without even the implied warranty of

> + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

> + *  GNU General Public License for more details.

> + *

> + *  You should have received a copy of the GNU General Public

> License

> + *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>;.

> + */

> +

> +#ifndef GRUB_RISCV64_LINUX_HEADER

> +#define GRUB_RISCV64_LINUX_HEADER 1

> +

> +#define GRUB_LINUX_RISCV_MAGIC_SIGNATURE 0x52534356 /* 'RSCV' */

> +

> +#define GRUB_EFI_PE_MAGIC	0x5A4D

> +

> +/* From linux/Documentation/riscv/booting.txt */

> +struct linux_riscv_kernel_header

> +{

> +  grub_uint32_t code0;		/* Executable code */

> +  grub_uint32_t code1;		/* Executable code */

> +  grub_uint64_t text_offset;	/* Image load offset */

> +  grub_uint64_t res0;		/* reserved */

> +  grub_uint64_t res1;		/* reserved */

> +  grub_uint64_t res2;		/* reserved */

> +  grub_uint64_t res3;		/* reserved */

> +  grub_uint64_t res4;		/* reserved */

> +  grub_uint32_t magic;		/* Magic number, little endian,

> "RSCV" */

> +  grub_uint32_t hdr_offset;	/* Offset of PE/COFF header */

> +};

> +

> +# define linux_arch_kernel_header linux_riscv_kernel_header

> +

> +#endif /* ! GRUB_RISCV64_LINUX_HEADER */

_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel
Daniel Kiper Feb. 18, 2019, 7:28 p.m. UTC | #2
On Tue, Feb 12, 2019 at 11:31:03AM +0100, Alexander Graf wrote:
> We currently only support to run grub on RISC-V as UEFI payload. Ideally,

> we also only want to support running Linux underneath as UEFI payload.

>

> Prepare that with some Linux boot stub code. Once the arm64 target is

> generalized, we can hook into that one and gain boot functionality.

>

> Signed-off-by: Alexander Graf <agraf@suse.de>


Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>


But two nitpicks below...

[...]

> diff --git a/include/grub/riscv32/linux.h b/include/grub/riscv32/linux.h

> new file mode 100644

> index 000000000..b8ed39407

> --- /dev/null

> +++ b/include/grub/riscv32/linux.h

> @@ -0,0 +1,41 @@

> +/*

> + *  GRUB  --  GRand Unified Bootloader

> + *  Copyright (C) 2018  Free Software Foundation, Inc.

> + *

> + *  GRUB is free software: you can redistribute it and/or modify

> + *  it under the terms of the GNU General Public License as published by

> + *  the Free Software Foundation, either version 3 of the License, or

> + *  (at your option) any later version.

> + *

> + *  GRUB is distributed in the hope that it will be useful,

> + *  but WITHOUT ANY WARRANTY; without even the implied warranty of

> + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

> + *  GNU General Public License for more details.

> + *

> + *  You should have received a copy of the GNU General Public License

> + *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.

> + */

> +

> +#ifndef GRUB_RISCV32_LINUX_HEADER

> +#define GRUB_RISCV32_LINUX_HEADER 1

> +

> +#define GRUB_LINUX_RISCV_MAGIC_SIGNATURE 0x52534356 /* 'RSCV' */

> +

> +/* From linux/Documentation/riscv/booting.txt */

> +struct linux_riscv_kernel_header

> +{

> +  grub_uint32_t code0;		/* Executable code */

> +  grub_uint32_t code1;		/* Executable code */

> +  grub_uint64_t text_offset;	/* Image load offset */

> +  grub_uint64_t res0;		/* reserved */

> +  grub_uint64_t res1;		/* reserved */

> +  grub_uint64_t res2;		/* reserved */

> +  grub_uint64_t res3;		/* reserved */

> +  grub_uint64_t res4;		/* reserved */

> +  grub_uint32_t magic;		/* Magic number, little endian, "RSCV" */

> +  grub_uint32_t hdr_offset;	/* Offset of PE/COFF header */

> +};

> +

> +# define linux_arch_kernel_header linux_riscv_kernel_header


I do not think that we need a space between "#" and "define".

> +#endif /* ! GRUB_RISCV32_LINUX_HEADER */

> diff --git a/include/grub/riscv64/linux.h b/include/grub/riscv64/linux.h

> new file mode 100644

> index 000000000..29140e45e

> --- /dev/null

> +++ b/include/grub/riscv64/linux.h

> @@ -0,0 +1,43 @@

> +/*

> + *  GRUB  --  GRand Unified Bootloader

> + *  Copyright (C) 2018  Free Software Foundation, Inc.

> + *

> + *  GRUB is free software: you can redistribute it and/or modify

> + *  it under the terms of the GNU General Public License as published by

> + *  the Free Software Foundation, either version 3 of the License, or

> + *  (at your option) any later version.

> + *

> + *  GRUB is distributed in the hope that it will be useful,

> + *  but WITHOUT ANY WARRANTY; without even the implied warranty of

> + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

> + *  GNU General Public License for more details.

> + *

> + *  You should have received a copy of the GNU General Public License

> + *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.

> + */

> +

> +#ifndef GRUB_RISCV64_LINUX_HEADER

> +#define GRUB_RISCV64_LINUX_HEADER 1

> +

> +#define GRUB_LINUX_RISCV_MAGIC_SIGNATURE 0x52534356 /* 'RSCV' */

> +

> +#define GRUB_EFI_PE_MAGIC	0x5A4D

> +

> +/* From linux/Documentation/riscv/booting.txt */

> +struct linux_riscv_kernel_header

> +{

> +  grub_uint32_t code0;		/* Executable code */

> +  grub_uint32_t code1;		/* Executable code */

> +  grub_uint64_t text_offset;	/* Image load offset */

> +  grub_uint64_t res0;		/* reserved */

> +  grub_uint64_t res1;		/* reserved */

> +  grub_uint64_t res2;		/* reserved */

> +  grub_uint64_t res3;		/* reserved */

> +  grub_uint64_t res4;		/* reserved */

> +  grub_uint32_t magic;		/* Magic number, little endian, "RSCV" */

> +  grub_uint32_t hdr_offset;	/* Offset of PE/COFF header */

> +};

> +

> +# define linux_arch_kernel_header linux_riscv_kernel_header


Ditto. I can fix it before committing this patch. Are you OK with that?

Daniel

_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel
Alexander Graf Feb. 19, 2019, 1:25 p.m. UTC | #3
On 02/18/2019 08:28 PM, Daniel Kiper wrote:
> On Tue, Feb 12, 2019 at 11:31:03AM +0100, Alexander Graf wrote:

>> We currently only support to run grub on RISC-V as UEFI payload. Ideally,

>> we also only want to support running Linux underneath as UEFI payload.

>>

>> Prepare that with some Linux boot stub code. Once the arm64 target is

>> generalized, we can hook into that one and gain boot functionality.

>>

>> Signed-off-by: Alexander Graf <agraf@suse.de>

> Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>

>

> But two nitpicks below...

>

> [...]

>

>> diff --git a/include/grub/riscv32/linux.h b/include/grub/riscv32/linux.h

>> new file mode 100644

>> index 000000000..b8ed39407

>> --- /dev/null

>> +++ b/include/grub/riscv32/linux.h

>> @@ -0,0 +1,41 @@

>> +/*

>> + *  GRUB  --  GRand Unified Bootloader

>> + *  Copyright (C) 2018  Free Software Foundation, Inc.

>> + *

>> + *  GRUB is free software: you can redistribute it and/or modify

>> + *  it under the terms of the GNU General Public License as published by

>> + *  the Free Software Foundation, either version 3 of the License, or

>> + *  (at your option) any later version.

>> + *

>> + *  GRUB is distributed in the hope that it will be useful,

>> + *  but WITHOUT ANY WARRANTY; without even the implied warranty of

>> + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

>> + *  GNU General Public License for more details.

>> + *

>> + *  You should have received a copy of the GNU General Public License

>> + *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.

>> + */

>> +

>> +#ifndef GRUB_RISCV32_LINUX_HEADER

>> +#define GRUB_RISCV32_LINUX_HEADER 1

>> +

>> +#define GRUB_LINUX_RISCV_MAGIC_SIGNATURE 0x52534356 /* 'RSCV' */

>> +

>> +/* From linux/Documentation/riscv/booting.txt */

>> +struct linux_riscv_kernel_header

>> +{

>> +  grub_uint32_t code0;		/* Executable code */

>> +  grub_uint32_t code1;		/* Executable code */

>> +  grub_uint64_t text_offset;	/* Image load offset */

>> +  grub_uint64_t res0;		/* reserved */

>> +  grub_uint64_t res1;		/* reserved */

>> +  grub_uint64_t res2;		/* reserved */

>> +  grub_uint64_t res3;		/* reserved */

>> +  grub_uint64_t res4;		/* reserved */

>> +  grub_uint32_t magic;		/* Magic number, little endian, "RSCV" */

>> +  grub_uint32_t hdr_offset;	/* Offset of PE/COFF header */

>> +};

>> +

>> +# define linux_arch_kernel_header linux_riscv_kernel_header

> I do not think that we need a space between "#" and "define".

>

>> +#endif /* ! GRUB_RISCV32_LINUX_HEADER */

>> diff --git a/include/grub/riscv64/linux.h b/include/grub/riscv64/linux.h

>> new file mode 100644

>> index 000000000..29140e45e

>> --- /dev/null

>> +++ b/include/grub/riscv64/linux.h

>> @@ -0,0 +1,43 @@

>> +/*

>> + *  GRUB  --  GRand Unified Bootloader

>> + *  Copyright (C) 2018  Free Software Foundation, Inc.

>> + *

>> + *  GRUB is free software: you can redistribute it and/or modify

>> + *  it under the terms of the GNU General Public License as published by

>> + *  the Free Software Foundation, either version 3 of the License, or

>> + *  (at your option) any later version.

>> + *

>> + *  GRUB is distributed in the hope that it will be useful,

>> + *  but WITHOUT ANY WARRANTY; without even the implied warranty of

>> + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

>> + *  GNU General Public License for more details.

>> + *

>> + *  You should have received a copy of the GNU General Public License

>> + *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.

>> + */

>> +

>> +#ifndef GRUB_RISCV64_LINUX_HEADER

>> +#define GRUB_RISCV64_LINUX_HEADER 1

>> +

>> +#define GRUB_LINUX_RISCV_MAGIC_SIGNATURE 0x52534356 /* 'RSCV' */

>> +

>> +#define GRUB_EFI_PE_MAGIC	0x5A4D

>> +

>> +/* From linux/Documentation/riscv/booting.txt */

>> +struct linux_riscv_kernel_header

>> +{

>> +  grub_uint32_t code0;		/* Executable code */

>> +  grub_uint32_t code1;		/* Executable code */

>> +  grub_uint64_t text_offset;	/* Image load offset */

>> +  grub_uint64_t res0;		/* reserved */

>> +  grub_uint64_t res1;		/* reserved */

>> +  grub_uint64_t res2;		/* reserved */

>> +  grub_uint64_t res3;		/* reserved */

>> +  grub_uint64_t res4;		/* reserved */

>> +  grub_uint32_t magic;		/* Magic number, little endian, "RSCV" */

>> +  grub_uint32_t hdr_offset;	/* Offset of PE/COFF header */

>> +};

>> +

>> +# define linux_arch_kernel_header linux_riscv_kernel_header

> Ditto. I can fix it before committing this patch. Are you OK with that?


Both again are 1:1 copies of the arm headers. If you think that this is 
bad coding style, please write a checkpatch script or add a travis check 
job for coding style problems. It will save everyone lots of work ;).


Alex


_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel
Daniel Kiper Feb. 20, 2019, 8:32 p.m. UTC | #4
On Tue, Feb 19, 2019 at 02:25:11PM +0100, Alexander Graf wrote:
> On 02/18/2019 08:28 PM, Daniel Kiper wrote:

> > On Tue, Feb 12, 2019 at 11:31:03AM +0100, Alexander Graf wrote:

> > > We currently only support to run grub on RISC-V as UEFI payload. Ideally,

> > > we also only want to support running Linux underneath as UEFI payload.

> > >

> > > Prepare that with some Linux boot stub code. Once the arm64 target is

> > > generalized, we can hook into that one and gain boot functionality.

> > >

> > > Signed-off-by: Alexander Graf <agraf@suse.de>

> > Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>

> >

> > But two nitpicks below...

> >

> > [...]

> >

> > > diff --git a/include/grub/riscv32/linux.h b/include/grub/riscv32/linux.h

> > > new file mode 100644

> > > index 000000000..b8ed39407

> > > --- /dev/null

> > > +++ b/include/grub/riscv32/linux.h

> > > @@ -0,0 +1,41 @@

> > > +/*

> > > + *  GRUB  --  GRand Unified Bootloader

> > > + *  Copyright (C) 2018  Free Software Foundation, Inc.

> > > + *

> > > + *  GRUB is free software: you can redistribute it and/or modify

> > > + *  it under the terms of the GNU General Public License as published by

> > > + *  the Free Software Foundation, either version 3 of the License, or

> > > + *  (at your option) any later version.

> > > + *

> > > + *  GRUB is distributed in the hope that it will be useful,

> > > + *  but WITHOUT ANY WARRANTY; without even the implied warranty of

> > > + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

> > > + *  GNU General Public License for more details.

> > > + *

> > > + *  You should have received a copy of the GNU General Public License

> > > + *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.

> > > + */

> > > +

> > > +#ifndef GRUB_RISCV32_LINUX_HEADER

> > > +#define GRUB_RISCV32_LINUX_HEADER 1

> > > +

> > > +#define GRUB_LINUX_RISCV_MAGIC_SIGNATURE 0x52534356 /* 'RSCV' */

> > > +

> > > +/* From linux/Documentation/riscv/booting.txt */

> > > +struct linux_riscv_kernel_header

> > > +{

> > > +  grub_uint32_t code0;		/* Executable code */

> > > +  grub_uint32_t code1;		/* Executable code */

> > > +  grub_uint64_t text_offset;	/* Image load offset */

> > > +  grub_uint64_t res0;		/* reserved */

> > > +  grub_uint64_t res1;		/* reserved */

> > > +  grub_uint64_t res2;		/* reserved */

> > > +  grub_uint64_t res3;		/* reserved */

> > > +  grub_uint64_t res4;		/* reserved */

> > > +  grub_uint32_t magic;		/* Magic number, little endian, "RSCV" */

> > > +  grub_uint32_t hdr_offset;	/* Offset of PE/COFF header */

> > > +};

> > > +

> > > +# define linux_arch_kernel_header linux_riscv_kernel_header

> > I do not think that we need a space between "#" and "define".

> >

> > > +#endif /* ! GRUB_RISCV32_LINUX_HEADER */

> > > diff --git a/include/grub/riscv64/linux.h b/include/grub/riscv64/linux.h

> > > new file mode 100644

> > > index 000000000..29140e45e

> > > --- /dev/null

> > > +++ b/include/grub/riscv64/linux.h

> > > @@ -0,0 +1,43 @@

> > > +/*

> > > + *  GRUB  --  GRand Unified Bootloader

> > > + *  Copyright (C) 2018  Free Software Foundation, Inc.

> > > + *

> > > + *  GRUB is free software: you can redistribute it and/or modify

> > > + *  it under the terms of the GNU General Public License as published by

> > > + *  the Free Software Foundation, either version 3 of the License, or

> > > + *  (at your option) any later version.

> > > + *

> > > + *  GRUB is distributed in the hope that it will be useful,

> > > + *  but WITHOUT ANY WARRANTY; without even the implied warranty of

> > > + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

> > > + *  GNU General Public License for more details.

> > > + *

> > > + *  You should have received a copy of the GNU General Public License

> > > + *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.

> > > + */

> > > +

> > > +#ifndef GRUB_RISCV64_LINUX_HEADER

> > > +#define GRUB_RISCV64_LINUX_HEADER 1

> > > +

> > > +#define GRUB_LINUX_RISCV_MAGIC_SIGNATURE 0x52534356 /* 'RSCV' */

> > > +

> > > +#define GRUB_EFI_PE_MAGIC	0x5A4D

> > > +

> > > +/* From linux/Documentation/riscv/booting.txt */

> > > +struct linux_riscv_kernel_header

> > > +{

> > > +  grub_uint32_t code0;		/* Executable code */

> > > +  grub_uint32_t code1;		/* Executable code */

> > > +  grub_uint64_t text_offset;	/* Image load offset */

> > > +  grub_uint64_t res0;		/* reserved */

> > > +  grub_uint64_t res1;		/* reserved */

> > > +  grub_uint64_t res2;		/* reserved */

> > > +  grub_uint64_t res3;		/* reserved */

> > > +  grub_uint64_t res4;		/* reserved */

> > > +  grub_uint32_t magic;		/* Magic number, little endian, "RSCV" */

> > > +  grub_uint32_t hdr_offset;	/* Offset of PE/COFF header */

> > > +};

> > > +

> > > +# define linux_arch_kernel_header linux_riscv_kernel_header

> > Ditto. I can fix it before committing this patch. Are you OK with that?

>

> Both again are 1:1 copies of the arm headers. If you think that this is bad

> coding style, please write a checkpatch script or add a travis check job for

> coding style problems. It will save everyone lots of work ;).


For sure but sadly I do not have a time to do that. If somebody here is
willing to do that then I can give some hints and review the patches.
However, I will do a favor for you. I will fix it before pushing the patches.

Daniel

_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel
diff mbox series

Patch

diff --git a/grub-core/loader/riscv/linux.c b/grub-core/loader/riscv/linux.c
new file mode 100644
index 000000000..d17c488e1
--- /dev/null
+++ b/grub-core/loader/riscv/linux.c
@@ -0,0 +1,59 @@ 
+/*
+ *  GRUB  --  GRand Unified Bootloader
+ *  Copyright (C) 2018  Free Software Foundation, Inc.
+ *
+ *  GRUB is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  GRUB is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <grub/command.h>
+#include <grub/dl.h>
+#include <grub/lib/cmdline.h>
+
+GRUB_MOD_LICENSE ("GPLv3+");
+
+static grub_err_t
+grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)),
+		 int argc __attribute__ ((unused)),
+		 char *argv[] __attribute__ ((unused)))
+{
+  grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, N_("Linux not supported yet"));
+
+  return grub_errno;
+}
+
+static grub_err_t
+grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)),
+		int argc __attribute__ ((unused)),
+		char *argv[] __attribute__ ((unused)))
+{
+  grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, N_("Linux not supported yet"));
+
+  return grub_errno;
+}
+
+static grub_command_t cmd_linux, cmd_initrd;
+
+GRUB_MOD_INIT (linux)
+{
+  cmd_linux = grub_register_command ("linux", grub_cmd_linux, 0,
+				     N_("Load Linux."));
+  cmd_initrd = grub_register_command ("initrd", grub_cmd_initrd, 0,
+				      N_("Load initrd."));
+}
+
+GRUB_MOD_FINI (linux)
+{
+  grub_unregister_command (cmd_linux);
+  grub_unregister_command (cmd_initrd);
+}
diff --git a/include/grub/riscv32/linux.h b/include/grub/riscv32/linux.h
new file mode 100644
index 000000000..b8ed39407
--- /dev/null
+++ b/include/grub/riscv32/linux.h
@@ -0,0 +1,41 @@ 
+/*
+ *  GRUB  --  GRand Unified Bootloader
+ *  Copyright (C) 2018  Free Software Foundation, Inc.
+ *
+ *  GRUB is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  GRUB is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef GRUB_RISCV32_LINUX_HEADER
+#define GRUB_RISCV32_LINUX_HEADER 1
+
+#define GRUB_LINUX_RISCV_MAGIC_SIGNATURE 0x52534356 /* 'RSCV' */
+
+/* From linux/Documentation/riscv/booting.txt */
+struct linux_riscv_kernel_header
+{
+  grub_uint32_t code0;		/* Executable code */
+  grub_uint32_t code1;		/* Executable code */
+  grub_uint64_t text_offset;	/* Image load offset */
+  grub_uint64_t res0;		/* reserved */
+  grub_uint64_t res1;		/* reserved */
+  grub_uint64_t res2;		/* reserved */
+  grub_uint64_t res3;		/* reserved */
+  grub_uint64_t res4;		/* reserved */
+  grub_uint32_t magic;		/* Magic number, little endian, "RSCV" */
+  grub_uint32_t hdr_offset;	/* Offset of PE/COFF header */
+};
+
+# define linux_arch_kernel_header linux_riscv_kernel_header
+
+#endif /* ! GRUB_RISCV32_LINUX_HEADER */
diff --git a/include/grub/riscv64/linux.h b/include/grub/riscv64/linux.h
new file mode 100644
index 000000000..29140e45e
--- /dev/null
+++ b/include/grub/riscv64/linux.h
@@ -0,0 +1,43 @@ 
+/*
+ *  GRUB  --  GRand Unified Bootloader
+ *  Copyright (C) 2018  Free Software Foundation, Inc.
+ *
+ *  GRUB is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  GRUB is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef GRUB_RISCV64_LINUX_HEADER
+#define GRUB_RISCV64_LINUX_HEADER 1
+
+#define GRUB_LINUX_RISCV_MAGIC_SIGNATURE 0x52534356 /* 'RSCV' */
+
+#define GRUB_EFI_PE_MAGIC	0x5A4D
+
+/* From linux/Documentation/riscv/booting.txt */
+struct linux_riscv_kernel_header
+{
+  grub_uint32_t code0;		/* Executable code */
+  grub_uint32_t code1;		/* Executable code */
+  grub_uint64_t text_offset;	/* Image load offset */
+  grub_uint64_t res0;		/* reserved */
+  grub_uint64_t res1;		/* reserved */
+  grub_uint64_t res2;		/* reserved */
+  grub_uint64_t res3;		/* reserved */
+  grub_uint64_t res4;		/* reserved */
+  grub_uint32_t magic;		/* Magic number, little endian, "RSCV" */
+  grub_uint32_t hdr_offset;	/* Offset of PE/COFF header */
+};
+
+# define linux_arch_kernel_header linux_riscv_kernel_header
+
+#endif /* ! GRUB_RISCV64_LINUX_HEADER */