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 <errno.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include "digi-platforms.h"
|
#include "digi-platforms.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
|
|
@ -36,9 +37,33 @@ int get_platform_id(void)
|
||||||
id = -1; /* don't care about the error code */
|
id = -1; /* don't care about the error code */
|
||||||
}
|
}
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
|
|
||||||
return id;
|
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
|
* Checks whether platform requires an atomic access to NAND OOB
|
||||||
*/
|
*/
|
||||||
|
|
@ -47,28 +72,38 @@ char is_nand_oob_atomic(void)
|
||||||
int platform_id;
|
int platform_id;
|
||||||
|
|
||||||
platform_id = get_platform_id();
|
platform_id = get_platform_id();
|
||||||
/* The following platforms require atomic access to NAND OOB */
|
if (platform_id != -1) {
|
||||||
if (MACH_TYPE_CPX2 == platform_id ||
|
/* The following platforms require atomic access to NAND OOB */
|
||||||
MACH_TYPE_WR21 == platform_id ||
|
if (MACH_TYPE_CPX2 == platform_id ||
|
||||||
MACH_TYPE_CCMX51 == platform_id ||
|
MACH_TYPE_WR21 == platform_id ||
|
||||||
MACH_TYPE_CCMX51JS == platform_id ||
|
MACH_TYPE_CCMX51 == platform_id ||
|
||||||
MACH_TYPE_CCWMX51 == platform_id ||
|
MACH_TYPE_CCMX51JS == platform_id ||
|
||||||
MACH_TYPE_CCWMX51JS == platform_id ||
|
MACH_TYPE_CCWMX51 == platform_id ||
|
||||||
MACH_TYPE_CCIMX51 == platform_id ||
|
MACH_TYPE_CCWMX51JS == platform_id ||
|
||||||
MACH_TYPE_CCIMX51JS == platform_id ||
|
MACH_TYPE_CCIMX51 == platform_id ||
|
||||||
MACH_TYPE_CCMX53 == platform_id ||
|
MACH_TYPE_CCIMX51JS == platform_id ||
|
||||||
MACH_TYPE_CCMX53JS == platform_id ||
|
MACH_TYPE_CCMX53 == platform_id ||
|
||||||
MACH_TYPE_CCWMX53 == platform_id ||
|
MACH_TYPE_CCMX53JS == platform_id ||
|
||||||
MACH_TYPE_CCWMX53JS == platform_id ||
|
MACH_TYPE_CCWMX53 == platform_id ||
|
||||||
MACH_TYPE_CCIMX53 == platform_id ||
|
MACH_TYPE_CCWMX53JS == platform_id ||
|
||||||
MACH_TYPE_CCIMX53JS == platform_id ||
|
MACH_TYPE_CCIMX53 == platform_id ||
|
||||||
MACH_TYPE_CCARDMX28 == platform_id ||
|
MACH_TYPE_CCIMX53JS == platform_id ||
|
||||||
MACH_TYPE_CCARDMX28JS == platform_id ||
|
MACH_TYPE_CCARDMX28 == platform_id ||
|
||||||
MACH_TYPE_CCARDWMX28 == platform_id ||
|
MACH_TYPE_CCARDMX28JS == platform_id ||
|
||||||
MACH_TYPE_CCARDWMX28JS == platform_id ||
|
MACH_TYPE_CCARDWMX28 == platform_id ||
|
||||||
MACH_TYPE_CCARDIMX28 == platform_id ||
|
MACH_TYPE_CCARDWMX28JS == platform_id ||
|
||||||
MACH_TYPE_CCARDIMX28JS == platform_id) {
|
MACH_TYPE_CCARDIMX28 == platform_id ||
|
||||||
return 1;
|
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;
|
return 0;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue