mirror of
				https://gitlab.alpinelinux.org/alpine/aports.git
				synced 2025-10-31 16:31:40 +01:00 
			
		
		
		
	https://github.com/enjoy-digital/litex infrastructure to create FPGA Cores/SoCs and full FPGA based systems
		
			
				
	
	
		
			106 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			106 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From 37e1f346e5a47dff74c0535c3b3cacd8f7b144dd Mon Sep 17 00:00:00 2001
 | |
| From: Marian Buschsieweke <marian.buschsieweke@posteo.net>
 | |
| Date: Thu, 11 Jan 2024 09:46:43 +0100
 | |
| Subject: [PATCH] litedram/phy/lpddr*: fix use of invalid escape sequence
 | |
| 
 | |
| This fixes multiple instances of:
 | |
| 
 | |
| litedram/phy/lpddr4/commands.py:209
 | |
|   litedram-2023.12/litedram/phy/lpddr4/commands.py:209: DeprecationWarning: invalid escape sequence '\d'
 | |
|     "BA(\d+)": lambda i: self.dfi.bank[i],
 | |
| ---
 | |
|  litedram/phy/lpddr4/commands.py | 24 ++++++++++----------
 | |
|  litedram/phy/lpddr5/commands.py | 40 ++++++++++++++++-----------------
 | |
|  2 files changed, 32 insertions(+), 32 deletions(-)
 | |
| 
 | |
| diff --git a/litedram/phy/lpddr4/commands.py b/litedram/phy/lpddr4/commands.py
 | |
| index 737e318..90ade80 100644
 | |
| --- a/litedram-2023.12/litedram/phy/lpddr4/commands.py
 | |
| +++ b/litedram-2023.12/litedram/phy/lpddr4/commands.py
 | |
| @@ -199,18 +199,18 @@ class Command(Module):
 | |
|          assert len(self.dfi.address) >= 17, "At least 17 DFI addressbits needed for row address"
 | |
|          mr_address = self.dfi.bank if is_mrw else self.dfi.address
 | |
|          rules = {
 | |
| -            "H":       lambda: 1,  # high
 | |
| -            "L":       lambda: 0,  # low
 | |
| -            "V":       lambda: 0,  # defined logic
 | |
| -            "X":       lambda: 0,  # don't care
 | |
| -            "BL":      lambda: 0,  # on-the-fly burst length, not using
 | |
| -            "AP":      lambda: self.dfi.address[10],  # auto precharge
 | |
| -            "AB":      lambda: self.dfi.address[10],  # all banks
 | |
| -            "BA(\d+)": lambda i: self.dfi.bank[i],
 | |
| -            "R(\d+)":  lambda i: self.dfi.address[i],  # row
 | |
| -            "C(\d+)":  lambda i: self.dfi.address[i],  # column
 | |
| -            "MA(\d+)": lambda i: mr_address[i],  # mode register address
 | |
| -            "OP(\d+)": lambda i: self.dfi.address[i],  # mode register value, or operand for MPC
 | |
| +            "H":        lambda: 1,  # high
 | |
| +            "L":        lambda: 0,  # low
 | |
| +            "V":        lambda: 0,  # defined logic
 | |
| +            "X":        lambda: 0,  # don't care
 | |
| +            "BL":       lambda: 0,  # on-the-fly burst length, not using
 | |
| +            "AP":       lambda: self.dfi.address[10],  # auto precharge
 | |
| +            "AB":       lambda: self.dfi.address[10],  # all banks
 | |
| +            "BA(\\d+)": lambda i: self.dfi.bank[i],
 | |
| +            "R(\\d+)":  lambda i: self.dfi.address[i],  # row
 | |
| +            "C(\\d+)":  lambda i: self.dfi.address[i],  # column
 | |
| +            "MA(\\d+)": lambda i: mr_address[i],  # mode register address
 | |
| +            "OP(\\d+)": lambda i: self.dfi.address[i],  # mode register value, or operand for MPC
 | |
|          }
 | |
|          for pattern, value in rules.items():
 | |
|              m = re.match(pattern, bit)
 | |
| diff --git a/litedram/phy/lpddr5/commands.py b/litedram/phy/lpddr5/commands.py
 | |
| index 9fd13ee..52733ec 100644
 | |
| --- a/litedram-2023.12/litedram/phy/lpddr5/commands.py
 | |
| +++ b/litedram-2023.12/litedram/phy/lpddr5/commands.py
 | |
