Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a9a0aff5 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/geert/linux-m68k: (24 commits)
  m68k: amiga - RTC platform device conversion
  m68k: amiga - Parallel port platform device conversion
  m68k: amiga - Serial port platform device conversion
  m68k: amiga - Mouse platform device conversion
  m68k: amiga - Keyboard platform device conversion
  m68k: amiga - Amiga Gayle IDE platform device conversion
  m68k: amiga - A4000T SCSI platform device conversion
  m68k/scsi: a3000 - Do not use legacy Scsi_Host.base
  m68k: amiga - A3000 SCSI platform device conversion
  m68k/scsi: gvp11 - Do not use legacy Scsi_Host.base
  m68k: amiga - GVP Series II SCSI zorro_driver conversion
  m68k/scsi: a2091 - Do not use legacy Scsi_Host.base
  m68k: amiga - A2091/A590 SCSI zorro_driver conversion
  m68k/scsi: mvme147 - Kill obsolete HOSTS_C logic
  m68k/scsi: a3000 - Kill a3000_scsiregs typedef
  m68k/scsi: gvp11 - Kill gvp11_scsiregs typedef
  m68k/scsi: a2091 - Kill a2091_scsiregs typedef
  m68k/scsi: gvp11 - Extract check_wd33c93()
  m68k/scsi: a3000 - Kill static global a3000_host
  m68k/scsi: mvme147 - Kill static global mvme147_host
  ...
parents ade61088 0779c862
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -7,6 +7,7 @@ config M68K
	default y
	select HAVE_AOUT
	select HAVE_IDE
	select GENERIC_ATOMIC64

config MMU
	bool
+0 −174
Original line number Diff line number Diff line
@@ -97,10 +97,6 @@ static void amiga_get_model(char *model);
static void amiga_get_hardware_list(struct seq_file *m);
/* amiga specific timer functions */
static unsigned long amiga_gettimeoffset(void);
static int a3000_hwclk(int, struct rtc_time *);
static int a2000_hwclk(int, struct rtc_time *);
static int amiga_set_clock_mmss(unsigned long);
static unsigned int amiga_get_ss(void);
extern void amiga_mksound(unsigned int count, unsigned int ticks);
static void amiga_reset(void);
extern void amiga_init_sound(void);
@@ -138,10 +134,6 @@ static struct {
	}
};

static struct resource rtc_resource = {
	.start = 0x00dc0000, .end = 0x00dcffff
};

static struct resource ram_resource[NUM_MEMINFO];


@@ -387,15 +379,6 @@ void __init config_amiga(void)
	mach_get_model       = amiga_get_model;
	mach_get_hardware_list = amiga_get_hardware_list;
	mach_gettimeoffset   = amiga_gettimeoffset;
	if (AMIGAHW_PRESENT(A3000_CLK)) {
		mach_hwclk         = a3000_hwclk;
		rtc_resource.name = "A3000 RTC";
		request_resource(&iomem_resource, &rtc_resource);
	} else /* if (AMIGAHW_PRESENT(A2000_CLK)) */ {
		mach_hwclk         = a2000_hwclk;
		rtc_resource.name = "A2000 RTC";
		request_resource(&iomem_resource, &rtc_resource);
	}

	/*
	 * default MAX_DMA=0xffffffff on all machines. If we don't do so, the SCSI
@@ -404,8 +387,6 @@ void __init config_amiga(void)
	 */
	mach_max_dma_address = 0xffffffff;

	mach_set_clock_mmss  = amiga_set_clock_mmss;
	mach_get_ss          = amiga_get_ss;
	mach_reset           = amiga_reset;
#if defined(CONFIG_INPUT_M68K_BEEP) || defined(CONFIG_INPUT_M68K_BEEP_MODULE)
	mach_beep            = amiga_mksound;
@@ -530,161 +511,6 @@ static unsigned long amiga_gettimeoffset(void)
	return ticks + offset;
}

