SlideShare a Scribd company logo
Marvels of Memory Auto-configuration
also known as SPD
Jean DELVARE <jdelvare@suse.com>
L3 support agent
SUSE
2
The plan
●
History of DRAM module formats
●
Basics of Serial Presence Detect (SPD) implementation
●
SPD implementation on DDR4 memory
●
Linux support
3
History of DRAM module formats
4
Even before the beginning
●
DRAM first developed in the mid 70s in Japan
●
Soldered memory, everything can (and must) be pre-configured
●
No possible hardware upgrade
5
In the (x86) beginning
●
30-pin SIMM on 286 to 486 (80s)
●
No room for configuration information
●
Hardware probing at every boot, or manual configuration
●
Limited upgrade options
6
Then there was PPD (Parallel Presence Detect)
●
72-pin SIMM on 486 to early
Pentium®
II (90s)
●
4 pins used for configuration
data
●
2 for memory module size
●
2 for memory access time
Pin Name Description
(...)
67 PD1 Presence Detect 1
68 PD2 Presence Detect 2
69 PD3 Presence Detect 3
70 PD4 Presence Detect 4
(...)
7
Parallel Presence Detect (PPD)
●
Quickly limited by the low
number of pins
●
How do you express sizes of 1, 2,
4, 8, 16, 32 and 64 MB with only 2
bits?
●
How do you express access times
of 100, 80, 70, 60 and 50 ns with
only 2 bits?
●
Well, you don’t!
●
Hardware probing or manual
configuration still needed
PD2 PD1 Size (MB)
GND GND 4 or 64
GND NC 2 or 32
NC GND 1 or 16
NC NC 8
PD4 PD3 Access time (ns)
GND GND 50 or 100
GND NC 80
NC GND 70
NC NC 60
8
Parallel Presence Detect (cont’d)
●
Later revisions added a 5th, then 6th and 7th pin to handle ECC and
larger module sizes
●
Doesn’t solve the problem
●
Doesn’t scale
●
Needs for finer-grained timings (beyond access time)
●
Hardware probing or manual configuration is going to be a disaster
9
Then there was SPD (Serial Presence Detect)
●
SIMM replaced by 168-pin
DIMM in the mid 90s
(Pentium®
)
●
PPD replaced by SPD
●
5 pins used for configuration
data
Pin Name Description
(...)
82 SDA Serial Data
63 SCL Serial Clock
(...)
123 SA0 Serial Address bit 0
124 SA1 Serial Address bit 1
125 SA2 Serial Address bit 2
(...)
10
Basics of SPD implementation
11
Serial Presence Detect (SPD)
●
Fixed number of pins
●
Independent of the amount of configuration data to be stored
●
No hardware probing or manual configuration needed
●
3 address pins allow connecting up to 8 modules to the same serial bus
●
Reduced board footprint compared to PPD
●
Data stored in AT24C02 EEPROMs
●
Standard and cheap
●
I²C and SMBus compatible
●
Up to 256 bytes of data for memory type,
size, timings, and more
12
SMBus diagram
2 wires:
Serial Clock (SCL)
Serial Data (SDA)
SMBus
controller
DIMM Slot
DIMM Slot
DIMM Slot
DIMM Slot
Hardware
monitor
13
SPD EEPROM pinout
SPD EEPROM
(AT24C02)
VccA0
NC
SCL
SDA
A1
A2
Vss
In red: connected to the memory
module (power)
In blue: connected to the SMBus
through the memory slot (data)
In black: connected directly to
the memory slot (address)
Full I²C address is:
1010(A2)(A1)(A0)b = 0x50-0x57
14
SPD EEPROM address
A2,A1,A0 = 000bA2,A1,A0 = 001b
A2,A1,A0 = 010bA2,A1,A0 = 011b
15
I²C/SMBus Address Map (DDR3)
# i2cdetect -y “SMBus I801 adapter at f000”
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- 08 -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- 44 -- -- -- -- -- -- -- -- -- -- --
50: -- 51 -- 53 -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
16
Use of SPD EEPROM
EEPROM size
(bytes)
Used bytes Reserved or free
bytes
SDR SDRAM 256 101 155
DDR SDRAM 256 79 177
DDR2 SDRAM 256 97 159
DDR3 SDRAM 256 129 127
DDR4 SDRAM Up to 328
17
SPD implementation on DDR4 memory
18
The problem with DDR4
●
We need 512 bytes of storage
●
Solution #1: use AT24C04 EEPROMs
●
Pin-compatible with AT24C02 (pin A2 is unused)
●
Use 2 I²C addresses per module
●
Problems:
●
Maximum 4 memory modules (without SMBus multiplexing)
●
Breaks traditional addressing assumptions
19
I²C/SMBus Address Map (using AT24C04)
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- 08 -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- 44 -- -- -- -- -- -- -- -- -- -- --
50: 50 51 52 53 -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
Slot #1 Slot #2 Slot #3 Slot #4
20
The problem with DDR4 (cont’d)
●
Solution #2: use AT24C32 EEPROMs
●
Pin-compatible with AT24C02
●
Use 1 I²C address per module, maximum 8 modules, respect traditional
addressing assumptions
●
Offer more capacity than we will ever need (4096 bytes)
●
Problem:
●
Use 2-byte addressing – not compatible with SMBus!
21
Reading from EEPROMs
1-byte addressing (SMBus-compatible)
2-byte addressing (not SMBus-compatible)
S I²C addr data addr S I²C addr data SA A A AW R ... A
Master to slave Slave to master
S I²C addr data addr 1 S I²C addr dataA A A AW R
Master to slave Slave to master
data addr 2 A ...
22
The Jedec solution for DDR4
●
Solution #3: define a new EEPROM standard that uses paging
●
Named EE1004
●
Pin-compatible with AT24C02
●
Uses 1 main I²C address per module, maximum 8 modules, respects
traditional addressing assumptions
●
Implements block write protection in a standard way
●
Uses extra I²C addresses for page selection, page querying, and write
protection
23
I²C/SMBus Address Map (DDR4)
# i2cdetect -y “SMBus I801 adapter at f000”
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- 08 -- -- -- -- -- -- --
10: -- -- -- -- 14 15 -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: 30 31 32 -- 34 35 -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- 44 -- -- -- -- -- -- -- -- -- -- --
50: -- 51 -- 53 -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- 71 -- -- -- -- -- --
24
DDR4-specific I²C addresses
●
0x31, 0x34, 0x35, 0x30: Query or set write protection (per block)
●
0x33: Clear write protection (all blocks)
●
0x36, 0x37: Query or select page
1 page (256 bytes) = 2 blocks
All these addresses are shared by all installed memory modules
25
The Jedec solution for DDR4 (cont’d)
●
Uses broadcast messages for everything
●
Fast but fragile
●
Abuses the I²C protocol (validation, arbitration)
●
Hardly extendable
●
7 out of 8 control addresses already consumed
●
No provision for larger variants
●
Includes useless payload in messages for no good reason
●
My advice to Jedec engineers: KISS
26
DDR4 example: Select page 0
What DIMM#1 answers:
What DIMM#2 answers:
What the SMBus master sees:
→ Can’t be sure that page selection worked on all DIMMs
S 0x36 dummy SA A AW dummy
S 0x36 dummy SN N NW dummy
S 0x36 dummy SA A AW dummy
27
DDR4 example: Page querying
What DIMM#1 answers (page 0 is selected):
What DIMM#2 answers (page 1 is selected):
What the SMBus master sees: page 0 is selected
→ Can’t be sure that all DIMMs are on the same page
S 0x36 dummy SA A AR dummy
S 0x36 dummy SN N NR dummy
S 0x36 dummy SA A AR dummy
28
Linux support
29
Do we need it?
●
Not mandatory
●
Good to have for:
●
Diagnostics (detecting sub-optimal memory module pairing)
●
Inventory purposes
●
Adding memory to an existing system
●
Tools like dmidecode are not accurate enough
30
Drivers
●
First of all you need an SMBus controller driver
●
i2c-i801 for recent Intel chipsets
●
i2c-piix4 for very old Intel chipsets and recent AMD chipsets
●
Many other drivers available in the kernel tree, look in drivers/i2c/busses.
●
Driver to read the EEPROMs themselves
●
eeprom (since lm_sensors project, December 1998, Philip Edelbrock; in kernel
tree since v2.6.0, September 2003, thanks Greg KH) up to DDR3
●
at24 (in kernel tree since v2.6.27, July 2008, Wolfram Sang) up to DDR3
●
ee1004 (in kernel tree since v4.20, October 2018, Jean Delvare) for DDR4
31
User-space tools
●
decode-dimms (part of i2c-tools)
●
Perl script
●
Supports SDR, DDR, DDR2, DDR3 (since 2008-2013) and DDR4 (since 2017)
SDRAM
●
Plain text or HTML output
32
Remaining problems
●
The legacy eeprom driver causes trouble
●
Binds to all devices at compatible I²C address
●
Slow
●
Dangerous
●
Doesn’t work with DDR4 – even steals devices from ee1004 driver
●
Deprecated, must be removed altogether eventually
●
Both at24 and ee1004 require the EEPROM devices to be explicitly
instantiated
●
Can be done automatically on DT/OF-based systems
●
But what about x86 desktops and servers?
●
ACPI?
33
Explicitly instantiating the EEPROMs
Example of manual steps (for DDR3):
# modprobe i2c-dev
# i2cdetect -l
# i2cdetect -y 9
# echo spd 0x50 > /sys/bus/i2c/devices/i2c-9/new_device
# echo spd 0x51 > /sys/bus/i2c/devices/i2c-9/new_device
Tedious and error-prone:
●
Bus number depends on system, not even stable
●
I²C addresses depend on installed DIMMs
●
Device name depends on memory type (ee1004 for DDR4)
34
The final touch (work in progress)
We want it to work out of the box in the most common cases
●
Use DMI data to find out memory type
●
White list of supported memory types
●
Skip if there are more than 4 memory slots (at least on desktop systems)
●
Fine-tuning possible based on DMI data (chassis type...)
●
Probe I²C address 0x50-0x53 on the SMBus
●
Needed because DMI information is not complete enough
●
Must be enabled explicitly in each SMBus controller driver
●
Skip if SMBus is multiplexed
●
Instantiate the appropriate device on responsive addresses
35
Questions?
36
My solution for DDR4 (but it’s too late)
●
Use one I²C control address per memory module
●
0x30 for the module at main address 0x50
●
0x31 for the module at main address 0x51
●
etc.
●
Compatible with SMBus, pin-compatible with AT24C02, complies
with addressing expectations
●
256 control commands available for block protection, page
selection and more – highly extendable
Kernel Recipes 2019 - Marvels of Memory Auto-configuration (SPD)

