1*4fe996c2SAndrew Jeffery // SPDX-License-Identifier: Apache-2.0
2*4fe996c2SAndrew Jeffery // Copyright (C) 2018 IBM Corp.
326b3567eSAndrew Jeffery
426b3567eSAndrew Jeffery #include <assert.h>
526b3567eSAndrew Jeffery #include <stdio.h>
626b3567eSAndrew Jeffery #include <stdlib.h>
726b3567eSAndrew Jeffery #include <sys/ioctl.h>
826b3567eSAndrew Jeffery #include <sys/mman.h>
926b3567eSAndrew Jeffery #include <unistd.h>
1026b3567eSAndrew Jeffery
1126b3567eSAndrew Jeffery #include "mbox.h"
1226b3567eSAndrew Jeffery #include "mboxd_flash.h"
1326b3567eSAndrew Jeffery
1426b3567eSAndrew Jeffery #include "test/tmpf.h"
1526b3567eSAndrew Jeffery
1626b3567eSAndrew Jeffery struct tmpf _tmp, *tmp = &_tmp;
1726b3567eSAndrew Jeffery
cleanup(void)1826b3567eSAndrew Jeffery void cleanup(void)
1926b3567eSAndrew Jeffery {
2026b3567eSAndrew Jeffery tmpf_destroy(tmp);
2126b3567eSAndrew Jeffery }
2226b3567eSAndrew Jeffery
get_dev_mtd(void)2326b3567eSAndrew Jeffery char *get_dev_mtd(void)
2426b3567eSAndrew Jeffery {
2526b3567eSAndrew Jeffery int rc;
2626b3567eSAndrew Jeffery
27c3144042SAndrew Jeffery rc = tmpf_init(tmp, "flash-store.XXXXXX");
2826b3567eSAndrew Jeffery if (rc < 0)
2926b3567eSAndrew Jeffery return NULL;
3026b3567eSAndrew Jeffery
3126b3567eSAndrew Jeffery return strdup(tmp->path);
3226b3567eSAndrew Jeffery }
3326b3567eSAndrew Jeffery
3426b3567eSAndrew Jeffery #define MEM_SIZE 3
3526b3567eSAndrew Jeffery #define ERASE_SIZE 1
3626b3567eSAndrew Jeffery
ioctl(int fd,unsigned long request,...)3726b3567eSAndrew Jeffery int ioctl(int fd, unsigned long request, ...)
3826b3567eSAndrew Jeffery {
3926b3567eSAndrew Jeffery va_list ap;
4026b3567eSAndrew Jeffery
4126b3567eSAndrew Jeffery if (request != MEMGETINFO)
4226b3567eSAndrew Jeffery return -1;
4326b3567eSAndrew Jeffery
4426b3567eSAndrew Jeffery struct mtd_info_user *info;
4526b3567eSAndrew Jeffery
4626b3567eSAndrew Jeffery va_start(ap, request);
4726b3567eSAndrew Jeffery info = va_arg(ap, struct mtd_info_user *);
4826b3567eSAndrew Jeffery info->size = MEM_SIZE;
4926b3567eSAndrew Jeffery info->erasesize = ERASE_SIZE;
5026b3567eSAndrew Jeffery va_end(ap);
5126b3567eSAndrew Jeffery
5226b3567eSAndrew Jeffery return 0;
5326b3567eSAndrew Jeffery }
5426b3567eSAndrew Jeffery
main(void)5526b3567eSAndrew Jeffery int main(void)
5626b3567eSAndrew Jeffery {
5726b3567eSAndrew Jeffery struct mbox_context _context, *context = &_context;
5826b3567eSAndrew Jeffery char src[MEM_SIZE];
5926b3567eSAndrew Jeffery uint8_t *map;
6026b3567eSAndrew Jeffery int rc;
6126b3567eSAndrew Jeffery
6226b3567eSAndrew Jeffery atexit(cleanup);
6326b3567eSAndrew Jeffery
646f3197dfSSuraj Jitindar Singh mbox_vlog = &mbox_log_console;
656f3197dfSSuraj Jitindar Singh
6626b3567eSAndrew Jeffery rc = init_flash_dev(context);
6726b3567eSAndrew Jeffery assert(rc == 0);
6826b3567eSAndrew Jeffery
6926b3567eSAndrew Jeffery map = mmap(NULL, MEM_SIZE, PROT_READ, MAP_PRIVATE, tmp->fd, 0);
7026b3567eSAndrew Jeffery assert(map != MAP_FAILED);
7126b3567eSAndrew Jeffery
7226b3567eSAndrew Jeffery memset(src, 0xaa, sizeof(src));
7326b3567eSAndrew Jeffery rc = write_flash(context, 0, src, sizeof(src));
7426b3567eSAndrew Jeffery assert(rc == 0);
7526b3567eSAndrew Jeffery rc = memcmp(src, map, sizeof(src));
7626b3567eSAndrew Jeffery assert(rc == 0);
7726b3567eSAndrew Jeffery
7826b3567eSAndrew Jeffery memset(src, 0x55, sizeof(src));
7926b3567eSAndrew Jeffery rc = write_flash(context, 0, src, sizeof(src));
8026b3567eSAndrew Jeffery assert(rc == 0);
8126b3567eSAndrew Jeffery rc = memcmp(src, map, sizeof(src));
8226b3567eSAndrew Jeffery assert(rc == 0);
8326b3567eSAndrew Jeffery
8426b3567eSAndrew Jeffery src[0] = 0xff;
8526b3567eSAndrew Jeffery rc = write_flash(context, 0, src, 1);
8626b3567eSAndrew Jeffery assert(rc == 0);
8726b3567eSAndrew Jeffery rc = memcmp(src, map, sizeof(src));
8826b3567eSAndrew Jeffery assert(rc == 0);
8926b3567eSAndrew Jeffery
9026b3567eSAndrew Jeffery src[1] = 0xff;
9126b3567eSAndrew Jeffery rc = write_flash(context, 1, &src[1], 1);
9226b3567eSAndrew Jeffery assert(rc == 0);
9326b3567eSAndrew Jeffery rc = memcmp(src, map, sizeof(src));
9426b3567eSAndrew Jeffery assert(rc == 0);
9526b3567eSAndrew Jeffery
9626b3567eSAndrew Jeffery src[2] = 0xff;
9726b3567eSAndrew Jeffery rc = write_flash(context, 2, &src[2], 1);
9826b3567eSAndrew Jeffery assert(rc == 0);
9926b3567eSAndrew Jeffery rc = memcmp(src, map, sizeof(src));
10026b3567eSAndrew Jeffery assert(rc == 0);
10126b3567eSAndrew Jeffery
10226b3567eSAndrew Jeffery free_flash_dev(context);
10326b3567eSAndrew Jeffery
10426b3567eSAndrew Jeffery return rc;
10526b3567eSAndrew Jeffery }
106