99 * Copyright (C) 2019 GRATE-DRIVER project 
1010 */ 
1111
12+ #include  <linux/bitfield.h> 
1213#include  <linux/clk.h> 
1314#include  <linux/clk/tegra.h> 
1415#include  <linux/debugfs.h> 
3132#include  <soc/tegra/common.h> 
3233#include  <soc/tegra/fuse.h> 
3334
35+ #include  "../jedec_ddr.h" 
36+ #include  "../of_memory.h" 
37+ 
3438#include  "mc.h" 
3539
3640#define  EMC_INTSTATUS 				0x000
3741#define  EMC_INTMASK 				0x004
3842#define  EMC_DBG 					0x008
43+ #define  EMC_ADR_CFG 				0x010
3944#define  EMC_CFG 					0x00c
4045#define  EMC_REFCTRL 				0x020
4146#define  EMC_TIMING_CONTROL 			0x028
8186#define  EMC_EMRS 				0x0d0
8287#define  EMC_SELF_REF 				0x0e0
8388#define  EMC_MRW 					0x0e8
89+ #define  EMC_MRR 					0x0ec
8490#define  EMC_XM2DQSPADCTRL3 			0x0f8
8591#define  EMC_FBIO_SPARE 				0x100
8692#define  EMC_FBIO_CFG5 				0x104
208214
209215#define  EMC_REFRESH_OVERFLOW_INT 		BIT(3)
210216#define  EMC_CLKCHANGE_COMPLETE_INT 		BIT(4)
217+ #define  EMC_MRR_DIVLD_INT 			BIT(5)
218+ 
219+ #define  EMC_MRR_DEV_SELECTN 			GENMASK(31, 30)
220+ #define  EMC_MRR_MRR_MA 				GENMASK(23, 16)
221+ #define  EMC_MRR_MRR_DATA 			GENMASK(15, 0)
222+ 
223+ #define  EMC_ADR_CFG_EMEM_NUMDEV 			BIT(0)
211224
212225enum  emc_dram_type  {
213226	DRAM_TYPE_DDR3 ,
@@ -378,6 +391,8 @@ struct tegra_emc {
378391
379392	/* protect shared rate-change code path */ 
380393	struct  mutex  rate_lock ;
394+ 
395+ 	bool  mrr_error ;
381396};
382397
383398static  int  emc_seq_update_timing (struct  tegra_emc  * emc )
@@ -1008,12 +1023,18 @@ static int emc_load_timings_from_dt(struct tegra_emc *emc,
10081023	return  0 ;
10091024}
10101025
1011- static  struct  device_node  * emc_find_node_by_ram_code (struct  device   * dev )
1026+ static  struct  device_node  * emc_find_node_by_ram_code (struct  tegra_emc   * emc )
10121027{
1028+ 	struct  device  * dev  =  emc -> dev ;
10131029	struct  device_node  * np ;
10141030	u32  value , ram_code ;
10151031	int  err ;
10161032
1033+ 	if  (emc -> mrr_error ) {
1034+ 		dev_warn (dev , "memory timings skipped due to MRR error\n" );
1035+ 		return  NULL ;
1036+ 	}
1037+ 
10171038	if  (of_get_child_count (dev -> of_node ) ==  0 ) {
10181039		dev_info_once (dev , "device-tree doesn't have memory timings\n" );
10191040		return  NULL ;
@@ -1035,11 +1056,73 @@ static struct device_node *emc_find_node_by_ram_code(struct device *dev)
10351056	return  NULL ;
10361057}
10371058
1059+ static  int  emc_read_lpddr_mode_register (struct  tegra_emc  * emc ,
1060+ 					unsigned int   emem_dev ,
1061+ 					unsigned int   register_addr ,
1062+ 					unsigned int   * register_data )
1063+ {
1064+ 	u32  memory_dev  =  emem_dev  +  1 ;
1065+ 	u32  val , mr_mask  =  0xff ;
1066+ 	int  err ;
1067+ 
1068+ 	/* clear data-valid interrupt status */ 
1069+ 	writel_relaxed (EMC_MRR_DIVLD_INT , emc -> regs  +  EMC_INTSTATUS );
1070+ 
1071+ 	/* issue mode register read request */ 
1072+ 	val   =  FIELD_PREP (EMC_MRR_DEV_SELECTN , memory_dev );
1073+ 	val  |= FIELD_PREP (EMC_MRR_MRR_MA , register_addr );
1074+ 
1075+ 	writel_relaxed (val , emc -> regs  +  EMC_MRR );
1076+ 
1077+ 	/* wait for the LPDDR2 data-valid interrupt */ 
1078+ 	err  =  readl_relaxed_poll_timeout_atomic (emc -> regs  +  EMC_INTSTATUS , val ,
1079+ 						val  &  EMC_MRR_DIVLD_INT ,
1080+ 						1 , 100 );
1081+ 	if  (err ) {
1082+ 		dev_err (emc -> dev , "mode register %u read failed: %d\n" ,
1083+ 			register_addr , err );
1084+ 		emc -> mrr_error  =  true;
1085+ 		return  err ;
1086+ 	}
1087+ 
1088+ 	/* read out mode register data */ 
1089+ 	val  =  readl_relaxed (emc -> regs  +  EMC_MRR );
1090+ 	* register_data  =  FIELD_GET (EMC_MRR_MRR_DATA , val ) &  mr_mask ;
1091+ 
1092+ 	return  0 ;
1093+ }
1094+ 
1095+ static  void  emc_read_lpddr_sdram_info (struct  tegra_emc  * emc ,
1096+ 				      unsigned int   emem_dev )
1097+ {
1098+ 	union  lpddr2_basic_config4  basic_conf4 ;
1099+ 	unsigned int   manufacturer_id ;
1100+ 	unsigned int   revision_id1 ;
1101+ 	unsigned int   revision_id2 ;
1102+ 
1103+ 	/* these registers are standard for all LPDDR JEDEC memory chips */ 
1104+ 	emc_read_lpddr_mode_register (emc , emem_dev , 5 , & manufacturer_id );
1105+ 	emc_read_lpddr_mode_register (emc , emem_dev , 6 , & revision_id1 );
1106+ 	emc_read_lpddr_mode_register (emc , emem_dev , 7 , & revision_id2 );
1107+ 	emc_read_lpddr_mode_register (emc , emem_dev , 8 , & basic_conf4 .value );
1108+ 
1109+ 	dev_info (emc -> dev , "SDRAM[dev%u]: manufacturer: 0x%x (%s) rev1: 0x%x rev2: 0x%x prefetch: S%u density: %uMbit iowidth: %ubit\n" ,
1110+ 		 emem_dev , manufacturer_id ,
1111+ 		 lpddr2_jedec_manufacturer (manufacturer_id ),
1112+ 		 revision_id1 , revision_id2 ,
1113+ 		 4  >> basic_conf4 .arch_type ,
1114+ 		 64  << basic_conf4 .density ,
1115+ 		 32  >> basic_conf4 .io_width );
1116+ }
1117+ 
10381118static  int  emc_setup_hw (struct  tegra_emc  * emc )
10391119{
1120+ 	u32  fbio_cfg5 , emc_cfg , emc_dbg , emc_adr_cfg ;
10401121	u32  intmask  =  EMC_REFRESH_OVERFLOW_INT ;
1041- 	u32   fbio_cfg5 ,  emc_cfg ,  emc_dbg ;
1122+ 	static   bool   print_sdram_info_once ;
10421123	enum  emc_dram_type  dram_type ;
1124+ 	const  char  * dram_type_str ;
1125+ 	unsigned int   emem_numdev ;
10431126
10441127	fbio_cfg5  =  readl_relaxed (emc -> regs  +  EMC_FBIO_CFG5 );
10451128	dram_type  =  fbio_cfg5  &  EMC_FBIO_CFG5_DRAM_TYPE_MASK ;
@@ -1076,6 +1159,34 @@ static int emc_setup_hw(struct tegra_emc *emc)
10761159	emc_dbg  &= ~EMC_DBG_FORCE_UPDATE ;
10771160	writel_relaxed (emc_dbg , emc -> regs  +  EMC_DBG );
10781161
1162+ 	switch  (dram_type ) {
1163+ 	case  DRAM_TYPE_DDR1 :
1164+ 		dram_type_str  =  "DDR1" ;
1165+ 		break ;
1166+ 	case  DRAM_TYPE_LPDDR2 :
1167+ 		dram_type_str  =  "LPDDR2" ;
1168+ 		break ;
1169+ 	case  DRAM_TYPE_DDR2 :
1170+ 		dram_type_str  =  "DDR2" ;
1171+ 		break ;
1172+ 	case  DRAM_TYPE_DDR3 :
1173+ 		dram_type_str  =  "DDR3" ;
1174+ 		break ;
1175+ 	}
1176+ 
1177+ 	emc_adr_cfg  =  readl_relaxed (emc -> regs  +  EMC_ADR_CFG );
1178+ 	emem_numdev  =  FIELD_GET (EMC_ADR_CFG_EMEM_NUMDEV , emc_adr_cfg ) +  1 ;
1179+ 
1180+ 	dev_info_once (emc -> dev , "%u %s %s attached\n" , emem_numdev ,
1181+ 		      dram_type_str , emem_numdev  ==  2  ? "devices"  : "device" );
1182+ 
1183+ 	if  (dram_type  ==  DRAM_TYPE_LPDDR2  &&  !print_sdram_info_once ) {
1184+ 		while  (emem_numdev -- )
1185+ 			emc_read_lpddr_sdram_info (emc , emem_numdev );
1186+ 
1187+ 		print_sdram_info_once  =  true;
1188+ 	}
1189+ 
10791190	return  0 ;
10801191}
10811192
@@ -1538,14 +1649,6 @@ static int tegra_emc_probe(struct platform_device *pdev)
15381649	emc -> clk_nb .notifier_call  =  emc_clk_change_notify ;
15391650	emc -> dev  =  & pdev -> dev ;
15401651
1541- 	np  =  emc_find_node_by_ram_code (& pdev -> dev );
1542- 	if  (np ) {
1543- 		err  =  emc_load_timings_from_dt (emc , np );
1544- 		of_node_put (np );
1545- 		if  (err )
1546- 			return  err ;
1547- 	}
1548- 
15491652	emc -> regs  =  devm_platform_ioremap_resource (pdev , 0 );
15501653	if  (IS_ERR (emc -> regs ))
15511654		return  PTR_ERR (emc -> regs );
@@ -1554,6 +1657,14 @@ static int tegra_emc_probe(struct platform_device *pdev)
15541657	if  (err )
15551658		return  err ;
15561659
1660+ 	np  =  emc_find_node_by_ram_code (emc );
1661+ 	if  (np ) {
1662+ 		err  =  emc_load_timings_from_dt (emc , np );
1663+ 		of_node_put (np );
1664+ 		if  (err )
1665+ 			return  err ;
1666+ 	}
1667+ 
15571668	err  =  platform_get_irq (pdev , 0 );
15581669	if  (err  <  0 )
15591670		return  err ;
0 commit comments