|
@@ -31,17 +31,33 @@
|
|
|
#include <asm/arch/sys_proto.h>
|
|
|
#include <asm/imx-common/boot_mode.h>
|
|
|
|
|
|
+struct scu_regs {
|
|
|
+ u32 ctrl;
|
|
|
+ u32 config;
|
|
|
+ u32 status;
|
|
|
+ u32 invalidate;
|
|
|
+ u32 fpga_rev;
|
|
|
+};
|
|
|
+
|
|
|
u32 get_cpu_rev(void)
|
|
|
{
|
|
|
struct anatop_regs *anatop = (struct anatop_regs *)ANATOP_BASE_ADDR;
|
|
|
- int reg = readl(&anatop->digprog);
|
|
|
-
|
|
|
- /* Read mx6 variant: quad, dual or solo */
|
|
|
- int system_rev = (reg >> 4) & 0xFF000;
|
|
|
- /* Read mx6 silicon revision */
|
|
|
- system_rev |= (reg & 0xFF) + 0x10;
|
|
|
-
|
|
|
- return system_rev;
|
|
|
+ u32 reg = readl(&anatop->digprog_sololite);
|
|
|
+ u32 type = ((reg >> 16) & 0xff);
|
|
|
+
|
|
|
+ if (type != MXC_CPU_MX6SL) {
|
|
|
+ reg = readl(&anatop->digprog);
|
|
|
+ type = ((reg >> 16) & 0xff);
|
|
|
+ if (type == MXC_CPU_MX6DL) {
|
|
|
+ struct scu_regs *scu = (struct scu_regs *)SCU_BASE_ADDR;
|
|
|
+ u32 cfg = readl(&scu->config) & 3;
|
|
|
+
|
|
|
+ if (!cfg)
|
|
|
+ type = MXC_CPU_MX6SOLO;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ reg &= 0xff; /* mx6 silicon revision */
|
|
|
+ return (type << 12) | (reg + 0x10);
|
|
|
}
|
|
|
|
|
|
void init_aips(void)
|