static int a3000_hwclk(int op, struct rtc_time *t)
{
	tod_3000.cntrl1 = TOD3000_CNTRL1_HOLD;

	if (!op) { /* read */
		t->tm_sec  = tod_3000.second1 * 10 + tod_3000.second2;
		t->tm_min  = tod_3000.minute1 * 10 + tod_3000.minute2;
		t->tm_hour = tod_3000.hour1   * 10 + tod_3000.hour2;
		t->tm_mday = tod_3000.day1    * 10 + tod_3000.day2;
		t->tm_wday = tod_3000.weekday;
		t->tm_mon  = tod_3000.month1  * 10 + tod_3000.month2 - 1;
		t->tm_year = tod_3000.year1   * 10 + tod_3000.year2;
		if (t->tm_year <= 69)
			t->tm_year += 100;
	} else {
		tod_3000.second1 = t->tm_sec / 10;
		tod_3000.second2 = t->tm_sec % 10;
		tod_3000.minute1 = t->tm_min / 10;
		tod_3000.minute2 = t->tm_min % 10;
		tod_3000.hour1   = t->tm_hour / 10;
		tod_3000.hour2   = t->tm_hour % 10;
		tod_3000.day1    = t->tm_mday / 10;
		tod_3000.day2    = t->tm_mday % 10;
		if (t->tm_wday != -1)
			tod_3000.weekday = t->tm_wday;
		tod_3000.month1  = (t->tm_mon + 1) / 10;
		tod_3000.month2  = (t->tm_mon + 1) % 10;
		if (t->tm_year >= 100)
			t->tm_year -= 100;
		tod_3000.year1   = t->tm_year / 10;
		tod_3000.year2   = t->tm_year % 10;
	}

	tod_3000.cntrl1 = TOD3000_CNTRL1_FREE;

	return 0;
}

static int a2000_hwclk(int op, struct rtc_time *t)
{
	int cnt = 5;

	tod_2000.cntrl1 = TOD2000_CNTRL1_HOLD;

	while ((tod_2000.cntrl1 & TOD2000_CNTRL1_BUSY) && cnt) {
		tod_2000.cntrl1 &= ~TOD2000_CNTRL1_HOLD;
		udelay(70);
		tod_2000.cntrl1 |= TOD2000_CNTRL1_HOLD;
		--cnt;
	}

	if (!cnt)
		printk(KERN_INFO "hwclk: timed out waiting for RTC (0x%x)\n",
			tod_2000.cntrl1);

	if (!op) { /* read */
		t->tm_sec  = tod_2000.second1     * 10 + tod_2000.second2;
		t->tm_min  = tod_2000.minute1     * 10 + tod_2000.minute2;
		t->tm_hour = (tod_2000.hour1 & 3) * 10 + tod_2000.hour2;
		t->tm_mday = tod_2000.day1        * 10 + tod_2000.day2;
		t->tm_wday = tod_2000.weekday;
		t->tm_mon  = tod_2000.month1      * 10 + tod_2000.month2 - 1;
		t->tm_year = tod_2000.year1       * 10 + tod_2000.year2;
		if (t->tm_year <= 69)
			t->tm_year += 100;

		if (!(tod_2000.cntrl3 & TOD2000_CNTRL3_24HMODE)) {
			if (!(tod_2000.hour1 & TOD2000_HOUR1_PM) && t->tm_hour == 12)
				t->tm_hour = 0;
			else if ((tod_2000.hour1 & TOD2000_HOUR1_PM) && t->tm_hour != 12)
				t->tm_hour += 12;
		}
	} else {
		tod_2000.second1 = t->tm_sec / 10;
		tod_2000.second2 = t->tm_sec % 10;
		tod_2000.minute1 = t->tm_min / 10;
		tod_2000.minute2 = t->tm_min % 10;
		if (tod_2000.cntrl3 & TOD2000_CNTRL3_24HMODE)
			tod_2000.hour1 = t->tm_hour / 10;
		else if (t->tm_hour >= 12)
			tod_2000.hour1 = TOD2000_HOUR1_PM +
				(t->tm_hour - 12) / 10;
		else
			tod_2000.hour1 = t->tm_hour / 10;
		tod_2000.hour2   = t->tm_hour % 10;
		tod_2000.day1    = t->tm_mday / 10;
		tod_2000.day2    = t->tm_mday % 10;
		if (t->tm_wday != -1)
			tod_2000.weekday = t->tm_wday;
		tod_2000.month1  = (t->tm_mon + 1) / 10;
		tod_2000.month2  = (t->tm_mon + 1) % 10;
		if (t->tm_year >= 100)
			t->tm_year -= 100;
		tod_2000.year1   = t->tm_year / 10;
		tod_2000.year2   = t->tm_year % 10;
	}

	tod_2000.cntrl1 &= ~TOD2000_CNTRL1_HOLD;

	return 0;
}

