docs: sh: convert new-machine.txt to ReST

- Add a SPDX header;
- Adjust document title to follow ReST style;
- Mark literal blocks as such;
- Mark a table as such;
- Add it to sh/index.rst.

Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Link: https://lore.kernel.org/r/4437d379ccf201cc3a369232f9159a02754ca530.1592203650.git.mchehab+huawei@kernel.org
Signed-off-by: Jonathan Corbet <corbet@lwn.net>
This commit is contained in:
Mauro Carvalho Chehab 2020-06-15 08:50:21 +02:00 committed by Jonathan Corbet
parent 599448d8ca
commit 7539b41762
2 changed files with 106 additions and 94 deletions

View File

@ -4,6 +4,11 @@ SuperH Interfaces Guide
:Author: Paul Mundt :Author: Paul Mundt
.. toctree::
:maxdepth: 1
new-machine
Memory Management Memory Management
================= =================

View File

@ -1,6 +1,8 @@
.. SPDX-License-Identifier: GPL-2.0
Adding a new board to LinuxSH =============================
================================ Adding a new board to LinuxSH
=============================
Paul Mundt <lethal@linux-sh.org> Paul Mundt <lethal@linux-sh.org>
@ -19,65 +21,67 @@ include/asm-sh/. For the new kernel, things are broken out by board type,
companion chip type, and CPU type. Looking at a tree view of this directory companion chip type, and CPU type. Looking at a tree view of this directory
hierarchy looks like the following: hierarchy looks like the following:
Board-specific code: Board-specific code::
. .
|-- arch |-- arch
| `-- sh | `-- sh
| `-- boards | `-- boards
| |-- adx | |-- adx
| | `-- board-specific files | | `-- board-specific files
| |-- bigsur | |-- bigsur
| | `-- board-specific files | | `-- board-specific files
| | | |
| ... more boards here ... | ... more boards here ...
| |
`-- include `-- include
`-- asm-sh `-- asm-sh
|-- adx |-- adx
| `-- board-specific headers | `-- board-specific headers
|-- bigsur |-- bigsur
| `-- board-specific headers | `-- board-specific headers
| |
.. more boards here ... .. more boards here ...
Next, for companion chips: Next, for companion chips::
.
`-- arch .
`-- sh `-- arch
`-- cchips `-- sh
`-- hd6446x `-- cchips
`-- hd64461 `-- hd6446x
`-- cchip-specific files `-- hd64461
`-- cchip-specific files
... and so on. Headers for the companion chips are treated the same way as ... and so on. Headers for the companion chips are treated the same way as
board-specific headers. Thus, include/asm-sh/hd64461 is home to all of the board-specific headers. Thus, include/asm-sh/hd64461 is home to all of the
hd64461-specific headers. hd64461-specific headers.
Finally, CPU family support is also abstracted: Finally, CPU family support is also abstracted::
.
|-- arch .
| `-- sh |-- arch
| |-- kernel | `-- sh
| | `-- cpu | |-- kernel
| | |-- sh2 | | `-- cpu
| | | `-- SH-2 generic files | | |-- sh2
| | |-- sh3 | | | `-- SH-2 generic files
| | | `-- SH-3 generic files | | |-- sh3
| | `-- sh4 | | | `-- SH-3 generic files
| | `-- SH-4 generic files | | `-- sh4
| `-- mm | | `-- SH-4 generic files
| `-- This is also broken out per CPU family, so each family can | `-- mm
| have their own set of cache/tlb functions. | `-- This is also broken out per CPU family, so each family can
| | have their own set of cache/tlb functions.
`-- include |
`-- asm-sh `-- include
|-- cpu-sh2 `-- asm-sh
| `-- SH-2 specific headers |-- cpu-sh2
|-- cpu-sh3 | `-- SH-2 specific headers
| `-- SH-3 specific headers |-- cpu-sh3
`-- cpu-sh4 | `-- SH-3 specific headers
`-- SH-4 specific headers `-- cpu-sh4
`-- SH-4 specific headers
It should be noted that CPU subtypes are _not_ abstracted. Thus, these still It should be noted that CPU subtypes are _not_ abstracted. Thus, these still
need to be dealt with by the CPU family specific code. need to be dealt with by the CPU family specific code.
@ -110,33 +114,33 @@ arch/sh/boards and the include/asm-sh/ hierarchy. In order to better
explain this, we use some examples for adding an imaginary board. For explain this, we use some examples for adding an imaginary board. For
setup code, we're required at the very least to provide definitions for setup code, we're required at the very least to provide definitions for
get_system_type() and platform_setup(). For our imaginary board, this get_system_type() and platform_setup(). For our imaginary board, this
might look something like: might look something like::
/* /*
* arch/sh/boards/vapor/setup.c - Setup code for imaginary board * arch/sh/boards/vapor/setup.c - Setup code for imaginary board
*/ */
#include <linux/init.h> #include <linux/init.h>
const char *get_system_type(void) const char *get_system_type(void)
{ {
return "FooTech Vaporboard"; return "FooTech Vaporboard";
} }
int __init platform_setup(void) int __init platform_setup(void)
{ {
/* /*
* If our hardware actually existed, we would do real * If our hardware actually existed, we would do real
* setup here. Though it's also sane to leave this empty * setup here. Though it's also sane to leave this empty
* if there's no real init work that has to be done for * if there's no real init work that has to be done for
* this board. * this board.
*/ */
/* Start-up imaginary PCI ... */ /* Start-up imaginary PCI ... */
/* And whatever else ... */ /* And whatever else ... */
return 0; return 0;
} }
Our new imaginary board will also have to tie into the machvec in order for it Our new imaginary board will also have to tie into the machvec in order for it
to be of any use. to be of any use.
@ -172,16 +176,16 @@ sufficient.
vector. vector.
Note that these prototypes are generated automatically by setting Note that these prototypes are generated automatically by setting
__IO_PREFIX to something sensible. A typical example would be: __IO_PREFIX to something sensible. A typical example would be::
#define __IO_PREFIX vapor #define __IO_PREFIX vapor
#include <asm/io_generic.h> #include <asm/io_generic.h>
somewhere in the board-specific header. Any boards being ported that still somewhere in the board-specific header. Any boards being ported that still
have a legacy io.h should remove it entirely and switch to the new model. have a legacy io.h should remove it entirely and switch to the new model.
- Add machine vector definitions to the board's setup.c. At a bare minimum, - Add machine vector definitions to the board's setup.c. At a bare minimum,
this must be defined as something like: this must be defined as something like::
struct sh_machine_vector mv_vapor __initmv = { struct sh_machine_vector mv_vapor __initmv = {
.mv_name = "vapor", .mv_name = "vapor",
@ -202,20 +206,20 @@ Large portions of the build system are now entirely dynamic, and merely
require the proper entry here and there in order to get things done. require the proper entry here and there in order to get things done.
The first thing to do is to add an entry to arch/sh/Kconfig, under the The first thing to do is to add an entry to arch/sh/Kconfig, under the
"System type" menu: "System type" menu::
config SH_VAPOR config SH_VAPOR
bool "Vapor" bool "Vapor"
help help
select Vapor if configuring for a FooTech Vaporboard. select Vapor if configuring for a FooTech Vaporboard.
next, this has to be added into arch/sh/Makefile. All boards require a next, this has to be added into arch/sh/Makefile. All boards require a
machdir-y entry in order to be built. This entry needs to be the name of machdir-y entry in order to be built. This entry needs to be the name of
the board directory as it appears in arch/sh/boards, even if it is in a the board directory as it appears in arch/sh/boards, even if it is in a
sub-directory (in which case, all parent directories below arch/sh/boards/ sub-directory (in which case, all parent directories below arch/sh/boards/
need to be listed). For our new board, this entry can look like: need to be listed). For our new board, this entry can look like::
machdir-$(CONFIG_SH_VAPOR) += vapor machdir-$(CONFIG_SH_VAPOR) += vapor
provided that we've placed everything in the arch/sh/boards/vapor/ directory. provided that we've placed everything in the arch/sh/boards/vapor/ directory.
@ -230,7 +234,7 @@ This is done by adding an entry to the end of the arch/sh/tools/mach-types
list. The method for doing this is self explanatory, and so we won't waste list. The method for doing this is self explanatory, and so we won't waste
space restating it here. After this is done, you will be able to use space restating it here. After this is done, you will be able to use
implicit checks for your board if you need this somewhere throughout the implicit checks for your board if you need this somewhere throughout the
common code, such as: common code, such as::
/* Make sure we're on the FooTech Vaporboard */ /* Make sure we're on the FooTech Vaporboard */
if (!mach_is_vapor()) if (!mach_is_vapor())
@ -253,16 +257,19 @@ build target, and it will be implicitly listed as such in the help text.
Looking at the 'make help' output, you should now see something like: Looking at the 'make help' output, you should now see something like:
Architecture specific targets (sh): Architecture specific targets (sh):
zImage - Compressed kernel image (arch/sh/boot/zImage)
adx_defconfig - Build for adx
cqreek_defconfig - Build for cqreek
dreamcast_defconfig - Build for dreamcast
...
vapor_defconfig - Build for vapor
which then allows you to do: ======================= =============================================
zImage Compressed kernel image (arch/sh/boot/zImage)
adx_defconfig Build for adx
cqreek_defconfig Build for cqreek
dreamcast_defconfig Build for dreamcast
...
vapor_defconfig Build for vapor
======================= =============================================
$ make ARCH=sh CROSS_COMPILE=sh4-linux- vapor_defconfig vmlinux which then allows you to do::
$ make ARCH=sh CROSS_COMPILE=sh4-linux- vapor_defconfig vmlinux
which will in turn copy the defconfig for this board, run it through which will in turn copy the defconfig for this board, run it through
oldconfig (prompting you for any new options since the time of creation), oldconfig (prompting you for any new options since the time of creation),