aboutsummaryrefslogtreecommitdiffstats
path: root/arch/mips/include/asm/octeon/cvmx-pow.h
diff options
context:
space:
mode:
Diffstat (limited to 'arch/mips/include/asm/octeon/cvmx-pow.h')
-rw-r--r--arch/mips/include/asm/octeon/cvmx-pow.h122
1 files changed, 61 insertions, 61 deletions
diff --git a/arch/mips/include/asm/octeon/cvmx-pow.h b/arch/mips/include/asm/octeon/cvmx-pow.h
index 92742b241a51..4b4d0ecfd9eb 100644
--- a/arch/mips/include/asm/octeon/cvmx-pow.h
+++ b/arch/mips/include/asm/octeon/cvmx-pow.h
@@ -70,7 +70,7 @@ enum cvmx_pow_tag_type {
70 * The work queue entry from the order - NEVER tag switch from 70 * The work queue entry from the order - NEVER tag switch from
71 * NULL to NULL 71 * NULL to NULL
72 */ 72 */
73 CVMX_POW_TAG_TYPE_NULL = 2L, 73 CVMX_POW_TAG_TYPE_NULL = 2L,
74 /* A tag switch to NULL, and there is no space reserved in POW 74 /* A tag switch to NULL, and there is no space reserved in POW
75 * - NEVER tag switch to NULL_NULL 75 * - NEVER tag switch to NULL_NULL
76 * - NEVER tag switch from NULL_NULL 76 * - NEVER tag switch from NULL_NULL
@@ -90,7 +90,7 @@ typedef enum {
90} cvmx_pow_wait_t; 90} cvmx_pow_wait_t;
91 91
92/** 92/**
93 * POW tag operations. These are used in the data stored to the POW. 93 * POW tag operations. These are used in the data stored to the POW.
94 */ 94 */
95typedef enum { 95typedef enum {
96 /* 96 /*
@@ -341,14 +341,14 @@ typedef union {
341 * lists. The two memory-input queue lists associated 341 * lists. The two memory-input queue lists associated
342 * with each QOS level are: 342 * with each QOS level are:
343 * 343 *
344 * - qosgrp = 0, qosgrp = 8: QOS0 344 * - qosgrp = 0, qosgrp = 8: QOS0
345 * - qosgrp = 1, qosgrp = 9: QOS1 345 * - qosgrp = 1, qosgrp = 9: QOS1
346 * - qosgrp = 2, qosgrp = 10: QOS2 346 * - qosgrp = 2, qosgrp = 10: QOS2
347 * - qosgrp = 3, qosgrp = 11: QOS3 347 * - qosgrp = 3, qosgrp = 11: QOS3
348 * - qosgrp = 4, qosgrp = 12: QOS4 348 * - qosgrp = 4, qosgrp = 12: QOS4
349 * - qosgrp = 5, qosgrp = 13: QOS5 349 * - qosgrp = 5, qosgrp = 13: QOS5
350 * - qosgrp = 6, qosgrp = 14: QOS6 350 * - qosgrp = 6, qosgrp = 14: QOS6
351 * - qosgrp = 7, qosgrp = 15: QOS7 351 * - qosgrp = 7, qosgrp = 15: QOS7
352 */ 352 */
353 uint64_t qosgrp:4; 353 uint64_t qosgrp:4;
354 /* 354 /*
@@ -942,11 +942,11 @@ typedef union {
942 * operations. 942 * operations.
943 * 943 *
944 * NOTE: The following is the behavior of the pending switch bit at the PP 944 * NOTE: The following is the behavior of the pending switch bit at the PP
945 * for POW stores (i.e. when did<7:3> == 0xc) 945 * for POW stores (i.e. when did<7:3> == 0xc)
946 * - did<2:0> == 0 => pending switch bit is set 946 * - did<2:0> == 0 => pending switch bit is set
947 * - did<2:0> == 1 => no affect on the pending switch bit 947 * - did<2:0> == 1 => no affect on the pending switch bit
948 * - did<2:0> == 3 => pending switch bit is cleared 948 * - did<2:0> == 3 => pending switch bit is cleared
949 * - did<2:0> == 7 => no affect on the pending switch bit 949 * - did<2:0> == 7 => no affect on the pending switch bit
950 * - did<2:0> == others => must not be used 950 * - did<2:0> == others => must not be used
951 * - No other loads/stores have an affect on the pending switch bit 951 * - No other loads/stores have an affect on the pending switch bit
952 * - The switch bus from POW can clear the pending switch bit 952 * - The switch bus from POW can clear the pending switch bit
@@ -1053,7 +1053,7 @@ static inline cvmx_wqe_t *cvmx_pow_get_current_wqp(void)
1053} 1053}
1054 1054
1055#ifndef CVMX_MF_CHORD 1055#ifndef CVMX_MF_CHORD
1056#define CVMX_MF_CHORD(dest) CVMX_RDHWR(dest, 30) 1056#define CVMX_MF_CHORD(dest) CVMX_RDHWR(dest, 30)
1057#endif 1057#endif
1058 1058
1059/** 1059/**
@@ -1097,7 +1097,7 @@ static inline void cvmx_pow_tag_sw_wait(void)
1097 * so the caller must ensure that there is not a pending tag switch. 1097 * so the caller must ensure that there is not a pending tag switch.
1098 * 1098 *
1099 * @wait: When set, call stalls until work becomes avaiable, or times out. 1099 * @wait: When set, call stalls until work becomes avaiable, or times out.
1100 * If not set, returns immediately. 1100 * If not set, returns immediately.
1101 * 1101 *
1102 * Returns Returns the WQE pointer from POW. Returns NULL if no work 1102 * Returns Returns the WQE pointer from POW. Returns NULL if no work
1103 * was available. 1103 * was available.
@@ -1131,7 +1131,7 @@ static inline cvmx_wqe_t *cvmx_pow_work_request_sync_nocheck(cvmx_pow_wait_t
1131 * requesting the new work. 1131 * requesting the new work.
1132 * 1132 *
1133 * @wait: When set, call stalls until work becomes avaiable, or times out. 1133 * @wait: When set, call stalls until work becomes avaiable, or times out.
1134 * If not set, returns immediately. 1134 * If not set, returns immediately.
1135 * 1135 *
1136 * Returns Returns the WQE pointer from POW. Returns NULL if no work 1136 * Returns Returns the WQE pointer from POW. Returns NULL if no work
1137 * was available. 1137 * was available.
@@ -1148,7 +1148,7 @@ static inline cvmx_wqe_t *cvmx_pow_work_request_sync(cvmx_pow_wait_t wait)
1148} 1148}
1149 1149
1150/** 1150/**
1151 * Synchronous null_rd request. Requests a switch out of NULL_NULL POW state. 1151 * Synchronous null_rd request. Requests a switch out of NULL_NULL POW state.
1152 * This function waits for any previous tag switch to complete before 1152 * This function waits for any previous tag switch to complete before
1153 * requesting the null_rd. 1153 * requesting the null_rd.
1154 * 1154 *
@@ -1183,11 +1183,11 @@ static inline enum cvmx_pow_tag_type cvmx_pow_work_request_null_rd(void)
1183 * there is not a pending tag switch. 1183 * there is not a pending tag switch.
1184 * 1184 *
1185 * @scr_addr: Scratch memory address that response will be returned 1185 * @scr_addr: Scratch memory address that response will be returned
1186 * to, which is either a valid WQE, or a response with the 1186 * to, which is either a valid WQE, or a response with the
1187 * invalid bit set. Byte address, must be 8 byte aligned. 1187 * invalid bit set. Byte address, must be 8 byte aligned.
1188 * 1188 *
1189 * @wait: 1 to cause response to wait for work to become available (or 1189 * @wait: 1 to cause response to wait for work to become available (or
1190 * timeout), 0 to cause response to return immediately 1190 * timeout), 0 to cause response to return immediately
1191 */ 1191 */
1192static inline void cvmx_pow_work_request_async_nocheck(int scr_addr, 1192static inline void cvmx_pow_work_request_async_nocheck(int scr_addr,
1193 cvmx_pow_wait_t wait) 1193 cvmx_pow_wait_t wait)
@@ -1212,11 +1212,11 @@ static inline void cvmx_pow_work_request_async_nocheck(int scr_addr,
1212 * tag switch to complete before requesting the new work. 1212 * tag switch to complete before requesting the new work.
1213 * 1213 *
1214 * @scr_addr: Scratch memory address that response will be returned 1214 * @scr_addr: Scratch memory address that response will be returned
1215 * to, which is either a valid WQE, or a response with the 1215 * to, which is either a valid WQE, or a response with the
1216 * invalid bit set. Byte address, must be 8 byte aligned. 1216 * invalid bit set. Byte address, must be 8 byte aligned.
1217 * 1217 *
1218 * @wait: 1 to cause response to wait for work to become available (or 1218 * @wait: 1 to cause response to wait for work to become available (or
1219 * timeout), 0 to cause response to return immediately 1219 * timeout), 0 to cause response to return immediately
1220 */ 1220 */
1221static inline void cvmx_pow_work_request_async(int scr_addr, 1221static inline void cvmx_pow_work_request_async(int scr_addr,
1222 cvmx_pow_wait_t wait) 1222 cvmx_pow_wait_t wait)
@@ -1234,7 +1234,7 @@ static inline void cvmx_pow_work_request_async(int scr_addr,
1234 * to wait for the response. 1234 * to wait for the response.
1235 * 1235 *
1236 * @scr_addr: Scratch memory address to get result from Byte address, 1236 * @scr_addr: Scratch memory address to get result from Byte address,
1237 * must be 8 byte aligned. 1237 * must be 8 byte aligned.
1238 * 1238 *
1239 * Returns Returns the WQE from the scratch register, or NULL if no 1239 * Returns Returns the WQE from the scratch register, or NULL if no
1240 * work was available. 1240 * work was available.
@@ -1260,7 +1260,7 @@ static inline cvmx_wqe_t *cvmx_pow_work_response_async(int scr_addr)
1260 * @wqe_ptr: pointer to a work queue entry returned by the POW 1260 * @wqe_ptr: pointer to a work queue entry returned by the POW
1261 * 1261 *
1262 * Returns 0 if pointer is valid 1262 * Returns 0 if pointer is valid
1263 * 1 if invalid (no work was returned) 1263 * 1 if invalid (no work was returned)
1264 */ 1264 */
1265static inline uint64_t cvmx_pow_work_invalid(cvmx_wqe_t *wqe_ptr) 1265static inline uint64_t cvmx_pow_work_invalid(cvmx_wqe_t *wqe_ptr)
1266{ 1266{
@@ -1314,7 +1314,7 @@ static inline void cvmx_pow_tag_sw_nocheck(uint32_t tag,
1314 /* 1314 /*
1315 * Note that WQE in DRAM is not updated here, as the POW does 1315 * Note that WQE in DRAM is not updated here, as the POW does
1316 * not read from DRAM once the WQE is in flight. See hardware 1316 * not read from DRAM once the WQE is in flight. See hardware
1317 * manual for complete details. It is the application's 1317 * manual for complete details. It is the application's
1318 * responsibility to keep track of the current tag value if 1318 * responsibility to keep track of the current tag value if
1319 * that is important. 1319 * that is important.
1320 */ 1320 */
@@ -1361,7 +1361,7 @@ static inline void cvmx_pow_tag_sw(uint32_t tag,
1361 /* 1361 /*
1362 * Note that WQE in DRAM is not updated here, as the POW does 1362 * Note that WQE in DRAM is not updated here, as the POW does
1363 * not read from DRAM once the WQE is in flight. See hardware 1363 * not read from DRAM once the WQE is in flight. See hardware
1364 * manual for complete details. It is the application's 1364 * manual for complete details. It is the application's
1365 * responsibility to keep track of the current tag value if 1365 * responsibility to keep track of the current tag value if
1366 * that is important. 1366 * that is important.
1367 */ 1367 */
@@ -1390,7 +1390,7 @@ static inline void cvmx_pow_tag_sw(uint32_t tag,
1390 * previous tag switch has completed. 1390 * previous tag switch has completed.
1391 * 1391 *
1392 * @wqp: pointer to work queue entry to submit. This entry is 1392 * @wqp: pointer to work queue entry to submit. This entry is
1393 * updated to match the other parameters 1393 * updated to match the other parameters
1394 * @tag: tag value to be assigned to work queue entry 1394 * @tag: tag value to be assigned to work queue entry
1395 * @tag_type: type of tag 1395 * @tag_type: type of tag
1396 * @group: group value for the work queue entry. 1396 * @group: group value for the work queue entry.
@@ -1429,7 +1429,7 @@ static inline void cvmx_pow_tag_sw_full_nocheck(cvmx_wqe_t *wqp, uint32_t tag,
1429 /* 1429 /*
1430 * Note that WQE in DRAM is not updated here, as the POW does 1430 * Note that WQE in DRAM is not updated here, as the POW does
1431 * not read from DRAM once the WQE is in flight. See hardware 1431 * not read from DRAM once the WQE is in flight. See hardware
1432 * manual for complete details. It is the application's 1432 * manual for complete details. It is the application's
1433 * responsibility to keep track of the current tag value if 1433 * responsibility to keep track of the current tag value if
1434 * that is important. 1434 * that is important.
1435 */ 1435 */
@@ -1468,10 +1468,10 @@ static inline void cvmx_pow_tag_sw_full_nocheck(cvmx_wqe_t *wqp, uint32_t tag,
1468 * before requesting the tag switch. 1468 * before requesting the tag switch.
1469 * 1469 *
1470 * @wqp: pointer to work queue entry to submit. This entry is updated 1470 * @wqp: pointer to work queue entry to submit. This entry is updated
1471 * to match the other parameters 1471 * to match the other parameters
1472 * @tag: tag value to be assigned to work queue entry 1472 * @tag: tag value to be assigned to work queue entry
1473 * @tag_type: type of tag 1473 * @tag_type: type of tag
1474 * @group: group value for the work queue entry. 1474 * @group: group value for the work queue entry.
1475 */ 1475 */
1476static inline void cvmx_pow_tag_sw_full(cvmx_wqe_t *wqp, uint32_t tag, 1476static inline void cvmx_pow_tag_sw_full(cvmx_wqe_t *wqp, uint32_t tag,
1477 enum cvmx_pow_tag_type tag_type, 1477 enum cvmx_pow_tag_type tag_type,
@@ -1560,7 +1560,7 @@ static inline void cvmx_pow_tag_sw_null(void)
1560 * unrelated to the tag that the core currently holds. 1560 * unrelated to the tag that the core currently holds.
1561 * 1561 *
1562 * @wqp: pointer to work queue entry to submit. This entry is 1562 * @wqp: pointer to work queue entry to submit. This entry is
1563 * updated to match the other parameters 1563 * updated to match the other parameters
1564 * @tag: tag value to be assigned to work queue entry 1564 * @tag: tag value to be assigned to work queue entry
1565 * @tag_type: type of tag 1565 * @tag_type: type of tag
1566 * @qos: Input queue to add to. 1566 * @qos: Input queue to add to.
@@ -1592,7 +1592,7 @@ static inline void cvmx_pow_work_submit(cvmx_wqe_t *wqp, uint32_t tag,
1592 ptr.sio.offset = cvmx_ptr_to_phys(wqp); 1592 ptr.sio.offset = cvmx_ptr_to_phys(wqp);
1593 1593
1594 /* 1594 /*
1595 * SYNC write to memory before the work submit. This is 1595 * SYNC write to memory before the work submit. This is
1596 * necessary as POW may read values from DRAM at this time. 1596 * necessary as POW may read values from DRAM at this time.
1597 */ 1597 */
1598 CVMX_SYNCWS; 1598 CVMX_SYNCWS;
@@ -1604,11 +1604,11 @@ static inline void cvmx_pow_work_submit(cvmx_wqe_t *wqp, uint32_t tag,
1604 * indicates which groups each core will accept work from. There are 1604 * indicates which groups each core will accept work from. There are
1605 * 16 groups. 1605 * 16 groups.
1606 * 1606 *
1607 * @core_num: core to apply mask to 1607 * @core_num: core to apply mask to
1608 * @mask: Group mask. There are 16 groups, so only bits 0-15 are valid, 1608 * @mask: Group mask. There are 16 groups, so only bits 0-15 are valid,
1609 * representing groups 0-15. 1609 * representing groups 0-15.
1610 * Each 1 bit in the mask enables the core to accept work from 1610 * Each 1 bit in the mask enables the core to accept work from
1611 * the corresponding group. 1611 * the corresponding group.
1612 */ 1612 */
1613static inline void cvmx_pow_set_group_mask(uint64_t core_num, uint64_t mask) 1613static inline void cvmx_pow_set_group_mask(uint64_t core_num, uint64_t mask)
1614{ 1614{
@@ -1623,14 +1623,14 @@ static inline void cvmx_pow_set_group_mask(uint64_t core_num, uint64_t mask)
1623 * This function sets POW static priorities for a core. Each input queue has 1623 * This function sets POW static priorities for a core. Each input queue has
1624 * an associated priority value. 1624 * an associated priority value.
1625 * 1625 *
1626 * @core_num: core to apply priorities to 1626 * @core_num: core to apply priorities to
1627 * @priority: Vector of 8 priorities, one per POW Input Queue (0-7). 1627 * @priority: Vector of 8 priorities, one per POW Input Queue (0-7).
1628 * Highest priority is 0 and lowest is 7. A priority value 1628 * Highest priority is 0 and lowest is 7. A priority value
1629 * of 0xF instructs POW to skip the Input Queue when 1629 * of 0xF instructs POW to skip the Input Queue when
1630 * scheduling to this specific core. 1630 * scheduling to this specific core.
1631 * NOTE: priorities should not have gaps in values, meaning 1631 * NOTE: priorities should not have gaps in values, meaning
1632 * {0,1,1,1,1,1,1,1} is a valid configuration while 1632 * {0,1,1,1,1,1,1,1} is a valid configuration while
1633 * {0,2,2,2,2,2,2,2} is not. 1633 * {0,2,2,2,2,2,2,2} is not.
1634 */ 1634 */
1635static inline void cvmx_pow_set_priority(uint64_t core_num, 1635static inline void cvmx_pow_set_priority(uint64_t core_num,
1636 const uint8_t priority[]) 1636 const uint8_t priority[])
@@ -1708,8 +1708,8 @@ static inline void cvmx_pow_set_priority(uint64_t core_num,
1708 * @tag_type: New tag type 1708 * @tag_type: New tag type
1709 * @group: New group value 1709 * @group: New group value
1710 * @no_sched: Control whether this work queue entry will be rescheduled. 1710 * @no_sched: Control whether this work queue entry will be rescheduled.
1711 * - 1 : don't schedule this work 1711 * - 1 : don't schedule this work
1712 * - 0 : allow this work to be scheduled. 1712 * - 0 : allow this work to be scheduled.
1713 */ 1713 */
1714static inline void cvmx_pow_tag_sw_desched_nocheck( 1714static inline void cvmx_pow_tag_sw_desched_nocheck(
1715 uint32_t tag, 1715 uint32_t tag,
@@ -1794,8 +1794,8 @@ static inline void cvmx_pow_tag_sw_desched_nocheck(
1794 * @tag_type: New tag type 1794 * @tag_type: New tag type
1795 * @group: New group value 1795 * @group: New group value
1796 * @no_sched: Control whether this work queue entry will be rescheduled. 1796 * @no_sched: Control whether this work queue entry will be rescheduled.
1797 * - 1 : don't schedule this work 1797 * - 1 : don't schedule this work
1798 * - 0 : allow this work to be scheduled. 1798 * - 0 : allow this work to be scheduled.
1799 */ 1799 */
1800static inline void cvmx_pow_tag_sw_desched(uint32_t tag, 1800static inline void cvmx_pow_tag_sw_desched(uint32_t tag,
1801 enum cvmx_pow_tag_type tag_type, 1801 enum cvmx_pow_tag_type tag_type,
@@ -1819,8 +1819,8 @@ static inline void cvmx_pow_tag_sw_desched(uint32_t tag,
1819 * Descchedules the current work queue entry. 1819 * Descchedules the current work queue entry.
1820 * 1820 *
1821 * @no_sched: no schedule flag value to be set on the work queue 1821 * @no_sched: no schedule flag value to be set on the work queue
1822 * entry. If this is set the entry will not be 1822 * entry. If this is set the entry will not be
1823 * rescheduled. 1823 * rescheduled.
1824 */ 1824 */
1825static inline void cvmx_pow_desched(uint64_t no_sched) 1825static inline void cvmx_pow_desched(uint64_t no_sched)
1826{ 1826{
@@ -1863,7 +1863,7 @@ static inline void cvmx_pow_desched(uint64_t no_sched)
1863*****************************************************/ 1863*****************************************************/
1864 1864
1865/* 1865/*
1866 * Number of bits of the tag used by software. The SW bits are always 1866 * Number of bits of the tag used by software. The SW bits are always
1867 * a contiguous block of the high starting at bit 31. The hardware 1867 * a contiguous block of the high starting at bit 31. The hardware
1868 * bits are always the low bits. By default, the top 8 bits of the 1868 * bits are always the low bits. By default, the top 8 bits of the
1869 * tag are reserved for software, and the low 24 are set by the IPD 1869 * tag are reserved for software, and the low 24 are set by the IPD
@@ -1890,7 +1890,7 @@ static inline void cvmx_pow_desched(uint64_t no_sched)
1890 * are defined here. 1890 * are defined here.
1891 */ 1891 */
1892/* Mask for the value portion of the tag */ 1892/* Mask for the value portion of the tag */
1893#define CVMX_TAG_SUBGROUP_MASK 0xFFFF 1893#define CVMX_TAG_SUBGROUP_MASK 0xFFFF
1894#define CVMX_TAG_SUBGROUP_SHIFT 16 1894#define CVMX_TAG_SUBGROUP_SHIFT 16
1895#define CVMX_TAG_SUBGROUP_PKO 0x1 1895#define CVMX_TAG_SUBGROUP_PKO 0x1
1896 1896
@@ -1905,12 +1905,12 @@ static inline void cvmx_pow_desched(uint64_t no_sched)
1905 * This function creates a 32 bit tag value from the two values provided. 1905 * This function creates a 32 bit tag value from the two values provided.
1906 * 1906 *
1907 * @sw_bits: The upper bits (number depends on configuration) are set 1907 * @sw_bits: The upper bits (number depends on configuration) are set
1908 * to this value. The remainder of bits are set by the 1908 * to this value. The remainder of bits are set by the
1909 * hw_bits parameter. 1909 * hw_bits parameter.
1910 * 1910 *
1911 * @hw_bits: The lower bits (number depends on configuration) are set 1911 * @hw_bits: The lower bits (number depends on configuration) are set
1912 * to this value. The remainder of bits are set by the 1912 * to this value. The remainder of bits are set by the
1913 * sw_bits parameter. 1913 * sw_bits parameter.
1914 * 1914 *
1915 * Returns 32 bit value of the combined hw and sw bits. 1915 * Returns 32 bit value of the combined hw and sw bits.
1916 */ 1916 */
@@ -1957,7 +1957,7 @@ static inline uint32_t cvmx_pow_tag_get_hw_bits(uint64_t tag)
1957 * 1957 *
1958 * @buffer: Buffer to store capture into 1958 * @buffer: Buffer to store capture into
1959 * @buffer_size: 1959 * @buffer_size:
1960 * The size of the supplied buffer 1960 * The size of the supplied buffer
1961 * 1961 *
1962 * Returns Zero on success, negative on failure 1962 * Returns Zero on success, negative on failure
1963 */ 1963 */
@@ -1968,7 +1968,7 @@ extern int cvmx_pow_capture(void *buffer, int buffer_size);
1968 * 1968 *
1969 * @buffer: POW capture from cvmx_pow_capture() 1969 * @buffer: POW capture from cvmx_pow_capture()
1970 * @buffer_size: 1970 * @buffer_size:
1971 * Size of the buffer 1971 * Size of the buffer
1972 */ 1972 */
1973extern void cvmx_pow_display(void *buffer, int buffer_size); 1973extern void cvmx_pow_display(void *buffer, int buffer_size);
1974 1974