Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (Brite)
  • No Skin
Collapse

Linux Kernel Meet

  1. Home
  2. General Discussion
  3. rtl8723bs 드라이버의 TBTT_PROHIBIT 매직넘버를 패치해도 괜찮을까요?

rtl8723bs 드라이버의 TBTT_PROHIBIT 매직넘버를 패치해도 괜찮을까요?

Scheduled Pinned Locked Moved General Discussion
1 Posts 1 Posters 66 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • C Offline
    C Offline
    const
    wrote last edited by
    #1

    안녕하세요. 리눅스 커널 드라이버를 공부 중인 컴퓨터공학과 학부생입니다.

    최근 drivers/staging/rtl8723bs 드라이버를 분석하던 중 아래 코드에 주목하게 되었습니다.

    rtw_write16(padapter, REG_TBTT_PROHIBIT, 0x6404);

    주변에는 다음 TODO 주석이 존재합니다.

    /* TODO: Remove these magic number */
    rtw_write16(padapter, REG_TBTT_PROHIBIT, 0x6404);

    처음에는 단순한 magic number cleanup 문제라고 생각했지만, 관련 레지스터 정의와 주변 코드를 따라가며 분석해보니 단순 숫자 이상의 의미가 있는 것 같아 질문드립니다.

    제가 확인한 내용
    REG_TBTT_PROHIBIT 레지스터 정의 근처에는 다음과 같은 설명이 존재했습니다.

    // [3:0] : TBTT prohibit setup in unit of 32us
    // [19:8] : TBTT prohibit hold in unit of 32us
    #define REG_TBTT_PROHIBIT 0x0540

    이를 기반으로 0x6404를 해석해보면:

    setup field = 0x04
    hold field = 0x64

    로 보이며, little-endian 기준으로 write16() 결과:

    lower byte가 0x540,
    upper byte가 0x541
    에 대응하는 것으로 이해했습니다

    또한 주변 코드에는:

    rtw_write8(padapter, REG_ATIMWND, 0x0a); /* 10ms */
    rtw_write16(padapter, REG_TSFTR_SYN_OFFSET, 0x7fff);

    등 timing 관련 register 설정이 함께 존재하고 있어, 0x6404 역시 beacon/TBTT timing tuning value 성격으로 보입니다.

    추가로 조사해본 결과, staging driver 뿐 아니라 upstream의 rtl8xxxu 드라이버에서도 동일한 값이 그대로 사용되고 있었습니다.

    rtl8xxxu_write16(priv, REG_TBTT_PROHIBIT, 0x6404);

    현재 고민되는 부분
    현재 제 생각으로는:

    값 자체는 hardware timing tuning 값으로 의미가 있는 것 같고,
    bitfield 기반 symbolic macro로 표현하는 것은 가능하지만,
    upstream에서도 동일 값이 유지되는 점을 보면 실제 cleanup 가치가 큰 변경인지 확신이 들지 않습니다.

    예를 들면 아래와 같은 형태입니다.

    #define TBTT_SETUP_TIME(_v) (((_v) & 0xf) << 0 )
    #define TBTT_HOLD_TIME(_v) (((_v) & 0xff) << 8 )

    /* setup = 0x04, hold = 0x64 */
    TBTT_SETUP_TIME(0x04) | TBTT_HOLD_TIME(0x64)

    다만 현재로서는:

    이런 변경이 실제로 유지보수성과 가독성을 개선하는 패치일지 잘 모르겠습니다

    질문

    이런 경우 maintainer 관점에서는 실제 패치로 보내볼 만한 cleanup으로 보는 편인가요?
    아니면 hardware tuning value 성격이 강한 경우는 그대로 유지하는 것이 더 일반적인가요?
    staging TODO가 남아있더라도, upstream에서 동일 값이 장기간 유지되는 경우는 보통 어떤 의미로 받아들이면 좋을까요?

    분석 방향이나 패치 방향에 대해 조언 주시면 감사하겠습니다.

    1 Reply Last reply
    0
    Reply
    • Reply as topic
    Log in to reply
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes


    • Login

    • Don't have an account? Register

    • Login or register to search.
    Powered by NodeBB Contributors
    • First post
      Last post
    0
    • Categories
    • Recent
    • Tags
    • Popular
    • World
    • Users
    • Groups