19952f691SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */ 2f1b53c4eSMikko Perttunen /* 3f1b53c4eSMikko Perttunen * Copyright (c) 2017 NVIDIA Corporation. 4f1b53c4eSMikko Perttunen */ 5f1b53c4eSMikko Perttunen 6f1b53c4eSMikko Perttunen /* 7f1b53c4eSMikko Perttunen * Function naming determines intended use: 8f1b53c4eSMikko Perttunen * 9f1b53c4eSMikko Perttunen * <x>_r(void) : Returns the offset for register <x>. 10f1b53c4eSMikko Perttunen * 11f1b53c4eSMikko Perttunen * <x>_w(void) : Returns the word offset for word (4 byte) element <x>. 12f1b53c4eSMikko Perttunen * 13f1b53c4eSMikko Perttunen * <x>_<y>_s(void) : Returns size of field <y> of register <x> in bits. 14f1b53c4eSMikko Perttunen * 15f1b53c4eSMikko Perttunen * <x>_<y>_f(u32 v) : Returns a value based on 'v' which has been shifted 16f1b53c4eSMikko Perttunen * and masked to place it at field <y> of register <x>. This value 17f1b53c4eSMikko Perttunen * can be |'d with others to produce a full register value for 18f1b53c4eSMikko Perttunen * register <x>. 19f1b53c4eSMikko Perttunen * 20f1b53c4eSMikko Perttunen * <x>_<y>_m(void) : Returns a mask for field <y> of register <x>. This 21f1b53c4eSMikko Perttunen * value can be ~'d and then &'d to clear the value of field <y> for 22f1b53c4eSMikko Perttunen * register <x>. 23f1b53c4eSMikko Perttunen * 24f1b53c4eSMikko Perttunen * <x>_<y>_<z>_f(void) : Returns the constant value <z> after being shifted 25f1b53c4eSMikko Perttunen * to place it at field <y> of register <x>. This value can be |'d 26f1b53c4eSMikko Perttunen * with others to produce a full register value for <x>. 27f1b53c4eSMikko Perttunen * 28f1b53c4eSMikko Perttunen * <x>_<y>_v(u32 r) : Returns the value of field <y> from a full register 29f1b53c4eSMikko Perttunen * <x> value 'r' after being shifted to place its LSB at bit 0. 30f1b53c4eSMikko Perttunen * This value is suitable for direct comparison with other unshifted 31f1b53c4eSMikko Perttunen * values appropriate for use in field <y> of register <x>. 32f1b53c4eSMikko Perttunen * 33f1b53c4eSMikko Perttunen * <x>_<y>_<z>_v(void) : Returns the constant value for <z> defined for 34f1b53c4eSMikko Perttunen * field <y> of register <x>. This value is suitable for direct 35f1b53c4eSMikko Perttunen * comparison with unshifted values appropriate for use in field <y> 36f1b53c4eSMikko Perttunen * of register <x>. 37f1b53c4eSMikko Perttunen */ 38f1b53c4eSMikko Perttunen 39f1b53c4eSMikko Perttunen #ifndef HOST1X_HW_HOST1X06_UCLASS_H 40f1b53c4eSMikko Perttunen #define HOST1X_HW_HOST1X06_UCLASS_H 41f1b53c4eSMikko Perttunen host1x_uclass_incr_syncpt_r(void)42f1b53c4eSMikko Perttunenstatic inline u32 host1x_uclass_incr_syncpt_r(void) 43f1b53c4eSMikko Perttunen { 44f1b53c4eSMikko Perttunen return 0x0; 45f1b53c4eSMikko Perttunen } 46f1b53c4eSMikko Perttunen #define HOST1X_UCLASS_INCR_SYNCPT \ 47f1b53c4eSMikko Perttunen host1x_uclass_incr_syncpt_r() host1x_uclass_incr_syncpt_cond_f(u32 v)48f1b53c4eSMikko Perttunenstatic inline u32 host1x_uclass_incr_syncpt_cond_f(u32 v) 49f1b53c4eSMikko Perttunen { 502fc777baSThierry Reding return (v & 0xff) << 10; 51f1b53c4eSMikko Perttunen } 52f1b53c4eSMikko Perttunen #define HOST1X_UCLASS_INCR_SYNCPT_COND_F(v) \ 53f1b53c4eSMikko Perttunen host1x_uclass_incr_syncpt_cond_f(v) host1x_uclass_incr_syncpt_indx_f(u32 v)54f1b53c4eSMikko Perttunenstatic inline u32 host1x_uclass_incr_syncpt_indx_f(u32 v) 55f1b53c4eSMikko Perttunen { 56*79aad29cSMikko Perttunen return (v & 0x3ff) << 0; 57f1b53c4eSMikko Perttunen } 58f1b53c4eSMikko Perttunen #define HOST1X_UCLASS_INCR_SYNCPT_INDX_F(v) \ 59f1b53c4eSMikko Perttunen host1x_uclass_incr_syncpt_indx_f(v) host1x_uclass_wait_syncpt_r(void)60f1b53c4eSMikko Perttunenstatic inline u32 host1x_uclass_wait_syncpt_r(void) 61f1b53c4eSMikko Perttunen { 62f1b53c4eSMikko Perttunen return 0x8; 63f1b53c4eSMikko Perttunen } 64f1b53c4eSMikko Perttunen #define HOST1X_UCLASS_WAIT_SYNCPT \ 65f1b53c4eSMikko Perttunen host1x_uclass_wait_syncpt_r() host1x_uclass_wait_syncpt_indx_f(u32 v)66f1b53c4eSMikko Perttunenstatic inline u32 host1x_uclass_wait_syncpt_indx_f(u32 v) 67f1b53c4eSMikko Perttunen { 68f1b53c4eSMikko Perttunen return (v & 0xff) << 24; 69f1b53c4eSMikko Perttunen } 70f1b53c4eSMikko Perttunen #define HOST1X_UCLASS_WAIT_SYNCPT_INDX_F(v) \ 71f1b53c4eSMikko Perttunen host1x_uclass_wait_syncpt_indx_f(v) host1x_uclass_wait_syncpt_thresh_f(u32 v)72f1b53c4eSMikko Perttunenstatic inline u32 host1x_uclass_wait_syncpt_thresh_f(u32 v) 73f1b53c4eSMikko Perttunen { 74f1b53c4eSMikko Perttunen return (v & 0xffffff) << 0; 75f1b53c4eSMikko Perttunen } 76f1b53c4eSMikko Perttunen #define HOST1X_UCLASS_WAIT_SYNCPT_THRESH_F(v) \ 77f1b53c4eSMikko Perttunen host1x_uclass_wait_syncpt_thresh_f(v) host1x_uclass_wait_syncpt_base_r(void)78f1b53c4eSMikko Perttunenstatic inline u32 host1x_uclass_wait_syncpt_base_r(void) 79f1b53c4eSMikko Perttunen { 80f1b53c4eSMikko Perttunen return 0x9; 81f1b53c4eSMikko Perttunen } 82f1b53c4eSMikko Perttunen #define HOST1X_UCLASS_WAIT_SYNCPT_BASE \ 83f1b53c4eSMikko Perttunen host1x_uclass_wait_syncpt_base_r() host1x_uclass_wait_syncpt_base_indx_f(u32 v)84f1b53c4eSMikko Perttunenstatic inline u32 host1x_uclass_wait_syncpt_base_indx_f(u32 v) 85f1b53c4eSMikko Perttunen { 86f1b53c4eSMikko Perttunen return (v & 0xff) << 24; 87f1b53c4eSMikko Perttunen } 88f1b53c4eSMikko Perttunen #define HOST1X_UCLASS_WAIT_SYNCPT_BASE_INDX_F(v) \ 89f1b53c4eSMikko Perttunen host1x_uclass_wait_syncpt_base_indx_f(v) host1x_uclass_wait_syncpt_base_base_indx_f(u32 v)90f1b53c4eSMikko Perttunenstatic inline u32 host1x_uclass_wait_syncpt_base_base_indx_f(u32 v) 91f1b53c4eSMikko Perttunen { 92f1b53c4eSMikko Perttunen return (v & 0xff) << 16; 93f1b53c4eSMikko Perttunen } 94f1b53c4eSMikko Perttunen #define HOST1X_UCLASS_WAIT_SYNCPT_BASE_BASE_INDX_F(v) \ 95f1b53c4eSMikko Perttunen host1x_uclass_wait_syncpt_base_base_indx_f(v) host1x_uclass_wait_syncpt_base_offset_f(u32 v)96f1b53c4eSMikko Perttunenstatic inline u32 host1x_uclass_wait_syncpt_base_offset_f(u32 v) 97f1b53c4eSMikko Perttunen { 98f1b53c4eSMikko Perttunen return (v & 0xffff) << 0; 99f1b53c4eSMikko Perttunen } 100f1b53c4eSMikko Perttunen #define HOST1X_UCLASS_WAIT_SYNCPT_BASE_OFFSET_F(v) \ 101f1b53c4eSMikko Perttunen host1x_uclass_wait_syncpt_base_offset_f(v) host1x_uclass_load_syncpt_base_r(void)102f1b53c4eSMikko Perttunenstatic inline u32 host1x_uclass_load_syncpt_base_r(void) 103f1b53c4eSMikko Perttunen { 104f1b53c4eSMikko Perttunen return 0xb; 105f1b53c4eSMikko Perttunen } 106f1b53c4eSMikko Perttunen #define HOST1X_UCLASS_LOAD_SYNCPT_BASE \ 107f1b53c4eSMikko Perttunen host1x_uclass_load_syncpt_base_r() host1x_uclass_load_syncpt_base_base_indx_f(u32 v)108f1b53c4eSMikko Perttunenstatic inline u32 host1x_uclass_load_syncpt_base_base_indx_f(u32 v) 109f1b53c4eSMikko Perttunen { 110f1b53c4eSMikko Perttunen return (v & 0xff) << 24; 111f1b53c4eSMikko Perttunen } 112f1b53c4eSMikko Perttunen #define HOST1X_UCLASS_LOAD_SYNCPT_BASE_BASE_INDX_F(v) \ 113f1b53c4eSMikko Perttunen host1x_uclass_load_syncpt_base_base_indx_f(v) host1x_uclass_load_syncpt_base_value_f(u32 v)114f1b53c4eSMikko Perttunenstatic inline u32 host1x_uclass_load_syncpt_base_value_f(u32 v) 115f1b53c4eSMikko Perttunen { 116f1b53c4eSMikko Perttunen return (v & 0xffffff) << 0; 117f1b53c4eSMikko Perttunen } 118f1b53c4eSMikko Perttunen #define HOST1X_UCLASS_LOAD_SYNCPT_BASE_VALUE_F(v) \ 119f1b53c4eSMikko Perttunen host1x_uclass_load_syncpt_base_value_f(v) host1x_uclass_incr_syncpt_base_base_indx_f(u32 v)120f1b53c4eSMikko Perttunenstatic inline u32 host1x_uclass_incr_syncpt_base_base_indx_f(u32 v) 121f1b53c4eSMikko Perttunen { 122f1b53c4eSMikko Perttunen return (v & 0xff) << 24; 123f1b53c4eSMikko Perttunen } 124f1b53c4eSMikko Perttunen #define HOST1X_UCLASS_INCR_SYNCPT_BASE_BASE_INDX_F(v) \ 125f1b53c4eSMikko Perttunen host1x_uclass_incr_syncpt_base_base_indx_f(v) host1x_uclass_incr_syncpt_base_offset_f(u32 v)126f1b53c4eSMikko Perttunenstatic inline u32 host1x_uclass_incr_syncpt_base_offset_f(u32 v) 127f1b53c4eSMikko Perttunen { 128f1b53c4eSMikko Perttunen return (v & 0xffffff) << 0; 129f1b53c4eSMikko Perttunen } 130f1b53c4eSMikko Perttunen #define HOST1X_UCLASS_INCR_SYNCPT_BASE_OFFSET_F(v) \ 131f1b53c4eSMikko Perttunen host1x_uclass_incr_syncpt_base_offset_f(v) host1x_uclass_indoff_r(void)132f1b53c4eSMikko Perttunenstatic inline u32 host1x_uclass_indoff_r(void) 133f1b53c4eSMikko Perttunen { 134f1b53c4eSMikko Perttunen return 0x2d; 135f1b53c4eSMikko Perttunen } 136f1b53c4eSMikko Perttunen #define HOST1X_UCLASS_INDOFF \ 137f1b53c4eSMikko Perttunen host1x_uclass_indoff_r() host1x_uclass_indoff_indbe_f(u32 v)138f1b53c4eSMikko Perttunenstatic inline u32 host1x_uclass_indoff_indbe_f(u32 v) 139f1b53c4eSMikko Perttunen { 140f1b53c4eSMikko Perttunen return (v & 0xf) << 28; 141f1b53c4eSMikko Perttunen } 142f1b53c4eSMikko Perttunen #define HOST1X_UCLASS_INDOFF_INDBE_F(v) \ 143f1b53c4eSMikko Perttunen host1x_uclass_indoff_indbe_f(v) host1x_uclass_indoff_autoinc_f(u32 v)144f1b53c4eSMikko Perttunenstatic inline u32 host1x_uclass_indoff_autoinc_f(u32 v) 145f1b53c4eSMikko Perttunen { 146f1b53c4eSMikko Perttunen return (v & 0x1) << 27; 147f1b53c4eSMikko Perttunen } 148f1b53c4eSMikko Perttunen #define HOST1X_UCLASS_INDOFF_AUTOINC_F(v) \ 149f1b53c4eSMikko Perttunen host1x_uclass_indoff_autoinc_f(v) host1x_uclass_indoff_indmodid_f(u32 v)150f1b53c4eSMikko Perttunenstatic inline u32 host1x_uclass_indoff_indmodid_f(u32 v) 151f1b53c4eSMikko Perttunen { 152f1b53c4eSMikko Perttunen return (v & 0xff) << 18; 153f1b53c4eSMikko Perttunen } 154f1b53c4eSMikko Perttunen #define HOST1X_UCLASS_INDOFF_INDMODID_F(v) \ 155f1b53c4eSMikko Perttunen host1x_uclass_indoff_indmodid_f(v) host1x_uclass_indoff_indroffset_f(u32 v)156f1b53c4eSMikko Perttunenstatic inline u32 host1x_uclass_indoff_indroffset_f(u32 v) 157f1b53c4eSMikko Perttunen { 158f1b53c4eSMikko Perttunen return (v & 0xffff) << 2; 159f1b53c4eSMikko Perttunen } 160f1b53c4eSMikko Perttunen #define HOST1X_UCLASS_INDOFF_INDROFFSET_F(v) \ 161f1b53c4eSMikko Perttunen host1x_uclass_indoff_indroffset_f(v) host1x_uclass_indoff_rwn_read_v(void)162f1b53c4eSMikko Perttunenstatic inline u32 host1x_uclass_indoff_rwn_read_v(void) 163f1b53c4eSMikko Perttunen { 164f1b53c4eSMikko Perttunen return 1; 165f1b53c4eSMikko Perttunen } 166f1b53c4eSMikko Perttunen #define HOST1X_UCLASS_INDOFF_INDROFFSET_F(v) \ 167f1b53c4eSMikko Perttunen host1x_uclass_indoff_indroffset_f(v) host1x_uclass_load_syncpt_payload_32_r(void)168e902585fSMikko Perttunenstatic inline u32 host1x_uclass_load_syncpt_payload_32_r(void) 169e902585fSMikko Perttunen { 170e902585fSMikko Perttunen return 0x4e; 171e902585fSMikko Perttunen } 172e902585fSMikko Perttunen #define HOST1X_UCLASS_LOAD_SYNCPT_PAYLOAD_32 \ 173e902585fSMikko Perttunen host1x_uclass_load_syncpt_payload_32_r() host1x_uclass_wait_syncpt_32_r(void)174e902585fSMikko Perttunenstatic inline u32 host1x_uclass_wait_syncpt_32_r(void) 175e902585fSMikko Perttunen { 176e902585fSMikko Perttunen return 0x50; 177e902585fSMikko Perttunen } 178e902585fSMikko Perttunen #define HOST1X_UCLASS_WAIT_SYNCPT_32 \ 179e902585fSMikko Perttunen host1x_uclass_wait_syncpt_32_r() 180f1b53c4eSMikko Perttunen 181f1b53c4eSMikko Perttunen #endif 182