大破雑記帳

個人用メモな雑記ブログ いろんなことをざっくりと。

RTL838xのサーマルメータと割り込み

RTL838xではSoC内にサーマルメータが内蔵されていて、レジスタを読み取ることで温度を知ることができる。1℃刻みと思われる。
このサーマルメータでは下限値と上限値を設定することができ、設定されたディレイ(恐らくms単位)毎の温度がもし設定された下限値を下回るか上限値を上回る場合は、割り込みを発生させるものと予想された。
RTL83xx/RTL93xxではSoCのレジスタには

  • SoC
  • Switch Core (swcore)

の2つのリージョンが存在しており、前者はGPIOやUART、WDTなどSoCとしてベーシックな機能が集まっている。後者はMACやPHYの他サーマルメータ等、スイッチングハブとして特化した機能が集まっている。

RTL83xxにおいては(RTL93xxはまだよく知らない)最上位の割り込みコントローラはMIPSジェネリックなコントローラとなっており、それのみではピン数が足りないので上記のSoCリージョン内に既にLinux Kernelにドライバが有る(irq-realtek-rtl)割り込みコントローラが存在している。このコントローラ内に存在するビットの1つにswcoreがあり、どうもこれは上記Switch Core (swcore)リージョン側に存在する機能の割り込みをすべてまとめて出してくるビットである模様。

そしてSwitch Core (swcore)側にもその中の割り込みをとりまとめるコントローラが存在しているが、現状そちらのドライバは存在せず、このコントローラ内を構成する1つに過ぎないLink Change(RJ45ポートのリンクアップ/リンクダウン割り込み)のみが出て来、上位のSoCリージョン側のコントローラにあるswcoreビットに出て来るものとして扱っているようである。今のところサーマルメータのドライバは存在しないためにそれの割り込みも出て来るはずは無いので仕方無し。

その為、試しにサーマルメータを有効化して下限値を設定し下限値比較を有効にしたところ、下回った際に割り込みが発生したと思われるが、SoCリージョン側ではLink Changeとして検出してしまい、本来のサーマルメータの割り込みのstateをどうやっても解除できないために連続して大量にLink Change割り込みスレッドが呼ばれたうえで、WDTか何かによってLinux Kernelがリセットされ再起動された。
2022/01/14追記: 大量のログに埋もれて見逃していたが、WDTによってリセットされていた。

...(大量の同じログ)...
[81273.840209] RTL8380 Link change: status: 2000, ports 0
[81273.845971] RTL8380 Link change: status: 2000, ports 0
[81273.851792] RTL8380 Link change: status: 2000, ports 0
[81273.857552] RTL8380 Link change: status: 2000, ports 0
[81273.863373] RTL8380 Link change: statu

U-Boot Version 2.2.1 (Jan 18 2019 - 16:25:47)

Board: RTL838x CPU:500MHz LXB:200MHz MEM:300MHz
DRAM:  128 MB
SPI-F: 1x16 MB
Loading 65536B env. variables from offset 0x80000
Switch Model: BSH-G24MB (Port Count: 24)
Switch Chip: RTL8382M
####VERSION IS NEW ####
###START LED SETTING ###
**************************************************
#### RTL8218B config - MAC ID = 0 ####
Now External 8218B
**************************************************
#### RTL8218B config - MAC ID = 8 ####
Now Internal PHY
**************************************************
#### RTL8218B config - MAC ID = 16 ####
Now External 8218B

####-PHY POWER OFF-####

####-PHY POWER OFF-####
Net:   Net Initialization Skipped
rtl8380#0
Hit any key to stop autoboot:  0

本来Link changeログの ports はポート番号とビットの対応する形で値が現れるが、割り込みを発生させているのはLink changeではなくサーマルメータである為に、該当するポートが無くビットが立たず、0となっている。