|  | @@ -459,3 +459,112 @@ marvel_print_po7_err_sum(struct ev7_pal_io_subpacket *io)
 | 
	
		
			
				|  |  |  	 * The black hole events.
 | 
	
		
			
				|  |  |  	 */
 | 
	
		
			
				|  |  |  	if (io->po7_error_sum & IO7__PO7_ERRSUM__MAF_TO)
 | 
	
		
			
				|  |  | +		printk("%s    BLACK HOLE: Timeout for all responses\n",
 | 
	
		
			
				|  |  | +		       err_print_prefix);
 | 
	
		
			
				|  |  | +	if (io->po7_error_sum & IO7__PO7_ERRSUM__BH_CDT_TO)
 | 
	
		
			
				|  |  | +		printk("%s    BLACK HOLE: Credit Timeout\n", err_print_prefix);
 | 
	
		
			
				|  |  | +	if (io->po7_error_sum & IO7__PO7_ERRSUM__BH_CLK_HDR)
 | 
	
		
			
				|  |  | +		printk("%s    BLACK HOLE: Clock check on header\n", 
 | 
	
		
			
				|  |  | +		       err_print_prefix);
 | 
	
		
			
				|  |  | +	if (io->po7_error_sum & IO7__PO7_ERRSUM__BH_DBE_HDR)
 | 
	
		
			
				|  |  | +		printk("%s    BLACK HOLE: Uncorrectable Error on header\n",
 | 
	
		
			
				|  |  | +		       err_print_prefix);
 | 
	
		
			
				|  |  | +	if (io->po7_error_sum & IO7__PO7_ERRSUM__BH_GBG_HDR)
 | 
	
		
			
				|  |  | +		printk("%s    BLACK HOLE: Garbage on header\n", 
 | 
	
		
			
				|  |  | +		       err_print_prefix);
 | 
	
		
			
				|  |  | +	if (io->po7_error_sum & IO7__PO7_ERRSUM__BH_BAD_CMD)
 | 
	
		
			
				|  |  | +		printk("%s    BLACK HOLE: Bad EV7 command\n", 
 | 
	
		
			
				|  |  | +		       err_print_prefix);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (io->po7_error_sum & IO7__PO7_ERRSUM__ERR_LST) 
 | 
	
		
			
				|  |  | +		printk("%s    Lost Error\n", err_print_prefix);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	printk("%s    Failing Packet:\n"
 | 
	
		
			
				|  |  | +	       "%s      Cycle 1: %016llx\n"
 | 
	
		
			
				|  |  | +	       "%s      Cycle 2: %016llx\n",
 | 
	
		
			
				|  |  | +	       err_print_prefix,
 | 
	
		
			
				|  |  | +	       err_print_prefix, io->po7_err_pkt0,
 | 
	
		
			
				|  |  | +	       err_print_prefix, io->po7_err_pkt1);
 | 
	
		
			
				|  |  | +	/*
 | 
	
		
			
				|  |  | +	 * If there are any valid bits in UNCRR sym for this err, 
 | 
	
		
			
				|  |  | +	 * print UNCRR_SYM as well.
 | 
	
		
			
				|  |  | +	 */
 | 
	
		
			
				|  |  | +check_uncrr_sym:
 | 
	
		
			
				|  |  | +	if (uncrr_sym_valid)
 | 
	
		
			
				|  |  | +		marvel_print_po7_uncrr_sym(io->po7_uncrr_sym, uncrr_sym_valid);
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +static void
 | 
	
		
			
				|  |  | +marvel_print_pox_tlb_err(u64 tlb_err)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	static char *tlb_errors[] = {
 | 
	
		
			
				|  |  | +		"No Error",
 | 
	
		
			
				|  |  | +		"North Port Signaled Error fetching TLB entry",
 | 
	
		
			
				|  |  | +		"PTE invalid or UCC or GBG error on this entry",
 | 
	
		
			
				|  |  | +		"Address did not hit any DMA window"
 | 
	
		
			
				|  |  | +	};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +#define IO7__POX_TLBERR__ERR_VALID		(1UL << 63)
 | 
	
		
			
				|  |  | +#define IO7__POX_TLBERR__ERRCODE__S		(0)
 | 
	
		
			
				|  |  | +#define IO7__POX_TLBERR__ERRCODE__M		(0x3)
 | 
	
		
			
				|  |  | +#define IO7__POX_TLBERR__ERR_TLB_PTR__S		(3)
 | 
	
		
			
				|  |  | +#define IO7__POX_TLBERR__ERR_TLB_PTR__M		(0x7)
 | 
	
		
			
				|  |  | +#define IO7__POX_TLBERR__FADDR__S		(6)
 | 
	
		
			
				|  |  | +#define IO7__POX_TLBERR__FADDR__M		(0x3fffffffffful)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (!(tlb_err & IO7__POX_TLBERR__ERR_VALID))
 | 
	
		
			
				|  |  | +		return;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	printk("%s      TLB Error on index 0x%llx:\n"
 | 
	
		
			
				|  |  | +	       "%s        - %s\n"
 | 
	
		
			
				|  |  | +	       "%s        - Addr: 0x%016llx\n",
 | 
	
		
			
				|  |  | +	       err_print_prefix,
 | 
	
		
			
				|  |  | +	       EXTRACT(tlb_err, IO7__POX_TLBERR__ERR_TLB_PTR),
 | 
	
		
			
				|  |  | +	       err_print_prefix,
 | 
	
		
			
				|  |  | +	       tlb_errors[EXTRACT(tlb_err, IO7__POX_TLBERR__ERRCODE)],
 | 
	
		
			
				|  |  | +	       err_print_prefix,
 | 
	
		
			
				|  |  | +	       EXTRACT(tlb_err, IO7__POX_TLBERR__FADDR) << 6);
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +static  void
 | 
	
		
			
				|  |  | +marvel_print_pox_spl_cmplt(u64 spl_cmplt)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	char message[80];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +#define IO7__POX_SPLCMPLT__MESSAGE__S		(0)
 | 
	
		
			
				|  |  | +#define IO7__POX_SPLCMPLT__MESSAGE__M		(0x0fffffffful)
 | 
	
		
			
				|  |  | +#define IO7__POX_SPLCMPLT__SOURCE_BUS__S	(40)
 | 
	
		
			
				|  |  | +#define IO7__POX_SPLCMPLT__SOURCE_BUS__M	(0xfful)
 | 
	
		
			
				|  |  | +#define IO7__POX_SPLCMPLT__SOURCE_DEV__S	(35)
 | 
	
		
			
				|  |  | +#define IO7__POX_SPLCMPLT__SOURCE_DEV__M	(0x1ful)
 | 
	
		
			
				|  |  | +#define IO7__POX_SPLCMPLT__SOURCE_FUNC__S	(32)
 | 
	
		
			
				|  |  | +#define IO7__POX_SPLCMPLT__SOURCE_FUNC__M	(0x07ul)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +#define IO7__POX_SPLCMPLT__MSG_CLASS__S		(28)
 | 
	
		
			
				|  |  | +#define IO7__POX_SPLCMPLT__MSG_CLASS__M		(0xf)
 | 
	
		
			
				|  |  | +#define IO7__POX_SPLCMPLT__MSG_INDEX__S		(20)
 | 
	
		
			
				|  |  | +#define IO7__POX_SPLCMPLT__MSG_INDEX__M		(0xff)
 | 
	
		
			
				|  |  | +#define IO7__POX_SPLCMPLT__MSG_CLASSINDEX__S	(20)
 | 
	
		
			
				|  |  | +#define IO7__POX_SPLCMPLT__MSG_CLASSINDEX__M    (0xfff)
 | 
	
		
			
				|  |  | +#define IO7__POX_SPLCMPLT__REM_LOWER_ADDR__S	(12)
 | 
	
		
			
				|  |  | +#define IO7__POX_SPLCMPLT__REM_LOWER_ADDR__M	(0x7f)
 | 
	
		
			
				|  |  | +#define IO7__POX_SPLCMPLT__REM_BYTE_COUNT__S	(0)
 | 
	
		
			
				|  |  | +#define IO7__POX_SPLCMPLT__REM_BYTE_COUNT__M	(0xfff)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	printk("%s      Split Completion Error:\n"	
 | 
	
		
			
				|  |  | +	       "%s         Source (Bus:Dev:Func): %lld:%lld:%lld\n",
 | 
	
		
			
				|  |  | +	       err_print_prefix,
 | 
	
		
			
				|  |  | +	       err_print_prefix,
 | 
	
		
			
				|  |  | +	       EXTRACT(spl_cmplt, IO7__POX_SPLCMPLT__SOURCE_BUS),
 | 
	
		
			
				|  |  | +	       EXTRACT(spl_cmplt, IO7__POX_SPLCMPLT__SOURCE_DEV),
 | 
	
		
			
				|  |  | +	       EXTRACT(spl_cmplt, IO7__POX_SPLCMPLT__SOURCE_FUNC));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	switch(EXTRACT(spl_cmplt, IO7__POX_SPLCMPLT__MSG_CLASSINDEX)) {
 | 
	
		
			
				|  |  | +	case 0x000:
 | 
	
		
			
				|  |  | +		sprintf(message, "Normal completion");
 | 
	
		
			
				|  |  | +		break;
 | 
	
		
			
				|  |  | +	case 0x100:
 | 
	
		
			
				|  |  | +		sprintf(message, "Bridge - Master Abort");
 | 
	
		
			
				|  |  | +		break;
 | 
	
		
			
				|  |  | +	case 0x101:
 | 
	
		
			
				|  |  | +		sprintf(message, "Bridge - Target Abort");
 |