rtl8723bs 드라이버의 TBTT_PROHIBIT 매직넘버를 패치해도 괜찮을까요?
-
안녕하세요. 리눅스 커널 드라이버를 공부 중인 컴퓨터공학과 학부생입니다.
최근 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에서 동일 값이 장기간 유지되는 경우는 보통 어떤 의미로 받아들이면 좋을까요?분석 방향이나 패치 방향에 대해 조언 주시면 감사하겠습니다.