[bootlin/training-materials updates] master: Kernel slides: I/O memory slides updates (99c8d636)

Michael Opdenacker michael.opdenacker at bootlin.com
Fri Apr 23 12:15:26 CEST 2021


Repository : https://github.com/bootlin/training-materials
On branch  : master
Link       : https://github.com/bootlin/training-materials/commit/99c8d6365433a38134dd61f3d87a9018ec7af57a

>---------------------------------------------------------------

commit 99c8d6365433a38134dd61f3d87a9018ec7af57a
Author: Michael Opdenacker <michael.opdenacker at bootlin.com>
Date:   Fri Apr 23 12:15:26 2021 +0200

    Kernel slides: I/O memory slides updates
    
    - Update /proc/iomem example
    - Elaborate on devm_platform_ioremap_resource()
    
    Signed-off-by: Michael Opdenacker <michael.opdenacker at bootlin.com>


>---------------------------------------------------------------

99c8d6365433a38134dd61f3d87a9018ec7af57a
 .../kernel-driver-development-io-memory.tex        | 82 ++++++++++++++--------
 1 file changed, 53 insertions(+), 29 deletions(-)

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 231f3e89..b3304bc1 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
@@ -127,29 +127,48 @@ void release_mem_region(
 \end{frame}
 
 \begin{frame}[fragile]
-  \frametitle{/proc/iomem example - ARM (Raspberry Pi, Linux 4.19)}
-{\footnotesize
-\begin{verbatim}
-00000000-3b3fffff : System RAM
-  00008000-00bfffff : Kernel code
-  00d00000-00e6ad0f : Kernel data
-3f006000-3f006fff : dwc_otg
-3f007000-3f007eff : dma at 7e007000
-3f00a000-3f00a023 : watchdog at 7e100000
-3f00b840-3f00b87b : mailbox at 7e00b840
-3f00b880-3f00b8bf : mailbox at 7e00b880
-3f100000-3f100113 : watchdog at 7e100000
-3f101000-3f102fff : cprman at 7e101000
-3f104000-3f10400f : rng at 7e104000
-3f200000-3f2000b3 : gpio at 7e200000
-3f201000-3f2011ff : serial at 7e201000
-  3f201000-3f2011ff : serial at 7e201000
-3f202000-3f2020ff : mmc at 7e202000
-3f212000-3f212007 : thermal at 7e212000
-3f215000-3f215007 : aux at 7e215000
-3f980000-3f98ffff : dwc_otg
+  \frametitle{/proc/iomem example - ARM 32 bit (BeagleBone Black, Linux 5.11)}
+  \tiny
+  \begin{columns}
+  \column{0.5\textwidth}
+  \begin{verbatim}
+40300000-4030ffff : 40300000.sram sram at 0
+44e00c00-44e00cff : 44e00c00.prm prm at c00
+44e00d00-44e00dff : 44e00d00.prm prm at d00
+44e00e00-44e00eff : 44e00e00.prm prm at e00
+44e00f00-44e00fff : 44e00f00.prm prm at f00
+44e01000-44e010ff : 44e01000.prm prm at 1000
+44e01100-44e011ff : 44e01100.prm prm at 1100
+44e01200-44e012ff : 44e01200.prm prm at 1200
+44e07000-44e07fff : 44e07000.gpio gpio at 0
+44e09000-44e0901f : serial
+44e0b000-44e0bfff : 44e0b000.i2c i2c at 0
+44e10800-44e10a37 : pinctrl-single
+44e10f90-44e10fcf : 44e10f90.dma-router dma-router at f90
+48024000-48024fff : 48024000.serial serial at 0
+48042000-480423ff : 48042000.timer timer at 0
+48044000-480443ff : 48044000.timer timer at 0
 \end{verbatim}
-}
+  \column{0.5\textwidth}
+  \begin{verbatim}
+48046000-480463ff : 48046000.timer timer at 0
+48048000-480483ff : 48048000.timer timer at 0
+4804a000-4804a3ff : 4804a000.timer timer at 0
+4804c000-4804cfff : 4804c000.gpio gpio at 0
+48060000-48060fff : 48060000.mmc mmc at 0
+4819c000-4819cfff : 4819c000.i2c i2c at 0
+481a8000-481a8fff : 481a8000.serial serial at 0
+481ac000-481acfff : 481ac000.gpio gpio at 0
+481ae000-481aefff : 481ae000.gpio gpio at 0
+481d8000-481d8fff : 481d8000.mmc mmc at 0
+49000000-4900ffff : 49000000.dma edma3_cc
+4a100000-4a1007ff : 4a100000.ethernet ethernet at 0
+4a101200-4a1012ff : 4a100000.ethernet ethernet at 0
+80000000-9fdfffff : System RAM
+  80008000-80cfffff : Kernel code
+  80e00000-80f3d807 : Kernel data
+\end{verbatim}
+  \end{columns}
 \end{frame}
 
 \begin{frame}[fragile]
@@ -185,21 +204,26 @@ void iounmap(void __iomem *addr);
   drivers is now deprecated. You should use the below "managed"
   functions instead, which simplify driver coding and error handling:
   \begin{itemize}
-  \item \kfunc{devm_ioremap}
-  \item \kfunc{devm_iounmap}
+  \item \kfunc{devm_ioremap}, \kfunc{devm_iounmap}
   \item \kfunc{devm_ioremap_resource}
         \begin{itemize}
 	\item Takes care of both the request and remapping operations!
-	\item Example (\kfile{drivers/crypto/atmel-sha.c}):
+	\end{itemize}
+  \item \kfunc{devm_platform_ioremap_resource}
+        \begin{itemize}
+	\item Takes care of \kfunc{platform_get_resource},
+	      \kfunc{request_mem_region} and \kfunc{ioremap}
+	\item Caution: unlike the other \code{devm_} functions, its
+	      first argument is of type \kstruct{pdev}, not a pointer to \kstruct{device}:
+	\item Example: \kfile{drivers/char/hw_random/st-rng.c}:
 	\begin{block}{}
 	\begin{minted}{c}
-sha_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-...
-sha_dd->io_base = devm_ioremap_resource(&pdev->dev, sha_res);
+base = devm_platform_ioremap_resource(pdev, 0);
+if (IS_ERR(base))
+        return PTR_ERR(base);
 	\end{minted}
 	\end{block}{}
 	\end{itemize}
-  \item \kfunc{devm_platform_ioremap_resource}
   \end{itemize}
 \end{frame}
 




More information about the training-materials-updates mailing list