MIPS: TXx9: stop_unused_modules
TXx9 SoCs have pin multiplex. Stop some controller modules which can not be used due to pin configurations. Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp> Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
committed by
Ralf Baechle
parent
9bed90c6a4
commit
f6d9831bb1
@@ -252,3 +252,34 @@ void __init tx4927_mtd_init(int ch)
|
|||||||
return; /* disabled */
|
return; /* disabled */
|
||||||
txx9_physmap_flash_init(ch, start, size, &pdata);
|
txx9_physmap_flash_init(ch, start, size, &pdata);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void __init tx4927_stop_unused_modules(void)
|
||||||
|
{
|
||||||
|
__u64 pcfg, rst = 0, ckd = 0;
|
||||||
|
char buf[128];
|
||||||
|
|
||||||
|
buf[0] = '\0';
|
||||||
|
local_irq_disable();
|
||||||
|
pcfg = ____raw_readq(&tx4927_ccfgptr->pcfg);
|
||||||
|
if (!(pcfg & TX4927_PCFG_SEL2)) {
|
||||||
|
rst |= TX4927_CLKCTR_ACLRST;
|
||||||
|
ckd |= TX4927_CLKCTR_ACLCKD;
|
||||||
|
strcat(buf, " ACLC");
|
||||||
|
}
|
||||||
|
if (rst | ckd) {
|
||||||
|
txx9_set64(&tx4927_ccfgptr->clkctr, rst);
|
||||||
|
txx9_set64(&tx4927_ccfgptr->clkctr, ckd);
|
||||||
|
}
|
||||||
|
local_irq_enable();
|
||||||
|
if (buf[0])
|
||||||
|
pr_info("%s: stop%s\n", txx9_pcode_str, buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int __init tx4927_late_init(void)
|
||||||
|
{
|
||||||
|
if (txx9_pcode != 0x4927)
|
||||||
|
return -ENODEV;
|
||||||
|
tx4927_stop_unused_modules();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
late_initcall(tx4927_late_init);
|
||||||
|
@@ -334,3 +334,59 @@ void __init tx4938_mtd_init(int ch)
|
|||||||
return; /* disabled */
|
return; /* disabled */
|
||||||
txx9_physmap_flash_init(ch, start, size, &pdata);
|
txx9_physmap_flash_init(ch, start, size, &pdata);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void __init tx4938_stop_unused_modules(void)
|
||||||
|
{
|
||||||
|
__u64 pcfg, rst = 0, ckd = 0;
|
||||||
|
char buf[128];
|
||||||
|
|
||||||
|
buf[0] = '\0';
|
||||||
|
local_irq_disable();
|
||||||
|
pcfg = ____raw_readq(&tx4938_ccfgptr->pcfg);
|
||||||
|
switch (txx9_pcode) {
|
||||||
|
case 0x4937:
|
||||||
|
if (!(pcfg & TX4938_PCFG_SEL2)) {
|
||||||
|
rst |= TX4938_CLKCTR_ACLRST;
|
||||||
|
ckd |= TX4938_CLKCTR_ACLCKD;
|
||||||
|
strcat(buf, " ACLC");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0x4938:
|
||||||
|
if (!(pcfg & TX4938_PCFG_SEL2) ||
|
||||||
|
(pcfg & TX4938_PCFG_ETH0_SEL)) {
|
||||||
|
rst |= TX4938_CLKCTR_ACLRST;
|
||||||
|
ckd |= TX4938_CLKCTR_ACLCKD;
|
||||||
|
strcat(buf, " ACLC");
|
||||||
|
}
|
||||||
|
if ((pcfg &
|
||||||
|
(TX4938_PCFG_ATA_SEL | TX4938_PCFG_ISA_SEL |
|
||||||
|
TX4938_PCFG_NDF_SEL))
|
||||||
|
!= TX4938_PCFG_NDF_SEL) {
|
||||||
|
rst |= TX4938_CLKCTR_NDFRST;
|
||||||
|
ckd |= TX4938_CLKCTR_NDFCKD;
|
||||||
|
strcat(buf, " NDFMC");
|
||||||
|
}
|
||||||
|
if (!(pcfg & TX4938_PCFG_SPI_SEL)) {
|
||||||
|
rst |= TX4938_CLKCTR_SPIRST;
|
||||||
|
ckd |= TX4938_CLKCTR_SPICKD;
|
||||||
|
strcat(buf, " SPI");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (rst | ckd) {
|
||||||
|
txx9_set64(&tx4938_ccfgptr->clkctr, rst);
|
||||||
|
txx9_set64(&tx4938_ccfgptr->clkctr, ckd);
|
||||||
|
}
|
||||||
|
local_irq_enable();
|
||||||
|
if (buf[0])
|
||||||
|
pr_info("%s: stop%s\n", txx9_pcode_str, buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int __init tx4938_late_init(void)
|
||||||
|
{
|
||||||
|
if (txx9_pcode != 0x4937 && txx9_pcode != 0x4938)
|
||||||
|
return -ENODEV;
|
||||||
|
tx4938_stop_unused_modules();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
late_initcall(tx4938_late_init);
|
||||||
|
Reference in New Issue
Block a user