More Related Content

What's hot

Uboot startup sequence
Uboot startup sequenceUboot startup sequence
Uboot startup sequence
Houcheng Lin
 
Spi drivers
Spi driversSpi drivers
Spi drivers
pradeep_tewani
 
LCU14 500 ARM Trusted Firmware
LCU14 500 ARM Trusted FirmwareLCU14 500 ARM Trusted Firmware
LCU14 500 ARM Trusted Firmware
Linaro
 
Linux boot-time
Linux boot-timeLinux boot-time
Linux boot-time
Andrea Righi
 
用Raspberry Pi 學Linux I2C Driver
用Raspberry Pi 學Linux I2C Driver用Raspberry Pi 學Linux I2C Driver
用Raspberry Pi 學Linux I2C Driver
艾鍗科技
 
Project ACRN: SR-IOV implementation
Project ACRN: SR-IOV implementationProject ACRN: SR-IOV implementation
Project ACRN: SR-IOV implementation
Geoffroy Van Cutsem
 
Q4.11: Introduction to eMMC
Q4.11: Introduction to eMMCQ4.11: Introduction to eMMC
Q4.11: Introduction to eMMC
Linaro
 
eMMC Embedded Multimedia Card overview
eMMC Embedded Multimedia Card overvieweMMC Embedded Multimedia Card overview
eMMC Embedded Multimedia Card overview
VijayGESYS
 
Windows Kernel Exploitation : This Time Font hunt you down in 4 bytes
Windows Kernel Exploitation : This Time Font hunt you down in 4 bytesWindows Kernel Exploitation : This Time Font hunt you down in 4 bytes
Windows Kernel Exploitation : This Time Font hunt you down in 4 bytes
Peter Hlavaty
 
Kernel Recipes 2017 - An introduction to the Linux DRM subsystem - Maxime Ripard
Kernel Recipes 2017 - An introduction to the Linux DRM subsystem - Maxime RipardKernel Recipes 2017 - An introduction to the Linux DRM subsystem - Maxime Ripard
Kernel Recipes 2017 - An introduction to the Linux DRM subsystem - Maxime Ripard
Anne Nicolas
 
Delivering the Future of High-Performance Computing
Delivering the Future of High-Performance ComputingDelivering the Future of High-Performance Computing
Delivering the Future of High-Performance Computing
AMD
 
twlkh-linux-vsyscall-and-vdso
twlkh-linux-vsyscall-and-vdsotwlkh-linux-vsyscall-and-vdso
twlkh-linux-vsyscall-and-vdso
Viller Hsiao
 
I2c drivers
I2c driversI2c drivers
I2c drivers
Pradeep Tewani
 
ARM IoT Firmware Emulation Workshop
ARM IoT Firmware Emulation WorkshopARM IoT Firmware Emulation Workshop
ARM IoT Firmware Emulation Workshop
Saumil Shah
 
