175471687STerje Bergstrom /* 275471687STerje Bergstrom * Copyright (c) 2012-2013, NVIDIA Corporation. 375471687STerje Bergstrom * 475471687STerje Bergstrom * This program is free software; you can redistribute it and/or modify it 575471687STerje Bergstrom * under the terms and conditions of the GNU General Public License, 675471687STerje Bergstrom * version 2, as published by the Free Software Foundation. 775471687STerje Bergstrom * 875471687STerje Bergstrom * This program is distributed in the hope it will be useful, but WITHOUT 975471687STerje Bergstrom * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 1075471687STerje Bergstrom * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 1175471687STerje Bergstrom * more details. 1275471687STerje Bergstrom * 1375471687STerje Bergstrom * You should have received a copy of the GNU General Public License 1475471687STerje Bergstrom * along with this program. If not, see <http://www.gnu.org/licenses/>. 1575471687STerje Bergstrom * 1675471687STerje Bergstrom */ 1775471687STerje Bergstrom 1875471687STerje Bergstrom /* 1975471687STerje Bergstrom * Function naming determines intended use: 2075471687STerje Bergstrom * 2175471687STerje Bergstrom * <x>_r(void) : Returns the offset for register <x>. 2275471687STerje Bergstrom * 2375471687STerje Bergstrom * <x>_w(void) : Returns the word offset for word (4 byte) element <x>. 2475471687STerje Bergstrom * 2575471687STerje Bergstrom * <x>_<y>_s(void) : Returns size of field <y> of register <x> in bits. 2675471687STerje Bergstrom * 2775471687STerje Bergstrom * <x>_<y>_f(u32 v) : Returns a value based on 'v' which has been shifted 2875471687STerje Bergstrom * and masked to place it at field <y> of register <x>. This value 2975471687STerje Bergstrom * can be |'d with others to produce a full register value for 3075471687STerje Bergstrom * register <x>. 3175471687STerje Bergstrom * 3275471687STerje Bergstrom * <x>_<y>_m(void) : Returns a mask for field <y> of register <x>. This 3375471687STerje Bergstrom * value can be ~'d and then &'d to clear the value of field <y> for 3475471687STerje Bergstrom * register <x>. 3575471687STerje Bergstrom * 3675471687STerje Bergstrom * <x>_<y>_<z>_f(void) : Returns the constant value <z> after being shifted 3775471687STerje Bergstrom * to place it at field <y> of register <x>. This value can be |'d 3875471687STerje Bergstrom * with others to produce a full register value for <x>. 3975471687STerje Bergstrom * 4075471687STerje Bergstrom * <x>_<y>_v(u32 r) : Returns the value of field <y> from a full register 4175471687STerje Bergstrom * <x> value 'r' after being shifted to place its LSB at bit 0. 4275471687STerje Bergstrom * This value is suitable for direct comparison with other unshifted 4375471687STerje Bergstrom * values appropriate for use in field <y> of register <x>. 4475471687STerje Bergstrom * 4575471687STerje Bergstrom * <x>_<y>_<z>_v(void) : Returns the constant value for <z> defined for 4675471687STerje Bergstrom * field <y> of register <x>. This value is suitable for direct 4775471687STerje Bergstrom * comparison with unshifted values appropriate for use in field <y> 4875471687STerje Bergstrom * of register <x>. 4975471687STerje Bergstrom */ 5075471687STerje Bergstrom 5175471687STerje Bergstrom #ifndef __hw_host1x01_sync_h__ 5275471687STerje Bergstrom #define __hw_host1x01_sync_h__ 5375471687STerje Bergstrom 5475471687STerje Bergstrom #define REGISTER_STRIDE 4 5575471687STerje Bergstrom 5675471687STerje Bergstrom static inline u32 host1x_sync_syncpt_r(unsigned int id) 5775471687STerje Bergstrom { 5875471687STerje Bergstrom return 0x400 + id * REGISTER_STRIDE; 5975471687STerje Bergstrom } 6075471687STerje Bergstrom #define HOST1X_SYNC_SYNCPT(id) \ 6175471687STerje Bergstrom host1x_sync_syncpt_r(id) 627ede0b0bSTerje Bergstrom static inline u32 host1x_sync_syncpt_thresh_cpu0_int_status_r(unsigned int id) 637ede0b0bSTerje Bergstrom { 647ede0b0bSTerje Bergstrom return 0x40 + id * REGISTER_STRIDE; 657ede0b0bSTerje Bergstrom } 667ede0b0bSTerje Bergstrom #define HOST1X_SYNC_SYNCPT_THRESH_CPU0_INT_STATUS(id) \ 677ede0b0bSTerje Bergstrom host1x_sync_syncpt_thresh_cpu0_int_status_r(id) 687ede0b0bSTerje Bergstrom static inline u32 host1x_sync_syncpt_thresh_int_disable_r(unsigned int id) 697ede0b0bSTerje Bergstrom { 707ede0b0bSTerje Bergstrom return 0x60 + id * REGISTER_STRIDE; 717ede0b0bSTerje Bergstrom } 727ede0b0bSTerje Bergstrom #define HOST1X_SYNC_SYNCPT_THRESH_INT_DISABLE(id) \ 737ede0b0bSTerje Bergstrom host1x_sync_syncpt_thresh_int_disable_r(id) 747ede0b0bSTerje Bergstrom static inline u32 host1x_sync_syncpt_thresh_int_enable_cpu0_r(unsigned int id) 757ede0b0bSTerje Bergstrom { 767ede0b0bSTerje Bergstrom return 0x68 + id * REGISTER_STRIDE; 777ede0b0bSTerje Bergstrom } 787ede0b0bSTerje Bergstrom #define HOST1X_SYNC_SYNCPT_THRESH_INT_ENABLE_CPU0(id) \ 797ede0b0bSTerje Bergstrom host1x_sync_syncpt_thresh_int_enable_cpu0_r(id) 806579324aSTerje Bergstrom static inline u32 host1x_sync_cmdproc_stop_r(void) 816579324aSTerje Bergstrom { 826579324aSTerje Bergstrom return 0xac; 836579324aSTerje Bergstrom } 846579324aSTerje Bergstrom #define HOST1X_SYNC_CMDPROC_STOP \ 856579324aSTerje Bergstrom host1x_sync_cmdproc_stop_r() 866579324aSTerje Bergstrom static inline u32 host1x_sync_ch_teardown_r(void) 876579324aSTerje Bergstrom { 886579324aSTerje Bergstrom return 0xb0; 896579324aSTerje Bergstrom } 906579324aSTerje Bergstrom #define HOST1X_SYNC_CH_TEARDOWN \ 916579324aSTerje Bergstrom host1x_sync_ch_teardown_r() 927ede0b0bSTerje Bergstrom static inline u32 host1x_sync_usec_clk_r(void) 937ede0b0bSTerje Bergstrom { 947ede0b0bSTerje Bergstrom return 0x1a4; 957ede0b0bSTerje Bergstrom } 967ede0b0bSTerje Bergstrom #define HOST1X_SYNC_USEC_CLK \ 977ede0b0bSTerje Bergstrom host1x_sync_usec_clk_r() 987ede0b0bSTerje Bergstrom static inline u32 host1x_sync_ctxsw_timeout_cfg_r(void) 997ede0b0bSTerje Bergstrom { 1007ede0b0bSTerje Bergstrom return 0x1a8; 1017ede0b0bSTerje Bergstrom } 1027ede0b0bSTerje Bergstrom #define HOST1X_SYNC_CTXSW_TIMEOUT_CFG \ 1037ede0b0bSTerje Bergstrom host1x_sync_ctxsw_timeout_cfg_r() 1047ede0b0bSTerje Bergstrom static inline u32 host1x_sync_ip_busy_timeout_r(void) 1057ede0b0bSTerje Bergstrom { 1067ede0b0bSTerje Bergstrom return 0x1bc; 1077ede0b0bSTerje Bergstrom } 1087ede0b0bSTerje Bergstrom #define HOST1X_SYNC_IP_BUSY_TIMEOUT \ 1097ede0b0bSTerje Bergstrom host1x_sync_ip_busy_timeout_r() 1107ede0b0bSTerje Bergstrom static inline u32 host1x_sync_syncpt_int_thresh_r(unsigned int id) 1117ede0b0bSTerje Bergstrom { 1127ede0b0bSTerje Bergstrom return 0x500 + id * REGISTER_STRIDE; 1137ede0b0bSTerje Bergstrom } 1147ede0b0bSTerje Bergstrom #define HOST1X_SYNC_SYNCPT_INT_THRESH(id) \ 1157ede0b0bSTerje Bergstrom host1x_sync_syncpt_int_thresh_r(id) 11675471687STerje Bergstrom static inline u32 host1x_sync_syncpt_base_r(unsigned int id) 11775471687STerje Bergstrom { 11875471687STerje Bergstrom return 0x600 + id * REGISTER_STRIDE; 11975471687STerje Bergstrom } 12075471687STerje Bergstrom #define HOST1X_SYNC_SYNCPT_BASE(id) \ 12175471687STerje Bergstrom host1x_sync_syncpt_base_r(id) 12275471687STerje Bergstrom static inline u32 host1x_sync_syncpt_cpu_incr_r(unsigned int id) 12375471687STerje Bergstrom { 12475471687STerje Bergstrom return 0x700 + id * REGISTER_STRIDE; 12575471687STerje Bergstrom } 12675471687STerje Bergstrom #define HOST1X_SYNC_SYNCPT_CPU_INCR(id) \ 12775471687STerje Bergstrom host1x_sync_syncpt_cpu_incr_r(id) 12875471687STerje Bergstrom #endif /* __hw_host1x01_sync_h__ */ 129