[U-Boot] [PATCH u-boot-marvell v2 06/12] board: turris_mox: Cosmetic restructurization
Stefan Roese
sr at denx.de
Tue Nov 20 07:04:37 UTC 2018
Hi Marek,
On 19.09.18 14:22, Stefan Roese wrote:
> On 17.08.2018 12:58, Marek BehĂșn wrote:
>> Restructure the board initialization source.
>> Remove the module_topology environment variable since it won't be
>> needed.
>>
>> Signed-off-by: Marek Behun <marek.behun at nic.cz>
>> ---
>> board/CZ.NIC/turris_mox/turris_mox.c | 153 ++++++++++++++++++++++++-----------
>> 1 file changed, 106 insertions(+), 47 deletions(-)
>>
>> diff --git a/board/CZ.NIC/turris_mox/turris_mox.c b/board/CZ.NIC/turris_mox/turris_mox.c
>> index 42f55b7915..4a3e78c5d6 100644
>> --- a/board/CZ.NIC/turris_mox/turris_mox.c
>> +++ b/board/CZ.NIC/turris_mox/turris_mox.c
>> @@ -33,6 +33,12 @@
>>
>> #define PCIE_PATH "/soc/pcie at d0070000"
>>
>> +typedef enum {
>> + MOX_UNKNOWN,
>> + MOX_EMMC,
>> + MOX_SD
>> +} mox_version_t;
>> +
>> DECLARE_GLOBAL_DATA_PTR;
>>
>> #if defined(CONFIG_OF_BOARD_FIXUP)
>> @@ -133,17 +139,15 @@ int board_init(void)
>> return 0;
>> }
>>
>> -int last_stage_init(void)
>> +static int mox_do_spi(u8 *in, u8 *out, size_t size)
>> {
>> struct spi_slave *slave;
>> struct udevice *dev;
>> - u8 din[10], dout[10];
>> - int ret, i;
>> - size_t len = 0;
>> - char module_topology[128];
>> + int ret;
>>
>> - ret = spi_get_bus_and_cs(0, 1, 20000000, SPI_CPHA, "spi_generic_drv",
>> - "mox-modules at 1", &dev, &slave);
>> + ret = spi_get_bus_and_cs(0, 1, 1000000, SPI_CPHA | SPI_CPOL,
>> + "spi_generic_drv", "moxtet at 1", &dev,
>> + &slave);
>> if (ret)
>> goto fail;
>>
>> @@ -151,57 +155,112 @@ int last_stage_init(void)
>> if (ret)
>> goto fail_free;
>>
>> - memset(din, 0, 10);
>> - memset(dout, 0, 10);
>> + ret = spi_xfer(slave, size * 8, out, in, SPI_XFER_ONCE);
>> +
>> + spi_release_bus(slave);
>> +fail_free:
>> + spi_free_slave(slave);
>> +fail:
>> + return ret;
>> +}
>>
>> - ret = spi_xfer(slave, 80, dout, din, SPI_XFER_ONCE);
>> +static int mox_get_topology(const u8 **ptopology, int *psize,
>> + mox_version_t *pversion)
>> +{
>> + static mox_version_t mox_version;
>> + static u8 topology[MAX_MOX_MODULES - 1];
>> + static int size;
>> + u8 din[MAX_MOX_MODULES], dout[MAX_MOX_MODULES];
>> + int ret, i;
>> +
>> + if (size) {
>> + if (ptopology)
>> + *ptopology = topology;
>> + if (psize)
>> + *psize = size;
>> + if (pversion)
>> + *pversion = mox_version;
>> + return 0;
>> + }
>> +
>> + memset(din, 0, MAX_MOX_MODULES);
>> + memset(dout, 0, MAX_MOX_MODULES);
>> +
>> + ret = mox_do_spi(din, dout, MAX_MOX_MODULES);
>> if (ret)
>> - goto fail_release;
>> + return ret;
>> +
>> + switch (din[0]) {
>> + case 0x00:
>> + mox_version = MOX_EMMC;
>> + break;
>> + case 0x10:
>> + mox_version = MOX_SD;
>> + break;
>> + case 0xff:
>> + mox_version = MOX_UNKNOWN;
>> + break;
>> + default:
>> + return -ENODEV;
>> + }
>> +
>> + for (i = 1; i < MAX_MOX_MODULES && din[i] != 0xff; ++i)
>> + topology[i - 1] = din[i] & 0xf;
>> + size = i - 1;
>> +
>> + if (ptopology)
>> + *ptopology = topology;
>> + if (psize)
>> + *psize = size;
>> + if (pversion)
>> + *pversion = mox_version;
>> +
>> + return 0;
>> +}
>>
>> - if (din[0] != 0x00 && din[0] != 0xff)
>> - goto fail_release;
>> +int last_stage_init(void)
>> +{
>> + int ret, i;
>> + const u8 *topology;
>> + int module_count;
>> + mox_version_t version;
>> +
>> + ret = mox_get_topology(&topology, &module_count, &version);
>> + if (ret) {
>> + printf("Cannot read module topology!\n");
>> + return 0;
>> + }
>>
>> + printf("Found Turris Mox %s version\n", version == MOX_SD ? "SD" :
>> + version == MOX_EMMC ? "eMMC" :
>> + "unknown");
>> printf("Module Topology:\n");
>> - for (i = 1; i < 10 && din[i] != 0xff; ++i) {
>> - u8 mid = din[i] & 0xf;
>> - size_t mlen;
>> - const char *mname = "";
>> -
>> - switch (mid) {
>> - case 0x1:
>> - mname = "sfp-";
>> - printf("% 4i: SFP Module\n", i);
>> + for (i = 0; i < module_count; ++i) {
>> + switch (topology[i]) {
>> + case MOX_MODULE_SFP:
>> + printf("% 4i: SFP Module\n", i + 1);
>> + break;
>> + case MOX_MODULE_PCI:
>> + printf("% 4i: Mini-PCIe Module\n", i + 1);
>> + break;
>> + case MOX_MODULE_TOPAZ:
>> + printf("% 4i: Topaz Switch Module (4-port)\n", i + 1);
>> break;
>> - case 0x2:
>> - mname = "pci-";
>> - printf("% 4i: Mini-PCIe Module\n", i);
>> + case MOX_MODULE_PERIDOT:
>> + printf("% 4i: Peridot Switch Module (8-port)\n", i + 1);
>> break;
>> - case 0x3:
>> - mname = "topaz-";
>> - printf("% 4i: Topaz Switch Module\n", i);
>> + case MOX_MODULE_USB3:
>> + printf("% 4i: USB 3.0 Module (4 ports)\n", i + 1);
>> + break;
>> + case MOX_MODULE_PASSPCI:
>> + printf("% 4i: Passthrough Mini-PCIe Module\n", i + 1);
>> break;
>> default:
>> - printf("% 4i: unknown (ID %i)\n", i, mid);
>> - }
>> -
>> - mlen = strlen(mname);
>> - if (len + mlen < sizeof(module_topology)) {
>> - strcpy(module_topology + len, mname);
>> - len += mlen;
>> + printf("% 4i: unknown (ID %i)\n", i + 1, topology[i]);
>> }
>> }
>> - printf("\n");
>> -
>> - module_topology[len > 0 ? len - 1 : 0] = '\0';
>>
>> - env_set("module_topology", module_topology);
>> + printf("\n");
>>
>> -fail_release:
>> - spi_release_bus(slave);
>> -fail_free:
>> - spi_free_slave(slave);
>> -fail:
>> - if (ret)
>> - printf("Cannot read module topology!\n");
>> - return ret;
>> + return 0;
>> }
>>
>
> This patch does not apply currently. I'm skipping it from this
> series for now. I'm currently pushing my Marvell branch upstream
> and would like to get the first batch of patches accepted. After
> Tom has pulled these patches, please rebase on top of this new
> master.
Any updates on this? Please rebase the still missing patches from
this series on top of latest mainline.
Thanks,
Stefan
More information about the U-Boot
mailing list