[bootlin/training-materials updates] master: kernel: iomem: Create a slide about endianness (f4c85364)
Miquel Raynal
miquel.raynal at bootlin.com
Thu Jun 2 10:54:21 CEST 2022
Repository : https://github.com/bootlin/training-materials
On branch : master
Link : https://github.com/bootlin/training-materials/commit/f4c85364b6d6914a1c5023210493b2b596f1192a
>---------------------------------------------------------------
commit f4c85364b6d6914a1c5023210493b2b596f1192a
Author: Miquel Raynal <miquel.raynal at bootlin.com>
Date: Tue May 31 17:10:56 2022 +0200
kernel: iomem: Create a slide about endianness
Drop the details about endianness in the introduction.
Signed-off-by: Miquel Raynal <miquel.raynal at bootlin.com>
>---------------------------------------------------------------
f4c85364b6d6914a1c5023210493b2b596f1192a
.../endianness-conversion.dia | Bin 0 -> 1710 bytes
.../kernel-driver-development-io-memory.tex | 33 ++++++++++++++-------
.../kernel-source-code-drivers.tex | 6 ----
3 files changed, 23 insertions(+), 16 deletions(-)
diff --git a/slides/kernel-driver-development-io-memory/endianness-conversion.dia b/slides/kernel-driver-development-io-memory/endianness-conversion.dia
new file mode 100644
index 00000000..cdc7eb6a
Binary files /dev/null and b/slides/kernel-driver-development-io-memory/endianness-conversion.dia differ
diff --git a/slides/kernel-driver-development-io-memory/kernel-driver-development-io-memory.tex b/slides/kernel-driver-development-io-memory/kernel-driver-development-io-memory.tex
index fbc47061..b393adee 100644
--- a/slides/kernel-driver-development-io-memory/kernel-driver-development-io-memory.tex
+++ b/slides/kernel-driver-development-io-memory/kernel-driver-development-io-memory.tex
@@ -150,16 +150,6 @@ void write[bwlq](unsigned val, void *addr);
unsigned __raw_read[bwlq](void *addr);
void __raw_write[bwlq](unsigned val, void *addr);
\end{minted}
- \item Little-endian is more frequent and also easier
- to use in drivers. Even if you just read the least significant
- byte of a 32-bit register, it's still at the same address.
- \item Example
- \begin{itemize}
- \item 32 bit write (\kfile{drivers/tty/serial/uartlite.c}):
-\begin{minted}{c}
-writel(c & 0xff, port->membase + 4);
-\end{minted}
- \end{itemize}
\end{itemize}
\end{frame}
@@ -186,6 +176,29 @@ writel(c & 0xff, port->membase + 4);
\end{itemize}
\end{frame}
+\begin{frame}[fragile]
+ \frametitle{Byte endianness}
+ \begin{itemize}
+ \item Not all devices are little-endian
+ \item Most networking protocols are big-endian
+ \item Manual handling of the endianness may sometimes be required
+ \end{itemize}
+ \begin{columns}
+ \column{0.4\textwidth}
+ For portability purposes, drivers should handle all possibilities:
+ \begin{itemize}
+ \item \kfunc{cpu_to_be32}
+ \item \kfunc{cpu_to_le32}
+ \item \kfunc{be32_to_cpu}
+ \item \kfunc{le32_to_cpu}
+ \end{itemize}
+ \column{0.6\textwidth}
+ \begin{center}
+ \includegraphics[width=0.8\textwidth]{slides/kernel-driver-development-io-memory/endianness-conversion.pdf}
+ \end{center}
+ \end{columns}
+\end{frame}
+
\begin{frame}
\frametitle{/dev/mem}
\begin{itemize}
diff --git a/slides/kernel-source-code-drivers/kernel-source-code-drivers.tex b/slides/kernel-source-code-drivers/kernel-source-code-drivers.tex
index 65c83286..dd7c2e1a 100644
--- a/slides/kernel-source-code-drivers/kernel-source-code-drivers.tex
+++ b/slides/kernel-source-code-drivers/kernel-source-code-drivers.tex
@@ -51,12 +51,6 @@
abstract the architecture specific details
\begin{itemize}
\item Endianness
- \begin{itemize}
- \item \kfunc{cpu_to_be32}
- \item \kfunc{cpu_to_le32}
- \item \kfunc{be32_to_cpu}
- \item \kfunc{le32_to_cpu}
- \end{itemize}
\item I/O memory access
\item Memory barriers to provide ordering guarantees if needed
\item DMA API to flush and invalidate caches if needed
More information about the training-materials-updates
mailing list