|
@@ -3624,3 +3624,168 @@ static struct omap_hwmod_ocp_if *omap3430_pre_es3_hwmod_ocp_ifs[] __initdata = {
|
|
|
|
|
|
/* 3430ES3+-only hwmod links */
|
|
/* 3430ES3+-only hwmod links */
|
|
static struct omap_hwmod_ocp_if *omap3430_es3plus_hwmod_ocp_ifs[] __initdata = {
|
|
static struct omap_hwmod_ocp_if *omap3430_es3plus_hwmod_ocp_ifs[] __initdata = {
|
|
|
|
+ &omap3xxx_l4_core__es3plus_mmc1,
|
|
|
|
+ &omap3xxx_l4_core__es3plus_mmc2,
|
|
|
|
+ NULL
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+/* 34xx-only hwmod links (all ES revisions) */
|
|
|
|
+static struct omap_hwmod_ocp_if *omap34xx_hwmod_ocp_ifs[] __initdata = {
|
|
|
|
+ &omap3xxx_l3__iva,
|
|
|
|
+ &omap34xx_l4_core__sr1,
|
|
|
|
+ &omap34xx_l4_core__sr2,
|
|
|
|
+ &omap3xxx_l4_core__mailbox,
|
|
|
|
+ &omap3xxx_l4_core__hdq1w,
|
|
|
|
+ &omap3xxx_sad2d__l3,
|
|
|
|
+ &omap3xxx_l4_core__mmu_isp,
|
|
|
|
+#ifdef CONFIG_OMAP_IOMMU_IVA2
|
|
|
|
+ &omap3xxx_l3_main__mmu_iva,
|
|
|
|
+#endif
|
|
|
|
+ NULL
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+/* 36xx-only hwmod links (all ES revisions) */
|
|
|
|
+static struct omap_hwmod_ocp_if *omap36xx_hwmod_ocp_ifs[] __initdata = {
|
|
|
|
+ &omap3xxx_l3__iva,
|
|
|
|
+ &omap36xx_l4_per__uart4,
|
|
|
|
+ &omap3xxx_dss__l3,
|
|
|
|
+ &omap3xxx_l4_core__dss,
|
|
|
|
+ &omap36xx_l4_core__sr1,
|
|
|
|
+ &omap36xx_l4_core__sr2,
|
|
|
|
+ &omap3xxx_usbhsotg__l3,
|
|
|
|
+ &omap3xxx_l4_core__usbhsotg,
|
|
|
|
+ &omap3xxx_l4_core__mailbox,
|
|
|
|
+ &omap3xxx_usb_host_hs__l3_main_2,
|
|
|
|
+ &omap3xxx_l4_core__usb_host_hs,
|
|
|
|
+ &omap3xxx_l4_core__usb_tll_hs,
|
|
|
|
+ &omap3xxx_l4_core__es3plus_mmc1,
|
|
|
|
+ &omap3xxx_l4_core__es3plus_mmc2,
|
|
|
|
+ &omap3xxx_l4_core__hdq1w,
|
|
|
|
+ &omap3xxx_sad2d__l3,
|
|
|
|
+ &omap3xxx_l4_core__mmu_isp,
|
|
|
|
+#ifdef CONFIG_OMAP_IOMMU_IVA2
|
|
|
|
+ &omap3xxx_l3_main__mmu_iva,
|
|
|
|
+#endif
|
|
|
|
+ NULL
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct omap_hwmod_ocp_if *am35xx_hwmod_ocp_ifs[] __initdata = {
|
|
|
|
+ &omap3xxx_dss__l3,
|
|
|
|
+ &omap3xxx_l4_core__dss,
|
|
|
|
+ &am35xx_usbhsotg__l3,
|
|
|
|
+ &am35xx_l4_core__usbhsotg,
|
|
|
|
+ &am35xx_l4_core__uart4,
|
|
|
|
+ &omap3xxx_usb_host_hs__l3_main_2,
|
|
|
|
+ &omap3xxx_l4_core__usb_host_hs,
|
|
|
|
+ &omap3xxx_l4_core__usb_tll_hs,
|
|
|
|
+ &omap3xxx_l4_core__es3plus_mmc1,
|
|
|
|
+ &omap3xxx_l4_core__es3plus_mmc2,
|
|
|
|
+ &omap3xxx_l4_core__hdq1w,
|
|
|
|
+ &am35xx_mdio__l3,
|
|
|
|
+ &am35xx_l4_core__mdio,
|
|
|
|
+ &am35xx_emac__l3,
|
|
|
|
+ &am35xx_l4_core__emac,
|
|
|
|
+ NULL
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct omap_hwmod_ocp_if *omap3xxx_dss_hwmod_ocp_ifs[] __initdata = {
|
|
|
|
+ &omap3xxx_l4_core__dss_dispc,
|
|
|
|
+ &omap3xxx_l4_core__dss_dsi1,
|
|
|
|
+ &omap3xxx_l4_core__dss_rfbi,
|
|
|
|
+ &omap3xxx_l4_core__dss_venc,
|
|
|
|
+ NULL
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+int __init omap3xxx_hwmod_init(void)
|
|
|
|
+{
|
|
|
|
+ int r;
|
|
|
|
+ struct omap_hwmod_ocp_if **h = NULL;
|
|
|
|
+ unsigned int rev;
|
|
|
|
+
|
|
|
|
+ omap_hwmod_init();
|
|
|
|
+
|
|
|
|
+ /* Register hwmod links common to all OMAP3 */
|
|
|
|
+ r = omap_hwmod_register_links(omap3xxx_hwmod_ocp_ifs);
|
|
|
|
+ if (r < 0)
|
|
|
|
+ return r;
|
|
|
|
+
|
|
|
|
+ /* Register GP-only hwmod links. */
|
|
|
|
+ if (omap_type() == OMAP2_DEVICE_TYPE_GP) {
|
|
|
|
+ r = omap_hwmod_register_links(omap3xxx_gp_hwmod_ocp_ifs);
|
|
|
|
+ if (r < 0)
|
|
|
|
+ return r;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ rev = omap_rev();
|
|
|
|
+
|
|
|
|
+ /*
|
|
|
|
+ * Register hwmod links common to individual OMAP3 families, all
|
|
|
|
+ * silicon revisions (e.g., 34xx, or AM3505/3517, or 36xx)
|
|
|
|
+ * All possible revisions should be included in this conditional.
|
|
|
|
+ */
|
|
|
|
+ if (rev == OMAP3430_REV_ES1_0 || rev == OMAP3430_REV_ES2_0 ||
|
|
|
|
+ rev == OMAP3430_REV_ES2_1 || rev == OMAP3430_REV_ES3_0 ||
|
|
|
|
+ rev == OMAP3430_REV_ES3_1 || rev == OMAP3430_REV_ES3_1_2) {
|
|
|
|
+ h = omap34xx_hwmod_ocp_ifs;
|
|
|
|
+ } else if (rev == AM35XX_REV_ES1_0 || rev == AM35XX_REV_ES1_1) {
|
|
|
|
+ h = am35xx_hwmod_ocp_ifs;
|
|
|
|
+ } else if (rev == OMAP3630_REV_ES1_0 || rev == OMAP3630_REV_ES1_1 ||
|
|
|
|
+ rev == OMAP3630_REV_ES1_2) {
|
|
|
|
+ h = omap36xx_hwmod_ocp_ifs;
|
|
|
|
+ } else {
|
|
|
|
+ WARN(1, "OMAP3 hwmod family init: unknown chip type\n");
|
|
|
|
+ return -EINVAL;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ r = omap_hwmod_register_links(h);
|
|
|
|
+ if (r < 0)
|
|
|
|
+ return r;
|
|
|
|
+
|
|
|
|
+ /*
|
|
|
|
+ * Register hwmod links specific to certain ES levels of a
|
|
|
|
+ * particular family of silicon (e.g., 34xx ES1.0)
|
|
|
|
+ */
|
|
|
|
+ h = NULL;
|
|
|
|
+ if (rev == OMAP3430_REV_ES1_0) {
|
|
|
|
+ h = omap3430es1_hwmod_ocp_ifs;
|
|
|
|
+ } else if (rev == OMAP3430_REV_ES2_0 || rev == OMAP3430_REV_ES2_1 ||
|
|
|
|
+ rev == OMAP3430_REV_ES3_0 || rev == OMAP3430_REV_ES3_1 ||
|
|
|
|
+ rev == OMAP3430_REV_ES3_1_2) {
|
|
|
|
+ h = omap3430es2plus_hwmod_ocp_ifs;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (h) {
|
|
|
|
+ r = omap_hwmod_register_links(h);
|
|
|
|
+ if (r < 0)
|
|
|
|
+ return r;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ h = NULL;
|
|
|
|
+ if (rev == OMAP3430_REV_ES1_0 || rev == OMAP3430_REV_ES2_0 ||
|
|
|
|
+ rev == OMAP3430_REV_ES2_1) {
|
|
|
|
+ h = omap3430_pre_es3_hwmod_ocp_ifs;
|
|
|
|
+ } else if (rev == OMAP3430_REV_ES3_0 || rev == OMAP3430_REV_ES3_1 ||
|
|
|
|
+ rev == OMAP3430_REV_ES3_1_2) {
|
|
|
|
+ h = omap3430_es3plus_hwmod_ocp_ifs;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (h)
|
|
|
|
+ r = omap_hwmod_register_links(h);
|
|
|
|
+ if (r < 0)
|
|
|
|
+ return r;
|
|
|
|
+
|
|
|
|
+ /*
|
|
|
|
+ * DSS code presumes that dss_core hwmod is handled first,
|
|
|
|
+ * _before_ any other DSS related hwmods so register common
|
|
|
|
+ * DSS hwmod links last to ensure that dss_core is already
|
|
|
|
+ * registered. Otherwise some change things may happen, for
|
|
|
|
+ * ex. if dispc is handled before dss_core and DSS is enabled
|
|
|
|
+ * in bootloader DISPC will be reset with outputs enabled
|
|
|
|
+ * which sometimes leads to unrecoverable L3 error. XXX The
|
|
|
|
+ * long-term fix to this is to ensure hwmods are set up in
|
|
|
|
+ * dependency order in the hwmod core code.
|
|
|
|
+ */
|
|
|
|
+ r = omap_hwmod_register_links(omap3xxx_dss_hwmod_ocp_ifs);
|
|
|
|
+
|
|
|
|
+ return r;
|
|
|
|
+}
|