Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2,308 changes: 2,308 additions & 0 deletions arch/m68k-amiga/devs/sagasd/mmakefile

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion arch/m68k-amiga/devs/sagasd/sagasd.conf
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
##begin config
basename SAGASD
version 2.60
version 2.16
libbasetype struct SAGASDBase
sysbase_field sd_ExecBase
seglist_field sd_SegList
Expand Down
172 changes: 79 additions & 93 deletions arch/m68k-amiga/devs/sagasd/sagasd_device.c

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions arch/m68k-amiga/devs/sagasd/sagasd_intern.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@
#include "sdcmd.h"

#define SAGASD_UNITS 2
#define IO_TIMINGLOOP_MSEC 100000
#define IO_TIMINGLOOP_USEC 100000 /* timer tick in microseconds (100 ms) for the SD detect poll */

#define SDU_STACK_SIZE (4096 / sizeof(ULONG))
#define SDU_STACK_SIZE (16384 / sizeof(ULONG))

struct SAGASDBase
{
Expand All @@ -22,7 +22,7 @@ struct SAGASDBase
struct Unit sdu_Unit;
struct Task sdu_Task;
TEXT sdu_Name[6]; /* "SDIOx" */
ULONG sdu_Stack[1024]; /* 4K stack */
ULONG sdu_Stack[SDU_STACK_SIZE]; /* 16K stack (see SDU_STACK_SIZE) */
BOOL sdu_Enabled;

struct sdcmd sdu_SDCmd;
Expand Down
28 changes: 15 additions & 13 deletions arch/m68k-amiga/devs/sagasd/sdcmd.c
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ static void sdcmd_ins_spi1(struct sdcmd *sd, UBYTE *buff, size_t len)
"1: move.b (0xDE0002),(%[buff])+ \n"
"2: dbra %[count],1b \n"
" move.b (0xDE0000),(%[buff])+ \n"
:[count]"+d"(len),[buff]"+a"(buff)::"cc");
:[count]"+d"(len),[buff]"+a"(buff)::"cc","memory");

return;
}
Expand All @@ -168,7 +168,7 @@ static void sdcmd_ins_spi2(struct sdcmd *sd, UBYTE *buff, size_t len)
"1: move.b (0xDE0012),(%[buff])+ \n"
"2: dbra %[count],1b \n"
" move.b (0xDE0010),(%[buff])+ \n"
:[count]"+d"(len),[buff]"+a"(buff)::"cc");
:[count]"+d"(len),[buff]"+a"(buff)::"cc","memory");

return;
}
Expand Down Expand Up @@ -241,6 +241,7 @@ static UBYTE sdcmd_r1a(struct sdcmd *sd)
if (!(r1 & SDERRF_TIMEOUT)) return r1;
}

debug("r1=0x%08lx", r1);
return SDERRF_TIMEOUT;
}

Expand Down Expand Up @@ -348,6 +349,7 @@ UBYTE sdcmd_read_packet(struct sdcmd *sd, UBYTE *buff, int len)
if (i == SDCMD_TIMEOUT)
{
sdcmd_select(sd, FALSE);
debug("SDERRF_TIMEOUT");
return SDERRF_TIMEOUT;
}

Expand Down Expand Up @@ -400,7 +402,7 @@ UBYTE sdcmd_stop_transmission(struct sdcmd *sd)

exit:
sdcmd_select(sd, FALSE);

debug("SDERRF_CRC");
return (i == SDCMD_TIMEOUT) ? SDERRF_TIMEOUT : r1;
}

