arm: mvebu: clearfog: read number of ddr channels from tlv data

Extend the existing tlv vendor extension used for ram size by one byte to
also store the number of ddr channels.
The length of the tlv entry can indicate whether the new information is
present. If not default to single channel.

Signed-off-by: Josua Mayer <josua@solid-run.com>
Reviewed-by: Stefan Roese <sr@denx.de>
This commit is contained in:
Josua Mayer 2023-10-08 16:58:03 +02:00 committed by Stefan Roese
parent 335df894ad
commit fdd6069515
3 changed files with 20 additions and 2 deletions

View file

@ -36,7 +36,7 @@ DECLARE_GLOBAL_DATA_PTR;
#define BOARD_GPP_POL_LOW 0x0 #define BOARD_GPP_POL_LOW 0x0
#define BOARD_GPP_POL_MID 0x0 #define BOARD_GPP_POL_MID 0x0
static struct tlv_data cf_tlv_data; static struct tlv_data cf_tlv_data = { 0 };
static void cf_read_tlv_data(void) static void cf_read_tlv_data(void)
{ {
@ -168,6 +168,18 @@ struct mv_ddr_topology_map *mv_ddr_topology_map_get(void)
break; break;
} }
switch (cf_tlv_data.ram_channels) {
default:
case 1:
for (uint8_t i = 0; i < 5; i++)
ifp->as_bus_params[i].cs_bitmask = 0x1;
break;
case 2:
for (uint8_t i = 0; i < 5; i++)
ifp->as_bus_params[i].cs_bitmask = 0x3;
break;
}
/* Return the board topology as defined in the board code */ /* Return the board topology as defined in the board code */
return &board_topology_map; return &board_topology_map;
} }

View file

@ -45,9 +45,14 @@ static void parse_tlv_vendor_ext(struct tlvinfo_tlv *tlv_entry,
if (val[4] != SR_TLV_CODE_RAM_SIZE) if (val[4] != SR_TLV_CODE_RAM_SIZE)
return; return;
if (tlv_entry->length != 6) if (tlv_entry->length < 6)
return; return;
td->ram_size = val[5]; td->ram_size = val[5];
/* extension with additional data field for number of ddr channels */
if (tlv_entry->length >= 7) {
td->ram_channels = val[6];
}
} }
static void parse_tlv_data(u8 *eeprom, struct tlvinfo_header *hdr, static void parse_tlv_data(u8 *eeprom, struct tlvinfo_header *hdr,

View file

@ -10,6 +10,7 @@ struct tlv_data {
/* Store product name of both SOM and carrier */ /* Store product name of both SOM and carrier */
char tlv_product_name[2][32]; char tlv_product_name[2][32];
unsigned int ram_size; unsigned int ram_size;
uint8_t ram_channels;
}; };
void read_tlv_data(struct tlv_data *td); void read_tlv_data(struct tlv_data *td);