lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <c1c01965-ac44-4d8e-aff1-3f6169bdd3cf@csgroup.eu>
Date: Sat, 16 Nov 2024 17:00:14 +0100
From: Christophe Leroy <christophe.leroy@...roup.eu>
To: Michael Ellerman <mpe@...erman.id.au>, linuxppc-dev@...ts.ozlabs.org
Cc: linux-kernel@...r.kernel.org, geert@...ux-m68k.org, arnd@...db.de
Subject: Re: [RFC PATCH 08/10] macintosh: Remove ADB_MACIO



Le 14/11/2024 à 14:11, Michael Ellerman a écrit :
> The macio-adb driver depends on PPC_CHRP, which has been removed, remove
> the driver also.
> 
> Signed-off-by: Michael Ellerman <mpe@...erman.id.au>
> ---
>   drivers/macintosh/Kconfig     |   9 --
>   drivers/macintosh/Makefile    |   1 -
>   drivers/macintosh/adb.c       |   4 -
>   drivers/macintosh/macio-adb.c | 288 ----------------------------------
>   4 files changed, 302 deletions(-)
>   delete mode 100644 drivers/macintosh/macio-adb.c

What about:

drivers/macintosh/adb.c:        if (!machine_is(chrp) && 
!machine_is(powermac))
drivers/macintosh/adbhid.c:     if (!machine_is(chrp) && 
!machine_is(powermac))

Christophe

