Hi Mauro, I love your patch! Perhaps something to improve: [auto build test WARNING on next-20201201] [cannot apply to lwn/docs-next tip/sched/core hsi/for-next linus/master v5.10-rc6 v5.10-rc5 v5.10-rc4 v5.10-rc6] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/Mauro-Carvalho-Chehab/HSI-fix-a-kernel-doc-markup/20201201-210930 base: 0eedceafd3a63fd082743c914853ef4b9247dbe6 config: parisc-randconfig-s032-20201201 (attached as .config) compiler: hppa-linux-gcc (GCC) 9.3.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # apt-get install sparse # sparse version: v0.6.3-170-g3bc348f6-dirty # https://github.com/0day-ci/linux/commit/7c52ba119279c74e6c7e968e3fa7290bd0f3b837 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Mauro-Carvalho-Chehab/HSI-fix-a-kernel-doc-markup/20201201-210930 git checkout 7c52ba119279c74e6c7e968e3fa7290bd0f3b837 # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=parisc If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot All warnings (new ones prefixed by >>): arch/parisc/kernel/firmware.c:144: warning: Function parameter or member 'addr' not described in 'convert_to_wide' arch/parisc/kernel/firmware.c:144: warning: Excess function parameter 'address' description in 'convert_to_wide' arch/parisc/kernel/firmware.c:260: warning: Function parameter or member 'led_info' not described in 'pdc_chassis_info' arch/parisc/kernel/firmware.c:260: warning: Excess function parameter 'result' description in 'pdc_chassis_info' arch/parisc/kernel/firmware.c:284: warning: Function parameter or member 'state' not described in 'pdc_pat_chassis_send_log' arch/parisc/kernel/firmware.c:284: warning: Function parameter or member 'data' not described in 'pdc_pat_chassis_send_log' arch/parisc/kernel/firmware.c:284: warning: Excess function parameter 'retval' description in 'pdc_pat_chassis_send_log' arch/parisc/kernel/firmware.c:304: warning: Function parameter or member 'disp' not described in 'pdc_chassis_disp' arch/parisc/kernel/firmware.c:304: warning: Excess function parameter 'retval' description in 'pdc_chassis_disp' >> arch/parisc/kernel/firmware.c:320: warning: expecting prototype for pdc_cpu_rendenzvous(). Prototype was for __pdc_cpu_rendezvous() instead arch/parisc/kernel/firmware.c:333: warning: Function parameter or member 'warn' not described in 'pdc_chassis_warn' arch/parisc/kernel/firmware.c:333: warning: Excess function parameter 'retval' description in 'pdc_chassis_warn' arch/parisc/kernel/firmware.c:519: warning: Function parameter or member 'versions' not described in 'pdc_model_versions' arch/parisc/kernel/firmware.c:519: warning: Excess function parameter 'cpu_id' description in 'pdc_model_versions' arch/parisc/kernel/firmware.c:963: warning: Function parameter or member 'hpa' not described in 'pdc_pci_config_read' arch/parisc/kernel/firmware.c:963: warning: Function parameter or member 'cfg_addr' not described in 'pdc_pci_config_read' arch/parisc/kernel/firmware.c:987: warning: Function parameter or member 'hpa' not described in 'pdc_pci_config_write' arch/parisc/kernel/firmware.c:987: warning: Function parameter or member 'cfg_addr' not described in 'pdc_pci_config_write' arch/parisc/kernel/firmware.c:987: warning: Function parameter or member 'val' not described in 'pdc_pci_config_write' arch/parisc/kernel/firmware.c:1464: warning: Function parameter or member 'actual_len' not described in 'pdc_pat_pd_get_addr_map' arch/parisc/kernel/firmware.c:1464: warning: Excess function parameter 'actlen' description in 'pdc_pat_pd_get_addr_map' >> arch/parisc/kernel/firmware.c:1487: warning: expecting prototype for pdc_pat_pd_get_PDC_interface_revisions(). Prototype was for pdc_pat_pd_get_pdc_revisions() instead arch/parisc/kernel/firmware.c:1539: warning: Function parameter or member 'val' not described in 'pdc_pat_io_pci_cfg_write' arch/parisc/kernel/firmware.c:1539: warning: Excess function parameter 'value' description in 'pdc_pat_io_pci_cfg_write' >> arch/parisc/kernel/firmware.c:1557: warning: expecting prototype for pdc_pat_mem_pdc_info(). Prototype was for pdc_pat_mem_pdt_info() instead -- arch/parisc/kernel/pdc_chassis.c:47: warning: Function parameter or member 'str' not described in 'pdc_chassis_setup' arch/parisc/kernel/pdc_chassis.c:64: warning: Excess function parameter 'pdc_chassis_old' description in 'pdc_chassis_checkold' arch/parisc/kernel/pdc_chassis.c:88: warning: Function parameter or member 'this' not described in 'pdc_chassis_panic_event' arch/parisc/kernel/pdc_chassis.c:88: warning: Function parameter or member 'event' not described in 'pdc_chassis_panic_event' arch/parisc/kernel/pdc_chassis.c:88: warning: Function parameter or member 'ptr' not described in 'pdc_chassis_panic_event' arch/parisc/kernel/pdc_chassis.c:108: warning: Function parameter or member 'this' not described in 'pdc_chassis_reboot_event' arch/parisc/kernel/pdc_chassis.c:108: warning: Function parameter or member 'event' not described in 'pdc_chassis_reboot_event' arch/parisc/kernel/pdc_chassis.c:108: warning: Function parameter or member 'ptr' not described in 'pdc_chassis_reboot_event' >> arch/parisc/kernel/pdc_chassis.c:108: warning: expecting prototype for parisc_reboot_event(). Prototype was for pdc_chassis_reboot_event() instead arch/parisc/kernel/pdc_chassis.c:162: warning: Function parameter or member 'message' not described in 'pdc_chassis_send_status' arch/parisc/kernel/pdc_chassis.c:162: warning: Excess function parameter 'retval' description in 'pdc_chassis_send_status' -- >> arch/parisc/kernel/processor.c:67: warning: expecting prototype for init_cpu_profiler(). Prototype was for init_percpu_prof() instead -- drivers/tty/serial/mux.c:118: warning: Function parameter or member 'port' not described in 'mux_set_mctrl' drivers/tty/serial/mux.c:118: warning: Excess function parameter 'ports' description in 'mux_set_mctrl' >> drivers/tty/serial/mux.c:371: warning: expecting prototype for mux_drv_poll(). Prototype was for mux_poll() instead vim +320 arch/parisc/kernel/firmware.c ^1da177e4c3f415 Linus Torvalds 2005-04-16 134 ^1da177e4c3f415 Linus Torvalds 2005-04-16 135 /** ^1da177e4c3f415 Linus Torvalds 2005-04-16 136 * convert_to_wide - Convert the return buffer addresses into kernel addresses. ^1da177e4c3f415 Linus Torvalds 2005-04-16 137 * @address: The return buffer from PDC. ^1da177e4c3f415 Linus Torvalds 2005-04-16 138 * ^1da177e4c3f415 Linus Torvalds 2005-04-16 139 * This function is used to convert the return buffer addresses retrieved from PDC ^1da177e4c3f415 Linus Torvalds 2005-04-16 140 * into kernel addresses when the PDC address size and kernel address size are ^1da177e4c3f415 Linus Torvalds 2005-04-16 141 * different. ^1da177e4c3f415 Linus Torvalds 2005-04-16 142 */ ^1da177e4c3f415 Linus Torvalds 2005-04-16 143 static void convert_to_wide(unsigned long *addr) ^1da177e4c3f415 Linus Torvalds 2005-04-16 @144 { a8f44e3889b6868 Helge Deller 2007-01-28 145 #ifdef CONFIG_64BIT ^1da177e4c3f415 Linus Torvalds 2005-04-16 146 int i; ^1da177e4c3f415 Linus Torvalds 2005-04-16 147 unsigned int *p = (unsigned int *)addr; ^1da177e4c3f415 Linus Torvalds 2005-04-16 148 ^1da177e4c3f415 Linus Torvalds 2005-04-16 149 if (unlikely(parisc_narrow_firmware)) { 8a5aa00e6b9630d Helge Deller 2017-08-04 150 for (i = (NUM_PDC_RESULT-1); i >= 0; --i) ^1da177e4c3f415 Linus Torvalds 2005-04-16 151 addr[i] = p[i]; ^1da177e4c3f415 Linus Torvalds 2005-04-16 152 } ^1da177e4c3f415 Linus Torvalds 2005-04-16 153 #endif ^1da177e4c3f415 Linus Torvalds 2005-04-16 154 } ^1da177e4c3f415 Linus Torvalds 2005-04-16 155 24b574d052a1996 Kyle McMartin 2008-07-29 156 #ifdef CONFIG_64BIT 60ffef065dd40b9 Paul Gortmaker 2013-06-17 157 void set_firmware_width_unlocked(void) 24b574d052a1996 Kyle McMartin 2008-07-29 158 { 24b574d052a1996 Kyle McMartin 2008-07-29 159 int ret; 24b574d052a1996 Kyle McMartin 2008-07-29 160 24b574d052a1996 Kyle McMartin 2008-07-29 161 ret = mem_pdc_call(PDC_MODEL, PDC_MODEL_CAPABILITIES, 24b574d052a1996 Kyle McMartin 2008-07-29 162 __pa(pdc_result), 0); 24b574d052a1996 Kyle McMartin 2008-07-29 163 convert_to_wide(pdc_result); 24b574d052a1996 Kyle McMartin 2008-07-29 164 if (pdc_result[0] != NARROW_FIRMWARE) 24b574d052a1996 Kyle McMartin 2008-07-29 165 parisc_narrow_firmware = 0; 24b574d052a1996 Kyle McMartin 2008-07-29 166 } 24b574d052a1996 Kyle McMartin 2008-07-29 167 ^1da177e4c3f415 Linus Torvalds 2005-04-16 168 /** ^1da177e4c3f415 Linus Torvalds 2005-04-16 169 * set_firmware_width - Determine if the firmware is wide or narrow. ^1da177e4c3f415 Linus Torvalds 2005-04-16 170 * 24b574d052a1996 Kyle McMartin 2008-07-29 171 * This function must be called before any pdc_* function that uses the 24b574d052a1996 Kyle McMartin 2008-07-29 172 * convert_to_wide function. ^1da177e4c3f415 Linus Torvalds 2005-04-16 173 */ 60ffef065dd40b9 Paul Gortmaker 2013-06-17 174 void set_firmware_width(void) ^1da177e4c3f415 Linus Torvalds 2005-04-16 175 { 09690b18b7b9696 Kyle McMartin 2006-10-05 176 unsigned long flags; 09690b18b7b9696 Kyle McMartin 2006-10-05 177 spin_lock_irqsave(&pdc_lock, flags); 24b574d052a1996 Kyle McMartin 2008-07-29 178 set_firmware_width_unlocked(); 09690b18b7b9696 Kyle McMartin 2006-10-05 179 spin_unlock_irqrestore(&pdc_lock, flags); ^1da177e4c3f415 Linus Torvalds 2005-04-16 180 } 24b574d052a1996 Kyle McMartin 2008-07-29 181 #else 60ffef065dd40b9 Paul Gortmaker 2013-06-17 182 void set_firmware_width_unlocked(void) 60ffef065dd40b9 Paul Gortmaker 2013-06-17 183 { 24b574d052a1996 Kyle McMartin 2008-07-29 184 return; 24b574d052a1996 Kyle McMartin 2008-07-29 185 } 24b574d052a1996 Kyle McMartin 2008-07-29 186 60ffef065dd40b9 Paul Gortmaker 2013-06-17 187 void set_firmware_width(void) 60ffef065dd40b9 Paul Gortmaker 2013-06-17 188 { 24b574d052a1996 Kyle McMartin 2008-07-29 189 return; 24b574d052a1996 Kyle McMartin 2008-07-29 190 } 24b574d052a1996 Kyle McMartin 2008-07-29 191 #endif /*CONFIG_64BIT*/ ^1da177e4c3f415 Linus Torvalds 2005-04-16 192 f5213b2c40f5749 Helge Deller 2017-08-20 193 f5213b2c40f5749 Helge Deller 2017-08-20 194 #if !defined(BOOTLOADER) ^1da177e4c3f415 Linus Torvalds 2005-04-16 195 /** ^1da177e4c3f415 Linus Torvalds 2005-04-16 196 * pdc_emergency_unlock - Unlock the linux pdc lock ^1da177e4c3f415 Linus Torvalds 2005-04-16 197 * ^1da177e4c3f415 Linus Torvalds 2005-04-16 198 * This call unlocks the linux pdc lock in case we need some PDC functions ^1da177e4c3f415 Linus Torvalds 2005-04-16 199 * (like pdc_add_valid) during kernel stack dump. ^1da177e4c3f415 Linus Torvalds 2005-04-16 200 */ ^1da177e4c3f415 Linus Torvalds 2005-04-16 201 void pdc_emergency_unlock(void) ^1da177e4c3f415 Linus Torvalds 2005-04-16 202 { ^1da177e4c3f415 Linus Torvalds 2005-04-16 203 /* Spinlock DEBUG code freaks out if we unconditionally unlock */ ^1da177e4c3f415 Linus Torvalds 2005-04-16 204 if (spin_is_locked(&pdc_lock)) ^1da177e4c3f415 Linus Torvalds 2005-04-16 205 spin_unlock(&pdc_lock); ^1da177e4c3f415 Linus Torvalds 2005-04-16 206 } ^1da177e4c3f415 Linus Torvalds 2005-04-16 207 ^1da177e4c3f415 Linus Torvalds 2005-04-16 208 ^1da177e4c3f415 Linus Torvalds 2005-04-16 209 /** ^1da177e4c3f415 Linus Torvalds 2005-04-16 210 * pdc_add_valid - Verify address can be accessed without causing a HPMC. ^1da177e4c3f415 Linus Torvalds 2005-04-16 211 * @address: Address to be verified. ^1da177e4c3f415 Linus Torvalds 2005-04-16 212 * ^1da177e4c3f415 Linus Torvalds 2005-04-16 213 * This PDC call attempts to read from the specified address and verifies ^1da177e4c3f415 Linus Torvalds 2005-04-16 214 * if the address is valid. ^1da177e4c3f415 Linus Torvalds 2005-04-16 215 * ^1da177e4c3f415 Linus Torvalds 2005-04-16 216 * The return value is PDC_OK (0) in case accessing this address is valid. ^1da177e4c3f415 Linus Torvalds 2005-04-16 217 */ ^1da177e4c3f415 Linus Torvalds 2005-04-16 218 int pdc_add_valid(unsigned long address) ^1da177e4c3f415 Linus Torvalds 2005-04-16 219 { ^1da177e4c3f415 Linus Torvalds 2005-04-16 220 int retval; 09690b18b7b9696 Kyle McMartin 2006-10-05 221 unsigned long flags; ^1da177e4c3f415 Linus Torvalds 2005-04-16 222 09690b18b7b9696 Kyle McMartin 2006-10-05 223 spin_lock_irqsave(&pdc_lock, flags); ^1da177e4c3f415 Linus Torvalds 2005-04-16 224 retval = mem_pdc_call(PDC_ADD_VALID, PDC_ADD_VALID_VERIFY, address); 09690b18b7b9696 Kyle McMartin 2006-10-05 225 spin_unlock_irqrestore(&pdc_lock, flags); ^1da177e4c3f415 Linus Torvalds 2005-04-16 226 ^1da177e4c3f415 Linus Torvalds 2005-04-16 227 return retval; ^1da177e4c3f415 Linus Torvalds 2005-04-16 228 } ^1da177e4c3f415 Linus Torvalds 2005-04-16 229 EXPORT_SYMBOL(pdc_add_valid); ^1da177e4c3f415 Linus Torvalds 2005-04-16 230 77089c5274fe2f7 Helge Deller 2017-09-17 231 /** 77089c5274fe2f7 Helge Deller 2017-09-17 232 * pdc_instr - Get instruction that invokes PDCE_CHECK in HPMC handler. 77089c5274fe2f7 Helge Deller 2017-09-17 233 * @instr: Pointer to variable which will get instruction opcode. 77089c5274fe2f7 Helge Deller 2017-09-17 234 * 77089c5274fe2f7 Helge Deller 2017-09-17 235 * The return value is PDC_OK (0) in case call succeeded. 77089c5274fe2f7 Helge Deller 2017-09-17 236 */ 77089c5274fe2f7 Helge Deller 2017-09-17 237 int __init pdc_instr(unsigned int *instr) 77089c5274fe2f7 Helge Deller 2017-09-17 238 { 77089c5274fe2f7 Helge Deller 2017-09-17 239 int retval; 77089c5274fe2f7 Helge Deller 2017-09-17 240 unsigned long flags; 77089c5274fe2f7 Helge Deller 2017-09-17 241 77089c5274fe2f7 Helge Deller 2017-09-17 242 spin_lock_irqsave(&pdc_lock, flags); 77089c5274fe2f7 Helge Deller 2017-09-17 243 retval = mem_pdc_call(PDC_INSTR, 0UL, __pa(pdc_result)); 77089c5274fe2f7 Helge Deller 2017-09-17 244 convert_to_wide(pdc_result); 77089c5274fe2f7 Helge Deller 2017-09-17 245 *instr = pdc_result[0]; 77089c5274fe2f7 Helge Deller 2017-09-17 246 spin_unlock_irqrestore(&pdc_lock, flags); 77089c5274fe2f7 Helge Deller 2017-09-17 247 77089c5274fe2f7 Helge Deller 2017-09-17 248 return retval; 77089c5274fe2f7 Helge Deller 2017-09-17 249 } 77089c5274fe2f7 Helge Deller 2017-09-17 250 ^1da177e4c3f415 Linus Torvalds 2005-04-16 251 /** ^1da177e4c3f415 Linus Torvalds 2005-04-16 252 * pdc_chassis_info - Return chassis information. ^1da177e4c3f415 Linus Torvalds 2005-04-16 253 * @result: The return buffer. ^1da177e4c3f415 Linus Torvalds 2005-04-16 254 * @chassis_info: The memory buffer address. ^1da177e4c3f415 Linus Torvalds 2005-04-16 255 * @len: The size of the memory buffer address. ^1da177e4c3f415 Linus Torvalds 2005-04-16 256 * ^1da177e4c3f415 Linus Torvalds 2005-04-16 257 * An HVERSION dependent call for returning the chassis information. ^1da177e4c3f415 Linus Torvalds 2005-04-16 258 */ ^1da177e4c3f415 Linus Torvalds 2005-04-16 259 int __init pdc_chassis_info(struct pdc_chassis_info *chassis_info, void *led_info, unsigned long len) ^1da177e4c3f415 Linus Torvalds 2005-04-16 260 { ^1da177e4c3f415 Linus Torvalds 2005-04-16 261 int retval; 09690b18b7b9696 Kyle McMartin 2006-10-05 262 unsigned long flags; ^1da177e4c3f415 Linus Torvalds 2005-04-16 263 09690b18b7b9696 Kyle McMartin 2006-10-05 264 spin_lock_irqsave(&pdc_lock, flags); ^1da177e4c3f415 Linus Torvalds 2005-04-16 265 memcpy(&pdc_result, chassis_info, sizeof(*chassis_info)); ^1da177e4c3f415 Linus Torvalds 2005-04-16 266 memcpy(&pdc_result2, led_info, len); ^1da177e4c3f415 Linus Torvalds 2005-04-16 267 retval = mem_pdc_call(PDC_CHASSIS, PDC_RETURN_CHASSIS_INFO, ^1da177e4c3f415 Linus Torvalds 2005-04-16 268 __pa(pdc_result), __pa(pdc_result2), len); ^1da177e4c3f415 Linus Torvalds 2005-04-16 269 memcpy(chassis_info, pdc_result, sizeof(*chassis_info)); ^1da177e4c3f415 Linus Torvalds 2005-04-16 270 memcpy(led_info, pdc_result2, len); 09690b18b7b9696 Kyle McMartin 2006-10-05 271 spin_unlock_irqrestore(&pdc_lock, flags); ^1da177e4c3f415 Linus Torvalds 2005-04-16 272 ^1da177e4c3f415 Linus Torvalds 2005-04-16 273 return retval; ^1da177e4c3f415 Linus Torvalds 2005-04-16 274 } ^1da177e4c3f415 Linus Torvalds 2005-04-16 275 ^1da177e4c3f415 Linus Torvalds 2005-04-16 276 /** ^1da177e4c3f415 Linus Torvalds 2005-04-16 277 * pdc_pat_chassis_send_log - Sends a PDC PAT CHASSIS log message. ^1da177e4c3f415 Linus Torvalds 2005-04-16 278 * @retval: -1 on error, 0 on success. Other value are PDC errors ^1da177e4c3f415 Linus Torvalds 2005-04-16 279 * ^1da177e4c3f415 Linus Torvalds 2005-04-16 280 * Must be correctly formatted or expect system crash ^1da177e4c3f415 Linus Torvalds 2005-04-16 281 */ a8f44e3889b6868 Helge Deller 2007-01-28 282 #ifdef CONFIG_64BIT ^1da177e4c3f415 Linus Torvalds 2005-04-16 283 int pdc_pat_chassis_send_log(unsigned long state, unsigned long data) ^1da177e4c3f415 Linus Torvalds 2005-04-16 284 { ^1da177e4c3f415 Linus Torvalds 2005-04-16 285 int retval = 0; 09690b18b7b9696 Kyle McMartin 2006-10-05 286 unsigned long flags; ^1da177e4c3f415 Linus Torvalds 2005-04-16 287 ^1da177e4c3f415 Linus Torvalds 2005-04-16 288 if (!is_pdc_pat()) ^1da177e4c3f415 Linus Torvalds 2005-04-16 289 return -1; ^1da177e4c3f415 Linus Torvalds 2005-04-16 290 09690b18b7b9696 Kyle McMartin 2006-10-05 291 spin_lock_irqsave(&pdc_lock, flags); ^1da177e4c3f415 Linus Torvalds 2005-04-16 292 retval = mem_pdc_call(PDC_PAT_CHASSIS_LOG, PDC_PAT_CHASSIS_WRITE_LOG, __pa(&state), __pa(&data)); 09690b18b7b9696 Kyle McMartin 2006-10-05 293 spin_unlock_irqrestore(&pdc_lock, flags); ^1da177e4c3f415 Linus Torvalds 2005-04-16 294 ^1da177e4c3f415 Linus Torvalds 2005-04-16 295 return retval; ^1da177e4c3f415 Linus Torvalds 2005-04-16 296 } ^1da177e4c3f415 Linus Torvalds 2005-04-16 297 #endif ^1da177e4c3f415 Linus Torvalds 2005-04-16 298 ^1da177e4c3f415 Linus Torvalds 2005-04-16 299 /** 8ffaeaf42e91930 Thibaut Varene 2006-05-03 300 * pdc_chassis_disp - Updates chassis code ^1da177e4c3f415 Linus Torvalds 2005-04-16 301 * @retval: -1 on error, 0 on success ^1da177e4c3f415 Linus Torvalds 2005-04-16 302 */ ^1da177e4c3f415 Linus Torvalds 2005-04-16 303 int pdc_chassis_disp(unsigned long disp) ^1da177e4c3f415 Linus Torvalds 2005-04-16 304 { ^1da177e4c3f415 Linus Torvalds 2005-04-16 305 int retval = 0; 09690b18b7b9696 Kyle McMartin 2006-10-05 306 unsigned long flags; ^1da177e4c3f415 Linus Torvalds 2005-04-16 307 09690b18b7b9696 Kyle McMartin 2006-10-05 308 spin_lock_irqsave(&pdc_lock, flags); ^1da177e4c3f415 Linus Torvalds 2005-04-16 309 retval = mem_pdc_call(PDC_CHASSIS, PDC_CHASSIS_DISP, disp); 09690b18b7b9696 Kyle McMartin 2006-10-05 310 spin_unlock_irqrestore(&pdc_lock, flags); ^1da177e4c3f415 Linus Torvalds 2005-04-16 311 ^1da177e4c3f415 Linus Torvalds 2005-04-16 312 return retval; ^1da177e4c3f415 Linus Torvalds 2005-04-16 313 } ^1da177e4c3f415 Linus Torvalds 2005-04-16 314 507efd63d98c443 Sven Schnelle 2019-09-08 315 /** 507efd63d98c443 Sven Schnelle 2019-09-08 316 * pdc_cpu_rendenzvous - Stop currently executing CPU 507efd63d98c443 Sven Schnelle 2019-09-08 317 * @retval: -1 on error, 0 on success 507efd63d98c443 Sven Schnelle 2019-09-08 318 */ 507efd63d98c443 Sven Schnelle 2019-09-08 319 int __pdc_cpu_rendezvous(void) 507efd63d98c443 Sven Schnelle 2019-09-08 @320 { 507efd63d98c443 Sven Schnelle 2019-09-08 321 if (is_pdc_pat()) 507efd63d98c443 Sven Schnelle 2019-09-08 322 return mem_pdc_call(PDC_PAT_CPU, PDC_PAT_CPU_RENDEZVOUS); 507efd63d98c443 Sven Schnelle 2019-09-08 323 else 507efd63d98c443 Sven Schnelle 2019-09-08 324 return mem_pdc_call(PDC_PROC, 1, 0); 507efd63d98c443 Sven Schnelle 2019-09-08 325 } 507efd63d98c443 Sven Schnelle 2019-09-08 326 507efd63d98c443 Sven Schnelle 2019-09-08 327 8ffaeaf42e91930 Thibaut Varene 2006-05-03 328 /** 8ffaeaf42e91930 Thibaut Varene 2006-05-03 329 * pdc_chassis_warn - Fetches chassis warnings 8ffaeaf42e91930 Thibaut Varene 2006-05-03 330 * @retval: -1 on error, 0 on success 8ffaeaf42e91930 Thibaut Varene 2006-05-03 331 */ 8ffaeaf42e91930 Thibaut Varene 2006-05-03 332 int pdc_chassis_warn(unsigned long *warn) 8ffaeaf42e91930 Thibaut Varene 2006-05-03 333 { 8ffaeaf42e91930 Thibaut Varene 2006-05-03 334 int retval = 0; 09690b18b7b9696 Kyle McMartin 2006-10-05 335 unsigned long flags; 8ffaeaf42e91930 Thibaut Varene 2006-05-03 336 09690b18b7b9696 Kyle McMartin 2006-10-05 337 spin_lock_irqsave(&pdc_lock, flags); 8ffaeaf42e91930 Thibaut Varene 2006-05-03 338 retval = mem_pdc_call(PDC_CHASSIS, PDC_CHASSIS_WARN, __pa(pdc_result)); 8ffaeaf42e91930 Thibaut Varene 2006-05-03 339 *warn = pdc_result[0]; 09690b18b7b9696 Kyle McMartin 2006-10-05 340 spin_unlock_irqrestore(&pdc_lock, flags); 8ffaeaf42e91930 Thibaut Varene 2006-05-03 341 8ffaeaf42e91930 Thibaut Varene 2006-05-03 342 return retval; 8ffaeaf42e91930 Thibaut Varene 2006-05-03 343 } 8ffaeaf42e91930 Thibaut Varene 2006-05-03 344 60ffef065dd40b9 Paul Gortmaker 2013-06-17 345 int pdc_coproc_cfg_unlocked(struct pdc_coproc_cfg *pdc_coproc_info) 24b574d052a1996 Kyle McMartin 2008-07-29 346 { 24b574d052a1996 Kyle McMartin 2008-07-29 347 int ret; 24b574d052a1996 Kyle McMartin 2008-07-29 348 24b574d052a1996 Kyle McMartin 2008-07-29 349 ret = mem_pdc_call(PDC_COPROC, PDC_COPROC_CFG, __pa(pdc_result)); 24b574d052a1996 Kyle McMartin 2008-07-29 350 convert_to_wide(pdc_result); 24b574d052a1996 Kyle McMartin 2008-07-29 351 pdc_coproc_info->ccr_functional = pdc_result[0]; 24b574d052a1996 Kyle McMartin 2008-07-29 352 pdc_coproc_info->ccr_present = pdc_result[1]; 24b574d052a1996 Kyle McMartin 2008-07-29 353 pdc_coproc_info->revision = pdc_result[17]; 24b574d052a1996 Kyle McMartin 2008-07-29 354 pdc_coproc_info->model = pdc_result[18]; 24b574d052a1996 Kyle McMartin 2008-07-29 355 24b574d052a1996 Kyle McMartin 2008-07-29 356 return ret; 24b574d052a1996 Kyle McMartin 2008-07-29 357 } 24b574d052a1996 Kyle McMartin 2008-07-29 358 ^1da177e4c3f415 Linus Torvalds 2005-04-16 359 /** ^1da177e4c3f415 Linus Torvalds 2005-04-16 360 * pdc_coproc_cfg - To identify coprocessors attached to the processor. ^1da177e4c3f415 Linus Torvalds 2005-04-16 361 * @pdc_coproc_info: Return buffer address. ^1da177e4c3f415 Linus Torvalds 2005-04-16 362 * ^1da177e4c3f415 Linus Torvalds 2005-04-16 363 * This PDC call returns the presence and status of all the coprocessors ^1da177e4c3f415 Linus Torvalds 2005-04-16 364 * attached to the processor. ^1da177e4c3f415 Linus Torvalds 2005-04-16 365 */ 60ffef065dd40b9 Paul Gortmaker 2013-06-17 366 int pdc_coproc_cfg(struct pdc_coproc_cfg *pdc_coproc_info) ^1da177e4c3f415 Linus Torvalds 2005-04-16 367 { 24b574d052a1996 Kyle McMartin 2008-07-29 368 int ret; 09690b18b7b9696 Kyle McMartin 2006-10-05 369 unsigned long flags; ^1da177e4c3f415 Linus Torvalds 2005-04-16 370 09690b18b7b9696 Kyle McMartin 2006-10-05 371 spin_lock_irqsave(&pdc_lock, flags); 24b574d052a1996 Kyle McMartin 2008-07-29 372 ret = pdc_coproc_cfg_unlocked(pdc_coproc_info); 09690b18b7b9696 Kyle McMartin 2006-10-05 373 spin_unlock_irqrestore(&pdc_lock, flags); ^1da177e4c3f415 Linus Torvalds 2005-04-16 374 24b574d052a1996 Kyle McMartin 2008-07-29 375 return ret; ^1da177e4c3f415 Linus Torvalds 2005-04-16 376 } ^1da177e4c3f415 Linus Torvalds 2005-04-16 377 ^1da177e4c3f415 Linus Torvalds 2005-04-16 378 /** ^1da177e4c3f415 Linus Torvalds 2005-04-16 379 * pdc_iodc_read - Read data from the modules IODC. ^1da177e4c3f415 Linus Torvalds 2005-04-16 380 * @actcnt: The actual number of bytes. ^1da177e4c3f415 Linus Torvalds 2005-04-16 381 * @hpa: The HPA of the module for the iodc read. ^1da177e4c3f415 Linus Torvalds 2005-04-16 382 * @index: The iodc entry point. ^1da177e4c3f415 Linus Torvalds 2005-04-16 383 * @iodc_data: A buffer memory for the iodc options. ^1da177e4c3f415 Linus Torvalds 2005-04-16 384 * @iodc_data_size: Size of the memory buffer. ^1da177e4c3f415 Linus Torvalds 2005-04-16 385 * ^1da177e4c3f415 Linus Torvalds 2005-04-16 386 * This PDC call reads from the IODC of the module specified by the hpa ^1da177e4c3f415 Linus Torvalds 2005-04-16 387 * argument. ^1da177e4c3f415 Linus Torvalds 2005-04-16 388 */ ^1da177e4c3f415 Linus Torvalds 2005-04-16 389 int pdc_iodc_read(unsigned long *actcnt, unsigned long hpa, unsigned int index, ^1da177e4c3f415 Linus Torvalds 2005-04-16 390 void *iodc_data, unsigned int iodc_data_size) ^1da177e4c3f415 Linus Torvalds 2005-04-16 391 { ^1da177e4c3f415 Linus Torvalds 2005-04-16 392 int retval; 09690b18b7b9696 Kyle McMartin 2006-10-05 393 unsigned long flags; ^1da177e4c3f415 Linus Torvalds 2005-04-16 394 09690b18b7b9696 Kyle McMartin 2006-10-05 395 spin_lock_irqsave(&pdc_lock, flags); ^1da177e4c3f415 Linus Torvalds 2005-04-16 396 retval = mem_pdc_call(PDC_IODC, PDC_IODC_READ, __pa(pdc_result), hpa, ^1da177e4c3f415 Linus Torvalds 2005-04-16 397 index, __pa(pdc_result2), iodc_data_size); ^1da177e4c3f415 Linus Torvalds 2005-04-16 398 convert_to_wide(pdc_result); ^1da177e4c3f415 Linus Torvalds 2005-04-16 399 *actcnt = pdc_result[0]; ^1da177e4c3f415 Linus Torvalds 2005-04-16 400 memcpy(iodc_data, pdc_result2, iodc_data_size); 09690b18b7b9696 Kyle McMartin 2006-10-05 401 spin_unlock_irqrestore(&pdc_lock, flags); ^1da177e4c3f415 Linus Torvalds 2005-04-16 402 ^1da177e4c3f415 Linus Torvalds 2005-04-16 403 return retval; ^1da177e4c3f415 Linus Torvalds 2005-04-16 404 } ^1da177e4c3f415 Linus Torvalds 2005-04-16 405 EXPORT_SYMBOL(pdc_iodc_read); ^1da177e4c3f415 Linus Torvalds 2005-04-16 406 ^1da177e4c3f415 Linus Torvalds 2005-04-16 407 /** ^1da177e4c3f415 Linus Torvalds 2005-04-16 408 * pdc_system_map_find_mods - Locate unarchitected modules. ^1da177e4c3f415 Linus Torvalds 2005-04-16 409 * @pdc_mod_info: Return buffer address. ^1da177e4c3f415 Linus Torvalds 2005-04-16 410 * @mod_path: pointer to dev path structure. ^1da177e4c3f415 Linus Torvalds 2005-04-16 411 * @mod_index: fixed address module index. ^1da177e4c3f415 Linus Torvalds 2005-04-16 412 * ^1da177e4c3f415 Linus Torvalds 2005-04-16 413 * To locate and identify modules which reside at fixed I/O addresses, which ^1da177e4c3f415 Linus Torvalds 2005-04-16 414 * do not self-identify via architected bus walks. ^1da177e4c3f415 Linus Torvalds 2005-04-16 415 */ ^1da177e4c3f415 Linus Torvalds 2005-04-16 416 int pdc_system_map_find_mods(struct pdc_system_map_mod_info *pdc_mod_info, ^1da177e4c3f415 Linus Torvalds 2005-04-16 417 struct pdc_module_path *mod_path, long mod_index) ^1da177e4c3f415 Linus Torvalds 2005-04-16 418 { ^1da177e4c3f415 Linus Torvalds 2005-04-16 419 int retval; 09690b18b7b9696 Kyle McMartin 2006-10-05 420 unsigned long flags; ^1da177e4c3f415 Linus Torvalds 2005-04-16 421 09690b18b7b9696 Kyle McMartin 2006-10-05 422 spin_lock_irqsave(&pdc_lock, flags); ^1da177e4c3f415 Linus Torvalds 2005-04-16 423 retval = mem_pdc_call(PDC_SYSTEM_MAP, PDC_FIND_MODULE, __pa(pdc_result), ^1da177e4c3f415 Linus Torvalds 2005-04-16 424 __pa(pdc_result2), mod_index); ^1da177e4c3f415 Linus Torvalds 2005-04-16 425 convert_to_wide(pdc_result); ^1da177e4c3f415 Linus Torvalds 2005-04-16 426 memcpy(pdc_mod_info, pdc_result, sizeof(*pdc_mod_info)); ^1da177e4c3f415 Linus Torvalds 2005-04-16 427 memcpy(mod_path, pdc_result2, sizeof(*mod_path)); 09690b18b7b9696 Kyle McMartin 2006-10-05 428 spin_unlock_irqrestore(&pdc_lock, flags); ^1da177e4c3f415 Linus Torvalds 2005-04-16 429 ^1da177e4c3f415 Linus Torvalds 2005-04-16 430 pdc_mod_info->mod_addr = f_extend(pdc_mod_info->mod_addr); ^1da177e4c3f415 Linus Torvalds 2005-04-16 431 return retval; ^1da177e4c3f415 Linus Torvalds 2005-04-16 432 } ^1da177e4c3f415 Linus Torvalds 2005-04-16 433 ^1da177e4c3f415 Linus Torvalds 2005-04-16 434 /** ^1da177e4c3f415 Linus Torvalds 2005-04-16 435 * pdc_system_map_find_addrs - Retrieve additional address ranges. ^1da177e4c3f415 Linus Torvalds 2005-04-16 436 * @pdc_addr_info: Return buffer address. ^1da177e4c3f415 Linus Torvalds 2005-04-16 437 * @mod_index: Fixed address module index. ^1da177e4c3f415 Linus Torvalds 2005-04-16 438 * @addr_index: Address range index. ^1da177e4c3f415 Linus Torvalds 2005-04-16 439 * ^1da177e4c3f415 Linus Torvalds 2005-04-16 440 * Retrieve additional information about subsequent address ranges for modules ^1da177e4c3f415 Linus Torvalds 2005-04-16 441 * with multiple address ranges. ^1da177e4c3f415 Linus Torvalds 2005-04-16 442 */ ^1da177e4c3f415 Linus Torvalds 2005-04-16 443 int pdc_system_map_find_addrs(struct pdc_system_map_addr_info *pdc_addr_info, ^1da177e4c3f415 Linus Torvalds 2005-04-16 444 long mod_index, long addr_index) ^1da177e4c3f415 Linus Torvalds 2005-04-16 445 { ^1da177e4c3f415 Linus Torvalds 2005-04-16 446 int retval; 09690b18b7b9696 Kyle McMartin 2006-10-05 447 unsigned long flags; ^1da177e4c3f415 Linus Torvalds 2005-04-16 448 09690b18b7b9696 Kyle McMartin 2006-10-05 449 spin_lock_irqsave(&pdc_lock, flags); ^1da177e4c3f415 Linus Torvalds 2005-04-16 450 retval = mem_pdc_call(PDC_SYSTEM_MAP, PDC_FIND_ADDRESS, __pa(pdc_result), ^1da177e4c3f415 Linus Torvalds 2005-04-16 451 mod_index, addr_index); ^1da177e4c3f415 Linus Torvalds 2005-04-16 452 convert_to_wide(pdc_result); ^1da177e4c3f415 Linus Torvalds 2005-04-16 453 memcpy(pdc_addr_info, pdc_result, sizeof(*pdc_addr_info)); 09690b18b7b9696 Kyle McMartin 2006-10-05 454 spin_unlock_irqrestore(&pdc_lock, flags); ^1da177e4c3f415 Linus Torvalds 2005-04-16 455 ^1da177e4c3f415 Linus Torvalds 2005-04-16 456 pdc_addr_info->mod_addr = f_extend(pdc_addr_info->mod_addr); ^1da177e4c3f415 Linus Torvalds 2005-04-16 457 return retval; ^1da177e4c3f415 Linus Torvalds 2005-04-16 458 } ^1da177e4c3f415 Linus Torvalds 2005-04-16 459 ^1da177e4c3f415 Linus Torvalds 2005-04-16 460 /** ^1da177e4c3f415 Linus Torvalds 2005-04-16 461 * pdc_model_info - Return model information about the processor. ^1da177e4c3f415 Linus Torvalds 2005-04-16 462 * @model: The return buffer. ^1da177e4c3f415 Linus Torvalds 2005-04-16 463 * ^1da177e4c3f415 Linus Torvalds 2005-04-16 464 * Returns the version numbers, identifiers, and capabilities from the processor module. ^1da177e4c3f415 Linus Torvalds 2005-04-16 465 */ ^1da177e4c3f415 Linus Torvalds 2005-04-16 466 int pdc_model_info(struct pdc_model *model) ^1da177e4c3f415 Linus Torvalds 2005-04-16 467 { ^1da177e4c3f415 Linus Torvalds 2005-04-16 468 int retval; 09690b18b7b9696 Kyle McMartin 2006-10-05 469 unsigned long flags; ^1da177e4c3f415 Linus Torvalds 2005-04-16 470 09690b18b7b9696 Kyle McMartin 2006-10-05 471 spin_lock_irqsave(&pdc_lock, flags); ^1da177e4c3f415 Linus Torvalds 2005-04-16 472 retval = mem_pdc_call(PDC_MODEL, PDC_MODEL_INFO, __pa(pdc_result), 0); ^1da177e4c3f415 Linus Torvalds 2005-04-16 473 convert_to_wide(pdc_result); ^1da177e4c3f415 Linus Torvalds 2005-04-16 474 memcpy(model, pdc_result, sizeof(*model)); 09690b18b7b9696 Kyle McMartin 2006-10-05 475 spin_unlock_irqrestore(&pdc_lock, flags); ^1da177e4c3f415 Linus Torvalds 2005-04-16 476 ^1da177e4c3f415 Linus Torvalds 2005-04-16 477 return retval; ^1da177e4c3f415 Linus Torvalds 2005-04-16 478 } ^1da177e4c3f415 Linus Torvalds 2005-04-16 479 ^1da177e4c3f415 Linus Torvalds 2005-04-16 480 /** ^1da177e4c3f415 Linus Torvalds 2005-04-16 481 * pdc_model_sysmodel - Get the system model name. ^1da177e4c3f415 Linus Torvalds 2005-04-16 482 * @name: A char array of at least 81 characters. ^1da177e4c3f415 Linus Torvalds 2005-04-16 483 * ec1fdc24c2ae012 Kyle McMartin 2006-06-21 484 * Get system model name from PDC ROM (e.g. 9000/715 or 9000/778/B160L). ec1fdc24c2ae012 Kyle McMartin 2006-06-21 485 * Using OS_ID_HPUX will return the equivalent of the 'modelname' command ec1fdc24c2ae012 Kyle McMartin 2006-06-21 486 * on HP/UX. ^1da177e4c3f415 Linus Torvalds 2005-04-16 487 */ ^1da177e4c3f415 Linus Torvalds 2005-04-16 488 int pdc_model_sysmodel(char *name) ^1da177e4c3f415 Linus Torvalds 2005-04-16 489 { ^1da177e4c3f415 Linus Torvalds 2005-04-16 490 int retval; 09690b18b7b9696 Kyle McMartin 2006-10-05 491 unsigned long flags; ^1da177e4c3f415 Linus Torvalds 2005-04-16 492 09690b18b7b9696 Kyle McMartin 2006-10-05 493 spin_lock_irqsave(&pdc_lock, flags); ^1da177e4c3f415 Linus Torvalds 2005-04-16 494 retval = mem_pdc_call(PDC_MODEL, PDC_MODEL_SYSMODEL, __pa(pdc_result), ^1da177e4c3f415 Linus Torvalds 2005-04-16 495 OS_ID_HPUX, __pa(name)); ^1da177e4c3f415 Linus Torvalds 2005-04-16 496 convert_to_wide(pdc_result); ^1da177e4c3f415 Linus Torvalds 2005-04-16 497 ^1da177e4c3f415 Linus Torvalds 2005-04-16 498 if (retval == PDC_OK) { ^1da177e4c3f415 Linus Torvalds 2005-04-16 499 name[pdc_result[0]] = '\0'; /* add trailing '\0' */ ^1da177e4c3f415 Linus Torvalds 2005-04-16 500 } else { ^1da177e4c3f415 Linus Torvalds 2005-04-16 501 name[0] = 0; ^1da177e4c3f415 Linus Torvalds 2005-04-16 502 } 09690b18b7b9696 Kyle McMartin 2006-10-05 503 spin_unlock_irqrestore(&pdc_lock, flags); ^1da177e4c3f415 Linus Torvalds 2005-04-16 504 ^1da177e4c3f415 Linus Torvalds 2005-04-16 505 return retval; ^1da177e4c3f415 Linus Torvalds 2005-04-16 506 } ^1da177e4c3f415 Linus Torvalds 2005-04-16 507 ^1da177e4c3f415 Linus Torvalds 2005-04-16 508 /** ^1da177e4c3f415 Linus Torvalds 2005-04-16 509 * pdc_model_versions - Identify the version number of each processor. ^1da177e4c3f415 Linus Torvalds 2005-04-16 510 * @cpu_id: The return buffer. ^1da177e4c3f415 Linus Torvalds 2005-04-16 511 * @id: The id of the processor to check. ^1da177e4c3f415 Linus Torvalds 2005-04-16 512 * ^1da177e4c3f415 Linus Torvalds 2005-04-16 513 * Returns the version number for each processor component. ^1da177e4c3f415 Linus Torvalds 2005-04-16 514 * ^1da177e4c3f415 Linus Torvalds 2005-04-16 515 * This comment was here before, but I do not know what it means :( -RB ^1da177e4c3f415 Linus Torvalds 2005-04-16 516 * id: 0 = cpu revision, 1 = boot-rom-version ^1da177e4c3f415 Linus Torvalds 2005-04-16 517 */ ^1da177e4c3f415 Linus Torvalds 2005-04-16 518 int pdc_model_versions(unsigned long *versions, int id) ^1da177e4c3f415 Linus Torvalds 2005-04-16 @519 { ^1da177e4c3f415 Linus Torvalds 2005-04-16 520 int retval; 09690b18b7b9696 Kyle McMartin 2006-10-05 521 unsigned long flags; ^1da177e4c3f415 Linus Torvalds 2005-04-16 522 09690b18b7b9696 Kyle McMartin 2006-10-05 523 spin_lock_irqsave(&pdc_lock, flags); ^1da177e4c3f415 Linus Torvalds 2005-04-16 524 retval = mem_pdc_call(PDC_MODEL, PDC_MODEL_VERSIONS, __pa(pdc_result), id); ^1da177e4c3f415 Linus Torvalds 2005-04-16 525 convert_to_wide(pdc_result); ^1da177e4c3f415 Linus Torvalds 2005-04-16 526 *versions = pdc_result[0]; 09690b18b7b9696 Kyle McMartin 2006-10-05 527 spin_unlock_irqrestore(&pdc_lock, flags); ^1da177e4c3f415 Linus Torvalds 2005-04-16 528 ^1da177e4c3f415 Linus Torvalds 2005-04-16 529 return retval; ^1da177e4c3f415 Linus Torvalds 2005-04-16 530 } ^1da177e4c3f415 Linus Torvalds 2005-04-16 531 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org