Question 2. To what devices should the Driver Strength properties
bind?
A Driver Strength property for the host controller obviously
binds to the host controller device.
Additionally it can be assumed that Driver Strength is a property
of the board (e.g. a stronger Driver Strength needed because the
eMMC is located further from the host controller), consequently
even the Driver Strength property for the card should bind against
the host controller.
Question 3. Should there be separate Driver Strength values for
different transfer modes?
Different transfer modes can have different timing requirements
which implies that there can be different Driver Strength values
for each transfer mode. To support that, there would need to be
either separate properties for each mode, or more simply two
properties that list associated transfer modes and Driver
Strengths. Transfer modes are not codified but have standard
names that could be used e.g. "HS400" or "SDR104"
Question 4. Should there be separate Driver Strength values for
different frequencies?
To be generic, another property would be needed to specify the
frequency from which the Driver Strength is needed.
Question 5. Should there be separate Driver Strength values for
different voltages?
UHS-I modes all have the same signal voltage (1.8V) however HS200
and HS400 support both 1.2V and 1.8V.
That could be handled by having having different mode strings for
the variants. i.e. "HS200", "HS200-1.2V", "HS200-1.8V", "HS400",
"HS400-1.2V", 'HS400-1.8V"
Question 6. Should there be separate Driver Strength values for
different slots?
In order to support multiple slots, the slot number can be appended
to the property names to define a separate set of properties for
each slot.
Question 7. Should the possibility of multiple cards in the same
slot be supported?
Linux does not support having multiple cards in the same slot.
Presumably, the Driver Strength for each card would bind to the
card device, which would require defining how card devices are
identified. That might be possible, but it is out of scope.
ACPI Device Property definitions:
---------------------------------
Based on my answers to the questions, the ACPI Device Property
definitions would look like this:
The following Device Properties are for general use with
any eMMC, SD card, or SDIO host controller.
---------------------------------------------------------------------------
Property: card-driver-strength-0
Value: Package of Integers
Description:
If present, defines a list of the driver strength values
for a card in slot 0. The driver strength is an optional
setting defined by the JEDEC eMMC specification or the
SD Association Physical Layer specification, for use with
HS200/HS400 or UHS-I transfer modes. In absence of this
property, the default value of 0 is used.
Example values:
Value Nominal Impedance Approx. capability
relative to type 0
0 50 ohm x1
1 33 ohm x1.5
2 66 ohm x0.75
3 100 ohm x0.5
4 40 ohm x1.2
The driver strength values associate one-to-one
with the values of properties card-driver-strength-mode-0 and
card-driver-strength-freq-0. Transfer modes or frequencies not
specified will have the default driver strength of 0.
Neither card-driver-strength-mode-0 nor card-driver-strength-freq-0
need be present in which case there must be only one driver
strength value which will be used with all relevant transfer
modes and frequencies.
For host controllers that define multiple slots,
the value applies to the first slot (slot 0), and
each subsequent slot requires another property of
the form card-driver-strength-n when n is the slot
number (e.g. for the 2nd slot card-driver-strength-1)
Example for a single slot host controller with a single value:
Package (2) { "card-driver-strength-0",
Package (1) { 1 }
}
Example for a multiple slot host controller with 3 slots all with
a single value:
Package (2) { "card-driver-strength-0",
Package (1) { 1 }
}
Package (2) { "card-driver-strength-1",
Package (1) { 3 }
}
Package (2) { "card-driver-strength-2",
Package (1) { 0 }
}
---------------------------------------------------------------------------
Property: card-driver-strength-mode-0
Value: Package of Strings
Description:
If present, defines the transfer modes to which the values
of card-driver-strength-0 apply. The transfer modes are
identified by name and where necessary voltage. i.e.
eMMC transfer modes:
"HS200",
"HS200-1.2V",
"HS200-1.8V",
"HS400",
"HS400-1.2V",
"HS400-1.8V",
UHS-I transfer modes:
"SDR12",
"SDR25",
"SDR50",
"SDR104",
"DDR50",
The empty string ("") can be used to mean all modes not
otherwise specified. The names of new modes should be
inferred from the relevant specifications.
Example for a single slot host controller with a single value for
HS400 mode:
Package (2) { "card-driver-strength-0",
Package (1) { 1 }
}
Package (2) { "card-driver-strength-mode-0",
Package (1) { "HS400" }
}
---------------------------------------------------------------------------
Property: card-driver-strength-freq-0
Value: Package of Integers
Description:
If present, defines the starting frequencies to which the values
of card-driver-strength-0 apply. The frequency is in Hz.
Example for a single slot host controller with Driver Strength 4
for HS400 starting at 50MHz changing to Driver Strength 1 at 100MHz.
Package (2) { "card-driver-strength-0",
Package (1) { 4, 1 }
}
Package (2) { "card-driver-strength-mode-0",
Package (1) { "HS400", "HS400" }
}
Package (2) { "card-driver-strength-freq-0",
Package (1) { 50000000, 100000000 }
}
---------------------------------------------------------------------------
Property: host-driver-strength-0
Value: Package of Integers
Description:
Same as card-driver-strength-0 but values are used for the
host controller not the card.
---------------------------------------------------------------------------
Property: host-driver-strength-mode-0
Value: Package of Strings
Description:
Same as card-driver-strength-mode-0 but values are used for the
host controller not the card.
---------------------------------------------------------------------------
Property: host-driver-strength-freq-0
Value: Package of Integers
Same as card-driver-strength-freq-0 but values are used for the
host controller not the card.
Regards
Adrian
--
To unsubscribe from this list: send the line "unsubscribe
linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/