Expand Down Expand Up @@ -433,6 +435,7 @@ UBYTE sdcmd_write_packet(struct sdcmd *sd, UBYTE token, CONST UBYTE *buff, int l
if ((byte & SDDRS_VALID_MASK) != SDDRS_VALID) {
/* Terminate the read early */
sdcmd_stop_transmission(sd);
debug("SDERRF_CRC");
return SDERRF_CRC;
}

Expand Down Expand Up @@ -521,7 +524,7 @@ UBYTE sdcmd_read_blocks(struct sdcmd *sd, ULONG addr, UBYTE *buff, int blocks)
for (; blocks > 0; addr++, blocks--, buff += SDSIZ_BLOCK) {
r1 = sdcmd_read_packet(sd, buff, SDSIZ_BLOCK);
if (r1) {
//debug("r1=$%02lx", r1);
debug("r1=$%02lx", r1);
/* Terminate the read early */
sdcmd_stop_transmission(sd);
break;
Expand Down Expand Up @@ -591,7 +594,7 @@ UBYTE sdcmd_write_blocks(struct sdcmd *sd, ULONG addr, CONST UBYTE *buff, int bl
break;

/* Reset the retry counter if we wrote a block */
crc_retry = sd->retry.read;
crc_retry = sd->retry.write;
}

sdcmd_select(sd, TRUE);
Expand Down Expand Up @@ -819,8 +822,8 @@ BOOL sdcmd_sw_detect_full(struct sdcmd *sd)
if (info->ocr & SDOCRF_HCS) {
/* SDHC calculation */

/* Bits 68:48 of the CSD */
c_size = bits(&csd[15], 48, 20);
/* Bits 69:48 of the CSD (CSD v2.0 C_SIZE is 22 bits wide) */
c_size = bits(&csd[15], 48, 22);

debug("SDHC-Card info: c_size=%ld | blocks=%ld", c_size, info->blocks);

Expand Down Expand Up @@ -855,12 +858,11 @@ BOOL sdcmd_sw_detect_full(struct sdcmd *sd)

exit:

speed = SDCMD_CLKDIV_FAST;

//speed = SDCMD_CLKDIV_FAST;
// Try setting the card into high speed mode. It's possible to check first, but just trying to set is enough?
// First nibble is Function Group 1 - Access mode / Bus Speed mode; the only thing that applies to us in SPI mode.

sdcmd_send(sd, SDCMD_SWITCH_FUNCTION, 0x80fffff1);
/*sdcmd_send(sd, SDCMD_SWITCH_FUNCTION, 0x80fffff1);
r1 = sdcmd_r1a(sd);
debug("r1=0x%lx", r1);
if (!r1)
Expand All @@ -873,12 +875,12 @@ BOOL sdcmd_sw_detect_full(struct sdcmd *sd)

f1_sel = bits(&cmd6[63], 376, 4);

/* Out of all of the above, just check f1_sel to see if it is what we set it to.*/
// Out of all of the above, just check f1_sel to see if it is what we set it to
if (f1_sel == 1) speed = SDCMD_CLKDIV_FASTER;
}
} */

/* Switch to high speed mode */
sdcmd_clkdiv(sd, speed);
sdcmd_clkdiv(sd, SDCMD_CLKDIV_FASTER);

sdcmd_select(sd, FALSE);

Expand Down
2 changes: 1 addition & 1 deletion arch/m68k-amiga/devs/sagasd/sdcmd.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@

#define SDSIZ_BLOCK 512 /* Block size in bytes */

#define SDCMD_TIMEOUT 100000 /* Times to read for new status */
#define SDCMD_TIMEOUT 1000000 /* Times to read for new status */
#define SDCMD_IDLE_RETRY 100000

#define SDERRF_TIMEOUT (1 << 7)
Expand Down
6 changes: 4 additions & 2 deletions arch/m68k-amiga/hidd/gayle_ata/probe.c
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,8 @@
#define VREG_BOARD_V4SA 0x05 /* Apollo V4 Standalone */
#define VREG_BOARD_V1200 0x06 /* Vampire V2 V1200, for A1200 */
#define VREG_BOARD_V4MC 0x07 /* Apollo V4 Manticore, for A600 */
#define VREG_BOARD_Future 0x08 /* Unknow */
#define VREG_BOARD_V4UNI 0x08 /* Apollo V4 Unicorn, */
#define VREG_BOARD_Future 0x09 /* Unknown */

static UBYTE *getport(struct ata_ProbedBus *ddata, int buscounter)
{
Expand Down Expand Up @@ -96,7 +97,8 @@ static UBYTE *getport(struct ata_ProbedBus *ddata, int buscounter)
||(ApolloBoardID == VREG_BOARD_V600)
||(ApolloBoardID == VREG_BOARD_V1200)
||(ApolloBoardID == VREG_BOARD_V4FB)
||(ApolloBoardID == VREG_BOARD_V4SA))
||(ApolloBoardID == VREG_BOARD_V4SA)
||(ApolloBoardID == VREG_BOARD_V4UNI))
{
ddata->v4 = TRUE;
DINIT(bug("[ATA:Probe] Port = GAYLE_BASE_DA (V4 Fast-IDE)\n");)
Expand Down
8 changes: 4 additions & 4 deletions arch/m68k-amiga/hidd/sagagfx/sagagfx_hw.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,12 @@
#define VREG_BOARD_Unknown 0x00 // Unknown
#define VREG_BOARD_V2_V600 0x01 // V2-V600 (legacy)
#define VREG_BOARD_V2_V500 0x02 // V2-V500 (legacy)
#define VREG_BOARD_V4_V500 0x03 // V4-V500 = FireBird
#define VREG_BOARD_V4_V500 0x03 // V4-V500 = Firebird
#define VREG_BOARD_V4_V1200 0x04 // V4-V1200 = Icedrake
#define VREG_BOARD_V4_SA 0x05 // V4-SA = StandAlone
#define VREG_BOARD_V4_SA 0x05 // V4-SA = Standalone
#define VREG_BOARD_V2_V1200 0x06 // V2-V1200 (legacy)
#define VREG_BOARD_V4_V600 0x07 // V4-V600 = MantiCore
#define VREG_BOARD_Future_1 0x08 // Future
#define VREG_BOARD_V4_V600 0x07 // V4-V600 = Manticore
#define VREG_BOARD_V4_UNI 0x08 // V4-UNI = Unicorn
#define VREG_BOARD_Future_2 0x09 // Future

#define VREG_BOARD 0xDFF3FC // [16-bits] BoardID [HIGH-Byte: MODEL, LOW-Byte: xFREQ]
Expand Down
1 change: 1 addition & 0 deletions arch/m68k-amiga/hidd/sagagfx/sagagfx_init.c
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,7 @@ static int SAGAGfx_Init(LIBBASETYPEPTR LIBBASE)
case VREG_BOARD_V4_V500:
case VREG_BOARD_V4_V1200:
case VREG_BOARD_V4_V600:
case VREG_BOARD_V4_UNI:
// SAGA V4 METHODS
xsd->SAGAGfx_GetPixFmt = SAGAHW_V4_GetPixFmt;
xsd->SAGAGfx_GetModeID = SAGAHW_V4_GetModeID;
Expand Down
9 changes: 5 additions & 4 deletions rom/devs/ata/lowlevel.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,16 @@



#define VREG_BOARD_Unknown 0x00 /* Unknown */
#define VREG_BOARD_Unknown 0x00 /* Unknown, */
#define VREG_BOARD_V600 0x01 /* Vampire V2 V600(+), for A600 */
#define VREG_BOARD_V500 0x02 /* Vampire V2 V500(+), for A500 */
#define VREG_BOARD_V4FB 0x03 /* Apollo V4 FireBird, for A500 */
#define VREG_BOARD_V4ID 0x04 /* Apollo V4 IceDrake, for A1200 */
#define VREG_BOARD_V4FB 0x03 /* Apollo V4 Firebird, for A500 */
#define VREG_BOARD_V4ID 0x04 /* Apollo V4 Icedrake, for A1200 */
#define VREG_BOARD_V4SA 0x05 /* Apollo V4 Standalone */
#define VREG_BOARD_V1200 0x06 /* Vampire V2 V1200, for A1200 */
#define VREG_BOARD_V4MC 0x07 /* Apollo V4 Manticore, for A600 */
#define VREG_BOARD_Future 0x08 /* Unknow */
#define VREG_BOARD_V4UNI 0x08 /* Apollo V4 Unicorn, */
#define VREG_BOARD_Future 0x09 /* Unknown */

static BYTE ata_Identify(struct ata_Unit *unit);
static BYTE ata_ReadSector32(struct ata_Unit *, ULONG, ULONG, APTR, ULONG *);
Expand Down