Linux Porting to a Custom Board
Linux Porting to a Custom BoardLinux Porting to a Custom Board
Linux Porting to a Custom Board
Patrick Bellasi
 
DTrace Topics: Introduction
DTrace Topics: IntroductionDTrace Topics: Introduction
DTrace Topics: Introduction
Brendan Gregg
 
Evaluating GPU programming Models for the LUMI Supercomputer
Evaluating GPU programming Models for the LUMI SupercomputerEvaluating GPU programming Models for the LUMI Supercomputer
Evaluating GPU programming Models for the LUMI Supercomputer
George Markomanolis
 
Device tree
Device treeDevice tree
Device tree
Rouyun Pan
 
I2C Drivers
I2C DriversI2C Drivers
Linux Network Stack
Linux Network StackLinux Network Stack
Linux Network Stack
Adrien Mahieux
 

What's hot (20)

Uboot startup sequence
Uboot startup sequenceUboot startup sequence
Uboot startup sequence
 
Spi drivers
Spi driversSpi drivers
Spi drivers
 
LCU14 500 ARM Trusted Firmware
LCU14 500 ARM Trusted FirmwareLCU14 500 ARM Trusted Firmware
LCU14 500 ARM Trusted Firmware
 
Linux boot-time
Linux boot-timeLinux boot-time
Linux boot-time
 
用Raspberry Pi 學Linux I2C Driver
用Raspberry Pi 學Linux I2C Driver用Raspberry Pi 學Linux I2C Driver
用Raspberry Pi 學Linux I2C Driver
 
Project ACRN: SR-IOV implementation
Project ACRN: SR-IOV implementationProject ACRN: SR-IOV implementation
Project ACRN: SR-IOV implementation
 
Q4.11: Introduction to eMMC
Q4.11: Introduction to eMMCQ4.11: Introduction to eMMC
Q4.11: Introduction to eMMC
 
eMMC Embedded Multimedia Card overview
eMMC Embedded Multimedia Card overvieweMMC Embedded Multimedia Card overview
eMMC Embedded Multimedia Card overview
 
Windows Kernel Exploitation : This Time Font hunt you down in 4 bytes
Windows Kernel Exploitation : This Time Font hunt you down in 4 bytesWindows Kernel Exploitation : This Time Font hunt you down in 4 bytes
Windows Kernel Exploitation : This Time Font hunt you down in 4 bytes
 
Kernel Recipes 2017 - An introduction to the Linux DRM subsystem - Maxime Ripard
Kernel Recipes 2017 - An introduction to the Linux DRM subsystem - Maxime RipardKernel Recipes 2017 - An introduction to the Linux DRM subsystem - Maxime Ripard
Kernel Recipes 2017 - An introduction to the Linux DRM subsystem - Maxime Ripard
 
Delivering the Future of High-Performance Computing
Delivering the Future of High-Performance ComputingDelivering the Future of High-Performance Computing
Delivering the Future of High-Performance Computing
 
twlkh-linux-vsyscall-and-vdso
twlkh-linux-vsyscall-and-vdsotwlkh-linux-vsyscall-and-vdso
twlkh-linux-vsyscall-and-vdso
 
I2c drivers
I2c driversI2c drivers
I2c drivers
 
ARM IoT Firmware Emulation Workshop
ARM IoT Firmware Emulation WorkshopARM IoT Firmware Emulation Workshop
ARM IoT Firmware Emulation Workshop
 
Linux Porting to a Custom Board
Linux Porting to a Custom BoardLinux Porting to a Custom Board
Linux Porting to a Custom Board
 
DTrace Topics: Introduction
DTrace Topics: IntroductionDTrace Topics: Introduction
DTrace Topics: Introduction
 
Evaluating GPU programming Models for the LUMI Supercomputer
Evaluating GPU programming Models for the LUMI SupercomputerEvaluating GPU programming Models for the LUMI Supercomputer
Evaluating GPU programming Models for the LUMI Supercomputer
 
Device tree
Device treeDevice tree
Device tree
 
I2C Drivers
I2C DriversI2C Drivers
I2C Drivers
 
Linux Network Stack
Linux Network StackLinux Network Stack
Linux Network Stack
 

Similar to Kernel Recipes 2019 - Marvels of Memory Auto-configuration (SPD)

DDR SDRAM : Notes
DDR SDRAM : NotesDDR SDRAM : Notes
DDR SDRAM : Notes
Subhajit Sahu
 
Lec17 Intro to Computer Engineering by Hsien-Hsin Sean Lee Georgia Tech -- Me...
Lec17 Intro to Computer Engineering by Hsien-Hsin Sean Lee Georgia Tech -- Me...Lec17 Intro to Computer Engineering by Hsien-Hsin Sean Lee Georgia Tech -- Me...
Lec17 Intro to Computer Engineering by Hsien-Hsin Sean Lee Georgia Tech -- Me...
Hsien-Hsin Sean Lee, Ph.D.
 
Memory modules
Memory modulesMemory modules
Memory modules
Sana Sini
 
Webinar Gravado: Microprocessadores STM32MP1: Conhecendo a flexibilidade entr...
Webinar Gravado: Microprocessadores STM32MP1: Conhecendo a flexibilidade entr...Webinar Gravado: Microprocessadores STM32MP1: Conhecendo a flexibilidade entr...
Webinar Gravado: Microprocessadores STM32MP1: Conhecendo a flexibilidade entr...
Embarcados
 
Interfacing memory with 8086 microprocessor
Interfacing memory with 8086 microprocessorInterfacing memory with 8086 microprocessor
Interfacing memory with 8086 microprocessor
Vikas Gupta
 
DDR DIMM Design
DDR DIMM DesignDDR DIMM Design
DDR DIMM Design
Mohamad Tisani
 
9 semiconductor memory
9 semiconductor memory9 semiconductor memory
9 semiconductor memory
Usha Mehta
 
Embedded system design using arduino
Embedded system design using arduinoEmbedded system design using arduino
Embedded system design using arduino
Santosh Verma
 
Study on 32-bit Cortex - M3 Powered MCU: STM32F101
Study on 32-bit Cortex - M3 Powered MCU: STM32F101Study on 32-bit Cortex - M3 Powered MCU: STM32F101
Study on 32-bit Cortex - M3 Powered MCU: STM32F101
Premier Farnell
 
Memory module
Memory moduleMemory module
Memory module
lemar12
 
Sparc t3 2 technical presentation
Sparc t3 2 technical presentationSparc t3 2 technical presentation
Sparc t3 2 technical presentation
solarisyougood
 
got HW crypto-slides_hardwear
got HW crypto-slides_hardweargot HW crypto-slides_hardwear
got HW crypto-slides_hardwear
Gunnar Alendal
 
