目次: Linux
Linuxのクロックフレームワークで実装できるクロック分周器のドライバは2種類あります。
1つはinteger dividerで、入力されたクロック周波数の1/3や1/4など整数比の周波数で出力するハードウェアです。もう1つはfractional dividerで、周波数をx/yにするハードウェアです。
後者のfractional dividerドライバは、標準動作とカスタム動作のドライバが書けます。標準動作の場合、分子と分母に設定できる値に、何ら制約がないものとして動作します。カスタム動作のドライバは、特殊な制約のあるハードウェア向けです。
今のところカスタム動作のfractional dividerドライバを実装しているのはRockchipだけです。Rockchipの場合、分母が分子の20倍以上でなければ出力周波数が不安定になる制約があるようです。
Rockchipが変な仕様であることは間違いないと思いますが、Linuxに対応しているだけ、まだマシとも取れますね。世の中には「どうしてこうなった??」としか思えない、変な仕様のハードウェアがたくさん存在しますし……。
メモ: 技術系の話はFacebookから転記しておくことにした。
この記事にコメントする
目次: ARM
先日購入したHDMIモニタのおかげで、ROCK64のI2S0つまりHDMI Audioの動作確認ができました。
しかし以前(2018年11月11日の日記参照)悩んでいた通り、単純にI2S0を有効にすることはできません。DMAチャネルが足りない問題が発生するためです。
ROCK64に搭載されているRockchip RK3328のDMACは、16のDMAチャネルを持っていますが、そのうち8chしか同時に使えない仕様になっています。
現在のlinux-nextのROCK64向けデバイスツリーでは、既に7chを使用(I2S1 2ch, SPDIF 1ch, SPI0 2ch, UART2 2ch)していますから、ここに2chを使用するI2S0を追加すると合計9chになって、オーバーしてしまいます。
仕方ないのでUART2のDMA割り当てを解除して、I2S0に割り当てるパッチを投稿しました。
私がパッチに書いた説明が悪かったのだと思いますが、メンテナーのHeikoさんから「どうしてUART2のDMAチャネルをI2S0が使えるのかわからない」という返事がきました。ですよね……私も最初意味不明でしたし。
できる限り説明を加えて返事しましたが、理解してもらえると良いな。
ややこしいことに、RK3328の仕様書を見ると、各DMAチャネルにはIDが(仕様書ではReq number)が振られていて、ぱっと見16チャネルが全て同時に使えそうに見えるんですよ。
この仕様書から「各DMAチャネルは独立しているけど、全てのチャネルが同時に使える訳ではない」という意味を読み取れる人はなかなかいないと思います。
少なくとも私はDMAのReq numberとチャネル数の関係を理解するのは無理だったので、DMACのドライバ(PL330)を追いかけました。
サウンド系からDMAチャネルの割り当てを要求するとき、次のような呼び出し関係になります。
rockchip_pcm_platform_register()
devm_snd_dmaengine_pcm_register()
snd_dmaengine_pcm_register()
dmaengine_pcm_request_chan_of()
dma_request_slave_channel_reason()
of_dma_request_slave_channel()
ofdma->of_dma_xlate() => of_dma_pl330_xlate()
dma_get_slave_channel()
dma_chan_get()
pl330_alloc_chan_resources()
pl330_request_channel()
まず、関数of_dma_pl330_xlate() にはローカル変数chan_idが登場します。これがDMAのIDに相当します。例えばUART2の送信側ならchan_id = 6になります。
元になる数字はどこから来るかというと、of_dma_match_channel() でデバイスツリーから情報を貰っています。RK3328の場合、デバイスツリーでDMAチャネルを指定する際は、Req numberを書くようです。
次に、関数pl330_request_channel() に構造体struct pl330_dmacのメンバーchannelsという配列が登場します。このchannelsの数がDMACのDMAチャネルの数と等しいです。Req numberとは無関係に、DMAチャネルを要求されると先頭から埋まっていきます。
こんな仕様が初見でわかる訳ないじゃない。むり。
メモ: 技術系の話はFacebookから転記しておくことにした。1節加筆。
この記事にコメントする
目次: マンガ紹介
お気に入りのマンガ紹介シリーズ。
最近読んだ、これからも続編が楽しみなマンガ10作品。並びは、あいうえお順です。
1〜5です。
6〜10です。
メモ: 趣味の話はFacebookから転記しておくことにした。
この記事にコメントする
小型のHDMIディスプレイを買いました。ELECROWのLR10FHD01です。Amazonで1万円くらい。
買ったきっかけですけども、ROCK64のHDMI出力を見たかったことと、サーバのVGA出力が壊れたのか、今持っている小型VGAディスプレイが映らなくなってしまったため、代替品が欲しかったからです。
見ての通りスペックはそこそこ良く、価格もお安いです。その分、細かいところはいい加減です。
音量調整がバカでVolume 1でも近所迷惑なデカい音が鳴ります。しかも最大音量は100です。こんなバカでかい音で誰が使うんでしょう?ミュートにできることがせめてもの救いです。
OSDメニューはヘボいです。日本語が選択できますが、漢字は中国語の字体、訳が意味不明、ハングルが混ざるなど、やる気ゼロです。英語に変えた方がマシです。
HDMI入力もバグっていて、HDMI挿抜もしくは電源ON/OFFで画面表示が右にズレて、音が出なくなります。もう一度電源ON/OFFすると直ります……。
本体に型番が書いておらず、箱を捨ててしまうと型番が分からなくなります。
細かいところは手抜き感が漂いますが、映れば全て良しです。
メモ: 技術系の話はFacebookから転記しておくことにした。加筆した。
この記事にコメントする
目次: マンガ紹介
Facebookで教えてもらったマンガ「ハコヅメ」を買ってみました。面白いです。次が楽しみです。
メモ: 趣味の話はFacebookから転記しておくことにした。
この記事にコメントする
| < | 2019 | > | ||||
| << | < | 02 | > | >> | ||
| 日 | 月 | 火 | 水 | 木 | 金 | 土 |
| - | - | - | - | - | 1 | 2 |
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | - | - |
wiki
Linux JM
Java API
2002年
2003年
2004年
2005年
2006年
2007年
2008年
2009年
2010年
2011年
2012年
2013年
2014年
2015年
2016年
2017年
2018年
2019年
2020年
2021年
2022年
2023年
2024年
2025年
過去日記について
アクセス統計
サーバ一覧
サイトの情報合計:
本日: