cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

omap_hwmod_2420_data.c (9874B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/*
      3 * omap_hwmod_2420_data.c - hardware modules present on the OMAP2420 chips
      4 *
      5 * Copyright (C) 2009-2011 Nokia Corporation
      6 * Copyright (C) 2012 Texas Instruments, Inc.
      7 * Paul Walmsley
      8 *
      9 * XXX handle crossbar/shared link difference for L3?
     10 * XXX these should be marked initdata for multi-OMAP kernels
     11 */
     12
     13#include <linux/platform_data/i2c-omap.h>
     14
     15#include "omap_hwmod.h"
     16#include "l3_2xxx.h"
     17#include "l4_2xxx.h"
     18
     19#include "omap_hwmod_common_data.h"
     20
     21#include "cm-regbits-24xx.h"
     22#include "prm-regbits-24xx.h"
     23#include "i2c.h"
     24#include "mmc.h"
     25#include "serial.h"
     26#include "wd_timer.h"
     27
     28/*
     29 * OMAP2420 hardware module integration data
     30 *
     31 * All of the data in this section should be autogeneratable from the
     32 * TI hardware database or other technical documentation.  Data that
     33 * is driver-specific or driver-kernel integration-specific belongs
     34 * elsewhere.
     35 */
     36
     37/*
     38 * IP blocks
     39 */
     40
     41/* IVA1 (IVA1) */
     42static struct omap_hwmod_class iva1_hwmod_class = {
     43	.name		= "iva1",
     44};
     45
     46static struct omap_hwmod_rst_info omap2420_iva_resets[] = {
     47	{ .name = "iva", .rst_shift = 8 },
     48};
     49
     50static struct omap_hwmod omap2420_iva_hwmod = {
     51	.name		= "iva",
     52	.class		= &iva1_hwmod_class,
     53	.clkdm_name	= "iva1_clkdm",
     54	.rst_lines	= omap2420_iva_resets,
     55	.rst_lines_cnt	= ARRAY_SIZE(omap2420_iva_resets),
     56	.main_clk	= "iva1_ifck",
     57};
     58
     59/* DSP */
     60static struct omap_hwmod_class dsp_hwmod_class = {
     61	.name		= "dsp",
     62};
     63
     64static struct omap_hwmod_rst_info omap2420_dsp_resets[] = {
     65	{ .name = "logic", .rst_shift = 0 },
     66	{ .name = "mmu", .rst_shift = 1 },
     67};
     68
     69static struct omap_hwmod omap2420_dsp_hwmod = {
     70	.name		= "dsp",
     71	.class		= &dsp_hwmod_class,
     72	.clkdm_name	= "dsp_clkdm",
     73	.rst_lines	= omap2420_dsp_resets,
     74	.rst_lines_cnt	= ARRAY_SIZE(omap2420_dsp_resets),
     75	.main_clk	= "dsp_fck",
     76};
     77
     78/* I2C common */
     79static struct omap_hwmod_class_sysconfig i2c_sysc = {
     80	.rev_offs	= 0x00,
     81	.sysc_offs	= 0x20,
     82	.syss_offs	= 0x10,
     83	.sysc_flags	= (SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
     84	.sysc_fields	= &omap_hwmod_sysc_type1,
     85};
     86
     87static struct omap_hwmod_class i2c_class = {
     88	.name		= "i2c",
     89	.sysc		= &i2c_sysc,
     90	.reset		= &omap_i2c_reset,
     91};
     92
     93/* I2C1 */
     94static struct omap_hwmod omap2420_i2c1_hwmod = {
     95	.name		= "i2c1",
     96	.main_clk	= "i2c1_fck",
     97	.prcm		= {
     98		.omap2 = {
     99			.module_offs = CORE_MOD,
    100			.idlest_reg_id = 1,
    101			.idlest_idle_bit = OMAP2420_ST_I2C1_SHIFT,
    102		},
    103	},
    104	.class		= &i2c_class,
    105	/*
    106	 * From mach-omap2/pm24xx.c: "Putting MPU into the WFI state
    107	 * while a transfer is active seems to cause the I2C block to
    108	 * timeout. Why? Good question."
    109	 */
    110	.flags		= (HWMOD_16BIT_REG | HWMOD_BLOCK_WFI),
    111};
    112
    113/* I2C2 */
    114static struct omap_hwmod omap2420_i2c2_hwmod = {
    115	.name		= "i2c2",
    116	.main_clk	= "i2c2_fck",
    117	.prcm		= {
    118		.omap2 = {
    119			.module_offs = CORE_MOD,
    120			.idlest_reg_id = 1,
    121			.idlest_idle_bit = OMAP2420_ST_I2C2_SHIFT,
    122		},
    123	},
    124	.class		= &i2c_class,
    125	.flags		= HWMOD_16BIT_REG,
    126};
    127
    128/* mailbox */
    129static struct omap_hwmod omap2420_mailbox_hwmod = {
    130	.name		= "mailbox",
    131	.class		= &omap2xxx_mailbox_hwmod_class,
    132	.main_clk	= "mailboxes_ick",
    133	.prcm		= {
    134		.omap2 = {
    135			.module_offs = CORE_MOD,
    136			.idlest_reg_id = 1,
    137			.idlest_idle_bit = OMAP24XX_ST_MAILBOXES_SHIFT,
    138		},
    139	},
    140};
    141
    142/*
    143 * 'mcbsp' class
    144 * multi channel buffered serial port controller
    145 */
    146
    147static struct omap_hwmod_class omap2420_mcbsp_hwmod_class = {
    148	.name = "mcbsp",
    149};
    150
    151static struct omap_hwmod_opt_clk mcbsp_opt_clks[] = {
    152	{ .role = "pad_fck", .clk = "mcbsp_clks" },
    153	{ .role = "prcm_fck", .clk = "func_96m_ck" },
    154};
    155
    156/* mcbsp1 */
    157static struct omap_hwmod omap2420_mcbsp1_hwmod = {
    158	.name		= "mcbsp1",
    159	.class		= &omap2420_mcbsp_hwmod_class,
    160	.main_clk	= "mcbsp1_fck",
    161	.prcm		= {
    162		.omap2 = {
    163			.module_offs = CORE_MOD,
    164			.idlest_reg_id = 1,
    165			.idlest_idle_bit = OMAP24XX_ST_MCBSP1_SHIFT,
    166		},
    167	},
    168	.opt_clks	= mcbsp_opt_clks,
    169	.opt_clks_cnt	= ARRAY_SIZE(mcbsp_opt_clks),
    170};
    171
    172/* mcbsp2 */
    173static struct omap_hwmod omap2420_mcbsp2_hwmod = {
    174	.name		= "mcbsp2",
    175	.class		= &omap2420_mcbsp_hwmod_class,
    176	.main_clk	= "mcbsp2_fck",
    177	.prcm		= {
    178		.omap2 = {
    179			.module_offs = CORE_MOD,
    180			.idlest_reg_id = 1,
    181			.idlest_idle_bit = OMAP24XX_ST_MCBSP2_SHIFT,
    182		},
    183	},
    184	.opt_clks	= mcbsp_opt_clks,
    185	.opt_clks_cnt	= ARRAY_SIZE(mcbsp_opt_clks),
    186};
    187
    188static struct omap_hwmod_class_sysconfig omap2420_msdi_sysc = {
    189	.rev_offs	= 0x3c,
    190	.sysc_offs	= 0x64,
    191	.syss_offs	= 0x68,
    192	.sysc_flags	= (SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
    193	.sysc_fields	= &omap_hwmod_sysc_type1,
    194};
    195
    196static struct omap_hwmod_class omap2420_msdi_hwmod_class = {
    197	.name	= "msdi",
    198	.sysc	= &omap2420_msdi_sysc,
    199	.reset	= &omap_msdi_reset,
    200};
    201
    202/* msdi1 */
    203static struct omap_hwmod omap2420_msdi1_hwmod = {
    204	.name		= "msdi1",
    205	.class		= &omap2420_msdi_hwmod_class,
    206	.main_clk	= "mmc_fck",
    207	.prcm		= {
    208		.omap2 = {
    209			.module_offs = CORE_MOD,
    210			.idlest_reg_id = 1,
    211			.idlest_idle_bit = OMAP2420_ST_MMC_SHIFT,
    212		},
    213	},
    214	.flags		= HWMOD_16BIT_REG,
    215};
    216
    217/* HDQ1W/1-wire */
    218static struct omap_hwmod omap2420_hdq1w_hwmod = {
    219	.name		= "hdq1w",
    220	.main_clk	= "hdq_fck",
    221	.prcm		= {
    222		.omap2 = {
    223			.module_offs = CORE_MOD,
    224			.idlest_reg_id = 1,
    225			.idlest_idle_bit = OMAP24XX_ST_HDQ_SHIFT,
    226		},
    227	},
    228	.class		= &omap2_hdq1w_class,
    229};
    230
    231/*
    232 * interfaces
    233 */
    234
    235/* L4 CORE -> I2C1 interface */
    236static struct omap_hwmod_ocp_if omap2420_l4_core__i2c1 = {
    237	.master		= &omap2xxx_l4_core_hwmod,
    238	.slave		= &omap2420_i2c1_hwmod,
    239	.clk		= "i2c1_ick",
    240	.user		= OCP_USER_MPU | OCP_USER_SDMA,
    241};
    242
    243/* L4 CORE -> I2C2 interface */
    244static struct omap_hwmod_ocp_if omap2420_l4_core__i2c2 = {
    245	.master		= &omap2xxx_l4_core_hwmod,
    246	.slave		= &omap2420_i2c2_hwmod,
    247	.clk		= "i2c2_ick",
    248	.user		= OCP_USER_MPU | OCP_USER_SDMA,
    249};
    250
    251/* IVA <- L3 interface */
    252static struct omap_hwmod_ocp_if omap2420_l3__iva = {
    253	.master		= &omap2xxx_l3_main_hwmod,
    254	.slave		= &omap2420_iva_hwmod,
    255	.clk		= "core_l3_ck",
    256	.user		= OCP_USER_MPU | OCP_USER_SDMA,
    257};
    258
    259/* DSP <- L3 interface */
    260static struct omap_hwmod_ocp_if omap2420_l3__dsp = {
    261	.master		= &omap2xxx_l3_main_hwmod,
    262	.slave		= &omap2420_dsp_hwmod,
    263	.clk		= "dsp_ick",
    264	.user		= OCP_USER_MPU | OCP_USER_SDMA,
    265};
    266
    267/* l4_wkup -> wd_timer2 */
    268static struct omap_hwmod_ocp_if omap2420_l4_wkup__wd_timer2 = {
    269	.master		= &omap2xxx_l4_wkup_hwmod,
    270	.slave		= &omap2xxx_wd_timer2_hwmod,
    271	.clk		= "mpu_wdt_ick",
    272	.user		= OCP_USER_MPU | OCP_USER_SDMA,
    273};
    274
    275/* l4_wkup -> gpio1 */
    276static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio1 = {
    277	.master		= &omap2xxx_l4_wkup_hwmod,
    278	.slave		= &omap2xxx_gpio1_hwmod,
    279	.clk		= "gpios_ick",
    280	.user		= OCP_USER_MPU | OCP_USER_SDMA,
    281};
    282
    283/* l4_wkup -> gpio2 */
    284static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio2 = {
    285	.master		= &omap2xxx_l4_wkup_hwmod,
    286	.slave		= &omap2xxx_gpio2_hwmod,
    287	.clk		= "gpios_ick",
    288	.user		= OCP_USER_MPU | OCP_USER_SDMA,
    289};
    290
    291/* l4_wkup -> gpio3 */
    292static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio3 = {
    293	.master		= &omap2xxx_l4_wkup_hwmod,
    294	.slave		= &omap2xxx_gpio3_hwmod,
    295	.clk		= "gpios_ick",
    296	.user		= OCP_USER_MPU | OCP_USER_SDMA,
    297};
    298
    299/* l4_wkup -> gpio4 */
    300static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio4 = {
    301	.master		= &omap2xxx_l4_wkup_hwmod,
    302	.slave		= &omap2xxx_gpio4_hwmod,
    303	.clk		= "gpios_ick",
    304	.user		= OCP_USER_MPU | OCP_USER_SDMA,
    305};
    306
    307/* l4_core -> mailbox */
    308static struct omap_hwmod_ocp_if omap2420_l4_core__mailbox = {
    309	.master		= &omap2xxx_l4_core_hwmod,
    310	.slave		= &omap2420_mailbox_hwmod,
    311	.user		= OCP_USER_MPU | OCP_USER_SDMA,
    312};
    313
    314/* l4_core -> mcbsp1 */
    315static struct omap_hwmod_ocp_if omap2420_l4_core__mcbsp1 = {
    316	.master		= &omap2xxx_l4_core_hwmod,
    317	.slave		= &omap2420_mcbsp1_hwmod,
    318	.clk		= "mcbsp1_ick",
    319	.user		= OCP_USER_MPU | OCP_USER_SDMA,
    320};
    321
    322/* l4_core -> mcbsp2 */
    323static struct omap_hwmod_ocp_if omap2420_l4_core__mcbsp2 = {
    324	.master		= &omap2xxx_l4_core_hwmod,
    325	.slave		= &omap2420_mcbsp2_hwmod,
    326	.clk		= "mcbsp2_ick",
    327	.user		= OCP_USER_MPU | OCP_USER_SDMA,
    328};
    329
    330/* l4_core -> msdi1 */
    331static struct omap_hwmod_ocp_if omap2420_l4_core__msdi1 = {
    332	.master		= &omap2xxx_l4_core_hwmod,
    333	.slave		= &omap2420_msdi1_hwmod,
    334	.clk		= "mmc_ick",
    335	.user		= OCP_USER_MPU | OCP_USER_SDMA,
    336};
    337
    338/* l4_core -> hdq1w interface */
    339static struct omap_hwmod_ocp_if omap2420_l4_core__hdq1w = {
    340	.master		= &omap2xxx_l4_core_hwmod,
    341	.slave		= &omap2420_hdq1w_hwmod,
    342	.clk		= "hdq_ick",
    343	.user		= OCP_USER_MPU | OCP_USER_SDMA,
    344	.flags		= OMAP_FIREWALL_L4 | OCPIF_SWSUP_IDLE,
    345};
    346
    347static struct omap_hwmod_ocp_if omap2420_l3__gpmc = {
    348	.master		= &omap2xxx_l3_main_hwmod,
    349	.slave		= &omap2xxx_gpmc_hwmod,
    350	.clk		= "core_l3_ck",
    351	.user		= OCP_USER_MPU | OCP_USER_SDMA,
    352};
    353
    354static struct omap_hwmod_ocp_if *omap2420_hwmod_ocp_ifs[] __initdata = {
    355	&omap2xxx_l3_main__l4_core,
    356	&omap2xxx_mpu__l3_main,
    357	&omap2xxx_dss__l3,
    358	&omap2xxx_l4_core__mcspi1,
    359	&omap2xxx_l4_core__mcspi2,
    360	&omap2xxx_l4_core__l4_wkup,
    361	&omap2_l4_core__uart1,
    362	&omap2_l4_core__uart2,
    363	&omap2_l4_core__uart3,
    364	&omap2420_l4_core__i2c1,
    365	&omap2420_l4_core__i2c2,
    366	&omap2420_l3__iva,
    367	&omap2420_l3__dsp,
    368	&omap2xxx_l4_core__timer3,
    369	&omap2xxx_l4_core__timer4,
    370	&omap2xxx_l4_core__timer5,
    371	&omap2xxx_l4_core__timer6,
    372	&omap2xxx_l4_core__timer7,
    373	&omap2xxx_l4_core__timer8,
    374	&omap2xxx_l4_core__timer9,
    375	&omap2xxx_l4_core__timer10,
    376	&omap2xxx_l4_core__timer11,
    377	&omap2xxx_l4_core__timer12,
    378	&omap2420_l4_wkup__wd_timer2,
    379	&omap2xxx_l4_core__dss,
    380	&omap2xxx_l4_core__dss_dispc,
    381	&omap2xxx_l4_core__dss_rfbi,
    382	&omap2xxx_l4_core__dss_venc,
    383	&omap2420_l4_wkup__gpio1,
    384	&omap2420_l4_wkup__gpio2,
    385	&omap2420_l4_wkup__gpio3,
    386	&omap2420_l4_wkup__gpio4,
    387	&omap2420_l4_core__mailbox,
    388	&omap2420_l4_core__mcbsp1,
    389	&omap2420_l4_core__mcbsp2,
    390	&omap2420_l4_core__msdi1,
    391	&omap2xxx_l4_core__rng,
    392	&omap2xxx_l4_core__sham,
    393	&omap2xxx_l4_core__aes,
    394	&omap2420_l4_core__hdq1w,
    395	&omap2420_l3__gpmc,
    396	NULL,
    397};
    398
    399int __init omap2420_hwmod_init(void)
    400{
    401	omap_hwmod_init();
    402	return omap_hwmod_register_links(omap2420_hwmod_ocp_ifs);
    403}