Electronics product design companies in bangalore
Electronics product design companies in bangaloreElectronics product design companies in bangalore
Electronics product design companies in bangalore
Ashok Kumar.k
 
L8 understanding-atmega328 p-1
L8 understanding-atmega328 p-1L8 understanding-atmega328 p-1
L8 understanding-atmega328 p-1
rsamurti
 
MYC-Y6ULX CPU Module - NXP i.MX 6UL/6ULL System-on-Module
MYC-Y6ULX CPU Module - NXP i.MX 6UL/6ULL System-on-ModuleMYC-Y6ULX CPU Module - NXP i.MX 6UL/6ULL System-on-Module
MYC-Y6ULX CPU Module - NXP i.MX 6UL/6ULL System-on-Module
Linda Zhang
 
Design, Validation and Correlation of Characterized SODIMM Modules Supporting...
Design, Validation and Correlation of Characterized SODIMM Modules Supporting...Design, Validation and Correlation of Characterized SODIMM Modules Supporting...
Design, Validation and Correlation of Characterized SODIMM Modules Supporting...
IOSR Journals
 
Pic16 c7x
Pic16 c7xPic16 c7x
Pic16 c7x
sharmeejeyam
 
Semiconductor memories
Semiconductor memoriesSemiconductor memories
Semiconductor memories
SambitShreeman
 
Embedded system
Embedded  systemEmbedded  system
Embedded system
ANSHUL GUPTA
 
cachegrand: A Take on High Performance Caching
cachegrand: A Take on High Performance Cachingcachegrand: A Take on High Performance Caching
cachegrand: A Take on High Performance Caching
ScyllaDB
 

Similar to Kernel Recipes 2019 - Marvels of Memory Auto-configuration (SPD) (20)

DDR SDRAM : Notes
DDR SDRAM : NotesDDR SDRAM : Notes
DDR SDRAM : Notes
 
Lec17 Intro to Computer Engineering by Hsien-Hsin Sean Lee Georgia Tech -- Me...
Lec17 Intro to Computer Engineering by Hsien-Hsin Sean Lee Georgia Tech -- Me...Lec17 Intro to Computer Engineering by Hsien-Hsin Sean Lee Georgia Tech -- Me...
Lec17 Intro to Computer Engineering by Hsien-Hsin Sean Lee Georgia Tech -- Me...
 
Memory modules
Memory modulesMemory modules
Memory modules
 
Webinar Gravado: Microprocessadores STM32MP1: Conhecendo a flexibilidade entr...
Webinar Gravado: Microprocessadores STM32MP1: Conhecendo a flexibilidade entr...Webinar Gravado: Microprocessadores STM32MP1: Conhecendo a flexibilidade entr...
Webinar Gravado: Microprocessadores STM32MP1: Conhecendo a flexibilidade entr...
 
Interfacing memory with 8086 microprocessor
Interfacing memory with 8086 microprocessorInterfacing memory with 8086 microprocessor
Interfacing memory with 8086 microprocessor
 
DDR DIMM Design
DDR DIMM DesignDDR DIMM Design
DDR DIMM Design
 
9 semiconductor memory
9 semiconductor memory9 semiconductor memory
9 semiconductor memory
 
Embedded system design using arduino
Embedded system design using arduinoEmbedded system design using arduino
Embedded system design using arduino
 
Study on 32-bit Cortex - M3 Powered MCU: STM32F101
Study on 32-bit Cortex - M3 Powered MCU: STM32F101Study on 32-bit Cortex - M3 Powered MCU: STM32F101
Study on 32-bit Cortex - M3 Powered MCU: STM32F101
 
Memory module
Memory moduleMemory module
Memory module
 
Sparc t3 2 technical presentation
Sparc t3 2 technical presentationSparc t3 2 technical presentation
Sparc t3 2 technical presentation
 
got HW crypto-slides_hardwear
got HW crypto-slides_hardweargot HW crypto-slides_hardwear
got HW crypto-slides_hardwear
 
Electronics product design companies in bangalore
Electronics product design companies in bangaloreElectronics product design companies in bangalore
Electronics product design companies in bangalore
 
L8 understanding-atmega328 p-1
L8 understanding-atmega328 p-1L8 understanding-atmega328 p-1
L8 understanding-atmega328 p-1
 
MYC-Y6ULX CPU Module - NXP i.MX 6UL/6ULL System-on-Module
MYC-Y6ULX CPU Module - NXP i.MX 6UL/6ULL System-on-ModuleMYC-Y6ULX CPU Module - NXP i.MX 6UL/6ULL System-on-Module
MYC-Y6ULX CPU Module - NXP i.MX 6UL/6ULL System-on-Module
 
Design, Validation and Correlation of Characterized SODIMM Modules Supporting...
Design, Validation and Correlation of Characterized SODIMM Modules Supporting...Design, Validation and Correlation of Characterized SODIMM Modules Supporting...
Design, Validation and Correlation of Characterized SODIMM Modules Supporting...
 
Pic16 c7x
Pic16 c7xPic16 c7x
Pic16 c7x
 
Semiconductor memories
Semiconductor memoriesSemiconductor memories
Semiconductor memories
 
Embedded system
Embedded  systemEmbedded  system
Embedded system
 
cachegrand: A Take on High Performance Caching
cachegrand: A Take on High Performance Cachingcachegrand: A Take on High Performance Caching
cachegrand: A Take on High Performance Caching
 

More from Anne Nicolas

Kernel Recipes 2019 - Driving the industry toward upstream first
Kernel Recipes 2019 - Driving the industry toward upstream firstKernel Recipes 2019 - Driving the industry toward upstream first
Kernel Recipes 2019 - Driving the industry toward upstream first
Anne Nicolas
 
Kernel Recipes 2019 - No NMI? No Problem! – Implementing Arm64 Pseudo-NMI
Kernel Recipes 2019 - No NMI? No Problem! – Implementing Arm64 Pseudo-NMIKernel Recipes 2019 - No NMI? No Problem! – Implementing Arm64 Pseudo-NMI
Kernel Recipes 2019 - No NMI? No Problem! – Implementing Arm64 Pseudo-NMI
Anne Nicolas
 
Kernel Recipes 2019 - Hunting and fixing bugs all over the Linux kernel
Kernel Recipes 2019 - Hunting and fixing bugs all over the Linux kernelKernel Recipes 2019 - Hunting and fixing bugs all over the Linux kernel
Kernel Recipes 2019 - Hunting and fixing bugs all over the Linux kernel
Anne Nicolas
 
Kernel Recipes 2019 - Metrics are money
Kernel Recipes 2019 - Metrics are moneyKernel Recipes 2019 - Metrics are money
Kernel Recipes 2019 - Metrics are money
Anne Nicolas
 
