forked from len0rd/rockbox
jz4760b/regtools: fix/rename some register fields, add clock analyzer to qeditor
Change-Id: I196414d6e4fc18c00b77903e334b7e6adfb7debc
This commit is contained in:
parent
51cce81cd4
commit
d91d9f6851
3 changed files with 87 additions and 6 deletions
|
@ -1017,14 +1017,14 @@
|
||||||
</instance>
|
</instance>
|
||||||
<register>
|
<register>
|
||||||
<field>
|
<field>
|
||||||
<name>SRC_SEL</name>
|
<name>OUT_SEL</name>
|
||||||
<position>30</position>
|
<position>30</position>
|
||||||
<enum>
|
<enum>
|
||||||
<name>EXCLK</name>
|
<name>LCD_PANEL</name>
|
||||||
<value>0x0</value>
|
<value>0x0</value>
|
||||||
</enum>
|
</enum>
|
||||||
<enum>
|
<enum>
|
||||||
<name>PLL</name>
|
<name>TV_ENC</name>
|
||||||
<value>0x1</value>
|
<value>0x1</value>
|
||||||
</enum>
|
</enum>
|
||||||
</field>
|
</field>
|
||||||
|
@ -1427,7 +1427,7 @@
|
||||||
<node>
|
<node>
|
||||||
<name>COUNTH_BUF</name>
|
<name>COUNTH_BUF</name>
|
||||||
<instance>
|
<instance>
|
||||||
<name>OSTCNTH_BUF</name>
|
<name>COUNTH_BUF</name>
|
||||||
<address>0xfc</address>
|
<address>0xfc</address>
|
||||||
</instance>
|
</instance>
|
||||||
<register/>
|
<register/>
|
||||||
|
@ -2222,7 +2222,7 @@
|
||||||
<name>TRIGGER</name>
|
<name>TRIGGER</name>
|
||||||
<title>Trigger</title>
|
<title>Trigger</title>
|
||||||
<instance>
|
<instance>
|
||||||
<name>TRG</name>
|
<name>TRIGGER</name>
|
||||||
<range>
|
<range>
|
||||||
<first>0</first>
|
<first>0</first>
|
||||||
<count>6</count>
|
<count>6</count>
|
||||||
|
|
|
@ -84,7 +84,10 @@ QWidget *ClockAnalyser::GetWidget()
|
||||||
|
|
||||||
bool ClockAnalyser::SupportSoc(const QString& soc_name)
|
bool ClockAnalyser::SupportSoc(const QString& soc_name)
|
||||||
{
|
{
|
||||||
return (soc_name == "imx233" || soc_name == "rk27xx" || soc_name == "atj213x");
|
return soc_name == "imx233"
|
||||||
|
|| soc_name == "rk27xx"
|
||||||
|
|| soc_name == "atj213x"
|
||||||
|
|| soc_name == "jz4760b";
|
||||||
}
|
}
|
||||||
|
|
||||||
QString ClockAnalyser::GetFreq(unsigned freq)
|
QString ClockAnalyser::GetFreq(unsigned freq)
|
||||||
|
@ -137,10 +140,87 @@ void ClockAnalyser::FillTree()
|
||||||
if(m_soc.get()->name == "imx233") FillTreeIMX233();
|
if(m_soc.get()->name == "imx233") FillTreeIMX233();
|
||||||
else if(m_soc.get()->name == "rk27xx") FillTreeRK27XX();
|
else if(m_soc.get()->name == "rk27xx") FillTreeRK27XX();
|
||||||
else if(m_soc.get()->name == "atj213x") FillTreeATJ213X();
|
else if(m_soc.get()->name == "atj213x") FillTreeATJ213X();
|
||||||
|
else if(m_soc.get()->name == "jz4760b") FillTreeJZ4760B();
|
||||||
m_tree_widget->expandAll();
|
m_tree_widget->expandAll();
|
||||||
m_tree_widget->resizeColumnToContents(0);
|
m_tree_widget->resizeColumnToContents(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ClockAnalyser::FillTreeJZ4760B()
|
||||||
|
{
|
||||||
|
AddClock(0, "RTCLK", 32768);
|
||||||
|
// assume EXCLK is 12MHz, we have no way to knowing for sure but this is the
|
||||||
|
// recommended value anyway
|
||||||
|
QTreeWidgetItem *exclk = AddClock(0, "EXCLK", 12000000);
|
||||||
|
// PLL0
|
||||||
|
soc_word_t pllm, plln, pllod, pllbypass;
|
||||||
|
QTreeWidgetItem *pll0 = 0;
|
||||||
|
if(ReadFieldOld("CPM", "PLLCTRL0", "FEED_DIV", pllm) &&
|
||||||
|
ReadFieldOld("CPM", "PLLCTRL0", "IN_DIV", plln) &&
|
||||||
|
ReadFieldOld("CPM", "PLLCTRL0", "OUT_DIV", pllod) &&
|
||||||
|
ReadFieldOld("CPM", "PLLCTRL0", "BYPASS", pllbypass))
|
||||||
|
{
|
||||||
|
pll0 = AddClock(exclk, "PLL0", FROM_PARENT, pllbypass ? 1 : 2 * pllm,
|
||||||
|
pllbypass ? 1 : plln * (1 << pllod));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
pll0 = AddClock(exclk, "PLL0", INVALID);
|
||||||
|
// PLL1
|
||||||
|
soc_word_t plldiv, src_sel;
|
||||||
|
QTreeWidgetItem *pll1 = 0;
|
||||||
|
if(ReadFieldOld("CPM", "PLLCTRL1", "FEED_DIV", pllm) &&
|
||||||
|
ReadFieldOld("CPM", "PLLCTRL1", "IN_DIV", plln) &&
|
||||||
|
ReadFieldOld("CPM", "PLLCTRL1", "OUT_DIV", pllod) &&
|
||||||
|
ReadFieldOld("CPM", "PLLCTRL1", "SRC_SEL", src_sel) &&
|
||||||
|
ReadFieldOld("CPM", "PLLCTRL1", "PLL0_DIV", plldiv))
|
||||||
|
{
|
||||||
|
pll1 = AddClock(src_sel ? pll0 : exclk, "PLL1", FROM_PARENT, 2 * pllm,
|
||||||
|
plln * (1 << pllod) * (src_sel ? plldiv : 1));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
pll1 = AddClock(exclk, "PLL1", INVALID);
|
||||||
|
// system clocks
|
||||||
|
const int NR_SYSCLK = 6;
|
||||||
|
const char *sysclk[NR_SYSCLK] = { "CCLK", "SCLK", "PCLK", "HCLK", "H2CLK", "MCLK"};
|
||||||
|
for(int i = 0; i < NR_SYSCLK; i++)
|
||||||
|
{
|
||||||
|
soc_word_t div = 0;
|
||||||
|
std::string field = std::string(sysclk[i]) + "_DIV";
|
||||||
|
if(ReadFieldOld("CPM", "SYSCLK", field.c_str(), div))
|
||||||
|
{
|
||||||
|
switch(div)
|
||||||
|
{
|
||||||
|
case 0: div = 1; break;
|
||||||
|
case 1: div = 2; break;
|
||||||
|
case 2: div = 3; break;
|
||||||
|
case 3: div = 4; break;
|
||||||
|
case 4: div = 6; break;
|
||||||
|
case 5: div = 8; break;
|
||||||
|
default: div = 0; break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(div != 0)
|
||||||
|
AddClock(pll0, sysclk[i], FROM_PARENT, 1, div);
|
||||||
|
else
|
||||||
|
AddClock(pll0, sysclk[i], INVALID);
|
||||||
|
}
|
||||||
|
// common to msc, i2s, lcd, uhc, otg, ssi, pcm, gpu, gps
|
||||||
|
soc_word_t pll_div;
|
||||||
|
if(ReadFieldOld("CPM", "SYSCLK", "PLL_DIV", pll_div))
|
||||||
|
pll_div = pll_div ? 1 : 2;
|
||||||
|
else
|
||||||
|
pll_div = 1; // error
|
||||||
|
// lcd
|
||||||
|
soc_word_t pll_sel, div;
|
||||||
|
if(ReadFieldOld("CPM", "LCDCLK", "DIV", div) &&
|
||||||
|
ReadFieldOld("CPM", "LCDCLK", "PLL_SEL", pll_sel))
|
||||||
|
{
|
||||||
|
AddClock(pll_sel ? pll1 : pll0, "LCDCLK",
|
||||||
|
FROM_PARENT, 1, pll_div * (div + 1));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
AddClock(exclk, "LCDCLK", INVALID);
|
||||||
|
}
|
||||||
|
|
||||||
void ClockAnalyser::FillTreeATJ213X()
|
void ClockAnalyser::FillTreeATJ213X()
|
||||||
{
|
{
|
||||||
soc_word_t pllbypass, pllclk, en, coreclks, tmp0, tmp1, tmp2, tmp3;
|
soc_word_t pllbypass, pllclk, en, coreclks, tmp0, tmp1, tmp2, tmp3;
|
||||||
|
|
|
@ -77,6 +77,7 @@ private:
|
||||||
void FillTreeIMX233();
|
void FillTreeIMX233();
|
||||||
void FillTreeRK27XX();
|
void FillTreeRK27XX();
|
||||||
void FillTreeATJ213X();
|
void FillTreeATJ213X();
|
||||||
|
void FillTreeJZ4760B();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QGroupBox *m_group;
|
QGroupBox *m_group;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue