hardware.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398
  1. /*
  2. * Copyright (C) 2012, Freescale Semiconductor, Inc. All Rights Reserved
  3. * THIS SOURCE CODE IS CONFIDENTIAL AND PROPRIETARY AND MAY NOT
  4. * BE USED OR DISTRIBUTED WITHOUT THE WRITTEN PERMISSION OF
  5. * Freescale Semiconductor, Inc.
  6. */
  7. /*!
  8. * @file hardware.h
  9. * @brief header file with chip defines to be included by all the tests/utils
  10. *
  11. * @ingroup diag_init
  12. */
  13. #ifndef HARDWARE_H_
  14. #define HARDWARE_H_
  15. #include "soc_memory_map.h"
  16. #include "functions.h"
  17. #include "io.h"
  18. #include "iomux_define.h"
  19. #include "iomux_register.h"
  20. #include "iomux_config.h"
  21. #include "gpio_define.h"
  22. #include "ccm_pll_reg_define.h"
  23. #include "imx_i2c.h"
  24. #include "imx_spi.h"
  25. #include "imx_sata.h"
  26. #include "pmic.h"
  27. #include "regsgpmi.h"
  28. #include "regsapbh.h"
  29. #define ESDCTL_ESDSCR_OFFSET 0x1C
  30. // PLL definitions
  31. #define HW_ANADIG_USB1_PLL_480_CTRL_RW (ANATOP_IPS_BASE_ADDR+0x10)
  32. #define HW_ANADIG_PLL_528_RW (ANATOP_IPS_BASE_ADDR+0x30)
  33. #define HW_ANADIG_PLL_528_NUM (ANATOP_IPS_BASE_ADDR+0x50)
  34. #define HW_ANADIG_PLL_528_DENOM (ANATOP_IPS_BASE_ADDR+0x60)
  35. #define HW_ANADIG_PFD_528_RW (ANATOP_IPS_BASE_ADDR+0x100)
  36. #define HW_ANADIG_PLL_SYS_RW (ANATOP_IPS_BASE_ADDR+0x000)
  37. #define HW_ANADIG_REG_CORE (ANATOP_IPS_BASE_ADDR + 0x140)
  38. #define HW_ANADIG_REG_CORE_V_CORE_VALUE_mv(x) ((((x)-700)/25) << 0)
  39. #define HW_ANADIG_REG_CORE_V_SOC_VALUE_mv(x) ((((x)-700)/25) << 18)
  40. #define HW_ANADIG_REG_CORE_V_CORE_MSK 0x1F
  41. #define HW_ANADIG_REG_CORE_V_SOC_MSK (0x1F << 18)
  42. // audio defines
  43. #define WM8960_I2C_DEV_ADDR (0x34>>1)
  44. #define WM8960_I2C_BASE_ADDR I2C2_BASE_ADDR
  45. #define WM8958_I2C_DEV_ADDR (0x34>>1)
  46. #define WM8958_I2C_BASE_ADDR I2C1_BASE_ADDR
  47. #define WM8962_I2C_DEV_ADDR (0x34>>1)
  48. #define WM8962_I2C_BASE_ADDR I2C4_BASE_ADDR
  49. #define SGTL5000_I2C_BASE I2C1_BASE_ADDR // audio codec on i2c1
  50. #define SGTL5000_I2C_ID 0x0A
  51. // SGTL5000 specific register values
  52. #define CHIP_REF_CTRL_REG_VALUE 0x01FF // VDDA/2
  53. #define CHIP_LINE_OUT_CTRL_REG_VALUE 0x0322 // VDDIO/2
  54. #define CHIP_LINE_OUT_VOL_REG_VALUE 0x0F0F // based on VDDA and VDDIO values
  55. #define CHIP_CLK_TOP_CTRL_REG_VALUE 0 // pass through, Input OSC 13.5MHz, default configuration for sample rate, 48KHz
  56. #define CHIP_PLL_CTRL_REG_VALUE ((14 << 11) | (1154))
  57. #define CHIP_CLK_CTRL_REG_VALUE ((0x2 << 2) | (0x3))
  58. #define CHIP_CLK_CTRL_REG_MCLK_FREQ_VALUE 0x3 /*12MHz =256*Fs */
  59. #define CHIP_PLL_CTRL_REG_VALUE2 ((16 << 11) | (786)) // for CodecInit2
  60. #define SI476x_I2C_BASE I2C2_BASE_ADDR
  61. #define SI476x_I2C_ID (0xC6 >> 1)
  62. #define OS81050_I2C_BASE I2C3_BASE_ADDR
  63. #define OS81050_I2C_ID (0x40 >> 1)
  64. #define ADV7180_I2C_BASE I2C3_BASE_ADDR
  65. #define ADV7180_I2C_ID (0x42 >> 1)
  66. #if defined(SABRE_LITE)
  67. #define P1003_TSC_I2C_BASE I2C3_BASE_ADDR
  68. #else //default SABRE_AI
  69. #define P1003_TSC_I2C_BASE I2C2_BASE_ADDR
  70. #endif
  71. #define P1003_TSC_I2C_ID 4
  72. // MAX7310 I2C settings
  73. /* For the SABRE AI board which has 3 MAX7310 */
  74. #ifdef SABRE_AI
  75. #define MAX7310_NBR 3
  76. #define MAX7310_I2C_BASE_ID0 I2C3_BASE_ADDR
  77. #define MAX7310_I2C_ID0 0x30
  78. #define MAX7310_ID0_DEF_DIR 0x00 // init direction for the I/O
  79. #define MAX7310_ID0_DEF_VAL 0xFF // init value for the output
  80. /* Number 1 controls: CTRL_0, CTRL_1, CTRL_2, CTRL_3, CTRL_4, PORT3_P116,
  81. PORT2_P81, PORT3_P101
  82. */
  83. #define MAX7310_I2C_BASE_ID1 I2C3_BASE_ADDR
  84. #define MAX7310_I2C_ID1 0x32
  85. #define MAX7310_ID1_DEF_DIR 0x00 // init direction for the I/O
  86. /*Set the max7310_id1 's default value for ctrl_x */
  87. #define MAX7310_ID1_DEF_VAL 0xE7 // init value for the output
  88. #define MAX7310_I2C_BASE_ID2 I2C3_BASE_ADDR
  89. #define MAX7310_I2C_ID2 0x34
  90. #define MAX7310_ID2_DEF_DIR 0x00 // init direction for the I/O
  91. /*Set the max7310_id1 's default value for ctrl_x */
  92. #define MAX7310_ID2_DEF_VAL 0x57 // init value for the output
  93. /* For the EVB board which has 2 MAX7310 */
  94. #endif
  95. #ifdef EVB
  96. #define MAX7310_NBR 2
  97. /* Number 1 controls: BACKLIGHT_ON, PORT3_P114, CPU_PER_RST_B, PORT3_P110,
  98. PORT3_P105, PORT3_P112, PORT3_P107, PORT3_P109.
  99. */
  100. #define MAX7310_I2C_BASE_ID0 I2C3_BASE_ADDR
  101. #define MAX7310_I2C_ID0 (0x36 >> 1)
  102. #define MAX7310_ID0_DEF_DIR 0x00 // init direction for the I/O
  103. #define MAX7310_ID0_DEF_VAL 0xFF // init value for the output
  104. /* Number 1 controls: CTRL_0, CTRL_1, CTRL_2, CTRL_3, CTRL_4, PORT3_P116,
  105. PORT2_P81, PORT3_P101
  106. */
  107. #define MAX7310_I2C_BASE_ID1 I2C3_BASE_ADDR
  108. #define MAX7310_I2C_ID1 (0x3E >> 1)
  109. #define MAX7310_ID1_DEF_DIR 0x00 // init direction for the I/O
  110. /*Set the max7310_id1 's default value for ctrl_x */
  111. #define MAX7310_ID1_DEF_VAL 0x09 // init value for the output
  112. #endif
  113. /* use that defined for boards that doesn't have any MAX7310 */
  114. #if defined(SMART_DEVICE) || defined(SABRE_LITE)
  115. /* dummy value for build */
  116. #define MAX7310_NBR 0
  117. #endif
  118. /* create an array of I2C requests for all used expanders on the board */
  119. struct imx_i2c_request max7310_i2c_req_array[MAX7310_NBR];
  120. #define MMA8450_I2C_ID 0x1C
  121. #define MMA8451_I2C_ID 0x1C
  122. #define MAG3112_I2C_ID 0x1D
  123. #define MAG3110_I2C_ID 0x0E
  124. #define ISL29023_I2C_ID 0x44
  125. #define FXLS8471Q_I2C_ID 0x1E
  126. #define MAX11801_I2C_BASE I2C3_BASE_ADDR
  127. #define MAX11801_I2C_ID (0x90 >> 1)
  128. #ifdef SABRE_AI
  129. #define CS42888_I2C_BASE I2C2_BASE_ADDR
  130. #endif
  131. #ifdef EVB
  132. #define CS42888_I2C_BASE I2C1_BASE_ADDR
  133. #endif
  134. /* use that defined for boards that doesn't have any CS42888 */
  135. #if defined(SMART_DEVICE) || defined(SABRE_LITE)
  136. #define CS42888_I2C_BASE DUMMY_VALUE_NOT_USED
  137. #endif
  138. #define CS42888_I2C_ID (0x90 >> 1)
  139. #define AT24Cx_I2C_BASE I2C3_BASE_ADDR
  140. #define AT24Cx_I2C_ID 0x50
  141. // USB test defines
  142. #define USBH1_BASE_ADDR (USBOH2_USB_BASE_ADDR + 0x200)
  143. #define USBH2_BASE_ADDR (USBOH2_USB_BASE_ADDR + 0x400)
  144. #define USBH3_BASE_ADDR (USBOH2_USB_BASE_ADDR + 0x600)
  145. #define USB_OTG_MIRROR_REG (USBOH2_USB_BASE_ADDR+0x804)
  146. #define USB_CLKONOFF_CTRL (USBOH2_USB_BASE_ADDR+0x824)
  147. #define USBH2_VIEWPORT (USBH2_BASE_ADDR + 0x170)
  148. #define USB_CTRL_1 (USBOH2_USB_BASE_ADDR + 0x810)
  149. #define UH2_PORTSC1 (USBH2_BASE_ADDR + 0x184)
  150. #define IIM_BASE_ADDR 0x0
  151. #define M4IF_REGISTERS_BASE_ADDR 0x0
  152. #define ESDHC1_BASE_ADDR 0x0
  153. #define ESDHC2_BASE_ADDR 0x1
  154. #define ESDHC3_BASE_ADDR 0x2
  155. #define DPLLIP1_BASE_ADDR 0x0
  156. #define DPLLIP2_BASE_ADDR 0x1
  157. #define DPLLIP3_BASE_ADDR 0x2
  158. #define DPLLIP4_BASE_ADDR 0x3
  159. #define USDHC_ADMA_BUFFER 0x00910000
  160. /*qh and td pointers defintion*/
  161. #define QH_BUFFER 0x00908000 // internal RAM
  162. #define TD_BUFFER 0x00908100 // internal RAM
  163. // input CKIL clock
  164. #define __CLK_TCK 32768
  165. #define FREQ_24MHZ 24000000
  166. #define CKIH 22579200
  167. // I2C specific defines
  168. // For LTC Board ID
  169. #define BOARD_ID_I2C_BASE I2C2_BASE_ADDR
  170. // register defines for the SRTC function of the SNVS
  171. #define SRTC_LPSCMR (SNVS_BASE_ADDR + 0x50)
  172. #define SRTC_LPSCLR (SNVS_BASE_ADDR + 0x54)
  173. #define SRTC_LPCR (SNVS_BASE_ADDR + 0x38)
  174. #define SRTC_HPCMR (SNVS_BASE_ADDR + 0x24)
  175. #define SRTC_HPCLR (SNVS_BASE_ADDR + 0x28)
  176. #define SRTC_HPCR (SNVS_BASE_ADDR + 0x08)
  177. //provide macros for test enter and exit outputs
  178. #define TEST_ENTER(name) printf ("Running test: %s\n", name)
  179. #define TEST_EXIT(name) do {printf (" ..Test: %s\n", name); \
  180. } while (0)
  181. enum main_clocks {
  182. CPU_CLK,
  183. AHB_CLK,
  184. IPG_CLK,
  185. IPG_PER_CLK,
  186. DDR_CLK,
  187. NFC_CLK,
  188. USB_CLK,
  189. VPU_CLK,
  190. };
  191. enum peri_clocks {
  192. UART1_BAUD,
  193. UART2_BAUD,
  194. UART3_BAUD,
  195. UART4_BAUD,
  196. SSI1_BAUD,
  197. SSI2_BAUD,
  198. CSI_BAUD,
  199. MSTICK1_CLK,
  200. MSTICK2_CLK,
  201. SPI1_CLK = ECSPI1_BASE_ADDR,
  202. SPI2_CLK = ECSPI2_BASE_ADDR,
  203. };
  204. enum plls {
  205. PLL1,
  206. PLL2,
  207. PLL3,
  208. PLL4,
  209. };
  210. enum display_type {
  211. DISP_DEV_NULL = 0,
  212. DISP_DEV_TFTLCD,
  213. DISP_DEV_LVDS,
  214. DISP_DEV_VGA,
  215. DISP_DEV_HDMI,
  216. DISP_DEV_TV,
  217. DISP_DEV_MIPI,
  218. };
  219. enum lvds_panel_bit_mode {
  220. LVDS_PANEL_18BITS_MODE = 0x0,
  221. LVDS_PANEL_24BITS_MODE = 0x1,
  222. };
  223. enum shift_reg_bit{
  224. HDMI_nRST = 1,
  225. ENET1_nRST = 2,
  226. ENET2_nRST = 4,
  227. CAN1_2_STBY = 8,
  228. BT_nPWD = 16,
  229. CSI_RST = 32,
  230. CSI_PWDN = 64,
  231. LCD_nPWREN = 128,
  232. ALL_BITS = 0xFF,
  233. };
  234. void set_shift_reg(enum shift_reg_bit b, bool state);
  235. void peri_pwr_en(bool enable);
  236. void pf0100_enable_vgen5_3v3(void);
  237. void pf0100_disable_vgen5_3v3(void);
  238. void pf0100_enable_vgen2_1v5(void);
  239. void pf0100_disable_vgen2_1v5(void);
  240. void sd3_reset(void);
  241. u32 pll_clock(enum plls pll);
  242. u32 get_main_clock(enum main_clocks clk);
  243. u32 get_peri_clock(enum peri_clocks clk);
  244. void clock_setup(u32 core_clk, u32 ahb_div);
  245. void io_cfg_i2c(u32 module_base);
  246. void usdhc_iomux_config(u32 module_base);
  247. bool usdhc_card_detected(unsigned int base_address);
  248. bool usdhc_write_protected(unsigned int base_address);
  249. void freq_populate(void);
  250. void show_freq(void);
  251. void show_ddr_config(void);
  252. void board_init(void);
  253. void reset_usb_hub(void);
  254. void usb_clock_enable(void);
  255. void usb_init_phy(void);
  256. void imx_enet_setup(void);
  257. void esai_iomux(void);
  258. void gpmi_nand_pinmux_config(void);
  259. void gpmi_nand_clk_setup(void);
  260. void imx_enet_iomux(int id);
  261. void imx_enet_power_on_reset(void);
  262. void imx_enet_hw_init(int id);
  263. void usb_iomux_config(void);
  264. void usb_vbus_power_on(void);
  265. void usb_vbus_power_off(void);
  266. void imx_ar8031_reset(void);
  267. void imx_KSZ9021RN_reset(void);
  268. int read_mac(u8 * mac_data);
  269. int program_mac(u8 * fuse_data);
  270. void mlb_io_config(void);
  271. int esai_codec_power_on(void);
  272. void hdmi_pgm_iomux(void);
  273. void hdmi_clock_set(unsigned int pclk);
  274. void lvds_power_on(char *panel_name);
  275. void sata_clock_disable(void);
  276. void sata_power_off(void);
  277. void weim_nor_flash_cs_setup(void);
  278. void show_boot_switch_info(void);
  279. void hdmi_power_on(void);
  280. void camera_power_on(void);
  281. void camera_power_off(void);
  282. void camera_reset(void);
  283. void camera_clock_setting(void);
  284. void audio_codec_power_on(void);
  285. extern void gpio_backlight_lvds_en(void);
  286. extern void init_clock(u32 rate);
  287. extern void hal_delay_us(unsigned int);
  288. extern int max7310_init(unsigned int, unsigned int, unsigned int);
  289. extern void max7310_set_gpio_output(unsigned int, unsigned int, unsigned int);
  290. extern void AUDMUXRoute(int intPort, int extPort, int Master); // defined in ssi.c driver
  291. extern int mx6ul_evk_show_headphone(void);
  292. extern imx_spi_init_func_t spi_init_flash;
  293. extern imx_spi_xfer_func_t spi_xfer_flash;
  294. extern struct imx_spi_dev imx_spi_nor;
  295. extern u32 usbh_EHCI_test_mode_base;
  296. extern u32 usbh_dev_enum_test_base;
  297. extern u32 usbo_dev_enum_test_base;
  298. extern u32 usbh_hub251x_test_base;
  299. extern int ipu_display_panel[];
  300. extern u32 ddr_density, ddr_num_of_cs;
  301. extern u32 mmcsd_bus_width, mmc_sd_base_address;
  302. /* list of tests */
  303. extern int spi_nor_test_enable;
  304. extern int pmic_mc13892_test_enable;
  305. extern int pf0100_i2c_device_id_test_enable;
  306. extern int fec_test_enable;
  307. extern int lan9220_test_enable;
  308. extern int enet_test_enable;
  309. extern int ksz8081rnb_test_enable;
  310. extern int KSZ9021RN_test_enable;
  311. extern int ds90ur124_test_enable;
  312. extern int adv7180_test_enable;
  313. extern int ard_mb_reset_test_enable;
  314. extern int ard_mb_expander_reset_test_enable;
  315. extern int si476x_test_enable;
  316. extern int esai_test_enable;
  317. extern int weim_nor_flash_test_enable;
  318. extern int max7310_i2c_device_id_test_enable;
  319. extern int nand_test_enable;
  320. extern int usbh_EHCI_test_mode_test_enable;
  321. extern int usbh_dev_enum_test_enable;
  322. extern int usbo_dev_enum_test_enable;
  323. extern int usbh_hub251x_test_enable;
  324. extern int i2s_audio_test_enable;
  325. extern int gps_test_enable;
  326. extern int gpio_keyboard_test_enable;
  327. extern int smbus_test_enable;
  328. extern int touch_screen_test_enable;
  329. extern int ipu_display_test_enable;
  330. extern int ddr_test_enable;
  331. extern int mlb_os81050_test_enable;
  332. extern int i2c_id_check_test_enable;
  333. extern int i2c_device_id_check_mag3112_test_enable;
  334. extern int i2c_device_id_check_mag3110_test_enable;
  335. extern int i2c_device_id_check_isl29023_test_enable;
  336. extern int i2c_device_id_check_mma8451_test_enable;
  337. extern int i2c_device_id_check_cs42888_test_enable;
  338. extern int i2c_device_id_check_p1003_test_enable;
  339. extern int mmcsd_test_enable;
  340. extern int eeprom_test_enable;
  341. extern int mipi_test_enable;
  342. extern int touch_button_test_enable;
  343. extern int android_buttons_test_enable;
  344. extern int can_test_enable;
  345. extern int camera_flashtest_enable;
  346. extern int camera_test_enable;
  347. extern int epd_test_enable;
  348. extern int lcd_test_enable;
  349. extern int lvds_test_enable;
  350. #define PMIC_MC13892_I2C_BASE I2C2_BASE_ADDR
  351. #define PMIC_LTC3589_I2C_BASE I2C2_BASE_ADDR
  352. #define PMIC_DA9053_I2C_BASE I2C1_BASE_ADDR
  353. #define PMIC_PF0100_I2C_BASE I2C1_BASE_ADDR
  354. #endif /*HARDWARE_H_ */