Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 37b69cf9 authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab
Browse files

i7300_edac: Properly detect channel on CE errors

parent 32f94726
Loading
Loading
Loading
Loading
+14 −5
Original line number Original line Diff line number Diff line
@@ -101,7 +101,6 @@
  #define IS_SINGLE_MODE(mca)		((mca) & (1 << 14))
  #define IS_SINGLE_MODE(mca)		((mca) & (1 << 14))


#define TOLM			0x6C
#define TOLM			0x6C
#define REDMEMB			0x7C


#define MIR0			0x80
#define MIR0			0x80
#define MIR1			0x84
#define MIR1			0x84
@@ -279,6 +278,9 @@ static const char *ferr_global_lo_name[] = {


#define REDMEMA		0xdc
#define REDMEMA		0xdc


#define REDMEMB		0x7c
  #define IS_SECOND_CH(v)	((v) * (1 << 17))

#define RECMEMA		0xe0
#define RECMEMA		0xe0
  #define RECMEMA_BANK(v)	(((v) >> 12) & 7)
  #define RECMEMA_BANK(v)	(((v) >> 12) & 7)
  #define RECMEMA_RANK(v)	(((v) >> 8) & 15)
  #define RECMEMA_RANK(v)	(((v) >> 8) & 15)
@@ -414,7 +416,7 @@ static void i7300_process_fbd_error(struct mem_ctl_info *mci)
	struct i7300_pvt *pvt;
	struct i7300_pvt *pvt;
	u32 errnum, value;
	u32 errnum, value;
	u16 val16;
	u16 val16;
	unsigned branch, bank, rank, cas, ras;
	unsigned branch, channel, bank, rank, cas, ras;
	u32 syndrome;
	u32 syndrome;


	unsigned long errors;
	unsigned long errors;
@@ -488,12 +490,19 @@ static void i7300_process_fbd_error(struct mem_ctl_info *mci)
		cas = RECMEMB_CAS(value);
		cas = RECMEMB_CAS(value);
		ras = RECMEMB_RAS(value);
		ras = RECMEMB_RAS(value);


		pci_read_config_dword(pvt->pci_dev_16_1_fsb_addr_map,
				     REDMEMB, &value);

		channel = (branch << 1);
		if (IS_SECOND_CH(value))
			channel++;

		/* Form out message */
		/* Form out message */
		snprintf(pvt->tmp_prt_buffer, PAGE_SIZE,
		snprintf(pvt->tmp_prt_buffer, PAGE_SIZE,
			"Corrected error (Branch=%d (channel %d or %d), "
			"Corrected error (Branch=%d, Channel %d), "
			" DRAM-Bank=%d %s "
			" DRAM-Bank=%d %s "
			"RAS=%d CAS=%d, CE Err=0x%lx, Syndrome=0x%08x(%s))",
			"RAS=%d CAS=%d, CE Err=0x%lx, Syndrome=0x%08x(%s))",
			branch, branch << 1, (branch << 1) + 1,
			branch, channel,
			bank,
			bank,
			is_wr ? "RDWR" : "RD",
			is_wr ? "RDWR" : "RD",
			ras, cas,
			ras, cas,
@@ -505,7 +514,7 @@ static void i7300_process_fbd_error(struct mem_ctl_info *mci)
		 *	 Currently, we don't know how to identify the right
		 *	 Currently, we don't know how to identify the right
		 *	 channel.
		 *	 channel.
		 */
		 */
		edac_mc_handle_fbd_ce(mci, rank, branch << 1,
		edac_mc_handle_fbd_ce(mci, rank, channel,
				      pvt->tmp_prt_buffer);
				      pvt->tmp_prt_buffer);
	}
	}
	return;
	return;