> 
> diff --git a/drivers/macintosh/Kconfig b/drivers/macintosh/Kconfig
> index fb38f684444f..aebe7ca50e59 100644
> --- a/drivers/macintosh/Kconfig
> +++ b/drivers/macintosh/Kconfig
> @@ -135,15 +135,6 @@ config PMAC_BACKLIGHT_LEGACY
>   	  programs which use this old interface. New and updated programs
>   	  should use the backlight classes in sysfs.
>   
> -config ADB_MACIO
> -	bool "Include MacIO (CHRP) ADB driver"
> -	depends on ADB && PPC_CHRP && !PPC_PMAC64
> -	help
> -	  Say Y here to include direct support for the ADB controller in the
> -	  Hydra chip used on PowerPC Macintoshes of the CHRP type.  (The Hydra
> -	  also includes a MESH II SCSI controller, DBDMA controller, VIA chip,
> -	  OpenPIC controller and two RS422/Geoports.)
> -
>   config INPUT_ADBHID
>   	bool "Support for ADB input devices (keyboard, mice, ...)"
>   	depends on ADB && INPUT=y
> diff --git a/drivers/macintosh/Makefile b/drivers/macintosh/Makefile
> index 712edcb3e0b0..efecf2c20af3 100644
> --- a/drivers/macintosh/Makefile
> +++ b/drivers/macintosh/Makefile
> @@ -23,7 +23,6 @@ obj-$(CONFIG_PMAC_SMU)		+= smu.o
>   obj-$(CONFIG_ADB)		+= adb.o
>   obj-$(CONFIG_ADB_MACII)		+= via-macii.o
>   obj-$(CONFIG_ADB_IOP)		+= adb-iop.o
> -obj-$(CONFIG_ADB_MACIO)		+= macio-adb.o
>   
>   obj-$(CONFIG_THERM_WINDTUNNEL)	+= therm_windtunnel.o
>   obj-$(CONFIG_THERM_ADT746X)	+= therm_adt746x.o
> diff --git a/drivers/macintosh/adb.c b/drivers/macintosh/adb.c
> index 88adee42ba82..f1186ce04167 100644
> --- a/drivers/macintosh/adb.c
> +++ b/drivers/macintosh/adb.c
> @@ -52,7 +52,6 @@ extern struct adb_driver via_macii_driver;
>   extern struct adb_driver via_cuda_driver;
>   extern struct adb_driver adb_iop_driver;
>   extern struct adb_driver via_pmu_driver;
> -extern struct adb_driver macio_adb_driver;
>   
>   static DEFINE_MUTEX(adb_mutex);
>   static struct adb_driver *adb_driver_list[] = {
> @@ -67,9 +66,6 @@ static struct adb_driver *adb_driver_list[] = {
>   #endif
>   #ifdef CONFIG_ADB_PMU
>   	&via_pmu_driver,
> -#endif
> -#ifdef CONFIG_ADB_MACIO
> -	&macio_adb_driver,
>   #endif
>   	NULL
>   };
> diff --git a/drivers/macintosh/macio-adb.c b/drivers/macintosh/macio-adb.c
> deleted file mode 100644
> index 19c63959ebed..000000000000
> --- a/drivers/macintosh/macio-adb.c
> +++ /dev/null
> @@ -1,288 +0,0 @@
> -// SPDX-License-Identifier: GPL-2.0
> -/*
> - * Driver for the ADB controller in the Mac I/O (Hydra) chip.
> - */
> -#include <linux/types.h>
> -#include <linux/errno.h>
> -#include <linux/kernel.h>
> -#include <linux/delay.h>
> -#include <linux/spinlock.h>
> -#include <linux/interrupt.h>
> -#include <linux/pgtable.h>
> -#include <linux/of.h>
> -#include <linux/of_address.h>
> -#include <linux/of_irq.h>
> -#include <linux/adb.h>
> -
> -#include <asm/io.h>
> -#include <asm/hydra.h>
> -#include <asm/irq.h>
> -#include <linux/init.h>
> -#include <linux/ioport.h>
> -
> -struct preg {
> -	unsigned char r;
> -	char pad[15];
> -};
> -
> -struct adb_regs {
> -	struct preg intr;
> -	struct preg data[9];
> -	struct preg intr_enb;
> -	struct preg dcount;
> -	struct preg error;
> -	struct preg ctrl;
> -	struct preg autopoll;
> -	struct preg active_hi;
> -	struct preg active_lo;
> -	struct preg test;
> -};
> -
> -/* Bits in intr and intr_enb registers */
> -#define DFB	1		/* data from bus */
> -#define TAG	2		/* transfer access grant */
> -
> -/* Bits in dcount register */
> -#define HMB	0x0f		/* how many bytes */
> -#define APD	0x10		/* auto-poll data */
> -
> -/* Bits in error register */
> -#define NRE	1		/* no response error */
> -#define DLE	2		/* data lost error */
> -
> -/* Bits in ctrl register */
> -#define TAR	1		/* transfer access request */
> -#define DTB	2		/* data to bus */
> -#define CRE	4		/* command response expected */
> -#define ADB_RST	8		/* ADB reset */
> -
> -/* Bits in autopoll register */
> -#define APE	1		/* autopoll enable */
> -
> -static volatile struct adb_regs __iomem *adb;
> -static struct adb_request *current_req, *last_req;
> -static DEFINE_SPINLOCK(macio_lock);
> -
> -static int macio_probe(void);
> -static int macio_init(void);
> -static irqreturn_t macio_adb_interrupt(int irq, void *arg);
> -static int macio_send_request(struct adb_request *req, int sync);
> -static int macio_adb_autopoll(int devs);
> -static void macio_adb_poll(void);
> -static int macio_adb_reset_bus(void);
> -
> -struct adb_driver macio_adb_driver = {
> -	.name         = "MACIO",
> -	.probe        = macio_probe,
> -	.init         = macio_init,
> -	.send_request = macio_send_request,
> -	.autopoll     = macio_adb_autopoll,
> -	.poll         = macio_adb_poll,
> -	.reset_bus    = macio_adb_reset_bus,
> -};
> -
> -int macio_probe(void)
> -{
> -	struct device_node *np __free(device_node) =
> -		of_find_compatible_node(NULL, "adb", "chrp,adb0");
> -
> -	if (np)
> -		return 0;
> -
> -	return -ENODEV;
> -}
> -
> -int macio_init(void)
> -{
> -	struct device_node *adbs __free(device_node) =
> -		of_find_compatible_node(NULL, "adb", "chrp,adb0");
> -	struct resource r;
> -	unsigned int irq;
> -
> -	if (!adbs)
> -		return -ENXIO;
> -
> -	if (of_address_to_resource(adbs, 0, &r))
> -		return -ENXIO;
> -
> -	adb = ioremap(r.start, sizeof(struct adb_regs));
> -	if (!adb)
> -		return -ENOMEM;
> -
> -
> -	out_8(&adb->ctrl.r, 0);
> -	out_8(&adb->intr.r, 0);
> -	out_8(&adb->error.r, 0);
> -	out_8(&adb->active_hi.r, 0xff); /* for now, set all devices active */
> -	out_8(&adb->active_lo.r, 0xff);
> -	out_8(&adb->autopoll.r, APE);
> -
> -	irq = irq_of_parse_and_map(adbs, 0);
> -	if (request_irq(irq, macio_adb_interrupt, 0, "ADB", (void *)0)) {
> -		iounmap(adb);
> -		printk(KERN_ERR "ADB: can't get irq %d\n", irq);
> -		return -EAGAIN;
> -	}
> -	out_8(&adb->intr_enb.r, DFB | TAG);
> -
> -	printk("adb: mac-io driver 1.0 for unified ADB\n");
> -
> -	return 0;
> -}
> -
> -static int macio_adb_autopoll(int devs)
> -{
> -	unsigned long flags;
> -	
> -	spin_lock_irqsave(&macio_lock, flags);
> -	out_8(&adb->active_hi.r, devs >> 8);
> -	out_8(&adb->active_lo.r, devs);
> -	out_8(&adb->autopoll.r, devs? APE: 0);
> -	spin_unlock_irqrestore(&macio_lock, flags);
> -	return 0;
> -}
> -
> -static int macio_adb_reset_bus(void)
> -{
> -	unsigned long flags;
> -	int timeout = 1000000;
> -
> -	/* Hrm... we may want to not lock interrupts for so
> -	 * long ... oh well, who uses that chip anyway ? :)
> -	 * That function will be seldom used during boot
> -	 * on rare machines, so...
> -	 */
> -	spin_lock_irqsave(&macio_lock, flags);
> -	out_8(&adb->ctrl.r, in_8(&adb->ctrl.r) | ADB_RST);
> -	while ((in_8(&adb->ctrl.r) & ADB_RST) != 0) {
> -		if (--timeout == 0) {
> -			out_8(&adb->ctrl.r, in_8(&adb->ctrl.r) & ~ADB_RST);
> -			spin_unlock_irqrestore(&macio_lock, flags);
> -			return -1;
> -		}
> -	}
> -	spin_unlock_irqrestore(&macio_lock, flags);
> -	return 0;
> -}
> -
> -/* Send an ADB command */
> -static int macio_send_request(struct adb_request *req, int sync)
> -{
> -	unsigned long flags;
> -	int i;
> -	
> -	if (req->data[0] != ADB_PACKET)
> -		return -EINVAL;
> -	
> -	for (i = 0; i < req->nbytes - 1; ++i)
> -		req->data[i] = req->data[i+1];
> -	--req->nbytes;
> -	
> -	req->next = NULL;
> -	req->sent = 0;
> -	req->complete = 0;
> -	req->reply_len = 0;
> -
> -	spin_lock_irqsave(&macio_lock, flags);
> -	if (current_req) {
> -		last_req->next = req;
> -		last_req = req;
> -	} else {
> -		current_req = last_req = req;
> -		out_8(&adb->ctrl.r, in_8(&adb->ctrl.r) | TAR);
> -	}
> -	spin_unlock_irqrestore(&macio_lock, flags);
> -	
> -	if (sync) {
> -		while (!req->complete)
> -			macio_adb_poll();
> -	}
> -
> -	return 0;
> -}
> -
> -static irqreturn_t macio_adb_interrupt(int irq, void *arg)
> -{
> -	int i, n, err;
> -	struct adb_request *req = NULL;
> -	unsigned char ibuf[16];
> -	int ibuf_len = 0;
> -	int complete = 0;
> -	int autopoll = 0;
> -	int handled = 0;
> -
> -	spin_lock(&macio_lock);
> -	if (in_8(&adb->intr.r) & TAG) {
> -		handled = 1;
> -		req = current_req;
> -		if (req) {
> -			/* put the current request in */
> -			for (i = 0; i < req->nbytes; ++i)
> -				out_8(&adb->data[i].r, req->data[i]);
> -			out_8(&adb->dcount.r, req->nbytes & HMB);
> -			req->sent = 1;
> -			if (req->reply_expected) {
> -				out_8(&adb->ctrl.r, DTB + CRE);
> -			} else {
> -				out_8(&adb->ctrl.r, DTB);
> -				current_req = req->next;
> -				complete = 1;
> -				if (current_req)
> -					out_8(&adb->ctrl.r, in_8(&adb->ctrl.r) | TAR);
> -			}
> -		}
> -		out_8(&adb->intr.r, 0);
> -	}
> -
> -	if (in_8(&adb->intr.r) & DFB) {
> -		handled = 1;
> -		err = in_8(&adb->error.r);
> -		if (current_req && current_req->sent) {
> -			/* this is the response to a command */
> -			req = current_req;
> -			if (err == 0) {
> -				req->reply_len = in_8(&adb->dcount.r) & HMB;
> -				for (i = 0; i < req->reply_len; ++i)
> -					req->reply[i] = in_8(&adb->data[i].r);
> -			}
> -			current_req = req->next;
> -			complete = 1;
> -			if (current_req)
> -				out_8(&adb->ctrl.r, in_8(&adb->ctrl.r) | TAR);
> -		} else if (err == 0) {
> -			/* autopoll data */
> -			n = in_8(&adb->dcount.r) & HMB;
> -			for (i = 0; i < n; ++i)
> -				ibuf[i] = in_8(&adb->data[i].r);
> -			ibuf_len = n;
> -			autopoll = (in_8(&adb->dcount.r) & APD) != 0;
> -		}
> -		out_8(&adb->error.r, 0);
> -		out_8(&adb->intr.r, 0);
> -	}
> -	spin_unlock(&macio_lock);
> -	if (complete && req) {
> -	    void (*done)(struct adb_request *) = req->done;
> -	    mb();
> -	    req->complete = 1;
> -	    /* Here, we assume that if the request has a done member, the
> -    	     * struct request will survive to setting req->complete to 1
> -	     */
> -	    if (done)
> -		(*done)(req);
> -	}
> -	if (ibuf_len)
> -		adb_input(ibuf, ibuf_len, autopoll);
> -
> -	return IRQ_RETVAL(handled);
> -}
> -
> -static void macio_adb_poll(void)
> -{
> -	unsigned long flags;
> -
> -	local_irq_save(flags);
> -	if (in_8(&adb->intr.r) != 0)
> -		macio_adb_interrupt(0, NULL);
> -	local_irq_restore(flags);
> -}

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