Kernel Recipes 2019 - Kernel documentation: past, present, and future
Kernel Recipes 2019 - Kernel documentation: past, present, and futureKernel Recipes 2019 - Kernel documentation: past, present, and future
Kernel Recipes 2019 - Kernel documentation: past, present, and future
Anne Nicolas
 
Embedded Recipes 2019 - Knowing your ARM from your ARSE: wading through the t...
Embedded Recipes 2019 - Knowing your ARM from your ARSE: wading through the t...Embedded Recipes 2019 - Knowing your ARM from your ARSE: wading through the t...
Embedded Recipes 2019 - Knowing your ARM from your ARSE: wading through the t...
Anne Nicolas
 
Kernel Recipes 2019 - GNU poke, an extensible editor for structured binary data
Kernel Recipes 2019 - GNU poke, an extensible editor for structured binary dataKernel Recipes 2019 - GNU poke, an extensible editor for structured binary data
Kernel Recipes 2019 - GNU poke, an extensible editor for structured binary data
Anne Nicolas
 
Kernel Recipes 2019 - Analyzing changes to the binary interface exposed by th...
Kernel Recipes 2019 - Analyzing changes to the binary interface exposed by th...Kernel Recipes 2019 - Analyzing changes to the binary interface exposed by th...
Kernel Recipes 2019 - Analyzing changes to the binary interface exposed by th...
Anne Nicolas
 
Embedded Recipes 2019 - Remote update adventures with RAUC, Yocto and Barebox
Embedded Recipes 2019 - Remote update adventures with RAUC, Yocto and BareboxEmbedded Recipes 2019 - Remote update adventures with RAUC, Yocto and Barebox
Embedded Recipes 2019 - Remote update adventures with RAUC, Yocto and Barebox
Anne Nicolas
 
Embedded Recipes 2019 - Making embedded graphics less special
Embedded Recipes 2019 - Making embedded graphics less specialEmbedded Recipes 2019 - Making embedded graphics less special
Embedded Recipes 2019 - Making embedded graphics less special
Anne Nicolas
 
Embedded Recipes 2019 - Linux on Open Source Hardware and Libre Silicon
Embedded Recipes 2019 - Linux on Open Source Hardware and Libre SiliconEmbedded Recipes 2019 - Linux on Open Source Hardware and Libre Silicon
Embedded Recipes 2019 - Linux on Open Source Hardware and Libre Silicon
Anne Nicolas
 
Embedded Recipes 2019 - From maintaining I2C to the big (embedded) picture
Embedded Recipes 2019 - From maintaining I2C to the big (embedded) pictureEmbedded Recipes 2019 - From maintaining I2C to the big (embedded) picture
Embedded Recipes 2019 - From maintaining I2C to the big (embedded) picture
Anne Nicolas
 
Embedded Recipes 2019 - Testing firmware the devops way
Embedded Recipes 2019 - Testing firmware the devops wayEmbedded Recipes 2019 - Testing firmware the devops way
Embedded Recipes 2019 - Testing firmware the devops way
Anne Nicolas
 
Embedded Recipes 2019 - Herd your socs become a matchmaker
Embedded Recipes 2019 - Herd your socs become a matchmakerEmbedded Recipes 2019 - Herd your socs become a matchmaker
Embedded Recipes 2019 - Herd your socs become a matchmaker
Anne Nicolas
 
Embedded Recipes 2019 - LLVM / Clang integration
Embedded Recipes 2019 - LLVM / Clang integrationEmbedded Recipes 2019 - LLVM / Clang integration
Embedded Recipes 2019 - LLVM / Clang integration
Anne Nicolas
 
Embedded Recipes 2019 - Introduction to JTAG debugging
Embedded Recipes 2019 - Introduction to JTAG debuggingEmbedded Recipes 2019 - Introduction to JTAG debugging
Embedded Recipes 2019 - Introduction to JTAG debugging
Anne Nicolas
 
Embedded Recipes 2019 - Pipewire a new foundation for embedded multimedia
Embedded Recipes 2019 - Pipewire a new foundation for embedded multimediaEmbedded Recipes 2019 - Pipewire a new foundation for embedded multimedia
Embedded Recipes 2019 - Pipewire a new foundation for embedded multimedia
Anne Nicolas
 
Kernel Recipes 2019 - ftrace: Where modifying a running kernel all started
Kernel Recipes 2019 - ftrace: Where modifying a running kernel all startedKernel Recipes 2019 - ftrace: Where modifying a running kernel all started
Kernel Recipes 2019 - ftrace: Where modifying a running kernel all started
Anne Nicolas
 
Kernel Recipes 2019 - Suricata and XDP
Kernel Recipes 2019 - Suricata and XDPKernel Recipes 2019 - Suricata and XDP
Kernel Recipes 2019 - Suricata and XDP
Anne Nicolas
 
Kernel Recipes 2019 - Formal modeling made easy
Kernel Recipes 2019 - Formal modeling made easyKernel Recipes 2019 - Formal modeling made easy
Kernel Recipes 2019 - Formal modeling made easy
Anne Nicolas
 

More from Anne Nicolas (20)

Kernel Recipes 2019 - Driving the industry toward upstream first
Kernel Recipes 2019 - Driving the industry toward upstream firstKernel Recipes 2019 - Driving the industry toward upstream first
Kernel Recipes 2019 - Driving the industry toward upstream first
 
Kernel Recipes 2019 - No NMI? No Problem! – Implementing Arm64 Pseudo-NMI
Kernel Recipes 2019 - No NMI? No Problem! – Implementing Arm64 Pseudo-NMIKernel Recipes 2019 - No NMI? No Problem! – Implementing Arm64 Pseudo-NMI
Kernel Recipes 2019 - No NMI? No Problem! – Implementing Arm64 Pseudo-NMI
 
Kernel Recipes 2019 - Hunting and fixing bugs all over the Linux kernel
Kernel Recipes 2019 - Hunting and fixing bugs all over the Linux kernelKernel Recipes 2019 - Hunting and fixing bugs all over the Linux kernel
Kernel Recipes 2019 - Hunting and fixing bugs all over the Linux kernel
 
Kernel Recipes 2019 - Metrics are money
Kernel Recipes 2019 - Metrics are moneyKernel Recipes 2019 - Metrics are money
Kernel Recipes 2019 - Metrics are money
 
Kernel Recipes 2019 - Kernel documentation: past, present, and future
Kernel Recipes 2019 - Kernel documentation: past, present, and futureKernel Recipes 2019 - Kernel documentation: past, present, and future
Kernel Recipes 2019 - Kernel documentation: past, present, and future
 
Embedded Recipes 2019 - Knowing your ARM from your ARSE: wading through the t...
Embedded Recipes 2019 - Knowing your ARM from your ARSE: wading through the t...Embedded Recipes 2019 - Knowing your ARM from your ARSE: wading through the t...
Embedded Recipes 2019 - Knowing your ARM from your ARSE: wading through the t...
 
