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