libdigi: support is_nand_oob_atomic for ccardimx28 in linux 3.x
Actually this is a workaround that probably needs to be generalized. But at the moment the ccardimx28 is the only platform we have in linux 3.x so it's enough. https://jira.digi.com/browse/DEL-560 Signed-off-by: Javier Viguera <javier.viguera@digi.com>
This commit is contained in:
parent
735e36ce8e
commit
b1f76723a7
|
|
@ -10,6 +10,7 @@
|
|||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "digi-platforms.h"
|
||||
#include "log.h"
|
||||
|
|
@ -36,9 +37,33 @@ int get_platform_id(void)
|
|||
id = -1; /* don't care about the error code */
|
||||
}
|
||||
fclose(fp);
|
||||
|
||||
return id;
|
||||
}
|
||||
|
||||
/*
|
||||
* get_platform_name_from_fdt
|
||||
*
|
||||
* Read the device tree and return platform name or NULL
|
||||
*/
|
||||
static char *get_platform_name_from_fdt(void)
|
||||
{
|
||||
static const char *fdt = "/proc/device-tree/digi,machine,name";
|
||||
static char buffer[64]; /* static buffer so it can be used in the caller function */
|
||||
char *plat_name = NULL;
|
||||
FILE *fp;
|
||||
|
||||
fp = fopen(fdt, "r");
|
||||
if (fp == NULL)
|
||||
goto out;
|
||||
|
||||
plat_name = fgets(buffer, sizeof(buffer), fp);
|
||||
fclose(fp);
|
||||
|
||||
out:
|
||||
return plat_name;
|
||||
}
|
||||
|
||||
/*
|
||||
* Checks whether platform requires an atomic access to NAND OOB
|
||||
*/
|
||||
|
|
@ -47,28 +72,38 @@ char is_nand_oob_atomic(void)
|
|||
int platform_id;
|
||||
|
||||
platform_id = get_platform_id();
|
||||
/* The following platforms require atomic access to NAND OOB */
|
||||
if (MACH_TYPE_CPX2 == platform_id ||
|
||||
MACH_TYPE_WR21 == platform_id ||
|
||||
MACH_TYPE_CCMX51 == platform_id ||
|
||||
MACH_TYPE_CCMX51JS == platform_id ||
|
||||
MACH_TYPE_CCWMX51 == platform_id ||
|
||||
MACH_TYPE_CCWMX51JS == platform_id ||
|
||||
MACH_TYPE_CCIMX51 == platform_id ||
|
||||
MACH_TYPE_CCIMX51JS == platform_id ||
|
||||
MACH_TYPE_CCMX53 == platform_id ||
|
||||
MACH_TYPE_CCMX53JS == platform_id ||
|
||||
MACH_TYPE_CCWMX53 == platform_id ||
|
||||
MACH_TYPE_CCWMX53JS == platform_id ||
|
||||
MACH_TYPE_CCIMX53 == platform_id ||
|
||||
MACH_TYPE_CCIMX53JS == platform_id ||
|
||||
MACH_TYPE_CCARDMX28 == platform_id ||
|
||||
MACH_TYPE_CCARDMX28JS == platform_id ||
|
||||
MACH_TYPE_CCARDWMX28 == platform_id ||
|
||||
MACH_TYPE_CCARDWMX28JS == platform_id ||
|
||||
MACH_TYPE_CCARDIMX28 == platform_id ||
|
||||
MACH_TYPE_CCARDIMX28JS == platform_id) {
|
||||
return 1;
|
||||
if (platform_id != -1) {
|
||||
/* The following platforms require atomic access to NAND OOB */
|
||||
if (MACH_TYPE_CPX2 == platform_id ||
|
||||
MACH_TYPE_WR21 == platform_id ||
|
||||
MACH_TYPE_CCMX51 == platform_id ||
|
||||
MACH_TYPE_CCMX51JS == platform_id ||
|
||||
MACH_TYPE_CCWMX51 == platform_id ||
|
||||
MACH_TYPE_CCWMX51JS == platform_id ||
|
||||
MACH_TYPE_CCIMX51 == platform_id ||
|
||||
MACH_TYPE_CCIMX51JS == platform_id ||
|
||||
MACH_TYPE_CCMX53 == platform_id ||
|
||||
MACH_TYPE_CCMX53JS == platform_id ||
|
||||
MACH_TYPE_CCWMX53 == platform_id ||
|
||||
MACH_TYPE_CCWMX53JS == platform_id ||
|
||||
MACH_TYPE_CCIMX53 == platform_id ||
|
||||
MACH_TYPE_CCIMX53JS == platform_id ||
|
||||
MACH_TYPE_CCARDMX28 == platform_id ||
|
||||
MACH_TYPE_CCARDMX28JS == platform_id ||
|
||||
MACH_TYPE_CCARDWMX28 == platform_id ||
|
||||
MACH_TYPE_CCARDWMX28JS == platform_id ||
|
||||
MACH_TYPE_CCARDIMX28 == platform_id ||
|
||||
MACH_TYPE_CCARDIMX28JS == platform_id)
|
||||
return 1;
|
||||
} else {
|
||||
/*
|
||||
* Workaround to detect is_nand_oob_atomic in ccardimx28 using
|
||||
* linux 3.x
|
||||
* TODO: generalize this.
|
||||
*/
|
||||
char *platform_name = get_platform_name_from_fdt();
|
||||
if (platform_name && !strcmp(platform_name, "ccardimx28"))
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
|
|||
Loading…
Reference in New Issue