Kernel Recipes 2019 - GNU poke, an extensible editor for structured binary data
Kernel Recipes 2019 - GNU poke, an extensible editor for structured binary dataKernel Recipes 2019 - GNU poke, an extensible editor for structured binary data
Kernel Recipes 2019 - GNU poke, an extensible editor for structured binary data
 
Kernel Recipes 2019 - Analyzing changes to the binary interface exposed by th...
Kernel Recipes 2019 - Analyzing changes to the binary interface exposed by th...Kernel Recipes 2019 - Analyzing changes to the binary interface exposed by th...
Kernel Recipes 2019 - Analyzing changes to the binary interface exposed by th...
 
Embedded Recipes 2019 - Remote update adventures with RAUC, Yocto and Barebox
Embedded Recipes 2019 - Remote update adventures with RAUC, Yocto and BareboxEmbedded Recipes 2019 - Remote update adventures with RAUC, Yocto and Barebox
Embedded Recipes 2019 - Remote update adventures with RAUC, Yocto and Barebox
 
Embedded Recipes 2019 - Making embedded graphics less special
Embedded Recipes 2019 - Making embedded graphics less specialEmbedded Recipes 2019 - Making embedded graphics less special
Embedded Recipes 2019 - Making embedded graphics less special
 
Embedded Recipes 2019 - Linux on Open Source Hardware and Libre Silicon
Embedded Recipes 2019 - Linux on Open Source Hardware and Libre SiliconEmbedded Recipes 2019 - Linux on Open Source Hardware and Libre Silicon
Embedded Recipes 2019 - Linux on Open Source Hardware and Libre Silicon
 
Embedded Recipes 2019 - From maintaining I2C to the big (embedded) picture
Embedded Recipes 2019 - From maintaining I2C to the big (embedded) pictureEmbedded Recipes 2019 - From maintaining I2C to the big (embedded) picture
Embedded Recipes 2019 - From maintaining I2C to the big (embedded) picture
 
Embedded Recipes 2019 - Testing firmware the devops way
Embedded Recipes 2019 - Testing firmware the devops wayEmbedded Recipes 2019 - Testing firmware the devops way
Embedded Recipes 2019 - Testing firmware the devops way
 
Embedded Recipes 2019 - Herd your socs become a matchmaker
Embedded Recipes 2019 - Herd your socs become a matchmakerEmbedded Recipes 2019 - Herd your socs become a matchmaker
Embedded Recipes 2019 - Herd your socs become a matchmaker
 
Embedded Recipes 2019 - LLVM / Clang integration
Embedded Recipes 2019 - LLVM / Clang integrationEmbedded Recipes 2019 - LLVM / Clang integration
Embedded Recipes 2019 - LLVM / Clang integration
 
Embedded Recipes 2019 - Introduction to JTAG debugging
Embedded Recipes 2019 - Introduction to JTAG debuggingEmbedded Recipes 2019 - Introduction to JTAG debugging
Embedded Recipes 2019 - Introduction to JTAG debugging
 
Embedded Recipes 2019 - Pipewire a new foundation for embedded multimedia
Embedded Recipes 2019 - Pipewire a new foundation for embedded multimediaEmbedded Recipes 2019 - Pipewire a new foundation for embedded multimedia
Embedded Recipes 2019 - Pipewire a new foundation for embedded multimedia
 
Kernel Recipes 2019 - ftrace: Where modifying a running kernel all started
Kernel Recipes 2019 - ftrace: Where modifying a running kernel all startedKernel Recipes 2019 - ftrace: Where modifying a running kernel all started
Kernel Recipes 2019 - ftrace: Where modifying a running kernel all started
 
Kernel Recipes 2019 - Suricata and XDP
Kernel Recipes 2019 - Suricata and XDPKernel Recipes 2019 - Suricata and XDP
Kernel Recipes 2019 - Suricata and XDP
 
Kernel Recipes 2019 - Formal modeling made easy
Kernel Recipes 2019 - Formal modeling made easyKernel Recipes 2019 - Formal modeling made easy
Kernel Recipes 2019 - Formal modeling made easy
 

Recently uploaded

Measures in SQL (SIGMOD 2024, Santiago, Chile)
Measures in SQL (SIGMOD 2024, Santiago, Chile)Measures in SQL (SIGMOD 2024, Santiago, Chile)
Measures in SQL (SIGMOD 2024, Santiago, Chile)
Julian Hyde
 
Empowering Growth with Best Software Development Company in Noida - Deuglo
Empowering Growth with Best Software  Development Company in Noida - DeugloEmpowering Growth with Best Software  Development Company in Noida - Deuglo
Empowering Growth with Best Software Development Company in Noida - Deuglo
Deuglo Infosystem Pvt Ltd
 
ALGIT - Assembly Line for Green IT - Numbers, Data, Facts
ALGIT - Assembly Line for Green IT - Numbers, Data, FactsALGIT - Assembly Line for Green IT - Numbers, Data, Facts
ALGIT - Assembly Line for Green IT - Numbers, Data, Facts
Green Software Development
 
Graspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code AnalysisGraspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code Analysis
Aftab Hussain
 
LORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptx
LORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptxLORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptx
LORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptx
lorraineandreiamcidl
 
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise EditionWhy Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
Envertis Software Solutions
 
socradar-q1-2024-aviation-industry-report.pdf
socradar-q1-2024-aviation-industry-report.pdfsocradar-q1-2024-aviation-industry-report.pdf
socradar-q1-2024-aviation-industry-report.pdf
SOCRadar
 
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
Łukasz Chruściel
 
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CDKuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
rodomar2
 
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdfVitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke
 
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissancesAtelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Neo4j
 
SMS API Integration in Saudi Arabia| Best SMS API Service
SMS API Integration in Saudi Arabia| Best SMS API ServiceSMS API Integration in Saudi Arabia| Best SMS API Service
SMS API Integration in Saudi Arabia| Best SMS API Service
Yara Milbes
 
Using Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query PerformanceUsing Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query Performance
Grant Fritchey
 
Fundamentals of Programming and Language Processors
Fundamentals of Programming and Language ProcessorsFundamentals of Programming and Language Processors
Fundamentals of Programming and Language Processors
Rakesh Kumar R
 
SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024
Hironori Washizaki
 
Oracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptxOracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptx
Remote DBA Services
 
8 Best Automated Android App Testing Tool and Framework in 2024.pdf
8 Best Automated Android App Testing Tool and Framework in 2024.pdf8 Best Automated Android App Testing Tool and Framework in 2024.pdf
8 Best Automated Android App Testing Tool and Framework in 2024.pdf
kalichargn70th171
 
