#include "imp.h"
#include "arm_io.h"
-#include <target/armv4_5.h>
+#include <target/arm.h>
struct orion_nand_controller
{
- struct target *target;
-
struct arm_nand_data io;
uint32_t cmd;
static int orion_nand_command(struct nand_device *nand, uint8_t command)
{
struct orion_nand_controller *hw = nand->controller_priv;
- struct target *target = hw->target;
+ struct target *target = nand->target;
CHECK_HALTED;
target_write_u8(target, hw->cmd, command);
static int orion_nand_address(struct nand_device *nand, uint8_t address)
{
struct orion_nand_controller *hw = nand->controller_priv;
- struct target *target = hw->target;
+ struct target *target = nand->target;
CHECK_HALTED;
target_write_u8(target, hw->addr, address);
static int orion_nand_read(struct nand_device *nand, void *data)
{
struct orion_nand_controller *hw = nand->controller_priv;
- struct target *target = hw->target;
+ struct target *target = nand->target;
CHECK_HALTED;
target_read_u8(target, hw->data, data);
static int orion_nand_write(struct nand_device *nand, uint16_t data)
{
struct orion_nand_controller *hw = nand->controller_priv;
- struct target *target = hw->target;
+ struct target *target = nand->target;
CHECK_HALTED;
target_write_u8(target, hw->data, data);
return orion_nand_command(nand, NAND_CMD_RESET);
}
-static int orion_nand_controller_ready(struct nand_device *nand, int timeout)
-{
- return 1;
-}
-
NAND_DEVICE_COMMAND_HANDLER(orion_nand_device_command)
{
struct orion_nand_controller *hw;
uint8_t ale, cle;
if (CMD_ARGC != 3) {
- LOG_ERROR("arguments must be: <target_id> <NAND_address>\n");
- return ERROR_NAND_DEVICE_INVALID;
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
hw = calloc(1, sizeof(*hw));
if (!hw) {
- LOG_ERROR("no memory for nand controller\n");
+ LOG_ERROR("no memory for nand controller");
return ERROR_NAND_DEVICE_INVALID;
}
nand->controller_priv = hw;
- hw->target = get_target(CMD_ARGV[1]);
- if (!hw->target) {
- LOG_ERROR("target '%s' not defined", CMD_ARGV[1]);
- free(hw);
- return ERROR_NAND_DEVICE_INVALID;
- }
COMMAND_PARSE_NUMBER(u32, CMD_ARGV[2], base);
cle = 0;
hw->cmd = base + (1 << cle);
hw->addr = base + (1 << ale);
- hw->io.target = hw->target;
+ hw->io.target = nand->target;
hw->io.data = hw->data;
hw->io.op = ARM_NAND_NONE;
struct nand_flash_controller orion_nand_controller =
{
.name = "orion",
+ .usage = "<target_id> <NAND_address>",
.command = orion_nand_command,
.address = orion_nand_address,
.read_data = orion_nand_read,
.write_data = orion_nand_write,
.write_block_data = orion_nand_fast_block_write,
.reset = orion_nand_reset,
- .controller_ready = orion_nand_controller_ready,
.nand_device_command = orion_nand_device_command,
.init = orion_nand_init,
};