ioremap()과 ioremap_nocache()

puresupe의 이미지

안녕하세요. 최근 디바이스 드라이버를 공부하고있습니다.

책에 씌여있길(유영창씨가 쓰신책입니다 :D)

"일반적인 메모리 맵I/O는 ioremap()함수로도 충분하지만 PCI디바이스의 경우에는 ioremap()함수만 사용하면 제어에 문제가 발생한다.
PCI 디바이스는 I/O로 할당되는 주소 공간이 non-prefetchable 영역과 prefetchable영역으로 나뉜다.
prefetchable영역은 ioremap()함수를 이용해 PCI의 물리주소를 커널의 가상 주소로 변환하면 되지만,
non-prefetchable 영역은 반드시 ioremap_nocache()함수를 이용해야 한다."

prefetchable과 non-prefetchable에 대해서 이해가 잘안가서요.
이것에 대해 제가 알아낸 정보는
http://forums.xilinx.com/xlnx/board/message?board.id=PCIe&thread.id=676
에 씌여있는 답변중
In your hardware you have to make sure that prefetchable memories are not changed by the act of reading -- for a example a register that was clear on read is not prefetchable. Also FIFOs are not prefetchable since each time it is read the read pointer changes (and thus the data).
입니다.

구체적으로 이해가 잘안가서 그렇는데
ioremap_xxx()함수가 쓰일때 prefetchable과 non-prefetchable에 대한 경우와 자세한 스펙에대한 조언 부탁드려요~

owlet의 이미지

PCI에서의 prefetchable은 CPU의 캐시와는 무관합니다. 그리고 non-prefetchable영역이라고 해서 반드시 ioremap_nocache()를 써야하는것도 아닙니다.

prefetchable은 PCI버스상에서는 4byte만 읽어가더라도 디바이스 내부적으로는 8byte혹은 그이상 읽는 동작이 수행될수도 있습니다. 인용하신 내용은 이런 사항때문에 읽은만큼 데이터가 빠져나가는 FIFO나 읽으면 상태가 없어지는 레지스터등은 prefetchable로 구현하지 말라는 내용입니다.
그리고 이러한 레지스터의 경우 읽어야할때 CPU쪽에서 캐싱된 데이터를 사용하면 문제가 될수 있기때문에 ioremap_nocache()가 도움이 될 수 있습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.