ARM: boards: phytec-som-am335x: Add unified MLO
Subsystems (2)
PATCH v2 1/6 ARM: boards: phytec-som-am335x: Add unified MLO
PCM-060 modules only have one-bank RAMs populated, which allows us to find out the populated RAM size at run-time.
Therefore, a new entry point was create 'PHYTEC_ENTRY_UNIFIED_MLO'. This creates a MLO for all modules of one family and all existing PCM-060 MLOs were replaced with this new entry point. To provide backward compatibility for older modules, these were not affected.
In the first step generic RAM timings for the module family get loaded, because RAM accesses are only possible with an initialized controller. After that, the RAM size will be calculated and the RAM controller gets reinitialized with the correct RAM timings.
--- arch/arm/boards/phytec-som-am335x/lowlevel.c | 150 +++++++++++++++++++++++---- images/Makefile.am33xx | 24 ++--- 2 files changed, 138 insertions(+), 36 deletions(-)
arch/arm/boards/phytec-som-am335x/lowlevel.c +132 -18
@@ -46,6 +46,94 @@ static const struct am33xx_cmd_control physom_cmd = { .invert_clkout2 = 0x0, }; +/* Module family for the unified MLO +* +* NONE: Unified MLO is not supported +* PHYCORE_R2: Unified MLO for PCM-060, PCM-062 +*/ +enum { +NONE , +PHYCORE_R2 , +}; + +/* @brief Supplies default ram timings for all ram sizes +* +* Returns generic ram timings for module families to find the correct +* ram size. +* +* @return struct am335x_sdram_timings* or NULL +*/ + +static noinline struct am335x_sdram_timings* get_minimal_timings( +int module_family) +{ +struct am335x_sdram_timings *timing; + +switch (module_family) { +case PHYCORE_R2 : + timing = &physom_timings[PHYCORE_R2_MT41K512M16HA125IT_1024MB ]; +break ; +default : + timing =NULL ; + } + +return timing; +} + +/* @brief Converts ramsizes to ram timings for phyCORE-R2 modules +* +* Returns ram timings for a given ram size or NULL, if this size is +* not supported. +* +* @return struct am335x_sdram_timings* or NULL +*/ + +static noinline struct am335x_sdram_timings* convert_phycore_r2_timings( +u32 ramsize) +{ +struct am335x_sdram_timings *timing; + +switch (ramsize) { +case SZ_256M : + timing = &physom_timings[PHYCORE_R2_MT41K128M16JT_256MB ]; +break ; +case SZ_512M : + timing = &physom_timings[PHYCORE_R2_MT41K256M16TW107IT_512MB ]; +break ; +case SZ_1G : + timing = &physom_timings[PHYCORE_R2_MT41K512M16HA125IT_1024MB ]; +break ; +default : + timing =NULL ; + } + +return timing; +} + +/* @brief Converts a module family and ram size to ram timings +* +* Returns ram timings for a given ram size and module family or NULL, +* if the ram size or module family is not supported. +* +* @return struct am335x_sdram_timings* or NULL +*/ + +static noinline struct am335x_sdram_timings* get_timings_by_size( +int module_family,u32 ramsize) +{ +struct am335x_sdram_timings *timing; + +switch (module_family) { +case PHYCORE_R2 : + timing =convert_phycore_r2_timings (ramsize); +break ; +default : + timing =NULL ; + } + +return timing; +} +/** * @brief The basic entry point for board initialization. *
@@ -55,9 +143,10 @@ static const struct am33xx_cmd_control physom_cmd = {* * @return void */ -static noinline void physom_board_init(int sdram, void *fdt) +static noinline void physom_board_init(void *fdt, int sdram, int module_family) { -struct am335x_sdram_timings *timing = &physom_timings[sdram]; +struct am335x_sdram_timings *timing =NULL ; +u32 ramsize;/* * WDT1 is already running when the bootloader gets control
@@ -71,6 +160,24 @@ static noinline void physom_board_init(int sdram, void *fdt)am33xx_pll_init (MPUPLL_M_600 ,DDRPLL_M_400 ); +if (module_family ==NONE ) { + timing = &physom_timings[sdram]; + }else { +/* Load generic DDR3 ram timings to find the ram size */ + timing =get_minimal_timings (module_family); +if (!timing) +hang (); +am335x_sdram_init (DDR_IOCTRL , &physom_cmd, + &timing->regs, + &timing->data); + +/* Find the ram size and set up the correct ram timings */ + ramsize =get_ram_size ((long *)0x80000000 ,SZ_1G ); + timing =get_timings_by_size (module_family, ramsize); +if (!timing) +hang (); + } +am335x_sdram_init (DDR_IOCTRL , &physom_cmd, &timing->regs, &timing->data);
@@ -83,7 +190,8 @@ static noinline void physom_board_init(int sdram, void *fdt)am335x_barebox_entry (fdt); } -static noinline void physom_board_entry(unsigned long bootinfo, int sdram, void *fdt) +static noinline void physom_board_entry(unsigned long bootinfo, int sdram, +void *fdt,int module_family) {am33xx_save_bootinfo ((void *)bootinfo);
@@ -95,26 +203,34 @@ static noinline void physom_board_entry(unsigned long bootinfo, int sdram, void*/ relocate_to_current_adr ();setup_c (); - -physom_board_init (sdram, fdt); +physom_board_init (fdt, sdram, module_family); } -#define PHYTEC_ENTRY_MLO (name, fdt_name, sdram) \ - ENTRY_FUNCTION(name, bootinfo, r1, r2) \ - { \ +#define PHYTEC_ENTRY_UNIFIED_MLO (name, fdt_name, module_family) \ + ENTRY_FUNCTION(name, bootinfo, r1, r2) \ + { \ + extern char __dtb_z_##fdt_name##_start[]; \ + void *fdt = __dtb_z_##fdt_name##_start - \ + get_runtime_offset(); \ + physom_board_entry(bootinfo, 0, fdt, module_family); \ + } + +#define PHYTEC_ENTRY_MLO (name, fdt_name, sdram) \ + ENTRY_FUNCTION(name, bootinfo, r1, r2) \ + { \ extern char __dtb_z_##fdt_name##_start[]; \ void *fdt = __dtb_z_##fdt_name##_start - \ - get_runtime_offset(); \ - physom_board_entry(bootinfo, sdram, fdt); \ + get_runtime_offset(); \ + physom_board_entry(bootinfo, sdram, fdt, NONE); \ } -#define PHYTEC_ENTRY (name, fdt_name) \ - ENTRY_FUNCTION(name, r0, r1, r2) \ - { \ +#define PHYTEC_ENTRY (name, fdt_name) \ + ENTRY_FUNCTION(name, r0, r1, r2) \ + { \ extern char __dtb_z_##fdt_name##_start[]; \ void *fdt = __dtb_z_##fdt_name##_start - \ - get_runtime_offset(); \ - am335x_barebox_entry(fdt); \ + get_runtime_offset(); \ + am335x_barebox_entry(fdt); \ }/* phycore-som */
@@ -122,9 +238,7 @@ PHYTEC_ENTRY_MLO(start_am33xx_phytec_phycore_sram_128mb, am335x_phytec_phycore_sPHYTEC_ENTRY_MLO (start_am33xx_phytec_phycore_sram_256mb, am335x_phytec_phycore_som_mlo,PHYCORE_MT41J128M16125IT_256MB );PHYTEC_ENTRY_MLO (start_am33xx_phytec_phycore_sram_512mb, am335x_phytec_phycore_som_mlo,PHYCORE_MT41J256M16HA15EIT_512MB );PHYTEC_ENTRY_MLO (start_am33xx_phytec_phycore_sram_2x512mb, am335x_phytec_phycore_som_mlo, PHYCORE_MT41J512M8125IT_2x512MB); -PHYTEC_ENTRY_MLO (start_am33xx_phytec_phycore_r2_sram_512mb, am335x_phytec_phycore_som_mlo,PHYCORE_R2_MT41K256M16TW107IT_512MB ); -PHYTEC_ENTRY_MLO (start_am33xx_phytec_phycore_r2_sram_256mb, am335x_phytec_phycore_som_mlo,PHYCORE_R2_MT41K128M16JT_256MB ); -PHYTEC_ENTRY_MLO (start_am33xx_phytec_phycore_r2_sram_1024mb, am335x_phytec_phycore_som_mlo,PHYCORE_R2_MT41K512M16HA125IT_1024MB ); +PHYTEC_ENTRY_UNIFIED_MLO (start_am33xx_phytec_phycore_r2_sram, am335x_phytec_phycore_som_mlo,PHYCORE_R2 );PHYTEC_ENTRY (start_am33xx_phytec_phycore_nand_sdram, am335x_phytec_phycore_som_nand);PHYTEC_ENTRY (start_am33xx_phytec_phycore_emmc_sdram, am335x_phytec_phycore_som_emmc);PHYTEC_ENTRY (start_am33xx_phytec_phycore_nand_no_spi_sdram, am335x_phytec_phycore_som_nand_no_spi);
images/Makefile.am33xx +6 -18
@@ -45,18 +45,18 @@ pblx-$(CONFIG_MACH_PHYTEC_SOM_AM335X) += start_am33xx_phytec_phycore_nand_no_spi FILE_barebox-am33xx-phytec-phycore-no-spi-no-eeprom.img = start_am33xx_phytec_phycore_nand_no_spi_no_eeprom_sdram.pblx am33xx-barebox-$(CONFIG_MACH_PHYTEC_SOM_AM335X) += barebox-am33xx-phytec-phycore-no-spi-no-eeprom.img +pblx-$(CONFIG_MACH_PHYTEC_SOM_AM335X) += start_am33xx_phytec_phycore_r2_sram +FILE_barebox-am33xx-phytec-phycore-r2-mlo.img = start_am33xx_phytec_phycore_r2_sram.pblx.mlo +FILE_barebox-am33xx-phytec-phycore-r2-mlo.spi.img = start_am33xx_phytec_phycore_r2_sram.pblx.mlospi +am33xx-mlo-$(CONFIG_MACH_PHYTEC_SOM_AM335X) += barebox-am33xx-phytec-phycore-r2-mlo.img +am33xx-mlospi-$(CONFIG_MACH_PHYTEC_SOM_AM335X) += barebox-am33xx-phytec-phycore-r2-mlo.spi.img + pblx-$(CONFIG_MACH_PHYTEC_SOM_AM335X) += start_am33xx_phytec_phycore_sram_256mb FILE_barebox-am33xx-phytec-phycore-mlo-256mb.img = start_am33xx_phytec_phycore_sram_256mb.pblx.mlo FILE_barebox-am33xx-phytec-phycore-mlo-256mb.spi.img = start_am33xx_phytec_phycore_sram_256mb.pblx.mlospi am33xx-mlo-$(CONFIG_MACH_PHYTEC_SOM_AM335X) += barebox-am33xx-phytec-phycore-mlo-256mb.img am33xx-mlospi-$(CONFIG_MACH_PHYTEC_SOM_AM335X) += barebox-am33xx-phytec-phycore-mlo-256mb.spi.img -pblx-$(CONFIG_MACH_PHYTEC_SOM_AM335X) += start_am33xx_phytec_phycore_r2_sram_256mb -FILE_barebox-am33xx-phytec-phycore-r2-mlo-256mb.img = start_am33xx_phytec_phycore_r2_sram_256mb.pblx.mlo -FILE_barebox-am33xx-phytec-phycore-r2-mlo-256mb.spi.img = start_am33xx_phytec_phycore_r2_sram_256mb.pblx.mlospi -am33xx-mlo-$(CONFIG_MACH_PHYTEC_SOM_AM335X) += barebox-am33xx-phytec-phycore-r2-mlo-256mb.img -am33xx-mlospi-$(CONFIG_MACH_PHYTEC_SOM_AM335X) += barebox-am33xx-phytec-phycore-r2-mlo-256mb.spi.img - pblx-$(CONFIG_MACH_PHYTEC_SOM_AM335X) += start_am33xx_phytec_phycore_sram_128mb FILE_barebox-am33xx-phytec-phycore-mlo-128mb.img = start_am33xx_phytec_phycore_sram_128mb.pblx.mlo FILE_barebox-am33xx-phytec-phycore-mlo-128mb.spi.img = start_am33xx_phytec_phycore_sram_128mb.pblx.mlospi
@@ -69,24 +69,12 @@ FILE_barebox-am33xx-phytec-phycore-mlo-512mb.spi.img = start_am33xx_phytec_phyco am33xx-mlo-$(CONFIG_MACH_PHYTEC_SOM_AM335X) += barebox-am33xx-phytec-phycore-mlo-512mb.img am33xx-mlospi-$(CONFIG_MACH_PHYTEC_SOM_AM335X) += barebox-am33xx-phytec-phycore-mlo-512mb.spi.img -pblx-$(CONFIG_MACH_PHYTEC_SOM_AM335X) += start_am33xx_phytec_phycore_r2_sram_512mb -FILE_barebox-am33xx-phytec-phycore-r2-mlo-512mb.img = start_am33xx_phytec_phycore_r2_sram_512mb.pblx.mlo -FILE_barebox-am33xx-phytec-phycore-r2-mlo-512mb.spi.img = start_am33xx_phytec_phycore_r2_sram_512mb.pblx.mlospi -am33xx-mlo-$(CONFIG_MACH_PHYTEC_SOM_AM335X) += barebox-am33xx-phytec-phycore-r2-mlo-512mb.img -am33xx-mlospi-$(CONFIG_MACH_PHYTEC_SOM_AM335X) += barebox-am33xx-phytec-phycore-r2-mlo-512mb.spi.img - pblx-$(CONFIG_MACH_PHYTEC_SOM_AM335X) += start_am33xx_phytec_phycore_sram_2x512mb FILE_barebox-am33xx-phytec-phycore-mlo-2x512mb.img = start_am33xx_phytec_phycore_sram_2x512mb.pblx.mlo FILE_barebox-am33xx-phytec-phycore-mlo-2x512mb.spi.img = start_am33xx_phytec_phycore_sram_2x512mb.pblx.mlospi am33xx-mlo-$(CONFIG_MACH_PHYTEC_SOM_AM335X) += barebox-am33xx-phytec-phycore-mlo-2x512mb.img am33xx-mlospi-$(CONFIG_MACH_PHYTEC_SOM_AM335X) += barebox-am33xx-phytec-phycore-mlo-2x512mb.spi.img -pblx-$(CONFIG_MACH_PHYTEC_SOM_AM335X) += start_am33xx_phytec_phycore_r2_sram_1024mb -FILE_barebox-am33xx-phytec-phycore-r2-mlo-1024mb.img = start_am33xx_phytec_phycore_r2_sram_1024mb.pblx.mlo -FILE_barebox-am33xx-phytec-phycore-r2-mlo-1024mb.spi.img = start_am33xx_phytec_phycore_r2_sram_1024mb.pblx.mlospi -am33xx-mlo-$(CONFIG_MACH_PHYTEC_SOM_AM335X) += barebox-am33xx-phytec-phycore-r2-mlo-1024mb.img -am33xx-mlospi-$(CONFIG_MACH_PHYTEC_SOM_AM335X) += barebox-am33xx-phytec-phycore-r2-mlo-1024mb.spi.img - pblx-$(CONFIG_MACH_PHYTEC_SOM_AM335X) += start_am33xx_phytec_phyflex_sdram FILE_barebox-am33xx-phytec-phyflex.img = start_am33xx_phytec_phyflex_sdram.pblx am33xx-barebox-$(CONFIG_MACH_PHYTEC_SOM_AM335X) += barebox-am33xx-phytec-phyflex.img
Signature · 7 lines
2.7.4 _______________________________________________ barebox mailing list [email protected] http://lists.infradead.org/mailman/listinfo/barebox
PATCH v2 2/6 ARM: dts: AM335x: Add state framework
This patch adds the state framework with an EEPROM partition and two nodes for MAC addresses. It will be available for all phycore AM335x images with EEPROMs.
--- arch/arm/dts/am335x-phytec-phycore-som-emmc.dts | 1 + .../dts/am335x-phytec-phycore-som-nand-no-spi.dts | 1 + arch/arm/dts/am335x-phytec-phycore-som-nand.dts | 1 + arch/arm/dts/am335x-phytec-state.dtsi | 52 ++++++++++++++++++++++ 4 files changed, 55 insertions(+) create mode 100644 arch/arm/dts/am335x-phytec-state.dtsi
arch/arm/dts/am335x-phytec-phycore-som-emmc.dts +1 -0
@@ -16,6 +16,7 @@ #include "am33xx.dtsi" #include "am335x-phytec-phycore-som.dtsi" +#include "am335x-phytec-state.dtsi" / { model = "Phytec phyCORE EMMC AM335x";
arch/arm/dts/am335x-phytec-phycore-som-nand-no-spi.dts +1 -0
@@ -9,6 +9,7 @@ #include "am33xx.dtsi" #include "am335x-phytec-phycore-som.dtsi" +#include "am335x-phytec-state.dtsi" / { model = "Phytec phyCORE AM335x";
arch/arm/dts/am335x-phytec-phycore-som-nand.dts +1 -0
@@ -9,6 +9,7 @@ #include "am33xx.dtsi" #include "am335x-phytec-phycore-som.dtsi" +#include "am335x-phytec-state.dtsi" / { model = "Phytec phyCORE AM335x";
arch/arm/dts/am335x-phytec-state.dtsi new file +52 -0
52 lines not on this page · raw message
Signature · 7 lines
2.7.4 _______________________________________________ barebox mailing list [email protected] http://lists.infradead.org/mailman/listinfo/barebox
PATCH v2 3/6 ARM: configs: am335x_defconfig: Add state config
In reply to Daniel SchultzEnable the state framework for all AM335x boards.
--- arch/arm/configs/am335x_defconfig | 3 +++ 1 file changed, 3 insertions(+)
arch/arm/configs/am335x_defconfig +3 -0
@@ -88,6 +88,7 @@ CONFIG_CMD_OF_FIXUP_STATUS=y CONFIG_CMD_OFTREE=y CONFIG_CMD_TIME=y CONFIG_CMD_MMC_EXTCSD=y +CONFIG_CMD_STATE=y CONFIG_NET=y CONFIG_NET_NFS=y CONFIG_NET_NETCONSOLE=y
@@ -142,3 +143,5 @@ CONFIG_FS_FAT_LFN=y CONFIG_FS_UBIFS=y CONFIG_FS_UBIFS_COMPRESSION_LZO=y CONFIG_FS_UBIFS_COMPRESSION_ZLIB=y +CONFIG_STATE=y +CONFIG_STATE_DRV=y
Signature · 7 lines
2.7.4 _______________________________________________ barebox mailing list [email protected] http://lists.infradead.org/mailman/listinfo/barebox
PATCH v2 4/6 common: state: Add variable_type to state_variable
In reply to Daniel SchultzAdd a pointer in state_variable to the corresponding variable_type array element.
---
Changes:
v2: New patch
common/state/state.h | 1 + common/state/state_variables.c | 5 +++++ 2 files changed, 6 insertions(+)
common/state/state.h +1 -0
@@ -132,6 +132,7 @@ struct variable_type {struct state_variable {struct state *state;struct list_head list; +struct variable_type *type;const char *name;unsigned int start;unsigned int size;
common/state/state_variables.c +5 -0
@@ -116,6 +116,7 @@ static struct state_variable *state_uint8_create(struct state *state, } su32->param = param; + su32->var.type =state_find_type_by_name ("uint8" ); su32->var.size =sizeof (uint8_t );#ifdef __LITTLE_ENDIAN su32->var.raw = &su32->value;
@@ -144,6 +145,7 @@ static struct state_variable *state_uint32_create(struct state *state, } su32->param = param; + su32->var.type =state_find_type_by_name ("uint32" ); su32->var.size =sizeof (uint32_t ); su32->var.raw = &su32->value; su32->var.state = state;
@@ -234,6 +236,7 @@ static struct state_variable *state_enum32_create(struct state *state, enum32->names =xzalloc (sizeof (char *) * num_names); enum32->num_names = num_names; + enum32->var.type =state_find_type_by_name ("enum32" ); enum32->var.size =sizeof (uint32_t ); enum32->var.raw = &enum32->value; enum32->var.state = state;
@@ -307,6 +310,7 @@ static struct state_variable *state_mac_create(struct state *state, mac =xzalloc (sizeof (*mac)); + mac->var.type =state_find_type_by_name ("mac" ); mac->var.size =ARRAY_SIZE (mac->value); mac->var.raw = mac->value; mac->var.state = state;
@@ -420,6 +424,7 @@ static struct state_variable *state_string_create(struct state *state,return ERR_PTR (-EILSEQ ); string =xzalloc (sizeof (*string) + start_size[1 ]); + string->var.type =state_find_type_by_name ("string" ); string->var.size = start_size[1 ]; string->var.raw = &string->raw; string->var.state = state;
Signature · 7 lines
2.7.4 _______________________________________________ barebox mailing list [email protected] http://lists.infradead.org/mailman/listinfo/barebox
Re: [PATCH v2 4/6] common: state: Add variable_type to state_variable
Quoted 29 lines · Daniel Schultz
Add a pointer in
state_variableto the correspondingvariable_typearray element.Signed-off-by Daniel Schultz <[email protected]>---
Changes:
v2: New patchcommon/state/state.h | 1 + common/state/state_variables.c | 5 +++++ 2 files changed, 6 insertions(+)common/state/state.h +1
-0@@ -132,6 +132,7 @@ struct variable_type {struct state_variable {struct state *state;struct list_head list; +struct variable_type *type;const char *name;unsigned int start;unsigned int size;common/state/state_variables.c +0
-0
common/state/state_variables.c static struct state_variable *state_uint8_create(struct state *state, · line 119
Quoted 4 lines
common/state/state_variables.c +1
-0@@ -116,6 +116,7 @@ static struct state_variable *state_uint8_create(struct state *state, } su32->param = param; + su32->var.type =state_find_type_by_name ("uint8" );
Please pass the struct variable_type * into the ->create callback. It is known by the caller, so we can easily avoid iterating over the array of types again.
Sascha
Signature · 9 lines
Pengutronix e.K. | | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ barebox mailing list [email protected] http://lists.infradead.org/mailman/listinfo/barebox
PATCH v2 5/6 common: state: Add function to read state MAC
In reply to Daniel SchultzThis API function allows to receive a copy of a MAC address from variables in a state.
---
Changes:
v2: New patch
common/state/state.c | 23 +++++++++++++++++++++++ include/state.h | 2 ++ 2 files changed, 25 insertions(+)
common/state/state.c +23 -0
@@ -693,6 +693,29 @@ int state_get_name(const struct state *state, char const **name)return 0 ; } +int state_read_mac (struct state *state,const char *name,u8 *buf) +{ +struct state_variable *svar; +struct state_mac *mac; +int i; + +if (!state || !name || !buf) +return -EINVAL ; + + svar =state_find_var (state, name); +if (IS_ERR (svar)) +return PTR_ERR (svar); + +if (!strcmp (svar->type->type_name,"mac" )) { + mac =to_state_mac (svar); +for (i =0 ; i <6 ; i++) + buf[i] = mac->value[i]; +return 6 ; + } + +return 0 ; +} +void state_info (void ) {struct state *state;
include/state.h +2 -0
@@ -23,4 +23,6 @@ int state_load(struct state *state);int state_save (struct state *state);void state_info (void ); +int state_read_mac (struct state *state,const char *name,u8 *buf); +#endif /* __STATE_H */
Signature · 7 lines
2.7.4 _______________________________________________ barebox mailing list [email protected] http://lists.infradead.org/mailman/listinfo/barebox
Re: [PATCH v2 5/6] common: state: Add function to read state MAC
Quoted 24 lines · Daniel Schultz
This API function allows to receive a copy of a MAC address from variables in a state.
Signed-off-by Daniel Schultz <[email protected]>---
Changes:
v2: New patchcommon/state/state.c | 23 +++++++++++++++++++++++ include/state.h | 2 ++ 2 files changed, 25 insertions(+)common/state/state.c +4
-0@@ -693,6 +693,29 @@ int state_get_name(const struct state *state, char const **name)return 0 ; } +int state_read_mac (struct state *state,const char *name,u8 *buf) +{ +struct state_variable *svar; +struct state_mac *mac;
common/state/state.c int state_get_name(const struct state *state, char const **name) · line 709
Quoted 10 lines
common/state/state.c +10
-0+int i; + +if (!state || !name || !buf) +return -EINVAL ; + + svar =state_find_var (state, name); +if (IS_ERR (svar)) +return PTR_ERR (svar); + +if (!strcmp (svar->type->type_name,"mac" )) {
Could you add a patch before this one that adds a
enum state_variable_type {
STATE_VARIABLE_TYPE_UINT8,
...
};Then add the type to struct variable_type and test for the type rather than for the string name? I think in the longer run this will be nicer when we get additional tests for the variable_type.
common/state/state.c int state_get_name(const struct state *state, char const **name) · line 712
Quoted 3 lines
common/state/state.c +3
-0+ mac =to_state_mac (svar); +for (i =0 ; i <6 ; i++) + buf[i] = mac->value[i];
memcpy?
common/state/state.c int state_get_name(const struct state *state, char const **name) · line 713
Quoted 1 line
common/state/state.c +1
-0+return 6 ;
So '6' is the return value for successfully calling this function. This is the length of the MAC Address, but does this add any value? Better use a negative error code and '0' for success.
Sascha
Quoted 5 lines
common/state/state.c +5
-0+ } + +return 0 ; +} +
Signature · 9 lines
Pengutronix e.K. | | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ barebox mailing list [email protected] http://lists.infradead.org/mailman/listinfo/barebox
PATCH v2 6/6 ARM: phytec-som-am335x: Set MAC addresses from state
In reply to Daniel SchultzIf a state with the name 'am335x_phytec_mac_state' is available, valid MAC addresses from this state get registerd to their ethernet device.
---
Changes:
v2: Changed to new 'state_read_mac' function
arch/arm/boards/phytec-som-am335x/board.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+)
arch/arm/boards/phytec-som-am335x/board.c +21 -0
@@ -21,10 +21,12 @@#include <bootsource.h> #include <common.h> #include <nand.h> +#include <net.h> #include <init.h> #include <io.h> #include <linux/sizes.h> #include <envfs.h> +#include <state.h> #include <asm/armlinux.h> #include <generated/mach-types.h> #include <linux/phy.h>
@@ -65,8 +67,16 @@ static char *nandslots[] = { "/dev/nand0.barebox_backup.bb", }; +#define ETH_COUNT 2 +static const char *eth_names[ETH_COUNT ] = {"mac0" ,"mac1" }; +static int physom_devices_init (void ) { +struct state *state; +u8 mac[6 ]; +int state_ret; +int state_i; +if (!of_machine_is_compatible ("phytec,am335x-som" ))return 0 ;
@@ -114,6 +124,17 @@ static int physom_devices_init(void) ARRAY_SIZE(nandslots));am33xx_bbu_emmc_mlo_register_handler ("MLO.emmc" ,"/dev/mmc1" ); +if (IS_ENABLED (CONFIG_STATE )) { + state =state_by_name ("am335x_phytec_mac_state" ); +if (state) +for (state_i =0 ; state_i <2 ; state_i++) { + state_ret =state_read_mac (state, + eth_names[state_i], &mac[0 ]); +if (state_ret ==6 ) +eth_register_ethaddr (state_i, mac); + } + } +if (IS_ENABLED (CONFIG_SHELL_NONE ))return am33xx_of_register_bootdevice ();
Signature · 7 lines
2.7.4 _______________________________________________ barebox mailing list [email protected] http://lists.infradead.org/mailman/listinfo/barebox