| @@ -275,27 +275,27 @@ class Command(Module):
 | |
|          op = mpc_op if is_mpc else self.dfi.address
 | |
|  
 | |
|          rules = {
 | |
| -            "H":       lambda: 1,  # high
 | |
| -            "L":       lambda: 0,  # low
 | |
| -            "V":       lambda: 0,  # defined logic
 | |
| -            "X":       lambda: 0,  # don't care
 | |
| -            "AB":      lambda: self.dfi.address[10],  # all banks
 | |
| -            "AP":      lambda: self.dfi.address[10],  # auto precharge
 | |
| -            "RFM":     lambda: 0,  # TODO: 1=RFM, 0=REF (Refresh Managemenent, only if r/o MR[27][0]=1, else always REF)
 | |
| -            "SB(\d+)": lambda i: 0,  # sub-bank selection related to RFM
 | |
| -            "WS_WR":   lambda: self.wck_sync == WCKSyncType.WR,  # Write WCK2CK SYNC
 | |
| -            "WS_RD":   lambda: self.wck_sync == WCKSyncType.RD,  # Read WCK2CK SYNC
 | |
| -            "WS_FS":   lambda: self.wck_sync == WCKSyncType.FS,  # FAST SYNC
 | |
| -            "DC(\d+)": lambda i: 0,  # Data Copy, unimplemented
 | |
| -            "WRX":     lambda: 0,  # Write X function, unimplemented
 | |
| -            "WXSA":    lambda: 0,  # Write X function, unimplemented
 | |
| -            "WXSB":    lambda: 0,  # Write X function, unimplemented
 | |
| -            "BA(\d+)": lambda i: self.dfi.bank[i],  # only BA0-2 is used, in BG/B16 modes we always refresh banks (x, x+8)
 | |
| -            "R(\d+)":  lambda i: self.dfi.address[i],  # row
 | |
| +            "H":        lambda: 1,  # high
 | |
| +            "L":        lambda: 0,  # low
 | |
| +            "V":        lambda: 0,  # defined logic
 | |
| +            "X":        lambda: 0,  # don't care
 | |
| +            "AB":       lambda: self.dfi.address[10],  # all banks
 | |
| +            "AP":       lambda: self.dfi.address[10],  # auto precharge
 | |
| +            "RFM":      lambda: 0,  # TODO: 1=RFM, 0=REF (Refresh Managemenent, only if r/o MR[27][0]=1, else always REF)
 | |
| +            "SB(\\d+)": lambda i: 0,  # sub-bank selection related to RFM
 | |
| +            "WS_WR":    lambda: self.wck_sync == WCKSyncType.WR,  # Write WCK2CK SYNC
 | |
| +            "WS_RD":    lambda: self.wck_sync == WCKSyncType.RD,  # Read WCK2CK SYNC
 | |
| +            "WS_FS":    lambda: self.wck_sync == WCKSyncType.FS,  # FAST SYNC
 | |
| +            "DC(\\d+)": lambda i: 0,  # Data Copy, unimplemented
 | |
| +            "WRX":      lambda: 0,  # Write X function, unimplemented
 | |
| +            "WXSA":     lambda: 0,  # Write X function, unimplemented
 | |
| +            "WXSB":     lambda: 0,  # Write X function, unimplemented
 | |
| +            "BA(\\d+)": lambda i: self.dfi.bank[i],  # only BA0-2 is used, in BG/B16 modes we always refresh banks (x, x+8)
 | |
| +            "R(\\d+)":  lambda i: self.dfi.address[i],  # row
 | |
|              # LPDDR5 specs split the regular column address into C[5:0] "column address" and B[3:0] "burst address"
 | |
| -            "C(\d+)":  lambda i: self.dfi.address[i + 4],
 | |
| -            "MA(\d+)": lambda i: mr_address[i],  # mode register address
 | |
| -            "OP(\d+)": lambda i: op[i], # mode register value, or operand for MPC
 | |
| +            "C(\\d+)":  lambda i: self.dfi.address[i + 4],
 | |
| +            "MA(\\d+)": lambda i: mr_address[i],  # mode register address
 | |
| +            "OP(\\d+)": lambda i: op[i], # mode register value, or operand for MPC
 | |
|          }
 | |
|  
 | |
|          for pattern, value in rules.items():
 | |
| -- 
 | |
| 2.43.0
 | |
| 
 |