DDS-Security 1.2 - What's New? Stronger security for long-running systems
DDS-Security 1.2 - What's New? Stronger security for long-running systemsDDS-Security 1.2 - What's New? Stronger security for long-running systems
DDS-Security 1.2 - What's New? Stronger security for long-running systems
Gerardo Pardo-Castellote
 
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOMLORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
lorraineandreiamcidl
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
timtebeek1
 

Recently uploaded (20)

Measures in SQL (SIGMOD 2024, Santiago, Chile)
Measures in SQL (SIGMOD 2024, Santiago, Chile)Measures in SQL (SIGMOD 2024, Santiago, Chile)
Measures in SQL (SIGMOD 2024, Santiago, Chile)
 
Empowering Growth with Best Software Development Company in Noida - Deuglo
Empowering Growth with Best Software  Development Company in Noida - DeugloEmpowering Growth with Best Software  Development Company in Noida - Deuglo
Empowering Growth with Best Software Development Company in Noida - Deuglo
 
ALGIT - Assembly Line for Green IT - Numbers, Data, Facts
ALGIT - Assembly Line for Green IT - Numbers, Data, FactsALGIT - Assembly Line for Green IT - Numbers, Data, Facts
ALGIT - Assembly Line for Green IT - Numbers, Data, Facts
 
Graspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code AnalysisGraspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code Analysis
 
LORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptx
LORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptxLORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptx
LORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptx
 
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise EditionWhy Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
 
socradar-q1-2024-aviation-industry-report.pdf
socradar-q1-2024-aviation-industry-report.pdfsocradar-q1-2024-aviation-industry-report.pdf
socradar-q1-2024-aviation-industry-report.pdf
 
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
 
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CDKuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
 
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdfVitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdf
 
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissancesAtelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissances
 
SMS API Integration in Saudi Arabia| Best SMS API Service
SMS API Integration in Saudi Arabia| Best SMS API ServiceSMS API Integration in Saudi Arabia| Best SMS API Service
SMS API Integration in Saudi Arabia| Best SMS API Service
 
Using Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query PerformanceUsing Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query Performance
 
Fundamentals of Programming and Language Processors
Fundamentals of Programming and Language ProcessorsFundamentals of Programming and Language Processors
Fundamentals of Programming and Language Processors
 
SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024
 
Oracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptxOracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptx
 
8 Best Automated Android App Testing Tool and Framework in 2024.pdf
8 Best Automated Android App Testing Tool and Framework in 2024.pdf8 Best Automated Android App Testing Tool and Framework in 2024.pdf
8 Best Automated Android App Testing Tool and Framework in 2024.pdf
 
DDS-Security 1.2 - What's New? Stronger security for long-running systems
DDS-Security 1.2 - What's New? Stronger security for long-running systemsDDS-Security 1.2 - What's New? Stronger security for long-running systems
DDS-Security 1.2 - What's New? Stronger security for long-running systems
 
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOMLORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
 