static int amiga_set_clock_mmss(unsigned long nowtime)
{
	short real_seconds = nowtime % 60, real_minutes = (nowtime / 60) % 60;

	if (AMIGAHW_PRESENT(A3000_CLK)) {
		tod_3000.cntrl1 = TOD3000_CNTRL1_HOLD;

		tod_3000.second1 = real_seconds / 10;
		tod_3000.second2 = real_seconds % 10;
		tod_3000.minute1 = real_minutes / 10;
		tod_3000.minute2 = real_minutes % 10;

		tod_3000.cntrl1 = TOD3000_CNTRL1_FREE;
	} else /* if (AMIGAHW_PRESENT(A2000_CLK)) */ {
		int cnt = 5;

		tod_2000.cntrl1 |= TOD2000_CNTRL1_HOLD;

		while ((tod_2000.cntrl1 & TOD2000_CNTRL1_BUSY) && cnt) {
			tod_2000.cntrl1 &= ~TOD2000_CNTRL1_HOLD;
			udelay(70);
			tod_2000.cntrl1 |= TOD2000_CNTRL1_HOLD;
			--cnt;
		}

		if (!cnt)
			printk(KERN_INFO "set_clock_mmss: timed out waiting for RTC (0x%x)\n", tod_2000.cntrl1);

		tod_2000.second1 = real_seconds / 10;
		tod_2000.second2 = real_seconds % 10;
		tod_2000.minute1 = real_minutes / 10;
		tod_2000.minute2 = real_minutes % 10;

		tod_2000.cntrl1 &= ~TOD2000_CNTRL1_HOLD;
	}

	return 0;
}

static unsigned int amiga_get_ss(void)
{
	unsigned int s;

	if (AMIGAHW_PRESENT(A3000_CLK)) {
		tod_3000.cntrl1 = TOD3000_CNTRL1_HOLD;
		s = tod_3000.second1 * 10 + tod_3000.second2;
		tod_3000.cntrl1 = TOD3000_CNTRL1_FREE;
	} else /* if (AMIGAHW_PRESENT(A2000_CLK)) */ {
		s = tod_2000.second1 * 10 + tod_2000.second2;
	}
	return s;
}

static NORET_TYPE void amiga_reset(void)
    ATTRIB_NORET;

+115 −1
Original line number Diff line number Diff line
@@ -11,6 +11,7 @@
#include <linux/zorro.h>

#include <asm/amigahw.h>
#include <asm/amigayle.h>


#ifdef CONFIG_ZORRO
@@ -55,11 +56,77 @@ static int __init amiga_init_bus(void)

subsys_initcall(amiga_init_bus);

#endif /* CONFIG_ZORRO */

static int z_dev_present(zorro_id id)
{
	unsigned int i;

	for (i = 0; i < zorro_num_autocon; i++)
		if (zorro_autocon[i].rom.er_Manufacturer == ZORRO_MANUF(id) &&
		    zorro_autocon[i].rom.er_Product == ZORRO_PROD(id))
			return 1;

	return 0;
}

#else /* !CONFIG_ZORRO */

static inline int z_dev_present(zorro_id id) { return 0; }

#endif /* !CONFIG_ZORRO */


static const struct resource a3000_scsi_resource __initconst = {
	.start	= 0xdd0000,
	.end	= 0xdd00ff,
	.flags	= IORESOURCE_MEM,
};


static const struct resource a4000t_scsi_resource __initconst = {
	.start	= 0xdd0000,
	.end	= 0xdd0fff,
	.flags	= IORESOURCE_MEM,
};


