|  | @@ -346,3 +346,116 @@ marvel_print_po7_err_sum(struct ev7_pal_io_subpacket *io)
 | 
	
		
			
				|  |  |  #define IO7__PO7_ERRSUM__UN_MAF_LOST	(1UL << 44)
 | 
	
		
			
				|  |  |  #define IO7__PO7_ERRSUM__UN_PKT_OVF	(1UL << 45)
 | 
	
		
			
				|  |  |  #define IO7__PO7_ERRSUM__UN_CDT_OVF	(1UL << 46)
 | 
	
		
			
				|  |  | +#define IO7__PO7_ERRSUM__UN_DEALLOC	(1UL << 47)
 | 
	
		
			
				|  |  | +#define IO7__PO7_ERRSUM__BH_CDT_TO	(1UL << 51)
 | 
	
		
			
				|  |  | +#define IO7__PO7_ERRSUM__BH_CLK_HDR	(1UL << 52)
 | 
	
		
			
				|  |  | +#define IO7__PO7_ERRSUM__BH_DBE_HDR	(1UL << 53)
 | 
	
		
			
				|  |  | +#define IO7__PO7_ERRSUM__BH_GBG_HDR	(1UL << 54)
 | 
	
		
			
				|  |  | +#define IO7__PO7_ERRSUM__BH_BAD_CMD	(1UL << 55)
 | 
	
		
			
				|  |  | +#define IO7__PO7_ERRSUM__HLT_INT	(1UL << 56)
 | 
	
		
			
				|  |  | +#define IO7__PO7_ERRSUM__HP_INT		(1UL << 57)
 | 
	
		
			
				|  |  | +#define IO7__PO7_ERRSUM__CRD_INT	(1UL << 58)
 | 
	
		
			
				|  |  | +#define IO7__PO7_ERRSUM__STV_INT	(1UL << 59)
 | 
	
		
			
				|  |  | +#define IO7__PO7_ERRSUM__HRD_INT	(1UL << 60)
 | 
	
		
			
				|  |  | +#define IO7__PO7_ERRSUM__BH_SUM		(1UL << 61)
 | 
	
		
			
				|  |  | +#define IO7__PO7_ERRSUM__ERR_LST	(1UL << 62)
 | 
	
		
			
				|  |  | +#define IO7__PO7_ERRSUM__ERR_VALID	(1UL << 63)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +#define IO7__PO7_ERRSUM__ERR_MASK	(IO7__PO7_ERRSUM__ERR_VALID |	\
 | 
	
		
			
				|  |  | +					 IO7__PO7_ERRSUM__CR_SBE)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	/*
 | 
	
		
			
				|  |  | +	 * Single bit errors aren't covered by ERR_VALID.
 | 
	
		
			
				|  |  | +	 */
 | 
	
		
			
				|  |  | +	if (io->po7_error_sum & IO7__PO7_ERRSUM__CR_SBE) {
 | 
	
		
			
				|  |  | +		printk("%s    %sSingle Bit Error(s) detected/corrected\n",
 | 
	
		
			
				|  |  | +		       err_print_prefix,
 | 
	
		
			
				|  |  | +		       (io->po7_error_sum & IO7__PO7_ERRSUM__CR_SBE2) 
 | 
	
		
			
				|  |  | +		       ? "Multiple " : "");
 | 
	
		
			
				|  |  | +		marvel_print_po7_crrct_sym(io->po7_crrct_sym);
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	/*
 | 
	
		
			
				|  |  | +	 * Neither are the interrupt status bits
 | 
	
		
			
				|  |  | +	 */
 | 
	
		
			
				|  |  | +	if (io->po7_error_sum & IO7__PO7_ERRSUM__HLT_INT)
 | 
	
		
			
				|  |  | +		printk("%s    Halt Interrupt posted", err_print_prefix);
 | 
	
		
			
				|  |  | +	if (io->po7_error_sum & IO7__PO7_ERRSUM__HP_INT) {
 | 
	
		
			
				|  |  | +		printk("%s    Hot Plug Event Interrupt posted", 
 | 
	
		
			
				|  |  | +		       err_print_prefix);
 | 
	
		
			
				|  |  | +		uncrr_sym_valid |= GEN_MASK(IO7__PO7_UNCRR_SYM__DETECT_SP);
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	if (io->po7_error_sum & IO7__PO7_ERRSUM__CRD_INT)
 | 
	
		
			
				|  |  | +		printk("%s    Correctable Error Interrupt posted", 
 | 
	
		
			
				|  |  | +		       err_print_prefix);
 | 
	
		
			
				|  |  | +	if (io->po7_error_sum & IO7__PO7_ERRSUM__STV_INT) {
 | 
	
		
			
				|  |  | +		printk("%s    Starvation Interrupt posted", err_print_prefix);
 | 
	
		
			
				|  |  | +		uncrr_sym_valid |= GEN_MASK(IO7__PO7_UNCRR_SYM__STRV_VTR);
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	if (io->po7_error_sum & IO7__PO7_ERRSUM__HRD_INT) {
 | 
	
		
			
				|  |  | +		printk("%s    Hard Error Interrupt posted", err_print_prefix);
 | 
	
		
			
				|  |  | +		uncrr_sym_valid |= GEN_MASK(IO7__PO7_UNCRR_SYM__DETECT_SP);
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	/*
 | 
	
		
			
				|  |  | +	 * Everything else is valid only with ERR_VALID, so skip to the end
 | 
	
		
			
				|  |  | +	 * (uncrr_sym check) unless ERR_VALID is set.
 | 
	
		
			
				|  |  | +	 */
 | 
	
		
			
				|  |  | +	if (!(io->po7_error_sum & IO7__PO7_ERRSUM__ERR_VALID)) 
 | 
	
		
			
				|  |  | +		goto check_uncrr_sym;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	/*
 | 
	
		
			
				|  |  | +	 * Since ERR_VALID is set, VICTIM_SP in uncrr_sym is valid.
 | 
	
		
			
				|  |  | +	 * For bits [29:0] to also be valid, the following bits must
 | 
	
		
			
				|  |  | +	 * not be set:
 | 
	
		
			
				|  |  | +	 *	CR_PIO_WBYTE	CR_CSR_NXM	CR_RSP_NXM
 | 
	
		
			
				|  |  | +	 *	CR_ERR_RESP	MAF_TO
 | 
	
		
			
				|  |  | +	 */
 | 
	
		
			
				|  |  | +	uncrr_sym_valid |= GEN_MASK(IO7__PO7_UNCRR_SYM__VICTIM_SP);
 | 
	
		
			
				|  |  | +	if (!(io->po7_error_sum & (IO7__PO7_ERRSUM__CR_PIO_WBYTE |
 | 
	
		
			
				|  |  | +				   IO7__PO7_ERRSUM__CR_CSR_NXM |
 | 
	
		
			
				|  |  | +				   IO7__PO7_ERRSUM__CR_RSP_NXM |
 | 
	
		
			
				|  |  | +				   IO7__PO7_ERRSUM__CR_ERR_RESP |
 | 
	
		
			
				|  |  | +				   IO7__PO7_ERRSUM__MAF_TO)))
 | 
	
		
			
				|  |  | +		uncrr_sym_valid |= 0x3ffffffful;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (io->po7_error_sum & IO7__PO7_ERRSUM__CR_PIO_WBYTE)
 | 
	
		
			
				|  |  | +		printk("%s    Write byte into IO7 CSR\n", err_print_prefix);
 | 
	
		
			
				|  |  | +	if (io->po7_error_sum & IO7__PO7_ERRSUM__CR_CSR_NXM)
 | 
	
		
			
				|  |  | +		printk("%s    PIO to non-existent CSR\n", err_print_prefix);
 | 
	
		
			
				|  |  | +	if (io->po7_error_sum & IO7__PO7_ERRSUM__CR_RPID_ACV)
 | 
	
		
			
				|  |  | +		printk("%s    Bus Requester PID (Access Violation)\n",
 | 
	
		
			
				|  |  | +		       err_print_prefix);
 | 
	
		
			
				|  |  | +	if (io->po7_error_sum & IO7__PO7_ERRSUM__CR_RSP_NXM)
 | 
	
		
			
				|  |  | +		printk("%s    Received NXM response from EV7\n",
 | 
	
		
			
				|  |  | +		       err_print_prefix);
 | 
	
		
			
				|  |  | +	if (io->po7_error_sum & IO7__PO7_ERRSUM__CR_ERR_RESP)
 | 
	
		
			
				|  |  | +		printk("%s    Received ERROR RESPONSE\n", err_print_prefix);
 | 
	
		
			
				|  |  | +	if (io->po7_error_sum & IO7__PO7_ERRSUM__CR_CLK_DERR)
 | 
	
		
			
				|  |  | +		printk("%s    Clock error on data flit\n", err_print_prefix);
 | 
	
		
			
				|  |  | +	if (io->po7_error_sum & IO7__PO7_ERRSUM__CR_DAT_DBE)
 | 
	
		
			
				|  |  | +		printk("%s    Double Bit Error Data Error Detected\n",
 | 
	
		
			
				|  |  | +		       err_print_prefix);
 | 
	
		
			
				|  |  | +	if (io->po7_error_sum & IO7__PO7_ERRSUM__CR_DAT_GRBG)
 | 
	
		
			
				|  |  | +		printk("%s    Garbage Encoding Detected on the data\n",
 | 
	
		
			
				|  |  | +		       err_print_prefix);
 | 
	
		
			
				|  |  | +	if (io->po7_error_sum & IO7__PO7_ERRSUM__UGBGE) {
 | 
	
		
			
				|  |  | +		printk("%s    Garbage Encoding sent up hose\n",
 | 
	
		
			
				|  |  | +		       err_print_prefix);
 | 
	
		
			
				|  |  | +		marvel_print_po7_ugbge_sym(io->po7_ugbge_sym);
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	if (io->po7_error_sum & IO7__PO7_ERRSUM__UN_MAF_LOST)
 | 
	
		
			
				|  |  | +		printk("%s    Orphan response (unexpected response)\n",
 | 
	
		
			
				|  |  | +		       err_print_prefix);
 | 
	
		
			
				|  |  | +	if (io->po7_error_sum & IO7__PO7_ERRSUM__UN_PKT_OVF)
 | 
	
		
			
				|  |  | +		printk("%s    Down hose packet overflow\n", err_print_prefix);
 | 
	
		
			
				|  |  | +	if (io->po7_error_sum & IO7__PO7_ERRSUM__UN_CDT_OVF)
 | 
	
		
			
				|  |  | +		printk("%s    Down hose credit overflow\n", err_print_prefix);
 | 
	
		
			
				|  |  | +	if (io->po7_error_sum & IO7__PO7_ERRSUM__UN_DEALLOC)
 | 
	
		
			
				|  |  | +		printk("%s    Unexpected or bad dealloc field\n",
 | 
	
		
			
				|  |  | +		       err_print_prefix);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	/*
 | 
	
		
			
				|  |  | +	 * The black hole events.
 | 
	
		
			
				|  |  | +	 */
 | 
	
		
			
				|  |  | +	if (io->po7_error_sum & IO7__PO7_ERRSUM__MAF_TO)
 |