Kernel Recipes 2019 - Marvels of Memory Auto-configuration (SPD)

  • 1. Marvels of Memory Auto-configuration also known as SPD Jean DELVARE <jdelvare@suse.com> L3 support agent SUSE
  • 2. 2 The plan ● History of DRAM module formats ● Basics of Serial Presence Detect (SPD) implementation ● SPD implementation on DDR4 memory ● Linux support
  • 3. 3 History of DRAM module formats
  • 4. 4 Even before the beginning ● DRAM first developed in the mid 70s in Japan ● Soldered memory, everything can (and must) be pre-configured ● No possible hardware upgrade
  • 5. 5 In the (x86) beginning ● 30-pin SIMM on 286 to 486 (80s) ● No room for configuration information ● Hardware probing at every boot, or manual configuration ● Limited upgrade options
  • 6. 6 Then there was PPD (Parallel Presence Detect) ● 72-pin SIMM on 486 to early Pentium® II (90s) ● 4 pins used for configuration data ● 2 for memory module size ● 2 for memory access time Pin Name Description (...) 67 PD1 Presence Detect 1 68 PD2 Presence Detect 2 69 PD3 Presence Detect 3 70 PD4 Presence Detect 4 (...)
  • 7. 7 Parallel Presence Detect (PPD) ● Quickly limited by the low number of pins ● How do you express sizes of 1, 2, 4, 8, 16, 32 and 64 MB with only 2 bits? ● How do you express access times of 100, 80, 70, 60 and 50 ns with only 2 bits? ● Well, you don’t! ● Hardware probing or manual configuration still needed PD2 PD1 Size (MB) GND GND 4 or 64 GND NC 2 or 32 NC GND 1 or 16 NC NC 8 PD4 PD3 Access time (ns) GND GND 50 or 100 GND NC 80 NC GND 70 NC NC 60
  • 8. 8 Parallel Presence Detect (cont’d) ● Later revisions added a 5th, then 6th and 7th pin to handle ECC and larger module sizes ● Doesn’t solve the problem ● Doesn’t scale ● Needs for finer-grained timings (beyond access time) ● Hardware probing or manual configuration is going to be a disaster
  • 9. 9 Then there was SPD (Serial Presence Detect) ● SIMM replaced by 168-pin DIMM in the mid 90s (Pentium® ) ● PPD replaced by SPD ● 5 pins used for configuration data Pin Name Description (...) 82 SDA Serial Data 63 SCL Serial Clock (...) 123 SA0 Serial Address bit 0 124 SA1 Serial Address bit 1 125 SA2 Serial Address bit 2 (...)
  • 10. 10 Basics of SPD implementation
  • 11. 11 Serial Presence Detect (SPD) ● Fixed number of pins ● Independent of the amount of configuration data to be stored ● No hardware probing or manual configuration needed ● 3 address pins allow connecting up to 8 modules to the same serial bus ● Reduced board footprint compared to PPD ● Data stored in AT24C02 EEPROMs ● Standard and cheap ● I²C and SMBus compatible ● Up to 256 bytes of data for memory type, size, timings, and more
  • 12. 12 SMBus diagram 2 wires: Serial Clock (SCL) Serial Data (SDA) SMBus controller DIMM Slot DIMM Slot DIMM Slot DIMM Slot Hardware monitor
  • 13. 13 SPD EEPROM pinout SPD EEPROM (AT24C02) VccA0 NC SCL SDA A1 A2 Vss In red: connected to the memory module (power) In blue: connected to the SMBus through the memory slot (data) In black: connected directly to the memory slot (address) Full I²C address is: 1010(A2)(A1)(A0)b = 0x50-0x57
  • 14. 14 SPD EEPROM address A2,A1,A0 = 000bA2,A1,A0 = 001b A2,A1,A0 = 010bA2,A1,A0 = 011b
  • 15. 15 I²C/SMBus Address Map (DDR3) # i2cdetect -y “SMBus I801 adapter at f000” 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- 08 -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- 44 -- -- -- -- -- -- -- -- -- -- -- 50: -- 51 -- 53 -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
  • 16. 16 Use of SPD EEPROM EEPROM size (bytes) Used bytes Reserved or free bytes SDR SDRAM 256 101 155 DDR SDRAM 256 79 177 DDR2 SDRAM 256 97 159 DDR3 SDRAM 256 129 127 DDR4 SDRAM Up to 328
  • 18. 18 The problem with DDR4 ● We need 512 bytes of storage ● Solution #1: use AT24C04 EEPROMs ● Pin-compatible with AT24C02 (pin A2 is unused) ● Use 2 I²C addresses per module ● Problems: ● Maximum 4 memory modules (without SMBus multiplexing) ● Breaks traditional addressing assumptions
  • 19. 19 I²C/SMBus Address Map (using AT24C04) 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- 08 -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- 44 -- -- -- -- -- -- -- -- -- -- -- 50: 50 51 52 53 -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- Slot #1 Slot #2 Slot #3 Slot #4
  • 20. 20 The problem with DDR4 (cont’d) ● Solution #2: use AT24C32 EEPROMs ● Pin-compatible with AT24C02 ● Use 1 I²C address per module, maximum 8 modules, respect traditional addressing assumptions ● Offer more capacity than we will ever need (4096 bytes) ● Problem: ● Use 2-byte addressing – not compatible with SMBus!
  • 21. 21 Reading from EEPROMs 1-byte addressing (SMBus-compatible) 2-byte addressing (not SMBus-compatible) S I²C addr data addr S I²C addr data SA A A AW R ... A Master to slave Slave to master S I²C addr data addr 1 S I²C addr dataA A A AW R Master to slave Slave to master data addr 2 A ...
  • 22. 22 The Jedec solution for DDR4 ● Solution #3: define a new EEPROM standard that uses paging ● Named EE1004 ● Pin-compatible with AT24C02 ● Uses 1 main I²C address per module, maximum 8 modules, respects traditional addressing assumptions ● Implements block write protection in a standard way ● Uses extra I²C addresses for page selection, page querying, and write protection
  • 23. 23 I²C/SMBus Address Map (DDR4) # i2cdetect -y “SMBus I801 adapter at f000” 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- 08 -- -- -- -- -- -- -- 10: -- -- -- -- 14 15 -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: 30 31 32 -- 34 35 -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- 44 -- -- -- -- -- -- -- -- -- -- -- 50: -- 51 -- 53 -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- 71 -- -- -- -- -- --
  • 24. 24 DDR4-specific I²C addresses ● 0x31, 0x34, 0x35, 0x30: Query or set write protection (per block) ● 0x33: Clear write protection (all blocks) ● 0x36, 0x37: Query or select page 1 page (256 bytes) = 2 blocks All these addresses are shared by all installed memory modules
  • 25. 25 The Jedec solution for DDR4 (cont’d) ● Uses broadcast messages for everything ● Fast but fragile ● Abuses the I²C protocol (validation, arbitration) ● Hardly extendable ● 7 out of 8 control addresses already consumed ● No provision for larger variants ● Includes useless payload in messages for no good reason ● My advice to Jedec engineers: KISS
  • 26. 26 DDR4 example: Select page 0 What DIMM#1 answers: What DIMM#2 answers: What the SMBus master sees: → Can’t be sure that page selection worked on all DIMMs S 0x36 dummy SA A AW dummy S 0x36 dummy SN N NW dummy S 0x36 dummy SA A AW dummy
  • 27. 27 DDR4 example: Page querying What DIMM#1 answers (page 0 is selected): What DIMM#2 answers (page 1 is selected): What the SMBus master sees: page 0 is selected → Can’t be sure that all DIMMs are on the same page S 0x36 dummy SA A AR dummy S 0x36 dummy SN N NR dummy S 0x36 dummy SA A AR dummy
  • 29. 29 Do we need it? ● Not mandatory ● Good to have for: ● Diagnostics (detecting sub-optimal memory module pairing) ● Inventory purposes ● Adding memory to an existing system ● Tools like dmidecode are not accurate enough
  • 30. 30 Drivers ● First of all you need an SMBus controller driver ● i2c-i801 for recent Intel chipsets ● i2c-piix4 for very old Intel chipsets and recent AMD chipsets ● Many other drivers available in the kernel tree, look in drivers/i2c/busses. ● Driver to read the EEPROMs themselves ● eeprom (since lm_sensors project, December 1998, Philip Edelbrock; in kernel tree since v2.6.0, September 2003, thanks Greg KH) up to DDR3 ● at24 (in kernel tree since v2.6.27, July 2008, Wolfram Sang) up to DDR3 ● ee1004 (in kernel tree since v4.20, October 2018, Jean Delvare) for DDR4
  • 31. 31 User-space tools ● decode-dimms (part of i2c-tools) ● Perl script ● Supports SDR, DDR, DDR2, DDR3 (since 2008-2013) and DDR4 (since 2017) SDRAM ● Plain text or HTML output
  • 32. 32 Remaining problems ● The legacy eeprom driver causes trouble ● Binds to all devices at compatible I²C address ● Slow ● Dangerous ● Doesn’t work with DDR4 – even steals devices from ee1004 driver ● Deprecated, must be removed altogether eventually ● Both at24 and ee1004 require the EEPROM devices to be explicitly instantiated ● Can be done automatically on DT/OF-based systems ● But what about x86 desktops and servers? ● ACPI?
  • 33. 33 Explicitly instantiating the EEPROMs Example of manual steps (for DDR3): # modprobe i2c-dev # i2cdetect -l # i2cdetect -y 9 # echo spd 0x50 > /sys/bus/i2c/devices/i2c-9/new_device # echo spd 0x51 > /sys/bus/i2c/devices/i2c-9/new_device Tedious and error-prone: ● Bus number depends on system, not even stable ● I²C addresses depend on installed DIMMs ● Device name depends on memory type (ee1004 for DDR4)
  • 34. 34 The final touch (work in progress) We want it to work out of the box in the most common cases ● Use DMI data to find out memory type ● White list of supported memory types ● Skip if there are more than 4 memory slots (at least on desktop systems) ● Fine-tuning possible based on DMI data (chassis type...) ● Probe I²C address 0x50-0x53 on the SMBus ● Needed because DMI information is not complete enough ● Must be enabled explicitly in each SMBus controller driver ● Skip if SMBus is multiplexed ● Instantiate the appropriate device on responsive addresses
  • 36. 36 My solution for DDR4 (but it’s too late) ● Use one I²C control address per memory module ● 0x30 for the module at main address 0x50 ● 0x31 for the module at main address 0x51 ● etc. ● Compatible with SMBus, pin-compatible with AT24C02, complies with addressing expectations ● 256 control commands available for block protection, page selection and more – highly extendable