static const struct resource a1200_ide_resource __initconst = {
	.start	= 0xda0000,
	.end	= 0xda1fff,
	.flags	= IORESOURCE_MEM,
};

static const struct gayle_ide_platform_data a1200_ide_pdata __initconst = {
	.base		= 0xda0000,
	.irqport	= 0xda9000,
	.explicit_ack	= 1,
};


static const struct resource a4000_ide_resource __initconst = {
	.start	= 0xdd2000,
	.end	= 0xdd3fff,
	.flags	= IORESOURCE_MEM,
};

static const struct gayle_ide_platform_data a4000_ide_pdata __initconst = {
	.base		= 0xdd2020,
	.irqport	= 0xdd3020,
	.explicit_ack	= 0,
};


static const struct resource amiga_rtc_resource __initconst = {
	.start	= 0x00dc0000,
	.end	= 0x00dcffff,
	.flags	= IORESOURCE_MEM,
};


static int __init amiga_init_devices(void)
{
	struct platform_device *pdev;

	if (!MACH_IS_AMIGA)
		return -ENODEV;

@@ -77,6 +144,53 @@ static int __init amiga_init_devices(void)
	if (AMIGAHW_PRESENT(AMI_FLOPPY))
		platform_device_register_simple("amiga-floppy", -1, NULL, 0);

	if (AMIGAHW_PRESENT(A3000_SCSI))
		platform_device_register_simple("amiga-a3000-scsi", -1,
						&a3000_scsi_resource, 1);

	if (AMIGAHW_PRESENT(A4000_SCSI))
		platform_device_register_simple("amiga-a4000t-scsi", -1,
						&a4000t_scsi_resource, 1);

	if (AMIGAHW_PRESENT(A1200_IDE) ||
	    z_dev_present(ZORRO_PROD_MTEC_VIPER_MK_V_E_MATRIX_530_SCSI_IDE)) {
		pdev = platform_device_register_simple("amiga-gayle-ide", -1,
						       &a1200_ide_resource, 1);
		platform_device_add_data(pdev, &a1200_ide_pdata,
					 sizeof(a1200_ide_pdata));
	}

	if (AMIGAHW_PRESENT(A4000_IDE)) {
		pdev = platform_device_register_simple("amiga-gayle-ide", -1,
						       &a4000_ide_resource, 1);
		platform_device_add_data(pdev, &a4000_ide_pdata,
					 sizeof(a4000_ide_pdata));
	}


	/* other I/O hardware */
	if (AMIGAHW_PRESENT(AMI_KEYBOARD))
		platform_device_register_simple("amiga-keyboard", -1, NULL, 0);

	if (AMIGAHW_PRESENT(AMI_MOUSE))
		platform_device_register_simple("amiga-mouse", -1, NULL, 0);

	if (AMIGAHW_PRESENT(AMI_SERIAL))
		platform_device_register_simple("amiga-serial", -1, NULL, 0);

	if (AMIGAHW_PRESENT(AMI_PARALLEL))
		platform_device_register_simple("amiga-parallel", -1, NULL, 0);


	/* real time clocks */
	if (AMIGAHW_PRESENT(A2000_CLK))
		platform_device_register_simple("rtc-msm6242", -1,
						&amiga_rtc_resource, 1);

	if (AMIGAHW_PRESENT(A3000_CLK))
		platform_device_register_simple("rtc-rp5c01", -1,
						&amiga_rtc_resource, 1);

	return 0;
}

+6 −0
Original line number Diff line number Diff line
@@ -104,4 +104,10 @@ struct GAYLE {
#define GAYLE_CFG_250NS		0x00
#define GAYLE_CFG_720NS		0x0c

struct gayle_ide_platform_data {
	unsigned long base;
	unsigned long irqport;
	int explicit_ack;	/* A1200 IDE needs explicit ack */
};

#endif /* asm-m68k/amigayle.h */
+2 −0
Original line number Diff line number Diff line
@@ -3,3 +3,5 @@
#else
#include "atomic_mm.h"
#endif

#include <asm-generic/atomic64.h>
Loading