diff --git a/arch/mips/mach-octeon/include/mach/bootoct_cmd.h b/arch/mips/mach-octeon/include/mach/bootoct_cmd.h
index 657698b..0e21b3a 100644
--- a/arch/mips/mach-octeon/include/mach/bootoct_cmd.h
+++ b/arch/mips/mach-octeon/include/mach/bootoct_cmd.h
@@ -42,7 +42,7 @@
  * @param cmd			command type
  * @param[out] boot_args	parsed values
  *
- * @return number of arguments parsed
+ * Return: number of arguments parsed
  */
 int octeon_parse_bootopts(int argc, char *const argv[],
 			  enum octeon_boot_cmd_type cmd,
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-bootmem.h b/arch/mips/mach-octeon/include/mach/cvmx-bootmem.h
index d60668c..283ac5c 100644
--- a/arch/mips/mach-octeon/include/mach/cvmx-bootmem.h
+++ b/arch/mips/mach-octeon/include/mach/cvmx-bootmem.h
@@ -128,7 +128,7 @@
  * @param size      Size in bytes of block to allocate
  * @param alignment Alignment required - must be power of 2
  *
- * @return pointer to block of memory, NULL on error
+ * Return: pointer to block of memory, NULL on error
  */
 void *cvmx_bootmem_alloc(u64 size, u64 alignment);
 
@@ -141,7 +141,7 @@
  * @param size  Size in bytes of block to allocate
  * @param alignment Alignment required - must be power of 2
  *
- * @return pointer to block of memory, NULL on error
+ * Return: pointer to block of memory, NULL on error
  */
 void *cvmx_bootmem_alloc_node(u64 node, u64 size, u64 alignment);
 
@@ -156,7 +156,7 @@
  * @param address   Physical address to allocate memory at.  If this
  *                  memory is not available, the allocation fails.
  * @param alignment Alignment required - must be power of 2
- * @return pointer to block of memory, NULL on error
+ * Return: pointer to block of memory, NULL on error
  */
 void *cvmx_bootmem_alloc_address(u64 size, u64 address,
 				 u64 alignment);
@@ -172,7 +172,7 @@
  * @param min_addr  defines the minimum address of the range
  * @param max_addr  defines the maximum address of the range
  * @param alignment Alignment required - must be power of 2
- * @return pointer to block of memory, NULL on error
+ * Return: pointer to block of memory, NULL on error
  */
 void *cvmx_bootmem_alloc_range(u64 size, u64 alignment,
 			       u64 min_addr, u64 max_addr);
@@ -187,7 +187,7 @@
  * @param alignment Alignment required - must be power of 2
  * @param name  name of block - must be less than CVMX_BOOTMEM_NAME_LEN bytes
  *
- * @return pointer to block of memory, NULL on error
+ * Return: pointer to block of memory, NULL on error
  */
 void *cvmx_bootmem_alloc_named(u64 size, u64 alignment,
 			       const char *name);
@@ -203,7 +203,7 @@
  * @param name name of block - must be less than CVMX_BOOTMEM_NAME_LEN bytes
  * @param flags     Flags to control options for the allocation.
  *
- * @return pointer to block of memory, NULL on error
+ * Return: pointer to block of memory, NULL on error
  */
 void *cvmx_bootmem_alloc_named_flags(u64 size, u64 alignment,
 				     const char *name, u32 flags);
@@ -219,7 +219,7 @@
  *                memory is not available, the allocation fails.
  * @param name    name of block - must be less than CVMX_BOOTMEM_NAME_LEN bytes
  *
- * @return pointer to block of memory, NULL on error
+ * Return: pointer to block of memory, NULL on error
  */
 void *cvmx_bootmem_alloc_named_address(u64 size, u64 address,
 				       const char *name);
@@ -238,7 +238,7 @@
  * @param align  Alignment of memory to be allocated. (must be a power of 2)
  * @param name   name of block - must be less than CVMX_BOOTMEM_NAME_LEN bytes
  *
- * @return pointer to block of memory, NULL on error
+ * Return: pointer to block of memory, NULL on error
  */
 void *cvmx_bootmem_alloc_named_range(u64 size, u64 min_addr,
 				     u64 max_addr, u64 align,
@@ -263,7 +263,7 @@
  * The initialization function is optional, if omitted the named block
  * is initialized to all zeros when it is created, i.e. once.
  *
- * @return pointer to block of memory, NULL on error
+ * Return: pointer to block of memory, NULL on error
  */
 void *cvmx_bootmem_alloc_named_range_once(u64 size,
 					  u64 min_addr,
@@ -282,7 +282,7 @@
  * @param name        Name to assign to reserved blocks
  * @param flags       Flags to use when reserving memory
  *
- * @return 0 on failure,
+ * Return: 0 on failure,
  *         !0 on success
  */
 int cvmx_bootmem_reserve_memory(u64 start_addr, u64 size,
@@ -293,7 +293,7 @@
  *
  * @param name   name of block to free
  *
- * @return 0 on failure,
+ * Return: 0 on failure,
  *         !0 on success
  */
 int cvmx_bootmem_free_named(const char *name);
@@ -303,7 +303,7 @@
  *
  * @param name   name of block to free
  *
- * @return pointer to named block descriptor on success
+ * Return: pointer to named block descriptor on success
  *         0 on failure
  */
 const struct cvmx_bootmem_named_block_desc *
@@ -317,7 +317,7 @@
  * @param min_block_size
  *               Minimum block size to count in total.
  *
- * @return Number of bytes available for allocation that meet the
+ * Return: Number of bytes available for allocation that meet the
  * block size requirement
  */
 u64 cvmx_bootmem_available_mem(u64 min_block_size);
@@ -350,7 +350,7 @@
  *                  CVMX_BOOTMEM_ALIGNMENT_SIZE.)
  * @param flags     Flags to control options for the allocation.
  *
- * @return physical address of block allocated, or -1 on failure
+ * Return: physical address of block allocated, or -1 on failure
  */
 s64 cvmx_bootmem_phy_alloc(u64 req_size, u64 address_min, u64 address_max,
 			   u64 alignment, u32 flags);
@@ -379,7 +379,7 @@
  *
  * @param flags     Flags to control options for the allocation.
  *
- * @return physical address of block allocated, or -1 on failure
+ * Return: physical address of block allocated, or -1 on failure
  */
 s64 cvmx_bootmem_phy_named_block_alloc(u64 size, u64 min_addr, u64 max_addr,
 				       u64 alignment, const char *name,
@@ -394,7 +394,7 @@
  *
  * @param flags  Flags to control options for the allocation.
  *
- * @return Physical address of the memory block descriptor, zero if not
+ * Return: Physical address of the memory block descriptor, zero if not
  *         found. If zero returned when name parameter is NULL, then no
  *         memory block descriptors are available.
  */
@@ -408,7 +408,7 @@
  * @param min_block_size
  *               Minimum block size to count in total.
  *
- * @return Number of bytes available for allocation that meet the
+ * Return: Number of bytes available for allocation that meet the
  * block size requirement
  */
 u64 cvmx_bootmem_phy_available_mem(u64 min_block_size);
@@ -419,7 +419,7 @@
  * @param name   name of block to free
  * @param flags  flags for passing options
  *
- * @return 0 on failure
+ * Return: 0 on failure
  *         1 on success
  */
 int cvmx_bootmem_phy_named_block_free(const char *name, u32 flags);
@@ -438,7 +438,7 @@
  * @param size     size of block in bytes.
  * @param flags    flags for passing options
  *
- * @return 1 on success,
+ * Return: 1 on success,
  *         0 on failure
  */
 int __cvmx_bootmem_phy_free(u64 phy_addr, u64 size, u32 flags);
@@ -467,7 +467,7 @@
  * @param desc_buffer Buffer for the bootmem descriptor.  This must be
  *                 a 32 bit addressable address.
  *
- * @return 1 on success
+ * Return: 1 on success
  *         0 on failure
  */
 s64 cvmx_bootmem_phy_mem_list_init(u64 mem_size, u32 low_reserved_bytes,
@@ -487,7 +487,7 @@
  * @param desc_buffer Buffer for the bootmem descriptor.  This must be
  *                 a 32 bit addressable address.
  *
- * @return 1 on success
+ * Return: 1 on success
  *         0 on failure
  */
 s64 cvmx_bootmem_phy_mem_list_init_multi(u8 nodemask, u32 mem_size[],
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-cmd-queue.h b/arch/mips/mach-octeon/include/mach/cvmx-cmd-queue.h
index ddc2943..c83d09c 100644
--- a/arch/mips/mach-octeon/include/mach/cvmx-cmd-queue.h
+++ b/arch/mips/mach-octeon/include/mach/cvmx-cmd-queue.h
@@ -154,7 +154,7 @@
  * @param fpa_pool  FPA pool the command queues should come from.
  * @param pool_size Size of each buffer in the FPA pool (bytes)
  *
- * @return CVMX_CMD_QUEUE_SUCCESS or a failure code
+ * Return: CVMX_CMD_QUEUE_SUCCESS or a failure code
  */
 cvmx_cmd_queue_result_t cvmx_cmd_queue_initialize(cvmx_cmd_queue_id_t queue_id, int max_depth,
 						  int fpa_pool, int pool_size);
@@ -166,7 +166,7 @@
  *
  * @param queue_id Queue to shutdown
  *
- * @return CVMX_CMD_QUEUE_SUCCESS or a failure code
+ * Return: CVMX_CMD_QUEUE_SUCCESS or a failure code
  */
 cvmx_cmd_queue_result_t cvmx_cmd_queue_shutdown(cvmx_cmd_queue_id_t queue_id);
 
@@ -176,7 +176,7 @@
  *
  * @param queue_id Hardware command queue to query
  *
- * @return Number of outstanding commands
+ * Return: Number of outstanding commands
  */
 int cvmx_cmd_queue_length(cvmx_cmd_queue_id_t queue_id);
 
@@ -188,7 +188,7 @@
  *
  * @param queue_id Command queue to query
  *
- * @return Command buffer or NULL on failure
+ * Return: Command buffer or NULL on failure
  */
 void *cvmx_cmd_queue_buffer(cvmx_cmd_queue_id_t queue_id);
 
@@ -204,7 +204,7 @@
  *
  * @param queue_id Queue ID to get an index for
  *
- * @return Index into the state arrays
+ * Return: Index into the state arrays
  */
 static inline unsigned int __cvmx_cmd_queue_get_index(cvmx_cmd_queue_id_t queue_id)
 {
@@ -270,7 +270,7 @@
  *
  * @param queue_id Queue id to get
  *
- * @return Queue structure or NULL on failure
+ * Return: Queue structure or NULL on failure
  */
 static inline __cvmx_cmd_queue_state_t *__cvmx_cmd_queue_get_state(cvmx_cmd_queue_id_t queue_id)
 {
@@ -301,7 +301,7 @@
  * @param cmd_count Number of command words to write
  * @param cmds      Array of commands to write
  *
- * @return CVMX_CMD_QUEUE_SUCCESS or a failure code
+ * Return: CVMX_CMD_QUEUE_SUCCESS or a failure code
  */
 static inline cvmx_cmd_queue_result_t
 cvmx_cmd_queue_write(cvmx_cmd_queue_id_t queue_id, bool use_locking, int cmd_count, const u64 *cmds)
@@ -348,7 +348,7 @@
  * @param cmd1     Command
  * @param cmd2     Command
  *
- * @return CVMX_CMD_QUEUE_SUCCESS or a failure code
+ * Return: CVMX_CMD_QUEUE_SUCCESS or a failure code
  */
 static inline cvmx_cmd_queue_result_t cvmx_cmd_queue_write2(cvmx_cmd_queue_id_t queue_id,
 							    bool use_locking, u64 cmd1, u64 cmd2)
@@ -399,7 +399,7 @@
  * @param cmd2     Command
  * @param cmd3     Command
  *
- * @return CVMX_CMD_QUEUE_SUCCESS or a failure code
+ * Return: CVMX_CMD_QUEUE_SUCCESS or a failure code
  */
 static inline cvmx_cmd_queue_result_t
 cvmx_cmd_queue_write3(cvmx_cmd_queue_id_t queue_id, bool use_locking, u64 cmd1, u64 cmd2, u64 cmd3)
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-coremask.h b/arch/mips/mach-octeon/include/mach/cvmx-coremask.h
index 314b6d9..915e870 100644
--- a/arch/mips/mach-octeon/include/mach/cvmx-coremask.h
+++ b/arch/mips/mach-octeon/include/mach/cvmx-coremask.h
@@ -101,7 +101,7 @@
  * @param node		starting node number
  * @param node_mask	node mask to use to find the next node
  *
- * @return next node number or -1 if no more nodes are available
+ * Return: next node number or -1 if no more nodes are available
  */
 static inline int cvmx_coremask_next_node(int node, u8 node_mask)
 {
@@ -132,7 +132,7 @@
  *
  * @param pcm is the pointer to the coremask.
  * @param core
- * @return 1 if core is set and 0 if not.
+ * Return: 1 if core is set and 0 if not.
  */
 static inline int cvmx_coremask_is_core_set(const struct cvmx_coremask *pcm,
 					    int core)
@@ -149,7 +149,7 @@
  * Is ``current core'' set in the coremask?
  *
  * @param pcm is the pointer to the coremask.
- * @return 1 if core is set and 0 if not.
+ * Return: 1 if core is set and 0 if not.
  */
 static inline int cvmx_coremask_is_self_set(const struct cvmx_coremask *pcm)
 {
@@ -159,7 +159,7 @@
 /**
  * Is coremask empty?
  * @param pcm is the pointer to the coremask.
- * @return 1 if *pcm is empty (all zeros), 0 if not empty.
+ * Return: 1 if *pcm is empty (all zeros), 0 if not empty.
  */
 static inline int cvmx_coremask_is_empty(const struct cvmx_coremask *pcm)
 {
@@ -177,7 +177,7 @@
  *
  * @param pcm is the pointer to the coremask.
  * @param core
- * @return 0.
+ * Return: 0.
  */
 static inline int cvmx_coremask_set_core(struct cvmx_coremask *pcm, int core)
 {
@@ -194,7 +194,7 @@
  * Set ``current core'' in the coremask.
  *
  * @param pcm is the pointer to the coremask.
- * @return 0.
+ * Return: 0.
  */
 static inline int cvmx_coremask_set_self(struct cvmx_coremask *pcm)
 {
@@ -206,7 +206,7 @@
  *
  * @param pcm is the pointer to the coremask.
  * @param core
- * @return 0.
+ * Return: 0.
  */
 static inline int cvmx_coremask_clear_core(struct cvmx_coremask *pcm, int core)
 {
@@ -223,7 +223,7 @@
  * Clear ``current core'' from the coremask.
  *
  * @param pcm is the pointer to the coremask.
- * @return 0.
+ * Return: 0.
  */
 static inline int cvmx_coremask_clear_self(struct cvmx_coremask *pcm)
 {
@@ -235,7 +235,7 @@
  *
  * @param pcm is the pointer to the coremask.
  * @param core
- * @return 0.
+ * Return: 0.
  */
 static inline int cvmx_coremask_toggle_core(struct cvmx_coremask *pcm, int core)
 {
@@ -252,7 +252,7 @@
  * Toggle ``current core'' in the coremask.
  *
  * @param pcm is the pointer to the coremask.
- * @return 0.
+ * Return: 0.
  */
 static inline int cvmx_coremask_toggle_self(struct cvmx_coremask *pcm)
 {
@@ -288,7 +288,7 @@
  * Gets the lower 64-bits of the coremask
  *
  * @param[in] pcm - pointer to coremask
- * @return 64-bit coremask for the first node
+ * Return: 64-bit coremask for the first node
  */
 static inline u64 cvmx_coremask_get64(const struct cvmx_coremask *pcm)
 {
@@ -300,7 +300,7 @@
  *
  * @param[in] pcm - pointer to coremask
  * @param node - node to get coremask for
- * @return 64-bit coremask for the first node
+ * Return: 64-bit coremask for the first node
  */
 static inline u64 cvmx_coremask_get64_node(const struct cvmx_coremask *pcm,
 					   u8 node)
@@ -312,7 +312,7 @@
  * Gets the lower 32-bits of the coremask for compatibility
  *
  * @param[in] pcm - pointer to coremask
- * @return 32-bit coremask for the first node
+ * Return: 32-bit coremask for the first node
  * @deprecated This function is to maintain compatibility with older
  *             SDK applications and may disappear at some point.
  * This function is not compatible with the CN78XX or any other
@@ -515,7 +515,7 @@
  * @param core - starting core to check (can be -1 for core 0)
  * @param pcm - pointer to coremask to check for the next core.
  *
- * @return next core following the core parameter or -1 if no more cores.
+ * Return: next core following the core parameter or -1 if no more cores.
  */
 static inline int cvmx_coremask_next_core(int core,
 					  const struct cvmx_coremask *pcm)
@@ -597,7 +597,7 @@
  * @param[in]  pcm  pointer to the coremask to test against
  * @param[in]  core core to check
  *
- * @return  1 if the core is first core in the coremask, 0 otherwise
+ * Return:  1 if the core is first core in the coremask, 0 otherwise
  *
  */
 static inline int cvmx_coremask_is_core_first_core(const struct cvmx_coremask *pcm,
@@ -634,7 +634,7 @@
  *
  * @param[in] pcm - pointer to core mask
  *
- * @return number of bits set in the coremask
+ * Return: number of bits set in the coremask
  */
 static inline int cvmx_coremask_get_core_count(const struct cvmx_coremask *pcm)
 {
@@ -652,7 +652,7 @@
  *
  * @param core - core number (0-1023)
  *
- * @return node number core belongs to
+ * Return: node number core belongs to
  */
 static inline int cvmx_coremask_core_to_node(int core)
 {
@@ -678,7 +678,7 @@
  * @param main - main coremask to test
  * @param subset - subset coremask to test
  *
- * @return 0 if the subset contains cores not in the main coremask or 1 if
+ * Return: 0 if the subset contains cores not in the main coremask or 1 if
  *         the subset is fully contained in the main coremask.
  */
 static inline int cvmx_coremask_is_subset(const struct cvmx_coremask *main,
@@ -699,7 +699,7 @@
  * @param c1 - main coremask to test
  * @param c2 - subset coremask to test
  *
- * @return 1 if coremask c1 intersects coremask c2, 0 if they are exclusive
+ * Return: 1 if coremask c1 intersects coremask c2, 0 if they are exclusive
  */
 static inline int cvmx_coremask_intersects(const struct cvmx_coremask *c1,
 					   const struct cvmx_coremask *c2)
@@ -735,7 +735,7 @@
  *
  * @param[in] pcm - pointer to core mask
  *
- * @return nothing
+ * Return: nothing
  */
 void cvmx_coremask_print(const struct cvmx_coremask *pcm);
 
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-error.h b/arch/mips/mach-octeon/include/mach/cvmx-error.h
index 9a13ed4..216d32e 100644
--- a/arch/mips/mach-octeon/include/mach/cvmx-error.h
+++ b/arch/mips/mach-octeon/include/mach/cvmx-error.h
@@ -90,7 +90,7 @@
  *
  * @param flags  Optional flags.
  *
- * @return Zero on success, negative on failure.
+ * Return: Zero on success, negative on failure.
  */
 int cvmx_error_initialize(void);
 
@@ -99,7 +99,7 @@
  * handlers. This should be called in the RSL interrupt handler
  * for your application or operating system.
  *
- * @return Number of error handlers called. Zero means this call
+ * Return: Number of error handlers called. Zero means this call
  *         found no errors and was spurious.
  */
 int cvmx_error_poll(void);
@@ -116,7 +116,7 @@
  *                 call. All members of the structure must be populated, even the
  *                 parent information.
  *
- * @return Zero on success, negative on failure.
+ * Return: Zero on success, negative on failure.
  */
 int cvmx_error_add(const cvmx_error_info_t *new_info);
 
@@ -136,7 +136,7 @@
  * @param old_info If not NULL, this is filled with information about the handler
  *                 that was removed.
  *
- * @return Zero on success, negative on failure (not found).
+ * Return: Zero on success, negative on failure (not found).
  */
 int cvmx_error_remove(cvmx_error_register_t reg_type, u64 status_addr, u64 status_mask,
 		      cvmx_error_info_t *old_info);
@@ -160,7 +160,7 @@
  * @param old_user_info
  *                 If not NULL, the old user info parameter.
  *
- * @return Zero on success, negative on failure
+ * Return: Zero on success, negative on failure
  */
 int cvmx_error_change_handler(cvmx_error_register_t reg_type, u64 status_addr, u64 status_mask,
 			      cvmx_error_func_t new_func, u64 new_user_info,
@@ -175,7 +175,7 @@
  *               Index for the group as defined in the cvmx_error_group_t
  *               comments.
  *
- * @return Zero on success, negative on failure.
+ * Return: Zero on success, negative on failure.
  */
 /*
  * Rather than conditionalize the calls throughout the executive to not enable
@@ -197,7 +197,7 @@
  *               Index for the group as defined in the cvmx_error_group_t
  *               comments.
  *
- * @return Zero on success, negative on failure.
+ * Return: Zero on success, negative on failure.
  */
 /*
  * Rather than conditionalize the calls throughout the executive to not disable
@@ -218,7 +218,7 @@
  *                 All handlers for this status register with this mask will be
  *                 enabled.
  *
- * @return Zero on success, negative on failure.
+ * Return: Zero on success, negative on failure.
  */
 int cvmx_error_enable(cvmx_error_register_t reg_type, u64 status_addr, u64 status_mask);
 
@@ -232,7 +232,7 @@
  *                 All handlers for this status register with this mask will be
  *                 disabled.
  *
- * @return Zero on success, negative on failure.
+ * Return: Zero on success, negative on failure.
  */
 int cvmx_error_disable(cvmx_error_register_t reg_type, u64 status_addr, u64 status_mask);
 
@@ -244,7 +244,7 @@
  *
  * @param info   Error register to check
  *
- * @return Number of error status bits found or zero if no bits were set.
+ * Return: Number of error status bits found or zero if no bits were set.
  */
 int __cvmx_error_decode(const cvmx_error_info_t *info);
 
@@ -264,7 +264,7 @@
  * @param status_addr
  *                Status register address
  *
- * @return  Return the handler on success or null on failure.
+ * Return:  Return the handler on success or null on failure.
  */
 cvmx_error_info_t *cvmx_error_get_index(u64 status_addr);
 
@@ -279,7 +279,7 @@
  * @param key INTSN value to search for
  * @param data current entry from the searched array
  *
- * @return Negative, 0 or positive when respectively key is less than,
+ * Return: Negative, 0 or positive when respectively key is less than,
  *		equal or greater than data.
  */
 int cvmx_error_intsn_cmp(const void *key, const void *data);
@@ -291,7 +291,7 @@
  *
  * @param node Node number
  *
- * @return Zero on success, -1 on error
+ * Return: Zero on success, -1 on error
  */
 int cvmx_error_intsn_display_v3(int node, u32 intsn);
 
@@ -302,7 +302,7 @@
  *
  * @param node Node number
  *
- * @return Zero on success, negative on failure.
+ * Return: Zero on success, negative on failure.
  */
 int cvmx_error_initialize_cn78xx(int node);
 
@@ -312,7 +312,7 @@
  * @param node Node number
  * @param intsn Interrupt source number
  *
- * @return Zero on success, negative on failure.
+ * Return: Zero on success, negative on failure.
  */
 int cvmx_error_intsn_enable_v3(int node, u32 intsn);
 
@@ -322,7 +322,7 @@
  * @param node Node number
  * @param intsn Interrupt source number
  *
- * @return Zero on success, negative on failure.
+ * Return: Zero on success, negative on failure.
  */
 int cvmx_error_intsn_disable_v3(int node, u32 intsn);
 
@@ -331,7 +331,7 @@
  *
  * @param intsn Interrupt source number
  *
- * @return Zero on success, negative on failure.
+ * Return: Zero on success, negative on failure.
  */
 int cvmx_error_intsn_clear_v3(int node, u32 intsn);
 
@@ -341,7 +341,7 @@
  * @param node Node number
  * @param csr_address CSR address
  *
- * @return Zero on success, negative on failure.
+ * Return: Zero on success, negative on failure.
  */
 int cvmx_error_csr_enable_v3(int node, u64 csr_address);
 
@@ -351,7 +351,7 @@
  * @param node Node number
  * @param csr_address CSR address
  *
- * @return Zero
+ * Return: Zero
  */
 int cvmx_error_csr_disable_v3(int node, u64 csr_address);
 
@@ -362,7 +362,7 @@
  * @param group  Logical group to enable
  * @param xipd_port  The IPD port value
  *
- * @return Zero.
+ * Return: Zero.
  */
 int cvmx_error_enable_group_v3(cvmx_error_group_t group, int xipd_port);
 
@@ -372,7 +372,7 @@
  * @param group  Logical group to enable
  * @param xipd_port  The IPD port value
  *
- * @return Zero.
+ * Return: Zero.
  */
 int cvmx_error_disable_group_v3(cvmx_error_group_t group, int xipd_port);
 
@@ -384,7 +384,7 @@
  * @param type   Category in a logical group to enable
  * @param xipd_port  The IPD port value
  *
- * @return Zero.
+ * Return: Zero.
  */
 int cvmx_error_enable_group_type_v3(cvmx_error_group_t group, cvmx_error_type_t type,
 				    int xipd_port);
@@ -397,7 +397,7 @@
  * @param type   Category in a logical group to disable
  * @param xipd_port  The IPD port value
  *
- * @return Zero.
+ * Return: Zero.
  */
 int cvmx_error_disable_group_type_v3(cvmx_error_group_t group, cvmx_error_type_t type,
 				     int xipd_port);
@@ -408,7 +408,7 @@
  * @param group  Logical group to disable
  * @param xipd_port  The IPD port value
  *
- * @return Zero.
+ * Return: Zero.
  */
 int cvmx_error_clear_group_v3(cvmx_error_group_t group, int xipd_port);
 
@@ -418,7 +418,7 @@
  * @param node  CCPI node
  * @param type  category to enable
  *
- *@return Zero.
+ *Return: Zero.
  */
 int cvmx_error_enable_type_v3(int node, cvmx_error_type_t type);
 
@@ -428,7 +428,7 @@
  * @param node  CCPI node
  * @param type  category to disable
  *
- *@return Zero.
+ *Return: Zero.
  */
 int cvmx_error_disable_type_v3(int node, cvmx_error_type_t type);
 
@@ -449,7 +449,7 @@
  * @param	intsn	intsn from error array.
  * @param	remote	true for remote node (cn78xx only)
  *
- * @return	1 if handled, 0 if not handled
+ * Return:	1 if handled, 0 if not handled
  */
 int __cvmx_cn7xxx_l2c_tag_error_display(int node, int intsn, bool remote);
 
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-fpa.h b/arch/mips/mach-octeon/include/mach/cvmx-fpa.h
index 297fb3f..aa238a8 100644
--- a/arch/mips/mach-octeon/include/mach/cvmx-fpa.h
+++ b/arch/mips/mach-octeon/include/mach/cvmx-fpa.h
@@ -36,7 +36,7 @@
  * Return the name of the pool
  *
  * @param pool_num   Pool to get the name of
- * @return The name
+ * Return: The name
  */
 const char *cvmx_fpa_get_name(int pool_num);
 
@@ -97,7 +97,7 @@
  * Get a new block from the FPA
  *
  * @param pool   Pool to get the block from
- * @return Pointer to the block or NULL on failure
+ * Return: Pointer to the block or NULL on failure
  */
 static inline void *cvmx_fpa_alloc(u64 pool)
 {
@@ -135,7 +135,7 @@
  * @param pool Pool the block came from.  Must be the same value
  * passed to cvmx_fpa_async_alloc.
  *
- * @return Pointer to the block or NULL on failure
+ * Return: Pointer to the block or NULL on failure
  */
 static inline void *cvmx_fpa_async_alloc_finish(u64 scr_addr, u64 pool)
 {
@@ -194,7 +194,7 @@
  * @param block_size Size for each block controlled by the FPA
  * @param num_blocks Number of blocks
  *
- * @return the pool number on Success,
+ * Return: the pool number on Success,
  *         -1 on failure
  */
 int cvmx_fpa_setup_pool(int pool, const char *name, void *buffer, u64 block_size, u64 num_blocks);
@@ -204,7 +204,7 @@
 /**
  * Gets the block size of buffer in specified pool
  * @param pool	 Pool to get the block size from
- * @return       Size of buffer in specified pool
+ * Return:       Size of buffer in specified pool
  */
 unsigned int cvmx_fpa_get_block_size(int pool);
 
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-fpa1.h b/arch/mips/mach-octeon/include/mach/cvmx-fpa1.h
index 6985083..a896d5a 100644
--- a/arch/mips/mach-octeon/include/mach/cvmx-fpa1.h
+++ b/arch/mips/mach-octeon/include/mach/cvmx-fpa1.h
@@ -38,7 +38,7 @@
  *
  * @param pool	  FPA pool to allocate/reserve. If -1 it
  *                finds an empty pool to allocate.
- * @return        Alloctaed pool number or CVMX_FPA1_POOL_INVALID
+ * Return:        Alloctaed pool number or CVMX_FPA1_POOL_INVALID
  *                if fails to allocate the pool
  */
 cvmx_fpa1_pool_t cvmx_fpa1_reserve_pool(cvmx_fpa1_pool_t pool);
@@ -46,7 +46,7 @@
 /**
  * Free the specified fpa pool.
  * @param pool	   Pool to free
- * @return         0 for success -1 failure
+ * Return:         0 for success -1 failure
  */
 int cvmx_fpa1_release_pool(cvmx_fpa1_pool_t pool);
 
@@ -173,7 +173,7 @@
  * @param pool Pool the block came from.  Must be the same value
  * passed to cvmx_fpa_async_alloc.
  *
- * @return Pointer to the block or NULL on failure
+ * Return: Pointer to the block or NULL on failure
  */
 static inline void *cvmx_fpa1_async_alloc_finish(u64 scr_addr, cvmx_fpa1_pool_t pool)
 {
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-fpa3.h b/arch/mips/mach-octeon/include/mach/cvmx-fpa3.h
index 229982b..b3e04d7 100644
--- a/arch/mips/mach-octeon/include/mach/cvmx-fpa3.h
+++ b/arch/mips/mach-octeon/include/mach/cvmx-fpa3.h
@@ -206,7 +206,7 @@
  * Get a new block from the FPA pool
  *
  * @param aura  - aura number
- * @return pointer to the block or NULL on failure
+ * Return: pointer to the block or NULL on failure
  */
 static inline void *cvmx_fpa3_alloc(cvmx_fpa3_gaura_t aura)
 {
@@ -267,7 +267,7 @@
  * @param aura Global aura the block came from.  Must be the same value
  * passed to cvmx_fpa_async_alloc.
  *
- * @return Pointer to the block or NULL on failure
+ * Return: Pointer to the block or NULL on failure
  */
 static inline void *cvmx_fpa3_async_alloc_finish(u64 scr_addr, cvmx_fpa3_gaura_t aura)
 {
@@ -376,7 +376,7 @@
  * Gets the buffer size of the specified pool,
  *
  * @param aura Global aura number
- * @return Returns size of the buffers in the specified pool.
+ * Return: Returns size of the buffers in the specified pool.
  */
 static inline int cvmx_fpa3_get_aura_buf_size(cvmx_fpa3_gaura_t aura)
 {
@@ -395,7 +395,7 @@
  * Return the number of available buffers in an AURA
  *
  * @param aura to receive count for
- * @return available buffer count
+ * Return: available buffer count
  */
 static inline long long cvmx_fpa3_get_available(cvmx_fpa3_gaura_t aura)
 {
@@ -500,7 +500,7 @@
  * @param block_size - size of buffers to use
  * @param num_blocks - number of blocks to allocate
  *
- * @return configured gaura on success, CVMX_FPA3_INVALID_GAURA on failure
+ * Return: configured gaura on success, CVMX_FPA3_INVALID_GAURA on failure
  */
 cvmx_fpa3_gaura_t cvmx_fpa3_set_aura_for_pool(cvmx_fpa3_pool_t pool, int desired_aura,
 					      const char *name, unsigned int block_size,
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-fuse.h b/arch/mips/mach-octeon/include/mach/cvmx-fuse.h
index a06a132..3c248b0 100644
--- a/arch/mips/mach-octeon/include/mach/cvmx-fuse.h
+++ b/arch/mips/mach-octeon/include/mach/cvmx-fuse.h
@@ -11,7 +11,7 @@
  * @param node		node to read from
  * @param byte_addr	address to read
  *
- * @return fuse value: 0 or 1
+ * Return: fuse value: 0 or 1
  */
 static inline u8 cvmx_fuse_read_byte_node(u8 node, int byte_addr)
 {
@@ -31,7 +31,7 @@
  * Read a byte of fuse data
  * @param byte_addr   address to read
  *
- * @return fuse value: 0 or 1
+ * Return: fuse value: 0 or 1
  */
 static inline u8 cvmx_fuse_read_byte(int byte_addr)
 {
@@ -44,7 +44,7 @@
  * @param node   Node number
  * @param fuse   Fuse number (0-1024)
  *
- * @return fuse value: 0 or 1
+ * Return: fuse value: 0 or 1
  */
 static inline int cvmx_fuse_read_node(u8 node, int fuse)
 {
@@ -56,7 +56,7 @@
  *
  * @param fuse   Fuse number (0-1024)
  *
- * @return fuse value: 0 or 1
+ * Return: fuse value: 0 or 1
  */
 static inline int cvmx_fuse_read(int fuse)
 {
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-global-resources.h b/arch/mips/mach-octeon/include/mach/cvmx-global-resources.h
index 28c32dd..e742868 100644
--- a/arch/mips/mach-octeon/include/mach/cvmx-global-resources.h
+++ b/arch/mips/mach-octeon/include/mach/cvmx-global-resources.h
@@ -116,7 +116,7 @@
  * @param nelements is the number of elements to be allocated.
  * @param owner is a 64 bit number that identifes the owner of this range.
  * @aligment specifes the required alignment of the returned base number.
- * @return returns the base of the allocated range. -1 return value indicates
+ * Return: returns the base of the allocated range. -1 return value indicates
  * failure.
  */
 int cvmx_allocate_global_resource_range(struct global_resource_tag tag, u64 owner, int nelements,
@@ -133,7 +133,7 @@
  * @param owner is a 64 bit number that identifes the owner of the allocated
  * elements.
  * @param allocated_elements returns indexs of the allocated entries.
- * @return returns 0 on success and -1 on failure.
+ * Return: returns 0 on success and -1 on failure.
  */
 int cvmx_resource_alloc_many(struct global_resource_tag tag, u64 owner, int nelements,
 			     int allocated_elements[]);
@@ -148,7 +148,7 @@
  * @param nelements is the number of elements to be allocated.
  * @param owner is a 64 bit number that identifes the owner of this range.
  * @base specifies the base start of nelements.
- * @return returns the base of the allocated range. -1 return value indicates
+ * Return: returns the base of the allocated range. -1 return value indicates
  * failure.
  */
 int cvmx_reserve_global_resource_range(struct global_resource_tag tag, u64 owner, int base,
@@ -160,7 +160,7 @@
  * @param tag is the tag of the global resource range.
  * @param base is the base number
  * @param nelements is the number of elements that are to be freed.
- * @return returns 0 if successful and -1 on failure.
+ * Return: returns 0 if successful and -1 on failure.
  */
 int cvmx_free_global_resource_range_with_base(struct global_resource_tag tag, int base,
 					      int nelements);
@@ -172,7 +172,7 @@
  * @param tag is the tag of the global resource range.
  * @param bases is an array containing the bases to be freed.
  * @param nelements is the number of elements that are to be freed.
- * @return returns 0 if successful and -1 on failure.
+ * Return: returns 0 if successful and -1 on failure.
  */
 int cvmx_free_global_resource_range_multiple(struct global_resource_tag tag, int bases[],
 					     int nelements);
@@ -182,7 +182,7 @@
  * specified tag.
  * @param tag is the tag of the global resource range.
  * @param owner is the owner of resources that are to be freed.
- * @return returns 0 if successful and -1 on failure.
+ * Return: returns 0 if successful and -1 on failure.
  */
 int cvmx_free_global_resource_range_with_owner(struct global_resource_tag tag, int owner);
 
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-helper-agl.h b/arch/mips/mach-octeon/include/mach/cvmx-helper-agl.h
index 7a5e4d8..68a3079 100644
--- a/arch/mips/mach-octeon/include/mach/cvmx-helper-agl.h
+++ b/arch/mips/mach-octeon/include/mach/cvmx-helper-agl.h
@@ -21,7 +21,7 @@
  *
  * @param interface Interface to probe
  *
- * @return Number of ports on the interface. Zero to disable.
+ * Return: Number of ports on the interface. Zero to disable.
  */
 int __cvmx_helper_agl_probe(int interface);
 
@@ -33,7 +33,7 @@
  *
  * @param interface Interface to bring up
  *
- * @return Zero on success, negative on failure
+ * Return: Zero on success, negative on failure
  */
 int __cvmx_helper_agl_enable(int interface);
 
@@ -46,7 +46,7 @@
  *
  * @param ipd_port IPD/PKO port to query
  *
- * @return Link state
+ * Return: Link state
  */
 cvmx_helper_link_info_t __cvmx_helper_agl_link_get(int ipd_port);
 
@@ -61,7 +61,7 @@
  * @param ipd_port  IPD/PKO port to configure
  * @param link_info The new link state
  *
- * @return Zero on success, negative on failure
+ * Return: Zero on success, negative on failure
  */
 int __cvmx_helper_agl_link_set(int ipd_port, cvmx_helper_link_info_t link_info);
 
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-helper-bgx.h b/arch/mips/mach-octeon/include/mach/cvmx-helper-bgx.h
index ead6193..4edfdf9 100644
--- a/arch/mips/mach-octeon/include/mach/cvmx-helper-bgx.h
+++ b/arch/mips/mach-octeon/include/mach/cvmx-helper-bgx.h
@@ -29,7 +29,7 @@
  *
  * @param xiface Interface to probe
  *
- * @return Number of ports on the interface. Zero to disable.
+ * Return: Number of ports on the interface. Zero to disable.
  */
 int __cvmx_helper_bgx_probe(int xiface);
 
@@ -42,7 +42,7 @@
  *
  * @param xiface Interface to bring up
  *
- * @return Zero on success, negative on failure
+ * Return: Zero on success, negative on failure
  */
 int __cvmx_helper_bgx_sgmii_enable(int xiface);
 
@@ -56,7 +56,7 @@
  *
  * @param xipd_port IPD/PKO port to query
  *
- * @return Link state
+ * Return: Link state
  */
 cvmx_helper_link_info_t __cvmx_helper_bgx_sgmii_link_get(int xipd_port);
 
@@ -72,7 +72,7 @@
  * @param xipd_port  IPD/PKO port to configure
  * @param link_info The new link state
  *
- * @return Zero on success, negative on failure
+ * Return: Zero on success, negative on failure
  */
 int __cvmx_helper_bgx_sgmii_link_set(int xipd_port, cvmx_helper_link_info_t link_info);
 
@@ -89,7 +89,7 @@
  * @param enable_external
  *                 Non zero if you want external loopback
  *
- * @return Zero on success, negative on failure.
+ * Return: Zero on success, negative on failure.
  */
 int __cvmx_helper_bgx_sgmii_configure_loopback(int xipd_port, int enable_internal,
 					       int enable_external);
@@ -103,7 +103,7 @@
  *
  * @param xiface Interface to bring up
  *
- * @return Zero on success, negative on failure
+ * Return: Zero on success, negative on failure
  */
 int __cvmx_helper_bgx_xaui_enable(int xiface);
 
@@ -117,7 +117,7 @@
  *
  * @param xipd_port IPD/PKO port to query
  *
- * @return Link state
+ * Return: Link state
  */
 cvmx_helper_link_info_t __cvmx_helper_bgx_xaui_link_get(int xipd_port);
 
@@ -133,7 +133,7 @@
  * @param xipd_port  IPD/PKO port to configure
  * @param link_info The new link state
  *
- * @return Zero on success, negative on failure
+ * Return: Zero on success, negative on failure
  */
 int __cvmx_helper_bgx_xaui_link_set(int xipd_port, cvmx_helper_link_info_t link_info);
 
@@ -150,7 +150,7 @@
  * @param enable_external
  *                 Non zero if you want external loopback
  *
- * @return Zero on success, negative on failure.
+ * Return: Zero on success, negative on failure.
  */
 int __cvmx_helper_bgx_xaui_configure_loopback(int xipd_port, int enable_internal,
 					      int enable_external);
@@ -239,7 +239,7 @@
  * @param xiface	xinterface to check
  * @param index		port index (must be 0 for rgmii)
  *
- * @return	true if RGMII, false otherwise
+ * Return:	true if RGMII, false otherwise
  */
 static inline bool cvmx_helper_bgx_is_rgmii(int xiface, int index)
 {
@@ -257,7 +257,7 @@
  * @param xiface	global interface number
  * @param index		interface index
  *
- * @return	true, if Super-MAC/PCS mode, false -- otherwise
+ * Return:	true, if Super-MAC/PCS mode, false -- otherwise
  */
 bool cvmx_helper_bgx_is_smu(int xiface, int index);
 
@@ -271,7 +271,7 @@
  * @param type			PAUSE packet type.
  * @param time			Pause time for PAUSE packets (number of 512 bit-times).
  * @param interval		Interval between PAUSE packets (number of 512 bit-times).
- * @return Zero on success, negative on failure.
+ * Return: Zero on success, negative on failure.
  */
 int cvmx_bgx_set_pause_pkt_param(int xipd_port, u64 smac, u64 dmac, unsigned int type,
 				 unsigned int time, unsigned int interval);
@@ -283,7 +283,7 @@
  * @param xipd_port		Global IPD port (node + IPD port).
  * @param type			Flow-control type/protocol.
  * @param mode			Flow-control mode.
- * @return Zero on success, negative on failure.
+ * Return: Zero on success, negative on failure.
  */
 int cvmx_bgx_set_flowctl_mode(int xipd_port, cvmx_qos_proto_t qos, cvmx_qos_pkt_mode_t mode);
 
@@ -294,7 +294,7 @@
  * @param	index	port index
  * @param	enable	true to enable autonegotiation, false to disable it
  *
- * @return	0 for success, -1 on error.
+ * Return:	0 for success, -1 on error.
  */
 int cvmx_helper_set_autonegotiation(int xiface, int index, bool enable);
 
@@ -305,7 +305,7 @@
  * @param	index	port index
  * @param	enable	set to true to enable FEC, false to disable
  *
- * @return	0 for success, -1 on error
+ * Return:	0 for success, -1 on error
  *
  * @NOTE:	If autonegotiation is enabled then autonegotiation will be
  *		restarted for negotiating FEC.
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-helper-board.h b/arch/mips/mach-octeon/include/mach/cvmx-helper-board.h
index d7a7b7d..5837592 100644
--- a/arch/mips/mach-octeon/include/mach/cvmx-helper-board.h
+++ b/arch/mips/mach-octeon/include/mach/cvmx-helper-board.h
@@ -329,7 +329,7 @@
  *
  * @param ipd_port Octeon IPD port to get the MII address for.
  *
- * @return MII PHY address and bus number or -1.
+ * Return: MII PHY address and bus number or -1.
  */
 int cvmx_helper_board_get_mii_address(int ipd_port);
 
@@ -346,7 +346,7 @@
  * @param link_info Link speed to program. If the speed is zero and autonegotiation
  *                  is enabled, all possible negotiation speeds are advertised.
  *
- * @return Zero on success, negative on failure
+ * Return: Zero on success, negative on failure
  */
 int cvmx_helper_board_link_set_phy(int phy_addr,
 				   cvmx_helper_board_set_phy_link_flags_types_t link_flags,
@@ -368,7 +368,7 @@
  * @param ipd_port IPD input port associated with the port we want to get link
  *                 status for.
  *
- * @return The ports link status. If the link isn't fully resolved, this must
+ * Return: The ports link status. If the link isn't fully resolved, this must
  *         return zero.
  */
 cvmx_helper_link_info_t __cvmx_helper_board_link_get(int ipd_port);
@@ -392,7 +392,7 @@
  * @param supported_ports
  *                  Number of ports Octeon supports.
  *
- * @return Number of ports the actual board supports. Many times this will
+ * Return: Number of ports the actual board supports. Many times this will
  *         simple be "support_ports".
  */
 int __cvmx_helper_board_interface_probe(int interface, int supported_ports);
@@ -406,7 +406,7 @@
  *
  * @param interface Interface to enable
  *
- * @return Zero on success, negative on failure
+ * Return: Zero on success, negative on failure
  */
 int __cvmx_helper_board_hardware_enable(int interface);
 
@@ -415,7 +415,7 @@
  * Gets the clock type used for the USB block based on board type.
  * Used by the USB code for auto configuration of clock type.
  *
- * @return USB clock type enumeration
+ * Return: USB clock type enumeration
  */
 cvmx_helper_board_usb_clock_types_t __cvmx_helper_board_usb_get_clock_type(void);
 
@@ -427,7 +427,7 @@
  * @param supported_ports expected number of ports based on chip type;
  *
  *
- * @return number of available usb ports, based on board specifics.
+ * Return: number of available usb ports, based on board specifics.
  *         Return value is supported_ports if function does not
  *         override.
  */
@@ -440,7 +440,7 @@
  * @param fdt_addr - address fo flat device tree
  * @param ipd_port - IPD port number
  *
- * @return 1 if port is present, 0 if not present, -1 if error
+ * Return: 1 if port is present, 0 if not present, -1 if error
  */
 int __cvmx_helper_board_get_port_from_dt(void *fdt_addr, int ipd_port);
 
@@ -450,7 +450,7 @@
  *
  * @param ipd_port - ipd port number to get the host mode for
  *
- * @return host mode for phy
+ * Return: host mode for phy
  */
 cvmx_phy_host_mode_t cvmx_helper_board_get_phy_host_mode(int ipd_port);
 
@@ -462,7 +462,7 @@
  * @param[out] - phy_info - phy info data structure
  * @param ipd_port - port to get phy info for
  *
- * @return 0 for success, -1 if info not available
+ * Return: 0 for success, -1 if info not available
  *
  * NOTE: The phy_info data structure is subject to change.
  */
@@ -474,7 +474,7 @@
  *
  * @param fdt_addr	Pointer to device tree
  *
- * @return 0 for success, -1 on error.
+ * Return: 0 for success, -1 on error.
  */
 int __cvmx_helper_parse_bgx_dt(const void *fdt_addr);
 
@@ -484,7 +484,7 @@
  *
  * @param fdt_addr	Pointer to device tree
  *
- * @return 0 for success, -1 on error.
+ * Return: 0 for success, -1 on error.
  */
 int __cvmx_helper_parse_bgx_rgmii_dt(const void *fdt_addr);
 
@@ -513,7 +513,7 @@
  * @param	xiface	xinterface number
  * @param	index	port index on interface
  *
- * @return	0 for success, -1 on error
+ * Return:	0 for success, -1 on error
  *
  * This function figures out the proper mod_abs_changed function to use and
  * registers the appropriate function.  This should be called after the device
@@ -529,7 +529,7 @@
  * @param	xiface	xinterface number
  * @param	index	port index on interface
  *
- * @return	0 if signal present, 1 if loss of signal.
+ * Return:	0 if signal present, 1 if loss of signal.
  *
  * @NOTE:	A result of 0 is possible in some cases where the signal is
  *		not present.
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-helper-cfg.h b/arch/mips/mach-octeon/include/mach/cvmx-helper-cfg.h
index d4bd910..39260d8 100644
--- a/arch/mips/mach-octeon/include/mach/cvmx-helper-cfg.h
+++ b/arch/mips/mach-octeon/include/mach/cvmx-helper-cfg.h
@@ -193,7 +193,7 @@
  *
  * @param interface the interface number
  * @param index the port's index number
- * @return the pknd
+ * Return: the pknd
  */
 int __cvmx_helper_cfg_pknd(int interface, int index);
 
@@ -203,7 +203,7 @@
  *
  * @param interface the interface number
  * @param index the port's index number
- * @return the bpid
+ * Return: the bpid
  */
 int __cvmx_helper_cfg_bpid(int interface, int index);
 
@@ -213,7 +213,7 @@
  *
  * @param interface the interface number
  * @param index the port's index number
- * @return the pko_port base
+ * Return: the pko_port base
  */
 int __cvmx_helper_cfg_pko_port_base(int interface, int index);
 
@@ -223,7 +223,7 @@
  *
  * @param interface the interface number
  * @param index the port's index number
- * @return the number of pko_ports
+ * Return: the number of pko_ports
  */
 int __cvmx_helper_cfg_pko_port_num(int interface, int index);
 
@@ -232,7 +232,7 @@
  * Return the configured pko_queue base for the pko_port
  *
  * @param pko_port
- * @return the pko_queue base
+ * Return: the pko_queue base
  */
 int __cvmx_helper_cfg_pko_queue_base(int pko_port);
 
@@ -241,7 +241,7 @@
  * Return the configured number of pko_queues for the pko_port
  *
  * @param pko_port
- * @return the number of pko_queues
+ * Return: the number of pko_queues
  */
 int __cvmx_helper_cfg_pko_queue_num(int pko_port);
 
@@ -250,7 +250,7 @@
  * Return the interface the pko_port is configured for
  *
  * @param pko_port
- * @return the interface for the pko_port
+ * Return: the interface for the pko_port
  */
 int __cvmx_helper_cfg_pko_port_interface(int pko_port);
 
@@ -259,7 +259,7 @@
  * Return the index of the port the pko_port is configured for
  *
  * @param pko_port
- * @return the index of the port
+ * Return: the index of the port
  */
 int __cvmx_helper_cfg_pko_port_index(int pko_port);
 
@@ -268,7 +268,7 @@
  * Return the pko_eid of the pko_port
  *
  * @param pko_port
- * @return the pko_eid
+ * Return: the pko_eid
  */
 int __cvmx_helper_cfg_pko_port_eid(int pko_port);
 
@@ -276,7 +276,7 @@
  * @INTERNAL
  * Return the max# of pko queues allocated.
  *
- * @return the max# of pko queues
+ * Return: the max# of pko queues
  *
  * Note: there might be holes in the queue space depending on user
  * configuration. The function returns the highest queue's index in
@@ -288,7 +288,7 @@
  * @INTERNAL
  * Return the max# of PKO DMA engines allocated.
  *
- * @return the max# of DMA engines
+ * Return: the max# of DMA engines
  *
  * NOTE: the DMA engines are allocated contiguously and starting from
  * 0.
@@ -299,7 +299,7 @@
  * Get the value set for the config option ``opt''.
  *
  * @param opt is the config option.
- * @return the value set for the option
+ * Return: the value set for the option
  *
  * LR: only used for DWB in NPI, POW, PKO1
  */
@@ -310,7 +310,7 @@
  *
  * @param opt is the config option.
  * @param val is the value to set for the opt.
- * @return 0 for success and -1 on error
+ * Return: 0 for success and -1 on error
  *
  * Note an option here is a config-time parameter and this means that
  * it has to be set before calling the corresponding setup functions
@@ -324,7 +324,7 @@
  * Retrieve the pko_port base given ipd_port.
  *
  * @param ipd_port is the IPD eport
- * @return the corresponding PKO port base for the physical port
+ * Return: the corresponding PKO port base for the physical port
  * represented by the IPD eport or CVMX_HELPER_CFG_INVALID_VALUE.
  */
 int cvmx_helper_cfg_ipd2pko_port_base(int ipd_port);
@@ -333,7 +333,7 @@
  * Retrieve the number of pko_ports given ipd_port.
  *
  * @param ipd_port is the IPD eport
- * @return the corresponding number of PKO ports for the physical port
+ * Return: the corresponding number of PKO ports for the physical port
  *  represented by IPD eport or CVMX_HELPER_CFG_INVALID_VALUE.
  */
 int cvmx_helper_cfg_ipd2pko_port_num(int ipd_port);
@@ -343,7 +343,7 @@
  * The init function
  *
  * @param node
- * @return 0 for success.
+ * Return: 0 for success.
  *
  * Note: this function is meant to be called to set the ``configured
  * parameters,'' e.g., pknd, bpid, etc. and therefore should be before
@@ -357,7 +357,7 @@
  * The local init function
  *
  * @param none
- * @return 0 for success.
+ * Return: 0 for success.
  *
  * Note: this function is meant to be called to set the ``configured
  * parameters locally,'' e.g., pknd, bpid, etc. and therefore should be before
@@ -390,7 +390,7 @@
  *                    port. This call will allocate a total of
  *		      (port_cnt * queue_cnt) queues
  *
- * @return  0 on success
+ * Return:  0 on success
  *         -1 on failure
  *
  * LR: Called ONLY from comfig-parse!
@@ -402,14 +402,14 @@
  *
  * @param  port   the internal port for which the queues are freed.
  *
- * @return  0 on success
+ * Return:  0 on success
  *         -1 on failure
  */
 int cvmx_pko_queue_free(u64 port);
 
 /*
  * Initializes the pko queue range data structure.
- * @return  0 on success
+ * Return:  0 on success
  *         -1 on failure
  */
 int init_cvmx_pko_que_range(void);
@@ -425,7 +425,7 @@
  * @param xiface     interface to check
  * @param index      port index in the interface
  *
- * @return status of the port present or not.
+ * Return: status of the port present or not.
  */
 int cvmx_helper_is_port_valid(int xiface, int index);
 
@@ -445,7 +445,7 @@
  * @param interface the interface number
  * @param index the port's index number
  *
- * @return 1 if port is in PHY mode, 0 if port is in MAC mode
+ * Return: 1 if port is in PHY mode, 0 if port is in MAC mode
  */
 bool cvmx_helper_get_mac_phy_mode(int interface, int index);
 void cvmx_helper_set_mac_phy_mode(int interface, int index, bool valid);
@@ -457,7 +457,7 @@
  * @param interface the interface number
  * @param index the port's index number
  *
- * @return 1 if port is in 1000Base X mode, 0 if port is in SGMII mode
+ * Return: 1 if port is in 1000Base X mode, 0 if port is in SGMII mode
  */
 bool cvmx_helper_get_1000x_mode(int interface, int index);
 void cvmx_helper_set_1000x_mode(int interface, int index, bool valid);
@@ -521,7 +521,7 @@
  *
  * @param xiface	node and interface
  * @param index		port index
- * @return		node offset of port or -1 if invalid
+ * Return:		node offset of port or -1 if invalid
  */
 int cvmx_helper_get_port_fdt_node_offset(int xiface, int index);
 
@@ -541,7 +541,7 @@
  *
  * @param xiface	node and interface
  * @param index		port index
- * @return		node offset of phy or -1 if invalid
+ * Return:		node offset of phy or -1 if invalid
  */
 int cvmx_helper_get_phy_fdt_node_offset(int xiface, int index);
 
@@ -563,7 +563,7 @@
  * @param xiface	node and interface
  * @param index		port index
  *
- * @return 0 if autonegotiation is disabled, 1 if enabled.
+ * Return: 0 if autonegotiation is disabled, 1 if enabled.
  */
 bool cvmx_helper_get_port_autonegotiation(int xiface, int index);
 
@@ -574,7 +574,7 @@
  * @param xiface	node and interface
  * @param index		port index
  *
- * @return 0 if fec is disabled, 1 if enabled.
+ * Return: 0 if fec is disabled, 1 if enabled.
  */
 bool cvmx_helper_get_port_fec(int xiface, int index);
 
@@ -683,7 +683,7 @@
  * @param xiface	node and interface
  * @param index		port index
  *
- * @return pointer to PHY information data structure or NULL if not set
+ * Return: pointer to PHY information data structure or NULL if not set
  */
 struct cvmx_phy_info *cvmx_helper_get_port_phy_info(int xiface, int index);
 
@@ -694,7 +694,7 @@
  * @param xiface	node and interface
  * @param index		portindex
  *
- * @return pointer to the PHY LED information data structure or NULL if not
+ * Return: pointer to the PHY LED information data structure or NULL if not
  *	   present
  */
 struct cvmx_phy_gpio_leds *cvmx_helper_get_port_phy_leds(int xiface, int index);
@@ -760,7 +760,7 @@
  * @param xiface	node and interface
  * @param index		port index
  *
- * @return offset in device tree or -1 if error or not defined.
+ * Return: offset in device tree or -1 if error or not defined.
  */
 int cvmx_helper_cfg_get_sfp_fdt_offset(int xiface, int index);
 
@@ -769,7 +769,7 @@
  *
  * @param	of_offset	Node offset of port to search for
  *
- * @return	ipd_port or -1 if not found
+ * Return:	ipd_port or -1 if not found
  */
 int cvmx_helper_cfg_get_ipd_port_by_fdt_node_offset(int of_offset);
 
@@ -790,7 +790,7 @@
  * @param[out]	xiface		xinterface of match
  * @param[out]	index		port index of match
  *
- * @return	0 if found, -1 if not found
+ * Return:	0 if found, -1 if not found
  */
 int cvmx_helper_cfg_get_xiface_index_by_fdt_node_offset(int of_offset, int *xiface, int *index);
 
@@ -801,7 +801,7 @@
  * @param xiface	node and interface
  * @param index		port index
  *
- * @return pointer to vsc7224 data structure or NULL if not present
+ * Return: pointer to vsc7224 data structure or NULL if not present
  */
 struct cvmx_vsc7224_chan *cvmx_helper_cfg_get_vsc7224_chan_info(int xiface, int index);
 
@@ -822,7 +822,7 @@
  * @param xiface        node and interface
  * @param index         port index
  *
- * @return pointer to avsp5410 data structure or NULL if not present
+ * Return: pointer to avsp5410 data structure or NULL if not present
  */
 struct cvmx_avsp5410 *cvmx_helper_cfg_get_avsp5410_info(int xiface, int index);
 
@@ -841,7 +841,7 @@
  * @param	xiface	node and interface
  * @param	index	port index
  *
- * @return	pointer to SFP data structure or NULL if none
+ * Return:	pointer to SFP data structure or NULL if none
  */
 struct cvmx_fdt_sfp_info *cvmx_helper_cfg_get_sfp_info(int xiface, int index);
 
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-helper-errata.h b/arch/mips/mach-octeon/include/mach/cvmx-helper-errata.h
index 9ed13c1..697a6f0 100644
--- a/arch/mips/mach-octeon/include/mach/cvmx-helper-errata.h
+++ b/arch/mips/mach-octeon/include/mach/cvmx-helper-errata.h
@@ -17,7 +17,7 @@
  * @INTERNAL
  * Function to adjust internal IPD pointer alignments
  *
- * @return 0 on success
+ * Return: 0 on success
  *         !0 on failure
  */
 int __cvmx_helper_errata_fix_ipd_ptr_alignment(void);
@@ -35,7 +35,7 @@
  *        in each buffer).
  *
  * @param work   Work queue entry to fix
- * @return Zero on success. Negative on failure
+ * Return: Zero on success. Negative on failure
  */
 int cvmx_helper_fix_ipd_packet_chain(cvmx_wqe_t *work);
 
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-helper-fdt.h b/arch/mips/mach-octeon/include/mach/cvmx-helper-fdt.h
index d3809ae..3328845 100644
--- a/arch/mips/mach-octeon/include/mach/cvmx-helper-fdt.h
+++ b/arch/mips/mach-octeon/include/mach/cvmx-helper-fdt.h
@@ -141,7 +141,7 @@
  * @param[in,out] lenp		Number of phandles, input max number
  * @param[out]	nodes		Array of phandle nodes
  *
- * @return	-ve error code on error or 0 for success
+ * Return:	-ve error code on error or 0 for success
  */
 int cvmx_fdt_lookup_phandles(const void *fdt_addr, int node, const char *prop_name, int *lenp,
 			     int *nodes);
@@ -153,7 +153,7 @@
  * @param node		node to read address from
  * @param prop_name	property name to read
  *
- * @return address of property or FDT_ADDR_T_NONE if not found
+ * Return: address of property or FDT_ADDR_T_NONE if not found
  */
 static inline fdt_addr_t cvmx_fdt_get_addr(const void *fdt_addr, int node, const char *prop_name)
 {
@@ -168,7 +168,7 @@
  * @param[in] prop_name	property name to read
  * @param default_val	default value to return if property doesn't exist
  *
- * @return	integer value of property or default_val if it doesn't exist.
+ * Return:	integer value of property or default_val if it doesn't exist.
  */
 static inline int cvmx_fdt_get_int(const void *fdt_addr, int node, const char *prop_name,
 				   int default_val)
@@ -195,7 +195,7 @@
  * @param node		node to read phandle from
  * @param[in] prop_name	name of property to find
  *
- * @return	node offset if found, -ve error code on error
+ * Return:	node offset if found, -ve error code on error
  */
 static inline int cvmx_fdt_lookup_phandle(const void *fdt_addr, int node, const char *prop_name)
 {
@@ -214,7 +214,7 @@
  *				NOTE: in_addr must be in the native ENDIAN
  *				format.
  *
- * @return	Translated address or FDT_ADDR_T_NONE if address cannot be
+ * Return:	Translated address or FDT_ADDR_T_NONE if address cannot be
  *		translated.
  */
 static inline u64 cvmx_fdt_translate_address(const void *fdt_addr, int node, const u32 *in_addr)
@@ -228,7 +228,7 @@
  * @param[in] s1	First string to compare
  * @param[in] sw	Second string to compare
  *
- * @return	0 if no match
+ * Return:	0 if no match
  *		1 if only the part number matches and not the manufacturer
  *		2 if both the part number and manufacturer match
  */
@@ -241,7 +241,7 @@
  * @param	llen	string list total length
  * @param[in]	str	string to search for
  *
- * @return	1 if string list contains string, 0 if it does not.
+ * Return:	1 if string list contains string, 0 if it does not.
  */
 int cvmx_fdt_compat_list_contains(const char *slist, int llen, const char *str);
 
@@ -252,7 +252,7 @@
  * @param	node		node offset to check
  * @param[in]	compat		compatible string to check
  *
- * @return	0 if compatible, 1 if not compatible, error if negative
+ * Return:	0 if compatible, 1 if not compatible, error if negative
  */
 int cvmx_fdt_node_check_compatible(const void *fdt_addr, int node, const char *compat);
 
@@ -263,7 +263,7 @@
  * @param[in]	compat		compatible string
  * @param[in]	str		string to check
  *
- * @return	0 if not compatible, 1 if manufacturer compatible, 2 if
+ * Return:	0 if not compatible, 1 if manufacturer compatible, 2 if
  *		part is compatible, 3 if both part and manufacturer are
  *		compatible.
  */
@@ -276,7 +276,7 @@
  * @param	phandle		phandle to GPIO
  * @param[out]	size		Number of pins (optional, may be NULL)
  *
- * @return	Type of GPIO device or PIN_ERROR if error
+ * Return:	Type of GPIO device or PIN_ERROR if error
  */
 enum cvmx_gpio_type cvmx_fdt_get_gpio_type(const void *fdt_addr, int phandle, int *size);
 
@@ -289,7 +289,7 @@
  *				NULL for none.
  * @param[out]	addr		TWSI address number, can be NULL for none
  *
- * @return	0 for success, error otherwise
+ * Return:	0 for success, error otherwise
  */
 int cvmx_fdt_get_twsi_gpio_bus_addr(const void *fdt_addr, int phandle, int *bus, int *addr);
 
@@ -299,7 +299,7 @@
  * @param[in]	fdt_addr	Address of FDT
  * @param	node		FDT node number
  *
- * @return	CPU node number or error if negative
+ * Return:	CPU node number or error if negative
  */
 int cvmx_fdt_get_cpu_node(const void *fdt_addr, int node);
 
@@ -308,7 +308,7 @@
  *
  * @param[in]	fdt_addr	Address of FDT
  *
- * @return	Size of flat device tree in bytes or -1 if error.
+ * Return:	Size of flat device tree in bytes or -1 if error.
  */
 int cvmx_fdt_get_fdt_size(const void *fdt_addr);
 
@@ -320,7 +320,7 @@
  * @param[in]	strlist		Array of FDT device compatibility strings,
  *				must end with NULL or empty string.
  *
- * @return	0 if at least one item matches, 1 if no matches
+ * Return:	0 if at least one item matches, 1 if no matches
  */
 int cvmx_fdt_node_check_compatible_list(const void *fdt_addr, int node, const char *const *strlist);
 
@@ -332,7 +332,7 @@
  * @param	strlist		Array of FDT device compatibility strings, must
  *				end with NULL or empty string.
  *
- * @return	next matching node or -1 if no more matches.
+ * Return:	next matching node or -1 if no more matches.
  */
 int cvmx_fdt_node_offset_by_compatible_list(const void *fdt_addr, int startoffset,
 					    const char *const *strlist);
@@ -345,7 +345,7 @@
  * @param	of_offset	Offset of the parent node of a GPIO device in
  *				the device tree.
  *
- * @return	pointer to list of i2c devices starting from the root which
+ * Return:	pointer to list of i2c devices starting from the root which
  *		can include i2c muxes and switches or NULL if error.  Note that
  *		all entries are allocated on the heap.
  *
@@ -358,7 +358,7 @@
  *
  * @param[in]	bus	bus descriptor
  *
- * @return	Octeon twsi bus number or -1 on error
+ * Return:	Octeon twsi bus number or -1 on error
  */
 int cvmx_fdt_i2c_get_root_bus(const struct cvmx_fdt_i2c_bus_info *bus);
 
@@ -367,7 +367,7 @@
  *
  * @param	bus	bus to free
  *
- * @return	0
+ * Return:	0
  */
 int cvmx_fdt_free_i2c_bus(struct cvmx_fdt_i2c_bus_info *bus);
 
@@ -377,7 +377,7 @@
  * @param[in]	bus	i2c bus descriptor to enable or disable
  * @param	enable	set to true to enable, false to disable
  *
- * @return	0 for success or -1 for invalid bus
+ * Return:	0 for success or -1 for invalid bus
  *
  * This enables the entire bus including muxes and switches in the path.
  */
@@ -390,7 +390,7 @@
  * @param	of_offset	node offset for property
  * @param	prop_name	name of property
  *
- * @return	pointer to GPIO handle or NULL if error
+ * Return:	pointer to GPIO handle or NULL if error
  */
 struct cvmx_fdt_gpio_info *cvmx_fdt_gpio_get_info_phandle(const void *fdt_addr, int of_offset,
 							  const char *prop_name);
@@ -401,7 +401,7 @@
  * @param	pin	GPIO pin descriptor
  * @param	value	value to set it to, 0 or 1
  *
- * @return	0 on success, -1 on error.
+ * Return:	0 on success, -1 on error.
  *
  * NOTE: If the CVMX_GPIO_ACTIVE_LOW flag is set then the output value will be
  * inverted.
@@ -413,7 +413,7 @@
  *
  * @param	pin	GPIO pin descriptor
  *
- * @return	0 if low, 1 if high, -1 on error.  Note that the input will be
+ * Return:	0 if low, 1 if high, -1 on error.  Note that the input will be
  *		inverted if the CVMX_GPIO_ACTIVE_LOW flag bit is set.
  */
 int cvmx_fdt_gpio_get(struct cvmx_fdt_gpio_info *pin);
@@ -424,7 +424,7 @@
  * @param	sfp		Handle to SFP data structure
  * @param	ipd_port	Port to assign it to
  *
- * @return	0 for success, -1 on error
+ * Return:	0 for success, -1 on error
  */
 int cvmx_sfp_set_ipd_port(struct cvmx_fdt_sfp_info *sfp, int ipd_port);
 
@@ -433,7 +433,7 @@
  *
  * @param[in]	sfp		Handle to SFP data structure
  *
- * @return	IPD port number for SFP slot
+ * Return:	IPD port number for SFP slot
  */
 static inline int cvmx_sfp_get_ipd_port(const struct cvmx_fdt_sfp_info *sfp)
 {
@@ -469,7 +469,7 @@
  *
  * @param[in]	sfp	SFP to get phy info from
  *
- * @return	phy descriptor or NULL if none.
+ * Return:	phy descriptor or NULL if none.
  */
 static inline struct cvmx_phy_info *cvmx_sfp_get_phy_info(const struct cvmx_fdt_sfp_info *sfp)
 {
@@ -482,7 +482,7 @@
  *
  * @param[in]	fdt_addr	Address of flat device tree
  *
- * @return	0 for success, error otherwise
+ * Return:	0 for success, error otherwise
  */
 int __cvmx_fdt_parse_vsc7224(const void *fdt_addr);
 
@@ -492,7 +492,7 @@
  *
  * @param[in]   fdt_addr        Address of flat device tree
  *
- * @return      0 for success, error otherwise
+ * Return:      0 for success, error otherwise
  */
 int __cvmx_fdt_parse_avsp5410(const void *fdt_addr);
 
@@ -501,7 +501,7 @@
  *
  * @param[in]	fdt_addr	Address of flat device tree
  *
- * @return pointer to sfp info or NULL if error
+ * Return: pointer to sfp info or NULL if error
  */
 struct cvmx_fdt_sfp_info *cvmx_helper_fdt_parse_sfp_info(const void *fdt_addr, int of_offset);
 
@@ -512,7 +512,7 @@
  * @param	of_offset	offset of slice or phy in device tree
  * @param	phy_info	phy_info data structure to fill in
  *
- * @return	0 for success, -1 on error
+ * Return:	0 for success, -1 on error
  */
 int cvmx_fdt_parse_cs4343(const void *fdt_addr, int of_offset, struct cvmx_phy_info *phy_info);
 
@@ -533,7 +533,7 @@
  * @param bus	i2c bus number
  * @param addr	i2c device address (7 bits)
  *
- * @return 8-bit value or error if negative
+ * Return: 8-bit value or error if negative
  */
 int cvmx_fdt_i2c_reg_read(int bus, int addr);
 
@@ -545,7 +545,7 @@
  * @param reg	i2c 8-bit register address
  * @param val	8-bit value to write
  *
- * @return 0 for success, otherwise error
+ * Return: 0 for success, otherwise error
  */
 int cvmx_fdt_i2c_write8(int bus, int addr, int reg, u8 val);
 
@@ -556,7 +556,7 @@
  * @param addr	i2c device address (7 bits)
  * @param reg	i2c 8-bit register address
  *
- * @return value or error if negative
+ * Return: value or error if negative
  */
 int cvmx_fdt_i2c_read8(int bus, int addr, int reg);
 
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-helper-fpa.h b/arch/mips/mach-octeon/include/mach/cvmx-helper-fpa.h
index 8b3a89b..766cb07 100644
--- a/arch/mips/mach-octeon/include/mach/cvmx-helper-fpa.h
+++ b/arch/mips/mach-octeon/include/mach/cvmx-helper-fpa.h
@@ -29,7 +29,7 @@
  * @param dfa_buffers
  *               DFA command buffer. A relatively small (32 for example)
  *               number should work.
- * @return Zero on success, non-zero if out of memory
+ * Return: Zero on success, non-zero if out of memory
  */
 int cvmx_helper_initialize_fpa(int packet_buffers, int work_queue_entries, int pko_buffers,
 			       int tim_buffers, int dfa_buffers);
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-helper-gpio.h b/arch/mips/mach-octeon/include/mach/cvmx-helper-gpio.h
index 787eccf..b63f654 100644
--- a/arch/mips/mach-octeon/include/mach/cvmx-helper-gpio.h
+++ b/arch/mips/mach-octeon/include/mach/cvmx-helper-gpio.h
@@ -272,7 +272,7 @@
  * @param[in]	fdt_addr	Pointer to FDT
  * @param	phandle		phandle of GPIO entry
  *
- * @return	Pointer to op function or NULL if not found.
+ * Return:	Pointer to op function or NULL if not found.
  */
 cvmx_fdt_gpio_op_func_t cvmx_fdt_gpio_get_op_func(const void *fdt_addr, int phandle);
 
@@ -283,7 +283,7 @@
  * @param	phandle		phandle to GPIO
  * @param[out]	size		Number of pins (optional, may be NULL)
  *
- * @return	Type of GPIO device or PIN_ERROR if error
+ * Return:	Type of GPIO device or PIN_ERROR if error
  */
 enum cvmx_gpio_type cvmx_fdt_get_gpio_type(const void *fdt_addr, int phandle, int *size);
 
@@ -294,7 +294,7 @@
  * @param	of_offset	node offset of GPIO device
  * @param	prop_name	name of property
  *
- * @return	pointer to GPIO handle or NULL if error
+ * Return:	pointer to GPIO handle or NULL if error
  */
 struct cvmx_fdt_gpio_info *cvmx_fdt_gpio_get_info(const void *fdt_addr, int of_offset,
 						  const char *prop_name);
@@ -306,7 +306,7 @@
  * @param	of_offset	node offset for property
  * @param	prop_name	name of property
  *
- * @return	pointer to GPIO handle or NULL if error
+ * Return:	pointer to GPIO handle or NULL if error
  */
 struct cvmx_fdt_gpio_info *cvmx_fdt_gpio_get_info_phandle(const void *fdt_addr, int of_offset,
 							  const char *prop_name);
@@ -320,7 +320,7 @@
  * @param	flags		flags set (1 = invert)
  * @param[out]	gpio		GPIO info data structure
  *
- * @return	0 for success, -1 on error
+ * Return:	0 for success, -1 on error
  */
 int cvmx_fdt_parse_gpio(const void *fdt_addr, int phandle, int pin, u32 flags,
 			struct cvmx_fdt_gpio_info *gpio);
@@ -336,7 +336,7 @@
  *
  * @param	pin	GPIO pin descriptor
  *
- * @return	0 if low, 1 if high, -1 on error.  Note that the input will be
+ * Return:	0 if low, 1 if high, -1 on error.  Note that the input will be
  *		inverted if the CVMX_GPIO_ACTIVE_LOW flag bit is set.
  */
 int cvmx_fdt_gpio_get(struct cvmx_fdt_gpio_info *pin);
@@ -347,7 +347,7 @@
  * @param	gpio	GPIO pin descriptor
  * @param	value	value to set it to, 0 or 1
  *
- * @return	0 on success, -1 on error.
+ * Return:	0 on success, -1 on error.
  *
  * NOTE: If the CVMX_GPIO_ACTIVE_LOW flag is set then the output value will be
  * inverted.
@@ -368,7 +368,7 @@
  * @param	gpio	GPIO handle
  * @param	blink	True to start blinking, false to stop
  *
- * @return	0 for success, -1 on error
+ * Return:	0 for success, -1 on error
  * NOTE: Not all GPIO types support blinking.
  */
 int cvmx_fdt_gpio_set_blink(struct cvmx_fdt_gpio_info *gpio, bool blink);
@@ -379,7 +379,7 @@
  * @param	gpio	GPIO handle
  * @param	blink	True to start blinking, false to use link status
  *
- * @return	0 for success, -1 on error
+ * Return:	0 for success, -1 on error
  * NOTE: Not all GPIO types support this.
  */
 int cvmx_fdt_gpio_set_link_blink(struct cvmx_fdt_gpio_info *gpio, bool blink);
@@ -404,7 +404,7 @@
  * @param	gpio		GPIO assigned to LED (can be NULL)
  * @param	last		Previous LED to build a list
  *
- * @return	pointer to LED data structure or NULL if out of memory
+ * Return:	pointer to LED data structure or NULL if out of memory
  */
 struct cvmx_fdt_gpio_led *cvmx_alloc_led(const char *name, int of_offset,
 					 struct cvmx_fdt_gpio_info *gpio,
@@ -418,7 +418,7 @@
  * @param	gpio			GPIO data structure to use (can be NULL)
  * @param	last			Previous LED if this is a group of LEDs
  *
- * @return	Pointer to LED data structure or NULL if error
+ * Return:	Pointer to LED data structure or NULL if error
  */
 struct cvmx_fdt_gpio_led *cvmx_fdt_parse_led(const void *fdt_addr, int led_of_offset,
 					     struct cvmx_fdt_gpio_info *gpio,
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-helper-ilk.h b/arch/mips/mach-octeon/include/mach/cvmx-helper-ilk.h
index 29af48e..500b5d5 100644
--- a/arch/mips/mach-octeon/include/mach/cvmx-helper-ilk.h
+++ b/arch/mips/mach-octeon/include/mach/cvmx-helper-ilk.h
@@ -48,7 +48,7 @@
  *
  * @param xiface Interface to probe
  *
- * @return Number of ports on the interface. Zero to disable.
+ * Return: Number of ports on the interface. Zero to disable.
  */
 int __cvmx_helper_ilk_probe(int xiface);
 
@@ -60,7 +60,7 @@
  *
  * @param xiface Interface to bring up
  *
- * @return Zero on success, negative on failure
+ * Return: Zero on success, negative on failure
  */
 int __cvmx_helper_ilk_enable(int xiface);
 
@@ -70,7 +70,7 @@
  *
  * @param ipd_port IPD/PKO port to query
  *
- * @return Link state
+ * Return: Link state
  */
 cvmx_helper_link_info_t __cvmx_helper_ilk_link_get(int ipd_port);
 
@@ -85,7 +85,7 @@
  * @param ipd_port  IPD/PKO port to configure
  * @param link_info The new link state
  *
- * @return Zero on success, negative on failure
+ * Return: Zero on success, negative on failure
  */
 int __cvmx_helper_ilk_link_set(int ipd_port, cvmx_helper_link_info_t link_info);
 
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-helper-jtag.h b/arch/mips/mach-octeon/include/mach/cvmx-helper-jtag.h
index fa379ea..d379d11 100644
--- a/arch/mips/mach-octeon/include/mach/cvmx-helper-jtag.h
+++ b/arch/mips/mach-octeon/include/mach/cvmx-helper-jtag.h
@@ -48,7 +48,7 @@
  * @param data   Data to shift in. Bit 0 enters the chain first, followed by
  *               bit 1, etc.
  *
- * @return The low order bits of the JTAG chain that shifted out of the
+ * Return: The low order bits of the JTAG chain that shifted out of the
  *         circle.
  */
 u32 cvmx_helper_qlm_jtag_shift(int qlm, int bits, u32 data);
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-helper-loop.h b/arch/mips/mach-octeon/include/mach/cvmx-helper-loop.h
index defd955..4370738 100644
--- a/arch/mips/mach-octeon/include/mach/cvmx-helper-loop.h
+++ b/arch/mips/mach-octeon/include/mach/cvmx-helper-loop.h
@@ -17,7 +17,7 @@
  *
  * @param xiface Interface to probe
  *
- * @return Number of ports on the interface. Zero to disable.
+ * Return: Number of ports on the interface. Zero to disable.
  */
 int __cvmx_helper_loop_probe(int xiface);
 int __cvmx_helper_loop_enumerate(int xiface);
@@ -30,7 +30,7 @@
  *
  * @param xiface Interface to bring up
  *
- * @return Zero on success, negative on failure
+ * Return: Zero on success, negative on failure
  */
 int __cvmx_helper_loop_enable(int xiface);
 
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-helper-npi.h b/arch/mips/mach-octeon/include/mach/cvmx-helper-npi.h
index 6a600a0..fe257c9 100644
--- a/arch/mips/mach-octeon/include/mach/cvmx-helper-npi.h
+++ b/arch/mips/mach-octeon/include/mach/cvmx-helper-npi.h
@@ -17,7 +17,7 @@
  *
  * @param interface Interface to probe
  *
- * @return Number of ports on the interface. Zero to disable.
+ * Return: Number of ports on the interface. Zero to disable.
  */
 int __cvmx_helper_npi_probe(int interface);
 
@@ -29,7 +29,7 @@
  *
  * @param xiface Interface to bring up
  *
- * @return Zero on success, negative on failure
+ * Return: Zero on success, negative on failure
  */
 int __cvmx_helper_npi_enable(int xiface);
 
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-helper-pki.h b/arch/mips/mach-octeon/include/mach/cvmx-helper-pki.h
index f5933f2..ff32dab 100644
--- a/arch/mips/mach-octeon/include/mach/cvmx-helper-pki.h
+++ b/arch/mips/mach-octeon/include/mach/cvmx-helper-pki.h
@@ -163,7 +163,7 @@
  * @param bp_thresh     backpressure threshold.
  * @param ena_drop      enable tail drop.
  *			1:enable 0:disable
- * @return Zero on success. Negative on failure
+ * Return: Zero on success. Negative on failure
  */
 int cvmx_helper_setup_aura_qos(int node, int aura, bool ena_red, bool ena_drop, u64 pass_thresh,
 			       u64 drop_thresh, bool ena_bp, u64 bp_thresh);
@@ -177,7 +177,7 @@
  * @param bpid          bpid to map.
  * @param chl_map       array of channels to map to that bpid.
  * @param chl_cnt	number of channel/ports to map to that bpid.
- * @return Zero on success. Negative on failure
+ * Return: Zero on success. Negative on failure
  */
 int cvmx_helper_pki_map_aura_chl_bpid(int node, u16 aura, u16 bpid, u16 chl_map[], u16 chl_cnt);
 
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-helper-pko3.h b/arch/mips/mach-octeon/include/mach/cvmx-helper-pko3.h
index ca8d848..f985ce2 100644
--- a/arch/mips/mach-octeon/include/mach/cvmx-helper-pko3.h
+++ b/arch/mips/mach-octeon/include/mach/cvmx-helper-pko3.h
@@ -12,7 +12,7 @@
  * Covers the common hardware, memory and global configuration.
  * Per-interface initialization is performed separately.
  *
- * @return 0 on success.
+ * Return: 0 on success.
  *
  */
 int cvmx_helper_pko3_init_global(unsigned int node);
@@ -29,7 +29,7 @@
  * Configure and initialize PKO3 for an interface
  *
  * @param interface is the interface number to configure
- * @return 0 on success.
+ * Return: 0 on success.
  *
  */
 int cvmx_helper_pko3_init_interface(int xiface);
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-helper-rgmii.h b/arch/mips/mach-octeon/include/mach/cvmx-helper-rgmii.h
index 2a206a8..8930136 100644
--- a/arch/mips/mach-octeon/include/mach/cvmx-helper-rgmii.h
+++ b/arch/mips/mach-octeon/include/mach/cvmx-helper-rgmii.h
@@ -15,7 +15,7 @@
  *
  * @param xiface Interface to probe
  *
- * @return Number of RGMII/GMII/MII ports (0-4).
+ * Return: Number of RGMII/GMII/MII ports (0-4).
  */
 int __cvmx_helper_rgmii_probe(int xiface);
 
@@ -35,7 +35,7 @@
  *
  * @param xiface PKO Interface to configure (0 or 1)
  *
- * @return Zero on success
+ * Return: Zero on success
  */
 int __cvmx_helper_rgmii_enable(int xiface);
 
@@ -48,7 +48,7 @@
  *
  * @param ipd_port IPD/PKO port to query
  *
- * @return Link state
+ * Return: Link state
  */
 cvmx_helper_link_info_t __cvmx_helper_gmii_link_get(int ipd_port);
 
@@ -61,7 +61,7 @@
  *
  * @param ipd_port IPD/PKO port to query
  *
- * @return Link state
+ * Return: Link state
  */
 cvmx_helper_link_info_t __cvmx_helper_rgmii_link_get(int ipd_port);
 
@@ -76,7 +76,7 @@
  * @param ipd_port  IPD/PKO port to configure
  * @param link_info The new link state
  *
- * @return Zero on success, negative on failure
+ * Return: Zero on success, negative on failure
  */
 int __cvmx_helper_rgmii_link_set(int ipd_port, cvmx_helper_link_info_t link_info);
 
@@ -92,7 +92,7 @@
  * @param enable_external
  *                 Non zero if you want external loopback
  *
- * @return Zero on success, negative on failure.
+ * Return: Zero on success, negative on failure.
  */
 int __cvmx_helper_rgmii_configure_loopback(int ipd_port, int enable_internal, int enable_external);
 
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-helper-sfp.h b/arch/mips/mach-octeon/include/mach/cvmx-helper-sfp.h
index 6fe5509..655bb10 100644
--- a/arch/mips/mach-octeon/include/mach/cvmx-helper-sfp.h
+++ b/arch/mips/mach-octeon/include/mach/cvmx-helper-sfp.h
@@ -264,7 +264,7 @@
  * @param	i2c_bus		i2c bus number to read from for SFP port
  * @param	i2c_addr	i2c address to use, 0 for default
  *
- * @return	-1 if invalid bus or i2c read error, 0 for success
+ * Return:	-1 if invalid bus or i2c read error, 0 for success
  */
 int cvmx_phy_sfp_read_i2c_eeprom(u8 *buffer, int i2c_bus, int i2c_addr);
 
@@ -275,7 +275,7 @@
  * @param[out]	sfp_info	Info about SFP module
  * @param[in]	buffer		SFP EEPROM buffer to parse
  *
- * @return	0 on success, -1 if error reading EEPROM or if EEPROM corrupt
+ * Return:	0 on success, -1 if error reading EEPROM or if EEPROM corrupt
  */
 int cvmx_phy_sfp_parse_eeprom(struct cvmx_sfp_mod_info *sfp_info, const u8 *buffer);
 
@@ -291,7 +291,7 @@
  *
  * @param	sfp	sfp handle to read
  *
- * @return	0 for success, -1 on error.
+ * Return:	0 for success, -1 on error.
  */
 int cvmx_sfp_read_i2c_eeprom(struct cvmx_fdt_sfp_info *sfp);
 
@@ -300,7 +300,7 @@
  *
  * @param       sfp             sfp handle
  *
- * @return      sfp_info        Pointer sfp mod info data structure
+ * Return:      sfp_info        Pointer sfp mod info data structure
  */
 const struct cvmx_sfp_mod_info *cvmx_phy_get_sfp_mod_info(const struct cvmx_fdt_sfp_info *sfp);
 
@@ -311,7 +311,7 @@
  * @param	sfp	Handle to SFP information.
  * @param	data	User-defined data passed to the function
  *
- * @return	0 if absent, 1 if present, -1 on error
+ * Return:	0 if absent, 1 if present, -1 on error
  */
 int cvmx_sfp_check_mod_abs(struct cvmx_fdt_sfp_info *sfp, void *data);
 
@@ -323,7 +323,7 @@
  * @param	check_mod_abs	Function to be called or NULL to remove
  * @param	mod_abs_data	User-defined data to be passed to check_mod_abs
  *
- * @return	0 for success
+ * Return:	0 for success
  */
 int cvmx_sfp_register_check_mod_abs(struct cvmx_fdt_sfp_info *sfp,
 				    int (*check_mod_abs)(struct cvmx_fdt_sfp_info *sfp, void *data),
@@ -339,7 +339,7 @@
  * @param	mod_abs_changed_data	User-defined data passed to
  *					mod_abs_changed
  *
- * @return	0 for success
+ * Return:	0 for success
  */
 int cvmx_sfp_register_mod_abs_changed(struct cvmx_fdt_sfp_info *sfp,
 				      int (*mod_abs_changed)(struct cvmx_fdt_sfp_info *sfp, int val,
@@ -352,7 +352,7 @@
  * @param	sfp	Handle to SFP information.
  * @param	data	User-defined data passed to the function
  *
- * @return	0 if signal present, 1 if signal absent, -1 on error
+ * Return:	0 if signal present, 1 if signal absent, -1 on error
  */
 int cvmx_sfp_check_tx_fault(struct cvmx_fdt_sfp_info *sfp, void *data);
 
@@ -362,7 +362,7 @@
  * @param	sfp	Handle to SFP information.
  * @param	data	User-defined data passed to the function
  *
- * @return	0 if signal present, 1 if signal absent, -1 on error
+ * Return:	0 if signal present, 1 if signal absent, -1 on error
  */
 int cvmx_sfp_check_rx_los(struct cvmx_fdt_sfp_info *sfp, void *data);
 
@@ -375,7 +375,7 @@
  * @param	rx_los_changed_data	User-defined data passed to
  *					rx_los_changed
  *
- * @return	0 for success
+ * Return:	0 for success
  */
 int cvmx_sfp_register_rx_los_changed(struct cvmx_fdt_sfp_info *sfp,
 				     int (*rx_los_changed)(struct cvmx_fdt_sfp_info *sfp, int val,
@@ -387,7 +387,7 @@
  *
  * @param	fdt_addr	Address of flat device-tree
  *
- * @return	0 for success, -1 on error
+ * Return:	0 for success, -1 on error
  */
 int cvmx_sfp_parse_device_tree(const void *fdt_addr);
 
@@ -396,7 +396,7 @@
  *
  * @param	ipd_port	IPD port number to search for
  *
- * @return	pointer to SFP data structure or NULL if not found
+ * Return:	pointer to SFP data structure or NULL if not found
  */
 struct cvmx_fdt_sfp_info *cvmx_sfp_find_slot_by_port(int ipd_port);
 
@@ -405,14 +405,14 @@
  *
  * @param	of_offset	flat device tree node offset
  *
- * @return	pointer to SFP data structure or NULL if not found
+ * Return:	pointer to SFP data structure or NULL if not found
  */
 struct cvmx_fdt_sfp_info *cvmx_sfp_find_slot_by_fdt_node(int of_offset);
 
 /**
  * Reads the EEPROMs of all SFP modules.
  *
- * @return 0 for success
+ * Return: 0 for success
  */
 int cvmx_sfp_read_all_modules(void);
 
@@ -422,7 +422,7 @@
  * @param[in]	sfp	SFP port to check
  * @param	mode	interface mode
  *
- * @return	true if module is valid, false if invalid
+ * Return:	true if module is valid, false if invalid
  * NOTE: This will also toggle the error LED, if present
  */
 bool cvmx_sfp_validate_module(struct cvmx_fdt_sfp_info *sfp, int mode);
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-helper-sgmii.h b/arch/mips/mach-octeon/include/mach/cvmx-helper-sgmii.h
index c5110c9..0b32a73 100644
--- a/arch/mips/mach-octeon/include/mach/cvmx-helper-sgmii.h
+++ b/arch/mips/mach-octeon/include/mach/cvmx-helper-sgmii.h
@@ -17,7 +17,7 @@
  *
  * @param xiface Interface to probe
  *
- * @return Number of ports on the interface. Zero to disable.
+ * Return: Number of ports on the interface. Zero to disable.
  */
 int __cvmx_helper_sgmii_probe(int xiface);
 int __cvmx_helper_sgmii_enumerate(int xiface);
@@ -30,7 +30,7 @@
  *
  * @param xiface Interface to bring up
  *
- * @return Zero on success, negative on failure
+ * Return: Zero on success, negative on failure
  */
 int __cvmx_helper_sgmii_enable(int xiface);
 
@@ -43,7 +43,7 @@
  *
  * @param ipd_port IPD/PKO port to query
  *
- * @return Link state
+ * Return: Link state
  */
 cvmx_helper_link_info_t __cvmx_helper_sgmii_link_get(int ipd_port);
 
@@ -58,7 +58,7 @@
  * @param ipd_port  IPD/PKO port to configure
  * @param link_info The new link state
  *
- * @return Zero on success, negative on failure
+ * Return: Zero on success, negative on failure
  */
 int __cvmx_helper_sgmii_link_set(int ipd_port, cvmx_helper_link_info_t link_info);
 
@@ -74,7 +74,7 @@
  * @param enable_external
  *                 Non zero if you want external loopback
  *
- * @return Zero on success, negative on failure.
+ * Return: Zero on success, negative on failure.
  */
 int __cvmx_helper_sgmii_configure_loopback(int ipd_port, int enable_internal, int enable_external);
 
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-helper-spi.h b/arch/mips/mach-octeon/include/mach/cvmx-helper-spi.h
index cae72f2..1adc6f7 100644
--- a/arch/mips/mach-octeon/include/mach/cvmx-helper-spi.h
+++ b/arch/mips/mach-octeon/include/mach/cvmx-helper-spi.h
@@ -19,7 +19,7 @@
  *
  * @param interface Interface to probe
  *
- * @return Number of ports on the interface. Zero to disable.
+ * Return: Number of ports on the interface. Zero to disable.
  */
 int __cvmx_helper_spi_probe(int interface);
 int __cvmx_helper_spi_enumerate(int interface);
@@ -32,7 +32,7 @@
  *
  * @param interface Interface to bring up
  *
- * @return Zero on success, negative on failure
+ * Return: Zero on success, negative on failure
  */
 int __cvmx_helper_spi_enable(int interface);
 
@@ -45,7 +45,7 @@
  *
  * @param ipd_port IPD/PKO port to query
  *
- * @return Link state
+ * Return: Link state
  */
 cvmx_helper_link_info_t __cvmx_helper_spi_link_get(int ipd_port);
 
@@ -60,7 +60,7 @@
  * @param ipd_port  IPD/PKO port to configure
  * @param link_info The new link state
  *
- * @return Zero on success, negative on failure
+ * Return: Zero on success, negative on failure
  */
 int __cvmx_helper_spi_link_set(int ipd_port, cvmx_helper_link_info_t link_info);
 
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-helper-srio.h b/arch/mips/mach-octeon/include/mach/cvmx-helper-srio.h
index 2b7571d..47db709 100644
--- a/arch/mips/mach-octeon/include/mach/cvmx-helper-srio.h
+++ b/arch/mips/mach-octeon/include/mach/cvmx-helper-srio.h
@@ -16,7 +16,7 @@
  *
  * @param xiface Interface to convert
  *
- * @return Srio link number
+ * Return: Srio link number
  */
 int __cvmx_helper_srio_port(int xiface);
 
@@ -28,7 +28,7 @@
  *
  * @param xiface Interface to probe
  *
- * @return Number of ports on the interface. Zero to disable.
+ * Return: Number of ports on the interface. Zero to disable.
  */
 int __cvmx_helper_srio_probe(int xiface);
 
@@ -40,7 +40,7 @@
  *
  * @param xiface Interface to bring up
  *
- * @return Zero on success, negative on failure
+ * Return: Zero on success, negative on failure
  */
 int __cvmx_helper_srio_enable(int xiface);
 
@@ -50,7 +50,7 @@
  *
  * @param ipd_port IPD/PKO port to query
  *
- * @return Link state
+ * Return: Link state
  */
 cvmx_helper_link_info_t __cvmx_helper_srio_link_get(int ipd_port);
 
@@ -65,7 +65,7 @@
  * @param ipd_port  IPD/PKO port to configure
  * @param link_info The new link state
  *
- * @return Zero on success, negative on failure
+ * Return: Zero on success, negative on failure
  */
 int __cvmx_helper_srio_link_set(int ipd_port, cvmx_helper_link_info_t link_info);
 
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-helper-util.h b/arch/mips/mach-octeon/include/mach/cvmx-helper-util.h
index cf98eae..ffdd8d0 100644
--- a/arch/mips/mach-octeon/include/mach/cvmx-helper-util.h
+++ b/arch/mips/mach-octeon/include/mach/cvmx-helper-util.h
@@ -82,7 +82,7 @@
  *
  * @param xiface interface with node information
  *
- * @return struct that contains node and interface number.
+ * Return: struct that contains node and interface number.
  */
 static inline struct cvmx_xiface cvmx_helper_xiface_to_node_interface(int xiface)
 {
@@ -237,7 +237,7 @@
  *
  * @param mode   Mode to convert
  *
- * @return String
+ * Return: String
  */
 const char *cvmx_helper_interface_mode_to_string(cvmx_helper_interface_mode_t mode);
 
@@ -252,7 +252,7 @@
 /**
  * Get the version of the CVMX libraries.
  *
- * @return Version string. Note this buffer is allocated statically
+ * Return: Version string. Note this buffer is allocated statically
  *         and will be shared by all callers.
  */
 const char *cvmx_helper_get_version(void);
@@ -266,7 +266,7 @@
  * @param xiface Interface to configure
  * @param num_ports Number of ports on the interface
  *
- * @return Zero on success, negative on failure
+ * Return: Zero on success, negative on failure
  */
 int __cvmx_helper_setup_gmx(int xiface, int num_ports);
 
@@ -276,7 +276,7 @@
  *
  * @param interface
  *
- * @return the number of pko_ports on the interface.
+ * Return: the number of pko_ports on the interface.
  */
 int __cvmx_helper_get_num_pko_ports(int interface);
 
@@ -287,7 +287,7 @@
  * @param interface Interface to use
  * @param port      Port on the interface
  *
- * @return IPD port number
+ * Return: IPD port number
  */
 int cvmx_helper_get_ipd_port(int interface, int port);
 
@@ -298,7 +298,7 @@
  * @param interface Interface to use
  * @param port      Port on the interface
  *
- * @return PKO port number and -1 on error.
+ * Return: PKO port number and -1 on error.
  */
 int cvmx_helper_get_pko_port(int interface, int port);
 
@@ -308,7 +308,7 @@
  *
  * @param interface Interface to use
  *
- * @return IPD/PKO port number
+ * Return: IPD/PKO port number
  */
 static inline int cvmx_helper_get_first_ipd_port(int interface)
 {
@@ -323,7 +323,7 @@
  *
  * @param interface Interface to use
  *
- * @return IPD/PKO port number
+ * Return: IPD/PKO port number
  *
  * Note: for o68, the last ipd port on an interface does not always equal to
  * the first plus the number of ports as the ipd ports are not contiguous in
@@ -354,7 +354,7 @@
  *
  * @param ipd_port IPD/PKO port number
  *
- * @return Interface number
+ * Return: Interface number
  */
 int cvmx_helper_get_interface_num(int ipd_port);
 
@@ -364,7 +364,7 @@
  *
  * @param ipd_port IPD/PKO port number
  *
- * @return Interface index number
+ * Return: Interface index number
  */
 int cvmx_helper_get_interface_index_num(int ipd_port);
 
@@ -374,7 +374,7 @@
  * @param xiface  Interface
  * @param index   index of the port in the interface
  *
- * @return port kind on sucicess  and -1 on failure
+ * Return: port kind on sucicess  and -1 on failure
  */
 int cvmx_helper_get_pknd(int xiface, int index);
 
@@ -384,7 +384,7 @@
  * @param interface  Interface
  * @param port       index of the port in the interface
  *
- * @return port kind on sucicess  and -1 on failure
+ * Return: port kind on sucicess  and -1 on failure
  */
 int cvmx_helper_get_bpid(int interface, int port);
 
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-helper-xaui.h b/arch/mips/mach-octeon/include/mach/cvmx-helper-xaui.h
index 6ff4576..2d9b0be 100644
--- a/arch/mips/mach-octeon/include/mach/cvmx-helper-xaui.h
+++ b/arch/mips/mach-octeon/include/mach/cvmx-helper-xaui.h
@@ -17,7 +17,7 @@
  *
  * @param xiface Interface to probe
  *
- * @return Number of ports on the interface. Zero to disable.
+ * Return: Number of ports on the interface. Zero to disable.
  */
 int __cvmx_helper_xaui_probe(int xiface);
 int __cvmx_helper_xaui_enumerate(int xiface);
@@ -30,7 +30,7 @@
  *
  * @param xiface Interface to bring up
  *
- * @return Zero on success, negative on failure
+ * Return: Zero on success, negative on failure
  */
 int __cvmx_helper_xaui_enable(int xiface);
 
@@ -47,7 +47,7 @@
  *
  * @param interface Interface to retrain
  *
- * @return Zero on success, negative on failure
+ * Return: Zero on success, negative on failure
  */
 int cvmx_helper_xaui_link_retrain(int interface);
 
@@ -57,7 +57,7 @@
  *
  * @param interface	Interface to reinitialize
  *
- * @return	0 on success, negative on failure
+ * Return:	0 on success, negative on failure
  */
 int cvmx_helper_xaui_link_reinit(int interface);
 
@@ -70,7 +70,7 @@
  *
  * @param ipd_port IPD/PKO port to query
  *
- * @return Link state
+ * Return: Link state
  */
 cvmx_helper_link_info_t __cvmx_helper_xaui_link_get(int ipd_port);
 
@@ -85,7 +85,7 @@
  * @param ipd_port  IPD/PKO port to configure
  * @param link_info The new link state
  *
- * @return Zero on success, negative on failure
+ * Return: Zero on success, negative on failure
  */
 int __cvmx_helper_xaui_link_set(int ipd_port, cvmx_helper_link_info_t link_info);
 
@@ -101,7 +101,7 @@
  * @param enable_external
  *                 Non zero if you want external loopback
  *
- * @return Zero on success, negative on failure.
+ * Return: Zero on success, negative on failure.
  */
 int __cvmx_helper_xaui_configure_loopback(int ipd_port, int enable_internal, int enable_external);
 
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-helper.h b/arch/mips/mach-octeon/include/mach/cvmx-helper.h
index b82e201..caa0c69 100644
--- a/arch/mips/mach-octeon/include/mach/cvmx-helper.h
+++ b/arch/mips/mach-octeon/include/mach/cvmx-helper.h
@@ -134,7 +134,7 @@
  * IPD configuration changes are made if CVMX_HELPER_ENABLE_IPD
  * is not set in the executive-config.h file.
  *
- * @return 0 on success
+ * Return: 0 on success
  *         -1 on failure
  */
 int cvmx_helper_ipd_and_packet_input_enable_node(int node);
@@ -146,7 +146,7 @@
  * @param wqe_entries The maximum number of work queue entries to be
  * supported.
  *
- * @return Zero on success, non-zero on failure.
+ * Return: Zero on success, non-zero on failure.
  */
 int cvmx_helper_initialize_sso(int wqe_entries);
 
@@ -157,14 +157,14 @@
  * @param wqe_entries The maximum number of work queue entries to be
  * supported.
  *
- * @return Zero on success, non-zero on failure.
+ * Return: Zero on success, non-zero on failure.
  */
 int cvmx_helper_initialize_sso_node(unsigned int node, int wqe_entries);
 
 /**
  * Undo the effect of cvmx_helper_initialize_sso().
  *
- * @return Zero on success, non-zero on failure.
+ * Return: Zero on success, non-zero on failure.
  */
 int cvmx_helper_uninitialize_sso(void);
 
@@ -173,7 +173,7 @@
  *
  * @param node Node SSO to initialize
  *
- * @return Zero on success, non-zero on failure.
+ * Return: Zero on success, non-zero on failure.
  */
 int cvmx_helper_uninitialize_sso_node(unsigned int node);
 
@@ -184,7 +184,7 @@
  * on CVMX_PKO_QUEUES_PER_PORT_* where each queue is lower
  * priority than the previous.
  *
- * @return Zero on success, non-zero on failure
+ * Return: Zero on success, non-zero on failure
  */
 int cvmx_helper_initialize_packet_io_global(void);
 /**
@@ -196,14 +196,14 @@
  *
  * @param node Node on which to initialize packet io hardware
  *
- * @return Zero on success, non-zero on failure
+ * Return: Zero on success, non-zero on failure
  */
 int cvmx_helper_initialize_packet_io_node(unsigned int node);
 
 /**
  * Does core local initialization for packet io
  *
- * @return Zero on success, non-zero on failure
+ * Return: Zero on success, non-zero on failure
  */
 int cvmx_helper_initialize_packet_io_local(void);
 
@@ -216,7 +216,7 @@
  * buffers used by the packet IO hardware to the FPA so a function emptying the
  * FPA after shutdown should find all packet buffers in the FPA.
  *
- * @return Zero on success, negative on failure.
+ * Return: Zero on success, negative on failure.
  */
 int cvmx_helper_shutdown_packet_io_global(void);
 
@@ -228,7 +228,7 @@
 /**
  * Does core local shutdown of packet io
  *
- * @return Zero on success, non-zero on failure
+ * Return: Zero on success, non-zero on failure
  */
 int cvmx_helper_shutdown_packet_io_local(void);
 
@@ -239,7 +239,7 @@
  *
  * @param interface Which interface to return port count for.
  *
- * @return Port count for interface
+ * Return: Port count for interface
  *         -1 for uninitialized interface
  */
 int cvmx_helper_ports_on_interface(int interface);
@@ -250,7 +250,7 @@
  * but the CNX0XX and CNX1XX are exceptions. These only support
  * one interface.
  *
- * @return Number of interfaces on chip
+ * Return: Number of interfaces on chip
  */
 int cvmx_helper_get_number_of_interfaces(void);
 
@@ -261,7 +261,7 @@
  *
  * @param xiface Interface to probe
  *
- * @return Mode of the interface. Unknown or unsupported interfaces return
+ * Return: Mode of the interface. Unknown or unsupported interfaces return
  *         DISABLED.
  */
 cvmx_helper_interface_mode_t cvmx_helper_interface_get_mode(int xiface);
@@ -273,7 +273,7 @@
  *
  * @param ipd_port IPD/PKO port to auto configure
  *
- * @return Link state after configure
+ * Return: Link state after configure
  */
 cvmx_helper_link_info_t cvmx_helper_link_autoconf(int ipd_port);
 
@@ -285,7 +285,7 @@
  *
  * @param ipd_port IPD/PKO port to query
  *
- * @return Link state
+ * Return: Link state
  */
 cvmx_helper_link_info_t cvmx_helper_link_get(int ipd_port);
 
@@ -299,7 +299,7 @@
  * @param ipd_port  IPD/PKO port to configure
  * @param link_info The new link state
  *
- * @return Zero on success, negative on failure
+ * Return: Zero on success, negative on failure
  */
 int cvmx_helper_link_set(int ipd_port, cvmx_helper_link_info_t link_info);
 
@@ -312,7 +312,7 @@
  *
  * @param xiface Interface to probe
  *
- * @return Zero on success, negative on failure
+ * Return: Zero on success, negative on failure
  */
 int cvmx_helper_interface_probe(int xiface);
 
@@ -322,7 +322,7 @@
  *
  * @param xiface Interface to enumerate
  *
- * @return Zero on success, negative on failure
+ * Return: Zero on success, negative on failure
  */
 int cvmx_helper_interface_enumerate(int xiface);
 
@@ -337,7 +337,7 @@
  * @param enable_external
  *                 Non zero if you want external loopback
  *
- * @return Zero on success, negative on failure.
+ * Return: Zero on success, negative on failure.
  */
 int cvmx_helper_configure_loopback(int ipd_port, int enable_internal, int enable_external);
 
@@ -346,7 +346,7 @@
  *
  * @param interface Which interface to return port count for.
  *
- * @return Port count for interface
+ * Return: Port count for interface
  *         -1 for uninitialized interface
  */
 int __cvmx_helper_early_ports_on_interface(int interface);
@@ -404,7 +404,7 @@
  *
  * @param xiface
  *
- * @return the number of ipd_ports on the interface and -1 for error.
+ * Return: the number of ipd_ports on the interface and -1 for error.
  */
 int __cvmx_helper_get_num_ipd_ports(int xiface);
 
@@ -419,7 +419,7 @@
  * @param pad The padding that PKO should apply.
  * interface.
  *
- * @return 0 for success and -1 for failure
+ * Return: 0 for success and -1 for failure
  */
 int __cvmx_helper_init_interface(int xiface, int num_ipd_ports, int has_fcs,
 				 enum cvmx_pko_padding pad);
@@ -434,14 +434,14 @@
  * hardware ports. PKO should still be disabled to make sure packets
  * aren't sent out partially setup hardware.
  *
- * @return Zero on success, negative on failure
+ * Return: Zero on success, negative on failure
  */
 int __cvmx_helper_packet_hardware_enable(int xiface);
 
 /*
  * @INTERNAL
  *
- * @return 0 for success and -1 for failure
+ * Return: 0 for success and -1 for failure
  */
 int __cvmx_helper_set_link_info(int xiface, int index, cvmx_helper_link_info_t link_info);
 
@@ -451,7 +451,7 @@
  * @param xiface
  * @param port
  *
- * @return valid link_info on success or -1 on failure
+ * Return: valid link_info on success or -1 on failure
  */
 cvmx_helper_link_info_t __cvmx_helper_get_link_info(int xiface, int port);
 
@@ -460,7 +460,7 @@
  *
  * @param xiface
  *
- * @return 0 if PKO does not do FCS and 1 otherwise.
+ * Return: 0 if PKO does not do FCS and 1 otherwise.
  */
 int __cvmx_helper_get_has_fcs(int xiface);
 
@@ -513,7 +513,7 @@
  * Initialize QoS configuraiton with the SDK defaults.
  *
  * @param qos_cfg   User QOS configuration parameters.
- * @return Zero on success, negative number otherwise.
+ * Return: Zero on success, negative number otherwise.
  */
 int cvmx_helper_qos_config_init(cvmx_qos_proto_t qos_proto, cvmx_qos_config_t *qos_cfg);
 
@@ -523,7 +523,7 @@
  *
  * @param xipdport  Global IPD port
  * @param qos_cfg   User QOS configuration parameters.
- * @return Zero on success, negative number otherwise.
+ * Return: Zero on success, negative number otherwise.
  */
 int cvmx_helper_qos_port_config_update(int xipdport, cvmx_qos_config_t *qos_cfg);
 
@@ -534,7 +534,7 @@
  *
  * @param xipdport  Global IPD port
  * @param qos_cfg   User QOS configuration parameters.
- * @return Zero on success, negative number otherwise.
+ * Return: Zero on success, negative number otherwise.
  */
 int cvmx_helper_qos_port_setup(int xipdport, cvmx_qos_config_t *qos_cfg);
 
@@ -545,7 +545,7 @@
  *
  * @param node      OCTEON3 node number.
  * @param qos_cfg   User QOS configuration parameters.
- * @return Zero on success, negative number otherwise.
+ * Return: Zero on success, negative number otherwise.
  */
 int cvmx_helper_qos_sso_setup(int node, cvmx_qos_config_t *qos_cfg);
 
@@ -554,7 +554,7 @@
  * @param chan     Channel index.
  * @param namebuf  Name buffer (output).
  * @param buflen   Name maximum length.
- * @return Length of name (in bytes) on success, negative number otherwise.
+ * Return: Length of name (in bytes) on success, negative number otherwise.
  */
 int cvmx_helper_get_chan_e_name(int chan, char *namebuf, int buflen);
 
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-hwfau.h b/arch/mips/mach-octeon/include/mach/cvmx-hwfau.h
index 5977219..967d6ee 100644
--- a/arch/mips/mach-octeon/include/mach/cvmx-hwfau.h
+++ b/arch/mips/mach-octeon/include/mach/cvmx-hwfau.h
@@ -111,7 +111,7 @@
  *               - Step by 2 for 16 bit access.
  *               - Step by 4 for 32 bit access.
  *               - Step by 8 for 64 bit access.
- * @return Address to store for atomic update
+ * Return: Address to store for atomic update
  */
 static inline u64 __cvmx_hwfau_store_address(u64 noadd, u64 reg)
 {
@@ -135,7 +135,7 @@
  * @param value   Signed value to add.
  *                Note: When performing 32 and 64 bit access, only the low
  *                22 bits are available.
- * @return Address to read from for atomic update
+ * Return: Address to read from for atomic update
  */
 static inline u64 __cvmx_hwfau_atomic_address(u64 tagwait, u64 reg, s64 value)
 {
@@ -152,7 +152,7 @@
  *                - Step by 8 for 64 bit access.
  * @param value   Signed value to add.
  *                Note: Only the low 22 bits are available.
- * @return Value of the register before the update
+ * Return: Value of the register before the update
  */
 static inline s64 cvmx_hwfau_fetch_and_add64(cvmx_fau_reg64_t reg, s64 value)
 {
@@ -166,7 +166,7 @@
  *                - Step by 4 for 32 bit access.
  * @param value   Signed value to add.
  *                Note: Only the low 22 bits are available.
- * @return Value of the register before the update
+ * Return: Value of the register before the update
  */
 static inline s32 cvmx_hwfau_fetch_and_add32(cvmx_fau_reg32_t reg, s32 value)
 {
@@ -180,7 +180,7 @@
  * @param reg     FAU atomic register to access. 0 <= reg < 2048.
  *                - Step by 2 for 16 bit access.
  * @param value   Signed value to add.
- * @return Value of the register before the update
+ * Return: Value of the register before the update
  */
 static inline s16 cvmx_hwfau_fetch_and_add16(cvmx_fau_reg16_t reg, s16 value)
 {
@@ -193,7 +193,7 @@
  *
  * @param reg     FAU atomic register to access. 0 <= reg < 2048.
  * @param value   Signed value to add.
- * @return Value of the register before the update
+ * Return: Value of the register before the update
  */
 static inline int8_t cvmx_hwfau_fetch_and_add8(cvmx_fau_reg8_t reg, int8_t value)
 {
@@ -209,7 +209,7 @@
  *               - Step by 8 for 64 bit access.
  * @param value  Signed value to add.
  *               Note: Only the low 22 bits are available.
- * @return If a timeout occurs, the error bit will be set. Otherwise
+ * Return: If a timeout occurs, the error bit will be set. Otherwise
  *         the value of the register before the update will be
  *         returned
  */
@@ -232,7 +232,7 @@
  *               - Step by 4 for 32 bit access.
  * @param value  Signed value to add.
  *               Note: Only the low 22 bits are available.
- * @return If a timeout occurs, the error bit will be set. Otherwise
+ * Return: If a timeout occurs, the error bit will be set. Otherwise
  *         the value of the register before the update will be
  *         returned
  */
@@ -255,7 +255,7 @@
  * @param reg    FAU atomic register to access. 0 <= reg < 2048.
  *               - Step by 2 for 16 bit access.
  * @param value  Signed value to add.
- * @return If a timeout occurs, the error bit will be set. Otherwise
+ * Return: If a timeout occurs, the error bit will be set. Otherwise
  *         the value of the register before the update will be
  *         returned
  */
@@ -277,7 +277,7 @@
  *
  * @param reg    FAU atomic register to access. 0 <= reg < 2048.
  * @param value  Signed value to add.
- * @return If a timeout occurs, the error bit will be set. Otherwise
+ * Return: If a timeout occurs, the error bit will be set. Otherwise
  *         the value of the register before the update will be
  *         returned
  */
@@ -314,7 +314,7 @@
  *                - Step by 2 for 16 bit access.
  *                - Step by 4 for 32 bit access.
  *                - Step by 8 for 64 bit access.
- * @return Data to write using cvmx_send_single
+ * Return: Data to write using cvmx_send_single
  */
 static inline u64 __cvmx_fau_iobdma_data(u64 scraddr, s64 value, u64 tagwait,
 					 cvmx_fau_op_size_t size, u64 reg)
@@ -337,7 +337,7 @@
  *                - Step by 8 for 64 bit access.
  * @param value   Signed value to add.
  *                Note: Only the low 22 bits are available.
- * @return Placed in the scratch pad register
+ * Return: Placed in the scratch pad register
  */
 static inline void cvmx_hwfau_async_fetch_and_add64(u64 scraddr, cvmx_fau_reg64_t reg, s64 value)
 {
@@ -354,7 +354,7 @@
  *                - Step by 4 for 32 bit access.
  * @param value   Signed value to add.
  *                Note: Only the low 22 bits are available.
- * @return Placed in the scratch pad register
+ * Return: Placed in the scratch pad register
  */
 static inline void cvmx_hwfau_async_fetch_and_add32(u64 scraddr, cvmx_fau_reg32_t reg, s32 value)
 {
@@ -370,7 +370,7 @@
  * @param reg     FAU atomic register to access. 0 <= reg < 2048.
  *                - Step by 2 for 16 bit access.
  * @param value   Signed value to add.
- * @return Placed in the scratch pad register
+ * Return: Placed in the scratch pad register
  */
 static inline void cvmx_hwfau_async_fetch_and_add16(u64 scraddr, cvmx_fau_reg16_t reg, s16 value)
 {
@@ -385,7 +385,7 @@
  *                Must be 8 byte aligned.
  * @param reg     FAU atomic register to access. 0 <= reg < 2048.
  * @param value   Signed value to add.
- * @return Placed in the scratch pad register
+ * Return: Placed in the scratch pad register
  */
 static inline void cvmx_hwfau_async_fetch_and_add8(u64 scraddr, cvmx_fau_reg8_t reg, int8_t value)
 {
@@ -405,7 +405,7 @@
  *                - Step by 8 for 64 bit access.
  * @param value   Signed value to add.
  *                Note: Only the low 22 bits are available.
- * @return Placed in the scratch pad register
+ * Return: Placed in the scratch pad register
  */
 static inline void cvmx_hwfau_async_tagwait_fetch_and_add64(u64 scraddr, cvmx_fau_reg64_t reg,
 							    s64 value)
@@ -426,7 +426,7 @@
  *                - Step by 4 for 32 bit access.
  * @param value   Signed value to add.
  *                Note: Only the low 22 bits are available.
- * @return Placed in the scratch pad register
+ * Return: Placed in the scratch pad register
  */
 static inline void cvmx_hwfau_async_tagwait_fetch_and_add32(u64 scraddr, cvmx_fau_reg32_t reg,
 							    s32 value)
@@ -446,7 +446,7 @@
  * @param reg     FAU atomic register to access. 0 <= reg < 2048.
  *                - Step by 2 for 16 bit access.
  * @param value   Signed value to add.
- * @return Placed in the scratch pad register
+ * Return: Placed in the scratch pad register
  */
 static inline void cvmx_hwfau_async_tagwait_fetch_and_add16(u64 scraddr, cvmx_fau_reg16_t reg,
 							    s16 value)
@@ -465,7 +465,7 @@
  *                returned
  * @param reg     FAU atomic register to access. 0 <= reg < 2048.
  * @param value   Signed value to add.
- * @return Placed in the scratch pad register
+ * Return: Placed in the scratch pad register
  */
 static inline void cvmx_hwfau_async_tagwait_fetch_and_add8(u64 scraddr, cvmx_fau_reg8_t reg,
 							   int8_t value)
@@ -574,28 +574,28 @@
 }
 
 /** Allocates 64bit FAU register.
- *  @return value is the base address of allocated FAU register
+ *  Return: value is the base address of allocated FAU register
  */
 int cvmx_fau64_alloc(int reserve);
 
 /** Allocates 32bit FAU register.
- *  @return value is the base address of allocated FAU register
+ *  Return: value is the base address of allocated FAU register
  */
 int cvmx_fau32_alloc(int reserve);
 
 /** Allocates 16bit FAU register.
- *  @return value is the base address of allocated FAU register
+ *  Return: value is the base address of allocated FAU register
  */
 int cvmx_fau16_alloc(int reserve);
 
 /** Allocates 8bit FAU register.
- *  @return value is the base address of allocated FAU register
+ *  Return: value is the base address of allocated FAU register
  */
 int cvmx_fau8_alloc(int reserve);
 
 /** Frees the specified FAU register.
  *  @param address Base address of register to release.
- *  @return 0 on success; -1 on failure
+ *  Return: 0 on success; -1 on failure
  */
 int cvmx_fau_free(int address);
 
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-hwpko.h b/arch/mips/mach-octeon/include/mach/cvmx-hwpko.h
index 459c19b..fe02966 100644
--- a/arch/mips/mach-octeon/include/mach/cvmx-hwpko.h
+++ b/arch/mips/mach-octeon/include/mach/cvmx-hwpko.h
@@ -270,7 +270,7 @@
  * @param use_locking
  *               CVMX_PKO_LOCK_NONE, CVMX_PKO_LOCK_ATOMIC_TAG, or CVMX_PKO_LOCK_CMD_QUEUE
  *
- * @return returns CVMX_PKO_SUCCESS on success, or error code on failure of output
+ * Return: returns CVMX_PKO_SUCCESS on success, or error code on failure of output
  */
 static inline cvmx_pko_return_value_t
 cvmx_hwpko_send_packet_finish(u64 ipd_port, u64 queue, cvmx_pko_command_word0_t pko_command,
@@ -313,7 +313,7 @@
  * @param use_locking
  *               CVMX_PKO_LOCK_NONE, CVMX_PKO_LOCK_ATOMIC_TAG, or CVMX_PKO_LOCK_CMD_QUEUE
  *
- * @return returns CVMX_PKO_SUCCESS on success, or error code on failure of output
+ * Return: returns CVMX_PKO_SUCCESS on success, or error code on failure of output
  */
 static inline cvmx_pko_return_value_t
 cvmx_hwpko_send_packet_finish3(u64 ipd_port, u64 queue, cvmx_pko_command_word0_t pko_command,
@@ -358,7 +358,7 @@
  * for the port.
  *
  * @param port   IPD port number
- * @return Base output queue
+ * Return: Base output queue
  */
 int cvmx_pko_get_base_queue(int port);
 
@@ -366,7 +366,7 @@
  * For a given port number, return the number of pko output queues.
  *
  * @param port   IPD port number
- * @return Number of output queues
+ * Return: Number of output queues
  */
 int cvmx_pko_get_num_queues(int port);
 
@@ -407,7 +407,7 @@
  * @param burst     Maximum number of packets to burst in a row before rate
  *                  limiting cuts in.
  *
- * @return Zero on success, negative on failure
+ * Return: Zero on success, negative on failure
  */
 int cvmx_pko_rate_limit_packets(int port, int packets_s, int burst);
 
@@ -420,7 +420,7 @@
  * @param burst  Maximum number of bits to burst before rate
  *               limiting cuts in.
  *
- * @return Zero on success, negative on failure
+ * Return: Zero on success, negative on failure
  */
 int cvmx_pko_rate_limit_bits(int port, u64 bits_s, int burst);
 
@@ -432,7 +432,7 @@
  * @param interface
  * @param index
  *
- * @return negative on error.
+ * Return: negative on error.
  *
  * This applies only to the non-loopback interfaces.
  *
@@ -444,7 +444,7 @@
  * for the port.
  *
  * @param pko_port   PKO port number
- * @return           Base output queue
+ * Return:           Base output queue
  */
 int cvmx_pko_get_base_queue_pkoid(int pko_port);
 
@@ -453,7 +453,7 @@
  * for the port.
  *
  * @param pko_port	PKO port number
- * @return		the number of output queues
+ * Return:		the number of output queues
  */
 int cvmx_pko_get_num_queues_pkoid(int pko_port);
 
@@ -495,7 +495,7 @@
  * @param use_locking
  *               CVMX_PKO_LOCK_NONE, CVMX_PKO_LOCK_ATOMIC_TAG, or CVMX_PKO_LOCK_CMD_QUEUE
  *
- * @return returns CVMX_PKO_SUCCESS on success, or error code on failure of output
+ * Return: returns CVMX_PKO_SUCCESS on success, or error code on failure of output
  */
 static inline cvmx_pko_return_value_t
 cvmx_hwpko_send_packet_finish_pkoid(int pko_port, u64 queue, cvmx_pko_command_word0_t pko_command,
@@ -533,7 +533,7 @@
  * @param use_locking
  *               CVMX_PKO_LOCK_NONE, CVMX_PKO_LOCK_ATOMIC_TAG, or CVMX_PKO_LOCK_CMD_QUEUE
  *
- * @return returns CVMX_PKO_SUCCESS on success, or error code on failure of output
+ * Return: returns CVMX_PKO_SUCCESS on success, or error code on failure of output
  */
 static inline cvmx_pko_return_value_t
 cvmx_hwpko_send_packet_finish3_pkoid(u64 pko_port, u64 queue, cvmx_pko_command_word0_t pko_command,
@@ -561,7 +561,7 @@
  * Obtain the number of PKO commands pending in a queue
  *
  * @param queue is the queue identifier to be queried
- * @return the number of commands pending transmission or -1 on error
+ * Return: the number of commands pending transmission or -1 on error
  */
 int cvmx_pko_queue_pend_count(cvmx_cmd_queue_id_t queue);
 
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-ipd.h b/arch/mips/mach-octeon/include/mach/cvmx-ipd.h
index cdff36f..f4a008f 100644
--- a/arch/mips/mach-octeon/include/mach/cvmx-ipd.h
+++ b/arch/mips/mach-octeon/include/mach/cvmx-ipd.h
@@ -213,7 +213,7 @@
  * @param drop_thresh
  *               All incoming packets will be dropped when there are less
  *               than this many free packet buffers in FPA 0.
- * @return Zero on success. Negative on failure
+ * Return: Zero on success. Negative on failure
  */
 int cvmx_ipd_setup_red_queue(int queue, int pass_thresh, int drop_thresh);
 
@@ -226,7 +226,7 @@
  * @param drop_thresh
  *               All incoming packets will be dropped when there are less
  *               than this many free packet buffers in FPA 0.
- * @return Zero on success. Negative on failure
+ * Return: Zero on success. Negative on failure
  */
 int cvmx_ipd_setup_red(int pass_thresh, int drop_thresh);
 
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-pcie.h b/arch/mips/mach-octeon/include/mach/cvmx-pcie.h
index a819196..95ac7f2 100644
--- a/arch/mips/mach-octeon/include/mach/cvmx-pcie.h
+++ b/arch/mips/mach-octeon/include/mach/cvmx-pcie.h
@@ -74,7 +74,7 @@
  *
  * @param pcie_port PCIe port the IO is for
  *
- * @return 64bit Octeon IO base address for read/write
+ * Return: 64bit Octeon IO base address for read/write
  */
 u64 cvmx_pcie_get_io_base_address(int pcie_port);
 
@@ -84,7 +84,7 @@
  *
  * @param pcie_port PCIe port the IO is for
  *
- * @return Size of the IO window
+ * Return: Size of the IO window
  */
 u64 cvmx_pcie_get_io_size(int pcie_port);
 
@@ -94,7 +94,7 @@
  *
  * @param pcie_port PCIe port the IO is for
  *
- * @return 64bit Octeon IO base address for read/write
+ * Return: 64bit Octeon IO base address for read/write
  */
 u64 cvmx_pcie_get_mem_base_address(int pcie_port);
 
@@ -104,7 +104,7 @@
  *
  * @param pcie_port PCIe port the IO is for
  *
- * @return Size of the Mem window
+ * Return: Size of the Mem window
  */
 u64 cvmx_pcie_get_mem_size(int pcie_port);
 
@@ -113,7 +113,7 @@
  *
  * @param pcie_port PCIe port to initialize
  *
- * @return Zero on success
+ * Return: Zero on success
  */
 int cvmx_pcie_rc_initialize(int pcie_port);
 
@@ -122,7 +122,7 @@
  *
  * @param pcie_port PCIe port to shutdown
  *
- * @return Zero on success
+ * Return: Zero on success
  */
 int cvmx_pcie_rc_shutdown(int pcie_port);
 
@@ -135,7 +135,7 @@
  * @param fn        Device sub function
  * @param reg       Register to access
  *
- * @return Result of the read
+ * Return: Result of the read
  */
 u8 cvmx_pcie_config_read8(int pcie_port, int bus, int dev, int fn, int reg);
 
@@ -148,7 +148,7 @@
  * @param fn        Device sub function
  * @param reg       Register to access
  *
- * @return Result of the read
+ * Return: Result of the read
  */
 u16 cvmx_pcie_config_read16(int pcie_port, int bus, int dev, int fn, int reg);
 
@@ -161,7 +161,7 @@
  * @param fn        Device sub function
  * @param reg       Register to access
  *
- * @return Result of the read
+ * Return: Result of the read
  */
 u32 cvmx_pcie_config_read32(int pcie_port, int bus, int dev, int fn, int reg);
 
@@ -208,7 +208,7 @@
  * @param pcie_port  PCIe port to read from
  * @param cfg_offset Address to read
  *
- * @return Value read
+ * Return: Value read
  */
 u32 cvmx_pcie_cfgx_read(int pcie_port, u32 cfg_offset);
 u32 cvmx_pcie_cfgx_read_node(int node, int pcie_port, u32 cfg_offset);
@@ -240,7 +240,7 @@
  * Read a 32bit value from the Octeon NPEI register space
  *
  * @param address Address to read
- * @return The result
+ * Return: The result
  */
 static inline u32 cvmx_pcie_npei_read32(u64 address)
 {
@@ -252,7 +252,7 @@
  *
  * @param pcie_port PCIe port to initialize
  *
- * @return Zero on success
+ * Return: Zero on success
  */
 int cvmx_pcie_ep_initialize(int pcie_port);
 
@@ -272,7 +272,7 @@
  *
  * @param pcie_port PCIe port number (PEM number)
  *
- * @return 0 if PCIe port is in target mode, !0 if in host mode.
+ * Return: 0 if PCIe port is in target mode, !0 if in host mode.
  */
 int cvmx_pcie_is_host_mode(int pcie_port);
 
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-pip.h b/arch/mips/mach-octeon/include/mach/cvmx-pip.h
index 013f533..828604a 100644
--- a/arch/mips/mach-octeon/include/mach/cvmx-pip.h
+++ b/arch/mips/mach-octeon/include/mach/cvmx-pip.h
@@ -946,7 +946,7 @@
 /**
  * Get the entry for the Bit Select Extractor Table.
  * @param work   pointer to work queue entry
- * @return       Index of the Bit Select Extractor Table
+ * Return:       Index of the Bit Select Extractor Table
  */
 static inline int cvmx_pip_get_bsel_table_index(cvmx_wqe_t *work)
 {
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-pki-resources.h b/arch/mips/mach-octeon/include/mach/cvmx-pki-resources.h
index 79b99b0..3c60166 100644
--- a/arch/mips/mach-octeon/include/mach/cvmx-pki-resources.h
+++ b/arch/mips/mach-octeon/include/mach/cvmx-pki-resources.h
@@ -14,7 +14,7 @@
  * @param style	 style to allocate, if -1 it will be allocated
 		 first available style from style resource. If index is positive
 		 number and in range, it will try to allocate specified style.
- * @return	 style number on success, -1 on failure.
+ * Return:	 style number on success, -1 on failure.
  */
 int cvmx_pki_style_alloc(int node, int style);
 
@@ -24,7 +24,7 @@
  * @param node		node to allocate cluster group from.
    @param cl_grp	cluster group to allocate/reserve, if -1 ,
 			allocate any available cluster group.
- * @return		cluster group number or -1 on failure
+ * Return:		cluster group number or -1 on failure
  */
 int cvmx_pki_cluster_grp_alloc(int node, int cl_grp);
 
@@ -45,7 +45,7 @@
 			allocate any available pcam entry.
  * @param bank		pcam bank where to allocate/reserve pcan entry from
  * @param cluster_mask  mask of clusters from which pcam entry is needed.
- * @return		pcam entry of -1 on failure
+ * Return:		pcam entry of -1 on failure
  */
 int cvmx_pki_pcam_entry_alloc(int node, int index, int bank, u64 cluster_mask);
 
@@ -57,7 +57,7 @@
 			number and in range, it will try to allocate specified base_offset.
    @param count		number of consecutive qpg entries to allocate. They will be consecutive
 			from base offset.
- * @return		qpg table base offset number on success, -1 on failure.
+ * Return:		qpg table base offset number on success, -1 on failure.
  */
 int cvmx_pki_qpg_entry_alloc(int node, int base_offset, int count);
 
@@ -65,7 +65,7 @@
  * This function frees a style from pool of global styles per node.
  * @param node	 node to free style from.
  * @param style	 style to free
- * @return	 0 on success, -1 on failure.
+ * Return:	 0 on success, -1 on failure.
  */
 int cvmx_pki_style_free(int node, int style);
 
@@ -74,7 +74,7 @@
    cluster group resources.
  * @param node		node to free cluster group from.
    @param cl_grp	cluster group to free
- * @return		0 on success or -1 on failure
+ * Return:		0 on success or -1 on failure
  */
 int cvmx_pki_cluster_grp_free(int node, int cl_grp);
 
@@ -86,7 +86,7 @@
  *			number and in range, it will try to allocate specified base_offset.
  * @param count		number of consecutive qpg entries to allocate. They will be consecutive
  *			from base offset.
- * @return		qpg table base offset number on success, -1 on failure.
+ * Return:		qpg table base offset number on success, -1 on failure.
  */
 int cvmx_pki_qpg_entry_free(int node, int base_offset, int count);
 
@@ -95,7 +95,7 @@
    clusters resources.
  * @param node		node to free clusters from.
  * @param cluster_mask  mask of clusters need freeing
- * @return		0 on success or -1 on failure
+ * Return:		0 on success or -1 on failure
  */
 int cvmx_pki_cluster_free(int node, u64 cluster_mask);
 
@@ -105,7 +105,7 @@
    @param index	index of pacm entry (0-191) needs to be freed.
  * @param bank		pcam bank where to free pcam entry from
  * @param cluster_mask  mask of clusters from which pcam entry is freed.
- * @return		0 on success OR -1 on failure
+ * Return:		0 on success OR -1 on failure
  */
 int cvmx_pki_pcam_entry_free(int node, int index, int bank, u64 cluster_mask);
 
@@ -115,7 +115,7 @@
  * @param bpid	bpid  to allocate, if -1 it will be allocated
  *		first available boid from bpid resource. If index is positive
  *		number and in range, it will try to allocate specified bpid.
- * @return	bpid number on success,
+ * Return:	bpid number on success,
  *		-1 on alloc failure.
  *		-2 on resource already reserved.
  */
@@ -125,7 +125,7 @@
  * This function frees a bpid from pool of global bpid per node.
  * @param node	 node to free bpid from.
  * @param bpid	 bpid to free
- * @return	 0 on success, -1 on failure or
+ * Return:	 0 on success, -1 on failure or
  */
 int cvmx_pki_bpid_free(int node, int bpid);
 
@@ -138,7 +138,7 @@
  * This function allocates/reserves an index from pool of global MTAG-IDX per node.
  * @param node	node to allocate index from.
  * @param idx	index  to allocate, if -1 it will be allocated
- * @return	MTAG index number on success,
+ * Return:	MTAG index number on success,
  *		-1 on alloc failure.
  *		-2 on resource already reserved.
  */
@@ -148,7 +148,7 @@
  * This function frees an index from pool of global MTAG-IDX per node.
  * @param node	 node to free bpid from.
  * @param bpid	 bpid to free
- * @return	 0 on success, -1 on failure or
+ * Return:	 0 on success, -1 on failure or
  */
 int cvmx_pki_mtag_idx_free(int node, int idx);
 
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-pko-internal-ports-range.h b/arch/mips/mach-octeon/include/mach/cvmx-pko-internal-ports-range.h
index 1fb49b3..77dd33c 100644
--- a/arch/mips/mach-octeon/include/mach/cvmx-pko-internal-ports-range.h
+++ b/arch/mips/mach-octeon/include/mach/cvmx-pko-internal-ports-range.h
@@ -14,7 +14,7 @@
  *                    are requested.
  * @param  count      the number of internal ports requested
  *
- * @return  0 on success
+ * Return:  0 on success
  *         -1 on failure
  */
 int cvmx_pko_internal_ports_alloc(int interface, int port, u64 count);
@@ -26,7 +26,7 @@
  * @param  port       the index of the port within in the interface for which the internal ports
  *                    are requested.
  *
- * @return  0 on success
+ * Return:  0 on success
  *         -1 on failure
  */
 int cvmx_pko_internal_ports_free(int interface, int port);
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-pko3-queue.h b/arch/mips/mach-octeon/include/mach/cvmx-pko3-queue.h
index 5f83989..b3f61d7 100644
--- a/arch/mips/mach-octeon/include/mach/cvmx-pko3-queue.h
+++ b/arch/mips/mach-octeon/include/mach/cvmx-pko3-queue.h
@@ -113,7 +113,7 @@
  * The channel assignment applies to L2 or L3 Shaper Queues depending
  * on the setting of channel credit level.
  *
- * @return returns none.
+ * Return: returns none.
  */
 void cvmx_pko3_map_channel(unsigned int node, unsigned int pq_num, unsigned int l2_l3_q_num,
 			   u16 channel);
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-pow.h b/arch/mips/mach-octeon/include/mach/cvmx-pow.h
index 0680ca2..ed9b45f 100644
--- a/arch/mips/mach-octeon/include/mach/cvmx-pow.h
+++ b/arch/mips/mach-octeon/include/mach/cvmx-pow.h
@@ -906,7 +906,7 @@
  * If a tag switch is pending this routine returns the tag before
  * the tag switch, not after.
  *
- * @return Current tag
+ * Return: Current tag
  */
 static inline cvmx_pow_tag_info_t cvmx_pow_get_current_tag(void)
 {
@@ -967,7 +967,7 @@
  * Get the POW WQE for this core. This returns the work queue
  * entry currently associated with this core.
  *
- * @return WQE pointer
+ * Return: WQE pointer
  */
 static inline cvmx_wqe_t *cvmx_pow_get_current_wqp(void)
 {
@@ -1059,7 +1059,7 @@
  * @param wait   When set, call stalls until work becomes available, or
  *               times out. If not set, returns immediately.
  *
- * @return Returns the WQE pointer from POW. Returns NULL if no work was
+ * Return: Returns the WQE pointer from POW. Returns NULL if no work was
  * available.
  */
 static inline cvmx_wqe_t *cvmx_pow_work_request_sync_nocheck(cvmx_pow_wait_t wait)
@@ -1099,7 +1099,7 @@
  * @param wait   When set, call stalls until work becomes available, or
  *               times out. If not set, returns immediately.
  *
- * @return Returns the WQE pointer from POW. Returns NULL if no work was
+ * Return: Returns the WQE pointer from POW. Returns NULL if no work was
  * available.
  */
 static inline cvmx_wqe_t *cvmx_pow_work_request_sync(cvmx_pow_wait_t wait)
@@ -1114,7 +1114,7 @@
  * This function waits for any previous tag switch to complete before
  * requesting the null_rd.
  *
- * @return Returns the POW state of type cvmx_pow_tag_type_t.
+ * Return: Returns the POW state of type cvmx_pow_tag_type_t.
  */
 static inline cvmx_pow_tag_type_t cvmx_pow_work_request_null_rd(void)
 {
@@ -1204,7 +1204,7 @@
  *
  * @param scr_addr Scratch memory address to get result from
  *                  Byte address, must be 8 byte aligned.
- * @return Returns the WQE from the scratch register, or NULL if no work was
+ * Return: Returns the WQE from the scratch register, or NULL if no work was
  *         available.
  */
 static inline cvmx_wqe_t *cvmx_pow_work_response_async(int scr_addr)
@@ -1226,7 +1226,7 @@
  *
  * @param wqe_ptr pointer to a work queue entry returned by the POW
  *
- * @return 0 if pointer is valid
+ * Return: 0 if pointer is valid
  *         1 if invalid (no work was returned)
  */
 static inline u64 cvmx_pow_work_invalid(cvmx_wqe_t *wqe_ptr)
@@ -1735,7 +1735,7 @@
  * indicates which groups each core will accept work from.
  *
  * @param core_num   core to apply mask to
- * @return	Group mask, one bit for up to 64 groups.
+ * Return:	Group mask, one bit for up to 64 groups.
  *               Each 1 bit in the mask enables the core to accept work from
  *               the corresponding group.
  *               The CN68XX supports 64 groups, earlier models only support
@@ -2364,7 +2364,7 @@
  * @param wait When set, call stalls until work becomes available, or times out.
  *     If not set, returns immediately.
  *
- * @return Returns the WQE pointer from SSO.
+ * Return: Returns the WQE pointer from SSO.
  *     Returns NULL if no work was available.
  */
 static inline void *cvmx_sso_work_request_grp_sync_nocheck(unsigned int lgrp, cvmx_pow_wait_t wait)
@@ -2403,7 +2403,7 @@
  * @param wait When set, call stalls until work becomes available, or times out.
  *     If not set, returns immediately.
  *
- * @return The WQE pointer or NULL, if work is not available.
+ * Return: The WQE pointer or NULL, if work is not available.
  */
 static inline void *cvmx_sso_work_request_grp_sync(unsigned int lgrp, cvmx_pow_wait_t wait)
 {
@@ -2829,7 +2829,7 @@
  * @param hw_bits The lower bits (number depends on configuration) are set
  *     to this value.  The remainder of bits are set by the sw_bits parameter.
  *
- * @return 32 bit value of the combined hw and sw bits.
+ * Return: 32 bit value of the combined hw and sw bits.
  */
 static inline u32 cvmx_pow_tag_compose(u64 sw_bits, u64 hw_bits)
 {
@@ -2842,7 +2842,7 @@
  *
  * @param tag    32 bit tag value
  *
- * @return N bit software tag value, where N is configurable with
+ * Return: N bit software tag value, where N is configurable with
  *     the CVMX_TAG_SW_BITS define
  */
 static inline u32 cvmx_pow_tag_get_sw_bits(u64 tag)
@@ -2856,7 +2856,7 @@
  *
  * @param tag    32 bit tag value
  *
- * @return (32 - N) bit software tag value, where N is configurable with
+ * Return: (32 - N) bit software tag value, where N is configurable with
  *     the CVMX_TAG_SW_BITS define
  */
 static inline u32 cvmx_pow_tag_get_hw_bits(u64 tag)
@@ -2905,7 +2905,7 @@
  * @param buffer Buffer to store capture into
  * @param buffer_size The size of the supplied buffer
  *
- * @return Zero on success, negative on failure
+ * Return: Zero on success, negative on failure
  */
 int cvmx_pow_capture(void *buffer, int buffer_size);
 
@@ -2920,7 +2920,7 @@
 /**
  * Return the number of POW entries supported by this chip
  *
- * @return Number of POW entries
+ * Return: Number of POW entries
  */
 int cvmx_pow_get_num_entries(void);
 int cvmx_pow_get_dump_size(void);
@@ -2932,7 +2932,7 @@
  * @param node The numa node for the allocation.
  * @param base_group Pointer to the initial group, -1 to allocate anywhere.
  * @param count  The number of consecutive groups to allocate.
- * @return 0 on success and -1 on failure.
+ * Return: 0 on success and -1 on failure.
  */
 int cvmx_sso_reserve_group_range(int node, int *base_group, int count);
 #define cvmx_sso_allocate_group_range cvmx_sso_reserve_group_range
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-qlm.h b/arch/mips/mach-octeon/include/mach/cvmx-qlm.h
index 19915eb..7695b69 100644
--- a/arch/mips/mach-octeon/include/mach/cvmx-qlm.h
+++ b/arch/mips/mach-octeon/include/mach/cvmx-qlm.h
@@ -32,7 +32,7 @@
 /**
  * Return the number of QLMs supported by the chip
  *
- * @return  Number of QLMs
+ * Return:  Number of QLMs
  */
 int cvmx_qlm_get_num(void);
 
@@ -49,7 +49,7 @@
  * @param xiface  interface to look up
  * @param index  index in an interface
  *
- * @return the qlm number based on the xiface
+ * Return: the qlm number based on the xiface
  */
 int cvmx_qlm_lmac(int xiface, int index);
 
@@ -58,7 +58,7 @@
  *
  * @param BGX  BGX to search for.
  *
- * @return muxes used 0 = DLM5+DLM6, 1 = DLM5, 2 = DLM6.
+ * Return: muxes used 0 = DLM5+DLM6, 1 = DLM5, 2 = DLM6.
  */
 int cvmx_qlm_mux_interface(int bgx);
 
@@ -67,14 +67,14 @@
  *
  * @param qlm QLM block to query
  *
- * @return  Number of lanes
+ * Return:  Number of lanes
  */
 int cvmx_qlm_get_lanes(int qlm);
 
 /**
  * Get the QLM JTAG fields based on Octeon model on the supported chips.
  *
- * @return  qlm_jtag_field_t structure
+ * Return:  qlm_jtag_field_t structure
  */
 const __cvmx_qlm_jtag_field_t *cvmx_qlm_jtag_get_field(void);
 
@@ -82,7 +82,7 @@
  * Get the QLM JTAG length by going through qlm_jtag_field for each
  * Octeon model that is supported
  *
- * @return return the length.
+ * Return: return the length.
  */
 int cvmx_qlm_jtag_get_length(void);
 
@@ -98,7 +98,7 @@
  * @param lane   Lane in QLM to get
  * @param name   String name of field
  *
- * @return JTAG field value
+ * Return: JTAG field value
  */
 u64 cvmx_qlm_jtag_get(int qlm, int lane, const char *name);
 
@@ -133,7 +133,7 @@
  *
  * @param qlm    QLM to examine
  *
- * @return Speed in Mhz
+ * Return: Speed in Mhz
  */
 int cvmx_qlm_get_gbaud_mhz(int qlm);
 /**
@@ -142,7 +142,7 @@
  * @param node   Target QLM node
  * @param qlm    QLM to examine
  *
- * @return Speed in Mhz
+ * Return: Speed in Mhz
  */
 int cvmx_qlm_get_gbaud_mhz_node(int node, int qlm);
 
@@ -250,7 +250,7 @@
  * @param node   node to measure
  * @param qlm    QLM to measure
  *
- * @return Clock rate in Hz
+ * Return: Clock rate in Hz
  */
 int cvmx_qlm_measure_clock_node(int node, int qlm);
 
@@ -261,7 +261,7 @@
  * @param qlm	QLM to perform RX equalization on
  * @param lane	Lane to use, or -1 for all lanes
  *
- * @return Zero on success, negative if any lane failed RX equalization
+ * Return: Zero on success, negative if any lane failed RX equalization
  */
 int __cvmx_qlm_rx_equalization(int node, int qlm, int lane);
 
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-regs.h b/arch/mips/mach-octeon/include/mach/cvmx-regs.h
index 9e86be8..dbb7723 100644
--- a/arch/mips/mach-octeon/include/mach/cvmx-regs.h
+++ b/arch/mips/mach-octeon/include/mach/cvmx-regs.h
@@ -295,7 +295,7 @@
  *
  * @param major_did 5 bit major did
  * @param sub_did   3 bit sub did
- * @return I/O base address
+ * Return: I/O base address
  */
 static inline u64 cvmx_build_io_address(u64 major_did, u64 sub_did)
 {
@@ -306,7 +306,7 @@
  * Builds a bit mask given the required size in bits.
  *
  * @param bits   Number of bits in the mask
- * @return The mask
+ * Return: The mask
  */
 static inline u64 cvmx_build_mask(u64 bits)
 {
@@ -323,7 +323,7 @@
  * @param lsb    Starting bit, least significant (0-63)
  * @param width  Width in bits (1-64)
  *
- * @return Extracted number
+ * Return: Extracted number
  */
 static inline u64 cvmx_bit_extract(u64 input, int lsb, int width)
 {
@@ -349,7 +349,7 @@
  * @param high_bit Highest bit value can occupy (inclusive) 0-63
  * @param low_bit  Lowest bit value can occupy inclusive 0-high_bit
  * @param value    Value to use
- * @return Value masked and shifted
+ * Return: Value masked and shifted
  */
 static inline u64 cvmx_build_bits(u64 high_bit, u64 low_bit, u64 value)
 {
@@ -379,7 +379,7 @@
 /**
  * Number of the Core on which the program is currently running.
  *
- * @return core number
+ * Return: core number
  */
 static inline unsigned int cvmx_get_core_num(void)
 {
@@ -392,7 +392,7 @@
 /**
  * Node-local number of the core on which the program is currently running.
  *
- * @return core number on local node
+ * Return: core number on local node
  */
 static inline unsigned int cvmx_get_local_core_num(void)
 {
@@ -411,7 +411,7 @@
  *
  * @param val    32 bit value to count set bits in
  *
- * @return Number of bits set
+ * Return: Number of bits set
  */
 static inline u32 cvmx_pop(u32 val)
 {
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-scratch.h b/arch/mips/mach-octeon/include/mach/cvmx-scratch.h
index d567a84..960381f 100644
--- a/arch/mips/mach-octeon/include/mach/cvmx-scratch.h
+++ b/arch/mips/mach-octeon/include/mach/cvmx-scratch.h
@@ -23,7 +23,7 @@
  *
  * @param address byte address to read from
  *
- * @return value read
+ * Return: value read
  */
 static inline u8 cvmx_scratch_read8(u64 address)
 {
@@ -35,7 +35,7 @@
  *
  * @param address byte address to read from
  *
- * @return value read
+ * Return: value read
  */
 static inline u16 cvmx_scratch_read16(u64 address)
 {
@@ -47,7 +47,7 @@
  *
  * @param address byte address to read from
  *
- * @return value read
+ * Return: value read
  */
 static inline u32 cvmx_scratch_read32(u64 address)
 {
@@ -59,7 +59,7 @@
  *
  * @param address byte address to read from
  *
- * @return value read
+ * Return: value read
  */
 static inline u64 cvmx_scratch_read64(u64 address)
 {
diff --git a/arch/mips/mach-octeon/include/mach/cvmx-wqe.h b/arch/mips/mach-octeon/include/mach/cvmx-wqe.h
index c9e3c83..7244d5d 100644
--- a/arch/mips/mach-octeon/include/mach/cvmx-wqe.h
+++ b/arch/mips/mach-octeon/include/mach/cvmx-wqe.h
@@ -763,7 +763,7 @@
  *
  * @param work	pointer to work queue entry
  *
- * @return	0 if packet had no error, non-zero to indicate error code.
+ * Return:	0 if packet had no error, non-zero to indicate error code.
  *
  * Please refer to HRM for the specific model for full enumaration of error codes.
  * With Octeon1/Octeon2 models, the returned code indicates L1/L2 errors.
@@ -1042,7 +1042,7 @@
  * For older chips if PIP_GBL_CTL was proviosned to flag ip4_otions and
  * ipv6 extension, it will be flag them.
  * @param work	pointer to work queue entry
- * @return	1 -- If IP error was found in packet
+ * Return:	1 -- If IP error was found in packet
  *          0 -- If no IP error was found in packet.
  */
 static inline int cvmx_wqe_is_ip_exception(cvmx_wqe_t *work)
@@ -1221,7 +1221,7 @@
 /**
  * Set the buffer segment count for a packet.
  *
- * @return Returns the actual resulting value in the WQE fielda
+ * Return: Returns the actual resulting value in the WQE fielda
  *
  */
 static inline unsigned int cvmx_wqe_set_bufs(cvmx_wqe_t *work, unsigned int bufs)
@@ -1239,7 +1239,7 @@
  * Get the offset of Layer-3 header,
  * only supported when Layer-3 protocol is IPv4 or IPv6.
  *
- * @return Returns the offset, or 0 if the offset is not known or unsupported.
+ * Return: Returns the offset, or 0 if the offset is not known or unsupported.
  *
  * FIXME: Assuming word4 is present.
  */
@@ -1263,7 +1263,7 @@
  * or when the Layer-2 header length is modified, and
  * a subsequent recalculation of checksums is anticipated.
  *
- * @return Returns the actual value of the work entry offset field.
+ * Return: Returns the actual value of the work entry offset field.
  *
  * FIXME: Assuming word4 is present.
  */
diff --git a/arch/mips/mach-octeon/include/mach/octeon-feature.h b/arch/mips/mach-octeon/include/mach/octeon-feature.h
index 2eb1714..44eadec 100644
--- a/arch/mips/mach-octeon/include/mach/octeon-feature.h
+++ b/arch/mips/mach-octeon/include/mach/octeon-feature.h
@@ -437,7 +437,7 @@
 /*
  * Answer ``Is the bit for feature set in the bitmap?''
  * @param feature
- * @return 1 when the feature is present and 0 otherwise, -1 in case of error.
+ * Return: 1 when the feature is present and 0 otherwise, -1 in case of error.
  */
 #define octeon_has_feature(feature_x) octeon_has_feature_##feature_x()
 
diff --git a/arch/mips/mach-octeon/include/mach/octeon-model.h b/arch/mips/mach-octeon/include/mach/octeon-model.h
index 9164a4c..c05178f 100644
--- a/arch/mips/mach-octeon/include/mach/octeon-model.h
+++ b/arch/mips/mach-octeon/include/mach/octeon-model.h
@@ -307,7 +307,7 @@
 /**
  * Return the octeon family, i.e., ProcessorID of the PrID register.
  *
- * @return the octeon family on success, ((u32)-1) on error.
+ * Return: the octeon family on success, ((u32)-1) on error.
  */
 static inline u32 cvmx_get_octeon_family(void)
 {
diff --git a/arch/mips/mach-octeon/include/mach/octeon_eth.h b/arch/mips/mach-octeon/include/mach/octeon_eth.h
index bfef0a6..096fcfb 100644
--- a/arch/mips/mach-octeon/include/mach/octeon_eth.h
+++ b/arch/mips/mach-octeon/include/mach/octeon_eth.h
@@ -115,7 +115,7 @@
  *
  * @param	dev	Ethernet device for phy
  *
- * @return	0 to continue, or -1 for error to stop setting up the phy
+ * Return:	0 to continue, or -1 for error to stop setting up the phy
  */
 int octeon_eth_board_post_setup_phy(struct eth_device *dev);
 
diff --git a/arch/mips/mach-octeon/include/mach/octeon_fdt.h b/arch/mips/mach-octeon/include/mach/octeon_fdt.h
index 31878cb..db0e28b 100644
--- a/arch/mips/mach-octeon/include/mach/octeon_fdt.h
+++ b/arch/mips/mach-octeon/include/mach/octeon_fdt.h
@@ -52,7 +52,7 @@
  * reg = <0> then the interface will be renamed after this function to
  * interface@0.
  *
- * @return 0 for success.
+ * Return: 0 for success.
  */
 int octeon_fdt_patch_rename(void *fdt, const char *fdt_key, const char *trim_name, bool rename,
 			    void (*callback)(void *fdt, int offset, void *arg), void *cbarg);
@@ -85,7 +85,7 @@
  * reg = <0> then the interface will be renamed after this function to
  * interface@0.
  *
- * @return 0 for success.
+ * Return: 0 for success.
  */
 int octeon_fdt_patch(void *fdt, const char *fdt_key, const char *trim_name);
 
@@ -150,7 +150,7 @@
  * @param fdt		pointer to flat device tree
  * @param nodeoffset	node offset to get OCX node for
  *
- * @return the Octeon OCX node number
+ * Return: the Octeon OCX node number
  */
 int octeon_fdt_get_soc_node(const void *fdt, int nodeoffset);
 
@@ -161,7 +161,7 @@
  * @param	node_offset	Node offset in device tree
  * @param[in]	strlist		Array of FDT devices to check, end must be NULL
  *
- * @return	0 if at least one device is compatible, 1 if not compatible.
+ * Return:	0 if at least one device is compatible, 1 if not compatible.
  */
 int octeon_fdt_node_check_compatible(const void *fdt, int node_offset, const char *const *strlist);
 /**
@@ -170,7 +170,7 @@
  * @param[in]	fdt	Pointer to flat device tree
  * @param	node_offset	Node offset in device tree
  *
- * @return	i2c bus number or -1 if error
+ * Return:	i2c bus number or -1 if error
  */
 int octeon_fdt_i2c_get_bus(const void *fdt, int node_offset);
 
@@ -182,7 +182,7 @@
  * @param[out]	bus	i2c bus number of device
  * @param[out]	addr	address of device on i2c bus
  *
- * @return	0 for success, -1 on error
+ * Return:	0 for success, -1 on error
  */
 int octeon_fdt_get_i2c_bus_addr(const void *fdt, int node, int *bus, int *addr);
 
@@ -194,7 +194,7 @@
  * @param	phandle	phandle of GPIO node
  * @param	pin	pin number to read
  *
- * @return	0 = pin is low, 1 = pin is high, -1 = error
+ * Return:	0 = pin is low, 1 = pin is high, -1 = error
  */
 int octeon_fdt_read_gpio(const void *fdt, int phandle, int pin);
 
@@ -207,7 +207,7 @@
  * @param	pin	pin number to read
  * @param	val	value to write (1 = high, 0 = low)
  *
- * @return	0 = success, -1 = error
+ * Return:	0 = success, -1 = error
  */
 int octeon_fdt_set_gpio(const void *fdt, int phandle, int pin, int val);
 
@@ -221,7 +221,7 @@
  * @param[out]	addr		i2c address of SFP EEPROM
  * @param[out]	mod_abs		Set true if module is absent, false if present
  *
- * @return	0 for success, -1 if there are problems with the device tree
+ * Return:	0 for success, -1 if there are problems with the device tree
  */
 int octeon_fdt_get_sfp_eeprom(const void *fdt, int mac_node, int *bus, int *addr, bool *mod_abs);
 
@@ -235,7 +235,7 @@
  * @param[out]	addr		i2c address of SFP eeprom
  * @param[out]	mod_abs		Set true if module is absent, false if present
  *
- * @return	0 for success, -1 if there are problems with the device tree
+ * Return:	0 for success, -1 if there are problems with the device tree
  */
 int octeon_fdt_get_qsfp_eeprom(const void *fdt, int mac_node, int *bus, int *addr, bool *mod_abs);
 
@@ -249,7 +249,7 @@
  * @param[out]	i2c_bus		For i2c GPIO expanders, the i2c bus number
  * @param[out]	i2c_addr	For i2c GPIO expanders, the i2c address
  *
- * @return	0 for success, -1 for errors
+ * Return:	0 for success, -1 for errors
  *
  * NOTE: It is up to the caller to determine the pin number.
  */
@@ -262,7 +262,7 @@
  * @param	fdt_node	FDT node of phy
  * @param[out]	type		Type of GPIO
  *
- * @return	pointer to phy device or NULL if no match found.
+ * Return:	pointer to phy device or NULL if no match found.
  */
 struct phy_device *octeon_fdt_get_phy_gpio_info(int fdt_node, enum octeon_gpio_type *type);
 #endif /* __OCTEON_FDT_H__ */
diff --git a/arch/mips/mach-octeon/include/mach/octeon_pci.h b/arch/mips/mach-octeon/include/mach/octeon_pci.h
index 3034f23..e28f5f9 100644
--- a/arch/mips/mach-octeon/include/mach/octeon_pci.h
+++ b/arch/mips/mach-octeon/include/mach/octeon_pci.h
@@ -61,7 +61,7 @@
  * @param	pf	- PCIe config space pf num
  * @param[out]	id	- override device and vendor ID
  *
- * @return	0 if override found, 1 if not found.
+ * Return:	0 if override found, 1 if not found.
  */
 int octeon_find_pcie_id_override(unsigned int address, unsigned int pf, u32 *id);
 
diff --git a/arch/mips/mach-octeon/include/mach/octeon_qlm.h b/arch/mips/mach-octeon/include/mach/octeon_qlm.h
index 219625b..e513436 100644
--- a/arch/mips/mach-octeon/include/mach/octeon_qlm.h
+++ b/arch/mips/mach-octeon/include/mach/octeon_qlm.h
@@ -36,7 +36,7 @@
  *				1: QLMC_REF_CLK0
  *				2: QLMC_REF_CLK1
  *
- * @return	Return 0 on success or -1.
+ * Return:	Return 0 on success or -1.
  *
  * @note	When the 161MHz clock is used it can only be used for
  *		XLAUI mode with a 6316 speed or XFI mode with a 103125 speed.
