>> I will probably commit this patch before you get a chance to test it
>> again because I want to do the 0.9.8 release soonish, but I'd
>> appreciate a later test very much too if you want to do that.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Dear Stefan,
Thanks for the review and remedy.
Certainly, I will again verify the patch once it being committed into
official svn-stream (Looks not in r1860 yet?)
and/or 0.9.8-release.
Thank you
Tai-Hong Wu (T.H.Wu Type
2014-12-26 23:36 GMT+08:00 Stefan Tauner <stefan.tauner(a)alumni.tuwien.ac.at>
:
> Silvermont (Bay Trail, Rangeley, Avoton) seems to still use the old
> density encoding with 3 bits per chip. Documentation is unavailable
> (held concealed by Intel) but thanks to the efforts of Tai-Hong
> (Type) Wu the layout is clear now. This patch is based on his one
> but solves the issue differently reducing the code complexity.
>
> Signed-off-by: T.H.Wu Type <thwu(a)lunartoday.com>
> Signed-off-by: Stefan Tauner <stefan.tauner(a)alumni.tuwien.ac.at>
> ---
>
> Hello Tai-Hong,
>
> thanks a lot for your patch! And sorry for the late reply. Now that
> I got some time I have looked into your patch. Your solution seems
> to work fine but I decided that I'd rather move the dual output
> supported bit to the "common" bit field struct and rename all
> involved structs accordingly. This gets rid of the rather unreadable
> double ternary branch.
>
> I will probably commit this patch before you get a chance to test it
> again because I want to do the 0.9.8 release soonish, but I'd
> appreciate a later test very much too if you want to do that.
>
> ich_descriptors.c | 38 +++++++++++++++++++-------------------
> ich_descriptors.h | 18 +++++++-----------
> 2 files changed, 26 insertions(+), 30 deletions(-)
>
> diff --git a/ich_descriptors.c b/ich_descriptors.c
> index 1966f66..90f70ee 100644
> --- a/ich_descriptors.c
> +++ b/ich_descriptors.c
> @@ -127,27 +127,27 @@ static const char *pprint_density(enum ich_chipset
> cs, const struct ich_descript
> case CHIPSET_ICH10:
> case CHIPSET_5_SERIES_IBEX_PEAK:
> case CHIPSET_6_SERIES_COUGAR_POINT:
> - case CHIPSET_7_SERIES_PANTHER_POINT: {
> + case CHIPSET_7_SERIES_PANTHER_POINT:
> + case CHIPSET_BAYTRAIL: {
> uint8_t size_enc;
> if (idx == 0) {
> - size_enc = desc->component.old.comp1_density;
> + size_enc = desc->component.dens_old.comp1_density;
> } else {
> - size_enc = desc->component.old.comp2_density;
> + size_enc = desc->component.dens_old.comp2_density;
> }
> if (size_enc > 5)
> return "reserved";
> return size_str[size_enc];
> }
> case CHIPSET_8_SERIES_LYNX_POINT:
> - case CHIPSET_BAYTRAIL:
> case CHIPSET_8_SERIES_LYNX_POINT_LP:
> case CHIPSET_8_SERIES_WELLSBURG:
> case CHIPSET_9_SERIES_WILDCAT_POINT: {
> uint8_t size_enc;
> if (idx == 0) {
> - size_enc = desc->component.new.comp1_density;
> + size_enc = desc->component.dens_new.comp1_density;
> } else {
> - size_enc = desc->component.new.comp2_density;
> + size_enc = desc->component.dens_new.comp2_density;
> }
> if (size_enc > 7)
> return "reserved";
> @@ -207,16 +207,16 @@ void prettyprint_ich_descriptor_component(enum
> ich_chipset cs, const struct ich_
> msg_pdbg2("Component 2 density: %s\n",
> pprint_density(cs, desc, 1));
> else
> msg_pdbg2("Component 2 is not used.\n");
> - msg_pdbg2("Read Clock Frequency: %s\n", pprint_freq(cs,
> desc->component.common.freq_read));
> - msg_pdbg2("Read ID and Status Clock Freq.: %s\n", pprint_freq(cs,
> desc->component.common.freq_read_id));
> - msg_pdbg2("Write and Erase Clock Freq.: %s\n", pprint_freq(cs,
> desc->component.common.freq_write));
> - msg_pdbg2("Fast Read is %ssupported.\n",
> desc->component.common.fastread ? "" : "not ");
> - if (desc->component.common.fastread)
> + msg_pdbg2("Read Clock Frequency: %s\n", pprint_freq(cs,
> desc->component.modes.freq_read));
> + msg_pdbg2("Read ID and Status Clock Freq.: %s\n", pprint_freq(cs,
> desc->component.modes.freq_read_id));
> + msg_pdbg2("Write and Erase Clock Freq.: %s\n", pprint_freq(cs,
> desc->component.modes.freq_write));
> + msg_pdbg2("Fast Read is %ssupported.\n",
> desc->component.modes.fastread ? "" : "not ");
> + if (desc->component.modes.fastread)
> msg_pdbg2("Fast Read Clock Frequency: %s\n",
> - pprint_freq(cs,
> desc->component.common.freq_fastread));
> + pprint_freq(cs,
> desc->component.modes.freq_fastread));
> if (cs > CHIPSET_6_SERIES_COUGAR_POINT)
> msg_pdbg2("Dual Output Fast Read Support: %sabled\n",
> - desc->component.new.dual_output ? "dis" : "en");
> + desc->component.modes.dual_output ? "dis" :
> "en");
> if (desc->component.FLILL == 0)
> msg_pdbg2("No forbidden opcodes.\n");
> else {
> @@ -816,22 +816,22 @@ int getFCBA_component_density(enum ich_chipset cs,
> const struct ich_descriptors
> case CHIPSET_5_SERIES_IBEX_PEAK:
> case CHIPSET_6_SERIES_COUGAR_POINT:
> case CHIPSET_7_SERIES_PANTHER_POINT:
> + case CHIPSET_BAYTRAIL:
> if (idx == 0) {
> - size_enc = desc->component.old.comp1_density;
> + size_enc = desc->component.dens_old.comp1_density;
> } else {
> - size_enc = desc->component.old.comp2_density;
> + size_enc = desc->component.dens_old.comp2_density;
> }
> size_max = 5;
> break;
> case CHIPSET_8_SERIES_LYNX_POINT:
> - case CHIPSET_BAYTRAIL:
> case CHIPSET_8_SERIES_LYNX_POINT_LP:
> case CHIPSET_8_SERIES_WELLSBURG:
> case CHIPSET_9_SERIES_WILDCAT_POINT:
> if (idx == 0) {
> - size_enc = desc->component.new.comp1_density;
> + size_enc = desc->component.dens_new.comp1_density;
> } else {
> - size_enc = desc->component.new.comp2_density;
> + size_enc = desc->component.dens_new.comp2_density;
> }
> size_max = 7;
> break;
> @@ -842,7 +842,7 @@ int getFCBA_component_density(enum ich_chipset cs,
> const struct ich_descriptors
> }
>
> if (size_enc > size_max) {
> - msg_perr("Density of ICH SPI component with index %d is
> invalid."
> + msg_perr("Density of ICH SPI component with index %d is
> invalid.\n"
> "Encoded density is 0x%x while maximum allowed is
> 0x%x.\n",
> idx, size_enc, size_max);
> return -1;
> diff --git a/ich_descriptors.h b/ich_descriptors.h
> index c41f9d9..2c21598 100644
> --- a/ich_descriptors.h
> +++ b/ich_descriptors.h
> @@ -123,23 +123,19 @@ struct ich_desc_component {
> freq_fastread :3,
> freq_write :3,
> freq_read_id :3,
> - :2;
> - } common;
> + dual_output :1, /* new since Cougar
> Point/6 */
> + :1;
> + } modes;
> struct {
> uint32_t comp1_density :3,
> comp2_density :3,
> - :11,
> - :13,
> - :2;
> - } old;
> + :26;
> + } dens_old;
> struct {
> uint32_t comp1_density :4, /* new since Lynx
> Point/8 */
> comp2_density :4,
> - :9,
> - :13,
> - dual_output :1, /* new since Cougar
> Point/6 */
> - :1;
> - } new;
> + :24;
> + } dens_new;
> };
> union { /* 0x04 */
> uint32_t FLILL; /* Flash Invalid Instructions Register */
> --
> Kind regards, Stefan Tauner
>
>